|
@@ -53,14 +53,16 @@
|
|
|
<div class="dept-select">
|
|
|
<el-tree-select
|
|
|
clearable
|
|
|
- v-model="formData.deptId"
|
|
|
+ v-model="formData.deptIds"
|
|
|
:data="deptList"
|
|
|
:props="defaultProps"
|
|
|
+ multiple
|
|
|
+ show-checkbox
|
|
|
check-strictly
|
|
|
node-key="id"
|
|
|
filterable
|
|
|
:placeholder="t('configPerson.rpHolder')"
|
|
|
- @node-click="handleDeptUserTreeNodeClick"
|
|
|
+ @node-click="handleDeptCheckChange"
|
|
|
@clear="handleClearDeptForPerson"
|
|
|
/>
|
|
|
</div>
|
|
@@ -175,6 +177,7 @@ const formData = ref({
|
|
|
assetProperty: undefined,
|
|
|
reason: '',
|
|
|
picUrl: undefined,
|
|
|
+ deptIds: [] as number[], // 改为部门ID数组
|
|
|
})
|
|
|
|
|
|
const queryParams = reactive({
|
|
@@ -197,7 +200,7 @@ const tempRelations = ref<Array<{
|
|
|
reason: string
|
|
|
}>>([])
|
|
|
|
|
|
-watch(selectedDevices, (newVal, oldVal) => {
|
|
|
+watch(selectedDevices, async (newVal, oldVal) => {
|
|
|
// 找出新增的设备
|
|
|
const addedDevices = newVal.filter(id => !oldVal.includes(id));
|
|
|
// 找出取消选择的设备
|
|
@@ -224,7 +227,60 @@ watch(selectedDevices, (newVal, oldVal) => {
|
|
|
selectedUsers.value = []
|
|
|
formData.value.reason = ''
|
|
|
}
|
|
|
-})
|
|
|
+
|
|
|
+ // 获取设备部门ID集合
|
|
|
+ const deptIdSet = new Set<number>()
|
|
|
+ newVal.forEach(deviceId => {
|
|
|
+ const device = simpleDevices.value.find(d => d.id === deviceId)
|
|
|
+ if (device?.deptId) deptIdSet.add(device.deptId)
|
|
|
+ })
|
|
|
+ formData.value.deptIds = Array.from(deptIdSet)
|
|
|
+ // 部门更新后自动加载人员
|
|
|
+ await getUserList()
|
|
|
+}, { deep: true })
|
|
|
+
|
|
|
+// 监听部门ID变化 部门变化后重新筛选用户
|
|
|
+watch(
|
|
|
+ () => formData.value.deptIds,
|
|
|
+ async (newVal, oldVal) => {
|
|
|
+ // 找出被删除的部门
|
|
|
+ const deletedDeptIds = oldVal?.filter(id => !newVal?.includes(id)) || []
|
|
|
+
|
|
|
+ if (deletedDeptIds.length > 0) {
|
|
|
+ // 找出被删除部门下的用户ID
|
|
|
+ const usersToRemove = simpleUsers.value
|
|
|
+ .filter(user => deletedDeptIds.includes(user.deptId))
|
|
|
+ .map(user => user.id)
|
|
|
+
|
|
|
+ // 同步更新已选用户
|
|
|
+ selectedUsers.value = selectedUsers.value.filter(
|
|
|
+ id => !usersToRemove.includes(id)
|
|
|
+ )
|
|
|
+
|
|
|
+ // 更新关联记录
|
|
|
+ tempRelations.value = tempRelations.value.map(relation => {
|
|
|
+ const validUserIds = relation.userIds.filter(
|
|
|
+ id => !usersToRemove.includes(id)
|
|
|
+ )
|
|
|
+
|
|
|
+ // 获取有效用户名称
|
|
|
+ const validUsers = simpleUsers.value.filter(
|
|
|
+ u => validUserIds.includes(u.id)
|
|
|
+ )
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...relation,
|
|
|
+ userIds: validUserIds,
|
|
|
+ userNames: validUsers.map(u => u.nickname).join(', ')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重新加载人员列表
|
|
|
+ await getUserList()
|
|
|
+ },
|
|
|
+ { deep: true } // 深度监听数组变化
|
|
|
+)
|
|
|
|
|
|
const handleUserSelectionChange = (userIds: number[]) => {
|
|
|
// 处理清空责任人的情况
|
|
@@ -298,8 +354,19 @@ const getUserList = async () => {
|
|
|
// 开始加载时禁用搜索框
|
|
|
personLoaded.value = false
|
|
|
|
|
|
+ // 保留当前选中但不在被删除部门的用户
|
|
|
+ const currentDeptIds = formData.value.deptIds || []
|
|
|
+ const validUserIds = simpleUsers.value
|
|
|
+ .filter(user => currentDeptIds.includes(user.deptId))
|
|
|
+ .map(user => user.id)
|
|
|
+
|
|
|
+ selectedUsers.value = selectedUsers.value.filter(
|
|
|
+ id => validUserIds.includes(id)
|
|
|
+ )
|
|
|
+
|
|
|
const params = {
|
|
|
- deptId: formData.value.deptId,
|
|
|
+ deptIds: formData.value.deptIds,
|
|
|
+ // deptId: formData.value.deptId,
|
|
|
pageNo: 1,
|
|
|
pageSize: 10 }
|
|
|
const data = await UserApi.simpleUserList(params)
|
|
@@ -385,6 +452,7 @@ const handleClearDeptForDevice = () => {
|
|
|
|
|
|
// 处理 人员关联 部门选择清空事件
|
|
|
const handleClearDeptForPerson = () => {
|
|
|
+ formData.value.deptIds = []
|
|
|
simpleUsers.value = []
|
|
|
selectedUsers.value = []
|
|
|
personLoaded.value = false // 清空时禁用搜索框
|
|
@@ -397,6 +465,11 @@ const handleClearDeptForPerson = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// 新增部门选择监听
|
|
|
+const handleDeptCheckChange = () => {
|
|
|
+ // getUserList() // 选择变化时重新加载人员
|
|
|
+}
|
|
|
+
|
|
|
// 过滤后的人员列表计算属性
|
|
|
const filteredUsers = computed(() => {
|
|
|
const searchText = userFilterText.value.toLowerCase().trim()
|
|
@@ -476,9 +549,9 @@ onMounted(async () => {
|
|
|
await handleDeptDeviceTreeNodeClick(firstRootNode)
|
|
|
|
|
|
// 设置责任人部门的默认值
|
|
|
- formData.value.deptId = firstRootNode.id
|
|
|
+ formData.value.deptIds = [firstRootNode.id]
|
|
|
// 触发责任人部门的节点点击事件,加载人员列表
|
|
|
- await handleDeptUserTreeNodeClick(firstRootNode)
|
|
|
+ await getUserList() //handleDeptUserTreeNodeClick(firstRootNode)
|
|
|
} else {
|
|
|
console.warn("部门树数据为空,无法设置默认值")
|
|
|
}
|