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

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

@@ -341,12 +341,11 @@ const searchHandler = (query) => {
341
 const goToWarningPage = () => {
341
 const goToWarningPage = () => {
342
   if (currentQuery.value) {
342
   if (currentQuery.value) {
343
     router.push({
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
   } else {
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
       </el-form-item>
15
       </el-form-item>
16
       <el-form-item label="队室/班组" prop="teamId">
16
       <el-form-item label="队室/班组" prop="teamId">
17
         <el-select v-model="queryParams.teamId" placeholder="请选择队室/班组" style="width:150px" clearable filterable
17
         <el-select v-model="queryParams.teamId" placeholder="请选择队室/班组" style="width:150px" clearable filterable
18
-          :disabled="queryParams.org < 2" @change="handleQueryTeamChange">
18
+          @change="handleQueryTeamChange">
19
           <el-option v-for="t in queryTeamOptions" :key="t.id" :label="t.label" :value="t.id" />
19
           <el-option v-for="t in queryTeamOptions" :key="t.id" :label="t.label" :value="t.id" />
20
         </el-select>
20
         </el-select>
21
       </el-form-item>
21
       </el-form-item>
22
       <el-form-item label="通道/小组" prop="groupId">
22
       <el-form-item label="通道/小组" prop="groupId">
23
         <el-select v-model="queryParams.groupId" placeholder="请选择通道/小组" style="width:150px" clearable filterable
23
         <el-select v-model="queryParams.groupId" placeholder="请选择通道/小组" style="width:150px" clearable filterable
24
-          :disabled="queryParams.org < 3" @change="handleQueryGroupChange">
24
+          @change="handleQueryGroupChange">
25
           <el-option v-for="g in queryGroupOptions" :key="g.id" :label="g.label" :value="g.id" />
25
           <el-option v-for="g in queryGroupOptions" :key="g.id" :label="g.label" :value="g.id" />
26
         </el-select>
26
         </el-select>
27
       </el-form-item>
27
       </el-form-item>
28
       <el-form-item label="责任人" prop="personId">
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
         </el-select>
31
         </el-select>
33
       </el-form-item>
32
       </el-form-item>
34
       <el-form-item label="维度" prop="dimensionId">
33
       <el-form-item label="维度" prop="dimensionId">
@@ -188,7 +187,7 @@
188
           <el-col :span="12">
187
           <el-col :span="12">
189
             <el-form-item label="部门名称" prop="deptId" :rules="rules.deptId">
188
             <el-form-item label="部门名称" prop="deptId" :rules="rules.deptId">
190
               <el-select v-model="form.deptId" placeholder="请选择部门" style="width:100%" clearable filterable
189
               <el-select v-model="form.deptId" placeholder="请选择部门" style="width:100%" clearable filterable
191
-                 @change="handleBrigadeChange">
190
+                @change="handleBrigadeChange">
192
                 <el-option v-for="d in deptOptions" :key="d.deptId" :label="d.deptName" :value="d.deptId" />
191
                 <el-option v-for="d in deptOptions" :key="d.deptId" :label="d.deptName" :value="d.deptId" />
193
               </el-select>
192
               </el-select>
194
             </el-form-item>
193
             </el-form-item>
@@ -196,7 +195,7 @@
196
           <el-col :span="12">
195
           <el-col :span="12">
197
             <el-form-item label="队室/班组" prop="teamId" :rules="rules.teamId">
196
             <el-form-item label="队室/班组" prop="teamId" :rules="rules.teamId">
198
               <el-select v-model="form.teamId" placeholder="请选择队室/班组" style="width:100%" clearable filterable
197
               <el-select v-model="form.teamId" placeholder="请选择队室/班组" style="width:100%" clearable filterable
199
-                 @change="handleDepartmentChange">
198
+                @change="handleDepartmentChange">
200
                 <el-option v-for="t in teamOptions" :key="t.id" :label="t.label" :value="t.id" />
199
                 <el-option v-for="t in teamOptions" :key="t.id" :label="t.label" :value="t.id" />
201
               </el-select>
200
               </el-select>
202
             </el-form-item>
201
             </el-form-item>
@@ -212,7 +211,7 @@
212
           <el-col :span="12">
211
           <el-col :span="12">
213
             <el-form-item label="责任人" prop="personId" :rules="rules.personId">
212
             <el-form-item label="责任人" prop="personId" :rules="rules.personId">
214
               <el-select v-model="form.personId" placeholder="请选择责任人" style="width:100%" clearable filterable
213
               <el-select v-model="form.personId" placeholder="请选择责任人" style="width:100%" clearable filterable
215
-                 @change="handlePersonChange">
214
+                @change="handlePersonChange">
216
                 <el-option v-for="p in personOptions" :key="p.userId" :label="p.nickName" :value="p.userId" />
215
                 <el-option v-for="p in personOptions" :key="p.userId" :label="p.nickName" :value="p.userId" />
217
               </el-select>
216
               </el-select>
218
             </el-form-item>
217
             </el-form-item>
@@ -248,8 +247,9 @@
248
 </template>
247
 </template>
249
 
248
 
250
 <script setup>
249
 <script setup>
251
-import { ref, reactive, computed, onMounted, getCurrentInstance } from 'vue'
250
+import { ref, reactive, computed, watch, onMounted, getCurrentInstance } from 'vue'
252
 import { ElMessage, ElMessageBox } from 'element-plus'
251
 import { ElMessage, ElMessageBox } from 'element-plus'
252
+import { useRoute } from 'vue-router'
253
 import { listUser, getDeptOrgInfo, getUserOrgInfo } from '@/api/system/user'
253
 import { listUser, getDeptOrgInfo, getUserOrgInfo } from '@/api/system/user'
254
 import {
254
 import {
255
   listScoreEvent, addScoreEvent, updateScoreEvent, delScoreEvent,
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
 async function loadDimensions() {
309
 async function loadDimensions() {
304
   const r = await allDimension()
310
   const r = await allDimension()
@@ -437,7 +443,21 @@ function getList() {
437
 function handleQuery() { queryParams.pageNum = 1; getList() }
443
 function handleQuery() { queryParams.pageNum = 1; getList() }
438
 function resetQuery() {
444
 function resetQuery() {
439
   dateRange.value = []
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
   queryTeamOptions.value = []; queryGroupOptions.value = []; queryPersonOptions.value = []
461
   queryTeamOptions.value = []; queryGroupOptions.value = []; queryPersonOptions.value = []
442
   queryRef.value?.resetFields()
462
   queryRef.value?.resetFields()
443
   handleQuery()
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
 </script>
623
 </script>

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

@@ -28,20 +28,18 @@
28
                     <el-date-picker v-model="endDate" type="date" placeholder="结束日期" style="width: 150px;" />
28
                     <el-date-picker v-model="endDate" type="date" placeholder="结束日期" style="width: 150px;" />
29
 
29
 
30
                 </div>
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
             </div>
43
             </div>
46
             <div class="filter-group">
44
             <div class="filter-group">
47
                 <el-select v-model="selectedAlertLevel" placeholder="预警等级" clearable style="width: 250px;">
45
                 <el-select v-model="selectedAlertLevel" placeholder="预警等级" clearable style="width: 250px;">
@@ -157,9 +155,6 @@ const startDate = ref(null)
157
 const endDate = ref(null)
155
 const endDate = ref(null)
158
 const selectedAlertLevel = ref('')
156
 const selectedAlertLevel = ref('')
159
 const selectedOrg = ref('')
157
 const selectedOrg = ref('')
160
-const selectedOrgLabel = ref('')
161
-const treePopoverRef = ref(null)
162
-const treeProps = { label: 'label', children: 'children' }
163
 const cascadeOptions = ref([])
158
 const cascadeOptions = ref([])
164
 
159
 
165
 const summaryCards = ref([
160
 const summaryCards = ref([
@@ -255,31 +250,6 @@ const getSelectedInfo = (selectedValue) => {
255
     return findNodeByValue(cascadeOptions.value, selectedValue)
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
 const filteredEmployees = computed(() => {
253
 const filteredEmployees = computed(() => {
284
     let result = employeesData.value.ledgerWarningDetailItemList
254
     let result = employeesData.value.ledgerWarningDetailItemList
285
 
255
 
@@ -445,7 +415,7 @@ watch(activeRange, () => {
445
 
415
 
446
 watch(cascadeOptions, (val) => {
416
 watch(cascadeOptions, (val) => {
447
     if (val.length && selectedOrg.value) {
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
 watch(() => route.query, (query) => {
423
 watch(() => route.query, (query) => {
454
     const { id } = query
424
     const { id } = query
455
     if (id) {
425
     if (id) {
456
-        selectedOrg.value = id
457
-        selectedOrgLabel.value = findNodeLabelByValue(cascadeOptions.value, id)
426
+        selectedOrg.value =Number(id)
458
     } else {
427
     } else {
459
         selectedOrg.value = ''
428
         selectedOrg.value = ''
460
-        selectedOrgLabel.value = ''
461
     }
429
     }
462
     fetchWarningData()
430
     fetchWarningData()
463
 }, { immediate: true })
431
 }, { immediate: true })