|
@@ -0,0 +1,523 @@
|
|
|
+<template>
|
|
|
+ <base-drag-bg-dialog
|
|
|
+ :dialogConfig="baseDialogConfig"
|
|
|
+ @handleClose="closeDialog"
|
|
|
+ >
|
|
|
+ <!-- 弹窗内容 -->
|
|
|
+ <div class="dialog_box">
|
|
|
+ <!-- 内容 -->
|
|
|
+ <div>
|
|
|
+ <el-row class="access_video">
|
|
|
+ <el-col :span="8">
|
|
|
+ <div class="select">
|
|
|
+ <div class="select_title">
|
|
|
+ 车辆识别1
|
|
|
+ <el-select
|
|
|
+ value-key="id"
|
|
|
+ v-model="cameraCarInfo1"
|
|
|
+ style="width: 160px"
|
|
|
+ size="mini"
|
|
|
+ clearable
|
|
|
+ placeholder="请选择摄像头"
|
|
|
+ @change="exchangeVideo(1, $event)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in cameraCarList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="select_video">
|
|
|
+ <div class="select_video_main">
|
|
|
+ <video-image-window
|
|
|
+ :cameraData="cameraCarInfo1"
|
|
|
+ :cameraId="cameraCarInfo1.id"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <div class="select">
|
|
|
+ <div class="select_title">
|
|
|
+ 车辆识别2
|
|
|
+ <el-select
|
|
|
+ value-key="id"
|
|
|
+ v-model="cameraCarInfo2"
|
|
|
+ style="width: 160px"
|
|
|
+ size="mini"
|
|
|
+ clearable
|
|
|
+ placeholder="请选择摄像头"
|
|
|
+ @change="exchangeVideo(2, $event)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in cameraCarList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="select_video">
|
|
|
+ <div class="select_video_main">
|
|
|
+ <video-image-window
|
|
|
+ :cameraData="cameraCarInfo2"
|
|
|
+ :cameraId="cameraCarInfo2.id"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <div class="select">
|
|
|
+ <div class="select_title">
|
|
|
+ 人脸识别
|
|
|
+ <el-select
|
|
|
+ value-key="id"
|
|
|
+ v-model="cameraFaceInfo"
|
|
|
+ style="width: 160px"
|
|
|
+ size="mini"
|
|
|
+ clearable
|
|
|
+ placeholder="请选择摄像头"
|
|
|
+ @change="exchangeVideo(3, $event)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in cameraFaceList"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="select_video">
|
|
|
+ <div class="select_video_main">
|
|
|
+ <video-image-window
|
|
|
+ :cameraData="cameraFaceInfo"
|
|
|
+ :cameraId="cameraFaceInfo.id"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <div class="search-box">
|
|
|
+ <div class="search-item">
|
|
|
+ <span class="search-label">场站:</span>
|
|
|
+ <el-select
|
|
|
+ value-key="id"
|
|
|
+ v-model="department"
|
|
|
+ style="width: 110px"
|
|
|
+ size="mini"
|
|
|
+ clearable
|
|
|
+ placeholder="请选择场站"
|
|
|
+ @change="searchData($event)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in departmentOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :value="item"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <!-- <el-cascader
|
|
|
+ v-model="query.departmentId"
|
|
|
+ :options="departmentOptions"
|
|
|
+ clearable
|
|
|
+ size="mini"
|
|
|
+ placeholder="请选择场站"
|
|
|
+ style="width: 160px"
|
|
|
+ @change="searchData()"
|
|
|
+ /> -->
|
|
|
+ <!-- <div class="search-btn2" @click="openAll">
|
|
|
+ <el-button size="mini" type="success">人员授权</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="search-btn2" @click="closeAll">
|
|
|
+ <el-button size="mini" type="warning">车辆授权</el-button>
|
|
|
+ </div> -->
|
|
|
+ <!-- <div class="search-btn2" @click="openBroadcast">
|
|
|
+ <el-button size="mini" type="success">开门</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="search-btn2" @click="closeBroadcast">
|
|
|
+ <el-button size="mini" type="danger">关门</el-button>
|
|
|
+ </div> -->
|
|
|
+ </div>
|
|
|
+ <div class="info_list">
|
|
|
+ <base-table-list
|
|
|
+ :tableConfig="tableConfig"
|
|
|
+ @handleClick="handleTableClick"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16">
|
|
|
+ <div class="record_list">
|
|
|
+ <div class="record_title">出入门记录</div>
|
|
|
+ <div class="record_info">
|
|
|
+ <base-table-list :tableConfig="recordTableConfig" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </base-drag-bg-dialog>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import BaseTableList from "@/views/components/base/BaseTableList";
|
|
|
+import BaseDragBgDialog from "@/views/components/base/BaseDragBgDialog.vue";
|
|
|
+import VideoImageWindow from "@/views/components/dialog/VideoImageWindow.vue";
|
|
|
+import { dealAlarm } from "@/API/common";
|
|
|
+import { getDepartmentByPid } from "@/API/alarm";
|
|
|
+import { getAccessInfoList, getAccessLogList } from "@/API/accessControl";
|
|
|
+import { mapGetters } from "vuex";
|
|
|
+export default {
|
|
|
+ name: "accessControlDialog",
|
|
|
+ components: { BaseDragBgDialog, BaseTableList, VideoImageWindow },
|
|
|
+ watch: {
|
|
|
+ "accessControlDialog.show": {
|
|
|
+ handler(newVal) {
|
|
|
+ this.baseDialogConfig.show = newVal;
|
|
|
+ },
|
|
|
+ // deep: true,
|
|
|
+ immediate: true,
|
|
|
+ },
|
|
|
+ dataList: {
|
|
|
+ handler(newValue, oldValue) {
|
|
|
+ this.filterKey = "";
|
|
|
+ this.tableConfig.tableData = newValue;
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ },
|
|
|
+ recordList: {
|
|
|
+ handler(newValue, oldValue) {
|
|
|
+ this.filterKey = "";
|
|
|
+ this.recrodTableConfig.tableData = newValue;
|
|
|
+ },
|
|
|
+ deep: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ BASE_URL,
|
|
|
+ dataList: [
|
|
|
+ {
|
|
|
+ id: "",
|
|
|
+ name: "",
|
|
|
+ buildName: "",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ recordList: [
|
|
|
+ {
|
|
|
+ id: "",
|
|
|
+ name: "",
|
|
|
+ eventTime: "",
|
|
|
+ content: "",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ baseDialogConfig: {
|
|
|
+ dialogId: "accessControlDialog",
|
|
|
+ show: false,
|
|
|
+ title: "出入门控制",
|
|
|
+ width: 1440,
|
|
|
+ height: 680,
|
|
|
+ center: true,
|
|
|
+ zIndex: 10,
|
|
|
+ },
|
|
|
+ tableConfig: {
|
|
|
+ needIndex: true,
|
|
|
+ height: 130,
|
|
|
+ header: [
|
|
|
+ { title: "名称", prop: "name", width: "" },
|
|
|
+ { title: "所在场站", prop: "buildName", width: "" },
|
|
|
+ ],
|
|
|
+ tableData: [],
|
|
|
+ },
|
|
|
+ recordTableConfig: {
|
|
|
+ needIndex: false,
|
|
|
+ height: 130,
|
|
|
+ header: [
|
|
|
+ { title: "设备名称", prop: "name", width: "80px" },
|
|
|
+ { title: "人员名称", prop: "personName", width: "100px" },
|
|
|
+ { title: "时间", prop: "eventTime", width: "" },
|
|
|
+ { title: "详细描述", prop: "content", width: "" },
|
|
|
+ ],
|
|
|
+ tableData: [],
|
|
|
+ },
|
|
|
+ cameraFaceList: [{ id: "1", name: "摄像头1" }],
|
|
|
+ cameraCarList: [{ id: "2", name: "摄像头2" }],
|
|
|
+ cameraFaceInfo: { id: "1", name: "摄像头1" },
|
|
|
+ cameraCarInfo1: { id: "2", name: "摄像头2" },
|
|
|
+ cameraCarInfo2: { id: "3", name: "摄像头3" },
|
|
|
+ departmentOptions: [],
|
|
|
+ department: {
|
|
|
+ id: "",
|
|
|
+ positioningBuildId: "",
|
|
|
+ },
|
|
|
+ query: {
|
|
|
+ departmentId: "",
|
|
|
+ buildId: "",
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {},
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(["accessControlDialog"]),
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.initAccessControlList("");
|
|
|
+ this.initAccessLogList();
|
|
|
+ // this.getDepartmentByPid();
|
|
|
+ this.departmentOptions = GY_STATIONS.filter((e) => e.id !== "");
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async initAccessControlList(buildId) {
|
|
|
+ try {
|
|
|
+ const params = {
|
|
|
+ pageSize: 100,
|
|
|
+ pageIndex: 1,
|
|
|
+ buildId: buildId,
|
|
|
+ };
|
|
|
+ const res = await getAccessInfoList(params);
|
|
|
+ this.dataList = res.data.content;
|
|
|
+ console.log("门禁列表", this.dataList);
|
|
|
+ //人脸识别列表
|
|
|
+ this.cameraFaceList = this.dataList.filter((e) => e.faceRecognition);
|
|
|
+ //车辆识别列表
|
|
|
+ this.cameraCarList = this.dataList.filter((e) => !e.faceRecognition);
|
|
|
+ console.log("门禁摄像头列表", this.cameraFaceList, this.cameraCarList);
|
|
|
+ if (this.cameraFaceList && this.cameraCarList.length > 0) {
|
|
|
+ this.cameraFaceInfo = this.cameraFaceList[0];
|
|
|
+ }
|
|
|
+ if (this.cameraCarList && this.cameraCarList.length > 1) {
|
|
|
+ this.cameraCarInfo1 = this.cameraCarList[0];
|
|
|
+ this.cameraCarInfo2 = this.cameraCarList[1];
|
|
|
+ }
|
|
|
+ console.log(
|
|
|
+ "门禁摄像头",
|
|
|
+ this.cameraFaceInfo,
|
|
|
+ this.cameraCarInfo1,
|
|
|
+ this.cameraCarInfo2
|
|
|
+ );
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async initAccessLogList() {
|
|
|
+ try {
|
|
|
+ const params = {
|
|
|
+ pageSize: 100,
|
|
|
+ pageIndex: 1,
|
|
|
+ };
|
|
|
+ const res = await getAccessLogList(params);
|
|
|
+ this.recordList = res.data.content;
|
|
|
+ // console.log("门禁事件列表", this.recordList);
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ closeDialog() {
|
|
|
+ this.$store.dispatch("globalConfig/setAccessControlDialog", {
|
|
|
+ show: false,
|
|
|
+ dialogMsg: {},
|
|
|
+ type: "All",
|
|
|
+ });
|
|
|
+ },
|
|
|
+ async handleDeal() {
|
|
|
+ try {
|
|
|
+ await dealAlarm({
|
|
|
+ id: this.accessControlDialog.dialogMsg.id,
|
|
|
+ dealContent: this.accessControlDialog.dialogMsg.dealContent,
|
|
|
+ });
|
|
|
+ this.closeDialog();
|
|
|
+ // 刷新报警列表页
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleTableClick(data, btnType) {
|
|
|
+ if (btnType === "open") {
|
|
|
+ console.log("打开", data);
|
|
|
+ }
|
|
|
+ if (btnType === "close") {
|
|
|
+ console.log("关闭", data);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async getDepartmentByPid() {
|
|
|
+ try {
|
|
|
+ const p = { id: "0" };
|
|
|
+ const res = await getDepartmentByPid(p);
|
|
|
+ let { content } = res.data;
|
|
|
+ content.forEach((element) => {
|
|
|
+ element.value = element.id;
|
|
|
+ element.label = element.departmentName;
|
|
|
+ if (element.children) {
|
|
|
+ element.children.forEach((element2) => {
|
|
|
+ element2.value = element2.id;
|
|
|
+ element2.label = element2.departmentName;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.departmentOptions = content;
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ searchData(e) {
|
|
|
+ console.log("事件信息", e);
|
|
|
+ this.filterInfo();
|
|
|
+ },
|
|
|
+ filterInfo() {
|
|
|
+ if (this.department.positioningBuildId) {
|
|
|
+ this.initAccessControlList(this.department.positioningBuildId);
|
|
|
+ } else {
|
|
|
+ this.initAccessControlList("");
|
|
|
+ }
|
|
|
+ },
|
|
|
+ exchangeVideo(type, e) {
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ // this.cameraCarInfo1 = this.cameraCarList.filter((c) => c.id === e);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ // this.cameraCarInfo2 = this.cameraCarList.filter((c) => c.id === e);
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ // this.cameraFaceInfo = this.cameraFaceList.filter((c) => c.id === e);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ openAll() {},
|
|
|
+ closeAll() {},
|
|
|
+ openBroadcast() {},
|
|
|
+ closeBroadcast() {},
|
|
|
+ handleClose(item) {
|
|
|
+ let index = -1;
|
|
|
+ for (let i = 0; i < this.openningList.length; i++) {
|
|
|
+ const e = this.openningList[i];
|
|
|
+ if (e.label === item.label) {
|
|
|
+ index = i;
|
|
|
+ this.openningList.splice(index, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang="less" scoped>
|
|
|
+.dialog_box {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ .access_video {
|
|
|
+ padding-left: 10px;
|
|
|
+ .select {
|
|
|
+ text-align: left;
|
|
|
+ font-size: 0.083333rem /* 16/192 */;
|
|
|
+ line-height: 30px /* 50/192 */;
|
|
|
+ color: #fff;
|
|
|
+ .select_title {
|
|
|
+ padding: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .select_list {
|
|
|
+ height: 66px;
|
|
|
+ overflow: auto;
|
|
|
+ max-height: 66px;
|
|
|
+ .select-tag {
|
|
|
+ margin: 2px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .select_video {
|
|
|
+ width: 100%;
|
|
|
+ height: 380px;
|
|
|
+ padding: 2px;
|
|
|
+ position: relative;
|
|
|
+ .select_video_main {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .search-box {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ margin: 6px /* 10/192 */ 0;
|
|
|
+ color: #fff;
|
|
|
+ .search-item {
|
|
|
+ display: flex;
|
|
|
+ .search-label {
|
|
|
+ display: inline-block;
|
|
|
+ width: 60px;
|
|
|
+ font-size: 0.083333rem /* 16/192 */;
|
|
|
+ line-height: 30px;
|
|
|
+ text-align: center;
|
|
|
+ word-break: keep-all;
|
|
|
+ }
|
|
|
+ .search-date.el-input__inner {
|
|
|
+ width: 1.666667rem /* 320/192 */;
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 0;
|
|
|
+ margin-right: 0;
|
|
|
+ }
|
|
|
+ .el-input {
|
|
|
+ ::v-deep .el-input__inner {
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 0;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .el-select {
|
|
|
+ margin-right: 0.052083rem /* 10/192 */;
|
|
|
+ ::v-deep .el-input__inner {
|
|
|
+ width: 0.572917rem /* 110/192 */;
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 0;
|
|
|
+ color: #fff;
|
|
|
+ // padding-right: 0.182292rem /* 35/192 */;
|
|
|
+ }
|
|
|
+ ::v-deep .el-input__icon {
|
|
|
+ line-height: 28px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .search-btn2 {
|
|
|
+ box-sizing: content-box;
|
|
|
+ text-align: center;
|
|
|
+ justify-content: right;
|
|
|
+ color: #fff;
|
|
|
+ font-size: 0.072917rem /* 14/192 */;
|
|
|
+ cursor: pointer;
|
|
|
+ border-radius: 0;
|
|
|
+ margin-left: 10px;
|
|
|
+ &:hover {
|
|
|
+ border-color: #ccc;
|
|
|
+ }
|
|
|
+ img {
|
|
|
+ width: 0.083333rem /* 16/192 */;
|
|
|
+ height: 0.083333rem /* 16/192 */;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .info_list {
|
|
|
+ }
|
|
|
+ .record_list {
|
|
|
+ margin-left: 4px;
|
|
|
+ text-align: left;
|
|
|
+ font-size: 0.083333rem /* 16/192 */;
|
|
|
+ line-height: 30px /* 50/192 */;
|
|
|
+ color: #fff;
|
|
|
+ .record_title {
|
|
|
+ padding: 6px;
|
|
|
+ }
|
|
|
+ .record_info {
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|