更新采购申请
This commit is contained in:
@@ -249,3 +249,15 @@ export function submitToAsset(data: any) {
|
|||||||
data
|
data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定稿(资产管理处)
|
||||||
|
* @param data 审核信息
|
||||||
|
*/
|
||||||
|
export function finalizeDoc(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/purchase/purchasingdoc/finalize',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="900px"
|
width="85%"
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
@@ -94,13 +94,13 @@
|
|||||||
<el-table-column prop="version" label="版本" width="80" align="center" />
|
<el-table-column prop="version" label="版本" width="80" align="center" />
|
||||||
<el-table-column prop="uploadByName" label="上传人" width="100" />
|
<el-table-column prop="uploadByName" label="上传人" width="100" />
|
||||||
<el-table-column prop="uploadTime" label="上传时间" width="160" />
|
<el-table-column prop="uploadTime" label="上传时间" width="160" />
|
||||||
<el-table-column label="状态" width="120" align="center">
|
<!-- <el-table-column label="状态" width="120" align="center">-->
|
||||||
<template #default="scope">
|
<!-- <template #default="scope">-->
|
||||||
<el-tag :type="getStatusType(scope.row.status)" size="small">
|
<!-- <el-tag :type="getStatusType(scope.row.status)" size="small">-->
|
||||||
{{ getStatusLabel(scope.row.status) }}
|
<!-- {{ getStatusLabel(scope.row.status) }}-->
|
||||||
</el-tag>
|
<!-- </el-tag>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
<el-table-column prop="fileRemark" label="文件意见" min-width="150" show-overflow-tooltip />
|
<el-table-column prop="fileRemark" label="文件意见" min-width="150" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="100" align="center">
|
<el-table-column label="操作" width="100" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@@ -136,6 +136,7 @@
|
|||||||
<el-button v-if="canSubmitToDept" type="primary" @click="handleSubmitToDept">提交至需求部门</el-button>
|
<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="canSubmitToAudit" type="primary" @click="handleSubmitToAudit">提交至内审部门</el-button>
|
||||||
<el-button v-if="canSupplyUpload" type="info" @click="handleSupplyUpload">补充上传</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>
|
<el-button v-if="canSubmitToAsset" type="primary" @click="handleSubmitToAsset">提交至资产管理处</el-button>
|
||||||
<!-- 通用操作按钮 -->
|
<!-- 通用操作按钮 -->
|
||||||
@@ -158,11 +159,55 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</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-dialog v-model="supplyUploadDialogVisible" title="补充上传" width="500px" append-to-body>
|
||||||
<el-form :model="supplyUploadForm" label-width="100px">
|
<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-form-item label="文件名称">
|
||||||
<el-input v-model="supplyUploadForm.fileName" disabled />
|
<el-input v-model="supplyUploadForm.fileName" disabled placeholder="上传后自动显示" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件意见" required>
|
<el-form-item label="文件意见" required>
|
||||||
<el-input v-model="supplyUploadForm.fileRemark" type="textarea" :rows="3" placeholder="请输入文件意见(必填)" />
|
<el-input v-model="supplyUploadForm.fileRemark" type="textarea" :rows="3" placeholder="请输入文件意见(必填)" />
|
||||||
@@ -195,7 +240,8 @@ import {
|
|||||||
supplyUpload as supplyUploadApi,
|
supplyUpload as supplyUploadApi,
|
||||||
submitToDept as submitToDeptApi,
|
submitToDept as submitToDeptApi,
|
||||||
submitToAudit as submitToAuditApi,
|
submitToAudit as submitToAuditApi,
|
||||||
submitToAsset as submitToAssetApi
|
submitToAsset as submitToAssetApi,
|
||||||
|
finalizeDoc as finalizeDocApi
|
||||||
} from '/@/api/purchase/docProcess'
|
} from '/@/api/purchase/docProcess'
|
||||||
import type { UploadInstance, UploadProps, UploadUserFile } from 'element-plus'
|
import type { UploadInstance, UploadProps, UploadUserFile } from 'element-plus'
|
||||||
|
|
||||||
@@ -228,9 +274,22 @@ const uploadedFileData = ref<any>(null)
|
|||||||
const returnDialogVisible = ref(false)
|
const returnDialogVisible = ref(false)
|
||||||
const returnRemark = ref('')
|
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 supplyUploadDialogVisible = ref(false)
|
||||||
const supplyUploadSubmitting = ref(false)
|
const supplyUploadSubmitting = ref(false)
|
||||||
|
const supplyFileList = ref<UploadUserFile[]>([])
|
||||||
|
const supplyUploadedFileData = ref<any>(null)
|
||||||
const supplyUploadForm = ref({
|
const supplyUploadForm = ref({
|
||||||
fileName: '',
|
fileName: '',
|
||||||
filePath: '',
|
filePath: '',
|
||||||
@@ -267,6 +326,9 @@ const canReturn = computed(() => availableActions.value.includes('return'))
|
|||||||
// 是否可完成
|
// 是否可完成
|
||||||
const canComplete = computed(() => availableActions.value.includes('complete'))
|
const canComplete = computed(() => availableActions.value.includes('complete'))
|
||||||
|
|
||||||
|
// 是否可定稿
|
||||||
|
const canFinalize = computed(() => availableActions.value.includes('finalize'))
|
||||||
|
|
||||||
// 状态快捷判断
|
// 状态快捷判断
|
||||||
const isReturned = computed(() => statusField.value === 'RETURNED')
|
const isReturned = computed(() => statusField.value === 'RETURNED')
|
||||||
const isReviewing = computed(() => ['ASSET_REVIEWING', 'DEPT_REVIEWING', 'AUDIT_REVIEWING'].includes(statusField.value))
|
const isReviewing = computed(() => ['ASSET_REVIEWING', 'DEPT_REVIEWING', 'AUDIT_REVIEWING'].includes(statusField.value))
|
||||||
@@ -535,24 +597,69 @@ const handleSupplyUpload = () => {
|
|||||||
filePath: '',
|
filePath: '',
|
||||||
fileRemark: ''
|
fileRemark: ''
|
||||||
}
|
}
|
||||||
|
supplyFileList.value = []
|
||||||
|
supplyUploadedFileData.value = null
|
||||||
supplyUploadDialogVisible.value = true
|
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 () => {
|
const submitSupplyUpload = async () => {
|
||||||
if (!supplyUploadForm.value.fileRemark) {
|
// 先上传文件
|
||||||
useMessage().warning('请填写文件意见')
|
const uploaded = await startSupplyUpload()
|
||||||
|
if (!uploaded || !supplyUploadedFileData.value) {
|
||||||
|
useMessage().error('文件上传失败')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!supplyUploadForm.value.filePath) {
|
if (!supplyUploadForm.value.fileRemark) {
|
||||||
useMessage().warning('请先上传文件')
|
useMessage().warning('请填写文件意见')
|
||||||
|
supplyUploadSubmitting.value = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
supplyUploadSubmitting.value = true
|
supplyUploadSubmitting.value = true
|
||||||
try {
|
try {
|
||||||
const res = await supplyUploadApi({
|
const res = await supplyUploadApi({
|
||||||
applyId: applyId.value,
|
applyId: applyId.value,
|
||||||
fileName: supplyUploadForm.value.fileName,
|
fileName: supplyUploadedFileData.value.fileName,
|
||||||
filePath: supplyUploadForm.value.filePath,
|
filePath: supplyUploadedFileData.value.filePath,
|
||||||
fileRemark: supplyUploadForm.value.fileRemark
|
fileRemark: supplyUploadForm.value.fileRemark
|
||||||
})
|
})
|
||||||
if (res?.code === 0 || res?.code === 200) {
|
if (res?.code === 0 || res?.code === 200) {
|
||||||
@@ -574,60 +681,52 @@ const submitSupplyUpload = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 提交至需求部门
|
// 提交至需求部门
|
||||||
const handleSubmitToDept = async () => {
|
const handleSubmitToDept = () => {
|
||||||
try {
|
remarkDialogTitle.value = '提交至需求部门'
|
||||||
await useMessageBox().confirm('确定要提交至需求部门审核吗?')
|
remarkInput.value = ''
|
||||||
} catch {
|
remarkActionType.value = 'dept'
|
||||||
return
|
remarkDialogVisible.value = true
|
||||||
}
|
|
||||||
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 handleSubmitToAudit = async () => {
|
const handleSubmitToAudit = () => {
|
||||||
try {
|
remarkDialogTitle.value = '提交至内审部门'
|
||||||
await useMessageBox().confirm('确定要提交至内审部门审核吗?')
|
remarkInput.value = ''
|
||||||
} catch {
|
remarkActionType.value = 'audit'
|
||||||
return
|
remarkDialogVisible.value = true
|
||||||
}
|
|
||||||
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 handleSubmitToAsset = async () => {
|
const handleSubmitToAsset = () => {
|
||||||
|
remarkDialogTitle.value = '提交至资产管理处'
|
||||||
|
remarkInput.value = ''
|
||||||
|
remarkActionType.value = 'asset'
|
||||||
|
remarkDialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交备注操作
|
||||||
|
const submitRemarkAction = async () => {
|
||||||
|
remarkDialogVisible.value = false
|
||||||
try {
|
try {
|
||||||
await useMessageBox().confirm('确定要提交至资产管理处吗?')
|
let res: any
|
||||||
} catch {
|
const params = { applyId: applyId.value, remark: remarkInput.value }
|
||||||
return
|
if (remarkActionType.value === 'dept') {
|
||||||
}
|
res = await submitToDeptApi(params)
|
||||||
try {
|
} else if (remarkActionType.value === 'audit') {
|
||||||
await submitToAssetApi({ applyId: applyId.value })
|
res = await submitToAuditApi(params)
|
||||||
useMessage().success('提交成功')
|
} else if (remarkActionType.value === 'asset') {
|
||||||
emit('refresh')
|
res = await submitToAssetApi(params)
|
||||||
await loadDocList()
|
}
|
||||||
auditRecordListRef.value?.refresh()
|
if (res?.code === 0 || res?.code === 200) {
|
||||||
const actionsRes = await getAvailableActions(applyId.value)
|
useMessage().success('提交成功')
|
||||||
availableActions.value = actionsRes.data || []
|
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) {
|
} catch (e: any) {
|
||||||
useMessage().error(e?.msg || '提交失败')
|
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 = () => {
|
const handleClose = () => {
|
||||||
visible.value = false
|
visible.value = false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user