From 8be7ca9dc24673dbe78a1fb3d2ba2ed0c4b7b341 Mon Sep 17 00:00:00 2001 From: zou Date: Tue, 18 Aug 2026 13:20:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(F006):=20=E4=BC=81=E4=B8=9A=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E4=B8=93=E4=B8=9AUI=E9=87=8D=E6=9E=84=20+=20?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E4=BA=A4=E4=BA=92=E5=85=A8=E9=93=BE=E8=B7=AF?= =?UTF-8?q?=20(=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87/=E9=A9=B3=E5=9B=9E+?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0+=E6=9C=AC=E4=BC=9A=E8=AF=9D=E7=95=99?= =?UTF-8?q?=E7=97=95=E6=97=B6=E9=97=B4=E7=BA=BF,=20=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=A1=B5=E5=8D=95=E8=A1=8C/=E6=89=B9=E9=87=8F=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E6=8E=A5=E9=80=9A,=20=E4=BF=AE=20enabled/showEnterpri?= =?UTF-8?q?se=20query=E4=BC=A0=E5=8F=82bug)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/user/EnterpriseListView.vue | 129 ++++- .../user/enterprise/EnterpriseDetailView.vue | 536 +++++++++++++++--- 2 files changed, 572 insertions(+), 93 deletions(-) diff --git a/src/modules/user/EnterpriseListView.vue b/src/modules/user/EnterpriseListView.vue index d2b3b8a..a4731a4 100644 --- a/src/modules/user/EnterpriseListView.vue +++ b/src/modules/user/EnterpriseListView.vue @@ -61,6 +61,16 @@ const selectedIds = ref([]) const detailVisible = ref(false) const detailRow = ref(null) +// ========== 单行审核 ========== +const auditVisible = ref(false) +const auditBusy = ref(false) +const auditForm = reactive({ id: '', result: 2, failReason: '' }) + +// ========== 批量审核 ========== +const batchAuditVisible = ref(false) +const batchAuditBusy = ref(false) +const batchAuditForm = reactive({ result: 2, failReason: '' }) + const filters = reactive({ enterpriseName: '', industry: '', @@ -160,12 +170,60 @@ function onPageChange(p: number) { page.value = p; load() } function onLimitChange(l: number) { limit.value = l; page.value = 1; load() } function onSelectionChange(rows: any[]) { selectedIds.value = rows.map((r: any) => r.id) } +// ========== 审核交互 (后端 GET /user/enterprise/checkStatus?id=&status=&failReason=, 支持逗号批量) ========== +function onAudit(row: Enterprise) { + auditForm.id = row.id + auditForm.result = 2 + auditForm.failReason = '' + auditVisible.value = true +} + +async function submitAudit() { + if (auditForm.result === 3 && !auditForm.failReason.trim()) { ElMessage.warning('请填写驳回原因'); return } + auditBusy.value = true + try { + await httpGet('/user/enterprise/checkStatus', { + id: auditForm.id, status: auditForm.result, + failReason: auditForm.result === 3 ? auditForm.failReason.trim() : '' + }) + ElMessage.success(auditForm.result === 2 ? '审核通过' : '已驳回') + auditVisible.value = false + load() + } catch (e: any) { ElMessage.error(e?.msg || e?.message || '审核操作失败') } + finally { auditBusy.value = false } +} + +async function openBatchAudit() { + if (!selectedIds.value.length) { ElMessage.warning('请先选择企业'); return } + batchAuditForm.result = 2 + batchAuditForm.failReason = '' + batchAuditVisible.value = true +} + +async function submitBatchAudit() { + if (batchAuditForm.result === 3 && !batchAuditForm.failReason.trim()) { ElMessage.warning('请填写驳回原因'); return } + try { + await ElMessageBox.confirm( + `确认对已选 ${selectedIds.value.length} 家企业执行「${batchAuditForm.result === 2 ? '审核通过' : '驳回'}」?` + + (batchAuditForm.result === 2 ? '通过后将通过站内消息与短信通知企业。' : ''), + '批量审核确认', { type: 'warning' } + ) + } catch { return } + batchAuditBusy.value = true + try { + await httpGet('/user/enterprise/checkStatus', { + id: selectedIds.value.join(','), status: batchAuditForm.result, + failReason: batchAuditForm.result === 3 ? batchAuditForm.failReason.trim() : '' + }) + ElMessage.success(`已对 ${selectedIds.value.length} 家企业完成审核`) + batchAuditVisible.value = false + load() + } catch (e: any) { ElMessage.error(e?.msg || e?.message || '批量审核失败') } + finally { batchAuditBusy.value = false } +} + // ========== 批量操作 ========== function importHandle() { ElMessage.info('导入功能待实现') } -function batchAuditHandle() { - if (!selectedIds.value.length) { ElMessage.warning('请先选择企业'); return } - ElMessage.info('批量审核功能待实现') -} function batchLabelHandle() { if (!selectedIds.value.length) { ElMessage.warning('请先选择企业'); return } ElMessage.info('批量设置标签待实现') @@ -195,20 +253,21 @@ function changeAdminHandle(_row: Enterprise) { ElMessage.info('更换管理员 async function handleMore(cmd: string, row: Enterprise) { try { switch (cmd) { - case 'audit': ElMessage.info('审核待实现'); break + case 'audit': onAudit(row); break case 'label': ElMessage.info('标签待实现'); break case 'rating': ElMessage.info('评级待实现'); break case 'enabled': - await httpPost('/user/enterprise/enabled', { id: row.id, enabled: row.enabled === 1 ? 0 : 1 }) - ElMessage.success(row.enabled === 1 ? '已禁用' : '已启用'); load() + // 后端 @RequestParam 从 query 读, body 不绑定 (2026-08-18 实测修正) + await httpPost(`/user/enterprise/enabled?id=${row.id}`) + ElMessage.success(row.enabled === 1 ? '已启用' : '已禁用'); load() break case 'showFlag': - await httpPost('/user/enterprise/showEnterprise', { id: row.id, showFlag: row.showFlag === 1 ? 0 : 1 }) + await httpPost(`/user/enterprise/showEnterprise?id=${row.id}`) ElMessage.success(row.showFlag === 1 ? '已显示' : '已隐藏'); load() break case 'homeShow': - await httpPost('/user/enterprise/homeShow', { id: row.id, homeShow: row.homeShow === 1 ? 0 : 1 }) - ElMessage.success(row.homeShow === 1 ? '已取消推荐' : '已推荐'); load() + await httpGet('/user/enterprise/homeShow', { id: row.id, homeShow: row.homeShow === 1 ? 0 : 1 }) + ElMessage.success(row.homeShow === 1 ? '已推荐' : '已取消推荐'); load() break case 'assign': ElMessage.info('分配业务员待实现'); break case 'deleteRow': @@ -250,7 +309,7 @@ onMounted(() => load())
导入 - 批量审核 + 批量审核 批量设置标签 批量分配业务员 删除 @@ -382,6 +441,54 @@ onMounted(() => load()) 关闭 + + + +
+ 正在审核:{{ auditForm.id ? (list.find(r => r.id === auditForm.id)?.enterpriseName || '--') : '--' }} +
+ + + + 审核通过 + 审核驳回 + + + + + + + +
+ + + + + + + 全部审核通过 + 全部驳回 + + + + + + +
+ 已选 {{ selectedIds.length }} 家企业将通过认证,并通过站内消息与短信通知企业。 +
+
+
+ +
diff --git a/src/modules/user/enterprise/EnterpriseDetailView.vue b/src/modules/user/enterprise/EnterpriseDetailView.vue index 432716d..e0e5100 100644 --- a/src/modules/user/enterprise/EnterpriseDetailView.vue +++ b/src/modules/user/enterprise/EnterpriseDetailView.vue @@ -1,21 +1,34 @@