| ¶Ô±ÈÐÂÎļþ | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <GlobalWindow | 
|---|
|  |  |  | class="menu-config-dialog" | 
|---|
|  |  |  | :visible.sync="visible" | 
|---|
|  |  |  | :confirm-working="isWorking" | 
|---|
|  |  |  | width="576px" | 
|---|
|  |  |  | title="ææèå" | 
|---|
|  |  |  | @confirm="confirm" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <p class="tip" v-if="role != null">为è§è² <em>{{role.name}}</em> é
ç½®å¯è®¿é®çèå</p> | 
|---|
|  |  |  | <el-tree | 
|---|
|  |  |  | ref="tree" | 
|---|
|  |  |  | :data="menus" | 
|---|
|  |  |  | show-checkbox | 
|---|
|  |  |  | node-key="id" | 
|---|
|  |  |  | default-expand-all | 
|---|
|  |  |  | :default-checked-keys="selectedIds" | 
|---|
|  |  |  | :expand-on-click-node="false" | 
|---|
|  |  |  | :check-on-click-node="true" | 
|---|
|  |  |  | :props="{children: 'children',label: 'name'}"> | 
|---|
|  |  |  | </el-tree> | 
|---|
|  |  |  | </GlobalWindow> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | import GlobalWindow from '@/components/common/GlobalWindow' | 
|---|
|  |  |  | import { createRoleMenu } from '@/api/system/role' | 
|---|
|  |  |  | import { fetchTree as fetchMenuList } from '@/api/system/menu' | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'MenuConfigWindow', | 
|---|
|  |  |  | components: { GlobalWindow }, | 
|---|
|  |  |  | data () { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | visible: false, | 
|---|
|  |  |  | isWorking: false, | 
|---|
|  |  |  | // è§è² | 
|---|
|  |  |  | role: null, | 
|---|
|  |  |  | // ææèå | 
|---|
|  |  |  | menus: [], | 
|---|
|  |  |  | // å·²éä¸çèå | 
|---|
|  |  |  | selectedIds: [] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * æå¼çªå£ | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param role ç®æ è§è² | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | open (role) { | 
|---|
|  |  |  | fetchMenuList({}) | 
|---|
|  |  |  | .then(records => { | 
|---|
|  |  |  | this.role = role | 
|---|
|  |  |  | this.menus = records | 
|---|
|  |  |  | // å¦æä¸ºåºå®è§è²ï¼ååºå®èåä¸å¯æ´æ¹ | 
|---|
|  |  |  | this.__handleFixedMenus(this.menus, this.role) | 
|---|
|  |  |  | // æ¾åºå¶èç¹ | 
|---|
|  |  |  | role.menus = role.menus.filter(menu => role.menus.findIndex(m => m.parentId === menu.id) === -1) | 
|---|
|  |  |  | // åå§åéä¸ | 
|---|
|  |  |  | this.selectedIds = role.menus.map(r => r.id) | 
|---|
|  |  |  | this.visible = true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(e => { | 
|---|
|  |  |  | this.$tip.apiFailed(e) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * ç¡®è®¤éæ©èå | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | confirm () { | 
|---|
|  |  |  | const selectedMenus = this.$refs.tree.getCheckedNodes(false, true) | 
|---|
|  |  |  | this.isWorking = true | 
|---|
|  |  |  | createRoleMenu({ | 
|---|
|  |  |  | roleId: this.role.id, | 
|---|
|  |  |  | menuIds: selectedMenus.map(menu => menu.id) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | this.$tip.apiSuccess('èåæææå') | 
|---|
|  |  |  | this.visible = false | 
|---|
|  |  |  | this.$emit('success') | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(e => { | 
|---|
|  |  |  | this.$tip.apiFailed(e) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .finally(() => { | 
|---|
|  |  |  | this.isWorking = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * å¤çåºå®èå | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param menus èåå表 | 
|---|
|  |  |  | * @param role è§è² | 
|---|
|  |  |  | * @private | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | __handleFixedMenus (menus, role) { | 
|---|
|  |  |  | if (menus == null || menus.length === 0) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (const menu of menus) { | 
|---|
|  |  |  | menu.disabled = false | 
|---|
|  |  |  | if (role.fixed && menu.fixed) { | 
|---|
|  |  |  | menu.disabled = true | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.__handleFixedMenus(menu.children, role) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style scoped lang="scss"> | 
|---|
|  |  |  | @import "@/assets/style/variables.scss"; | 
|---|
|  |  |  | .global-window { | 
|---|
|  |  |  | .tip { | 
|---|
|  |  |  | margin-bottom: 12px; | 
|---|
|  |  |  | em { | 
|---|
|  |  |  | font-style: normal; | 
|---|
|  |  |  | color: $primary-color; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|