基础库

This commit is contained in:
13684185576
2025-09-13 16:57:24 +08:00
22 changed files with 1476 additions and 484 deletions

BIN
node_modules.zip Normal file

Binary file not shown.

68
package-lock.json generated
View File

@ -1,7 +1,7 @@
{ {
"name": "mosty-admin", "name": "mosty-admin",
"version": "0.1.0", "version": "0.1.0",
"lockfileVersion": 2, "lockfileVersion": 1,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
@ -21835,8 +21835,7 @@
"@element-plus/icons-vue": { "@element-plus/icons-vue": {
"version": "0.2.7", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz", "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz",
"integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg==", "integrity": "sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg=="
"requires": {}
}, },
"@fullcalendar/common": { "@fullcalendar/common": {
"version": "5.11.2", "version": "5.11.2",
@ -22723,8 +22722,7 @@
"version": "4.5.19", "version": "4.5.19",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz", "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz",
"integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==", "integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/cli-service": { "@vue/cli-service": {
"version": "4.5.19", "version": "4.5.19",
@ -23102,8 +23100,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz",
"integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/reactivity": { "@vue/reactivity": {
"version": "3.2.37", "version": "3.2.37",
@ -23241,32 +23238,27 @@
"@wangeditor/editor-for-vue": { "@wangeditor/editor-for-vue": {
"version": "5.1.12", "version": "5.1.12",
"resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz",
"integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ=="
"requires": {}
}, },
"@wangeditor/list-module": { "@wangeditor/list-module": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz", "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz",
"integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ=="
"requires": {}
}, },
"@wangeditor/table-module": { "@wangeditor/table-module": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz", "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz",
"integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w=="
"requires": {}
}, },
"@wangeditor/upload-image-module": { "@wangeditor/upload-image-module": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
"integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA=="
"requires": {}
}, },
"@wangeditor/video-module": { "@wangeditor/video-module": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz", "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz",
"integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg=="
"requires": {}
}, },
"@webassemblyjs/ast": { "@webassemblyjs/ast": {
"version": "1.9.0", "version": "1.9.0",
@ -23475,8 +23467,7 @@
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true, "dev": true
"requires": {}
}, },
"acorn-walk": { "acorn-walk": {
"version": "7.2.0", "version": "7.2.0",
@ -23521,15 +23512,13 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"dev": true, "dev": true
"requires": {}
}, },
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true, "dev": true
"requires": {}
}, },
"alphanum-sort": { "alphanum-sort": {
"version": "1.0.2", "version": "1.0.2",
@ -26802,8 +26791,7 @@
"version": "14.1.1", "version": "14.1.1",
"resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz",
"integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==",
"dev": true, "dev": true
"requires": {}
}, },
"eslint-import-resolver-node": { "eslint-import-resolver-node": {
"version": "0.3.6", "version": "0.3.6",
@ -27110,8 +27098,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz",
"integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==",
"dev": true, "dev": true
"requires": {}
}, },
"eslint-plugin-vue": { "eslint-plugin-vue": {
"version": "7.20.0", "version": "7.20.0",
@ -30065,8 +30052,7 @@
"lodash-unified": { "lodash-unified": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.2.tgz", "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.2.tgz",
"integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==", "integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
"requires": {}
}, },
"lodash.camelcase": { "lodash.camelcase": {
"version": "4.3.0", "version": "4.3.0",
@ -32443,8 +32429,7 @@
"version": "1.16.0", "version": "1.16.0",
"resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz", "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz",
"integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==", "integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==",
"dev": true, "dev": true
"requires": {}
}, },
"postcss-reduce-initial": { "postcss-reduce-initial": {
"version": "4.0.3", "version": "4.0.3",
@ -34386,15 +34371,6 @@
"integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
"dev": true "dev": true
}, },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"string-argv": { "string-argv": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
@ -34434,6 +34410,15 @@
"es-abstract": "^1.19.5" "es-abstract": "^1.19.5"
} }
}, },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"stringify-object": { "stringify-object": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
@ -35759,8 +35744,7 @@
"vue-demi": { "vue-demi": {
"version": "0.13.6", "version": "0.13.6",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.6.tgz", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.6.tgz",
"integrity": "sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ==", "integrity": "sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ=="
"requires": {}
}, },
"vue-eslint-parser": { "vue-eslint-parser": {
"version": "7.11.0", "version": "7.11.0",

View File

@ -59,3 +59,36 @@ export const tbZdryClxxUpdate = (data) => {
data, data,
}); });
} }
// 密切联系人查询接口
export const tbGsxtZdryLxrselectLxrBy = (params) => {
return request({
url: api + `/tbGsxtZdryLxr/selectLxrBy`,
method: "get",
params,
});
}
// 密切联系人新增或者修改接口
export const tbGsxtZdryLxrsaveOrUpdateLxr = (params) => {
return request({
url: api + `/tbGsxtZdryLxr/saveOrUpdateLxr`,
method: "post",
params,
});
}
// 走访记录查询接口
export const tbGsxtZdryZfjlselectZfjl = (params) => {
return request({
url: api + `/tbGsxtZdryZfjl/selectZfjl`,
method: "get",
params,
});
}
// 案件信息查询接口
export const tbGsxtZdryAjxxselectAjxx = (params) => {
return request({
url: api + `/tbGsxtZdryAjxx/selectAjxx`,
method: "get",
params,
});
}

View File

@ -1,46 +1,22 @@
<template> <template>
<div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''"> <div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''">
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据--> <!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
<el-table <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange"
ref="multipleTableRef" :row-key="getConfiger.rowKey" :border="getConfiger.border" :default-expand-all="getConfiger.defaultExpandAll"
:data="tableData" :stripe="getConfiger.stripe" :height="tableHeight" v-loading="tableConfiger.loading" :lazy="getConfiger.lazy"
@selection-change="handleSelectionChange" :load="load" :tree-props="treePros" style="width: 100%" :header-cell-class-name="() => 'HeadBgColor'"
:row-key="getConfiger.rowKey"
:border="getConfiger.border"
:default-expand-all="getConfiger.defaultExpandAll"
:stripe="getConfiger.stripe"
:height="tableHeight"
v-loading="tableConfiger.loading"
:lazy="getConfiger.lazy"
:load="load"
:tree-props="treePros"
style="width: 100%"
:header-cell-class-name="() => 'HeadBgColor'"
:highlight-current-row="getConfiger.showSelectType === 'radio'" :highlight-current-row="getConfiger.showSelectType === 'radio'"
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px'}" :row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }">
> <el-table-column style="width: 55px" type="selection" width="55"
<el-table-column style="width: 55px" type="selection" width="55" v-if="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''" /> v-if="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''" />
<el-table-column <el-table-column type="index" label="序号" v-if="getConfiger.showIndex" width="60" :align="getConfiger?.align" />
type="index"
label="序号"
v-if="getConfiger.showIndex"
width="60"
:align="getConfiger?.align"
/>
<el-table-column <el-table-column v-for="(item, index) in tableColumn" :align="getConfiger?.align" :prop="item.prop" :key="index"
v-for="(item, index) in tableColumn" :label="item.label" :width="item.width" style="width: 100%; font-size: 14px"
:align="getConfiger?.align" :show-overflow-tooltip="item.showOverflowTooltip || false" :sortable="item.sortable || false">
:prop="item.prop"
:key="index"
:label="item.label"
:width="item.width"
style="width: 100%; font-size: 14px"
:show-overflow-tooltip="item.showOverflowTooltip || false"
:sortable="item.sortable || false"
>
<!-- 使用自定义 --> <!-- 使用自定义 -->
<template v-if="item.showSolt" #default="scope"> <template v-if="item.showSolt" #default="scope">
<slot :name="item.prop" v-bind="scope"></slot> <slot :name="item.prop" v-bind="scope"></slot>
</template> </template>
<!-- 默认 --> <!-- 默认 -->
@ -50,13 +26,8 @@
</el-table-column> </el-table-column>
<!-- 操作 --> <!-- 操作 -->
<el-table-column <el-table-column v-if="getConfiger.haveControls" :fixed="fixed" :label="getConfiger.controls"
v-if="getConfiger.haveControls" :width="controlsWidth" :align="getConfiger?.align">
:fixed="fixed"
:label="getConfiger.controls"
:width="controlsWidth"
:align="getConfiger?.align"
>
<template #default="scope"> <template #default="scope">
<slot name="controls" v-bind="scope"></slot> <slot name="controls" v-bind="scope"></slot>
</template> </template>
@ -70,7 +41,7 @@ import { nextTick, onMounted, reactive, ref, watch, watchEffect } from "vue";
const props = defineProps({ const props = defineProps({
tableConfiger: { tableConfiger: {
type: Object, type: Object,
default: () => {} default: () => { }
}, },
tableData: { tableData: {
type: Array, type: Array,
@ -131,12 +102,12 @@ onMounted(() => {
}); });
// 可选的时候选择的数据 // 可选的时候选择的数据
const handleSelectionChange = (val) => { const handleSelectionChange = (val) => {
if(getConfiger.showSelectType === 'radio' && val.length > 1){ if (getConfiger.showSelectType === 'radio' && val.length > 1) {
let del_row = val.shift(); let del_row = val.shift();
multipleTableRef.value.toggleRowSelection(del_row, false); multipleTableRef.value.toggleRowSelection(del_row, false);
currentRow.value = val; currentRow.value = val;
emit("chooseData", val); emit("chooseData", val);
}else{ } else {
emit("chooseData", val); emit("chooseData", val);
} }
}; };
@ -164,29 +135,27 @@ const load = (date, treeNode, resolve) => {
function setDefaultChoose() { function setDefaultChoose() {
nextTick(() => { nextTick(() => {
// 多选的默认选中 // 多选的默认选中
if ( props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "checkBox" ) { if (props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "checkBox") {
props.tableData.forEach((item) => { props.tableData.forEach((item) => {
if ( props.tableConfiger.defaultSelectKeys.findIndex( (v) => v === item[props.tableConfiger.rowKey] ) > -1) { if (props.tableConfiger.defaultSelectKeys.findIndex((v) => v === item[props.tableConfiger.rowKey]) > -1) {
multipleTableRef.value.toggleRowSelection(item, true); multipleTableRef.value.toggleRowSelection(item, true);
} }
}); });
// 单选的默认选中 // 单选的默认选中
} else if ( props.tableConfiger.defaultSelectKeys && props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "radio" ) { } else if (props.tableConfiger.defaultSelectKeys && props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "radio") {
getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0]; getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0];
} }
}); });
} }
</script> </script>
<style lang = "scss"> <style lang="scss"></style>
</style>
<style> <style>
.tabBoxRadio .el-checkbox__inner { .tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important; border-radius: 50% !important;
} }
.tabBoxRadio .el-table__header-wrapper .el-checkbox { .tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none; display: none;
} }
</style> </style>

View File

@ -1,87 +1,42 @@
<template> <template>
<el-dialog <el-dialog :title="titleValue" width="1500px" :model-value="modelValue" append-to-body @close="closed">
:title="titleValue"
width="1500px"
:model-value="modelValue"
append-to-body
@close="closed"
>
<div class="table_class"> <div class="table_class">
<div style="width: 48%"> <div style="width: 48%">
<el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick"> <el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick">
<el-tab-pane <el-tab-pane v-for="tab in tabs" :key="tab.dm" :label="tab.label" :name="tab.dm">
v-for="tab in tabs"
:key="tab.dm"
:label="tab.label"
:name="tab.dm"
>
<!-- 添加 v-if 条件 --> <!-- 添加 v-if 条件 -->
<template v-if="activeTab !== '03'"> <template v-if="activeTab !== '03'">
<el-button <el-button v-for="(it, idx) in props.dic.D_GS_BQ_LB" :key="idx" :type="type == it.zdmc ? 'success' : ''"
v-for="(it, idx) in props.dic.D_GS_BQ_LB" @click="chooseListType(it.zdmc)">
:key="idx"
:type="type == it.zdmc ? 'success' : ''"
@click="chooseListType(it.zdmc)"
>
<span style="vertical-align: middle">{{ it.zdmc }}</span> <span style="vertical-align: middle">{{ it.zdmc }}</span>
</el-button> </el-button>
</template> </template>
<el-table <el-table v-loading="loading" ref="multipleUserRef" @selection-change="handleSelectionChange"
v-loading="loading" :data="tableData" border :row-key="keyid" style="width: 100%">
ref="multipleUserRef" <el-table-column type="selection" width="55" :reserve-selection="true" />
@selection-change="handleSelectionChange"
:data="tableData"
border
:row-key="keyid"
style="width: 100%"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column prop="bqMc" align="center" label="标签名称" /> <el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqDm" align="center" label="标签代码" /> <el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqZl" align="center" label="标签种类"> <el-table-column prop="bqZl" align="center" label="标签种类">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqZl" :tag="false" :options="props.dic.D_GS_BQ_ZL" />
:value="row.bqZl"
:tag="false"
:options="props.dic.D_GS_BQ_ZL"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bqLx" align="center" label="标签类型"> <el-table-column prop="bqLx" align="center" label="标签类型">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
:value="row.bqLx"
:tag="false"
:options="props.dic.D_GS_BQ_LX"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bqLb" align="center" label="标签类别"> <el-table-column prop="bqLb" align="center" label="标签类别">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqLb" :tag="false" :options="props.dic.D_GS_BQ_LB" />
:value="row.bqLb"
:tag="false"
:options="props.dic.D_GS_BQ_LB"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="fenye"> <div class="fenye">
<el-pagination <el-pagination class="pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange"
class="pagination" :current-page="listQuery.current" :page-sizes="[10, 20, 50, 100]" :page-size="listQuery.size"
@size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
@current-change="handleCurrentChange"
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -89,63 +44,36 @@
<div style="width: 48%"> <div style="width: 48%">
<div class="selected-tabBox"> <div class="selected-tabBox">
<el-table <el-table :data="selectedData" border :row-key="keyid" style="width: 100%">
:data="selectedData"
border
:row-key="keyid"
style="width: 100%"
>
<el-table-column prop="bqDm" align="center" label="标签代码" /> <el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqLb" align="center" label="标签类别"> <el-table-column prop="bqLb" align="center" label="标签类别">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqLb" :tag="false" :options="props.dic.D_GS_BQ_LB" />
:value="row.bqLb"
:tag="false"
:options="props.dic.D_GS_BQ_LB"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bqLx" align="center" label="标签类型"> <el-table-column prop="bqLx" align="center" label="标签类型">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
:value="row.bqLx"
:tag="false"
:options="props.dic.D_GS_BQ_LX"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bqMc" align="center" label="标签名称" /> <el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqZl" align="center" label="标签种类"> <el-table-column prop="bqZl" align="center" label="标签种类">
<template #default="{ row }"> <template #default="{ row }">
<DictTag <DictTag :value="row.bqZl" :tag="false" :options="props.dic.D_GS_BQ_ZL" />
:value="row.bqZl"
:tag="false"
:options="props.dic.D_GS_BQ_ZL"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button type="danger" @click="handleRemoveFromSelectedData(row)">移除</el-button>
type="danger"
@click="handleRemoveFromSelectedData(row)"
>移除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="fenye"> <div class="fenye">
<el-pagination <el-pagination class="pagination" @size-change="handleSizeChangeRight"
class="pagination" @current-change="handleCurrentChangeRight" :current-page="listQuery.current" :page-sizes="[10, 20, 50, 100]"
@size-change="handleSizeChangeRight" :page-size="listQuery.sizeRight" layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChangeRight" :total="selectedData.length"></el-pagination>
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.sizeRight"
layout="total, sizes, prev, pager, next, jumper"
:total="selectedData.length"
></el-pagination>
</div> </div>
</div> </div>
</div> </div>
@ -169,7 +97,7 @@ const props = defineProps({
}, },
dic: { dic: {
type: Object, type: Object,
default: () => {} default: () => { }
}, },
bqDl: { bqDl: {
type: String, type: String,
@ -284,8 +212,8 @@ const getDataList = () => {
activeTab.value == "01" activeTab.value == "01"
? "/mosty-gsxt/tbGsxtBqgl/selectPage" ? "/mosty-gsxt/tbGsxtBqgl/selectPage"
: activeTab.value == "02" : activeTab.value == "02"
? "/mosty-gsxt/tbGsxtBqgl/selectPage" ? "/mosty-gsxt/tbGsxtBqgl/selectPage"
: "/mosty-gsxt/tbGsxtBqzh/selectPage"; : "/mosty-gsxt/tbGsxtBqzh/selectPage";
let params = {}; let params = {};
console.log(activeTab.value, "activeTab.value"); console.log(activeTab.value, "activeTab.value");
if (activeTab.value === "01") { if (activeTab.value === "01") {
@ -393,14 +321,17 @@ defineExpose({
.tabBoxRadio .el-checkbox__inner { .tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important; border-radius: 50% !important;
} }
.tabBoxRadio .el-table__header-wrapper .el-checkbox { .tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none; display: none;
} }
:deep(.el-dialog) { :deep(.el-dialog) {
background: #fff !important; background: #fff !important;
border-radius: 8px !important; border-radius: 8px !important;
/* 其他样式 */ /* 其他样式 */
} }
.table_class { .table_class {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;

View File

@ -545,6 +545,15 @@ export const publicRoutes = [
icon: "article" icon: "article"
}, },
children: [ children: [
{
path: "/BaseLibrary",
name: "BaseLibrary",
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/BaseLibrary/index"),
meta: {
title: "基础库",
icon: "article"
}
},
{ {
path: "/mpvPeo", path: "/mpvPeo",
name: "mpvPeo", name: "mpvPeo",

View File

@ -130,7 +130,6 @@ export default {
unifiedLogin({ token, systemId }).then((data) => { unifiedLogin({ token, systemId }).then((data) => {
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName); this.commit("user/setUserName", data.userName);
setItem("USERNAME", data.userName); setItem("USERNAME", data.userName);

View File

@ -0,0 +1,290 @@
<template>
<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 #ryxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">姓名{{ row.ryXm }}</li>
<li class="flex one_text_detail">性别<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
<li class="flex one_text_detail">籍贯<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
<li class="one_text_detail">身份证{{ row.rySfzh }}</li>
<li class="one_text_detail">出生日期{{ row.ryCsrq }}</li>
<li class="flex one_text_detail">民族<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
</ul>
</div>
</template>
<template #jzxx="{ row }">
<div class="flex one_text_detail">户籍地区划<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
<div class="flex one_text_detail">户籍派出所{{ row.hjdPcsmc }}</div>
<div class="flex one_text_detail">户籍地详址{{ row.hjdXz }}</div>
</template>
<template #bqList="{ row }">
<ul >
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{ item.bqFz || 0 }} ) </li>
</ul>
</template>
<template #gxdw="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div>
<div class="flex">人员级别<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div>
<div class="flex one_text_detail">管控原因{{ row.zdrLkyy }}</div>
<div class="flex">管控状态<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div>
</template>
<template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
</template>
<template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template>
<template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="handleSend(row.id)">移入</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{BD_BK_CLYJBQ,D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvCar/components/addForm.vue";
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB,BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX","BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
const obj = ref({});
const showzxs = ref(false);
const zxsDilof = ref();
const show = ref(false);
const addFormDiloag = ref();
const searchBox = ref(); //搜索框
const chooseUserVisible = ref(false); //审批流程
const ids = ref([]);
const choosList = ref([]);
const visible = ref(false);
const visiblefp = ref(false);
const searchConfiger = ref([
{
label: "姓名",
prop: "ryXm",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证",
prop: "rySfzh",
placeholder: "请输入身份证",
showType: "input"
},
{
label: "户籍地",
prop: "hjdXz",
placeholder: "请输入户籍地",
showType: "input"
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 150,
tableColumn: [
{ label: "车牌号", prop: "hphm",showOverflowTooltip:true },
{ label: "车架号", prop: "clCjh" },
{ label: "车辆颜色", prop: "clYs",showOverflowTooltip:true},
{ label: "车辆所有人", prop: "clSyr" },
{ label: "管辖单位", prop: "gxSsbmmc", showSolt: true },
{ label: "管控民警姓名", prop: "gkMjXm", showSolt: true },
// { label: "状态", prop: "xtSjzt", showSolt: true },
// { label: "审核状态", prop: "zdrZt", showSolt: true },
]
});
onMounted(() => {
getList();
tabHeightFn();
});
// 移入
const handleSend=()=>{
}
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdcl/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
// 处理分配
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
});
};
// 转线索
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
//删除操作
const deleteRow = (id) => {
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtZdry/" + id).then((res) => {
ElMessage.success("删除成功");
getList();
});
});
};
//新增编辑
const addEdit = (type, row) => {
show.value = true;
nextTick(()=>{
addFormDiloag.value.init(type, row);
})
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style lang="scss" scoped>
.marks{
padding: 0 4px;
white-space: nowrap;
background: #73acf1;
border-radius: 4px;
color: #fff;
}
</style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,286 @@
<template>
<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"
fixed="right"
>
<template #qtLb="{ row }">
<DictTag :tag="false" :value="row.qtLb" :options="D_GS_ZDQT_LB" />
</template>
<template #qtFxdj="{ row }">
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" />
</template>
<template #bqList="{ row }">
<ul >
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{ item.bqFz || 0 }} ) </li>
</ul>
</template>
<template #zdryList="{ row }">
<span style="color: #0072ff">{{ row.zdryList ? row.zdryList.length : 0 }}</span>
</template>
<template #qtZt="{ row }">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="primary" @click="handleSend(row.id)">移入</el-link>
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 编辑 - 新增-->
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
</div>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import EditForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { ElMessage } from "element-plus";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_ZDR_CZZT,D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT","D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
const showzxs = ref(false);
const queryFrom = ref({});
const ids = ref([]);
const choosList = ref([]);
const show = ref(false);
const editFormDiloag = ref();
const searchBox = ref(); //搜索框
const visible = ref(false);
const visiblefp = ref(false);
const zxsDilof = ref();
const obj = ref({});
const searchConfiger = ref([
{
label: "群体名称",
prop: "qtMc",
placeholder: "请输入群体名称",
showType: "input"
},
{
label: "群体风险等级",
prop: "qtFxdj",
placeholder: "请选择群体风险等级",
showType: "select",
options: D_GS_ZDQT_FXDJ
},
{
label: "重点人人员级别",
prop: "zdrRyjb",
placeholder: "请选择重点人人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "群体类别",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "布控状态",
prop: "zdrBkZt",
placeholder: "请输入布控装态",
showType: "select",
options: D_GS_ZDR_BK_ZT
},
{
label: "布控类型",
prop: "bkzt",
placeholder: "请输入布控类型",
showType: "select",
options: D_GS_BQ_LX
}
]);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 150,
tableColumn: [
{ label: "群体名称", prop: "qtMc",width:150 },
{ label: "群体类别", prop: "qtLb" , showSolt: true,width:150 },
{ label: "风险等级", prop: "qtFxdj" , showSolt: true,width:150 },
{ label: "背景资料", prop: "qtBjzl" ,width:150 },
{ label: "背景信息", prop: "bgxx", showSolt: true ,width:150 },
{ label: "管辖单位", prop: "gxSsdwmc",width:150 },
{ label: "状态", prop: "qtZt", showSolt: true,width:150 },
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true,width:400 },
]
});
onMounted(() => {
tabHeightFn();
getList();
});
//移入
const handleSend = (id) => {
proxy.$confirm("确定要移入到重点群体?", "警告", { type: "warning" }).then(() => {
qcckPost({ id, qtlx: '01' }, "/mosty-gsxt/tbGsxtZdqt/update").then(() => {
proxy.$message({ type: "success", message: "移除成功" });
getList();
});
})
};
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
// 群体类型D_ZDRY_RYLX(01 重点 02 普通)
let data = { qtlx:'02',...pageData.pageConfiger, ...queryFrom.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
const addEdit = (type, row) => {
show.value = true;
visible.value = false;
nextTick(() => {
editFormDiloag.value.init(type, row);
});
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0)return ElMessage.error("请先选择需要布控的重点群体");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要分配的重点群体");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdqt/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
}).catch(() => { });
};
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
// 删除数据
const deleteRow = (id) =>{
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtZdqt/" + id).then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
});
})
}
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({});
</script>
<style lang="scss" scoped>
.marks{
padding: 0 4px;
white-space: nowrap;
background: #73acf1;
border-radius: 4px;
color: #fff;
}
</style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,274 @@
<template>
<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 #bqList="{ row }">
<ul>
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
item.bqFz || 0 }} ) </li>
</ul>
</template>
<template #ryXb="{ row }">
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
</template>
<template #ryJg="{ row }">
<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
</template>
<template #ryMz="{ row }">
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
</template>
<template #hjdQh="{ row }">
<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
</template>
<template #zdrRyjb="{ row }">
<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
</template>
<template #zdrBkZt="{ row }">
<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
</template>
<template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
</template>
<template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template>
<template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="handleSend(row.id)">移入</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 详情 -->
<AddForm ref="addFormDiloag" @updateDate="getList"
:dic="{ D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
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 AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
proxy.$dict("D_GS_ZDQT_ZT", "D_GS_ZDR_RYJB", "D_BZ_XB", "D_BZ_MZ", "D_BZ_XZQHDM", "D_GS_ZDR_BK_ZT", "D_GS_ZDR_CZZT", "D_GS_BQ_ZL", "D_GS_BQ_LB", "D_GS_BQ_LX", "D_GS_ZDR_YJDJ", "D_GS_BK_SSJZ", "D_GS_BK_SQLX", "D_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX");
const obj = ref({});
const show = ref(false);
const addFormDiloag = ref();
const searchBox = ref(); //搜索框
const ids = ref([]);
const choosList = ref([]);
const visible = ref(false);
const visiblefp = ref(false);
const searchConfiger = ref([
{
label: "姓名",
prop: "ryXm",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证",
prop: "rySfzh",
placeholder: "请输入身份证",
showType: "input"
},
{
label: "户籍地",
prop: "hjdXz",
placeholder: "请输入户籍地",
showType: "input"
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 150,
tableColumn: [
{ label: "姓名", prop: "ryXm", width: 150 },
{ label: "性别", prop: "ryXb", showSolt: true, width: 100 },
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100},
{ label: "身份证", prop: "rySfzh", width: 200 },
{ label: "民族", prop: "ryMz", showSolt: true, width: 100 },
{ label: "户籍地区划", prop: "hjdQh", showSolt: true, width: 150 },
{ label: "户籍派出所", prop: "hjdPcsmc", width: 200 },
{ label: "户籍地详址", prop: "hjdXz", width: 200 },
{ label: "审核状态", prop: "zdrZt", showSolt: true },
]
});
onMounted(() => {
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
// 人员类型D_ZDRY_RYLX(01 重点 02 普通〉
let data = { rylx:'02',...pageData.pageConfiger, ...queryFrom.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
//移入
const handleSend = (id) => {
proxy.$confirm("确定要移入到重点人员?", "警告", { type: "warning" }).then(() => {
qcckPost({ id, rylx: '01' }, "/mosty-gsxt/tbGsxtZdry/update").then(() => {
proxy.$message({ type: "success", message: "移入成功" });
getList();
});
})
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
// 处理分配
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value, uid: obj.value.fpid }, "/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
});
};
//删除操作
const deleteRow = (id) => {
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtZdry/" + id).then((res) => {
ElMessage.success("删除成功");
getList();
});
});
};
//新增编辑
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
addFormDiloag.value.init(type, row);
})
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style lang="scss" scoped>
.marks {
padding: 0 4px;
white-space: nowrap;
background: #73acf1;
border-radius: 4px;
color: #fff;
}
</style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,44 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="基础库">
<template #left>
<el-button v-for="(el,index) in tabBtn" :type="tabActive==index?'primary':''" @click="tabActive=index" :key="el">{{ el }}</el-button>
</template>
</PageTitle>
</div>
<ZdrPage v-if="tabActive==0" />
<ZdqtPage v-else-if="tabActive==1" />
<ZdclPage v-else-if="tabActive==2" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import ZdrPage from "./components/zdrPage.vue";
import ZdqtPage from "./components/zdqtPage.vue";
import ZdclPage from "./components/zdclPage.vue";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const tabBtn=ref(["重点人","重点群体","重点车辆"])
const tabActive=ref(0)
onMounted(() => {
});
</script>
<style lang="scss" scoped>
.marks {
padding: 0 4px;
white-space: nowrap;
background: #73acf1;
border-radius: 4px;
color: #fff;
}
</style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -48,6 +48,7 @@
:tableConfiger="pageData.tableConfiger" :tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData" @chooseData="chooseData"
fixed="right"
> >
<template #qtLb="{ row }"> <template #qtLb="{ row }">
<DictTag :tag="false" :value="row.qtLb" :options="D_GS_ZDQT_LB" /> <DictTag :tag="false" :value="row.qtLb" :options="D_GS_ZDQT_LB" />
@ -68,6 +69,7 @@
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link size="small" type="success" @click="handleremove(row.id)">移除</el-link>
<el-link size="small" type="primary" v-if=" row.qtZt == '01'" @click="handleSend(row.id)">办结</el-link> <el-link size="small" type="primary" v-if=" row.qtZt == '01'" @click="handleSend(row.id)">办结</el-link>
<el-link size="small" type="success" v-if=" row.qtZt == '01'" @click="addEdit('edit', row)">编辑</el-link> <el-link size="small" type="success" v-if=" row.qtZt == '01'" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link> <el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
@ -170,22 +172,22 @@ const pageData = reactive({
pageSize: 20, pageSize: 20,
pageCurrent: 1 pageCurrent: 1
}, },
controlsWidth: 150, controlsWidth: 280,
tableColumn: [ tableColumn: [
{ label: "群体名称", prop: "qtMc" }, { label: "群体名称", prop: "qtMc",width:150 },
{ label: "群体类别", prop: "qtLb" , showSolt: true}, { label: "群体类别", prop: "qtLb" , showSolt: true,width:150 },
{ label: "风险等级", prop: "qtFxdj" , showSolt: true}, { label: "风险等级", prop: "qtFxdj" , showSolt: true,width:150 },
{ label: "背景资料", prop: "qtBjzl" }, { label: "背景资料", prop: "qtBjzl" ,width:150 },
{ label: "背景信息", prop: "bgxx", showSolt: true }, { label: "背景信息", prop: "bgxx", showSolt: true ,width:150 },
{ label: "管辖单位", prop: "gxSsdwmc" }, { label: "管辖单位", prop: "gxSsdwmc",width:150 },
{ label: "列控原因", prop: "zdrLkyy" }, { label: "列控原因", prop: "zdrLkyy",width:150 },
{ label: "开始时间", prop: "zdrRkkssj" }, { label: "开始时间", prop: "zdrRkkssj",width:150 },
{ label: "截至时间", prop: "zdrRkjssj" }, { label: "截至时间", prop: "zdrRkjssj" ,width:150 },
{ label: "稳控人数", prop: "zdryList", showSolt: true }, { label: "稳控人数", prop: "zdryList", showSolt: true,width:150 },
{ label: "状态", prop: "qtZt", showSolt: true }, { label: "状态", prop: "qtZt", showSolt: true,width:150 },
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true}, { label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true,width:400 },
{ label: "创建单位", prop: "xtCjbmmc" }, { label: "创建单位", prop: "xtCjbmmc" ,width:150 },
{ label: "创建时间", prop: "xtCjsj" }, { label: "创建时间", prop: "xtCjsj",width:150 },
] ]
}); });
@ -203,7 +205,15 @@ const handleSend = (id) => {
}); });
}) })
}; };
// 移除
const handleremove = (id) => {
proxy.$confirm("确定要移除此重点群体?", "警告", { type: "warning" }).then(() => {
qcckPost({ id, qtlx: '02' }, "/mosty-gsxt/tbGsxtZdqt/update").then(() => {
proxy.$message({ type: "success", message: "移除成功" });
getList();
});
})
}
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
@ -224,7 +234,8 @@ const changeSize = (val) => {
// 获取列表 // 获取列表
const getList = () => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; // 群体类型D_ZDRY_RYLX(01 重点 02 普通)
let data = { qtlx:'01',...pageData.pageConfiger, ...queryFrom.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => { qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => {
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;

View File

@ -286,10 +286,6 @@ const delDictItem = (bqId) => {
const submit = () => { const submit = () => {
elform.value.submit((data) => { elform.value.submit((data) => {
console.log("xxxxx");
console.log(data);
data.zdrSjjz = data.zdrSjjz.join(","); data.zdrSjjz = data.zdrSjjz.join(",");
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdry/save" : "/mosty-gsxt/tbGsxtZdry/update"; let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdry/save" : "/mosty-gsxt/tbGsxtZdry/update";
let params = { ...data }; let params = { ...data };

View File

@ -195,7 +195,6 @@ const scrollToSection = (sectionId) => {
// 监听滚动,更新当前激活的锚点 // 监听滚动,更新当前激活的锚点
const handleScroll = () => { const handleScroll = () => {
if (!rightBox.value) return; if (!rightBox.value) return;
const scrollPosition = rightBox.value.scrollTop + 50; const scrollPosition = rightBox.value.scrollTop + 50;
const sections = [ const sections = [
'info-section', 'backinfo-section', 'groupLabels-section', 'info-section', 'backinfo-section', 'groupLabels-section',
@ -233,16 +232,11 @@ const info = ref()
const personnelTags = ref() const personnelTags = ref()
// 提交 // 提交
const submit = async () => { const submit = async () => {
console.log(info.value.throwData());
console.log(personnelTags.value.throwData());
// 使用Promise.all处理所有子组件的验证和数据获取 // 使用Promise.all处理所有子组件的验证和数据获取
const [infoData, personnelTagsData] = await Promise.all([ const [infoData, personnelTagsData] = await Promise.all([
info.value.throwData(), info.value.throwData(),
personnelTags.value.throwData(), personnelTags.value.throwData(),
]); ]);
console.log(infoData, personnelTagsData);
}; };

View File

@ -0,0 +1,65 @@
<template>
{{ visible }}
<!-- 添加 -->
<el-dialog v-model="visible" :title="Tips" width="40%" :before-close="handleClose">
<el-form ref="historyForm" style="max-width: 600px" :model="diaLogRuleForm" :rules="diaLogRules">
<div v-for="item in diaLogRuleForm" :key="item.props">
<el-form-item label-width="80px" :label="item.label" :prop="item.props" style="width: 100%;">
<el-input v-model="item.value" :placeholder="`请输入${item.label}`" />
</el-form-item>
</div>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="onCancel">取消</el-button>
<el-button type="primary" @click="onSubmit">
确认
</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { defineProps, defineEmits, ref, watch } from 'vue'
// 接收 v-model:visible
const props = defineProps({
visible: Boolean,
Tips: String,
diaLogRules: Object,
diaLogRuleForm: Object
})
const emit = defineEmits(['update:visible', 'submit'])
const formRef = ref(null)
const formData = ref({})
// 监听外部传入的 formData 变化(如编辑时回显)
watch(
[() => props.diaLogRuleForm, props.visible],
(val) => {
console.log(val, "变化之后的diaLogRuleForm");
formData.value = val ? { ...val } : {}
},
{ immediate: true }
)
// 取消:关闭弹窗
const onCancel = () => {
emit('update:visible', false)
}
// 提交
const onSubmit = () => {
emit('submit', props.diaLogRuleForm) // 提交数据
// formRef.value?.validate((valid) => {
// if (valid) {
// // 不在这里关闭!由父组件决定是否关闭(比如提交失败不关闭)
// }
// })
}
</script>
<style scoped lang="scss"></style>

View File

@ -7,12 +7,14 @@
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button> <el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button>
</template> </template>
<div class="flex just-center"> <div class="flex just-center">
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)" >{{ it.zdmc }}</el-button> <el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm"
@click="handleApplication(it)">{{
it.zdmc }}</el-button>
</div> </div>
</el-popover> </el-popover>
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click"> <el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
<template #reference> <template #reference>
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)" >指定分配</el-button> <el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)">指定分配</el-button>
</template> </template>
<div> <div>
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input> <el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
@ -25,7 +27,9 @@
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button> <el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button> <el-button size="small" type="primary" @click="handleMove">移交管控</el-button>
<el-button type="primary" size="small" @click="addEdit('add', '')"> <el-button type="primary" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon> <el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span> <span style="vertical-align: middle">新增</span>
</el-button> </el-button>
</PageTitle> </PageTitle>
@ -36,44 +40,32 @@
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="tabBox"> <div class="tabBox">
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:tableData="pageData.tableData" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
:tableColumn="pageData.tableColumn" @chooseData="chooseData">
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #ryxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">姓名{{ row.ryXm }}</li>
<li class="flex one_text_detail">性别<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
<li class="flex one_text_detail">籍贯<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
<li class="one_text_detail">身份证{{ row.rySfzh }}</li>
<li class="one_text_detail">出生日期{{ row.ryCsrq }}</li>
<li class="flex one_text_detail">民族<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
</ul>
</div>
</template>
<template #jzxx="{ row }">
<div class="flex one_text_detail">户籍地区划<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
<div class="flex one_text_detail">户籍派出所{{ row.hjdPcsmc }}</div>
<div class="flex one_text_detail">户籍地详址{{ row.hjdXz }}</div>
</template>
<template #bqList="{ row }"> <template #bqList="{ row }">
<ul > <ul>
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{ item.bqFz || 0 }} ) </li> <li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
item.bqFz || 0 }} ) </li>
</ul> </ul>
</template> </template>
<template #gxdw="{ row }"> <template #ryXb="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div> <DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
<div class="flex">人员级别<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div> </template>
<div class="flex one_text_detail">管控原因{{ row.zdrLkyy }}</div> <template #ryJg="{ row }">
<div class="flex">管控状态<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div> <DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
</template>
<template #ryMz="{ row }">
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
</template>
<template #hjdQh="{ row }">
<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
</template>
<template #zdrRyjb="{ row }">
<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
</template>
<template #zdrBkZt="{ row }">
<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
</template> </template>
<template #zdrCzzt="{ row }"> <template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" /> <DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
@ -81,34 +73,33 @@
<template #zdrZt="{ row }"> <template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" /> <DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template> </template>
<template #xtSjzt="{ row }"> <template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div> <div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link size="small" type="success" @click="handleremove(row.id)">移除</el-link>
<el-link size="small" type="success" v-if="row.zdrZt == '01'" @click="handleSend(row.id)">送审</el-link> <el-link size="small" type="success" v-if="row.zdrZt == '01'" @click="handleSend(row.id)">送审</el-link>
<el-link size="small" type="primary" v-if="row.zdrZt == '01'" @click="addEdit('edit', row)" >编辑</el-link> <el-link size="small" type="primary" v-if="row.zdrZt == '01'" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link> <el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link> <el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@changeNo="changeNo" ...pageData.pageConfiger,
@changeSize="changeSize" total: pageData.total
:tableHeight="pageData.tableHeight" }"></Pages>
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div> </div>
<!-- 详情 --> <!-- 详情 -->
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/> <AddForm ref="addFormDiloag" @updateDate="getList"
:dic="{ D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
<!-- 选择用户 --> <!-- 选择用户 -->
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/> <ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" />
<!-- 转线索 --> <!-- 转线索 -->
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX,D_GS_XS_QTLX }"></ZxsForm> <ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList"
:dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }"></ZxsForm>
</div> </div>
</template> </template>
@ -121,10 +112,11 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import AddForm from "./components/addForm.vue"; import AddForm from "./components/addForm.vue";
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_ZDR_YJDJ","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX"); const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
proxy.$dict("D_GS_ZDQT_ZT", "D_GS_ZDR_RYJB", "D_BZ_XB", "D_BZ_MZ", "D_BZ_XZQHDM", "D_GS_ZDR_BK_ZT", "D_GS_ZDR_CZZT", "D_GS_BQ_ZL", "D_GS_BQ_LB", "D_GS_BQ_LX", "D_GS_ZDR_YJDJ", "D_GS_BK_SSJZ", "D_GS_BK_SQLX", "D_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX");
const obj = ref({}); const obj = ref({});
const showzxs = ref(false); const showzxs = ref(false);
const zxsDilof = ref(); const zxsDilof = ref();
@ -179,13 +171,22 @@ const pageData = reactive({
}, },
controlsWidth: 150, controlsWidth: 150,
tableColumn: [ tableColumn: [
{ label: "重点人员信息", prop: "ryxx", showSolt: true,width:300,showOverflowTooltip:true }, { label: "姓名", prop: "ryXm", width: 150 },
{ label: "户籍居住信息", prop: "jzxx", showSolt: true,width:300, }, { label: "性别", prop: "ryXb", showSolt: true, width: 100 },
{ label: "标签", prop: "bqList", showSolt: true ,width:200,showOverflowTooltip:true}, { label: "籍贯", prop: "ryJg", showSolt: true, width: 100 },
{ label: "管辖单位", prop: "gxdw", showSolt: true,width:300, }, { label: "身份证", prop: "rySfzh", width: 200 },
{ label: "民族", prop: "ryMz", showSolt: true, width: 100 },
{ label: "户籍地区划", prop: "hjdQh", showSolt: true, width: 150 },
{ label: "户籍派出所", prop: "hjdPcsmc", width: 200 },
{ label: "户籍地详址", prop: "hjdXz", width: 200 },
{ label: "标签", prop: "bqList", showSolt: true, width: 400, showOverflowTooltip: true },
{ label: "管辖单位", prop: "gxSsbmmc", width: 200 },
{ label: "人员级别", prop: "zdrRyjb", showSolt: true, width: 130 },
{ label: "管控原因", prop: "zdrLkyy", width: 200, showOverflowTooltip: true },
{ label: "管控状态", prop: "zdrBkZt", width: 200, showOverflowTooltip: true },
{ label: "处置状态", prop: "zdrCzzt", showSolt: true }, { label: "处置状态", prop: "zdrCzzt", showSolt: true },
{ label: "状态", prop: "xtSjzt", showSolt: true },
{ label: "审核状态", prop: "zdrZt", showSolt: true }, { label: "审核状态", prop: "zdrZt", showSolt: true },
{ label: "状态", prop: "xtSjzt", showSolt: true },
] ]
}); });
@ -213,7 +214,8 @@ const changeSize = (val) => {
// 获取列表 // 获取列表
const getList = () => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; // 人员类型D_ZDRY_RYLX(01 重点 02 普通〉
let data = { rylx: '01', ...pageData.pageConfiger, ...queryFrom.value };
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => { qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;
@ -226,12 +228,21 @@ const getList = () => {
//送审 //送审
const handleSend = (id) => { const handleSend = (id) => {
proxy.$confirm("确定要送审?", "警告", { type: "warning" }).then(() => { proxy.$confirm("确定要送审?", "警告", { type: "warning" }).then(() => {
qcckPost({id}, "/mosty-gsxt/tbGsxtZdry/subSh").then(() => { qcckPost({ id }, "/mosty-gsxt/tbGsxtZdry/subSh").then(() => {
proxy.$message({ type: "success", message: "送审成功" }); proxy.$message({ type: "success", message: "送审成功" });
getList(); getList();
}); });
}) })
}; };
// 移除
const handleremove = (id) => {
proxy.$confirm("确定要移除此重点人员?", "警告", { type: "warning" }).then(() => {
qcckPost({ id, rylx: '02' }, "/mosty-gsxt/tbGsxtZdry/update").then(() => {
proxy.$message({ type: "success", message: "移除成功" });
getList();
});
})
}
const chooseData = (data) => { const chooseData = (data) => {
@ -258,7 +269,7 @@ const handleUserSelected = (val) => {
// 处理分配 // 处理分配
const handlefp = () => { const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人"); if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => { qcckPost({ ids: ids.value, uid: obj.value.fpid }, "/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
ElMessage.success("分配成功"); ElMessage.success("分配成功");
visible.value = false; visible.value = false;
visiblefp.value = false; visiblefp.value = false;
@ -304,7 +315,7 @@ const deleteRow = (id) => {
//新增编辑 //新增编辑
const addEdit = (type, row) => { const addEdit = (type, row) => {
show.value = true; show.value = true;
nextTick(()=>{ nextTick(() => {
addFormDiloag.value.init(type, row); addFormDiloag.value.init(type, row);
}) })
}; };
@ -319,7 +330,7 @@ const tabHeightFn = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.marks{ .marks {
padding: 0 4px; padding: 0 4px;
white-space: nowrap; white-space: nowrap;
background: #73acf1; background: #73acf1;
@ -331,5 +342,4 @@ const tabHeightFn = () => {
.el-loading-mask { .el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important; background: rgba(0, 0, 0, 0.5) !important;
} }
</style> </style>

View File

@ -67,23 +67,20 @@ const pageData = reactive({
tableData: [], tableData: [],
tableColumn: [{ tableColumn: [{
prop: 'cph', prop: 'cph',
label: '人员姓名', label: '录入人员',
}, { }, {
prop: 'cllx', prop: 'cllx',
label: '身份证号码', label: '录入时间',
showSolt: true, showSolt: true,
prop: 'clpp', prop: 'clpp',
}, { }, {
showSolt: true, showSolt: true,
prop: 'clys', prop: 'clys',
label: '关系', label: '表现内容',
}, { }, {
showSolt: true, showSolt: true,
prop: 'clpp', prop: 'clpp',
label: '车辆品牌', label: '附件信息',
prop: 'clsbm',
label: '联系电话',
}], }],
tableHeight: '200px', tableHeight: '200px',
keyCount: 0, keyCount: 0,
@ -105,7 +102,7 @@ const formData = reactive({
username: "", username: "",
ID: "" ID: ""
}) })
const rulesForm = ref( identityCardRule({ validator: true },'rySfzh')) const rulesForm = ref(identityCardRule({ validator: true }, 'rySfzh'))
// 修改数据接口 // 修改数据接口
const dataModel = ref() const dataModel = ref()
const addMarks = (val) => { const addMarks = (val) => {
@ -136,8 +133,8 @@ const addMarks = (val) => {
pageData.tableData.push(val) pageData.tableData.push(val)
} }
} }
onMounted(()=>{ onMounted(() => {
console.log(identityCardRule,"dadad1");
}) })
// 删除车辆 // 删除车辆

View File

@ -36,7 +36,7 @@ import { identityCardRule } from "@/utils/rules"
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue"; import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import VehiclDoing from "../component/vehiclDoing.vue"; import VehiclDoing from "../component/vehiclDoing.vue";
import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js' import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbGsxtZdryAjxxselectAjxx, tbZdryClxxUpdate } from '@/api/zdr.js'
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据 const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
@ -67,24 +67,17 @@ const pageData = reactive({
tableData: [], tableData: [],
tableColumn: [{ tableColumn: [{
prop: 'cph', prop: 'cph',
label: '人员姓名', label: '案件编号',
}, { }, {
prop: 'cllx', prop: 'cllx',
label: '身份证号码', label: '案件名称',
showSolt: true, showSolt: true,
prop: 'clpp', prop: 'clpp',
}, { }, {
showSolt: true, showSolt: true,
prop: 'clys', prop: 'clys',
label: '关系', label: '受案时间',
}, { },],
showSolt: true,
prop: 'clpp',
label: '车辆品牌',
prop: 'clsbm',
label: '联系电话',
}],
tableHeight: '200px', tableHeight: '200px',
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
@ -105,7 +98,7 @@ const formData = reactive({
username: "", username: "",
ID: "" ID: ""
}) })
const rulesForm = ref( identityCardRule({ validator: true },'rySfzh')) const rulesForm = ref(identityCardRule({ validator: true }, 'rySfzh'))
// 修改数据接口 // 修改数据接口
const dataModel = ref() const dataModel = ref()
const addMarks = (val) => { const addMarks = (val) => {
@ -136,8 +129,8 @@ const addMarks = (val) => {
pageData.tableData.push(val) pageData.tableData.push(val)
} }
} }
onMounted(()=>{ onMounted(() => {
console.log(identityCardRule,"dadad1"); // console.log(identityCardRule,"dadad1");
}) })
// 删除车辆 // 删除车辆
@ -190,7 +183,9 @@ const gettbZdryClxxSelectPage = () => {
pageSize: 20, pageSize: 20,
zdrid: listData.value.id zdrid: listData.value.id
} }
tbZdryClxxSelectPage(promes).then(res => { tbGsxtZdryAjxxselectAjxx(promes).then(res => {
console.log(res, "案件信息");
pageData.tableData = res.records pageData.tableData = res.records
}) })
} }

View File

@ -26,38 +26,35 @@
<el-form-item class="form-actions"> <el-form-item class="form-actions">
<el-button type="primary" @click="check">查询</el-button> <el-button type="primary" @click="check">查询</el-button>
<el-button @click="resetForm">重置</el-button> <el-button @click="resetForm">重置</el-button>
<el-button @click="add">新增</el-button> <el-button @click="openDialog('新增密切联系人')">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #clys="{ row }"> <!-- <template #ryXm="{ row }">
<DictTag :tag="false" :value="row.clys" :options="D_BZ_CLYS" /> <DictTag :tag="false" :value="row.clys" :options="D_BZ_CLYS" />
</template> </template> -->
<template #cllx="{ row }">
<DictTag :tag="false" :value="row.cllx" :options="D_BZ_CLLX" />
</template>
<template #clpp="{ row }">
<DictTag :tag="false" :value="row.clpp" :options="D_BZ_CLPP" />
</template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link> <el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
<el-link type="danger" @click="updDictItem(row)">修改</el-link> <el-link type="danger" @click="openDialog('修改密切联系人', row)">修改</el-link>
</template> </template>
</MyTable> </MyTable>
<diaLogForm v-model:visible="dialogVisible" :diaLogRules="diaLogRules" :diaLogRuleForm="diaLogRuleForm"
@submit="addPersonOrModifica" :Tips="Tips">
</diaLogForm>
</div> </div>
<VehiclDoing v-model="chooseMarksVisible" @comfirm="addMarks" :data="dataModel"
:dict="{ D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP }" />
</template> </template>
<script setup> <script setup>
import { identityCardRule } from "@/utils/rules" import { identityCardRule } from "@/utils/rules"
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue"; import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import VehiclDoing from "../component/vehiclDoing.vue"; import diaLogForm from "../components/diaLogForm.vue";
import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js' import { tbGsxtZdryLxrsaveOrUpdateLxr, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbGsxtZdryLxrselectLxrBy, tbZdryClxxUpdate } from '@/api/zdr.js'
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据 const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
@ -75,36 +72,37 @@ const props = defineProps({
default: false default: false
}, },
}) })
const ruleForm = ref({
name: '',
cardID: '',
relation: '',
phone: '',
})
const dialogVisible = ref(false)
const listData = ref({}) const listData = ref({})
const Tips = ref(false)
const addUpd = ref(true) const addUpd = ref(true)
watch(() => props.dataList, (val) => {
if (val) {
listData.value = val
gettbZdryClxxSelectPage()
}
}, { deep: true })
// 表格数据 // 表格数据
const pageData = reactive({ const pageData = reactive({
tableData: [], tableData: [],
tableColumn: [{ tableColumn: [{
prop: 'cph', prop: 'ryXm',
label: '人员姓名', label: '人员姓名',
}, { }, {
prop: 'cllx', prop: 'rySfzh',
label: '身份证号码', label: '身份证号码',
showSolt: true, width: 200
prop: 'clpp',
}, { }, {
showSolt: true,
prop: 'clys', prop: 'dygx',
label: '关系', label: '关系',
}, { }, {
showSolt: true,
prop: 'clpp',
label: '车辆品牌',
prop: 'clsbm', prop: 'lxrDh',
label: '联系电话', label: '联系电话',
width: 120
}], }],
tableHeight: '200px', tableHeight: '200px',
keyCount: 0, keyCount: 0,
@ -126,39 +124,107 @@ const formData = reactive({
username: "", username: "",
ID: "" ID: ""
}) })
const rulesForm = ref( identityCardRule({ validator: true },'rySfzh')) const rulesForm = ref(identityCardRule({ validator: true }, 'rySfzh'))
// 修改数据接口 const diaLogRuleForm = reactive([{ prop: 'username', label: '姓名', type: 'input', value: '' },
const dataModel = ref() { prop: 'cardID', label: '身份证号', type: 'input', value: '' },
const addMarks = (val) => { { prop: 'relation', label: '关系', type: 'input', value: '' },
const params = { { prop: 'phone', label: '联系电话', type: 'input', value: '' }
...val, ])
zdrid: listData.value.id, watch(() => props.dataList, (val) => {
if (val) {
console.log(val, 'listData.value');
listData.value = val
} }
}, { deep: true })
// 弹出增加或者修改弹窗
const openDialog = (type, formVal) => {
dialogVisible.value = true
Tips.value = type
console.log(formVal, "formVal");
console.log(dialogVisible.value, "dialogVisible.value")
if (type === '新增密切联系人') {
diaLogRuleForm.forEach(item => {
item.value = ''
})
} else {
diaLogRuleForm[0].value = formVal.ryXm
diaLogRuleForm[1].value = formVal.rySfzh
diaLogRuleForm[2].value = formVal.dygx
diaLogRuleForm[3].value = formVal.lxrDh
}
}
// 增加或修改数据接口
const dataModel = ref()
const addPersonOrModifica = async (val) => {
console.log('dafafaf', val)
let params = {
id: listData.value.id
}
val.forEach(item => {
switch (item.label) {
case '姓名':
params.ryXm = item.value
break
case '身份证号':
params.rySfzh = item.value
break
case '关系':
params.dygx = item.value
break
case '联系电话':
params.lxrDh = item.value
break
default:
break
}
})
console.log(params, "fafafafaff");
if (props.showBut && !props.disabled) { if (props.showBut && !props.disabled) {
if (addUpd.value) { const res = await tbGsxtZdryLxrsaveOrUpdateLxr(params)
tbZdryClxxAdd(params).then(res => { console.log(res, "联系人增加res");
gettbZdryClxxSelectPage()
proxy.$message({ // if (type) {
message: '关联车辆添加成功',
type: 'success' // if (res.code == 200) {
}) // gettbZdryClxxSelectPage()
}) // proxy.$message({
} // message: '密切联系人添加成功',
else { // type: 'success'
tbZdryClxxUpdate(params).then(res => { // })
gettbZdryClxxSelectPage() // } else {
proxy.$message({ // proxy.$message({
message: '关联车辆修改成功', // message: '密切联系人添加失败',
type: 'success' // type: 'error'
}) // })
}) // }
}
// } else {
// if (res.code == 200) {
// gettbZdryClxxSelectPage()
// proxy.$message({
// message: '密切联系人添加成功',
// type: 'success'
// })
// } else {
// proxy.$message({
// message: '密切联系人添加失败',
// type: 'error'
// })
// }
// }
} else { } else {
pageData.tableData.push(val) pageData.tableData.push(val)
} }
} }
onMounted(()=>{ onMounted(() => {
console.log(identityCardRule,"dadad1"); // console.log(identityCardRule,"dadad1");
}) })
// 删除车辆 // 删除车辆
@ -204,15 +270,19 @@ const AddPore = () => {
dataModel.value = {} dataModel.value = {}
addUpd.value = true addUpd.value = true
} }
// 查询车辆 // 初始化密切联系人
const gettbZdryClxxSelectPage = () => { const gettbZdryClxxSelectPage = () => {
const promes = { const promes = {
pageCurrent: 1, pageCurrent: 1,
pageSize: 20, pageSize: 20,
zdrid: listData.value.id zdrid: listData.value.id
} }
tbZdryClxxSelectPage(promes).then(res => { tbGsxtZdryLxrselectLxrBy(promes).then(res => {
pageData.tableData = res.records
pageData.tableData = res
console.log(pageData.tableData, "表格原生数据");
}) })
} }
// 抛出数据并验证标签列表不为空 // 抛出数据并验证标签列表不为空
@ -238,10 +308,7 @@ defineExpose({
padding: 10px; padding: 10px;
} }
::v-deep(.el-form) {
display: flex;
justify-content: space-between;
}
.left_box { .left_box {
width: 200px; width: 200px;
@ -276,39 +343,46 @@ defineExpose({
padding: 0 16px; padding: 0 16px;
background-color: #fff; background-color: #fff;
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
::v-deep(.el-form) {
display: flex;
justify-content: space-between;
}
/* 移除冲突样式:不要用 justify-content */
/* 控制所有 el-form-item 高度和垂直居中 */
.form-inline :deep(.el-form-item) {
margin-bottom: 0;
height: 60px;
display: flex;
align-items: center;
}
/* ✅ 按钮区域靠右,且不换行 */
.form-inline .form-actions {
margin-left: auto;
/* 推到最右边 */
white-space: nowrap;
/* 防止按钮换行 */
}
/* 统一按钮样式,增加间距和视觉舒适度 */
.form-inline :deep(.el-button) {
height: 36px;
padding: 8px 16px;
font-size: 14px;
border-radius: 4px;
}
/* 按钮之间留出间距(除了第一个) */
.form-inline :deep(.el-button:not(:first-child)) {
margin-left: 12px;
/* 比原来的 8px 更宽松 */
}
} }
/* 移除冲突样式:不要用 justify-content */
/* 控制所有 el-form-item 高度和垂直居中 */
.form-inline :deep(.el-form-item) {
margin-bottom: 0;
height: 60px;
display: flex;
align-items: center;
}
/* ✅ 按钮区域靠右,且不换行 */
.form-inline .form-actions {
margin-left: auto;
/* 推到最右边 */
white-space: nowrap;
/* 防止按钮换行 */
}
/* 统一按钮样式,增加间距和视觉舒适度 */
.form-inline :deep(.el-button) {
height: 36px;
padding: 8px 16px;
font-size: 14px;
border-radius: 4px;
}
/* 按钮之间留出间距(除了第一个) */
.form-inline :deep(.el-button:not(:first-child)) {
margin-left: 12px;
/* 比原来的 8px 更宽松 */
}
// .headClass::after { // .headClass::after {
// content: ''; // content: '';

View File

@ -1,23 +1,44 @@
<template> <template>
<div> <div>
<div class="headClass" style=""> <div class="headClass" style="">
<h3>全要素布控</h3> <h3>全要素布控</h3>
</div>
<div class="marginBox">
<div>身份证号码683716907261785789 <span>({{ status?'已布控':'未布控' }})</span></div>
<div>手机号码18928937987 <span>({{ status?'已布控':'未布控' }})</span> <div> 18928937987 <span>({{ status?'已布控':'未布控' }})</span></div></div>
<div>车牌号码冀A09219 <span>({{ status?'已布控':'未布控' }})</span></div>
</div>
</div> </div>
<div class="marginBox">
<div>身份证号码{{ listData.rySfzh }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
<div>手机号码{{ listData.ryLxdh?.[0] }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span>
<div> {{ listData.ryLxdh?.[1] }}<span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
</div>
<div>车牌号码{{ listData.clHm }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
</div>
</div>
</template> </template>
<script setup> <script setup>
import { ref ,onMounted} from 'vue'; import { ref, onMounted, watch } from 'vue';
const props = defineProps({
dataList: {
type: Object,
default: () => { },
}, disabled: {
type: Boolean,
default: false
},
showBut: {
type: Boolean,
default: false
},
})
const status = ref(false)
const listData = ref({})
watch(() => props.dataList, (val) => {
if (val) {
listData.value = val
const status=ref(false) }
}, { deep: true })
onMounted(() => { onMounted(() => {
console.log('Deployment 组件已挂载!') console.log('Deployment 组件已挂载!')
}) })
@ -28,45 +49,48 @@ onMounted(() => {
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
.headClass { .headClass {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #303133; color: #303133;
margin: 0 0 10px 0; margin: 0 0 10px 0;
border-bottom: 2px solid #409eff; border-bottom: 2px solid #409eff;
position: relative; position: relative;
display: flex;
justify-content: space-between;
align-items: center;
}
.marginBox {
span {
margin-left: 10px;
color: #ff4040;
}
&>:nth-child(1) {
width: 300px;
height: 30px;
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
justify-content: space-between;
}
&>:nth-child(2) {
width: 400px;
height: 30px;
display: flex;
align-items: center;
justify-content: space-between;
}
&>:nth-child(3) {
width: 210px;
height: 30px;
display: flex;
align-items: center;
justify-content: space-between;
}
} }
.marginBox{
span{
margin-left: 10px;
color: #ff4040;
}
&>:nth-child(1){
width: 300px;
height: 30px;
display: flex;
align-items: center;
justify-content: space-between;
}
&>:nth-child(2){
width: 400px;
height: 30px;
display: flex;
align-items: center;
justify-content: space-between;
}
&>:nth-child(3){
width: 210px;
height: 30px;
display: flex;
align-items: center;
justify-content: space-between;
}
}
</style> </style>

View File

@ -53,6 +53,7 @@ const addUpd = ref(true)
watch(() => props.dataList, (val) => { watch(() => props.dataList, (val) => {
if (val) { if (val) {
listData.value = val listData.value = val
console.log(listData.value, 'listData.value')
gettbZdryClxxSelectPage() gettbZdryClxxSelectPage()
} }
}, { deep: true }) }, { deep: true })

View File

@ -36,7 +36,7 @@ import { identityCardRule } from "@/utils/rules"
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue"; import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import VehiclDoing from "../component/vehiclDoing.vue"; import VehiclDoing from "../component/vehiclDoing.vue";
import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js' import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbGsxtZdryZfjlselectZfjl, tbZdryClxxUpdate } from '@/api/zdr.js'
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据 const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
@ -59,6 +59,8 @@ const addUpd = ref(true)
watch(() => props.dataList, (val) => { watch(() => props.dataList, (val) => {
if (val) { if (val) {
listData.value = val listData.value = val
gettbZdryClxxSelectPage() gettbZdryClxxSelectPage()
} }
}, { deep: true }) }, { deep: true })
@ -67,23 +69,26 @@ const pageData = reactive({
tableData: [], tableData: [],
tableColumn: [{ tableColumn: [{
prop: 'cph', prop: 'cph',
label: '人员姓名', width: 150,
label: '走访民警/辅警',
}, { }, {
prop: 'cllx', prop: 'cllx',
label: '身份证号码', label: '走访方式',
showSolt: true, showSolt: true,
prop: 'clpp', prop: 'clpp',
}, { }, {
showSolt: true, showSolt: true,
prop: 'clys', prop: 'clys',
label: '关系', label: '走访时间',
}, { }, {
showSolt: true, showSolt: true,
prop: 'clpp', prop: 'clpp',
label: '车辆品牌', label: '走访地址',
},
prop: 'clsbm', {
label: '联系电话', showSolt: true,
prop: 'clpp',
label: '走访情况',
}], }],
tableHeight: '200px', tableHeight: '200px',
keyCount: 0, keyCount: 0,
@ -105,7 +110,7 @@ const formData = reactive({
username: "", username: "",
ID: "" ID: ""
}) })
const rulesForm = ref( identityCardRule({ validator: true },'rySfzh')) const rulesForm = ref(identityCardRule({ validator: true }, 'rySfzh'))
// 修改数据接口 // 修改数据接口
const dataModel = ref() const dataModel = ref()
const addMarks = (val) => { const addMarks = (val) => {
@ -136,8 +141,8 @@ const addMarks = (val) => {
pageData.tableData.push(val) pageData.tableData.push(val)
} }
} }
onMounted(()=>{ onMounted(() => {
console.log(identityCardRule,"dadad1");
}) })
// 删除车辆 // 删除车辆
@ -190,8 +195,9 @@ const gettbZdryClxxSelectPage = () => {
pageSize: 20, pageSize: 20,
zdrid: listData.value.id zdrid: listData.value.id
} }
tbZdryClxxSelectPage(promes).then(res => { tbGsxtZdryZfjlselectZfjl(promes).then(res => {
pageData.tableData = res.records console.log(res, "走访记录");
pageData.tableData = res
}) })
} }
// 抛出数据并验证标签列表不为空 // 抛出数据并验证标签列表不为空