From 925a72d879f399c2597b08e0becff4f7db6d399f Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 24 十月 2024 14:52:17 +0800
Subject: [PATCH] 低代码页面更新

---
 src/views/tigerprojects/system/lowcode/normalDrawer.vue |  314 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 227 insertions(+), 87 deletions(-)

diff --git a/src/views/tigerprojects/system/lowcode/normalDrawer.vue b/src/views/tigerprojects/system/lowcode/normalDrawer.vue
index a9d5af9..140dfaa 100644
--- a/src/views/tigerprojects/system/lowcode/normalDrawer.vue
+++ b/src/views/tigerprojects/system/lowcode/normalDrawer.vue
@@ -1,106 +1,246 @@
 <!--
- * @Description: file content
- * @Author: your name
+ *                                                     __----~~~~~~~~~~~------___
+ *                                    .  .   ~~//====......          __--~ ~~
+ *                    -.            \_|//     |||\\  ~~~~~~::::... /~
+ *                 ___-==_       _-~o~  \/    |||  \\            _/~~-
+ *         __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ *     _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ *   .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ *  /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ *  |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ *           '         ~-|      /|    |-~\~~       __--~~
+ *                       |-~~-_/ |    |   ~\_   _-~            /\
+ *                            /  \     \__   \/~                \__
+ *                        _--~ _/ | .-~~____--~-/                  ~~==.
+ *                       ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ *                                  -_     ~\      ~~---l__i__i__i--~~_/
+ *                                  _-~-__   ~)  \--______________--~~
+ *                                //.-~~~-~_--~- |-------~~~~~~~~
+ *                                       //.-~~~--\
+ *                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * 
+ *                               绁炲吔淇濅綉            姘告棤BUG
+ -->
+
+<!--
+ * @Description: 閫氱敤渚ц竟妗�
+ * @Author: Ben Lin
  * @version: 
  * @Date: 2024-05-30 13:28:20
- * @LastEditors: your name
- * @LastEditTime: 2024-06-13 20:36:33
+ * @LastEditors: Ben Lin
+ * @LastEditTime: 2024-06-14 09:14:35
 -->
 <template>
-  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="600px" @ok="handleSubmit">
+  <BasicDrawer
+    v-bind="$attrs"
+    @register="registerDrawer"
+    showFooter
+    :title="getTitle"
+    width="580px"
+    @ok="handleSubmit"
+  >
     <BasicForm @register="registerForm">
       <template #[item]="{ field }" v-for="item in crudColSlots" :key="item">
-        <a-button v-if="field" class="mt-1 ml-1" size="small" @click="handleSelectItem(item)" preIcon="search|svg" />
-        <NormalModal @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
+          v-if="showModal"
+          @register="useModaldata[item][0]"
+          @success="(d, u) => handleItemSuccess(d, u, item)"
+        />
       </template>
     </BasicForm>
   </BasicDrawer>
 </template>
 <script lang="ts" setup>
-import { ref, computed, unref, onMounted } from 'vue';
-import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-import { useGlobSetting } from '/@/hooks/setting';
-import NormalModal from '/@/views/components/NormalModal.vue';
-import { SaveEntity, fetchJson, formatValues } from '/@/api/tigerapi/system';
-import { useModal } from '/@/components/Modal';
-import { GetSelectSuccess, OpenSelectItem } from './data';
-import { isArray, isNullOrEmpty } from '/@/utils/is';
+  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, 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 globSetting = useGlobSetting();
-const isUpdate = ref(true);
-const entityName = ref('');
-const formSchema = ref([]);
-const crudColSlots = ref<any>([]);
-const [registerItemAdd, { openModal: openItemModal }] = useModal();
-const [registerForm, { resetFields, setFieldsValue, getFieldsValue, validate }] = useForm({
-  labelWidth: 140,
-  schemas: formSchema as unknown as FormSchema[],
-  actionColOptions: {
-    span: 24,
-  },
-  showActionButtonGroup: false,
-});
+  const emit = defineEmits(['success', 'register']);
+  const { t } = useI18n();
+  const { createErrorModal } = useMessage();
+  const globSetting = useGlobSetting();
+  const isUpdate = ref(true);
+  const ifSave = ref(true);
+  const entityName = ref('');
+  const formSchema = ref([]);
+  const crudColSlots = ref<any>([]);
+  const isExistSql = ref('');
+  const useModaldata = ref({});
+  const showModal = ref(false);
+  const [registerForm, { resetFields, setFieldsValue, getFieldsValue, validate }] = useForm({
+    labelWidth: 140,
+    schemas: formSchema as unknown as FormSchema[],
+    actionColOptions: {
+      span: 24,
+    },
+    showActionButtonGroup: false,
+  });
 
-const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
-  isUpdate.value = !!data?.isUpdate;
-  entityName.value = data?.entityName;
-  // formSchema.value = await fetchJson(
-  //   `${globSetting.downloadUrl}/LowCode/${unref(entityName)}/${
-  //     entityName.value
-  //   }_addEditform.json`,
-  // );
-  formSchema.value = data?.formJson;
-  crudColSlots.value = data?.crudColSlots;
-  resetFields();
-  setDrawerProps({ confirmLoading: false });
-
-  if (unref(isUpdate)) {
-    setFieldsValue({
-      ...data.record,
-    });
-  }else{
-    if(!isNullOrEmpty(data?.others)){}
-    setFieldsValue(data?.others);
-  }
-});
-
-const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
-
-onMounted(async () => { });
-async function handleSubmit() {
-  try {
-    let values = await validate();
-    //鍒ゆ柇淇濆瓨鐨勫�煎鏋滄槸[]鏁扮粍鐨勶紝灏辩洿鎺ュ彇[0]绗竴涓�硷紝涓�鑸拡瀵逛笂浼犳ā鏉跨殑鍦板潃
-    values = formatValues(values);
-    setDrawerProps({ confirmLoading: true });
-    // TODO custom api
-    //淇濆瓨
-    SaveEntity(values, unref(isUpdate), unref(entityName)).then((action) => {
-      if (action.IsSuccessed) {
-        closeDrawer();
-        emit('success');
-      }
-    });
-  } finally {
+  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
+    showModal.value = false;
+    /* 鍔ㄦ�乮mport瀹炰綋鍚�.ts鐨勮嚜瀹氫箟鏂规硶 */
+    let m = {} as any;
+    try {
+      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]]); //杞崲鎴恉ayjs鏍煎紡
+        }
+      }
+      setFieldsValue({
+        ...data.record,
+      });
+    } else {
+      if (!isNullOrUnDef(data?.keyFieldValues)) {
+        setFieldsValue(data?.keyFieldValues);
+      }
+    }
+  });
+
+  const getTitle = computed(() => (!unref(isUpdate) ? '鏂板' : '缂栬緫'));
+
+  onMounted(async () => {});
+  async function handleSubmit() {
+    try {
+      let values = await validate();
+      //鍒ゆ柇淇濆瓨鐨勫�煎鏋滄槸[]鏁扮粍鐨勶紝灏辩洿鎺ュ彇[0]绗竴涓�硷紝涓�鑸拡瀵逛笂浼犳ā鏉跨殑鍦板潃
+      values = formatValues(values);
+      setDrawerProps({ confirmLoading: true });
+      // TODO custom api
+      if (unref(ifSave)) {
+        values.AUTH_ORG = useUserStore().getUserInfo.orgCode;
+        //淇濆瓨
+        SaveEntity(
+          values,
+          unref(isUpdate),
+          unref(entityName),
+          `${isExistSql.value}='${values[isExistSql.value]}'`,
+        ).then((action) => {
+          if (action.IsSuccessed) {
+            closeDrawer();
+            emit('success', values, { isUpdate: isUpdate.value });
+          } else {
+            createErrorModal({ title: t('sys.api.errorTip'), content: action.Message });
+          }
+        });
+      } else {
+        closeDrawer();
+        emit('success', values, { isUpdate: isUpdate.value });
+      }
+    } finally {
+      setDrawerProps({ confirmLoading: false });
+    }
   }
-}
 
-/**
- * @description: 寮瑰嚭閫夋嫨妗嗛�夋嫨鎴愬姛鍚庝簨浠�
- * @param {*} d
- * @param {*} u
- * @param {*} item
- * @return {*}
- */
-function handleItemSuccess(d, u, item) {
-  setFieldsValue(GetSelectSuccess(d, u, getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]));
-}
+  /**
+   * @description: 寮瑰嚭閫夋嫨妗嗛�夋嫨鎴愬姛鍚庝簨浠�
+   * @param {*} d
+   * @param {*} u
+   * @param {*} item
+   * @return {*}
+   */
+  function handleItemSuccess(d, u, item) {
+    /* 鍔ㄦ�乮mport瀹炰綋鍚�.ts鐨勮嚜瀹氫箟鏂规硶 */
+    try {
+      import(`./entityts/${getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]}.ts`)
+        .then((m) => {
+          const [{ GetSelectSuccess }] = m.default();
+          setFieldsValue(GetSelectSuccess(d, u));
+        })
+        .catch(() => {
+          setFieldsValue({
+            ITEM_CODE: d.values['val'],
+          });
+        });
+    } catch (e) {}
+  }
 
-/* 寮瑰嚭閫夋嫨妗� */
-function handleSelectItem(item) {
-  OpenSelectItem(openItemModal, getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]);
-}
+  /**
+   * @description: 寮瑰嚭閫夋嫨妗�
+   * @param {*} item
+   * @return {*}
+   */
+  function handleSelectItem(item) {
+    /* 鍔ㄦ�乮mport瀹炰綋鍚�.ts鐨勮嚜瀹氫箟鏂规硶 */
+    try {
+      import(`./entityts/${getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]}.ts`)
+        .then((m) => {
+          const [{ OpenSelectItem }] = m.default();
+          OpenSelectItem(useModaldata.value[item][1].openModal);
+        })
+        .catch((err) => {
+          useModaldata.value[item][1].openModal(true, {
+            title: '鐗╂枡鍒楄〃',
+            schemas: [
+              {
+                field: 'ITEM_CODE',
+                component: 'Input',
+                label: '鐗╂枡缂栫爜',
+                colProps: {
+                  span: 12,
+                },
+              },
+            ],
+            ItemColumns: [
+              {
+                title: t('鐗╂枡缂栫爜'),
+                dataIndex: 'ITEM_CODE',
+                resizable: true,
+                sorter: true,
+                width: 200,
+              },
+              {
+                title: t('鐗╂枡鍚嶇О'),
+                dataIndex: 'ITEM_NAME',
+                resizable: true,
+                sorter: true,
+                width: 180,
+              },
+            ],
+            tableName: 'BAS_ITEM',
+            rowKey: 'ITEM_CODE',
+            searchInfo: { TABLE_NAME: 'BAS_ITEM' },
+          });
+        });
+    } catch (e) {}
+  }
 </script>

--
Gitblit v1.9.3