From d7994b75388ea81a98f989e28436b461271a5373 Mon Sep 17 00:00:00 2001 From: xiangcongshuai Date: Mon, 5 Aug 2024 14:50:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=B4=A6=E5=8F=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/base/user.js | 11 +- src/api/system/user.js | 85 ++++++++++++++ src/config/net.config.js | 2 +- src/config/permission.js | 1 + src/config/setting.config.js | 4 +- src/data/appInit.js | 2 +- src/layouts/components/Avatar/index.vue | 29 ++++- src/router/index.js | 2 +- src/store/modules/routes.js | 1 + src/store/modules/user.js | 31 ++--- src/utils/handleRoutes.js | 4 +- src/utils/request.js | 4 +- src/views/login/index.vue | 21 +--- .../components/AccountManagement.vue | 78 +++++++++---- .../components/AuthorityManagement.vue | 40 +++++-- .../components/EditAccount.vue | 109 ++++++++++++++---- .../components/EditAuthority.vue | 96 +++++++-------- 17 files changed, 362 insertions(+), 158 deletions(-) create mode 100644 src/api/system/user.js diff --git a/src/api/base/user.js b/src/api/base/user.js index 7fa185a..a4c4eed 100644 --- a/src/api/base/user.js +++ b/src/api/base/user.js @@ -18,9 +18,9 @@ export function getVerifyCode() { /** 登录接口 */ export function login(data) { return request({ - url: `${routes.auth}/api/user/admin/login`, + url: `/user/login`, method: 'post', - params: data + data }) } @@ -43,10 +43,11 @@ export function changeSelfInfo(data) { } /** 登录后获取登录用户信息 */ -export function getUserInfo() { +export function getUserInfo(data) { return request({ - url: `${routes.auth}/api/user/admin/info`, - method: 'post' + url: `/user/getCurrentUser`, + method: 'get', + params: data }) } /** 获取权限菜单 */ diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..2eeeef4 --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' +import routes from '../gateway-routes' + +/** 查看用户信息列表 */ +export function getUserList(params) { + return request({ + url: `/user/list`, + method: 'get', + params + }) +} + +/** 创建账号*/ +export function saveUserInfo(data) { + return request({ + url: `/user/saveUserInfo`, + method: 'post', + data + }) +} +/** 修改账号*/ +export function updateUserInfo(data) { + return request({ + url: `/user/update`, + method: 'post', + data + }) +} +/** 删除账号*/ +export function deleteUserInfo(data) { + return request({ + url: `/user/delete`, + method: 'delete', + params: data + }) +} +/** 修改用户状态*/ +export function updateUserStatus(data) { + return request({ + url: `/user/updateUserStatus`, + method: 'post', + data + }) +} +/** 查看角色列表 */ +export function getRoleList(params) { + return request({ + url: `/role/list`, + method: 'get', + params + }) +} + +/** 创建角色*/ +export function saveRole(data) { + return request({ + url: `/role/save`, + method: 'post', + data + }) +} +/** 修改角色*/ +export function updateRole(data) { + return request({ + url: `/role/update`, + method: 'post', + data + }) +} +/** 删除角色*/ +export function deleteRole(data) { + return request({ + url: `/role/delete`, + method: 'delete', + params: data + }) +} +/** 查看菜单列表 */ +export function getMenuList(params) { + return request({ + url: `/menu/listMenu`, + method: 'get', + params + }) +} diff --git a/src/config/net.config.js b/src/config/net.config.js index 023ad03..f8258a8 100644 --- a/src/config/net.config.js +++ b/src/config/net.config.js @@ -5,7 +5,7 @@ const network = { // 默认的接口地址 如果是开发环境和生产环境走vab-mock-server,当然你也可以选择自己配置成需要的接口地址 baseURL: process.env.NODE_ENV === 'development' - ? 'http://192.168.10.27:8097/fu-hsi-server' + ? 'http://192.168.10.25:8097/fu-hsi-server' : '/fuHsiApi', // 配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8 contentType: 'application/json;charset=UTF-8', diff --git a/src/config/permission.js b/src/config/permission.js index a56c3fb..16bb64d 100644 --- a/src/config/permission.js +++ b/src/config/permission.js @@ -48,6 +48,7 @@ router.beforeResolve(async(to, from, next) => { let accessRoutes = [] if (authentication === 'intelligence') { accessRoutes = await store.dispatch('routes/setRoutes', permissions) + } else if (authentication === 'all') { accessRoutes = await store.dispatch('routes/setAllRoutes') } diff --git a/src/config/setting.config.js b/src/config/setting.config.js index da06601..56b6cc5 100644 --- a/src/config/setting.config.js +++ b/src/config/setting.config.js @@ -46,7 +46,7 @@ const setting = { // 加载时显示文字 loadingText: '正在加载中...', // token名称 - tokenName: 'Auth-Token', + tokenName: 'token', // token在localStorage、sessionStorage存储的key的名称 tokenTableName: 'MyToken', // token存储位置localStorage sessionStorage @@ -58,7 +58,7 @@ const setting = { // 是否显示在页面高亮错误 errorLog: ['development', 'production'], // 是否开启登录拦截 - loginInterception: false, + loginInterception: true, // 是否开启登录RSA加密 loginRSA: false, // intelligence和all两种方式,前者后端权限只控制permissions不控制view文件的import(前后端配合,减轻后端工作量),all方式完全交给后端前端只负责加载 diff --git a/src/data/appInit.js b/src/data/appInit.js index 72048ac..69933d4 100644 --- a/src/data/appInit.js +++ b/src/data/appInit.js @@ -12,7 +12,7 @@ import { queryDictionary } from '@/api/system' export default { init(options) { router.beforeEach(async(to, from, next) => { - if (options.enable && (from.path === '/login' || sessionStorage.getItem('gender') === null)) { + if (options.enable && (from.path === '/login')) { // 保存字典 queryDictionary({ list: [] }).then(res => { for (const dataKey in res.data) { diff --git a/src/layouts/components/Avatar/index.vue b/src/layouts/components/Avatar/index.vue index e67c962..4176801 100644 --- a/src/layouts/components/Avatar/index.vue +++ b/src/layouts/components/Avatar/index.vue @@ -8,11 +8,11 @@
- {{ name }} + {{ username }}
@@ -82,7 +82,9 @@ import { mapGetters } from 'vuex' import { changePassword } from '@/api/base/user' import Man from '@/assets/avatar/man.png' - +import { baseURL } from '@/config' +import { commonDownloadFile } from '@/api/config/uploadApi' +import { queryDictionary } from '@/api/system' export default { name: 'CsAvatar', filters: { @@ -141,11 +143,26 @@ export default { computed: { ...mapGetters({ avatar: 'user/avatar', - name: 'user/name' - }) + username: 'user/username' + }), + imgUrl() { + if (this.avatar) { + return `${baseURL}${commonDownloadFile}${this.avatar}` + } else { + return '' + } + } }, mounted() { - // console.log(this.avatar, 666) + queryDictionary({ list: [] }).then(res => { + for (const dataKey in res.data) { + const dic = res.data[dataKey] + dic?.forEach(item => { + sessionStorage.setItem(dataKey, JSON.stringify(item.child)) + }) + } + // console.log('res-data', res.data,) + }) }, methods: { handleCommand(command) { diff --git a/src/router/index.js b/src/router/index.js index 7f839dd..32556de 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -144,7 +144,7 @@ export const asyncRoutes = [ { path: '/prompt', name: 'Prompt', - permission: 'p_prompt', + permission: 'p_promptProject', component: Layout, meta: { title: '提示工程' }, children: [ diff --git a/src/store/modules/routes.js b/src/store/modules/routes.js index 430e264..49160aa 100644 --- a/src/store/modules/routes.js +++ b/src/store/modules/routes.js @@ -33,6 +33,7 @@ const actions = { [...asyncRoutes], permissions ) + console.log(finallyAsyncRoutes, permissions, '2222222222222') commit('setRoutes', finallyAsyncRoutes) return finallyAsyncRoutes }, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index f31494b..e4c2072 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -7,7 +7,6 @@ import { } from '@/utils/accessToken' // import { resetRouter } from '@/router' import { title, tokenName } from '@/config' -import md5 from 'js-md5' import { resetRouter } from '@/router' const state = () => ({ accessToken: getAccessToken(), @@ -71,12 +70,13 @@ const actions = { }, async login({ commit }, userInfo) { - const { account, password } = userInfo + const { userAccount, password } = userInfo const { data } = await login({ - account, - password: md5(password) + userAccount, + password: password }) - const accessToken = data + const { userName } = data + const accessToken = data.token if (accessToken) { commit('setAccessToken', accessToken) const hour = new Date().getHours() @@ -90,7 +90,7 @@ const actions = { : hour < 18 ? '下午好' : '晚上好' - Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`) + Vue.prototype.$baseNotify(`欢迎登录${userName}`, `${thisTime}!`) } else { Vue.prototype.$baseMessage( `登录接口异常,未正确返回${tokenName}...`, @@ -106,23 +106,14 @@ const actions = { return false } console.log(data, 'userData') - const { autoid, cardId, roleId, userName, unitId, gender, name, phone, endTime } = data + + const { permission, userName, headPicId } = data if (userName) { - commit('setUserId', autoid) - commit('setCardId', cardId) - commit('setUnitId', unitId) commit('setUsername', userName) - commit('setName', name) - commit('setPhone', phone) - commit('setEndTime', endTime) - commit('setPermissions', [Number(roleId)]) - if (gender && gender === '2') { - commit('setAvatar', require('@/assets/avatar/woman.png')) - } else { - commit('setAvatar', require('@/assets/avatar/man.png')) - } - return [Number(roleId)] + commit('setAvatar', headPicId) + commit('setPermissions', permission.length > 0 ? permission : ['p_home']) + return permission } else { Vue.prototype.$baseMessage('用户信息接口异常', 'error') return false diff --git a/src/utils/handleRoutes.js b/src/utils/handleRoutes.js index 0a041d2..50351d8 100644 --- a/src/utils/handleRoutes.js +++ b/src/utils/handleRoutes.js @@ -60,8 +60,8 @@ export function convertPermission(asyncRoutes, that) { * @returns {boolean|*} */ function hasPermission(permissions, route) { - if (route.meta && route.meta.permissions) { - return permissions.some((role) => route.permissions.includes(role)) + if (route && route.permission) { + return permissions.some((role) => route.permission.includes(role)) } else { return true } diff --git a/src/utils/request.js b/src/utils/request.js index f6521e9..ba350ce 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -18,7 +18,6 @@ import router from '@/router' import { isArray } from '@/utils/validate' // import { Encrypt, Decrypt } from '@/utils/decrypt' // import whiteList from '@/utils/whiteList' - let loadingInstance const handleCode = (code, msg) => { switch (code) { @@ -46,7 +45,8 @@ const instance = axios.create({ timeout: requestTimeout, headers: { 'Content-Type': contentType, - 'X-Frame-Options': 'SAMEORIGIN' + 'X-Frame-Options': 'SAMEORIGIN', + 'X-Requested-With': 'XMLHttpRequest' } }) instance.interceptors.request.use( diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 3d7be20..acd169d 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -11,10 +11,10 @@ Welcome to login - + @@ -63,7 +63,7 @@ export default { title, loginForm: {}, rules: { - username: [{ required: true, message: '用户名不能为空!' }], + userAccount: [{ required: true, message: '用户名不能为空!' }], password: [{ required: true, message: '密码不能为空!' }] }, checked: false, @@ -95,20 +95,9 @@ export default { if (valid) { this.loading = true this.$store - .dispatch('user/login', this.form) + .dispatch('user/login', this.loginForm) .then(() => { - if (this.checked === true) { - // 传入账号名,密码,和保存天数3个参数 - this.setCookie(this.form.account, this.form.password, 7) - } else { - // 清空Cookie - this.clearCookie() - } - const routerPath = - this.redirect === '/404' || this.redirect === '/401' - ? '/' - : this.redirect - this.$router.push(routerPath).catch(() => {}) + this.$router.push('/index') this.loading = false }) .catch(() => { diff --git a/src/views/system/accountManagement/components/AccountManagement.vue b/src/views/system/accountManagement/components/AccountManagement.vue index 2436b75..cb937b7 100644 --- a/src/views/system/accountManagement/components/AccountManagement.vue +++ b/src/views/system/accountManagement/components/AccountManagement.vue @@ -13,20 +13,37 @@ 新增 + +
+ +
- +