| | |
| | | import dayjs from 'dayjs'; |
| | | |
| | | import { quickCreateFeedback } from '#/api/mes/pro/feedback'; |
| | | import { getProcess } from '#/api/mes/pro/process'; |
| | | import { getTask } from '#/api/mes/pro/task'; |
| | | import { |
| | | loadParamDetails, |
| | | paramDetails, |
| | |
| | | selectedTask.value = undefined; |
| | | formData.value = { |
| | | feedbackQuantity: undefined, |
| | | workHours: undefined, |
| | | feedbackTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), |
| | | remark: '', |
| | | }; |
| | | // 预设任务时加载其工艺参数;否则等待选择任务后再加载 |
| | | // 预设任务时加载其工艺参数与工序计费方式;否则等待选择任务后再加载 |
| | | if (props.taskId) { |
| | | loadParamDetails(props.taskId); |
| | | loadProcessByTask(props.taskId); |
| | | } else { |
| | | paramDetails.value = []; |
| | | billingType.value = undefined; |
| | | wageRate.value = 0; |
| | | } |
| | | } |
| | | }, |
| | |
| | | const selectedTask = ref<MesProTaskApi.Task>(); |
| | | const formData = ref({ |
| | | feedbackQuantity: undefined as number | undefined, |
| | | workHours: undefined as number | undefined, |
| | | feedbackTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), |
| | | remark: '', |
| | | }); |
| | | const submitting = ref(false); |
| | | /** 工序计费类型:1-计时(需录工时) 2-计件 */ |
| | | const billingType = ref<number>(); |
| | | const wageRate = ref(0); |
| | | |
| | | /** 根据任务带出工序的计费方式:计时工序需要用户补录工时 */ |
| | | async function loadProcessByTask(taskId?: number) { |
| | | billingType.value = undefined; |
| | | wageRate.value = 0; |
| | | if (!taskId) { |
| | | return; |
| | | } |
| | | try { |
| | | const task = await getTask(taskId); |
| | | if (!task?.processId) { |
| | | return; |
| | | } |
| | | const process = await getProcess(task.processId); |
| | | billingType.value = process?.billingType ?? 2; |
| | | wageRate.value = process?.wageRate ?? 0; |
| | | } catch { |
| | | // 工序信息加载失败不阻断报工,保存时后端会再次校验并给出明确提示 |
| | | } |
| | | } |
| | | |
| | | const hasPredefinedTask = computed(() => !!props.taskId); |
| | | |
| | |
| | | selectedTask.value = task; |
| | | selectedTaskId.value = task?.id; |
| | | loadParamDetails(task?.id); |
| | | loadProcessByTask(task?.id); |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | |
| | | message.warning('请输入报工数量'); |
| | | return; |
| | | } |
| | | if (billingType.value === 1 && wageRate.value > 0 && !formData.value.workHours) { |
| | | message.warning('当前工序按计时计薪,请输入本次报工工时(小时)'); |
| | | return; |
| | | } |
| | | submitting.value = true; |
| | | try { |
| | | await quickCreateFeedback({ |
| | | taskId, |
| | | feedbackQuantity: formData.value.feedbackQuantity, |
| | | workHours: formData.value.workHours, |
| | | feedbackTime: formData.value.feedbackTime || undefined, |
| | | paramValues: paramDetails.value.map((detail) => ({ |
| | | detailId: detail.id, |
| | |
| | | class="!w-full" |
| | | /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | v-if="billingType === 1" |
| | | label="报工工时(h)" |
| | | :required="wageRate > 0" |
| | | > |
| | | <a-input-number |
| | | v-model:value="formData.workHours" |
| | | :min="0.01" |
| | | :precision="2" |
| | | placeholder="请输入本次报工工时(小时)" |
| | | class="!w-full" |
| | | /> |
| | | </a-form-item> |
| | | <a-form-item label="报工时间"> |
| | | <a-date-picker |
| | | v-model:value="formData.feedbackTime" |