From 0d78cec16bff27edba259574f2c6c3f1c4e8b4e4 Mon Sep 17 00:00:00 2001 From: ky_sunl Date: Wed, 21 Apr 2021 06:19:11 +0000 Subject: [PATCH] --- .../src/assets/style/app.less | 1 + .../src/assets/style/lib/authority-view.less | 24 ++ .../src/common/api/index.js | 27 +- .../src/components/yoAuthorityView/index.js | 202 +++++++++++ .../src/components/yoTreeLayout/index.js | 2 - .../src/pages/system/role/addForm.vue | 2 +- .../src/pages/system/role/editForm.vue | 2 +- .../src/pages/system/role/index.vue | 43 +-- .../src/pages/system/role/menuForm.vue | 237 +++++-------- .../src/pages/system/role/orgForm.vue | 323 ++++++++---------- 10 files changed, 506 insertions(+), 357 deletions(-) create mode 100644 Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/authority-view.less create mode 100644 Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoAuthorityView/index.js diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less index 7988aaa..022da7f 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/app.less @@ -21,5 +21,6 @@ @import './lib/select.less'; @import './lib/dropdown.less'; @import './lib/tree-layout.less'; +@import './lib/authority-view.less'; @import './theme/primary.less'; // @import './lib/font-weight.less'; diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/authority-view.less b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/authority-view.less new file mode 100644 index 0000000..d48f0d4 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/assets/style/lib/authority-view.less @@ -0,0 +1,24 @@ +@import (reference) '~@/assets/style/extend.less'; +.yo-authority-view { + .ant-descriptions-item-label { + width: 150px; + } + .ant-descriptions { + margin-bottom: @padding-sm; + &:last-child { + margin-bottom: 0; + } + } + .ant-descriptions-item-content { + padding: @padding-sm @padding-md; + >.yo-authority-view--checkbox { + display: inline-block; + + width: 150px; + margin: @padding-xxs 0; + .ant-checkbox-wrapper { + margin: 0; + } + } + } +} diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js index eac6bda..de3f458 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/common/api/index.js @@ -28,10 +28,7 @@ const initInstance = () => { instance.interceptors.response.use((res) => { if (res.data.status === status.Unauthorized) { - token.value = '' - app.$router.replace({ - path: '/login' - }).catch(() => { }) + handlerUnauthorized() } return res }, (err) => { @@ -40,6 +37,8 @@ const initInstance = () => { return instance } +const errerCodes = [status.BadRequest, status.InternalServerError] + const errorNotification = ({ code, message }) => { switch (message.constructor) { case Array: @@ -61,6 +60,13 @@ const errorNotification = ({ code, message }) => { } } +const handlerUnauthorized = () => { + token.value = '' + app.$router.replace({ + path: '/login' + }).catch(() => { }) +} + const api = {} for (let key in urls) { @@ -96,21 +102,26 @@ for (let key in urls) { return new Promise((reslove, reject) => { api[`${key}Wait`](params) .then(({ data }) => { - if ([status.BadRequest].indexOf(data.code) >= 0) { + if (errerCodes.indexOf(data.code) >= 0) { errorNotification(data) reject(data) + } else if (data.code === status.Unauthorized) { + handlerUnauthorized() } else { reslove(data) } }) .catch(({ response: { data } }) => { if (process.env.VUE_APP_NODE_ENV === 'development') { + errorNotification(data) + reject(data) + if (data.code === status.Unauthorized) { + handlerUnauthorized() + } + } else { errorNotification({ message: '发生错误,请联系管理员' }) - } else { - errorNotification(data) - reject(data) } }) }) diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoAuthorityView/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoAuthorityView/index.js new file mode 100644 index 0000000..3c8f394 --- /dev/null +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoAuthorityView/index.js @@ -0,0 +1,202 @@ +export default { + props: { + loadData: { + type: Function, + require: true, + }, + + autoLoad: { + type: Boolean, + default: true + }, + + defaultSelectedKeys: { + type: Array, + default: [] + } + }, + + data() { + return { + loading: false, + + data: [], + list: [] + } + }, + + created() { + if (this.autoLoad) { + this.onLoadData() + } + }, + + methods: { + + renderDescriptions(data) { + return data.map(p => { + return p.children && p.children.length ? this.renderItem(p) : this.renderCheckbox(p) + }) + }, + + renderItem(data) { + return ( + + + this.onChange(e, data)} + >{data.title} + {this.renderDescriptions(data.children)} + + + ) + }, + + renderCheckbox(data) { + return ( +
+ this.onChange(e, data)} + >{data.title} +
+ ) + }, + + onLoadData() { + this.loading = true + + this.loadData().then((res) => { + this.data = this.generateCheck(res) + + this.list = [] + this.generateList(this.data) + + if (this.defaultSelectedKeys.length) { + this.list.map(p => { + if (this.defaultSelectedKeys.indexOf(p.id) > -1 && (!p.children || !p.children.length)) { + this.onSelect(true, p) + } + }) + } + + this.loading = false + }) + }, + + onReloadData() { + + this.data = [] + this.onLoadData() + + }, + + onChange(e, item) { + + this.onSelect(e.target.checked, item) + + this.$emit('select', this.list.filter(p => p.checked).map(p => p.id), this.list.filter(p => p.checked || p.indeterminate).map(p => p.id)) + }, + + onSelect(check, item) { + item.checked = check + item.indeterminate = false + if (item.children && item.children.length) { + this.onChangeChildren(item.checked, item.children) + } + if (item.parentId) { + this.onChangeParent(item.checked, item.parentId) + } + }, + + onChangeParent(checked, parentId) { + const parent = this.list.find(p => p.id === parentId) + if (parent) { + const checkedCount = parent.children.filter(p => p.checked).length + const indeterminateCount = parent.children.filter(p => p.indeterminate).length + if (checkedCount === parent.children.length) { + // 全选 + parent.checked = true + parent.indeterminate = false + } else if (!checkedCount && !indeterminateCount) { + // 全不选 + parent.checked = false + parent.indeterminate = false + } else { + // 半选 + parent.checked = false + parent.indeterminate = true + } + this.onChangeParent(checked, parent.parentId) + } + }, + + onChangeChildren(checked, children) { + children.forEach(p => { + p.checked = checked + p.indeterminate = false + if (p.children && p.children.length) { + this.onChangeChildren(checked, p.children) + } + }) + }, + + generateCheck(data) { + data.forEach(p => { + if (p.children && p.children.length) { + p.children = this.generateCheck(p.children) + } + p.checked = false + p.indeterminate = false + }) + + return data + }, + + generateList(data) { + data.forEach(p => { + if (p.children && p.children.length) { + this.generateList(p.children) + } + this.list.push(p) + }) + }, + + }, + + render() { + return ( +
+ + + { + !this.loading && + + { + this.data.map(p => { + return ( + + this.onChange(e, p)} + >{p.title} + {this.renderDescriptions(p.children)} + + ) + }) + } + + } + +
+ ) + } +} \ No newline at end of file diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTreeLayout/index.js b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTreeLayout/index.js index f3b7c31..c6e336c 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTreeLayout/index.js +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/components/yoTreeLayout/index.js @@ -1,5 +1,3 @@ -import { template } from "lodash" - export default { props: { loadData: { diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/addForm.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/addForm.vue index b30cf3c..712b517 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/addForm.vue +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/addForm.vue @@ -5,7 +5,7 @@ @cancel="onCancel" @ok="onOk" class="yo-modal-form" - title="新增应用" + title="新增角色" > diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/editForm.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/editForm.vue index ee99935..1998175 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/editForm.vue +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/editForm.vue @@ -5,7 +5,7 @@ @cancel="onCancel" @ok="onOk" class="yo-modal-form" - title="角色编辑" + title="编辑角色" > diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/index.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/index.vue index 9a31edb..25ca60c 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/index.vue +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/index.vue @@ -37,7 +37,7 @@ - + 授权 @@ -45,12 +45,12 @@ - 授权菜单 + 授权菜单 - 授权数据 + 授权数据 @@ -63,21 +63,21 @@
- - + + diff --git a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/orgForm.vue b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/orgForm.vue index 1c30806..0a847c8 100644 --- a/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/orgForm.vue +++ b/Api/Ewide.Core/Ewide.Core.Web.Src/src/pages/system/role/orgForm.vue @@ -1,195 +1,170 @@