数字督察一体化平台-前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

287 lines
8.0 KiB

<template>
<div class="flex gap">
<el-tag type="info" effect="plain" closable v-for="(item, index) in modelValue" :key="item"
@close="handleRemove(index)">{{ item.name }}
</el-tag>
<el-button size="small" type="primary" plain @click="show = true">
<template #icon>
<icon name="el-icon-Plus"/>
</template>
</el-button>
</div>
<el-dialog title="选择警员" v-model="show" width="60vw" top="5vh">
<div style="min-height: 70vh">
<el-row :gutter="20">
<el-col :span="6">
<el-scrollbar max-height="70vh">
<el-tree
:data="treeData"
:props="{ label: 'shortName', value: 'id' }"
:default-expanded-keys="['12630']"
node-key="id"
@node-click="handleSelectDepart"
/>
</el-scrollbar>
</el-col>
<el-col :span="18">
<header class="flex between mb-20">
<el-form class="flex gap wrap">
<el-input
placeholder="警员姓名"
v-model="query.name"
clearable
style="width: 190px"
/>
<el-input
placeholder="请输入"
v-model="query.empNo"
clearable
style="width: 190px"
/>
<el-input
placeholder="身份证号码"
v-model="query.idCode"
clearable
style="width: 190px"
/>
</el-form>
<el-button type="primary" @click="getList">查询</el-button>
</header>
<div class="table-container">
<el-table
ref="ableRef"
:data="polices"
row-key="id"
max-height="890px"
v-loading="loading"
>
<el-table-column width="55">
<template #default="{row}">
<el-checkbox
v-model="row.isCheck" @change="changeCheck(row)" size="large" />
</template>
</el-table-column>
<el-table-column
label="姓名"
prop="name"
width="90"
/>
<el-table-column
label="警号"
prop="empNo"
width="100"
show-overflow-tooltip
/>
<el-table-column
label="人员属性"
width="120"
align="center"
>
<template #default="{ row }">
<span>{{
getDictLable(
dict.personType,
row.personType
)
}}</span>
</template>
</el-table-column>
<el-table-column
label="职位"
width="120"
align="center"
>
<template #default="{ row }">
<span v-if="row.position">
<span v-if="row.level === 0"
>局领导{{ row.position }}</span
>
<span v-if="row.level === 2"
>二级机构{{ row.position }}</span
>
<span v-if="row.level === 3"
>三机机构{{ row.position }}</span
>
<span v-if="row.level === 4"
>四机机构{{ row.position }}</span
>
</span>
</template>
</el-table-column>
<el-table-column
label="机构名称"
prop="departShortName"
width="200"
/>
</el-table>
</div>
<div class="flex end mt-8">
<el-pagination
@size-change="getList"
@current-change="getList"
:page-sizes="[10, 20]"
v-model:page-size="query.size"
v-model:current-page="query.current"
layout="total, sizes, prev, pager, next"
:total="total"
>
</el-pagination>
</div>
<div class="flex gap mt-10 wrap v-center">
<span>已选 {{checkPolices.length}} 员警员:</span>
<el-tag
v-for="(item, index) in checkPolices"
:key="item"
closable
@close="handleRemove(index)"
>{{ item.name }}
</el-tag
>
</div>
</el-col>
</el-row>
</div>
<footer class="flex end">
<el-button @click="show = false">取消</el-button>
<el-button type="primary" @click="submit">确定</el-button>
</footer>
</el-dialog>
</template>
<script setup>
import {departTreeList} from "@/api/system/depart";
import {listPolice} from "@/api/system/police";
import useCatchStore from "@/stores/modules/catch";
import {getDictLable} from "@/utils/util";
const catchSotre = useCatchStore();
const dict = catchSotre.getDicts(["personType"]);
const props = defineProps({
modelValue: {
type: Array,
default: []
},
departId: {
type: String
},
dataDepartId:{
type:String
}
});
const emit = defineEmits(['update:modelValue'])
const show = ref(false);
const query = ref({
current: 1,
departBranch: true
});
watch(() => props.departId, (val) => {
query.value.departId = val;
getList()
})
const total = ref(0);
const ableRef = ref(null)
const treeData = catchSotre.getDepartsAll();
const polices = ref([]);
const loading = ref(false)
function getList() {
loading.value = true
listPolice(query.value).then((data) => {
polices.value = data.records;
setCheckFun(data.records)
total.value = data.total;
loading.value = false
});
}
const setCheckFun = (row) => {
let keyValue = checkPolices.value.map(s=>s.empNo);
row.forEach((s) => {
if(keyValue.indexOf(s.empNo) >= 0){
s.isCheck=true;
}else{
s.isCheck=false;
}
})
}
const checkPolices = ref([]);
watch(()=>props.modelValue,(val)=>{
console.log('val',val)
checkPolices.value =val;
getList();
},{immediate:true,deep:true})
watch(()=>props.dataDepartId,(val)=>{
console.log('val',val)
if(val){
query.value.departId = val.id;
getList();
}
},{immediate:true,deep:true})
const changeCheck = (row)=>{
let checkIndex =checkPolices.value.map(s=>s.empNo);
if(row.isCheck){
checkPolices.value.push({
name: row.name,
empNo: row.empNo,
idCode: row.idCode
});
}else{
checkPolices.value.splice(checkIndex.indexOf(row.empNo),1)
}
}
function handleSelectDepart(node) {
query.value.departId = node.id;
getList();
}
function handleRemove(index) {
if(polices.value.length >0){
console.log('s',polices.value)
console.log('checkPolices.value[index]',checkPolices.value)
polices.value.forEach(s=>{
if(s.empNo == checkPolices.value[index].empNo){
s.isCheck =false
}
})
}
checkPolices.value.splice(index, 1)
emit('update:modelValue', checkPolices.value)
}
function submit() {
emit('update:modelValue', checkPolices.value)
polices.value.forEach(s=>{
s.isCheck =false
})
checkPolices.value=[]
show.value = false
}
onMounted(() => {
getList();
});
</script>
<style lang="scss">
.el-tree-node.is-current > .el-tree-node__content {
background-color: #e8e9f3;
}
</style>