384 lines
9.7 KiB
Vue
384 lines
9.7 KiB
Vue
<template>
|
|
<view class="role-page bg-page">
|
|
<u-sticky>
|
|
<view class="top-title-box">
|
|
<view class="title">角色列表</view>
|
|
<view class="handle-option">
|
|
<u-button v-auth="['endpoint.admin_roles.create']" class="btn" size="medium"
|
|
@click="addBtn()" type="primary">新增</u-button>
|
|
</view>
|
|
</view>
|
|
</u-sticky>
|
|
<view class="content-box">
|
|
<u-swipe-action class="tb_swipe_list"
|
|
v-for="(item, index) in rolelist"
|
|
:show="item.show" :index="index" :key="item.id"
|
|
@click="click"
|
|
@open="open"
|
|
:options="options"
|
|
>
|
|
<view class="tb_body" @click="showInfo(index)">
|
|
<!-- <view class="row_box">
|
|
<view class="text">序号:{{ index+1 }}</view>
|
|
</view> -->
|
|
<view class="row_box">
|
|
<view class="text">角色名称:{{ item.name }}</view>
|
|
</view>
|
|
<view class="row_box">
|
|
<view class="text">角色编码:{{ item.slug }}</view>
|
|
</view>
|
|
</view>
|
|
</u-swipe-action>
|
|
</view>
|
|
<!-- 编辑 -->
|
|
<u-popup v-model="editShow" border-radius="28" width="92%" height="70%"
|
|
mode="center" :closeable="true" :mask-close-able="false" z-index="910">
|
|
<view class="popup-form-ubox">
|
|
<view class="top_box">
|
|
<view class="title" v-if="formInfo.id">编辑角色</view>
|
|
<view class="title" v-else>新增角色</view>
|
|
</view>
|
|
<scroll-view class="scroll-y" scroll-y="true">
|
|
<view class="form_edit">
|
|
<u-form :model="formInfo">
|
|
<u-form-item label="角色ID" v-if="formInfo.id" label-width="140">
|
|
<view class="input_box bg_colorf8">
|
|
<u-input v-model="formInfo.id" :disabled="true" />
|
|
</view>
|
|
</u-form-item>
|
|
<u-form-item label="角色名称" label-width="140">
|
|
<view class="input_box">
|
|
<u-input v-model="formInfo.name" />
|
|
</view>
|
|
</u-form-item>
|
|
<u-form-item label="角色编码" label-width="140">
|
|
<view class="input_box">
|
|
<u-input v-model="formInfo.slug" />
|
|
</view>
|
|
</u-form-item>
|
|
<view class="label_tit">菜单分配</view>
|
|
<DaTreeVue2
|
|
v-if="isgetInfo"
|
|
ref="DaTreeRef"
|
|
:data="permissionsList"
|
|
labelField="label"
|
|
valueField="id"
|
|
showCheckbox
|
|
:defaultCheckedKeys="defaultCheckedKeysValue"
|
|
@change="handleTreeChange"
|
|
@expand="handleExpandChange" />
|
|
|
|
</u-form>
|
|
|
|
</view>
|
|
</scroll-view>
|
|
<view class="buttom_section">
|
|
<u-button class="btn" type="default" @click="editShow = false">取消</u-button>
|
|
<u-button class="btn" @click="editInfoBtn()" type="primary">确定</u-button>
|
|
</view>
|
|
</view>
|
|
</u-popup>
|
|
<u-popup v-model="popupShow" mode="bottom" border-radius="28" z-index="900">
|
|
<view class="popup-form-info">
|
|
<view class="top_box">
|
|
<view class="handle-btns">
|
|
<view v-auth="['endpoint.admin_roles.destroy']" class="btn_del" @click="deleteRoleId(info.id)">删除</view>
|
|
<view v-auth="['endpoint.admin_roles.edit']" class="btn_edit" @click="editRoleId(info.id)">编辑</view>
|
|
</view>
|
|
</view>
|
|
<view class="section_c">
|
|
|
|
<view class="plist u-border-bottom">
|
|
<view class="label_t">角色名称</view>
|
|
<view class="flex-1">{{info.name}}</view>
|
|
</view>
|
|
<view class="plist u-border-bottom">
|
|
<view class="label_t">角色编码</view>
|
|
<view class="flex-1">{{info.slug}}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</u-popup>
|
|
<u-loadmore :status="loading" margin-top="40"/>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import DaTreeVue2 from '@/components/da-tree-vue2/index.vue'
|
|
import {showLoading,hideLoading} from '@/com/utils.js'
|
|
import checkPermission from '@/utils/permission.js'
|
|
export default {
|
|
components: { DaTreeVue2 },
|
|
data() {
|
|
return {
|
|
per_page:10,
|
|
page:1,
|
|
rolelist:[],
|
|
loading:'loadmore',
|
|
popupShow:false,
|
|
info:{},//详情
|
|
cindex:-1,//操作的索引
|
|
editShow:false,
|
|
formInfo:{
|
|
id:'',
|
|
name:'',
|
|
slug:'',
|
|
permissions:'',
|
|
get_permissions:false
|
|
},
|
|
isgetInfo:false,
|
|
permissionsList:[],
|
|
defaultCheckedKeysValue: [],
|
|
};
|
|
},
|
|
computed: {
|
|
options() {
|
|
return [
|
|
{
|
|
text: '编辑',
|
|
opt: 'edit',
|
|
permission: ['endpoint.admin_roles.edit'],
|
|
style: {
|
|
backgroundColor: '#007aff',
|
|
},
|
|
},
|
|
{
|
|
text: '删除',
|
|
opt: 'delete',
|
|
permission: ['endpoint.admin_roles.destroy'],
|
|
style: {
|
|
backgroundColor: '#dd524d',
|
|
},
|
|
},
|
|
].filter((e) => checkPermission(e.permission))
|
|
},
|
|
},
|
|
onLoad() {
|
|
this.queryAdminRoleList();
|
|
this.queryPermissions();
|
|
|
|
},
|
|
methods: {
|
|
addBtn(){
|
|
this.resetForm();
|
|
this.isgetInfo = true;
|
|
this.editShow = true;
|
|
},
|
|
handleTreeChange(allSelectedKeys, currentItem) {
|
|
console.log('handleTreeChange ==>', allSelectedKeys, currentItem);
|
|
this.formInfo.permissions = allSelectedKeys;
|
|
},
|
|
handleExpandChange(expand, currentItem) {
|
|
console.log('handleExpandChange ==>', expand, currentItem)
|
|
},
|
|
showInfo(index){
|
|
this.cindex = index;
|
|
this.info = this.rolelist[index];
|
|
this.popupShow = true;
|
|
},
|
|
open(index){
|
|
this.rolelist[index].show = true;
|
|
},
|
|
click(index, index1) {
|
|
console.log(index,index1,this.rolelist[index])
|
|
if(index1 == 1) {
|
|
this.cindex = index;
|
|
let _id = this.rolelist[index].id;
|
|
this.deleteRoleId(_id);
|
|
} else {
|
|
let _id = this.rolelist[index].id;
|
|
this.queryRoleInfo(_id);
|
|
this.formInfo = this.rolelist[index];
|
|
this.editShow = true;
|
|
this.rolelist[index].show = false;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
queryAdminRoleList(refresh){
|
|
if(refresh){
|
|
this.loading = 'loadmore';
|
|
this.rolelist = [];
|
|
this.page = 1;
|
|
}
|
|
if(this.loading=='nomore'){//超出最大页
|
|
return false;
|
|
}
|
|
let params = {
|
|
per_page:this.per_page,
|
|
page: this.page ++,
|
|
_t: new Date().getTime()
|
|
}
|
|
this.loading = 'loading';
|
|
this.$http.get('/api/admin-roles',{params:params}).then(({data})=>{
|
|
|
|
console.log(data)
|
|
this.loading = 'loadmore';
|
|
if(data.code==200){
|
|
let _list = data.data|| [];
|
|
for(let item of _list){
|
|
item.show = false;
|
|
}
|
|
this.rolelist = this.rolelist.concat(_list);
|
|
console.log(this.rolelist);
|
|
if(this.rolelist.length>= data.meta.total){
|
|
this.loading ='nomore';
|
|
}
|
|
}
|
|
}).catch(()=>{
|
|
this.loading = 'loadmore';
|
|
})
|
|
},
|
|
//修改
|
|
editInfoBtn(){
|
|
if(!this.isgetInfo){
|
|
return false
|
|
}
|
|
let params = {
|
|
name:this.formInfo.name,
|
|
slug:this.formInfo.slug,
|
|
permission_ids:this.formInfo.permissions
|
|
}
|
|
let id = this.formInfo.id;
|
|
if (params.name=='') {
|
|
uni.showToast({ title: '请填写角色名称', icon: 'none' });
|
|
return;
|
|
}
|
|
if (params.slug=='') {
|
|
uni.showToast({ title: '请填写角色编码', icon: 'none' });
|
|
return;
|
|
}
|
|
showLoading('请稍等...');
|
|
if(id){
|
|
this.$http.put(`/api/admin-roles/${id}`,params).then(({data})=>{
|
|
hideLoading();
|
|
if(data.code==200){
|
|
this.editShow = false;
|
|
}
|
|
uni.showToast({ title: data.message, icon: 'none' });
|
|
}).catch(()=>{
|
|
hideLoading();
|
|
})
|
|
}else{
|
|
this.$http.post(`/api/admin-roles`,params).then(({data})=>{
|
|
hideLoading();
|
|
if(data.code==200){
|
|
this.queryAdminRoleList(true);
|
|
this.editShow = false;
|
|
}
|
|
uni.showToast({ title: data.message, icon: 'none' });
|
|
}).catch(()=>{
|
|
hideLoading();
|
|
})
|
|
}
|
|
},
|
|
editRoleId(id){
|
|
this.queryRoleInfo(id);
|
|
this.formInfo = this.info;
|
|
this.editShow = true;
|
|
},
|
|
//删除角色
|
|
deleteRoleId(id){
|
|
uni.showModal({
|
|
title: '提示',
|
|
content: '是否确定删除?',
|
|
success: (res)=> {
|
|
if (res.confirm) {
|
|
console.log('用户点击确定');
|
|
showLoading('请稍等...');
|
|
this.$http.delete(`/api/admin-roles/${id}`).then(({data})=>{
|
|
hideLoading();
|
|
if(data.code==200){
|
|
this.formInfo = {};//重置删除
|
|
this.popupShow = false;
|
|
this.rolelist.splice(this.cindex,1);
|
|
uni.showToast({ title: data.message, icon: 'none' });
|
|
}
|
|
}).catch(()=>{
|
|
hideLoading();
|
|
})
|
|
} else if (res.cancel) {
|
|
console.log('用户点击取消');
|
|
}
|
|
}
|
|
});
|
|
|
|
},
|
|
//权限数据列表
|
|
queryPermissions(){
|
|
this.$http.get('/api/permissions').then(({data})=>{
|
|
if(data.code==200){
|
|
this.permissionsList = data.data;
|
|
}
|
|
}).catch((err)=>{
|
|
|
|
})
|
|
},
|
|
queryRoleInfo(id){
|
|
this.isgetInfo = false;
|
|
this.$http.get(`/api/admin-roles/${id}`).then(({data})=>{
|
|
console.log(data,'queryRoleInfo===')
|
|
if(data.code==200){
|
|
this.formInfo.permissions = data.data.permissions;
|
|
this.defaultCheckedKeysValue = data.data.permissions;
|
|
this.isgetInfo = true;
|
|
console.log(this.defaultCheckedKeysValue,'queryRoleInfo===')
|
|
}
|
|
}).catch((err)=>{
|
|
|
|
})
|
|
},
|
|
resetForm(){
|
|
this.formInfo = {
|
|
id:'',
|
|
name:'',
|
|
slug:'',
|
|
permissions:'',
|
|
get_permissions:false
|
|
};
|
|
this.defaultCheckedKeysValue = [];
|
|
}
|
|
},
|
|
//触底加载
|
|
onReachBottom() {
|
|
if(this.loading=='loadmore'){
|
|
this.queryAdminRoleList();
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.role-page{
|
|
.content-box{
|
|
padding: 30rpx;
|
|
}
|
|
}
|
|
|
|
.input_box{
|
|
width: 100%;
|
|
padding: 0 12rpx;
|
|
}
|
|
.top-title-box{
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 24rpx 30rpx;
|
|
background-color: #fff;
|
|
justify-content: space-between;
|
|
border-top: 12rpx solid #eeeeef;
|
|
.title{
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
}
|
|
.handle-option{
|
|
.btn{
|
|
font-size: 32rpx;
|
|
height: 60rpx;
|
|
padding: 0 40rpx;
|
|
background-color: rgb(42, 125, 201);
|
|
}
|
|
}
|
|
}
|
|
</style>
|