Ben Lin
2024-12-07 547c91649da47f4dd8c6706e632797dbd9d79d87
src/views/tigerprojects/system/lowcode/normalDrawer.vue
@@ -36,7 +36,7 @@
    @register="registerDrawer"
    showFooter
    :title="getTitle"
    width="600px"
    width="580px"
    @ok="handleSubmit"
  >
    <BasicForm @register="registerForm">
@@ -49,7 +49,8 @@
          preIcon="search|svg"
        />
        <GeneralModal
          @register="registerItemAdd"
          v-if="showModal"
          @register="useModaldata[item][0]"
          @success="(d, u) => handleItemSuccess(d, u, item)"
        />
      </template>
@@ -57,16 +58,18 @@
  </BasicDrawer>
</template>
<script lang="ts" setup>
  import { ref, computed, unref, onMounted } from 'vue';
  import { ref, computed, unref, onMounted, nextTick } from 'vue';
  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  import { useGlobSetting } from '/@/hooks/setting';
  import GeneralModal from '/@/views/components/GeneralModal.vue';
  import { SaveEntity, fetchJson, formatValues } from '/@/api/tigerapi/system';
  import { useModal } from '/@/components/Modal';
  import { isNullOrUnDef } from '/@/utils/is';
  import { isNullOrUnDef, isTimeViaRegExp8601 } from '/@/utils/is';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { useI18n } from '/@/hooks/web/useI18n';
  import { useUserStore } from '/@/store/modules/user';
  import { dateUtil } from '/@/utils/dateUtil';
  const emit = defineEmits(['success', 'register']);
  const { t } = useI18n();
@@ -78,7 +81,8 @@
  const formSchema = ref([]);
  const crudColSlots = ref<any>([]);
  const isExistSql = ref('');
  const [registerItemAdd, { openModal: openItemModal }] = useModal();
  const useModaldata = ref({});
  const showModal = ref(false);
  const [registerForm, { resetFields, setFieldsValue, getFieldsValue, validate }] = useForm({
    labelWidth: 140,
    schemas: formSchema as unknown as FormSchema[],
@@ -89,32 +93,47 @@
  });
  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
    showModal.value = false;
    /* 动态import实体名.ts的自定义方法 */
    let m = {} as any;
    try {
      import(`./entityts/${data?.name}.ts`)
        .then((m) => {
          const [{ GetCrudForm }] = m.default();
          isUpdate.value = !!data?.isUpdate;
          ifSave.value = !!data?.ifSave;
          entityName.value = data?.entityName;
          formSchema.value = GetCrudForm(data?.name, data?.data, data.record);
          crudColSlots.value = data?.crudColSlots;
          isExistSql.value = data?.isExistSql;
          resetFields();
          setDrawerProps({ confirmLoading: false });
          if (unref(isUpdate)) {
            setFieldsValue({
              ...data.record,
            });
          } else {
            if (!isNullOrUnDef(data?.keyFieldValues)) {
              setFieldsValue(data?.keyFieldValues);
            }
          }
        })
        .catch(() => {});
      m = await import(`./entityts/${data?.keyName}.ts`);
    } catch (e) {}
    isUpdate.value = !!data?.isUpdate;
    ifSave.value = !!data?.ifSave;
    entityName.value = data?.entityName;
    formSchema.value = !isNullOrUnDef(m.default)
      ? m.default()[0].GetCrudForm(data?.name, data?.data, data.record)
      : data?.formJson;
    crudColSlots.value = data?.crudColSlots;
    isExistSql.value = data?.isExistSql;
    /* 如果插槽列表不为空,则初始化模态窗口 */
    if (!isNullOrUnDef(crudColSlots.value) && crudColSlots.value.length > 0) {
      await nextTick();
      crudColSlots.value.forEach((d) => {
        useModaldata.value[d] = useModal();
      });
      showModal.value = true;
    }
    resetFields();
    setDrawerProps({ confirmLoading: false });
    if (unref(isUpdate)) {
      /* 循环字段名,判断如果是时间的就转换成dayjs格式,否则时间选择器会出错 */
      const Keys = Object.getOwnPropertyNames(data.record);
      for (const k in Keys) {
        if (!isNullOrUnDef(data.record[Keys[k]]) && isTimeViaRegExp8601(data.record[Keys[k]])) {
          data.record[Keys[k]] = dateUtil(data.record[Keys[k]]); //转换成dayjs格式
        }
      }
      setFieldsValue({
        ...data.record,
      });
    } else {
      if (!isNullOrUnDef(data?.keyFieldValues)) {
        setFieldsValue(data?.keyFieldValues);
      }
    }
  });
  const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
@@ -127,7 +146,8 @@
      values = formatValues(values);
      setDrawerProps({ confirmLoading: true });
      // TODO custom api
      if (!unref(ifSave)) {
      if (unref(ifSave)) {
        values.AUTH_ORG = useUserStore().getUserInfo.orgCode;
        //保存
        SaveEntity(
          values,
@@ -137,7 +157,7 @@
        ).then((action) => {
          if (action.IsSuccessed) {
            closeDrawer();
            emit('success');
            emit('success', values, { isUpdate: isUpdate.value });
          } else {
            createErrorModal({ title: t('sys.api.errorTip'), content: action.Message });
          }
@@ -185,10 +205,10 @@
      import(`./entityts/${getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]}.ts`)
        .then((m) => {
          const [{ OpenSelectItem }] = m.default();
          OpenSelectItem(openItemModal);
          OpenSelectItem(useModaldata.value[item][1].openModal);
        })
        .catch(() => {
          openItemModal(true, {
        .catch((err) => {
          useModaldata.value[item][1].openModal(true, {
            title: '物料列表',
            schemas: [
              {