Ben Lin
2024-06-18 ebbd788fbb2c0b45d4473798efc57eec8ba74a25
src/views/tigerprojects/system/lowcode/high/index.vue
@@ -42,11 +42,11 @@
 * @LastEditTime: 2024-06-14 09:19:23
-->
<template>
  <PageWrapper class="high-form" :title="title" :content="contentStr" @back="goBack">
  <PageWrapper class="high-form" :title="titleInfo['pageTitle']" :content="titleInfo['pageContent']" @back="goBack">
    <a-card :title="item.title" :bordered="false" v-for="(item, index) in baseCards" :key="item.name">
      <BasicForm @register="useFormData[item.name][0]" />
    </a-card>
    <a-card title="明细" :bordered="false" class="!mt-5">
    <a-card :title="titleInfo['baseTableTitle']" :bordered="false" class="!mt-5">
      <div>
        <BasicTable @register="registerTable">
          <template #toolbar>
@@ -96,7 +96,7 @@
import { PageWrapper } from '/@/components/Page';
import normalDrawer from '../normalDrawer.vue';
import NormalModal from '/@/views/components/NormalModal.vue';
import { GetEnum, getEntity, getListByPage } from '/@/api/tigerapi/system';
import { AddListEntity, DeleteEntity, DeleteWhere, GetEnum, SaveEntity, getEntity, getListByPage } from '/@/api/tigerapi/system';
import { useGlobSetting } from '/@/hooks/setting';
import { useRoute, useRouter } from 'vue-router';
import CustModal from '/@/views/components/CustModal.vue';
@@ -111,13 +111,21 @@
  OpenCustModal,
  GetUseModalData,
  GetBasicColumnAndInit,
  getHomeUrl,
  getTitle,
  getOthersValues,
  EditOperation,
} from '../data';
import { useModal } from '/@/components/Modal';
import { useLocale } from '/@/locales/useLocale';
import { useGo } from '/@/hooks/web/usePage';
import { useMultipleTabStore } from '/@/store/modules/multipleTab';
import { useTabs } from '/@/hooks/web/useTabs';
import { isNullOrEmpty } from '/@/utils/is';
import { isEmpty, isNullOrEmpty } from '/@/utils/is';
import { BAS_DEFECT } from '/@/api/tigerapi/model/mesModel';
import { buildUUID } from '/@/utils/uuid';
import { useUserStore } from '/@/store/modules/user';
import { formatToDateTime } from '/@/utils/dateUtil';
const ACard = Card;
const { getLocale } = useLocale();
@@ -132,11 +140,10 @@
}
const currentTab = getCurrentTab();
const objParams = ref(JSON.parse(decodeURI(route.params?.id as string)));
const titleInfo = getTitle(objParams.value.Name);
const entityName = ref(objParams.value.Name);
const title = ref(objParams.value.pageTitle);
const contentStr = ref(objParams.value.pageContent);
const isAllUpdate = ref(objParams.value.CODE != '0');
const globSetting = useGlobSetting();
const _crudFormSchema = ref([]);
const formSchemas = ref({}); //弹出框或高级页面多表单结构
const useModalData = ref({}); //表单中插槽渲染按钮打开模态框useModal方法
const useFormData = ref({});
@@ -147,23 +154,21 @@
const selectVals = ref({});
const baseCards = ref([] as any[]);
const otherCards = ref([] as any[]);
const others = ref(getOthersValues(entityName.value, objParams.value.CODE, objParams.value.ID));
//获取表格列信息并初始化一些数据,如:formSchemas(弹出框或高级页面多表单结构), useFormData(表单中插槽渲染按钮打开模态框useModal方法)...等
const _columns = GetBasicColumnAndInit(entityName.value, formSchemas, useFormData, baseCards, otherCards, useForm);
const data = ref([]);
const data = ref([] as BAS_DEFECT[]);
const [registerCust, { openModal: openCustomModal, closeModal }] = useModal();
const [registerItemAdd, { openModal: openItemModal }] = useModal();
const [registerDrawer, { openDrawer }] = useDrawer();
const { setTitle } = useTabs();
const [registerTable, { getForm, reload, setProps }] = useTable({
  title: '列表信息',
  // api: getListByPage,
  // searchInfo: { TABLE_NAME: entityName.value },
  dataSource: data.value,
  dataSource: data,
  columns: _columns,
  formConfig: {
    labelWidth: 140,
    schemas: getFormSchema(entityName.value),
    schemas: getFormSchema(`${entityName.value}_Search`),
  },
  useSearchForm: true,
  showTableSetting: true,
@@ -184,13 +189,15 @@
    {
      record,
      isUpdate: true,
      ifSave: true,
      entityName: entityName.value,
      formJson: _crudFormSchema.value,
      formJson: getFormSchema(`${entityName.value}_Crud`),
      cType,
      dtlSlots,
      useModalData,
      useFormData,
      crudColSlots,
      data,
    },
    openDrawer,
    reload,
@@ -198,40 +205,94 @@
    useForm,
    useModal,
    go,
    setProps,
  );
}
function handleCreate() {
  openDrawer(true, {
    isUpdate: false,
    entityName: entityName.value,
    formJson: _crudFormSchema.value,
    crudColSlots,
  validate().then((res) => {
    const Keys = Object.getOwnPropertyNames(useFormData.value);
    let i;
    for (i = 0; i < Keys.length; i++) {
      others.value[objParams.value.pCode] = objParams.value.IsID ? res[Keys[i]]['ID'] : res[Keys[i]][objParams.value.pCode]
    }
    openDrawer(true, {
      isUpdate: false,
      ifSave: true,
      entityName: entityName.value,
      formJson: getFormSchema(`${entityName.value}_Crud`),
      crudColSlots,
      others: others.value,
    });
  });
}
function handleSuccess() {
/**
 * @description: 新增编辑返回成功方法
 * @param {*} d
 * @param {*} u
 * @return {*}
 */
function handleSuccess(d, u) {
  /* 自定义编辑方法,根据实体名去调用 */
  EditOperation(entityName.value, data, d, u)
  setProps({
    dataSource: [],
  });
  setProps({
    dataSource: data,
  });
  reload();
}
function goBack() {
  // 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
  const param = { ID: entityName.value, colSlots: [], crudColSlots: [] };
  go(`/BAS_DEFECT_GRP/LC/${encodeURI(JSON.stringify(param))}`);
  go(getHomeUrl(entityName.value));
}
onMounted(() => {
  useFormData.value[baseCards.value[0]['name']][1].resetFields();
  getEntity({ sqlcmd: ` ID = '${objParams.value.ID}'`, entityName: entityName.value }).then((res) => {
    if (!isNullOrEmpty(res.Data.Items)) {
      useFormData.value[baseCards.value[0]['name']][1].setFieldsValue(res.Data.Items[0]);
  Promise.all([
    getEntity({ sqlcmd: ` ID = '${objParams.value.ID}'`, entityName: baseCards.value[0]['entityName'] }),
    getEntity({ sqlcmd: ` ${objParams.value.pCode} = '${others.value[objParams.value.pCode]}'`, entityName: entityName.value }),
  ]).then((res) => {
    if (!isNullOrEmpty(res[0].Data.Items)) {
      useFormData.value[baseCards.value[0]['name']][1].setFieldsValue(res[0].Data.Items[0]);
    }
    if (!isNullOrEmpty(res[1].Data.Items)) {
      data.value = res[1].Data.Items;
    }
  });
});
async function submitAll() {
/**
 * @description: 异步全部提交方法
 * @return {*}
 */
function submitAll() {
  try {
    // const [values, testValues] = await Promise.all([validate(), validateTestForm()]);
    validate().then((res) => {
      const Keys = Object.getOwnPropertyNames(useFormData.value);
      let i;
      let p = [] as Promise<any>[];
      for (i = 0; i < Keys.length; i++) {
        p.push(SaveEntity(res[Keys[i]], unref(isAllUpdate), baseCards.value[i]['entityName']));
      }
      Promise.all(p).then((action) => {
        DeleteWhere(` ${objParams.value.pCode} = '${others.value[objParams.value.pCode]}'`, entityName.value).then((res) => {
          if (res.IsSuccessed) {
            data.value.forEach((item) => {
              item.ID = buildUUID();
            });
            AddListEntity(data.value, entityName.value).then((action) => {
              if (action.IsSuccessed) {
                cancel();
              }
            });
          }
        });
      });
    });
    // values.ID = params.RULE_ID;
    // const action = await SaveRule({ ...values, ...testValues });
    // if (action.IsSuccessed) {
@@ -250,6 +311,20 @@
}
/**
 * @description: 验证表单
 * @return {*}
 */
async function validate() {
  let validates = {};
  const Keys = Object.getOwnPropertyNames(useFormData.value);
  let i;
  for (i = 0; i < Keys.length; i++) {
    validates[Keys[i]] = await useFormData.value[Keys[i]][1].validate();
  }
  return validates;
}
/**
 * @description: 弹出选择框选择成功后事件
 * @param {*} d
 * @param {*} u