feat(mes): 重构报工审批逻辑,更新相关字段和接口

优化报工审批功能,修改了相关的请求和响应对象,移除不必要的字段,新增任务信息的自动填充逻辑。调整了控制器中的方法名称和权限校验,确保审批流程的清晰和一致性。
pull/871/MERGE
YunaiV 2026-03-18 21:49:34 +08:00
parent b6a6479ced
commit 6553ab1875
3 changed files with 25 additions and 75 deletions

View File

@ -28,7 +28,6 @@ export interface ProFeedbackVO {
unitMeasureId: number // 单位编号
unitMeasureName: string // 单位名称
expireDate: Date // 过期日期
batchCode: string // 批次号
scheduledQuantity: number // 排产数量
feedbackQuantity: number // 本次报工数量
qualifiedQuantity: number // 合格品数量
@ -79,12 +78,8 @@ export const ProFeedbackApi = {
rejectFeedback: async (id: number) => {
return await request.put({ url: `/mes/pro/feedback/reject?id=` + id })
},
// 执行报工
finishFeedback: async (id: number) => {
return await request.put({ url: `/mes/pro/feedback/finish?id=` + id })
},
// 取消报工
cancelFeedback: async (id: number) => {
return await request.put({ url: `/mes/pro/feedback/cancel?id=` + id })
// 审批报工(返回审批后的状态)
approveFeedback: async (id: number) => {
return await request.put({ url: `/mes/pro/feedback/approve?id=` + id })
}
}

View File

@ -32,24 +32,6 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<!-- TODO @芋艿报告途径是不是非必须 -->
<el-form-item label="报工途径" prop="channel">
<el-select
v-model="formData.channel"
placeholder="请选择报工途径"
:disabled="isDetail"
class="!w-1/1"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_PRO_FEEDBACK_CHANNEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 工单 / 任务 / 工作站 -->
<el-row :gutter="20">
@ -84,23 +66,13 @@
</el-form-item>
</el-col>
</el-row>
<!-- 工序 / 批次号 -->
<!-- TODO @芋艿是不是不用这个字段待定 -->
<!-- 工序 -->
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="工序" prop="processId">
<el-input v-model="processDisplay" disabled placeholder="由任务自动带入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="批次号" prop="batchCode">
<el-input
v-model="formData.batchCode"
placeholder="请输入批次号"
:disabled="isDetail"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 数量区域 -->
<el-divider content-position="left">报工数量</el-divider>
@ -262,21 +234,16 @@ const dialogVisible = ref(false)
const dialogTitle = ref('')
const formLoading = ref(false)
const formType = ref('') // 'create' | 'update' | 'detail'
const formData = ref<Record<string, any>>({
id: undefined,
code: undefined,
type: undefined,
channel: undefined,
workstationId: undefined,
routeId: undefined,
processId: undefined,
workOrderId: undefined,
taskId: undefined,
itemId: undefined,
unitMeasureId: undefined,
expireDate: undefined,
batchCode: undefined,
feedbackQuantity: 0,
qualifiedQuantity: 0,
unqualifiedQuantity: 0,
@ -289,7 +256,6 @@ const formData = ref<Record<string, any>>({
approveUserId: undefined,
remark: undefined
})
const formRules = reactive({
type: [{ required: true, message: '报工类型不能为空', trigger: 'change' }],
workOrderId: [{ required: true, message: '生产工单不能为空', trigger: 'change' }],
@ -315,8 +281,6 @@ const handleWorkOrderChange = () => {
formData.value.taskId = undefined
formData.value.routeId = undefined
formData.value.processId = undefined
formData.value.itemId = undefined
formData.value.unitMeasureId = undefined
formData.value.workstationId = undefined
processDisplay.value = ''
checkFlag.value = false
@ -329,8 +293,6 @@ const handleTaskChange = (task: any) => {
}
formData.value.routeId = task.routeId
formData.value.processId = task.processId
formData.value.itemId = task.itemId
formData.value.unitMeasureId = task.unitMeasureId
formData.value.workstationId = task.workstationId
processDisplay.value = task.processCode ? task.processCode + ' - ' + task.processName : ''
// TODO @ checkFlag routeProcess
@ -339,6 +301,7 @@ const handleTaskChange = (task: any) => {
// ==================== ====================
/** 生成报工单编号(前端生成) */
// TODO @
const generateCode = () => {
const now = new Date()
const pad = (n: number) => n.toString().padStart(2, '0')
@ -360,7 +323,13 @@ const generateCode = () => {
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = type === 'detail' ? '报工详情' : t('action.' + type)
// TODO @AI computed
dialogTitle.value =
type === 'detail'
? '查看生产报工记录'
: type === 'create'
? '添加生产报工记录'
: '修改生产报工记录'
formType.value = type
resetForm()
if (id) {
@ -409,16 +378,12 @@ const resetForm = () => {
id: undefined,
code: undefined,
type: undefined,
channel: undefined,
workstationId: undefined,
routeId: undefined,
processId: undefined,
workOrderId: undefined,
taskId: undefined,
itemId: undefined,
unitMeasureId: undefined,
expireDate: undefined,
batchCode: undefined,
feedbackQuantity: 0,
qualifiedQuantity: 0,
unqualifiedQuantity: 0,

View File

@ -99,6 +99,7 @@
:show-overflow-tooltip="true"
row-key="id"
>
<!-- TODO @AI这里点击后跳转详情然后去掉下面的详情按钮 -->
<el-table-column label="报工单号" align="center" prop="code" width="160" />
<el-table-column label="报工类型" align="center" prop="type" width="100">
<template #default="scope">
@ -157,6 +158,7 @@
</el-button>
</template>
<!-- 审批中状态驳回执行取消 -->
<!-- TODO @AI审批驳回融合点击后弹出一个界面然后里面在通过不通过 -->
<template v-if="scope.row.status === MesProFeedbackStatusEnum.APPROVING">
<el-button
link
@ -169,18 +171,11 @@
<el-button
link
type="success"
@click="handleFinish(scope.row.id)"
v-hasPermi="['mes:pro-feedback:finish']"
@click="handleApprove(scope.row.id)"
v-hasPermi="['mes:pro-feedback:approve']"
>
执行
审批
</el-button>
<el-button
link
type="danger"
@click="handleCancel(scope.row.id)"
v-hasPermi="['mes:pro-feedback:update']"
>取消</el-button
>
</template>
<!-- 所有状态详情 -->
<el-button
@ -293,20 +288,15 @@ const handleReject = async (id: number) => {
} catch {}
}
const handleFinish = async (id: number) => {
const handleApprove = async (id: number) => {
try {
await message.confirm('确认要执行该报工单吗?')
await ProFeedbackApi.finishFeedback(id)
message.success('报工单已执行')
await getList()
} catch {}
}
const handleCancel = async (id: number) => {
try {
await message.confirm('确认要取消该报工单吗?')
await ProFeedbackApi.cancelFeedback(id)
message.success('报工单已取消')
await message.confirm('确认要审批该报工单吗?')
const status = await ProFeedbackApi.approveFeedback(id)
if (status === MesProFeedbackStatusEnum.UNCHECK) {
message.success('报工成功,请等待质量检验完成!')
} else {
message.success('报工单已审批完成')
}
await getList()
} catch {}
}