| | |
| | | <template> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | :close-on-click-modal="false" |
| | | :visible.sync="isShowDialog" |
| | | @close="closeDialog" |
| | | append-to-body title="分类授权"> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | :close-on-click-modal="false" |
| | | :visible.sync="isShowDialog" |
| | | append-to-body |
| | | class="avue-dialog avue-dialog--top" |
| | | title="分类授权" |
| | | top="-45px" @close="closeDialog"> |
| | | <el-table |
| | | ref="dataTable" |
| | | v-loading="isLoading" |
| | |
| | | @sort-change="sortChange" |
| | | > |
| | | <el-table-column |
| | | fixed |
| | | type="selection" |
| | | width="55" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | v-if="classifyAuthHeader.length !== 0" |
| | | v-for="(item, index) in classifyAuthHeader" |
| | | v-if="classifyAuthHeader.length !== 0" |
| | | :key="index" |
| | | :label="item.label" |
| | | :prop="item.prop" |
| | |
| | | </el-select> |
| | | <el-input |
| | | v-if="item.type === 'text'" |
| | | type="text" |
| | | readonly |
| | | v-model="row[item.prop]" |
| | | readonly |
| | | type="text" |
| | | > |
| | | </el-input> |
| | | <el-checkbox |
| | | <el-checkbox |
| | | v-if="item.type === 'checkbox'" |
| | | v-model="row[item.prop]"> |
| | | </el-checkbox> |
| | |
| | | </el-table-column> |
| | | </el-table> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="success" class="el-icon-plus" @click="addClassifyAuth"></el-button> |
| | | <el-button type="warning" class="el-icon-minus" @click="subClassifyAuth"></el-button> |
| | | <el-button type="primary" @click="submit">提 交</el-button> |
| | | <el-button type="danger" @click="isShowDialog = false">关 闭</el-button> |
| | | <el-button class="el-icon-plus" type="success" @click="addClassifyAuth"></el-button> |
| | | <el-button class="el-icon-minus" type="warning" @click="subClassifyAuth"></el-button> |
| | | <el-button type="primary" @click="submit">提 交</el-button> |
| | | <el-button type="danger" @click="isShowDialog = false">关 闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getButtonByParentCode } from "@/api/system/menu" |
| | | import { getPage } from "@/api/system/role" |
| | | import { saveOrUpdate,getClassifyAuthList } from "@/api/system/classifyAuth" |
| | | import { v4 as uuidv4 } from 'uuid'; |
| | | import {getButtonByParentCode} from "@/api/system/menu" |
| | | import {getPage} from "@/api/system/role" |
| | | import {saveOrUpdate, getClassifyAuthList} from "@/api/system/classifyAuth" |
| | | import {v4 as uuidv4} from 'uuid'; |
| | | |
| | | export default { |
| | | name: "classifyAuthDialog.vue", |
| | | props: { |
| | |
| | | // 对话框显示控制 |
| | | isShowDialog: this.visible, |
| | | isLoading: false, |
| | | tableHeight: 'calc(100vh - 550px)', |
| | | tableHeight: '520px', |
| | | classifyAuthData: [], |
| | | //列头 |
| | | classifyAuthHeader: [], |
| | |
| | | }, |
| | | watch: { |
| | | // 监听父组件传的窗口显示隐藏的值 |
| | | visible (){ |
| | | if(this.visible){ |
| | | visible() { |
| | | if (this.visible) { |
| | | this.isShowDialog = this.visible; |
| | | return new Promise((resolve, reject) => { |
| | | getButtonByParentCode({code:"classifyTree"}).then(res=>{ |
| | | getButtonByParentCode({code: "classifyTree"}).then(res => { |
| | | // 记录按钮数据 |
| | | this.classifyAuthButton = res.data.data; |
| | | const list = res.data.data; |
| | |
| | | reject(err) |
| | | }); |
| | | // 获取角色列表 |
| | | getPage(1,-1,null).then(res => { |
| | | getPage(1, -1, null).then(res => { |
| | | this.roleList = res.data.data.records; |
| | | }); |
| | | // 获取该分类下已授权的分类授权信息 |
| | | getClassifyAuthList({classifyId:this.classifyData.oid}).then(res => { |
| | | getClassifyAuthList({classifyId: this.classifyData.oid}).then(res => { |
| | | //console.log(res.data.data); |
| | | let authDatas = res.data.data; |
| | | if (authDatas.length > 0) { |
| | | authDatas.forEach(authData=>{ |
| | | authDatas.forEach(authData => { |
| | | let item = { |
| | | oid: authData.oid, |
| | | roleData: authData.roleId, |
| | |
| | | uuid: uuidv4(),//生成唯一的id |
| | | } |
| | | //将按钮设置进去 |
| | | authData.buttonIdList.forEach(data=>{ |
| | | Vue.set(item,data,true); |
| | | authData.buttonIdList.forEach(data => { |
| | | Vue.set(item, data, true); |
| | | }); |
| | | //console.log(item) |
| | | this.classifyAuthData.push(item); |
| | |
| | | }, |
| | | }, |
| | | computed: {}, |
| | | mounted() {}, |
| | | created() {}, |
| | | mounted() { |
| | | }, |
| | | created() { |
| | | }, |
| | | methods: { |
| | | // 关闭对话框 |
| | | closeDialog(){ |
| | | closeDialog() { |
| | | this.$emit('update:visible', false); |
| | | this.classifyAuthData = []; |
| | | }, |
| | | // 增加行 |
| | | addClassifyAuth(){ |
| | | addClassifyAuth() { |
| | | let item = { |
| | | roleData: this.roleList[0].id, |
| | | classifyItem: this.classifyData.text, |
| | | uuid: uuidv4(),//生成唯一的id |
| | | } |
| | | //将按钮设置进去 |
| | | this.classifyAuthButton.forEach(data=>{ |
| | | Vue.set(item,data.id,false); |
| | | this.classifyAuthButton.forEach(data => { |
| | | Vue.set(item, data.id, false); |
| | | }) |
| | | //console.log(item) |
| | | this.classifyAuthData.push(item) |
| | | // console.log(this.classifyAuthData); |
| | | }, |
| | | // 删除行 |
| | | subClassifyAuth(){ |
| | | subClassifyAuth() { |
| | | for (let item of this.selectList) { |
| | | let index = this.classifyAuthData.findIndex(data => data.index === item.index); |
| | | if (index !== -1) { |
| | | this.classifyAuthData.splice(index, 1); |
| | | let index = this.classifyAuthData.findIndex(data => data.index === item.index); |
| | | if (index !== -1) { |
| | | this.classifyAuthData.splice(index, 1); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | handleRowClick(row, column) { |
| | | this.selectList.push(row); |
| | | this.$refs.dataTable.toggleRowSelection(row); |
| | |
| | | this.selectList = list; |
| | | }, |
| | | // 保存分类授权信息 |
| | | submit(){ |
| | | if(this.classifyAuthData.length <= 0){ |
| | | submit() { |
| | | if (this.classifyAuthData.length <= 0) { |
| | | this.$message.warning('授权列表为空!') |
| | | return; |
| | | } |
| | |
| | | break; |
| | | } |
| | | } |
| | | if(isRepeat){ |
| | | if (isRepeat) { |
| | | break; |
| | | } |
| | | } |
| | | if(isRepeat) { |
| | | if (isRepeat) { |
| | | this.$message.warning("角色和分类已经存在,请重新配置!"); |
| | | return; |
| | | } |
| | |
| | | } |
| | | } |
| | | /**如果itemButtonList为空证明是, |
| | | 添加了角色但是没勾选任何的按钮*/ |
| | | if(itemButtonList.length <= 0) { |
| | | 添加了角色但是没勾选任何的按钮*/ |
| | | if (itemButtonList.length <= 0) { |
| | | flag = true; |
| | | return; |
| | | } |
| | |
| | | } |
| | | form.push(data); |
| | | }); |
| | | if(flag) { |
| | | if (flag) { |
| | | this.$message.warning('有未勾选操作的权限,不允许授权') |
| | | return; |
| | | } |
| | | // console.log(form) |
| | | // 调用保存分类授权的接口 |
| | | saveOrUpdate(form).then(res=>{ |
| | | saveOrUpdate(form).then(res => { |
| | | this.$message({ |
| | | type: "success", |
| | | message: res.data.msg, |
| | | }); |
| | | // this.isShowDialog = false |
| | | },(error) => { |
| | | }, (error) => { |
| | | window.console.log(error); |
| | | }) |
| | | }, |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | // 滚动条样式修改 |
| | | // 滚动条的宽度 |
| | | /deep/ .el-table__body-wrapper::-webkit-scrollbar { |
| | | height: 15px; // 纵向滚动条 必写 |
| | | background: white; |
| | | border: white; |
| | | width: 10px; |
| | | // 滚动条样式修改 |
| | | // 滚动条的宽度 |
| | | /deep/ .el-table__body-wrapper::-webkit-scrollbar { |
| | | height: 15px; // 纵向滚动条 必写 |
| | | background: white; |
| | | border: white; |
| | | width: 10px; |
| | | |
| | | } |
| | | } |
| | | |
| | | // 滚动条的滑块 |
| | | /deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb { |
| | | background-color: #ececec; |
| | | border-radius: 20px; |
| | | border: #ececec; |
| | | } |
| | | // 滚动条的滑块 |
| | | /deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb { |
| | | background-color: #ececec; |
| | | border-radius: 20px; |
| | | border: #ececec; |
| | | } |
| | | |
| | | </style> |
| | | /deep/ .el-table__body-wrapper { |
| | | height: calc(100% - 50px) !important; |
| | | } |
| | | |
| | | </style> |