gaoluyang
7 天以前 173855b299e89930b5ea2ff9a9295fde9d0f55b5
src/views/mes/pro/workorder-center/modules/quick-feedback.vue
@@ -10,6 +10,8 @@
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,
@@ -40,14 +42,18 @@
      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;
      }
    }
  },
@@ -58,10 +64,34 @@
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);
@@ -80,6 +110,7 @@
  selectedTask.value = task;
  selectedTaskId.value = task?.id;
  loadParamDetails(task?.id);
  loadProcessByTask(task?.id);
}
async function handleSubmit() {
@@ -92,11 +123,16 @@
    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,
@@ -140,6 +176,19 @@
          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"