From 0b8e43d5f5fd889ffcb715dafdaa6d4511532665 Mon Sep 17 00:00:00 2001 From: suerwei <18810552194@163.com> Date: 星期六, 22 六月 2024 18:04:15 +0800 Subject: [PATCH] 摄像头列表功能 --- javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/red.png | 0 javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/impl/ProjectCameraServiceImpl.java | 9 javaweb-plus/javaweb-admin/src/main/java/com/javaweb/web/controller/system/SysIndexController.java | 127 +++ javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/camera_list.html | 89 ++ javaweb-plus/javaweb-cms/src/main/resources/mapper/geo/ProjectCameraMapper.xml | 22 javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera2.html | 117 +++ javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/mapper/ProjectCameraMapper.java | 6 javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/yellow.png | 0 javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/tub_list.html | 296 +++++++++ javaweb-plus/javaweb-admin/src/main/resources/templates/main4.html | 772 ++++++++++++++++++++++++ javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera.html | 7 javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/player2.html | 35 + javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/controller/ProjectCameraController.java | 11 javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/IProjectCameraService.java | 6 javaweb-plus/javaweb-cms/src/main/resources/templates/geo/project/info.html | 4 javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/add.html | 6 javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/ProjectCamera.java | 35 + javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/blue.png | 0 javaweb-plus/javaweb-admin/src/main/resources/templates/main.html | 362 +--------- javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/Project.java | 2 20 files changed, 1,576 insertions(+), 330 deletions(-) diff --git a/javaweb-plus/javaweb-admin/src/main/java/com/javaweb/web/controller/system/SysIndexController.java b/javaweb-plus/javaweb-admin/src/main/java/com/javaweb/web/controller/system/SysIndexController.java index 66269c8..1861efe 100644 --- a/javaweb-plus/javaweb-admin/src/main/java/com/javaweb/web/controller/system/SysIndexController.java +++ b/javaweb-plus/javaweb-admin/src/main/java/com/javaweb/web/controller/system/SysIndexController.java @@ -6,18 +6,20 @@ import java.util.Map; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.javaweb.cms.util.CmsConstants; import com.javaweb.common.core.domain.AjaxResult; import com.javaweb.common.utils.Arith; -import com.javaweb.geo.domain.Hole; -import com.javaweb.geo.domain.HoleMedia; -import com.javaweb.geo.domain.Project; -import com.javaweb.geo.domain.TubLog; +import com.javaweb.geo.domain.*; import com.javaweb.geo.enums.RecordType; import com.javaweb.geo.mapper.ProjectCameraMapper; import com.javaweb.geo.mapper.TubLogMapper; import com.javaweb.geo.service.IHoleMediaService; import com.javaweb.geo.service.IHoleService; +import com.javaweb.geo.service.IProjectCameraService; import com.javaweb.geo.service.IProjectService; import com.javaweb.geo.vo.IndexVo; import com.javaweb.geo.vo.ProjectProcessVO; @@ -26,7 +28,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.ObjectUtils; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.*; import com.javaweb.common.config.Global; import com.javaweb.common.core.controller.BaseController; import com.javaweb.framework.util.ShiroUtils; @@ -34,10 +36,6 @@ import com.javaweb.system.domain.SysUser; import com.javaweb.system.service.ISysMenuService; - -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; @@ -48,6 +46,14 @@ */ @Controller public class SysIndexController extends BaseController { + + private String prefix = "system/camera_tub"; + + + private String appkey = "af786eacc71d43ef9393c028cf4face7"; + private String secret = "9ad87671f63d2258af6fd9b2e5fa6005"; + private String postUrl ="https://open.ys7.com/api/lapp/token/get"; + @Autowired private ISysMenuService menuService; @@ -69,6 +75,9 @@ @Autowired private ProjectCameraMapper projectCameraMapper; + @Autowired + private IProjectCameraService cameraService; + private String getAdminIndex() { return configService.selectConfigByKey(CmsConstants.KEY_ADMIN_INDEX); @@ -77,6 +86,16 @@ @RequestMapping("/admin") public String admin() { return "forward:/index"; + } + + @RequestMapping("/system/camera") + public String cameraList() { + return prefix + "/camera_list"; + } + + @RequestMapping("/system/tub") + public String tubList() { + return prefix + "/tub_list"; } // 绯荤粺棣栭〉 @@ -267,4 +286,94 @@ return ajaxResult; } + /** + * 鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + @ResponseBody + @GetMapping("/system/stat/cameraData") + public AjaxResult cameraData() { + AjaxResult ajaxResult = new AjaxResult(); + List<ProjectCamera> cameraDataList = cameraService.selectCameraDataOnLine(); + ajaxResult.put("cameraData",cameraDataList); + return ajaxResult; + } + + /** + * 鏍规嵁projectId鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + @ResponseBody + @GetMapping("/system/stat/cameraData/{projectId}") + public AjaxResult cameraData2(@PathVariable("projectId") String projectId) { + AjaxResult ajaxResult = new AjaxResult(); + + ProjectCamera param = new ProjectCamera(); + param.setProjectId(projectId); + List<ProjectCamera> cameraDataList = cameraService.selectProjectCameraList(param); + if (!ObjectUtils.isEmpty(cameraDataList)){ + for (ProjectCamera item : cameraDataList) { + String url = item.getIp(); + Map<String, Object> paramMap = new HashMap<>(); + paramMap.put("appKey", appkey); + paramMap.put("appSecret", secret); + + HttpResponse response = HttpRequest.post(postUrl) .form(paramMap).execute(); + String body = response.body(); + JSONObject jsonObject = JSONUtil.parseObj(body); + String code = jsonObject.getStr("code"); + StringBuffer buffer = new StringBuffer(); + if(code.equals("200")){ + JSONObject data = (JSONObject) jsonObject.get("data"); + String token = data.getStr("accessToken"); + buffer.append("https://open.ys7.com/console/jssdk/pc.html?accessToken="); + buffer.append(token); + buffer.append("&url="); + buffer.append(url); + } + logger.debug(buffer.toString()); + item.setUrl(buffer.toString()); + } + } + ajaxResult.put("cameraDataList",cameraDataList); + return ajaxResult; + } + + /** + * 鏍规嵁projectId鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + @GetMapping("/player") + public String player(String projectId,ModelMap mmap) { + ProjectCamera param = new ProjectCamera(); + param.setProjectId(projectId); + List<ProjectCamera> cameraDataList = cameraService.selectProjectCameraList(param); + if (!ObjectUtils.isEmpty(cameraDataList)){ + for (ProjectCamera item : cameraDataList) { + String url = item.getIp(); + Map<String, Object> paramMap = new HashMap<>(); + paramMap.put("appKey", appkey); + paramMap.put("appSecret", secret); + + HttpResponse response = HttpRequest.post(postUrl) .form(paramMap).execute(); + String body = response.body(); + JSONObject jsonObject = JSONUtil.parseObj(body); + String code = jsonObject.getStr("code"); + StringBuffer buffer = new StringBuffer(); + if(code.equals("200")){ + JSONObject data = (JSONObject) jsonObject.get("data"); + String token = data.getStr("accessToken"); + buffer.append("https://open.ys7.com/console/jssdk/pc.html?accessToken="); + buffer.append(token); + buffer.append("&url="); + buffer.append(url); + } + item.setUrl(buffer.toString()); + } + } + + mmap.put("cameraDataList",cameraDataList); + return prefix + "/player2"; + } + } diff --git a/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/blue.png b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/blue.png new file mode 100644 index 0000000..7f51058 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/blue.png Binary files differ diff --git a/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/red.png b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/red.png new file mode 100644 index 0000000..81cfd28 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/red.png Binary files differ diff --git a/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/yellow.png b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/yellow.png new file mode 100644 index 0000000..4b2d412 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/static/images/icon/yellow.png Binary files differ diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html index 17d1299..5d6e63c 100644 --- a/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/main.html @@ -18,86 +18,10 @@ [v-cloak]{ display: none; } - .el-card__header{ - height: 40px; - padding: 8px 20px; - } - .active-red{ - width: 20px; - height: 20px; - border-radius: 50%; - font-size: 14px; - color: white; - background: #F56C6C; - text-align: center; - line-height: 20px; - float: left; - } - - .active-yellow{ - width: 20px; - height: 20px; - border-radius: 50%; - font-size: 14px; - color: white; - background: #E6A23C; - text-align: center; - line-height: 20px; - float: left; - } - - .active-blue{ - width: 20px; - height: 20px; - border-radius: 50%; - font-size: 14px; - color: white; - background: #67C23A; - text-align: center; - line-height: 20px; - float: left; - } - .cdcode{ - width: 15%; - float: left; - margin-left: 10px; - font-size: 16px; - line-height: 20px; - } - .cdstatus{ - width: 15%; - float: left; - margin-left: 0px; - font-size: 16px; - line-height: 20px; - } - .cdprocess{ - width: 60%; - float: left; - margin-left: 10px; - } - .rankrow{ - margin-top: 12px; - cursor: pointer; - } - .ilblock{ - border-left: 1px solid #e3e5e7; - padding: 0 40px; - align-content: center; - } .ilblock>span{ display: block; line-height: 30px; } - - - <!-- 琛ㄦ牸鏍峰紡 --> - .el-table, .el-table__expanded-cell { - background-color: transparent; - color: #4D4D4D; - font-size: 13px; - } - .el-table th, .el-table tr, .el-table td { @@ -108,235 +32,26 @@ font-family: Source Han Sans CN Normal, Source Han Sans CN Normal-Normal; font-weight: Normal; } - .el-table::before { - height: 0px; - } .el-table__body tr, .el-table__body td { padding: 0; height: 22px; } - .el-table__row.warning-row { - background:rgb(252,212,165); - } - .el-table__body-wrapper::-webkit-scrollbar-track { - background-color: rgb(252,212,165); - } - .el-table__body-wrapper::-webkit-scrollbar { - width: 10px; - opacity: 0.5; - } - .el-table__body-wrapper::-webkit-scrollbar-thumb { - border-radius: 15px; - background-color:rgb(252,212,165); + .custom-icon:hover { + color: #0981ea; + cursor: pointer; } </style> </head> <body class="gray-bg"> <div class="content" id="app" v-cloak> - <el-row style="height: 127px;"> - <el-col :span="6"> - <el-card class="box-card"> - <div style="flex:4;padding-right: 20px;" > - <div> - <li class="el-icon-s-promotion" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #409eff;"></li> - <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">鍦哄湴鏁伴噺</span> - </div> - <div style="text-align: center;"> - <span style="color:#ED1C24;font-size: 30px;word-break: break-all;line-height: 70px">34 - </span> - </div> - </div> - - <div style="flex:6;" class="ilblock"> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 鍗忚皟涓� - <span style="float: right">{{indexDataCount.projectStatus0}}</span> -<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> - - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 寰呭紑宸� - <span style="float: right">{{indexDataCount.projectStatus1}}</span> -<!-- <li class="el-icon-caret-bottom" style="color: #e6a23c">--> - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 杩涜涓� - <span style="float: right">{{indexDataCount.projectStatus2}}</span> -<!-- <li class="el-icon-caret-top" style="color: #409eff">--> - </span> - - </div> - </el-card> - </el-col> - - <el-col :span="6"> - <el-card class="box-card"> - <div style="flex:4;padding-right: 20px;"> - <div> - <li class="el-icon-coin" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #085abe"></li> - <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">閽诲瓟杩涘昂</span> - </div> - <div style="text-align: center"> - <span style="color:#1894F6;font-size: 30px;word-break: break-all;line-height: 70px;">647 - </span> - </div> - </div> - - <div style="flex:6;" class="ilblock"> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 鎬昏繘灏� <span style="float: right">{{indexDataCount.footageCount}}m</span> -<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 宸插畬鎴� <span style="float: right">{{indexDataCount.footageCplCount}}m</span> -<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> - </span> - </div> - </el-card> - </el-col> - - <el-col :span="6"> - <el-card class="box-card"> - <div style="flex:4;padding-right: 20px;"> - <div> - <li class="el-icon-video-camera" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #11d713"></li> - <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">瀹炴椂鐩戞帶</span> - </div> - <div style="text-align: center"> - <span style="color:#F7931E;font-size: 30px;word-break: break-all;line-height: 70px">68 - </span> - </div> - </div> - - <div style="flex:6;" class="ilblock"> - <div> - - </div> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 宸插畨瑁� <span style="float: right">{{indexDataCount.cameraCount}}</span> -<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 鏈畨瑁� <span style="float: right">{{indexDataCount.cameraCountNaN}}</span> -<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> - </span> - </div> - </el-card> - </el-col> - <el-col :span="6"> - <el-card class="box-card"> - <div style="flex:4;padding-right: 20px;"> - <div> - <li class="el-icon-s-order" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #917ed0"></li> - <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">璧勬枡鏂囦欢</span> - </div> - <div style="text-align: center"> - <span style="color:#F7931E;font-size: 30px;word-break: break-all;line-height: 70px;"> - {{indexDataCount.fileCount}} - </span> - </div> - </div> - - <div style="flex:6;" class="ilblock"> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 鏂藉伐璧勬枡 <span style="float: right">0</span> -<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 瀹夊叏璧勬枡 <span style="float: right">0</span> -<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> - </span> - <span style="color:rgba(0,0,0,.87);font-size: 15px;"> - 璐ㄩ噺璧勬枡 <span style="float: right">0</span> -<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> - </span> - </div> - - </el-card> - </el-col> - </el-row> - <el-row> - <el-col :span="16"> - <el-card class="box-card"> - <div style="height: 200px;width: 100%;"> - <h3>鏉愭枡缁熻</h3> - <el-col :span="10" style="height: 200px;"> - <div style="margin-top: 15px"> - <template> - <el-table :data="tubLogs" border size="small" style="width: 100%" - :header-cell-style="{color: '#4D4D4D',background: '#F7931E',fontWeight: '400'}" - :row-class-name="tableRowClassName"> - <!-- <el-table-column prop="code" label="搴忓彿"></el-table-column>--> - <el-table-column prop="tubName" label="鍚嶇О"></el-table-column> - <el-table-column prop="inboundNumber" label="鍏ュ簱鏁伴噺"></el-table-column> - <el-table-column prop="outboundNumber" label="鍑哄簱鏁伴噺"></el-table-column> - <el-table-column prop="unit" label="鍗曚綅"></el-table-column> - - </el-table> - </template> - </div> - </el-col> - <el-col :span="14" style="height: 200px;"> - <div id="column-chart" style="height: 180px; width: 100%;"></div> - </el-col> - </div> - </el-card> - - <el-card class="box-card" style="margin-top: 20px;"> - <div id="map_div" style="width: 100%;height: 550px;margin-top: -5px"></div> - </el-card> - - </el-col> - - <el-col :span="8"> - <el-card class="box-card"> - <div style="height: 200px;width: 100%"> - <div style="width: 100%;height: 20px;"> - <h3>椤圭洰鎬讳綋杩涘害(%)</h3> - </div> - <div id="Chart1" style="width: 80%;height: 180px;margin-left: 10%;"></div> - </div> - </el-card> - - <el-card class="box-card" style="margin-top: 20px;"> - <div style="width: 100%"> - <div style="width: 100%;height: 20px;margin-bottom: 10px;text-align: center;"> - <h3>鍦哄湴璇︾粏杩涘害(%)</h3> - </div> - <div style="width: 100%;height: 500px;overflow: auto"> - - <el-row class="rankrow" v-for='entity in stationProcessData' @click.native='viewStation(entity)'> - <el-col :span="2" > - <div v-if="entity.status=='鍗忚皟涓�'" class="active-red">{{entity.ranking}}</div> - <div v-if="entity.status=='寰呭紑宸�'" class="active-yellow">{{entity.ranking}}</div> - <div v-if="entity.status=='杩涜涓�'" class="active-blue">{{entity.ranking}}</div> - - </el-col> - - <el-col :span="7"> - <div style="font-size: 16px">{{entity.station}}</div> - </el-col > - - <el-col :span="5"> - <div style="font-size: 16px">{{entity.status}}</div> - </el-col> - - <el-col :span="8"> - <div> - <el-progress :stroke-width="10" :percentage="entity.value"></el-progress> - </div> - </el-col> - </el-row> - </div> - </div> - - </el-card> - - </el-col> - - </el-row> + <div id="map_div" style="position:fixed;width: 100%;height: 100vh;margin-top: -5px"></div> + <div style="position:fixed;top: 5px"> + <li onclick="careraFunction()" class="el-icon-video-camera custom-icon" style="font-size: 100px;margin-right: 5px;margin-left: -5px;"></li> + <li onclick="tubFunction()" class="el-icon-user custom-icon" style="font-size: 100px;margin-right: 5px;margin-left: -5px;"></li> + </div> + <div id="Chart1" style="position:fixed;width: 300px;height: 300px;bottom: -60px;right: -40px"></div> </div> @@ -361,9 +76,9 @@ loadMap(); getReallyData(); totalProcess(); - stationProcess(); - indexCount(); - tubLogs(); + //stationProcess(); + //indexCount(); + //tubLogs(); }) //鍦哄湴鍜屽湴鍥剧偣鍑昏仈鍔� function viewStation(station) { @@ -460,6 +175,19 @@ $.ajaxSettings.async = false; } + + //鎽勫儚澶村垪琛� + function careraFunction() { + let url = ctx + "/system/camera"; + $.modal.openTab("鎽勫儚澶村垪琛�",url); + } + + //绠℃潗缁熻 + function tubFunction() { + let url = ctx + "/system/tub"; + $.modal.openTab("绠℃潗缁熻",url); + } + //鍦哄湴杩涘害 function stationProcess() { let url = ctx + "/system/stat/projectProcess"; @@ -508,6 +236,8 @@ map.addOverLay(countriesOverlay1) countriesOverlay.bringToBack(); }); + + //map.setStyle("indigo"); } function init(sel, transform) { @@ -559,17 +289,35 @@ } //鍦板浘涓婂睍绀洪」鐩偣 function showProjectPoint(data){ - var projectIcon = new T.Icon({ - iconUrl: '/bjfw/images/icon/6.png', - iconSize: new T.Point(30, 30), - iconAnchor: new T.Point(6, 40), - }); + var projectIcon; for(let i =0;i<data.length;i++){ + + if (data[i].status === '1'){ + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/yellow.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + }else if (data[i].status === '2'){ + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/blue.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + }else { + projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/red.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + } + let lng = data[i].lng; let lat = data[i].lat; let marker = new T.Marker(new T.LngLat(lng, lat), { title: "鍦哄湴浣嶇疆",icon:projectIcon}); let proj = infoWindowProject(data[i]); addClickHandler(proj, marker); + map.addOverLay(marker); } @@ -585,7 +333,7 @@ "<font style='font-weight: bolder;'>鍦哄湴缂栧彿 :</font>" + e.code + "<br>" + "<font style='font-weight: bolder;'>鍦哄湴鍚嶅瓧 :</font>" + e.fullName + "<br>" + "<font style='font-weight: bolder;'>璐熻矗浜� :</font>" + e.leader + "<br>" + - "<a class='btn' onclick=viewdata(" +"'" + ids+ "'" + ")>鍦哄湴鏁版嵁</a>" + + "<a class='btn' onclick=viewdata(" +"'" + ids+ "'" + ")>鍦哄湴鏁版嵁</a>" + "<br>" + "</div>" + "</div>" + "</div>"; @@ -597,6 +345,7 @@ function addClickHandler(content, marker) { marker.addEventListener("click", function (e) { + console.log("浣犵偣鍑讳簡",content); openInfo(content, e) }); } @@ -621,7 +370,7 @@ $.ajaxSettings.async = false; var option = { - backgroundColor: "#fff", + backgroundColor: "transparent", series: [ { type: "gauge", @@ -760,11 +509,6 @@ Chart1.setOption(option); } - - - - </script> - </body> </html> diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/main4.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/main4.html new file mode 100644 index 0000000..a502ac5 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/main4.html @@ -0,0 +1,772 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> +<head> +<th:block th:include="include :: header('寮瑰眰缁勪欢')" /> +<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet" /> +<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet" /> +<link href="../static/css/main/animate.min.css" th:href="@{/css/main/animate.min.css}" rel="stylesheet" /> +<link href="../static/css/main/style.min862f.css" th:href="@{/css/main/style.min862f.css}" rel="stylesheet" /> +<link rel="stylesheet" th:href="@{/css/custom/main.css}" /> +<link href="../static/js/elementUI/index.css" th:href="@{/js/elementUI/index.css}" rel="stylesheet" /> + +<style type="text/css"> + .content { + width: 100%; + background-color: rgba(0,0,0,0.01) !important; + padding:10px; + } + [v-cloak]{ + display: none; + } + .el-card__header{ + height: 40px; + padding: 8px 20px; + } + .active-red{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #F56C6C; + text-align: center; + line-height: 20px; + float: left; + } + + .active-yellow{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #E6A23C; + text-align: center; + line-height: 20px; + float: left; + } + + .active-blue{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #67C23A; + text-align: center; + line-height: 20px; + float: left; + } + .cdcode{ + width: 15%; + float: left; + margin-left: 10px; + font-size: 16px; + line-height: 20px; + } + .cdstatus{ + width: 15%; + float: left; + margin-left: 0px; + font-size: 16px; + line-height: 20px; + } + .cdprocess{ + width: 60%; + float: left; + margin-left: 10px; + } + .rankrow{ + margin-top: 12px; + cursor: pointer; + } + .ilblock{ + border-left: 1px solid #e3e5e7; + padding: 0 40px; + align-content: center; + } + .ilblock>span{ + display: block; + line-height: 30px; + } + + + <!-- 琛ㄦ牸鏍峰紡 --> + .el-table, .el-table__expanded-cell { + background-color: transparent; + color: #4D4D4D; + font-size: 13px; + } + + .el-table th, + .el-table tr, + .el-table td { + background-color: transparent; + border: 0px; + color: #4D4D4D; + font-size: 13px; + font-family: Source Han Sans CN Normal, Source Han Sans CN Normal-Normal; + font-weight: Normal; + } + .el-table::before { + height: 0px; + } + .el-table__body tr, + .el-table__body td { + padding: 0; + height: 22px; + } + .el-table__row.warning-row { + background:rgb(252,212,165); + } + .el-table__body-wrapper::-webkit-scrollbar-track { + background-color: rgb(252,212,165); + } + .el-table__body-wrapper::-webkit-scrollbar { + width: 10px; + opacity: 0.5; + } + .el-table__body-wrapper::-webkit-scrollbar-thumb { + border-radius: 15px; + background-color:rgb(252,212,165); + } +</style> +</head> + +<body class="gray-bg"> + <div class="content" id="app" v-cloak> + <el-row style="height: 127px;"> + <el-col :span="6"> + <el-card class="box-card"> + <div style="flex:4;padding-right: 20px;" > + <div> + <li class="el-icon-s-promotion" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #409eff;"></li> + <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">鍦哄湴鏁伴噺</span> + </div> + <div style="text-align: center;"> + <span style="color:#ED1C24;font-size: 30px;word-break: break-all;line-height: 70px">34 + </span> + </div> + </div> + + <div style="flex:6;" class="ilblock"> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 鍗忚皟涓� + <span style="float: right">{{indexDataCount.projectStatus0}}</span> +<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> + + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 寰呭紑宸� + <span style="float: right">{{indexDataCount.projectStatus1}}</span> +<!-- <li class="el-icon-caret-bottom" style="color: #e6a23c">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 杩涜涓� + <span style="float: right">{{indexDataCount.projectStatus2}}</span> +<!-- <li class="el-icon-caret-top" style="color: #409eff">--> + </span> + + </div> + </el-card> + </el-col> + + <el-col :span="6"> + <el-card class="box-card"> + <div style="flex:4;padding-right: 20px;"> + <div> + <li class="el-icon-coin" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #085abe"></li> + <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">閽诲瓟杩涘昂</span> + </div> + <div style="text-align: center"> + <span style="color:#1894F6;font-size: 30px;word-break: break-all;line-height: 70px;">647 + </span> + </div> + </div> + + <div style="flex:6;" class="ilblock"> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 鎬昏繘灏� <span style="float: right">{{indexDataCount.footageCount}}m</span> +<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 宸插畬鎴� <span style="float: right">{{indexDataCount.footageCplCount}}m</span> +<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + </div> + </el-card> + </el-col> + + <el-col :span="6"> + <el-card class="box-card"> + <div style="flex:4;padding-right: 20px;"> + <div> + <li class="el-icon-video-camera" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #11d713"></li> + <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">瀹炴椂鐩戞帶</span> + </div> + <div style="text-align: center"> + <span style="color:#F7931E;font-size: 30px;word-break: break-all;line-height: 70px">68 + </span> + </div> + </div> + + <div style="flex:6;" class="ilblock"> + <div> + + </div> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 宸插畨瑁� <span style="float: right">{{indexDataCount.cameraCount}}</span> +<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 鏈畨瑁� <span style="float: right">{{indexDataCount.cameraCountNaN}}</span> +<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + </div> + </el-card> + </el-col> + <el-col :span="6"> + <el-card class="box-card"> + <div style="flex:4;padding-right: 20px;"> + <div> + <li class="el-icon-s-order" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #917ed0"></li> + <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">璧勬枡鏂囦欢</span> + </div> + <div style="text-align: center"> + <span style="color:#F7931E;font-size: 30px;word-break: break-all;line-height: 70px;"> + {{indexDataCount.fileCount}} + </span> + </div> + </div> + + <div style="flex:6;" class="ilblock"> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 鏂藉伐璧勬枡 <span style="float: right">0</span> +<!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 瀹夊叏璧勬枡 <span style="float: right">0</span> +<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 璐ㄩ噺璧勬枡 <span style="float: right">0</span> +<!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + </div> + + </el-card> + </el-col> + </el-row> + <el-row> + <el-col :span="16"> + <el-card class="box-card"> + <div style="height: 200px;width: 100%;"> + <h3>鏉愭枡缁熻</h3> + <el-col :span="10" style="height: 200px;"> + <div style="margin-top: 15px"> + <template> + <el-table :data="tubLogs" border size="small" style="width: 100%" + :header-cell-style="{color: '#4D4D4D',background: '#F7931E',fontWeight: '400'}" + :row-class-name="tableRowClassName"> + <!-- <el-table-column prop="code" label="搴忓彿"></el-table-column>--> + <el-table-column prop="tubName" label="鍚嶇О"></el-table-column> + <el-table-column prop="inboundNumber" label="鍏ュ簱鏁伴噺"></el-table-column> + <el-table-column prop="outboundNumber" label="鍑哄簱鏁伴噺"></el-table-column> + <el-table-column prop="unit" label="鍗曚綅"></el-table-column> + + </el-table> + </template> + </div> + </el-col> + <el-col :span="14" style="height: 200px;"> + <div id="column-chart" style="height: 180px; width: 100%;"></div> + </el-col> + </div> + </el-card> + + <el-card class="box-card" style="margin-top: 20px;"> + <div id="map_div" style="width: 100%;height: 550px;margin-top: -5px"></div> + </el-card> + + </el-col> + + <el-col :span="8"> + <el-card class="box-card"> + <div style="height: 200px;width: 100%"> + <div style="width: 100%;height: 20px;"> + <h3>椤圭洰鎬讳綋杩涘害(%)</h3> + </div> + <div id="Chart1" style="width: 80%;height: 180px;margin-left: 10%;"></div> + </div> + </el-card> + + <el-card class="box-card" style="margin-top: 20px;"> + <div style="width: 100%"> + <div style="width: 100%;height: 20px;margin-bottom: 10px;text-align: center;"> + <h3>鍦哄湴璇︾粏杩涘害(%)</h3> + </div> + <div style="width: 100%;height: 500px;overflow: auto"> + + <el-row class="rankrow" v-for='entity in stationProcessData' @click.native='viewStation(entity)'> + <el-col :span="2" > + <div v-if="entity.status=='鍗忚皟涓�'" class="active-red">{{entity.ranking}}</div> + <div v-if="entity.status=='寰呭紑宸�'" class="active-yellow">{{entity.ranking}}</div> + <div v-if="entity.status=='杩涜涓�'" class="active-blue">{{entity.ranking}}</div> + + </el-col> + + <el-col :span="7"> + <div style="font-size: 16px">{{entity.station}}</div> + </el-col > + + <el-col :span="5"> + <div style="font-size: 16px">{{entity.status}}</div> + </el-col> + + <el-col :span="8"> + <div> + <el-progress :stroke-width="10" :percentage="entity.value"></el-progress> + </div> + </el-col> + </el-row> + </div> + </div> + + </el-card> + + </el-col> + + </el-row> + + </div> + + <script th:src="@{/js/jquery.min.js}"></script> + <script th:src="@{/js/bootstrap.min.js}"></script> + <script th:src="@{/ajax/libs/flot/jquery.flot.js}"></script> + <script th:src="@{/ajax/libs/report/echarts/echarts-all.js}"></script> + <script th:src="@{/js/tdt.js}" type="text/javascript"></script> + <script src="http://lbs.tianditu.gov.cn/js/lib/d3/d3.min.js" type="text/javascript"></script> + <script src="http://lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/D3SvgOverlay.js" type="text/javascript"></script> + <script th:src="@{/js/custom/main.js}"></script> + + <script th:src="@{/js/vue.min.js}"></script> + <script th:src="@{/js/elementUI/index.js}"></script> + + <th:block th:include="include :: sparkline-js" /> + <th:block th:include="include :: footer" /> + + <script th:inline="javascript"> + + $(function() { + loadMap(); + getReallyData(); + totalProcess(); + stationProcess(); + indexCount(); + tubLogs(); + }) + //鍦哄湴鍜屽湴鍥剧偣鍑昏仈鍔� + function viewStation(station) { + var lng = station.lng; + var lat = station.lat; + map.centerAndZoom(new T.LngLat(lng, lat), 13); + } + + function tubLogs() { + + const chart = echarts.init(document.getElementById("column-chart")); + const option = { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + legend: {}, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: [] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '鍑哄簱', + type: 'bar', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#e2b507' + } + }, + { + name: '鍏ュ簱', + type: 'bar', + stack: 'Ad', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#2992c6' + } + }, + + ] + }; + + let url = ctx + "/system/stat/tubLogData"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.tubLogs = res.tubLogs; + + res.tubLogs.forEach(function(value, index, array) { + const tubName = value.tubName; + const inboundNumber = value.inboundNumber; + const outboundNumber = value.outboundNumber; + const unit = value.unit; + option.xAxis[0].data[index] = tubName; + option.series[0].data[index] = outboundNumber; + option.series[1].data[index] = inboundNumber; + }); + chart.setOption(option, true); + }) + $.ajaxSettings.async = false; + } + + //棣栭〉绗竴琛屼釜鏁扮粺璁� + function indexCount() { + let url = ctx + "/system/stat/indexDataCount"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.indexDataCount = res.data; + vm.indexDataCount.cameraCountNaN = 68 -vm.indexDataCount.cameraCount; + }) + $.ajaxSettings.async = false; + + } + //鍦哄湴杩涘害 + function stationProcess() { + let url = ctx + "/system/stat/projectProcess"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.stationProcessData = res.projectData; + }) + $.ajaxSettings.async = false; + } + var vm = new Vue({ + el: "#app", + data() { + return { + stationProcessData: [], + indexDataCount :"", + tubLogs:[], + }; + }, + methods: { + tableRowClassName({ row, rowIndex }) { + if (rowIndex % 2 == 0) { + return ""; + } else { + return "warning-row"; + } + }, + } + }); + // 鍔犺浇鍦板浘 + let map=null; + var countries = []; + var countriesOverlay = new T.D3Overlay(init,redraw); + var countriesOverlay1 = new T.D3Overlay(init1,redraw1); + function loadMap() { + map = new T.Map('map_div'); + map.centerAndZoom(new T.LngLat(116.38, 40.2), 9); + + var control = new T.Control.Zoom(); + control.setPosition(T_ANCHOR_TOP_RIGHT); + map.addControl(control);// 娣诲姞缂╂斁骞崇Щ鎺т欢 + var scale = new T.Control.Scale();// 鍒涘缓姣斾緥灏烘帶浠跺璞� + d3.json("/bjfw/js/custom/beijing.json", function (data) { + countries = data.features; + map.addOverLay(countriesOverlay) + countriesOverlay.bringToBack(); + map.addOverLay(countriesOverlay1) + countriesOverlay.bringToBack(); + }); + + //map.setStyle("indigo"); + } + + function init(sel, transform) { + var upd = sel.selectAll('path.geojson').data(countries); + upd.enter() + .append('path') + .attr("class", "geojson") + .attr('stroke', 'grey') + .attr('fill', function (d, i) { + //return d3.hsl(Math.random() * 360, 0.9, 0.5) + return "transparent" + }) + .attr('fill-opacity', '0') + } + function redraw(sel, transform) { + sel.selectAll('path.geojson').each( + function (d, i) { + d3.select(this).attr('d', transform.pathFromGeojson) + } + ) + } + function init1(sel, transform) { + var upd = sel.selectAll('path.geojson1').data(countries); + upd.enter() + .append('path') + .attr("class", "geojson1") + .attr('stroke', 'grey') + .attr('fill', function (d, i) { + return d3.hsl(Math.random() * 360, 0.9, 0.5) + }) + .attr('fill-opacity', '0.1') + } + + function redraw1(sel, transform) { + sel.selectAll('path.geojson1').each( + function (d, i) { + d3.select(this).attr('d', transform.pathFromGeojson) + } + ) + } + + // 鑾峰彇鏁版嵁搴撶湡瀹炴暟鎹� + function getReallyData() { + let url = window.location.protocol + "//" + window.location.host + "/bjfw/system/stat/project"; + $.get(url,function(res){ + var data = res.projects; + showProjectPoint(data); + }) + } + //鍦板浘涓婂睍绀洪」鐩偣 + function showProjectPoint(data){ + var projectIcon = new T.Icon({ + iconUrl: '/bjfw/images/icon/6.png', + iconSize: new T.Point(30, 30), + iconAnchor: new T.Point(6, 40), + }); + for(let i =0;i<data.length;i++){ + let lng = data[i].lng; + let lat = data[i].lat; + let marker = new T.Marker(new T.LngLat(lng, lat), { title: "鍦哄湴浣嶇疆",icon:projectIcon}); + let proj = infoWindowProject(data[i]); + addClickHandler(proj, marker); + map.addOverLay(marker); + } + + } + + function infoWindowProject(e){ + + let ids = e.ids + ""; + var sContent = + "<div style='margin:0px;'>" + + "<div>" + + "<div style='margin:1px 0px 1px 2px;width: 200px;'>" + + "<font style='font-weight: bolder;'>鍦哄湴缂栧彿 :</font>" + e.code + "<br>" + + "<font style='font-weight: bolder;'>鍦哄湴鍚嶅瓧 :</font>" + e.fullName + "<br>" + + "<font style='font-weight: bolder;'>璐熻矗浜� :</font>" + e.leader + "<br>" + + "<a class='btn' onclick=viewdata(" +"'" + ids+ "'" + ")>鍦哄湴鏁版嵁</a>" + + "</div>" + + "</div>" + + "</div>"; + return sContent; + } + function viewdata (id) { + $.modal.openTab("鍦哄湴瀵艰埅",ctx+ "/geo/project/navigate?ids="+id); + } + + function addClickHandler(content, marker) { + marker.addEventListener("click", function (e) { + openInfo(content, e) + }); + } + + function openInfo(content, e) { + var point = e.lnglat; + var markerInfoWin = new T.InfoWindow(content, { offset: new T.Point(0, -30) }); // 鍒涘缓淇℃伅绐楀彛瀵硅薄 + map.openInfoWindow(markerInfoWin, point); //寮�鍚俊鎭獥鍙� + } + + + //鎬昏繘搴︿华琛ㄧ洏 + function totalProcess() { + var Chart1 = echarts.init(document.getElementById('Chart1')); + var pointerData = 0; // 浠〃鎸囬拡鏁版嵁 + let url = ctx + "/system/stat/totalProcess"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + pointerData = res.pointerData; + pointerData = (pointerData*100).toFixed(0); + }); + + $.ajaxSettings.async = false; + var option = { + backgroundColor: "#fff", + series: [ + { + type: "gauge", + radius: 80, + z: 1, + startAngle: 225, + endAngle: -45, + splitNumber: 50, + title: { + color: "red", + }, + splitLine: { + show: true, + length: 15, + distance: -10, + lineStyle: { + color: "#fff", + width: 1, + }, + }, + detail: { + show: true, + offsetCenter: [0, 60], + fontSize: 22, + formatter: (val) => [`{a|${val}}`, `{b|%}`].join(""), + rich: { + a: { + fontSize: 20, + color: "rgba(84, 108, 198, 0.65)", + }, + b: { + fontSize: 24, + color: "rgba(84, 108, 198, 0.65)", + }, + }, + }, + // 浠〃鐩樼殑绾匡紝棰滆壊鍊间负涓�涓暟缁� + axisLine: { + show: true, + // 涓ょ鏄惁璁剧疆涓哄渾瑙掞紱鍦�5.0涔嬪悗鐨勭増鏈湁鏁� + roundCap: false, + lineStyle: { + width: 15, + shadowColor: "#0093ee", //榛樿閫忔槑 + shadowOffsetX: 0, + shadowOffsetY: 0, + shadowBlur: 20, + opacity: 1, + color: [ + [ + pointerData / 100, + { + x: 0, + y: 0, + x1: 1, + y1: 0, + colorStops: [ + { + offset: 0, + color: "rgba(0, 255, 255, 0.6)", + }, + { + offset: 1, + color: "rgba(0, 0, 255, .6)", + }, + ], + }, + ], + [1, "rgba(0,0,0,0.15)"], + ], + }, + }, + // 浠〃鐩樺埢搴︽爣绛� + axisLabel: { + show: true, + color: "rgba(84, 108, 198, 0.65)", + fontSize: 14, + distance: 20, + formatter: (val) => { + const num = Math.floor(val); + return num % 20 === 0 ? num : ""; + }, + }, + // 鍒诲害 + axisTick: { + show: false, + }, + // 鎸囬拡锛屾璁剧疆浠呭5.0浠ヤ笂鐨勭増鏈敓鏁� + anchor: { + show: true, + icon: "circle", + showAbove: true, + size: 20, + itemStyle: { + borderWidth: 6, + borderColor: "rgba(84, 108, 198, 0.85)", + }, + }, + data: [pointerData], + }, + { + // 鑳屾櫙娓愬彉鑹� + type: "pie", + radius: "80%", + // 涓嶅搷搴斿強瑙﹀彂榧犳爣浜嬩欢 + silent: true, + // 鍏抽棴鑳屾櫙鍔ㄧ敾 + animation: false, + z: 0, + itemStyle: { + color: { + type: "radial", // 寰勫悜娓愬彉 + x: 0.5, + y: 0.5, + r: 0.25, + colorStops: [ + { + offset: 0, + color: "rgba(84, 103, 198, 0.6)", + }, + { + offset: 0.1, + color: "rgba(84, 103, 198, 0.35)", + }, + { + offset: 1, + color: "rgba(84, 103, 198, 0)", + }, + ], + }, + }, + data: [pointerData], + }, + ], + }; + Chart1.setOption(option); + } + + + + + +</script> + +</body> +</html> diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/camera_list.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/camera_list.html new file mode 100644 index 0000000..8d197b9 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/camera_list.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> +<head> +<th:block th:include="include :: header('寮瑰眰缁勪欢')" /> +<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet" /> +<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet" /> +<link href="../static/css/main/animate.min.css" th:href="@{/css/main/animate.min.css}" rel="stylesheet" /> +<link href="../static/css/main/style.min862f.css" th:href="@{/css/main/style.min862f.css}" rel="stylesheet" /> +<link rel="stylesheet" th:href="@{/css/custom/main.css}" /> +<link href="../static/js/elementUI/index.css" th:href="@{/js/elementUI/index.css}" rel="stylesheet" /> + +<style type="text/css"> + .custom-icon { + font-size: 120px; + margin-right: 5px; + margin-left: -5px; + } + .icon-container:hover .custom-icon, + .icon-container:hover .custom-font{ + color: #0981ea; + cursor: pointer; + } +</style> +</head> + +<body class="gray-bg"> + <div class="content" id="app" v-cloak> + <el-row> + <el-col :span="4" v-for="(item, index) in cameraData" :key="item.projectId"> + <div class="icon-container" style="margin-left: 40px;"> + <li @click="handleClick(item.projectId)" class="el-icon-video-camera-solid custom-icon"></li> + <h2 @click="handleClick(item.projectId)" class="custom-font" style="margin-top: 0px;margin-left: 0px;margin-bottom: 0px">{{item.projectName}}({{item.projectCode}})</h2> + </div> + </el-col> + </el-row> + </div> + + <script th:src="@{/js/jquery.min.js}"></script> + <script th:src="@{/js/bootstrap.min.js}"></script> + <script th:src="@{/ajax/libs/flot/jquery.flot.js}"></script> + <script th:src="@{/js/custom/main.js}"></script> + <script th:src="@{/js/vue.min.js}"></script> + <script th:src="@{/js/elementUI/index.js}"></script> + <th:block th:include="include :: sparkline-js" /> + <th:block th:include="include :: footer" /> + +<script th:inline="javascript"> + $(function() { + // 鑾峰彇鎽勫儚澶村垪琛� + getCareraList(); + }) + + var vm = new Vue({ + el: "#app", + data() { + return { + cameraData: [], + }; + }, + methods: { + // 鎽勫儚澶寸偣鍑讳簨浠� + handleClick(projectId) { + $.modal.open('瑙嗛鎾斁', ctx + "/player?projectId="+projectId , 1300,580); + }, + handleClose(done) { + this.$confirm('纭鍏抽棴锛�') + .then(_ => { + done(); + }) + .catch(_ => { + $("#palyerIframe0").attr("src",'about:blank'); + $("#palyerIframe1").attr("src",'about:blank'); + }); + }, + } + }); + + function getCareraList() { + let url = ctx + "/system/stat/cameraData"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.cameraData = res.cameraData; + }) + $.ajaxSettings.async = false; + } +</script> + +</body> +</html> diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/player2.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/player2.html new file mode 100644 index 0000000..1d221f3 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/player2.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" > +<head> + <th:block th:include="include :: header('瑙嗛鎾斁')" /> +</head> +<body class="white-bg"> + <div class="wrapper wrapper-content animated fadeInRight ibox-content"> + <div> + <iframe style="margin-left: 20px" id ="palyerIframe0" + src="" + width="600px" + height="400px;" + allowfullscreen> + </iframe> + <iframe style="margin-left: 20px" id ="palyerIframe1" + src="" + width="600px" + height="400px;" + allowfullscreen> + </iframe> + </div> + </div> + <th:block th:include="include :: footer" /> + <script th:src="@{/ajax/libs/EZUIKit/ezuikit.js}"></script> + <script th:inline="javascript"> + var prefix = ctx + "geo/projectCamera"; + var cameraDataList = [[${cameraDataList}]]; + cameraDataList.forEach(function(value, index, array) { + const playerUrl = value.url; + $("#palyerIframe" + index).attr("src",playerUrl); + }); + </script> +</body> + +</html> \ No newline at end of file diff --git a/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/tub_list.html b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/tub_list.html new file mode 100644 index 0000000..8624537 --- /dev/null +++ b/javaweb-plus/javaweb-admin/src/main/resources/templates/system/camera_tub/tub_list.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> +<head> + <th:block th:include="include :: header('寮瑰眰缁勪欢')" /> + <link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet" /> + <link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet" /> + <link href="../static/css/main/animate.min.css" th:href="@{/css/main/animate.min.css}" rel="stylesheet" /> + <link href="../static/css/main/style.min862f.css" th:href="@{/css/main/style.min862f.css}" rel="stylesheet" /> + <link rel="stylesheet" th:href="@{/css/custom/main.css}" /> + <link href="../static/js/elementUI/index.css" th:href="@{/js/elementUI/index.css}" rel="stylesheet" /> + + <style type="text/css"> + .content { + width: 100%; + background-color: rgba(0,0,0,0.01) !important; + padding:10px; + } + [v-cloak]{ + display: none; + } + + .active-red{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #F56C6C; + text-align: center; + line-height: 20px; + float: left; + } + + .active-yellow{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #E6A23C; + text-align: center; + line-height: 20px; + float: left; + } + + .active-blue{ + width: 20px; + height: 20px; + border-radius: 50%; + font-size: 14px; + color: white; + background: #67C23A; + text-align: center; + line-height: 20px; + float: left; + } + + .rankrow{ + margin-top: 12px; + cursor: pointer; + } + .ilblock{ + border-left: 1px solid #e3e5e7; + padding: 0 40px; + align-content: center; + } + .ilblock>span{ + display: block; + line-height: 30px; + } + + + + + .el-table th, + .el-table tr, + .el-table td { + background-color: transparent; + border: 0px; + color: #4D4D4D; + font-size: 13px; + font-family: Source Han Sans CN Normal, Source Han Sans CN Normal-Normal; + font-weight: Normal; + } + .el-table::before { + height: 0px; + } + .el-table__body tr, + .el-table__body td { + padding: 0; + height: 22px; + } + + </style> +</head> + +<body class="gray-bg"> +<div class="content" id="app" v-cloak> + + <el-row style="height: 127px;"> + <el-col :span="24"> + <el-card class="box-card"> + <div style="flex:4;padding-right: 20px;"> + <div> + <li class="el-icon-s-order" style="font-size: 18px;margin-right: 5px;margin-left: -5px;color: #917ed0"></li> + <span style="color:rgba(0,0,0,.65);font-size: 15px;font-weight: bold;">璧勬枡鏂囦欢</span> + </div> + <div style="text-align: center"> + <span style="color:#F7931E;font-size: 30px;word-break: break-all;line-height: 70px;"> + {{indexDataCount.fileCount}} + </span> + </div> + </div> + + <div style="flex:6;" class="ilblock"> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 鏂藉伐璧勬枡 <span style="float: right">0</span> + <!-- <li class="el-icon-caret-bottom" style="color: #f56c6c">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 瀹夊叏璧勬枡 <span style="float: right">0</span> + <!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + <span style="color:rgba(0,0,0,.87);font-size: 15px;"> + 璐ㄩ噺璧勬枡 <span style="float: right">0</span> + <!-- <li class="el-icon-caret-bottom" style="color: #409eff">--> + </span> + </div> + + </el-card> + </el-col> + </el-row> + + <el-row> + <el-col :span="24"> + <el-card class="box-card"> + <div style="height: 70vh;width: 100%;"> + <h3>鏉愭枡缁熻</h3> + <el-col :span="10" style="height: 200px;"> + <div style="margin-top: 15px"> + <template> + <el-table :data="tubLogs" border size="small" style="width: 100%" + :header-cell-style="{color: '#4D4D4D',background: '#F7931E',fontWeight: '400'}" + :row-class-name="tableRowClassName"> + <!-- <el-table-column prop="code" label="搴忓彿"></el-table-column>--> + <el-table-column prop="tubName" label="鍚嶇О"></el-table-column> + <el-table-column prop="inboundNumber" label="鍏ュ簱鏁伴噺"></el-table-column> + <el-table-column prop="outboundNumber" label="鍑哄簱鏁伴噺"></el-table-column> + <el-table-column prop="unit" label="鍗曚綅"></el-table-column> + + </el-table> + </template> + </div> + </el-col> + <el-col :span="14" style="height: 200px;"> + <div id="column-chart" style="height: 380px; width: 100%;"></div> + </el-col> + </div> + </el-card> + </el-col> + + </el-row> + +</div> + +<script th:src="@{/js/jquery.min.js}"></script> +<script th:src="@{/js/bootstrap.min.js}"></script> +<script th:src="@{/ajax/libs/flot/jquery.flot.js}"></script> +<script th:src="@{/ajax/libs/report/echarts/echarts-all.js}"></script> +<script th:src="@{/js/custom/main.js}"></script> + +<script th:src="@{/js/vue.min.js}"></script> +<script th:src="@{/js/elementUI/index.js}"></script> + +<th:block th:include="include :: sparkline-js" /> +<th:block th:include="include :: footer" /> + +<script th:inline="javascript"> + + $(function() { + indexCount(); + tubLogs(); + }) + + function tubLogs() { + + const chart = echarts.init(document.getElementById("column-chart")); + const option = { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + legend: {}, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: [] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '鍑哄簱', + type: 'bar', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#e2b507' + } + }, + { + name: '鍏ュ簱', + type: 'bar', + stack: 'Ad', + emphasis: { + focus: 'series' + }, + data: [], + itemStyle: { + // 淇敼鏌卞瓙鐨勯鑹� + color: '#2992c6' + } + }, + + ] + }; + + let url = ctx + "/system/stat/tubLogData"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.tubLogs = res.tubLogs; + + res.tubLogs.forEach(function(value, index, array) { + const tubName = value.tubName; + const inboundNumber = value.inboundNumber; + const outboundNumber = value.outboundNumber; + const unit = value.unit; + option.xAxis[0].data[index] = tubName; + option.series[0].data[index] = outboundNumber; + option.series[1].data[index] = inboundNumber; + }); + chart.setOption(option, true); + }) + $.ajaxSettings.async = false; + } + + //棣栭〉绗竴琛屼釜鏁扮粺璁� + function indexCount() { + let url = ctx + "/system/stat/indexDataCount"; + $.ajaxSettings.async = false; + $.get(url,{},function(res){ + vm.indexDataCount = res.data; + vm.indexDataCount.cameraCountNaN = 68 -vm.indexDataCount.cameraCount; + }) + $.ajaxSettings.async = false; + } + + var vm = new Vue({ + el: "#app", + data() { + return { + stationProcessData: [], + indexDataCount :"", + tubLogs:[], + }; + }, + methods: { + tableRowClassName({ row, rowIndex }) { + if (rowIndex % 2 == 0) { + return ""; + } else { + return "warning-row"; + } + }, + } + }); + +</script> + +</body> +</html> diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/controller/ProjectCameraController.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/controller/ProjectCameraController.java index 83c2fde..741cb20 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/controller/ProjectCameraController.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/controller/ProjectCameraController.java @@ -51,6 +51,12 @@ return prefix + "/projectCamera"; } + @RequiresPermissions("geo:projectCamera:view2") + @GetMapping("/view2") + public String projectCamera2() { + return prefix + "/projectCamera2"; + } + /** * 鏌ヨ鐩戞帶璁惧鍒楄〃 */ @@ -70,8 +76,6 @@ List<ProjectCamera> list = projectCameraService.selectProjectCameraList(projectCamera); return AjaxResult.success(list); } - - @GetMapping("/cameraPlayerUrl") @ResponseBody @@ -124,7 +128,8 @@ * 鏂板鐩戞帶璁惧 */ @GetMapping("/add") - public String add() { + public String add(String projectId, ModelMap mmap) { + mmap.put("projectId", projectId); return prefix + "/add"; } diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/Project.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/Project.java index 4eb2270..aff0f9f 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/Project.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/Project.java @@ -160,7 +160,7 @@ return url; } - public void settianUrl(String url) { + public void setUrl(String url) { this.url = url; } diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/ProjectCamera.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/ProjectCamera.java index e1002ec..f3e593a 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/ProjectCamera.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/domain/ProjectCamera.java @@ -21,6 +21,12 @@ /** 椤圭洰id */ private String projectId; + /** 椤圭洰鍚嶇О */ + private String projectName; + + /** 椤圭洰缂栧彿 */ + private String projectCode; + /** 鍚嶇О */ @Excel(name = "鍚嶇О") private String name; @@ -40,6 +46,9 @@ /** Ip鍦板潃 */ @Excel(name = "Ip鍦板潃") private String ip; + + /** 瑙嗛鎾斁璺緞 */ + private String url; public void setId(String id) { @@ -64,7 +73,23 @@ this.name = name; } - public String getName() + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getProjectCode() { + return projectCode; + } + + public void setProjectCode(String projectCode) { + this.projectCode = projectCode; + } + + public String getName() { return name; } @@ -105,6 +130,14 @@ return ip; } + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/mapper/ProjectCameraMapper.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/mapper/ProjectCameraMapper.java index bee7057..ea7551f 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/mapper/ProjectCameraMapper.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/mapper/ProjectCameraMapper.java @@ -60,4 +60,10 @@ public int deleteProjectCameraByIds(String[] ids); public Integer count(); + + /** + * 鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + List<ProjectCamera> selectCameraDataOnLine(); } diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/IProjectCameraService.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/IProjectCameraService.java index 2746587..89572b7 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/IProjectCameraService.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/IProjectCameraService.java @@ -58,4 +58,10 @@ * @return 缁撴灉 */ public int deleteProjectCameraById(String id); + + /** + * 鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + List<ProjectCamera> selectCameraDataOnLine(); } diff --git a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/impl/ProjectCameraServiceImpl.java b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/impl/ProjectCameraServiceImpl.java index bddc2e3..7e49a21 100644 --- a/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/impl/ProjectCameraServiceImpl.java +++ b/javaweb-plus/javaweb-cms/src/main/java/com/javaweb/geo/service/impl/ProjectCameraServiceImpl.java @@ -92,4 +92,13 @@ public int deleteProjectCameraById(String id) { return projectCameraMapper.deleteProjectCameraById(id); } + + /** + * 鑾峰彇鍦ㄧ嚎鎽勫儚澶寸殑淇℃伅 + * @return + */ + @Override + public List<ProjectCamera> selectCameraDataOnLine() { + return projectCameraMapper.selectCameraDataOnLine(); + } } diff --git a/javaweb-plus/javaweb-cms/src/main/resources/mapper/geo/ProjectCameraMapper.xml b/javaweb-plus/javaweb-cms/src/main/resources/mapper/geo/ProjectCameraMapper.xml index b5e3012..64f4c86 100644 --- a/javaweb-plus/javaweb-cms/src/main/resources/mapper/geo/ProjectCameraMapper.xml +++ b/javaweb-plus/javaweb-cms/src/main/resources/mapper/geo/ProjectCameraMapper.xml @@ -7,6 +7,8 @@ <resultMap type="ProjectCamera" id="ProjectCameraResult"> <result property="id" column="id" /> <result property="projectId" column="project_id" /> + <result property="projectName" column="project_name" /> + <result property="projectCode" column="project_code" /> <result property="name" column="name" /> <result property="code" column="code" /> <result property="lng" column="lng" /> @@ -40,7 +42,25 @@ <select id ="count" resultType="Integer"> select count(*) from js_project_camera </select> - + + <select id="selectCameraDataOnLine" resultMap="ProjectCameraResult"> + SELECT + a.id, + a.project_id, + b.full_name AS project_name, + b.`code` AS project_code, + a.NAME, + a.CODE, + a.lng, + a.lat, + a.ip, + a.create_by, + a.create_time + FROM + js_project_camera a + LEFT JOIN js_project b ON a.project_id = b.ids GROUP BY a.project_id; + </select> + <insert id="insertProjectCamera" parameterType="ProjectCamera"> insert into js_project_camera <trim prefix="(" suffix=")" suffixOverrides=","> diff --git a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/project/info.html b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/project/info.html index 311cff5..94a8c41 100644 --- a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/project/info.html +++ b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/project/info.html @@ -120,7 +120,7 @@ </el-col> <el-col :span="10" > - <el-card class="box-card card-yellow" style="height: 320px;margin-right: 20px;"> + <el-card class="box-card card-blue" style="height: 320px;margin-right: 20px;"> <div slot="header" class="clearfix"> <span>閽诲瓟鍒嗗竷鍥�</span> </div> @@ -181,7 +181,7 @@ <el-row style="height: 200px;"> <el-col :span="24"> - <el-card class="box-card card-yellow" style="height: 320px;margin-top: 20px"> + <el-card class="box-card card-blue" style="height: 320px;margin-top: 20px"> <div slot="header" class="clearfix"> <span>鏉愭枡缁熻</span> </div> diff --git a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/add.html b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/add.html index 7ac1df0..6cf463a 100644 --- a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/add.html +++ b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/add.html @@ -41,13 +41,17 @@ <th:block th:include="include :: footer" /> <script th:inline="javascript"> var prefix = ctx + "geo/projectCamera" + var projectId = [[${projectId}]]; + $("#form-projectCamera-add").validate({ focusCleanup: true }); function submitHandler() { if ($.validate.form()) { - $.operate.save(prefix + "/add", $('#form-projectCamera-add').serialize()); + let formData = $('#form-projectCamera-add').serialize(); + let data = formData + "&projectId=" + projectId; + $.operate.save(prefix + "/add", data); } } </script> diff --git a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera.html b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera.html index 7f2beff..9030507 100644 --- a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera.html +++ b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera.html @@ -55,11 +55,12 @@ var editFlag = [[${@permission.hasPermi('geo:projectCamera:edit')}]]; var removeFlag = [[${@permission.hasPermi('geo:projectCamera:remove')}]]; var prefix = ctx + "geo/projectCamera"; + var projectId=[[${projectId}]]; $(function() { var options = { - url: prefix + "/list", - createUrl: prefix + "/add", + url: prefix + "/list?projectId="+projectId, + createUrl: prefix + "/add?projectId="+projectId, updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove", exportUrl: prefix + "/export", @@ -99,7 +100,7 @@ formatter: function(value, row, index) { var actions = []; actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>缂栬緫</a> '); - actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>鍒犻櫎</a>'); + actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>鍒犻櫎</a> '); actions.push('<a class="btn btn-info btn-xs ' + '" href="javascript:void(0)" onclick="player(\'' + row.id + '\')"><i class="fa fa-video-camera"></i>鎾斁</a>'); return actions.join(''); } diff --git a/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera2.html b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera2.html new file mode 100644 index 0000000..2f6a1e8 --- /dev/null +++ b/javaweb-plus/javaweb-cms/src/main/resources/templates/geo/projectCamera/projectCamera2.html @@ -0,0 +1,117 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> +<head> + <th:block th:include="include :: header('鐩戞帶璁惧鍒楄〃')" /> +</head> +<body class="gray-bg"> + <div class="container-div"> + <div class="row"> + <div class="col-sm-12 search-collapse"> + <form id="formId"> + <div class="select-list"> + <ul> + <li> + <p>鍚嶇О锛�</p> + <input type="text" name="name"/> + </li> + <li> + <p>瑙嗛缂栧彿锛�</p> + <input type="text" name="code"/> + </li> + <li> + <p>Ip鍦板潃锛�</p> + <input type="text" name="ip"/> + </li> + <li> + <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 鎼滅储</a> + <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i> 閲嶇疆</a> + </li> + </ul> + </div> + </form> + </div> + + <div class="btn-group-sm" id="toolbar" role="group"> +<!-- <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="geo:projectCamera:add">--> +<!-- <i class="fa fa-plus"></i> 娣诲姞--> +<!-- </a>--> + <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="geo:projectCamera:edit"> + <i class="fa fa-edit"></i> 淇敼 + </a> +<!-- <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="geo:projectCamera:remove">--> +<!-- <i class="fa fa-remove"></i> 鍒犻櫎--> +<!-- </a>--> +<!-- <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="geo:projectCamera:export">--> +<!-- <i class="fa fa-download"></i> 瀵煎嚭--> +<!-- </a>--> + </div> + <div class="col-sm-12 select-table table-striped"> + <table id="bootstrap-table"></table> + </div> + </div> + </div> + <th:block th:include="include :: footer" /> + <script th:inline="javascript"> + var editFlag = [[${@permission.hasPermi('geo:projectCamera:edit')}]]; + var removeFlag = [[${@permission.hasPermi('geo:projectCamera:remove')}]]; + var prefix = ctx + "geo/projectCamera"; + var projectId=[[${projectId}]]; + + $(function() { + var options = { + url: prefix + "/list", + createUrl: prefix + "/add", + updateUrl: prefix + "/edit/{id}", + removeUrl: prefix + "/remove", + exportUrl: prefix + "/export", + modalName: "鐩戞帶璁惧", + columns: [{ + checkbox: true + }, + { + field : 'id', + title : '涓婚敭', + visible: false + }, + { + field : 'name', + title : '鍚嶇О' + }, + { + field : 'code', + title : '瑙嗛缂栧彿' + }, + { + field : 'lng', + title : '缁忓害' + }, + { + field : 'lat', + title : '绾害' + }, + { + field : 'ip', + title : 'Ip鍦板潃', + visible: false + }, + { + title: '鎿嶄綔', + align: 'center', + formatter: function(value, row, index) { + var actions = []; + actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>缂栬緫</a> '); + //actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>鍒犻櫎</a> '); + actions.push('<a class="btn btn-info btn-xs ' + '" href="javascript:void(0)" onclick="player(\'' + row.id + '\')"><i class="fa fa-video-camera"></i>鎾斁</a>'); + return actions.join(''); + } + }] + }; + $.table.init(options); + }); + + function player(id) { + $.modal.open('瑙嗛鎾斁', prefix + "/player?id="+id); + } + </script> +</body> +</html> \ No newline at end of file -- Gitblit v1.9.1