From 0ddf2cf39ccae369b89aa7da84ad261dfd578f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=84=E9=94=90=E6=B3=A2?= <10549902+zhuangruibo@user.noreply.gitee.com> Date: Fri, 26 Jun 2026 20:21:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A1=E5=88=92bug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../my/reserve/cp_reserve_system.vue | 468 +++++++++++------- 1 file changed, 278 insertions(+), 190 deletions(-) diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue index d1808e35..f858ecec 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue @@ -25,64 +25,76 @@ v-for="item in reserveList" :key="item.id" class="reserve-card" - :class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3, 'selected-card': selectedId === item.id }" - @click="onSelectCard(item)" + :class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }" >
+
系统匹配
{{ getStatusText(item.opStatus) }}
-
{{ item.enforceContent || '执法事项' }}
- -
-
企业名称:
-
{{ item.enterpriseName || '-' }}
-
- -
-
计划时间:
-
{{ formatDateShort(item.planDate) }} {{ getPlanTimeText(item.planTime) }}
-
- -
-
执法单位:
-
{{ item.bureauDeptName || '-' }}
-
- -
-
匹配时间:
-
{{ formatDate(item.reserveTime) }}
+ +
+
+ 本单位计划 +
+
{{ item.enterpriseName || '-' }}
+
{{ formatDateShort(item.planDate) }} {{ getPlanTimeText(item.planTime) }}
+
+
+
执法单位:
+
{{ item.bureauDeptName || '-' }}
+
+
+
执法人员:
+
{{ formatUserInfo(item.enforceUserNames, item.enforceUserTels) }}
+
+
+
执法事项:
+
{{ item.enforceContent || '-' }}
+
+
+
匹配时间:
+
{{ formatDate(item.reserveTime) }}
+
- -
-
关联计划
-
-
- 预约状态: - {{ getStatusText(member.opStatus) }} + +
+
+ 关联单位 ({{ groupMembersMap[item.id].length }}) +
+
+
{{ member.bureauDeptName || '-' }}
+
+
+
计划时间:
+
{{ formatDateShort(member.planDate) }} {{ getPlanTimeText(member.planTime) }}
-
- 执法单位: - {{ member.bureauDeptName || '-' }} +
+
预约状态:
+
+ {{ getStatusText(member.opStatus) }} +
-
- 执法事项: - {{ member.enforceContent || '-' }} +
+
执法人员:
+
{{ formatUserInfo(member.enforceUserNames, member.enforceUserTels) }}
-
- 计划时间: - {{ formatDateShort(member.planDate) }} {{ getPlanTimeText(member.planTime) }} +
+
执法事项:
+
{{ member.enforceContent || '-' }}
-
+
-
加载中...
+
+
加载关联计划中...
+
- -
+ +
@@ -138,9 +150,8 @@ import { showConfirmDialog, showSuccessToast, showDialog } from 'vant'; import { getReserveList, getReserveDetail, approveReserve, rejectReserveBySystem, getReserveGroupMembers } from '@/api/enforcement/reserve'; -const selectedId = ref(null); -const groupMembers = ref([]); // 选中卡片的同组关联计划 -const groupLoading = ref(false); +const groupMembersMap = ref({}); // key=item.id, value=关联计划列表 +const groupLoadingSet = ref(new Set()); const reserveList = ref([]); const loading = ref(false); const finished = ref(false); @@ -181,6 +192,17 @@ const getPlanTimeText = (time) => { return map[time] || ''; }; +// 格式化执法人员信息(姓名+电话多行展示) +const formatUserInfo = (names, tels) => { + if (!names) return '-'; + const nameArr = names.split(','); + const telArr = tels ? tels.split(',') : []; + return nameArr.map((n, i) => { + const tel = telArr[i] ? ' ' + telArr[i].trim() : ''; + return n.trim() + tel; + }).join('\n'); +}; + // 格式化日期(带时分) const formatDate = (dateStr) => { if (!dateStr) return '-'; @@ -210,37 +232,13 @@ const onLoad = () => { fetchList(); }; -// 选中卡片(再次点击取消选中) -const onSelectCard = (item) => { - if (selectedId.value === item.id) { - selectedId.value = null; - groupMembers.value = []; - return; - } - selectedId.value = item.id; - groupMembers.value = []; - // 加载同组关联计划 - if (item.planGroupId) { - groupLoading.value = true; - getReserveGroupMembers( - item.planGroupId, - item.id, - (res) => { - groupLoading.value = false; - if (res.code === 200) { - groupMembers.value = res.data || []; - } - }, - () => { groupLoading.value = false; } - ); - } -}; - // 下拉刷新 const onRefresh = () => { pageNum.value = 1; finished.value = false; reserveList.value = []; + groupMembersMap.value = {}; + groupLoadingSet.value = new Set(); fetchList(); }; @@ -274,6 +272,8 @@ const fetchList = () => { } else { pageNum.value++; } + // 第二次请求:自动加载关联计划 + loadGroupMembers(rows); } else { finished.value = true; } @@ -286,6 +286,28 @@ const fetchList = () => { ); }; +// 自动加载关联计划(第二次请求) +const loadGroupMembers = (rows) => { + const itemsWithGroup = rows.filter(item => item.planGroupId && !groupMembersMap.value[item.id]); + if (itemsWithGroup.length === 0) return; + itemsWithGroup.forEach(item => { + groupLoadingSet.value.add(item.id); + getReserveGroupMembers( + item.planGroupId, + item.id, + (res) => { + groupLoadingSet.value.delete(item.id); + if (res.code === 200) { + groupMembersMap.value[item.id] = res.data || []; + } + }, + () => { + groupLoadingSet.value.delete(item.id); + } + ); + }); +}; + // 查看备注 const onShowMessage = (item) => { showDialog({ @@ -348,7 +370,8 @@ const buildTimeOptions = (item) => { }); } // 关联计划的时间 - for (const member of groupMembers.value) { + const members = groupMembersMap.value[item.id] || []; + for (const member of members) { if (member.planDate) { options.push({ bureauDeptName: member.bureauDeptName || '-', @@ -374,7 +397,7 @@ const doApprove = (id, params) => { approveReserve(id, params, (res) => { if (res.code === 200) { showSuccessToast('已同意'); - afterOperate(); + onRefresh(); } else { showDialog({ title: '提示', message: res.msg || '操作失败' }); } @@ -390,21 +413,13 @@ const onReject = (item) => { rejectReserveBySystem(item.id, (res) => { if (res.code === 200) { showSuccessToast('已拒绝'); - afterOperate(); + onRefresh(); } else { showDialog({ title: '提示', message: res.msg || '操作失败' }); } }); }).catch(() => {}); }; - -// 操作后置处理 -const afterOperate = () => { - selectedId.value = null; - groupMembers.value = []; - pendingApproveItem.value = null; - onRefresh(); -};