From 9c37e82d294bcdd95dd8c0c76c8b561fa0defeae Mon Sep 17 00:00:00 2001 From: memorylkf <312904636@qq.com> Date: Fri, 19 Dec 2025 14:47:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:[=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86]=20[?= =?UTF-8?q?=E8=A7=92=E8=89=B2/=E9=83=A8=E9=97=A8]=20=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/api/login.js | 5 +- src/api/system/role.js | 9 ++ src/lang/en.js | 30 +++++- src/lang/zh.js | 228 ++++++++++++++++++++++------------------ src/main.js | 2 + src/store/modules/user.js | 156 ++++++++++++++++----------- src/views/login.vue | 23 ++-- src/views/system/dept/index.vue | 148 +++++++++++++++----------- src/views/system/role/index.vue | 76 ++++++++++---- 10 files changed, 419 insertions(+), 259 deletions(-) diff --git a/package.json b/package.json index e1c8d89..428960d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "js-beautify": "1.13.0", "js-cookie": "3.0.1", "jsencrypt": "3.0.0-rc.1", + "lodash": "^4.17.21", "nprogress": "0.2.0", "quill": "2.0.2", "screenfull": "5.0.2", diff --git a/src/api/login.js b/src/api/login.js index 15414cd..354e5ab 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -1,7 +1,8 @@ import request from '@/utils/request' // 登录方法 -export function login(username, password, code, uuid) { +export function login(username, password, code, uuid, force) { + debugger return request({ url: '/auth/login', headers: { @@ -9,7 +10,7 @@ export function login(username, password, code, uuid) { repeatSubmit: false }, method: 'post', - data: { username, password, code, uuid } + data: { username, password, code, uuid, force } }) } diff --git a/src/api/system/role.js b/src/api/system/role.js index f13e6f4..e9faa74 100644 --- a/src/api/system/role.js +++ b/src/api/system/role.js @@ -117,3 +117,12 @@ export function deptTreeSelect(roleId) { method: 'get' }) } + +// 设置角色的用户 +export function authUserSetAll(data) { + return request({ + url: '/system/role/authUser/setAll', + method: 'post', + data + }) +} diff --git a/src/lang/en.js b/src/lang/en.js index 7ed0ee1..3831531 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -129,10 +129,29 @@ export default { addRole: 'addRole', modifyRole: 'modifyRole', - notEmpty: ' can not be empty' + notEmpty: ' can not be empty', + + filterPlaceholder: 'name/mobile', + unauthorized: 'unauthorized', + authorized: 'authorized' + }, + dept: { + name: 'name', + type: 'type', + parent: 'parent', + add: 'add', + edit: 'edit', + detail: 'view', + delete: 'delete', + dept: 'dept', + subject: 'subject', + team: 'team', + notEmpty: ' can not be empty', + addDept: 'addDept', + modifyDept: 'modifyDept' } }, - business:{ + business: { zykgl: { zjzt: { rk: '入库', @@ -145,7 +164,7 @@ export default { jyzt: { wjy: '未借阅', djy: '待借阅', - jyz: '借阅中', + jyz: '借阅中' }, zjzt: { wsd: '未锁定', @@ -155,19 +174,20 @@ export default { djd: '待解档' }, zcg: { + ysbh: '钥匙编号', jyr: '借用人', zt: '状态', jyz: '借用中', wjy: '未借用', plgh: '批量归还', zcg: '暂存柜', + ysbh: '钥匙编号', ys1jyr: '钥匙1借用人', ys2jyr: '钥匙2借用人', glyj: '关联药剂', ffys: '发放钥匙', gh: '归还', - ysgh: '钥匙归还', - ysff: '钥匙发放', + ysgh: '钥匙归还' } } } diff --git a/src/lang/zh.js b/src/lang/zh.js index 348245a..3831531 100644 --- a/src/lang/zh.js +++ b/src/lang/zh.js @@ -1,135 +1,154 @@ export default { system: { - title: '华西海圻管理系统', - tip: '提示', - logOut: '确认注销并退出系统吗?' + title: 'HXHQ', + tip: 'prompt', + logOut: 'Are you sure to log out and exit the system?' }, form: { - search: '查询', - reset: '重置', - add: '新增', - export: '导出', - saveConfirm: '确定', - confirm: '确认', - cancel: '取消', - operate: '操作', - placeholderInput: '请输入', - placeholderSelect: '请选择', - confirmDelete: '确认删除?' + search: 'search', + reset: 'reset', + add: 'add', + export: 'export', + saveConfirm: 'confirm', + confirm: 'confirm', + cancel: 'cancel', + operate: 'operate', + placeholderInput: 'Please Enter', + placeholderSelect: 'Please Select', + confirmDelete: 'confirm delete?' }, menu: { - PersonalCenter: '个人中心', - Workbench: '工作台', + PersonalCenter: 'Personal Center', + Workbench: 'Workbench', - TrialManage: '试验管理', + TrialManage: 'TrialManage', - FormManage: '表单管理', - NonTrialForm: '非试验表单', - DrugForm: '麻精药表单', + FormManage: 'FormManage', + NonTrialForm: 'NonTrialForm', + DrugForm: 'DrugForm', - ResourceManage: '资源库管理', - ReagentManage: '试剂管理', - SpecimenManage: '供试品管理', - DosageManage: '给药制剂管理', - DrugManage: '麻精药管理', - KeyManage: '钥匙管理', - InstrumentManage: '仪器管理', + ResourceManage: 'ResourceManage', + ReagentManage: 'ReagentManage', + SpecimenManage: 'SpecimenManage', + DosageManage: 'DosageManage', + DrugManage: 'DrugManage', + KeyManage: 'KeyManage', + InstrumentManage: 'InstrumentManage', - ArchiveManage: '档案管理', - TrialArchiveManage: '试验档案管理', - NonTrialArchiveManage: '非试验档案管理', - DrugConfigArchiveManage: '麻精药配置档案管理', - SpecimenArchiveManage: '供试品档案管理', - DosageArchiveManage: '给药制剂档案管理', - DrugArchiveManage: '麻精药档案管理', - ReagentArchiveManage: '试剂档案管理', - ArchiveRecord: '档案记录', + ArchiveManage: 'ArchiveManage', + TrialArchiveManage: 'TrialArchiveManage', + NonTrialArchiveManage: 'NonTrialArchiveManage', + DrugConfigArchiveManage: 'DrugConfigArchiveManage', + SpecimenArchiveManage: 'SpecimenArchiveManage', + DosageArchiveManage: 'DosageArchiveManage', + DrugArchiveManage: 'DrugArchiveManage', + ReagentArchiveManage: 'ReagentArchiveManage', + ArchiveRecord: 'ArchiveRecord', - SystemManage: '系统管理', - MenuManage: '菜单管理', - RoleManage: '角色管理', - UserManage: '用户管理', - DeptManage: '部门/学科管理', - TemplateManage: '模板管理', - DictManage: '字典管理', - LogManage: '日志管理' + SystemManage: 'SystemManage', + MenuManage: 'MenuManage', + RoleManage: 'RoleManage', + UserManage: 'UserManage', + DeptManage: 'DeptManage/SubjectManage', + TemplateManage: 'TemplateManage', + DictManage: 'DictManage', + LogManage: 'LogManage' }, login: { - title: '华西海圻管理系统', - logIn: '登录', - username: '账号', - usernameRequired: '请输入您的账号', - password: '密码', - passwordRequired: '请输入您的密码', - code: '验证码', - codeRequired: '请输入验证码', - rememberMe: '记住密码', - loginIng: '登 录 中...', - logOut: '退出登录', - profile: '个人中心' + title: 'Login Form', + logIn: 'Login in', + username: 'Username', + usernameRequired: 'Please Enter Username', + password: 'Password', + passwordRequired: 'Please Enter Password', + code: 'Code', + codeRequired: 'Please Enter Code', + rememberMe: 'Remember Me', + loginIng: 'Loging...', + logOut: 'logOut', + profile: 'profile' }, tagsView: { - refresh: '刷新', - close: '关闭', - closeOthers: '关闭其它', - closeAll: '关闭所有' + refresh: 'Refresh', + close: 'Close', + closeOthers: 'Close Others', + closeAll: 'Close All' }, settings: { - title: '系统布局配置', - theme: '主题色', - tagsView: '开启 Tags-View', - fixedHeader: '固定 Header', - sidebarLogo: '侧边栏 Logo' + title: 'Page style setting', + theme: 'Theme Color', + tagsView: 'Open Tags-View', + fixedHeader: 'Fixed Header', + sidebarLogo: 'Sidebar Logo' }, page: { system: { menu: { - name: '菜单名称', - status: '菜单状态', - statusAll: '全部', - statusVisible: '显示', - statusHide: '隐藏', + name: 'name', + status: 'status', + statusAll: 'All', + statusVisible: 'visible', + statusHide: 'hide', - index: '序号', - sort: '菜单排序', - router: '路由地址', - type: '菜单类型', - typeDir: '目录', - typeMenu: '菜单', - typeBtn: '按钮', - add: '添加', - edit: '编辑', - delete: '删除', + index: 'index', + sort: 'sort', + router: 'router', + type: 'type', + typeDir: 'dir', + typeMenu: 'menu', + typeBtn: 'btn', + add: 'add', + edit: 'edit', + delete: 'delete', - parent: '上级菜单', - comp: '组件路径', - icon: '菜单图标', - permit: '权限字符', + parent: 'parent', + comp: 'comp', + icon: 'icon', + permit: 'permit', - addMenu: '新增菜单', - modifyMenu: '编辑菜单', + addMenu: 'addMenu', + modifyMenu: 'modifyMenu', - root: '主类目', + root: 'root', - notEmpty: '不能为空' + notEmpty: ' can not be empty' }, role: { - name: '角色名称', - key: '角色编码', - status: '状态', - remark: '备注', - permit: '权限', + name: 'name', + key: 'code', + status: 'status', + remark: 'remark', + permit: 'permit', - statusEnable: '启用', - statusDisable: '禁用', + statusEnable: 'enable', + statusDisable: 'disable', - edit: '编辑', - allocate: '分配用户', - detail: '详情', + edit: 'edit', + allocate: 'allocate', + detail: 'detail', - addRole: '新增角色', - modifyRole: '编辑角色', - notEmpty: '不能为空' + addRole: 'addRole', + modifyRole: 'modifyRole', + notEmpty: ' can not be empty', + + filterPlaceholder: 'name/mobile', + unauthorized: 'unauthorized', + authorized: 'authorized' + }, + dept: { + name: 'name', + type: 'type', + parent: 'parent', + add: 'add', + edit: 'edit', + detail: 'view', + delete: 'delete', + dept: 'dept', + subject: 'subject', + team: 'team', + notEmpty: ' can not be empty', + addDept: 'addDept', + modifyDept: 'modifyDept' } }, business: { @@ -145,7 +164,7 @@ export default { jyzt: { wjy: '未借阅', djy: '待借阅', - jyz: '借阅中', + jyz: '借阅中' }, zjzt: { wsd: '未锁定', @@ -155,19 +174,20 @@ export default { djd: '待解档' }, zcg: { + ysbh: '钥匙编号', jyr: '借用人', zt: '状态', jyz: '借用中', wjy: '未借用', plgh: '批量归还', zcg: '暂存柜', + ysbh: '钥匙编号', ys1jyr: '钥匙1借用人', ys2jyr: '钥匙2借用人', glyj: '关联药剂', ffys: '发放钥匙', gh: '归还', - ysgh: '钥匙归还', - ysff: '钥匙发放', + ysgh: '钥匙归还' } } } diff --git a/src/main.js b/src/main.js index 073c4bf..d6d3783 100644 --- a/src/main.js +++ b/src/main.js @@ -79,6 +79,8 @@ DictData.install() */ import i18n from './lang' +import _ from 'lodash' + Vue.use(Element, { i18n: (key, value) => i18n.t(key, value), size: Cookies.get('size') || 'medium' // set element-ui default size diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 9cb5ddc..2199cf7 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,8 +1,8 @@ import router from '@/router' -import { MessageBox, } from 'element-ui' +import { MessageBox } from 'element-ui' import { login, logout, getInfo, refreshToken } from '@/api/login' import { getToken, setToken, setExpiresIn, removeToken } from '@/utils/auth' -import { isEmpty } from "@/utils/validate" +import { isEmpty } from '@/utils/validate' import defAva from '@/assets/images/profile.jpg' const user = { @@ -50,86 +50,122 @@ const user = { const password = userInfo.password const code = userInfo.code const uuid = userInfo.uuid + const force = userInfo.force return new Promise((resolve, reject) => { - login(username, password, code, uuid).then(res => { - let data = res.data - setToken(data.access_token) - commit('SET_TOKEN', data.access_token) - setExpiresIn(data.expires_in) - commit('SET_EXPIRES_IN', data.expires_in) - resolve() - }).catch(error => { - reject(error) - }) + login(username, password, code, uuid, force) + .then((res) => { + let data = res.data + setToken(data.access_token) + commit('SET_TOKEN', data.access_token) + setExpiresIn(data.expires_in) + commit('SET_EXPIRES_IN', data.expires_in) + resolve() + }) + .catch((error) => { + reject(error) + }) }) }, // 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { - getInfo().then(res => { - const user = res.user - const avatar = (isEmpty(user.avatar)) ? defAva : user.avatar - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - commit('SET_ROLES', res.roles) - commit('SET_PERMISSIONS', res.permissions) - } else { - commit('SET_ROLES', ['ROLE_DEFAULT']) - } - commit('SET_ID', user.userId) - commit('SET_NAME', user.userName) - commit('SET_NICK_NAME', user.nickName) - commit('SET_AVATAR', avatar) - /* 初始密码提示 */ - if(res.isDefaultModifyPwd) { - MessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) - }).catch(() => {}) - } - /* 过期密码提示 */ - if(!res.isDefaultModifyPwd && res.isPasswordExpired) { - MessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) - }).catch(() => {}) - } - resolve(res) - }).catch(error => { - reject(error) - }) + getInfo() + .then((res) => { + const user = res.user + const avatar = isEmpty(user.avatar) ? defAva : user.avatar + if (res.roles && res.roles.length > 0) { + // 验证返回的roles是否是一个非空数组 + commit('SET_ROLES', res.roles) + commit('SET_PERMISSIONS', res.permissions) + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']) + } + commit('SET_ID', user.userId) + commit('SET_NAME', user.userName) + commit('SET_NICK_NAME', user.nickName) + commit('SET_AVATAR', avatar) + /* 初始密码提示 */ + if (res.isDefaultModifyPwd) { + MessageBox.confirm( + '您的密码还是初始密码,请修改密码!', + '安全提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + } + ) + .then(() => { + router.push({ + name: 'Profile', + params: { activeTab: 'resetPwd' } + }) + }) + .catch(() => {}) + } + /* 过期密码提示 */ + if (!res.isDefaultModifyPwd && res.isPasswordExpired) { + MessageBox.confirm( + '您的密码已过期,请尽快修改密码!', + '安全提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + } + ) + .then(() => { + router.push({ + name: 'Profile', + params: { activeTab: 'resetPwd' } + }) + }) + .catch(() => {}) + } + resolve(res) + }) + .catch((error) => { + reject(error) + }) }) }, // 刷新token - RefreshToken({commit, state}) { + RefreshToken({ commit, state }) { return new Promise((resolve, reject) => { - refreshToken(state.token).then(res => { - setExpiresIn(res.data) - commit('SET_EXPIRES_IN', res.data) - resolve() - }).catch(error => { - reject(error) - }) + refreshToken(state.token) + .then((res) => { + setExpiresIn(res.data) + commit('SET_EXPIRES_IN', res.data) + resolve() + }) + .catch((error) => { + reject(error) + }) }) }, - + // 退出系统 LogOut({ commit, state }) { return new Promise((resolve, reject) => { - logout(state.token).then(() => { - commit('SET_TOKEN', '') - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - resolve() - }).catch(error => { - reject(error) - }) + logout(state.token) + .then(() => { + commit('SET_TOKEN', '') + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + removeToken() + resolve() + }) + .catch((error) => { + reject(error) + }) }) }, // 前端 登出 FedLogOut({ commit }) { - return new Promise(resolve => { + return new Promise((resolve) => { commit('SET_TOKEN', '') removeToken() resolve() diff --git a/src/views/login.vue b/src/views/login.vue index b379f3b..e005ad6 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -38,7 +38,7 @@ - {{ $t('login.rememberMe') }} + { this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); - }).catch(() => { - this.loading = false; - if (this.captchaEnabled) { - this.getCode(); + }).catch(err => { + if(err && err.message==='exists'){ + + }else{ + this.loading = false; + if (this.captchaEnabled) { + this.getCode(); + } } + }); } }); diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index 088f09d..83c49b7 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -1,15 +1,15 @@ @@ -296,18 +296,22 @@ - - + + + \ No newline at end of file + + \ No newline at end of file