Преглед изворни кода

feat(绩效查询): 新增大队级别查询功能并优化查询逻辑

添加大队级别查询选项,包括大队下拉框和相关处理逻辑
调整查询参数处理逻辑以适配不同查询级别
优化部门数据过滤和选项生成方式
huoyi пре 4 недеља
родитељ
комит
001160e0a9
1 измењених фајлова са 79 додато и 13 уклоњено
  1. 79 13
      src/views/performanceManage/performanceSearch/index.vue

+ 79 - 13
src/views/performanceManage/performanceSearch/index.vue

@@ -29,18 +29,31 @@
29 29
 
30 30
       <!-- 第二行:查询条件 -->
31 31
       <el-form :model="queryParams" ref="queryFormRef" :inline="true" class="search-form">
32
+        <!-- 大队下拉框 -->
33
+        <el-form-item label="大队" prop="brigadeId" v-if="queryType === '3' || queryType === '2' || queryType === '1'">
34
+          <el-select v-model="queryParams.brigadeId" placeholder="请选择大队" clearable style="width: 200px"
35
+            @change="handleBrigadeChange">
36
+            <el-option v-for="item in brigadeOptions" :key="item.value" :label="item.text" :value="item.value" />
37
+          </el-select>
38
+        </el-form-item>
39
+        
40
+        <!-- 主管下拉框 -->
32 41
         <el-form-item label="主管" prop="deptId" v-if="queryType === '2' || queryType === '1'">
33 42
           <el-select v-model="queryParams.deptId" placeholder="请选择主管" clearable style="width: 200px"
34 43
             @change="handleQuery">
35 44
             <el-option v-for="item in departmentOptions" :key="item.value" :label="item.text" :value="item.value" />
36 45
           </el-select>
37 46
         </el-form-item>
38
-        <el-form-item label="班组" prop="teamId" v-if="queryType === '2' || queryType === '1'">
47
+        
48
+        <!-- 班组下拉框 -->
49
+        <el-form-item label="班组" prop="teamId" v-if="queryType === '1'">
39 50
           <el-select v-model="queryParams.teamId" placeholder="请选择班组" clearable style="width: 200px"
40 51
             @change="handleQuery">
41 52
             <el-option v-for="item in teamOptions" :key="item.value" :label="item.text" :value="item.value" />
42 53
           </el-select>
43 54
         </el-form-item>
55
+        
56
+        <!-- 姓名输入框 -->
44 57
         <el-form-item label="姓名" prop="userName" v-if="queryType === '1'">
45 58
           <el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable style="width: 200px"
46 59
             @input="handleQuery" />
@@ -59,7 +72,9 @@
59 72
       <!-- 表格 -->
60 73
       <el-table v-loading="loading" :data="performanceList" border fit highlight-current-row
61 74
         style="width: 100%; margin-top: 20px;">
62
-
75
+       <!-- 动态列 -->
76
+        <el-table-column v-if="queryType === '4'" label="主管"
77
+          prop="name" align="center" min-width="120" />
63 78
         <!-- 动态列 -->
64 79
         <el-table-column v-if="queryType === '3' || queryType === '2' || queryType === '1'" label="主管"
65 80
           :prop="queryType === '3' ? 'name' : 'deptName'" align="center" min-width="120" />
@@ -99,6 +114,7 @@ import { getDownload } from '@/utils/request.js'
99 114
 
100 115
 // 查询类型选项
101 116
 const queryTypeOptions = [
117
+  { label: '大队', value: '4' },
102 118
   { label: '主管', value: '3' },
103 119
   { label: '班组', value: '2' },
104 120
   { label: '个人', value: '1' }
@@ -112,7 +128,7 @@ const timeRangeOptions = [
112 128
 ]
113 129
 
114 130
 // 响应式数据
115
-const queryType = ref('3') // 默认查询科室
131
+const queryType = ref('4') // 默认查询科室
116 132
 const timeRange = ref('threeMonths') // 默认近三个月
117 133
 const customDateRange = ref([])
118 134
 const loading = ref(false)
@@ -123,6 +139,7 @@ const queryFormRef = ref()
123 139
 const queryParams = reactive({
124 140
   pageNum: 1,
125 141
   pageSize: 10,
142
+  brigadeId: '',
126 143
   deptId: '',
127 144
   teamId: '',
128 145
   userName: '',
@@ -135,9 +152,36 @@ const performanceList = ref([])
135 152
 
136 153
 // 部门数据
137 154
 const deptList = ref([])
155
+const brigadeOptions = ref([])
138 156
 const departmentOptions = ref([])
139 157
 const teamOptions = ref([])
140 158
 
159
+// 大队变化处理函数
160
+const handleBrigadeChange = (brigadeId) => {
161
+  // 清空主管和班组选项
162
+  queryParams.deptId = null
163
+  queryParams.teamId = null
164
+  teamOptions.value = []
165
+  
166
+  if (brigadeId) {
167
+    // 根据大队ID获取主管列表
168
+    departmentOptions.value = deptList.value.filter(item => 
169
+      item.deptType === 'MANAGER' && item.parentId === brigadeId
170
+    ).map(item => ({
171
+      value: item.deptId,
172
+      text: item.deptName
173
+    }))
174
+  } else {
175
+    // 如果没有选择大队,显示所有主管
176
+    departmentOptions.value = deptList.value.filter(item => item.deptType === 'MANAGER').map(item => ({
177
+      value: item.deptId,
178
+      text: item.deptName
179
+    }))
180
+  }
181
+  
182
+  handleQuery()
183
+}
184
+
141 185
 // 监听科室变化,获取对应班组
142 186
 watch(() => queryParams.deptId, async (newDeptId) => {
143 187
   if (newDeptId) {
@@ -159,7 +203,12 @@ const fetchDeptData = async () => {
159 203
     if (response.code === 200) {
160 204
 
161 205
       deptList.value = response.data || []
162
-      // 生成科室选项
206
+      // 生成大队选项
207
+      brigadeOptions.value = deptList.value.filter(item => item.deptType === 'BRIGADE').map(item => ({
208
+        value: item.deptId,
209
+        text: item.deptName
210
+      }))
211
+      // 生成主管选项
163 212
       departmentOptions.value = deptList.value.filter(item => item.deptType === 'MANAGER').map(item => ({
164 213
         value: item.deptId,
165 214
         text: item.deptName
@@ -300,15 +349,22 @@ const getList = async () => {
300 349
 
301 350
     // 根据查询类型清理不必要的参数
302 351
     if (queryType.value === '3') {
303
-      // 科室查询:不需要班组参数
304
-      params.teamId = ''
352
+      // 主管查询:只传递大队参数
305 353
       params.deptId = ''
354
+      params.teamId = ''
355
+      params.userName = ''
306 356
     } else if (queryType.value === '2') {
307
-      // 班组查询:需要科室参数
308
-      // params.deptId = ''
309
-      // 班组查询:不需要个人参数
357
+      // 班组查询:传递大队和主管参数
358
+      params.teamId = ''
359
+      params.userName = ''
310 360
     } else if (queryType.value === '1') {
311
-      // 个人查询:需要所有参数
361
+      // 个人查询:传递所有参数
362
+    } else if (queryType.value === '4') {
363
+      // 大队查询:不传递任何部门参数
364
+      params.brigadeId = ''
365
+      params.deptId = ''
366
+      params.teamId = ''
367
+      params.userName = ''
312 368
     }
313 369
 
314 370
     // 调用API
@@ -350,12 +406,22 @@ const handleExport = () => {
350 406
 
351 407
     // 根据查询类型清理不必要的参数
352 408
     if (queryType.value === '3') {
353
-      // 科室查询:不需要班组参数
409
+      // 主管查询:只传递大队参数
410
+      params.deptId = ''
354 411
       params.teamId = ''
412
+      params.userName = ''
355 413
     } else if (queryType.value === '2') {
356
-      // 班组查询:不需要个人参数
414
+      // 班组查询:传递大队和主管参数
415
+      params.teamId = ''
416
+      params.userName = ''
357 417
     } else if (queryType.value === '1') {
358
-      // 个人查询:需要所有参数
418
+      // 个人查询:传递所有参数
419
+    } else if (queryType.value === '4') {
420
+      // 大队查询:不传递任何部门参数
421
+      params.brigadeId = ''
422
+      params.deptId = ''
423
+      params.teamId = ''
424
+      params.userName = ''
359 425
     }
360 426
 
361 427
     // 使用proxy.getDownload下载文件(GET请求)