更新采购申请
This commit is contained in:
@@ -249,3 +249,15 @@ export function submitToAsset(data: any) {
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 定稿(资产管理处)
|
||||
* @param data 审核信息
|
||||
*/
|
||||
export function finalizeDoc(data: any) {
|
||||
return request({
|
||||
url: '/purchase/purchasingdoc/finalize',
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="dialogTitle"
|
||||
width="900px"
|
||||
width="85%"
|
||||
destroy-on-close
|
||||
:close-on-click-modal="false"
|
||||
@close="handleClose">
|
||||
@@ -94,13 +94,13 @@
|
||||
<el-table-column prop="version" label="版本" width="80" align="center" />
|
||||
<el-table-column prop="uploadByName" label="上传人" width="100" />
|
||||
<el-table-column prop="uploadTime" label="上传时间" width="160" />
|
||||
<el-table-column label="状态" width="120" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag :type="getStatusType(scope.row.status)" size="small">
|
||||
{{ getStatusLabel(scope.row.status) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="状态" width="120" align="center">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <el-tag :type="getStatusType(scope.row.status)" size="small">-->
|
||||
<!-- {{ getStatusLabel(scope.row.status) }}-->
|
||||
<!-- </el-tag>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="fileRemark" label="文件意见" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="100" align="center">
|
||||
<template #default="scope">
|
||||
@@ -136,6 +136,7 @@
|
||||
<el-button v-if="canSubmitToDept" type="primary" @click="handleSubmitToDept">提交至需求部门</el-button>
|
||||
<el-button v-if="canSubmitToAudit" type="primary" @click="handleSubmitToAudit">提交至内审部门</el-button>
|
||||
<el-button v-if="canSupplyUpload" type="info" @click="handleSupplyUpload">补充上传</el-button>
|
||||
<el-button v-if="canFinalize" type="success" @click="handleFinalize">定稿</el-button>
|
||||
<!-- 需求部门/内审部门操作按钮 -->
|
||||
<el-button v-if="canSubmitToAsset" type="primary" @click="handleSubmitToAsset">提交至资产管理处</el-button>
|
||||
<!-- 通用操作按钮 -->
|
||||
@@ -158,11 +159,55 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 备注输入弹窗(提交至资产处/内审部门) -->
|
||||
<el-dialog v-model="remarkDialogVisible" :title="remarkDialogTitle" width="400px" append-to-body>
|
||||
<el-form>
|
||||
<el-form-item label="批注意见">
|
||||
<el-input v-model="remarkInput" type="textarea" :rows="3" placeholder="请输入批注意见(选填)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="remarkDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitRemarkAction">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 定稿弹窗 -->
|
||||
<el-dialog v-model="finalizeDialogVisible" title="定稿确认" width="400px" append-to-body>
|
||||
<el-form>
|
||||
<el-form-item label="批注意见">
|
||||
<el-input v-model="finalizeRemark" type="textarea" :rows="3" placeholder="请输入批注意见(选填)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="finalizeDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitFinalize">确定定稿</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 补充上传弹窗 -->
|
||||
<el-dialog v-model="supplyUploadDialogVisible" title="补充上传" width="500px" append-to-body>
|
||||
<el-form :model="supplyUploadForm" label-width="100px">
|
||||
<el-form-item label="选择文件" required>
|
||||
<el-upload
|
||||
ref="supplyUploadRef"
|
||||
:action="uploadAction"
|
||||
:headers="uploadHeaders"
|
||||
:data="uploadData"
|
||||
:on-success="handleSupplyUploadSuccess"
|
||||
:on-error="handleUploadError"
|
||||
:before-upload="beforeUpload"
|
||||
:on-change="handleSupplyFileChange"
|
||||
:auto-upload="false"
|
||||
:limit="1"
|
||||
:file-list="supplyFileList"
|
||||
:show-file-list="true"
|
||||
accept=".doc,.docx,.pdf">
|
||||
<el-button type="primary" icon="Upload">选择文件</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件名称">
|
||||
<el-input v-model="supplyUploadForm.fileName" disabled />
|
||||
<el-input v-model="supplyUploadForm.fileName" disabled placeholder="上传后自动显示" />
|
||||
</el-form-item>
|
||||
<el-form-item label="文件意见" required>
|
||||
<el-input v-model="supplyUploadForm.fileRemark" type="textarea" :rows="3" placeholder="请输入文件意见(必填)" />
|
||||
@@ -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<any>(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<UploadInstance>()
|
||||
const supplyUploadDialogVisible = ref(false)
|
||||
const supplyUploadSubmitting = ref(false)
|
||||
const supplyFileList = ref<UploadUserFile[]>([])
|
||||
const supplyUploadedFileData = ref<any>(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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user