|
|
@@ -157,8 +157,8 @@
|
|
157
|
157
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
158
|
158
|
|
|
159
|
159
|
<!-- 新增/修改对话框 -->
|
|
160
|
|
- <el-dialog :title="dialogTitle" v-model="dialogVisible" width="680px" append-to-body>
|
|
161
|
|
- <el-form ref="formRef" :model="form" label-width="100px">
|
|
|
160
|
+ <el-dialog :title="dialogTitle" v-model="dialogVisible" width="680px" append-to-body element-loading-text="加载中...">
|
|
|
161
|
+ <el-form ref="formRef" :model="form" label-width="100px" v-loading="dialogLoading">
|
|
162
|
162
|
<el-row :gutter="16">
|
|
163
|
163
|
<el-col :span="12">
|
|
164
|
164
|
<el-form-item label="配分层级" prop="org" :rules="rules.org">
|
|
|
@@ -311,7 +311,7 @@ const { score_level, score_type } = proxy.useDict('score_level', 'score_type')
|
|
311
|
311
|
|
|
312
|
312
|
const loading = ref(false), list = ref([]), total = ref(0), showSearch = ref(true)
|
|
313
|
313
|
const dateRange = ref([]), queryRef = ref(null), formRef = ref(null)
|
|
314
|
|
-const dialogVisible = ref(false), dialogTitle = ref('')
|
|
|
314
|
+const dialogVisible = ref(false), dialogTitle = ref(''), dialogLoading = ref(false)
|
|
315
|
315
|
const single = ref(true), multiple = ref(true), ids = ref([])
|
|
316
|
316
|
const dimensionOptions = ref([])
|
|
317
|
317
|
const indicatorTree = ref([]) // 当前维度的指标树(扁平+嵌套)
|
|
|
@@ -322,6 +322,7 @@ const deptOptions = ref([])
|
|
322
|
322
|
const teamOptions = ref([])
|
|
323
|
323
|
const groupOptions = ref([])
|
|
324
|
324
|
const personOptions = ref([])
|
|
|
325
|
+const allPersonOptions = ref([]) // 缓存全部人员,避免重复请求
|
|
325
|
326
|
const queryDeptOptions = ref([])
|
|
326
|
327
|
const queryTeamOptions = ref([])
|
|
327
|
328
|
const queryGroupOptions = ref([])
|
|
|
@@ -369,6 +370,7 @@ async function handleLevelChange() {
|
|
369
|
370
|
}
|
|
370
|
371
|
|
|
371
|
372
|
async function handleFormLevelChange() {
|
|
|
373
|
+
|
|
372
|
374
|
form.dimensionId = null
|
|
373
|
375
|
form.level2Id = null; form.level2Name = ''; form.level3Id = null; form.level3Name = ''; form.level4Id = null; form.level4Name = ''
|
|
374
|
376
|
form.deptId = null; form.teamId = null; form.groupId = null; form.personId = null
|
|
|
@@ -388,6 +390,7 @@ async function handleFormLevelChange() {
|
|
388
|
390
|
// } else if (org === '4') {
|
|
389
|
391
|
await loadAllPersons()
|
|
390
|
392
|
// }
|
|
|
393
|
+
|
|
391
|
394
|
}
|
|
392
|
395
|
|
|
393
|
396
|
async function loadAllTeams() {
|
|
|
@@ -407,8 +410,9 @@ async function loadAllGroups() {
|
|
407
|
410
|
|
|
408
|
411
|
async function loadAllPersons() {
|
|
409
|
412
|
const r = await listUser({ pageSize: 9999 })
|
|
410
|
|
-
|
|
411
|
|
- personOptions.value = r.rows || []
|
|
|
413
|
+ const rows = r.rows || []
|
|
|
414
|
+ allPersonOptions.value = rows
|
|
|
415
|
+ personOptions.value = rows
|
|
412
|
416
|
}
|
|
413
|
417
|
|
|
414
|
418
|
async function loadRegions() {
|
|
|
@@ -434,40 +438,65 @@ async function handleFormRegionalChange(val) {
|
|
434
|
438
|
}
|
|
435
|
439
|
}
|
|
436
|
440
|
|
|
437
|
|
-function handleBrigadeChange() {
|
|
|
441
|
+async function handleBrigadeChange(val) {
|
|
|
442
|
+
|
|
|
443
|
+ form.teamId = null; form.groupId = null; form.personId = null
|
|
|
444
|
+ teamOptions.value = []; groupOptions.value = []; personOptions.value = []
|
|
|
445
|
+ if (val) {
|
|
|
446
|
+ const r = await deptTreeSelect({ parentId: val })
|
|
|
447
|
+ teamOptions.value = r.data || []
|
|
|
448
|
+ }
|
|
|
449
|
+
|
|
438
|
450
|
}
|
|
439
|
451
|
|
|
440
|
452
|
async function handleDepartmentChange(val) {
|
|
441
|
|
- form.deptId = null
|
|
|
453
|
+
|
|
|
454
|
+ form.groupId = null; form.personId = null
|
|
|
455
|
+ groupOptions.value = []; personOptions.value = []
|
|
442
|
456
|
if (val) {
|
|
443
|
|
- const r = await getDeptOrgInfo({ deptId: val })
|
|
444
|
|
- if (r.data) {
|
|
445
|
|
- form.deptId = r.data.brigadeId
|
|
446
|
|
- }
|
|
|
457
|
+ const r = await deptTreeSelect({ parentId: val })
|
|
|
458
|
+ groupOptions.value = r.data || []
|
|
447
|
459
|
}
|
|
|
460
|
+
|
|
448
|
461
|
}
|
|
449
|
462
|
|
|
450
|
463
|
async function handleGroupChange(val) {
|
|
451
|
|
- form.deptId = null; form.teamId = null
|
|
|
464
|
+
|
|
|
465
|
+ form.personId = null
|
|
|
466
|
+ personOptions.value = []
|
|
452
|
467
|
if (val) {
|
|
453
|
|
- const r = await getDeptOrgInfo({ deptId: val })
|
|
454
|
|
- if (r.data) {
|
|
455
|
|
- form.deptId = r.data.brigadeId
|
|
456
|
|
- form.teamId = r.data.departmentId
|
|
457
|
|
- }
|
|
|
468
|
+ const r = await listUser({ deptId: val, pageSize: 9999 })
|
|
|
469
|
+ personOptions.value = r.rows || []
|
|
|
470
|
+ } else {
|
|
|
471
|
+ personOptions.value = [...allPersonOptions.value]
|
|
458
|
472
|
}
|
|
|
473
|
+
|
|
459
|
474
|
}
|
|
460
|
475
|
|
|
461
|
476
|
async function handlePersonChange(val) {
|
|
|
477
|
+ dialogLoading.value = true
|
|
462
|
478
|
form.deptId = null; form.teamId = null; form.groupId = null
|
|
|
479
|
+ teamOptions.value = []; groupOptions.value = [];
|
|
463
|
480
|
if (val) {
|
|
464
|
481
|
const r = await getUserOrgInfo({ userId: val })
|
|
465
|
482
|
if (r.data) {
|
|
466
|
483
|
form.deptId = r.data.deptInfo.brigadeId
|
|
467
|
484
|
form.teamId = r.data.deptInfo.departmentId
|
|
468
|
485
|
form.groupId = r.data.deptInfo.teamId
|
|
|
486
|
+
|
|
|
487
|
+ // 根据部门加载队室/班组选项
|
|
|
488
|
+ if (form.deptId) {
|
|
|
489
|
+ const r1 = await deptTreeSelect({ parentId: form.deptId })
|
|
|
490
|
+ teamOptions.value = r1.data || []
|
|
|
491
|
+ }
|
|
|
492
|
+ // 根据队室/班组加载通道/小组选项
|
|
|
493
|
+ if (form.teamId) {
|
|
|
494
|
+ const r2 = await deptTreeSelect({ parentId: form.teamId })
|
|
|
495
|
+ groupOptions.value = r2.data || []
|
|
|
496
|
+ }
|
|
469
|
497
|
}
|
|
470
|
498
|
}
|
|
|
499
|
+ dialogLoading.value = false
|
|
471
|
500
|
}
|
|
472
|
501
|
|
|
473
|
502
|
async function loadQueryDepts() {
|
|
|
@@ -500,7 +529,7 @@ async function handleQueryGroupChange(val) {
|
|
500
|
529
|
queryParams.personId = null
|
|
501
|
530
|
const group = queryGroupOptions.value.find(g => g.id === val)
|
|
502
|
531
|
if (group) {
|
|
503
|
|
- const r = await listUser({ deptId: group.id })
|
|
|
532
|
+ const r = await listUser({ deptId: group.id, pageSize: 9999 })
|
|
504
|
533
|
queryPersonOptions.value = r.rows || []
|
|
505
|
534
|
} else {
|
|
506
|
535
|
queryPersonOptions.value = []
|
|
|
@@ -550,6 +579,8 @@ function resetForm() {
|
|
550
|
579
|
|
|
551
|
580
|
function handleAdd() { resetForm(); dialogTitle.value = '新增配分事项'; dialogVisible.value = true }
|
|
552
|
581
|
async function handleUpdate(row) {
|
|
|
582
|
+
|
|
|
583
|
+ dialogVisible.value = true
|
|
553
|
584
|
resetForm()
|
|
554
|
585
|
const record = row?.id ? row : list.value.find(r => r.id === ids.value[0])
|
|
555
|
586
|
if (record) {
|
|
|
@@ -605,10 +636,12 @@ async function handleUpdate(row) {
|
|
605
|
636
|
if (record.level3Id) onLevel3Change(record.level3Id, true)
|
|
606
|
637
|
if (record.level4Id) onLevel4Change(record.level4Id, true)
|
|
607
|
638
|
}
|
|
608
|
|
- dialogTitle.value = '修改配分事项'; dialogVisible.value = true
|
|
|
639
|
+
|
|
|
640
|
+ dialogTitle.value = '修改配分事项'
|
|
609
|
641
|
}
|
|
610
|
642
|
|
|
611
|
643
|
async function onDimensionChange(dimId, preserveSelection) {
|
|
|
644
|
+ dialogLoading.value = true
|
|
612
|
645
|
const dim = dimensionOptions.value.find(d => d.id === dimId)
|
|
613
|
646
|
if (dim) form.dimensionName = dim.name
|
|
614
|
647
|
const r = await treeIndicator({ dimensionId: dimId, org: form.org })
|
|
|
@@ -617,6 +650,7 @@ async function onDimensionChange(dimId, preserveSelection) {
|
|
617
|
650
|
if (!preserveSelection) { form.level2Id = null; form.level2Name = ''; form.level3Id = null; form.level3Name = ''; form.level4Id = null; form.level4Name = ''; form.scoreValue = 0 }
|
|
618
|
651
|
level3Options.value = []; level4Options.value = []
|
|
619
|
652
|
if (preserveSelection && form.level2Id) onLevel2Change(form.level2Id, true)
|
|
|
653
|
+ dialogLoading.value = false
|
|
620
|
654
|
}
|
|
621
|
655
|
|
|
622
|
656
|
function onLevel2Change(val, preserveSelection) {
|
|
|
@@ -760,6 +794,13 @@ const processPostTree = (nodes, isFirstLevel = true) => {
|
|
760
|
794
|
})
|
|
761
|
795
|
}
|
|
762
|
796
|
|
|
|
797
|
+// 监听通道/小组变化:无值时责任人显示全部人员
|
|
|
798
|
+watch(() => form.groupId, (newVal) => {
|
|
|
799
|
+ if (!newVal) {
|
|
|
800
|
+ personOptions.value = [...allPersonOptions.value]
|
|
|
801
|
+ }
|
|
|
802
|
+})
|
|
|
803
|
+
|
|
763
|
804
|
onMounted(() => {
|
|
764
|
805
|
loadDimensions();
|
|
765
|
806
|
loadDepts();
|