dataease-dm/frontend/src/views/system/role/index.vue

283 lines
8.2 KiB
Vue
Raw Normal View History

2021-03-03 15:06:52 +08:00
<template>
<layout-content v-loading="$store.getters.loadingMap[$store.getters.currentPath]">
<!-- <div v-loading="result.loading" style="height: 100%"> -->
<el-container style="width: 100%; height: 100%;">
<el-aside width="70%">
<complex-table
highlight-current-row
:data="tableData"
:columns="columns"
:search-config="searchConfig"
:pagination-config="paginationConfig"
@search="search"
@row-click="rowClick"
>
<template #toolbar>
<fu-table-button icon="el-icon-circle-plus-outline" :label="$t('role.add')" @click="create" />
2021-03-03 15:06:52 +08:00
</template>
<el-table-column prop="name" label="名称" />
<el-table-column prop="code" label="代码" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
<template v-slot:default="scope">
<span>{{ scope.row.createTime | timestampFormatDate }}</span>
</template>
</el-table-column>
<fu-table-operations :buttons="buttons" label="操作" fix />
</complex-table>
2021-03-03 15:06:52 +08:00
</el-aside>
<el-main style="padding: 8px 20px;">
2021-03-03 15:06:52 +08:00
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="菜单授权" name="first">
<el-tree
ref="menu"
lazy
:data="menus"
:default-checked-keys="menuIds"
:load="getMenuDatas"
:props="defaultProps"
check-strictly
show-checkbox
node-key="id"
@check="menuChange"
/>
</el-tab-pane>
<el-tab-pane label="数据授权" name="second">玩命开发中...</el-tab-pane>
</el-tabs>
</el-main>
</el-container>
<el-dialog
:close-on-click-modal="false"
:title="formType=='add' ? $t('role.add') : $t('role.modify')"
:visible.sync="dialogVisible"
width="580px"
:destroy-on-close="true"
@closed="closeFunc"
>
<el-form ref="roleForm" inline :model="form" :rules="rule" size="small" label-width="80px">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" style="width: 380px;" />
</el-form-item>
2021-03-05 17:20:45 +08:00
<el-form-item label="角色代码" prop="code">
<el-input v-model="form.code" style="width: 380px;" />
</el-form-item>
2021-03-03 15:06:52 +08:00
<el-form-item label="描述信息" prop="description">
<el-input v-model="form.description" style="width: 380px;" rows="5" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="dialogVisible = false">{{ $t('commons.cancel') }}</el-button>
<el-button type="primary" @click="saveRole('roleForm')">确认</el-button>
</div>
2021-03-03 15:06:52 +08:00
</el-dialog>
</layout-content>
2021-03-03 15:06:52 +08:00
</template>
<script>
import LayoutContent from '@/components/business/LayoutContent'
import ComplexTable from '@/components/business/complex-table'
2021-03-11 22:58:05 +08:00
import { formatCondition } from '@/utils/index'
2021-03-05 17:20:45 +08:00
import { addRole, editRole, delRole, roleGrid, addRoleMenus, menuIds } from '@/api/system/role'
2021-03-03 15:06:52 +08:00
import { getMenusTree, getChild } from '@/api/system/menu'
export default {
name: 'Role',
components: {
LayoutContent,
ComplexTable
2021-03-03 15:06:52 +08:00
},
data() {
return {
2021-03-03 15:06:52 +08:00
tableData: [],
menus: [],
menuIds: [],
defaultProps: { children: 'children', label: 'label', isLeaf: 'isLeaf' },
activeName: 'first',
dialogVisible: false,
formType: 'add',
form: {},
rule: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
2021-04-28 12:16:52 +08:00
],
code: [{ required: true, message: '请输入代码', trigger: 'blur' }]
2021-03-03 15:06:52 +08:00
},
2021-03-05 16:07:44 +08:00
currentRow: null,
permission: {
add: ['role:add'],
edit: ['role:edit'],
del: ['role:del']
},
header: '',
columns: [],
buttons: [
{
label: this.$t('commons.edit'), icon: 'el-icon-edit', click: this.edit
}, {
label: this.$t('commons.delete'), icon: 'el-icon-delete', type: 'danger', click: this.handleDelete
}
],
searchConfig: {
2021-03-11 22:58:05 +08:00
useQuickSearch: false,
quickPlaceholder: '按名称搜索',
components: [
// { field: 'name', label: '姓名', component: 'FuComplexInput', defaultOperator: 'eq' },
2021-03-11 22:58:05 +08:00
{ field: 'name', label: '角色名称', component: 'FuComplexInput' },
2021-03-11 22:58:05 +08:00
{ field: 'code', label: '角色代码', component: 'FuComplexInput', defaultOperator: 'eq' }
// { field: 'deptId', label: '组织', component: conditionTable }
]
},
paginationConfig: {
currentPage: 1,
pageSize: 10,
total: 0
2021-03-05 16:07:44 +08:00
}
2021-03-03 15:06:52 +08:00
}
},
watch: {
currentRow: 'currentRowChange'
},
mounted() {
2021-03-03 15:06:52 +08:00
this.search()
},
methods: {
handleClick(tab, event) {
console.log(tab, event)
},
create() {
this.form = {}
this.formType = 'add'
this.dialogVisible = true
},
2021-03-11 22:58:05 +08:00
search(condition) {
const temp = formatCondition(condition)
const param = temp || {}
roleGrid(this.paginationConfig.currentPage, this.paginationConfig.pageSize, param).then(response => {
2021-03-03 18:20:59 +08:00
const data = response.data
2021-03-03 15:06:52 +08:00
this.total = data.itemCount
this.tableData = data.listObject
})
},
edit(row) {
this.formType = 'modify'
this.dialogVisible = true
this.form = Object.assign({}, row)
},
saveRole(roleForm) {
this.$refs[roleForm].validate(valid => {
if (valid) {
const method = this.formType === 'add' ? addRole : editRole
method(this.form).then(res => {
this.$success(this.$t('commons.save_success'))
this.search()
this.dialogVisible = false
})
} else {
return false
}
})
},
closeFunc() {
this.dialogVisible = false
},
getMenuDatas(node, resolve) {
const pid = node.data.id ? node.data.id : '0'
getMenusTree(pid).then(res => {
2021-03-03 18:20:59 +08:00
const datas = res.data
2021-03-03 15:06:52 +08:00
const nodes = datas.map(data => this.formatNode(data))
resolve && resolve(nodes)
})
},
formatNode(node) {
const result = {
id: node.menuId,
label: node.title,
isLeaf: !node.hasChildren,
children: node.children
}
return result
},
menuChange(menu) {
getChild(menu.id).then(res => {
2021-03-03 18:20:59 +08:00
const childIds = res.data
2021-03-03 15:06:52 +08:00
if (this.menuIds.indexOf(menu.id) !== -1) {
for (let i = 0; i < childIds.length; i++) {
const index = this.menuIds.indexOf(childIds[i])
if (index !== -1) {
this.menuIds.splice(index, 1)
}
}
} else {
for (let i = 0; i < childIds.length; i++) {
const index = this.menuIds.indexOf(childIds[i])
if (index === -1) {
this.menuIds.push(childIds[i])
}
}
}
console.log(this.menuIds)
this.$refs.menu.setCheckedKeys(this.menuIds)
this.saveMenus()
})
},
saveMenus() {
if (!this.currentRow) {
return
}
const param = { roleId: this.currentRow.roleId, menuIds: this.menuIds }
addRoleMenus(param).then(res => {
this.search()
})
},
rowClick(row, column, event) {
2021-03-05 17:20:45 +08:00
menuIds(row.roleId).then(res => {
const menuIds = res.data
row.menuIds = menuIds
this.currentRow = row
})
2021-03-03 15:06:52 +08:00
},
currentRowChange(newVal, oldVal) {
if (newVal === oldVal) {
return
}
if (!newVal) {
this.menuIds = []
return
}
this.menuIds = newVal.menuIds
this.$refs.menu.setCheckedKeys(this.menuIds)
},
handleDelete(row) {
this.$confirm('确认删除角色[' + row.name + ']', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delRole(row.roleId).then(res => {
this.$success(this.$t('commons.modify_success'))
this.search()
})
}).catch(() => {
})
}
}
}
</script>
<style scoped>
</style>