Ben Lin
2024-11-12 a42c6f16bbb177dfcc754d53d925afddead38eba
src/views/tigerprojects/system/lowcode/high/dtl.vue
@@ -8,12 +8,12 @@
    >
      <BasicTable @register="useTables[item.name]">
        <template #toolbar>
          <a-button type="primary" @click="handleCreate(index, item.name)" preIcon="add_02|svg">
          <a-button type="primary" @click="handleCreate(index, item)" preIcon="add_02|svg">
            新增
          </a-button>
        </template>
        <template #action="{ record }">
          <TableAction :actions="createActions(record, index, item.name)" />
          <TableAction :actions="createActions(record, index, item)" />
        </template>
        <template #[item]="{ field }" v-for="item in colSlots" :key="item">
          <a-button
@@ -42,13 +42,14 @@
  import { useForm } from '/@/components/Form/index';
  import GeneralModal from '/@/views/components/GeneralModal.vue';
  import normalDrawer from '../normalDrawer.vue';
  import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
  import { isFunction, isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
  import { useModal } from '/@/components/Modal';
  import { useGo } from '/@/hooks/web/usePage';
  import { DeleteEntity, getEntity } from '/@/api/tigerapi/system';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { Card } from 'ant-design-vue';
  import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
  import { useMessage } from '/@/hooks/web/useMessage';
  const { t } = useI18n();
  const ACard = Card;
@@ -67,6 +68,7 @@
  const keyFieldValues = inject('keyFieldValues') as Ref<Recordable[]>;
  const go = useGo();
  const { createErrorModal } = useMessage();
  const [registerItemAdd, { openModal: openItemModal }] = useModal();
  const cType = ref('');
  const dtlSlots = ref([] as any[]);
@@ -81,6 +83,7 @@
      GetTitle(type: string | undefined) {},
      GetUseTables(data: Ref<Recordable[]>, ...args) {},
      GetUseDrawers() {},
      CustInitData(data: Ref<any[]>, keyFieldValues: Ref<{}>, type: string) {},
    } as EntityCustFunctionType,
  ]);
  /* 动态import实体名.ts的自定义方法 */
@@ -96,6 +99,7 @@
      GetTitle,
      GetUseTables,
      GetUseDrawers,
      CustInitData,
    },
  ] = isNullOrUnDef(custImport.value['default'])
    ? EntityCustFunction.value
@@ -131,12 +135,27 @@
      if (!isNullOrEmpty(keyFieldValues.value[drawers.value[i].code])) {
        sqlcmd += ` And ${drawers.value[i].code} = '${keyFieldValues.value[drawers.value[i].code]}'`;
      }
      /* type: all-表示需要code的所有的值 */
      if (drawers.value[i]['type'] == 'all') {
        if (data.value[drawers.value[i]['keyName']].length > 0) {
          sqlcmd += ` And ${drawers.value[i]['code']} in (${data.value[drawers.value[i]['keyName']].map((value) => `'${value[drawers.value[i]['code']]}'`).join(',')})`;
        } else {
          sqlcmd = ' 1!=1 '; //新增的时候不查数据,查也没有
        }
      }
      const list = await getEntity({
        sqlcmd: sqlcmd,
        entityName: drawers.value[i].name,
        entityName: isNullOrEmpty(drawers.value[i].dataType)
          ? drawers.value[i].name
          : drawers.value[i].dataType,
        order: drawers.value[i].order,
      });
      if (!isNullOrEmpty(list.Data) && !isNullOrEmpty(list.Data.Items)) {
        data.value[drawers.value[i].name] = list.Data.Items;
        // 自定义初始化数据
        if (CustInitData && isFunction(CustInitData)) {
          CustInitData(data, keyFieldValues, drawers.value[i].name);
        }
        useTables[drawers.value[i].name][1].setProps({
          dataSource: [],
        });
@@ -156,22 +175,25 @@
  function createActions(record, index, item) {
    const params = {
      record,
      isUpdate: true,
      ifSave: true,
      entityName: props.entityName,
      formJson: GetCrudForm(item, data), //getFormSchema(`${entityName.value}_Crud`),
      cType,
      isUpdate: true, //是更新还是新增
      ifSave: objParams.value['ifSave'], //是否直接保存表单到数据库,false的话要最后一起提交
      entityName: props.entityName, //实体名称
      formJson: [], //getFormSchema(`${entityName.value}_Crud`), //表单结构
      cType, //类型,以此来确定是哪种方法或者结构,根据实际情况而定
      dtlSlots,
      useModalData,
      useFormData,
      crudColSlots: props.crudColSlots,
      crudColSlots: isNullOrUnDef(objParams.value['crudColSlots'])
        ? []
        : objParams.value['crudColSlots'][item['name']], //插槽列表
      data,
      name: item, //drawers列表里面的name,表示是哪一个实体,也就是高级表单中表格的名字
      name: item.name, //drawers列表里面的name,表示是哪一个实体,也就是高级表单中表格的名字
      keyName: item.keyName, //实际用来确定动态引入实体.ts的实体名称
    };
    const actionItem = [
      {
        icon: 'clarity:note-edit-line',
        onClick: editRecord.bind(null, useDrawers[index][item][1].openDrawer, params),
        onClick: editRecord.bind(null, useDrawers[index][item.name][1].openDrawer, params),
      },
      {
        icon: 'ant-design:delete-outlined',
@@ -179,7 +201,7 @@
        popConfirm: {
          title: '是否确认删除?',
          placement: 'left',
          confirm: deleteRecord.bind(null, useTables[item][1].reload, params),
          confirm: deleteRecord.bind(null, useTables[item.name][1].reload, params),
        },
      },
    ];
@@ -189,13 +211,12 @@
    return nActionItem(
      params,
      actionItem,
      useDrawers[index][item][1].openDrawer,
      useTables[item][1].reload,
      useDrawers[index][item.name][1].openDrawer,
      useTables,
      null,
      useForm,
      useModal,
      go,
      useTables[item][1].setProps,
    );
  }
@@ -248,21 +269,31 @@
  function handleCreate(index, item) {
    validate().then((res) => {
      const Keys = Object.getOwnPropertyNames(useFormData.value);
      for (const t in drawers.value) {
        for (const i in Keys) {
          keyFieldValues.value[drawers.value[t]['code']] = objParams.value['IsID']
            ? res[Keys[i]]['ID']
            : res[Keys[i]][drawers.value[t]['code']];
      for (const i in Keys) {
        const _Keys = Object.getOwnPropertyNames(res[Keys[i]]);
        for (const j in _Keys) {
          if (_Keys[j] == item['code']) {
            keyFieldValues.value[item['code']] = objParams.value['IsID']
              ? res[Keys[i]]['ID']
              : res[Keys[i]][item['code']];
          } else if (_Keys[j] != 'ID') {
            keyFieldValues.value[_Keys[j]] = res[Keys[i]][_Keys[j]];
          }
        }
        useDrawers[index][item][1].openDrawer(true, {
          isUpdate: false,
          ifSave: true,
          entityName: drawers.value[t]['name'], //props.entityName,
          formJson: GetCrudForm(item, data), //获取增删改表单字段
          crudColSlots: props.crudColSlots,
          keyFieldValues: keyFieldValues.value,
        });
      }
      useDrawers[index][item['name']][1].openDrawer(true, {
        isUpdate: false,
        ifSave: objParams.value['ifSave'],
        entityName: item['name'], //props.entityName,
        // formJson: GetCrudForm(item, data), //获取增删改表单字段
        crudColSlots: isNullOrUnDef(objParams.value['crudColSlots'])
          ? []
          : objParams.value['crudColSlots'][item['name']],
        keyFieldValues: keyFieldValues.value,
        data,
        name: item['name'], //drawers列表里面的name,表示是哪一个实体,也就是高级表单中表格的名字
        keyName: item['keyName'],
      });
    });
  }
@@ -276,14 +307,21 @@
  function handleSuccess(d, u, item) {
    if (!isNullOrUnDef(custImport.value)) {
      /* 自定义编辑方法,根据实体名去调用 */
      EditOperation(data, d, u, item);
      useTables[item][1].setProps({
        dataSource: [],
      });
      useTables[item][1].setProps({
        dataSource: data.value[item],
      });
      useTables[item][1].reload();
      if (data.value[item].some((q) => q.ITEM_CODE == d.ITEM_CODE)) {
        createErrorModal({
          title: t('sys.api.errorTip'),
          content: t(`料号[${d.ITEM_CODE}]已经存在`),
        });
      } else {
        EditOperation(data, d, u, item);
        useTables[item][1].setProps({
          dataSource: [],
        });
        useTables[item][1].setProps({
          dataSource: data.value[item],
        });
        useTables[item][1].reload();
      }
    }
  }