Commit 42056450a8c48e5af8bbc853146d147ee0419c01
1 parent
dd5150c5
权限修改
Showing
10 changed files
with
459 additions
and
195 deletions
E/system-commandline-sentinel-files/dotnet-suggest-registration-git-credential-manager-core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null
0 → 100644
| 1 | +Exception during registration: | ||
| 2 | +System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。 | ||
| 3 | + 在 System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) | ||
| 4 | + 在 System.Diagnostics.Process.Start() | ||
| 5 | + 在 System.CommandLine.Invocation.Process.StartProcess(String command, String args, String workingDir, Action`1 stdOut, Action`1 stdErr, ValueTuple`2[] environmentVariables) | ||
| 6 | + 在 System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__10_1>d.MoveNext() | ||
| 0 | \ No newline at end of file | 7 | \ No newline at end of file |
src/api/apis/apis.js
| @@ -28,9 +28,9 @@ export default { | @@ -28,9 +28,9 @@ export default { | ||
| 28 | }) | 28 | }) |
| 29 | }, | 29 | }, |
| 30 | // 分页查询账号 | 30 | // 分页查询账号 |
| 31 | - deviceList(data) { | 31 | + userPage(data) { |
| 32 | return service({ | 32 | return service({ |
| 33 | - url: setUpUrls.deviceList, | 33 | + url: setUpUrls.userPage, |
| 34 | method: 'POST', | 34 | method: 'POST', |
| 35 | data | 35 | data |
| 36 | }) | 36 | }) |
src/api/urls/apis.js
| @@ -7,7 +7,7 @@ export default { | @@ -7,7 +7,7 @@ export default { | ||
| 7 | // 查询角色列表 | 7 | // 查询角色列表 |
| 8 | roleList: "/api_html/school/manager/roleList", | 8 | roleList: "/api_html/school/manager/roleList", |
| 9 | // 分页查询账号 | 9 | // 分页查询账号 |
| 10 | - deviceList: "/api_html/school/manager/userPage", | 10 | + userPage: "/api_html/school/manager/userPage", |
| 11 | // 修改账号 禁用账号、修改账号密码等 | 11 | // 修改账号 禁用账号、修改账号密码等 |
| 12 | updateUser: "/api_html/school/manager/updateUser", | 12 | updateUser: "/api_html/school/manager/updateUser", |
| 13 | // 查询学校详情 | 13 | // 查询学校详情 |
src/router/permission.js
| 1 | -import NProgress from "nprogress" | ||
| 2 | -import router from "./index" | ||
| 3 | -import store from "../store" | 1 | +import NProgress from "nprogress"; |
| 2 | +import router from "./index"; | ||
| 3 | +import store from "../store"; | ||
| 4 | 4 | ||
| 5 | // 获取角色信息,根据用户权限动态加载路由 | 5 | // 获取角色信息,根据用户权限动态加载路由 |
| 6 | router.beforeEach((to, from, next) => { | 6 | router.beforeEach((to, from, next) => { |
| 7 | - NProgress.start() | ||
| 8 | - if (store.getters.token) { | ||
| 9 | - // if (to.path === "/login") { | ||
| 10 | - next() | ||
| 11 | - // } else { | ||
| 12 | - // if (!store.getters.info.permissions) { | ||
| 13 | - // (async function getAddRouters() { | ||
| 14 | - // // 省略 axios 请求代码 通过 token 向后台请求用户权限等信息,这里用假数据赋值 | ||
| 15 | - // const userInfo = { | ||
| 16 | - // permissions: [ | ||
| 17 | - // { | ||
| 18 | - // role: "superAdmin", | ||
| 19 | - // roleName: "超级管理员" | ||
| 20 | - // } | ||
| 21 | - // ], | ||
| 22 | - // name: "李老师", | ||
| 23 | - // // avatar: data.avatar ? data.avatar : "", | ||
| 24 | - // // uid: data.id, | ||
| 25 | - // authorityRouter: ["examinationPaper", | ||
| 26 | - // "examinationPaperAdd", | ||
| 27 | - // "examinationPaperEdit", | ||
| 28 | - // "examinationPaperRecycle", "ask", | ||
| 29 | - // "askAnalysis", | ||
| 30 | - // "test", | ||
| 31 | - // "testAnalysis", "portrait"], | ||
| 32 | - | ||
| 33 | - // } | ||
| 34 | - // await store.commit("setInfo", { ...userInfo }) | ||
| 35 | - // await store.commit("setRouters", userInfo.authorityRouter) | ||
| 36 | - // let newAddRouters = store.getters.addRouters | ||
| 37 | - // newAddRouters.forEach(res => { | ||
| 38 | - // router.addRoute(res) | ||
| 39 | - // }) | ||
| 40 | - // router.addRoute({ | ||
| 41 | - // path: "*", | ||
| 42 | - // redirect: "/404", | ||
| 43 | - // hidden: true, | ||
| 44 | - // children: [] | ||
| 45 | - // }) | ||
| 46 | - // next({ path: to.fullPath }) | ||
| 47 | - // }()) | ||
| 48 | - // } else { | ||
| 49 | - // next() | ||
| 50 | - // } | ||
| 51 | - // } | 7 | + NProgress.start(); |
| 8 | + if (to.path === "/login") { | ||
| 9 | + next(); | ||
| 52 | } else { | 10 | } else { |
| 53 | - if (store.getters.info && store.getters.addRouters) { | ||
| 54 | - console.log(store.getters.addRouters) | ||
| 55 | - store.commit("setToken", "isLogin"); | ||
| 56 | - store.commit( | ||
| 57 | - "setRouters", | ||
| 58 | - store.getters.info.authorityRouter | ||
| 59 | - ); | ||
| 60 | - | ||
| 61 | - let newAddRouters = store.getters.addRouters; | ||
| 62 | - newAddRouters.forEach((res) => { | ||
| 63 | - router.addRoute(res); | ||
| 64 | - }); | ||
| 65 | - router.addRoute({ | ||
| 66 | - path: "*", | ||
| 67 | - redirect: "/404", | ||
| 68 | - hidden: true, | ||
| 69 | - children: [], | ||
| 70 | - }); | ||
| 71 | - next({ path: to.fullPath }) | 11 | + if (store.getters.token) { |
| 12 | + next(); | ||
| 72 | } else { | 13 | } else { |
| 73 | - if (store.getters.code) { | ||
| 74 | - next() | 14 | + if (store.getters.info && store.getters.addRouters) { |
| 15 | + store.commit("setToken", "isLogin"); | ||
| 16 | + let userInfo = store.getters.info; | ||
| 17 | + let authorityRouterObj = userInfo.permissions.filter((item) => { | ||
| 18 | + return item.roleName == userInfo.showRoleName; | ||
| 19 | + }); | ||
| 20 | + console.log([...authorityRouterObj[0]?.authorityRouter]) | ||
| 21 | + store.commit("setRouters", [...authorityRouterObj[0]?.authorityRouter]); | ||
| 22 | + store.commit("setInfo", { ...userInfo }); | ||
| 23 | + store.getters.addRouters.forEach((res) => { | ||
| 24 | + router.addRoute(res); | ||
| 25 | + }); | ||
| 26 | + router.addRoute({ | ||
| 27 | + path: "*", | ||
| 28 | + redirect: "/404", | ||
| 29 | + hidden: true, | ||
| 30 | + children: [], | ||
| 31 | + }); | ||
| 32 | + next({ path: to.fullPath }); | ||
| 75 | } else { | 33 | } else { |
| 76 | - if (to.path === "/login") { | ||
| 77 | - next() | 34 | + if (store.getters.code) { |
| 35 | + next(); | ||
| 78 | } else { | 36 | } else { |
| 79 | - next({ path: "/login" }) | 37 | + if (to.path === "/login") { |
| 38 | + next(); | ||
| 39 | + } else { | ||
| 40 | + next({ path: "/login" }); | ||
| 41 | + } | ||
| 80 | } | 42 | } |
| 81 | } | 43 | } |
| 82 | } | 44 | } |
| 83 | } | 45 | } |
| 84 | -}) | 46 | +}); |
| 85 | 47 | ||
| 86 | router.afterEach(() => { | 48 | router.afterEach(() => { |
| 87 | - NProgress.done() | ||
| 88 | -}) | 49 | + NProgress.done(); |
| 50 | +}); | ||
| 89 | router.onError((error) => { | 51 | router.onError((error) => { |
| 90 | const pattern = /Loading chunk (\d)+ failed/g; | 52 | const pattern = /Loading chunk (\d)+ failed/g; |
| 91 | const isChunkLoadFailed = error.message.match(pattern); | 53 | const isChunkLoadFailed = error.message.match(pattern); |
| 92 | const targetPath = router.history.pending.fullPath; | 54 | const targetPath = router.history.pending.fullPath; |
| 93 | - if (isChunkLoadFailed) { router.replace(targetPath); } | 55 | + if (isChunkLoadFailed) { |
| 56 | + router.replace(targetPath); | ||
| 57 | + } | ||
| 94 | }); | 58 | }); |
src/store/index.js
| 1 | -import Vue from "vue" | ||
| 2 | -import Vuex from "vuex" | ||
| 3 | -import Cookies from "js-cookie" | ||
| 4 | -import layoutStore from "./modules/layout/index" | ||
| 5 | -import { defaultRouter } from "@/router/index" | 1 | +import Vue from "vue"; |
| 2 | +import Vuex from "vuex"; | ||
| 3 | +import Cookies from "js-cookie"; | ||
| 4 | +import layoutStore from "./modules/layout/index"; | ||
| 5 | +import { defaultRouter } from "@/router/index"; | ||
| 6 | import { encryptLoginPassword } from "@/utils"; | 6 | import { encryptLoginPassword } from "@/utils"; |
| 7 | 7 | ||
| 8 | -import request from "@/api/index" | ||
| 9 | -import router from "@/router/index" | ||
| 10 | -import { addrouters } from "@/router/index" | ||
| 11 | -Vue.use(Vuex) | 8 | +import request from "@/api/index"; |
| 9 | +import router from "@/router/index"; | ||
| 10 | +import { addrouters } from "@/router/index"; | ||
| 11 | +Vue.use(Vuex); | ||
| 12 | 12 | ||
| 13 | const store = new Vuex.Store({ | 13 | const store = new Vuex.Store({ |
| 14 | state: { | 14 | state: { |
| 15 | token: "", | 15 | token: "", |
| 16 | csCode: localStorage.getItem("csCode") || "", | 16 | csCode: localStorage.getItem("csCode") || "", |
| 17 | - info: sessionStorage.getItem("info") ? JSON.parse(sessionStorage.getItem("info")) : "", // 每次刷新都要通过token请求个人信息来筛选动态路由 | ||
| 18 | - routers: [],//左侧菜单 | ||
| 19 | - addRouters: sessionStorage.getItem("addRouters") ? JSON.parse(sessionStorage.getItem("addRouters")) : [],//动态路由 | ||
| 20 | - tokenSources: new Map(),//正在请求接口(切换取消请求) | 17 | + info: sessionStorage.getItem("info") |
| 18 | + ? JSON.parse(sessionStorage.getItem("info")) | ||
| 19 | + : "", // 每次刷新都要通过token请求个人信息来筛选动态路由 | ||
| 20 | + routers: [], //左侧菜单 | ||
| 21 | + addRouters: | ||
| 22 | + sessionStorage.getItem("addRouters") && | ||
| 23 | + sessionStorage.getItem("addRouters") != "undefined" | ||
| 24 | + ? JSON.parse(sessionStorage.getItem("addRouters")) | ||
| 25 | + : [], //动态路由 | ||
| 26 | + tokenSources: new Map(), //正在请求接口(切换取消请求) | ||
| 21 | }, | 27 | }, |
| 22 | mutations: { | 28 | mutations: { |
| 23 | setToken(state, token) { | 29 | setToken(state, token) { |
| 24 | - state.token = token | 30 | + state.token = token; |
| 25 | }, | 31 | }, |
| 26 | setCode(state, code) { | 32 | setCode(state, code) { |
| 27 | state.csCode = code; | 33 | state.csCode = code; |
| 28 | - localStorage.setItem("csCode", code) | 34 | + localStorage.setItem("csCode", code); |
| 29 | }, | 35 | }, |
| 30 | setInfo(state, data) { | 36 | setInfo(state, data) { |
| 31 | - state.info = { | ||
| 32 | - role: data.role, | ||
| 33 | - permissions: data.permissions, | ||
| 34 | - name: data.name, | ||
| 35 | - authorityRouter: data.authorityRouter, | ||
| 36 | - avatar: data.avatar ? data.avatar : "", | ||
| 37 | - uid: data.uid | ||
| 38 | - } | ||
| 39 | - sessionStorage.setItem("info", JSON.stringify(state.info)) | 37 | + state.info = { ...data }; |
| 38 | + sessionStorage.setItem("info", JSON.stringify(state.info)); | ||
| 40 | }, | 39 | }, |
| 41 | setRouters: (state, routers) => { | 40 | setRouters: (state, routers) => { |
| 42 | - let aRouters = addrouters.filter(item => { | ||
| 43 | - let path = item.children[0]?.path.replace("/", "") | ||
| 44 | - return routers?.includes(path) | ||
| 45 | - }) | 41 | + let aRouters = addrouters.filter((item) => { |
| 42 | + let path = item.children[0]?.path.replace("/", ""); | ||
| 43 | + return routers?.includes(path); | ||
| 44 | + }); | ||
| 46 | 45 | ||
| 47 | - state.addRouters = aRouters // 保存动态路由用来addRouter | ||
| 48 | - state.routers = defaultRouter.concat(aRouters) // 所有有权限的路由表,用来生成菜单列表 | ||
| 49 | - sessionStorage.setItem("addRouters", JSON.stringify(routers)) | 46 | + state.addRouters = aRouters; // 保存动态路由用来addRouter |
| 47 | + state.routers = defaultRouter.concat(aRouters); // 所有有权限的路由表,用来生成菜单列表 | ||
| 48 | + sessionStorage.setItem("addRouters", JSON.stringify(routers)); | ||
| 50 | }, | 49 | }, |
| 51 | setTokenSources(state, data) { | 50 | setTokenSources(state, data) { |
| 52 | if (data instanceof Array) { | 51 | if (data instanceof Array) { |
| 53 | - state.tokenSources.set(data[0], data[1]) | 52 | + state.tokenSources.set(data[0], data[1]); |
| 54 | } else { | 53 | } else { |
| 55 | - state.tokenSources = new Map() | 54 | + state.tokenSources = new Map(); |
| 56 | } | 55 | } |
| 57 | }, | 56 | }, |
| 58 | delTokenSources(state, data) { | 57 | delTokenSources(state, data) { |
| 59 | - state.tokenSources.delete(data) | 58 | + state.tokenSources.delete(data); |
| 60 | }, | 59 | }, |
| 61 | }, | 60 | }, |
| 62 | actions: { | 61 | actions: { |
| 63 | Login({ state, commit }, params) { | 62 | Login({ state, commit }, params) { |
| 64 | - let loginForm = {} | 63 | + let loginForm = {}; |
| 65 | loginForm.username = params.username; | 64 | loginForm.username = params.username; |
| 66 | loginForm.password = encryptLoginPassword(params.password); | 65 | loginForm.password = encryptLoginPassword(params.password); |
| 67 | - request.login({ ...loginForm }).then(res => { | ||
| 68 | - let response = res | ||
| 69 | - if (response.status == 0) { | ||
| 70 | - const userInfo = { ...response.data } | ||
| 71 | - commit("setToken", Cookies.get("ZT_YIJIAO_TOKEN")); | ||
| 72 | - commit("setInfo", { ...userInfo }); | ||
| 73 | - | ||
| 74 | - commit("setRouters", [...userInfo.authorityRouter]) | ||
| 75 | - state.addRouters.forEach((res) => { | ||
| 76 | - router.addRoute(res); | ||
| 77 | - }); | ||
| 78 | - router.addRoute({ | ||
| 79 | - path: "*", | ||
| 80 | - redirect: "/404", | ||
| 81 | - hidden: true, | ||
| 82 | - children: [] | ||
| 83 | - }) | ||
| 84 | - console.log() | ||
| 85 | - if (params.url) { | ||
| 86 | - window.location.href = params.url; | ||
| 87 | - } else { | ||
| 88 | - router.push({ path: "/" }) | 66 | + request |
| 67 | + .login({ ...loginForm }) | ||
| 68 | + .then((res) => { | ||
| 69 | + let response = res; | ||
| 70 | + if (response.status == 0) { | ||
| 71 | + const userInfo = { ...response.data }; | ||
| 72 | + userInfo.showRoleName = response.data.permissions[0]?.roleName; | ||
| 73 | + commit("setToken", "isLogin"); | ||
| 74 | + commit("setInfo", { ...userInfo }); | ||
| 75 | + commit("setRouters", [...userInfo.permissions[0]?.authorityRouter]); | ||
| 76 | + state.addRouters.forEach((res) => { | ||
| 77 | + router.addRoute(res); | ||
| 78 | + }); | ||
| 79 | + router.addRoute({ | ||
| 80 | + path: "*", | ||
| 81 | + redirect: "/404", | ||
| 82 | + hidden: true, | ||
| 83 | + children: [], | ||
| 84 | + }); | ||
| 85 | + console.log(Cookies.get("ZT_YIJIAO_TOKEN")); | ||
| 86 | + if (params.url) { | ||
| 87 | + window.location.href = params.url; | ||
| 88 | + } else { | ||
| 89 | + router.push({ path: "/" }); | ||
| 90 | + } | ||
| 89 | } | 91 | } |
| 90 | - } | ||
| 91 | - }).catch(() => { | ||
| 92 | - }) | 92 | + }) |
| 93 | + .catch(() => {}); | ||
| 93 | }, | 94 | }, |
| 94 | - permissions({ state, commit }, that) { | ||
| 95 | - let userInfo = { | ||
| 96 | - permissions: [ | ||
| 97 | - { | ||
| 98 | - role: "ROLE_XUEXIAO", | ||
| 99 | - roleName: "学校管理员", | ||
| 100 | - }, | ||
| 101 | - { | ||
| 102 | - role: "ROLE_LAOSHI", | ||
| 103 | - roleName: "老师", | ||
| 104 | - }, | ||
| 105 | - ], | ||
| 106 | - name: "李老师", | ||
| 107 | - authorityRouter:[ | ||
| 108 | - "setUpAccount", | ||
| 109 | - "setUpSchool", | ||
| 110 | - "setUpTeacher", | ||
| 111 | - "setUpStudent", | ||
| 112 | - "card", | ||
| 113 | - "device", | ||
| 114 | - "analysis", | ||
| 115 | - "down", | ||
| 116 | - "downClient", | ||
| 117 | - "dataSync" | ||
| 118 | - ], | ||
| 119 | - } | ||
| 120 | - commit("setToken", "xxxx") | 95 | + permissions({ state, commit }, role) { |
| 96 | + commit("setToken", "isLogin"); | ||
| 97 | + let userInfo = state.info; | ||
| 98 | + let authorityRouterObj = userInfo.permissions.filter((item) => { | ||
| 99 | + return item.role == role; | ||
| 100 | + }); | ||
| 101 | + userInfo.showRoleName = authorityRouterObj[0]?.roleName | ||
| 121 | commit("setInfo", userInfo); | 102 | commit("setInfo", userInfo); |
| 122 | - commit("setRouters", [...userInfo.authorityRouter]) | 103 | + commit("setRouters", [...authorityRouterObj[0]?.authorityRouter]); |
| 123 | state.addRouters.forEach((res) => { | 104 | state.addRouters.forEach((res) => { |
| 124 | router.addRoute(res); | 105 | router.addRoute(res); |
| 125 | }); | 106 | }); |
| @@ -127,27 +108,26 @@ const store = new Vuex.Store({ | @@ -127,27 +108,26 @@ const store = new Vuex.Store({ | ||
| 127 | path: "*", | 108 | path: "*", |
| 128 | redirect: "/404", | 109 | redirect: "/404", |
| 129 | hidden: true, | 110 | hidden: true, |
| 130 | - children: [] | ||
| 131 | - }) | ||
| 132 | - // } | ||
| 133 | - // }) | ||
| 134 | - } | 111 | + children: [], |
| 112 | + }); | ||
| 113 | + router.push({ path: "/" }); | ||
| 114 | + }, | ||
| 135 | }, | 115 | }, |
| 136 | getters: { | 116 | getters: { |
| 137 | - addRouters: state => state.addRouters, | ||
| 138 | - token: state => state.token, | ||
| 139 | - code: state => state.csCode, | ||
| 140 | - info: state => state.info, | ||
| 141 | - routers: state => state.routers, | ||
| 142 | - logoShow: state => state.layoutStore.logoShow, | ||
| 143 | - isCollapse: state => state.layoutStore.isCollapse, | ||
| 144 | - uniquerouter: state => state.layoutStore.uniquerouter, | ||
| 145 | - tabnavBox: state => state.layoutStore.tabnavBox, | ||
| 146 | - rightNav: state => state.layoutStore.rightNav | 117 | + addRouters: (state) => state.addRouters, |
| 118 | + token: (state) => state.token, | ||
| 119 | + code: (state) => state.csCode, | ||
| 120 | + info: (state) => state.info, | ||
| 121 | + routers: (state) => state.routers, | ||
| 122 | + logoShow: (state) => state.layoutStore.logoShow, | ||
| 123 | + isCollapse: (state) => state.layoutStore.isCollapse, | ||
| 124 | + uniquerouter: (state) => state.layoutStore.uniquerouter, | ||
| 125 | + tabnavBox: (state) => state.layoutStore.tabnavBox, | ||
| 126 | + rightNav: (state) => state.layoutStore.rightNav, | ||
| 147 | }, | 127 | }, |
| 148 | modules: { | 128 | modules: { |
| 149 | - layoutStore | ||
| 150 | - } | ||
| 151 | -}) | 129 | + layoutStore, |
| 130 | + }, | ||
| 131 | +}); | ||
| 152 | 132 | ||
| 153 | -export default store | 133 | +export default store; |
src/views/index/mainIndex.vue
| @@ -102,7 +102,7 @@ export default { | @@ -102,7 +102,7 @@ export default { | ||
| 102 | }; | 102 | }; |
| 103 | }, | 103 | }, |
| 104 | watch:{ | 104 | watch:{ |
| 105 | - "$store.getters.routers":function(val){ | 105 | + "$store.getters.info.showRoleName":function(val){ |
| 106 | window.location.reload() | 106 | window.location.reload() |
| 107 | } | 107 | } |
| 108 | }, | 108 | }, |
src/views/layout/header/header.vue
| @@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
| 14 | <img :src="avatar" /> | 14 | <img :src="avatar" /> |
| 15 | <div class="txt"> | 15 | <div class="txt"> |
| 16 | <p>{{ `${this.$store.getters.info.name}` }}</p> | 16 | <p>{{ `${this.$store.getters.info.name}` }}</p> |
| 17 | - <p>{{ `${permissions[0].roleName}` }}</p> | 17 | + <p>{{ `${this.$store.getters.info.showRoleName}` }}</p> |
| 18 | </div> | 18 | </div> |
| 19 | <i class="el-icon-arrow-down"></i> | 19 | <i class="el-icon-arrow-down"></i> |
| 20 | </div> | 20 | </div> |
| @@ -125,7 +125,7 @@ export default { | @@ -125,7 +125,7 @@ export default { | ||
| 125 | }, | 125 | }, |
| 126 | handleCommand(command) { | 126 | handleCommand(command) { |
| 127 | //刷新权限跳转首页 | 127 | //刷新权限跳转首页 |
| 128 | - this.$store.dispatch("permissions", this); | 128 | + this.$store.dispatch("permissions", command); |
| 129 | }, | 129 | }, |
| 130 | async logOut() { | 130 | async logOut() { |
| 131 | const { data,status } = await this.$request.logout(); | 131 | const { data,status } = await this.$request.logout(); |
src/views/login/index.vue
| @@ -92,8 +92,10 @@ export default { | @@ -92,8 +92,10 @@ export default { | ||
| 92 | loginForm: { | 92 | loginForm: { |
| 93 | // username: "13610050254", | 93 | // username: "13610050254", |
| 94 | // password: "Pw050254#", | 94 | // password: "Pw050254#", |
| 95 | - username: "18946034886", | ||
| 96 | - password: "Pw034886#", | 95 | + // username: "18946034886", |
| 96 | + // password: "Pw034886#", | ||
| 97 | + username: "18332123505", | ||
| 98 | + password: "Pw123505#", | ||
| 97 | }, | 99 | }, |
| 98 | loginRules: { | 100 | loginRules: { |
| 99 | username: [ | 101 | username: [ |
src/views/setUp/account.vue
| 1 | <template> | 1 | <template> |
| 2 | - <div>账号管理</div> | 2 | + <div> |
| 3 | + <back-box> | ||
| 4 | + <template slot="title"> | ||
| 5 | + <span>账号管理</span> | ||
| 6 | + </template> | ||
| 7 | + </back-box> | ||
| 8 | + <div class="answer-header"> | ||
| 9 | + <div class="sel-box"> | ||
| 10 | + <el-select | ||
| 11 | + class="sel" | ||
| 12 | + v-model="query.id" | ||
| 13 | + placeholder="选择账号角色" | ||
| 14 | + @change="(page = 1),_QueryData(1)" | ||
| 15 | + > | ||
| 16 | + <el-option | ||
| 17 | + v-for="item in roleList" | ||
| 18 | + :key="item.id" | ||
| 19 | + :label="item.roleName" | ||
| 20 | + :value="item.id" | ||
| 21 | + > | ||
| 22 | + </el-option> | ||
| 23 | + </el-select> | ||
| 24 | + <el-select | ||
| 25 | + class="sel" | ||
| 26 | + v-model="query.available" | ||
| 27 | + placeholder="选择账号状态" | ||
| 28 | + @change="(page = 1),_QueryData(1)" | ||
| 29 | + > | ||
| 30 | + <el-option label="可用" :value="0"></el-option> | ||
| 31 | + <el-option label="不可用" :value="1"></el-option> | ||
| 32 | + </el-select> | ||
| 33 | + <el-input | ||
| 34 | + type="number" | ||
| 35 | + placeholder="请输入老师账号" | ||
| 36 | + v-model="query.loginName" | ||
| 37 | + class="input-with-select" | ||
| 38 | + @keyup.enter.native="(page = 1),_QueryData(2)" | ||
| 39 | + > | ||
| 40 | + <el-button | ||
| 41 | + slot="append" | ||
| 42 | + icon="el-icon-search" | ||
| 43 | + @click="(page = 1),_QueryData(2)" | ||
| 44 | + ></el-button> | ||
| 45 | + </el-input> | ||
| 46 | + <el-input | ||
| 47 | + placeholder="请输入老师姓名" | ||
| 48 | + v-model="query.realName" | ||
| 49 | + class="input-with-select" | ||
| 50 | + @keyup.enter.native="(page = 1),_QueryData(3)" | ||
| 51 | + > | ||
| 52 | + <el-button | ||
| 53 | + slot="append" | ||
| 54 | + icon="el-icon-search" | ||
| 55 | + @click="(page = 1),_QueryData(3)" | ||
| 56 | + ></el-button> | ||
| 57 | + </el-input> | ||
| 58 | + </div> | ||
| 59 | + </div> | ||
| 60 | + <div class="table-box"> | ||
| 61 | + <el-table | ||
| 62 | + :data="tableData" | ||
| 63 | + border | ||
| 64 | + style="width: 100%" | ||
| 65 | + v-loading="loading" | ||
| 66 | + > | ||
| 67 | + <el-table-column | ||
| 68 | + prop="loginName" | ||
| 69 | + label="账号" | ||
| 70 | + align="center" | ||
| 71 | + ></el-table-column> | ||
| 72 | + <el-table-column | ||
| 73 | + prop="realName" | ||
| 74 | + label="姓名" | ||
| 75 | + align="center" | ||
| 76 | + ></el-table-column> | ||
| 77 | + <el-table-column prop="roleList" label="角色" align="center"> | ||
| 78 | + <template slot-scope="scoped"> | ||
| 79 | + <span v-for="(item, index) in scoped.row.roleList" :key="item.id">{{ | ||
| 80 | + `${item.roleName}${ | ||
| 81 | + index != scoped.row.roleList.length - 1 ? "、" : "" | ||
| 82 | + }` | ||
| 83 | + }}</span> | ||
| 84 | + </template> | ||
| 85 | + </el-table-column> | ||
| 86 | + <el-table-column prop="available" label="状态" align="center" | ||
| 87 | + ><template slot-scope="scoped">{{ | ||
| 88 | + `${scoped.row.available == 0 ? "可用" : "不可用"}` | ||
| 89 | + }}</template></el-table-column | ||
| 90 | + > | ||
| 91 | + <el-table-column | ||
| 92 | + prop="createdTime" | ||
| 93 | + label="创建时间" | ||
| 94 | + align="center" | ||
| 95 | + ></el-table-column> | ||
| 96 | + <el-table-column label="操作" align="center" width="160"> | ||
| 97 | + <template slot-scope="scoped"> | ||
| 98 | + <el-tooltip content="修改账号" placement="left"> | ||
| 99 | + <el-button | ||
| 100 | + class="set-count" | ||
| 101 | + type="primary" | ||
| 102 | + circle | ||
| 103 | + icon="el-icon-edit-outline" | ||
| 104 | + size="mini" | ||
| 105 | + @click="setCount(scoped.row)" | ||
| 106 | + ></el-button> | ||
| 107 | + </el-tooltip> | ||
| 108 | + <el-dropdown | ||
| 109 | + trigger="hover" | ||
| 110 | + @command="handleDropdownClick($event, scoped.row)" | ||
| 111 | + > | ||
| 112 | + <el-button | ||
| 113 | + type="info" | ||
| 114 | + size="mini" | ||
| 115 | + circle | ||
| 116 | + icon="el-icon-more" | ||
| 117 | + ></el-button> | ||
| 118 | + <el-dropdown-menu slot="dropdown"> | ||
| 119 | + <el-dropdown-item :command="0">重置密码</el-dropdown-item> | ||
| 120 | + <el-dropdown-item :command="1">禁用</el-dropdown-item> | ||
| 121 | + <el-dropdown-item :command="2">删除</el-dropdown-item> | ||
| 122 | + </el-dropdown-menu> | ||
| 123 | + </el-dropdown> | ||
| 124 | + </template> | ||
| 125 | + </el-table-column> | ||
| 126 | + </el-table> | ||
| 127 | + <div class="pagination-box"> | ||
| 128 | + <el-pagination | ||
| 129 | + small="" | ||
| 130 | + layout="total,prev, pager, next" | ||
| 131 | + :hide-on-single-page="true" | ||
| 132 | + :total="total" | ||
| 133 | + @current-change="changePage" | ||
| 134 | + :current-page="page" | ||
| 135 | + :page-size="size" | ||
| 136 | + > | ||
| 137 | + </el-pagination> | ||
| 138 | + </div> | ||
| 139 | + <el-empty | ||
| 140 | + v-if="!loading && tableData.length == 0" | ||
| 141 | + content="没有更多数据" | ||
| 142 | + :image-size="100" | ||
| 143 | + ></el-empty> | ||
| 144 | + </div> | ||
| 145 | + <el-dialog title="修改年级信息" :visible.sync="diaCount" width="400"> | ||
| 146 | + <el-form | ||
| 147 | + class="form-box" | ||
| 148 | + :model="formCount" | ||
| 149 | + :rules="ruleCount" | ||
| 150 | + ref="formCount" | ||
| 151 | + label-width="160px" | ||
| 152 | + > | ||
| 153 | + <el-form-item label="手机号码:" prop="loginName"> | ||
| 154 | + <el-col :span="12"> | ||
| 155 | + <el-input | ||
| 156 | + placeholder="请输入联系电话" | ||
| 157 | + v-model.trim="formCount.loginName" | ||
| 158 | + maxlength="11" | ||
| 159 | + > | ||
| 160 | + </el-input> | ||
| 161 | + </el-col> | ||
| 162 | + </el-form-item> | ||
| 163 | + <el-form-item label="姓名:" prop="realName"> | ||
| 164 | + <el-col :span="12"> | ||
| 165 | + <el-input | ||
| 166 | + placeholder="请输入教师姓名" | ||
| 167 | + v-model.trim="formCount.realName" | ||
| 168 | + maxlength="11" | ||
| 169 | + > | ||
| 170 | + </el-input> | ||
| 171 | + </el-col> | ||
| 172 | + </el-form-item> | ||
| 173 | + </el-form> | ||
| 174 | + <div class="dialog-footer" slot="footer"> | ||
| 175 | + <el-button @click="saveCount">确 定</el-button> | ||
| 176 | + <el-button @click="diaCount = false">取 消</el-button> | ||
| 177 | + </div> | ||
| 178 | + </el-dialog> | ||
| 179 | + </div> | ||
| 3 | </template> | 180 | </template> |
| 4 | 181 | ||
| 5 | <script> | 182 | <script> |
| 6 | export default { | 183 | export default { |
| 184 | + data() { | ||
| 185 | + return { | ||
| 186 | + loading: false, | ||
| 187 | + diaCount: false, | ||
| 188 | + formCount: { | ||
| 189 | + userId: "", | ||
| 190 | + loginName: "", | ||
| 191 | + realName: "", | ||
| 192 | + }, | ||
| 193 | + ruleCount: { | ||
| 194 | + loginName: [ | ||
| 195 | + { required: true, message: "请输入联系电话", trigger: "blur" }, | ||
| 196 | + ], | ||
| 197 | + realName: [ | ||
| 198 | + { required: true, message: "请输入教师姓名", trigger: "blur" }, | ||
| 199 | + ], | ||
| 200 | + }, | ||
| 201 | + roleList: [], | ||
| 202 | + query: { | ||
| 203 | + roleId: "", | ||
| 204 | + available: "", | ||
| 205 | + loginName: "", | ||
| 206 | + realName: "", | ||
| 207 | + }, | ||
| 208 | + tableData: [], | ||
| 209 | + total: 0, | ||
| 210 | + page: 1, | ||
| 211 | + size: 20, | ||
| 212 | + }; | ||
| 213 | + }, | ||
| 214 | + created() { | ||
| 215 | + this._QueryData(4); | ||
| 216 | + this._RoleList(); | ||
| 217 | + }, | ||
| 218 | + methods: { | ||
| 219 | + setCount(obj) { | ||
| 220 | + this.formCount.userId = obj.userId; | ||
| 221 | + this.formCount.loginName = obj.loginName; | ||
| 222 | + this.formCount.realName = obj.realName; | ||
| 223 | + this.diaCount = true; | ||
| 224 | + }, | ||
| 225 | + handleDropdownClick(value, item) { | ||
| 226 | + //更多 | ||
| 227 | + this.updateUser(item, value); | ||
| 228 | + }, | ||
| 229 | + changePage(page) { | ||
| 230 | + this.page = page; | ||
| 231 | + this._QueryData(4); | ||
| 232 | + }, | ||
| 7 | 233 | ||
| 8 | -} | 234 | + saveCount() { |
| 235 | + this.$refs.formCount.validate(async (valid) => { | ||
| 236 | + if (valid) { | ||
| 237 | + const { data, status, info } = await this.$request.updateUser({ | ||
| 238 | + type: 3, | ||
| 239 | + ...this.formCount, | ||
| 240 | + }); | ||
| 241 | + if (status === 0) { | ||
| 242 | + this.$message.success(info); | ||
| 243 | + this._QueryData(4); | ||
| 244 | + } else { | ||
| 245 | + this.$message.error(info); | ||
| 246 | + } | ||
| 247 | + } else { | ||
| 248 | + console.log("输入有误请检查!"); | ||
| 249 | + return false; | ||
| 250 | + } | ||
| 251 | + }); | ||
| 252 | + }, | ||
| 253 | + async updateUser(obj, type) { | ||
| 254 | + let query = { | ||
| 255 | + userId: obj.userId, | ||
| 256 | + type: type, | ||
| 257 | + }; | ||
| 258 | + if (type == 1) { | ||
| 259 | + query.available = obj.available == 0 ? 1 : 0; | ||
| 260 | + } | ||
| 261 | + const { data, status, info } = await this.$request.updateUser({ | ||
| 262 | + ...query, | ||
| 263 | + }); | ||
| 264 | + if (status === 0) { | ||
| 265 | + this.$message.success(info); | ||
| 266 | + this._QueryData(4); | ||
| 267 | + } else { | ||
| 268 | + this.$message.error(info); | ||
| 269 | + } | ||
| 270 | + }, | ||
| 271 | + async _RoleList() { | ||
| 272 | + const { data, status, info } = await this.$request.roleList(); | ||
| 273 | + if (status === 0) { | ||
| 274 | + this.roleList = data.list || []; | ||
| 275 | + } else { | ||
| 276 | + this.$message.error(info); | ||
| 277 | + } | ||
| 278 | + }, | ||
| 279 | + async _QueryData(type) { | ||
| 280 | + let query = {}; | ||
| 281 | + if (type == 1) { | ||
| 282 | + query.roleId = this.query.roleId; | ||
| 283 | + query.available = this.query.available; | ||
| 284 | + this.query.loginName = ""; | ||
| 285 | + this.query.realName = ""; | ||
| 286 | + } else if (type == 2) { | ||
| 287 | + this.query.roleId = ""; | ||
| 288 | + this.query.available = ""; | ||
| 289 | + query.loginName = this.query.loginName; | ||
| 290 | + this.query.realName = ""; | ||
| 291 | + } else if (type == 3) { | ||
| 292 | + this.query.roleId = ""; | ||
| 293 | + this.query.available = ""; | ||
| 294 | + this.query.loginName = ""; | ||
| 295 | + query.realName = this.query.realName; | ||
| 296 | + } else { | ||
| 297 | + query = { ...this.query }; | ||
| 298 | + } | ||
| 299 | + this.loading = true; | ||
| 300 | + this.tableData = []; | ||
| 301 | + const { data, status, info } = await this.$request.userPage({ | ||
| 302 | + ...query, | ||
| 303 | + page: this.page, | ||
| 304 | + size: this.size, | ||
| 305 | + }); | ||
| 306 | + this.loading = false; | ||
| 307 | + if (status === 0) { | ||
| 308 | + this.tableData = data.list || []; | ||
| 309 | + this.total = data.count; | ||
| 310 | + } else { | ||
| 311 | + this.$message.error(info); | ||
| 312 | + } | ||
| 313 | + }, | ||
| 314 | + }, | ||
| 315 | +}; | ||
| 9 | </script> | 316 | </script> |
| 10 | 317 | ||
| 11 | -<style> | ||
| 12 | - | 318 | +<style lang="scss" scoped> |
| 319 | +.set-count { | ||
| 320 | + margin-right: 12px; | ||
| 321 | +} | ||
| 322 | +.table-box { | ||
| 323 | + padding: 0 20px; | ||
| 324 | +} | ||
| 13 | </style> | 325 | </style> |
| 14 | \ No newline at end of file | 326 | \ No newline at end of file |
src/views/setUp/index.vue deleted