From 153404ffa0a9c6d23d2c2732b46fa6929e86294f Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期三, 18 六月 2025 13:56:18 +0800 Subject: [PATCH] 111 --- admin/src/views/system/permission.vue | 190 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 190 insertions(+), 0 deletions(-) diff --git a/admin/src/views/system/permission.vue b/admin/src/views/system/permission.vue new file mode 100644 index 0000000..ec2fe7d --- /dev/null +++ b/admin/src/views/system/permission.vue @@ -0,0 +1,190 @@ +<template> + <TableLayout :permissions="['system:permission:query']"> + <!-- 琛ㄦ牸鍜屽垎椤� --> + <template v-slot:table-wrap> + <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="search"/> + <!-- 缂栬緫鏉冮檺妯″潡 --> + <OperaModuleWindow ref="operaModuleWindow" @success="handlePageChange"/> + </TableLayout> +</template> + +<script> +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: { OperaModuleWindow, OperaPermissionWindow, TableLayout }, + data () { + return { + // 褰撳墠閫変腑鐨勬ā鍧� + 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' + }) + 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> -- Gitblit v1.9.3