63、完成分配角色功能
<el-dialog title="分配角色" :visible.sync="setRoleDialogVisible" width="50%" @close="setRoleDialogClosed">
<div>
<p>当前用户:{{userInfo.username}} </p>
<p>当前角色:{{userInfo.role_name}} </p>
<p>分配新角色:
<el-select v-model="selectedRoleId" placeholder="请选择">
<el-option
v-for="item in rolesList"
:key="item.id"
:label="item.roleName"
:value="item.id">
</el-option>
</el-select>
</p>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="setRoleDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveRoleInfo">确 定</el-button>
</span>
</el-dialog>
return{
setRoleDialogVisible:false,
userInfo:{},
rolesList:[],
selectedRoleId:''
}
async setRole(userInfo){
this.userInfo = userInfo;
const {data:res} = await this.$http.get('roles');
if(res.meta.status !== 200){
return this.$message.error('获取角色列表失败!');
}
this.rolesList = res.data;
this.setRoleDialogVisible = true;
},
async saveRoleInfo(){
if(!this.selectedRoleId) {
return this.$message.error('请选择要分配的角色!');
}
const {data:res} = await this.$http.put(`users/${this.userInfo.id}/role`,
{rid:this.selectedRoleId});
if(res.meta.status !== 200) {
return this.$message.error('更新角色失败!');
}
this.$message.success('更新角色成功!');
this.getUserList();
this.setRoleDialogVisible = false;
},
setRoleDialogClosed(){
this.selectedRoleId = '',
this.userInfo = {}
}
64、商品分类
<template>
<div>
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>商品管理</el-breadcrumb-item>
<el-breadcrumb-item>商品分类</el-breadcrumb-item>
</el-breadcrumb>
<el-card>
<el-row>
<el-col>
<el-button type="primary" @click="showAddCateDialog"
>添加分类</el-button
>
</el-col>
</el-row>
<tree-table
class="treeTable"
:data="cateList"
:columns="columns"
:selection-type="false"
:expand-type="false"
show-index
index-text="#"
border
>
<template slot="isok" slot-scope="scope">
<i
class="el-icon-success"
v-if="scope.row.cat_deleted === false"
style="color: lightgreen"
></i>
<i class="el-icon-error" v-else style="color: red"></i>
</template>
<template slot="order" slot-scope="scope">
<el-tag size="mini" v-if="scope.row.cat_level === 0">一级</el-tag>
<el-tag
size="mini"
type="success"
v-else-if="scope.row.cat_level === 1"
>二级</el-tag
>
<el-tag size="mini" type="warning" v-else>三级</el-tag>
</template>
<template slot="opt" slot-scope="scope">
<el-button type="primary" size="mini" icon="el-icon-edit">编辑</el-button>
<el-button type="danger" size="mini" icon="el-icon-delete">删除</el-button>
</template>
</tree-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="querInfo.pagenum"
:page-sizes="[1, 3, 5, 7, 15]"
:page-size="querInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
</el-card>
<el-dialog title="添加分类" :visible.sync="addCateDialogVisible" width="50%" @close="addCateDialogClosed">
<el-form :model="addCateForm" :rules="addCateFormRules" ref="addCateFormRef"label-width="70px">
<el-form-item label="分类名" prop="cat_name">
<el-input v-model="addCateForm.cat_name"></el-input>
</el-form-item>
<el-form-item label="父级分类" prop="cat_pid">
<el-cascader expand-trigger="hover" v-model="selectedKeys" :options="parentsCateList" @change="parentCateChanged" :props="cascaderProps" clearable change-on-select>
</el-cascader>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addCateDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addCate">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data(){
return{
querInfo:{
type:3,
pagenum:1,
pagesize:5
},
cateList:[],
total:0,
columns:[
{
label:'分类名称',
prop:'cat_name'
},
{
label:'是否有效',
type:'template',
template:'isok'
},
{
label:'排序',
type:'template',
template:'order'
},
{
label:'操作',
type:'template',
template:'opt'
}
],
addCateDialogVisible:false,
addCateForm:{
cat_name:'',
cat_pid:0,
cat_level:0
},
addCateFormRules:{
cat_name:[
{required: true, message: '请输入分类名称', trigger: 'blur'}
]
},
parentsCateList:[],
cascaderProps:{
value:'cat_id',
label:'cat_name',
children:'children'
},
selectedKeys:[],
editCateDialogVisible:false
}
},
created(){
this.getCateList();
},
methods:{
async getCateList(){
const{data:res} = await this.$http.get('categories', {params:this.querInfo});
if(res.meta.status !== 200) {
return this.$message.console.error('获取商品分类失败!');
}
console.log(res.data);
this.cateList = res.data.result;
this.total = res.data.total
},
handleSizeChange(newSize){
this.querInfo.pagesize = newSize;
this.getCateList();
},
handleCurrentChange(newPage) {
this.querInfo.newPage = newPage;
this.getCateList();
},
showAddCateDialog(){
this.getParentsCateList();
this.addCateDialogVisible = true;
},
async getParentsCateList() {
const {data:res} = await this.$http.get('categories',{params:{type:2}});
if(res.meta.status !== 200) {
return this.$message.error('获取父级数据列表失败!');
}
this.parentsCateList = res.data;
},
parentCateChanged(){
console.log(this.selectedKeys);
if(this.selectedKeys.length > 0) {
this.addCateForm.cat_pid = this.selectedKeys[this.selectedKeys.length - 1];
this.addCateForm.cat_level = this.selectedKeys.length;
}else {
this.addCateForm.cat_pid = 0;
this.addCateForm.cat_level = 0;
}
},
addCate(){
this.$refs.addCateFormRef.validate(async valid =>{
if(!valid) return;
const{data:res} = await this.$http.post('categories',this.addCateForm);
if(res.meta.status !== 201) {
return this.$message.error('添加分类失败!');
}
this.$message.success('添加分类成功!');
this.addCateDialogVisible = false;
this.getCateList();
})
},
addCateDialogClosed(){
this.$refs.addCateFormRef.resetFields();
this.selectedKeys = [];
this.addCateForm.cat_level = 0;
this.addCateForm.cat_pid = 0;
}
}
}
</script>
<style lang="less" scoped>
.treeTable {
margin-top: 15px;
}
.el-cascader{
width: 100%;
}
</style>
|