huoyi недель назад: 2
Родитель
Сommit
d7cf96399e

+ 3 - 4
src/views/portraitManagement/employeeProfile/index.vue

@@ -341,12 +341,11 @@ const searchHandler = (query) => {
341 341
 const goToWarningPage = () => {
342 342
   if (currentQuery.value) {
343 343
     router.push({
344
-      path: '/index',
345
-      query: { id: currentQuery.value.id },
346
-   
344
+      path: '/score/event',
345
+      query: { id: currentQuery.value.id, startDate: currentQuery.value.beginTime, endDate: currentQuery.value.endTime },
347 346
     })
348 347
   } else {
349
-    router.push('/index')
348
+    router.push('/score/event')
350 349
   }
351 350
 }
352 351
 

+ 51 - 12
src/views/score/event/index.vue

@@ -15,20 +15,19 @@
15 15
       </el-form-item>
16 16
       <el-form-item label="队室/班组" prop="teamId">
17 17
         <el-select v-model="queryParams.teamId" placeholder="请选择队室/班组" style="width:150px" clearable filterable
18
-          :disabled="queryParams.org < 2" @change="handleQueryTeamChange">
18
+          @change="handleQueryTeamChange">
19 19
           <el-option v-for="t in queryTeamOptions" :key="t.id" :label="t.label" :value="t.id" />
20 20
         </el-select>
21 21
       </el-form-item>
22 22
       <el-form-item label="通道/小组" prop="groupId">
23 23
         <el-select v-model="queryParams.groupId" placeholder="请选择通道/小组" style="width:150px" clearable filterable
24
-          :disabled="queryParams.org < 3" @change="handleQueryGroupChange">
24
+          @change="handleQueryGroupChange">
25 25
           <el-option v-for="g in queryGroupOptions" :key="g.id" :label="g.label" :value="g.id" />
26 26
         </el-select>
27 27
       </el-form-item>
28 28
       <el-form-item label="责任人" prop="personId">
29
-        <el-select v-model="queryParams.personId" placeholder="请选择责任人" style="width:150px" clearable filterable
30
-          :disabled="queryParams.org < 4">
31
-          <el-option v-for="p in queryPersonOptions" :key="p.userId" :label="p.nickName" :value="p.userId" />
29
+        <el-select v-model="queryParams.personId" placeholder="请选择责任人" style="width:150px" clearable filterable>
30
+          <el-option v-for="p in searchPersonOptions" :key="p.userId" :label="p.nickName" :value="p.userId" />
32 31
         </el-select>
33 32
       </el-form-item>
34 33
       <el-form-item label="维度" prop="dimensionId">
@@ -188,7 +187,7 @@
188 187
           <el-col :span="12">
189 188
             <el-form-item label="部门名称" prop="deptId" :rules="rules.deptId">
190 189
               <el-select v-model="form.deptId" placeholder="请选择部门" style="width:100%" clearable filterable
191
-                 @change="handleBrigadeChange">
190
+                @change="handleBrigadeChange">
192 191
                 <el-option v-for="d in deptOptions" :key="d.deptId" :label="d.deptName" :value="d.deptId" />
193 192
               </el-select>
194 193
             </el-form-item>
@@ -196,7 +195,7 @@
196 195
           <el-col :span="12">
197 196
             <el-form-item label="队室/班组" prop="teamId" :rules="rules.teamId">
198 197
               <el-select v-model="form.teamId" placeholder="请选择队室/班组" style="width:100%" clearable filterable
199
-                 @change="handleDepartmentChange">
198
+                @change="handleDepartmentChange">
200 199
                 <el-option v-for="t in teamOptions" :key="t.id" :label="t.label" :value="t.id" />
201 200
               </el-select>
202 201
             </el-form-item>
@@ -212,7 +211,7 @@
212 211
           <el-col :span="12">
213 212
             <el-form-item label="责任人" prop="personId" :rules="rules.personId">
214 213
               <el-select v-model="form.personId" placeholder="请选择责任人" style="width:100%" clearable filterable
215
-                 @change="handlePersonChange">
214
+                @change="handlePersonChange">
216 215
                 <el-option v-for="p in personOptions" :key="p.userId" :label="p.nickName" :value="p.userId" />
217 216
               </el-select>
218 217
             </el-form-item>
@@ -248,8 +247,9 @@
248 247
 </template>
249 248
 
250 249
 <script setup>
251
-import { ref, reactive, computed, onMounted, getCurrentInstance } from 'vue'
250
+import { ref, reactive, computed, watch, onMounted, getCurrentInstance } from 'vue'
252 251
 import { ElMessage, ElMessageBox } from 'element-plus'
252
+import { useRoute } from 'vue-router'
253 253
 import { listUser, getDeptOrgInfo, getUserOrgInfo } from '@/api/system/user'
254 254
 import {
255 255
   listScoreEvent, addScoreEvent, updateScoreEvent, delScoreEvent,
@@ -298,7 +298,13 @@ const rules = computed(() => {
298 298
   }
299 299
 })
300 300
 
301
-
301
+// 搜索表单责任人选项:未选择部门/班组/小组时使用全量人员,否则使用过滤后的人员
302
+const searchPersonOptions = computed(() => {
303
+  if (queryParams.deptId || queryParams.teamId || queryParams.groupId) {
304
+    return queryPersonOptions.value
305
+  }
306
+  return personOptions.value
307
+})
302 308
 
303 309
 async function loadDimensions() {
304 310
   const r = await allDimension()
@@ -437,7 +443,21 @@ function getList() {
437 443
 function handleQuery() { queryParams.pageNum = 1; getList() }
438 444
 function resetQuery() {
439 445
   dateRange.value = []
440
-  queryParams.deptId = null; queryParams.teamId = null; queryParams.groupId = null; queryParams.personId = null
446
+  Object.assign(queryParams, { 
447
+    pageNum: 1, 
448
+    pageSize: 10, 
449
+    personId: null, 
450
+    personName: '', 
451
+    deptId: null, 
452
+    deptName: '', 
453
+    teamId: null, 
454
+    teamName: '', 
455
+    groupId: null, 
456
+    groupName: '', 
457
+    dimensionId: null, 
458
+    sourceType: '', 
459
+    org: '' 
460
+  })
441 461
   queryTeamOptions.value = []; queryGroupOptions.value = []; queryPersonOptions.value = []
442 462
   queryRef.value?.resetFields()
443 463
   handleQuery()
@@ -580,5 +600,24 @@ async function handleImportFile(file) {
580 600
   }
581 601
 }
582 602
 
583
-onMounted(() => { loadDimensions(); loadDepts(); loadQueryDepts(); getList() })
603
+const route = useRoute()
604
+
605
+let isInit = true
606
+
607
+// 监听路由参数,从员工画像跳转时回填查询条件
608
+watch(() => route.query, (query) => {
609
+  if (query.id) {
610
+    queryParams.personId = Number(query.id)
611
+  }
612
+  if (query.startDate && query.endDate) {
613
+    dateRange.value = [query.startDate, query.endDate]
614
+  }
615
+  // 非初始化时(即路由参数后续变化),主动刷新数据
616
+  if (!isInit && (query.id || query.startDate || query.endDate)) {
617
+    handleQuery()
618
+  }
619
+  isInit = false
620
+}, { immediate: true })
621
+
622
+onMounted(() => { loadDimensions(); loadDepts(); loadQueryDepts(); loadAllPersons(); getList() })
584 623
 </script>

+ 14 - 46
src/views/warningPage/index.vue

@@ -28,20 +28,18 @@
28 28
                     <el-date-picker v-model="endDate" type="date" placeholder="结束日期" style="width: 150px;" />
29 29
 
30 30
                 </div>
31
-                <el-popover trigger="click" placement="bottom" :width="480" ref="treePopoverRef">
32
-                    <template #reference>
33
-                        <el-input v-model="selectedOrgLabel" placeholder="组织架构/员工" clearable style="width: 480px;"
34
-                            @clear="handleTreeClear" />
35
-                    </template>
36
-                    <el-tree
37
-                        :data="cascadeOptions"
38
-                        :props="treeProps"
39
-                        node-key="value"
40
-                        highlight-current
41
-                        :current-node-key="selectedOrg"
42
-                        @node-click="handleTreeNodeClick"
43
-                    />
44
-                </el-popover>
31
+                <el-tree-select
32
+                    v-model="selectedOrg"
33
+                    :data="cascadeOptions"
34
+                    :props="{ label: 'label', value: 'value', children: 'children' }"
35
+                    node-key="value"
36
+                    placeholder="组织架构/员工"
37
+                    clearable
38
+                    filterable
39
+                    check-strictly
40
+                    style="width: 480px;"
41
+                    @change="fetchWarningData"
42
+                />
45 43
             </div>
46 44
             <div class="filter-group">
47 45
                 <el-select v-model="selectedAlertLevel" placeholder="预警等级" clearable style="width: 250px;">
@@ -157,9 +155,6 @@ const startDate = ref(null)
157 155
 const endDate = ref(null)
158 156
 const selectedAlertLevel = ref('')
159 157
 const selectedOrg = ref('')
160
-const selectedOrgLabel = ref('')
161
-const treePopoverRef = ref(null)
162
-const treeProps = { label: 'label', children: 'children' }
163 158
 const cascadeOptions = ref([])
164 159
 
165 160
 const summaryCards = ref([
@@ -255,31 +250,6 @@ const getSelectedInfo = (selectedValue) => {
255 250
     return findNodeByValue(cascadeOptions.value, selectedValue)
256 251
 }
257 252
 
258
-const handleTreeNodeClick = (data) => {
259
-    selectedOrg.value = data.value
260
-    selectedOrgLabel.value = data.label
261
-    treePopoverRef.value?.hide()
262
-    fetchWarningData()
263
-}
264
-
265
-const handleTreeClear = () => {
266
-    selectedOrg.value = ''
267
-    selectedOrgLabel.value = ''
268
-    fetchWarningData()
269
-}
270
-
271
-const findNodeLabelByValue = (nodes, value) => {
272
-    if (!nodes) return ''
273
-    for (const node of nodes) {
274
-        if (node.value === value) return node.label
275
-        if (node.children) {
276
-            const found = findNodeLabelByValue(node.children, value)
277
-            if (found) return found
278
-        }
279
-    }
280
-    return ''
281
-}
282
-
283 253
 const filteredEmployees = computed(() => {
284 254
     let result = employeesData.value.ledgerWarningDetailItemList
285 255
 
@@ -445,7 +415,7 @@ watch(activeRange, () => {
445 415
 
446 416
 watch(cascadeOptions, (val) => {
447 417
     if (val.length && selectedOrg.value) {
448
-        selectedOrgLabel.value = findNodeLabelByValue(val, selectedOrg.value)
418
+        fetchWarningData()
449 419
     }
450 420
 })
451 421
 
@@ -453,11 +423,9 @@ watch(cascadeOptions, (val) => {
453 423
 watch(() => route.query, (query) => {
454 424
     const { id } = query
455 425
     if (id) {
456
-        selectedOrg.value = id
457
-        selectedOrgLabel.value = findNodeLabelByValue(cascadeOptions.value, id)
426
+        selectedOrg.value =Number(id)
458 427
     } else {
459 428
         selectedOrg.value = ''
460
-        selectedOrgLabel.value = ''
461 429
     }
462 430
     fetchWarningData()
463 431
 }, { immediate: true })