Compare commits

...

5 Commits

Author SHA1 Message Date
210f9cc44e 删除退出登录 2025-07-25 12:09:20 +08:00
3c9d244817 12312312 2025-07-22 18:51:12 +08:00
a2b8cd74e9 修改 2025-07-22 09:51:20 +08:00
ad1b52a960 xiug 2025-07-21 21:17:45 +08:00
lcw
30d5a663ef lcw 2025-07-21 17:47:27 +08:00
449 changed files with 1698 additions and 125685 deletions

136
package-lock.json generated
View File

@ -2043,51 +2043,6 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true "dev": true
}, },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"ssri": { "ssri": {
"version": "8.0.1", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
@ -2096,28 +2051,6 @@
"requires": { "requires": {
"minipass": "^3.1.1" "minipass": "^3.1.1"
} }
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
} }
} }
}, },
@ -14617,6 +14550,75 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-router": { "vue-router": {
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz",

View File

@ -404,6 +404,18 @@ export const JczdeleteById = (id) => {
method: "delete" method: "delete"
}); });
}; };
// 检查站详情
export const JczselectById = (params) => {
return request({
url: api + `/jcz/selectById`,
method: "get",
params
});
};
//盘查管理 //盘查管理
// 人 // 人
export const BpcryselectCrewList = (params) => { export const BpcryselectCrewList = (params) => {
@ -438,11 +450,11 @@ export const GjrytxeditEntity = (data) => {
}); });
}; };
// 查询过检人员图像 // 查询过检人员图像
export const GjrytxselectPage = (data) => { export const GjrytxselectPage = (params) => {
return request({ return request({
url: api + `/jczGjrytx/selectPage`, url: api + `/jczGjrytx/selectPage`,
method: "get", method: "get",
data params
}); });
}; };
// 删除过检人员图像 // 删除过检人员图像
@ -670,3 +682,35 @@ export const tbJczXfbbdeleteJyQxzb = (data) => {
data data
}); });
}; };
/**
* 新增摄像头
*/
export const sxtBatch = (data) => {
return request({
url: api + `/tbJczSxt/batch`,
method: "post",
data
});
};
/**
* 完成报备
*/
export const finishEntity = (id) => {
return request({
url: api + `/tbJczXfbb/finishEntity/${id}`,
method: "get",
});
};
/**
* 获取摄像头列表
*/
export const sxtGetList = (data) => {
return request({
url: api + `/tbJczSxt/getList`,
method: "POST",
data
});
};

330
src/api/service.js Normal file
View File

@ -0,0 +1,330 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
const apibase = "/mosty-api/mosty-jmxf";
export const http = {
// 获取视频ws地址
getSpWs: (params) => {
return request({
url: "/jcApi/api/haikang/cameras/getws",
method: "GET",
params
});
},
// 警力 全部list
getJlAllList: (params) => {
return request({
url: api + "/jlqk/jmjl/qbList",
method: "GET",
params
});
},
// 警力 在岗list
getJlZgList: (params) => {
return request({
url: api + "/jlqk/jmjl/zgList",
method: "GET",
params
});
},
// 街面警力 - 民警辅警统计
getJmjlDate: (params) => {
return request({
url: api + "/tbQwXfbb/selectMfjCount",
method: "GET",
params
});
},
// 街面警力 - 民警list
getJmjlDateMJList: (params) => {
return request({
url: api + "/jlqk/jmjl/mjlb",
method: "GET",
params
});
},
// 街面警力 - fu警list
getJmjlDateFJList: (params) => {
return request({
url: api + "/jlqk/jmjl/fjlb",
method: "GET",
params
});
},
// 警力情况 - 警力全部
getJlAll: (params) => {
return request({
url: api + "/jlqk/jmjl/qb",
method: "GET",
params
});
},
// 警力情况 - 警力在岗
getJlZg: (params) => {
return request({
url: api + "/jlqk/jmjl/zg",
method: "GET",
params
});
},
// 警力情况 - 民警全部
getMjAll: (params) => {
return request({
url: api + "/jlqk/mj/qbmj",
method: "GET",
params
});
},
// 警力情况 - 民警在岗
getMjZg: (params) => {
return request({
url: api + "/jlqk/mj/zgmj",
method: "GET",
params
});
},
// 警力情况 - 民警全部
getMjAllList: (params) => {
return request({
url: api + "/jlqk/mj/qbmj",
method: "GET",
params
});
},
// 警力情况 - 民警在岗
getMjZgList: (params) => {
return request({
url: api + "/jlqk/mj/zgmj",
method: "GET",
params
});
},
// 警力情况 - 辅警全部
getFjAll: (params) => {
return request({
url: api + "/jlqk/fj/qbfj",
method: "GET",
params
});
},
// 警力情况 -辅警在岗
getFjZg: (params) => {
return request({
url: api + "/jlqk/fj/zgfj",
method: "GET",
params
});
},
// 可抽调 -民警 - 辅警
getKcd(params) {
return request({
url: api + "/jlqk/kcd/zbtj",
method: "GET",
params: params
});
},
// 警力情况 - 辅警全部列表
getFjAllList: (params) => {
return request({
url: api + "/jlqk/fj/qblb",
method: "GET",
params
});
},
// 警力情况 - 辅警在岗列表
getFjAllListZG: (params) => {
return request({
url: api + "/jlqk/fj/zglb",
method: "GET",
params
});
},
// 警力情况 -请休假Mj-FJ
getRest: (params) => {
return request({
url: api + "/jlqk/qxj/mjfjtj",
method: "GET",
params
});
},
// 街面警力统计 app查询界面警力民警辅警数量
getJmjlTj: (data) => {
return request({
url: api + "/tbQwXfbb/selectMfjCount",
method: "GET",
params: data
});
},
// 请休假
getQxj: (data) => {
return request({
url: api + "/jlqk/qxj/mjfjtj",
method: "GET",
params: data
});
},
// 警力情况 -请休假Mj
getRestMj: (params) => {
return request({
url: api + "/jlqk/qxj/mjlb",
method: "GET",
params
});
},
// 警力情况 -请休假FJ
getRestFj: (params) => {
return request({
url: api + "/jlqk/qxj/fjlb",
method: "GET",
params
});
},
// 勤务列表 - 警力清单
getJlList: (params) => {
return request({
url: api + "/tbQwBmjlbb/getJlqdList",
method: "GET",
params
});
},
// 勤务列表 - 不在岗警力清单
getBZGlist: (params) => {
return request({
url: api + "/qwlb/bzgjlqd",
method: "GET",
params
});
},
// 大屏首页统计 - 在岗警力 - 民警
getJlmj: (params) => {
return request({
url: api + "/jlqk/mj/zglb",
method: "GET",
params
});
},
getJlfj: (params) => {
return request({
url: api + "/jlqk/fj/zglb",
method: "GET",
params
});
},
getJlqbmj: (params) => {
return request({
url: api + "/jlqk/mj/qblb",
method: "GET",
params
});
},
// 大屏首页统计 - 街面巡组 - 计划 列表
getJMXZ: (params) => {
return request({
url: api + "/tbQwXfbb/selectJhjmxzList",
method: "GET",
params
});
},
// 大屏首页统计 - 街面巡组 - 实际 列表
selectSjjmxzList: (params) => {
return request({
url: api + "/tbQwXfbb/selectSjjmxzList",
method: "GET",
params
});
},
// 大屏首页统计 - 街面力量 - 计划、实际
getJMLL: (params) => {
return request({
url: api + "/tbQwXfbb/selectJmllList",
method: "GET",
params
});
},
// 大屏首页统计 - 街面警力- 民警
getjMJLmj: (params) => {
return request({
url: api + "/tbQwXfbb/selectJmllList",
method: "GET",
params
});
},
// 大屏首页统计- 可抽查 - 值班
getZB: (params) => {
return request({
url: api + "/jlqk/kcd/zbtj",
method: "GET",
params
});
},
// 大屏首页统计- 可抽查 - 辅警列表
getKccFjList: (params) => {
return request({
url: api + "/jlqk/kcd/fjlb",
method: "GET",
params
});
},
// 大屏首页统计- 可抽查 - 民警列表
getKccMjList: (params) => {
return request({
url: api + "/jlqk/kcd/mjlb",
method: "GET",
params
});
},
// 根据监控点编号进行云台操作
controllingSbbh: (data) => {
return request({
url: apibase + "/tbYsSxt/controlling",
method: "POST",
data
});
},
// 获取HLS地址
getGbHls: (params) => {
return request({
url: apibase + "/tbYsSxt/getGbHls",
method: "GET",
params
});
},
// 获取HLS地址
previewURLs: (params) => {
return request({
url: apibase + "/tbYsSxt/previewURLs",
method: "GET",
params
});
},
// 获取回放地址
rebackURLs: (params) => {
return request({
url: apibase + "/tbYsSxt/playbackURLs",
method: "GET",
params
});
},
}

View File

@ -599,7 +599,7 @@ export const selectUserDeptPage = (data = {}) => {
///unifiedLogin ///unifiedLogin
export const unifiedLogin = (data) => { export const unifiedLogin = (data) => {
return request({ return request({
url: api + `/unifiedLogin`, url: api + `/ssoLogin`,
method: "POST", method: "POST",
data data
}); });

26
src/api/yszx.js Normal file
View File

@ -0,0 +1,26 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-yszx";
/*
* 查询摄像头列表
* return promise 查询摄像头列表
*/
export const ysSxtGetList = (data = {}) => {
return request({
url: api + "/tbYsSxt/getList",
method: "POST",
data
});
};
/**
* 获取摄像头列表
* @param {*} data
*/
export const ysSxtgetPageList = (data = {}) => {
return request({
url: api + "/tbYsSxt/getPageList",
method: "POST",
data
});
};

View File

@ -116,6 +116,7 @@
.relative { .relative {
position: relative; position: relative;
} }
.absolute { .absolute {
position: absolute; position: absolute;
} }
@ -159,9 +160,11 @@
.flex { .flex {
display: flex; display: flex;
} }
.flex-grow1 { .flex-grow1 {
flex-grow: 1; flex-grow: 1;
} }
.shrink0 { .shrink0 {
flex-shrink: 0; flex-shrink: 0;
} }
@ -169,6 +172,7 @@
.flex-warp { .flex-warp {
flex-wrap: wrap; flex-wrap: wrap;
} }
.flex-nowrap { .flex-nowrap {
flex-wrap: nowrap; flex-wrap: nowrap;
} }
@ -180,6 +184,7 @@
.just-between { .just-between {
justify-content: space-between; justify-content: space-between;
} }
.just-around { .just-around {
justify-content: space-around; justify-content: space-around;
} }
@ -207,11 +212,13 @@
.align-bottom { .align-bottom {
align-items: flex-end; align-items: flex-end;
} }
.flexcc { .flexcc {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.flexcb { .flexcb {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -333,26 +340,32 @@
.lh#{$i} { .lh#{$i} {
line-height: #{$i}px; line-height: #{$i}px;
} }
//自适应大号字体(通常为统计数字 18-30) //自适应大号字体(通常为统计数字 18-30)
.font_size_big { .font_size_big {
font-size: clamp(1.125rem, -0.894rem + 2.31vw, 1.875rem); font-size: clamp(1.125rem, -0.894rem + 2.31vw, 1.875rem);
} }
//自适应一号字体(通常为一级标题 14-18) //自适应一号字体(通常为一级标题 14-18)
.font_size_title { .font_size_title {
font-size: clamp(0.875rem, 0.37rem + 0.58vw, 1.063rem); font-size: clamp(0.875rem, 0.37rem + 0.58vw, 1.063rem);
} }
//自适应统计字体(通常为统计数字 14-22) //自适应统计字体(通常为统计数字 14-22)
.font_size1 { .font_size1 {
font-size: clamp(0.875rem, -0.471rem + 1.54vw, 1.375rem); font-size: clamp(0.875rem, -0.471rem + 1.54vw, 1.375rem);
} }
//自适应二号字体(通常为二级标题 14-16) //自适应二号字体(通常为二级标题 14-16)
.font_size2 { .font_size2 {
font-size: clamp(0.75rem, 0.077rem + 0.77vw, 1rem); font-size: clamp(0.75rem, 0.077rem + 0.77vw, 1rem);
} }
//自适应普通字体(通常为默认大小 10-14) //自适应普通字体(通常为默认大小 10-14)
.font_size_default { .font_size_default {
font-size: clamp(0.625rem, -0.048rem + 0.77vw, 0.875rem); font-size: clamp(0.625rem, -0.048rem + 0.77vw, 0.875rem);
} }
.flex#{$i} { .flex#{$i} {
flex: #{$i}; flex: #{$i};
} }
@ -364,9 +377,29 @@
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
@font-face { @font-face {
font-family: "HANYILINGXINTIJIAN"; font-family: "HANYILINGXINTIJIAN";
src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF"); src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF");
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
/* 自定义滚动条样式 */
::-webkit-scrollbar {
width: 0.5em;
height: 0.5em;
}
::-webkit-scrollbar-track {
background: #000000;
}
::-webkit-scrollbar-thumb {
background: #021b31;
border-radius: 0.25em;
}
::-webkit-scrollbar-thumb:hover {
background: #011733cd;
}

View File

@ -1,7 +1,8 @@
<template> <template>
<div :id="mapid" class="map"></div> <div :id="mapid" class="map"></div>
<div class="changeMap_box" v-if="props.isShow"> <div class="changeMap_box" v-if="props.isShow">
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况" style="--el-switch-color:#13ce66;--el-switch-off-color:#ff4949;" /> <el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况"
style="--el-switch-color: #13ce66; --el-switch-off-color: #ff4949" />
<!-- <el-carousel type="card" height="75px" :autoplay="false" indicator-position="none" :initial-index="3" @change="onMapImageChange"> <!-- <el-carousel type="card" height="75px" :autoplay="false" indicator-position="none" :initial-index="3" @change="onMapImageChange">
<el-carousel-item> <el-carousel-item>
<div class="mapImageItem"> <div class="mapImageItem">
@ -88,27 +89,32 @@ onMounted(() => {
map = new EliMap({ map = new EliMap({
id: props.mapid, id: props.mapid,
crs: "EPSG:3857", crs: "EPSG:4490",
style: { style: {
glyphs: "./fonts/{fontstack}/{range}.pbf", glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36,29.65], center: [94.36057012, 29.64276831],
zoom: 10 zoom: 15
}, },
transformRequest: (url) => { minZoom: 7,
if (url.indexOf("TileMatrix=") != -1) { maxZoom: 18,
const arr = url.split("TileMatrix=");
const arr1 = arr[1].split("&");
const nurl = `${arr[0]}&TileMatrix=${Number(arr1[0])}&${arr1[1]}&${arr1[2]}`;
}
}
}); });
window.map = map; window.map = map;
map.mapboxGLMap.on("load", () => { map.mapboxGLMap.on("load", () => {
map.addGaudLayer({ map.addWMTSLayer(
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', "/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap",
}) {
Service: "getImage",
Type: "RGB",
ZoomOffset: "0",
V: "0.3",
Zoom: "{z}",
Row: "{y}",
Col: "{x}"
},
{
tileSize: 300
}
);
zoomTarget.value = map.mapboxGLMap.getZoom(); zoomTarget.value = map.mapboxGLMap.getZoom();
}); });
mapUtil.value = new MapUtil(map); mapUtil.value = new MapUtil(map);
@ -128,8 +134,6 @@ onMounted(() => {
}); });
// 撒点 // 撒点
emitter.on("addPointArea", (obj) => { emitter.on("addPointArea", (obj) => {
console.log(obj);
mapUtil.value.makerSki(obj); mapUtil.value.makerSki(obj);
}); });
// 鼠标滑过提示文字的点位 // 鼠标滑过提示文字的点位
@ -168,7 +172,7 @@ onMounted(() => {
}); });
// 回显线 // 回显线
emitter.on("echoLine", (res) => { emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res); mapUtil.value.createLine(res, res.flag);
}); });
//创建边界面geojson //创建边界面geojson
emitter.on("setBoundarys", (res) => { emitter.on("setBoundarys", (res) => {
@ -199,11 +203,6 @@ onMounted(() => {
mapUtil.value.diffusionCircle(res); mapUtil.value.diffusionCircle(res);
}); });
// 清除全部覆盖物
emitter.on("removeElementAll", () => {
mapUtil.value.removeElementAll();
});
// 展示盘曲 // 展示盘曲
emitter.on("showGapText", (obj) => { emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj); mapUtil.value.gapText(obj);
@ -302,7 +301,6 @@ onUnmounted(() => {
emitter.off("diffusionCircle"); emitter.off("diffusionCircle");
emitter.off("SsCircle"); emitter.off("SsCircle");
emitter.off("ClearssCircle"); emitter.off("ClearssCircle");
emitter.off("removeElementAll");
}); });
</script> </script>
@ -325,29 +323,35 @@ onUnmounted(() => {
right: 398px; right: 398px;
bottom: 4px; bottom: 4px;
z-index: 9; z-index: 9;
.mapImageItem { .mapImageItem {
border: 1px solid #08aae8; border: 1px solid #08aae8;
background: rgb(9, 26, 70); background: rgb(9, 26, 70);
&>img { &>img {
width: 100%; width: 100%;
height: 50px; height: 50px;
} }
&>div { &>div {
text-align: center; text-align: center;
position: relative; position: relative;
top: -3px; top: -3px;
} }
} }
.zoomTargetBox { .zoomTargetBox {
margin-top: 10px; margin-top: 10px;
margin-left: 23px; margin-left: 23px;
} }
::v-deep .el-input-number__decrease, ::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase { ::v-deep .el-input-number__increase {
background: #133362; background: #133362;
color: #fff; color: #fff;
border: none; border: none;
} }
::v-deep .el-input__inner { ::v-deep .el-input__inner {
background: #0c1641; background: #0c1641;
} }

View File

@ -101,8 +101,7 @@ onMounted(() => {
window.map = map; window.map = map;
map.mapboxGLMap.on("load", () => { map.mapboxGLMap.on("load", () => {
map.addWMTSLayer( map.addWMTSLayer(
"http://89.0.23.24/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap" "/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap",
,
{ {
Service: "getImage", Service: "getImage",
Type: "RGB", Type: "RGB",

View File

@ -0,0 +1,334 @@
<template>
<div>
<el-dialog
:title="titleValue"
width="1400px"
v-model="modelValue"
@close="closed"
>
<div v-if="modelValue">
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="所属部门">
<MOSTY.Department
width="100%"
clearable
v-model="listQuery.ssbmdm"
/>
</el-form-item>
<el-form-item label="感知源名称">
<el-input
v-model="listQuery.sbmc"
placeholder="请输入感知源名称"
clearable
/>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" style="margin-top: 0px" v-if="modelValue">
<el-table
ref="multipleUserRef"
@selection-change="handleSelectionChange"
:data="tableData"
:highlight-current-row="props.Single"
border
v-loading="loading"
style="width: 100%"
:row-key="keyid"
height="450"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
v-if="!props.Single"
/>
<el-table-column width="55" #default="{ row }" v-else>
<el-radio v-model="ridioIndex" :label="row.id"></el-radio>
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
sortable
width="80"
/>
<el-table-column
sortable
prop="ssbm"
label="所属部门"
show-overflow-tooltip
align="center"
></el-table-column>
<el-table-column
sortable
prop="sbmc"
show-overflow-tooltip
align="center"
label="感知源名称"
>
</el-table-column>
<el-table-column
show-overflow-tooltip
align="center"
label="厂商名称"
prop="csmc"
/>
<el-table-column
prop="sbbh"
show-overflow-tooltip
align="center"
label="设备编号"
>
</el-table-column>
<el-table-column
sortable
prop="jd"
show-overflow-tooltip
label="经度"
align="center"
>
</el-table-column>
<el-table-column
sortable
prop="wd"
show-overflow-tooltip
label="纬度"
align="center"
>
</el-table-column>
</el-table>
</div>
<div class="fenye">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[2, 5, 10, 20]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import * as rule from "@/utils/rules.js";
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from "element-plus";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {ysSxtgetPageList} from '@/api/yszx.js'
import {
defineProps,
watch,
ref,
onMounted,
nextTick,
getCurrentInstance
} from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_JCZLX } = proxy.$dict("D_BZ_JCZLX");
const props = defineProps({
//是否显示
modelValue: {
type: Boolean,
required: true
},
//标题
titleValue: {
type: String,
default: "选择环林卡口"
},
//是否单选
Single: {
type: Boolean,
default: false
},
//已经选中得数据回显
data: {
type: Array,
default: []
}
});
const keyid = (row) => {
return row.id;
};
const ridioIndex = ref(null);
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20,
jczmc: "",
ssbmdm: ""
});
const tableData = ref([]);
const loading = ref(false);
const emits = defineEmits(["update:modelValue", "choosedJcz"]);
const closed = () => {
listQuery.value.jczmc = "";
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = {
pageCurrent: 1,
pageSize: 20,
jczmc: "",
ssbmdm: ""
};
getListData();
};
// 判断传进来的选中数据和加载的选中数据不满足的数据
const checkopenList = ref([]);
// 确定选中
const onComfirm = () => {
//单选
if (props.Single) {
if (![ridioIndex.value][0]) {
proxy.$message.warning("请选择环林卡口");
return;
}
const info = tableData.value.find((item) => {
return item.id === ridioIndex.value;
});
emits("choosedJcz", JSON.parse(JSON.stringify(info)));
} else {
//多选
const jczList = JSON.parse(JSON.stringify(multipleSelectionUser.value));
if (jczList.length === 0) {
proxy.$message.warning("请选择环林卡口");
return;
}
emits("choosedJcz", [...jczList, ...checkopenList.value]);
}
closed();
};
onMounted(() => {
getListData();
});
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
//检查站数据
const getListData = async () => {
loading.value = true;
ysSxtgetPageList(listQuery.value)
.then((res) => {
tableData.value = res?.records;
loading.value = false;
multipleUser(props.data, tableData.value);
total.value = Number(res.total);
})
.catch(() => {
loading.value = false;
});
};
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
multipleSelectionUser.value = val;
if (checkopenList.value) {
for (let i = 0; i < multipleSelectionUser.value.length; i++) {
const l = multipleSelectionUser.value[i];
for (let j = 0; j < checkopenList.value.length; j++) {
const z = checkopenList.value[j];
if (l.id == z.id) {
checkopenList.value.splice(j, 1);
}
}
}
}
};
//回显--用于多选表格
function multipleUser(row, list) {
if (row) {
if (props.Single) {
row.forEach((item) => {
list.forEach((select) => {
if (typeof item == "object") {
if (item.id == select.id) {
ridioIndex.value = item.id;
}
} else {
if (item == select.id) {
ridioIndex.value = item;
}
}
});
});
} else {
row.forEach((item) => {
list.forEach((select) => {
if (item.id == select.id) {
if (multipleUserRef.value) {
multipleUserRef.value.toggleRowSelection(select, true);
}
}
});
});
}
}
}
watch(
() => props.modelValue,
(val) => {
if (val === true) {
ridioIndex.value = "";
handleFilter();
}
}
);
watch(
() => props.data,
(val) => {
if (multipleUserRef.value) multipleUser(val, tableData.value);
checkopenList.value = JSON.parse(JSON.stringify(val));
}
);
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
::v-deep .el-form--inline {
padding-left: 0 !important;
}
::v-deep .el-radio__label {
display: none;
}
::v-deep .el-table__body tr.current-row > td.el-table__cell {
// background: #106fdc;
}
</style>

View File

@ -0,0 +1,48 @@
<template>
<div style="width: 100%; height: 100%; overflow: hidden;">
<iframe v-if="urls" :src="'http://80.2.22.233:56233?sbbh=' + urls" style="border: none; width: 100%; height: 100%; "
allowfullscreen allowtransparency scrolling="no"></iframe>
<iframe v-else src="https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209105011F0zPoYzHry.mp4" style="border: none; width: 100%; height: 100%; "
allowfullscreen allowtransparency scrolling="no"></iframe>
</div>
</template>
<script setup>
import { http } from "@/api/service";
import { ref, onMounted, onUnmounted, watch, getCurrentInstance } from "vue";
const props = defineProps({
sbbh: String
})
const { proxy } = getCurrentInstance();
const urls = ref(null)
watch(() => props.sbbh, (val) => {
if (!val) {
proxy.$message({
message: "获取不到视频流,播放失败!!!",
grouping: true,
type: "info"
});
} else {
getUrl(val)
}
}, { immediate: true })
function getUrl(sbbh) {
http.previewURLs({ sbbh: sbbh, protocol: 'sbbh' }).then((res) => {
console.log(res);
let data = JSON.parse(res);
if (data && data.url) {
urls.value = data.data.url
} else {
proxy.$message({
message: "获取不到视频流,播放失败!!!",
grouping: true,
type: "info"
});
}
})
}
</script>
<style lang="scss" scoped></style>

View File

@ -8,7 +8,7 @@
<div class="name">姓名{{ username }}</div> <div class="name">姓名{{ username }}</div>
<div class="work">单位{{ deptName }}</div> <div class="work">单位{{ deptName }}</div>
</div> </div>
<el-dropdown :hide-on-click="false"> <!-- <el-dropdown :hide-on-click="false">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<el-icon :size="20" color="#fff"> <CaretBottom /> </el-icon> <el-icon :size="20" color="#fff"> <CaretBottom /> </el-icon>
</span> </span>
@ -17,7 +17,7 @@
<el-dropdown-item command="logout">退出登录</el-dropdown-item> <el-dropdown-item command="logout">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown> -->
</div> </div>
<div @click="goToHome"> <div @click="goToHome">
<img src="@/assets/images/meun.png" /> <img src="@/assets/images/meun.png" />

View File

@ -1,5 +1,5 @@
<template> <template>
<el-dropdown class="avatar-container" trigger="click"> <!-- <el-dropdown class="avatar-container" trigger="click">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<el-avatar <el-avatar
shape="circle" shape="circle"
@ -12,7 +12,7 @@
<el-dropdown-item divided @click="logout()">退出登录</el-dropdown-item> <el-dropdown-item divided @click="logout()">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown> -->
<UpdatePwdDialog v-model="UpdatePwdVisible"></UpdatePwdDialog> <UpdatePwdDialog v-model="UpdatePwdVisible"></UpdatePwdDialog>
</template> </template>

View File

@ -6,7 +6,7 @@ import {
removeAllItem removeAllItem
} from "@/utils/storage"; } from "@/utils/storage";
// 白名单 // 白名单
const whiteList = ['/login','/','/StationLevel', '/oatuh_login','/editPassword', '/404', '/401'] const whiteList = ['/login','/oatuh_login','/','/StationLevel','/editPassword', '/404', '/401']
/** /**
* 路由前置守卫 * 路由前置守卫
* to 去哪里 * to 去哪里
@ -14,42 +14,45 @@ const whiteList = ['/login','/','/StationLevel', '/oatuh_login','/editPassword',
* next 往下走 * next 往下走
*/ */
let onRun = true; let onRun = true;
// router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
// // 存在 token ,进入主页 // 存在 token ,进入主页
// // if (store.state.user.token) { console.log(store.getters.token,'===store.getters.token');
// // 快捷访问
// if (store.getters.token) { // if (store.state.user.token) {
// // 判断用户资料是否获取 // 快捷访问
// // 若不存在用户信息,则需要获取用户信息 if (store.getters.token) {
// // 触发获取用户信息的 action并获取用户当前权限 // 判断用户资料是否获取
// await store.commit('permission/setRouteReady', true) // 若不存在用户信息,则需要获取用户信息
// // 添加完动态路由之后,需要在进行一次主动跳转 // 触发获取用户信息的 action并获取用户当前权限
// const afterMenuList = await getItem('menusPermission'); await store.commit('permission/setRouteReady', true)
// // 处理用户权限,筛选出需要添加的权限 // 添加完动态路由之后,需要在进行一次主动跳转
// if (store.state.permission.routes == 0) { const afterMenuList = await getItem('menusPermission');
// const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList) // 处理用户权限,筛选出需要添加的权限
// filterRoutes.forEach(item => { if (store.state.permission.routes == 0) {
// router.addRoute(item) const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList)
// }) filterRoutes.forEach(item => {
// next({ router.addRoute(item)
// ...to, })
// replace: true next({
// }) ...to,
// } else { replace: true
// next() })
// } } else {
// // 利用 addRoute 循环添加 next()
// } else { }
// const isOatuh = getItem('isOatuh') // 利用 addRoute 循环添加
// // 没有token的情况下可以进入白名单 } else {
// if (whiteList.indexOf(to.path) > -1) { const isOatuh = getItem('isOatuh')
// next() // 没有token的情况下可以进入白名单
// } else { if (whiteList.indexOf(to.path) > -1) {
next()
} else {
next('/oatuh_login')
// if (isOatuh) { // if (isOatuh) {
// next('/oatuh_login') // next('/oatuh_login')
// } else { // } else {
// next('/login') // next('/login')
// } // }
// } }
// } }
// }) })

View File

@ -21,6 +21,11 @@ export const privateRoutes = [];
* 公开路由表 * 公开路由表
*/ */
export const publicRoutes = [ export const publicRoutes = [
{
path: "/oatuh_login",
name: "oatuh_login",
component: () => import("@/views/login/oatuh_login")
},
{ {
path: "/login", path: "/login",
name: "login", name: "login",
@ -353,7 +358,7 @@ export const publicRoutes = [
"@/views/backOfficeSystem/peopleManag/InspectedVehicle/index" "@/views/backOfficeSystem/peopleManag/InspectedVehicle/index"
), ),
meta: { meta: {
title: "过检车辆管理", title: "过检车辆管理",
icon: "article" icon: "article"
} }
} }

View File

@ -142,7 +142,7 @@ export default {
systemId, systemId,
}) })
.then((data) => { .then((data) => {
debugger
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
@ -240,7 +240,7 @@ export default {
removeAllItem(); removeAllItem();
// 待补充 清理权限相关的配置 // 待补充 清理权限相关的配置
if (isOatuh) { if (isOatuh) {
window.location.href = `http://80.149.27.78:8001/login`; window.location.href = `http://155.240.22.188:9020`;
} else { } else {
router.push("/login"); router.push("/login");
} }

View File

@ -38,7 +38,6 @@ service.interceptors.response.use(
// 请求成功的处理 // 请求成功的处理
(response) => { (response) => {
const { success, code, msg, message, data } = response.data; const { success, code, msg, message, data } = response.data;
console.log("data", code, response.data);
// 需要判断当前请求是否成功 // 需要判断当前请求是否成功
if (success && code === 10000) { if (success && code === 10000) {
return data; // 成功后返回解析后的数据 return data; // 成功后返回解析后的数据

View File

@ -87,12 +87,16 @@
</template> </template>
<script setup> <script setup>
import { ref } from "vue"; import { onMounted, ref } from "vue";
import Empty from "@/components/MyComponents/Empty/index.vue"; import Empty from "@/components/MyComponents/Empty/index.vue";
import { jczqueryById } from "@/api/mosty-jcz"; import { jczqueryById } from "@/api/mosty-jcz";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
const warningList = ref({ qxList: [], ryList: [], clList: [] ,sbList:[]}); let warningList = ref({ qxList: [], ryList: [], clList: [] ,sbList:[]});
onMounted(() => {
emitter.on("getjczqueryById", (res) => {
warningListValue(res)
})
});
const show = ref(1); const show = ref(1);
const props = defineProps({ const props = defineProps({
jczId: { jczId: {
@ -107,19 +111,23 @@ const showchenge = (val) => {
const getjczqueryById = () => { const getjczqueryById = () => {
jczqueryById({ jczid: props.jczId }).then((res) => { jczqueryById({ jczid: props.jczId }).then((res) => {
warningListValue(res)
});
};
const warningListValue = (res) => {
if (res) { if (res) {
emitter.emit("chengZ", res); warningList.value={}
warningList.value.qxList = res.qxList warningList.value.qxList =res.qxList&&res.qxList.length>0
? res.qxList.filter((item) => item.qxsl > 0) ? res.qxList.filter((item) => item.qxsl > 0)
: []; : [];
warningList.value.ryList = res.ryList ? res.ryList : []; warningList.value.ryList = res.ryList.length>0 ? res.ryList : [];
warningList.value.clList = res.clList ? res.clList : []; warningList.value.clList = res.clList.length>0 ? res.clList : [];
warningList.value.sbList = [...res.tcList, ...res.zdList] warningList.value.sbList = [...res.tcList, ...res.zdList]
emitter.emit("chengZ", res);
} else { } else {
warningList.value = res; warningList.value = res;
} }
}); }
};
getjczqueryById(); getjczqueryById();
</script> </script>
@ -240,4 +248,5 @@ getjczqueryById();
font-size: 12px; font-size: 12px;
margin-left: 10px; margin-left: 10px;
} }
</style> </style>

View File

@ -1,49 +1,64 @@
<template> <template>
<div class="image-carousel"> <div class="image-carousel">
<div class="control-button prev" @click="prevImage"> <el-carousel style="height: 100%;" motion-blur indicator-position="none" @change="handleCarouselChange"
<img src="@/assets/images/icon_08.png" alt=""> :autoplay="false">
<el-carousel-item v-for="(item, index) in listSxt" :key="index">
<div class="video-grid" v-if="activeIndex == index">
<div v-for="(items,indexs) in item" :key="indexs" class="video-cell">
<div class="iconFont" @click.stop="showchenge(items)">
<el-icon :size="20"><UploadFilled /></el-icon>
</div> </div>
<div class="carousel-container"> <WsIframe :sbbh="items.sbbh" />
<div class="hh100" :style="{transform: `translateX(-${currentIndex * 100}%)`}">
<ul class="image-wrapper" style="margin-bottom:1%;">
<li v-for="(image, index) in images" :key="index" class="image-item">
<img :src="image" alt="carousel image">
</li>
</ul>
<ul class="image-wrapper">
<li v-for="(image, index) in images" :key="index" class="image-item">
<img :src="image" alt="carousel image">
</li>
</ul>
</div>
<div class="control-button next" @click="nextImage">
<img src="@/assets/images/icon_07.png" alt="">
</div> </div>
</div> </div>
</el-carousel-item>
</el-carousel>
</div> </div>
</template> </template>
<script> <script setup>
export default { import { ref, watch, computed, onMounted, onUnmounted, reactive,nextTick } from 'vue'
data() { import WsIframe from '@/components/wsIframe/index.vue'
return { import { useRoute } from "vue-router"
currentIndex: 0, import { sxtGetList } from '@/api/mosty-jcz.js'
images: [ import emitter from "@/utils/eventBus.js";
require('@/assets/images/person.png'), const activeIndex = ref(0)
require('@/assets/images/person.png'), const cdList=ref([])
require('@/assets/images/person.png'), const listSxt=ref([1])
require('@/assets/images/person.png') const handleCarouselChange = (index) => {
] activeIndex.value = index
} }
},
methods: { const getSxtGetList = (id) => {
prevImage() { const jczid = {
this.currentIndex = this.currentIndex > 0 ? this.currentIndex - 1 : this.images.length - 1 jczid: id
},
nextImage() {
this.currentIndex = this.currentIndex < this.images.length - 1 ? this.currentIndex + 1 : 0
} }
sxtGetList(jczid).then(res => {
listSxt.value= Array.from({ length:Math.ceil(res.length / 12)==0?1:Math.ceil(res.length / 12) }, (_, row) => {
return res.slice(row * 12, row * 12 + 12)
} }
);
cdList.value = listSxt.value[0].length < 4 ? listSxt.value[0]: listSxt.value[0].slice(0,4)
emitter.emit("getSxtGetList", cdList.value )
}).finally(()=>{
})
}
const route = useRoute()
onMounted(() => {
const id = route.query.id
getSxtGetList(id)
})
const showchenge = (item) => {
const index = cdList.value.indexOf(item);
if (index !== -1) {
// 如果数字已存在,先移除它
cdList.value.splice(index, 1);
}
// 添加到最前面
cdList.value.unshift(item);
emitter.emit("getSxtGetList", cdList.value )
} }
</script> </script>
@ -54,6 +69,7 @@ export default {
position: relative; position: relative;
padding: 30px 20px; padding: 30px 20px;
box-sizing: border-box; box-sizing: border-box;
.carousel-container { .carousel-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -71,6 +87,7 @@ export default {
width: 24%; width: 24%;
margin: 0 1%; margin: 0 1%;
height: 100%; height: 100%;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -86,12 +103,58 @@ export default {
transition: all 0.3s; transition: all 0.3s;
color: #fff; color: #fff;
z-index: 1; z-index: 1;
&.prev { &.prev {
left: 0; left: 0;
} }
&.next { &.next {
right: 0; right: 0;
} }
} }
} }
.video-grid {
display: grid;
grid-template-columns: repeat(6, 1fr);
/* 6列 */
grid-template-rows: repeat(2, auto);
/* 2行 */
gap: 10px;
height: 100%;
overflow: auto;
}
::v-deep .el-carousel__container {
height: 100% !important;
}
::v-deep .image-carousel {
// padding: 0 !important;;
}
/* 自定义滚动条样式 */
::-webkit-scrollbar {
width: 0.5em;
height: 0.5em;
}
::-webkit-scrollbar-track {
background: #000000;
}
::-webkit-scrollbar-thumb {
background: #021b31;
border-radius: 0.25em;
}
::-webkit-scrollbar-thumb:hover {
background: #011733cd;
}
.video-cell{
position: relative;
}
.iconFont{
position: absolute; top: 10px; text-align: right; width: 100%;
}
</style> </style>

View File

@ -1,53 +1,35 @@
<template> <template>
<div class="video-more-container"> <div class="video-more-container">
<div class="switch-btn prev" @click="handlePrev"> <el-carousel style="height: 100%;" motion-blur indicator-position="none" :autoplay="false"
<img src="@/assets/images/icon_08.png" alt=""> @change="handleCarouselChange">
</div> <el-carousel-item v-for="(item,index) in sbList" :key="index" >
<div class="video-grid"> <div class="video-grid" v-if="activeIndex==index">
<div v-for="index in 4" :key="index" class="video-cell"> <div v-for="(items,indexs) in item" :key="indexs" class="video-cell">
<div class="video-wrapper"> <WsIframe :sbbh="items.sbbh" />
<video class="video-player" controls>
<source src="" type="video/mp4">
</video>
<div class="video-controls">
<div class="time-display">01:32</div>
<div class="control-buttons">
<i class="el-icon-video-play"></i>
<i class="el-icon-refresh-right"></i>
<i class="el-icon-full-screen"></i>
</div> </div>
</div> </div>
</div> </el-carousel-item>
</div> </el-carousel>
</div>
<div class="switch-btn next" @click="handleNext">
<img src="@/assets/images/icon_07.png" alt="">
</div>
</div> </div>
</template> </template>
<script> <script setup>
export default { import { ref ,onMounted} from 'vue'
name: 'VideoMore', import WsIframe from '@/components/wsIframe/index.vue'
data() { import emitter from "@/utils/eventBus.js";
return { const activeIndex = ref(0)
currentPage: 1, const handleCarouselChange = (index) => {
totalPages: 3 activeIndex.value=index
}
},
methods: {
handlePrev() {
if (this.currentPage > 1) {
this.currentPage--
}
},
handleNext() {
if (this.currentPage < this.totalPages) {
this.currentPage++
}
}
} }
const sbList = ref([1])
onMounted(()=>{
emitter.on("getSxtGetList", (res) => {
sbList.value= Array.from({ length:Math.ceil(res.length / 4)==0?1:Math.ceil(res.length / 4) }, (_, row) => {
return res.slice(row * 4, row * 4 + 4)
} }
);
})
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -79,14 +61,16 @@ export default {
} }
.video-grid { .video-grid {
padding: 10px;
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr); grid-template-rows: repeat(2, 1fr);
gap: 20px; gap: 10px;
height: 100%; height: 100%;
} }
.video-cell { .video-cell {
position: relative; position: relative;
background: url('~@/assets/images/bg13.png') no-repeat; background: url('~@/assets/images/bg13.png') no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
@ -132,10 +116,15 @@ export default {
i { i {
cursor: pointer; cursor: pointer;
font-size: 20px; font-size: 20px;
&:hover { &:hover {
color: #409EFF; color: #409EFF;
} }
} }
} }
} }
::v-deep .el-carousel__container {
height: 100% !important;
}
</style> </style>

View File

@ -302,16 +302,22 @@ const _onSave = () => {
break; break;
case "02": case "02":
listQuery.value.bcKts = 2; listQuery.value.bcKts = 2;
break;
case "03": case "03":
listQuery.value.bcKts = 4; listQuery.value.bcKts = 4;
break;
case "04": case "04":
listQuery.value.bcKts = 5; listQuery.value.bcKts = 5;
break;
case "05": case "05":
listQuery.value.bcKts = 6; listQuery.value.bcKts = 6;
break;
case "06": case "06":
listQuery.value.bcKts = 7; listQuery.value.bcKts = 7;
break;
case "07": case "07":
listQuery.value.bcKts = 8; listQuery.value.bcKts = 8;
break;
} }
if (listQuery.value.jczList) { if (listQuery.value.jczList) {
listQuery.value.jczid = listQuery.value.jczList.id; listQuery.value.jczid = listQuery.value.jczList.id;
@ -361,6 +367,8 @@ const fz = (val) => {
// //
const close = () => { const close = () => {
dialogForm.value = false; dialogForm.value = false;
mjData.value = [];
fjData.value = [];
listQuery.value = {}; listQuery.value = {};
}; };

View File

@ -25,6 +25,7 @@
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link> <el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="primary" @click="delDictItem(row.id)">删除</el-link> <el-link type="primary" @click="delDictItem(row.id)">删除</el-link>
<el-link type="primary" @click="addEdit('detail', row)">详情</el-link> <el-link type="primary" @click="addEdit('detail', row)">详情</el-link>
<el-link type="primary" @click="endreporting( row.id)" v-if="row.bbZt !== '03'">结束报备</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -44,7 +45,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./components/editAddForm.vue"; import EditAddForm from "./components/editAddForm.vue";
import { XfbbselectPage, JczXfbb } from "@/api/mosty-jcz.js"; import { XfbbselectPage, JczXfbb,finishEntity } from "@/api/mosty-jcz.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { const {
@ -152,6 +153,21 @@ const delDictItem = (ids) => {
}) })
.catch(() => { }); .catch(() => { });
}; };
const endreporting = (id) => {
proxy
.$confirm("确定要结束报备", "警告", { type: "warning" })
.then(() => {
finishEntity(id).then(res => {
proxy.$message({ type: "success", message: "报备结束" });
getjczgetXfllList();
})
})
.catch(() => { });
}
getjczgetXfllList(); getjczgetXfllList();
// 新增 // 新增
const addEdit = (type, row) => { const addEdit = (type, row) => {

View File

@ -81,7 +81,7 @@ const searchConfiger = ref([
}, },
{ {
label: "车前部物品特征代码", label: "车前部物品特征代码",
prop: "zqlx", prop: "cqbwptzdm",
placeholder: "车前部物品特征代码", placeholder: "车前部物品特征代码",
showType: "input" showType: "input"
}, },
@ -89,7 +89,7 @@ const searchConfiger = ref([
{ {
label: "车辆异常痕迹代码", label: "车辆异常痕迹代码",
prop: "clychjdm", prop: "clychjdm",
placeholder: "请选择环林卡口类型", placeholder: "请输入车辆异常痕迹代码",
showType: "input" showType: "input"
} }
]); ]);

View File

@ -117,7 +117,7 @@ const searchConfiger = ref([
}, },
{ {
label: "过检人员身份证号", label: "过检人员身份证号",
prop: "zqlx", prop: "gjrysfzh",
placeholder: "请输入过检人员身份证号", placeholder: "请输入过检人员身份证号",
showType: "input" showType: "input"
} }

View File

@ -87,7 +87,7 @@
<el-form-item label="关联GPSID" prop="glgpsid"> <el-form-item label="关联GPSID" prop="glgpsid">
<el-input :disabled="forbidden" <el-input :disabled="forbidden"
v-model="listQuery.glgpsid" v-model="listQuery.glgpsid"
placeholder="请输入装备型号" placeholder="请输入关联GPSID"
clearable clearable
style="width: 100%" style="width: 100%"
/> />
@ -95,7 +95,7 @@
<el-form-item label="设备sim卡号" prop="sbsim"> <el-form-item label="设备sim卡号" prop="sbsim">
<el-input :disabled="forbidden" <el-input :disabled="forbidden"
v-model="listQuery.sbsim" v-model="listQuery.sbsim"
placeholder="请输入装备型号" placeholder="请输入设备sim卡号"
clearable clearable
style="width: 100%" style="width: 100%"
/> />

View File

@ -71,7 +71,7 @@ const searchConfiger = ref([
{ {
label: "身份证号", label: "身份证号",
prop: "sfzh", prop: "sfzh",
placeholder: "请输入预警对象", placeholder: "请输入身份证号",
showType: "input" showType: "input"
}, },
{ {

View File

@ -83,7 +83,7 @@
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item style="width: 100%" prop="sklList" label="标签"> <!-- <el-form-item style="width: 40%" prop="sklList" label="标签">
<el-select :disabled="forbidden" <el-select :disabled="forbidden"
v-model="listQuery.sklList" v-model="listQuery.sklList"
placeholder="请选择标签" placeholder="请选择标签"
@ -96,8 +96,13 @@
:label="dict.label" :label="dict.label"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> -->
<el-form-item style="width: 40%" label="环林卡口名称">
<div class="diviput" @click="!forbidden?showJcz = true:''">
<span v-if="listQuery.jczmc">{{ listQuery.jczmc }}</span>
<span class="placeholder" v-else> 请选择布控卡口</span>
</div>
</el-form-item> </el-form-item>
<el-form-item style="width: 85%" prop="jd" label="坐标位置"> <el-form-item style="width: 85%" prop="jd" label="坐标位置">
<div class="latlng flex"> <div class="latlng flex">
<el-input :disabled="true" <el-input :disabled="true"
@ -122,6 +127,7 @@
</el-form> </el-form>
</div> </div>
</div> </div>
<Jczloder v-model="showJcz" :Single="true" @choosedJcz="JczMsg" :data="[]" />
</template> </template>
<script setup> <script setup>
@ -129,6 +135,7 @@ import { ref, reactive, onMounted } from "vue";
import { TtbJczSxtAdd, Ttbgetupdate } from "@/api/mosty-jcz.js"; import { TtbJczSxtAdd, Ttbgetupdate } from "@/api/mosty-jcz.js";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import Jczloder from "@/components/loder/Jczloder.vue";
import GdMap from "@/components/GdMap/index.vue"; import GdMap from "@/components/GdMap/index.vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
const props = defineProps({ const props = defineProps({
@ -216,6 +223,8 @@ const init = (type, row) => {
//保存 //保存
const _onSave = () => { const _onSave = () => {
if (!formRef) return; if (!formRef) return;
console.log(listQuery.value);
formRef.value.validate((valid, fields) => { formRef.value.validate((valid, fields) => {
if (valid) { if (valid) {
if (pageType.value == "add") { if (pageType.value == "add") {
@ -226,6 +235,7 @@ const _onSave = () => {
}); });
} else { } else {
Ttbgetupdate(listQuery.value).then((res) => { Ttbgetupdate(listQuery.value).then((res) => {
ElMessage({ message: "修改成功", type: "success" }); ElMessage({ message: "修改成功", type: "success" });
emit("getjczgetXfllList"); emit("getjczgetXfllList");
close(); close();
@ -235,7 +245,6 @@ const _onSave = () => {
console.log("error submit!", fields); console.log("error submit!", fields);
} }
}); });
console.log();
}; };
//选择定位地图 //选择定位地图
const selectLocation = () => { const selectLocation = () => {
@ -269,7 +278,12 @@ const tableHeight1 = ref();
const tabHeightFn = () => { const tabHeightFn = () => {
tableHeight1.value = window.innerHeight - 450; tableHeight1.value = window.innerHeight - 450;
}; };
const showJcz = ref(false);
const JczMsg = (val) => {
listQuery.value.jczmc = val.jczmc;
listQuery.value.jczid = val.id;
};
defineExpose({ init }); defineExpose({ init });
</script> </script>
@ -357,4 +371,20 @@ defineExpose({ init });
box-sizing: border-box; box-sizing: border-box;
background: #000; background: #000;
} }
.diviput {
width: 100%;
background-color: #ffffff;
border: 1px solid #c0c4cc;
color: #000;
height: 32px;
line-height: 32px;
padding: 0 10px;
border-radius: 5px;
.placeholder {
color: #b5b5b5;
}
}
.divData {
background-color:#f5f7fa ;
}
</style> </style>

View File

@ -2,6 +2,12 @@
<div> <div>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="感知源管理"> <PageTitle title="感知源管理">
<el-button :disabled="ids.length<=0" type="primary" @click="delDictItem(ids)" v-if="Auth">
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle" >批量删除</span>
</el-button>
<el-button type="primary" @click="addEdit('add', '')" v-if="Auth"> <el-button type="primary" @click="addEdit('add', '')" v-if="Auth">
<el-icon style="vertical-align: middle"> <el-icon style="vertical-align: middle">
<CirclePlus /> <CirclePlus />
@ -87,7 +93,7 @@ const searchConfiger = ref([
prop: "sblx", prop: "sblx",
placeholder: "感知源类型", placeholder: "感知源类型",
showType: "select", showType: "select",
options: D_BZ_GZSBLX options: D_BZ_SBLX
} }
]); ]);
@ -97,7 +103,7 @@ const pageData = reactive({
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
showSelectType: "null", showSelectType: "checkBox",
loading: false loading: false
}, },
total: 0, total: 0,
@ -107,9 +113,7 @@ const pageData = reactive({
}, //分页 }, //分页
controlsWidth: 250, //操作栏宽度 controlsWidth: 250, //操作栏宽度
tableColumn: [ tableColumn: [
{ label: "感知源名称", prop: "sbmc", showOverflowTooltip: true }, { label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
{ label: "编号", prop: "sbbh", showOverflowTooltip: true },
{ label: "地址", prop: "dzmc", showOverflowTooltip: true },
{ {
label: "感知源类型", label: "感知源类型",
prop: "sblx", prop: "sblx",
@ -122,7 +126,10 @@ const pageData = reactive({
showSolt: true, showSolt: true,
showOverflowTooltip: true showOverflowTooltip: true
}, },
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true } { label: "感知源名称", prop: "sbmc", showOverflowTooltip: true },
{ label: "编号", prop: "sbbh", showOverflowTooltip: true },
{ label: "地址", prop: "dzmc", showOverflowTooltip: true },
] ]
}); });
const Auth = ref(true) const Auth = ref(true)
@ -159,15 +166,21 @@ const changeNo = (val) => {
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
}; };
const ids=ref([])
// 获取列表 // 获取列表
// 删除 // 删除
const delDictItem = (ids) => { const delDictItem = (ids) => {
proxy proxy
.$confirm("确定删除该数据?", "警告", { type: "warning" }) .$confirm("确定删除该数据?", "警告", { type: "warning" })
.then(() => { .then(() => {
gzydeleteList(ids).then((res) => { let idsList
// ElMessage({ message: "删除成功", type: "success" }); if (Array.isArray(ids)) {
idsList=ids
}else{
idsList=[ids]
}
gzydeleteList(idsList).then((res) => {
ElMessage({ message: "删除成功", type: "success" });
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getjczgetXfllList(); getjczgetXfllList();
}); });
@ -191,6 +204,9 @@ const tabHeightFn = () => {
tabHeightFn(); tabHeightFn();
}; };
}; };
const chooseData = (val) => {
ids.value=val.map(item=>item.id)
}
</script> </script>
<style> <style>

View File

@ -43,7 +43,7 @@
format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" /> format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" />
</el-form-item> </el-form-item>
<el-form-item style="width: 40%" prop="czcs" label="处置措施"> <el-form-item style="width: 40%" prop="czcs" label="处置措施">
<el-select :disabled="forbidden" v-model="listQuery.czcs" placeholder="请选择布控颜色"> <el-select :disabled="forbidden" v-model="listQuery.czcs" placeholder="请选择处置措施">
<el-option v-for="dict in dict.D_BZ_CZCS" :key="dict.value" :value="dict.value" <el-option v-for="dict in dict.D_BZ_CZCS" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option> :label="dict.label"></el-option>
</el-select> </el-select>

View File

@ -24,8 +24,8 @@
<template #bkfs="{ row }"> <template #bkfs="{ row }">
{{ row.bkfs=='01'?"全省布控":"精准布控" }} {{ row.bkfs=='01'?"全省布控":"精准布控" }}
</template> </template>
<template #bkcs="{ row }"> <template #czcs="{ row }">
<dict-tag :value="row.yjys" :options="D_BZ_CZCS" :tag="false" /> <dict-tag :value="row.czcs" :options="D_BZ_CZCS" :tag="false" />
</template> </template>
<!-- <template #bkzt="{ row }"> <!-- <template #bkzt="{ row }">
<dict-tag :value="row.bkzt" :options="D_BZ_RCBKZT" :tag="false" /> <dict-tag :value="row.bkzt" :options="D_BZ_RCBKZT" :tag="false" />
@ -72,14 +72,14 @@ const { D_BZ_BKYS,D_BZ_CZCS } = proxy.$dict(
); );
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "布控名称", label: "姓名",
prop: "bkmc", prop: "xm",
placeholder: "请输入布控名称", placeholder: "请输入姓名",
showType: "input" showType: "input"
}, },
{ {
label: "证件号码", label: "证件号码",
prop: "bksfzh", prop: "zjhm",
placeholder: "请输入证件号码", placeholder: "请输入证件号码",
showType: "input" showType: "input"
}, },
@ -139,7 +139,7 @@ const pageData = reactive({
}, },
{ {
label: "布控措施", label: "布控措施",
prop: "bkcs", prop: "czcs",
showSolt: true, showSolt: true,
} }
] ]

View File

@ -42,7 +42,7 @@
format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" /> format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" />
</el-form-item> </el-form-item>
<el-form-item style="width: 40%" prop="czcs" label="处置措施"> <el-form-item style="width: 40%" prop="czcs" label="处置措施">
<el-select :disabled="forbidden" v-model="listQuery.czcs" placeholder="请选择布控颜色"> <el-select :disabled="forbidden" v-model="listQuery.czcs" placeholder="请选择处置措施">
<el-option v-for="dict in dict.D_BZ_CZCS" :key="dict.value" :value="dict.value" <el-option v-for="dict in dict.D_BZ_CZCS" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option> :label="dict.label"></el-option>
</el-select> </el-select>

View File

@ -28,7 +28,7 @@
{{ row.bkfs == '01' ? "全省布控" : "精准布控" }} {{ row.bkfs == '01' ? "全省布控" : "精准布控" }}
</template> </template>
<template #bkcs="{ row }"> <template #bkcs="{ row }">
<dict-tag :value="row.yjys" :options="D_BZ_CZCS" :tag="false" /> <dict-tag :value="row.czcs" :options="D_BZ_CZCS" :tag="false" />
</template> </template>
<!-- <template #bkzt="{ row }"> <!-- <template #bkzt="{ row }">
<dict-tag :value="row.bkzt" :options="D_BZ_RCBKZT" :tag="false" /> <dict-tag :value="row.bkzt" :options="D_BZ_RCBKZT" :tag="false" />
@ -74,16 +74,11 @@ const { D_BZ_BKYS, D_BZ_CZCS, D_BZ_CPHYS } = proxy.$dict(
"D_BZ_BKYS", "D_BZ_CZCS", "D_BZ_CPHYS" "D_BZ_BKYS", "D_BZ_CZCS", "D_BZ_CPHYS"
); );
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "布控名称", label: "车牌号码",
prop: "bkmc", prop: "cph",
placeholder: "请输入布控名称", placeholder: "请输入车牌号码",
showType: "input"
},
{
label: "证件号码",
prop: "bksfzh",
placeholder: "请输入证件号码",
showType: "input" showType: "input"
}, },

View File

@ -65,7 +65,12 @@ const { D_BZ_SF, D_BZ_MZ, D_BZ_XB, D_BZ_ZZMM,D_BZ_HYZK,D_BZ_WHCD } = proxy.$dict
"D_BZ_HYZK", "D_BZ_HYZK",
"D_BZ_WHCD" "D_BZ_WHCD"
); );
const searchConfiger = ref([ const searchConfiger = ref([ {
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
},
{ {
label: "姓名", label: "姓名",
prop: "xm", prop: "xm",
@ -85,12 +90,7 @@ const searchConfiger = ref([
showType: "select", showType: "select",
options: D_BZ_SF options: D_BZ_SF
}, },
{
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
}
]); ]);
const detailDiloag = ref(); const detailDiloag = ref();

View File

@ -0,0 +1,246 @@
<template>
<div class="dialog" v-if="dialogGzy">
<div class="head_box">
<span class="title">新增感知源</span>
<div>
<el-button size="small" type="primary" @click="_onSave">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form ref="formRef" :model="listQuery" :rules="rules" :inline="true" label-position="top">
<el-form-item style="width: 40%" label="感知源">
<el-input v-model="JczMc" disabled />
</el-form-item>
<el-form-item style="width: 40%" label="感知源">
<div class="diviput" @click="showJcz = true">
<span v-if="listQuery.sxtList&&listQuery.sxtList.length>0">
<el-tag closable @close="handleClose(index)" v-for="(item, index) in listQuery.sxtList" :key="index"> {{
item.sbmc }} </el-tag>
</span>
<span class="placeholder" v-else> 请选择感知源</span>
</div>
</el-form-item>
</el-form>
</div>
</div>
<Gzyloder v-model="showJcz" :Single="false" @choosedJcz="GzyMsg" :data="data" />
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import Gzyloder from '@/components/loder/Gzyloder.vue'
import { sxtBatch,JczselectById } from '@/api/mosty-jcz'
import { ElMessage } from "element-plus";
const emit=defineEmits(['getjczgetXfllList'])
const search = ref(null)
const listQuery = ref({})
onMounted(() => {
tabHeightFn()
console.log("xxxx");
});
const data = ref([])
const dialogGzy = ref(false)
const JczMc = ref()
// 初始化数据
const init = (row) => {
dialogGzy.value = true;
listQuery.value.jczid = row.id
JczMc.value = row.jczmc
JczselectById({id:row.id}).then(res => {
if(res){
listQuery.value.sxtList = res.sxtList?res.sxtList:[];
}
})
};
//保存
const _onSave = () => {
sxtBatch(listQuery.value).then((res) => {
console.log(res);
ElMessage({ message: "新增成功", type: "success" });
emit("getjczgetXfllList");
close()
});
};
const pageDatas = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 250, //操作栏宽度
tableColumn: [
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
{ label: "环林卡口名称", prop: "jczmc", showOverflowTooltip: true },
{
label: "环林卡口类型",
prop: "jczlx",
showOverflowTooltip: true,
showSolt: true
},
{
label: "执勤类型",
prop: "zqlx",
showSolt: true,
showOverflowTooltip: true
},
{
label: "环林卡口地址",
prop: "xxdz",
showOverflowTooltip: true
}
]
});
//页面关闭
const close = () => {
dialogGzy.value = false;
listQuery.value={}
};
// 表格高度计算
const tabHeightFn = () => {
console.log(search.value);
pageDatas.tableHeight = window.innerHeight - 370
// - search.value.offsetHeight - 280;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({ init });
const showJcz = ref(false)
const GzyMsg = (val) => {
listQuery.value.sxtList=val
}
const handleClose = (val) => {
listQuery.value.sxtList.splice(listQuery.value.sxtList.indexOf(val), 1)
}
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo {
// height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
}
.my_transfer {
height: calc(100% - 50px);
display: flex;
.btn {
width: 50px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 10px;
}
.left {
margin: 12px;
flex: 1;
position: relative;
.tableBox {
position: absolute;
width: 100%;
}
.serch {
position: relative;
width: 100%;
// height: 96px;
>.el-form--inline {
display: block;
width: 100%;
padding: 0;
>.el-form-item--default {
width: 31%;
}
}
}
.tableBox {
width: 100%;
}
}
.right {
width: 380px;
margin: 12px;
}
}
.phone {
width: 95px;
height: 120px;
.el-image {
width: 95px;
max-height: 120px;
}
}
::v-deep .el-upload {
width: 90px;
height: 100px;
border: 1px dashed #000000;
margin-bottom: 14px;
.el-icon {
margin-top: 34px;
font-size: 26px;
}
.el-image {
width: 100%;
height: 100%;
}
}
.mapbox {
width: 1000px;
padding: 0 10px;
height: 400px;
box-sizing: border-box;
background: #000;
}
.diviput {
width: 100%;
background-color: #ffffff;
border: 1px solid #c0c4cc;
color: #000;
min-height: 32px;
// line-height: 32px;
padding: 0 10px;
border-radius: 5px;
.placeholder {
color: #b5b5b5;
}
}
</style>

View File

@ -32,6 +32,7 @@
<template v-if="Auth"> <template v-if="Auth">
<el-link type="primary" @click="addEdit('edit', row)">修改</el-link> <el-link type="primary" @click="addEdit('edit', row)">修改</el-link>
<el-link type="primary" @click="delDictItem(row.id)">删除</el-link> <el-link type="primary" @click="delDictItem(row.id)">删除</el-link>
<el-link type="primary" @click="perceptionAdd(row)">新增感知源</el-link>
</template> </template>
<el-link type="primary" @click="addEdit('detail', row)">详情</el-link> <el-link type="primary" @click="addEdit('detail', row)">详情</el-link>
@ -45,12 +46,14 @@
<!-- 编辑详情 --> <!-- 编辑详情 -->
<EditAddForm ref="detailDiloag" :dict="{ D_BZ_JCZLX, D_BZ_ZQLX, D_BZ_DLLX, D_BZ_JCZJB }" <EditAddForm ref="detailDiloag" :dict="{ D_BZ_JCZLX, D_BZ_ZQLX, D_BZ_DLLX, D_BZ_JCZJB }"
@getjczgetXfllList="getjczgetXfllList" /> @getjczgetXfllList="getjczgetXfllList" />
<PerceptionSource ref="perceptionSource" @getjczgetXfllList="getjczgetXfllList"/>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import PerceptionSource from './components/perceptionSource.vue'
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
@ -200,6 +203,10 @@ const tabHeightFn = () => {
tabHeightFn(); tabHeightFn();
}; };
}; };
const perceptionSource = ref()
const perceptionAdd = (row) => {
perceptionSource.value.init(row)
};
</script> </script>
<style> <style>

View File

@ -127,7 +127,14 @@ const getjczgetXfllList = () => {
getjczgetXfllList(); getjczgetXfllList();
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryCondition.value = { ...queryCondition.value, ...val }; console.log(val);
const startTime = {
startTime : val.startTime[0],
endTime : val.startTime[1]
}
queryCondition.value = { ...queryCondition.value,...startTime};
getjczgetXfllList(); getjczgetXfllList();
}; };

View File

@ -21,18 +21,18 @@
v-model:modelValue="listQuery.ssbmdm" v-model:modelValue="listQuery.ssbmdm"
/> />
</el-form-item> </el-form-item>
<el-form-item label="设备编号" prop="qxbh"> <el-form-item label="器械编号" prop="qxbh">
<el-input <el-input
:disabled="forbidden" :disabled="forbidden"
v-model="listQuery.qxbh" v-model="listQuery.qxbh"
placeholder="请输入设备编号" placeholder="请输入器械编号"
clearable clearable
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
<el-form-item label="装备类型" prop="qxlx"> <el-form-item label="器械类型" prop="qxlx">
<el-select v-model="listQuery.qxlx" placeholder="请选择装备类型" :disabled="forbidden"> <el-select v-model="listQuery.qxlx" placeholder="请选择器械类型" :disabled="forbidden">
<el-option <el-option
v-for="item in dict.D_JCGL_JYQX_QXLX" v-for="item in dict.D_JCGL_JYQX_QXLX"
:key="item" :key="item"
@ -41,8 +41,8 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备分类" prop="scode"> <el-form-item label="器械分类" prop="scode">
<el-select v-model="listQuery.scode" placeholder="请选择设备分类" :disabled="forbidden"> <el-select v-model="listQuery.scode" placeholder="请选择器械分类" :disabled="forbidden">
<el-option <el-option
v-for="item in dict.D_BZ_JYQXFL" v-for="item in dict.D_BZ_JYQXFL"
:key="item" :key="item"
@ -51,18 +51,18 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="qxMc" label="装备名称"> <el-form-item prop="qxMc" label="器械名称">
<el-input :disabled="forbidden" <el-input :disabled="forbidden"
v-model="listQuery.qxMc" v-model="listQuery.qxMc"
placeholder="请输入装备名称" placeholder="请输入器械名称"
clearable clearable
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
<el-form-item label="装备型号"> <el-form-item label="器械型号">
<el-input :disabled="forbidden" <el-input :disabled="forbidden"
v-model="listQuery.xh" v-model="listQuery.xh"
placeholder="请输入装备型号" placeholder="请输入器械型号"
clearable clearable
style="width: 100%" style="width: 100%"
/> />
@ -78,7 +78,7 @@
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
<el-form-item label="装备状态"> <el-form-item label="器械状态">
<el-select :disabled="forbidden" <el-select :disabled="forbidden"
clearable clearable
v-model="listQuery.zbzt" v-model="listQuery.zbzt"
@ -93,10 +93,10 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="装备厂商"> <el-form-item label="器械厂商">
<el-input <el-input
v-model="listQuery.sccs" :disabled="forbidden" v-model="listQuery.sccs" :disabled="forbidden"
placeholder="请输入装备厂商" placeholder="请输入器械厂商"
clearable clearable
style="width: 100%" style="width: 100%"
/> />
@ -163,7 +163,7 @@ const rules = reactive({
], qxbh: [ ], qxbh: [
{ {
required: true, required: true,
message: "请输入设备编号", message: "请输入器械编号",
trigger: "change" trigger: "change"
} }
], ],
@ -194,7 +194,7 @@ const rules = reactive({
], scode: [ ], scode: [
{ {
required: true, required: true,
message: "请选择设备分类", message: "请选择器械分类",
trigger: "change" trigger: "change"
} }
], ],

View File

@ -83,9 +83,9 @@ const searchConfiger = ref([
label: "所属部门" label: "所属部门"
}, },
{ {
label: "设备名称", label: "器械名称",
prop: "sbmc", prop: "qxMc",
placeholder: "请输入设备名称", placeholder: "请输入器械名称",
showType: "input" showType: "input"
} }
// { // {

View File

@ -160,6 +160,11 @@ const imgUrl = ref("");
const dialogFormVisible = ref(false); const dialogFormVisible = ref(false);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
},{
label: "姓名", label: "姓名",
prop: "xm", prop: "xm",
placeholder: "请输入姓名", placeholder: "请输入姓名",
@ -171,19 +176,14 @@ const searchConfiger = ref([
placeholder: "请输入证件号码", placeholder: "请输入证件号码",
showType: "input" showType: "input"
}, },
{ // {
label: "是否离职", // label: "是否离职",
prop: "xtSjzt", // prop: "xtSjzt",
placeholder: "是否离职", // placeholder: "是否离职",
showType: "select", // showType: "select",
options: D_BZ_SF // options: D_BZ_SF
}, // },
{
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
}
]); ]);
const elform = ref(null) const elform = ref(null)
const detailDiloag = ref(); const detailDiloag = ref();

View File

@ -86,7 +86,8 @@ const searchConfiger = ref([
label: "车辆品牌", label: "车辆品牌",
prop: "clpp", prop: "clpp",
placeholder: "请输入车辆品牌", placeholder: "请输入车辆品牌",
showType: "input" showType: "select",
options: D_BZ_CLPP
} }
]); ]);

View File

@ -19,12 +19,12 @@
<span class="tag">{{ item.yjBt }}</span> <span class="tag">{{ item.yjBt }}</span>
</div> </div>
<div class="info-item flex"> <div class="info-item flex">
<span class="label">性别</span> <span class="label">性别{{ IdCard(item.yjRysfzh, 'all').sex }}</span>
<dict-tag <!-- <dict-tag
:options="D_BZ_XB" :options="D_BZ_XB"
:value="IdCard(item.yjRysfzh, 3)" :value="IdCard(item.yjRysfzh, 'all').sex"
:tag="false" :tag="false"
></dict-tag> ></dict-tag> -->
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">相似度</span> <span class="label">相似度</span>

View File

@ -21,14 +21,13 @@ const vehicleChartRef = ref(null);
const personChartRef = ref(null); const personChartRef = ref(null);
let vehicleChart = null; let vehicleChart = null;
let personChart = null; let personChart = null;
const createChartOption = (data, colors, total) => {
const createChartOption = (data, colors) => {
return { return {
title: { title: {
text: "100", text: `${total}`,
subtext: "总数", subtext: "总数",
left: "20%", left: 'center',
top: "center", top: 'center', //top待调整
textStyle: { textStyle: {
color: "#fff", color: "#fff",
fontSize: 24, fontSize: 24,
@ -43,9 +42,9 @@ const createChartOption = (data, colors) => {
trigger: "item" trigger: "item"
}, },
legend: { legend: {
orient: "vertical", orient: "horizontal",
left: "60%", top: 0,
top: "center", bottom: '50px',
textStyle: { textStyle: {
color: "#fff", color: "#fff",
rich: { rich: {
@ -71,14 +70,14 @@ const createChartOption = (data, colors) => {
}, },
formatter: (name) => { formatter: (name) => {
const item = data.find((d) => d.name === name); const item = data.find((d) => d.name === name);
return `${name} ${item.value} {${item.colorType}|(${item.value}%)}`; return `${name} ${item.value}`;
} }
}, },
series: [ series: [
{ {
type: "pie", type: "pie",
radius: ["55%", "70%"], radius: ["55%", "70%"],
center: ["28%", "50%"], center: ["50%", "55%"],
data: data.map((item) => ({ data: data.map((item) => ({
...item, ...item,
itemStyle: { itemStyle: {
@ -100,7 +99,7 @@ const createChartOption = (data, colors) => {
{ {
type: "pie", type: "pie",
radius: ["65%", "85%"], radius: ["65%", "85%"],
center: ["28%", "50%"], center: ["50%", "55%"],
data: data.map((item) => ({ data: data.map((item) => ({
...item, ...item,
itemStyle: { itemStyle: {
@ -128,13 +127,20 @@ const randomHexColor = () => {
}; };
const initCharts = async () => { const initCharts = async () => {
let clTotal = 0;
let ryTotal = 0;
vehicleChart = echarts.init(vehicleChartRef.value); vehicleChart = echarts.init(vehicleChartRef.value);
personChart = echarts.init(personChartRef.value); personChart = echarts.init(personChartRef.value);
const colors = ["#00f0ff", "#0066ff", "#ff9900", "#00cc66"]; const colors = ["#00f0ff", "#0066ff", "#ff9900", "#00cc66"];
// 车辆预警数据 // 车辆预警数据
const res = await jczgetYjbqtj({ yjLx: 1 }); const res = await jczgetYjbqtj({ yjLx: 1 });
const res2 = await jczgetYjbqtj({ yjLx: 2 }); const res2 = await jczgetYjbqtj({ yjLx: 2 });
console.log(res); console.log(res, 'res');
console.log(res2, 'res2');
clTotal = res2.map((el) => el.sl).reduce((accumulator, currentValue) => accumulator + currentValue, 0);
ryTotal = res.map((el) => el.sl).reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(clTotal, 'clTotal');
const vehicleData = res.map((item) => { const vehicleData = res.map((item) => {
const color = randomHexColor(); const color = randomHexColor();
const color2 = randomHexColor(); const color2 = randomHexColor();
@ -147,37 +153,6 @@ const initCharts = async () => {
}; };
}); });
// [
// {
// value: 25,
// name: "盗窃车辆",
// colorType: "blue",
// color: ["#00f0ff", "#00a0cc"],
// color1: [choseRbgb("#00f0ff", 0.3), choseRbgb("#00a0cc", 0.3)]
// },
// {
// value: 30,
// name: "车牌与车辆不符",
// colorType: "lightBlue",
// color: ["#0066ff", "#0044cc"],
// color1: [choseRbgb("#0066ff", 0.3), choseRbgb("#0044cc", 0.3)]
// },
// {
// value: 17,
// name: "车辆超高",
// colorType: "orange",
// color: ["#ff9900", "#cc7a00"],
// color1: [choseRbgb("#ff9900", 0.3), choseRbgb("#cc7a00", 0.3)]
// },
// {
// value: 28,
// name: "车辆超限",
// colorType: "green",
// color: ["#00cc66", "#009944"],
// color1: [choseRbgb("#00cc66", 0.3), choseRbgb("#009944", 0.3)]
// }
// ];
// 人员预警数据 // 人员预警数据
const personData = res2.map((item) => { const personData = res2.map((item) => {
const color = randomHexColor(); const color = randomHexColor();
@ -220,8 +195,8 @@ const initCharts = async () => {
// color1: [choseRbgb("#00cc66", 0.3), choseRbgb("#009944", 0.3)] // color1: [choseRbgb("#00cc66", 0.3), choseRbgb("#009944", 0.3)]
// } // }
// ]; // ];
vehicleChart.setOption(createChartOption(vehicleData, colors)); vehicleChart.setOption(createChartOption(vehicleData, colors, ryTotal));
personChart.setOption(createChartOption(personData, colors)); personChart.setOption(createChartOption(personData, colors, clTotal));
}; };
const handleResize = () => { const handleResize = () => {
@ -253,7 +228,7 @@ onUnmounted(() => {
.section-title { .section-title {
font-size: 18px; font-size: 18px;
margin-bottom: 20px; // margin-bottom: 20px;
position: relative; position: relative;
padding-left: 12px; padding-left: 12px;
background: linear-gradient(0deg, #59a6f4 0%, #ffffff 90%); background: linear-gradient(0deg, #59a6f4 0%, #ffffff 90%);

View File

@ -49,13 +49,13 @@
import GdMap from "@/components/GdMap/index.vue"; import GdMap from "@/components/GdMap/index.vue";
import Head from "./layout/head.vue"; import Head from "./layout/head.vue";
import Collection from "./components/collection.vue"; import Collection from "./components/collection.vue";
// import Warning from "./components/warning.vue";
import CarWarning from "./components/CarWarning.vue"; import CarWarning from "./components/CarWarning.vue";
import PeoWarning from "./components/PeoWarning.vue"; import PeoWarning from "./components/PeoWarning.vue";
import BeOnDuty from "./components/beonDuty.vue"; import BeOnDuty from "./components/beonDuty.vue";
import Entrance from "./components/entrance.vue"; import Entrance from "./components/entrance.vue";
import WanringAnyse from "./components/wanringAnyse.vue"; import WanringAnyse from "./components/wanringAnyse.vue";
import { jczgetJczList } from "@/api/mosty-jcz"; import { jczgetJczList } from "@/api/mosty-jcz";
import {ysSxtGetList} from '@/api/yszx.js'
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
@ -80,6 +80,17 @@ onMounted(() => {
} }
}); });
}); });
const sxtGetList = () => {
ysSxtGetList().then(res => {
emitter.emit("addPointArea", {
coords: res,
icon: require("@/assets/point/sp.png"),
flag: "jczMap_Gzy"
});
})
}
sxtGetList()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -146,4 +157,5 @@ onMounted(() => {
box-sizing: border-box; box-sizing: border-box;
} }
} }
</style> </style>

View File

@ -5,14 +5,14 @@
<div class="f18 pl104">{{ hour + ":" + minute + ":" + second }}</div> <div class="f18 pl104">{{ hour + ":" + minute + ":" + second }}</div>
</div> </div>
<div class="title absolute" @click="goPath">{{ props.title }}</div> <div class="title absolute" @click="goPath">{{ props.title }}</div>
<div class="wd absolute"> <!-- <div class="wd absolute">
<el-icon size="25px" style="top: 6px" color="#86C8EB"><Sunny /></el-icon> <el-icon size="25px" style="top: 6px" color="#86C8EB"><Sunny /></el-icon>
<span> 温度 1~7°C </span> <span> 温度 1~7°C </span>
</div> </div> -->
<div class="zbbb" v-if="query" @click="show = true">值班报备</div> <div class="zbbb" v-if="query" @click="show = true">值班报备</div>
</div> </div>
<el-dialog v-model="show" title="Shipping address"> <el-dialog v-model="show" title="Shipping address">
<div style="height: 50vh; overflow: auto"> <div style="height: 50vh; overflow: auto" v-if="show">
<zbbb <zbbb
:row="row" :row="row"
@close="close" @close="close"

View File

@ -1,6 +1,4 @@
<template> <template>
<div></div>
<div class="cntinfo"> <div class="cntinfo">
<div class="flex align-center just-between box"> <div class="flex align-center just-between box">
<div class="flex align-center"> <div class="flex align-center">
@ -12,7 +10,7 @@
/> />
</div> </div>
<!-- v-if="['add', 'edit'].includes(pageType)" --> <!-- v-if="['add', 'edit'].includes(pageType)" -->
<el-button size="small" type="primary" @click="_onSave">保存</el-button> <el-button size="small" type="primary" @click="_onSave" :disabled="loding">保存</el-button>
</div> </div>
<el-form <el-form
ref="formRef" ref="formRef"
@ -51,7 +49,7 @@
<div class="bblxItem"> <div class="bblxItem">
<div class="btItem">班次设置</div> <div class="btItem">班次设置</div>
<div class="info"> <div class="info">
<el-form-item prop="kssj"> <el-form-item prop="bcKssj" label=" ">
<el-time-picker <el-time-picker
v-model="listQuery.bcKssj" v-model="listQuery.bcKssj"
:disabled="isDetail" :disabled="isDetail"
@ -60,7 +58,7 @@
value-format="HH:mm:ss" value-format="HH:mm:ss"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="bcKts"> <el-form-item prop="bcKtsDict" label=" ">
<el-select <el-select
clearable clearable
v-model="listQuery.bcKtsDict" v-model="listQuery.bcKtsDict"
@ -75,7 +73,7 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="jssj"> <el-form-item prop="bcJssj" label=" ">
<el-time-picker <el-time-picker
v-model="listQuery.bcJssj" v-model="listQuery.bcJssj"
:disabled="isDetail" :disabled="isDetail"
@ -103,7 +101,7 @@
:dic="props.dic" :dic="props.dic"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="fzrXm"> <el-form-item prop="fzrXm" label=" ">
<el-input <el-input
readonly readonly
v-model="listQuery.fzrXm" v-model="listQuery.fzrXm"
@ -111,7 +109,7 @@
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item prop="fzrSfzh"> <el-form-item prop="fzrSfzh" label=" ">
<el-input <el-input
readonly readonly
v-model="listQuery.fzrSfzh" v-model="listQuery.fzrSfzh"
@ -119,7 +117,7 @@
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item prop="fzrLxdh"> <el-form-item prop="fzrLxdh" label=" ">
<el-input <el-input
readonly readonly
v-model="listQuery.fzrLxdh" v-model="listQuery.fzrLxdh"
@ -307,11 +305,13 @@
<script setup> <script setup>
import { ref, reactive, getCurrentInstance, onMounted, watch } from "vue"; import { ref, reactive, getCurrentInstance, onMounted, watch } from "vue";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import { jczqueryById } from "@/api/mosty-jcz";
import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js"; import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import ChooseTable from "@/components/chooseList/chooseTable.vue"; import ChooseTable from "@/components/chooseList/chooseTable.vue";
import { timeValidate } from "@/utils/tools.js"; import { timeValidate } from "@/utils/tools.js";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import emitter from "@/utils/eventBus.js";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
// const { D_BZ_JYQXFL } = proxy.$dict("D_BZ_JYQXFL"); // const { D_BZ_JYQXFL } = proxy.$dict("D_BZ_JYQXFL");
const props = defineProps({ const props = defineProps({
@ -394,7 +394,6 @@ const init = (type) => {
} }
} else { } else {
pageType.value = "add"; pageType.value = "add";
listQuery.value.qxList = props.dic.D_BZ_JYQXFL.map((item) => { listQuery.value.qxList = props.dic.D_BZ_JYQXFL.map((item) => {
return { qxmc: item.label, qxsl: 0 }; return { qxmc: item.label, qxsl: 0 };
}); });
@ -416,17 +415,43 @@ onMounted(() => {
}); });
// 验证规则 // 验证规则
const rules = ref({ const rules = ref({
spbt: [ bcKtsDict: [
{ {
required: true, required: true,
message: "请输入标题", message: "请选择班次",
trigger: "blur" trigger: "blur"
} }
] ],
bcKssj: [
{
required: true,
message: "请选择开始时间",
trigger: "blur"
}
], bcJssj: [
{
required: true,
message: "请选择结束时间",
trigger: "blur"
}
], fzrXm: [
{
required: true,
message: "请输入负责人",
trigger: "blur"
}
], fzrSfzh: [
{
required: true,
message: "请输入身份证",
trigger: "blur"
}
],
}); });
//保存 //保存
const loding = ref(false);
const _onSave = () => { const _onSave = () => {
formRef.value.validate().then( async() => {
const data = [...mjData.value, ...fjData.value]; const data = [...mjData.value, ...fjData.value];
listQuery.value.ryList = ChegeMj(data); listQuery.value.ryList = ChegeMj(data);
@ -438,33 +463,61 @@ const _onSave = () => {
break; break;
case "02": case "02":
listQuery.value.bcKts = 2; listQuery.value.bcKts = 2;
break;
case "03": case "03":
listQuery.value.bcKts = 4; listQuery.value.bcKts = 4;
break;
case "04": case "04":
listQuery.value.bcKts = 5; listQuery.value.bcKts = 5;
break;
case "05": case "05":
listQuery.value.bcKts = 6; listQuery.value.bcKts = 6;
break;
case "06": case "06":
listQuery.value.bcKts = 7; listQuery.value.bcKts = 7;
break;
case "07": case "07":
listQuery.value.bcKts = 8; listQuery.value.bcKts = 8;
break;
} }
listQuery.value.jczid = routerList.value.id?routerList.value.id:""; listQuery.value.jczid = routerList.value.id?routerList.value.id:"";
listQuery.value.jczmc = routerList.value.name?routerList.value.name:""; listQuery.value.jczmc = routerList.value.name?routerList.value.name:"";
if (pageType.value == "add") { if (pageType.value == "add") {
jczsavel(listQuery.value).then((res) => { jczsavel(listQuery.value).then((res) => {
ElMessage({ message: "新增成功", type: "success" }); ElMessage({ message: "新增成功", type: "success" });
getjczqueryById()
emit("close"); emit("close");
}).finally(()=>{
loding.value=false
}); });
} else { } else {
Xfbbupdate(listQuery.value).then((res) => { Xfbbupdate(listQuery.value).then((res) => {
ElMessage({ message: "修改成功", type: "success" }); ElMessage({ message: "修改成功", type: "success" });
getjczqueryById()
emit("close"); emit("close");
}).finally(()=>{
loding.value=false
}); });
} }
};
}).catch(() => { });
};
const getjczqueryById = () => {
jczqueryById({ jczid: props.jczId }).then((res) => {
if (res) {
emitter.emit("getjczqueryById",res);
// warningList.value.qxList =res.qxList&&res.qxList.length>0
// ? res.qxList.filter((item) => item.qxsl > 0)
// : [];
// warningList.value.ryList = res.ryList.length>0 ? res.ryList : [];
// warningList.value.clList = res.clList.length>0 ? res.clList : [];
// warningList.value.sbList = [...res.tcList, ...res.zdList]
// emitter.emit("chengZ", res);
} else {
// warningList.value = res;
}
});
};
// //
const close = () => { const close = () => {
dialogForm.value = false; dialogForm.value = false;
@ -621,4 +674,7 @@ const changeJCZ = (val) => {
.box { .box {
margin-bottom: 10px; margin-bottom: 10px;
} }
::v-deep .el-form-item__label{
padding: 0;
}
</style> </style>

View File

@ -0,0 +1,42 @@
<template></template>
<script setup>
import { ref, onMounted } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import {
setItem
} from "@/utils/storage";
const loginDialog = ref(false);
const deptList = ref([]);
const store = useStore();
function redirectAuth() {
let token = location.hash.slice(20) || null;
if (token != null) {
token = token.replace(/\ +/g, "");
setItem("SSOTOKEN", token)
handleLogin({ token: token});
} else {
window.location.href = `http://155.240.22.188:9020`;
}
}
const handleLogin = (e) => {
store.dispatch("user/oatuhLogin", e).then((res) => {
// 登录后操作
if (res.deptList.length === 1) {
// window.location.hash = "/";
} else {
deptList.value = [...res.deptList];
loginDialog.value = true;
authorization.value = res.jwtToken;
}
});
};
onMounted(() => {
redirectAuth();
});
</script>
<style></style>

View File

@ -9,7 +9,7 @@ const serverHost = "http://192.168.1.32:8066"
// const serverHost = "http://127.0.0.1:8006" // const serverHost = "http://127.0.0.1:8006"
module.exports = { module.exports = {
publicPath: "./", publicPath: "./",
outputDir: "ylth", outputDir: "jcz",
assetsDir: "static", assetsDir: "static",
lintOnSave: false, //process.env.NODE_ENV === 'development', lintOnSave: false, //process.env.NODE_ENV === 'development',
productionSourceMap: false, productionSourceMap: false,

View File

@ -1,738 +0,0 @@
(function(b, c, a) {
c[b] = a()
})("h337", this, function() {
var c = {
defaultRadius: 40,
defaultRenderer: "canvas2d",
defaultGradient: {
0.35: "rgb(0,0,255)",
0.45: "rgb(0,255,255)",
0.75: "rgb(0,255,0)",
0.85: "yellow",
1: "rgb(255,0,0)"
},
defaultMaxOpacity: 1,
defaultMinOpacity: 0,
defaultBlur: 0.85,
defaultXField: "x",
defaultYField: "y",
defaultValueField: "value",
plugins: {}
};
var g = (function l() {
var n = function n(o) {
this._coordinator = {};
this._data = [];
this._radi = [];
this._min = 0;
this._max = 1;
this._xField = o.xField || o.defaultXField;
this._yField = o.yField || o.defaultYField;
this._valueField = o.valueField || o.defaultValueField;
if (o.radius) {
this._cfgRadius = o.radius
}
};
var m = c.defaultRadius;
n.prototype = {
_organiseData: function(o, q) {
var u = o[this._xField];
var s = o[this._yField];
var z = this._radi;
var w = this._data;
var t = this._max;
var p = this._min;
var v = o[this._valueField] || 1;
var r = o.radius || this._cfgRadius || m;
if (!w[u]) {
w[u] = [];
z[u] = []
}
if (!w[u][s]) {
w[u][s] = v;
z[u][s] = r
} else {
w[u][s] += v
}
if (w[u][s] > t) {
if (!q) {
this._max = w[u][s]
} else {
this.setDataMax(w[u][s])
}
return false
} else {
return {
x: u,
y: s,
value: v,
radius: r,
min: p,
max: t
}
}
},
_unOrganizeData: function() {
var r = [];
var q = this._data;
var p = this._radi;
for (var o in q) {
for (var s in q[o]) {
r.push({
x: o,
y: s,
radius: p[o][s],
value: q[o][s]
})
}
}
return {
min: this._min,
max: this._max,
data: r
}
},
_onExtremaChange: function() {
this._coordinator.emit("extremachange", {
min: this._min,
max: this._max
})
},
addData: function() {
if (arguments[0].length > 0) {
var p = arguments[0];
var o = p.length;
while (o--) {
this.addData.call(this, p[o])
}
} else {
var q = this._organiseData(arguments[0], true);
if (q) {
this._coordinator.emit("renderpartial", {
min: this._min,
max: this._max,
data: [q]
})
}
}
return this
},
setData: function(q) {
var p = q.data;
var r = p.length;
this._data = [];
this._radi = [];
for (var o = 0; o < r; o++) {
this._organiseData(p[o], false)
}
this._max = q.max;
this._min = q.min || 0;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
removeData: function() {},
setDataMax: function(o) {
this._max = o;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
setDataMin: function(o) {
this._min = o;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
setCoordinator: function(o) {
this._coordinator = o
},
_getInternalData: function() {
return {
max: this._max,
min: this._min,
data: this._data,
radi: this._radi
}
},
getData: function() {
return this._unOrganizeData()
}
};
return n
})();
var h = (function j() {
var p = function(q) {
var s = q.gradient || q.defaultGradient;
var v = document.createElement("canvas");
var u = v.getContext("2d");
v.width = 256;
v.height = 1;
var t = u.createLinearGradient(0, 0, 256, 1);
for (var r in s) {
t.addColorStop(r, s[r])
}
u.fillStyle = t;
u.fillRect(0, 0, 256, 1);
return u.getImageData(0, 0, 256, 1).data
};
var o = function(s, t) {
var v = document.createElement("canvas");
var r = v.getContext("2d");
var q = s;
var w = s;
v.width = v.height = s * 2;
if (t == 1) {
r.beginPath();
r.arc(q, w, s, 0, 2 * Math.PI, false);
r.fillStyle = "rgba(0,0,0,1)";
r.fill()
} else {
var u = r.createRadialGradient(q, w, s * t, q, w, s);
u.addColorStop(0, "rgba(0,0,0,1)");
u.addColorStop(1, "rgba(0,0,0,0)");
r.fillStyle = u;
r.fillRect(0, 0, 2 * s, 2 * s)
}
return v
};
var n = function(u) {
var B = [];
var t = u.min;
var x = u.max;
var C = u.radi;
var u = u.data;
var q = Object.keys(u);
var r = q.length;
while (r--) {
var s = q[r];
var y = Object.keys(u[s]);
var A = y.length;
while (A--) {
var w = y[A];
var z = u[s][w];
var v = C[s][w];
B.push({
x: s,
y: w,
value: z,
radius: v
})
}
}
return {
min: t,
max: x,
data: B
}
};
function m(t) {
var q = t.element;
var u = this.shadowCanvas = document.createElement("canvas");
var s = this.canvas = t.canvas || document.createElement("canvas");
var r = this._renderBoundaries = [10000, 10000, 0, 0];
var v = getComputedStyle(t.element) || {};
s.className = "heatmap-canvas";
this._width = s.width = u.width = +(v.width.replace(/px/, ""));
this._height = s.height = u.height = +(v.height.replace(/px/, ""));
this.shadowCtx = u.getContext("2d");
this.ctx = s.getContext("2d");
s.style.cssText = u.style.cssText = "position:absolute;left:0;top:0;";
q.style.position = "relative";
q.appendChild(s);
this._palette = p(t);
this._templates = {};
this._setStyles(t)
}
m.prototype = {
renderPartial: function(q) {
this._drawAlpha(q);
this._colorize()
},
renderAll: function(q) {
this._clear();
this._drawAlpha(n(q));
this._colorize()
},
_updateGradient: function(q) {
this._palette = p(q)
},
updateConfig: function(q) {
if (q.gradient) {
this._updateGradient(q)
}
this._setStyles(q)
},
setDimensions: function(r, q) {
this._width = r;
this._height = q;
this.canvas.width = this.shadowCanvas.width = r;
this.canvas.height = this.shadowCanvas.height = q
},
_clear: function() {
this.shadowCtx.clearRect(0, 0, this._width, this._height);
this.ctx.clearRect(0, 0, this._width, this._height)
},
_setStyles: function(q) {
this._blur = (q.blur == 0) ? 0 : (q.blur || q.defaultBlur);
if (q.backgroundColor) {
this.canvas.style.backgroundColor = q.backgroundColor
}
this._opacity = (q.opacity || 0) * 255;
this._maxOpacity = (q.maxOpacity || q.defaultMaxOpacity) * 255;
this._minOpacity = (q.minOpacity || q.defaultMinOpacity) * 255;
this._useGradientOpacity = !!q.useGradientOpacity
},
_drawAlpha: function(v) {
var u = this._min = v.min;
var B = this._max = v.max;
var v = v.data || [];
var s = v.length;
var t = 1 - this._blur;
while (s--) {
var F = v[s];
var D = F.x;
var A = F.y;
var z = F.radius;
var E = Math.min(F.value, B);
var r = D - z;
var q = A - z;
var C = this.shadowCtx;
var w;
if (!this._templates[z]) {
this._templates[z] = w = o(z, t)
} else {
w = this._templates[z]
}
C.globalAlpha = (E - u) / (B - u);
C.drawImage(w, r, q);
if (r < this._renderBoundaries[0]) {
this._renderBoundaries[0] = r
}
if (q < this._renderBoundaries[1]) {
this._renderBoundaries[1] = q
}
if (r + 2 * z > this._renderBoundaries[2]) {
this._renderBoundaries[2] = r + 2 * z
}
if (q + 2 * z > this._renderBoundaries[3]) {
this._renderBoundaries[3] = q + 2 * z
}
}
},
_colorize: function() {
var w = this._renderBoundaries[0];
var u = this._renderBoundaries[1];
var B = this._renderBoundaries[2] - w;
var z = this._renderBoundaries[3] - u;
var G = this._width;
var A = this._height;
var r = this._opacity;
var I = this._maxOpacity;
var C = this._minOpacity;
var v = this._useGradientOpacity;
if (w < 0) {
w = 0
}
if (u < 0) {
u = 0
}
if (w + B > G) {
B = G - w
}
if (u + z > A) {
z = A - u
}
var J = this.shadowCtx.getImageData(w, u, B, z);
var H = J.data;
var E = H.length;
var F = this._palette;
for (var D = 3; D < E; D += 4) {
var s = H[D];
var t = s * 4;
if (!t) {
continue
}
var q;
if (r > 0) {
q = r
} else {
if (s < I) {
if (s < C) {
q = C
} else {
q = s
}
} else {
q = I
}
}
H[D - 3] = F[t];
H[D - 2] = F[t + 1];
H[D - 1] = F[t + 2];
H[D] = v ? F[t + 3] : q
}
J.data = H;
this.ctx.putImageData(J, w, u);
this._renderBoundaries = [1000, 1000, 0, 0]
},
getValueAt: function(r) {
var w;
var t = this.shadowCtx;
var s = t.getImageData(r.x, r.y, 1, 1);
var v = s.data[3];
var q = this._max;
var u = this._min;
w = (Math.abs(q - u) * (v / 255)) >> 0;
return w
},
getDataURL: function() {
return this.canvas.toDataURL()
}
};
return m
})();
var e = (function b() {
var m = false;
if (c.defaultRenderer === "canvas2d") {
m = h
}
return m
})();
var i = {
merge: function() {
var m = {};
var n = arguments.length;
for (var p = 0; p < n; p++) {
var q = arguments[p];
for (var o in q) {
m[o] = q[o]
}
}
return m
}
};
var f = (function k() {
var m = (function o() {
function q() {
this.cStore = {}
}
q.prototype = {
on: function(s, u, r) {
var t = this.cStore;
if (!t[s]) {
t[s] = []
}
t[s].push((function(v) {
return u.call(r, v)
}))
},
emit: function(u, t) {
var w = this.cStore;
if (w[u]) {
var r = w[u].length;
for (var s = 0; s < r; s++) {
var v = w[u][s];
v(t)
}
}
}
};
return q
})();
var p = function(r) {
var s = r._renderer;
var t = r._coordinator;
var q = r._store;
t.on("renderpartial", s.renderPartial, s);
t.on("renderall", s.renderAll, s);
t.on("extremachange", function(u) {
r._config.onExtremaChange && r._config.onExtremaChange({
min: u.min,
max: u.max,
gradient: r._config.gradient || r._config.defaultGradient
})
});
q.setCoordinator(t)
};
function n() {
var q = this._config = i.merge(c, arguments[0] || {});
this._coordinator = new m();
if (q.plugin) {
var s = q.plugin;
if (!c.plugins[s]) {
throw new Error("Plugin '" + s + "' not found. Maybe it was not registered.")
} else {
var r = c.plugins[s];
this._renderer = new r.renderer(q);
this._store = new r.store(q)
}
} else {
this._renderer = new e(q);
this._store = new g(q)
}
p(this)
}
n.prototype = {
addData: function() {
this._store.addData.apply(this._store, arguments);
return this
},
removeData: function() {
this._store.removeData && this._store.removeData.apply(this._store, arguments);
return this
},
setData: function() {
this._store.setData.apply(this._store, arguments);
return this
},
setDataMax: function() {
this._store.setDataMax.apply(this._store, arguments);
return this
},
setDataMin: function() {
this._store.setDataMin.apply(this._store, arguments);
return this
},
configure: function(q) {
this._config = i.merge(this._config, q);
this._renderer.updateConfig(this._config);
this._coordinator.emit("renderall", this._store._getInternalData());
return this
},
repaint: function() {
this._coordinator.emit("renderall", this._store._getInternalData());
return this
},
getData: function() {
return this._store.getData()
},
getDataURL: function() {
return this._renderer.getDataURL()
},
getValueAt: function(q) {
if (this._store.getValueAt) {
return this._store.getValueAt(q)
} else {
if (this._renderer.getValueAt) {
return this._renderer.getValueAt(q)
} else {
return null
}
}
}
};
return n
})();
var a = {
create: function(m) {
return new f(m)
},
register: function(n, m) {
c.plugins[n] = m
}
};
return a
});
var BMapLib = window.BMapLib = BMapLib || {};
(function() {
var a = BMapLib.HeatmapOverlay = function(c) {
this.conf = c;
this.conf.visible = c.visible === undefined ? true : c.visible;
this.heatmap = null;
this.latlngs = [];
this.bounds = null
};
a.prototype = new BMapGL.Overlay();
a.prototype.initialize = function(f) {
this._map = f;
var c = document.createElement("div");
c.style.position = "absolute";
c.style.top = 0;
c.style.left = 0;
c.style.border = 0;
c.style.width = this._map.getSize().width + "px";
c.style.height = this._map.getSize().height + "px";
this.conf.element = c;
if (!b()) {
return c
}
f.getPanes().floatPane.appendChild(c);
this.conf.valueField = this.conf.valueField || "count";
this.heatmap = h337.create(this.conf);
var e = this;
f.addEventListener("resize", function(h) {
var g = h.size;
c.style.width = g.width + "px";
c.style.height = g.height + "px";
e.heatmap._renderer.setDimensions(g.width, g.height);
e.draw()
});
this._div = c;
return c
};
a.prototype.draw = function() {
if (!b()) {
return
}
var k = this._map.getBounds();
if (k.equals(this.bounds)) {
return
}
this.bounds = k;
var j = this._map.pointToOverlayPixel(k.getNorthEast()),
p = this._map.pointToOverlayPixel(k.getSouthWest()),
c = j.y,
i = p.x,
l = p.y - j.y,
o = j.x - p.x;
this.conf.element.style.left = i + "px";
this.conf.element.style.top = c + "px";
this.conf.element.style.width = o + "px";
this.conf.element.style.height = l + "px";
if (this.latlngs.length > 0) {
this.heatmap.removeData();
var n = this.latlngs.length;
d = {
max: this.heatmap._store.getData().max,
data: []
};
while (n--) {
var f = this.latlngs[n].latlng;
if (!k.containsPoint(f)) {
continue
}
var g = this._map.pointToOverlayPixel(f),
i = this._map.pointToOverlayPixel(k.getSouthWest()).x,
c = this._map.pointToOverlayPixel(k.getNorthEast()).y,
e = new BMapGL.Pixel(g.x - i, g.y - c);
var m = this.pixelTransform(e);
d.data.push({
x: m.x,
y: m.y,
count: this.latlngs[n].c
})
}
if (this.conf.radiusChangeByZoom) {
this.heatmap._store._cfgRadius = this.conf.radiusChangeByZoom(this._map.getZoom())
}
this.heatmap.setData(d)
}
};
a.prototype.pixelTransform = function(f) {
var c = this.heatmap.width,
e = this.heatmap.height;
while (f.x < 0) {
f.x += c
}
while (f.x > c) {
f.x -= c
}
while (f.y < 0) {
f.y += e
}
while (f.y > e) {
f.y -= e
}
f.x = (f.x >> 0);
f.y = (f.y >> 0);
return f
};
a.prototype.setDataSet = function(j) {
this.data = j;
if (!b()) {
return
}
var i = this._map.getBounds();
var l = {
max: j.max,
data: []
};
var m = j.data,
k = m.length;
this.latlngs = [];
this.heatmap.removeData();
if (this.conf.radiusChangeByZoom) {
this.heatmap._store._cfgRadius = this.conf.radiusChangeByZoom(this._map.getZoom())
}
while (k--) {
var f = new BMapGL.Point(m[k].lng, m[k].lat);
this.latlngs.push({
latlng: f,
c: m[k].count
});
if (!i.containsPoint(f)) {
continue
}
var g = this._map.pointToOverlayPixel(f),
h = this._map.pointToOverlayPixel(i.getSouthWest()).x,
c = this._map.pointToOverlayPixel(i.getNorthEast()).y,
e = new BMapGL.Pixel(g.x - h, g.y - c);
var n = this.pixelTransform(e);
l.data.push({
x: n.x,
y: n.y,
count: m[k].count
})
}
this.heatmap.setData(l)
};
a.prototype.addDataPoint = function(e, g, f) {
if (!b()) {
return
}
if (this.data && this.data.data) {
this.data.data.push({
lng: e,
lat: g,
count: f
})
}
var h = new BMapGL.Point(e, g),
c = this.pixelTransform(this._map.pointToOverlayPixel(h));
this.heatmap.store.addDataPoint(c.x, c.y, f);
this.latlngs.push({
latlng: h,
c: f
})
};
a.prototype.toggle = function() {
if (!b()) {
return
}
if (this.conf.visible === true) {
this.conf.visible = false
} else {
this.conf.visible = true
}
if (this.conf.visible) {
this.conf.element.style.display = "block"
} else {
this.conf.element.style.display = "none"
}
};
a.prototype.setOptions = function(c) {
if (!b()) {
return
}
for (var e in c) {
if (e == "radius") {
this.heatmap._store._cfgRadius = c[e]
}
if (e == "opacity") {
c[e] = c[e] / 100
}
}
this.heatmap.configure(c);
if (this.data) {
this.setDataSet(this.data)
}
};
function b() {
var c = document.createElement("canvas");
return !!(c.getContext && c.getContext("2d"))
}
})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +0,0 @@

Microsoft YaHei 10240-10495

View File

@ -1,3 +0,0 @@

Microsoft YaHei 10496-10751

View File

@ -1,3 +0,0 @@

Microsoft YaHei 10752-11007

View File

@ -1,3 +0,0 @@

Microsoft YaHei 11008-11263

View File

@ -1,3 +0,0 @@

Microsoft YaHei 11264-11519

View File

@ -1,3 +0,0 @@

Microsoft YaHei 11520-11775

View File

@ -1,3 +0,0 @@

Microsoft YaHei 1280-1535

View File

@ -1,3 +0,0 @@

Microsoft YaHei 1536-1791

View File

@ -1,3 +0,0 @@

Microsoft YaHei 1792-2047

View File

@ -1,3 +0,0 @@

Microsoft YaHei 2048-2303

Some files were not shown because too many files have changed in this diff Show More