✨ feat(mes): 重构报工审批逻辑,更新相关字段和接口
优化报工审批功能,修改了相关的请求和响应对象,移除不必要的字段,新增任务信息的自动填充逻辑。调整了控制器中的方法名称和权限校验,确保审批流程的清晰和一致性。pull/871/MERGE
parent
b6a6479ced
commit
6553ab1875
|
|
@ -28,7 +28,6 @@ export interface ProFeedbackVO {
|
||||||
unitMeasureId: number // 单位编号
|
unitMeasureId: number // 单位编号
|
||||||
unitMeasureName: string // 单位名称
|
unitMeasureName: string // 单位名称
|
||||||
expireDate: Date // 过期日期
|
expireDate: Date // 过期日期
|
||||||
batchCode: string // 批次号
|
|
||||||
scheduledQuantity: number // 排产数量
|
scheduledQuantity: number // 排产数量
|
||||||
feedbackQuantity: number // 本次报工数量
|
feedbackQuantity: number // 本次报工数量
|
||||||
qualifiedQuantity: number // 合格品数量
|
qualifiedQuantity: number // 合格品数量
|
||||||
|
|
@ -79,12 +78,8 @@ export const ProFeedbackApi = {
|
||||||
rejectFeedback: async (id: number) => {
|
rejectFeedback: async (id: number) => {
|
||||||
return await request.put({ url: `/mes/pro/feedback/reject?id=` + id })
|
return await request.put({ url: `/mes/pro/feedback/reject?id=` + id })
|
||||||
},
|
},
|
||||||
// 执行报工
|
// 审批报工(返回审批后的状态)
|
||||||
finishFeedback: async (id: number) => {
|
approveFeedback: async (id: number) => {
|
||||||
return await request.put({ url: `/mes/pro/feedback/finish?id=` + id })
|
return await request.put({ url: `/mes/pro/feedback/approve?id=` + id })
|
||||||
},
|
|
||||||
// 取消报工
|
|
||||||
cancelFeedback: async (id: number) => {
|
|
||||||
return await request.put({ url: `/mes/pro/feedback/cancel?id=` + id })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,24 +32,6 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</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>
|
||||||
<!-- 工单 / 任务 / 工作站 -->
|
<!-- 工单 / 任务 / 工作站 -->
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
@ -84,23 +66,13 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<!-- 工序 / 批次号 -->
|
<!-- 工序 -->
|
||||||
<!-- TODO @芋艿:是不是不用这个字段?【待定】 -->
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="工序" prop="processId">
|
<el-form-item label="工序" prop="processId">
|
||||||
<el-input v-model="processDisplay" disabled placeholder="由任务自动带入" />
|
<el-input v-model="processDisplay" disabled placeholder="由任务自动带入" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</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-row>
|
||||||
<!-- 数量区域 -->
|
<!-- 数量区域 -->
|
||||||
<el-divider content-position="left">报工数量</el-divider>
|
<el-divider content-position="left">报工数量</el-divider>
|
||||||
|
|
@ -262,21 +234,16 @@ const dialogVisible = ref(false)
|
||||||
const dialogTitle = ref('')
|
const dialogTitle = ref('')
|
||||||
const formLoading = ref(false)
|
const formLoading = ref(false)
|
||||||
const formType = ref('') // 'create' | 'update' | 'detail'
|
const formType = ref('') // 'create' | 'update' | 'detail'
|
||||||
|
|
||||||
const formData = ref<Record<string, any>>({
|
const formData = ref<Record<string, any>>({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
type: undefined,
|
type: undefined,
|
||||||
channel: undefined,
|
|
||||||
workstationId: undefined,
|
workstationId: undefined,
|
||||||
routeId: undefined,
|
routeId: undefined,
|
||||||
processId: undefined,
|
processId: undefined,
|
||||||
workOrderId: undefined,
|
workOrderId: undefined,
|
||||||
taskId: undefined,
|
taskId: undefined,
|
||||||
itemId: undefined,
|
|
||||||
unitMeasureId: undefined,
|
|
||||||
expireDate: undefined,
|
expireDate: undefined,
|
||||||
batchCode: undefined,
|
|
||||||
feedbackQuantity: 0,
|
feedbackQuantity: 0,
|
||||||
qualifiedQuantity: 0,
|
qualifiedQuantity: 0,
|
||||||
unqualifiedQuantity: 0,
|
unqualifiedQuantity: 0,
|
||||||
|
|
@ -289,7 +256,6 @@ const formData = ref<Record<string, any>>({
|
||||||
approveUserId: undefined,
|
approveUserId: undefined,
|
||||||
remark: undefined
|
remark: undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
type: [{ required: true, message: '报工类型不能为空', trigger: 'change' }],
|
type: [{ required: true, message: '报工类型不能为空', trigger: 'change' }],
|
||||||
workOrderId: [{ required: true, message: '生产工单不能为空', trigger: 'change' }],
|
workOrderId: [{ required: true, message: '生产工单不能为空', trigger: 'change' }],
|
||||||
|
|
@ -315,8 +281,6 @@ const handleWorkOrderChange = () => {
|
||||||
formData.value.taskId = undefined
|
formData.value.taskId = undefined
|
||||||
formData.value.routeId = undefined
|
formData.value.routeId = undefined
|
||||||
formData.value.processId = undefined
|
formData.value.processId = undefined
|
||||||
formData.value.itemId = undefined
|
|
||||||
formData.value.unitMeasureId = undefined
|
|
||||||
formData.value.workstationId = undefined
|
formData.value.workstationId = undefined
|
||||||
processDisplay.value = ''
|
processDisplay.value = ''
|
||||||
checkFlag.value = false
|
checkFlag.value = false
|
||||||
|
|
@ -329,8 +293,6 @@ const handleTaskChange = (task: any) => {
|
||||||
}
|
}
|
||||||
formData.value.routeId = task.routeId
|
formData.value.routeId = task.routeId
|
||||||
formData.value.processId = task.processId
|
formData.value.processId = task.processId
|
||||||
formData.value.itemId = task.itemId
|
|
||||||
formData.value.unitMeasureId = task.unitMeasureId
|
|
||||||
formData.value.workstationId = task.workstationId
|
formData.value.workstationId = task.workstationId
|
||||||
processDisplay.value = task.processCode ? task.processCode + ' - ' + task.processName : ''
|
processDisplay.value = task.processCode ? task.processCode + ' - ' + task.processName : ''
|
||||||
// TODO @芋艿:加载 checkFlag(查询 routeProcess)
|
// TODO @芋艿:加载 checkFlag(查询 routeProcess)
|
||||||
|
|
@ -339,6 +301,7 @@ const handleTaskChange = (task: any) => {
|
||||||
// ==================== 报工单编号生成 ====================
|
// ==================== 报工单编号生成 ====================
|
||||||
|
|
||||||
/** 生成报工单编号(前端生成) */
|
/** 生成报工单编号(前端生成) */
|
||||||
|
// TODO @芋艿:这块的生成逻辑;
|
||||||
const generateCode = () => {
|
const generateCode = () => {
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
const pad = (n: number) => n.toString().padStart(2, '0')
|
const pad = (n: number) => n.toString().padStart(2, '0')
|
||||||
|
|
@ -360,7 +323,13 @@ const generateCode = () => {
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
dialogTitle.value = type === 'detail' ? '报工详情' : t('action.' + type)
|
// TODO @AI:搞成 computed
|
||||||
|
dialogTitle.value =
|
||||||
|
type === 'detail'
|
||||||
|
? '查看生产报工记录'
|
||||||
|
: type === 'create'
|
||||||
|
? '添加生产报工记录'
|
||||||
|
: '修改生产报工记录'
|
||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
if (id) {
|
if (id) {
|
||||||
|
|
@ -409,16 +378,12 @@ const resetForm = () => {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
type: undefined,
|
type: undefined,
|
||||||
channel: undefined,
|
|
||||||
workstationId: undefined,
|
workstationId: undefined,
|
||||||
routeId: undefined,
|
routeId: undefined,
|
||||||
processId: undefined,
|
processId: undefined,
|
||||||
workOrderId: undefined,
|
workOrderId: undefined,
|
||||||
taskId: undefined,
|
taskId: undefined,
|
||||||
itemId: undefined,
|
|
||||||
unitMeasureId: undefined,
|
|
||||||
expireDate: undefined,
|
expireDate: undefined,
|
||||||
batchCode: undefined,
|
|
||||||
feedbackQuantity: 0,
|
feedbackQuantity: 0,
|
||||||
qualifiedQuantity: 0,
|
qualifiedQuantity: 0,
|
||||||
unqualifiedQuantity: 0,
|
unqualifiedQuantity: 0,
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
row-key="id"
|
row-key="id"
|
||||||
>
|
>
|
||||||
|
<!-- TODO @AI:这里点击后,跳转详情;然后,去掉下面的【详情】按钮 -->
|
||||||
<el-table-column label="报工单号" align="center" prop="code" width="160" />
|
<el-table-column label="报工单号" align="center" prop="code" width="160" />
|
||||||
<el-table-column label="报工类型" align="center" prop="type" width="100">
|
<el-table-column label="报工类型" align="center" prop="type" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
@ -157,6 +158,7 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<!-- 审批中状态:驳回、执行、取消 -->
|
<!-- 审批中状态:驳回、执行、取消 -->
|
||||||
|
<!-- TODO @AI:把【审批】【驳回】融合,点击后,弹出一个界面,然后里面在通过,不通过; -->
|
||||||
<template v-if="scope.row.status === MesProFeedbackStatusEnum.APPROVING">
|
<template v-if="scope.row.status === MesProFeedbackStatusEnum.APPROVING">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
|
|
@ -169,18 +171,11 @@
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="success"
|
type="success"
|
||||||
@click="handleFinish(scope.row.id)"
|
@click="handleApprove(scope.row.id)"
|
||||||
v-hasPermi="['mes:pro-feedback:finish']"
|
v-hasPermi="['mes:pro-feedback:approve']"
|
||||||
>
|
>
|
||||||
执行
|
审批
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="danger"
|
|
||||||
@click="handleCancel(scope.row.id)"
|
|
||||||
v-hasPermi="['mes:pro-feedback:update']"
|
|
||||||
>取消</el-button
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
<!-- 所有状态:详情 -->
|
<!-- 所有状态:详情 -->
|
||||||
<el-button
|
<el-button
|
||||||
|
|
@ -293,20 +288,15 @@ const handleReject = async (id: number) => {
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleFinish = async (id: number) => {
|
const handleApprove = async (id: number) => {
|
||||||
try {
|
try {
|
||||||
await message.confirm('确认要执行该报工单吗?')
|
await message.confirm('确认要审批该报工单吗?')
|
||||||
await ProFeedbackApi.finishFeedback(id)
|
const status = await ProFeedbackApi.approveFeedback(id)
|
||||||
message.success('报工单已执行')
|
if (status === MesProFeedbackStatusEnum.UNCHECK) {
|
||||||
await getList()
|
message.success('报工成功,请等待质量检验完成!')
|
||||||
} catch {}
|
} else {
|
||||||
}
|
message.success('报工单已审批完成')
|
||||||
|
}
|
||||||
const handleCancel = async (id: number) => {
|
|
||||||
try {
|
|
||||||
await message.confirm('确认要取消该报工单吗?')
|
|
||||||
await ProFeedbackApi.cancelFeedback(id)
|
|
||||||
message.success('报工单已取消')
|
|
||||||
await getList()
|
await getList()
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue