Ben Lin
2024-07-21 25f128f26f0330b5431e5513c16ea035ce46099a
src/views/tigerprojects/system/lowcode/entityts/BAS_PKG_DTL.ts
@@ -4,44 +4,17 @@
 * @version:
 * @Date: 2024-06-19 20:34:27
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-22 22:29:28
 * @LastEditTime: 2024-07-06 23:15:08
 */
import { Ref } from 'vue';
import { DeleteEntity } from '/@/api/tigerapi/system';
import { ActionItem, BasicColumn } from '/@/components/Table';
import { isNullOrEmpty } from '/@/utils/is';
import { buildUUID } from '/@/utils/uuid';
import { useUserStore } from '/@/store/modules/user';
import { formatToDateTime } from '/@/utils/dateUtil';
import { Ref, ref } from 'vue';
import { DeleteEntity, getEntity } from '/@/api/tigerapi/system';
import { ActionItem, BasicColumn, FormSchema, useTable } from '/@/components/Table';
import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
import { useDrawer } from '/@/components/Drawer';
import { EditOperation, Search, custDel } from '../data';
function _default() {
  /**
   * @description: 自定义删除方法
   * @param {Fn} args
   * @param {*} params
   * @return {*}
   */
  function custDel(args: Fn[], params: {}) {
    if (!isNullOrEmpty(params['data'])) {
      var _data = params['data'].value.filter((item) => item['ID'] != params['record']['ID']);
      params['data'].value = _data;
      args[6]({
        dataSource: [],
      });
      args[6]({
        dataSource: params['data'],
      });
      args[1]();
    } else {
      DeleteEntity(params['record'], params['entityName']).then((action) => {
        if (action.IsSuccessed) {
          args[1]();
        }
      });
    }
  }
function _default(): any[] {
  const ActionColumn: BasicColumn = {
    width: 80,
    title: '操作',
@@ -50,22 +23,31 @@
    fixed: undefined,
  };
  let _data = ref<any>({});
  let record = {};
  /**
   * @description: 一些自定义方法
   * @return {*}
   */
  const methods = {
    /**
     * @description: 获取新增按钮的行为
     * @return {*}
     */
    CreateAction: () => {
    CreateAction: (fnName: string) => {
      return {
        action: 'drawer', //drawer(打开左侧抽屉框) | go(跳转到新的页面)
      };
    },
    /**
     * @description: 产品绑定工艺路线操作字段自定义按钮
     * @description: 操作字段自定义按钮
     * @return {*}
     */
    ActionItem: (params: Recordable<any>, data, ...args): ActionItem[] => {
      data[1].popConfirm.confirm = custDel.bind(null, args[1], params);
      /* 重写删除方法 */
      if (!isNullOrUnDef(data[1])) {
        data[1].popConfirm.confirm = Del.bind(null, args, params);
      }
      return data;
    },
    /**
@@ -75,38 +57,419 @@
     * @param {*} u
     * @return {*}
     */
    EditeOperation: (data: Ref<any[]>, d, u) => {
      if (u.isUpdate) {
        //更新
        var _data = data.value.map((item) => {
          if (item['ID'] == d.ID)
            return {
              ...item,
              PKG_CODE: d.PKG_CODE,
              PKG_LEVEL: d.PKG_LEVEL,
              PKG_QTY: d.PKG_QTY,
              LABEL_CODE: d.LABEL_CODE,
              REMARK: d.REMARK,
            };
    EditOperation: (data: Ref<any[]>, d, u, item) => {
      //更新
      var _data = data.value[item].map((item) => {
        if (item['ID'] == d.ID)
          return {
            ...item,
            PKG_CODE: d.PKG_CODE,
            PKG_NAME: d.PKG_NAME,
            PKG_LEVEL: d.PKG_LEVEL,
            PKG_QTY: d.PKG_QTY,
            LABEL_CODE: d.LABEL_CODE,
            REMARK: d.REMARK,
          };
        return item;
      });
      EditOperation(data, d, u, item, _data);
    },
    /**
     * @description: 高级表单和详情页面返回主页面的url
     * @return {*}
     */
    GetHomeUrl: () => {
      return `/BAS_PKG_RULE/LC/${encodeURI(JSON.stringify({ ID: 'BAS_PKG_RULE', colSlots: [], crudColSlots: [] }))}`;
    },
    /**
     * @description: 高级表单明细表格字段
     * @return {*}
     */
    GetBaseColumns: (type: string) => {
      return baseColumns[type];
    },
    /**
     * @description: 高级表单查询条件字段
     * @return {*}
     */
    GetSearchForm: (type: string) => {
      return searchForms[type];
    },
    /**
     * @description: 高级表单增删改表单字段
     * @return {*}
     */
    GetCrudForm: (type: string, ...args) => {
      _data = args[0];
      record = args[1];
      return crudForms[type];
    },
    KeyFieldValues: (val: string, id: string) => {
      return { PKG_RULE_ID: id };
    },
    /**
     * @description: 高级表单主基本信息字段
     * @return {*}
     */
    GetBaseForm: () => {
      return [
        {
          field: 'RULE_CODE',
          label: '包装规则编码',
          component: 'Input',
          required: true,
          colProps: {
            span: 8,
          },
        },
        {
          label: '包装规则名称',
          field: 'RULE_NAME',
          required: true,
          component: 'Input',
          colProps: {
            span: 8,
          },
        },
        {
          label: '是否启用',
          field: 'IS_ACTIVE',
          required: true,
          component: 'Select',
          colProps: {
            span: 8,
          },
          componentProps: {
            options: [
              {
                label: '启用',
                value: 'Y',
                key: 'Y',
              },
              {
                label: '禁用',
                value: 'N',
                key: 'N',
              },
            ],
          },
        },
        {
          label: '备注',
          field: 'REMARK',
          component: 'Input',
          colProps: {
            span: 8,
          },
        },
        {
          label: 'ID',
          field: 'ID',
          component: 'Input',
          colProps: {
            span: 8,
          },
          show: false,
        },
      ];
    },
    /**
     * @description: 高级表单主信息卡片生成,可以多个
     * @return {*}
     */
    GetBaseCards: () => {
      return [
        {
          name: 'BaseForm',
          slots: [], //定义插槽
          preIcons: {}, //定义插槽中按钮图标
          title: '包装信息',
          entityName: 'BAS_PKG_RULE', //实体名称
        },
      ];
    },
    /**
     * @description: 获取右侧边框use方法
     * @return {*}
     */
    GetUseDrawers: () => {
      return [
        {
          BAS_PKG_DTL: useDrawer(),
        },
      ];
    },
    /**
     * @description: 获取表格use列表
     * @param {string} type
     * @param {array} args
     * @return {*}
     */
    GetUseTables: (data: Ref<{}>, ...args) => {
      return {
        BAS_PKG_DTL: useTable({
          title: '列表信息',
          dataSource: data.value['BAS_PKG_DTL'],
          columns: baseColumns['BAS_PKG_DTL'],
          formConfig: {
            labelWidth: 140,
            schemas: searchForms['BAS_PKG_DTL'],
            submitFunc: () => Search('BAS_PKG_DTL', data, args[0]), //自定义查询提交按钮的方法,触发查询提交事件
          },
          useSearchForm: true,
          showTableSetting: false,
          bordered: true,
          canResize: true,
          showIndexColumn: false,
          actionColumn: {
            width: 130,
            title: '操作',
            dataIndex: 'action',
            slots: { customRender: 'action' },
            fixed: 'right',
          }, //自定义操作列
        }),
      };
    },
    /**
     * @description: 表格查询回调,父组件中通过子组件触发的事件获取传入的值,做具体的查询逻辑实现
     * @param {*} d
     * @return {*}
     */
    FormSearch: (d) => {
      let data = {} as any;
      switch (d.type) {
        case 'BAS_PKG_DTL':
          data = d.data.value[d.type].filter((item) => item.PKG_CODE.includes(d.values.PKG_CODE));
          if (isNullOrEmpty(d.values.PKG_CODE)) {
            data = d.data.value[d.type];
          }
          break;
      }
      return data;
    },
    /**
     * @description: 获取标题信息
     * @param {string} type
     * @return {*}
     */
    GetTitle: () => {
      return {
        pageTitle: '包装规则管理',
        pageContent: '这里可以添加和修改包装规则和包装信息。',
        tableTitle: {
          BAS_PKG_DTL: '包装信息管理',
        },
      };
    },
    GetUseForm: () => {
      return {};
    },
  };
  /* 以下是内部方法,不export,供上面的方法调用 */
  /**
   * @description: 自定义删除方法
   * @param {Fn} args
   * @param {*} params
   * @return {*}
   */
  function Del(args: Fn[], params: {}) {
    const name = params['name'];
    const useTables = args[1];
    if (!isNullOrEmpty(params['data'])) {
      var _data = params['data'].value[name]
        .filter((x) => x['ID'] != params['record']['ID']) //过滤掉删除掉的记录
        .map((item) => {
          //如果序号大于删除掉的记录的序号的,则序号减1
          item['PKG_LEVEL'] =
            item['PKG_LEVEL'] > params['record']['PKG_LEVEL']
              ? item['PKG_LEVEL'] - 1
              : item['PKG_LEVEL'];
          return item;
        });
        data.value = _data;
      } else {
        //新增
        d.ID = buildUUID();
        d.CREATE_USER = useUserStore().getUserInfo.userId as string;
        d.UPDATE_TIME = formatToDateTime(new Date());
        d.UPDATE_USER = useUserStore().getUserInfo.userId as string;
        var _data2: any[] = [];
        if (!isNullOrEmpty(data.value)) {
          _data2 = data.value.map((item) => {
            return item;
          });
      params['data'].value[name] = _data;
      useTables[name][1].setProps({
        dataSource: [],
      });
      useTables[name][1].setProps({
        dataSource: params['data'].value[name],
      });
      useTables[name][1].reload();
    } else {
      DeleteEntity(params['record'], params['entityName']).then((action) => {
        if (action.IsSuccessed) {
          useTables[name][1].reload();
        }
        _data2.push(d);
        data.value = _data2;
      }
    },
      });
    }
  }
  const searchForms = {
    BAS_PKG_DTL: [
      {
        field: 'PKG_CODE',
        label: '包装规则编码',
        component: 'Input',
        colProps: {
          span: 8,
        },
      },
    ] as FormSchema[],
  };
  const baseColumns = {
    BAS_PKG_DTL: [
      {
        title: '包装/载具编码',
        dataIndex: 'PKG_CODE',
        ifShow: false,
        width: 180,
      },
      {
        title: '包装/载具名称',
        dataIndex: 'PKG_NAME',
        ifShow: false,
        width: 180,
      },
      {
        title: '包装/载具',
        dataIndex: 'PKG_FULL',
        width: 180,
        customRender: ({ record }) => {
          return `${record.PKG_CODE} - ${record.PKG_NAME}`;
        },
      },
      {
        title: '包装层级',
        dataIndex: 'PKG_LEVEL',
      },
      {
        title: '包装数量',
        dataIndex: 'PKG_QTY',
      },
      {
        title: '包装规则ID',
        dataIndex: 'PKG_RULE_ID',
        ifShow: false,
      },
      {
        title: '备注',
        dataIndex: 'REMARK',
      },
      {
        title: '更新时间',
        dataIndex: 'UPDATE_TIME',
      },
      {
        title: '更新人',
        dataIndex: 'UPDATE_USER',
      },
    ] as BasicColumn[],
  };
  const crudForms = {
    BAS_PKG_DTL: [
      {
        label: '包装规则ID',
        field: 'PKG_RULE_ID',
        component: 'Input',
        colProps: {
          span: 24,
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        label: '包装层级',
        field: 'PKG_LEVEL',
        component: 'Input',
        required: true,
        colProps: {
          span: 24,
        },
        componentProps: ({ formModel }) => {
          formModel.PKG_LEVEL =
            _data['BAS_PKG_DTL'].reduce((max, item) => {
              return max < Number(item.PKG_LEVEL) ? Number(item.PKG_LEVEL) : max;
            }, 0) + 1;
          return {
            onChange: (e) => {},
          };
        },
        dynamicDisabled: ({ values }) => {
          return true;
        },
      },
      {
        field: 'PKG_CODE',
        label: '包装/载具编码',
        component: 'ApiSelect',
        required: true,
        colProps: {
          span: 24,
        },
        componentProps: ({ formModel }) => {
          let sqlcmd = ' 1=1 ';
          if (!isNullOrEmpty(record) && record['PKG_LEVEL'] == 1) {
            sqlcmd += ` And IS_MIN_PKG = 'Y'`;
          } else {
            if (formModel.PKG_LEVEL == 1) {
              sqlcmd += ` And IS_MIN_PKG = 'Y'`;
            } else {
              sqlcmd += ` And IS_MIN_PKG != 'Y'`;
            }
          }
          return {
            api: getEntity,
            params: { entityName: 'BAS_PKG_TYPE', sqlcmd: sqlcmd },
            resultField: 'Data.Items',
            labelField: 'PKG_NAME',
            valueField: 'PKG_CODE',
            onChange: (e, v) => {
              console.log('ApiSelect====>:', e, v);
              formModel.PKG_NAME = isNullOrUnDef(v) ? formModel.PKG_NAME : v.label;
            },
          };
        },
      },
      {
        label: '包装数量',
        field: 'PKG_QTY',
        component: 'Input',
        colProps: {
          span: 24,
        },
      },
      {
        label: '包装名称',
        field: 'PKG_NAME',
        component: 'Input',
        colProps: {
          span: 24,
        },
        show: false,
      },
      {
        label: '备注',
        field: 'REMARK',
        component: 'Input',
        colProps: {
          span: 24,
        },
      },
      {
        label: 'ID',
        field: 'ID',
        component: 'Input',
        colProps: {
          span: 24,
        },
        show: false,
      },
    ] as FormSchema[],
  };
  return [methods, ActionColumn];