Browse Source

0619需求更改

master
xuhuajiao 8 months ago
parent
commit
253130bcfa
  1. 2
      src/api/storeManage/deviceManage/device.js
  2. 4
      src/views/archivesManage/caseManage/caseList/index.vue
  3. 43
      src/views/archivesManage/lendManage/components/lendArchivesList.vue
  4. 154
      src/views/archivesManage/lendManage/components/video.vue
  5. 2
      src/views/components/WarehouseWarning.vue
  6. 27
      src/views/dashboard/PanelGroup.vue
  7. 6
      src/views/environmentalScreen/index.vue
  8. 8
      src/views/home.vue
  9. 23
      src/views/storeManage/deviceManage/module/deviceDetail.vue
  10. 2
      src/views/storeManage/listenManage/index.vue
  11. 19
      src/views/storeManage/listenManage/listenConfig/index.vue
  12. 154
      src/views/storeManage/taskManage/index.vue
  13. 7
      src/views/storeManage/warehouse3D/archivesStorage/index.vue
  14. 2
      src/views/storeManage/warehouse3D/destroyedFileRoom/index.vue
  15. 6
      src/views/storeManage/warehouse3D/index.vue
  16. 2
      src/views/storeManage/warehouse3D/infoRoom/index.vue
  17. 6
      src/views/system/logManage/deviceLog/index.vue
  18. 24
      src/views/system/notifyManage/index.vue
  19. 2
      src/views/system/role/index.vue
  20. 30
      src/views/system/user/messageCenter/index.vue

2
src/api/storeManage/deviceManage/device.js

@ -76,6 +76,8 @@ function getUrl(data, optTYpe) {
url = 'api/insidedevices/'
} else if (data.deviceTypeId.name === '通道门' || data.deviceTypeId.name === '手持式RFID读写器') {
url = 'api/outsidedevices/'
} else if (data.deviceTypeId.name === '条码打印机') {
url = 'api/device/'
}
if (optTYpe === 'add') {
url += 'create'

4
src/views/archivesManage/caseManage/caseList/index.vue

@ -245,6 +245,10 @@ export default {
{
label: '条形码',
value: 'barcode'
},
{
label: '地址码',
value: 'folderLocation'
}
]
}

43
src/views/archivesManage/lendManage/components/lendArchivesList.vue

@ -67,6 +67,23 @@
</div>
</div>
</el-dialog>
<!-- 是否查看视频监控 -->
<el-dialog title="提示" :visible.sync="videoTipVisible" :close-on-click-modal="false" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>是否需要查看相关视频监控</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleLookVideo">确定</el-button>
</div>
</div>
</el-dialog>
<!-- 摄像头视频 -->
<Video ref="camera" :dialog-open.sync="open" :camera-data="cameraData" />
</div>
</template>
@ -74,8 +91,11 @@
import { FetchInitArchivesByOrderNo, FetchBorrowException } from '@/api/archivesManage/lendManage'
import { lendingCrud } from '../mixins/lending'
import CallExternal from '@/api/storeManage/deviceManage/device'
import Video from './video'
import displayConfigApi from '@/api/storeManage/displayConfig'
export default {
name: 'LendArchivesList',
components: { Video },
mixins: [lendingCrud],
props: {
archivesOrderNum: {
@ -91,7 +111,11 @@ export default {
tableData: [],
tableLoading: false,
exceptionVisible: false,
deviceData: null
deviceData: null,
videoTipVisible: false,
camConfigData: [],
cameraData: [],
open: false
}
},
watch: {
@ -102,6 +126,11 @@ export default {
}
},
created() {
displayConfigApi.list({ storeroomId: 'D6490DA3D4261E8C26D0E3' }).then((data) => {
if (data) {
this.camConfigData = data
}
})
},
mounted() {
this.getArchivesTable()
@ -150,6 +179,7 @@ export default {
},
handleClose(done) {
this.exceptionVisible = false
this.videoTipVisible = false
done()
},
//
@ -168,6 +198,7 @@ export default {
},
//
openCol(data) {
this.videoTipVisible = true
const loactionArray = data.split(' ')
const location = data.split(' ')[loactionArray.length - 1]
const pattern = /(\d+)区(\d+)列(\d+)节(\d+)层/
@ -207,6 +238,16 @@ export default {
console.log(error)
this.$message.error('连接失败')
})
},
handleLookVideo() {
this.videoTipVisible = false
this.cameraData = this.camConfigData.filter((item) => { return item.divPosition.includes('CAM') })
this.open = true
this.$nextTick(() => {
this.$refs.camera.camConfig = this.cameraData[0]
this.$refs.camera.videoIndex = 0
this.$refs.camera.play()
})
}
}
}

154
src/views/archivesManage/lendManage/components/video.vue

@ -0,0 +1,154 @@
<template>
<el-dialog :close-on-click-modal="false" :visible.sync="openVideoVisible" :before-close="handleClose" title="实时监控" width="1068px">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div style="flex: 1; padding: 20px; background-color:#031435;">
<jsmpeg-player :url="wsUrl" :with-toolbar="false" />
</div>
<div class="video-list">
<h4>档案室</h4>
<span v-for="(item,index) in cameraData" :key="index" :class="[{'active': index === videoIndex}]" @click="changeVideo(index)">{{ item.deviceInfo.deviceName }}</span>
</div>
</div>
</el-dialog>
</template>
<script>
// import JSMpeg from '@/components/jsmpeg'
import JsmpegPlayer from '@/components/jsmpeg-player/jsmpeg-player.vue'
import axios from 'axios'
import qs from 'qs'
export default {
components: { JsmpegPlayer },
props: {
dialogOpen: {
type: Boolean,
default: false
},
cameraData: {
type: Array,
default: () => { return [] }
}
},
data() {
return {
videoIndex: 0,
videoTitle: '',
camConfig: null,
player: null,
noSignal: true,
wsUrl: ''
}
},
computed: {
rtspUrl: function() {
return 'rtsp://' + this.camConfig.deviceInfo.deviceAccount + ':' + this.camConfig.deviceInfo.devicePassword + '@' + this.camConfig.deviceInfo.deviceIp + ':554/' + this.camConfig.deviceInfo.videoRoute + '/1'
},
openVideoVisible: {
get() {
return this.dialogOpen
},
set(value) {
this.$emit('update:dialogOpen', value)
}
}
},
methods: {
changeVideo(index) {
this.videoIndex = index
this.camConfig = this.cameraData[index]
this.play()
},
handleClose(done) {
this.openVideoVisible = false
// this.myVideo = document.getElementById('canvas')
// this.myVideo.pause()
// $.post('http://127.0.0.1:3000/cameras/close/', { rtspUrl: $('#rtsp').val() }, function(result) {
const data = { rtspUrl: this.rtspUrl }
// console.log(process.env.VUE_APP_CAMERA_API)
const Uri = 'http://' + process.env.VUE_APP_CAMERA_API + '/cameras/close/'
axios.post(Uri, qs.stringify(data),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}
).then(res => {
this.wsUrl = ''
done()
})
},
play() {
const data = { rtspUrl: this.rtspUrl, size: '1024*768', port: process.env.VUE_APP_CAMERA_API.split(':')[1], videoRoute: this.camConfig.deviceInfo.videoRoute }
const Uri = 'http://' + process.env.VUE_APP_CAMERA_API + '/cameras/'
axios.post(Uri, qs.stringify(data),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}
).then(res => {
// res.data.port
const ip = process.env.VUE_APP_CAMERA_API.split(':')[0]
this.wsUrl = 'ws://' + ip + ':' + res.data.port
// var canvas = document.getElementById('canvas')
// const opt = {
// contianer: this.$refs['canvas-wrap'],
// poster: '0.jpg',
// onSourceEstablished: (source) => {
// console.log('onSourceEstablished')
// // this.flags.noSignal = false
// this.noSignal = false
// // clearTimeout(this.timers.noSignal)
// // this.timers.noSignal = null
// this.$emit('source-established', source)
// }
// }
// this.player = new JSMpeg.Player(this.wsUrl, opt)
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-dialog {
display: flex;
justify-content: center;
align-items: center;
.el-dialog__body{
padding: 0;
}
.setting-dialog{
display: flex;
justify-content: space-between;
min-height: 300px;
}
}
.video-list{
width: 200px;
padding: 20px;
background-color: #021941;
h4{
font-size: 18px;
font-weight: bold;
color: #339CFF;
line-height: 40px;
}
span{
display: block;
color: #339CFF;
line-height: 40px;
cursor: pointer;
&:hover{
color: #fff;
background-image: linear-gradient(90deg, rgba(59, 160, 255, 0) 0%, rgba(42,112,177,0.3) 43%, rgba(51, 156, 255, 0) 100%);;
}
&.active{
color: #fff;
background-image: linear-gradient(90deg, rgba(59, 160, 255, 0) 0%, rgba(42,112,177,0.3) 43%, rgba(51, 156, 255, 0) 100%);;
}
}
}
</style>

2
src/views/components/WarehouseWarning.vue

@ -4,7 +4,7 @@
<span class="left-bottom-line" />
<h3 class=" table-title" @click="toPage">
<p class="title-arrow" style="cursor: pointer;">
<svg-icon icon-class="alerm" class-name="warehouse-svg" />报警记录
<svg-icon icon-class="alerm" class-name="warehouse-svg" />环控实时报警
</p>
</h3>
<!--表格渲染-->

27
src/views/dashboard/PanelGroup.vue

@ -75,11 +75,11 @@
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table v-loading="tableLoading" :data="tableDeviceData" height="520px">
<el-table v-loading="tableLoading" :data="tableDeviceData" style="width: 100%" height="520px">
<el-table-column type="index" label="序号" align="center" width="60" />
<el-table-column align="center" prop="supplierId.name" label="品牌" width="100" show-overflow-tooltip />
<el-table-column prop="deviceName" label="设备名称" show-overflow-tooltip />
<el-table-column label="设备ID" show-overflow-tooltip>
<el-table-column prop="deviceName" label="设备名称" min-width="200" show-overflow-tooltip />
<el-table-column label="设备ID" min-width="140" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="scope.row.deviceId"> {{ scope.row.deviceId }} </span>
<span v-else></span>
@ -91,12 +91,27 @@
<span v-else></span>
</template>
</el-table-column>
<el-table-column align="center" label="端口" width="90">
<el-table-column align="center" label="端口" min-width="90">
<template slot-scope="scope">
<span v-if="scope.row.devicePort"> {{ scope.row.devicePort }} </span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column v-if="deviceType==='off'" align="center" label="状态" min-width="120">
<template slot-scope="scope">
<span v-if="scope.row.deviceId !== 'PDA001'">设备连接超时</span>
<span v-else>设备常离线</span>
</template>
</el-table-column>
<el-table-column v-if="deviceType==='off'" label="解决办法或说明" min-width="300">
<template slot-scope="scope">
<span v-if="scope.row.deviceId !== 'PDA001'">
1.请检查网络是否连通<br>
2.请检查设备是否正常开启<br>
3.以上2种情况都不存在请重启设备</span>
<span v-else>该设备采用离线工作模式无需检测</span>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
@ -127,7 +142,8 @@ export default {
deviveTitle: '在线设备',
deviceVisible: false,
tableLoading: false,
tableDeviceData: []
tableDeviceData: [],
deviceType: 'on'
}
},
computed: {
@ -190,6 +206,7 @@ export default {
})
},
getDeviceDetail(type) {
this.deviceType = type
this.deviceVisible = true
this.tableDeviceData = []
if (type === 'on') {

6
src/views/environmentalScreen/index.vue

@ -20,7 +20,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.DAK_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.DAK_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.DAK_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="(bannerIndex === 0 || bannerIndex === 1 || bannerIndex === 2 || bannerIndex === 3) && topDisplayData.DAK_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.DAK_DIV_TOP_005.curstatus > 0 }" class="msg-pm">
@ -49,7 +49,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.XXW_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.XXW_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.XXW_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="(bannerIndex === 4 || bannerIndex === 5) && topDisplayData.XXW_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.XXW_DIV_TOP_005.curstatus > 0 }" class="msg-pm">
@ -78,7 +78,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.DXW_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.DXW_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.DXW_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="bannerIndex === 6 && topDisplayData.DXW_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.DXW_DIV_TOP_005.curstatus > 0 }" class="msg-pm">

8
src/views/home.vue

@ -60,7 +60,7 @@
<span>{{ topDisplayData.DAK_DIV_TOP_006.curValue }}</span>
</li>
<li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_004.curstatus > 0 }">
<p>VOC</p>
<p>TVOC</p>
<span>{{ topDisplayData.DAK_DIV_TOP_004.curValue }}</span>
</li>
</ul>
@ -121,7 +121,7 @@
<span>{{ topDisplayData.XXW_DIV_TOP_006.curValue }}</span>
</li>
<li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_004.curstatus > 0 }">
<p>VOC</p>
<p>TVOC</p>
<span>{{ topDisplayData.XXW_DIV_TOP_004.curValue }}</span>
</li>
</ul>
@ -150,7 +150,7 @@
<span>{{ topDisplayData.DXW_DIV_TOP_006.curValue }}</span>
</li>
<li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_004.curstatus > 0 }">
<p>VOC</p>
<p>TVOC</p>
<span>{{ topDisplayData.DXW_DIV_TOP_004.curValue }}</span>
</li>
</ul>
@ -569,8 +569,6 @@ export default {
},
getRealTimeData() {
if (this.allDeviceIds.length > 0) {
console.log('this.allDeviceIds', this.allDeviceIds)
console.log('this.displayConfigData', this.displayConfigData)
thirdApi.getRealTimeData({ ids: this.allDeviceIds, url: this.url }).then((data) => {
// this.oaoMessage.splice(0, this.oaoMessage.length)
this.displayConfigData.forEach(element => {

23
src/views/storeManage/deviceManage/module/deviceDetail.vue

@ -22,7 +22,7 @@
</crudOperation>
</div>
<!--表单组件-->
<el-dialog ref="dialog" append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="addTypeStr" @open="open">
<el-dialog ref="dialog" class="deviceForm" append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="addTypeStr" @open="open">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
@ -101,6 +101,9 @@
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="下发通知" prop="isNotice" style="display: block;">
<el-checkbox v-model="form.isNotice">通知</el-checkbox>
</el-form-item>
<el-form-item label="维保信息" prop="maintenanceInfo">
<el-input v-model="form.maintenanceInfo" type="textarea" style="width: 370px;" :rows="6" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">保存</el-button>
@ -164,6 +167,7 @@
<el-table-column align="center" prop="storeroomId.name" label="所属区域" width="100" show-overflow-tooltip />
<el-table-column align="center" label="设备状态" width="100">
<template slot-scope="scope">
<span v-if="scope.row.deviceState === null" class="el-icon-loading" />
<span v-else :class="{ 'spk-a': scope.row.deviceState === 1, 'off-line': scope.row.deviceState !== 1 }" />
</template>
@ -216,7 +220,7 @@ import CRUD, { presenter, header, form } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import bindParams from './bindParams'
const defaultForm = { supplier: null, id: null, deviceId: null, deviceName: null, deviceIp: null, devicePort: null, rowNo: null, areaNo: null, sumColumnNo: null, firstColumnNo: null, partNo: null, storeroomCode: null, columnRowNo: null, deviceAccount: null, devicePassword: null, cupboardNo: null, videoRoute: null, isLinkage: { stateType: 1, lend: false, borrow: false, inBound: false, outBound: false }, isCallback: { stateType: 2, lend: false, borrow: false, inBound: false, outBound: false }, isNotice: false }
const defaultForm = { supplier: null, id: null, deviceId: null, deviceName: null, deviceIp: null, devicePort: null, rowNo: null, areaNo: null, sumColumnNo: null, firstColumnNo: null, partNo: null, storeroomCode: null, columnRowNo: null, deviceAccount: null, devicePassword: null, cupboardNo: null, videoRoute: null, isLinkage: { stateType: 1, lend: false, borrow: false, inBound: false, outBound: false }, isCallback: { stateType: 2, lend: false, borrow: false, inBound: false, outBound: false }, isNotice: false, maintenanceInfo: null }
export default {
components: { crudOperation, pagination, bindParams },
@ -440,11 +444,11 @@ export default {
crud.data.forEach(element => {
element.isLinkage = { stateType: 1, lend: null, borrow: null, inBound: null, outBound: null }
element.isCallback = { stateType: 2, lend: null, borrow: null, inBound: null, outBound: null }
element.deviceState = null
// element.deviceState = null
// 线
// 1. 7305DE3D273B0CAC079538
// 2. 65D1886B0F864291766421
// 3. 6A48C971F5C9ECA358A2DA
// 线
// 1.RFID 3B85FA21FDAFBB618B5D40
// deviceTypeId.id
@ -459,11 +463,14 @@ export default {
element.deviceState = 0
} else if (element.deviceTypeId.id === 'DD656054BE3D1DF1E2F1FC') {
//
element.deviceState = null
this.getDeviceState(element)
} else if (element.deviceTypeId.id === 'E2767FEACA9CE0E3B16B89') {
// RFID
element.deviceState = null
this.getDeviceState(element)
} else if (element.deviceTypeId.id === 'E58C8D7C896BCB9A408A78' || element.deviceTypeId.id === '7882487E0C15304A3758AF' || element.deviceTypeId.id === '250AE644EC43E4EC954A81') {
element.deviceState = null
selectedElementId = element.id
}
})
@ -628,4 +635,12 @@ export default {
box-shadow: 0px 0px 6px 1px #F65163;
vertical-align: middle;
}
.deviceForm{
::v-deep .el-dialog .el-dialog__body{
max-height: 680px !important;
overflow: hidden;
overflow-y: scroll;
}
}
</style>

2
src/views/storeManage/listenManage/index.vue

@ -6,7 +6,7 @@
<span class="right-bottom-line" />
<ul class="tab-nav">
<li :class="{ 'active-tab-nav': activeIndex == 0 }" @click="changeActiveTab(0)">视频监控<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">监控配置<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">监控任务<i /></li>
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>

19
src/views/storeManage/listenManage/listenConfig/index.vue

@ -13,6 +13,7 @@
</el-input>
<date-range-picker v-model="queryTime" type="datetimerange" class="date-item el-date-range-picker" />
<rrOperation />
<div style="position: absolute; right: 20px; top: 30px; font-weight: bold; color: #fff;font-size: 12px; text-align: right; cursor: pointer;" @click="tipContentVisible = true"><i style="font-size:14px; color:#f65163; margin-right: 6px;" class="el-icon-warning" />监控任务说明</div>
</div>
<!-- :cell-class-name="cell" -->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" height="calc(100vh - 356px)" @row-click="clickRowHandler" @row-dblclick="handleDbClick" @selection-change="selectionChangeHandler">
@ -47,6 +48,21 @@
</div>
</div>
</el-dialog>
<!-- 说明 -->
<el-dialog title="监控任务说明" :visible.sync="tipContentVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<span style="font-weight:bold;color: #f65163;">通道门报警</span> <span style="font-weight:bold;color: #fd8042;">密集架开架</span> 监控任务会自动根据通道门或密集架绑定的监控设备保存当时的视频监控记录用户可在 监控管理 - 视频监控 中查询并下载相关视频文件若下载的视频文件无法正常播放请在硬盘录像机上重新获取数据
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="tipContentVisible = false">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
@ -88,7 +104,8 @@ export default {
{ value: 1, label: '所属区域' },
{ value: 2, label: '设备' }
],
queryTime: null
queryTime: null,
tipContentVisible: false
}
},
methods: {

154
src/views/storeManage/taskManage/index.vue

@ -0,0 +1,154 @@
<template>
<div>
<div class="head-container">
<crudOperation :permission="permission" />
<div class="head-search" style="margin-left: 40px;">
<!-- 搜索 -->
<el-select v-model="query.enabled" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai-fanbai" />
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select>
<el-input v-model="query.blurry" size="small" clearable placeholder="输入任务名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation />
</div>
</div>
<div class="app-container container-wrap" style="min-height: calc(100vh - 266px)">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" height="calc(100vh - 300px)" @row-click="clickRowHandler" @row-dblclick="handleDbClick" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" align="center" />
<el-table-column align="center" prop="username" label="任务名称" />
<el-table-column align="center" prop="username" label="任务类型" />
<el-table-column align="center" prop="username" label="目标设备" />
<el-table-column align="center" prop="username" label="计划" />
<el-table-column prop="createTime" label="下次运行">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="最后运行">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="状态" prop="enabled">
<template slot-scope="scope">
<el-switch v-model="scope.row.enabled" active-color="#409EFF" inactive-color="#F56C6C" @change="changeEnabled(scope.row, scope.row.enabled)" />
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
<!-- form -->
<el-dialog :title="formTitle" :visible.sync="formVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
111
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text">取消</el-button>
<el-button type="primary" @click.native="formVisible = false">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import crudRoles from '@/api/system/role'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { id: null, name: null, depts: [], description: null, dataScope: '全部', level: 3 }
export default {
name: 'TaskManage',
components: { rrOperation, crudOperation, pagination },
cruds() {
return CRUD({ title: '计划任务管理', url: 'api/roles', crudMethod: crudRoles,
optShow: {
add: true,
edit: true,
del: true,
download: true,
group: false
}
})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
formVisible: false,
formTitle: '新增任务',
enabledTypeOptions: [
{ key: 'true', display_name: '激活' },
{ key: 'false', display_name: '锁定' }
],
permission: {
add: ['admin', 'task:add'],
edit: ['admin', 'task:edit'],
del: ['admin', 'task:del']
}
}
},
created() {
},
methods: {
//
[CRUD.HOOK.afterToCU](crud, form) {
},
//
[CRUD.HOOK.beforeToAdd]() {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
return true
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
//
handleDbClick(row) {
this.$refs.DetailsDom.detailsVisible = true
},
//
changeEnabled(data, val) {
this.$confirm('此操作将 "' + this.dict.label.user_status[val] + '" ' + data.username + ', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// crudRoles.edit(data).then(res => {
// this.crud.notify(this.dict.label.user_status[val] + '', CRUD.NOTIFICATION_TYPE.SUCCESS)
// }).catch(() => {
// data.enabled = !data.enabled
// })
}).catch(() => {
data.enabled = !data.enabled
})
},
handleClose() {
this.formVisible = false
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .head-container{
display: flex;
padding-bottom: 0;
}
.head-search{
margin-bottom:0 ;
}
</style>

7
src/views/storeManage/warehouse3D/archivesStorage/index.vue

@ -30,7 +30,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.DAK_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.DAK_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.DAK_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="topDisplayData.DAK_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.DAK_DIV_TOP_005.curstatus > 0 }" class="msg-pm">
@ -170,6 +170,8 @@ export default {
}
})
this.displayConfigData = this.allDisplayConfigData.filter((item) => { return item.isDisplay && item.bindState && item.deviceInfo && (item.divPosition.includes('OAO') || item.divPosition.includes('TOP')) })
console.log('this.displayConfigData', this.displayConfigData)
await this.getRealTimeData()
},
mounted() {
@ -238,7 +240,7 @@ export default {
//
handleHide(deviceId) {
// true false
window.frames['iframeMap'].setYangGanCanshow(deviceId, false)
window.frames['iframeMap'].setYangGanCanshow(deviceId, true)
},
//
rowBgColor({ row, rowIndex }) {
@ -280,7 +282,6 @@ export default {
return item.property_id === siduParamId && item.device_id === element.deviceInfo.deviceId
})
}
console.log(wendu?.curstatus, sidu?.curstatus)
this.oaoMessage.push({
id: element.divPosition,
wendu: (wendu?.curvalue) ? (Math.round(wendu?.curvalue)) : '-',

2
src/views/storeManage/warehouse3D/destroyedFileRoom/index.vue

@ -29,7 +29,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.DXW_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.DXW_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.DXW_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="topDisplayData.DXW_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.DXW_DIV_TOP_005.curstatus > 0 }" class="msg-pm">

6
src/views/storeManage/warehouse3D/index.vue

@ -104,7 +104,7 @@ export default {
this.floorIndex = this.$route.params.floorId
this.activeIndex = this.$route.params.roomId
}
displayConfigApi.list({ storeroomId: '' }).then((data) => {
displayConfigApi.list({ storeroomId: '', isQueryAll: 1 }).then((data) => {
if (data) {
this.camConfigData = data
}
@ -127,11 +127,13 @@ export default {
} else if (data === '待销文件室') {
_this.activeIndex = 6
}
console.log('this.camConfigData', this.camConfigData)
//
if (data.includes('CAM')) {
const camConfig = this.camConfigData.find((x) => { return x.divPosition === data })
console.log(1, camConfig)
if (camConfig && camConfig.isDisplay && camConfig.bindState) {
// console.log(2, camConfig)
console.log(2, camConfig)
// // ToDo....
this.open = true
this.$nextTick(() => {

2
src/views/storeManage/warehouse3D/infoRoom/index.vue

@ -29,7 +29,7 @@
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ topDisplayData.XXW_DIV_TOP_004.curValue }}</span>
<p class="msg-list-unit">VOC {{ topDisplayData.XXW_DIV_TOP_004.unit }}</p>
<p class="msg-list-unit">TVOC {{ topDisplayData.XXW_DIV_TOP_004.unit }}</p>
</div>
</li>
<li v-show="topDisplayData.XXW_DIV_TOP_005.show" :class="{ 'li-warn': topDisplayData.XXW_DIV_TOP_005.curstatus > 0 }" class="msg-pm">

6
src/views/system/logManage/deviceLog/index.vue

@ -38,6 +38,12 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column prop="storeCode" label="库房" align="center" min-width="150" />
<el-table-column prop="QuNo" label="区号" align="center" width="150" />
<el-table-column prop="temperature" label="温度" align="center" />
<el-table-column prop="humidity" label="湿度" align="center" />
<el-table-column prop="co2" label="二氧化碳" align="center" />
<el-table-column prop="pm25" label="PM2.5" align="center" />
<el-table-column prop="pm10" label="PM10" align="center" />
<el-table-column prop="tvoc" label="TVOC" align="center" />
<el-table-column prop="usLevel" label="状态" align="center" min-width="60">
<template slot-scope="scope">
<span v-if="scope.row.usLevel===0" class="clear" style="width:56px">操作</span>

24
src/views/system/notifyManage/index.vue

@ -258,15 +258,21 @@ export default {
async getDev() {
await getAllDev().then(res => {
const arr0 = [{ value: 0, label: '全部设备' }]
const arr = res.map(item => {
const val = item.id
const lab = item.deviceName
const obj = {
value: val,
label: lab
}
return obj
})
// const arr = res.map(item => {
// const val = item.id
// const lab = item.deviceName
// const obj = {
// value: val,
// label: lab
// }
// return obj
// })
const arr = res.filter(item => item.deviceTypeId.name === '密集架')
.map(item => ({
value: item.id,
label: item.deviceName
}))
this.devOptions = arr0.concat(arr)
})
},

2
src/views/system/role/index.vue

@ -93,7 +93,7 @@
<span class="left-bottom-line" />
<div slot="header" class="clearfix">
<el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top">
<span class="role-span">菜单分配</span>
<span class="role-span">权限分配</span>
</el-tooltip>
<el-button
v-permission="['admin','roles:edit']"

30
src/views/system/user/messageCenter/index.vue

@ -5,6 +5,10 @@
<el-button class="iconfont icon-biaojiyidu-fanbai" :disabled="!(selections.length)" size="mini" @click="handleRead">标记已读</el-button>
<el-button class="iconfont icon-biaojiyidu-fanbai" size="mini" @click="handleAllRead">全部标记已读</el-button>
<date-range-picker v-model="query.createTime" class="date-item" />
<el-select v-model="query.isRead" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="getTableData">
<i slot="prefix" class="iconfont icon-zhuangtai-fanbai" />
<el-option v-for="item in newTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-button icon="el-icon-search" size="mini" style="background:#3A99FD;margin-left: -10px;" @click="getTableData">搜索</el-button>
</div>
<el-table
@ -19,6 +23,12 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="isRead" label="状态" width="100" align="center">
<template slot-scope="scope">
<span v-if="!scope.row.isRead"><el-tag effect="dark">未读</el-tag></span>
<span v-else>已读</span>
</template>
</el-table-column>
<el-table-column prop="noticeContent" :show-overflow-tooltip="true" label="通知内容" min-width="300" align="center" />
<el-table-column prop="noticeType" label="消息类型" align="center" min-width="150">
<template slot-scope="scope">
@ -77,7 +87,8 @@ export default {
tableData: [],
selections: [],
query: {
createTime: []
createTime: [],
isRead: null
},
page: {
total: 0,
@ -85,7 +96,21 @@ export default {
page: 1
},
isLoading: false,
delVisible: false
delVisible: false,
newTypeOptions: [
{
label: '全部',
value: null
},
{
label: '已读',
value: true
},
{
label: '未读',
value: false
}
]
}
},
created() {
@ -110,6 +135,7 @@ export default {
page: this.page.page - 1,
size: this.page.size,
createTime: this.query.createTime,
isRead: this.query.isRead,
sort: 'createTime,desc'
}
return params

Loading…
Cancel
Save