diff --git a/dist.zip b/dist.zip deleted file mode 100644 index 2487246..0000000 Binary files a/dist.zip and /dev/null differ diff --git a/src/api/business/cost/firm-reports-api.js b/src/api/business/cost/firm-reports-api.js index a1aec8e..568f88b 100644 --- a/src/api/business/cost/firm-reports-api.js +++ b/src/api/business/cost/firm-reports-api.js @@ -80,4 +80,18 @@ export const firmReportsApi = { return postRequest('/firmReports/reject', idList); }, + /** + * 提交前预检查 @author wzh + */ + preCommitCheck: (idList) => { + return postRequest('/firmReports/preCommitCheck', idList); + }, + + /** + * 批量创建缺失季度记录 @author wzh + */ + batchCreateMissing: (param) => { + return postRequest('/firmReports/batchCreateMissing', param); + }, + }; diff --git a/src/views/business/erp/cost/firm-reports-list.vue b/src/views/business/erp/cost/firm-reports-list.vue index 55782c9..dc61ab0 100644 --- a/src/views/business/erp/cost/firm-reports-list.vue +++ b/src/views/business/erp/cost/firm-reports-list.vue @@ -119,7 +119,32 @@ - + + +
+

+ 提交{{ quarterYear }}年第{{ quarterCurrentQuarter }}季度前,以下季度成本报表尚未提交: +

+
+
+ + {{ q.label }} + 空白报表 +
+
+

勾选需要创建的季度,取消勾选则跳过。创建后请逐季度填写收入后提交。

+
+
@@ -314,6 +339,46 @@ } } + // ---------------------------- 缺失季度弹窗 ---------------------------- + const quarterModalVisible = ref(false); + const quarterYear = ref(null); + const quarterCurrentQuarter = ref(null); + const quarterFirmId = ref(null); + const quarterMissingList = ref([]); + const pendingSubmitRecord = ref(null); + + async function handleCreateQuarters() { + const checkedItems = quarterMissingList.value.filter(q => q.checked); + if (checkedItems.length === 0) { + message.warning('请至少勾选一个需要创建的季度'); + return; + } + try { + SmartLoading.show(); + const yearGroups = {}; + checkedItems.forEach(q => { + if (!yearGroups[q.year]) { + yearGroups[q.year] = []; + } + yearGroups[q.year].push(q.quarterNum); + }); + for (const [yr, quarters] of Object.entries(yearGroups)) { + await firmReportsApi.batchCreateMissing({ + firmId: quarterFirmId.value, + year: parseInt(yr), + quarters: quarters, + }); + } + message.success(`成功创建 ${checkedItems.length} 个季度的空白报表`); + quarterModalVisible.value = false; + queryData(); + } catch (e) { + smartSentry.captureError(e); + } finally { + SmartLoading.hide(); + } + } + // ---------------------------- 单个提交 ---------------------------- //确认提交 function onSubmit(data){ @@ -332,8 +397,6 @@ //请求提交 async function requestSubmit(data){ - // 检查权限,确保只能提交未提交数据 - // 行政账号(staff)和主任账号(cto)可以相互操作对方的数据 if (data.approvalStatus !== 0) { message.warning('只能提交未提交状态的数据'); return; @@ -341,7 +404,32 @@ try { SmartLoading.show(); - // 后端接口要求传递idList参数,这里传递单个ID的数组 + + const checkResult = await firmReportsApi.preCommitCheck([data.id]); + if (checkResult.data && checkResult.data.hasMissing) { + SmartLoading.hide(); + const missingQuarters = checkResult.data.missingQuarters || []; + const firmId = checkResult.data.firmId; + const year = checkResult.data.year; + const currentQuarter = checkResult.data.currentQuarter; + + quarterYear.value = year; + quarterCurrentQuarter.value = currentQuarter; + quarterFirmId.value = firmId; + quarterMissingList.value = missingQuarters.map((q) => { + const parsed = parseQuarterLabel(q); + return { + label: q, + checked: true, + year: parsed.year, + quarterNum: parsed.quarterNum, + }; + }); + pendingSubmitRecord.value = data; + quarterModalVisible.value = true; + return; + } + await firmReportsApi.commit([data.id]); message.success('提交成功'); queryData(); @@ -352,6 +440,11 @@ } } + function parseQuarterLabel(label) { + const match = label.match(/(\d+)年第(\d+)季度/); + return match ? { year: parseInt(match[1]), quarterNum: parseInt(match[2]) } : null; + } + // ---------------------------- 驳回相关 ---------------------------- // 确认驳回 diff --git a/src/views/business/erp/service/law-firm-statistics.vue b/src/views/business/erp/service/law-firm-statistics.vue index 6d680fe..c66170d 100644 --- a/src/views/business/erp/service/law-firm-statistics.vue +++ b/src/views/business/erp/service/law-firm-statistics.vue @@ -258,7 +258,7 @@ async function handleApproveConfirm() { // 调用部门ID批量审核接口 await serviceApplicationsApi.batchReviewByDepartmentId({ firmId: currentFirm.value.firmId, // 部门ID - associationAuditStatus: approveForm.auditResult, + auditResult: approveForm.auditResult, auditRemark: approveForm.auditRemark }); @@ -306,4 +306,4 @@ onMounted(() => { .statistics-table { margin-top: 16px; } - \ No newline at end of file + diff --git a/src/views/business/erp/service/lawyer-service-report-statistics.vue b/src/views/business/erp/service/lawyer-service-report-statistics.vue index 774a8ca..89086fd 100644 --- a/src/views/business/erp/service/lawyer-service-report-statistics.vue +++ b/src/views/business/erp/service/lawyer-service-report-statistics.vue @@ -58,9 +58,10 @@
- + +
序号律所名称 律师名称