diff --git a/package.json b/package.json
index d4ad02b..c736e4d 100644
--- a/package.json
+++ b/package.json
@@ -12,9 +12,12 @@
"@element-plus/icons-vue": "^2.0.6",
"axios": "^0.27.2",
"core-js": "^3.8.3",
+ "driver.js": "^0.9.8",
"element-plus": "1.3.0-beta.5",
"lint-staged": "13.0.3",
+ "screenfull": "5.1.0",
"vue": "^3.2.13",
+ "vue-i18n": "^9.2.0-beta.40",
"vue-router": "^4.0.3",
"vuex": "^4.0.0"
},
@@ -28,7 +31,6 @@
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
- "@vue/composition-api": "^1.1.0",
"@vue/eslint-config-standard": "^6.1.0",
"cz-customizable": "^6.3.0",
"eslint": "^7.32.0",
diff --git a/src/i18n/en.js b/src/i18n/en.js
new file mode 100644
index 0000000..540a42a
--- /dev/null
+++ b/src/i18n/en.js
@@ -0,0 +1,45 @@
+export default {
+ menus: {
+ '/': 'home',
+ home: 'home',
+ users: 'users list',
+ roles: 'roles list',
+ rights: 'permission list',
+ goods: 'product list',
+ params: 'sorting list',
+ categories: 'goods category',
+ orders: 'order list',
+ reports: 'data report'
+ },
+ login: {
+ title: 'user login',
+ btnTitle: 'login'
+ },
+ dialog: {
+ deleteTitle: 'Are you sure you want to delete the user '
+ },
+ table: {
+ username: 'username',
+ email: 'email',
+ mobile: 'mobile',
+ role_name: 'role name',
+ mg_state: 'state',
+ create_time: 'create_time',
+ action: 'action',
+ search: 'search',
+ adduser: 'add user',
+ placeholder: 'Please enter a user name to search for'
+ },
+ message: {
+ updeteSuccess: 'update successfully'
+ },
+ driver: {
+ doneBtnText: 'done',
+ closeBtnText: 'close',
+ nextBtnText: 'next',
+ prevBtnText: 'prev',
+ guideBtn: 'guidebtn',
+ hamburgerBtn: 'hamburgerBtn',
+ fullScreen: 'fullScreen'
+ }
+}
diff --git a/src/i18n/i18nIndex.js b/src/i18n/i18nIndex.js
new file mode 100644
index 0000000..256151c
--- /dev/null
+++ b/src/i18n/i18nIndex.js
@@ -0,0 +1,32 @@
+import { createI18n } from 'vue-i18n'
+import EN from './en'
+import ZH from './zh'
+
+const messages = {
+ en: {
+ ...EN
+ },
+ zh: {
+ ...ZH
+ }
+}
+// 设置当前语言
+const getCurrentLanguage = () => {
+ // 浏览器设置语言
+ const UAlang = navigator.language
+ // 判断语言
+ const langCode = UAlang.indexOf('zh') !== -1 ? 'zh' : 'en'
+ // 缓存语言信息
+ localStorage.setItem('lang', langCode)
+ return langCode
+}
+
+// 创建 i18n 国际化
+const i18n = createI18n({
+ legacy: false,
+ globalInjection: true,
+ locale: getCurrentLanguage() || 'zh',
+ messages: messages
+})
+
+export default i18n
diff --git a/src/i18n/watchlang.js b/src/i18n/watchlang.js
new file mode 100644
index 0000000..4e6c5d7
--- /dev/null
+++ b/src/i18n/watchlang.js
@@ -0,0 +1,12 @@
+import { watch } from 'vue'
+import store from '@/store'
+
+export const watchLang = (...cbs) => {
+ watch(
+ () => store.getters.lang,
+ () => {
+ cbs.forEach((cb) => cb(store.getters.lang))
+ },
+ { deep: true }
+ )
+}
diff --git a/src/i18n/zh.js b/src/i18n/zh.js
new file mode 100644
index 0000000..8d3606b
--- /dev/null
+++ b/src/i18n/zh.js
@@ -0,0 +1,45 @@
+export default {
+ menus: {
+ '/': '首页',
+ home: '首页',
+ users: '用户列表',
+ roles: '角色列表',
+ rights: '权限列表',
+ goods: '商品列表',
+ params: '分类参数',
+ categories: '商品分类',
+ orders: '订单列表',
+ reports: '数据报表'
+ },
+ login: {
+ title: '用户登录',
+ btnTitle: '登录'
+ },
+ dialog: {
+ deleteTitle: '确定要删除用户'
+ },
+ table: {
+ username: '姓名',
+ email: '邮箱',
+ mobile: '手机',
+ role_name: '角色',
+ mg_state: '状态',
+ create_time: '创建时间',
+ action: '操作',
+ search: '搜索',
+ adduser: '添加用户',
+ placeholder: '请输入搜索的用户姓名'
+ },
+ message: {
+ updeteSuccess: '更新成功'
+ },
+ driver: {
+ doneBtnText: '完成',
+ closeBtnText: '关闭',
+ nextBtnText: '下一步',
+ prevBtnText: '上一步',
+ guideBtn: '引导按钮',
+ hamburgerBtn: '汉堡按钮',
+ fullScreen: '全屏按钮'
+ }
+}
diff --git a/src/layout/headers/components/breadCrumb.vue b/src/layout/headers/components/breadCrumb.vue
new file mode 100644
index 0000000..65b07f0
--- /dev/null
+++ b/src/layout/headers/components/breadCrumb.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+ {{ $t(`menus.${item.name}`) }}
+
+
+ {{ $t(`menus.${item.name}`) }}
+
+
+
+
+
+
+
diff --git a/src/layout/headers/components/driver/driverIndex.vue b/src/layout/headers/components/driver/driverIndex.vue
new file mode 100644
index 0000000..9317e18
--- /dev/null
+++ b/src/layout/headers/components/driver/driverIndex.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/headers/components/hamBurger.vue b/src/layout/headers/components/hamBurger.vue
new file mode 100644
index 0000000..297c03a
--- /dev/null
+++ b/src/layout/headers/components/hamBurger.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/headers/components/langChange.vue b/src/layout/headers/components/langChange.vue
new file mode 100644
index 0000000..352b6aa
--- /dev/null
+++ b/src/layout/headers/components/langChange.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 中文
+ English
+
+
+
+
+
+
+
+
diff --git a/src/layout/headers/components/screenFull.vue b/src/layout/headers/components/screenFull.vue
new file mode 100644
index 0000000..88fb919
--- /dev/null
+++ b/src/layout/headers/components/screenFull.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/headers/components/userAvatar.vue b/src/layout/headers/components/userAvatar.vue
new file mode 100644
index 0000000..b5b72b9
--- /dev/null
+++ b/src/layout/headers/components/userAvatar.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+ 退出
+
+
+
+
+
+
+
+
diff --git a/src/layout/headers/hearderIndex.vue b/src/layout/headers/hearderIndex.vue
new file mode 100644
index 0000000..72e0448
--- /dev/null
+++ b/src/layout/headers/hearderIndex.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
diff --git a/src/layout/layoutIndex.vue b/src/layout/layoutIndex.vue
index 61672fd..95f307f 100644
--- a/src/layout/layoutIndex.vue
+++ b/src/layout/layoutIndex.vue
@@ -1,10 +1,15 @@
-
diff --git a/src/layout/menu/menuIndex.vue b/src/layout/menu/menuIndex.vue
index 07a5e17..23f5f76 100644
--- a/src/layout/menu/menuIndex.vue
+++ b/src/layout/menu/menuIndex.vue
@@ -7,6 +7,7 @@
router
unique-opened
:default-active="defaultActive"
+ :collapse="!$store.getters.siderType"
>
{{ item.authName }}
- {{ it.authName }}
+ {{ $t(`menus.${it.path}`) }}
+
@@ -52,12 +55,12 @@ const initMenusList = async () => {
initMenusList()
// 配合重定向,默认进入 user 界面
-const defaultActive = ref('/menu/users')
+// const defaultActive = ref('/users')
-// const defaultActive = ref(sessionStorage.getItem('path') || '/users')
-// const savePath = (path) => {
-// sessionStorage.setItem('path', `/${path}`)
-// }
+const defaultActive = ref(sessionStorage.getItem('path') || '/users')
+const savePath = (path) => {
+ sessionStorage.setItem('path', `/${path}`)
+}
diff --git a/src/main.js b/src/main.js
index d7b8822..2c359ab 100644
--- a/src/main.js
+++ b/src/main.js
@@ -7,10 +7,11 @@ import SvgIcon from '@/icons/iconIndex'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import 'element-plus/dist/index.css'
import '@/router/premission'
+import i18n from './i18n/i18nIndex'
const app = createApp(App)
SvgIcon(app)
-app.use(store).use(router).mount('#app')
+app.use(store).use(router).use(i18n).mount('#app')
// 全局引入 Element 的 icon 组件
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
diff --git a/src/router/index.js b/src/router/index.js
index 2747070..7c61fe8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -15,25 +15,22 @@ const routes = [
// 登录路由
{
path: '/login',
+ name: 'Login',
component: zdLogin,
meta: {
title: '登录界面'
}
},
- // 将 / 重定向到 /login
+ // 首页菜单界面相关路由
{
path: '/',
- redirect: '/login'
- },
- // 菜单界面相关路由
- {
- path: '/menu',
+ name: '/',
component: layoutIndex,
meta: {
title: '菜单界面'
},
// 重定向,默认到 菜单界面的 user 分支
- redirect: '/menu/users',
+ redirect: '/users',
children: [
{
path: 'users',
diff --git a/src/router/premission.js b/src/router/premission.js
index cafd9b5..0682a1c 100644
--- a/src/router/premission.js
+++ b/src/router/premission.js
@@ -6,7 +6,7 @@ const whiteList = ['/login']
router.beforeEach((to, from, next) => {
if (store.getters.token) {
if (to.path === '/login') {
- next('/menu')
+ next('/')
} else {
next()
}
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index 1039f7e..35c3b5c 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -4,11 +4,25 @@ import { setTokenTime } from '@/utils/auth'
export default {
namespaced: true,
- state: () => ({ token: localStorage.getItem('token') || '' }),
+ state: () => ({
+ token: localStorage.getItem('token') || '',
+ // 定义菜单收缩按钮的值
+ siderType: true,
+ //
+ lang: localStorage.getItem('lang') || 'zh'
+ }),
mutations: {
setToken(state, token) {
state.token = token
localStorage.setItem('token', token)
+ },
+ // 菜单收缩按钮的事件
+ changeSiderType(state) {
+ state.siderType = !state.siderType
+ },
+ // 切换语言显示
+ changeLang(state, lang) {
+ state.lang = lang
}
},
actions: {
@@ -19,7 +33,7 @@ export default {
console.log(res)
commit('setToken', res.token)
setTokenTime()
- router.replace('/menu')
+ router.replace('/')
resolve()
})
.catch((err) => {
diff --git a/src/views/login/zdLogin.vue b/src/views/login/zdLogin.vue
index 390fcbe..99d6e11 100644
--- a/src/views/login/zdLogin.vue
+++ b/src/views/login/zdLogin.vue
@@ -2,7 +2,7 @@
-
用户登录
+ {{ $t('login.title') }}
@@ -26,7 +26,7 @@
- 登录
+ {{ $t('login.btnTitle') }}
@@ -104,14 +104,14 @@ $cursor: #fff;
margin: 0 auto;
overflow: hidden;
- ::v-deep(.el-form-item) {
+ :deep(.el-form-item) {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 5px;
color: #454545;
}
- ::v-deep(.el-input) {
+ :deep(.el-input) {
display: inline-block;
height: 47px;
width: 85%;
@@ -164,7 +164,7 @@ $cursor: #fff;
font-weight: bold;
}
- ::v-deep(.lang-select) {
+ :deep(.lang-select) {
position: absolute;
top: 4px;
right: 0;
diff --git a/vue.config.js b/vue.config.js
index 4f6f9ff..07fd7e3 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -87,8 +87,8 @@ module.exports = {
sass: {
// 12版本用 additionalData:
additionalData: `
- @import "@/styles/variables.scss"; // scss文件地址
- @import "@/styles/mixin.scss"; // scss文件地址
+ @import "@/styles/variables.scss";
+ @import "@/styles/mixin.scss";
`
}
}
diff --git a/yarn.lock b/yarn.lock
index 2c08da2..fe24a51 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1158,6 +1158,44 @@
resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@intlify/core-base@9.2.0-beta.40":
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.0-beta.40.tgz#85df2e183b2102716c5d40795848fc2359354580"
+ integrity sha512-vOR0lHgtJ3IkzvXLeMQeNeYreFSKG9v3SU8QOD//WKHdBy4QPISs9CZJkYzBeBVCJVZ/eM6OTSbXF8M2k53iCw==
+ dependencies:
+ "@intlify/devtools-if" "9.2.0-beta.40"
+ "@intlify/message-compiler" "9.2.0-beta.40"
+ "@intlify/shared" "9.2.0-beta.40"
+ "@intlify/vue-devtools" "9.2.0-beta.40"
+
+"@intlify/devtools-if@9.2.0-beta.40":
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.0-beta.40.tgz#bee42fefaaaa590aa5ac7fe2a98777fb84bfaf5e"
+ integrity sha512-EUiuLxlgortD1dhT0btm3YYIs2vk9kMdcGXiYYbHWRTylc8Iv7Yz47y5Y+IlbZzk51h/nYvuqXE1h9diZZWAvQ==
+ dependencies:
+ "@intlify/shared" "9.2.0-beta.40"
+
+"@intlify/message-compiler@9.2.0-beta.40":
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.0-beta.40.tgz#d5d0c5652b9e74e0b4da07a2b8731e1f0e729029"
+ integrity sha512-6QWTSYewmkew4nsRqgkwTVuGFKzxVCOK8EXsPt15N+tN1g+OYjC3PfGA2dPB6cVkNxqA9mV/hNK02uHPWU9t0A==
+ dependencies:
+ "@intlify/shared" "9.2.0-beta.40"
+ source-map "0.6.1"
+
+"@intlify/shared@9.2.0-beta.40":
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.0-beta.40.tgz#a850936008e6e865310b2a49136d494dd326faab"
+ integrity sha512-xWz+SFjgt/LfaSbbHVn+V7gmvX4ZNP3cIFta790GWZ/tEgwJeC3tkV7i45iUbZ4ZimOerFgKH05b7qvJlKb6RQ==
+
+"@intlify/vue-devtools@9.2.0-beta.40":
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.0-beta.40.tgz#37457fd719b0b6afb0679c33ceb47b0ac77f457c"
+ integrity sha512-3A0D/E9quf+KWonzXUDk3xNP0+d1DMdtAwyXNTjzFcQPvjugC2Xn6fmsd0kNn7nHjgpB+vwIuamGiuE+S+OULw==
+ dependencies:
+ "@intlify/core-base" "9.2.0-beta.40"
+ "@intlify/shared" "9.2.0-beta.40"
+
"@jridgewell/gen-mapping@^0.1.0":
version "0.1.1"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
@@ -1759,12 +1797,7 @@
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
-"@vue/composition-api@^1.1.0":
- version "1.7.0"
- resolved "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.0.tgz#26fae79e5023fc6c9dfd99ca5d3d357e1c5b9c60"
- integrity sha512-hxOgLYR+wjuPX9bkP2pAPlqUs98XxBoa9DSLyp1z6+YR92wC42PZcZKs4d+VRtcv4udOv041Kss+F6ap5nj8YA==
-
-"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.1.4":
+"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1":
version "6.2.1"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
@@ -3410,6 +3443,11 @@ dotenv@^10.0.0:
resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+driver.js@^0.9.8:
+ version "0.9.8"
+ resolved "https://registry.npmmirror.com/driver.js/-/driver.js-0.9.8.tgz#4b327f4537b1c9b9fb19419de86174be821ae32a"
+ integrity sha512-bczjyKdX6XmFyCDkwtRmlaORDwfBk1xXmRO0CAe5VwNQTM98aWaG2LAIiIdTe53iV/B7W5lXlIy2xYtf0JRb7Q==
+
duplexer@^0.1.2:
version "0.1.2"
resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
@@ -7047,6 +7085,11 @@ schema-utils@^4.0.0:
ajv-formats "^2.1.1"
ajv-keywords "^5.0.0"
+screenfull@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8"
+ integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA==
+
scule@^0.2.1:
version "0.2.1"
resolved "https://registry.npmmirror.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc"
@@ -7320,16 +7363,16 @@ source-map-url@^0.4.0:
resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
@@ -8142,6 +8185,16 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
+vue-i18n@^9.2.0-beta.40:
+ version "9.2.0-beta.40"
+ resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.0-beta.40.tgz#8088b19d619f47bf0e0f529f9bd1413460f2ff56"
+ integrity sha512-UwcGsbTTaDJry6BbFFzt115EVHN/bXi07DyUIZ4zrYeGMBPp2QAptMwVaGUQid1gaMmUreAKarGIqw46oCQEvg==
+ dependencies:
+ "@intlify/core-base" "9.2.0-beta.40"
+ "@intlify/shared" "9.2.0-beta.40"
+ "@intlify/vue-devtools" "9.2.0-beta.40"
+ "@vue/devtools-api" "^6.2.1"
+
vue-loader@^17.0.0:
version "17.0.0"
resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.0.0.tgz#2eaa80aab125b19f00faa794b5bd867b17f85acb"