zs 1 rok pred
rodič
commit
f005186de3

+ 5 - 1
src/lang/package/zh-cn/pages.js

@@ -1,6 +1,7 @@
 export default {
   menus: {
     dialogTitle: '菜单信息',
+    is_default: '是否默认',
     name: '菜单名称',
     namePh: '请填写菜单名称',
     route_name: '路由名称',
@@ -21,6 +22,9 @@ export default {
     remark: '备注',
     remarkPh: '请输入备注',
     addNext: '添加下一级',
-    baseInfo: '基本信息'
+    baseInfo: '基本信息',
+    configInfo: '功能列表',
+    config_zh: '功能说明',
+    config_code: '功能编码'
   }
 }

+ 38 - 31
src/router/guard.js

@@ -31,37 +31,6 @@ const getUserMeta = async (token) => {
     return result.data.menus
   }
 }
-// 注册前置守卫
-export const registerBeforeRouter = async (router) => {
-  router.beforeEach(async (to, from, next) => {
-    NProgress.start(); //开启进度条
-    const token = localStorage.getItem('token')
-    if (to.path === '/login') {
-      next()
-      return
-    }
-    if (token) {
-      if (to.path === '/login') next()
-      const menus = await getUserMeta(token)
-      // 检查目的地路由是否注册
-      const hasRoute = hasNecessaryRoute(to, router)
-      if (hasRoute) {
-        // 注册了直接进入
-        next()
-      } else {
-        // 没注册就先注册再重定向进入直到进入为止
-        await addUserRoutes(menus, router)
-        next({ ...to, replace: true })
-      }
-    } else {
-      next('/login')
-      NProgress.done()
-    }
-  })
-  router.afterEach(() => {
-    NProgress.done(); //完成进度条
-  });
-}
 /**
  * 将路由数组一维化
  * @param {Array} routes 路由数组
@@ -146,3 +115,41 @@ const resetMenus = (menus) => {
   }
   return result
 }
+
+// 注册前置守卫
+export const registerBeforeRouter = async (router) => {
+  router.beforeEach(async (to, from, next) => {
+    NProgress.start(); //开启进度条
+    const token = localStorage.getItem('token')
+    if (to.path === '/login') {
+      next()
+      return
+    }
+    if (token) {
+      if (to.path === '/login') next()
+      const menus = await getUserMeta(token)
+      // 检查目的地路由是否注册
+      const hasRoute = hasNecessaryRoute(to, router)
+      if (hasRoute) {
+        // 注册了直接进入
+        next()
+      } else {
+        // 没注册就先注册再重定向进入直到进入为止
+        await addUserRoutes(menus, router)
+        next({ ...to, replace: true })
+      }
+    } else {
+      next('/login')
+    }
+  })
+}
+
+// 注册路由后置守卫
+
+export const registerAfterRouter = async (router) => {
+  router.afterEach((to, form) => {
+    NProgress.done(); //完成进度条
+    if (to.path === '/login') return
+    // 请求该页面的权限
+  })
+}

+ 2 - 1
src/router/index.js

@@ -1,5 +1,5 @@
 import { createRouter, createWebHistory } from 'vue-router'
-import { registerBeforeRouter } from './guard'
+import { registerBeforeRouter, registerAfterRouter } from './guard'
 export const homeIndex = () => import('@/views/home/index.vue')
 export const Layout = () => import('@/layout/index.vue')
 import i18n from '@/lang'
@@ -62,4 +62,5 @@ const router = createRouter({
   scrollBehavior: () => ({ left: 0, top: 0 })
 })
 registerBeforeRouter(router)
+registerAfterRouter(router)
 export default router

+ 8 - 28
src/views/system/menus/parts/menu-info.vue

@@ -1,38 +1,16 @@
 <template>
   <el-tabs v-model="tab" type="card">
     <el-tab-pane :label="$t('pages.menus.baseInfo')" name="basic">
-      <info v-bind="$attrs"></info>
+      <info></info>
     </el-tab-pane>
 
-    <!-- <el-tab-pane label="设置" name="config" v-if="form.type && form.type !== '0'">
-          <el-row>
-            <el-col :span="24" style="text-align: right; margin: 10px 0">
-              <el-button size="mini" type="primary" @click="toAddConfig()">添加功能</el-button>
-            </el-col>
-            <el-col :span="24">
-              <el-table :data="form.config">
-                <el-table-column align="center" label="中文">
-                  <template #default="{ row }">
-                    <el-input v-model="row.zh"></el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column align="center" label="code">
-                  <template #default="{ row }">
-                    <el-input v-model="row.code"></el-input>
-                  </template>
-                </el-table-column>
-                <el-table-column align="center" label="操作">
-                  <template #default="{ $index }">
-                    <el-button size="mini" type="danger" @click="deleteConfig($index)">删除</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </el-col>
-          </el-row>
-        </el-tab-pane> -->
+    <el-tab-pane :label="$t('pages.menus.configInfo')" name="config" v-if="form.type && form.type !== '0'">
+      <!-- 不在功能列表的功能不能被使用 -->
+      <func></func>
+    </el-tab-pane>
   </el-tabs>
   <el-row type="flex" justify="space-around" style="margin-top: 10px">
-    <el-col :span="6">
+    <el-col :span="6" style="text-align: center">
       <el-button @click="toSave" size="small" type="primary">{{ $t('common.save') }}</el-button>
     </el-col>
   </el-row>
@@ -40,6 +18,8 @@
 
 <script setup>
 import info from './parts/info.vue'
+import func from './parts/func.vue'
+const form = inject('form')
 const tab = ref('basic')
 const toSave = inject('toSave')
 </script>

+ 3 - 1
src/views/system/menus/parts/menu-table.vue

@@ -25,7 +25,9 @@
           <el-link :underline="false" type="primary" size="mini" @click="toAddNext(row)" style="margin-right: 10px">
             {{ $t('pages.menus.addNext') }}
           </el-link>
-          <el-link :underline="false" type="danger" size="mini" @click="toDelete(row)">{{ $t('common.delete') }}</el-link>
+          <el-link v-if="row.is_default !== '0'" :underline="false" type="danger" size="mini" @click="toDelete(row)">
+            {{ $t('common.delete') }}
+          </el-link>
         </template>
       </el-table-column>
     </el-table>

+ 34 - 4
src/views/system/menus/parts/parts/func.vue

@@ -1,8 +1,38 @@
 <template>
-  <div id="func">
-    <p>func</p>
-  </div>
+  <el-row>
+    <el-col :span="24" style="text-align: right; margin: 10px 0">
+      <el-button size="mini" type="primary" @click="toAddConfig()">添加功能</el-button>
+    </el-col>
+    <el-col :span="24">
+      <el-table :data="form.config">
+        <el-table-column align="center" :label="$t('pages.menus.config_zh')">
+          <template #default="{ row }">
+            <el-input v-model="row.zh"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" :label="$t('pages.menus.config_code')">
+          <template #default="{ row }">
+            <el-input v-model="row.code"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" :label="$t('common.opera')">
+          <template #default="{ $index }">
+            <el-button size="mini" type="danger" @click="deleteConfig($index)">{{ $t('common.delete') }}</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-col>
+  </el-row>
 </template>
 
-<script setup></script>
+<script setup>
+const form = inject('form')
+const toAddConfig = () => {
+  if (!form.value.config) form.value.config = []
+  form.value.config.push({})
+}
+const deleteConfig = (index) => {
+  form.value.config.splice(index, 1)
+}
+</script>
 <style scoped></style>

+ 8 - 0
src/views/system/menus/parts/parts/info.vue

@@ -1,5 +1,12 @@
 <template>
   <el-form label-position="left" label-width="100px">
+    <!-- 开发模式下显示该字段.即非开发模式下.所有的菜单都是非默认的 -->
+    <el-form-item v-if="is_dev" :label="$t('pages.menus.is_default')">
+      <el-radio-group v-model="form.is_default">
+        <el-radio label="0">{{ $t('common.yes') }}</el-radio>
+        <el-radio label="1">{{ $t('common.no') }}</el-radio>
+      </el-radio-group>
+    </el-form-item>
     <el-form-item :label="$t('pages.menus.name')">
       <el-input v-model="form.name" :placeholder="$t('pages.menus.namePh')"></el-input>
     </el-form-item>
@@ -56,6 +63,7 @@ import { cloneDeep } from 'lodash-es'
 const menuTree = inject('menuTree')
 const typeList = inject('typeList')
 const form = inject('form')
+const is_dev = import.meta.env.MODE === 'development'
 
 // #region 整理数组
 const getOneDimensionList = () => {