wangmengwei 1 周之前
父節點
當前提交
1de95a830a

+ 44 - 0
ruoyi-ui/src/api/manage/dialIndicator.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询计报警记录列表
+export function listDialIndicator(query) {
+  return request({
+    url: '/manage/dialIndicator/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询计报警记录详细
+export function getDialIndicator(logId) {
+  return request({
+    url: '/manage/dialIndicator/' + logId,
+    method: 'get'
+  })
+}
+
+// 新增计报警记录
+export function addDialIndicator(data) {
+  return request({
+    url: '/manage/dialIndicator',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改计报警记录
+export function updateDialIndicator(data) {
+  return request({
+    url: '/manage/dialIndicator/put',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除计报警记录
+export function delDialIndicator(logId) {
+  return request({
+    url: '/manage/dialIndicator/delete/' + logId,
+    method: 'get'
+  })
+}

+ 11 - 0
ruoyi-ui/src/api/system/channelNumber.js

@@ -9,6 +9,17 @@ export function listChannelNumber(query) {
   })
 }
 
+// 查询通道管理列表
+export function listChannelNumbernopa(query) {
+  return request({
+    url: '/manage/channelNumber/listNoPage',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
 // 查询通道管理详细
 export function getChannelNumber(channelId) {
   return request({

+ 1 - 1
ruoyi-ui/src/components/ImageUploadrss/index.vue

@@ -25,7 +25,7 @@
        <img src="../../assets/images/icon_js_sctp.png" alt="">
        <div style=" margin-top: -50px; font-weight: 500;font-size: 14px;color: #C3C3C3;line-height: 25px;">可直接拖拽图片至此处或点击按钮上传本地图片</div>
      </div>
-     <div style="width: 115px;
+     <div class="qundew" style="width: 115px;
 height: 40px; float: right;margin-top: 15px;
 background: #DCF3EC; margin-right: 5px;
 border-radius: 10px; display: flex;align-items: center;

+ 6 - 0
ruoyi-ui/src/main.js

@@ -14,6 +14,10 @@ import directive from './directive' // directive
 import plugins from './plugins' // plugins
 import { download } from '@/utils/request'
 
+
+// 全局引用样式
+import 'vue-area-linkage/dist/index.css'
+
 import './assets/icons' // icon
 import './permission' // permission control
 import { getDicts } from "@/api/system/dict/data"
@@ -34,6 +38,7 @@ import ImageUploadr from "@/components/ImageUploadr"
 import ImageUploadrss from "@/components/ImageUploadrss"
 
 import Photo from "@/components/Photo"
+import VueAreaLinkage from 'vue-area-linkage'
 
 
 // 图片预览组件
@@ -79,6 +84,7 @@ Vue.component('ImagePreview', ImagePreview)
 Vue.use(directive)
 Vue.use(plugins)
 Vue.use(VueMeta)
+Vue.use(VueAreaLinkage)
 DictData.install()
 
 /**

+ 1 - 1
ruoyi-ui/src/settings.js

@@ -1,5 +1,5 @@
 module.exports = {
-  urls: `http://192.168.101.86:8099`,
+  urls: `http://192.168.101.245:8099`,
    // urls: `http://10.90.90.53:8099`,
   // 10.90.90.52 192.168.101.245
   // 10.90.90.53

+ 405 - 0
ruoyi-ui/src/views/shipinggaoj/dialIndicator/index.vue

@@ -0,0 +1,405 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+     <el-row>
+       <el-col :span="8">
+         <el-form-item label="端口号" prop="portNo">
+           <el-input
+             v-model="queryParams.portNo"
+             placeholder="请输入报警设备端口号"
+             clearable
+             @keyup.enter.native="handleQuery"
+           />
+         </el-form-item>
+       </el-col>
+       <el-col :span="8">
+         <el-form-item label="协议类型" prop="protocol">
+           <el-input
+             v-model="queryParams.protocol"
+             placeholder="请输入协议类型"
+             clearable
+             @keyup.enter.native="handleQuery"
+           />
+         </el-form-item>
+       </el-col>
+       <el-col :span="8">
+         <el-form-item label="通道名称" prop="channelName">
+           <el-input
+             v-model="queryParams.channelName"
+             placeholder="请输入通道名称"
+             clearable
+             @keyup.enter.native="handleQuery"
+           />
+         </el-form-item>
+       </el-col>
+       <el-col :span="8">
+        <el-form-item label="状态表" prop="statusResult">
+          <el-input
+            v-model="queryParams.statusResult"
+            placeholder="请输入状态表状态"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+       </el-col>
+       <el-col :span="8">
+         <el-form-item>
+           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+         </el-form-item>
+       </el-col>
+     </el-row>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['manage:dialIndicator:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['manage:dialIndicator:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['manage:dialIndicator:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['manage:dialIndicator:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dialIndicatorList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="协议类型" align="center" prop="protocol" />
+      <el-table-column label="通道名称" align="center" prop="channelName" />
+      <el-table-column label="事件类型" align="center" prop="eventType" />
+      <el-table-column label="设备编号" align="center" prop="deviceUuid" />
+      <el-table-column label="报警图片" align="center" prop="photo" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['manage:dialIndicator:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['manage:dialIndicator:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改计报警记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="报警设备IPv4地址" prop="ipAddress">
+          <el-input v-model="form.ipAddress" placeholder="请输入报警设备IPv4地址" />
+        </el-form-item>
+        <el-form-item label="报警设备端口号" prop="portNo">
+          <el-input v-model="form.portNo" placeholder="请输入报警设备端口号" />
+        </el-form-item>
+        <el-form-item label="协议类型" prop="protocol">
+          <el-input v-model="form.protocol" placeholder="请输入协议类型" />
+        </el-form-item>
+        <el-form-item label="触发报警的设备通道号" prop="channelId">
+          <el-input v-model="form.channelId" placeholder="请输入触发报警的设备通道号" />
+        </el-form-item>
+        <el-form-item label="通道名称" prop="channelName">
+          <el-input v-model="form.channelName" placeholder="请输入通道名称" />
+        </el-form-item>
+        <el-form-item label="设备ID" prop="deviceId">
+          <el-input v-model="form.deviceId" placeholder="请输入设备ID" />
+        </el-form-item>
+        <el-form-item label="设备编号" prop="deviceUuid">
+          <el-input v-model="form.deviceUuid" placeholder="请输入设备编号" />
+        </el-form-item>
+        <el-form-item label="场景ID" prop="sceneId">
+          <el-input v-model="form.sceneId" placeholder="请输入场景ID" />
+        </el-form-item>
+        <el-form-item label="规则ID" prop="ruleId">
+          <el-input v-model="form.ruleId" placeholder="请输入规则ID" />
+        </el-form-item>
+        <el-form-item label="标定集ID" prop="tagsetId">
+          <el-input v-model="form.tagsetId" placeholder="请输入标定集ID" />
+        </el-form-item>
+        <el-form-item label="报警图片" prop="photo">
+          <el-input v-model="form.photo" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="当前读数值" prop="readingResult">
+          <el-input v-model="form.readingResult" placeholder="请输入当前读数值" />
+        </el-form-item>
+        <el-form-item label="状态表状态 " prop="statusResult">
+          <el-input v-model="form.statusResult" placeholder="请输入状态表状态" />
+        </el-form-item>
+        <el-form-item label="指示灯当前读数值" prop="pilotLampstate">
+          <el-input v-model="form.pilotLampstate" placeholder="请输入指示灯当前读数值" />
+        </el-form-item>
+        <el-form-item label="8朝向旋钮当前读数值 " prop="eightPositionSelectorKnobTate">
+          <el-input v-model="form.eightPositionSelectorKnobTate" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="空开当前读数值" prop="airSwitchCircuitBreakerState">
+          <el-input v-model="form.airSwitchCircuitBreakerState" placeholder="请输入空开当前读数值 0#空开向下, 1#空开向上" />
+        </el-form-item>
+        <el-form-item label="压板当前读数值 " prop="relayProtectionControllerState">
+          <el-input v-model="form.relayProtectionControllerState" placeholder="请输入压板当前读数值 0#压板开, 1#压板合" />
+        </el-form-item>
+        <el-form-item label="硅胶筒当前读数值" prop="silicaGelBreatherState">
+          <el-input v-model="form.silicaGelBreatherState" placeholder="请输入硅胶筒当前读数值 0#硅胶筒未变色, 1#硅胶筒变色" />
+        </el-form-item>
+        <el-form-item label="字符当前读数值" prop="charactersState">
+          <el-input v-model="form.charactersState" placeholder="请输入字符当前读数值 0#字符分, 1#字符合, 2#字符0, 3#字符1, 4#字符OFF, 5#字符ON, 6#字符未储能, 7#字符已储能" />
+        </el-form-item>
+        <el-form-item label="断路器当前读数值" prop="circuitBreakerState">
+          <el-input v-model="form.circuitBreakerState" placeholder="请输入断路器当前读数值 0#断路器分, 1#断路器合, 2#断路器0, 3#断路器1, 4#断路器OFF, 5#断路器ON, 6#断路器未储能, 7#断路器已储能" />
+        </el-form-item>
+        <el-form-item label="刀闸当前读数值" prop="knifeSwitchState">
+          <el-input v-model="form.knifeSwitchState" placeholder="请输入刀闸当前读数值 0#刀闸开" />
+        </el-form-item>
+        <el-form-item label="开集类型当前读数值" prop="openSetTypeState">
+          <el-input v-model="form.openSetTypeState" placeholder="请输入开集类型当前读数值 0#开集类型开, 1#开集类别关" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listDialIndicator, getDialIndicator, delDialIndicator, addDialIndicator, updateDialIndicator } from "@/api/manage/dialIndicator"
+
+export default {
+  name: "DialIndicator",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 计报警记录表格数据
+      dialIndicatorList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        ipAddress: null,
+        portNo: null,
+        protocol: null,
+        channelId: null,
+        channelName: null,
+        eventType: null,
+        deviceId: null,
+        deviceUuid: null,
+        sceneId: null,
+        ruleId: null,
+        tagsetId: null,
+        photo: null,
+        readingType: null,
+        readingResult: null,
+        statusResult: null,
+        pilotLampstate: null,
+        eightPositionSelectorKnobTate: null,
+        airSwitchCircuitBreakerState: null,
+        relayProtectionControllerState: null,
+        silicaGelBreatherState: null,
+        charactersState: null,
+        circuitBreakerState: null,
+        knifeSwitchState: null,
+        openSetTypeState: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    /** 查询计报警记录列表 */
+    getList() {
+      this.loading = true
+      listDialIndicator(this.queryParams).then(response => {
+        this.dialIndicatorList = response.rows
+        this.total = response.total
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        logId: null,
+        ipAddress: null,
+        portNo: null,
+        protocol: null,
+        channelId: null,
+        channelName: null,
+        eventType: null,
+        deviceId: null,
+        deviceUuid: null,
+        sceneId: null,
+        ruleId: null,
+        tagsetId: null,
+        photo: null,
+        readingType: null,
+        readingResult: null,
+        statusResult: null,
+        pilotLampstate: null,
+        eightPositionSelectorKnobTate: null,
+        airSwitchCircuitBreakerState: null,
+        relayProtectionControllerState: null,
+        silicaGelBreatherState: null,
+        charactersState: null,
+        circuitBreakerState: null,
+        knifeSwitchState: null,
+        openSetTypeState: null,
+        delFlag: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      }
+      this.resetForm("form")
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm")
+      this.handleQuery()
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.logId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset()
+      this.open = true
+      this.title = "添加计报警记录"
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const logId = row.logId || this.ids
+      getDialIndicator(logId).then(response => {
+        this.form = response.data
+        this.open = true
+        this.title = "修改计报警记录"
+      })
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.logId != null) {
+            updateDialIndicator(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功")
+              this.open = false
+              this.getList()
+            })
+          } else {
+            addDialIndicator(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功")
+              this.open = false
+              this.getList()
+            })
+          }
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const logIds = row.logId || this.ids
+      this.$modal.confirm('是否确认删除计报警记录编号为"' + logIds + '"的数据项?').then(function() {
+        return delDialIndicator(logIds)
+      }).then(() => {
+        this.getList()
+        this.$modal.msgSuccess("删除成功")
+      }).catch(() => {})
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('manage/dialIndicator/export', {
+        ...this.queryParams
+      }, `dialIndicator_${new Date().getTime()}.xlsx`)
+    }
+  }
+}
+</script>

+ 158 - 139
ruoyi-ui/src/views/shipinggaoj/ditu/index.vue

@@ -1,7 +1,57 @@
 <template>
-  <div class="app-container" style="padding-top: 20px;height: 120vh;"  >
+  <div class="app-container" style="padding-top: 20px;height: 120vh; "  >
     <div class="ntgs">
-
+     <div>
+       <div class="topug">
+         <p>地图设置</p>
+         <p>保存</p>
+       </div>
+       <div style="border-bottom: 1px solid #E6E6E6;margin-bottom: 30px;cursor: pointer;" class="qieht">
+         <p @click="isqie(0)" :class="isgse == 0 ? 'isesf' : ''">地图范围</p>
+         <p @click="isqie(1)" :class="isgse == 1 ? 'isesf' : ''">园区地图</p>
+       </div>
+        <el-form ref="form" :model="form" :rules="rules" label-width="70px">
+       <el-row>
+         <el-col :span="20" class="shish">
+           <el-form-item label="省市区" prop="staffName">
+                      <area-select
+                          style="display: flex"
+                          type="all"
+                          v-model="areaList"
+                          :level="2"
+                          :disableLinkage="linkage"
+                          :data="pcaa"
+                      ></area-select>
+          </el-form-item>
+         </el-col>
+         <el-col :span="16">
+           <el-form-item label="详细地址" prop="staffName">
+                     <el-input v-model="form.staffName" placeholder="请输入人员姓名" />
+          </el-form-item>
+         </el-col>
+         <el-col :span="16">
+           <el-col :span="24" >
+             <el-form-item label="经纬度" prop="staffName" >
+                  <div style="display: flex; " class="jisnge">
+                    <el-input style="width: 160px; margin-right: 10px;" v-model="form.staffName" placeholder="请输入人员姓名" />
+                    <el-input style="width: 160px;" v-model="form.staffName" placeholder="请输入人员姓名" />
+                    <div style="display: flex; align-items: center;" class="giet">
+                      <span style="font-size: 14px;color: #606266; width: 100px; margin-left: 10px;font-weight: 700;">半径范围</span>
+                      <el-input v-model="form.staffName" placeholder="请输入人员姓名" />
+                      <span style=" margin-left: 10px; font-weight: 800;font-size: 13px;color: #3D455B;">米</span>
+                    </div>
+                  </div>
+             </el-form-item>
+           </el-col>
+         </el-col>
+         <el-col :span="16" class="ditweyuq" v-if="isgse">
+           <el-form-item label="园区鸟瞰" prop="staffName">
+                  <image-uploadrss :limit="1" v-model="form.staffImage"/>
+           </el-form-item>
+         </el-col>
+       </el-row>
+        </el-form>
+     </div>
 	</div>
 
 
@@ -10,7 +60,8 @@
 
 <script>
   import { listWarnManage, getWarnManage, delWarnManage, addWarnManage, updateWarnManage } from "@/api/manage/warnManage"
-
+import 'vue-area-linkage/dist/index.css'
+import { pca, pcaa } from 'area-data'
 import Bscroll from "better-scroll";
 export default {
   name: "Post",
@@ -28,6 +79,12 @@ export default {
     titles:'',
       // 表单参数
       form: {},
+      rules:{},
+      pca: pca,
+      		pcaa: pcaa,
+          searchData:[],
+    isgse:0
+
      }
   },
   created() {
@@ -40,6 +97,10 @@ export default {
 
     },
   methods: {
+    // 地图切换
+    isqie(row){
+      this.isgse = row
+    },
 
     /** 提交按钮 */
     submitForm: function() {
@@ -67,6 +128,48 @@ export default {
 </script>
 
 <style lang="scss">
+  .ditweyuq{
+    .el-upload-dragger{
+      // border: none;
+      border-color: #E6E6E6;
+      width: 100%;
+      height: 220px;
+    }
+    .el-upload--picture-card{
+      border: none;
+       width: 100%;
+    }
+    .component-upload-image{
+      width: 100%;
+      margin-top: 20px;
+    }
+    .qundew{
+      margin-right: 28px !important;
+      margin-top: 40px !important;
+    }
+  }
+  .shish{
+    .el-form-item--medium .el-form-item__content{
+      line-height:16px;
+    }
+    .area-select-wrap .area-select:nth-child(1){
+      margin-left: 0;
+    }
+  }
+  .botsne{
+
+  }
+  .jisnge{
+    .el-input__inner{
+      width: 158px;
+    }
+  }
+  .giet{
+    .el-input__inner{
+      width: 100%;
+    }
+  }
+
 	.isjses{
 		.el-tabs--left .el-tabs__nav-wrap.is-left::after{
 			width:6px;
@@ -92,6 +195,54 @@ export default {
   }
 </style>
 <style scoped lang="scss">
+  .qieht{
+    display: flex;
+    p{
+      margin: 0;
+      font-family: PingFang SC;
+      font-weight: 500;
+      font-size: 15px;
+      color: #3D455B;
+      margin-right: 20px;
+      padding: 0 10px;
+      margin-bottom: -1px;
+      line-height: 40px;
+    }
+    .isesf{
+      color: #03BF8A;
+       border-bottom: 2px solid #03BF8A;
+    }
+  }
+  .topug{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 20px;
+    p{
+      margin: 0;
+    }
+    p:nth-child(1){
+      font-family: PingFang SC;
+      font-weight: 800;
+      font-size: 15px;
+      color: #333333;
+      border-left: 6px solid #03BF8A;
+      padding-left: 10px;
+      margin-left: -20px;
+    }
+    p:nth-child(2){
+      width: 86px;
+      height: 38px;
+      background: #03BF8A;
+      border-radius: 4px;
+      text-align: center;
+      line-height:38px ;
+      font-family: PingFang SC;
+      font-weight: bold;
+      font-size: 13px;
+      color: #FFFFFF;
+    }
+  }
 	.nghwgq{
 		display: flex;
 		flex-direction: column;
@@ -102,148 +253,15 @@ export default {
 			color:#aaa;
 		}
 	}
-	.ihgswq{
-		// width:100%;
-		// overflow-x: hidden;
-		// margin-top: 30px;
-	}
-	.fijge{
-		// width: 110%;
-		display: flex;
-		display: -webkit-flex;
-		justify-content: space-between;
-		.shotw{
-			position: relative;
-			// width:32%;
-			width: 238px;
-			height: 140px;
-			margin-left: 0;
-			margin-right: 20px;
-			margin-bottom: 15px;
-			img{
-				height: 100%;
-				cursor:pointer;
-			}
-		  p{
-			  // bottom:-10px;
-			  margin: 0;
-			  font-weight: bold;
-			  font-size: 16px;
-			   padding: 5px  10px;
-			   cursor:pointer;
-		  }
-		  .iges{
-			position: absolute;
-			top:50%;
-			left:50%;
-			width:30px;
-			height: 30px;
-			transform: translate(-50%,-50%);
-			cursor:pointer;
-		  }
-		}
-	}
+
 	.nhgwesvq{
 		width:1610px !important;
 	}
-	.shotw{
-		position: relative;
-		margin-left: -20px;
-		margin-right: -20px;
-		img{
-			width:100%;
-			height: 80vh;
-		}
-	  p{
-	     position: absolute;
-		 bottom: 0;
-		 left:0;
-		 background-color: rgba(0, 0, 0, .5);
-		 width: 100%;
-		 padding: 13px  5px;
-		 color:#fff;
-		 font-weight: bold;
-		 font-size: 18px;
-	  }
-	  .p{
-		  top:0px;
-		  height: 60px;
-		  margin: 0;
-		  padding-left: 20px;
-	  }
-	}
 
 
-	.ksfpo{
-		background-color: #3464EB;
-		padding: 6px 12px;
-		border-radius: 4px ;
-		color:#fff;
-		cursor:pointer;
-	}
-	.ksfpok{
-		background-color: #FFFFFF;
-		padding: 5px 11px;
-		border-radius: 4px;
-		color:#3464EB;
-		border: 1px solid #3464EB;
-		margin-left: 10px;
-		cursor:pointer;
-	}
-	.ksfpofg{
-		background-color: #75DB75;
-		padding: 5px 11px;
-		border-radius: 4px;
-		color:#FFFFFF;
-		border: 1px solid #75DB75;
-		margin-left: 10px;
-		cursor:pointer;
-	}
-  .iuer{
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    .ite{
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      p{
-        cursor:pointer;
-        margin: 0;
-        font-size: 15px;
-        font-family: PingFang SC;
-        font-weight: 500;
-        color:#666666;
-        padding: 4px 12px;
-        background: #Fff;
-        border-radius: 4px;
-        margin-right: 20px;
-		position: relative;
-      }
-      .actt{
-        background: #fff;
-        // border-bottom: 3px solid #5974E0;
-        // border-radius: 0;
-		// border-bottom-right-radius: 4px;
-        color: #5974E0;
-      }
-	  .actt{
-		    &::after {
-		          content: "";
-		          width: 40%;
-		          height: 5px;
-				  border-radius: 3px;
-		          transform: translate(-50%);
-		          background-color: #5974E0;
-		          position: absolute;
-		          left: 50%;
-		          bottom:-3px;
-		        }
 
-	  }
 
-    }
-  }
+
   .lqw{
     padding: 0 10px;
     margin: 0;
@@ -266,8 +284,9 @@ export default {
 	}
 	.ntgs{
 	position: relative;
-		// background-color: #fff;
+		background-color: #fff;
 		padding: 5px;
+    height: 100%;
 		// border-radius: 5px;
 		padding-top: 10px;
 	     padding: 10px 20px;

+ 31 - 10
ruoyi-ui/src/views/shipinggaoj/huabuhaik/index.vue

@@ -70,10 +70,10 @@
 					<el-col :span='5'>
 						<div style="background-color: #fff;border-radius: 10px;padding: 20px 20px;height: 100vh;">
               <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">通道列表</p>
-              <div style=" height: 36px;;line-height: 36px;margin-top: 10px;"v-for="(item,index) in 6">
+              <div style=" height: 36px;;line-height: 36px;margin-top: 10px;"v-for="(item,index) in channelNumberList">
                               <div @click="ishg(item)" style="display: flex;align-items: center;justify-content: space-between;">
                                 <div style="font-size: 16px;
-              color: #333333;"> 通道{{ index >8 ? index + 1 : '0'  + (index + 1)}}</div>
+              color: #333333;"> {{item.channelNum == null?'暂无数据' : item.channelNum}}</div>
                                 <img src="../../../assets/images/icon_htgl_zd.png" alt="" style="width: 10px;height: 12px;">
                               </div>
                           </div>
@@ -197,6 +197,7 @@
 </template>
 
 <script>
+  import { listChannelNumber, listChannelNumbernopa,getChannelNumber, delChannelNumber, addChannelNumber, updateChannelNumber } from "@/api/system/channelNumber"
   import { listWarnManage, getWarnManage, delWarnManage, addWarnManage, updateWarnManage } from "@/api/manage/warnManage"
 // import { listPost, getPost, delPost, addPost, updatePost,updateFs,updateGx } from "@/api/kaoch/renyuan";
 // import { listReservat,camera,cameraIndexCode, listReservatd, getReservat, delReservat, addReservat, updateReservat,setPass,delReservathx,openDz,closeDz } from "@/api/tonggi/houtai";
@@ -229,6 +230,8 @@ export default {
     titles:'',
 	editableTabsValue:'6',
     opens:false,
+    // 通道管理表格数据
+    channelNumberList: [],
 	  imageUrl:'@/assets/logo/logo.png',
 	  printObj: {
 	           id: "nhgrew", // 这里是要打印元素的ID
@@ -264,7 +267,7 @@ export default {
       queryParams: {
         pageNo: 1,
         pageSize:500,
-		name:null,
+		    name:null,
         postCode: undefined,
         postName: undefined,
         status: undefined,
@@ -341,6 +344,7 @@ export default {
   created() {
     this.isfse = false
     this.getList();
+    this.getListtd()
   window.onresize = () => {
   	      this.changeTableMaxHeight()
   	    }
@@ -349,9 +353,9 @@ export default {
   },
   mounted() {
   this.toggleConnection()
-     this.webRtcServer = new WebRtcStreamer('video', location.protocol + '//' + this.camera_ip)
-          //需要查看的rtsp地址,根据自己的摄像头传入对应的rtsp地址即可。注意:视频编码格式必须是H264的,否则无法正常显示,编码格式可在摄像头的后台更改
-          this.webRtcServer.connect('rtsp://admin:zxy123456@192.168.101.64:554/h264/ch1/main/av_stream')
+     // this.webRtcServer = new WebRtcStreamer('video', location.protocol + '//' + this.camera_ip)
+     //      //需要查看的rtsp地址,根据自己的摄像头传入对应的rtsp地址即可。注意:视频编码格式必须是H264的,否则无法正常显示,编码格式可在摄像头的后台更改
+     //      this.webRtcServer.connect('rtsp://admin:zxy123456@192.168.101.64:554/h264/ch1/main/av_stream')
   	window.onresize = () => {
   	          this.changeTableMaxHeight()
   	        }
@@ -373,6 +377,16 @@ export default {
       }
     },
   methods: {
+    /** 查询通道管理列表 */
+    getListtd() {
+      this.loading = true
+      let queryParams = {}
+      listChannelNumbernopa().then(response => {
+        this.channelNumberList = response.rows
+        this.total = response.total
+        this.loading = false
+      })
+    },
     clickEnableDraw() {
         WebVideoCtrl.I_SetDrawStatus(true).then(() => {
             this.g_bEnableDraw = true;
@@ -602,8 +616,16 @@ export default {
     // 通道点击
     ishg(val){
       this.isfse = false
-      this.clickStartRealPlay('192.168.101.64', '80',1, 0, 1);
-      // this.getVideo()
+      if(WebVideoCtrl){
+        console.log(this.szDeviceIdentify)
+      	WebVideoCtrl.I_Logout(this.szDeviceIdentify)
+        WebVideoCtrl.I_StopAllPlay()
+      	WebVideoCtrl.I_DestroyPlugin()
+        WebVideoCtrl.I_Resize()
+      }
+      	// WebVideoCtrl.I_StopAllPlay()
+      // this.clickStartRealPlay('192.168.101.64', '80',1, 0, 1);
+      this.getVideo()
 
     },
 
@@ -1125,7 +1147,6 @@ export default {
 		      this.filterActive = !this.filterActive
 		      this.changeTableMaxHeight()
 		    },
-
 		    changeTableMaxHeight () {
 		      let height = document.body.offsetHeight // 网页可视区域高度
 		      // if (this.filterActive) {
@@ -1136,7 +1157,7 @@ export default {
 		      console.log(height)
 		    },
     // 播放摄像头
-    getVideo() {
+    getVideo(row) {
     	var that=this;
        this.isfse  = true
     	this.initVideoPlay('192.168.101.64', '80', 'admin', 'zxy123456','divPlugin')

+ 0 - 1558
ruoyi-ui/src/views/shipinggaoj/shebe/index - 副本.vue

@@ -1,1558 +0,0 @@
-<template>
-  <div class="app-container" style="padding-top: 20px;height: 120vh;"  v-loading="loading"
-    element-loading-text="拼命加载中"
-    element-loading-spinner="el-icon-loading"
-    element-loading-background="rgba(0, 0, 0, 0.8)">
-    <div class="ntgs">
-    <el-row :gutter="10" class="mb8">
-     <div class="iuer" style="margin-bottom:10px;">
-       <!-- <div style="display: flex;align-items: center; " class="ingaqe">
-            <el-select v-model="queryParams.name" placeholder="请选监控名称" clearable>
-              <el-option
-                v-for="dict in postList"
-                :key="dict.indexCode"
-                :label="dict.name"
-                :value="dict.name"
-              />
-            </el-select>
-			<div class="ksfpofg" @click="handleQuery">
-						  搜索
-						  </div>
-       </div> -->
-	   <!-- <div class="ite">
-	      <div class="ksfpo" @click="osge"  v-hasPermi="['system:camera:openDz']">
-			  <img src="../../../assets/images/icon_ssjk_kman_open.png" alt="" style="width:10px;height: 10px;">
-			  开门</div>
-		  <div class="ksfpo ksfpok" @click="osgef" v-hasPermi="['system:camera:closeDz']">
-		  			  <img src="../../../assets/images/icon_ssjk_kman_close.png" alt="" style="width:10px;height: 10px;">
-		  			  关门</div>
-	   </div> -->
-<!--  -->
-     </div>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['investigate:table:add']"
-        >新增</el-button>
-      </el-col>
-
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['investigate:table:remove']"
-        >删除</el-button>
-      </el-col> -->
-     <!-- <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['investigate:table:export']"
-        >导出</el-button>
-      </el-col> -->
-      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
-    </el-row>
-
-	<div>
-		<el-row :gutter="20">
-          <!-- postList -->
-					<el-col :span='5'>
-						<div style="background-color: #fff;border-radius: 10px;padding: 20px 20px;height: 100vh;">
-              <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">通道列表</p>
-              <div style=" height: 36px;;line-height: 36px;margin-top: 10px;"v-for="(item,index) in 6">
-                              <div @click="ishg(item)" style="display: flex;align-items: center;justify-content: space-between;">
-                                <div style="font-size: 16px;
-              color: #333333;"> 通道{{ index >8 ? index + 1 : '0'  + (index + 1)}}</div>
-                                <img src="../../../assets/images/icon_htgl_zd.png" alt="" style="width: 10px;height: 12px;">
-                              </div>
-                          </div>
-            </div>
-					</el-col>
-        <!-- v-if="isshoe" -->
-        <el-col :span='14' style="padding-left: 30px; background-color: #fff;border-radius: 10px;padding: 20px; height: 100vh;" >
-          <div style="display: flex;align-items: center;justify-content: space-between;margin-bottom: 18px;">
-            <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">实时预览</p>
-            <div>
-
-              <!-- <el-button type="danger" plain>删除</el-button>
-              <el-button type="warning" plain>置顶</el-button> -->
-              <el-button type="success" plain>关闭</el-button>
-
-
-            </div>
-          </div>
-          <div class="dflext mb10">
-            <div>
-              <el-button type="primary"  @click="clickEnableDraw">绘图</el-button>
-              <el-button type="primary" plain @click="clickAddSnapPolygon">添加图形</el-button>
-              <el-button type="primary" plain @click="clickDelAllSnapPolygon">清除所有图形</el-button>
-              <el-button type="primary" plain @click="clickGetSnapPolygon">获取坐标点</el-button>
-            </div>
-            <div style="flex: 1;"></div>
-            <div class="disbtn" @click="getdrawFn">
-              <img  src="../../../assets/images/dchose.png" v-if="isdisflag"/>
-              <img  src="../../../assets/images/dnchose.png" v-else/>
-              禁用绘制
-            </div>
-            <!-- <el-button type="primary" plain @click="clickCapturePic">抓图</el-button> -->
-          </div>
-         <div style="width: 100%; height: 480px;">
-           <div v-if="isfse" id="divPlugin" style="width: 100%; height: 480px;" ></div>
-
-         </div>
-
-
-          <!-- <img src="../../../assets/images/pic_ssyl_lt.png" alt="" style="width: 100%; margin-top: 20px;"> -->
-          <!-- 344 -->
-          <!-- <video id="video" controls autoplay muted width="100%" height="480px"style="margin-top: 20px;"></video> -->
-        						<!-- <video
-        						      class="videosmall"
-        						      ref="videosmallone"
-        						      preload="auto"
-        						      muted
-        						      autoplay
-        							  width="95%"
-        						      type="rtmp/flv"
-        						    >
-        						      <source src="" />
-        						    </video> -->
-        					</el-col>
-            <el-col :span="5">
-              <div style="background-color: #fff;border-radius: 10px;padding: 20px 20px;height: 100vh;">
-                <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">绘制区域</p>
-                <div class="drawings-list">
-                    <div class="tflex" v-for="(shape, index) in shapes" :key="index">
-                    <!-- :class="{ selected: selectedIndex === index }" -->
-                                        <div class="txt" >
-                                            <el-popover
-                                              placement="top-start"
-                                                width="200"
-                                                trigger="hover"
-                                                >
-                                                  <div v-for="(ite,idx) in shape.points">
-                                                    {{ite.x}},{{ite.y}}
-                                                  </div>
-                                                  <div slot="reference">区域{{shape.id}}</div>
-                                              </el-popover>
-                                          </div>
-                                            <img class="delimg" src="../../../assets/images/del.png" @click.stop="clickDelSnapPolygon(shape.id,index)"/>
-
-                                      </div>
-                    </div>
-              </div>
-            </el-col>
-
-			<!-- <el-col :span="24">
-				<div class="ihgswq wrapper"  ref="wrapper" style=" overflow: hidden;">
-						  <div class="fijge content nhgwesvq" ref="content" style="width:1610px;">
-									<div class='shotw '   v-for="(item,index) in postList" :key="index" @click="isfgw(item)" >
-											  <img src="../../../assets/images/fengm.png" alt="">
-												<img src="../../../assets/images/icon_spjk_play.png" alt="" class="iges">
-											  <p style="font-size: 14px;">{{item.name}}</p>
-									</div>
-						  </div>
-				</div>
-			</el-col> -->
-		</el-row>
-
-
-	  <!-- <pagination
-	     v-show="total>0"
-	     :total="total"
-	     :page.sync="queryParams.pageNo"
-	     :limit.sync="queryParams.pageSize"
-	     @pagination="getList"
-	   /> -->
-	</div>
-
-
-	</div>
-
-    <!-- 添加或修改岗位对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-
-    </el-dialog>
-
-    <el-dialog :title="titles" :visible.sync="opens" width="1000px" append-to-body>
-    </el-dialog>
-
-	<el-dialog title="页面二维码" :visible.sync="opent" width="200px" style="padding: 0;" class="nhgrls" append-to-body>
-	  <div v-show="opent" style="display: flex;justify-content: center;align-items: center;">
-		  <!-- <span>{{'https://qszdh.qs163.cn/pages/index/index?id=' + this.bg}}</span> -->
-			   <!-- <vue-qr   :text="'https://qszdh.qs163.cn/pages/index/index?id=' + this.bg" :size="200"></vue-qr> -->
-	  </div>
-	</el-dialog>
-  </div>
-</template>
-
-<script>
-  import { listWarnManage, getWarnManage, delWarnManage, addWarnManage, updateWarnManage } from "@/api/manage/warnManage"
-// import { listPost, getPost, delPost, addPost, updatePost,updateFs,updateGx } from "@/api/kaoch/renyuan";
-// import { listReservat,camera,cameraIndexCode, listReservatd, getReservat, delReservat, addReservat, updateReservat,setPass,delReservathx,openDz,closeDz } from "@/api/tonggi/houtai";
-// import vueQr from "vue-qr";
-// import videojs from 'video.js'
-// import 'video.js/dist/video-js.css'
-// import {videoPlayer} from 'vue-video-player'
-// import 'videojs-flash'
-// import flvjs from 'flv.js/dist/flv.min.js'
-// import flvjs from "flv.js";
-import Bscroll from "better-scroll";
-export default {
-  name: "Post",
-  dicts: ['sys_normal_disable','sys_yes_no','youke','tjzh','youkes','lafafen','fange','jluly'],
-  // components: {
-  //     vueQr,
-	 //  videoPlayer
-  //   },
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-	  opent:false,
-	  bg:null,
-    titles:'',
-	editableTabsValue:'6',
-    opens:false,
-	  imageUrl:'@/assets/logo/logo.png',
-	  printObj: {
-	           id: "nhgrew", // 这里是要打印元素的ID
-	           popTitle: "", // 打印的标题
-	         },
-	  pickerOptions:{
-	            disabledDate (time) {
-	              //disabledDate 文档上:设置禁用状态,参数为当前日期,要求返回 Boolean
-	              // return time.getTime() > Date.now()//选当前时间之前的时间
-	              return time.getTime() < Date.now()  - 8.64e7;//选当前时间之后的时间
-	            }
-	        },
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-	  checkedScoreDataDetails: [],
-	  scoreDataDetailsList:[],
-	  tabPosition:'left',
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 岗位表格数据
-      postList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNo: 1,
-        pageSize:500,
-		name:null,
-        postCode: undefined,
-        postName: undefined,
-        status: undefined,
-        reservatType:undefined
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        receptionId: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-
-
-      },
-      ruless:{
-        visitName: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-        visitPhone: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-        visitNum: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-        visitDate: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-        visitTime: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],
-
-      },
-      forms:{},
-			tableMaxHeight:'200',
-      kje:0,
-      ksjegsg:[],
-	   Scroll: null,
-	   videoShow: false,
-	flvPlayer:null,
-	player: null,
-	name:null,
-	isshiwa:false,
-	isjfwe:{},
-	isshoe:false,
-   webRtcServer: null,
-   camera_ip: '127.0.0.1:8000',
-   g_iWndIndex:0,
-   iRtspPort:'',//预览中的ip
-   szDeviceIdentify:'',//ip_port,
-   isfse:false,
-
-   g_bEnableDraw:false,
-    // 所有绘制的图形
-    shapes: [],
-    // 禁用
-    isdisflag:false,
-
-    };
-  },
-  created() {
-    this.isfse = false
-    this.getList();
-  window.onresize = () => {
-  	      this.changeTableMaxHeight()
-  	    }
-  	    this.changeTableMaxHeight()
-
-  },
-  mounted() {
-
-     this.webRtcServer = new WebRtcStreamer('video', location.protocol + '//' + this.camera_ip)
-          //需要查看的rtsp地址,根据自己的摄像头传入对应的rtsp地址即可。注意:视频编码格式必须是H264的,否则无法正常显示,编码格式可在摄像头的后台更改
-          this.webRtcServer.connect('rtsp://admin:zxy123456@192.168.101.64:554/h264/ch1/main/av_stream')
-  	window.onresize = () => {
-  	          this.changeTableMaxHeight()
-  	        }
-  	        this.changeTableMaxHeight()
-
-		this.$nextTick(() => {
-		        this.initScroll()
-		    })
-  },
-
-   beforeDestroy() {
-      // this.destoryVideo()
-      if(WebVideoCtrl){
-        console.log(this.szDeviceIdentify)
-      	WebVideoCtrl.I_Logout(this.szDeviceIdentify)
-        WebVideoCtrl.I_StopAllPlay()
-      	WebVideoCtrl.I_DestroyPlugin()
-        WebVideoCtrl.I_Resize()
-      }
-    },
-  methods: {
-    clickEnableDraw() {
-        WebVideoCtrl.I_SetDrawStatus(true).then(() => {
-            this.g_bEnableDraw = true;
-            // showOPInfo("启用绘制成功!");
-        }, (oError) => {
-            // showOPInfo("启用绘制失败!", oError.errorCode, oError.errorMsg);
-        });
-    },
-    getdrawFn(){
-      this.isdisflag=!this.isdisflag;
-      if(this.isdisflag){
-        this.clickDisableDraw()
-      }else{
-        this.clickEnableDraw()
-      }
-    },
-    // 禁用多边形绘制
-    clickDisableDraw() {
-        WebVideoCtrl.I_SetDrawStatus(false).then(() => {
-            this.g_bEnableDraw = false;
-            // showOPInfo("禁用绘制成功!");
-            this.clickAddSnapPolygon()
-        }, (oError) => {
-            // showOPInfo("禁用绘制失败!", oError.errorCode, oError.errorMsg);
-        });
-    },
-    clickGetSnapPolygon() {
-      var that=this;
-        WebVideoCtrl.I_GetSnapPolygonInfo(this.g_iWndIndex).then((szXml) => {
-            console.log('获取图形:', szXml);
-            that.getpoint(szXml)
-
-        });
-    },
-    //获取x,y轴
-    getpoint(xmlString){
-      var that=this;
-        const parser = new DOMParser();
-            const xmlDoc = parser.parseFromString(xmlString, "text/xml");
-
-            // 获取所有 SnapPolygon 节点
-            const polygonNodes = xmlDoc.querySelectorAll("SnapPolygon");
-             var newArr=[];
-             var arr1=JSON.parse(JSON.stringify(this.shapes))
-            // 提取每个多边形的 id 和坐标点
-            this.polygons = Array.from(polygonNodes).map((polygonNode) => {
-              const id = polygonNode.querySelector("id").textContent;
-              const pointNodes = polygonNode.querySelectorAll("point");
-
-              const points = Array.from(pointNodes).map((pointNode) => ({
-                x: pointNode.querySelector("x").textContent,
-                y: pointNode.querySelector("y").textContent,
-              }));
-              var newobj={
-                id:id,
-                points:points
-              }
-              newArr.push(newobj)
-              // return { id, points };
-            });
-           this.shapes = arr1.map(item1 => {
-             const matchedItem = newArr.find(item2 => item2.id == item1.id);
-             return {
-               id: item1.id,
-               points: matchedItem ? matchedItem.points : item1.points
-             };
-           });
-        // this.shapes=JSON.parse(JSON.stringify(newArr))
-        console.log(this.shapes)
-    },
-    // 添加图形,最多不超过16个图形
-    clickAddSnapPolygon() {
-      var that=this;
-        if (!this.g_bEnableDraw) {
-            return;
-        }
-        var shapes=JSON.parse(JSON.stringify(this.shapes))
-        let szId = 1; // 默认从 1 开始
-        if(shapes&&shapes.length>0){
-          const ids  = shapes.map(item => item.id).sort((a, b) => a - b);
-          for (const id of ids) {
-            if (id > szId) {
-              // 如果当前 id > szId,说明 szId 未被使用
-              break;
-            }
-            szId = Number(id) + 1; // 否则,继续检查下一个
-          }
-        }
-        if (!/^[1-9]\d*$/.test(szId)) {
-            alert("图形ID只能为正整数!");
-            return
-        }
-        if (Number(szId) > 32) {
-            alert("图形ID范围1-32!");
-            return
-        }
-        console.log(szId)
-        // var szName = encodeString($("#snapName").val());
-        var szName = '';
-        var szInfo={
-
-        }
-        var szInfo = "<?xml version='1.0' encoding='utf-8'?>";
-        szInfo += "<SnapPolygonList>";
-        szInfo += "<SnapPolygon>";
-        szInfo += "<id>" + szId + "</id>";          // [1, 32]
-        szInfo += "<polygonType>0</polygonType>"; //如果想绘制多边形,polygonType指需要改为1
-        szInfo += "<PointNumMax>17</PointNumMax>";  // [MinClosed, 17]
-        szInfo += "<MinClosed>4</MinClosed>";       // [4, 17]
-        szInfo += "<tips>#" + szId + "#" + szName + "</tips>";
-        szInfo += "<isClosed>false</isClosed>";
-        szInfo += "<color><r>0</r><g>255</g><b>0</b></color>";
-        szInfo += "<pointList/>";
-        szInfo += "</SnapPolygon>";
-        szInfo += "</SnapPolygonList>";
-
-        WebVideoCtrl.I_SetSnapPolygonInfo(this.g_iWndIndex, szInfo).then(() => {
-            // showOPInfo("添加图形成功!");
-            var obj={
-              id:szId,
-              points:[]
-            }
-            if(this.shapes&&this.shapes.length){
-              this.shapes.splice(Number(szId)-1,0,obj)
-            }else{
-              this.shapes.push(obj)
-            }
-        });
-        WebVideoCtrl.I_SetSnapDrawMode(this.g_iWndIndex, 2);
-    },
-    //删除图形
-    clickDelSnapPolygon(szId,idx) {
-        if (!this.g_bEnableDraw) {
-            return;
-        }
-
-        var aShapes = [];
-        aShapes.push({
-            polygonType: 0,
-            id: szId
-        });
-        this.shapes.splice(idx,1)
-        WebVideoCtrl.I_ClearSnapInfo(this.g_iWndIndex, aShapes);
-    },
-    // 清空图形
-    clickDelAllSnapPolygon() {
-        if (!this.g_bEnableDraw) {
-            return;
-        }
-        WebVideoCtrl.I_ClearSnapInfo(this.g_iWndIndex).then(() => {
-            // showOPInfo("清空图形成功!");
-             this.shapes=[];
-        }, (oError) => {
-            // showOPInfo("清空图形失败!", oError.errorCode, oError.errorMsg);
-        });
-    },
-
-
-
-    // 通道点击
-    ishg(val){
-      this.isfse = false
-      this.clickStartRealPlay('192.168.101.64', '80',1, 0, 1);
-      // this.getVideo()
-
-    },
-
-
-	  init(val) { //这个val 就是一个地址,例如: http://192.168.2.201:85/live/9311272c49b845baa2b2810ad9bf3f68.flv 这是个服务器返回给我的一个监控视频流地址
-	        setTimeout(() => { //使用定时器是因为,在mounted声明周期里调用,可能会出现DOM没加载出来的原因
-	          var videoElement = this.$refs.videosmallone; // 获取到html中的video标签
-			  this.isshiwa = true
-	          if (flvjs.isSupported()) {
-	          //因为我这个是复用组件,进来先判断 player是否存在,如果存在,销毁掉它,不然会占用TCP名额
-	            if (this.player !== null) {
-	              this.player.pause();
-	              this.player.unload();
-	              this.player.detachMediaElement();
-	              this.player.destroy();
-	              this.player = null;
-	            }
-	            this.player = flvjs.createPlayer( //创建直播流,加载到DOM中去
-	              {
-	                type: "flv",
-	                url: val, //你的url地址
-	                isLive: true, //数据源是否为直播流
-	                hasAudio: false, //数据源是否包含有音频
-	                hasVideo: true, //数据源是否包含有视频
-	                enableStashBuffer: true, //是否启用缓存区
-	              },
-	              {
-	                enableWorker: false, //不启用分离线程
-	                enableStashBuffer: false, //关闭IO隐藏缓冲区
-	                autoCleanupSourceBuffer: true, //自动清除缓存
-	                lazyLoad: false,
-	              }
-	            );
-				this.isshoe = true
-	            this.player.attachMediaElement(videoElement); //放到dom中去
-
-	            //!!!!!!这里需要注意,有的时候load加载完成不一定可以播放,要是播放不成功,用settimeout 给下面的this.player.play() 延时几百毫秒再播放
-	            // setTimeout(this.player.play(), 48000);
-				setTimeout(() =>{
-					//到时间时只执行一次就停止
-					this.player.load();//准备完成
-					this.player.play()
-					console.log('播放')
-				},900)
-
-
-	          }
-	        }, 500);
-	      },
-
-	  createVideo() {
-	        if (flvjs.isSupported()) {
-				console.log(1)
-	          var videoElement = document.getElementById('myFlvVideo')
-			  console.log(videoElement,flvjs)
-	          this.flvPlayer = flvjs.createPlayer(
-	            {
-	              type: 'application/x-mpegURL',
-	              isLive: true,
-	              hasAudio: false,
-	              url:'https://stream1.freetv.fun/86d463c0006da643e45e26b34875df87059dcba13e69d0a5471b185793c122a2.m3u8'
-	            },
-	            {
-	              cors: true, // 是否跨域
-	              enableWorker: false, // 是否多线程工作
-	              enableStashBuffer: false, // 是否启用缓存
-	              stashInitialSize: 400, // 缓存大小(kb)  默认384kb
-	              autoCleanupSourceBuffer: true // 是否自动清理缓存
-	            }
-	          )
-	          this.flvPlayer.attachMediaElement(videoElement)
-	          this.flvPlayer.load()
-	          this.flvPlayer.play()
-			  console.log(1244)
-	          // 报错重连
-	          this.flvPlayer.on(flvjs.Events.ERROR, (errType, errDetail) => {
-	            console.log('errorType:', errType)
-	            console.log('errorDetail:', errDetail)
-	            if (this.flvPlayer) {
-	              this.destoryVideo()
-	              this.createVideo()
-	            }
-	          })
-	        }
-
-			console.log(this.flvPlayer.play())
-	      },
-	      destoryVideo() {
-	        this.player.pause()
-	        this.player.unload()
-	        this.player.detachMediaElement()
-	        this.player.destroy()
-	        this.player = null
-	      },
-
-	  initScroll() {
-	    	  // 给内层盒子设置宽度,不设置宽度的话无法滚动
-	    	  // let width = this.goods.length * 60
-	    	  // // 如果有外边距,可以这样写。需要去掉最后一个元素的外边距,在后面减一下
-	    	  // let width = this.goodslength * (60 + 10) - 10
-			  let width = 6 * (200 + 10) - 10
-	        // this.$refs.content.style.width = width + 'px'
-	        this.$nextTick(()=>{
-	          if(!this.Scroll) {
-	            this.Scroll = new Bscroll(this.$refs.wrapper,{
-	              click: true,      // 配置允许点击事件
-	              scrollX: true,    // 开启横向滚动
-	              eventPassthrough: 'vertical',  // 当设置 eventPassthrough 为 'vertical' 的时候,scrollY 无效
-				  mouseWheel: true,
-				  scrollbar: { // 滚动条, 要加相对位置
-				              fade: true
-				            }
-	            })
-	          } else {
-	            this.Scroll.refresh()     // 重新计算 better-scroll,当 DOM 结构发生变化的时确保滚动效果正常
-	          }
-	        })
-	      },
-
-    /** 查询岗位列表 */
-    getList() {
-	  // this.queryParams
-    this.loading = true
-    getWarnManage(this.$route.query.id).then(response => {
-      this.form = response.data
-
-      this.getVideo()
-      WebVideoCtrl.I_ShowPlugin()
-      this.loading = false
-      // this.open = true
-      // this.title = "修改告警管理"
-    })
-  //     camera(this.queryParams).then(response => {
-  //       this.postList = response.data.data.list;
-		// if(response.data.data != null){
-		// if(response.data.data.list.length != 0){
-		// 	let ne = response.data.data.list[0]
-		// 	response.data.data.list.filter(rtu=>{
-		// 		if(rtu.name == '后门道闸'){
-		// 			console.log(3,rtu)
-		// 			ne = rtu
-		// 			return
-		// 		}
-		// 	})
-		// 	this.isfgw(ne)
-		// 	this.isjfwe =ne
-
-		// }
-		// }
-  //       // this.postList=[{'nsje':null,'visitPhone':null,'isReception':'Y'}]
-  //       this.total = response.data.data.total;
-  //       this.loading = false;
-  //     });
-    },
-    getListh() {
-      this.loading = true;
-      listReservatd().then(response => {
-        // this.postList = response.rows;
-        this.ksjegsg= response.data
-        // this.total = response.total;
-        this.loading = false;
-      });
-    },
-	isfgw(val){
-		this.isjfwe = val
-		let nhge={cameraIndexCode:val.indexCode}
-		this.isshiwa = false
-		this.isshoe= false
-	   cameraIndexCode(nhge.cameraIndexCode).then(response => {
-		   console.log(response.data.data.url)
-		   this.isshoe= true
-		  this.init(response.data.data.url)
-		   this.isshiwa = true
-	  // this.postList = response.rows;
-	  // this.total = response.total;
-	  });
-		console.log(val,4)
-	},
-	osge(){
-		console.log(this.isjfwe,45)
-		if(this.isjfwe.name == '后门道闸'){
-			this.isjfwe.name ='后门抓拍一体机1'
-		}
-		let nge={equipmentName:this.isjfwe.name}
-		openDz(nge).then(response => {
-
-		});
-	},
-	osgef(){
-		if(this.isjfwe.name == '后门道闸'){
-			this.isjfwe.name ='后门抓拍一体机1'
-		}
-		let nge={equipmentName:this.isjfwe.name}
-		closeDz(nge).then(response => {
-		  // this.postList = response.rows;
-		});
-	},
-
-    ilw(row,val){
-      this.kje = val
-      // console.log(row)
-      if(row.value == 0){
-          this.queryParams.reservatType = undefined
-      }else{
-        this.queryParams.reservatType = row.value
-      }
-    console.log(this.kje)
-      this.queryParams.pageNum  = 1
-      this.getList()
-    },
-  nhgwel(item){
-    this.form.receptionId = item.receptionId
-    this.form.receptionName = item.receptionName
-    this.form.receptionPhone = item.phonenumber
-
-  },
-    getPass(row) {
-      const _this = this
-      this.$confirm('是否审核通过', "提醒", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(function() {
-        return setPass({
-        visitType: 3,
-        reservatId: row.reservatId,
-        // xmStatus:row.xmStatus
-      })
-      }).then(() => {
-    	   _this.getList();
-        _this.msgSuccess("提交成功");
-      })
-    },
-    infoBtn(row) {
-    	const _this = this
-    	this.$confirm('是否拒绝', "提醒", {
-    	  confirmButtonText: "确定",
-    	  cancelButtonText: "取消",
-    	  type: "warning"
-    	}).then(function() {
-    	  return setPass({
-    	  visitType: 2,
-    	   reservatId: row.reservatId,
-    	  // xmStatus:row.xmStatus
-    	})
-    	}).then(() => {
-    	  _this.getList();
-    	  _this.msgSuccess("提交成功");
-    	})
-
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-	  this.opens = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-		receptionId:undefined,
-        receptionPhone:undefined,
-        // postSort: 0,
-        // status: "0",
-        receptionName: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.reservatId)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    nhgeo(row){
-      this.reset();
-     this.open = true;
-     this.title = "分配接待人员";
-     this.form.reservatId = row.reservatId;
-     this.form.reservatConfigTimeId=row.reservatConfigTimeId;
-     this.form.visitDate=row.visitDate
-    },
-    handleDeleteh(row){
-      this.$router.push({
-        path: '/bjqs',
-      		query: {
-      			'id':row.reservatId,
-      			'name':null,
-      			'names':null,
-      			'isxz':1
-      		}
-      })
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.forms = {
-        reservatType:'1'
-      }
-      this.opens = true;
-      this.titles = "添加预约人员";
-	  // this.scoreDataDetailsList = []
-	  // this.$router.push({
-	  //   path: '/system/bjq',
-	  // })
-	  // this.$router.push({
-	  //   path: '/bjqs',
-	  // 		query: {
-	  // 			'id':null,
-	  // 			'name':null,
-	  // 			'names':null,
-	  // 			'isxz':1
-	  // 		}
-	  // })
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-           const recordId = row.recordId || this.ids
-           getReservat(recordId).then(response => {
-             this.forms = response.data;
-             this.opens = true;
-             this.title = "修改访问记录";
-           });
-    },
-    /** 提交按钮 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-              if (valid) {
-                // if (this.form.reservatId != null) {
-                  updateReservat(this.form).then(response => {
-                    this.$modal.msgSuccess("操作成功");
-                    this.open = false;
-                    this.getList();
-                  });
-                // } else {
-                //   addReservat(this.form).then(response => {
-                //     this.$modal.msgSuccess("新增成功");
-                //     this.open = false;
-                //     this.getList();
-                //   });
-                // }
-              }
-            });
-    },
-    submitForms: function() {
-      this.$refs["forms"].validate(valid => {
-              if (valid) {
-                // if (this.form.reservatId != null) {
-                  // updateReservat(this.forms).then(response => {
-                  //   this.$modal.msgSuccess("操作成功");
-                  //   this.open = false;
-                  //   this.getList();
-                  // });
-                // } else {
-                  this.forms.visitTime = this.forms.visitTime + '-' + this.forms.visitTime
-                  addReservat(this.forms).then(response => {
-                    this.$modal.msgSuccess("新增成功");
-                    this.opens = false;
-                    this.getList();
-                  });
-                // }
-              }
-            });
-    },
-
-	nglqw(val){
-		this.opent = true
-		this.bg = val.investigateTableId
-	},
-
-
-	iszheg(event){
-	 console.log(event);
-
-
-	 // 校验身份证:
-	 console.log(reg.test(this.form.idCard),23741)
-	 		if ( reg.test(this.form.idCard)|| _IDre15.test(this.form.idCard)) {
-	 			// this.idea();
-	 			this.go(this.form.idCard);
-	 			// callback()
-	 		} else {
-	   if(ncjsle.test(this.form.idCard) || nhyeli.test(this.form.idCard)){
-	      console.log(3)
-	   }else{
-	     if(gnse.test(this.form.idCard)  ){
-	         console.log(4)
-	     }else{
-	       if(tw.test(this.form.idCard) || twe.test(this.form.idCard)){
-	         console.log(5)
-	       }else{
-	         this.$message.error('证件格式不正确');
-	       }
-	     }
-
-	   }
-	 		}
-	},
-	erw(row){
-		this.$router.push({
-		  path: '/reny/ewm',
-		  query:{
-			   'tenantId':row.investigateTableId
-			  }
-		})
-	},
-
-	hussar_17Click(val) {
-	        const _this = this
-	        var url =process.env.VUE_APP_BASE_API + 'pages/index/index?id=' + val.investigateTableId;
-			 console.log(url,this.$refs.canvas,6)
-			this.opent = true
-	        QRCode.toCanvas(
-	                      canvas,
-	                      url,//生成二维码的数据
-	                      {width: 100, height:100, margin: 1.5},//margin调整二维码的白边大小
-	                      function (error) {
-	                        if (error) {
-	                          console.log(error);
-	                        }
-	                      }
-	                    );
-
-	        // console.log(qrcode,987)
-	      },
-	/** 成绩_子添加按钮操作 */
-	handleAddScoreDataDetails() {
-
-	  let obj = {};
-	  obj.duty = "";
-	  obj.idCard = "";
-	  obj.phonenumber = "";
-	  obj.userName = "";
-	  this.scoreDataDetailsList.push(obj);
-	  console.log(this.scoreDataDetailsList)
-	},
-	/** 成绩_子删除按钮操作 */
-	handleDeleteScoreDataDetails() {
-	  if (this.checkedScoreDataDetails.length == 0) {
-	    this.$modal.msgError("请先选择要删除的数据");
-	  } else {
-	    const scoreDataDetailsList = this.scoreDataDetailsList;
-	    const checkedScoreDataDetails = this.checkedScoreDataDetails;
-	    this.scoreDataDetailsList = scoreDataDetailsList.filter(function(item) {
-	      return checkedScoreDataDetails.indexOf(item.index) == -1
-	    });
-	  }
-	},
-	/** 复选框选中数据 */
-	handleScoreDataDetailsSelectionChange(selection) {
-	  this.checkedScoreDataDetails = selection.map(item => item.index)
-	},
-	/** 成绩_子序号 */
-	rowScoreDataDetailsIndex({ row, rowIndex }) {
-	  row.index = rowIndex + 1;
-	},
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const postIds = row.recordId || this.ids;
-      delReservat(postIds).then(response => {
-       this.$modal.msgSuccess("操作成功");
-        this.getList();
-      });
-
-      // this.$modal.confirm('是否确认删除数据项?').then(function() {
-      //   return delPost(postIds);
-      // }).then(() => {
-      //   this.getList();
-      //   this.$modal.msgSuccess("删除成功");
-      // }).catch(() => {});
-    },
-    handleDeletehx(row) {
-      const postIds = row.reservatId || this.ids;
-      let nhg={}
-      nhg.reservatId = postIds
-      delReservathx(nhg).then(response => {
-       this.$modal.msgSuccess("操作成功");
-        this.getList();
-      });
-
-      // this.$modal.confirm('是否确认删除数据项?').then(function() {
-      //   return delPost(postIds);
-      // }).then(() => {
-      //   this.getList();
-      //   this.$modal.msgSuccess("删除成功");
-      // }).catch(() => {});
-    },
-	// 发送短信
-	handleUpdatefas(row){
-		updateFs(row).then(response => {
-		 this.$modal.msgSuccess("发送成功");
-		  // this.getList();
-		});
-	},
-	handleDeletegx(row){
-		updateGx(row).then(response => {
-		  this.$modal.msgSuccess("发送成功");
-		  // this.getList();
-		});
-	},
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('system/reservat/export', {
-        ...this.queryParams
-      }, `预约人员.xlsx`)
-    },
-		// 获取屏幕高度
-		showFilterForm () {
-		      this.filterActive = !this.filterActive
-		      this.changeTableMaxHeight()
-		    },
-
-		    changeTableMaxHeight () {
-		      let height = document.body.offsetHeight // 网页可视区域高度
-		      // if (this.filterActive) {
-		      //   this.tableMaxHeight = height - 320
-		      // } else {
-		        this.tableMaxHeight = height - 350
-		      // }
-		      console.log(height)
-		    },
-    // 播放摄像头
-    getVideo() {
-    	var that=this;
-       this.isfse  = true
-    	this.initVideoPlay('192.168.101.64', '80', 'admin', 'zxy123456','divPlugin')
-    },
-    // 有插件
-    initVideoPlay(ip, port, username, password,id) {
-    	var that = this;
-    	var g_iWndIndex = 0; //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口
-    	var g_oLocalConfig = null; //本地配置
-    	// let ip = this.szIP //硬盘录像机ip
-    	// let port = this.szPort //默认为80端口
-    	// let username = this.szUsername //账号:
-    	// let password = this.szPassword // 密码
-    	var iRtspPort = ''
-    	// 1.初始化插件参数及插入插件
-    	WebVideoCtrl.I_InitPlugin({
-    		bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持
-    		iWndowType: 1,
-    		bDebugMode: true,
-    		cbSelWnd: function(xmlDoc) {
-    			g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10);
-    			const szInfo = "当前选择的窗口编号:" + g_iWndIndex;
-    			this.g_iWndIndex = g_iWndIndex;
-    			console.log(szInfo, "szInfo");
-    		},
-    		cbDoubleClickWnd: function(iWndIndex, bFullScreen) {
-    			let szInfo = "当前放大的窗口编号:" + iWndIndex;
-    			if (!bFullScreen) {
-    				szInfo = "当前还原的窗口编号:" + iWndIndex;
-    			}
-    			// console.log(szInfo, "szInfo");
-    		},
-    		cbEvent: function(iEventType, iParam1, iParam2) {
-    			if (2 == iEventType) {
-    				// 回放正常结束
-    				console.log("窗口" + iParam1 + "回放结束!");
-    			} else if (-1 == iEventType) {
-    				console.log("设备" + iParam1 + "网络错误!");
-    			} else if (3001 == iEventType) {
-    				clickStopRecord(g_szRecordType, iParam1);
-    			}
-    		},
-    		//2.登录摄像头
-    		cbInitPluginComplete: function() {
-    			const oLiveView = {
-    				iProtocol: 1, // protocol 1:http, 2:https
-    				szIP: ip, // protocol ip
-    				szPort: port, // protocol port
-    				szUsername: username, // device username
-    				szPassword: password, // device password
-    				iStreamType: 1, // stream 1:main stream  2:sub-stream  3:third stream  4:transcode stream
-    				iChannelID: 1, // channel no
-    				bZeroChannel: false, // zero channel
-    			};
-    			// var swidth=Number((that.width*Number(that.scale))).toFixed(2)
-    			// var sheight=Number((that.height*Number(that.scale))).toFixed(2)
-    			// that.swidth=swidth
-    			// that.sheight=sheight
-    			WebVideoCtrl.I_InsertOBJECTPlugin(id).then(
-    				() => {
-    					// setTimeout(function(){
-    					// 	WebVideoCtrl.I_Resize(swidth,sheight)
-    					// },300)
-    					WebVideoCtrl.I_Login(
-    						oLiveView.szIP,
-    						oLiveView.iProtocol,
-    						oLiveView.szPort,
-    						oLiveView.szUsername,
-    						oLiveView.szPassword, {
-    							timeout: 3000,
-    							async: false,
-    							success: function(xmlDoc) {
-    								console.log(" 登录成功!");
-    								let a = ip
-    								let b = port
-    								setTimeout(function() {
-    									//延迟方法
-    									setTimeout(function() {
-    										//调用预览摄像头这里可以循环创建
-    										that.clickStartRealPlay(a, b,1, 0, 1);
-    										// that.clickStartRealPlay(a, b, 1, 1,2);
-    										// that.clickStartRealPlay(a, b, 1, 2,3);
-    										// clickStartRealPlay(a,b, 1, 3, 4);
-    										// clickStartRealPlay(a,b, 1, 4, 5);
-    										// clickStartRealPlay(a,b, 1, 5, 6);
-    										// clickStartRealPlay(a,b, 1, 6, 7);
-    										// clickStartRealPlay(a,b, 1, 7, 8);
-    									}, 1000);
-
-
-    									setTimeout(function() {
-    										// 获取通道 (如果多个摄像头需要获取多个通道需要调用)
-    										// getChannelInfo(a);
-    										//获取端口 (在这里获取RTSP 端口号 预览时传入)
-    										getDevicePort(a);
-    									}, 10)
-
-    								}, 10);
-    							},
-    							error: function(oError) {
-    								console.log(" 登录失败!", oError);
-    							},
-    						}
-    					);
-    					// 检查插件是否最新
-    					WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
-    						if (bFlag) {
-    							alert(
-    								"检测到新的插件版本,双击开发包目录里的HCWebSDKPlugin.exe升级!"
-    							);
-
-    						}
-    					});
-    				},
-    				() => {
-    					alert(
-    						"插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPlugin.exe安装!"
-    					);
-
-    				}
-    			);
-
-    		},
-    	});
-    	// 3.获取通道
-    	function getChannelInfo(a) {
-    		var szDeviceIdentify = a,
-    			oSel = null; //通道列表
-    		if (null == szDeviceIdentify) {
-    			return;
-    		}
-
-    		// 模拟通道 有
-    		WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
-    			success: function(xmlDoc) {
-    				var oChannels = $(xmlDoc).find("VideoInputChannel");
-
-    				$.each(oChannels, function(i) {
-    					var id = $(this).find("id").eq(0).text(),
-    						name = $(this).find("name").eq(0).text();
-    					if ("" == name) {
-    						name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1));
-    					}
-
-    					// console.log(id + "通道id是")
-    					// console.log(name + "通道name是")
-    				});
-    				console.log(szDeviceIdentify + " 获取模拟通道成功!");
-    			},
-    			error: function(oError) {
-    				console.log(szDeviceIdentify + " 获取模拟通道失败!", oError.errorCode, oError.errorMsg);
-    			}
-    		});
-    		// 数字通道
-    		WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
-    			success: function(xmlDoc) {
-    				var oChannels = $(xmlDoc).find("InputProxyChannelStatus");
-
-    				$.each(oChannels, function(i) {
-    					var id = $(this).find("id").eq(0).text(),
-    						name = $(this).find("name").eq(0).text(),
-    						online = $(this).find("online").eq(0).text();
-    					if ("false" == online) { // 过滤禁用的数字通道
-    						return true;
-    					}
-    					if ("" == name) {
-    						name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1));
-    					}
-    				});
-    				console.log(szDeviceIdentify + " 获取数字通道成功!");
-    			},
-    			error: function(oError) {
-    				console.log(szDeviceIdentify + " 获取数字通道失败!", oError.errorCode, oError.errorMsg);
-    			}
-    		});
-    		// 零通道
-    		WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, {
-    			success: function(xmlDoc) {
-    				var oChannels = $(xmlDoc).find("ZeroVideoChannel");
-
-    				$.each(oChannels, function(i) {
-    					var id = $(this).find("id").eq(0).text(),
-    						name = $(this).find("name").eq(0).text();
-    					if ("" == name) {
-    						name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1));
-    					}
-    					if ("true" == $(this).find("enabled").eq(0).text()) { // 过滤禁用的零通道
-
-    					}
-    				});
-    				console.log(szDeviceIdentify + " 获取零通道成功!");
-    			},
-    			error: function(oError) {
-    				console.log(szDeviceIdentify + " 获取零通道失败!", oError.errorCode, oError.errorMsg);
-    			}
-    		});
-    	};
-
-    	//4.获取端口
-    	function getDevicePort(a) {
-    		var szDeviceIdentify = a;
-
-    		if (null == szDeviceIdentify) {
-    			return;
-    		}
-    		WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then((oPort) => {
-    			// console.log(oPort.iDevicePort + "iDevicePort的值是")
-    			// console.log(oPort.iRtspPort + "iRtspPort的值是")
-    			console.log(szDeviceIdentify + " 获取端口成功!");
-    			iRtspPort = oPort.iRtspPort
-    			that.iRtspPort = iRtspPort
-    		}, (oError) => {
-    			var szInfo = "获取端口失败!";
-    			console.log(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
-    		});
-    	};
-    },
-    // 5.开始预览
-    clickStartRealPlay(szIP, szPort, iStreamType, iWndIndex, iChannelID) {
-      var that=this;
-    	var oWndInfo = WebVideoCtrl.I_GetWindowStatus(this.g_iWndIndex),
-    		szDeviceIdentify = szIP + "_" + szPort, //ip
-    		iChannelID = iChannelID,
-    		bZeroChannel = false,
-    		iPort = this.iRtspPort,
-    		szInfo = "";
-    	iStreamType = iStreamType;
-    	if (null == szDeviceIdentify) {
-    		return null;
-    	}
-    	this.szDeviceIdentify = szDeviceIdentify;
-    	var startRealPlay = function() {
-    		WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
-    			iStreamType: iStreamType,
-    			iChannelID: iChannelID,
-    			bZeroChannel: bZeroChannel,
-    			iWndIndex: iWndIndex, //要播放的窗口
-    			iPort: iPort, //如果多个摄像头需要必填 (RTSP 端口号)
-    			success: function() {
-    				szInfo = "开始预览窗口" + iWndIndex + "成功!";
-    				console.log(szDeviceIdentify + " " + szInfo);
-    			},
-    			error: function(oError) {
-    				console.log(szDeviceIdentify + " 开始预览窗口" + iWndIndex + "失败!", oError
-    					.errorCode, oError.errorMsg);
-    			}
-    		});
-    	};
-
-    	if (oWndInfo != null) { // 已经在播放了,先停止
-    		WebVideoCtrl.I_Stop({
-    			success: function() {
-    				startRealPlay();
-    			}
-    		});
-    	} else {
-    		startRealPlay();
-    	}
-    },
-  }
-};
-</script>
-
-<style lang="scss">
-	.isjses{
-		.el-tabs--left .el-tabs__nav-wrap.is-left::after{
-			width:6px;
-		}
-		.el-tabs--left .el-tabs__active-bar.is-left,{
-			width:6px;
-		}
-	}
-	.ingaqe{
-		.el-input--medium{
-			width:100%;
-		}
-	}
-	.nhgrls{
-		.el-dialog__body{
-			padding: 0;
-		}
-	}
-  .hyr{
-    span{
-      text-decoration:underline;
-    }
-  }
-</style>
-<style scoped lang="scss">
-	.nghwgq{
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		margin-top: 90px;
-		div{
-			color:#aaa;
-		}
-	}
-	.ihgswq{
-		// width:100%;
-		// overflow-x: hidden;
-		// margin-top: 30px;
-	}
-	.fijge{
-		// width: 110%;
-		display: flex;
-		display: -webkit-flex;
-		justify-content: space-between;
-		.shotw{
-			position: relative;
-			// width:32%;
-			width: 238px;
-			height: 140px;
-			margin-left: 0;
-			margin-right: 20px;
-			margin-bottom: 15px;
-			img{
-				height: 100%;
-				cursor:pointer;
-			}
-		  p{
-			  // bottom:-10px;
-			  margin: 0;
-			  font-weight: bold;
-			  font-size: 16px;
-			   padding: 5px  10px;
-			   cursor:pointer;
-		  }
-		  .iges{
-			position: absolute;
-			top:50%;
-			left:50%;
-			width:30px;
-			height: 30px;
-			transform: translate(-50%,-50%);
-			cursor:pointer;
-		  }
-		}
-	}
-	.nhgwesvq{
-		width:1610px !important;
-	}
-	.shotw{
-		position: relative;
-		margin-left: -20px;
-		margin-right: -20px;
-		img{
-			width:100%;
-			height: 80vh;
-		}
-	  p{
-	     position: absolute;
-		 bottom: 0;
-		 left:0;
-		 background-color: rgba(0, 0, 0, .5);
-		 width: 100%;
-		 padding: 13px  5px;
-		 color:#fff;
-		 font-weight: bold;
-		 font-size: 18px;
-	  }
-	  .p{
-		  top:0px;
-		  height: 60px;
-		  margin: 0;
-		  padding-left: 20px;
-	  }
-	}
-
-
-	.ksfpo{
-		background-color: #3464EB;
-		padding: 6px 12px;
-		border-radius: 4px ;
-		color:#fff;
-		cursor:pointer;
-	}
-	.ksfpok{
-		background-color: #FFFFFF;
-		padding: 5px 11px;
-		border-radius: 4px;
-		color:#3464EB;
-		border: 1px solid #3464EB;
-		margin-left: 10px;
-		cursor:pointer;
-	}
-	.ksfpofg{
-		background-color: #75DB75;
-		padding: 5px 11px;
-		border-radius: 4px;
-		color:#FFFFFF;
-		border: 1px solid #75DB75;
-		margin-left: 10px;
-		cursor:pointer;
-	}
-  .iuer{
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    .ite{
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      p{
-        cursor:pointer;
-        margin: 0;
-        font-size: 15px;
-        font-family: PingFang SC;
-        font-weight: 500;
-        color:#666666;
-        padding: 4px 12px;
-        background: #Fff;
-        border-radius: 4px;
-        margin-right: 20px;
-		position: relative;
-      }
-      .actt{
-        background: #fff;
-        // border-bottom: 3px solid #5974E0;
-        // border-radius: 0;
-		// border-bottom-right-radius: 4px;
-        color: #5974E0;
-      }
-	  .actt{
-		    &::after {
-		          content: "";
-		          width: 40%;
-		          height: 5px;
-				  border-radius: 3px;
-		          transform: translate(-50%);
-		          background-color: #5974E0;
-		          position: absolute;
-		          left: 50%;
-		          bottom:-3px;
-		        }
-
-	  }
-
-    }
-  }
-  .lqw{
-    padding: 0 10px;
-    margin: 0;
-    margin-bottom: 20px;
-  }
-.nhgel{
-  height: 170px;
-  background-color: #313b61;
-  width: 100%;
-  position: absolute;
-  top:0;
-  left:0;
-  z-index: 0;
-}
-	.app-container{
-		background-color: #f3f4f6;
-		padding-top: 10px;
-		height: 180vh;
-
-	}
-	.ntgs{
-	position: relative;
-		// background-color: #fff;
-		padding: 5px;
-		// border-radius: 5px;
-		padding-top: 10px;
-	     padding: 10px 20px;
-		.pagination-container{
-			height: 50px;
-		}
-	}
-	.nghfs{
-	position: relative;
-		background-color: #fff;
-		padding-top: 18px !important;
-		padding: 5px;
-		// border-radius: 5px;
-		// margin-bottom: 20px;
-	}
-	.ksf{
-		img{
-			width:100%;
-			height: 100%;
-		}
-	}
-   .ingwfaq{
-	   font-weight: bold;
-	   font-size: 16px;
-   }
-.dflex{display: flex;}
-.dflext{display: flex;align-items: flex-start;}
-.drawings-list{width: 100%;flex: 0 0 auto;padding-left: 10px;line-height:36px ;
-  .delimg{width: 15px;height: 15px;margin-left: 5px;}
-  .txt{font-size: 12px;padding-left: 5px;flex: 1;}
-  .tflex{display: flex;align-items: center;}
-}
-.disbtn{display: flex;align-items: center;flex: 0 0 auto;min-height: 34px;cursor: pointer;
-  img{width: 14px;height: 14px;margin-right: 10px;}
-  font-weight: 500;
-  font-size: 14px;
-  color: #444444;
-}
-</style>

+ 10 - 12
ruoyi-ui/src/views/shipinggaoj/shebe/index.vue

@@ -1,8 +1,5 @@
 <template>
-  <div class="app-container" style="padding-top: 20px;height: 120vh;"  v-loading="loading"
-    element-loading-text="拼命加载中"
-    element-loading-spinner="el-icon-loading"
-    element-loading-background="rgba(0, 0, 0, 0.8)">
+  <div class="app-container" style="padding-top: 20px;height: 120vh;"  >
     <div class="ntgs">
     <el-row :gutter="10" class="mb8">
      <div class="iuer" style="margin-bottom:10px;">
@@ -63,12 +60,11 @@
       </el-col> -->
       <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
     </el-row>
-
 	<div>
 		<el-row :gutter="20">
           <!-- postList -->
 					<el-col :span='5'>
-						<div style="background-color: #fff;border-radius: 10px;padding: 20px 20px;height: 100vh;overflow:auto" class="infinite-list">
+						<!-- <div style="background-color: #fff;border-radius: 10px;padding: 20px 20px;height: 100vh;overflow:auto" class="infinite-list">
               <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">通道列表</p>
               <div style=" height: 36px;;line-height: 36px;margin-top: 10px;"v-for="(item,index) in 20"   >
                               <div @click="ishg(item)" style="display: flex;align-items: center;justify-content: space-between;">
@@ -77,10 +73,10 @@
                                 <img src="../../../assets/images/icon_htgl_zd.png" alt="" style="width: 10px;height: 12px;">
                               </div>
                           </div>
-            </div>
+            </div> -->
 					</el-col>
         <!-- v-if="isshoe" -->
-        <el-col :span='19' style="padding-left: 30px; background-color: #fff;border-radius: 10px;padding: 20px; height: 100vh;" >
+        <el-col :span='24' style="padding-left: 30px; background-color: #fff;border-radius: 10px;padding: 20px; height: 100vh;" >
           <div style="display: flex;align-items: center;justify-content: space-between;">
             <p style="margin: 0;border-left: 6px solid #03BF8A;margin-left: -20px;padding-left: 10px;font-weight: 800;">实时预览</p>
             <div>
@@ -91,11 +87,14 @@
           </div>
           <div class="video-container">
               <!-- <h3>实时YOLO检测</h3> -->
-              <img src="http://192.168.101.22:5000/video_feed" width="100%" height="460" id="yolo-stream">
+
+              <!-- http://192.168.101.22:5000/video_feed -->
+              <img :src="form.reportAddress" width="100%" height="460" id="yolo-stream">
           </div>
           <div class="controls">
               <button onclick="refreshStream()">刷新视频</button>
           </div>
+
           <!-- <div style="width: 100%; height: 480px;">
             <div v-if="isfse" id="divPlugin" style="width: 100%; height: 480px;" ></div>
           </div> -->
@@ -434,13 +433,12 @@ export default {
     /** 查询岗位列表 */
     getList() {
 	  // this.queryParams
-    this.loading = true
+    // this.loading = true
     getWarnManage(this.$route.query.id).then(response => {
       this.form = response.data
-
       // this.getVideo()
       // WebVideoCtrl.I_ShowPlugin()
-      this.loading = false
+      // this.loading = false
       // this.open = true
       // this.title = "修改告警管理"
     })