Jelajahi Sumber

feat: 字典相关业务初始化

hanxiaohui 5 bulan lalu
induk
melakukan
b57645c11f

+ 6 - 0
src/api/support/dict-api.js

@@ -57,4 +57,10 @@ export const dictApi = {
     updateDisabled: (dictKeyId) => {
     return getRequest(`/support/dict/updateDisabled/${dictKeyId}`);
   },
+
+  // 获取所有数据字典
+  getDictAll: () => {
+    return getRequest(`/support/dict/category/query`);
+  },
+
 };

+ 20 - 0
src/layout/components/header-user-space/header-avatar.vue

@@ -25,6 +25,11 @@
         <a-menu-item @click="onLogout">
           <span>退出登录</span>
         </a-menu-item>
+
+        <a-menu-item @click="handleRefresh">
+          <span>刷新缓存</span>
+        </a-menu-item>
+
       </a-menu>
     </template>
   </a-dropdown>
@@ -46,6 +51,10 @@
         <a-menu-item @click="onLogout">
           <span>退出登录</span>
         </a-menu-item>
+
+        <a-menu-item @click="handleRefresh">
+          <span>刷新缓存</span>
+        </a-menu-item>
       </a-menu>
     </template>
   </a-dropdown>
@@ -61,6 +70,9 @@
   import { useRouter } from 'vue-router';
   import { ACCOUNT_MENU } from '/@/views/system/account/account-menu.js';
   import { localSave, localRemove, localRead } from '/@/utils/local-util.js';
+  import {handleRead} from "/@/api/flow/stFormAction.js";
+  import useBsDict from "/@/utils/dict.js";
+  import {message} from "ant-design-vue";
 
   // 头像背景颜色
   const AVATAR_BACKGROUND_COLOR_ARRAY = ['#87d068', '#00B853', '#f56a00', '#1890ff'];
@@ -72,6 +84,8 @@
     } catch (e) {
       smartSentry.captureError(e);
     } finally {
+      // 清理字典
+      useBsDict.clear();
       useUserStore().logout();
       location.reload();
     }
@@ -133,6 +147,12 @@
   onMounted(() => {
     loginFromFlag.value = localRead('loginFrom');
   });
+
+  const handleRefresh = async () => {
+    await useBsDict.refresh();
+    message.success("操作成功")
+  }
+
 </script>
 <style lang="less" scoped>
   .wrapper {

+ 84 - 0
src/utils/dict.js

@@ -0,0 +1,84 @@
+import { dictApi } from '/@/api/support/dict-api';
+import { reactive } from 'vue';
+
+const useBsDict = class {
+  dicts = {};
+
+  constructor() {
+    this.dicts = reactive({
+      items: [],
+    });
+  }
+
+  /**
+   */
+  async init() {
+    const dictStr = localStorage.getItem('dicts');
+    if (dictStr) {
+      this.dicts.items = JSON.parse(dictStr);
+    } else {
+      await this.fetchDictData();
+    }
+  }
+
+  /**
+   * 刷新字典数据
+   */
+  async refresh() {
+    this.clear();
+    await this.fetchDictData();
+  }
+
+  /**
+   * 清除字典数据
+   * @returns {void}
+   */
+  clear() {
+    this.dicts.items = [];
+    localStorage.removeItem('dicts');
+  }
+
+  getLabelByValue(dictCode, dictValue) {
+    const obj = this.getDictItem(dictCode, dictValue);
+    return obj?.label;
+  }
+
+  getDictByCode(dictCode) {
+    return this.dicts.items.find((v) => v.dictCode === dictCode);
+  }
+
+  getDictItems(dictCode) {
+    const dict = this.getDictByCode(dictCode);
+    return dict?.dictItems;
+  }
+
+  getDictItem(dictCode, dictValue) {
+    const dict = this.getDictByCode(dictCode);
+    return dict?.dictItems.find((v) => v.value === dictValue);
+  }
+
+  // 参数归一化
+  normalizeDictNames(data) {
+    return data.map((v) => ({
+      dictName: v.key.keyName,
+      dictCode: v.key.keyCode,
+      raw: v,
+      dictItems: v.value.map((vv) => ({
+        label: vv.valueName,
+        value: vv.valueCode,
+        raw: vv,
+      })),
+    }));
+  }
+
+  // 获取字典数据
+  async fetchDictData() {
+    const res = await dictApi.getDictAll();
+    if (res?.code === 0) {
+      this.dicts.items = this.normalizeDictNames(res.data);
+      localStorage.setItem('dicts', JSON.stringify(this.dicts.items));
+    }
+  }
+};
+
+export default new useBsDict();

+ 4 - 0
src/views/system/login2/login.vue

@@ -83,6 +83,7 @@
   import { localSave, localRemove, localRead } from '/@/utils/local-util.js';
   import LocalStorageKeyConst from '/@/constants/local-storage-key-const.js';
   import { Form } from 'ant-design-vue';
+  import useBsDict from "/@/utils/dict.js";
 
   //--------------------- 登录表单 ---------------------------------
 
@@ -148,6 +149,9 @@
 
         localSave(LocalStorageKeyConst.USER_TOKEN, res.data.token ? res.data.token : '');
         message.success('登录成功');
+
+        // 刷新本地缓存
+        await useBsDict.refresh();
         //更新用户信息到pinia
         useUserStore().setUserLoginInfo(res.data);
         localSave('loginFrom', '0');