From 000b87eb92ae41beb83e71c12d5ce8f41162e2c0 Mon Sep 17 00:00:00 2001 From: sheng <905537351@qq.com> Date: Wed, 27 May 2026 16:42:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=B3=A8=E9=94=80=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=8E=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增项目logo文件 2. 调整API基础地址与开发代理配置 3. 添加多语言登录相关文案 4. 新增登录注销API接口 5. 重构请求与账号登录注销逻辑 6. 更新文档与菜单store状态 --- .env | 2 +- .env.development | 3 + docs/login-page-migration.md | 8 +- public/image/logo/sc_logo.png | Bin 0 -> 9478 bytes src/api/_service.js | 6 +- src/api/auth.js | 33 ++++++ src/locales/en.json | 13 +++ src/locales/zh-chs.json | 13 +++ src/store/modules/d2admin/modules/account.js | 106 +++++++++++++------ src/store/modules/d2admin/modules/menu.js | 17 ++- vue.config.js | 9 ++ 11 files changed, 166 insertions(+), 44 deletions(-) create mode 100644 public/image/logo/sc_logo.png create mode 100644 src/api/auth.js diff --git a/.env b/.env index 25fd33e0..b702f2e9 100644 --- a/.env +++ b/.env @@ -4,7 +4,7 @@ VUE_APP_TITLE=D2Admin # 网络请求公用地址 -VUE_APP_API=/api/ +VUE_APP_API=/background/v1/ # 仓库地址 VUE_APP_REPO=https://github.com/d2-projects/d2-admin diff --git a/.env.development b/.env.development index c126ecf1..0674e47e 100644 --- a/.env.development +++ b/.env.development @@ -2,3 +2,6 @@ # 页面 title 前缀 VUE_APP_TITLE=D2Admin Dev + +# 后台接口地址(代理目标) +VUE_APP_BASE_URL=http://127.0.0.1:8787/background/ diff --git a/docs/login-page-migration.md b/docs/login-page-migration.md index 289359d6..2fd2744a 100644 --- a/docs/login-page-migration.md +++ b/docs/login-page-migration.md @@ -2,7 +2,7 @@ > **搬迁源**:`D:\code\company\SCTMES_MES_V5\vue-app` > **搬迁目标**:`d:\code\mes\mes-ui` -> **状态**:⏳ 待审阅,审阅通过后执行搬迁 +> **状态**:✅ 已完成(2026-05-26) --- @@ -86,7 +86,7 @@ ### 2.5 i18n 语言包 -**i18n key 前缀**:`page.system_settings.system_monitoring.system.login` +**i18n key 前缀**:`page.system_administration.system_monitoring.login` | key | 中文 | 英文 | |-----|------|------| @@ -104,17 +104,15 @@ **搬迁操作**: -1. 在 `src/locales/zh-chs.json` 的 `page.system.system_monitoring` 下新增: +1. 在 `src/locales/zh-chs.json` 的 `page.system_administration.system_monitoring` 下新增: ```json "login": { "time_is_most_precious": "时间是一切财富中最宝贵的财富", "username": "用户名", "password": "密码", "login": "登录", - "quick_select_user": "快速选择用户", "please_enter_username": "请输入用户名", "please_enter_password": "请输入密码", - "please_enter_code": "请输入验证码", "dev_version": "开发版本", "test_version": "测试版本", "form_validation_failed": "表单校验失败,请检查" diff --git a/public/image/logo/sc_logo.png b/public/image/logo/sc_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5f11f255e2df24ebde5c254a90f39389a66bf8c2 GIT binary patch literal 9478 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 literal 0 HcmV?d00001 diff --git a/src/api/_service.js b/src/api/_service.js index b7f6a7af..dc0fa44f 100644 --- a/src/api/_service.js +++ b/src/api/_service.js @@ -125,13 +125,15 @@ function createRequest (service) { const token = util.cookies.get('token') const configDefault = { headers: { - Authorization: token, 'Content-Type': get(config, 'headers.Content-Type', 'application/json') }, timeout: 5000, baseURL: process.env.VUE_APP_API, data: {} } + if (token) { + configDefault.headers.Authorization = 'Bearer ' + token + } const option = merge(configDefault, config) // 处理 get 请求的参数 // 请根据实际需要修改 @@ -141,7 +143,7 @@ function createRequest (service) { } // 当需要以 form 形式发送时 处理发送的数据 // 请根据实际需要修改 - if (!isEmpty(option.data) && option.headers['Content-Type'] === 'application/x-www-form-urlencoded') { + if (!isEmpty(option.data) && option.headers['Content-Type'] === 'application/x-www-form-urlen·coded') { option.data = stringify(option.data) } return service(option) diff --git a/src/api/auth.js b/src/api/auth.js new file mode 100644 index 00000000..d8b010fd --- /dev/null +++ b/src/api/auth.js @@ -0,0 +1,33 @@ +import { request } from '@/api/_service' + +/** + * 账号登录 + * @param {Object} data + * @param {string} data.username + * @param {string} data.password + */ +export function loginAdminUser (data) { + return request({ + url: 'login', + method: 'post', + data: { + method: 'login', + platform: 'background', + ...data + } + }) +} + +/** + * 注销当前已登录的账号 + */ +export function logoutAdminUser () { + return request({ + url: 'logout', + method: 'post', + data: { + method: 'logout', + platform: 'background' + } + }) +} diff --git a/src/locales/en.json b/src/locales/en.json index 4afea1b4..64cb5f71 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -43,6 +43,19 @@ "please_enter": "Please enter {name}" } } + }, + "system": { + "login": { + "time_is_most_precious": "Time is the most precious of all wealth", + "username": "Username", + "password": "Password", + "login": "Login", + "please_enter_username": "Please enter username", + "please_enter_password": "Please enter password", + "dev_version": "Development Version", + "test_version": "Test Version", + "form_validation_failed": "Form validation failed, please check" + } } } } diff --git a/src/locales/zh-chs.json b/src/locales/zh-chs.json index fc1dc7fa..d38ccd70 100644 --- a/src/locales/zh-chs.json +++ b/src/locales/zh-chs.json @@ -43,6 +43,19 @@ "please_enter": "请输入{name}" } } + }, + "system": { + "login": { + "time_is_most_precious": "时间是一切财富中最宝贵的财富", + "username": "用户名", + "password": "密码", + "login": "登录", + "please_enter_username": "请输入用户名", + "please_enter_password": "请输入密码", + "dev_version": "开发版本", + "test_version": "测试版本", + "form_validation_failed": "表单校验失败,请检查" + } } } } diff --git a/src/store/modules/d2admin/modules/account.js b/src/store/modules/d2admin/modules/account.js index 21908a14..8380d123 100644 --- a/src/store/modules/d2admin/modules/account.js +++ b/src/store/modules/d2admin/modules/account.js @@ -1,7 +1,8 @@ -import { Message, MessageBox } from 'element-ui' import util from '@/libs/util.js' +import { loginAdminUser, logoutAdminUser } from '@/api/auth' + +import { MessageBox, Loading } from 'element-ui' import router from '@/router' -import { SYS_USER_LOGIN } from '@/api/sys.user.js' export default { namespaced: true, @@ -17,16 +18,24 @@ export default { username = '', password = '' } = {}) { - const res = await SYS_USER_LOGIN({ username, password }) - // 设置 cookie 一定要存 uuid 和 token 两个 cookie - // 整个系统依赖这两个数据进行校验和存储 - // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 - // token 代表用户当前登录状态 建议在网络请求中携带 token - // 如有必要 token 需要定时更新,默认保存一天 - util.cookies.set('uuid', res.uuid) - util.cookies.set('token', res.token) + // 新的写法 + const res = await loginAdminUser({ username, password }) + // 设置用户数据 + const cookieSetting = { expires: 365 } + util.cookies.set('uuid', res.userInfo.username, cookieSetting) + util.cookies.set('token', res.token, cookieSetting) + util.cookies.set('block', 'false') + + // 存储用户数据到本地 + localStorage.setItem('user_id', res.userInfo.user_id) + // 设置 vuex 用户信息 - await dispatch('d2admin/user/set', { name: res.name }, { root: true }) + await dispatch('d2admin/user/set', { + name: res.userInfo.username, + admin: res.userInfo, + token: res.token + }, { root: true }) + // 用户登录后从持久化数据加载一系列的设置 await dispatch('load') }, @@ -35,34 +44,59 @@ export default { * @param {Object} context * @param {Object} payload confirm {Boolean} 是否需要确认 */ - logout ({ commit, dispatch }, { confirm = false } = {}) { - /** - * @description 注销 - */ - async function logout () { - // 删除cookie - util.cookies.remove('token') - // 清空 vuex 用户信息 - await dispatch('d2admin/user/set', {}, { root: true }) - util.cookies.remove('uuid') - // 跳转路由 - router.push({ name: 'login' }) - } - // 判断是否需要确认 - if (confirm) { - commit('d2admin/gray/set', true, { root: true }) - MessageBox.confirm('确定要注销当前用户吗', '注销用户', { type: 'warning' }) - .then(() => { - commit('d2admin/gray/set', false, { root: true }) - logout() + logout ({ dispatch }, { confirm = false } = {}) { + // 加载遮罩 + let loading = null + // 实际注销操作 + function doLogout () { + logoutAdminUser() + .finally(() => { + // 删除sourceData + util.cookies.set('block', 'true') + dispatch('d2admin/db/set', { + dbName: 'database', + path: '$menu.sourceData', + value: [], + user: true + }, { root: true }) + + // 删除info + dispatch('d2admin/user/set', {}, { root: true }) + + // 删除cookie + util.cookies.remove('token') + util.cookies.remove('uuid') + + // 刷新页面 + loading && loading.close() + router.push({ name: 'login' }) }) .catch(() => { - commit('d2admin/gray/set', false, { root: true }) - Message({ message: '取消注销操作' }) }) - } else { - logout() } + + if (!confirm) { + doLogout() + return + } + + MessageBox.confirm('确定要执行注销操作吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + closeOnClickModal: false + }) + .then(() => { + loading = Loading.service({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + doLogout() + }) + .catch(() => { + }) }, /** * @description 用户登录后从持久化数据加载一系列的设置 @@ -83,6 +117,8 @@ export default { await dispatch('d2admin/size/load', null, { root: true }) // 持久化数据加载颜色设置 await dispatch('d2admin/color/load', null, { root: true }) + // DB -> store 持久化数据读取菜单源数据 + await dispatch('d2admin/menu/sourceDataLoad', null, { root: true }) } } } diff --git a/src/store/modules/d2admin/modules/menu.js b/src/store/modules/d2admin/modules/menu.js index 327a3d16..520e2d60 100644 --- a/src/store/modules/d2admin/modules/menu.js +++ b/src/store/modules/d2admin/modules/menu.js @@ -11,7 +11,9 @@ export default { // 侧边栏收缩 asideCollapse: setting.menu.asideCollapse, // 侧边栏折叠动画 - asideTransition: setting.menu.asideTransition + asideTransition: setting.menu.asideTransition, + // 菜单源数据 + sourceData: [] }, actions: { /** @@ -90,6 +92,19 @@ export default { }, { root: true }) state.asideCollapse = menu.asideCollapse !== undefined ? menu.asideCollapse : setting.menu.asideCollapse state.asideTransition = menu.asideTransition !== undefined ? menu.asideTransition : setting.menu.asideTransition + }, + /** + * 持久化数据加载菜单源数据 + * @param {Object} context + */ + async sourceDataLoad ({ state, dispatch }) { + const sourceData = await dispatch('d2admin/db/get', { + dbName: 'database', + path: '$menu.sourceData', + defaultValue: [], + user: true + }, { root: true }) + state.sourceData = sourceData } }, mutations: { diff --git a/vue.config.js b/vue.config.js index 71c89998..99b57895 100644 --- a/vue.config.js +++ b/vue.config.js @@ -80,6 +80,15 @@ module.exports = { lintOnSave: true, devServer: { publicPath: process.env.VUE_APP_PUBLIC_PATH || '/', + proxy: { + '/background': { + target: process.env.VUE_APP_BASE_URL, + changeOrigin: true, + pathRewrite: { + '^/background': '' + } + } + }, disableHostCheck: process.env.NODE_ENV === 'development' }, css: {