Browse Source

门禁日志/通道门日志/3D页面

master
xuhuajiao 2 years ago
parent
commit
8c7b3ed2ef
  1. 10
      src/api/home/accessDoor/accessDoor.js
  2. 136
      src/views/components/AccessDoor.vue
  3. 15
      src/views/components/SecurityDoor.vue
  4. 6
      src/views/storeManage/warehouse3D/archivesStorage/index.vue
  5. 2
      src/views/storeManage/warehouse3D/destroyedFileRoom/index.vue
  6. 5
      src/views/storeManage/warehouse3D/index.vue
  7. 2
      src/views/storeManage/warehouse3D/infoRoom/index.vue
  8. 158
      src/views/system/logManage/accessDoorLog/index.vue
  9. 35
      src/views/system/logManage/doorLog/index.vue
  10. 10
      src/views/system/logManage/index.vue

10
src/api/home/accessDoor/accessDoor.js

@ -0,0 +1,10 @@
import request from '@/utils/request'
export function accessDoor(params) {
return request({
url: 'api/securitydoor/initSecurityDoorLog',
method: 'get',
params
})
}
export default { accessDoor }

136
src/views/components/AccessDoor.vue

@ -0,0 +1,136 @@
<template>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">
<svg-icon icon-class="menjin" class-name="warehouse-svg" />通道门记录
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe>
<el-table-column prop="createTime" label="时间" align="center" width="100">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="位置" align="center" width="120">
<template slot-scope="scope">
<div>{{ scope.row.deviceName }}</div>
</template>
</el-table-column>
<el-table-column prop="alarmMsg" label="警情" align="center" />
</el-table>
</div>
</template>
<script>
import { accessDoor } from '@/api/home/accessDoor/accessDoor'
export default {
name: 'AccessDoor',
props: {
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '100%'
}
},
data() {
return {
tableData: [], //
scrollTimer: null,
getDataTimer: null
}
},
watch: {
// `tableData`
tableData: function(newData, oldData) {
this.tableRefScroll()
}
},
created() {
this.getAccessdoor()
},
destroyed() {
clearInterval(this.scrollTimer)
this.scrollTimer = null
},
methods: {
//
rowBgColor({ row, rowIndex }) {
if (rowIndex % 2 === 1) {
return 'light-blue'
} else {
return ''
}
},
// table
tableRefScroll() {
clearInterval(this.scrollTimer) //
const table = this.$refs.table // DOM
this.wrapperHeight = table.$el.offsetHeight - 30
//
this.displayNum = Math.floor(this.wrapperHeight / 40)
if (this.tableData.length > this.displayNum) {
const bodyWrapper = table.bodyWrapper // div
this.addTableRefScroll(bodyWrapper)
//
bodyWrapper.onmouseover = () => {
clearInterval(this.scrollTimer)
}
//
bodyWrapper.onmouseout = () => {
this.addTableRefScroll(bodyWrapper)
}
} else {
this.scrollTimer = setInterval(() => {
this.getAccessdoor()
}, 1000 * 3 * this.tableData.length)
}
},
addTableRefScroll(bodyWrapper) {
// let scrollTop = bodyWrapper.scrollTop
if (this.displayNum && this.displayNum > 0) {
this.scrollTimer = setInterval(() => {
// scrollTop = bodyWrapper.scrollTop
if (bodyWrapper.scrollTop + this.wrapperHeight >= this.tableData.length * 40) {
bodyWrapper.scrollTop = 0
this.getAccessdoor()
} else {
bodyWrapper.scrollTop += this.displayNum * 40
}
}, 1000 * 3 * this.displayNum)
}
},
getAccessdoor() {
accessDoor({ page: 0, size: 30 }).then((data) => {
if (data.content && data.content.length > 0) {
this.tableData.splice(0, data.content.length, ...data.content)
}
})
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/lend-manage.scss";
.warehouse-left {
position: relative;
h2 {
position: absolute;
left: 50%;
top: 0;
transform: translateX(-50%);
color: #fff;
font-size: 16px;
}
}
::v-deep
.el-table--striped
.el-table__body
tr.el-table__row--striped
td.el-table__cell {
background: #02255f;
}
</style>

15
src/views/components/SecurityDoor.vue

@ -8,17 +8,22 @@
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe>
<el-table-column prop="createTime" label="时间" align="center" width="100">
<el-table-column prop="his_time" label="时间" align="center" width="140">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div>{{ scope.row.his_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="位置" align="center" width="120">
<el-table-column label="位置" align="center" width="160">
<template slot-scope="scope">
<div>{{ scope.row.deviceName }}</div>
<div>{{ scope.row.door_name }}</div>
</template>
</el-table-column>
<el-table-column prop="in_or_out" label="说明" align="center">
<template slot-scope="scope">
<span v-if="scope.row.in_or_out===0" class="clear"></span>
<span v-if="scope.row.in_or_out===1" class="clear"></span>
</template>
</el-table-column>
<el-table-column prop="alarmMsg" label="警情" align="center" />
</el-table>
</div>
</template>

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

@ -73,7 +73,7 @@
</el-table>
</div> -->
<!-- 门禁记录 -->
<security-door :height="'calc(100% - 40px)'" />
<AccessDoor :height="'calc(100% - 40px)'" />
<!-- <div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
@ -99,12 +99,12 @@
<script>
import WarehouseWarning from '@/views/components/WarehouseWarning'
import SecurityDoor from '@/views/components/SecurityDoor'
import AccessDoor from '@/views/components/AccessDoor'
import displayConfigApi from '@/api/storeManage/displayConfig'
import thirdApi from '@/api/thirdApi'
export default {
name: 'FullView',
components: { WarehouseWarning, SecurityDoor },
components: { WarehouseWarning, AccessDoor },
data() {
return {
roomId: 'D6490DA3D4261E8C26D0E3',

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

@ -2,7 +2,7 @@
<div class="warehouse">
<div class="warehouse-left">
<div class="left-3d">
<iframe id="myIframe" ref="myIframe" name="iframeMap" class="iframe_box" src="/webA/index.html" frameborder="0" scrolling="no" />
<iframe id="myIframe" ref="myIframe" name="iframeMap" class="iframe_box" src="/webE/index.html" frameborder="0" scrolling="no" />
<ul class="msg-list">
<li v-show="topDisplayData.DXW_DIV_TOP_001.show" :class="{ 'li-warn': topDisplayData.DXW_DIV_TOP_001.curstatus > 0 }">
<svg-icon icon-class="temperature" class-name="msg-list-svg" />

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

@ -115,12 +115,17 @@ export default {
const _this = this
if (event.data && event.data.data) {
const data = event.data.data
console.log(data)
if (data === 'A区') {
_this.activeIndex = 1
} else if (data === 'B区') {
_this.activeIndex = 2
} else if (data === 'C区') {
_this.activeIndex = 3
} else if (data === '现行w文件室内') {
_this.activeIndex = 5
} else if (data === '待销文件室') {
_this.activeIndex = 6
}
//
if (data.includes('CAM')) {

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

@ -2,7 +2,7 @@
<div class="warehouse">
<div class="warehouse-left">
<div class="left-3d">
<iframe id="myIframe" ref="myIframe" name="iframeMap" class="iframe_box" src="/webA/index.html" frameborder="0" scrolling="no" />
<iframe id="myIframe" ref="myIframe" name="iframeMap" class="iframe_box" src="/webD/index.html" frameborder="0" scrolling="no" />
<ul class="msg-list">
<li v-show="topDisplayData.XXW_DIV_TOP_001.show" :class="{ 'li-warn': topDisplayData.XXW_DIV_TOP_001.curstatus > 0 }">
<svg-icon icon-class="temperature" class-name="msg-list-svg" />

158
src/views/system/logManage/accessDoorLog/index.vue

@ -0,0 +1,158 @@
<template>
<div>
<div class="head-container">
<!-- <crudOperation /> -->
<!-- <el-button v-permission="permission.download" :loading="crud.downloadLoading" :disabled="!selections.length" size="mini" icon="el-icon-download" @click="handleDownload">导出</el-button> -->
<el-button :loading="crud.downloadLoading" size="mini" icon="el-icon-download" @click="handleDownload">导出</el-button>
<el-input
v-model="keyWord"
size="small"
clearable
placeholder="请输入关键词"
style="width: 300px;margin-right:10px;padding-left:10px"
class="input-prepend filter-item"
@keyup.enter.native="crud.toQuery"
>
<!-- <el-select slot="prepend" v-model="optionVal" style="width: 100px" @keyup.enter.native="crud.toQuery"> -->
<el-select slot="prepend" v-model="optionVal" style="width: 80px">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-input>
<date-range-picker v-model="queryTime" class="date-item" />
<rrOperation />
</div>
<el-table
ref="table"
:data="crud.data"
style="width: 100%;"
height="calc(100vh - 356px)"
:cell-class-name="cell"
@row-click="clickRowHandler"
@selection-change="selectionChangeHandler"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="alarmLevel" label="状态" align="center" min-width="150">
<template slot-scope="scope">
<span v-if="scope.row.alarmLevel===0" class="clear" style="width:56px">异常</span>
<span v-if="scope.row.alarmLevel===1" class="clear" style="width:56px">正常</span>
</template>
</el-table-column>
<el-table-column prop="roomName" label="库房" align="center" min-width="150" />
<el-table-column prop="deviceName" label="设备名称" align="center" min-width="180" />
<el-table-column prop="maintitle" label="档案信息" align="center" min-width="180" />
<el-table-column prop="archiveNo" label="档号" align="center" min-width="180" />
<el-table-column prop="alarmMsg" label="警情描述" align="center" min-width="180" />
<el-table-column prop="createTime" label="报警时间" align="center" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<!-- <el-table-column prop="alarmEvent" label="事件" min-width="150" align="center">
<template slot-scope="scope">
<span v-if="scope.row.alarmEvent===0"></span>
<span v-if="scope.row.alarmEvent===1"></span>
</template>
</el-table-column>
<el-table-column prop="borrowerName" label="用户" align="center" min-width="150" /> -->
</el-table>
<pagination />
</div>
</template>
<script>
import rrOperation from '@crud/RR.operation'
import CRUD, { presenter, crud } from '@crud/crud'
import DateRangePicker from '@/components/DateRangePicker'
import pagination from '@crud/Pagination'
import { parseTime, saveAs, getBlob } from '@/utils/index'
import { mapGetters } from 'vuex'
import qs from 'qs'
export default {
name: 'DoorLog',
components: { rrOperation, DateRangePicker, pagination },
mixins: [presenter(), crud()],
cruds() {
return CRUD({
url: 'api/securitydoor/initSecurityDoorLog',
optShow: {
add: false,
edit: false,
del: false,
download: true
}
})
},
data() {
return {
selections: [],
keyWord: '',
optionVal: 'deviceName',
options: [
{ value: 'deviceName', label: '设备' },
{ value: 'roomName', label: '库房' }
],
queryTime: []
}
},
computed: {
...mapGetters([
'baseApi'
])
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.roomName = null
this.crud.query.deviceName = null
this.crud.query.startTime = null
this.crud.query.endTime = null
if (this.optionVal === 'deviceName') {
this.crud.query.deviceName = this.keyWord
} else if (this.optionVal === 'roomName') {
this.crud.query.roomName = this.keyWord
}
if (this.queryTime.length > 0) {
this.crud.query.startTime = this.queryTime[0]
this.crud.query.endTime = this.queryTime[1]
}
},
//
handleDownload() {
this.crud.downloadLoading = true
const fileName = parseTime(new Date()) + '-门禁日志.xlsx'
getBlob(this.baseApi + '/api/securitydoor/exportSecurityDoorLogList' + '?' + qs.stringify(this.crud.query, { indices: false }), function(blob) {
saveAs(blob, fileName)
})
this.crud.downloadLoading = false
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row) //
},
selectionChangeHandler(val) {
this.selections = val
},
//
handleListen() {
this.$refs.listenDom.dialogVisible = true
},
cell({ row, columnIndex }) {
if (row.alarmLevel === 1 && columnIndex === 2) {
return 'have-clear'
} else if (row.alarmLevel === 0 && columnIndex === 2) {
return 'fail-clear'
}
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
@import "~@/assets/styles/archives-manage.scss";
</style>

35
src/views/system/logManage/doorLog/index.vue

@ -36,21 +36,27 @@
@selection-change="selectionChangeHandler"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="alarmLevel" label="状态" align="center" min-width="150">
<el-table-column prop="user_name" label="姓名" min-width="100" align="center" />
<el-table-column prop="employee_id" label="工号" min-width="140" align="center" />
<el-table-column prop="card_no" label="卡编号" min-width="140" align="center" />
<el-table-column prop="card_code" label="卡内码" min-width="140" align="center" />
<el-table-column prop="department_name" label="部门" min-width="140" align="center" />
<el-table-column prop="door_name" label="门区" min-width="100" align="center" />
<el-table-column prop="in_or_out" label="事件" align="center" min-width="150">
<template slot-scope="scope">
<span v-if="scope.row.alarmLevel===0" class="clear" style="width:56px">异常</span>
<span v-if="scope.row.alarmLevel===1" class="clear" style="width:56px">正常</span>
<span v-if="scope.row.in_or_out===0" class="clear" style="width:56px">进门</span>
<span v-if="scope.row.in_or_out===1" class="clear" style="width:56px">出门</span>
</template>
</el-table-column>
<el-table-column prop="roomName" label="库房" align="center" min-width="150" />
<el-table-column prop="deviceName" label="设备名称" align="center" min-width="180" />
<el-table-column prop="maintitle" label="档案信息" align="center" min-width="180" />
<el-table-column prop="archiveNo" label="档号" align="center" min-width="180" />
<el-table-column prop="alarmMsg" label="警情描述" align="center" min-width="180" />
<el-table-column prop="createTime" label="报警时间" align="center" min-width="180">
<el-table-column prop="his_time" label="记录时间" align="center" min-width="150">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div>{{ scope.row.his_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="action" label="动作类型" align="center" min-width="180" />
<el-table-column prop="create_time" label="报警时间" align="center" min-width="180">
<template slot-scope="scope">
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
<!-- <el-table-column prop="alarmEvent" label="事件" min-width="150" align="center">
@ -92,10 +98,11 @@ export default {
return {
selections: [],
keyWord: '',
optionVal: 'deviceName',
optionVal: 'user_name',
options: [
{ value: 'deviceName', label: '设备' },
{ value: 'roomName', label: '库房' }
{ value: 'user_name', label: '姓名' },
{ value: 'employee_id', label: '工号' },
{ value: 'door_name', label: '门区' }
],
queryTime: []
}

10
src/views/system/logManage/index.vue

@ -8,13 +8,13 @@
<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 == 2 }" @click="changeActiveTab(2)">报警日志<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 3 }" @click="changeActiveTab(3)">门禁日志<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 3 }" @click="changeActiveTab(3)">通道门日志<i /></li>
<li :class="{ 'active-tab-nav': activeIndex == 4 }" @click="changeActiveTab(4)">门禁日志<i /></li>
<!-- <li :class="{ 'active-tab-nav': activeIndex == 4 }" @click="changeActiveTab(4)">接口访问日志<i /></li> -->
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>
<component :is="comName" />
</div>
</div>
</template>
@ -24,6 +24,7 @@ import loginLog from './loginLog/index.vue'
import operateLog from './operateLog/index.vue'
import warnLog from './warnLog/index.vue'
import doorLog from './doorLog/index.vue'
import accessDoorLog from './accessDoorLog/index.vue'
import portLog from './portLog/index.vue'
export default {
@ -33,7 +34,8 @@ export default {
operateLog,
warnLog,
doorLog,
portLog
portLog,
accessDoorLog
},
data() {
return {
@ -49,6 +51,8 @@ export default {
} else if (this.activeIndex === 2) {
return 'warnLog'
} else if (this.activeIndex === 3) {
return 'accessDoorLog'
} else if (this.activeIndex === 4) {
return 'doorLog'
}
// else if (this.activeIndex === 4) {

Loading…
Cancel
Save