4 小时以前 0c221f3e96cc6aae6b6bcf67e984cb446dcfac87
src/views/mes/pro/task/modules/schedule-form.vue
@@ -1,6 +1,6 @@
<script lang="ts" setup>
import type { MesProRouteProcessApi } from '#/api/mes/pro/route/process';
import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
import type { MesProWorkOrderProcessApi } from '#/api/mes/pro/workorder/process';
import { computed, ref } from 'vue';
@@ -11,6 +11,7 @@
import { useVbenForm } from '#/adapter/form';
import { getRouteProcessListByProduct } from '#/api/mes/pro/route/process';
import { finishWorkOrder, getWorkOrder } from '#/api/mes/pro/workorder';
import { getWorkOrderProcessListByWorkOrderId } from '#/api/mes/pro/workorder/process';
import { useScheduleFormSchema } from '../data';
import TaskList from './task-list.vue';
@@ -18,7 +19,8 @@
const emit = defineEmits(['success']);
const formType = ref<'detail' | 'schedule'>('schedule');
const workOrder = ref<MesProWorkOrderApi.WorkOrder>(); // 当前订单详情
const routeProcessList = ref<MesProRouteProcessApi.RouteProcess[]>([]); // 工艺路线工序列表
/** 排产工序列表 */
const routeProcessList = ref<MesProWorkOrderProcessApi.WorkOrderProcess[]>([]);
const activeProcessStep = ref(0); // 当前工序步骤索引
const currentRouteId = ref(0); // 当前工艺路线编号
@@ -41,17 +43,23 @@
  wrapperClass: 'grid-cols-3',
});
/** 加载工艺路线工序列表 */
async function loadRouteProcesses(productId: number) {
  const processes = await getRouteProcessListByProduct(productId);
  if (!processes || processes.length === 0) {
    message.warning('当前产品未配置工艺路线,请先在工艺路线中维护');
/** 加载工单工序列表(仅使用工单工序,不回退到工艺路线模板) */
async function loadRouteProcesses(workOrderId: number, productId: number) {
  const woProcesses = await getWorkOrderProcessListByWorkOrderId(workOrderId);
  if (!woProcesses || woProcesses.length === 0) {
    message.warning('当前订单未配置工序,请先在工单中维护工序信息');
    return;
  }
  currentRouteId.value = processes[0]!.routeId ?? 0;
  routeProcessList.value = [...processes].toSorted(
  routeProcessList.value = [...woProcesses].toSorted(
    (a, b) => (a.sort ?? 0) - (b.sort ?? 0),
  );
  // 确定工艺路线ID:工单路线 → 产品路线
  if (workOrder.value?.routeId) {
    currentRouteId.value = workOrder.value.routeId;
  } else {
    const processes = await getRouteProcessListByProduct(productId);
    currentRouteId.value = processes?.[0]?.routeId ?? 0;
  }
}
/** 完成订单 */
@@ -94,7 +102,10 @@
      // 设置到 values
      await formApi.setValues(workOrder.value);
      if (workOrder.value.productId) {
        await loadRouteProcesses(workOrder.value.productId);
        await loadRouteProcesses(
          workOrder.value.id!,
          workOrder.value.productId,
        );
      }
    } finally {
      modalApi.unlock();
@@ -138,13 +149,18 @@
    </template>
    <template #prepend-footer>
      <div class="flex flex-auto items-center gap-2">
        <Popconfirm
          v-if="formType === 'schedule'"
          title="确认要完成该订单吗?完成后订单下所有任务将标记为已完成。"
          @confirm="handleFinish"
        >
          <Button type="primary">完成</Button>
        </Popconfirm>
        <template v-if="formType === 'schedule'">
          <Popconfirm
            v-if="routeProcessList.length > 0"
            title="确认要完成该订单吗?完成后订单下所有任务将标记为已完成。"
            @confirm="handleFinish"
          >
            <Button type="primary">完成</Button>
          </Popconfirm>
          <span v-else class="text-gray-400 text-sm">
            当前订单未配置工序,请先在工单中维护工序信息后再完成
          </span>
        </template>
      </div>
    </template>
  </Modal>