Commit 9b65affff1eacf75100429cecbc29eaf9fc75de8
1 parent
a3bda7e2
查看车辆视频
Showing
22 changed files
with
444 additions
and
1049 deletions
src/main/java/com/bsth/controller/video/VideoController.java
| @@ -101,15 +101,35 @@ public class VideoController { | @@ -101,15 +101,35 @@ public class VideoController { | ||
| 101 | public Map<String, Object> queryChannels(@PathVariable String carNo) { | 101 | public Map<String, Object> queryChannels(@PathVariable String carNo) { |
| 102 | Map<String, Object> result = new HashMap<>(); | 102 | Map<String, Object> result = new HashMap<>(); |
| 103 | try { | 103 | try { |
| 104 | + | ||
| 105 | + | ||
| 104 | List<Map<String, Object>> videoChannels = videoService.getVideoChannel(carNo); | 106 | List<Map<String, Object>> videoChannels = videoService.getVideoChannel(carNo); |
| 105 | result.put("status", ResponseCode.SUCCESS); | 107 | result.put("status", ResponseCode.SUCCESS); |
| 106 | result.put("data", videoChannels); | 108 | result.put("data", videoChannels); |
| 107 | - result.put("channelImageURL",wvpConfig.getChannelListOfImgURL()); | ||
| 108 | - result.put("wvpPlayURL",wvpConfig.getWvpPlayURL()); | 109 | + result.put("channelImageURL", wvpConfig.getChannelListOfImgURL()); |
| 110 | + result.put("wvpPlayURL", wvpConfig.getWvpPlayURL()); | ||
| 111 | + | ||
| 109 | } catch (Exception e) { | 112 | } catch (Exception e) { |
| 110 | log.error("查询车辆通道异常:[{}]", carNo, e); | 113 | log.error("查询车辆通道异常:[{}]", carNo, e); |
| 111 | result.put("status", ResponseCode.ERROR); | 114 | result.put("status", ResponseCode.ERROR); |
| 112 | } | 115 | } |
| 113 | return result; | 116 | return result; |
| 114 | } | 117 | } |
| 118 | + | ||
| 119 | + @GetMapping("/car/channel/history/{device}/{channel}/{dateStr}") | ||
| 120 | + public Map<String, Object> queryChannelHistoryList(@PathVariable("device") String device, @PathVariable("channel") String channel, @PathVariable("dateStr") String dateStr) { | ||
| 121 | + Map<String, Object> result = new HashMap<>(); | ||
| 122 | + try { | ||
| 123 | + String token = videoService.getToken(); | ||
| 124 | + | ||
| 125 | + List<Map<String, Object>> videoChannels = videoService.getVideoChannelHistoryList(device, channel, dateStr,token); | ||
| 126 | + result.put("status", ResponseCode.SUCCESS); | ||
| 127 | + result.put("data", videoChannels); | ||
| 128 | + result.put("wvpPlayURL",wvpConfig.getWvpPlayURL()); | ||
| 129 | + } catch (Exception e) { | ||
| 130 | + log.error("查询通道历史数据异常:[{}],[{}],[{}]", device, channel, dateStr, e); | ||
| 131 | + result.put("status", ResponseCode.ERROR); | ||
| 132 | + } | ||
| 133 | + return result; | ||
| 134 | + } | ||
| 115 | } | 135 | } |
src/main/java/com/bsth/service/impl/videoimpl/VideoServiceImpl.java
| @@ -22,6 +22,7 @@ import org.apache.http.client.methods.HttpGet; | @@ -22,6 +22,7 @@ import org.apache.http.client.methods.HttpGet; | ||
| 22 | import org.apache.http.client.methods.HttpPost; | 22 | import org.apache.http.client.methods.HttpPost; |
| 23 | import org.apache.http.entity.StringEntity; | 23 | import org.apache.http.entity.StringEntity; |
| 24 | import org.apache.http.impl.client.CloseableHttpClient; | 24 | import org.apache.http.impl.client.CloseableHttpClient; |
| 25 | +import org.geolatte.geom.M; | ||
| 25 | import org.springframework.beans.BeanUtils; | 26 | import org.springframework.beans.BeanUtils; |
| 26 | import org.springframework.beans.factory.annotation.Autowired; | 27 | import org.springframework.beans.factory.annotation.Autowired; |
| 27 | import org.springframework.stereotype.Service; | 28 | import org.springframework.stereotype.Service; |
| @@ -69,6 +70,17 @@ public class VideoServiceImpl implements VideoService { | @@ -69,6 +70,17 @@ public class VideoServiceImpl implements VideoService { | ||
| 69 | return getWvpVideoChannelByCarNo(carNo); | 70 | return getWvpVideoChannelByCarNo(carNo); |
| 70 | } | 71 | } |
| 71 | 72 | ||
| 73 | + @Override | ||
| 74 | + public List<Map<String, Object>> getVideoChannelHistoryList(String device, String channel, String dateStr,String token) throws Exception { | ||
| 75 | + return getVideoChannelHistoryListReq(device, channel, dateStr,token); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @Override | ||
| 79 | + public String getToken() throws Exception { | ||
| 80 | + return getWvpLoginToken(); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + | ||
| 72 | /*** | 84 | /*** |
| 73 | *查询公交公司的数据。 | 85 | *查询公交公司的数据。 |
| 74 | * @author liujun | 86 | * @author liujun |
| @@ -215,7 +227,7 @@ public class VideoServiceImpl implements VideoService { | @@ -215,7 +227,7 @@ public class VideoServiceImpl implements VideoService { | ||
| 215 | String url = StringUtils.replace(wvpConfig.getChannelListOfCarNoURL(), "{carNo}", carNo); | 227 | String url = StringUtils.replace(wvpConfig.getChannelListOfCarNoURL(), "{carNo}", carNo); |
| 216 | try { | 228 | try { |
| 217 | StringBuilder result = get(url, headers); | 229 | StringBuilder result = get(url, headers); |
| 218 | - return (List<Map<String, Object>>) switchWVPResult(result, url); | 230 | + return (List<Map<String, Object>>) switchWVPResult(result, url); |
| 219 | 231 | ||
| 220 | } catch (Exception e) { | 232 | } catch (Exception e) { |
| 221 | log.error("get wvp of channel list error[{}];", url, e); | 233 | log.error("get wvp of channel list error[{}];", url, e); |
| @@ -223,6 +235,36 @@ public class VideoServiceImpl implements VideoService { | @@ -223,6 +235,36 @@ public class VideoServiceImpl implements VideoService { | ||
| 223 | } | 235 | } |
| 224 | } | 236 | } |
| 225 | 237 | ||
| 238 | + private List<Map<String, Object>> getVideoChannelHistoryListReq(String device, String channel, String dateStr,String token) throws Exception { | ||
| 239 | + if (StringUtils.isEmpty(token)) { | ||
| 240 | + log.error("wvp login token is null"); | ||
| 241 | + return Collections.emptyList(); | ||
| 242 | + } | ||
| 243 | + Map<String, Object> headers = new HashMap<>(); | ||
| 244 | + headers.put("Access-Token", token); | ||
| 245 | + | ||
| 246 | + | ||
| 247 | + String url = StringUtils.replace(wvpConfig.getWvpChannelHistoryUrl(), "{device}", device); | ||
| 248 | + url = StringUtils.replace(url, "{channel}", channel); | ||
| 249 | + url = StringUtils.replace(url, "{startTimeStr}", dateStr + "%2000:00:00"); | ||
| 250 | + url = StringUtils.replace(url, "{endTimeStr}", dateStr + "%2023:59:59"); | ||
| 251 | + | ||
| 252 | + try { | ||
| 253 | + StringBuilder result = get(url, headers); | ||
| 254 | + Map<String, Object> resulMap = (Map<String, Object>) switchWVPResult(result, url); | ||
| 255 | + if (MapUtils.isEmpty(resulMap)) { | ||
| 256 | + return Collections.emptyList(); | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + List<Map<String, Object>> recordList = (List<Map<String, Object>>) resulMap.get("recordList"); | ||
| 260 | + | ||
| 261 | + return CollectionUtils.isEmpty(recordList) ? Collections.emptyList() : recordList; | ||
| 262 | + } catch (Exception e) { | ||
| 263 | + log.error("get wvp of channel history list error[{}];", url, e); | ||
| 264 | + throw e; | ||
| 265 | + } | ||
| 266 | + } | ||
| 267 | + | ||
| 226 | public static StringBuilder get(String url, Map<String, Object> headers) throws Exception { | 268 | public static StringBuilder get(String url, Map<String, Object> headers) throws Exception { |
| 227 | CloseableHttpClient httpClient = null; | 269 | CloseableHttpClient httpClient = null; |
| 228 | CloseableHttpResponse response = null; | 270 | CloseableHttpResponse response = null; |
| @@ -284,7 +326,7 @@ public class VideoServiceImpl implements VideoService { | @@ -284,7 +326,7 @@ public class VideoServiceImpl implements VideoService { | ||
| 284 | Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(resultStr); | 326 | Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(resultStr); |
| 285 | Integer code = (Integer) resultMap.get("code"); | 327 | Integer code = (Integer) resultMap.get("code"); |
| 286 | if (Objects.equals(0, code)) { | 328 | if (Objects.equals(0, code)) { |
| 287 | - return resultMap.get("data"); | 329 | + return resultMap.get("data"); |
| 288 | } | 330 | } |
| 289 | } | 331 | } |
| 290 | 332 |
src/main/java/com/bsth/service/impl/videoimpl/WvpConfig.java
| @@ -8,8 +8,8 @@ import org.springframework.stereotype.Component; | @@ -8,8 +8,8 @@ import org.springframework.stereotype.Component; | ||
| 8 | * @author liujun | 8 | * @author liujun |
| 9 | * @date 2024年07月02日 14:30 | 9 | * @date 2024年07月02日 14:30 |
| 10 | */ | 10 | */ |
| 11 | -@Component | ||
| 12 | @Data | 11 | @Data |
| 12 | +@Component | ||
| 13 | public class WvpConfig { | 13 | public class WvpConfig { |
| 14 | @Value("${wvp.login.user}") | 14 | @Value("${wvp.login.user}") |
| 15 | private String userName; | 15 | private String userName; |
| @@ -25,4 +25,7 @@ public class WvpConfig { | @@ -25,4 +25,7 @@ public class WvpConfig { | ||
| 25 | 25 | ||
| 26 | @Value("${wvp.channel.play.url}") | 26 | @Value("${wvp.channel.play.url}") |
| 27 | private String wvpPlayURL; | 27 | private String wvpPlayURL; |
| 28 | + | ||
| 29 | + @Value("${wvp.channel.history.list.url}") | ||
| 30 | + private String wvpChannelHistoryUrl; | ||
| 28 | } | 31 | } |
src/main/java/com/bsth/service/video/VideoService.java
| @@ -19,4 +19,8 @@ public interface VideoService { | @@ -19,4 +19,8 @@ public interface VideoService { | ||
| 19 | List<VideoTree> combinationTree(); | 19 | List<VideoTree> combinationTree(); |
| 20 | 20 | ||
| 21 | List<Map<String, Object>> getVideoChannel(String carNo)throws Exception; | 21 | List<Map<String, Object>> getVideoChannel(String carNo)throws Exception; |
| 22 | + | ||
| 23 | + List<Map<String,Object>> getVideoChannelHistoryList(String device,String channel,String dateStr,String token) throws Exception; | ||
| 24 | + | ||
| 25 | + String getToken() throws Exception; | ||
| 22 | } | 26 | } |
src/main/resources/application-test.properties
| @@ -14,7 +14,7 @@ spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MyS | @@ -14,7 +14,7 @@ spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MyS | ||
| 14 | 14 | ||
| 15 | #DATABASE | 15 | #DATABASE |
| 16 | spring.datasource.driver-class-name= com.mysql.jdbc.Driver | 16 | spring.datasource.driver-class-name= com.mysql.jdbc.Driver |
| 17 | -spring.datasource.url= jdbc:mysql://192.170.100.114/control?useUnicode=true&characterEncoding=utf-8&useSSL=false | 17 | +spring.datasource.url= jdbc:mysql://192.168.168.242/control_pd?useUnicode=true&characterEncoding=utf-8&useSSL=false |
| 18 | spring.datasource.username= root | 18 | spring.datasource.username= root |
| 19 | spring.datasource.password= root2jsp | 19 | spring.datasource.password= root2jsp |
| 20 | spring.datasource.type= com.zaxxer.hikari.HikariDataSource | 20 | spring.datasource.type= com.zaxxer.hikari.HikariDataSource |
| @@ -31,7 +31,7 @@ spring.datasource.hikari.connection-test-query= SELECT 1 | @@ -31,7 +31,7 @@ spring.datasource.hikari.connection-test-query= SELECT 1 | ||
| 31 | spring.datasource.hikari.validation-timeout= 3000 | 31 | spring.datasource.hikari.validation-timeout= 3000 |
| 32 | spring.datasource.hikari.register-mbeans=true | 32 | spring.datasource.hikari.register-mbeans=true |
| 33 | 33 | ||
| 34 | -kafka.use= true | 34 | +kafka.use= false |
| 35 | spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094 | 35 | spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094 |
| 36 | spring.kafka.consumer.group-id= schedule-system-test | 36 | spring.kafka.consumer.group-id= schedule-system-test |
| 37 | spring.kafka.consumer.auto-offset-reset= latest | 37 | spring.kafka.consumer.auto-offset-reset= latest |
| @@ -66,8 +66,16 @@ admin.mail= 3090342880@qq.com | @@ -66,8 +66,16 @@ admin.mail= 3090342880@qq.com | ||
| 66 | enabled.whiteip= false | 66 | enabled.whiteip= false |
| 67 | enabled.authority= false | 67 | enabled.authority= false |
| 68 | 68 | ||
| 69 | -sso.enabled= true | 69 | +sso.enabled= false |
| 70 | sso.systemcode = SYS0023 | 70 | sso.systemcode = SYS0023 |
| 71 | sso.http.url.login= https://112.64.45.51/portal/index.html#/login | 71 | sso.http.url.login= https://112.64.45.51/portal/index.html#/login |
| 72 | sso.http.url.logout= https://112.64.45.51/information/api/v1/logout | 72 | sso.http.url.logout= https://112.64.45.51/information/api/v1/logout |
| 73 | -sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication | ||
| 74 | \ No newline at end of file | 73 | \ No newline at end of file |
| 74 | +sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication | ||
| 75 | + | ||
| 76 | +wvp.login.user=admin | ||
| 77 | +wvo.login.pwd=e9bc0e13a8a16cbb07b175d92a113126 | ||
| 78 | +wvp.login.url=http://127.0.0.1:18080/api/user/login | ||
| 79 | +wvp.channel.list.url=http://127.0.0.1:18080/api/device/query/query/channel/carNo/{carNo} | ||
| 80 | +wvp.channel.list.img.url=http://127.0.0.1:18080/api/device/query/snap/ | ||
| 81 | +wvp.channel.play.url =http://192.168.169.100:1091/rtp/ | ||
| 82 | +wvp.channel.history.list.url=http://127.0.0.1:18080/api/gb_record/query/{device}/{channel}?startTime={startTimeStr}&endTime={endTimeStr} | ||
| 75 | \ No newline at end of file | 83 | \ No newline at end of file |
src/main/resources/static/index.html
| @@ -85,6 +85,7 @@ | @@ -85,6 +85,7 @@ | ||
| 85 | <link | 85 | <link |
| 86 | href="/metronic_v4.5.4/plugins/tipso/css/tipso.css" | 86 | href="/metronic_v4.5.4/plugins/tipso/css/tipso.css" |
| 87 | rel="stylesheet" type="text/css" /> | 87 | rel="stylesheet" type="text/css" /> |
| 88 | + <link href="/metronic_v4.5.4/layui/css/layui.css" rel="stylesheet"> | ||
| 88 | 89 | ||
| 89 | <style type="text/css"> | 90 | <style type="text/css"> |
| 90 | .searchForm { | 91 | .searchForm { |
| @@ -681,5 +682,6 @@ | @@ -681,5 +682,6 @@ | ||
| 681 | <!-- RSA加密 --> | 682 | <!-- RSA加密 --> |
| 682 | <script src="/assets/plugins/jsencrypt.min.js"></script> | 683 | <script src="/assets/plugins/jsencrypt.min.js"></script> |
| 683 | <script src="/assets/js/eventproxy.js"></script> | 684 | <script src="/assets/js/eventproxy.js"></script> |
| 685 | +<script src="/metronic_v4.5.4/layui/layui.js" ></script> | ||
| 684 | </body> | 686 | </body> |
| 685 | </html> | 687 | </html> |
| 686 | \ No newline at end of file | 688 | \ No newline at end of file |
src/main/resources/static/pages/video/css/layui.css renamed to src/main/resources/static/metronic_v4.5.4/layui/css/layui.css
src/main/resources/static/pages/video/font/iconfont.eot renamed to src/main/resources/static/metronic_v4.5.4/layui/font/iconfont.eot
No preview for this file type
src/main/resources/static/pages/video/font/iconfont.svg renamed to src/main/resources/static/metronic_v4.5.4/layui/font/iconfont.svg
src/main/resources/static/pages/video/font/iconfont.ttf renamed to src/main/resources/static/metronic_v4.5.4/layui/font/iconfont.ttf
No preview for this file type
src/main/resources/static/pages/video/font/iconfont.woff renamed to src/main/resources/static/metronic_v4.5.4/layui/font/iconfont.woff
No preview for this file type
src/main/resources/static/pages/video/font/iconfont.woff2 renamed to src/main/resources/static/metronic_v4.5.4/layui/font/iconfont.woff2
No preview for this file type
src/main/resources/static/pages/video/layui.js renamed to src/main/resources/static/metronic_v4.5.4/layui/layui.js
src/main/resources/static/pages/video/bus_info.html deleted
100644 → 0
| 1 | -<div class="page-head"> | ||
| 2 | - <div class="page-title"> | ||
| 3 | - <h1>车辆信息管理</h1> | ||
| 4 | - </div> | ||
| 5 | -</div> | ||
| 6 | - | ||
| 7 | -<ul class="page-breadcrumb breadcrumb"> | ||
| 8 | - <li> | ||
| 9 | - <a href="/pages/home.html" data-pjax>首页</a> | ||
| 10 | - <i class="fa fa-circle"></i> | ||
| 11 | - </li> | ||
| 12 | - <li> | ||
| 13 | - <span class="active">基础信息</span> | ||
| 14 | - <i class="fa fa-circle"></i> | ||
| 15 | - </li> | ||
| 16 | - <li> | ||
| 17 | - <span class="active">车辆信息管理</span> | ||
| 18 | - </li> | ||
| 19 | -</ul> | ||
| 20 | - | ||
| 21 | -<div class="row"> | ||
| 22 | - <div class="col-md-12" ng-controller="BusInfoManageCtrl as ctrl"> | ||
| 23 | - <style> | ||
| 24 | - .dropdown-menu { | ||
| 25 | - border-color: #32c5d2; | ||
| 26 | - } | ||
| 27 | - .btn-group > .dropdown-menu:before { | ||
| 28 | - border-bottom-color: #32c5d2; | ||
| 29 | - } | ||
| 30 | - </style> | ||
| 31 | - | ||
| 32 | - <div class="portlet light bordered"> | ||
| 33 | - <div class="portlet-title"> | ||
| 34 | - <div class="caption font-dark"> | ||
| 35 | - <i class="fa fa-database font-dark"></i> | ||
| 36 | - <span class="caption-subject bold uppercase">车辆信息表</span> | ||
| 37 | - </div> | ||
| 38 | - <div class="actions"> | ||
| 39 | - <!--<a href="javascript:" class="btn blue" ng-click="ctrl.goForm()">--> | ||
| 40 | - <!--<i class="fa fa-plus"></i>--> | ||
| 41 | - <!--添加车辆信息--> | ||
| 42 | - <!--</a>--> | ||
| 43 | - </div> | ||
| 44 | - </div> | ||
| 45 | - | ||
| 46 | - <div class="portlet-body"> | ||
| 47 | - <div ui-view="busInfoManage_list"></div> | ||
| 48 | - </div> | ||
| 49 | - </div> | ||
| 50 | - </div> | ||
| 51 | -</div> | ||
| 52 | - |
src/main/resources/static/pages/video/bus_info_list.html deleted
100644 → 0
| 1 | -<!-- ui-route busInfoManage.list --> | ||
| 2 | -<div ng-controller="BusInfoManageListCtrl as ctrl"> | ||
| 3 | - <div class="fixDiv"> | ||
| 4 | - <table class="table fixTable table-striped table-bordered table-hover table-checkable order-column"> | ||
| 5 | - <thead> | ||
| 6 | - <tr role="row" class="heading"> | ||
| 7 | - <th style="width:70px;">序号</th> | ||
| 8 | - <th style="width: 120px;">车辆编号</th> | ||
| 9 | - <th style="width: 120px;">内部编号</th> | ||
| 10 | - <th style="width: 120px;">设备编号</th> | ||
| 11 | - <th style="width: 120px;">车牌号</th> | ||
| 12 | - <th >所在公司</th> | ||
| 13 | - <th >所在分公司</th> | ||
| 14 | - <th style="width: 60px">电车</th> | ||
| 15 | - <th style="width: 80px;" >状态</th> | ||
| 16 | - <th >操作</th> | ||
| 17 | - </tr> | ||
| 18 | - <tr role="row" class="filter"> | ||
| 19 | - <td></td> | ||
| 20 | - <td> | ||
| 21 | - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carCode_like" placeholder="输入车辆编号..."/> | ||
| 22 | - </td> | ||
| 23 | - <td> | ||
| 24 | - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().insideCode_like" placeholder="输入内部编号..."/> | ||
| 25 | - </td> | ||
| 26 | - <td> | ||
| 27 | - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().equipmentCode_like" placeholder="输入设备编号..."/> | ||
| 28 | - </td> | ||
| 29 | - <td> | ||
| 30 | - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carPlate_like" placeholder="输入车牌号..."/> | ||
| 31 | - </td> | ||
| 32 | - <td> | ||
| 33 | - <sa-Select5 name="gs" | ||
| 34 | - model="ctrl.searchCondition()" | ||
| 35 | - cmaps="{'businessCode_eq': 'businessCode'}" | ||
| 36 | - dcname="businessCode_eq" | ||
| 37 | - icname="businessCode" | ||
| 38 | - dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}" | ||
| 39 | - iterobjname="item" | ||
| 40 | - iterobjexp="item.businessName" | ||
| 41 | - searchph="请输拼音..." | ||
| 42 | - searchexp="this.businessName" | ||
| 43 | - required | ||
| 44 | - > | ||
| 45 | - </sa-Select5> | ||
| 46 | - </td> | ||
| 47 | - <td> | ||
| 48 | - <sa-Select5 name="fgs" | ||
| 49 | - model="ctrl.searchCondition()" | ||
| 50 | - cmaps="{'brancheCompanyCode_eq': 'businessCode'}" | ||
| 51 | - dcname="brancheCompanyCode_eq" | ||
| 52 | - icname="businessCode" | ||
| 53 | - dsparams="{{ {type: 'ajax', param:{'upCode_eq': ctrl.searchCondition().businessCode_eq }, atype:'gs' } | json }}" | ||
| 54 | - iterobjname="item" | ||
| 55 | - iterobjexp="item.businessName" | ||
| 56 | - searchph="请输拼音..." | ||
| 57 | - searchexp="this.businessName" | ||
| 58 | - required | ||
| 59 | - > | ||
| 60 | - </sa-Select5> | ||
| 61 | - </td> | ||
| 62 | - <td> | ||
| 63 | - | ||
| 64 | - </td> | ||
| 65 | - <td> | ||
| 66 | - <label class="checkbox-inline input"> | ||
| 67 | - <input type="checkbox" ng-model="ctrl.searchCondition()['scrapState_eq']" />报废 | ||
| 68 | - </label> | ||
| 69 | - </td> | ||
| 70 | - <td> | ||
| 71 | - <div class="btn-group"> | ||
| 72 | - <button class="btn btn-sm green btn-outline filter-submit margin-bottom" style="margin-right: 0;" | ||
| 73 | - ng-click="ctrl.doPage()"> | ||
| 74 | - <i class="fa fa-search"></i> 搜索</button> | ||
| 75 | - <button class="btn btn-sm green btn-outline filter-submit margin-bottom dropdown-toggle" | ||
| 76 | - data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
| 77 | - <span class="caret"></span> | ||
| 78 | - <span class="sr-only">dropdown</span> | ||
| 79 | - </button> | ||
| 80 | - <ul class="dropdown-menu pull-right"> | ||
| 81 | - <li> | ||
| 82 | - <a href="javascript:" class="tool-action" ng-click="ctrl.customOrder()"> | ||
| 83 | - <i class="fa fa-sort-amount-asc" aria-hidden="true"></i> | ||
| 84 | - 排序选项 | ||
| 85 | - </a> | ||
| 86 | - </li> | ||
| 87 | - </ul> | ||
| 88 | - </div> | ||
| 89 | - | ||
| 90 | - <button class="btn btn-sm red btn-outline filter-cancel" | ||
| 91 | - ng-click="ctrl.reset()"> | ||
| 92 | - <i class="fa fa-times"></i> 重置</button> | ||
| 93 | - </td> | ||
| 94 | - | ||
| 95 | - </tr> | ||
| 96 | - </thead> | ||
| 97 | - <tbody> | ||
| 98 | - <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> | ||
| 99 | - <td> | ||
| 100 | - <div> | ||
| 101 | - <a href="#" | ||
| 102 | - tooltip-animation="false" | ||
| 103 | - tooltip-placement="top" | ||
| 104 | - uib-tooltip="{{'公司/编号:' + info.company + '/' + info.insideCode}}" | ||
| 105 | - tooltip-class="headClass"> | ||
| 106 | - | ||
| 107 | - <i class="fa fa-list-ol" aria-hidden="true"></i> | ||
| 108 | - {{$index + ctrl.page().number * 10 + 1}} | ||
| 109 | - </a> | ||
| 110 | - </div> | ||
| 111 | - </td> | ||
| 112 | - <td> | ||
| 113 | - <span ng-bind="info.carCode"></span> | ||
| 114 | - </td> | ||
| 115 | - <td> | ||
| 116 | - <span ng-bind="info.insideCode"></span> | ||
| 117 | - </td> | ||
| 118 | - <td> | ||
| 119 | - <span ng-bind="info.equipmentCode"></span> | ||
| 120 | - </td> | ||
| 121 | - <td> | ||
| 122 | - <span ng-bind="info.carPlate"></span> | ||
| 123 | - </td> | ||
| 124 | - <td> | ||
| 125 | - <span ng-bind="info.company"></span> | ||
| 126 | - </td> | ||
| 127 | - <td> | ||
| 128 | - <span ng-bind="info.brancheCompany"></span> | ||
| 129 | - </td> | ||
| 130 | - <td> | ||
| 131 | - <span ng-bind="info.sfdc | dict:'truefalseType':'未知' "></span> | ||
| 132 | - </td> | ||
| 133 | - <td> | ||
| 134 | - <span ng-bind="info.scrapState | dict:'truefalseType':'未知' "></span> | ||
| 135 | - </td> | ||
| 136 | - <td> | ||
| 137 | - <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>--> | ||
| 138 | - <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>--> | ||
| 139 | - <a ui-sref="busInfoManage_detail({id: info.id})" class="btn btn-info btn-sm"> 详细 </a> | ||
| 140 | - <!--<a ui-sref="busInfoManage_edit({id: info.id})" class="btn btn-info btn-sm"> 修改 </a>--> | ||
| 141 | - <!--<a sweetalert--> | ||
| 142 | - <!--sweet-options="{title: '是否删除车辆信息?',text: '内部编码:' + info.insideCode + '</br>如果有车辆配置信息关联,会报错,建议不要随便删除!', html: true,type: 'warning',showCancelButton: true,confirmButtonColor: '#DD6B55',confirmButtonText: '是',cancelButtonText: '取消'}"--> | ||
| 143 | - <!--sweet-on-confirm="ctrl.deleteCar(info.id)"--> | ||
| 144 | - <!--class="btn btn-danger btn-sm">删除</a>--> | ||
| 145 | - </td> | ||
| 146 | - </tr> | ||
| 147 | - </tbody> | ||
| 148 | - </table> | ||
| 149 | - </div> | ||
| 150 | - | ||
| 151 | - <div class="pageBar"> | ||
| 152 | - <div class="pageBarLeft"> | ||
| 153 | - {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}} | ||
| 154 | - </div> | ||
| 155 | - | ||
| 156 | - <div class="pageBarRight"> | ||
| 157 | - <uib-pagination total-items="ctrl.page()['totalElements']" | ||
| 158 | - ng-model="ctrl.page()['uiNumber']" | ||
| 159 | - ng-change="ctrl.doPage()" | ||
| 160 | - rotate="false" | ||
| 161 | - max-size="10" | ||
| 162 | - boundary-links="true" | ||
| 163 | - first-text="首页" | ||
| 164 | - previous-text="上一页" | ||
| 165 | - next-text="下一页" | ||
| 166 | - last-text="尾页"> | ||
| 167 | - </uib-pagination> | ||
| 168 | - </div> | ||
| 169 | - </div> | ||
| 170 | - | ||
| 171 | -</div> |
src/main/resources/static/pages/video/bus_info_module.js deleted
100644 → 0
| 1 | -// 车辆基础信息维护 service controller等写在一起 | ||
| 2 | - | ||
| 3 | -angular.module('ScheduleApp').factory( | ||
| 4 | - 'BusInfoManageService', | ||
| 5 | - [ | ||
| 6 | - 'BusInfoManageService_g', | ||
| 7 | - 'UserPrincipal', | ||
| 8 | - function(service, UserPrincipal) { | ||
| 9 | - | ||
| 10 | - /** 当前的查询条件信息 */ | ||
| 11 | - var currentSearchCondition = { | ||
| 12 | - page: 0, | ||
| 13 | - "carCode_like" : "", | ||
| 14 | - "insideCode_like" : "", | ||
| 15 | - "equipmentCode_like" : "", | ||
| 16 | - "carPlate_like" : "" | ||
| 17 | - }; | ||
| 18 | - // 当前查询返回的信息 | ||
| 19 | - var currentPage = { // 后台spring data返回的格式 | ||
| 20 | - totalElements: 0, | ||
| 21 | - number: 0, // 后台返回的页码,spring返回从0开始 | ||
| 22 | - content: [], | ||
| 23 | - | ||
| 24 | - uiNumber: 1, // 页面绑定的页码 | ||
| 25 | - uiFromRecord: 0, // 页面绑定,当前页第几条记录 | ||
| 26 | - uiToRecord: 0 // 页面绑定,当前页到第几条记录 | ||
| 27 | - }; | ||
| 28 | - | ||
| 29 | - // 字段描述 | ||
| 30 | - var columns = [ | ||
| 31 | - {name: "carCode", desc: "车辆编号"}, | ||
| 32 | - {name: "insideCode", desc: "自编号"}, | ||
| 33 | - {name: "equipmentCode", desc: "设备编号"}, | ||
| 34 | - {name: "carPlate", desc: "车牌号"}, | ||
| 35 | - {name: "company", desc: "所在公司"}, | ||
| 36 | - {name: "brancheCompany", desc: "所在分公司"}, | ||
| 37 | - {name: "sfdc", desc: "是否电车"}, | ||
| 38 | - {name: "scrapState", desc: "是否报废"}, | ||
| 39 | - {name: "updateDate", desc: "更新时间"} | ||
| 40 | - ]; | ||
| 41 | - // 排序字段 | ||
| 42 | - var orderColumns = { | ||
| 43 | - order: "carCode", | ||
| 44 | - direction: "ASC" | ||
| 45 | - }; | ||
| 46 | - | ||
| 47 | - // 查询对象 | ||
| 48 | - var queryClass = service.rest; | ||
| 49 | - | ||
| 50 | - return { | ||
| 51 | - getQueryClass: function() { | ||
| 52 | - return queryClass; | ||
| 53 | - }, | ||
| 54 | - getColumns: function() { | ||
| 55 | - return columns; | ||
| 56 | - }, | ||
| 57 | - getOrderColumns: function() { | ||
| 58 | - return orderColumns; | ||
| 59 | - }, | ||
| 60 | - /** | ||
| 61 | - * 获取查询条件信息, | ||
| 62 | - * 用于给controller用来和页面数据绑定。 | ||
| 63 | - */ | ||
| 64 | - getSearchCondition: function() { | ||
| 65 | - currentSearchCondition.page = currentPage.uiNumber - 1; | ||
| 66 | - | ||
| 67 | - if (UserPrincipal.getGsStrs().length > 0) { | ||
| 68 | - currentSearchCondition["cgsbm_in"] = UserPrincipal.getGsStrs().join(","); | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - // 重置排序字段条件 | ||
| 72 | - currentSearchCondition.order = orderColumns.order; | ||
| 73 | - currentSearchCondition.direction = orderColumns.direction; | ||
| 74 | - | ||
| 75 | - return currentSearchCondition; | ||
| 76 | - }, | ||
| 77 | - /** | ||
| 78 | - * 组装查询参数,返回一个promise查询结果。 | ||
| 79 | - * @param params 查询参数 | ||
| 80 | - * @return 返回一个 promise | ||
| 81 | - */ | ||
| 82 | - getPage: function(page) { | ||
| 83 | - if (page) { | ||
| 84 | - currentPage.totalElements = page.totalElements; | ||
| 85 | - currentPage.number = page.number; | ||
| 86 | - currentPage.content = page.content; | ||
| 87 | - | ||
| 88 | - // 计算当前页开始记录,结束记录 | ||
| 89 | - if (page.numberOfElements && page.numberOfElements > 0) { | ||
| 90 | - currentPage.uiFromRecord = page.number * 10 + 1; | ||
| 91 | - currentPage.uiToRecord = page.number * 10 + page.numberOfElements; | ||
| 92 | - } | ||
| 93 | - } | ||
| 94 | - return currentPage; | ||
| 95 | - }, | ||
| 96 | - resetStatus: function() { | ||
| 97 | - currentSearchCondition = {page: 0}; | ||
| 98 | - currentPage = { | ||
| 99 | - totalElements: 0, | ||
| 100 | - number: 0, | ||
| 101 | - content: [], | ||
| 102 | - uiNumber: 1, | ||
| 103 | - uiFromRecord: 0, | ||
| 104 | - uiToRecord: 0 | ||
| 105 | - }; | ||
| 106 | - }, | ||
| 107 | - | ||
| 108 | - /** | ||
| 109 | - * 数据导出。 | ||
| 110 | - * @returns {*|Function|promise|n} | ||
| 111 | - */ | ||
| 112 | - dataExport: function(query) { | ||
| 113 | - if (UserPrincipal.getGsStrsQuery().length > 0) { | ||
| 114 | - return service.dataTools.dataExport( | ||
| 115 | - {'QUERY': query} | ||
| 116 | - ).$promise; | ||
| 117 | - } else { | ||
| 118 | - return null; | ||
| 119 | - } | ||
| 120 | - } | ||
| 121 | - }; | ||
| 122 | - | ||
| 123 | - } | ||
| 124 | - ] | ||
| 125 | -); | ||
| 126 | - | ||
| 127 | -// index.html控制器 | ||
| 128 | -angular.module('ScheduleApp').controller( | ||
| 129 | - 'BusInfoManageCtrl', | ||
| 130 | - [ | ||
| 131 | - 'BusInfoManageService', | ||
| 132 | - '$state', | ||
| 133 | - '$uibModal', | ||
| 134 | - 'FileDownload_g', | ||
| 135 | - 'UserPrincipal', | ||
| 136 | - function(busInfoManageService, $state, $uibModal, fileDownload, UserPrincipal) { | ||
| 137 | - var self = this; | ||
| 138 | - | ||
| 139 | - // 切换到form状态 | ||
| 140 | - self.goForm = function() { | ||
| 141 | - //alert("切换"); | ||
| 142 | - $state.go("busInfoManage_form"); | ||
| 143 | - }; | ||
| 144 | - | ||
| 145 | - // 导入excel | ||
| 146 | - self.importData = function() { | ||
| 147 | - // large方式弹出模态对话框 | ||
| 148 | - var modalInstance = $uibModal.open({ | ||
| 149 | - templateUrl: '/pages/scheduleApp/module/basicInfo/busInfoManage/dataImport.html', | ||
| 150 | - size: "lg", | ||
| 151 | - animation: true, | ||
| 152 | - backdrop: 'static', | ||
| 153 | - resolve: { | ||
| 154 | - // 可以传值给controller | ||
| 155 | - }, | ||
| 156 | - windowClass: 'center-modal', | ||
| 157 | - controller: "BusInfoManageToolsCtrl", | ||
| 158 | - controllerAs: "ctrl", | ||
| 159 | - bindToController: true | ||
| 160 | - }); | ||
| 161 | - modalInstance.result.then( | ||
| 162 | - function() { | ||
| 163 | - console.log("dataImport.html打开"); | ||
| 164 | - }, | ||
| 165 | - function() { | ||
| 166 | - console.log("dataImport.html消失"); | ||
| 167 | - } | ||
| 168 | - ); | ||
| 169 | - }; | ||
| 170 | - | ||
| 171 | - // 导出excel | ||
| 172 | - self.exportData = function() { | ||
| 173 | - // 组装查询条件 | ||
| 174 | - var QUERY = []; | ||
| 175 | - var fgs_query = []; | ||
| 176 | - var i; | ||
| 177 | - for (i in UserPrincipal.getGsStrs()) { | ||
| 178 | - fgs_query.push("'" + UserPrincipal.getGsStrs()[i] + "'"); | ||
| 179 | - } | ||
| 180 | - QUERY.push(" concat(business_code, '_', branche_company_code) in " + "(" + fgs_query.join(",") + ")"); | ||
| 181 | - var key_map = { | ||
| 182 | - "car_code": "carCode_like", | ||
| 183 | - "inside_code": "insideCode_like", | ||
| 184 | - "equipment_code": "equipmentCode_like", | ||
| 185 | - "car_plate": "carPlate_like" | ||
| 186 | - }; | ||
| 187 | - | ||
| 188 | - var key; | ||
| 189 | - var value; | ||
| 190 | - var field; | ||
| 191 | - var condition = busInfoManageService.getSearchCondition(); | ||
| 192 | - for (key in key_map) { | ||
| 193 | - value = condition[key_map[key]]; | ||
| 194 | - if (value !== undefined && value !== "") { | ||
| 195 | - field = key; | ||
| 196 | - QUERY.push(field + " = " + "'" + value + "'"); | ||
| 197 | - } | ||
| 198 | - } | ||
| 199 | - | ||
| 200 | - var p = busInfoManageService.dataExport(QUERY.join(" and ")); | ||
| 201 | - if (p) { | ||
| 202 | - p.then( | ||
| 203 | - function(result) { | ||
| 204 | - fileDownload.downloadFile(result.data, "application/octet-stream", "车辆基础信息.xls"); | ||
| 205 | - }, | ||
| 206 | - function(result) { | ||
| 207 | - console.log("exportData failed:" + result); | ||
| 208 | - } | ||
| 209 | - ); | ||
| 210 | - } | ||
| 211 | - | ||
| 212 | - }; | ||
| 213 | - } | ||
| 214 | - ] | ||
| 215 | -); | ||
| 216 | - | ||
| 217 | -angular.module('ScheduleApp').controller('BusInfoManageToolsCtrl', ['$modalInstance', 'FileUploader', function($modalInstance, FileUploader) { | ||
| 218 | - var self = this; | ||
| 219 | - self.data = "TODO"; | ||
| 220 | - | ||
| 221 | - // 关闭窗口 | ||
| 222 | - self.close = function() { | ||
| 223 | - $modalInstance.dismiss("cancel"); | ||
| 224 | - }; | ||
| 225 | - | ||
| 226 | - self.clearInputFile = function() { | ||
| 227 | - angular.element("input[type='file']").val(null); | ||
| 228 | - }; | ||
| 229 | - | ||
| 230 | - // 上传文件组件 | ||
| 231 | - self.uploader = new FileUploader({ | ||
| 232 | - url: "/cars_sc/uploadAndImportFile", | ||
| 233 | - filters: [] // 用于过滤文件,比如只允许导入excel | ||
| 234 | - }); | ||
| 235 | - self.uploader.onAfterAddingFile = function(fileItem) | ||
| 236 | - { | ||
| 237 | - console.info('onAfterAddingFile', fileItem); | ||
| 238 | - console.log(self.uploader.queue.length); | ||
| 239 | - if (self.uploader.queue.length > 1) | ||
| 240 | - self.uploader.removeFromQueue(0); | ||
| 241 | - }; | ||
| 242 | - self.uploader.onSuccessItem = function(fileItem, response, status, headers) | ||
| 243 | - { | ||
| 244 | - if (response.status == "SUCCESS") { | ||
| 245 | - console.info('onSuccessItem', fileItem, response, status, headers); | ||
| 246 | - } else { | ||
| 247 | - fileItem.isSuccess = false; | ||
| 248 | - fileItem.isCancel = false; | ||
| 249 | - fileItem.isError = true; | ||
| 250 | - | ||
| 251 | - alert(response.msg); | ||
| 252 | - } | ||
| 253 | - | ||
| 254 | - }; | ||
| 255 | - self.uploader.onErrorItem = function(fileItem, response, status, headers) | ||
| 256 | - { | ||
| 257 | - console.info('onErrorItem', fileItem, response, status, headers); | ||
| 258 | - }; | ||
| 259 | - | ||
| 260 | -}]); | ||
| 261 | - | ||
| 262 | -// list.html控制器 | ||
| 263 | -angular.module('ScheduleApp').controller( | ||
| 264 | - 'BusInfoManageListCtrl', | ||
| 265 | - [ | ||
| 266 | - 'BusInfoManageService', | ||
| 267 | - '$uibModal', | ||
| 268 | - function(service, $uibModal) { | ||
| 269 | - var self = this; | ||
| 270 | - var Cars = service.getQueryClass(); | ||
| 271 | - | ||
| 272 | - self.page = function() { | ||
| 273 | - return service.getPage(); | ||
| 274 | - }; | ||
| 275 | - | ||
| 276 | - self.searchCondition = function() { | ||
| 277 | - return service.getSearchCondition(); | ||
| 278 | - }; | ||
| 279 | - | ||
| 280 | - self.doPage = function() { | ||
| 281 | - var result = Cars.list(self.searchCondition(), function() { | ||
| 282 | - if (!result.status) { | ||
| 283 | - service.getPage(result); | ||
| 284 | - } | ||
| 285 | - }); | ||
| 286 | - }; | ||
| 287 | - self.reset = function() { | ||
| 288 | - service.resetStatus(); | ||
| 289 | - var result = Cars.list(self.searchCondition(), function() { | ||
| 290 | - if (!result.status) { | ||
| 291 | - service.getPage(result); | ||
| 292 | - } | ||
| 293 | - }); | ||
| 294 | - }; | ||
| 295 | - | ||
| 296 | - self.deleteCar = function(id) { | ||
| 297 | - Cars.delete({id: id}, function(result) { | ||
| 298 | - if (result.msg) { // 暂时这样做,之后全局拦截 | ||
| 299 | - alert("失败:" + result.msg); | ||
| 300 | - } else { | ||
| 301 | - self.doPage(); | ||
| 302 | - } | ||
| 303 | - }); | ||
| 304 | - }; | ||
| 305 | - | ||
| 306 | - self.doPage(); | ||
| 307 | - | ||
| 308 | - self.customOrder = function() { | ||
| 309 | - // large方式弹出模态对话框 | ||
| 310 | - var modalInstance = $uibModal.open({ | ||
| 311 | - templateUrl: '/pages/scheduleApp/module/basicInfo/busInfoManage/orderOptionOpen.html', | ||
| 312 | - // size: "sm", | ||
| 313 | - animation: true, | ||
| 314 | - backdrop: 'static', | ||
| 315 | - resolve: { | ||
| 316 | - }, | ||
| 317 | - windowClass: 'order-option-modal', | ||
| 318 | - controller: "BusInfoManageListOrderOptionModalInstanceCtrl", | ||
| 319 | - controllerAs: "$ctrl", | ||
| 320 | - bindToController: true | ||
| 321 | - }); | ||
| 322 | - modalInstance.result.then( | ||
| 323 | - function(result) { | ||
| 324 | - console.log("dataImport.html打开"); | ||
| 325 | - }, | ||
| 326 | - function() { | ||
| 327 | - console.log("dataImport.html消失"); | ||
| 328 | - } | ||
| 329 | - ); | ||
| 330 | - }; | ||
| 331 | - } | ||
| 332 | - ] | ||
| 333 | -); | ||
| 334 | - | ||
| 335 | -angular.module('ScheduleApp').controller( | ||
| 336 | - "BusInfoManageListOrderOptionModalInstanceCtrl", | ||
| 337 | - [ | ||
| 338 | - "BusInfoManageService", | ||
| 339 | - "$modalInstance", | ||
| 340 | - function(service, $modalInstance) { | ||
| 341 | - var self = this; | ||
| 342 | - | ||
| 343 | - self.columns = service.getColumns(); | ||
| 344 | - self.orderColumns = service.getOrderColumns(); | ||
| 345 | - | ||
| 346 | - self.confirm = function(result) { | ||
| 347 | - // console.log(result); | ||
| 348 | - // console.log(service.getOrderColumns()); | ||
| 349 | - $modalInstance.dismiss("cancel"); | ||
| 350 | - | ||
| 351 | - } | ||
| 352 | - } | ||
| 353 | - ] | ||
| 354 | -); | ||
| 355 | - | ||
| 356 | -// form.html控制器 | ||
| 357 | -angular.module('ScheduleApp').controller( | ||
| 358 | - 'BusInfoManageFormCtrl', | ||
| 359 | - [ | ||
| 360 | - 'BusInfoManageService', | ||
| 361 | - '$stateParams', | ||
| 362 | - '$state', | ||
| 363 | - 'DataStore', | ||
| 364 | - function(service, $stateParams, $state, DataStore) { | ||
| 365 | - var self = this; | ||
| 366 | - var Cars = service.getQueryClass(); | ||
| 367 | - | ||
| 368 | - // 报废日期 日期控件开关 | ||
| 369 | - self.scrapDateOpen = false; | ||
| 370 | - self.scrapDate_open = function() { | ||
| 371 | - self.scrapDateOpen = true; | ||
| 372 | - }; | ||
| 373 | - | ||
| 374 | - // 启用日期 日期控件开关 | ||
| 375 | - self.openDateOpen = false; | ||
| 376 | - self.openDate_open = function() { | ||
| 377 | - self.openDateOpen = true; | ||
| 378 | - }; | ||
| 379 | - // 取消日期 日期控件开关 | ||
| 380 | - self.closeDateOpen = false; | ||
| 381 | - self.closeDate_open = function() { | ||
| 382 | - self.closeDateOpen = true; | ||
| 383 | - }; | ||
| 384 | - | ||
| 385 | - // 欲保存的busInfo信息,绑定 | ||
| 386 | - self.busInfoForSave = new Cars; | ||
| 387 | - | ||
| 388 | - // 获取传过来的id,有的话就是修改,获取一遍数据 | ||
| 389 | - var id = $stateParams.id; | ||
| 390 | - if (id) { | ||
| 391 | - self.busInfoForSave = Cars.get({id: id}, function() {}); | ||
| 392 | - } | ||
| 393 | - | ||
| 394 | - // 提交方法 | ||
| 395 | - self.submit = function() { | ||
| 396 | - console.log(self.busInfoForSave); | ||
| 397 | - | ||
| 398 | - // // 报废的车辆,修改原来的车辆终端号 | ||
| 399 | - // if (self.busInfoForSave.scrapState == true) { | ||
| 400 | - // self.busInfoForSave.equipmentCode = "BF-" + self.busInfoForSave.equipmentCode; | ||
| 401 | - // self.busInfoForSave.scrapCode = "BF-" + self.busInfoForSave.equipmentCode; | ||
| 402 | - // } | ||
| 403 | - | ||
| 404 | - | ||
| 405 | - // 保存或者更新 | ||
| 406 | - self.busInfoForSave.$save(function() { | ||
| 407 | - DataStore.refreshData("cl"); | ||
| 408 | - $state.go("busInfoManage"); | ||
| 409 | - }); | ||
| 410 | - }; | ||
| 411 | - } | ||
| 412 | - ] | ||
| 413 | -); | ||
| 414 | - | ||
| 415 | -// detail.html控制器 | ||
| 416 | -angular.module('ScheduleApp').controller( | ||
| 417 | - 'BusInfoManageDetailCtrl', | ||
| 418 | - [ | ||
| 419 | - 'BusInfoManageService', | ||
| 420 | - '$stateParams', | ||
| 421 | - function(service, $stateParams) { | ||
| 422 | - var self = this; | ||
| 423 | - var Cars = service.getQueryClass(); | ||
| 424 | - var id = $stateParams.id; | ||
| 425 | - | ||
| 426 | - self.title = ""; | ||
| 427 | - self.busInfoForDetail = {}; | ||
| 428 | - | ||
| 429 | - // 当转向到此页面时,就获取明细信息并绑定 | ||
| 430 | - self.busInfoForDetail = Cars.get({id: id}, function() { | ||
| 431 | - self.title = "车辆 " + self.busInfoForDetail.insideCode + " 详细信息"; | ||
| 432 | - }); | ||
| 433 | - } | ||
| 434 | - ] | ||
| 435 | -); |
src/main/resources/static/pages/video/bus_info_route.js deleted
100644 → 0
| 1 | -// ui route 配置 | ||
| 2 | - | ||
| 3 | -/** 车辆基础信息模块配置route */ | ||
| 4 | -ScheduleApp.config([ | ||
| 5 | - '$stateProvider', | ||
| 6 | - '$urlRouterProvider', | ||
| 7 | - function($stateProvider, $urlRouterProvider) { | ||
| 8 | - // 默认路由 | ||
| 9 | - //$urlRouterProvider.otherwise('/busConfig.html'); | ||
| 10 | - | ||
| 11 | - $stateProvider | ||
| 12 | - .state("busInfoManage", { // index页面 | ||
| 13 | - url: '/busInfoManage', | ||
| 14 | - views: { | ||
| 15 | - "": { | ||
| 16 | - templateUrl: 'pages/scheduleApp/module/basicInfo/busInfoManage/index.html' | ||
| 17 | - }, | ||
| 18 | - "busInfoManage_list@busInfoManage": { | ||
| 19 | - templateUrl: 'pages/scheduleApp/module/basicInfo/busInfoManage/list.html' | ||
| 20 | - } | ||
| 21 | - }, | ||
| 22 | - | ||
| 23 | - resolve: { | ||
| 24 | - deps: ['$ocLazyLoad', function($ocLazyLoad) { | ||
| 25 | - return $ocLazyLoad.load({ | ||
| 26 | - name: 'busInfoManage_module', | ||
| 27 | - insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 | ||
| 28 | - files: [ | ||
| 29 | - "assets/bower_components/angular-ui-select/dist/select.min.css", | ||
| 30 | - "assets/bower_components/angular-ui-select/dist/select.min.js", | ||
| 31 | - "assets/bower_components/angular-file-upload/dist/angular-file-upload.min.js", | ||
| 32 | - "pages/scheduleApp/module/basicInfo/busInfoManage/module.js" | ||
| 33 | - ] | ||
| 34 | - }); | ||
| 35 | - }] | ||
| 36 | - } | ||
| 37 | - }) | ||
| 38 | - .state("busInfoManage_form", { // 添加车辆form | ||
| 39 | - url: '/busInfoManage_form', | ||
| 40 | - views: { | ||
| 41 | - "": {templateUrl: 'pages/scheduleApp/module/basicInfo/busInfoManage/form.html'} | ||
| 42 | - }, | ||
| 43 | - resolve: { | ||
| 44 | - deps: ['$ocLazyLoad', function($ocLazyLoad) { | ||
| 45 | - return $ocLazyLoad.load({ | ||
| 46 | - name: 'busInfoManage_form_module', | ||
| 47 | - insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 | ||
| 48 | - files: [ | ||
| 49 | - "assets/bower_components/angular-ui-select/dist/select.min.css", | ||
| 50 | - "assets/bower_components/angular-ui-select/dist/select.min.js", | ||
| 51 | - "pages/scheduleApp/module/basicInfo/busInfoManage/module.js" | ||
| 52 | - ] | ||
| 53 | - }); | ||
| 54 | - }] | ||
| 55 | - } | ||
| 56 | - }) | ||
| 57 | - .state("busInfoManage_edit", { // 修改车辆form | ||
| 58 | - url: '/busInfoManage_edit/:id', | ||
| 59 | - views: { | ||
| 60 | - "": {templateUrl: 'pages/scheduleApp/module/basicInfo/busInfoManage/edit.html'} | ||
| 61 | - }, | ||
| 62 | - resolve: { | ||
| 63 | - deps: ['$ocLazyLoad', function($ocLazyLoad) { | ||
| 64 | - return $ocLazyLoad.load({ | ||
| 65 | - name: 'busInfoManage_edit_module', | ||
| 66 | - insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 | ||
| 67 | - files: [ | ||
| 68 | - "assets/bower_components/angular-ui-select/dist/select.min.css", | ||
| 69 | - "assets/bower_components/angular-ui-select/dist/select.min.js", | ||
| 70 | - "pages/scheduleApp/module/basicInfo/busInfoManage/module.js" | ||
| 71 | - ] | ||
| 72 | - }); | ||
| 73 | - }] | ||
| 74 | - } | ||
| 75 | - }) | ||
| 76 | - .state("busInfoManage_detail", { // 车辆详细信息 | ||
| 77 | - url: '/busInfoManage_detail/:id', | ||
| 78 | - views: { | ||
| 79 | - "": {templateUrl: 'pages/scheduleApp/module/basicInfo/busInfoManage/detail.html'} | ||
| 80 | - }, | ||
| 81 | - resolve: { | ||
| 82 | - deps: ['$ocLazyLoad', function($ocLazyLoad) { | ||
| 83 | - return $ocLazyLoad.load({ | ||
| 84 | - name: 'busInfoManage_detail_module', | ||
| 85 | - insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置 | ||
| 86 | - files: [ | ||
| 87 | - "pages/scheduleApp/module/basicInfo/busInfoManage/module.js" | ||
| 88 | - ] | ||
| 89 | - }); | ||
| 90 | - }] | ||
| 91 | - } | ||
| 92 | - }) | ||
| 93 | - } | ||
| 94 | -]); | ||
| 95 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/video/test.html deleted
100644 → 0
src/main/resources/static/pages/video/test.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "code": 0, | ||
| 3 | - "count": 1000, | ||
| 4 | - "data": [ | ||
| 5 | - { | ||
| 6 | - "carCode": 1, | ||
| 7 | - "name": "User-1", | ||
| 8 | - "isParent": true | ||
| 9 | - }, | ||
| 10 | - { | ||
| 11 | - "carCode": 9, | ||
| 12 | - "name": "User-9", | ||
| 13 | - "type": 6, | ||
| 14 | - "status": 2, | ||
| 15 | - "score": 58, | ||
| 16 | - "experience": 2414, | ||
| 17 | - "sex": "女", | ||
| 18 | - "city": "宿州市", | ||
| 19 | - "description": "-", | ||
| 20 | - "createTime": "2015-05-06 00:39:19", | ||
| 21 | - | ||
| 22 | - "isParent": true | ||
| 23 | - }, | ||
| 24 | - { | ||
| 25 | - "carCode": 10, | ||
| 26 | - "name": "User-10", | ||
| 27 | - "type": 4, | ||
| 28 | - "status": 2, | ||
| 29 | - "score": 89, | ||
| 30 | - "experience": 97592, | ||
| 31 | - "sex": "女", | ||
| 32 | - "city": "钦州市", | ||
| 33 | - "description": "-", | ||
| 34 | - "createTime": "1985-05-26 03:50:09", | ||
| 35 | - | ||
| 36 | - "isParent": true | ||
| 37 | - }, | ||
| 38 | - { | ||
| 39 | - "carCode": 70, | ||
| 40 | - "name": "User-70", | ||
| 41 | - "type": 3, | ||
| 42 | - "status": 3, | ||
| 43 | - "score": 19, | ||
| 44 | - "experience": 66961, | ||
| 45 | - "sex": "女", | ||
| 46 | - "city": "固原市", | ||
| 47 | - "description": "-", | ||
| 48 | - "createTime": "1992-04-11 09:13:05", | ||
| 49 | - | ||
| 50 | - "children": [], | ||
| 51 | - "isParent": false | ||
| 52 | - }, | ||
| 53 | - { | ||
| 54 | - "carCode": 71, | ||
| 55 | - "name": "User-71", | ||
| 56 | - "type": 1, | ||
| 57 | - "status": 3, | ||
| 58 | - "score": 4, | ||
| 59 | - "experience": 95553, | ||
| 60 | - "sex": "女", | ||
| 61 | - "city": "那曲地区", | ||
| 62 | - "description": "-", | ||
| 63 | - "createTime": "2019-07-31 00:30:49", | ||
| 64 | - | ||
| 65 | - | ||
| 66 | - "isParent": true | ||
| 67 | - }, | ||
| 68 | - { | ||
| 69 | - "carCode": 91, | ||
| 70 | - "name": "User-91", | ||
| 71 | - "type": 3, | ||
| 72 | - "status": 3, | ||
| 73 | - "score": 61, | ||
| 74 | - "experience": 26129, | ||
| 75 | - "sex": "女", | ||
| 76 | - "city": "白山市", | ||
| 77 | - "description": "-", | ||
| 78 | - "createTime": "2002-01-04 16:12:16", | ||
| 79 | - | ||
| 80 | - "isParent": true | ||
| 81 | - }, | ||
| 82 | - { | ||
| 83 | - "carCode": 138, | ||
| 84 | - "name": "User-138", | ||
| 85 | - "type": 1, | ||
| 86 | - "status": 2, | ||
| 87 | - "score": 99, | ||
| 88 | - "experience": 71832, | ||
| 89 | - "sex": "男", | ||
| 90 | - "city": "阿里地区", | ||
| 91 | - "description": "-", | ||
| 92 | - "createTime": "1988-03-10 13:17:59", | ||
| 93 | - | ||
| 94 | - "isParent": true | ||
| 95 | - } | ||
| 96 | - ] | ||
| 97 | -} | ||
| 98 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/video/treeview.min.js deleted
100644 → 0
| 1 | -/** | ||
| 2 | - * Minified by jsDelivr using Terser v5.19.2. | ||
| 3 | - * Original file: /npm/jquery-treeview@1.4.2/jquery.treeview.js | ||
| 4 | - * | ||
| 5 | - * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files | ||
| 6 | - */ | ||
| 7 | -!function(a){a.extend(a.fn,{swapClass:function(a,e){var l=this.filter("."+a);return this.filter("."+e).removeClass(e).addClass(a),l.removeClass(a).addClass(e),this},replaceClass:function(a,e){return this.filter("."+a).removeClass(a).addClass(e).end()},hoverClass:function(e){return e=e||"hover",this.hover((function(){a(this).addClass(e)}),(function(){a(this).removeClass(e)}))},heightToggle:function(a,e){a?this.animate({height:"toggle"},a,e):this.each((function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"](),e&&e.apply(this,arguments)}))},heightHide:function(a,e){a?this.animate({height:"hide"},a,e):(this.hide(),e&&this.each(e))},prepareBranches:function(a){return a.prerendered||(this.filter(":last-child:not(ul)").addClass(e.last),this.filter((a.collapsed?"":"."+e.closed)+":not(."+e.open+")").find(">ul").hide()),this.filter(":has(>ul)")},applyClasses:function(l,s){if(this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview",(function(e){this==e.target&&s.apply(a(this).next())})).add(a("a",this)).hoverClass(),!l.prerendered){this.filter(":has(>ul:hidden)").addClass(e.expandable).replaceClass(e.last,e.lastExpandable),this.not(":has(>ul:hidden)").addClass(e.collapsable).replaceClass(e.last,e.lastCollapsable);var t=this.find("div."+e.hitarea);t.length||(t=this.prepend('<div class="'+e.hitarea+'"/>').find("div."+e.hitarea)),t.removeClass().addClass(e.hitarea).each((function(){var e="";a.each(a(this).parent().attr("class").split(" "),(function(){e+=this+"-hitarea "})),a(this).addClass(e)}))}this.find("div."+e.hitarea).click(s)},treeview:function(l){if((l=a.extend({cookieId:"treeview"},l)).toggle){var s=l.toggle;l.toggle=function(){return s.apply(a(this).parent()[0],arguments)}}function t(){a(this).parent().find(">.hitarea").swapClass(e.collapsableHitarea,e.expandableHitarea).swapClass(e.lastCollapsableHitarea,e.lastExpandableHitarea).end().swapClass(e.collapsable,e.expandable).swapClass(e.lastCollapsable,e.lastExpandable).find(">ul").heightToggle(l.animated,l.toggle),l.unique&&a(this).parent().siblings().find(">.hitarea").replaceClass(e.collapsableHitarea,e.expandableHitarea).replaceClass(e.lastCollapsableHitarea,e.lastExpandableHitarea).end().replaceClass(e.collapsable,e.expandable).replaceClass(e.lastCollapsable,e.lastExpandable).find(">ul").heightHide(l.animated,l.toggle)}this.data("toggler",t),this.addClass("treeview");var i=this.find("li").prepareBranches(l);switch(l.persist){case"cookie":var n=l.toggle;l.toggle=function(){var e;e=[],i.each((function(l,s){e[l]=a(s).is(":has(>ul:visible)")?1:0})),a.cookie(l.cookieId,e.join(""),l.cookieOptions),n&&n.apply(this,arguments)},function(){var e=a.cookie(l.cookieId);if(e){var s=e.split("");i.each((function(e,l){a(l).find(">ul")[parseInt(s[e])?"show":"hide"]()}))}}();break;case"location":var r=this.find("a").filter((function(){return 0==location.href.toLowerCase().indexOf(this.href.toLowerCase())}));if(r.length){var o=r.addClass("selected").parents("ul, li").add(r.next()).show();l.prerendered&&o.filter("li").swapClass(e.collapsable,e.expandable).swapClass(e.lastCollapsable,e.lastExpandable).find(">.hitarea").swapClass(e.collapsableHitarea,e.expandableHitarea).swapClass(e.lastCollapsableHitarea,e.lastExpandableHitarea)}}return i.applyClasses(l,t),l.control&&(!function(l,s){function i(s){return function(){return t.apply(a("div."+e.hitarea,l).filter((function(){return!s||a(this).parent("."+s).length}))),!1}}a("a:eq(0)",s).click(i(e.collapsable)),a("a:eq(1)",s).click(i(e.expandable)),a("a:eq(2)",s).click(i())}(this,l.control),a(l.control).show()),this}}),a.treeview={};var e=a.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"}}(jQuery); | ||
| 8 | -//# sourceMappingURL=/sm/fda41ce3f0a0e628b6a53a2967b92988cf1a199419d5a03633eecec1d1c8f2d1.map | ||
| 9 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/video/video.html
| 1 | -<script type="text/javascript" src="layui.js"></script> | ||
| 2 | -<script type="text/javascript" src="https://www.helloweba.net/demo/2018/hls/hls.js" /> | ||
| 3 | -<script src="static/SkeyeWebPlayer/SkeyeWebPlayer.js"></script> | ||
| 4 | - | ||
| 5 | -<link href="css/layui.css" rel="stylesheet"> | ||
| 6 | - | ||
| 7 | -<script type="text/javascript"> | ||
| 8 | - $(document).ready(function () { | ||
| 9 | - $.getJSON("/video/tree", null, function (rep) { | ||
| 10 | - if(rep.status=="SUCCESS"){ | ||
| 11 | - initTree(rep.data); | ||
| 12 | - } | ||
| 13 | - initTable(); | ||
| 14 | - }); | ||
| 15 | - | ||
| 16 | - }); | ||
| 17 | - | ||
| 18 | - function initTree(data) { | ||
| 19 | - layui.use(function () { | ||
| 20 | - var tree = layui.tree; | ||
| 21 | - // 渲染 | ||
| 22 | - tree.render({ | ||
| 23 | - elem: '#video_tree', | ||
| 24 | - data: data, | ||
| 25 | - onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩 | ||
| 26 | - showLine: true, // 是否开启连接线 | ||
| 27 | - click: function (node) { | ||
| 28 | - initTable(node); | ||
| 29 | - } | ||
| 30 | - }); | ||
| 31 | - }); | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - | ||
| 35 | - function initTable(treeNode) { | ||
| 36 | - var queryURL = "/video/tree/table?size=5"; | ||
| 37 | - if(treeNode){ | ||
| 38 | - if(treeNode.data.type ===1){ | ||
| 39 | - queryURL = queryURL+"&businessCode_eq="+treeNode.data.code; | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - if(treeNode.data.type===2){ | ||
| 43 | - queryURL = queryURL+"&brancheCompanyCode_eq="+treeNode.data.code; | ||
| 44 | - } | ||
| 45 | - } | ||
| 46 | - layui.use(function () { | ||
| 47 | - var treeTable = layui.treeTable; | ||
| 48 | - // 渲染 | ||
| 49 | - treeTable.render({ | ||
| 50 | - elem: '#treeTable', | ||
| 51 | - url: queryURL, | ||
| 52 | - treeColIndex:1, | ||
| 53 | - treeSpid:0, | ||
| 54 | - maxHeight: '701px', | ||
| 55 | - cols: [[ | ||
| 56 | - {field: 'name', title: '车辆编号', width: 160}, | ||
| 57 | - {field: 'insideCode', title: '内部编号', width: 160}, | ||
| 58 | - {field: 'equipmentCode', title: '设备编号', width: 160}, | ||
| 59 | - {field: 'carPlate', title: '车牌号', width: 160}, | ||
| 60 | - {field: 'company', title: '所在公司', width: 160}, | ||
| 61 | - {field: 'brancheCompany', title: '所在分公司', width: 160}, | ||
| 62 | - {field: 'sfdc', title: '电车', width: 80,templet:function (obj){if(obj.sfdc=='true' || obj.sfdc== true){return "是"}else if(obj.sfdc=='false' || obj.sfdc== false){return "否";} return "未知";}}, | ||
| 63 | - {field: 'scrapState', title: '状态', width: 80,templet:function (obj){if(obj.scrapState=='true' || obj.scrapState== true){return "是"}else if(obj.scrapState=='false' || obj.scrapState== false){return "否";} return "未知";}} | ||
| 64 | - ]], | ||
| 65 | - page: true | ||
| 66 | - }); | ||
| 67 | - treeTable.on('rowDouble(treeTable)', function (obj){ | ||
| 68 | - var targetDataIndex =obj.dataIndex+"-0"; | ||
| 69 | - $("div[lay-table-id='treeTable']").find("tr").each(function (index,node){ | ||
| 70 | - var sourceDataIndex = $(node).attr("data-index"); | ||
| 71 | - if(sourceDataIndex===targetDataIndex){ | ||
| 72 | - queryChannelByCarNo(node,obj); | ||
| 73 | - return; | ||
| 74 | - } | ||
| 75 | - }); | ||
| 76 | - }); | ||
| 77 | - }); | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - function queryChannelByCarNo(treeNode,obj){ | ||
| 81 | - var url="/video/car/channel/"+obj.data.name; | ||
| 82 | - $.getJSON(url,function (rep){ | ||
| 83 | - if(rep.status==="SUCCESS"){ | ||
| 84 | - var html ="<td data-field=\"name\" colspan='8' data-key=\"1-"+obj.dataIndex+"-0\" class=\"\" >"; | ||
| 85 | - html+="<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"layui-table\" style='padding-left: 15px;boder:1px solid #000;margin-bottom: 15px;'><thead><tr>"; | ||
| 86 | - html += "<th data-field=\"name\" data-key=\"1-"+obj.dataIndex+"-0\" class=\"\" title=\"通道编号\"><div class=\"layui-table-cell \" style='width: 200px;'><span>通道编号</span></div></th>"; | ||
| 87 | - html += "<th data-field=\"name\" data-key=\"2-"+obj.dataIndex+"-0\" class=\"\" title=\"设备编号\"><div class=\"layui-table-cell \" style='width: 200px;'><span>设备编号</span></div></th>"; | ||
| 88 | - html += "<th data-field=\"name\" data-key=\"3-"+obj.dataIndex+"-0\" class=\"\" title=\"通道名称\"><div class=\"layui-table-cell\" style='width: 100px;'><span>通道名称</span></div></th>"; | ||
| 89 | - html += "<th data-field=\"name\" data-key=\"4-"+obj.dataIndex+"-0\" class=\"\" title=\"快照\"><div class=\"layui-table-cell \"><span>快照</span></div></th>"; | ||
| 90 | - html += "<th data-field=\"name\" data-key=\"5-"+obj.dataIndex+"-0\" class=\"\" title=\"厂家\"><div class=\"layui-table-cell \" style='width: 100px;'><span>厂家</span></div></th>"; | ||
| 91 | - html += "<th data-field=\"name\" data-key=\"6-"+obj.dataIndex+"-0\" class=\"\" title=\"开启音频\"><div class=\"layui-table-cell \"><span>开启音频</span></div></th>"; | ||
| 92 | - html += "<th data-field=\"name\" data-key=\"7-"+obj.dataIndex+"-0\" class=\"\" title=\"状态\"><div class=\"layui-table-cell \"><span>状态</span></div></th>"; | ||
| 93 | - html += "<th data-field=\"name\" data-key=\"8-"+obj.dataIndex+"-0\" class=\"\" title=\"操作\"><div class=\"layui-table-cell \" style='width: 100px;'><span>操作</span></div></th>"; | ||
| 94 | - html +="</tr>"; | ||
| 95 | - if(rep.data){ | ||
| 96 | - $.each(rep.data,function (index,node){ | ||
| 97 | - html+="<tr><td>"+node.channelId+"</td><td>"+node.deviceId+"</td><td>"+node.name+"</td><td>"+getBigSnap(rep.channelImageURL,node.deviceId,node.channelId)+"</td><td>"+node.manufacture; | ||
| 98 | - html +="</td><td>"+hasAudioText(node.hasAudio)+"</td><td>"+wvpStatusText(node.status)+"</td><td><button class=\"layui-btn layui-btn-primary layui-border\" onclick=\"playWvpVideo('"; | ||
| 99 | - html += rep.wvpPlayURL+"','"+node.deviceId+"','"+node.channelId+"')\">播放</button><button</button></td></tr>"; | ||
| 100 | - }); | ||
| 101 | - } | ||
| 102 | - | ||
| 103 | - html +="</thead></table></td>"; | ||
| 104 | - | ||
| 105 | - $(treeNode).html(html); | ||
| 106 | - } | ||
| 107 | - }) | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - function hasAudioText(hasAudio){ | ||
| 111 | - return "true" == hasAudio || true== hasAudio?"开启":"关闭"; | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - function wvpStatusText(status){ | ||
| 115 | - return "true" == status || true== status?"在线":"离线"; | ||
| 116 | - } | ||
| 117 | - | ||
| 118 | - function getBigSnap(imageURL,deviceId,channelId){ | ||
| 119 | - return "<image src="+imageURL+deviceId+"/"+channelId+" />" | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - function playWvpVideo(playURL,deviceId,channelId){ | ||
| 123 | - var idDiv = "video_"+(Date.now()); | ||
| 124 | - var html="'<div id='"+idDiv+"' style='padding-top: 0;'></div>'"; | ||
| 125 | - | ||
| 126 | - let player = null; | ||
| 127 | - var myVar= null; | ||
| 128 | - var playURL1 = playURL+deviceId+"_"+channelId+".live.mp4"; | ||
| 129 | - console.log(playURL1); | ||
| 130 | - | ||
| 131 | - var index = layer.open({ | ||
| 132 | - type:1, | ||
| 133 | - title:"视频播放", | ||
| 134 | - area:['1000px','650px'], | ||
| 135 | - height:'800px', | ||
| 136 | - content:html, | ||
| 137 | - success: function(layero, index, that){ | ||
| 138 | - player = playVideo(playURL1,idDiv); | ||
| 139 | - player.play(); | ||
| 140 | - | ||
| 141 | - myVar=setInterval(function(){ | ||
| 142 | - if(player){ | ||
| 143 | - player.destroy(); | ||
| 144 | - player = null; | ||
| 145 | - } | ||
| 146 | - player = playVideo(playURL1,idDiv); | ||
| 147 | - player.play(); | ||
| 148 | - },300000); | ||
| 149 | - | ||
| 150 | - | ||
| 151 | - }, | ||
| 152 | - beforeEnd: function(layero, index, that){ | ||
| 153 | - if(player){ | ||
| 154 | - player.destroy(); | ||
| 155 | - player = null; | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - if(myVar){ | ||
| 159 | - window.clearInterval(myVar); | ||
| 160 | - myVar = null; | ||
| 161 | - } | ||
| 162 | - | ||
| 163 | - $("#"+idDiv).html(""); | ||
| 164 | - } | ||
| 165 | - }); | ||
| 166 | - } | ||
| 167 | - | ||
| 168 | - function playVideo(url,ID){ | ||
| 169 | - return new WebMediaPlayer( url, ID, function (){ | ||
| 170 | - console.log("ddddddddddddd"); | ||
| 171 | - }, { | ||
| 172 | - cbUserPtr: this, | ||
| 173 | - decodeType: 'auto', | ||
| 174 | - openAudio: true, | ||
| 175 | - autoplay:true, | ||
| 176 | - bigPlay: false, | ||
| 177 | - showMode: false | ||
| 178 | - }); | ||
| 179 | - } | ||
| 180 | - | ||
| 181 | - | ||
| 182 | -</script> | ||
| 183 | 1 | ||
| 184 | <div class="page-head"> | 2 | <div class="page-head"> |
| 185 | <div class="page-title"> | 3 | <div class="page-title"> |
| @@ -191,7 +9,9 @@ | @@ -191,7 +9,9 @@ | ||
| 191 | <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li> | 9 | <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li> |
| 192 | <li><span class="active">视频管理</span> <i class="fa fa-circle"></i></li> | 10 | <li><span class="active">视频管理</span> <i class="fa fa-circle"></i></li> |
| 193 | </ul> | 11 | </ul> |
| 194 | - | 12 | +<div id="deviceVedioDiv" style="display: none"> |
| 13 | + <div>时间:<input type="input" id="dateTimeStr" /></div> | ||
| 14 | +</div> | ||
| 195 | 15 | ||
| 196 | <div class="row"> | 16 | <div class="row"> |
| 197 | <div class="col-md-4" style="padding-right: 0px;width: 20%"> | 17 | <div class="col-md-4" style="padding-right: 0px;width: 20%"> |
| @@ -210,5 +30,52 @@ | @@ -210,5 +30,52 @@ | ||
| 210 | </div> | 30 | </div> |
| 211 | </div> | 31 | </div> |
| 212 | </div> | 32 | </div> |
| 33 | + | ||
| 34 | + <div id="deviceVideoDiv" style="display: none"> | ||
| 35 | + | ||
| 36 | + <div class="layui-form-item" style="width: 37%; float: left"> | ||
| 37 | + <div class="layui-inline"> | ||
| 38 | + <label class="layui-form-label">时间</label> | ||
| 39 | + <div class="layui-input-inline layui-input-wrap"> | ||
| 40 | + <input type="text" placeholder="请选择需要查看的时间" autocomplete="off" class="layui-input" id="deviceVideoDate"/> | ||
| 41 | + </div> | ||
| 42 | + <div class="layui-form-mid" style="padding: 0!important;"> | ||
| 43 | + <button type="button" class="layui-btn layui-btn-primary" lay-on="get-vercode" id="queryDeviecChannel">查询</button> | ||
| 44 | + </div> | ||
| 45 | + </div> | ||
| 46 | + <div class="layui-table-fixed-l" > | ||
| 47 | + <div class="layui-table-body" style="height: 500px;overflow:auto;"> | ||
| 48 | + <table cellspacing="0" cellpadding="0" border="0" class="layui-table"><tbody id="deviceVideoTbody"></tbody></table> | ||
| 49 | + </div> | ||
| 50 | + </div> | ||
| 51 | + </div> | ||
| 52 | + <div id="videoPlay" style=" width: 62%;float: right"> | ||
| 53 | + <div style="height:550px;width:99%;background-color: #0d1318"></div> | ||
| 54 | + </div> | ||
| 55 | + </div> | ||
| 56 | + | ||
| 57 | + <div id="skeyewebplayerDiv" style="display: none"> | ||
| 58 | + <div style="float: left;width: 20%;"> | ||
| 59 | + <div>通道列表</div> | ||
| 60 | + <div id="channelList"></div> | ||
| 61 | + </div> | ||
| 62 | + | ||
| 63 | + <div style="width: 79%" id="skeyewebplayerDiv_main"> | ||
| 64 | + <div>分屏: | ||
| 65 | + <a href="#">□</a> | ||
| 66 | + <a href="#">▤</a> | ||
| 67 | + <a href="#">▦</a> | ||
| 68 | + </div> | ||
| 69 | + </div> | ||
| 70 | + </div> | ||
| 213 | </div> | 71 | </div> |
| 214 | 72 | ||
| 73 | +<script type="text/html" id="treeTable-tools"> | ||
| 74 | + <div class="layui-btn-container"> | ||
| 75 | + <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="SkeyeWebPlayerEvent">分屏显示</a> | ||
| 76 | + </div> | ||
| 77 | +</script> | ||
| 78 | + | ||
| 79 | +<script src="static/SkeyeWebPlayer/SkeyeWebPlayer.js"></script> | ||
| 80 | +<script src="video.js"></script> | ||
| 81 | + |
src/main/resources/static/pages/video/video.js
0 → 100644
| 1 | +var loading = loadingFunction(); | ||
| 2 | +var player = null; | ||
| 3 | +$(document).ready(function () { | ||
| 4 | + $.getJSON("/video/tree", null, function (rep) { | ||
| 5 | + if (rep.status == "SUCCESS") { | ||
| 6 | + initTree(rep.data); | ||
| 7 | + } | ||
| 8 | + initTable(); | ||
| 9 | + }); | ||
| 10 | + | ||
| 11 | +}); | ||
| 12 | + | ||
| 13 | +function initTree(data) { | ||
| 14 | + layui.use(function () { | ||
| 15 | + var tree = layui.tree; | ||
| 16 | + // 渲染 | ||
| 17 | + tree.render({ | ||
| 18 | + elem: '#video_tree', | ||
| 19 | + data: data, | ||
| 20 | + onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩 | ||
| 21 | + showLine: true, // 是否开启连接线 | ||
| 22 | + click: function (node) { | ||
| 23 | + initTable(node); | ||
| 24 | + } | ||
| 25 | + }); | ||
| 26 | + closeLoading(); | ||
| 27 | + }); | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +function initTable(treeNode) { | ||
| 32 | + var queryURL = "/video/tree/table?size=5"; | ||
| 33 | + if (treeNode) { | ||
| 34 | + if (treeNode.data.type === 1) { | ||
| 35 | + queryURL = queryURL + "&businessCode_eq=" + treeNode.data.code; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + if (treeNode.data.type === 2) { | ||
| 39 | + queryURL = queryURL + "&brancheCompanyCode_eq=" + treeNode.data.code; | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + layui.use(function () { | ||
| 43 | + var treeTable = layui.treeTable; | ||
| 44 | + // 渲染 | ||
| 45 | + treeTable.render({ | ||
| 46 | + elem: '#treeTable', | ||
| 47 | + url: queryURL, | ||
| 48 | + loading: true, | ||
| 49 | + treeColIndex: 1, | ||
| 50 | + treeSpid: 0, | ||
| 51 | + maxHeight: '701px', | ||
| 52 | + cols: [[ | ||
| 53 | + {field: 'name', title: '车辆编号', width: 140}, | ||
| 54 | + {field: 'insideCode', title: '内部编号', width: 120}, | ||
| 55 | + {field: 'equipmentCode', title: '设备编号', width: 160}, | ||
| 56 | + {field: 'carPlate', title: '车牌号', width: 160}, | ||
| 57 | + {field: 'company', title: '所在公司', width: 160}, | ||
| 58 | + {field: 'brancheCompany', title: '所在分公司', width: 160}, | ||
| 59 | + { | ||
| 60 | + field: 'sfdc', title: '电车', width: 80, templet: function (obj) { | ||
| 61 | + if (obj.sfdc == 'true' || obj.sfdc == true) { | ||
| 62 | + return "是" | ||
| 63 | + } else if (obj.sfdc == 'false' || obj.sfdc == false) { | ||
| 64 | + return "否"; | ||
| 65 | + } | ||
| 66 | + return "未知"; | ||
| 67 | + } | ||
| 68 | + }, | ||
| 69 | + { | ||
| 70 | + field: 'scrapState', title: '状态', width: 80, templet: function (obj) { | ||
| 71 | + if (obj.scrapState == 'true' || obj.scrapState == true) { | ||
| 72 | + return "是" | ||
| 73 | + } else if (obj.scrapState == 'false' || obj.scrapState == false) { | ||
| 74 | + return "否"; | ||
| 75 | + } | ||
| 76 | + return "未知"; | ||
| 77 | + } | ||
| 78 | + }, | ||
| 79 | + { title:'操作', width: 80, toolbar: '#treeTable-tools'} | ||
| 80 | + ]], | ||
| 81 | + page: true | ||
| 82 | + }); | ||
| 83 | + treeTable.on('rowDouble(treeTable)', function (obj) { | ||
| 84 | + console.log("cccccccccccc"); | ||
| 85 | + var targetDataIndex = obj.dataIndex + "-0"; | ||
| 86 | + $("div[lay-table-id='treeTable']").find("tr").each(function (index, node) { | ||
| 87 | + var sourceDataIndex = $(node).attr("data-index"); | ||
| 88 | + if (sourceDataIndex === targetDataIndex) { | ||
| 89 | + queryChannelByCarNo(node, obj); | ||
| 90 | + return; | ||
| 91 | + } | ||
| 92 | + }); | ||
| 93 | + | ||
| 94 | + | ||
| 95 | + }); | ||
| 96 | + | ||
| 97 | + treeTable.on('tool(treeTable)', function(obj){ | ||
| 98 | + switch(obj.event){ | ||
| 99 | + case 'SkeyeWebPlayerEvent': | ||
| 100 | + skeyewebplayerOpen(); | ||
| 101 | + break; | ||
| 102 | + } | ||
| 103 | + }); | ||
| 104 | + }); | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +function queryChannelByCarNo(treeNode, obj) { | ||
| 108 | + loading = loadingFunction(); | ||
| 109 | + var url = "/video/car/channel/" + obj.data.name; | ||
| 110 | + $.getJSON(url, function (rep) { | ||
| 111 | + if (rep.status === "SUCCESS") { | ||
| 112 | + var html = "<td data-field=\"name\" colspan='8' data-key=\"1-" + obj.dataIndex + "-0\" class=\"\" >"; | ||
| 113 | + html += "<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"layui-table\" style='padding-left: 15px;boder:1px solid #000;margin-bottom: 15px;'><thead><tr>"; | ||
| 114 | + html += "<th data-field=\"name\" data-key=\"1-" + obj.dataIndex + "-0\" class=\"\" title=\"通道编号\"><div class=\"layui-table-cell \" style='width: 200px;'><span>通道编号</span></div></th>"; | ||
| 115 | + html += "<th data-field=\"name\" data-key=\"2-" + obj.dataIndex + "-0\" class=\"\" title=\"设备编号\"><div class=\"layui-table-cell \" style='width: 200px;'><span>设备编号</span></div></th>"; | ||
| 116 | + html += "<th data-field=\"name\" data-key=\"3-" + obj.dataIndex + "-0\" class=\"\" title=\"通道名称\"><div class=\"layui-table-cell\" style='width: 100px;'><span>通道名称</span></div></th>"; | ||
| 117 | + html += "<th data-field=\"name\" data-key=\"4-" + obj.dataIndex + "-0\" class=\"\" title=\"快照\"><div class=\"layui-table-cell \"><span>快照</span></div></th>"; | ||
| 118 | + html += "<th data-field=\"name\" data-key=\"5-" + obj.dataIndex + "-0\" class=\"\" title=\"厂家\"><div class=\"layui-table-cell \" style='width: 100px;'><span>厂家</span></div></th>"; | ||
| 119 | + html += "<th data-field=\"name\" data-key=\"6-" + obj.dataIndex + "-0\" class=\"\" title=\"开启音频\"><div class=\"layui-table-cell \"><span>开启音频</span></div></th>"; | ||
| 120 | + html += "<th data-field=\"name\" data-key=\"7-" + obj.dataIndex + "-0\" class=\"\" title=\"状态\"><div class=\"layui-table-cell \"><span>状态</span></div></th>"; | ||
| 121 | + html += "<th data-field=\"name\" data-key=\"8-" + obj.dataIndex + "-0\" class=\"\" title=\"操作\"><div class=\"layui-table-cell \" style='width: 100px;'><span>操作</span></div></th>"; | ||
| 122 | + html += "</tr>"; | ||
| 123 | + if (rep.data) { | ||
| 124 | + $.each(rep.data, function (index, node) { | ||
| 125 | + html += "<tr><td>" + node.channelId + "</td><td>" + node.deviceId + "</td><td>" + node.name + "</td><td>" + getBigSnap(rep.channelImageURL, node.deviceId, node.channelId) + "</td><td>" + node.manufacture; | ||
| 126 | + html += "</td><td>" + hasAudioText(node.hasAudio) + "</td><td>" + wvpStatusText(node.status) + "</td><td><button class=\"layui-btn layui-btn-primary layui-border\" onclick=\"playWvpVideo('"; | ||
| 127 | + html += rep.wvpPlayURL + "','" + node.deviceId + "','" + node.channelId + "')\">播放</button><button class=\"layui-btn layui-btn-primary layui-border\" onclick=\"deviceVedioPage('" + node.deviceId + "','" + node.channelId + "')\">设备录像</button></td></tr>"; | ||
| 128 | + }); | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + html += "</thead></table></td>"; | ||
| 132 | + | ||
| 133 | + $(treeNode).html(html); | ||
| 134 | + | ||
| 135 | + closeLoading(); | ||
| 136 | + } | ||
| 137 | + }) | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +function hasAudioText(hasAudio) { | ||
| 141 | + return "true" == hasAudio || true == hasAudio ? "开启" : "关闭"; | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +function wvpStatusText(status) { | ||
| 145 | + return "true" == status || true == status ? "在线" : "离线"; | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +function getBigSnap(imageURL, deviceId, channelId) { | ||
| 149 | + return "<image src=" + imageURL + deviceId + "/" + channelId + " />" | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +function playWvpVideo(playURL, deviceId, channelId) { | ||
| 153 | + var idDiv = "video_" + (Date.now()); | ||
| 154 | + var html = "'<div id='" + idDiv + "' style='padding-top: 0;'></div>'"; | ||
| 155 | + | ||
| 156 | + let player = null; | ||
| 157 | + var myVar = null; | ||
| 158 | + var playURL1 = playURL + deviceId + "_" + channelId + ".live.mp4"; | ||
| 159 | + | ||
| 160 | + var index = layer.open({ | ||
| 161 | + type: 1, | ||
| 162 | + title: "视频播放", | ||
| 163 | + area: ['1000px', '650px'], | ||
| 164 | + height: '800px', | ||
| 165 | + content: html, | ||
| 166 | + success: function (layero, index, that) { | ||
| 167 | + player = playVideo(playURL1, idDiv); | ||
| 168 | + player.play(); | ||
| 169 | + | ||
| 170 | + myVar = setInterval(function () { | ||
| 171 | + if (player) { | ||
| 172 | + player.destroy(); | ||
| 173 | + player = null; | ||
| 174 | + } | ||
| 175 | + player = playVideo(playURL1, idDiv); | ||
| 176 | + player.play(); | ||
| 177 | + }, 300000); | ||
| 178 | + | ||
| 179 | + | ||
| 180 | + }, | ||
| 181 | + beforeEnd: function (layero, index, that) { | ||
| 182 | + if (player) { | ||
| 183 | + player.destroy(); | ||
| 184 | + player = null; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + if (myVar) { | ||
| 188 | + window.clearInterval(myVar); | ||
| 189 | + myVar = null; | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + $("#" + idDiv).html(""); | ||
| 193 | + } | ||
| 194 | + }); | ||
| 195 | +} | ||
| 196 | + | ||
| 197 | +function playVideo(url, ID) { | ||
| 198 | + return new WebMediaPlayer(url, ID, function () { | ||
| 199 | + | ||
| 200 | + }, { | ||
| 201 | + cbUserPtr: this, | ||
| 202 | + decodeType: 'auto', | ||
| 203 | + openAudio: true, | ||
| 204 | + autoplay: true, | ||
| 205 | + bigPlay: false, | ||
| 206 | + showMode: false | ||
| 207 | + }); | ||
| 208 | +} | ||
| 209 | + | ||
| 210 | +function loadingFunction() { | ||
| 211 | + closeLoading(); | ||
| 212 | + var loading = layer.load(0, { | ||
| 213 | + shade: true | ||
| 214 | + }); | ||
| 215 | + return loading; | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +function closeLoading() { | ||
| 219 | + console.log("===============?" + loading); | ||
| 220 | + if (loading) { | ||
| 221 | + layer.close(loading); | ||
| 222 | + loading = null; | ||
| 223 | + } | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +function deviceVedioPage(device, channel) { | ||
| 227 | + var idDiv = "device_video_" + (Date.now()); | ||
| 228 | + var html = "<div id='" + idDiv + "'></div>"; | ||
| 229 | + | ||
| 230 | + var index = layer.open({ | ||
| 231 | + type: 1, | ||
| 232 | + title: "设备录像", | ||
| 233 | + area: ['1300px', '650px'], | ||
| 234 | + content: html, | ||
| 235 | + success: function (layero, index, that) { | ||
| 236 | + $("#" + idDiv).html($("#deviceVideoDiv").html()); | ||
| 237 | + var $deviceVideoDiv = $("#" + idDiv); | ||
| 238 | + $("#deviceVideoDate", $deviceVideoDiv).datetimepicker({ | ||
| 239 | + format: 'YYYY-MM-DD', | ||
| 240 | + locale: 'zh-cn' | ||
| 241 | + }); | ||
| 242 | + | ||
| 243 | + $("#queryDeviecChannel", $deviceVideoDiv).click(function () { | ||
| 244 | + deviceVidemoQueryHistory(device, channel, $deviceVideoDiv, idDiv); | ||
| 245 | + }) | ||
| 246 | + }, beforeEnd: function (layero, index, that) { | ||
| 247 | + if (player) { | ||
| 248 | + player.destroy(); | ||
| 249 | + player = null; | ||
| 250 | + } | ||
| 251 | + } | ||
| 252 | + }); | ||
| 253 | +} | ||
| 254 | + | ||
| 255 | +function deviceVidemoQueryHistory(device, channel, $deviceVideoDiv, idDiv) { | ||
| 256 | + var dateStr = $("#deviceVideoDate", $deviceVideoDiv).val(); | ||
| 257 | + if (null === dateStr || undefined === dateStr || "" === dateStr) { | ||
| 258 | + layer.alert('请选择需要查看的时间'); | ||
| 259 | + return; | ||
| 260 | + } | ||
| 261 | + loading = loadingFunction(); | ||
| 262 | + var url = "/video/car/channel/history/" + device + "/" + channel + "/" + dateStr; | ||
| 263 | + $.getJSON(url, function (resp) { | ||
| 264 | + if (resp.status === "SUCCESS") { | ||
| 265 | + var html = "<tr>"; | ||
| 266 | + $.each(resp.data, function (index, node) { | ||
| 267 | + html += "<td><button class=\"layui-btn layui-btn-primary layui-border\" onclick=\"playDeviceVidemoQueryHistory('" + idDiv + "','" + resp.wvpPlayURL + "','" + device + "','" + channel + "','" + node.startTime + "','" + node.endTime + "','" + resp.token + "')\">" + node.filePath + "</button></td>"; | ||
| 268 | + | ||
| 269 | + if (index % 2 === 1) { | ||
| 270 | + html += "</tr><tr>"; | ||
| 271 | + } | ||
| 272 | + }); | ||
| 273 | + | ||
| 274 | + $("#deviceVideoTbody", $deviceVideoDiv).html(html); | ||
| 275 | + closeLoading(); | ||
| 276 | + } | ||
| 277 | + }); | ||
| 278 | +} | ||
| 279 | + | ||
| 280 | +function playDeviceVidemoQueryHistory(idDiv, url, device, channel, startTime, endTime, token) { | ||
| 281 | + if (player) { | ||
| 282 | + player.destroy(); | ||
| 283 | + player = null; | ||
| 284 | + } | ||
| 285 | + startTime = startTime.replace("-", "").replace("-", "").replace(":", "").replace(":", "").replace(" ", ""); | ||
| 286 | + endTime = endTime.replace("-", "").replace("-", "").replace(":", "").replace(":", "").replace(" ", ""); | ||
| 287 | + console.log(startTime); | ||
| 288 | + url = url + device + "_" + channel + "_" + startTime + "_" + endTime + ".live.mp4"; | ||
| 289 | + console.log(url); | ||
| 290 | + var idDiv1 = "device_video_play_" + (Date.now()); | ||
| 291 | + $("#videoPlay", $("#" + idDiv)).html("<div id='" + idDiv1 + "' style='height:550px;width:99%'></div>") | ||
| 292 | + player = playVideo(url, idDiv1); | ||
| 293 | + player.play(); | ||
| 294 | +} | ||
| 295 | + | ||
| 296 | +function skeyewebplayerOpen(){ | ||
| 297 | + layer.open({ | ||
| 298 | + type: 1, | ||
| 299 | + content: '<div style="padding: 16px;" id="skeyewebplayer"></div>', | ||
| 300 | + area: ['320px', '195px'], // 初始宽高 | ||
| 301 | + success: function(layero, index){ | ||
| 302 | + layer.full(index); // 最大化 | ||
| 303 | + $("#skeyewebplayer").html($("#skeyewebplayerDiv").html()); | ||
| 304 | + } | ||
| 305 | + }); | ||
| 306 | +} | ||
| 0 | \ No newline at end of file | 307 | \ No newline at end of file |