Просмотр исходного кода

fix(score/event): 修复并优化得分事件页面功能

1. 修复区域和工作点选项显示字段错误,将positionName改为name
2. 调整接口数据获取方式,从取rows改为取data
3. 新增递归查找树形节点工具函数
4. 提交表单时自动填充关联名称字段
5. 优化岗位树,禁用一级节点
6. 清理冗余空行
huoyi 1 неделя назад
Родитель
Сommit
45747d17d8
1 измененных файлов с 57 добавлено и 8 удалено
  1. 57 8
      src/views/score/event/index.vue

+ 57 - 8
src/views/score/event/index.vue

@@ -53,7 +53,7 @@
53
       <el-form-item label="区域" prop="regionalId">
53
       <el-form-item label="区域" prop="regionalId">
54
         <el-select v-model="queryParams.regionalId" placeholder="请选择区域" clearable filterable
54
         <el-select v-model="queryParams.regionalId" placeholder="请选择区域" clearable filterable
55
           style="width:150px" @change="handleRegionalChange">
55
           style="width:150px" @change="handleRegionalChange">
56
-          <el-option v-for="item in regionalOptions" :key="item.id" :label="item.positionName" :value="item.id" />
56
+          <el-option v-for="item in regionalOptions" :key="item.id" :label="item.name" :value="item.id" />
57
         </el-select>
57
         </el-select>
58
       </el-form-item>
58
       </el-form-item>
59
       <el-form-item label="工作点" prop="channelId">
59
       <el-form-item label="工作点" prop="channelId">
@@ -65,7 +65,7 @@
65
       <el-form-item label="岗位" prop="postId">
65
       <el-form-item label="岗位" prop="postId">
66
         <el-tree-select v-model="queryParams.postId" :data="postTreeData"
66
         <el-tree-select v-model="queryParams.postId" :data="postTreeData"
67
           :props="{ value: 'postId', label: 'postName', children: 'children' }" clearable filterable
67
           :props="{ value: 'postId', label: 'postName', children: 'children' }" clearable filterable
68
-          placeholder="请选择岗位" style="width:150px" check-strictly />
68
+          placeholder="请选择岗位" check-strictly />
69
       </el-form-item>
69
       </el-form-item>
70
       <el-form-item>
70
       <el-form-item>
71
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
71
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -208,7 +208,7 @@
208
             <el-form-item label="区域">
208
             <el-form-item label="区域">
209
               <el-select v-model="form.regionalId" placeholder="请选择区域" clearable filterable
209
               <el-select v-model="form.regionalId" placeholder="请选择区域" clearable filterable
210
                 style="width:100%" @change="handleFormRegionalChange">
210
                 style="width:100%" @change="handleFormRegionalChange">
211
-                <el-option v-for="item in regionalOptions" :key="item.id" :label="item.positionName" :value="item.id" />
211
+                <el-option v-for="item in regionalOptions" :key="item.id" :label="item.name" :value="item.id" />
212
               </el-select>
212
               </el-select>
213
             </el-form-item>
213
             </el-form-item>
214
           </el-col>
214
           </el-col>
@@ -216,7 +216,7 @@
216
             <el-form-item label="工作点">
216
             <el-form-item label="工作点">
217
               <el-select v-model="form.channelId" placeholder="请选择工作点" clearable filterable
217
               <el-select v-model="form.channelId" placeholder="请选择工作点" clearable filterable
218
                 style="width:100%">
218
                 style="width:100%">
219
-                <el-option v-for="item in formChannelOptions" :key="item.id" :label="item.positionName" :value="item.id" />
219
+                <el-option v-for="item in formChannelOptions" :key="item.id" :label="item.name" :value="item.id" />
220
               </el-select>
220
               </el-select>
221
             </el-form-item>
221
             </el-form-item>
222
           </el-col>
222
           </el-col>
@@ -349,6 +349,7 @@ const rules = computed(() => {
349
 
349
 
350
 // 搜索表单责任人选项:未选择部门/班组/小组时使用全量人员,否则使用过滤后的人员
350
 // 搜索表单责任人选项:未选择部门/班组/小组时使用全量人员,否则使用过滤后的人员
351
 const searchPersonOptions = computed(() => {
351
 const searchPersonOptions = computed(() => {
352
+  
352
   if (queryParams.deptId || queryParams.teamId || queryParams.groupId) {
353
   if (queryParams.deptId || queryParams.teamId || queryParams.groupId) {
353
     return queryPersonOptions.value
354
     return queryPersonOptions.value
354
   }
355
   }
@@ -406,12 +407,13 @@ async function loadAllGroups() {
406
 
407
 
407
 async function loadAllPersons() {
408
 async function loadAllPersons() {
408
   const r = await listUser({ pageSize: 9999 })
409
   const r = await listUser({ pageSize: 9999 })
410
+  
409
   personOptions.value = r.rows || []
411
   personOptions.value = r.rows || []
410
 }
412
 }
411
 
413
 
412
 async function loadRegions() {
414
 async function loadRegions() {
413
   const r = await listPosition({ positionType: 'REGIONAL' })
415
   const r = await listPosition({ positionType: 'REGIONAL' })
414
-  regionalOptions.value = r.rows || []
416
+  regionalOptions.value = r.data || []
415
 }
417
 }
416
 
418
 
417
 async function handleRegionalChange(val) {
419
 async function handleRegionalChange(val) {
@@ -419,7 +421,7 @@ async function handleRegionalChange(val) {
419
   channelOptions.value = []
421
   channelOptions.value = []
420
   if (val) {
422
   if (val) {
421
     const r = await listPosition({ parentId: val })
423
     const r = await listPosition({ parentId: val })
422
-    channelOptions.value = r.rows || []
424
+    channelOptions.value = r.data || []
423
   }
425
   }
424
 }
426
 }
425
 
427
 
@@ -428,7 +430,7 @@ async function handleFormRegionalChange(val) {
428
   formChannelOptions.value = []
430
   formChannelOptions.value = []
429
   if (val) {
431
   if (val) {
430
     const r = await listPosition({ parentId: val })
432
     const r = await listPosition({ parentId: val })
431
-    formChannelOptions.value = r.rows || []
433
+    formChannelOptions.value = r.data || []
432
   }
434
   }
433
 }
435
 }
434
 
436
 
@@ -624,6 +626,20 @@ function onLevel4Change(val) {
624
   }
626
   }
625
 }
627
 }
626
 
628
 
629
+// 递归查找树形结构中的节点
630
+const findTreeNode = (nodes, targetId, idKey, nameKey) => {
631
+  for (const node of nodes) {
632
+    if (node[idKey] === targetId) {
633
+      return node
634
+    }
635
+    if (node.children) {
636
+      const found = findTreeNode(node.children, targetId, idKey, nameKey)
637
+      if (found) return found
638
+    }
639
+  }
640
+  return null
641
+}
642
+
627
 async function submitForm() {
643
 async function submitForm() {
628
   await formRef.value.validate()
644
   await formRef.value.validate()
629
   let copyForm = { ...form }
645
   let copyForm = { ...form }
@@ -644,6 +660,18 @@ async function submitForm() {
644
     const g = groupOptions.value.find(g => g.id === copyForm.groupId)
660
     const g = groupOptions.value.find(g => g.id === copyForm.groupId)
645
     if (g) copyForm.groupName = g.label
661
     if (g) copyForm.groupName = g.label
646
   }
662
   }
663
+  if (copyForm.regionalId) {
664
+    const r = regionalOptions.value.find(r => r.id === copyForm.regionalId)
665
+    if (r) copyForm.regionalName = r.name
666
+  }
667
+  if (copyForm.channelId) {
668
+    const c = formChannelOptions.value.find(c => c.id === copyForm.channelId)
669
+    if (c) copyForm.channelName = c.name || c.positionName
670
+  }
671
+  if (copyForm.postId) {
672
+    const postNode = findTreeNode(postTreeData.value, copyForm.postId, 'postId', 'postName')
673
+    if (postNode) copyForm.postName = postNode.postName
674
+  }
647
 
675
 
648
   if (form.id) { await updateScoreEvent(copyForm); ElMessage.success('修改成功') }
676
   if (form.id) { await updateScoreEvent(copyForm); ElMessage.success('修改成功') }
649
   else { await addScoreEvent(copyForm); ElMessage.success('新增成功') }
677
   else { await addScoreEvent(copyForm); ElMessage.success('新增成功') }
@@ -695,5 +723,26 @@ watch(() => route.query, (query) => {
695
   isInit = false
723
   isInit = false
696
 }, { immediate: true })
724
 }, { immediate: true })
697
 
725
 
698
-onMounted(() => { loadDimensions(); loadDepts(); loadQueryDepts(); loadAllPersons(); loadRegions(); listAllTree().then(res => { postTreeData.value = res.data || [] }); getList() })
726
+// 递归处理岗位树,禁用第一级
727
+const processPostTree = (nodes, isFirstLevel = true) => {
728
+  return nodes.map(node => {
729
+    const newNode = { ...node, disabled: isFirstLevel }
730
+    if (node.children) {
731
+      newNode.children = processPostTree(node.children, false)
732
+    }
733
+    return newNode
734
+  })
735
+}
736
+
737
+onMounted(() => { 
738
+  loadDimensions(); 
739
+  loadDepts(); 
740
+  loadQueryDepts(); 
741
+  loadAllPersons(); 
742
+  loadRegions(); 
743
+  listAllTree().then(res => { 
744
+    postTreeData.value = processPostTree(res.data || [])
745
+  }); 
746
+  getList() 
747
+})
699
 </script>
748
 </script>