✨ feat(mes): 重构报工审批逻辑,更新相关字段和接口
优化报工审批功能,修改了相关的请求和响应对象,移除不必要的字段,新增任务信息的自动填充逻辑。调整了控制器中的方法名称和权限校验,确保审批流程的清晰和一致性。pull/871/MERGE
parent
b6a6479ced
commit
6553ab1875
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue