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 @@
-
-
-
- {{ getStatusLabel(scope.row.status) }}
-
-
-
+
+
+
+
+
+
+
@@ -136,6 +136,7 @@
提交至需求部门
提交至内审部门
补充上传
+ 定稿
提交至资产管理处
@@ -158,11 +159,55 @@
+
+
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确定定稿
+
+
+
+
+
+ 选择文件
+
+
-
+
@@ -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
}