From 2f8bb7e8201b63958575db017fab6138169aebba Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Thu, 5 Nov 2026 11:44:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(approval):=20=E4=B8=8A=E4=BC=A0=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E5=85=88=E5=BB=BA=E7=A9=BA=E8=8D=89=E7=A8=BF=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E8=A6=81=E6=B1=82=E5=85=88=E5=A1=AB=E5=AE=8C?= =?UTF-8?q?=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 八个审批表单页的 uploadFiles 由 ensureDraft(全量校验)改为 ensureInstance: 未建实例时调 createEmptyDraft 只拿实例 id,附件可先传;保存/提交仍走原校验。 后端新增 POST /approval/instance/{flowCode}/draft,空草稿不能提交。 --- src/api/approval/instance/index.ts | 13 +++++++++ src/packageApproval/pages/form-completion.vue | 21 ++++++++++++++- .../pages/form-coordination.vue | 21 ++++++++++++++- src/packageApproval/pages/form-coupon.vue | 27 +++++++++++++++++-- src/packageApproval/pages/form-facility.vue | 27 +++++++++++++++++-- src/packageApproval/pages/form-receipt.vue | 27 +++++++++++++++++-- src/packageApproval/pages/form-settlement.vue | 27 +++++++++++++++++-- src/packageApproval/pages/form-vehicle.vue | 27 +++++++++++++++++-- src/packageApproval/pages/form-venue.vue | 27 +++++++++++++++++-- 9 files changed, 203 insertions(+), 14 deletions(-) diff --git a/src/api/approval/instance/index.ts b/src/api/approval/instance/index.ts index ac73f01..6d378b8 100644 --- a/src/api/approval/instance/index.ts +++ b/src/api/approval/instance/index.ts @@ -52,6 +52,19 @@ export async function saveDocument(flowCode: string, data: Record) return Promise.reject(new Error(res.data.message)); } +/** + * 只建空草稿,返回实例id。上传附件前需要实例,但不校验表单字段。 + */ +export async function createEmptyDraft(flowCode: string) { + const res = await request.post>( + THINK_API_URL + '/approval/instance/' + flowCode + '/draft' + ); + if (res.data.code === 0) { + return res.data.data as number; + } + return Promise.reject(new Error(res.data.message)); +} + /** * 提交或重提 */ diff --git a/src/packageApproval/pages/form-completion.vue b/src/packageApproval/pages/form-completion.vue index 26ed216..3f93402 100644 --- a/src/packageApproval/pages/form-completion.vue +++ b/src/packageApproval/pages/form-completion.vue @@ -101,6 +101,7 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; import { + createEmptyDraft, getInstance, saveCompletion, submitInstance @@ -224,6 +225,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft('completion'); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -330,7 +349,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-coordination.vue b/src/packageApproval/pages/form-coordination.vue index 7d31d6b..3b2a916 100644 --- a/src/packageApproval/pages/form-coordination.vue +++ b/src/packageApproval/pages/form-coordination.vue @@ -112,6 +112,7 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; import { + createEmptyDraft, getInstance, saveCoordination, saveDocument, @@ -296,6 +297,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(flowCode.value); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -402,7 +421,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-coupon.vue b/src/packageApproval/pages/form-coupon.vue index 4484615..ba6c510 100644 --- a/src/packageApproval/pages/form-coupon.vue +++ b/src/packageApproval/pages/form-coupon.vue @@ -121,7 +121,12 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import type { ApprovalAttachment } from '@/api/approval/model'; import { showError, showSuccess } from '@/utils/app'; @@ -308,6 +313,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -414,7 +437,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-facility.vue b/src/packageApproval/pages/form-facility.vue index cdb302e..3985fb0 100644 --- a/src/packageApproval/pages/form-facility.vue +++ b/src/packageApproval/pages/form-facility.vue @@ -164,7 +164,12 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import Decimal from 'decimal.js'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import type { ApprovalAttachment } from '@/api/approval/model'; import { showError, showSuccess } from '@/utils/app'; @@ -383,6 +388,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -489,7 +512,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-receipt.vue b/src/packageApproval/pages/form-receipt.vue index 19679ba..73c3359 100644 --- a/src/packageApproval/pages/form-receipt.vue +++ b/src/packageApproval/pages/form-receipt.vue @@ -111,7 +111,12 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import type { ApprovalAttachment } from '@/api/approval/model'; import { showError, showSuccess } from '@/utils/app'; @@ -234,6 +239,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -340,7 +363,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-settlement.vue b/src/packageApproval/pages/form-settlement.vue index e4dabe0..13f424e 100644 --- a/src/packageApproval/pages/form-settlement.vue +++ b/src/packageApproval/pages/form-settlement.vue @@ -195,7 +195,12 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import Decimal from 'decimal.js'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import type { ApprovalAttachment } from '@/api/approval/model'; import { showError, showSuccess } from '@/utils/app'; @@ -429,6 +434,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -535,7 +558,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-vehicle.vue b/src/packageApproval/pages/form-vehicle.vue index a459ca1..0c34a7a 100644 --- a/src/packageApproval/pages/form-vehicle.vue +++ b/src/packageApproval/pages/form-vehicle.vue @@ -186,7 +186,12 @@ import { computed, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import type { ApprovalAttachment } from '@/api/approval/model'; import { showError, showSuccess } from '@/utils/app'; @@ -411,6 +416,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -517,7 +540,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; } diff --git a/src/packageApproval/pages/form-venue.vue b/src/packageApproval/pages/form-venue.vue index 488eb22..7e4ac8e 100644 --- a/src/packageApproval/pages/form-venue.vue +++ b/src/packageApproval/pages/form-venue.vue @@ -147,7 +147,12 @@ import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { useUserStore } from '@/store/modules/user'; -import { getInstance, saveDocument, submitInstance } from '@/api/approval/instance'; +import { + createEmptyDraft, + getInstance, + saveDocument, + submitInstance +} from '@/api/approval/instance'; import { deleteAttachment, uploadAttachment } from '@/api/approval/attachment'; import { listThinkSite } from '@/api/think/thinkSite'; import type { ApprovalAttachment } from '@/api/approval/model'; @@ -379,6 +384,24 @@ async function ensureDraft(): Promise { } } +/** + * 上传附件只需要实例 id:不校验表单,未建实例时先建空草稿 + */ +async function ensureInstance(): Promise { + if (instanceId.value) { + return instanceId.value; + } + try { + const id = await createEmptyDraft(FLOW_CODE); + instanceId.value = id; + mode.value = 'edit'; + return id; + } catch (error: any) { + showError(error?.message || '创建草稿失败', null); + return 0; + } +} + async function saveDraft() { const id = await ensureDraft(); if (!id) { @@ -485,7 +508,7 @@ async function uploadFiles(files: Array<{ path: string; name?: string; size?: nu if (!files.length) { return; } - const id = await ensureDraft(); + const id = await ensureInstance(); if (!id) { return; }