Compare commits

...

10 Commits

Author SHA1 Message Date
9aa7078024 提交 2026-01-12 17:44:00 +08:00
948b92b6df 过检 2025-12-30 09:50:02 +08:00
bd47ebd435 盘查 2025-12-26 17:51:25 +08:00
b9b765d20f 修改预警统计分析 2025-12-13 13:55:39 +08:00
a950b49fe4 修改卡口 2025-12-08 16:40:47 +08:00
72d3d50f09 装备统计和对接接口 2025-12-08 15:59:47 +08:00
001b097051 Merge branch 'main' of http://61.139.16.27:26684/lcw/xzlz_JczWeb 2025-12-06 17:21:45 +08:00
ada2a0b02a 修改卡口 2025-12-06 17:21:35 +08:00
lcw
e8468bf252 Merge branch 'main' of http://61.139.16.27:26684/lcw/xzlz_JczWeb 2025-12-05 21:41:01 +08:00
lcw
441eda3a78 lcw 2025-12-04 03:29:06 +08:00
110 changed files with 2800 additions and 382 deletions

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

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

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

View File

@ -6,6 +6,7 @@
:data="tableData"
@selection-change="handleSelectionChange"
@row-click="singleElection"
@cell-click="cellClick"
:row-key="getConfiger.rowKey"
:border="getConfiger.border"
:default-expand-all="getConfiger.defaultExpandAll"
@ -123,7 +124,7 @@ const props = defineProps({
}
});
// 可选的时候选择的数据
const emit = defineEmits(["chooseData"]);
const emit = defineEmits(["chooseData","columnInfo"]);
const multipleTableRef = ref();
let getConfiger = reactive({
showSelectType: null, // 显示多选还是单选还是没有选择 checkBox/radio/null
@ -164,6 +165,9 @@ const singleElection = (val) => {
emit("chooseData", [val]);
}
};
const cellClick = (row, column) => {
emit("columnInfo", {row,column});
};
// 懒加载数据的方法
const load = (date, treeNode, resolve) => {
setTimeout(() => {

View File

@ -1,26 +1,13 @@
<template>
<div>
<el-dialog
:title="titleValue"
width="1400px"
v-model="modelValue"
@close="closed"
>
<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"
/>
<MOSTY.Department width="100%" clearable v-model="listQuery.ssbmdm" />
</el-form-item>
<el-form-item label="环林卡口名称">
<el-input
v-model="listQuery.jczmc"
placeholder="请输入环林卡口名称"
clearable
/>
<el-input v-model="listQuery.jczmc" placeholder="请输入环林卡口名称" clearable />
</el-form-item>
<el-form-item>
@ -29,98 +16,34 @@
</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 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="jczmc"
show-overflow-tooltip
align="center"
label="环林卡口名称"
>
<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="jczmc" show-overflow-tooltip align="center" label="环林卡口名称">
</el-table-column>
<el-table-column
show-overflow-tooltip
align="center"
label="环林卡口类型"
prop="jczlx"
>
<el-table-column show-overflow-tooltip align="center" label="环林卡口类型" prop="jczlx">
<template #default="{ row }">
<dict-tag
:options="D_BZ_JCZLX"
:value="row.jczlx"
:tag="false"
/>
<dict-tag :options="D_BZ_JCZLX" :value="row.jczlx" :tag="false" />
</template>
</el-table-column>
<el-table-column
prop="xxdz"
show-overflow-tooltip
align="center"
label="环林卡口地址"
>
<el-table-column prop="xxdz" show-overflow-tooltip align="center" label="环林卡口地址">
</el-table-column>
<el-table-column
sortable
prop="jd"
show-overflow-tooltip
label="经度"
align="center"
>
<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 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>
<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>
@ -327,9 +250,11 @@ watch(
<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;
}

View File

@ -0,0 +1,281 @@
<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.clztwptzdm" placeholder="请输入环林卡口名称" clearable />
</el-form-item>
<el-form-item label="车后部物品特征代码">
<el-input v-model="listQuery.chbwptzdm" placeholder="请输入车后部物品特征代码" clearable />
</el-form-item>
<el-form-item label="车前部物品特征代码">
<el-input v-model="listQuery.cqbwptzdm" 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="430">
<el-table-column type="selection" width="55" :reserve-selection="true" v-if="!props.Single && props.chooseShow" />
<el-table-column width="55" #default="{ row }" v-if="props.Single && props.chooseShow">
<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 show-overflow-tooltip align="center" label="车前盖图" prop="swrltx">
<template #default="{ row }">
<div class="phone">
<el-image v-if="row.cqgt" :src="urlImg + row.cqgt" fit="cover" lazy />
<el-image v-else :src="Person" fit="cover" lazy />
</div>
</template>
</el-table-column>
<el-table-column sortable prop="kkMc" show-overflow-tooltip align="center" label="卡口名称"></el-table-column>
<el-table-column sortable prop="ssbm" label="所属部门" show-overflow-tooltip align="center"></el-table-column>
<el-table-column sortable prop="clztwptzdm" show-overflow-tooltip align="center" label="车辆张贴物品特征代码"></el-table-column>
<el-table-column sortable prop="chbwptzdm" show-overflow-tooltip align="center" label="车后部物品特征代码"></el-table-column>
<el-table-column sortable prop="zqlx" show-overflow-tooltip align="center" label="车前部物品特征代码"></el-table-column>
<el-table-column sortable prop="clychjdm" show-overflow-tooltip align="center" label="车辆异常痕迹代码"></el-table-column>
<el-table-column sortable prop="hphm" show-overflow-tooltip align="center" label="机动车号牌号码"></el-table-column>
<el-table-column sortable prop="txsj" show-overflow-tooltip align="center" label="通行时间"></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 Person from '@/assets/images/default_male.png'
import * as MOSTY from "@/components/MyComponents/index";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {
defineProps,
watch,
ref,
onMounted,
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: []
},
// 是否显示选择框
chooseShow:{
type: Boolean,
default: true
},
// 搜索条件
searchData:{
type:Object,
default:{}
}
});
const urlImg = "/mosty-api/mosty-base/minio/image/download/";
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;
qcckGet({...listQuery.value,...props.searchData}, "/mosty-jcz/jczGjcltx/selectPage")
.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,290 @@
<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.gjryxm" 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="430">
<el-table-column type="selection" width="55" :reserve-selection="true" v-if="!props.Single && props.chooseShow" />
<el-table-column width="55" #default="{ row }" v-if="props.Single && props.chooseShow">
<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="gjryxm" show-overflow-tooltip align="center" label="过检人员姓名" />
<el-table-column sortable prop="gjrysfzh" show-overflow-tooltip align="center" label="过检人员身份证号" />
<el-table-column sortable prop="kkMc" show-overflow-tooltip align="center" label="卡口名称" />
<el-table-column show-overflow-tooltip align="center" label="三维人脸图像" prop="swrltx">
<template #default="{ row }">
<div class="phone">
<el-image v-if="row.swrltx" :src="urlImg + row.swrltx" fit="cover" lazy />
<el-image v-else :src="Person" fit="cover" lazy />
</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="人脸图" prop="swrltx">
<template #default="{ row }">
<div class="phone">
<el-image v-if="row.rlt" :src="urlImg + row.rlt" fit="cover" lazy />
<el-image v-else :src="Person" fit="cover" lazy />
</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" label="人员图" prop="swrltx">
<template #default="{ row }">
<div class="phone">
<el-image v-if="row.ryt" :src="urlImg + row.ryt" fit="cover" lazy />
<el-image v-else :src="Person" fit="cover" lazy />
</div>
</template>
</el-table-column>
<el-table-column prop="txsj" show-overflow-tooltip align="center" label="通行时间">
</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 Person from '@/assets/images/default_male.png'
import * as MOSTY from "@/components/MyComponents/index";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {
defineProps,
watch,
ref,
onMounted,
nextTick,
getCurrentInstance
} from "vue";
const { proxy } = getCurrentInstance();
const urlImg = "/mosty-api/mosty-base/minio/image/download/";
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: []
},
// 是否显示选择框
chooseShow:{
type: Boolean,
default: true
},
// 搜索条件
searchData:{
type:Object,
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(() => {
});
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
//检查站数据
const getListData = async () => {
loading.value = true;
qcckGet({...listQuery.value,...props.searchData}, "/mosty-jcz/jczGjrytx/selectPage")
.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,274 @@
<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.gjryxm" 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="430">
<el-table-column type="selection" width="55" :reserve-selection="true"
v-if="!props.Single && props.chooseShow" />
<el-table-column width="55" #default="{ row }" v-if="props.Single && props.chooseShow">
<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="kkMc" show-overflow-tooltip align="center" label="卡口名称" />
<el-table-column sortable prop="ssbm" label="所属部门" show-overflow-tooltip align="center"></el-table-column>
<el-table-column sortable prop="ryxm" show-overflow-tooltip align="center" label="人员姓名" />
<el-table-column sortable prop="rysfzh" show-overflow-tooltip align="center" label="人员身份证号" />
<el-table-column sortable prop="hphm" show-overflow-tooltip align="center" label="过检车辆" />
<el-table-column show-overflow-tooltip align="center" label="物品类型" prop="wplx">
<template #default="{ row }">
<dict-tag :value="row.wplx" :options="D_BZ_WPLX" :tag="false" />
</template>
</el-table-column>
<el-table-column prop="wpsl" show-overflow-tooltip align="center" label="物品数量">
</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 MOSTY from "@/components/MyComponents/index";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {
defineProps,
watch,
ref,
onMounted,
nextTick,
getCurrentInstance
} from "vue";
const { proxy } = getCurrentInstance();
const urlImg = "/mosty-api/mosty-base/minio/image/download/";
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: []
},
// 是否显示选择框
chooseShow: {
type: Boolean,
default: true
},
// 搜索条件
searchData: {
type: Object,
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(() => { });
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
//检查站数据
const getListData = async () => {
loading.value = true;
qcckGet(
{ ...listQuery.value, ...props.searchData },
"/mosty-jcz/tbJczBpcWp/getPagelist"
)
.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

@ -304,6 +304,18 @@ export const publicRoutes = [
title: "感知源管理",
icon: "article"
}
},
{
path: "/EquipmentStatistics",
name: "EquipmentStatistics",
component: () =>
import(
"@/views/backOfficeSystem/peopleManag/EquipmentStatistics/index"
),
meta: {
title: "装备统计",
icon: "article"
}
}
]
},
@ -315,6 +327,18 @@ export const publicRoutes = [
icon: "article"
},
children: [
{
path: "/CheckStatisticsManage",
name: "CheckStatisticsManage",
component: () =>
import(
"@/views/backOfficeSystem/peopleManag/CheckStatisticsManage/index"
),
meta: {
title: "盘查统计",
icon: "article"
}
},
{
path: "/InventoryManage",
name: "InventoryManage",
@ -338,8 +362,19 @@ export const publicRoutes = [
title: "车辆盘查",
icon: "article"
}
},
{
path: "/wpCheckManage",
name: "wpCheckManage",
component: () =>
import(
"@/views/backOfficeSystem/peopleManag/wpCheckManage/index"
),
meta: {
title: "物品盘查",
icon: "article"
}
,
},
{
path: "/TrackPerson",
name: "TrackPerson",
@ -381,6 +416,30 @@ export const publicRoutes = [
title: "过检车辆管理",
icon: "article"
}
},
{
path: "/InspectionItemManage",
name: "InspectionItemManage",
component: () =>
import(
"@/views/backOfficeSystem/peopleManag/InspectionItemManage/index"
),
meta: {
title: "过检物品管理",
icon: "article"
}
},
{
path: "/crossStation",
name: "crossStation",
component: () =>
import(
"@/views/backOfficeSystem/peopleManag/crossStation/index"
),
meta: {
title: "过站汇总管理",
icon: "article"
}
}
]
},

View File

@ -0,0 +1,377 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ pageInfo[pageType].title }}</span>
<div>
<el-button
size="small"
type="primary"
v-if="['add', 'edit'].includes(pageType)"
@click="_onSave"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form
ref="elform"
:model="listQuery"
:inline="true"
label-position="top"
>
<el-form-item label="图片" style="width: 10%">
<img
class="imgBox"
:src="
'http://10.64.201.128:2366/xlpcAdminNew/requestservice/czrk/ryxp.jpg?sfzh=' +
listQuery.sfzh
"
/>
</el-form-item>
<el-form-item label="所属部门">
<MOSTY.Department
:placeholder="listQuery.ssbm"
style="width: 100%"
ref="cascader"
clearable
filterable
:options="depList"
:props="props"
v-model:modelValue="listQuery.gldwdm"
/>
</el-form-item>
<el-form-item label="盘查民警姓名">
<el-input
v-model="listQuery.pcmjXm"
placeholder="盘查民警姓名"
clearable
disabled
style="width: 100%"
/>
</el-form-item>
<el-form-item label="盘查民警警号" style="width: 40%">
<el-input
v-model="listQuery.pcmjJh"
placeholder="盘查民警警号"
clearable
disabled
style="width: 100%"
/>
</el-form-item>
<el-form-item label="被盘查人身份证号" style="width: 40%">
<el-input
v-model="listQuery.sfzh"
placeholder="请输入被盘查人身份证号"
clearable
disabled
style="width: 100%"
/>
</el-form-item>
<el-form-item label="被盘查人性别" style="width: 40%">
<el-input
v-model="listQuery.sexmc"
placeholder="请输入被盘查人性别"
disabled
clearable
style="width: 100%"
/>
</el-form-item>
<el-form-item label="被盘查人出生日期" style="width: 40%">
<el-input
v-model="listQuery.csrq"
disabled
placeholder="被盘查人出生日期"
/>
</el-form-item>
<el-form-item label="被盘查人民族" style="width: 40%">
<el-input
v-model="listQuery.mzmc"
disabled
placeholder="被盘查人民族"
/>
</el-form-item>
<el-form-item label="被盘查人学历" style="width: 40%">
<el-input
v-model="listQuery.whcdmc"
disabled
placeholder="被盘查人学历"
/>
</el-form-item>
<el-form-item label="被盘查人籍贯" style="width: 40%">
<el-input
v-model="listQuery.jgdm"
disabled
placeholder="被盘查人籍贯"
/>
</el-form-item>
<el-form-item label="被盘查人住址详址" style="width: 40%">
<el-input
v-model="listQuery.zzxz"
disabled
placeholder="被盘查人住址详址"
/>
</el-form-item>
<el-form-item label="被盘查人联系电话" style="width: 40%">
<el-input
v-model="listQuery.lxdh"
disabled
placeholder="被盘查人联系电话"
/>
</el-form-item>
<el-form-item label="盘查日期" style="width: 40%">
<el-input v-model="listQuery.pcrq" disabled placeholder="盘查日期" />
</el-form-item>
<el-form-item label="盘查时间" style="width: 40%">
<el-input v-model="listQuery.pcsj" disabled placeholder="盘查时间" />
</el-form-item>
<el-form-item label="盘查输入类型" style="width: 40%">
<el-input
v-model="listQuery.pcsrlxmc"
disabled
placeholder="盘查输入类型"
/>
</el-form-item>
<el-form-item label="人员标签" style="width: 40%">
<el-input
v-model="listQuery.bqxxsj"
disabled
placeholder="人员标签"
/>
</el-form-item>
<el-form-item label="盘查处理结果" style="width: 40%">
<el-input
v-model="listQuery.pcclJgmc"
disabled
placeholder="盘查处理结果"
/>
</el-form-item>
<el-form-item label="移交单位" style="width: 40%">
<el-input
v-model="listQuery.pcclYjdw"
disabled
placeholder="移交单位"
/>
</el-form-item>
<el-form-item label="移交原因" style="width: 100%">
<el-input
placeholder="移交原因"
v-model="listQuery.pcclYjyy"
disabled
show-word-limit
type="textarea"
/>
</el-form-item>
</el-form>
<div class="head_box">
<span class="title">盘查图片</span>
</div>
<el-form :model="listQuery" :inline="true" label-position="top">
<div v-if="listQuery.tpList && listQuery.tpList.length > 0">
<el-image
class="image"
v-for="(item, index) in listQuery.tpList"
:key="index"
:src="`/mosty-api/mosty-base/minio/image/download/${item.fjid}`"
/>
</div>
</el-form>
<div class="head_box">
<span class="title">盘查物品</span>
</div>
<div v-if="listQuery.wpVoList && listQuery.wpVoList.length > 0">
<el-form
ref="elform"
:model="listQuery"
:rules="rules"
:inline="true"
label-position="top"
>
<el-form-item label="物品图片" prop="name">
<div style="height: 120px; display: inline-block">
<el-image
v-for="(item, index) in listQuery.wpVoList[0]?.wpTpIdList"
:key="index"
:src="`/mosty-api/mosty-base/minio/image/download/${item}`"
class="image"
/>
</div>
</el-form-item>
<el-form-item label="物品描述" prop="name">
<el-input v-model="listQuery.wpVoList[0].wpms"></el-input>
</el-form-item>
<el-form-item label="物品数量" prop="name">
<el-input v-model="listQuery.wpVoList[0].wpsl"></el-input>
</el-form-item>
<el-form-item label="物品类型" prop="name">
<el-input v-model="listQuery.wpVoList[0].wplx"></el-input>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import * as MOSTY from "@/components/MyComponents/index";
import { TcsbsaveTcsbsave, Tcsbupdate } from "@/api/mosty-jcz.js";
import { Right, Back } from "@element-plus/icons-vue";
import { baseselectPage } from "@/api/mosty-base";
import { ElMessage } from "element-plus";
const props = defineProps({
dict: {
type: Object,
default: () => {}
}
});
const formRef = ref(null);
const dialogForm = ref(false);
const listQuery = ref({});
const pageInfo = {
edit: {
title: "编辑",
url: ""
},
add: {
title: "新增",
url: ""
},
detail: {
title: "详情"
}
};
let pageType = ref("add");
const propsTree = ref({
checkStrictly: true,
emitPath: false,
multiple: false
});
// 初始化数据
const DX = ref();
const init = (type, row) => {
pageType.value = type;
dialogForm.value = true;
// 根据type和row初始化表单数据
tabHeightFn();
if (type == "edit" || type == "detail") {
DX.value = row.yjRyxm ? row.yjRyxm : row.yjClcph;
listQuery.value = { ...row };
} else {
listQuery.value = {};
}
};
//页面关闭
const close = () => {
dialogForm.value = false;
listQuery.value = {};
DX.value = "";
};
// 表格高度计算
const tableHeight1 = ref();
const tabHeightFn = () => {
tableHeight1.value = window.innerHeight - 450;
};
defineExpose({ init });
</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 #e0e0e0;
margin-bottom: 14px;
.el-icon {
margin-top: 34px;
font-size: 26px;
}
.el-image {
width: 100%;
height: 100%;
}
}
.imgBox {
width: 100px;
height: 120px;
}
.image {
width: 100px;
height: 100px;
margin: 10px 0 10px 20px;
display: inline-block;
}
</style>

View File

@ -0,0 +1,117 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="盘查统计">
<!-- <el-link type="primary" @click="addEdit('detail', row)">详情</el-link> -->
</PageTitle>
</div>
<!-- 表格 -->
<div ref="searchBox">
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" /> -->
</div>
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
</MyTable>
</div>
</div>
</template>
<script setup>
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Search from "@/components/aboutTable/Search.vue";
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
const { proxy } = getCurrentInstance();
const urlImg = "/mosty-api/mosty-base/minio/image/download/";
const { D_BZ_YJLX, D_BZ_YJJB } = proxy.$dict("D_BZ_YJLX", "D_BZ_YJJB");
const searchConfiger = ref([
{
label: "姓名",
prop: "xm",
placeholder: "请输入姓名",
showType: "input"
},
]);
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls:false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 250, //操作栏宽度
tableColumn: [
{ label: "车辆数", prop: "clNum" },
{ label: "车辆物品数", prop: "clwpNum" },
{ label: "人员数", prop: "ryNum" },
{ label: "人员物品数", prop: "rywpNum" },
]
});
onMounted(() => {
tabHeightFn();
});
//查询条件
const queryCondition = ref({});
// 获取数据
const getjczgetXfllList = () => {
pageData.tableConfiger.loading = true;
const promes = { ...queryCondition.value, ...pageData.pageConfiger };
qcckGet(promes,"/mosty-jcz/tbJczBpcCount/getRcwTj")
.then((res) => {
pageData.tableData = [res];
})
.finally(() => {
pageData.tableConfiger.loading = false;
});
};
getjczgetXfllList();
// 搜索
const onSearch = (val) => {
const promes = {
startTime: "",
endTime: ""
};
if (val.startTime) {
promes.startTime = val.startTime[0];
promes.endTime = val.startTime[1];
} else {
promes.startTime = "";
promes.endTime = "";
}
queryCondition.value = { ...queryCondition.value, ...val, ...promes };
getjczgetXfllList();
};
const searchBox = ref(null);
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 280;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,129 @@
<template>
<el-dialog v-model="modelValue" width="60%" custom-class="container" @close="close" :title="title" align-center>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #cplx="{ row }">
<dict-tag :options="D_BZ_HPZL" :value="row.cplx" :tag="false"></dict-tag>
</template>
<template #jyjtgjlb="{ row }">
<dict-tag :options="D_JCGL_JYCL_JYJTGJLB" :value="row.jyjtgjlb" :tag="false"></dict-tag>
</template>
<template #jyjtytlb="{ row }">
<dict-tag :options="D_JCGL_JYCL_JYJTYTLB" :value="row.jyjtytlb" :tag="false"></dict-tag>
</template>
<template #hpyslb="{ row }">
<dict-tag :options="D_JCGL_JYCL_HPYSLB" :value="row.hpyslb" :tag="false"></dict-tag>
</template>
<template #sblx="{ row }">
<dict-tag :options="D_JCGL_TCSB_SBLX" :value="row.sblx" :tag="false"></dict-tag>
</template>
<template #qxlx="{ row }">
<dict-tag :options="D_JCGL_JYQX_QXLX" :value="row.qxlx" :tag="false"></dict-tag>
</template>
</MyTable>
</el-dialog>
</template>
<script setup>
import { reactive, ref, watch, getCurrentInstance } from 'vue'
import MyTable from '@/components/aboutTable/MyTable.vue'
import Pages from "@/components/aboutTable/Pages.vue";
import { ysSxtgetPageList } from "@/api/yszx";
const { proxy } = getCurrentInstance();
const {
D_JCGL_JYCL_JYJTYTLB,
D_BZ_HPZL,
D_JCGL_JYCL_JYJTGJLB,
D_JCGL_JYQX_QXLX,
D_JCGL_JYCL_HPYSLB,
D_JCGL_TCSB_SBLX
} = proxy.$dict(
"D_JCGL_JYCL_JYJTYTLB",
"D_BZ_HPZL",
"D_JCGL_JYCL_JYJTGJLB",
"D_JCGL_JYQX_QXLX",
"D_JCGL_JYCL_HPYSLB",
"D_JCGL_TCSB_SBLX"
);
const props = defineProps({
modelValue: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '车辆信息'
},
data: {
type: Array,
default: []
},
type: {
type: String,
default: ""
}
})
const emit = defineEmits(["update:modelValue", "choose"])
const dataLsit = ref();
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableHeight: 500,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 180, //操作栏宽度
tableColumn: []
})
watch(() => props.type, (newVal) => {
switch (newVal) {
case 'cl':
pageData.tableColumn = [
{ label: "车辆名称", prop: "clmc" },
{ label: "号牌号码", prop: "cph", showOverflowTooltip: true },
{ label: "号牌类型", prop: "cplx", showSolt: true },
];
break
case 'zb':
pageData.tableColumn = [
{ label: "设备编号", prop: "sbbh" },
{ label: "设备名称", prop: "sbmc" },
{ label: "设备类型", prop: "sblx", showSolt: true },
{ label: "关联GPSID", prop: "glgpsid" }
]
break
case 'qx':
pageData.tableColumn = [
{ label: "器械名称", prop: "qxmc" },
{ label: "器械类型", prop: "qxlx", showSolt: true },
{ label: "数量", prop: "qxsl" },
]
break
}
})
watch(() => props.data, (val) => {
if (val) {
pageData.tableData = val;
}
},
{
deep:true,immediate:true
})
const close = () => {
emit("update:modelValue", false);
}
</script>
<style lang="scss" scoped>
.container {
color: #000000;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="装备统计">
</PageTitle>
</div>
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #clNum="{ row }">
<span @click="openDialogshow(row.clList,'cl')">{{ row.clNum }}</span>
</template>
<template #zdNum="{ row }">
<span @click="openDialogshow(row.zdList,'zb')">{{ row.zdNum }}</span>
</template>
<template #qxNum="{ row }">
<span @click="openDialogshow(row.qxlist,'qx')">{{ row.qxNum }}</span>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<TableList v-model="clDialogShow" :data="dialogData" :type="dialogType" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import TableList from "./components/TableList.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_RYMFJLB} = proxy.$dict( "D_BZ_RYMFJLB");
const clDialogShow=ref(false)
const dialogData=ref(null)
const dialogType=ref();//打开弹窗的类型
const searchConfiger = ref([
{
showType: "department",
prop: "ssbmdm",
placeholder: "请选择所属部门",
label: "所属部门"
},
{
label: "检查站名称",
prop: "jczmc",
placeholder: "请输入检查站名称",
showType: "input"
},
]);
const detailDiloag = ref();
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls:false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 250, //操作栏宽度
tableColumn: [
{ label: "所属部门", prop: "ssbm" },
{ label: "检查站名称", prop: "jczmc" },
{ label: "车辆", prop: "clNum", showSolt: true },
{ label: "智能装备", prop: "zdNum", showSolt: true },
{ label: "器械", prop: "qxNum", showSolt: true }
]
});
onMounted(() => {
tabHeightFn();
});
//选择类型
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getjczgetXfllList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getjczgetXfllList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getjczgetXfllList();
};
// 获取列表
const getjczgetXfllList = () => {
pageData.tableConfiger.loading = true;
let params = { ...queryFrom.value, pageSize: 10, pageCurrent: 1 }
qcckGet(params, "/mosty-jcz/jcztj/jczzbtj").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
}).finally(() => {
pageData.tableConfiger.loading = false;
});
};
getjczgetXfllList();
// 新增
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
const searchBox = ref();
const openDialogshow=(arr,type)=>{
dialogData.value=arr;
dialogType.value=type;
clDialogShow.value=true;
}
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 280;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,303 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ pageInfo[pageType].title }}</span>
<div>
<el-button size="small" type="primary" v-if="['add', 'edit'].includes(pageType)" @click="_onSave">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form ref="formRef" :model="listQuery" :disabled="forbidden" :rules="rules" :inline="true"
label-position="top">
<el-form-item style="width: 46%" prop="ssbmdm" label="所属部门">
<MOSTY.Department width="100%" clearable v-model="listQuery.ssbmdm"
:placeholder="listQuery.ssbm ? listQuery.ssbm : '请选择所属部门'" />
</el-form-item>
<el-form-item style="width: 46%" prop="kkMc" label="环林卡口名称">
<div class="diviput" @click="forbidden ? '' : showJcz = true">
<span v-if="listQuery.kkMc">{{ listQuery.kkMc }}</span>
<span class="placeholder" v-else> 请选择布控卡口</span>
</div>
</el-form-item>
<el-form-item style="width: 46%" prop="ryxm" label="过检人员姓名">
<div class="diviput" @click="forbidden ? '' : showGjry = true">
<span v-if="listQuery.ryxm">{{ listQuery.ryxm }}</span>
<span class="placeholder" v-else> 请选择过检人员</span>
</div>
</el-form-item>
<el-form-item style="width: 46%" prop="hphm" label="过检车辆">
<div class="diviput" @click="forbidden ? '' : showGjcl = true">
<span v-if="listQuery.hphm">{{ listQuery.hphm }}</span>
<span class="placeholder" v-else> 请选择过检车辆</span>
</div>
</el-form-item>
<el-form-item prop="wplx" label="物品类型" style="width: 46%">
<el-select clearable v-model="listQuery.wplx" placeholder="请选择物品类型" style="width: 100%">
<el-option v-for="(item, index) in dict.D_BZ_WPLX" :key="index" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="物品数量" prop="wpsl" style="width: 46%">
<el-input-number style="width: 100%" v-model="listQuery.wpsl" placeholder="请输入物品数量" />
</el-form-item>
<el-form-item label="物品说明" prop="wpms" style="width: 100%">
<el-input type="textarea" rows="3" v-model="listQuery.wpms" placeholder="物品说明" />
</el-form-item>
</el-form>
</div>
</div>
<Jczloder v-model="showJcz" :Single="true" @choosedJcz="JczMsg" :data="[]" />
<Gjrxloder v-model="showGjry" :Single="true" @choosedJcz="GjryMsg" :data="[]" />
<Gjclloder v-model="showGjcl" :Single="true" @choosedJcz="GjclMsg" :data="[]" />
</template>
<script setup>
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { ref, reactive, onMounted } from "vue";
import Jczloder from "@/components/loder/Jczloder.vue";
import Gjrxloder from "@/components/loder/gjrxloder.vue";
import Gjclloder from "@/components/loder/gjclloder.vue";
import { GjrytxinsertEntity, GjrytxeditEntity } from "@/api/mosty-jcz.js";
import * as MOSTY from "@/components/MyComponents/index";
import emitter from "@/utils/eventBus.js";
import GdMap from "@/components/GdMap/index.vue";
import { ElMessage } from "element-plus";
const props = defineProps({
dict: {
type: Object,
default: () => { }
}
});
const rules = reactive({
ssbmdm: [
{
required: true,
message: "请选择所属部门"
}
],
wplx: [
{
required: true,
message: "请选择物品类型"
}
],
wpsl: [
{
required: true,
message: "请输入物品数量",
trigger: "change"
}
],
});
const formRef = ref(null);
const emit = defineEmits(["getjczgetXfllList"]);
const dialogForm = ref(false);
const listQuery = ref({
ssbmdm:""
});
const pageInfo = {
edit: {
title: "编辑",
url: ""
},
add: {
title: "新增",
url: ""
},
detail: {
title: "详情"
}
};
onMounted(() => { });
let pageType = ref("add");
const showJcz = ref(false);
const showGjry = ref(false);
const showGjcl = ref(false);
const JczMsg = (val) => {
listQuery.value.kkMc = val.jczmc;
listQuery.value.kkId = val.id;
listQuery.value.jczmsm = val.id;
};
const GjryMsg = (val) => {
listQuery.value.ryxm = val.gjryxm;
listQuery.value.rysfzh = val.gjrysfzh;
listQuery.value.ryid = val.id;
}
const GjclMsg = (val) => {
listQuery.value.hphm = val.hphm;
listQuery.value.clid = val.id;
}
const forbidden = ref(false)
// 初始化数据
const init = (type, row) => {
pageType.value = type;
dialogForm.value = true;
// 根据type和row初始化表单数据
tabHeightFn();
if (type == "edit" || type == "detail") {
listQuery.value = { ...row };
if (type == "detail") {
forbidden.value = true
}
}
};
//保存
const _onSave = () => {
if (!formRef) return;
formRef.value.validate((valid, fields) => {
if (valid) {
if (pageType.value == "add") {
qcckPost(listQuery.value , "/mosty-jcz/tbJczBpcWp/addBpcWp").then((res) => {
ElMessage({ message: "新增成功", type: "success" });
emit("getjczgetXfllList");
close();
});
} else {
qcckPost(listQuery.value ,"/mosty-jcz/tbJczBpcWp/updateById").then((res) => {
ElMessage({ message: "修改成功", type: "success" });
emit("getjczgetXfllList");
close();
});
}
} else {
console.log("error submit!", fields);
}
});
};
//页面关闭
const close = () => {
dialogForm.value = false;
forbidden.value = false
listQuery.value = {};
};
// 表格高度计算
const tableHeight1 = ref();
const tabHeightFn = () => {
tableHeight1.value = window.innerHeight - 450;
};
defineExpose({ init });
</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;
height: 32px;
line-height: 32px;
padding: 0 10px;
border-radius: 5px;
.placeholder {
color: #b5b5b5;
}
}
::v-deep .el-icon svg {
color: #000000 !important;
}
</style>

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