From 1606dbd76f64bb1dd2ea3e8876341528293c7ea5 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期一, 26 八月 2024 11:45:16 +0800
Subject: [PATCH] !141 发布 vue 版本 5.2.2 与 cloud 版本 2.2.1 Merge pull request !141 from 疯狂的狮子Li/dev

---
 src/views/index.vue                      |    4 
 src/views/system/role/index.vue          |    2 
 src/views/workflow/leave/index.vue       |    1 
 src/layout/components/Navbar.vue         |    2 
 src/store/modules/tagsView.ts            |   22 +-
 src/api/login.ts                         |    4 
 src/layout/index.vue                     |    5 
 src/views/system/user/authRole.vue       |    4 
 src/views/system/oss/index.vue           |    2 
 src/permission.ts                        |    1 
 .env.development                         |    4 
 /dev/null                                |   63 ---------
 src/views/system/user/index.vue          |    3 
 vite.config.ts                           |   56 -------
 src/store/modules/permission.ts          |    6 
 package.json                             |    8 
 src/utils/websocket.ts                   |  168 +++++------------------
 .env.production                          |    4 
 src/plugins/tab.ts                       |    4 
 src/utils/sse.ts                         |   45 ++++++
 src/router/index.ts                      |    2 
 src/views/system/tenantPackage/index.vue |    2 
 22 files changed, 132 insertions(+), 280 deletions(-)

diff --git a/.env.development b/.env.development
index 52553ff..05d6778 100644
--- a/.env.development
+++ b/.env.development
@@ -28,5 +28,5 @@
 # 瀹㈡埛绔痠d
 VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
 
-# websocket 寮�鍏�
-VITE_APP_WEBSOCKET = true
+# websocket 寮�鍏� 榛樿浣跨敤sse鎺ㄩ��
+VITE_APP_WEBSOCKET = false
diff --git a/.env.production b/.env.production
index bf9e644..c6b1f85 100644
--- a/.env.production
+++ b/.env.production
@@ -31,5 +31,5 @@
 # 瀹㈡埛绔痠d
 VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
 
-# websocket 寮�鍏�
-VITE_APP_WEBSOCKET = true
+# websocket 寮�鍏� 榛樿浣跨敤sse鎺ㄩ��
+VITE_APP_WEBSOCKET = false
diff --git a/package.json b/package.json
index f1c8084..48b1571 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "ruoyi-vue-plus",
-  "version": "5.2.1",
+  "version": "5.2.2",
   "description": "RuoYi-Vue-Plus澶氱鎴风鐞嗙郴缁�",
   "author": "LionLi",
   "license": "MIT",
@@ -30,7 +30,7 @@
     "diagram-js": "12.3.0",
     "didi": "9.0.2",
     "echarts": "5.5.0",
-    "element-plus": "2.7.5",
+    "element-plus": "2.7.8",
     "file-saver": "2.0.5",
     "fuse.js": "7.0.0",
     "highlight.js": "11.9.0",
@@ -40,7 +40,7 @@
     "nprogress": "0.2.0",
     "pinia": "2.1.7",
     "screenfull": "6.0.2",
-    "vue": "3.4.25",
+    "vue": "3.4.34",
     "vue-cropper": "1.1.1",
     "vue-i18n": "9.10.2",
     "vue-router": "4.3.2",
@@ -81,7 +81,7 @@
     "unplugin-icons": "0.18.5",
     "unplugin-vue-components": "0.26.0",
     "unplugin-vue-setup-extend-plus": "1.0.1",
-    "vite": "5.2.10",
+    "vite": "5.2.12",
     "vite-plugin-compression": "0.5.1",
     "vite-plugin-svg-icons": "2.0.1",
     "vitest": "1.5.0",
diff --git a/src/api/login.ts b/src/api/login.ts
index b6955de..c7c291e 100644
--- a/src/api/login.ts
+++ b/src/api/login.ts
@@ -51,6 +51,10 @@
  * 娉ㄩ攢
  */
 export function logout() {
+  request({
+    url: '/resource/sse/close',
+    method: 'get'
+  });
   return request({
     url: '/auth/logout',
     method: 'post'
diff --git a/src/api/workflow/nodeConfig/index.ts b/src/api/workflow/nodeConfig/index.ts
deleted file mode 100644
index 3270c17..0000000
--- a/src/api/workflow/nodeConfig/index.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import request from '@/utils/request';
-import { AxiosPromise } from 'axios';
-import { NodeConfigVO, NodeConfigForm, NodeConfigQuery } from '@/api/workflow/nodeConfig/types';
-
-/**
- * 鏌ヨ鑺傜偣閰嶇疆鍒楄〃
- * @param query
- * @returns {*}
- */
-
-export const listNodeConfig = (query?: NodeConfigQuery): AxiosPromise<NodeConfigVO[]> => {
-  return request({
-    url: '/workflow/nodeConfig/list',
-    method: 'get',
-    params: query
-  });
-};
-
-/**
- * 鏌ヨ鑺傜偣閰嶇疆璇︾粏
- * @param id
- */
-export const getNodeConfig = (id: string | number): AxiosPromise<NodeConfigVO> => {
-  return request({
-    url: '/workflow/nodeConfig/' + id,
-    method: 'get'
-  });
-};
-
-/**
- * 鏂板鑺傜偣閰嶇疆
- * @param data
- */
-export const addNodeConfig = (data: NodeConfigForm) => {
-  return request({
-    url: '/workflow/nodeConfig',
-    method: 'post',
-    data: data
-  });
-};
-
-/**
- * 淇敼鑺傜偣閰嶇疆
- * @param data
- */
-export const updateNodeConfig = (data: NodeConfigForm) => {
-  return request({
-    url: '/workflow/nodeConfig',
-    method: 'put',
-    data: data
-  });
-};
-
-/**
- * 鍒犻櫎鑺傜偣閰嶇疆
- * @param id
- */
-export const delNodeConfig = (id: string | number | Array<string | number>) => {
-  return request({
-    url: '/workflow/nodeConfig/' + id,
-    method: 'delete'
-  });
-};
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index fd4eb8c..c2ed0b6 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -128,6 +128,7 @@
     dynamic.value = true;
     proxy?.$tab.closeAllPage();
     proxy?.$router.push('/');
+    proxy?.$tab.refreshPage();
   }
 };
 
@@ -136,6 +137,7 @@
   dynamic.value = false;
   proxy?.$tab.closeAllPage();
   proxy?.$router.push('/');
+  proxy?.$tab.refreshPage();
 };
 
 /** 绉熸埛鍒楄〃 */
diff --git a/src/layout/index.vue b/src/layout/index.vue
index 29fb5ff..0919aad 100644
--- a/src/layout/index.vue
+++ b/src/layout/index.vue
@@ -27,6 +27,7 @@
 import useAppStore from '@/store/modules/app';
 import useSettingsStore from '@/store/modules/settings';
 import { initWebSocket } from '@/utils/websocket';
+import { initSSE } from "@/utils/sse";
 
 const settingsStore = useSettingsStore();
 const theme = computed(() => settingsStore.theme);
@@ -71,6 +72,10 @@
   initWebSocket(protocol + window.location.host + import.meta.env.VITE_APP_BASE_API + '/resource/websocket');
 });
 
+onMounted(() => {
+  initSSE(import.meta.env.VITE_APP_BASE_API + '/resource/sse')
+});
+
 const handleClickOutside = () => {
   useAppStore().closeSideBar({ withoutAnimation: false });
 };
diff --git a/src/permission.ts b/src/permission.ts
index 6771f8c..125438b 100644
--- a/src/permission.ts
+++ b/src/permission.ts
@@ -40,6 +40,7 @@
               router.addRoute(route); // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
             }
           });
+          // @ts-ignore
           next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack鏂规硶 纭繚addRoutes宸插畬鎴�
         }
       } else {
diff --git a/src/plugins/tab.ts b/src/plugins/tab.ts
index dd240cd..86421a8 100644
--- a/src/plugins/tab.ts
+++ b/src/plugins/tab.ts
@@ -1,5 +1,5 @@
 import router from '@/router';
-import { RouteLocationMatched, RouteLocationNormalized } from 'vue-router';
+import {RouteLocationMatched, RouteLocationNormalized, RouteLocationRaw} from 'vue-router';
 import useTagsViewStore from '@/store/modules/tagsView';
 
 export default {
@@ -41,7 +41,7 @@
     });
   },
   // 鍏抽棴褰撳墠tab椤电锛屾墦寮�鏂伴〉绛�
-  closeOpenPage(obj: RouteLocationNormalized): void {
+  closeOpenPage(obj: RouteLocationRaw): void {
     useTagsViewStore().delView(router.currentRoute.value);
     if (obj !== undefined) {
       router.push(obj);
diff --git a/src/router/index.ts b/src/router/index.ts
index 438708f..86e0092 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -159,7 +159,7 @@
         path: 'index/:tableId(\\d+)',
         component: () => import('@/views/tool/gen/editTable.vue'),
         name: 'GenEdit',
-        meta: { title: '淇敼鐢熸垚閰嶇疆', activeMenu: '/tool/gen', icon: '' }
+        meta: { title: '淇敼鐢熸垚閰嶇疆', activeMenu: '/tool/gen', icon: '', noCache: true }
       }
     ]
   },
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
index 2e719ba..e90df4c 100644
--- a/src/store/modules/permission.ts
+++ b/src/store/modules/permission.ts
@@ -21,13 +21,13 @@
   const sidebarRouters = ref<RouteRecordRaw[]>([]);
 
   const getRoutes = (): RouteRecordRaw[] => {
-    return routes.value;
+    return routes.value as RouteRecordRaw[];
   };
   const getSidebarRoutes = (): RouteRecordRaw[] => {
-    return sidebarRouters.value;
+    return sidebarRouters.value as RouteRecordRaw[];
   };
   const getTopbarRoutes = (): RouteRecordRaw[] => {
-    return topbarRouters.value;
+    return topbarRouters.value as RouteRecordRaw[];
   };
 
   const setRoutes = (newRoutes: RouteRecordRaw[]): void => {
diff --git a/src/store/modules/tagsView.ts b/src/store/modules/tagsView.ts
index b9502eb..9756ac2 100644
--- a/src/store/modules/tagsView.ts
+++ b/src/store/modules/tagsView.ts
@@ -6,10 +6,10 @@
   const iframeViews = ref<RouteLocationNormalized[]>([]);
 
   const getVisitedViews = (): RouteLocationNormalized[] => {
-    return visitedViews.value;
+    return visitedViews.value as RouteLocationNormalized[];
   };
   const getIframeViews = (): RouteLocationNormalized[] => {
-    return iframeViews.value;
+    return iframeViews.value as RouteLocationNormalized[];
   };
   const getCachedViews = (): string[] => {
     return cachedViews.value;
@@ -31,7 +31,7 @@
   const delIframeView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
     return new Promise((resolve) => {
       iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path);
-      resolve([...iframeViews.value]);
+      resolve([...iframeViews.value as RouteLocationNormalized[]]);
     });
   };
   const addVisitedView = (view: RouteLocationNormalized): void => {
@@ -54,7 +54,7 @@
         delCachedView(view);
       }
       resolve({
-        visitedViews: [...visitedViews.value],
+        visitedViews: [...visitedViews.value as RouteLocationNormalized[]],
         cachedViews: [...cachedViews.value]
       });
     });
@@ -68,7 +68,7 @@
           break;
         }
       }
-      resolve([...visitedViews.value]);
+      resolve([...visitedViews.value as RouteLocationNormalized[]]);
     });
   };
   const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => {
@@ -92,7 +92,7 @@
       delOthersVisitedViews(view);
       delOthersCachedViews(view);
       resolve({
-        visitedViews: [...visitedViews.value],
+        visitedViews: [...visitedViews.value as RouteLocationNormalized[]],
         cachedViews: [...cachedViews.value]
       });
     });
@@ -103,7 +103,7 @@
       visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => {
         return v.meta?.affix || v.path === view.path;
       });
-      resolve([...visitedViews.value]);
+      resolve([...visitedViews.value as RouteLocationNormalized[]]);
     });
   };
   const delOthersCachedViews = (view: RouteLocationNormalized): Promise<string[]> => {
@@ -124,7 +124,7 @@
       delAllVisitedViews();
       delAllCachedViews();
       resolve({
-        visitedViews: [...visitedViews.value],
+        visitedViews: [...visitedViews.value as RouteLocationNormalized[]],
         cachedViews: [...cachedViews.value]
       });
     });
@@ -132,7 +132,7 @@
   const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => {
     return new Promise((resolve) => {
       visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix);
-      resolve([...visitedViews.value]);
+      resolve([...visitedViews.value as RouteLocationNormalized[]]);
     });
   };
 
@@ -167,7 +167,7 @@
         }
         return false;
       });
-      resolve([...visitedViews.value]);
+      resolve([...visitedViews.value as RouteLocationNormalized[]]);
     });
   };
   const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
@@ -186,7 +186,7 @@
         }
         return false;
       });
-      resolve([...visitedViews.value]);
+      resolve([...visitedViews.value as RouteLocationNormalized[]]);
     });
   };
 
diff --git a/src/utils/sse.ts b/src/utils/sse.ts
new file mode 100644
index 0000000..a08f282
--- /dev/null
+++ b/src/utils/sse.ts
@@ -0,0 +1,45 @@
+import { getToken } from '@/utils/auth';
+import { ElNotification } from 'element-plus';
+import useNoticeStore from '@/store/modules/notice';
+
+let message = '';
+
+// 鍒濆鍖�
+export const initSSE = (url: any) => {
+  url = url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID
+  const {
+    data,
+    error
+  } = useEventSource(url, [], {
+    autoReconnect: {
+      retries: 10,
+      delay: 3000,
+      onFailed() {
+        console.log('Failed to connect after 10 retries')
+      },
+    }
+  });
+
+  watch(error, () => {
+    console.log('SSE connection error:', error.value)
+    error.value = null;
+  });
+
+  watch(data, () => {
+    if (!data.value) return;
+    useNoticeStore().addNotice({
+      message: data.value,
+      read: false,
+      time: new Date().toLocaleString()
+    });
+    ElNotification({
+      title: '娑堟伅',
+      message: data.value,
+      type: 'success',
+      duration: 3000
+    });
+    data.value = null;
+  });
+};
+
+
diff --git a/src/utils/websocket.ts b/src/utils/websocket.ts
index d4dd8a8..ade13ef 100644
--- a/src/utils/websocket.ts
+++ b/src/utils/websocket.ts
@@ -1,139 +1,51 @@
-/**
- * @module initWebSocket 鍒濆鍖�
- * @module websocketonopen 杩炴帴鎴愬姛
- * @module websocketonerror 杩炴帴澶辫触
- * @module websocketclose 鏂紑杩炴帴
- * @module resetHeart 閲嶇疆蹇冭烦
- * @module sendSocketHeart 蹇冭烦鍙戦��
- * @module reconnect 閲嶈繛
- * @module sendMsg 鍙戦�佹暟鎹�
- * @module websocketonmessage 鎺ユ敹鏁版嵁
- * @module test 娴嬭瘯鏀跺埌娑堟伅浼犻��
- * @description socket 閫氫俊
- * @param {any} url socket鍦板潃
- * @param {any} websocket websocket 瀹炰緥
- * @param {any} heartTime 蹇冭烦瀹氭椂鍣ㄥ疄渚�
- * @param {number} socketHeart 蹇冭烦娆℃暟
- * @param {number} HeartTimeOut 蹇冭烦瓒呮椂鏃堕棿
- * @param {number} socketError 閿欒娆℃暟
- */
-
 import { getToken } from '@/utils/auth';
 import { ElNotification } from 'element-plus';
 import useNoticeStore from '@/store/modules/notice';
-
-let socketUrl: any = ''; // socket鍦板潃
-let websocket: any = null; // websocket 瀹炰緥
-let heartTime: any = null; // 蹇冭烦瀹氭椂鍣ㄥ疄渚�
-let socketHeart = 0 as number; // 蹇冭烦娆℃暟
-const HeartTimeOut = 10000; // 蹇冭烦瓒呮椂鏃堕棿 10000 = 10s
-let socketError = 0 as number; // 閿欒娆℃暟
 
 // 鍒濆鍖杝ocket
 export const initWebSocket = (url: any) => {
   if (import.meta.env.VITE_APP_WEBSOCKET === 'false') {
     return;
   }
-  socketUrl = url;
-  // 鍒濆鍖� websocket
-  websocket = new WebSocket(url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID);
-  websocketonopen();
-  websocketonmessage();
-  websocketonerror();
-  websocketclose();
-  sendSocketHeart();
-  return websocket;
-};
-
-// socket 杩炴帴鎴愬姛
-export const websocketonopen = () => {
-  websocket.onopen = function () {
-    console.log('杩炴帴 websocket 鎴愬姛');
-    resetHeart();
-  };
-};
-
-// socket 杩炴帴澶辫触
-export const websocketonerror = () => {
-  websocket.onerror = function (e: any) {
-    console.log('杩炴帴 websocket 澶辫触', e);
-  };
-};
-
-// socket 鏂紑閾炬帴
-export const websocketclose = () => {
-  websocket.onclose = function (e: any) {
-    console.log('鏂紑杩炴帴', e);
-  };
-};
-
-// socket 閲嶇疆蹇冭烦
-export const resetHeart = () => {
-  socketHeart = 0;
-  socketError = 0;
-  clearInterval(heartTime);
-  sendSocketHeart();
-};
-
-// socket蹇冭烦鍙戦��
-export const sendSocketHeart = () => {
-  heartTime = setInterval(() => {
-    // 濡傛灉杩炴帴姝e父鍒欏彂閫佸績璺�
-    if (websocket.readyState == 1) {
-      // if (socketHeart <= 30) {
-      websocket.send(
-        JSON.stringify({
-          type: 'ping'
-        })
-      );
-      socketHeart = socketHeart + 1;
-    } else {
-      // 閲嶈繛
-      reconnect();
+  url = url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID
+  useWebSocket(url, {
+    autoReconnect: {
+      // 閲嶈繛鏈�澶ф鏁�
+      retries: 3,
+      // 閲嶈繛闂撮殧
+      delay: 1000,
+      onFailed() {
+        console.log('websocket閲嶈繛澶辫触');
+      },
+    },
+    heartbeat: {
+      message: JSON.stringify({type: 'ping'}),
+      // 鍙戦�佸績璺崇殑闂撮殧
+      interval: 10000,
+      // 鎺ユ敹鍒板績璺硆esponse鐨勮秴鏃舵椂闂�
+      pongTimeout: 2000,
+    },
+    onConnected() {
+      console.log('websocket宸茬粡杩炴帴');
+    },
+    onDisconnected() {
+      console.log('websocket宸茬粡鏂紑');
+    },
+    onMessage: (_, e) => {
+      if (e.data.indexOf('ping') > 0) {
+        return;
+      }
+      useNoticeStore().addNotice({
+        message: e.data,
+        read: false,
+        time: new Date().toLocaleString()
+      });
+      ElNotification({
+        title: '娑堟伅',
+        message: e.data,
+        type: 'success',
+        duration: 3000
+      });
     }
-  }, HeartTimeOut);
-};
-
-// socket閲嶈繛
-export const reconnect = () => {
-  if (socketError <= 2) {
-    clearInterval(heartTime);
-    initWebSocket(socketUrl);
-    socketError = socketError + 1;
-    // eslint-disable-next-line prettier/prettier
-    console.log('socket閲嶈繛', socketError);
-  } else {
-    // eslint-disable-next-line prettier/prettier
-    console.log('閲嶈瘯娆℃暟宸茬敤瀹�');
-    clearInterval(heartTime);
-  }
-};
-
-// socket 鍙戦�佹暟鎹�
-export const sendMsg = (data: any) => {
-  websocket.send(data);
-};
-
-// socket 鎺ユ敹鏁版嵁
-export const websocketonmessage = () => {
-  websocket.onmessage = function (e: any) {
-    if (e.data.indexOf('heartbeat') > 0) {
-      resetHeart();
-    }
-    if (e.data.indexOf('ping') > 0) {
-      return;
-    }
-    useNoticeStore().addNotice({
-      message: e.data,
-      read: false,
-      time: new Date().toLocaleString()
-    });
-    ElNotification({
-      title: '娑堟伅',
-      message: e.data,
-      type: 'success',
-      duration: 3000
-    });
-    return e.data;
-  };
+  });
 };
diff --git a/src/views/index.vue b/src/views/index.vue
index aa60a9b..7bd19e4 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -33,7 +33,7 @@
           * 閮ㄧ讲鏂瑰紡 Docker 瀹瑰櫒缂栨帓 涓�閿儴缃蹭笟鍔¢泦缇�<br />
           * 鍥介檯鍖� SpringMessage Spring鏍囧噯鍥介檯鍖栨柟妗�<br />
         </p>
-        <p><b>褰撳墠鐗堟湰:</b> <span>v5.2.1</span></p>
+        <p><b>褰撳墠鐗堟湰:</b> <span>v5.2.2</span></p>
         <p>
           <el-tag type="danger">&yen;鍏嶈垂寮�婧�</el-tag>
         </p>
@@ -77,7 +77,7 @@
           * 鍒嗗竷寮忕洃鎺� Prometheus銆丟rafana 鍏ㄦ柟浣嶆�ц兘鐩戞帶<br />
           * 鍏朵綑涓� Vue 鐗堟湰涓�鑷�<br />
         </p>
-        <p><b>褰撳墠鐗堟湰:</b> <span>v2.2.0</span></p>
+        <p><b>褰撳墠鐗堟湰:</b> <span>v2.2.1</span></p>
         <p>
           <el-tag type="danger">&yen;鍏嶈垂寮�婧�</el-tag>
         </p>
diff --git a/src/views/system/oss/index.vue b/src/views/system/oss/index.vue
index a6e60e8..d057c23 100644
--- a/src/views/system/oss/index.vue
+++ b/src/views/system/oss/index.vue
@@ -60,7 +60,7 @@
             >
           </el-col>
           <el-col :span="1.5">
-            <el-button v-hasPermi="['system:oss:list']" type="info" plain icon="Operation" @click="handleOssConfig">閰嶇疆绠$悊</el-button>
+            <el-button v-hasPermi="['system:ossConfig:list']" type="info" plain icon="Operation" @click="handleOssConfig">閰嶇疆绠$悊</el-button>
           </el-col>
           <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
         </el-row>
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 0b6ba00..f2299d7 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -18,7 +18,7 @@
             <el-form-item label="鍒涘缓鏃堕棿" style="width: 308px">
               <el-date-picker
                 v-model="dateRange"
-                value-format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD HH:mm:ss"
                 type="daterange"
                 range-separator="-"
                 start-placeholder="寮�濮嬫棩鏈�"
diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue
index 55cc7d7..30c9455 100644
--- a/src/views/system/tenantPackage/index.vue
+++ b/src/views/system/tenantPackage/index.vue
@@ -321,7 +321,7 @@
 /** 瀵煎嚭鎸夐挳鎿嶄綔 */
 const handleExport = () => {
   proxy?.download(
-    'system/tenantPackage/export',
+    'system/package/export',
     {
       ...queryParams.value
     },
diff --git a/src/views/system/user/authRole.vue b/src/views/system/user/authRole.vue
index 87d2334..fe119ae 100644
--- a/src/views/system/user/authRole.vue
+++ b/src/views/system/user/authRole.vue
@@ -80,8 +80,8 @@
 
 /** 鍗曞嚮閫変腑琛屾暟鎹� */
 const clickRow = (row: RoleVO) => {
-  // ele鐨勬柟娉曟湁闂锛宻elected搴旇涓哄彲閫夊弬鏁�
-  tableRef.value?.toggleRowSelection(row, false);
+  row.flag = !row.flag
+  tableRef.value?.toggleRowSelection(row, row.flag);
 };
 /** 澶氶�夋閫変腑鏁版嵁 */
 const handleSelectionChange = (selection: RoleVO[]) => {
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index c1bdcf9..46bffd2 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -39,11 +39,12 @@
                 <el-form-item label="鍒涘缓鏃堕棿" style="width: 308px">
                   <el-date-picker
                     v-model="dateRange"
-                    value-format="YYYY-MM-DD"
+                    value-format="YYYY-MM-DD HH:mm:ss"
                     type="daterange"
                     range-separator="-"
                     start-placeholder="寮�濮嬫棩鏈�"
                     end-placeholder="缁撴潫鏃ユ湡"
+                    :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
                   ></el-date-picker>
                 </el-form-item>
                 <el-form-item>
diff --git a/src/views/workflow/leave/index.vue b/src/views/workflow/leave/index.vue
index d9c50c4..f413136 100644
--- a/src/views/workflow/leave/index.vue
+++ b/src/views/workflow/leave/index.vue
@@ -176,7 +176,6 @@
 /** 鏂板鎸夐挳鎿嶄綔 */
 const handleAdd = () => {
   proxy.$tab.closePage(proxy.$route);
-  proxy.$router.push(`/workflow/leaveEdit/index/add/add`);
   proxy.$router.push({
     path: `/workflow/leaveEdit/index`,
     query: {
diff --git a/vite.config.ts b/vite.config.ts
index f8b1200..97c8d9d 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -75,61 +75,7 @@
         'diagram-js/lib/draw/BaseRenderer',
         'tiny-svg',
         'image-conversion',
-
-        'element-plus/es/components/text/style/css',
-        'element-plus/es/components/collapse-item/style/css',
-        'element-plus/es/components/collapse/style/css',
-        'element-plus/es/components/space/style/css',
-        'element-plus/es/components/container/style/css',
-        'element-plus/es/components/aside/style/css',
-        'element-plus/es/components/main/style/css',
-        'element-plus/es/components/header/style/css',
-        'element-plus/es/components/button-group/style/css',
-        'element-plus/es/components/radio-button/style/css',
-        'element-plus/es/components/checkbox-group/style/css',
-        'element-plus/es/components/form/style/css',
-        'element-plus/es/components/form-item/style/css',
-        'element-plus/es/components/button/style/css',
-        'element-plus/es/components/input/style/css',
-        'element-plus/es/components/input-number/style/css',
-        'element-plus/es/components/switch/style/css',
-        'element-plus/es/components/upload/style/css',
-        'element-plus/es/components/menu/style/css',
-        'element-plus/es/components/col/style/css',
-        'element-plus/es/components/icon/style/css',
-        'element-plus/es/components/row/style/css',
-        'element-plus/es/components/tag/style/css',
-        'element-plus/es/components/dialog/style/css',
-        'element-plus/es/components/loading/style/css',
-        'element-plus/es/components/radio/style/css',
-        'element-plus/es/components/radio-group/style/css',
-        'element-plus/es/components/popover/style/css',
-        'element-plus/es/components/scrollbar/style/css',
-        'element-plus/es/components/tooltip/style/css',
-        'element-plus/es/components/dropdown/style/css',
-        'element-plus/es/components/dropdown-menu/style/css',
-        'element-plus/es/components/dropdown-item/style/css',
-        'element-plus/es/components/sub-menu/style/css',
-        'element-plus/es/components/menu-item/style/css',
-        'element-plus/es/components/divider/style/css',
-        'element-plus/es/components/card/style/css',
-        'element-plus/es/components/link/style/css',
-        'element-plus/es/components/breadcrumb/style/css',
-        'element-plus/es/components/breadcrumb-item/style/css',
-        'element-plus/es/components/table/style/css',
-        'element-plus/es/components/tree-select/style/css',
-        'element-plus/es/components/table-column/style/css',
-        'element-plus/es/components/select/style/css',
-        'element-plus/es/components/option/style/css',
-        'element-plus/es/components/pagination/style/css',
-        'element-plus/es/components/tree/style/css',
-        'element-plus/es/components/alert/style/css',
-        'element-plus/es/components/checkbox/style/css',
-        'element-plus/es/components/date-picker/style/css',
-        'element-plus/es/components/transfer/style/css',
-        'element-plus/es/components/tabs/style/css',
-        'element-plus/es/components/image/style/css',
-        'element-plus/es/components/tab-pane/style/css'
+        'element-plus/es/components/**/css'
       ]
     }
   };

--
Gitblit v1.9.3