From d6a0e5667b4dde018b8244808fcc33f68f5b07ad Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 02 七月 2024 09:54:25 +0800
Subject: [PATCH] #

---
 zy-asrs-admin/src/main.js                                                          |   29 +++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java    |   44 +++++++-
 zy-asrs-admin/src/App.vue                                                          |   14 +-
 zy-asrs-admin/src/views/IndexView.vue                                              |   37 ++++--
 zy-asrs-admin/src/utils/request.js                                                 |    8 
 zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java |    2 
 zy-asrs-admin/src/locales/en_US.js                                                 |    7 +
 zy-asrs-admin/src/router/index.js                                                  |   89 +++++++++++------
 zy-asrs-framework/src/main/resources/templates/vue/Index.txt                       |   26 +++--
 9 files changed, 179 insertions(+), 77 deletions(-)

diff --git a/zy-asrs-admin/src/App.vue b/zy-asrs-admin/src/App.vue
index 8cdf986..66501f5 100644
--- a/zy-asrs-admin/src/App.vue
+++ b/zy-asrs-admin/src/App.vue
@@ -16,12 +16,14 @@
   enUS,
 };
 
-if (globalState.token == '' || globalState.token == null) {
-  let token = localStorage.getItem('token')
-  let user = JSON.parse(localStorage.getItem('user'))
-  globalState.token = token;
-  globalState.user = user;
-}
+// if (globalState.token == '' || globalState.token == null) {
+//   let token = localStorage.getItem('token')
+//   let user = JSON.parse(localStorage.getItem('user'))
+//   let locale = localStorage.getItem('locale')
+//   globalState.token = token;
+//   globalState.user = user;
+//   globalState.locale = locale;
+// }
 </script>
 
 <template>
diff --git a/zy-asrs-admin/src/locales/en_US.js b/zy-asrs-admin/src/locales/en_US.js
index 84de0af..24b1ea4 100644
--- a/zy-asrs-admin/src/locales/en_US.js
+++ b/zy-asrs-admin/src/locales/en_US.js
@@ -10,6 +10,7 @@
     'common.confirm':'Confirm',
     'common.cancel':'Cancel',
     'common.reset':'Reset',
+    'common.operation':'Operation',
     'common.username':'Username',
     'common.nickname':'Nickname',
     'common.sex':'Sex',
@@ -29,6 +30,7 @@
     'common.account.logout': 'Logout',
     'common.search.placeholder': 'Please enter search content',
     'common.loading.api.message': 'Calling Server...',
+    'common.loading': 'Loading',
     '':'',
     '':'',
     '':'',
@@ -128,4 +130,9 @@
     '':'',
     '':'',
     '':'',
+    'db.sys_host.name':'Name',
+    'db.sys_host.status':'Status',
+    'db.sys_host.create_time':'createTime',
+    'db.sys_host.update_time':'updateTime',
+    'db.sys_host.memo':'Memo',
 };
\ No newline at end of file
diff --git a/zy-asrs-admin/src/main.js b/zy-asrs-admin/src/main.js
index 06214a2..d2d1b27 100644
--- a/zy-asrs-admin/src/main.js
+++ b/zy-asrs-admin/src/main.js
@@ -5,11 +5,32 @@
 import router from './router'
 import Antd from 'ant-design-vue';
 import 'ant-design-vue/dist/reset.css';
+import { initRouter } from '@/router/index.js'
+import { globalState } from './config.js'
 
 const app = createApp(App)
 
-app.use(createPinia())
-app.use(router)
-app.use(Antd)
+const initToken = async () => {
+    if (globalState.token == '' || globalState.token == null) {
+        let token = localStorage.getItem('token')
+        let user = JSON.parse(localStorage.getItem('user'))
+        let locale = localStorage.getItem('locale')
+        globalState.token = token;
+        globalState.user = user;
+        globalState.locale = locale;
+    }
+}
 
-app.mount('#app')
+const boot = async () => {
+    await initToken();
+    await initRouter()
+
+    //wait route load
+    app.use(createPinia())
+    app.use(router)
+    app.use(Antd)
+    app.mount('#app')
+}
+boot()
+
+
diff --git a/zy-asrs-admin/src/router/index.js b/zy-asrs-admin/src/router/index.js
index 00836f2..8aa9191 100644
--- a/zy-asrs-admin/src/router/index.js
+++ b/zy-asrs-admin/src/router/index.js
@@ -1,9 +1,5 @@
 import { createRouter, createWebHistory } from 'vue-router'
-import HomeView from '../views/HomeView.vue'
-import MenuView from '../views/system/menu/index.vue'
-import LoginView from '../views/login/LoginView.vue'
-import UserLoginView from '../views/system/userLogin/index.vue'
-import UserView from '../views/system/user/index.vue'
+import { get } from '@/utils/request.js'
 
 const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
@@ -11,7 +7,7 @@
     {
       path: '/',
       name: '涓婚〉',
-      component: HomeView,
+      component: () => import('@/views/HomeView.vue'),
       meta: {
         keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
       },
@@ -19,33 +15,64 @@
     {
       path: '/login',
       name: '鐧诲綍',
-      component: LoginView,
+      component: () => import('@/views/login/LoginView.vue'),
     },
-    {
-      path: '/system/menu',
-      name: '鑿滃崟绠$悊',
-      component: MenuView,
-      meta: {
-        keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
-      },
-    },
-    {
-      path: '/system/userLogin',
-      name: '鐧诲綍鏃ュ織',
-      component: UserLoginView,
-      meta: {
-        keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
-      },
-    },
-    {
-      path: '/system/user',
-      name: '鐢ㄦ埛绠$悊',
-      component: UserView,
-      meta: {
-        keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
-      },
-    },
+
+    // {
+    //   path: '/system/menu',
+    //   name: '鑿滃崟绠$悊',
+    //   component: () => import('@/views/system/menu/index.vue'),
+    //   meta: {
+    //     keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
+    //   },
+    // },
+    // {
+    //   path: '/system/userLogin',
+    //   name: '鐧诲綍鏃ュ織',
+    //   component: () => import('@/views/system/userLogin/index.vue'),
+    //   meta: {
+    //     keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
+    //   },
+    // },
+    // {
+    //   path: '/system/user',
+    //   name: '鐢ㄦ埛绠$悊',
+    //   component: () => import('@/views/system/user/index.vue'),
+    //   meta: {
+    //     keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
+    //   },
+    // },
+    // {
+    //   path: '/system/host',
+    //   name: '鏈烘瀯绠$悊',
+    //   component: () => import('@/views/system/host/index.vue'),
+    //   meta: {
+    //     keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
+    //   },
+    // },
   ]
 })
 
+export const initRouter = async () => {
+  const modules = import.meta.glob('/src/views/**/index.vue');
+  const resp = await get('/api/auth/router', {});
+  let result = resp.data;
+  let data = result.data;
+  console.log(result);
+  data.forEach((item) => {
+    const module = modules[`/src/views${item.route}/index.vue`];
+    if (module) {
+      const itemRouter = {
+        path: item.route,
+        name: item.name,
+        component: module,
+        meta: {
+          keepAlive: true // 璁剧疆keepAlive锛岃姝よ矾鐢遍〉闈㈣缂撳瓨
+        }
+      }
+      router.addRoute(itemRouter)
+    }
+  })
+}
+
 export default router
diff --git a/zy-asrs-admin/src/utils/request.js b/zy-asrs-admin/src/utils/request.js
index 9b5bcd7..5287ee0 100644
--- a/zy-asrs-admin/src/utils/request.js
+++ b/zy-asrs-admin/src/utils/request.js
@@ -6,7 +6,7 @@
     timeout: 30000,
 })
 
-export const get = (url, params) => {
+export const get = async (url, params) => {
     return instance({
         url: url,
         method: 'get',
@@ -17,7 +17,7 @@
     })
 }
 
-export const post = (url, data) => {
+export const post = async (url, data) => {
     return instance({
         url: url,
         method: 'post',
@@ -28,7 +28,7 @@
     })
 }
 
-export const postBlob = (url, data) => {
+export const postBlob = async (url, data) => {
     return instance({
         url: url,
         method: 'post',
@@ -40,7 +40,7 @@
     })
 }
 
-export const postForm = (url, params) => {
+export const postForm = async (url, params) => {
     return instance({
         url: url,
         method: 'post',
diff --git a/zy-asrs-admin/src/views/IndexView.vue b/zy-asrs-admin/src/views/IndexView.vue
index 1f9f9f7..73729c8 100644
--- a/zy-asrs-admin/src/views/IndexView.vue
+++ b/zy-asrs-admin/src/views/IndexView.vue
@@ -1,9 +1,10 @@
 <script setup>
-import { nextTick, ref, inject, computed } from 'vue';
+import { nextTick, ref, inject } from 'vue';
 import { useRouter } from "vue-router";
-import { get, post } from '@/utils/request.js'
+import { get, post, postForm } from '@/utils/request.js'
 import { logout } from '@/config.js';
 import * as Icons from "@ant-design/icons-vue";
+import { message } from 'ant-design-vue';
 import {
   MenuUnfoldOutlined,
   MenuFoldOutlined,
@@ -30,22 +31,21 @@
 };
 
 getMenu()
-
 function getMenu() {
-  post('/api/menu/tree', {}).then((result) => {
-    console.log(result.data.data);
+  get('/api/auth/menu', {}).then((result) => {
     menuCache.value = result.data.data;
   })
 }
 
 function menuSelect(item) {
+  console.log(item.key);
   router.push({
     path: item.key
   })
 
   let name = item.item.name;
   currentCache.value = name;
-  console.log(routerCache.value);
+  // console.log(routerCache.value);
 
   if (name != undefined && routerCache.value.indexOf(name) == -1) {
     routerCache.value.push(item.item.name)
@@ -75,10 +75,18 @@
 }
 
 function reloadTabs() {
-  isRouterAlive.value = false;
-  nextTick(() => {
-    isRouterAlive.value = true;
-  })
+  const hide = message.loading(formatMessage('common.loading', '鍔犺浇涓�'));
+  try {
+    isRouterAlive.value = false;
+    nextTick(() => {
+      isRouterAlive.value = true;
+      message.success(formatMessage('common.success', '鍔犺浇鎴愬姛'));
+    })
+  } catch (error) {
+    message.error(formatMessage('common.fail', '鍔犺浇澶辫触'));
+  } finally {
+    hide();
+  }
 }
 
 function switchTabs(name) {
@@ -89,12 +97,15 @@
   currentCache.value = name;
   selectedKeys.value = [routerCacheMap.value.get(name)]
 
-  console.log(routerCacheMap, name, routerCacheMap.value.get(name));
+  // console.log(routerCacheMap, name, routerCacheMap.value.get(name));
 
 }
 
 const switchLocale = (locale) => {
   globalState.locale = locale;
+  localStorage.setItem('locale', locale)
+  reloadTabs()
+  console.log(locale);
 }
 
 </script>
@@ -107,7 +118,7 @@
         theme="dark" mode="inline">
         <div>
           <a-menu-item key="/" name="涓婚〉">
-            <HomeOutlined /> {{ formatMessage('common.home','涓婚〉') }}
+            <HomeOutlined /> {{ formatMessage('common.home', '涓婚〉') }}
           </a-menu-item>
         </div>
 
@@ -156,7 +167,7 @@
                 </a>
                 <template #overlay>
                   <a-menu @click="logout">
-                    <a-menu-item key="logout">{{ formatMessage('common.account.logout','閫�鍑�') }}</a-menu-item>
+                    <a-menu-item key="logout">{{ formatMessage('common.account.logout', '閫�鍑�') }}</a-menu-item>
                   </a-menu>
                 </template>
               </a-dropdown>
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java
index 2adb39a..b248609 100644
--- a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java
@@ -779,7 +779,7 @@
                 continue;
             }
             sb.append("        {\n")
-                    .append("            title: '").append(column.getComment()).append("',\n")
+                    .append("            title: formatMessage('db.").append(table).append(".").append(column.getName()).append("', '").append(column.getComment()).append("'),").append("\n")
                     .append("            dataIndex: '");
             if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums()) || !Cools.isEmpty(column.getForeignKeyMajor())){
                 // 鏃堕棿銆佹灇涓�  鏍煎紡鍖�  涓婚敭淇グ
diff --git a/zy-asrs-framework/src/main/resources/templates/vue/Index.txt b/zy-asrs-framework/src/main/resources/templates/vue/Index.txt
index 7c77fea..7c707ba 100644
--- a/zy-asrs-framework/src/main/resources/templates/vue/Index.txt
+++ b/zy-asrs-framework/src/main/resources/templates/vue/Index.txt
@@ -22,7 +22,7 @@
 const columns = [
 @{TABLECOLUMNS}
   {
-    title: '鎿嶄綔',
+    title: formatMessage('common.operation', '鎿嶄綔'),
     name: 'oper',
     dataIndex: 'oper',
     key: 'oper',
@@ -79,15 +79,21 @@
     content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
     maskClosable: true,
     onOk: async () => {
-      post('/api/@{SIMPLEENTITYNAME}/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
-        let result = resp.data;
-        if (result.code === 200) {
-          message.success(result.msg);
-        } else {
-          message.error(result.msg);
-        }
-        getPage()
-      })
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/@{SIMPLEENTITYNAME}/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
     },
   });
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
index 02cd552..2e20b41 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.wms.system.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.wms.common.annotation.OperationLog;
@@ -8,14 +9,8 @@
 import com.zy.asrs.wms.system.controller.param.LoginParam;
 import com.zy.asrs.wms.system.controller.param.UpdatePasswordParam;
 import com.zy.asrs.wms.system.controller.result.LoginResult;
-import com.zy.asrs.wms.system.entity.Host;
-import com.zy.asrs.wms.system.entity.Menu;
-import com.zy.asrs.wms.system.entity.User;
-import com.zy.asrs.wms.system.entity.UserLogin;
-import com.zy.asrs.wms.system.service.HostService;
-import com.zy.asrs.wms.system.service.RoleMenuService;
-import com.zy.asrs.wms.system.service.UserLoginService;
-import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.entity.*;
+import com.zy.asrs.wms.system.service.*;
 import com.zy.asrs.wms.utils.JwtUtil;
 import com.zy.asrs.wms.utils.Utils;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -23,6 +18,7 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -44,6 +40,10 @@
     private RoleMenuService roleMenuService;
     @Resource
     private HostService hostService;
+    @Resource
+    private UserRoleService userRoleService;
+    @Resource
+    private MenuService menuService;
 
     @PostMapping("/login")
     public R login(@RequestBody LoginParam param, HttpServletRequest request) {
@@ -122,4 +122,32 @@
         return R.error("淇敼澶辫触");
     }
 
+    @GetMapping("/auth/router")
+    public R router() {
+        List<UserRole> userRoles = userRoleService.list(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, getLoginUserId()));
+        if (userRoles.isEmpty()) {
+            return R.error();
+        }
+        ArrayList<Long> roles = new ArrayList<>();
+        for (UserRole userRole : userRoles) {
+            roles.add(userRole.getRoleId());
+        }
+
+        ArrayList<Long> menus = new ArrayList<>();
+        List<RoleMenu> roleMenus = roleMenuService.list(new LambdaQueryWrapper<RoleMenu>().in(RoleMenu::getRoleId, roles));
+        for (RoleMenu roleMenu : roleMenus) {
+            if(!menus.contains(roleMenu.getMenuId())) {
+                menus.add(roleMenu.getMenuId());
+            }
+        }
+
+        List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>()
+                .in(Menu::getId, menus)
+                .eq(Menu::getType, Menu.TYPE_MENU)
+                .eq(Menu::getPath, 1)
+                .orderByAsc(Menu::getId));
+
+        return R.ok().add(menuList);
+    }
+
 }

--
Gitblit v1.9.1