Ben Lin
2024-06-22 8e288eefbd4e8dbf7d0180dd880ce93256daa7a5
src/views/tigerprojects/system/lowcode/normal/index.vue
@@ -4,11 +4,11 @@
 * @version: 
 * @Date: 2024-05-30 13:28:20
 * @LastEditors: Ben Lin
 * @LastEditTime: 2024-06-20 09:21:32
 * @LastEditTime: 2024-06-22 00:57:52
-->
<template>
  <div>
    <BasicTable @register="registerTable">
    <BasicTable @register="registerTable" v-if="isMounted">
      <template #toolbar>
        <a-button type="primary" @click="handleCreate" preIcon="add_02|svg"> 新增 </a-button>
      </template>
@@ -17,19 +17,41 @@
      </template>
      <template #[item]="{ field }" v-for="item in colSlots" :key="item">
        <!-- <template #form-BAS_REASON3aadd="{ field }"> -->
        <a-button v-if="field" class="mt-1 ml-1" size="small" @click="handleSelectItem(item)" preIcon="search|svg" />
        <GeneralModal @register="registerItemAdd" @success="(d, u) => handleItemSuccess(d, u, item)" />
        <a-button
          v-if="field"
          class="mt-1 ml-1"
          size="small"
          @click="handleSelectItem(item)"
          preIcon="search|svg"
        />
        <GeneralModal
          @register="registerItemAdd"
          @success="(d, u) => handleItemSuccess(d, u, item)"
        />
      </template>
    </BasicTable>
    <normalDrawer @register="registerDrawer" @success="handleSuccess" />
    <CustModal @register="registerCust" @success="custSuccess" :type="cType" :detailSlots="dtlSlots">
    <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]" v-if="useFormData[item.name]">
          <!-- 用插槽自定义弹出选择框 -->
          <template #[name]="{ field }" v-for="name in item.slots" :key="name">
            <a-button class="mt-1 ml-1" size="small" @click="handleCustClick(field)" :preIcon="item.preIcons[name]" />
            <GeneralModal @register="useModalData[name][0]" @success="(d, u) => handleEntSuccess(d, u, item.name)" />
            <a-button
              class="mt-1 ml-1"
              size="small"
              @click="handleCustClick(field)"
              :preIcon="item.preIcons[name]"
            />
            <GeneralModal
              @register="useModalData[name][0]"
              @success="(d, u) => handleEntSuccess(d, u, item.name)"
            />
          </template>
        </BasicForm>
        <!-- 自定义内容 -->
@@ -39,11 +61,18 @@
</template>
<script lang="ts" setup>
import { h, onMounted, ref, unref } from 'vue';
import { BasicTable, useTable, TableAction, BasicColumn, FormSchema } from '/@/components/Table';
  import {
    BasicTable,
    useTable,
    TableAction,
    BasicColumn,
    FormSchema,
    ActionItem,
  } from '/@/components/Table';
import { useDrawer } from '/@/components/Drawer';
import normalDrawer from '../normalDrawer.vue';
import GeneralModal from '/@/views/components/GeneralModal.vue';
import { GetEnum, getEntity, getListByPage } from '/@/api/tigerapi/system';
  import { DeleteEntity, GetEnum, getEntity, getListByPage } from '/@/api/tigerapi/system';
import { useGlobSetting } from '/@/hooks/setting';
import { useRoute } from 'vue-router';
import { Tag, Tooltip } from 'ant-design-vue';
@@ -84,6 +113,8 @@
const dtlSlots = ref([] as any[]);
const selectVals = ref({});
const isExistSql = ref('');
  const custImport = ref(null);
  const isMounted = ref(false);
const [registerCust, { openModal: openCustomModal, closeModal }] = useModal();
const [registerItemAdd, { openModal: openItemModal }] = useModal();
@@ -104,10 +135,14 @@
  showIndexColumn: false,
  actionColumn: GetActionColumn(objParams.value.ID), //自定义操作列
});
/* 生成列表中操作项的按钮 */
  /**
   * @description: 生成列表中操作项的按钮
   * @param {*} record
   * @return {*}
   */
function createActions(record) {
  return GetActionsData(
    {
    const params = {
      record,
      isUpdate: true,
      entityName: objParams.value.ID,
@@ -118,7 +153,26 @@
      useModalData,
      useFormData,
      crudColSlots,
    };
    const [ActionItem] = custImport.value.default();
    return ActionItem(
      params,
      [
        {
          icon: 'clarity:note-edit-line',
          onClick: editRecord.bind(null, openDrawer, params),
    },
        {
          icon: 'ant-design:delete-outlined',
          color: 'error',
          popConfirm: {
            title: '是否确认删除?',
            placement: 'left',
            confirm: deleteRecord.bind(null, reload, params),
          },
        },
      ],
    openDrawer,
    reload,
    openCustomModal,
@@ -126,6 +180,32 @@
    useModal,
    go,
  );
  }
  /**
   * @description: 公用编辑方法
   * @param {Fn} fn
   * @param {*} params
   * @return {*}
   */
  function editRecord(fn: Fn, params: {}) {
    fn(true, params);
  }
  /**
   * @description: 公用删除方法
   * @param {Fn} fn
   * @param {*} params
   * @return {*}
   */
  function deleteRecord(fn: Fn, params: {}) {
    console.log(params['record']);
    //删除
    DeleteEntity(params['record'], params['entityName']).then((action) => {
      if (action.IsSuccessed) {
        fn();
      }
    });
}
/**
@@ -175,6 +255,15 @@
  // }
  // _columns.value = objs;
    // if (objParams.value.ID == 'V_BAS_PROD') {
    //   custImport.value = await import(`../${objParams.value.ID}`);
    // }
    isMounted.value = false;
    /* 动态import实体名.ts的自定义方法 */
    try {
      custImport.value = await import(/* @vite-ignore */ `../entityts/${objParams.value.ID}`);
    } catch (e) {}
  //获取表单中插槽渲染的按钮点击弹出模态窗口的实例
  useModalData.value = GetUseModalData(objParams.value.ID);
  const data = await getEntity({
@@ -189,9 +278,8 @@
      searchForms[i].componentProps.api == 'GetEnum'
    ) {
      searchForms[i].componentProps.api = GetEnum;
      searchForms[
        i
      ].componentProps.params.name = `${objParams.value.ID}+${searchForms[i].field}s`;
        searchForms[i].componentProps.params.name =
          `${objParams.value.ID}+${searchForms[i].field}s`;
      searchForms[i].componentProps.labelField = unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name';
    }
    if (
@@ -251,6 +339,7 @@
    }
  }
  _columns.value = objs;
    isMounted.value = true;
});
/**
@@ -261,7 +350,13 @@
 * @return {*}
 */
function handleItemSuccess(d, u, item) {
  getForm().setFieldsValue(GetSelectSuccess(d, u, getForm().getFieldsValue()[`${item.replace(/form-/, '').replace(/add/, '')}PSelect_0`]));
    getForm().setFieldsValue(
      GetSelectSuccess(
        d,
        u,
        getForm().getFieldsValue()[`${item.replace(/form-/, '').replace(/add/, '')}PSelect_0`],
      ),
    );
}
/**
@@ -270,7 +365,10 @@
 * @return {*}
 */
function handleSelectItem(item) {
  OpenSelectItem(openItemModal, getForm().getFieldsValue()[`${item.replace(/form-/, '').replace(/add/, '')}PSelect_0`]);
    OpenSelectItem(
      openItemModal,
      getForm().getFieldsValue()[`${item.replace(/form-/, '').replace(/add/, '')}PSelect_0`],
    );
}
/**