From 2830d95725f49d46c23550eeaae03c988a32a23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=BA=A2=E5=85=B5?= <374362909@qq.com> Date: Sun, 1 Mar 2026 23:46:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD=E7=94=B3?= =?UTF-8?q?=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/purchase/docProcess.ts | 12 + .../docProcess/DocProcessDialog.vue | 251 +++++++++++++----- 2 files changed, 200 insertions(+), 63 deletions(-) diff --git a/src/api/purchase/docProcess.ts b/src/api/purchase/docProcess.ts index 8f4de67..84f91ab 100644 --- a/src/api/purchase/docProcess.ts +++ b/src/api/purchase/docProcess.ts @@ -248,4 +248,16 @@ export function submitToAsset(data: any) { method: 'post', data }); +} + +/** + * 定稿(资产管理处) + * @param data 审核信息 + */ +export function finalizeDoc(data: any) { + return request({ + url: '/purchase/purchasingdoc/finalize', + method: 'post', + data + }); } \ No newline at end of file diff --git a/src/views/purchase/purchasingrequisition/docProcess/DocProcessDialog.vue b/src/views/purchase/purchasingrequisition/docProcess/DocProcessDialog.vue index 38fa513..60ffe75 100644 --- a/src/views/purchase/purchasingrequisition/docProcess/DocProcessDialog.vue +++ b/src/views/purchase/purchasingrequisition/docProcess/DocProcessDialog.vue @@ -2,7 +2,7 @@ @@ -94,13 +94,13 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 选择文件 + + - + @@ -195,7 +240,8 @@ import { supplyUpload as supplyUploadApi, submitToDept as submitToDeptApi, submitToAudit as submitToAuditApi, - submitToAsset as submitToAssetApi + submitToAsset as submitToAssetApi, + finalizeDoc as finalizeDocApi } from '/@/api/purchase/docProcess' import type { UploadInstance, UploadProps, UploadUserFile } from 'element-plus' @@ -228,9 +274,22 @@ const uploadedFileData = ref(null) const returnDialogVisible = ref(false) const returnRemark = ref('') +// 备注输入相关(提交至资产处/内审部门) +const remarkDialogVisible = ref(false) +const remarkDialogTitle = ref('') +const remarkInput = ref('') +const remarkActionType = ref('') + +// 定稿相关 +const finalizeDialogVisible = ref(false) +const finalizeRemark = ref('') + // 补充上传相关 +const supplyUploadRef = ref() const supplyUploadDialogVisible = ref(false) const supplyUploadSubmitting = ref(false) +const supplyFileList = ref([]) +const supplyUploadedFileData = ref(null) const supplyUploadForm = ref({ fileName: '', filePath: '', @@ -267,6 +326,9 @@ const canReturn = computed(() => availableActions.value.includes('return')) // 是否可完成 const canComplete = computed(() => availableActions.value.includes('complete')) +// 是否可定稿 +const canFinalize = computed(() => availableActions.value.includes('finalize')) + // 状态快捷判断 const isReturned = computed(() => statusField.value === 'RETURNED') const isReviewing = computed(() => ['ASSET_REVIEWING', 'DEPT_REVIEWING', 'AUDIT_REVIEWING'].includes(statusField.value)) @@ -535,24 +597,69 @@ const handleSupplyUpload = () => { filePath: '', fileRemark: '' } + supplyFileList.value = [] + supplyUploadedFileData.value = null supplyUploadDialogVisible.value = true } +// 补充上传文件选择变化 +const handleSupplyFileChange: UploadProps['onChange'] = (uploadFile, uploadFiles) => { + supplyFileList.value = uploadFiles +} + +// 补充上传文件上传成功回调 +const handleSupplyUploadSuccess: UploadProps['onSuccess'] = (response: any, uploadFile: any) => { + if (response?.code === 0 || response?.code === 200) { + supplyUploadedFileData.value = { + fileName: response.data.fileTitle || uploadFile.name, + filePath: response.data.remark || response.data.filePath + } + supplyUploadForm.value.fileName = supplyUploadedFileData.value.fileName + supplyUploadForm.value.filePath = supplyUploadedFileData.value.filePath + supplyUploadSubmitting.value = false + } else { + useMessage().error(response?.msg || '上传失败') + supplyUploadSubmitting.value = false + } +} + +// 补充上传文件上传 +const startSupplyUpload = async () => { + if (supplyFileList.value.length === 0) { + useMessage().warning('请先选择文件') + return false + } + supplyUploadSubmitting.value = true + supplyUploadRef.value?.submit() + // 等待上传完成 + return new Promise((resolve) => { + const checkInterval = setInterval(() => { + if (!supplyUploadSubmitting.value) { + clearInterval(checkInterval) + resolve(supplyUploadedFileData.value !== null) + } + }, 100) + }) +} + const submitSupplyUpload = async () => { - if (!supplyUploadForm.value.fileRemark) { - useMessage().warning('请填写文件意见') + // 先上传文件 + const uploaded = await startSupplyUpload() + if (!uploaded || !supplyUploadedFileData.value) { + useMessage().error('文件上传失败') return } - if (!supplyUploadForm.value.filePath) { - useMessage().warning('请先上传文件') + if (!supplyUploadForm.value.fileRemark) { + useMessage().warning('请填写文件意见') + supplyUploadSubmitting.value = false return } supplyUploadSubmitting.value = true try { const res = await supplyUploadApi({ applyId: applyId.value, - fileName: supplyUploadForm.value.fileName, - filePath: supplyUploadForm.value.filePath, + fileName: supplyUploadedFileData.value.fileName, + filePath: supplyUploadedFileData.value.filePath, fileRemark: supplyUploadForm.value.fileRemark }) if (res?.code === 0 || res?.code === 200) { @@ -574,60 +681,52 @@ const submitSupplyUpload = async () => { } // 提交至需求部门 -const handleSubmitToDept = async () => { - try { - await useMessageBox().confirm('确定要提交至需求部门审核吗?') - } catch { - return - } - try { - await submitToDeptApi({ applyId: applyId.value }) - useMessage().success('提交成功') - emit('refresh') - await loadDocList() - auditRecordListRef.value?.refresh() - const actionsRes = await getAvailableActions(applyId.value) - availableActions.value = actionsRes.data || [] - } catch (e: any) { - useMessage().error(e?.msg || '提交失败') - } +const handleSubmitToDept = () => { + remarkDialogTitle.value = '提交至需求部门' + remarkInput.value = '' + remarkActionType.value = 'dept' + remarkDialogVisible.value = true } // 提交至内审部门 -const handleSubmitToAudit = async () => { - try { - await useMessageBox().confirm('确定要提交至内审部门审核吗?') - } catch { - return - } - try { - await submitToAuditApi({ applyId: applyId.value }) - useMessage().success('提交成功') - emit('refresh') - await loadDocList() - auditRecordListRef.value?.refresh() - const actionsRes = await getAvailableActions(applyId.value) - availableActions.value = actionsRes.data || [] - } catch (e: any) { - useMessage().error(e?.msg || '提交失败') - } +const handleSubmitToAudit = () => { + remarkDialogTitle.value = '提交至内审部门' + remarkInput.value = '' + remarkActionType.value = 'audit' + remarkDialogVisible.value = true } // 提交至资产管理处 -const handleSubmitToAsset = async () => { +const handleSubmitToAsset = () => { + remarkDialogTitle.value = '提交至资产管理处' + remarkInput.value = '' + remarkActionType.value = 'asset' + remarkDialogVisible.value = true +} + +// 提交备注操作 +const submitRemarkAction = async () => { + remarkDialogVisible.value = false try { - await useMessageBox().confirm('确定要提交至资产管理处吗?') - } catch { - return - } - try { - await submitToAssetApi({ applyId: applyId.value }) - useMessage().success('提交成功') - emit('refresh') - await loadDocList() - auditRecordListRef.value?.refresh() - const actionsRes = await getAvailableActions(applyId.value) - availableActions.value = actionsRes.data || [] + let res: any + const params = { applyId: applyId.value, remark: remarkInput.value } + if (remarkActionType.value === 'dept') { + res = await submitToDeptApi(params) + } else if (remarkActionType.value === 'audit') { + res = await submitToAuditApi(params) + } else if (remarkActionType.value === 'asset') { + res = await submitToAssetApi(params) + } + if (res?.code === 0 || res?.code === 200) { + useMessage().success('提交成功') + emit('refresh') + await loadDocList() + auditRecordListRef.value?.refresh() + const actionsRes = await getAvailableActions(applyId.value) + availableActions.value = actionsRes.data || [] + } else { + useMessage().error(res?.msg || '提交失败') + } } catch (e: any) { useMessage().error(e?.msg || '提交失败') } @@ -672,6 +771,32 @@ const handleComplete = async () => { } } +// 定稿 +const handleFinalize = () => { + finalizeRemark.value = '' + finalizeDialogVisible.value = true +} + +// 提交定稿 +const submitFinalize = async () => { + try { + const res = await finalizeDocApi({ applyId: applyId.value, remark: finalizeRemark.value }) + if (res?.code === 0 || res?.code === 200) { + useMessage().success('定稿成功') + finalizeDialogVisible.value = false + emit('refresh') + await loadDocList() + auditRecordListRef.value?.refresh() + const actionsRes = await getAvailableActions(applyId.value) + availableActions.value = actionsRes.data || [] + } else { + useMessage().error(res?.msg || '定稿失败') + } + } catch (e: any) { + useMessage().error(e?.msg || '定稿失败') + } +} + const handleClose = () => { visible.value = false }