Ben Lin
2024-06-08 cca7adfe0b76ed7c2fbdbc9978533de147695184
src/views/tigerprojects/mes/prod/biz_mes_wo/index.vue
@@ -15,7 +15,7 @@
          @click="handleSelectItem"
          preIcon="search|svg"
        />
        <ItemModal @register="registerItemAdd" @success="handleItemSuccess" />
        <NormalModal @register="registerItemAdd" @success="handleItemSuccess" />
      </template>
      <template #action="{ record }">
        <TableAction
@@ -36,45 +36,83 @@
              },
            },
            {
              icon: 'config|svg',
              tooltip: '配置工艺',
              onClick: handleConfig.bind(null, record),
            },
            {
              icon: 'release|svg',
              tooltip: '下发',
              onClick: handleBao.bind(null, record),
              onClick: handleRelease.bind(null, record),
            },
            {
              icon: 'unrelease|svg',
              tooltip: '取消下发',
              onClick: handleBao.bind(null, record),
              onClick: handleUnRelease.bind(null, record),
            },
            {
              icon: 'suspend-blue|svg',
              tooltip: '暂停',
              onClick: handleBao.bind(null, record),
              onClick: handlePause.bind(null, record),
            },
          ]"
        />
      </template>
    </BasicTable>
    <Loading :loading="compState.loading" :tip="compState.tip" />
    <!-- <WmsItemDrawer @register="registerDrawer" @success="handleSuccess" /> -->
    <WoDrawer @register="registerDrawer" @success="handleSuccess" />
    <WoModal @register="registerWo" @success="handleSuccess" />
    <WoModal @register="registerWo" @success="handleSuccess" :title="title" :mtitle="mtitle" />
    <CustModal
      @register="registerCust"
      @success="custSuccess"
      :type="cType"
      :detailSlots="dtlSlots"
    >
      <template #[item.name] v-for="item in dtlSlots" :key="item.name">
        <BasicForm @register="useFormData[item.name][0]">
          <template #[sitem]="{ field }" v-for="sitem in item.slots" :key="sitem">
            <a-button
              class="mt-1 ml-1"
              size="small"
              @click="handleCustClick(field)"
              :preIcon="item.preIcons[sitem]"
            />
          </template>
        </BasicForm>
        <NormalModal
          @register="registerEntity"
          @success="(d, u) => handleEntSuccess(d, u, item.name)"
        />
      </template>
    </CustModal>
    <RouteViewModal @register="registerRv" @success="RvItemSuccess" />
  </div>
</template>
<script lang="ts" setup>
  import { reactive, unref, h } from 'vue';
  import { reactive, unref, h, onMounted, ref, nextTick } from 'vue';
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { BasicForm, FormSchema, FormActionType, useForm } from '/@/components/Form/index';
  import WoDrawer from './WoDrawer.vue';
  import WoModal from './WoModal.vue';
  import ItemModal from '/@/views/components/ItemModal.vue';
  import NormalModal from '/@/views/components/NormalModal.vue';
  import RouteViewModal from '/@/views/components/RouteViewModal.vue';
  import CustModal from '/@/views/components/CustModal.vue';
  import { useDrawer } from '/@/components/Drawer';
  import { columns, searchFormSchema } from './biz_mes_wo.data';
  import { DeleteMesWo, getWoListByPage } from '/@/api/tigerapi/mes/wo';
  import { DeleteMesWo } from '/@/api/tigerapi/mes/wo';
  import { Loading } from '/@/components/Loading';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { useModal } from '/@/components/Modal';
  import { getListByPage } from '/@/api/tigerapi/system';
  import { GetSelectSuccess, OpenSelectItem, getFormSchema } from '/@/views/components/data';
  const { t } = useI18n();
  const cType = ref('');
  const title = ref('工单导入');
  const mtitle = ref('工单列表');
  const dtlSlots = ref([] as any[]);
  const selectVals = ref({});
  const { createMessage } = useMessage();
  const [registerDrawer, { openDrawer }] = useDrawer();
  const compState = reactive({
@@ -82,11 +120,14 @@
    loading: false,
    tip: '加载中...',
  });
  const [registerEntity, { openModal: openEntModal }] = useModal();
  const [registerRv, { openModal: openRvModal }] = useModal();
  const [registerWo, { openModal: openWoModal }] = useModal();
  const [registerItemAdd, { openModal: openItemModal }] = useModal();
  const [registerCust, { openModal: openCustModal, closeModal }] = useModal();
  const [registerTable, { getForm, reload }] = useTable({
    title: '工单信息',
    api: getWoListByPage,
    api: getListByPage,
    columns,
    formConfig: {
      labelWidth: 120,
@@ -105,6 +146,46 @@
    bordered: true,
    showIndexColumn: false,
  });
  const formSchema = ref([] as FormSchema[]);
  const woSchema = ref([] as FormSchema[]);
  const prodSchema = ref([] as FormSchema[]);
  const xxSchema = ref([] as FormSchema[]);
  const useFormData = ref({
    forminfo: useForm({
      labelWidth: 120,
      schemas: formSchema,
      actionColOptions: {
        span: 24,
      },
      showActionButtonGroup: false,
    }),
    woinfo: useForm({
      labelWidth: 120,
      schemas: woSchema,
      actionColOptions: {
        span: 24,
      },
      showActionButtonGroup: false,
    }),
    prodinfo: useForm({
      labelWidth: 120,
      schemas: prodSchema,
      actionColOptions: {
        span: 24,
      },
      showActionButtonGroup: false,
    }),
    xxinfo: useForm({
      labelWidth: 120,
      schemas: xxSchema,
      actionColOptions: {
        span: 24,
      },
      showActionButtonGroup: false,
    }),
  });
  onMounted(() => {});
  //新增
  function addWo() {
@@ -129,20 +210,60 @@
      info: 'Info',
    });
  }
  //报废
  function handleBao(record: any) {
    // const apiAction = SaveTool(record, unref(true), true);
    // apiAction.then((action) => {
    //   if (action.IsSuccessed) {
    //     createMessage.success(t('已报废'));
    //     reload();
    //   } else {
    //     createMessage.success(t('报废操作失败'));
    //   }
    // });
  //配置工艺
  function handleConfig(record: Recordable) {
    cType.value = 'BIZ_MES_WO_Config';
    dtlSlots.value = [
      { name: 'woinfo', slots: [], preIcons: {}, title: '工单信息' },
      { name: 'prodinfo', slots: [], preIcons: {}, title: '产品信息' },
      { name: 'xxinfo', slots: ['add'], preIcons: { add: 'search|svg' }, title: 'XXX' },
    ];
    woSchema.value = getFormSchema('woinfo');
    prodSchema.value = getFormSchema('prodinfo');
    xxSchema.value = getFormSchema('xxinfo');
    openCustModal(true, {
      isUpdate: true,
      ctype: cType,
      title: '工艺配置',
      width: '1000px',
      formEl: useFormData.value, //如果是多个表单,增加多个插槽
      formElName: ['woinfo', 'prodinfo', 'xxinfo'],
      RowKey: '',
      ...record,
    });
  }
  //下发
  function handleRelease(record: Recordable) {
    cType.value = 'BIZ_MES_WO';
    dtlSlots.value = [
      {
        name: 'forminfo',
        slots: ['add', 'set'],
        preIcons: { add: 'search|svg', set: 'config|svg' }, //如果是多个表单,增加多个插槽。slots是弹出框按钮的插槽,preIcons是插槽对应的按钮图标
        title: '下发配置',
      },
    ];
    formSchema.value = getFormSchema(cType.value);
    openCustModal(true, {
      isUpdate: true, //是否更新操作
      ctype: cType, //是哪个页面
      title: '工单下发', //标题
      width: '900px', //弹出框宽度
      formEl: useFormData.value,
      formElName: ['forminfo'],
      RowKeys: { add: 'ROUTE_CODE', set: 'ROUTE_CODE' }, //插槽的弹出框选择的code
      ...record,
    });
  }
  function custSuccess(d) {
    reload();
  }
  //取消下发
  function handleUnRelease(record: Recordable) {}
  //暂停
  function handlePause(record: Recordable) {}
  //删除
  function handleDelete(record: any) {
  function handleDelete(record: Recordable) {
    const apiAction = DeleteMesWo(record.ID);
    apiAction.then((action) => {
      if (action.IsSuccessed) {
@@ -156,14 +277,64 @@
  //点击打开物料列表框
  function handleSelectItem() {
    openItemModal(true, {
      data: 'content',
      info: 'Info',
      title: '物料列表',
      schemas: [
        {
          field: 'ITEM_CODE',
          component: 'Input',
          label: '物料编码',
          colProps: {
            span: 12,
          },
        },
      ],
      ItemColumns: [
        {
          title: t('物料编码'),
          dataIndex: 'ITEM_CODE',
          resizable: true,
          sorter: true,
          width: 200,
        },
        {
          title: t('物料名称'),
          dataIndex: 'ITEM_NAME',
          resizable: true,
          sorter: true,
          width: 180,
        },
      ],
      tableName: 'BAS_ITEM',
      rowKey: 'ITEM_CODE',
    });
  }
  function handleItemSuccess(d, u) {
    getForm().setFieldsValue({
      ITEM_CODE: d.values.values,
      ITEM_CODE: d.values['val'],
    });
  }
  /* 弹出选择框选择成功后事件 */
  function handleEntSuccess(d, u, item) {
    var values = GetSelectSuccess(d, u, cType.value);
    selectVals.value = values; //保存弹出框选择的结果
    let _val = {};
    _val[d.returnFieldName] = values[d.returnFieldName];
    if (item == 'forminfo') {
      useFormData.value['forminfo'][1].setFieldsValue(_val);
    }
    if (item == 'prodinfo') {
      useFormData.value['prodinfo'][1].setFieldsValue(_val);
    }
    if (item == 'woinfo') {
      useFormData.value['woinfo'][1].setFieldsValue(_val);
    }
  }
  /* 弹出选择框 */
  function handleCustClick(item) {
    // openRvModal(true, {});
    OpenSelectItem(openEntModal, cType.value, item, [openRvModal], selectVals.value['ID']);
  }
  function RvItemSuccess(d, u) {}
</script>