This commit is contained in:
lcw
2025-07-21 17:47:27 +08:00
parent 1b567a8e75
commit 30d5a663ef
111 changed files with 1663 additions and 393 deletions

136
package-lock.json generated
View File

@ -2043,51 +2043,6 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"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": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
@ -2096,28 +2051,6 @@
"requires": {
"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": {
"version": "4.1.3",
"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"
});
};
// 检查站详情
export const JczselectById = (params) => {
return request({
url: api + `/jcz/selectById`,
method: "get",
params
});
};
//盘查管理
// 人
export const BpcryselectCrewList = (params) => {
@ -438,11 +450,11 @@ export const GjrytxeditEntity = (data) => {
});
};
// 查询过检人员图像
export const GjrytxselectPage = (data) => {
export const GjrytxselectPage = (params) => {
return request({
url: api + `/jczGjrytx/selectPage`,
method: "get",
data
params
});
};
// 删除过检人员图像
@ -670,3 +682,35 @@ export const tbJczXfbbdeleteJyQxzb = (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
});
},
}

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 {
position: relative;
}
.absolute {
position: absolute;
}
@ -159,9 +160,11 @@
.flex {
display: flex;
}
.flex-grow1 {
flex-grow: 1;
}
.shrink0 {
flex-shrink: 0;
}
@ -169,6 +172,7 @@
.flex-warp {
flex-wrap: wrap;
}
.flex-nowrap {
flex-wrap: nowrap;
}
@ -180,6 +184,7 @@
.just-between {
justify-content: space-between;
}
.just-around {
justify-content: space-around;
}
@ -207,11 +212,13 @@
.align-bottom {
align-items: flex-end;
}
.flexcc {
display: flex;
justify-content: center;
align-items: center;
}
.flexcb {
display: flex;
justify-content: space-between;
@ -317,11 +324,11 @@
}
.ww#{$i} {
width: #{$i}+ "%";
width: #{$i}+"%";
}
.hh#{$i} {
height: #{$i}+ "%";
height: #{$i}+"%";
}
//高度
@ -333,26 +340,32 @@
.lh#{$i} {
line-height: #{$i}px;
}
//自适应大号字体(通常为统计数字 18-30)
.font_size_big {
font-size: clamp(1.125rem, -0.894rem + 2.31vw, 1.875rem);
}
//自适应一号字体(通常为一级标题 14-18)
.font_size_title {
font-size: clamp(0.875rem, 0.37rem + 0.58vw, 1.063rem);
}
//自适应统计字体(通常为统计数字 14-22)
.font_size1 {
font-size: clamp(0.875rem, -0.471rem + 1.54vw, 1.375rem);
}
//自适应二号字体(通常为二级标题 14-16)
.font_size2 {
font-size: clamp(0.75rem, 0.077rem + 0.77vw, 1rem);
}
//自适应普通字体(通常为默认大小 10-14)
.font_size_default {
font-size: clamp(0.625rem, -0.048rem + 0.77vw, 0.875rem);
}
.flex#{$i} {
flex: #{$i};
}
@ -364,9 +377,29 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "HANYILINGXINTIJIAN";
src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF");
font-weight: 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,8 +1,7 @@
<template>
<div :id="mapid" class="map"></div>
<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-item>
<div class="mapImageItem">
@ -75,7 +74,7 @@ const props = defineProps({
});
try {
const userInfo = getItem("deptId")[0].deptCode;
} catch (error) { }
} catch (error) {}
let map;
let mapLayer;
let mapLayer1;
@ -89,33 +88,27 @@ onMounted(() => {
map = new EliMap({
id: props.mapid,
crs: "EPSG:4490",
crs: "EPSG:3857",
style: {
glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36057012, 29.64276831],
zoom: 15
center: [94.36,29.65],
zoom: 10
},
minZoom: 7,
maxZoom: 18,
transformRequest: (url) => {
if (url.indexOf("TileMatrix=") != -1) {
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;
map.mapboxGLMap.on("load", () => {
map.addWMTSLayer(
"http://89.0.23.24/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap"
,
{
Service: "getImage",
Type: "RGB",
ZoomOffset: "0",
V: "0.3",
Zoom: "{z}",
Row: "{y}",
Col: "{x}"
},
{
tileSize: 300
}
);
map.addGaudLayer({
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
})
zoomTarget.value = map.mapboxGLMap.getZoom();
});
mapUtil.value = new MapUtil(map);
@ -135,6 +128,8 @@ onMounted(() => {
});
//
emitter.on("addPointArea", (obj) => {
console.log(obj);
mapUtil.value.makerSki(obj);
});
//
@ -173,7 +168,7 @@ onMounted(() => {
});
// 线
emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res, res.flag);
mapUtil.value.createLine(res);
});
//geojson
emitter.on("setBoundarys", (res) => {
@ -204,6 +199,11 @@ onMounted(() => {
mapUtil.value.diffusionCircle(res);
});
//
emitter.on("removeElementAll", () => {
mapUtil.value.removeElementAll();
});
//
emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj);
@ -302,6 +302,7 @@ onUnmounted(() => {
emitter.off("diffusionCircle");
emitter.off("SsCircle");
emitter.off("ClearssCircle");
emitter.off("removeElementAll");
});
</script>
@ -324,35 +325,29 @@ onUnmounted(() => {
right: 398px;
bottom: 4px;
z-index: 9;
.mapImageItem {
border: 1px solid #08aae8;
background: rgb(9, 26, 70);
&>img {
& > img {
width: 100%;
height: 50px;
}
&>div {
& > div {
text-align: center;
position: relative;
top: -3px;
}
}
.zoomTargetBox {
margin-top: 10px;
margin-left: 23px;
}
::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase {
background: #133362;
color: #fff;
border: none;
}
::v-deep .el-input__inner {
background: #0c1641;
}

View File

@ -1,7 +1,8 @@
<template>
<div :id="mapid" class="map"></div>
<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-item>
<div class="mapImageItem">
@ -74,7 +75,7 @@ const props = defineProps({
});
try {
const userInfo = getItem("deptId")[0].deptCode;
} catch (error) {}
} catch (error) { }
let map;
let mapLayer;
let mapLayer1;
@ -88,27 +89,32 @@ onMounted(() => {
map = new EliMap({
id: props.mapid,
crs: "EPSG:3857",
crs: "EPSG:4490",
style: {
glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36,29.65],
zoom: 10
center: [94.36057012, 29.64276831],
zoom: 15
},
transformRequest: (url) => {
if (url.indexOf("TileMatrix=") != -1) {
const arr = url.split("TileMatrix=");
const arr1 = arr[1].split("&");
const nurl = `${arr[0]}&TileMatrix=${Number(arr1[0])}&${arr1[1]}&${arr1[2]}`;
}
}
minZoom: 7,
maxZoom: 18,
});
window.map = map;
map.mapboxGLMap.on("load", () => {
map.addGaudLayer({
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
})
map.addWMTSLayer(
"/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();
});
mapUtil.value = new MapUtil(map);
@ -128,8 +134,6 @@ onMounted(() => {
});
// 撒点
emitter.on("addPointArea", (obj) => {
console.log(obj);
mapUtil.value.makerSki(obj);
});
// 鼠标滑过提示文字的点位
@ -168,7 +172,7 @@ onMounted(() => {
});
// 回显线
emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res);
mapUtil.value.createLine(res, res.flag);
});
//创建边界面geojson
emitter.on("setBoundarys", (res) => {
@ -199,11 +203,6 @@ onMounted(() => {
mapUtil.value.diffusionCircle(res);
});
// 清除全部覆盖物
emitter.on("removeElementAll", () => {
mapUtil.value.removeElementAll();
});
// 展示盘曲
emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj);
@ -302,7 +301,6 @@ onUnmounted(() => {
emitter.off("diffusionCircle");
emitter.off("SsCircle");
emitter.off("ClearssCircle");
emitter.off("removeElementAll");
});
</script>
@ -325,29 +323,35 @@ onUnmounted(() => {
right: 398px;
bottom: 4px;
z-index: 9;
.mapImageItem {
border: 1px solid #08aae8;
background: rgb(9, 26, 70);
& > img {
&>img {
width: 100%;
height: 50px;
}
& > div {
&>div {
text-align: center;
position: relative;
top: -3px;
}
}
.zoomTargetBox {
margin-top: 10px;
margin-left: 23px;
}
::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase {
background: #133362;
color: #fff;
border: none;
}
::v-deep .el-input__inner {
background: #0c1641;
}

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

@ -353,7 +353,7 @@ export const publicRoutes = [
"@/views/backOfficeSystem/peopleManag/InspectedVehicle/index"
),
meta: {
title: "过检车辆管理",
title: "过检车辆管理",
icon: "article"
}
}

View File

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

View File

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

View File

@ -1,49 +1,64 @@
<template>
<div class="image-carousel">
<div class="control-button prev" @click="prevImage">
<img src="@/assets/images/icon_08.png" alt="">
</div>
<div class="carousel-container">
<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>
<el-carousel style="height: 100%;" motion-blur indicator-position="none" @change="handleCarouselChange"
: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>
<WsIframe :sbbh="items.sbbh" />
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
</template>
<script>
export default {
data() {
return {
currentIndex: 0,
images: [
require('@/assets/images/person.png'),
require('@/assets/images/person.png'),
require('@/assets/images/person.png'),
require('@/assets/images/person.png')
]
}
},
methods: {
prevImage() {
this.currentIndex = this.currentIndex > 0 ? this.currentIndex - 1 : this.images.length - 1
},
nextImage() {
this.currentIndex = this.currentIndex < this.images.length - 1 ? this.currentIndex + 1 : 0
}
<script setup>
import { ref, watch, computed, onMounted, onUnmounted, reactive,nextTick } from 'vue'
import WsIframe from '@/components/wsIframe/index.vue'
import { useRoute } from "vue-router"
import { sxtGetList } from '@/api/mosty-jcz.js'
import emitter from "@/utils/eventBus.js";
const activeIndex = ref(0)
const cdList=ref([])
const listSxt=ref([1])
const handleCarouselChange = (index) => {
activeIndex.value = index
}
const getSxtGetList = (id) => {
const jczid = {
jczid: id
}
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>
@ -54,6 +69,7 @@ export default {
position: relative;
padding: 30px 20px;
box-sizing: border-box;
.carousel-container {
width: 100%;
height: 100%;
@ -71,6 +87,7 @@ export default {
width: 24%;
margin: 0 1%;
height: 100%;
img {
width: 100%;
height: 100%;
@ -86,12 +103,58 @@ export default {
transition: all 0.3s;
color: #fff;
z-index: 1;
&.prev {
left: 0;
}
&.next {
right: 0;
}
}
}
</style>
.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>

View File

@ -1,53 +1,35 @@
<template>
<div class="video-more-container">
<div class="switch-btn prev" @click="handlePrev">
<img src="@/assets/images/icon_08.png" alt="">
</div>
<div class="video-grid">
<div v-for="index in 4" :key="index" class="video-cell">
<div class="video-wrapper">
<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>
<el-carousel style="height: 100%;" motion-blur indicator-position="none" :autoplay="false"
@change="handleCarouselChange">
<el-carousel-item v-for="(item,index) in sbList" :key="index" >
<div class="video-grid" v-if="activeIndex==index">
<div v-for="(items,indexs) in item" :key="indexs" class="video-cell">
<WsIframe :sbbh="items.sbbh" />
</div>
</div>
</div>
</div>
<div class="switch-btn next" @click="handleNext">
<img src="@/assets/images/icon_07.png" alt="">
</div>
</el-carousel-item>
</el-carousel>
</div>
</template>
<script>
export default {
name: 'VideoMore',
data() {
return {
currentPage: 1,
totalPages: 3
}
},
methods: {
handlePrev() {
if (this.currentPage > 1) {
this.currentPage--
}
},
handleNext() {
if (this.currentPage < this.totalPages) {
this.currentPage++
}
}
}
<script setup>
import { ref ,onMounted} from 'vue'
import WsIframe from '@/components/wsIframe/index.vue'
import emitter from "@/utils/eventBus.js";
const activeIndex = ref(0)
const handleCarouselChange = (index) => {
activeIndex.value=index
}
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>
<style lang="scss" scoped>
@ -79,14 +61,16 @@ export default {
}
.video-grid {
padding: 10px;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 20px;
gap: 10px;
height: 100%;
}
.video-cell {
position: relative;
background: url('~@/assets/images/bg13.png') no-repeat;
background-size: 100% 100%;
@ -128,14 +112,19 @@ export default {
.control-buttons {
display: flex;
gap: 15px;
i {
cursor: pointer;
font-size: 20px;
&:hover {
color: #409EFF;
}
}
}
}
</style>
::v-deep .el-carousel__container {
height: 100% !important;
}
</style>

View File

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

View File

@ -25,6 +25,7 @@
<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="addEdit('detail', row)">详情</el-link>
<el-link type="primary" @click="endreporting( row.id)" v-if="row.bbZt !== '03'">结束报备</el-link>
</template>
</MyTable>
<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 Search from "@/components/aboutTable/Search.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";
const { proxy } = getCurrentInstance();
const {
@ -152,6 +153,21 @@ const delDictItem = (ids) => {
})
.catch(() => { });
};
const endreporting = (id) => {
proxy
.$confirm("确定要结束报备", "警告", { type: "warning" })
.then(() => {
finishEntity(id).then(res => {
proxy.$message({ type: "success", message: "报备结束" });
getjczgetXfllList();
})
})
.catch(() => { });
}
getjczgetXfllList();
// 新增
const addEdit = (type, row) => {

View File

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

View File

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

View File

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

View File

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

View File

@ -83,7 +83,7 @@
clearable
/>
</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"
v-model="listQuery.sklList"
placeholder="请选择标签"
@ -96,8 +96,13 @@
:label="dict.label"
></el-option>
</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 style="width: 85%" prop="jd" label="坐标位置">
<div class="latlng flex">
<el-input :disabled="true"
@ -122,6 +127,7 @@
</el-form>
</div>
</div>
<Jczloder v-model="showJcz" :Single="true" @choosedJcz="JczMsg" :data="[]" />
</template>
<script setup>
@ -129,6 +135,7 @@ import { ref, reactive, onMounted } from "vue";
import { TtbJczSxtAdd, Ttbgetupdate } from "@/api/mosty-jcz.js";
import * as MOSTY from "@/components/MyComponents/index";
import emitter from "@/utils/eventBus.js";
import Jczloder from "@/components/loder/Jczloder.vue";
import GdMap from "@/components/GdMap/index.vue";
import { ElMessage } from "element-plus";
const props = defineProps({
@ -216,6 +223,8 @@ const init = (type, row) => {
//保存
const _onSave = () => {
if (!formRef) return;
console.log(listQuery.value);
formRef.value.validate((valid, fields) => {
if (valid) {
if (pageType.value == "add") {
@ -226,6 +235,7 @@ const _onSave = () => {
});
} else {
Ttbgetupdate(listQuery.value).then((res) => {
ElMessage({ message: "修改成功", type: "success" });
emit("getjczgetXfllList");
close();
@ -235,7 +245,6 @@ const _onSave = () => {
console.log("error submit!", fields);
}
});
console.log();
};
//选择定位地图
const selectLocation = () => {
@ -269,7 +278,12 @@ const tableHeight1 = ref();
const tabHeightFn = () => {
tableHeight1.value = window.innerHeight - 450;
};
const showJcz = ref(false);
const JczMsg = (val) => {
listQuery.value.jczmc = val.jczmc;
listQuery.value.jczid = val.id;
};
defineExpose({ init });
</script>
@ -357,4 +371,20 @@ defineExpose({ init });
box-sizing: border-box;
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>

View File

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

View File

@ -43,7 +43,7 @@
format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" />
</el-form-item>
<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"
:label="dict.label"></el-option>
</el-select>

View File

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

View File

@ -42,7 +42,7 @@
format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" />
</el-form-item>
<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"
:label="dict.label"></el-option>
</el-select>

View File

@ -28,7 +28,7 @@
{{ row.bkfs == '01' ? "全省布控" : "精准布控" }}
</template>
<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 #bkzt="{ row }">
<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"
);
const searchConfiger = ref([
{
label: "布控名称",
prop: "bkmc",
placeholder: "请输入布控名称",
showType: "input"
},
{
label: "证件号码",
prop: "bksfzh",
placeholder: "请输入证件号码",
label: "车牌号码",
prop: "cph",
placeholder: "请输入车牌号码",
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_WHCD"
);
const searchConfiger = ref([
const searchConfiger = ref([ {
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
},
{
label: "姓名",
prop: "xm",
@ -85,12 +90,7 @@ const searchConfiger = ref([
showType: "select",
options: D_BZ_SF
},
{
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
}
]);
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">
<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="perceptionAdd(row)">新增感知源</el-link>
</template>
<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 }"
@getjczgetXfllList="getjczgetXfllList" />
<PerceptionSource ref="perceptionSource" @getjczgetXfllList="getjczgetXfllList"/>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import PerceptionSource from './components/perceptionSource.vue'
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
@ -200,6 +203,10 @@ const tabHeightFn = () => {
tabHeightFn();
};
};
const perceptionSource = ref()
const perceptionAdd = (row) => {
perceptionSource.value.init(row)
};
</script>
<style>

View File

@ -127,7 +127,14 @@ const getjczgetXfllList = () => {
getjczgetXfllList();
// 搜索
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();
};

View File

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

View File

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

View File

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

View File

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

View File

@ -49,13 +49,13 @@
import GdMap from "@/components/GdMap/index.vue";
import Head from "./layout/head.vue";
import Collection from "./components/collection.vue";
// import Warning from "./components/warning.vue";
import CarWarning from "./components/CarWarning.vue";
import PeoWarning from "./components/PeoWarning.vue";
import BeOnDuty from "./components/beonDuty.vue";
import Entrance from "./components/entrance.vue";
import WanringAnyse from "./components/wanringAnyse.vue";
import { jczgetJczList } from "@/api/mosty-jcz";
import {ysSxtGetList} from '@/api/yszx.js'
import emitter from "@/utils/eventBus.js";
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>
<style lang="scss" scoped>
@ -146,4 +157,5 @@ onMounted(() => {
box-sizing: border-box;
}
}
</style>

View File

@ -12,7 +12,7 @@
<div class="zbbb" v-if="query" @click="show = true">值班报备</div>
</div>
<el-dialog v-model="show" title="Shipping address">
<div style="height: 50vh; overflow: auto">
<div style="height: 50vh; overflow: auto" v-if="show">
<zbbb
:row="row"
@close="close"

View File

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

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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