|  |  | 
 |  |  | <template> | 
 |  |  |   <TableLayout :permissions="['system:permission:query']"> | 
 |  |  |     <!-- 搜索表单 --> | 
 |  |  |     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> | 
 |  |  |       <el-form-item label="权限编码" prop="code"> | 
 |  |  |         <el-input v-model="searchForm.code" v-trim placeholder="请输入权限编码" @keypress.enter.native="search"/> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="权限名称" prop="name"> | 
 |  |  |         <el-input v-model="searchForm.name" v-trim placeholder="请输入权限名称" @keypress.enter.native="search"/> | 
 |  |  |       </el-form-item> | 
 |  |  |       <section> | 
 |  |  |         <el-button type="primary" @click="search">搜索</el-button> | 
 |  |  |         <el-button @click="reset">重置</el-button> | 
 |  |  |       </section> | 
 |  |  |     </el-form> | 
 |  |  |     <!-- 表格和分页 --> | 
 |  |  |     <template v-slot:table-wrap> | 
 |  |  |       <ul class="toolbar" v-permissions="['system:permission:create', 'system:permission:delete']"> | 
 |  |  |         <li><el-button type="primary" @click="$refs.operaPermissionWindow.open('新建系统权限')" icon="el-icon-plus" v-permissions="['system:permission:create']">新建</el-button></li> | 
 |  |  |         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:permission:delete']">删除</el-button></li> | 
 |  |  |       </ul> | 
 |  |  |       <el-table | 
 |  |  |         v-loading="isWorking.search" | 
 |  |  |         :data="tableData.list" | 
 |  |  |         :default-sort = "{prop: 'createTime', order: 'descending'}" | 
 |  |  |         stripe | 
 |  |  |         @selection-change="handleSelectionChange" | 
 |  |  |         @sort-change="handleSortChange" | 
 |  |  |       > | 
 |  |  |         <el-table-column type="selection" fixed="left" width="55"></el-table-column> | 
 |  |  |         <el-table-column prop="code" label="权限编码" fixed="left" min-width="200px"></el-table-column> | 
 |  |  |         <el-table-column prop="name" label="权限名称" fixed="left" min-width="200px"></el-table-column> | 
 |  |  |         <el-table-column prop="remark" label="权限备注" min-width="200px"></el-table-column> | 
 |  |  |         <el-table-column prop="createUser" label="创建人" min-width="100px"> | 
 |  |  |           <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template> | 
 |  |  |         </el-table-column> | 
 |  |  |         <el-table-column prop="createTime" label="创建时间" min-width="140px" sortable="custom" sort-by="perm.CREATE_TIME"></el-table-column> | 
 |  |  |         <el-table-column prop="updateUser" label="更新人" min-width="100px"> | 
 |  |  |           <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template> | 
 |  |  |         </el-table-column> | 
 |  |  |         <el-table-column prop="updateTime" label="更新时间" min-width="140px"></el-table-column> | 
 |  |  |         <el-table-column | 
 |  |  |           v-if="containPermissions(['system:permission:update', 'system:permission:delete'])" | 
 |  |  |           label="操作" | 
 |  |  |           min-width="130" | 
 |  |  |           fixed="right" | 
 |  |  |         > | 
 |  |  |           <template slot-scope="{row}"> | 
 |  |  |             <el-button v-if="!row.fixed" type="text" @click="$refs.operaPermissionWindow.open('编辑系统权限', row)" icon="el-icon-edit" v-permissions="['system:permission:update']">编辑</el-button> | 
 |  |  |             <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:permission:delete']">删除</el-button> | 
 |  |  |           </template> | 
 |  |  |         </el-table-column> | 
 |  |  |       </el-table> | 
 |  |  |       <pagination | 
 |  |  |         @size-change="handleSizeChange" | 
 |  |  |         @current-change="handlePageChange" | 
 |  |  |         :pagination="tableData.pagination" | 
 |  |  |       ></pagination> | 
 |  |  |       <el-tabs v-model="currentTab" v-loading="isWorking.search"> | 
 |  |  |         <el-tab-pane :name="'module'+module.id" :label="module.name" v-for="module in tableData.list" :key="module.id"> | 
 |  |  |           <ul class="toolbar" v-permissions="['system:permission:create', 'system:permission:delete']"> | 
 |  |  |             <li><el-button type="primary" @click="$refs.operaPermissionWindow.open('新建系统权限', module)" icon="el-icon-plus" v-permissions="['system:permission:create']">新建</el-button></li> | 
 |  |  |             <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:permission:delete']">删除</el-button></li> | 
 |  |  |           </ul> | 
 |  |  |           <el-table | 
 |  |  |               :height="tableHeightNew" | 
 |  |  |             :data="module.children" | 
 |  |  |             :ref="'module' + module.id" | 
 |  |  |             row-key="id" | 
 |  |  |             stripe | 
 |  |  |             default-expand-all | 
 |  |  |             @selection-change="handleSelectionChange" | 
 |  |  |           > | 
 |  |  |             <el-table-column type="selection" fixed="left" width="55"></el-table-column> | 
 |  |  |             <el-table-column prop="name" label="权限名称" fixed="left" min-width="200px"></el-table-column> | 
 |  |  |             <el-table-column prop="code" label="权限编码" min-width="200px"></el-table-column> | 
 |  |  |             <el-table-column prop="remark" label="权限备注" min-width="120px"></el-table-column> | 
 |  |  |             <el-table-column prop="createUser" label="创建人" min-width="100px"> | 
 |  |  |               <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template> | 
 |  |  |             </el-table-column> | 
 |  |  |             <el-table-column prop="createTime" label="创建时间" min-width="140px"></el-table-column> | 
 |  |  |             <el-table-column prop="updateUser" label="更新人" min-width="100px"> | 
 |  |  |               <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template> | 
 |  |  |             </el-table-column> | 
 |  |  |             <el-table-column prop="updateTime" label="更新时间" min-width="140px"></el-table-column> | 
 |  |  |             <el-table-column | 
 |  |  |               v-if="containPermissions(['system:permission:update', 'system:permission:delete'])" | 
 |  |  |               label="操作" | 
 |  |  |               min-width="150" | 
 |  |  |               fixed="right" | 
 |  |  |             > | 
 |  |  |               <template slot-scope="{row}"> | 
 |  |  |                 <!-- 模块编辑&删除 --> | 
 |  |  |                 <template v-if="row.type === 'module'"> | 
 |  |  |                   <el-button type="text" @click="$refs.operaModuleWindow.open('编辑模块', row)" icon="el-icon-edit" v-permissions="['system:permission:update']">编辑</el-button> | 
 |  |  |                   <el-button type="text" @click="$refs.operaPermissionWindow.open('新建系统权限', row)" icon="el-icon-edit" v-permissions="['system:permission:update']">添加权限</el-button> | 
 |  |  |                   <el-button v-if="!row.fixed" type="text" @click="deletePermission(row)" icon="el-icon-delete" v-permissions="['system:permission:delete']">删除</el-button> | 
 |  |  |                 </template> | 
 |  |  |                 <!-- 权限编辑&删除 --> | 
 |  |  |                 <template v-else> | 
 |  |  |                   <el-button v-if="!row.fixed" type="text" @click="$refs.operaPermissionWindow.open('编辑系统权限', row)" icon="el-icon-edit" v-permissions="['system:permission:update']">编辑</el-button> | 
 |  |  |                   <el-button v-if="!row.fixed" type="text" @click="deletePermission(row)" icon="el-icon-delete" v-permissions="['system:permission:delete']">删除</el-button> | 
 |  |  |                 </template> | 
 |  |  |               </template> | 
 |  |  |             </el-table-column> | 
 |  |  |           </el-table> | 
 |  |  |         </el-tab-pane> | 
 |  |  |       </el-tabs> | 
 |  |  |     </template> | 
 |  |  |     <!-- 新建/修改 --> | 
 |  |  |     <OperaPermissionWindow ref="operaPermissionWindow" @success="handlePageChange"/> | 
 |  |  |     <OperaPermissionWindow ref="operaPermissionWindow" @success="search"/> | 
 |  |  |     <!-- 编辑权限模块 --> | 
 |  |  |     <OperaModuleWindow ref="operaModuleWindow" @success="handlePageChange"/> | 
 |  |  |   </TableLayout> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import Pagination from '@/components/common/Pagination' | 
 |  |  | import TableLayout from '@/layouts/TableLayout' | 
 |  |  | import BaseTable from '@/components/base/BaseTable' | 
 |  |  | import OperaPermissionWindow from '@/components/system/permission/OperaPermissionWindow' | 
 |  |  | import OperaModuleWindow from '@/components/system/permission/OperaModuleWindow' | 
 |  |  |  | 
 |  |  | export default { | 
 |  |  |   name: 'SystemPermission', | 
 |  |  |   extends: BaseTable, | 
 |  |  |   components: { OperaPermissionWindow, TableLayout, Pagination }, | 
 |  |  |   components: { OperaModuleWindow, OperaPermissionWindow, TableLayout }, | 
 |  |  |   data () { | 
 |  |  |     return { | 
 |  |  |       // 搜索 | 
 |  |  |       searchForm: { | 
 |  |  |         code: '', | 
 |  |  |         name: '', | 
 |  |  |         remark: '' | 
 |  |  |       // 当前选中的模块 | 
 |  |  |       currentTab: null | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     /** | 
 |  |  |      * 覆盖页码变更处理 | 
 |  |  |      */ | 
 |  |  |     handlePageChange () { | 
 |  |  |       this.isWorking.search = true | 
 |  |  |       this.api.fetchTree() | 
 |  |  |         .then(data => { | 
 |  |  |           this.tableData.list = data | 
 |  |  |           this.currentTab = 'module' + this.tableData.list[0].id | 
 |  |  |         }) | 
 |  |  |         .catch(e => { | 
 |  |  |           this.$tip.apiFailed(e) | 
 |  |  |         }) | 
 |  |  |         .finally(() => { | 
 |  |  |           this.isWorking.search = false | 
 |  |  |         }) | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * 覆盖删除处理 | 
 |  |  |      */ | 
 |  |  |     deletePermission (row, childConfirm = true) { | 
 |  |  |       this.__checkApi() | 
 |  |  |       let message = `确认删除${this.module}【${row[this.configData['field.main']]}】吗?` | 
 |  |  |       if (childConfirm && row.children != null && row.children.length > 0) { | 
 |  |  |         message = `确认删除${this.module}【${row[this.configData['field.main']]}】及其子${this.module}吗?` | 
 |  |  |       } | 
 |  |  |       this.$dialog.deleteConfirm(message) | 
 |  |  |         .then(() => { | 
 |  |  |           this.isWorking.delete = true | 
 |  |  |           this.api.deletePermission({ | 
 |  |  |             id: row.type === 'module' ? null : row.id, // 模块不传ID | 
 |  |  |             modulePrefix: row.type === 'module' ? row.modulePath : null // 权限不传模块 | 
 |  |  |           }) | 
 |  |  |             .then(() => { | 
 |  |  |               this.$tip.apiSuccess('删除成功') | 
 |  |  |               this.__afterDelete() | 
 |  |  |             }) | 
 |  |  |             .catch(e => { | 
 |  |  |               this.$tip.apiFailed(e) | 
 |  |  |             }) | 
 |  |  |             .finally(() => { | 
 |  |  |               this.isWorking.delete = false | 
 |  |  |             }) | 
 |  |  |         }) | 
 |  |  |         .catch(() => {}) | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * 覆盖批量删除处理 | 
 |  |  |      */ | 
 |  |  |     deleteByIdInBatch (childConfirm = true) { | 
 |  |  |       this.__checkApi() | 
 |  |  |       if (this.tableData.selectedRows.length === 0) { | 
 |  |  |         this.$tip.warning('请至少选择一条数据') | 
 |  |  |         return | 
 |  |  |       } | 
 |  |  |       let message = `确认删除已选中的 ${this.tableData.selectedRows.length} 条${this.module}记录吗?` | 
 |  |  |       if (childConfirm) { | 
 |  |  |         const containChildrenRows = [] | 
 |  |  |         for (const row of this.tableData.selectedRows) { | 
 |  |  |           if (row.children != null && row.children.length > 0) { | 
 |  |  |             containChildrenRows.push(row[this.configData['field.main']]) | 
 |  |  |           } | 
 |  |  |         } | 
 |  |  |         if (containChildrenRows.length > 0) { | 
 |  |  |           message = `本次将删除${this.module}【${containChildrenRows.join('、')}】及其子${this.module}记录,确认删除吗?` | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |       this.$dialog.deleteConfirm(message) | 
 |  |  |         .then(() => { | 
 |  |  |           this.isWorking.delete = true | 
 |  |  |           this.api.deletePermissionInBatch(this.tableData.selectedRows.map(row => { | 
 |  |  |             return { | 
 |  |  |               id: row.type === 'module' ? null : row.id, // 模块不传ID | 
 |  |  |               modulePrefix: row.type === 'module' ? row.modulePath : null // 权限不传模块 | 
 |  |  |             } | 
 |  |  |           })) | 
 |  |  |             .then(() => { | 
 |  |  |               this.$tip.apiSuccess('删除成功') | 
 |  |  |               this.__afterDelete(this.tableData.selectedRows.length) | 
 |  |  |             }) | 
 |  |  |             .catch(e => { | 
 |  |  |               this.$tip.apiFailed(e) | 
 |  |  |             }) | 
 |  |  |             .finally(() => { | 
 |  |  |               this.isWorking.delete = false | 
 |  |  |             }) | 
 |  |  |         }) | 
 |  |  |         .catch(() => {}) | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created () { | 
 |  |  |     this.config({ | 
 |  |  |       module: '权限', | 
 |  |  |       api: '/system/permission', | 
 |  |  |       sorts: [{ | 
 |  |  |         property: 'perm.CREATE_TIME', | 
 |  |  |         direction: 'DESC' | 
 |  |  |       }] | 
 |  |  |       api: '/system/permission' | 
 |  |  |     }) | 
 |  |  |     this.search() | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style scoped lang="scss"> | 
 |  |  | /deep/ .table-content { | 
 |  |  |   margin-top: 0; | 
 |  |  |   .table-wrap { | 
 |  |  |     padding-bottom: 16px; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | /deep/ .el-tabs__nav-prev, /deep/ .el-tabs__nav-next { | 
 |  |  |   line-height: 40px; | 
 |  |  | } | 
 |  |  | </style> |