﻿import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MesWmBatchApi } from '#/api/mes/wm/batch';
import type { DescriptionItemSchema } from '#/components/description';

import { markRaw } from 'vue';

import { DICT_TYPE } from '@vben/constants';

import { MdClientSelect } from '#/views/mes/md/client/components';
import { MdItemSelect } from '#/views/mes/md/item/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';

/** 列表的搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {
  return [
    {
      fieldName: 'code',
      label: '批次号',
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '请输入批次号',
      },
    },
    {
      fieldName: 'itemId',
      label: '产品物料',
      component: markRaw(MdItemSelect),
      componentProps: {
        placeholder: '请选择产品物料',
      },
    },
    {
      fieldName: 'vendorId',
      label: '供应商',
      component: markRaw(MdVendorSelect),
      componentProps: {
        placeholder: '请选择供应商',
      },
    },
    {
      fieldName: 'clientId',
      label: '客户',
      component: markRaw(MdClientSelect),
      componentProps: {
        placeholder: '请选择客户',
      },
    },
    {
      fieldName: 'salesOrderCode',
      label: '销售订单编号',
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '请输入销售订单编号',
      },
    },
    {
      fieldName: 'purchaseOrderCode',
      label: '采购订单编号',
      component: 'Input',
      componentProps: {
        allowClear: true,
        placeholder: '请输入采购订单编号',
      },
    },
  ];
}

/** 列表的字段 */
export function useGridColumns(): VxeTableGridOptions<MesWmBatchApi.Batch>['columns'] {
  return [
    {
      field: 'code',
      title: '批次编号',
      minWidth: 160,
    },
    {
      field: 'itemCode',
      title: '产品物料编码',
      minWidth: 140,
    },
    {
      field: 'itemName',
      title: '产品物料名称',
      minWidth: 160,
    },
    {
      field: 'itemSpecification',
      title: '规格型号',
      minWidth: 140,
    },
    {
      field: 'unitName',
      title: '单位',
      width: 80,
    },
    {
      field: 'vendorCode',
      title: '供应商编码',
      minWidth: 140,
    },
    {
      field: 'vendorName',
      title: '供应商名称',
      minWidth: 160,
    },
    {
      field: 'clientCode',
      title: '客户编码',
      minWidth: 140,
    },
    {
      field: 'clientName',
      title: '客户名称',
      minWidth: 160,
    },
    {
      field: 'salesOrderCode',
      title: '销售订单编号',
      minWidth: 160,
    },
    {
      field: 'purchaseOrderCode',
      title: '采购订单编号',
      minWidth: 160,
    },
    {
      title: '操作',
      width: 110,
      fixed: 'right',
      slots: { default: 'actions' },
    },
  ];
}

/** 追溯明细列表的字段 */
export function useTraceGridColumns(): VxeTableGridOptions<MesWmBatchApi.Batch>['columns'] {
  return [
    {
      field: 'workOrderCode',
      title: '生产订单号',
      width: 160,
    },
    {
      field: 'code',
      title: '批次编号',
      minWidth: 160,
    },
    {
      field: 'itemCode',
      title: '产品物料编码',
      minWidth: 140,
    },
    {
      field: 'itemName',
      title: '产品物料名称',
      minWidth: 160,
    },
    {
      field: 'itemSpecification',
      title: '规格型号',
      minWidth: 140,
    },
    {
      field: 'unitName',
      title: '单位',
      width: 80,
    },
  ];
}

/** 批次追溯详情的描述字段 */
export function useDetailSchema(): DescriptionItemSchema[] {
  return [
    {
      field: 'code',
      label: '批次编号',
    },
    {
      field: 'itemCode',
      label: '物资编码',
    },
    {
      field: 'itemName',
      label: '物资名称',
    },
    {
      field: 'itemSpecification',
      label: '规格型号',
      span: 3,
    },
    {
      field: 'purchaseOrderCode',
      label: '采购订单编号',
    },
    {
      field: 'vendorCode',
      label: '供应商编码',
    },
    {
      field: 'vendorName',
      label: '供应商名称',
    },
    {
      field: 'salesOrderCode',
      label: '销售订单编号',
    },
    {
      field: 'clientCode',
      label: '客户编码',
    },
    {
      field: 'clientName',
      label: '客户名称',
    },
    {
      field: 'lotNumber',
      label: '生产批号',
    },
    {
      field: 'workOrderCode',
      label: '生产订单',
    },
    {
      field: 'workstationCode',
      label: '工作站编码',
    },
  ];
}

/** 采购来源列表的字段 */
export function usePurchaseSourceColumns(): VxeTableGridOptions<MesWmBatchApi.PurchaseSource>['columns'] {
  return [
    {
      field: 'receiptCode',
      title: '采购入库单号',
      minWidth: 160,
    },
    {
      field: 'receiptDate',
      title: '入库日期',
      minWidth: 160,
      formatter: 'formatDateTime',
    },
    {
      field: 'purchaseOrderCode',
      title: '采购订单编号',
      minWidth: 160,
    },
    {
      field: 'vendorCode',
      title: '供应商编码',
      minWidth: 140,
    },
    {
      field: 'vendorName',
      title: '供应商名称',
      minWidth: 140,
    },
    {
      field: 'itemCode',
      title: '物料编码',
      minWidth: 140,
    },
    {
      field: 'itemName',
      title: '物料名称',
      minWidth: 160,
    },
    {
      field: 'iqcCode',
      title: 'IQC 检验单号',
      minWidth: 160,
    },
    {
      field: 'checkResult',
      title: 'IQC 检验结论',
      width: 110,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },
      },
    },
    {
      field: 'receivedQuantity',
      title: '入库数量',
      width: 100,
    },
  ];
}

/** 销售去向列表的字段 */
export function useSalesTargetColumns(): VxeTableGridOptions<MesWmBatchApi.SalesTarget>['columns'] {
  return [
    {
      field: 'salesCode',
      title: '销售出库单号',
      minWidth: 160,
    },
    {
      field: 'salesDate',
      title: '出库日期',
      minWidth: 160,
      formatter: 'formatDateTime',
    },
    {
      field: 'salesOrderCode',
      title: '销售订单编号',
      minWidth: 160,
    },
    {
      field: 'clientName',
      title: '客户名称',
      minWidth: 140,
    },
    {
      field: 'itemCode',
      title: '物料编码',
      minWidth: 140,
    },
    {
      field: 'itemName',
      title: '物料名称',
      minWidth: 160,
    },
    {
      field: 'oqcCode',
      title: 'OQC 检验单号',
      minWidth: 160,
    },
    {
      field: 'checkResult',
      title: 'OQC 检验结论',
      width: 110,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },
      },
    },
    {
      field: 'quantity',
      title: '出库数量',
      width: 100,
    },
    {
      field: 'qualityStatus',
      title: '质量状态',
      width: 100,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },
      },
    },
  ];
}

/** 工序流转列表的字段 */
export function useProcessTraceColumns(): VxeTableGridOptions<MesWmBatchApi.ProcessTrace>['columns'] {
  return [
    {
      field: 'eventType',
      title: '事件类型',
      width: 90,
      slots: { default: 'eventType' },
    },
    {
      field: 'workOrderCode',
      title: '生产工单号',
      minWidth: 160,
    },
    {
      field: 'processCode',
      title: '工序编码',
      minWidth: 120,
    },
    {
      field: 'processName',
      title: '工序名称',
      minWidth: 140,
    },
    {
      field: 'quantity',
      title: '数量',
      width: 100,
    },
    {
      field: 'qualityStatus',
      title: '质量状态',
      width: 100,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },
      },
    },
    {
      field: 'eventTime',
      title: '事件时间',
      minWidth: 160,
      formatter: 'formatDateTime',
    },
  ];
}
