lrf 1 년 전
부모
커밋
056f68e645

+ 2 - 1
.eslintrc-auto-import.json

@@ -282,6 +282,7 @@
     "whenever": true,
     "whenever": true,
     "defineStore": true,
     "defineStore": true,
     "useRoute": true,
     "useRoute": true,
-    "useRouter": true
+    "useRouter": true,
+    "useI18n": true 
   }
   }
 }
 }

+ 0 - 1
src/lang/index.js

@@ -4,7 +4,6 @@ import { createI18n } from 'vue-i18n'
 // t('key.target')取值
 // t('key.target')取值
 import enLocale from './package/en'
 import enLocale from './package/en'
 import zhCnLocale from './package/zh-cn'
 import zhCnLocale from './package/zh-cn'
-
 const messages = {
 const messages = {
   'zh-cn': {
   'zh-cn': {
     ...zhCnLocale
     ...zhCnLocale

+ 7 - 43
src/lang/package/en.js

@@ -1,44 +1,8 @@
-export default {
-  // 路由国际化
-  route: {
-    dashboard: 'home',
-    document: 'Document'
-  },
-  // 登录页面国际化
-  login: {
-    title: 'Information Technology Incubation Platform',
-    username: 'Username',
-    password: 'Password',
-    login: 'Login',
-    captchaCode: 'Verify Code',
-    placeholder1: 'please select your username',
-    placeholder2: 'please select your password'
-  },
-  // 导航栏国际化
-  navbar: {
-    dashboard: 'Dashboard',
-    logout: 'Logout',
-    my: 'Personal Center',
-    document: 'Document',
-    gitee: 'Gitee'
-  },
-  ErrorMessage: {
-    UNKNOW: 'unknow',
-    BADPARAM: 'bad param',
-    NETWORK: 'network',
-    JSON_ERROR: 'json error',
-    USER_NOT_EXIST: 'user not exist',
-    BAD_PASSWORD: 'bad password',
-    NOT_LOGIN: 'not login',
-    ACCESS_DENIED: 'access denied',
-    DATA_NOT_EXIST: 'data not exist',
-    DATA_EXISTED: 'data existed',
-    DATA_INVALID: 'data invalid',
-    VERIFYCODE_INVALID: 'verifycode invalid',
-    SERVICE_FAULT: 'service fault',
-    DATABASE_FAULT: 'database fault',
-    FILE_FAULT: 'file fault',
-    USER_NOT_BIND: 'user not bind',
-    BUSINESS: 'business error'
-  }
+const allModules = import.meta.glob('./en/*.js', { eager: true })
+const keys = Object.keys(allModules)
+const packages = {}
+for (const key of keys) {
+  const name = key.substring(key.lastIndexOf('/') + 1, key.lastIndexOf('.js'))
+  packages[name] = allModules[key].default
 }
 }
+export default packages

+ 19 - 0
src/lang/package/en/errorMessage.js

@@ -0,0 +1,19 @@
+export default {
+  UNKNOW: 'unknow',
+  BADPARAM: 'bad param',
+  NETWORK: 'network',
+  JSON_ERROR: 'json error',
+  USER_NOT_EXIST: 'user not exist',
+  BAD_PASSWORD: 'bad password',
+  NOT_LOGIN: 'not login',
+  ACCESS_DENIED: 'access denied',
+  DATA_NOT_EXIST: 'data not exist',
+  DATA_EXISTED: 'data existed',
+  DATA_INVALID: 'data invalid',
+  VERIFYCODE_INVALID: 'verifycode invalid',
+  SERVICE_FAULT: 'service fault',
+  DATABASE_FAULT: 'database fault',
+  FILE_FAULT: 'file fault',
+  USER_NOT_BIND: 'user not bind',
+  BUSINESS: 'business error'
+}

+ 10 - 0
src/lang/package/en/login.js

@@ -0,0 +1,10 @@
+// 登录页面国际化
+export default {
+  title: 'Information Technology Incubation Platform',
+  username: 'Username',
+  password: 'Password',
+  login: 'Login',
+  captchaCode: 'Verify Code',
+  placeholder1: 'please select your username',
+  placeholder2: 'please select your password'
+}

+ 6 - 0
src/lang/package/en/navbar.js

@@ -0,0 +1,6 @@
+// 导航栏国际化
+export default {
+  dashboard: 'Dashboard',
+  logout: 'Logout',
+  my: 'Personal Center'
+}

+ 6 - 0
src/lang/package/en/pages.js

@@ -0,0 +1,6 @@
+export default {
+  menus: {
+    name: '菜单名称',
+    parent_name: '父级菜单'
+  }
+}

+ 12 - 0
src/lang/package/en/route.js

@@ -0,0 +1,12 @@
+export default {
+  dashboard: 'home',
+  document: 'Document',
+  login: '账号登录',
+  system: '系统设置',
+  menus: '菜单设置',
+  role: '角色管理',
+  dict: '字典管理',
+  dictData: '字典数据管理',
+  config: '平台设置',
+  module: '模块设置'
+}

+ 7 - 51
src/lang/package/zh-cn.js

@@ -1,52 +1,8 @@
-export default {
-  // 路由国际化
-  route: {
-    dashboard: '首页',
-    login: '账号登录',
-    document: '项目文档',
-    system: '系统设置',
-    menus: '菜单设置',
-    role: '角色管理',
-    dict: '字典管理',
-    dictData: '字典数据管理',
-    config: '平台设置',
-    module: '模块设置'
-  },
-  // 登录页面国际化
-  login: {
-    title: '新一代信息技术孵化平台',
-    username: '用户名',
-    password: '密码',
-    login: '登 录',
-    captchaCode: '验证码',
-    placeholder1: '请输入用户名',
-    placeholder2: '请输入密码'
-  },
-  // 导航栏国际化
-  navbar: {
-    dashboard: '首页',
-    logout: '注销',
-    my: '个人中心',
-    document: '项目文档',
-    gitee: '码云'
-  },
-  ErrorMessage: {
-    UNKNOW: '系统错误',
-    BADPARAM: '参数错误',
-    NETWORK: '网络错误',
-    JSON_ERROR: 'JSON错误',
-    USER_NOT_EXIST: '用户不存在',
-    BAD_PASSWORD: '密码错误',
-    NOT_LOGIN: '未登录',
-    ACCESS_DENIED: '禁止访问',
-    DATA_NOT_EXIST: '数据不存在',
-    DATA_EXISTED: '数据已存在',
-    DATA_INVALID: '无效数据',
-    VERIFYCODE_INVALID: '验证码无效',
-    SERVICE_FAULT: '服务错误',
-    DATABASE_FAULT: '数据库错误',
-    FILE_FAULT: '文件错误',
-    USER_NOT_BIND: '用户未绑定',
-    BUSINESS: '业务错误'
-  }
+const allModules = import.meta.glob('./zh-cn/*.js', { eager: true })
+const keys = Object.keys(allModules)
+const packages = {}
+for (const key of keys) {
+  const name = key.substring(key.lastIndexOf('/') + 1, key.lastIndexOf('.js'))
+  packages[name] = allModules[key].default
 }
 }
+export default packages

+ 10 - 0
src/lang/package/zh-cn/common.js

@@ -0,0 +1,10 @@
+export default {
+  opera: '操作',
+  add: '添加',
+  update: '修改',
+  delete: '删除',
+  search: '查询',
+  view: '查看',
+  is_use_use: '启用',
+  is_use_notUse: '禁用'
+}

+ 19 - 0
src/lang/package/zh-cn/errorMessage.js

@@ -0,0 +1,19 @@
+export default {
+  UNKNOW: '系统错误',
+  BADPARAM: '参数错误',
+  NETWORK: '网络错误',
+  JSON_ERROR: 'JSON错误',
+  USER_NOT_EXIST: '用户不存在',
+  BAD_PASSWORD: '密码错误',
+  NOT_LOGIN: '未登录',
+  ACCESS_DENIED: '禁止访问',
+  DATA_NOT_EXIST: '数据不存在',
+  DATA_EXISTED: '数据已存在',
+  DATA_INVALID: '无效数据',
+  VERIFYCODE_INVALID: '验证码无效',
+  SERVICE_FAULT: '服务错误',
+  DATABASE_FAULT: '数据库错误',
+  FILE_FAULT: '文件错误',
+  USER_NOT_BIND: '用户未绑定',
+  BUSINESS: '业务错误'
+}

+ 10 - 0
src/lang/package/zh-cn/login.js

@@ -0,0 +1,10 @@
+// 登录页面国际化
+export default {
+  title: '新一代信息技术孵化平台',
+  username: '用户名',
+  password: '密码',
+  login: '登 录',
+  captchaCode: '验证码',
+  placeholder1: '请输入用户名',
+  placeholder2: '请输入密码'
+}

+ 6 - 0
src/lang/package/zh-cn/navbar.js

@@ -0,0 +1,6 @@
+// 导航栏国际化
+export default {
+  dashboard: '首页',
+  logout: '注销',
+  my: '个人中心'
+}

+ 15 - 0
src/lang/package/zh-cn/pages.js

@@ -0,0 +1,15 @@
+export default {
+  menus: {
+    dialogTitle: '菜单信息',
+    name: '菜单名称',
+    parentName: '父级菜单',
+    icon: '图标',
+    order_num: '顺序',
+    path: '路由地址',
+    component: '组件地址',
+    type: '菜单类型',
+    is_use: '状态',
+    remark: '备注',
+    addNext: '添加下一级'
+  }
+}

+ 12 - 0
src/lang/package/zh-cn/route.js

@@ -0,0 +1,12 @@
+export default {
+  dashboard: '首页',
+  login: '账号登录',
+  document: '项目文档',
+  system: '系统设置',
+  menus: '菜单设置',
+  role: '角色管理',
+  dict: '字典管理',
+  dictData: '字典数据管理',
+  config: '平台设置',
+  module: '模块设置'
+}

+ 1 - 2
src/router/guard.js

@@ -42,7 +42,6 @@ export const registerBeforeRouter = async (router) => {
       const menus = await getUserMeta(token)
       const menus = await getUserMeta(token)
       // 检查目的地路由是否注册
       // 检查目的地路由是否注册
       const hasRoute = hasNecessaryRoute(to, router)
       const hasRoute = hasNecessaryRoute(to, router)
-      console.log(hasRoute)
       if (hasRoute) {
       if (hasRoute) {
         // 注册了直接进入
         // 注册了直接进入
         next()
         next()
@@ -97,7 +96,7 @@ export const addUserRoutes = async (menus, router) => {
         meta: {
         meta: {
           title,
           title,
           affix: false,
           affix: false,
-          keepAlive: true,
+          keepAlive: false,
           alwaysShow: false
           alwaysShow: false
         }
         }
       }
       }

+ 1 - 1
src/views/system/menus/index.vue

@@ -7,7 +7,7 @@
       <menu-table></menu-table>
       <menu-table></menu-table>
     </el-col>
     </el-col>
   </el-row>
   </el-row>
-  <el-dialog v-model="dialog" title="菜单信息" :destroy-on-close="false" @close="toClose">
+  <el-dialog v-model="dialog" :title="$t('pages.menus.dialogTitle')" :destroy-on-close="false" @close="toClose">
     <menu-info></menu-info>
     <menu-info></menu-info>
   </el-dialog>
   </el-dialog>
 </template>
 </template>

+ 18 - 15
src/views/system/menus/parts/menu-table.vue

@@ -1,26 +1,28 @@
 <template>
 <template>
   <div id="menu-table">
   <div id="menu-table">
     <el-table :data="data" row-key="_id" border>
     <el-table :data="data" row-key="_id" border>
-      <el-table-column align="center" label="菜单名称" prop="name"></el-table-column>
-      <el-table-column align="center" label="父级菜单" prop="parent_name"></el-table-column>
-      <el-table-column align="center" label="图标" width="80">
+      <el-table-column align="center" :label="$t('pages.menus.name')" prop="name"></el-table-column>
+      <el-table-column align="center" :label="$t('pages.menus.parentName')" prop="parent_name"></el-table-column>
+      <el-table-column align="center" :label="$t('pages.menus.icon')" width="80">
         <template #default="{ row }"><span :class="['iconfont', row.icon]"></span></template>
         <template #default="{ row }"><span :class="['iconfont', row.icon]"></span></template>
       </el-table-column>
       </el-table-column>
-      <el-table-column align="center" label="顺序" sortable prop="order_num" width="80"></el-table-column>
-      <el-table-column align="center" label="路由地址" prop="path"></el-table-column>
-      <el-table-column align="center" label="组件地址" prop="component"></el-table-column>
-      <el-table-column align="center" label="菜单类型" prop="type">
+      <el-table-column align="center" :label="$t('pages.menus.order_num')" sortable prop="order_num" width="80"></el-table-column>
+      <el-table-column align="center" :label="$t('pages.menus.path')" prop="path"></el-table-column>
+      <el-table-column align="center" :label="$t('pages.menus.component')" prop="component"></el-table-column>
+      <el-table-column align="center" :label="$t('pages.menus.parentName')" prop="type">
         <template #default="{ row }">{{ getType(row) }} </template>
         <template #default="{ row }">{{ getType(row) }} </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column align="center" label="状态" prop="is_use" width="80">
+      <el-table-column align="center" :label="$t('pages.menus.is_use')" prop="is_use" width="80">
         <template #default="{ row }">{{ getStatus(row) }} </template>
         <template #default="{ row }">{{ getStatus(row) }} </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column align="center" label="备注" prop="remark"> </el-table-column>
-      <el-table-column align="center" label="操作">
+      <el-table-column align="center" :label="$t('pages.menus.remark')" prop="remark"> </el-table-column>
+      <el-table-column align="center" :label="$t('common.opera')">
         <template #default="{ row }">
         <template #default="{ row }">
-          <el-link :underline="false" type="primary" size="mini" @click="toUpdate(row)" style="margin-right: 10px">修改</el-link>
-          <el-link :underline="false" type="primary" size="mini" @click="toAddNext(row)" style="margin-right: 10px">添加下一级</el-link>
-          <el-link :underline="false" type="danger" size="mini" @click="toDelete(row)">删除</el-link>
+          <el-link :underline="false" type="primary" size="mini" @click="toUpdate(row)" style="margin-right: 10px">{{ $t('common.update') }}</el-link>
+          <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>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
@@ -33,6 +35,7 @@ const typeList = inject('typeList', [])
 const toUpdate = inject('toUpdate')
 const toUpdate = inject('toUpdate')
 const toAddNext = inject('toAddNext')
 const toAddNext = inject('toAddNext')
 const toDelete = inject('toDelete')
 const toDelete = inject('toDelete')
+const { t } = useI18n()
 const getType = (row) => {
 const getType = (row) => {
   let word = ''
   let word = ''
   const r = typeList.find((f) => f.value === row.type)
   const r = typeList.find((f) => f.value === row.type)
@@ -43,10 +46,10 @@ const getStatus = (row) => {
   let word = ''
   let word = ''
   switch (row.is_use) {
   switch (row.is_use) {
     case '0':
     case '0':
-      word = '启用'
+      word = t('common.is_use_use')
       break
       break
     case '1':
     case '1':
-      word = '禁用'
+      word = t('common.is_use_notUse')
       break
       break
 
 
     default:
     default:

+ 1 - 1
src/views/system/menus/parts/parts/info.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <el-form label-position="left" label-width="80px">
   <el-form label-position="left" label-width="80px">
-    <el-form-item label="菜单名称">
+    <el-form-item :label="$t('pages.menus.name')">
       <el-input v-model="form.name" placeholder="请填写菜单名称"></el-input>
       <el-input v-model="form.name" placeholder="请填写菜单名称"></el-input>
     </el-form-item>
     </el-form-item>
     <el-form-item label="菜单类型">
     <el-form-item label="菜单类型">