This commit is contained in:
		
							parent
							
								
									2d93fe0f2e
								
							
						
					
					
						commit
						365794ab8b
					
				| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					import request from '@/utils/request';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取视频设备列表
 | 
				
			||||||
 | 
					export const getList = (params) => {
 | 
				
			||||||
 | 
					  return request.get('/smart-site/video_equipment/list', { params });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取设备类型列表
 | 
				
			||||||
 | 
					export const getTypeList = (data) => {
 | 
				
			||||||
 | 
					  return request.post('/smart-site/video_equipment/getTypeList', data);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 新增视频设备
 | 
				
			||||||
 | 
					export const addVideoDevice = (data) => {
 | 
				
			||||||
 | 
					  return request.post('/smart-site/video_equipment/add', data);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 编辑视频设备
 | 
				
			||||||
 | 
					export const editVideoDevice = (data) => {
 | 
				
			||||||
 | 
					  return request.post('/smart-site/video_equipment/edit', data);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除视频设备
 | 
				
			||||||
 | 
					export const delVideoDevice = (id) => {
 | 
				
			||||||
 | 
					  return request.post(`/smart-site/video_equipment/del/${id}`);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取视频设备详情
 | 
				
			||||||
 | 
					export const getVideoDeviceDetail = (id) => {
 | 
				
			||||||
 | 
					  return request.get(`/smart-site/video_equipment/${id}`);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ import store from './store'
 | 
				
			||||||
import router from './router'
 | 
					import router from './router'
 | 
				
			||||||
import directive from './directive' // directive
 | 
					import directive from './directive' // directive
 | 
				
			||||||
import plugins from './plugins' // plugins
 | 
					import plugins from './plugins' // plugins
 | 
				
			||||||
import { download } from '@/utils/request'
 | 
					import { download, derive } from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import './assets/icons' // icon
 | 
					import './assets/icons' // icon
 | 
				
			||||||
import './permission' // permission control
 | 
					import './permission' // permission control
 | 
				
			||||||
| 
						 | 
					@ -56,6 +56,7 @@ Vue.prototype.addDateRange = addDateRange
 | 
				
			||||||
Vue.prototype.selectDictLabel = selectDictLabel
 | 
					Vue.prototype.selectDictLabel = selectDictLabel
 | 
				
			||||||
Vue.prototype.selectDictLabels = selectDictLabels
 | 
					Vue.prototype.selectDictLabels = selectDictLabels
 | 
				
			||||||
Vue.prototype.download = download
 | 
					Vue.prototype.download = download
 | 
				
			||||||
 | 
					Vue.prototype.derive = derive
 | 
				
			||||||
Vue.prototype.handleTree = handleTree
 | 
					Vue.prototype.handleTree = handleTree
 | 
				
			||||||
Vue.prototype.indexContinuation = indexContinuation
 | 
					Vue.prototype.indexContinuation = indexContinuation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,4 +184,33 @@ export function download(url, params, filename, config) {
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 通用导出方法
 | 
				
			||||||
 | 
					export function derive(url, params, filename, config) {
 | 
				
			||||||
 | 
					  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
 | 
				
			||||||
 | 
					  return service.post(url, JSON.stringify(params), {
 | 
				
			||||||
 | 
					    headers: {
 | 
				
			||||||
 | 
					      'Content-Type': 'application/json; charset=UTF-8',
 | 
				
			||||||
 | 
					      'encryption': 'encryption'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    responseType: 'blob',
 | 
				
			||||||
 | 
					    ...config
 | 
				
			||||||
 | 
					  }).then(async (data) => {
 | 
				
			||||||
 | 
					    const isBlob = blobValidate(data);
 | 
				
			||||||
 | 
					    if (isBlob) {
 | 
				
			||||||
 | 
					      const blob = new Blob([data])
 | 
				
			||||||
 | 
					      saveAs(blob, filename)
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      const resText = await data.text();
 | 
				
			||||||
 | 
					      const rspObj = JSON.parse(resText);
 | 
				
			||||||
 | 
					      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
 | 
				
			||||||
 | 
					      Message.error(errMsg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    downloadLoadingInstance.close();
 | 
				
			||||||
 | 
					  }).catch((r) => {
 | 
				
			||||||
 | 
					    console.error(r)
 | 
				
			||||||
 | 
					    Message.error('下载文件出现错误,请联系管理员!')
 | 
				
			||||||
 | 
					    downloadLoadingInstance.close();
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default service
 | 
					export default service
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -136,8 +136,8 @@
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
      </el-form>
 | 
					      </el-form>
 | 
				
			||||||
      <span slot="footer" class="dialog-footer">
 | 
					      <span slot="footer" class="dialog-footer">
 | 
				
			||||||
        <el-button @click="dialogVisible = false">取 消</el-button>
 | 
					        <el-button @click="dialogVisible = false">{{ isDetail ? '关 闭' : '取 消' }}</el-button>
 | 
				
			||||||
        <el-button type="primary" @click="dialogConfirm">确 定</el-button>
 | 
					        <el-button type="primary" @click="dialogConfirm" v-if="!isDetail">确 定</el-button>
 | 
				
			||||||
      </span>
 | 
					      </span>
 | 
				
			||||||
    </el-dialog>
 | 
					    </el-dialog>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,8 +10,8 @@
 | 
				
			||||||
          @keyup.enter.native="handleQuery"
 | 
					          @keyup.enter.native="handleQuery"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </el-form-item>
 | 
					      </el-form-item>
 | 
				
			||||||
      <el-form-item label="" prop="deviceStatus">
 | 
					      <el-form-item label="" prop="onLine">
 | 
				
			||||||
        <el-select v-model="queryParams.deviceStatus" placeholder="设备状态" clearable>
 | 
					        <el-select v-model="queryParams.onLine" placeholder="设备状态" clearable>
 | 
				
			||||||
          <el-option v-for="item in deviceStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
 | 
					          <el-option v-for="item in deviceStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
 | 
				
			||||||
        </el-select>
 | 
					        </el-select>
 | 
				
			||||||
      </el-form-item>
 | 
					      </el-form-item>
 | 
				
			||||||
| 
						 | 
					@ -48,13 +48,13 @@
 | 
				
			||||||
        <template v-slot="scope" v-if="column.prop == 'qrCode'">
 | 
					        <template v-slot="scope" v-if="column.prop == 'qrCode'">
 | 
				
			||||||
          <span style="color: #409eff; cursor: pointer" @click="checkQrCode(scope.row)">查看</span>
 | 
					          <span style="color: #409eff; cursor: pointer" @click="checkQrCode(scope.row)">查看</span>
 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
        <template v-slot="scope" v-else-if="column.prop == 'isAccess'">
 | 
					        <template v-slot="scope" v-else-if="column.prop == 'isT'">
 | 
				
			||||||
          <div style="display: flex; align-items: center">
 | 
					          <div style="display: flex; align-items: center; justify-content: center">
 | 
				
			||||||
            <div class="dot" v-if="scope.row.isAccess == 1"></div>
 | 
					            <div class="dot" v-if="scope.row.isT == 1"></div>
 | 
				
			||||||
            <div class="dot-red" v-else></div>
 | 
					            <div class="dot-red" v-else></div>
 | 
				
			||||||
            <div>{{ scope.row.isAccess == 1 ? '是' : '否' }}</div>
 | 
					            <div>{{ scope.row.isT == 1 ? '是' : '否' }}</div>
 | 
				
			||||||
            <div
 | 
					            <div
 | 
				
			||||||
              v-if="scope.row.isAccess == 1"
 | 
					              v-if="scope.row.isT == 1"
 | 
				
			||||||
              style="margin-left: 5px; color: #409eff; cursor: pointer"
 | 
					              style="margin-left: 5px; color: #409eff; cursor: pointer"
 | 
				
			||||||
              @click="handleDetail(scope.row)"
 | 
					              @click="handleDetail(scope.row)"
 | 
				
			||||||
            >
 | 
					            >
 | 
				
			||||||
| 
						 | 
					@ -62,18 +62,20 @@
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
        <template v-slot="scope" v-else-if="column.prop == 'deviceStatus'">
 | 
					        <template v-slot="scope" v-else-if="column.prop == 'onLine'">
 | 
				
			||||||
          <div style="display: flex; align-items: center">
 | 
					          <div style="display: flex; align-items: center; justify-content: center">
 | 
				
			||||||
            <div class="dot" v-if="scope.row.deviceStatus == 1"></div>
 | 
					            <div class="dot" v-if="scope.row.onLine == 1"></div>
 | 
				
			||||||
            <div class="dot-red" v-else></div>
 | 
					            <div class="dot-red" v-else></div>
 | 
				
			||||||
            <div>{{ scope.row.deviceStatus == 1 ? '在用' : '闲置' }}</div>
 | 
					            <div>{{ scope.row.onLine == 1 ? '在用' : '闲置' }}</div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
      </el-table-column>
 | 
					      </el-table-column>
 | 
				
			||||||
      <!-- 操作 -->
 | 
					      <!-- 操作 -->
 | 
				
			||||||
      <el-table-column label="操作" align="center" width="255">
 | 
					      <el-table-column label="操作" align="center" width="255">
 | 
				
			||||||
        <template slot-scope="scope">
 | 
					        <template slot-scope="scope">
 | 
				
			||||||
          <el-button type="warning" plain size="mini" icon="el-icon-set-up" @click="handleMonitoringAndDebug(scope.row)">调试</el-button>
 | 
					          <el-button type="warning" plain size="mini" icon="el-icon-set-up" @click="handleMonitoringAndDebug(scope.row)"
 | 
				
			||||||
 | 
					            >调试</el-button
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
          <el-button type="primary" plain size="mini" icon="el-icon-edit" @click="handleEdit(scope.row)">
 | 
					          <el-button type="primary" plain size="mini" icon="el-icon-edit" @click="handleEdit(scope.row)">
 | 
				
			||||||
            编辑
 | 
					            编辑
 | 
				
			||||||
          </el-button>
 | 
					          </el-button>
 | 
				
			||||||
| 
						 | 
					@ -95,70 +97,71 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- 弹框 -->
 | 
					    <!-- 弹框 -->
 | 
				
			||||||
    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
 | 
					    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
 | 
				
			||||||
      <el-form
 | 
					      <el-form ref="dialogForm" :model="dialogForm" label-width="170px" :rules="dialogRules">
 | 
				
			||||||
        ref="dialogForm"
 | 
					        <el-form-item label="设备类型" prop="devType" v-if="showItem">
 | 
				
			||||||
        :model="dialogForm"
 | 
					          <el-select v-model="dialogForm.devType" placeholder="请选择设备类型" clearable style="width: 100%">
 | 
				
			||||||
        label-width="170px"
 | 
					 | 
				
			||||||
        :rules="dialogRules"
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <el-form-item label="设备类型" prop="deviceType" v-if="showItem">
 | 
					 | 
				
			||||||
          <el-select v-model="dialogForm.deviceType" placeholder="请选择设备类型" clearable style="width: 100%">
 | 
					 | 
				
			||||||
            <el-option v-for="item in deviceTypeOpts" :key="item.value" :label="item.label" :value="item.value" />
 | 
					            <el-option v-for="item in deviceTypeOpts" :key="item.value" :label="item.label" :value="item.value" />
 | 
				
			||||||
          </el-select>
 | 
					          </el-select>
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="设备名称" prop="deviceName" v-if="showItem">
 | 
					        <el-form-item label="设备名称" prop="devName" v-if="showItem">
 | 
				
			||||||
          <el-input v-model="dialogForm.deviceName" placeholder="请输入设备名称" clearable />
 | 
					          <el-input v-model="dialogForm.devName" placeholder="请输入设备名称" clearable maxlength="64" />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="MACID" prop="macId" v-if="showItem">
 | 
					        <el-form-item label="MAC编码" prop="macId" v-if="showItem">
 | 
				
			||||||
          <el-input v-model="dialogForm.macId" placeholder="请输入MACID" clearable />
 | 
					          <el-input v-model="dialogForm.macId" placeholder="请输入MAC编码" clearable maxlength="64" />
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					        <el-form-item label="国标编码" prop="gbCode" v-if="showItem">
 | 
				
			||||||
 | 
					          <el-input v-model="dialogForm.gbCode" placeholder="请输入国标编码" clearable maxlength="64" />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="puid" prop="puId" v-if="showItem">
 | 
					        <el-form-item label="puid" prop="puId" v-if="showItem">
 | 
				
			||||||
          <el-input v-model="dialogForm.puId" placeholder="请输入puid" clearable />
 | 
					          <el-input v-model="dialogForm.puId" placeholder="请输入puid" clearable maxlength="64" />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="是否接入统一视频" prop="isAccess" v-if="showItem">
 | 
					        <el-form-item label="视频下标" prop="videoIndex" v-if="showItem">
 | 
				
			||||||
          <el-radio-group v-model="dialogForm.isAccess" @input="changeIsAccess">
 | 
					          <el-input v-model="dialogForm.videoIndex" placeholder="请输入视频下标" clearable maxlength="64" />
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					        <el-form-item label="是否接入统一视频" prop="isT" v-if="showItem">
 | 
				
			||||||
 | 
					          <el-radio-group v-model="dialogForm.isT" @input="changeIsAccess">
 | 
				
			||||||
            <el-radio-button label="1">是</el-radio-button>
 | 
					            <el-radio-button label="1">是</el-radio-button>
 | 
				
			||||||
            <el-radio-button label="0">否</el-radio-button>
 | 
					            <el-radio-button label="0">否</el-radio-button>
 | 
				
			||||||
          </el-radio-group>
 | 
					          </el-radio-group>
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="统一视频名称" prop="unifiedVideoName" v-if="dialogForm.isAccess == '1'">
 | 
					        <el-form-item label="统一视频名称" prop="tName" v-if="dialogForm.isT == '1'">
 | 
				
			||||||
          <el-input
 | 
					          <el-input
 | 
				
			||||||
            v-model="dialogForm.unifiedVideoName"
 | 
					            v-model="dialogForm.tName"
 | 
				
			||||||
            placeholder="请输入统一视频名称"
 | 
					            placeholder="请输入统一视频名称"
 | 
				
			||||||
            clearable
 | 
					            clearable
 | 
				
			||||||
            :disabled="!showItem"
 | 
					            :disabled="!showItem"
 | 
				
			||||||
 | 
					            maxlength="64"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="统一视频编码" prop="unifiedVideoCode" v-if="dialogForm.isAccess == '1'">
 | 
					        <el-form-item label="统一视频编码" prop="tCode" v-if="dialogForm.isT == '1'">
 | 
				
			||||||
          <el-input
 | 
					          <el-input
 | 
				
			||||||
            v-model="dialogForm.unifiedVideoCode"
 | 
					            v-model="dialogForm.tCode"
 | 
				
			||||||
            placeholder="请输入统一视频编码"
 | 
					            placeholder="请输入统一视频编码"
 | 
				
			||||||
            clearable
 | 
					            clearable
 | 
				
			||||||
            :disabled="!showItem"
 | 
					            :disabled="!showItem"
 | 
				
			||||||
 | 
					            maxlength="64"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item
 | 
					        <el-form-item label="统一视频前端协议编码" prop="tWbCode" v-if="dialogForm.isT == '1'">
 | 
				
			||||||
          label="统一视频前端协议编码"
 | 
					 | 
				
			||||||
          prop="unifiedVideoFrontEndProtocolCode"
 | 
					 | 
				
			||||||
          v-if="dialogForm.isAccess == '1'"
 | 
					 | 
				
			||||||
        >
 | 
					 | 
				
			||||||
          <el-input
 | 
					          <el-input
 | 
				
			||||||
            v-model="dialogForm.unifiedVideoFrontEndProtocolCode"
 | 
					            v-model="dialogForm.tWbCode"
 | 
				
			||||||
            placeholder="请输入统一视频前端协议编码"
 | 
					            placeholder="请输入统一视频前端协议编码"
 | 
				
			||||||
            clearable
 | 
					            clearable
 | 
				
			||||||
            :disabled="!showItem"
 | 
					            :disabled="!showItem"
 | 
				
			||||||
 | 
					            maxlength="64"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="统一设备协议编码" prop="unifiedDeviceProtocolCode" v-if="dialogForm.isAccess == '1'">
 | 
					        <el-form-item label="统一设备协议编码" prop="tDevCode" v-if="dialogForm.isT == '1'">
 | 
				
			||||||
          <el-input
 | 
					          <el-input
 | 
				
			||||||
            v-model="dialogForm.unifiedDeviceProtocolCode"
 | 
					            v-model="dialogForm.tDevCode"
 | 
				
			||||||
            placeholder="请输入统一设备协议编码"
 | 
					            placeholder="请输入统一设备协议编码"
 | 
				
			||||||
            clearable
 | 
					            clearable
 | 
				
			||||||
            :disabled="!showItem"
 | 
					            :disabled="!showItem"
 | 
				
			||||||
 | 
					            maxlength="64"
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
        <el-form-item label="备注" prop="remark" v-if="showItem">
 | 
					        <el-form-item label="备注" prop="remark" v-if="showItem">
 | 
				
			||||||
          <el-input type="textarea" v-model="dialogForm.remark" placeholder="请输入备注" clearable />
 | 
					          <el-input type="textarea" v-model="dialogForm.remark" placeholder="请输入备注" clearable maxlength="100" />
 | 
				
			||||||
        </el-form-item>
 | 
					        </el-form-item>
 | 
				
			||||||
      </el-form>
 | 
					      </el-form>
 | 
				
			||||||
      <span slot="footer" class="dialog-footer">
 | 
					      <span slot="footer" class="dialog-footer">
 | 
				
			||||||
| 
						 | 
					@ -170,15 +173,14 @@
 | 
				
			||||||
    <!-- 二维码弹框 -->
 | 
					    <!-- 二维码弹框 -->
 | 
				
			||||||
    <el-dialog title="二维码查看" :visible.sync="qrVisible" width="36%">
 | 
					    <el-dialog title="二维码查看" :visible.sync="qrVisible" width="36%">
 | 
				
			||||||
      <div style="text-align: center">
 | 
					      <div style="text-align: center">
 | 
				
			||||||
        <vue-qr ref="qrCode" :text="qrData.qrCode" color-dark="#333" :size="390" :margin="10"></vue-qr>
 | 
					        <vue-qr ref="qrCode" :text="qrData.macId" color-dark="#333" :size="390" :margin="10"></vue-qr>
 | 
				
			||||||
        <div>设备编号: {{ qrData.deviceNo }}</div>
 | 
					        <div>设备编号: {{ qrData.gbCode }}</div>
 | 
				
			||||||
        <div>设备名称: {{ qrData.deviceName }}</div>
 | 
					        <div>设备名称: {{ qrData.devName }}</div>
 | 
				
			||||||
        <!-- 下载 -->
 | 
					        <!-- 下载 -->
 | 
				
			||||||
        <el-button type="primary" @click="downloadQrCode" style="margin-top: 20px">下 载</el-button>
 | 
					        <el-button type="primary" @click="downloadQrCode" style="margin-top: 20px">下 载</el-button>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </el-dialog>
 | 
					    </el-dialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    <el-dialog title="调试" :visible.sync="videoDebug" width="70%" height="80%">
 | 
					    <el-dialog title="调试" :visible.sync="videoDebug" width="70%" height="80%">
 | 
				
			||||||
      <MonitoringAndDebug />
 | 
					      <MonitoringAndDebug />
 | 
				
			||||||
    </el-dialog>
 | 
					    </el-dialog>
 | 
				
			||||||
| 
						 | 
					@ -187,13 +189,20 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import VueQr from 'vue-qr'
 | 
					import VueQr from 'vue-qr'
 | 
				
			||||||
import MonitoringAndDebug from '@/views/deviceManagement/videoDeviceMgmt/monitoringAndDebug.vue';
 | 
					import MonitoringAndDebug from '@/views/deviceManagement/videoDeviceMgmt/monitoringAndDebug.vue'
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  getList,
 | 
				
			||||||
 | 
					  getTypeList,
 | 
				
			||||||
 | 
					  addVideoDevice,
 | 
				
			||||||
 | 
					  editVideoDevice,
 | 
				
			||||||
 | 
					  delVideoDevice,
 | 
				
			||||||
 | 
					  getVideoDeviceDetail,
 | 
				
			||||||
 | 
					} from '@/api/deviceManagement'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  components: {
 | 
					  components: {
 | 
				
			||||||
    VueQr,
 | 
					    VueQr,
 | 
				
			||||||
    MonitoringAndDebug
 | 
					    MonitoringAndDebug,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  data() {
 | 
					  data() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
| 
						 | 
					@ -202,76 +211,50 @@ export default {
 | 
				
			||||||
        pageNum: 1,
 | 
					        pageNum: 1,
 | 
				
			||||||
        pageSize: 10,
 | 
					        pageSize: 10,
 | 
				
			||||||
        keyWord: '', // 关键词
 | 
					        keyWord: '', // 关键词
 | 
				
			||||||
        deviceStatus: '', // 设备状态
 | 
					        onLine: '', // 设备状态
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      deviceStatusOptions: [
 | 
					      deviceStatusOptions: [
 | 
				
			||||||
        { label: '再用', value: '1' },
 | 
					        { label: '在用', value: '1' },
 | 
				
			||||||
        { label: '闲置', value: '2' },
 | 
					        { label: '闲置', value: '0' },
 | 
				
			||||||
      ], // 设备状态
 | 
					      ], // 设备状态
 | 
				
			||||||
      total: 0, // 总条数
 | 
					      total: 0, // 总条数
 | 
				
			||||||
      // 表头
 | 
					      // 表头
 | 
				
			||||||
      tableColumns: [
 | 
					      tableColumns: [
 | 
				
			||||||
        { label: '设备类型', prop: 'deviceType' },
 | 
					        { label: '设备类型', prop: 'devTypeName' },
 | 
				
			||||||
        { label: '设备名称', prop: 'deviceName' },
 | 
					        { label: '设备名称', prop: 'devName' },
 | 
				
			||||||
        { label: 'MACID', prop: 'macId' },
 | 
					        { label: 'MACID', prop: 'macId' },
 | 
				
			||||||
        { label: 'puid', prop: 'puId' },
 | 
					        { label: 'puid', prop: 'puId' },
 | 
				
			||||||
        { label: '二维码', prop: 'qrCode' },
 | 
					        { label: '二维码', prop: 'qrCode' },
 | 
				
			||||||
        { label: '是否接入统一视频', prop: 'isAccess' },
 | 
					        { label: '是否接入统一视频', prop: 'isT' },
 | 
				
			||||||
        { label: '备注', prop: 'remark' },
 | 
					        { label: '备注', prop: 'remark' },
 | 
				
			||||||
        { label: '更新人', prop: 'updateBy' },
 | 
					        { label: '更新人', prop: 'updater' },
 | 
				
			||||||
        { label: '更新时间', prop: 'updateTime' },
 | 
					        { label: '更新时间', prop: 'updateTime' },
 | 
				
			||||||
        { label: '设备状态', prop: 'deviceStatus' },
 | 
					        { label: '设备状态', prop: 'onLine' },
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      // 表格数据
 | 
					      // 表格数据
 | 
				
			||||||
      tableList: [
 | 
					      tableList: [],
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          deviceType: '设备类型设备类型设备类型设备类型设备类型',
 | 
					 | 
				
			||||||
          deviceNo: '473829107443214',
 | 
					 | 
				
			||||||
          deviceName: 'bns球机-1',
 | 
					 | 
				
			||||||
          macId: 'MACID',
 | 
					 | 
				
			||||||
          puId: 'puid',
 | 
					 | 
				
			||||||
          qrCode: '1233456789',
 | 
					 | 
				
			||||||
          isAccess: '1',
 | 
					 | 
				
			||||||
          remark: '备注',
 | 
					 | 
				
			||||||
          updateBy: '更新人',
 | 
					 | 
				
			||||||
          updateTime: '更新时间',
 | 
					 | 
				
			||||||
          deviceStatus: '1',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          deviceType: '设备类型',
 | 
					 | 
				
			||||||
          deviceNo: '473829107443214',
 | 
					 | 
				
			||||||
          deviceName: 'bns球机-2',
 | 
					 | 
				
			||||||
          macId: 'MACID',
 | 
					 | 
				
			||||||
          puId: 'puid',
 | 
					 | 
				
			||||||
          qrCode: '1233456789',
 | 
					 | 
				
			||||||
          isAccess: '0',
 | 
					 | 
				
			||||||
          remark: '备注',
 | 
					 | 
				
			||||||
          updateBy: '更新人',
 | 
					 | 
				
			||||||
          updateTime: '更新时间',
 | 
					 | 
				
			||||||
          deviceStatus: '0',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      qrVisible: false,
 | 
					      qrVisible: false,
 | 
				
			||||||
      videoDebug: false,
 | 
					      videoDebug: false,
 | 
				
			||||||
      qrData: {
 | 
					      qrData: {
 | 
				
			||||||
        qrCode: '',
 | 
					        devName: '',
 | 
				
			||||||
        deviceNo: '',
 | 
					 | 
				
			||||||
        deviceName: '',
 | 
					 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      dialogTitle: '新增',
 | 
					      dialogTitle: '新增',
 | 
				
			||||||
 | 
					      isAdd: true,
 | 
				
			||||||
      dialogVisible: false,
 | 
					      dialogVisible: false,
 | 
				
			||||||
      showItem: true,
 | 
					      showItem: true,
 | 
				
			||||||
      dialogForm: {
 | 
					      dialogForm: {
 | 
				
			||||||
        deviceType: '', // 设备类型
 | 
					        devType: '', // 设备类型
 | 
				
			||||||
        deviceName: '', // 设备名称
 | 
					        devTypeName: '', // 设备类型名称
 | 
				
			||||||
 | 
					        devName: '', // 设备名称
 | 
				
			||||||
        macId: '', // MACID
 | 
					        macId: '', // MACID
 | 
				
			||||||
        nationalStandardCode: '', // 国标编码
 | 
					        gbCode: '', // 国标编码
 | 
				
			||||||
        puId: '', // puid
 | 
					        puId: '', // puid
 | 
				
			||||||
        isAccess: '0', // 是否接入统一视频
 | 
					        videoIndex: '0', // 视频下标
 | 
				
			||||||
        unifiedVideoName: '', // 统一视频名称
 | 
					        isT: '0', // 是否接入统一视频
 | 
				
			||||||
        unifiedVideoCode: '', // 统一视频编码
 | 
					        tName: '', // 统一视频名称
 | 
				
			||||||
        unifiedVideoFrontEndProtocolCode: '', // 统一视频前端协议编码
 | 
					        tCode: '', // 统一视频编码
 | 
				
			||||||
        unifiedDeviceProtocolCode: '', // 统一设备协议编码
 | 
					        tWbCode: '', // 统一视频前端协议编码
 | 
				
			||||||
 | 
					        tDevCode: '', // 统一设备协议编码
 | 
				
			||||||
        remark: '', // 备注
 | 
					        remark: '', // 备注
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      deviceTypeOpts: [
 | 
					      deviceTypeOpts: [
 | 
				
			||||||
| 
						 | 
					@ -279,34 +262,25 @@ export default {
 | 
				
			||||||
        { label: '设备类型2', value: '2' },
 | 
					        { label: '设备类型2', value: '2' },
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      dialogRules: {
 | 
					      dialogRules: {
 | 
				
			||||||
        deviceType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
 | 
					        devType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
 | 
				
			||||||
        deviceName: [{ required: true, message: '请输入设备名称', trigger: 'blur' }],
 | 
					        devName: [{ required: true, message: '请输入设备名称', trigger: 'blur' }],
 | 
				
			||||||
        nationalStandardCode: [{ required: true, message: '请输入国标编码', trigger: 'blur' }],
 | 
					        gbCode: [{ required: true, message: '请输入国标编码', trigger: 'blur' }],
 | 
				
			||||||
        macId: [{ required: true, message: '请输入MACID', trigger: 'blur' }],
 | 
					        macId: [{ required: true, message: '请输入MACID', trigger: 'blur' }],
 | 
				
			||||||
        puId: [{ required: true, message: '请输入puid', trigger: 'blur' }],
 | 
					        puId: [{ required: true, message: '请输入puid', trigger: 'blur' }],
 | 
				
			||||||
        isAccess: [
 | 
					        // videoIndex 只能输入 number 和 ,
 | 
				
			||||||
 | 
					        videoIndex: [
 | 
				
			||||||
 | 
					          { required: true, message: '请输入视频下标', trigger: 'blur' },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            required: true,
 | 
					            pattern: /^[0-9,]*$/,
 | 
				
			||||||
            message: '请选择是否接入统一视频',
 | 
					            message: '只能输入数字和逗号',
 | 
				
			||||||
            trigger: 'blur',
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        unifiedVideoName: [{ required: true, message: '请输入统一视频名称', trigger: 'blur' }],
 | 
					 | 
				
			||||||
        unifiedVideoCode: [{ required: true, message: '请输入统一视频编码', trigger: 'blur' }],
 | 
					 | 
				
			||||||
        unifiedVideoFrontEndProtocolCode: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            required: true,
 | 
					 | 
				
			||||||
            message: '请输入统一视频前端协议编码',
 | 
					 | 
				
			||||||
            trigger: 'blur',
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        unifiedDeviceProtocolCode: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            required: true,
 | 
					 | 
				
			||||||
            message: '请输入统一设备协议编码',
 | 
					 | 
				
			||||||
            trigger: 'blur',
 | 
					            trigger: 'blur',
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
 | 
					        isT: [{ required: true, message: '请选择是否接入统一视频', trigger: 'blur' }],
 | 
				
			||||||
 | 
					        tName: [{ required: true, message: '请输入统一视频名称', trigger: 'blur' }],
 | 
				
			||||||
 | 
					        tCode: [{ required: true, message: '请输入统一视频编码', trigger: 'blur' }],
 | 
				
			||||||
 | 
					        tWbCode: [{ required: true, message: '请输入统一视频前端协议编码', trigger: 'blur' }],
 | 
				
			||||||
 | 
					        tDevCode: [{ required: true, message: '请输入统一设备协议编码', trigger: 'blur' }],
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -329,17 +303,30 @@ export default {
 | 
				
			||||||
    async getList() {
 | 
					    async getList() {
 | 
				
			||||||
      console.log('列表-查询', this.queryParams)
 | 
					      console.log('列表-查询', this.queryParams)
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        // const params = { ...this.queryParams }
 | 
					        this.tableList = []
 | 
				
			||||||
        // const res = await
 | 
					        const params = { ...this.queryParams }
 | 
				
			||||||
        // console.log('🚀 ~ 获取列表 ~ res:', res)
 | 
					        const res = await getList(params)
 | 
				
			||||||
        // this.tableList = res.rows
 | 
					        console.log('🚀 ~ 获取列表 ~ res:', res)
 | 
				
			||||||
        // this.total = res.total
 | 
					        this.tableList = res.rows
 | 
				
			||||||
 | 
					        this.total = res.total
 | 
				
			||||||
      } catch (error) {
 | 
					      } catch (error) {
 | 
				
			||||||
        console.log('🚀 ~ 获取列表 ~ error:', error)
 | 
					        console.log('🚀 ~ 获取列表 ~ error:', error)
 | 
				
			||||||
        this.tableList = []
 | 
					        this.tableList = []
 | 
				
			||||||
        this.total = 0
 | 
					        this.total = 0
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    // 设备类型
 | 
				
			||||||
 | 
					    async getTypeList() {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        const params = { dictType: 'smart_device_type' }
 | 
				
			||||||
 | 
					        const res = await getTypeList(params)
 | 
				
			||||||
 | 
					        console.log('🚀 ~ 获取设备类型 ~ res:', res)
 | 
				
			||||||
 | 
					        this.deviceTypeOpts = res.data
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.log('🚀 ~ 获取设备类型 ~ error:', error)
 | 
				
			||||||
 | 
					        this.deviceTypeOpts = []
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    // 多选
 | 
					    // 多选
 | 
				
			||||||
    selectionChange(val) {
 | 
					    selectionChange(val) {
 | 
				
			||||||
      console.log('selectionChange', val)
 | 
					      console.log('selectionChange', val)
 | 
				
			||||||
| 
						 | 
					@ -362,30 +349,45 @@ export default {
 | 
				
			||||||
    downloadQrCode() {
 | 
					    downloadQrCode() {
 | 
				
			||||||
      console.log('下载二维码')
 | 
					      console.log('下载二维码')
 | 
				
			||||||
      const a = document.createElement('a') // 创建a标签
 | 
					      const a = document.createElement('a') // 创建a标签
 | 
				
			||||||
      a.download = this.qrData.deviceName // 下载的文件名
 | 
					      a.download = this.qrData.devName // 下载的文件名
 | 
				
			||||||
      a.href = this.$refs.qrCode.$el.src // 下载的路径
 | 
					      a.href = this.$refs.qrCode.$el.src // 下载的路径
 | 
				
			||||||
      a.click()
 | 
					      a.click()
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    // 获取详情
 | 
				
			||||||
 | 
					    async getDetail(id) {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        const res = await getVideoDeviceDetail(id)
 | 
				
			||||||
 | 
					        console.log('🚀 ~ 获取详情 ~ res:', res)
 | 
				
			||||||
 | 
					        this.dialogForm = res.data
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        console.log('🚀 ~ 获取详情 ~ error:', error)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    // 新增
 | 
					    // 新增
 | 
				
			||||||
    handleAdd() {
 | 
					    handleAdd() {
 | 
				
			||||||
 | 
					      this.getTypeList()
 | 
				
			||||||
      console.log('新增')
 | 
					      console.log('新增')
 | 
				
			||||||
      this.dialogTitle = '新增'
 | 
					      this.dialogTitle = '新增'
 | 
				
			||||||
      this.dialogVisible = true
 | 
					      this.dialogVisible = true
 | 
				
			||||||
      this.dialogForm.isAccess = '0'
 | 
					      this.dialogForm.isT = '0'
 | 
				
			||||||
 | 
					      this.isAdd = true
 | 
				
			||||||
      this.showItem = true
 | 
					      this.showItem = true
 | 
				
			||||||
      this.$nextTick(() => {
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
        this.$refs.dialogForm.clearValidate()
 | 
					        this.$refs.dialogForm.resetFields()
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 编辑
 | 
					    // 编辑
 | 
				
			||||||
    handleEdit(row) {
 | 
					    handleEdit(row) {
 | 
				
			||||||
 | 
					      this.getTypeList()
 | 
				
			||||||
      console.log('编辑', row)
 | 
					      console.log('编辑', row)
 | 
				
			||||||
      this.dialogTitle = '编辑'
 | 
					      this.dialogTitle = '编辑'
 | 
				
			||||||
 | 
					      this.isAdd = false
 | 
				
			||||||
      this.dialogVisible = true
 | 
					      this.dialogVisible = true
 | 
				
			||||||
      this.dialogForm.isAccess = row.isAccess
 | 
					      this.dialogForm.isT = row.isT
 | 
				
			||||||
      this.showItem = true
 | 
					      this.showItem = true
 | 
				
			||||||
      this.$nextTick(() => {
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
        this.$refs.dialogForm.clearValidate()
 | 
					        this.$refs.dialogForm.clearValidate()
 | 
				
			||||||
 | 
					        this.getDetail(row.id)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 监控调试
 | 
					    // 监控调试
 | 
				
			||||||
| 
						 | 
					@ -398,7 +400,7 @@ export default {
 | 
				
			||||||
      console.log('查看配置', row)
 | 
					      console.log('查看配置', row)
 | 
				
			||||||
      this.dialogTitle = '统一平台配置'
 | 
					      this.dialogTitle = '统一平台配置'
 | 
				
			||||||
      this.dialogVisible = true
 | 
					      this.dialogVisible = true
 | 
				
			||||||
      this.dialogForm.isAccess = row.isAccess
 | 
					      this.dialogForm = row
 | 
				
			||||||
      this.showItem = false
 | 
					      this.showItem = false
 | 
				
			||||||
      this.$nextTick(() => {
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
        this.$refs.dialogForm.clearValidate()
 | 
					        this.$refs.dialogForm.clearValidate()
 | 
				
			||||||
| 
						 | 
					@ -412,8 +414,9 @@ export default {
 | 
				
			||||||
        cancelButtonText: '取消',
 | 
					        cancelButtonText: '取消',
 | 
				
			||||||
        type: 'warning',
 | 
					        type: 'warning',
 | 
				
			||||||
      }).then(async () => {
 | 
					      }).then(async () => {
 | 
				
			||||||
        // const params = {  }
 | 
					        const res = await delVideoDevice(row.id)
 | 
				
			||||||
        // const res = await
 | 
					        console.log('🚀 ~ 删除 ~ res:', res)
 | 
				
			||||||
 | 
					        this.getList()
 | 
				
			||||||
        this.$message({
 | 
					        this.$message({
 | 
				
			||||||
          type: 'success',
 | 
					          type: 'success',
 | 
				
			||||||
          message: '删除成功!',
 | 
					          message: '删除成功!',
 | 
				
			||||||
| 
						 | 
					@ -424,10 +427,10 @@ export default {
 | 
				
			||||||
    handleExport() {
 | 
					    handleExport() {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        let fileName = `数据_${new Date().getTime()}.xLsx`
 | 
					        let fileName = `数据_${new Date().getTime()}.xLsx`
 | 
				
			||||||
        let url = ''
 | 
					        let url = '/smart-site/video_equipment/export'
 | 
				
			||||||
        const params = { ...this.queryParams }
 | 
					        const params = { ...this.queryParams }
 | 
				
			||||||
        console.log('🚀 ~ 导出 ~ params:', params)
 | 
					        console.log('🚀 ~ 导出 ~ params:', params)
 | 
				
			||||||
        // this.derive(url, params, fileName)
 | 
					        this.derive(url, params, fileName)
 | 
				
			||||||
      } catch (error) {
 | 
					      } catch (error) {
 | 
				
			||||||
        console.log('导出数据失败', error)
 | 
					        console.log('导出数据失败', error)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -435,13 +438,31 @@ export default {
 | 
				
			||||||
    // 弹框确认
 | 
					    // 弹框确认
 | 
				
			||||||
    dialogConfirm() {
 | 
					    dialogConfirm() {
 | 
				
			||||||
      console.log('dialogConfirm')
 | 
					      console.log('dialogConfirm')
 | 
				
			||||||
      this.$refs.dialogForm.validate((valid) => {
 | 
					      this.$refs.dialogForm.validate(async (valid) => {
 | 
				
			||||||
        if (valid) {
 | 
					        if (valid) {
 | 
				
			||||||
          this.dialogVisible = false
 | 
					          if (this.dialogForm.isT == '0') {
 | 
				
			||||||
 | 
					            this.dialogForm.tName = ''
 | 
				
			||||||
 | 
					            this.dialogForm.tCode = ''
 | 
				
			||||||
 | 
					            this.dialogForm.tWbCode = ''
 | 
				
			||||||
 | 
					            this.dialogForm.tDevCode = ''
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          const params = { ...this.dialogForm }
 | 
				
			||||||
 | 
					          console.log('🚀 ~ this.$refs.dialogForm.validate ~ params:', params)
 | 
				
			||||||
 | 
					          let res = {}
 | 
				
			||||||
 | 
					          if (this.isAdd) {
 | 
				
			||||||
 | 
					            // 新增
 | 
				
			||||||
 | 
					            res = await addVideoDevice(params)
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            // 编辑
 | 
				
			||||||
 | 
					            res = await editVideoDevice(params)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          console.log('🚀 ~ 弹框确认 ~ res:', res)
 | 
				
			||||||
          this.$message({
 | 
					          this.$message({
 | 
				
			||||||
            type: 'success',
 | 
					            type: 'success',
 | 
				
			||||||
            message: '操作成功!',
 | 
					            message: '操作成功!',
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
 | 
					          this.getList()
 | 
				
			||||||
 | 
					          this.dialogVisible = false
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          return false
 | 
					          return false
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue