<template>
<div>
<!-- A面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>商品分类</el-breadcrumb-item>
</el-breadcrumb>
<!-- B卡片视图区域 -->
<el-card>
<el-row>
<el-col><el-button type="primary" @click="showAddCateDialog">
添加分类</el-button></el-col>
</el-row>
<!-- 表格 树型表格 需要在main.js引入一下 npm i vue-table-with-tree-grid -S -->
<tree-table class="treeTable" :data="catelist" :columns="columns"
:selection-type="false" :expand-type="false"
show-index index-text="#" border :show-row-hover="false">
<!-- 是否有效 -->
<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:lightgreen">
</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" v-else-if="scope.row.cat_level===1" type="success">
二级</el-tag>
<el-tag size="mini" v-else type="warning">三级</el-tag>
</template>
<!-- 操作 编辑 删除按钮-->
<template slot="opt" slot-scope="scope">
<!-- {
{scope.row}} -->
<el-button size="mini" icon="el-icon-edit" type="primary" @click="showCateEditDialog(scope.row.cat_id)">
编辑</el-button>
<el-button size="mini" icon="el-icon-delete" type="danger" @click="removeCateById(scope.row.cat_id)">
删除</el-button>
</template>
</tree-table>
<!-- 分页区域 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="querInfo.pagenum"
:page-sizes="[3, 5,10,15]"
:page-size=" querInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total" background="">
</el-pagination>
</el-card>
<!-- C添加分类的对话框 -->
<el-dialog title="添加分类"
:visible.sync="addCateDialogVisible"
width="50%"
@close="addCateDialogClosed">
<!-- 添加分类的表单 -->
<el-form ref="addCateFormRef" :model="addCateForm"
label-width="100px" :rules="addCateFormRules">
<!-- b分类名称 -->
<el-form-item label="分类名称:" prop="cat_name">
<el-input v-model="addCateForm.cat_name"></el-input>
</el-form-item>
<!-- c父级分类 -->
<el-form-item label="父级分类:">
<!-- options用来指定数据源 级联选择器-->
<!-- props用来指定配置对象 -->
<el-cascader
expand-trigger="hover"
:options="parentCateList"
:props="cascaderProps"
v-model="selectedKeys"
@change="parentCateChanged" clearable change-on-select=" ">
<!-- {
{selectedKeys}} -->
</el-cascader>
</el-form-item>
</el-form>
<!-- d取消和确定按钮 -->
<span slot="footer" class="dialog-footer">
<el-button @click="addCateDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addCate">确 定</el-button>
</span>
</el-dialog>
<!-- D修改分类名称的对话框 -->
<el-dialog
title="修改分类"
:visible.sync="editCateDialogVisible"
width="50%"
@close="editCateDialogClosed">
<el-form ref="editCateFormRef" :model="editCateForm" label-width="70px"
:rules=" editCateFormRules">
<el-form-item label="分类名称" prop="">
<el-input v-model="editCateForm.cat_name"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editCateDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editCateInfo">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
//查询参数规则
querInfo:{
type:3,//获取三层分类列表
pagenum:1,
pagesize:10
},
catelist:[],//商品分类的数据列表,默认为空
total:0,//总数据条数
// 这个是树形表格的数据columns
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,//父级分类的ID
cat_level:0//分类的等级,默认要添加的是1级分类
},
// 添加分类的表单验证规则对象
addCateFormRules:{
cat_name:[{required: true, message: '请输入分类名称', trigger: 'blur'}]
},
// 父级分类的列表
parentCateList:[],
//指定级联选择器的配置对象
cascaderProps:{
value:"cat_id",//指定选中的那个值
label:"cat_name",//指定看到的值
children:"children"//指定嵌套的那个属性
},
editCateForm:{},// 修改角色的表单数据
editCateFormRules:{//修改角色的规则
cat_name:[{required: true, message: '请修改分类名称', trigger: 'blur'}]
},
editCateDialogVisible: false,
selectedKeys:[] //级联选择器的 v-model="selectedKeys"
}
},
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.error("获取商品分类失败")
}
console.log("这里是getCatelist的res.data",res.data);
this.catelist=res.data.result//把数据列表.赋值给catelist
this.total=res.data.total//为总数据条数赋值
},
//监听pagesize改变
handleSizeChange(newSize){
this.querInfo.pagesize=newSize
this.getCateList()
},
//监听pagenum改变
handleCurrentChange(newPage){
this.querInfo.pagenum=newPage
this.getCateList()
},
// 点击按钮、展示添加分类对话框
showAddCateDialog(){
this.getParentCateList()//先获取父级分类的数据列表,再展示出对话框
this.addCateDialogVisible=true
},
// 获取父级分类的数据列表 (展示添加分类对话框时获取的)
async getParentCateList(){
const {data:res}=await this.$http.get("categories",{params:{type:2}})
if(res.meta.status!==200){
return this.$message.error("获取父级分类数据失败")
}else{
this.$message.success("获取父级分类数据成功")
console.log("这里是parentCatelist的res.data",res.data);
this.parentCateList=res.data
}
},
//级联的 选择项发生变化触发这个函数??????????????????????????????????????????????????
parentCateChanged(){
console.log("这里是selectedKeys",this.selectedKeys);
// 如果selectedkeys数组中的length大于01,证明选中了父级分类
// 反之,就说明没有选中任何父级分类
if(this.selectedKeys.length>0){//????????????????????????????????????
// 父级分类的id
this.addCateForm.cat_pid=this.selectedKeys[this.selectedKeys.length-1]//(z这里巧用数组长度-1作为索引)
// 为当前分类的等级赋值
this.addCateForm.cat_level=this.selectedKeys.length
return
}else{
this.addCateForm.cat_pid=0
this.adddCateForm.cat_level=0
}
},
// 点击按钮。添加新的分类
addCate(){
console.log("这里是addCateForm",this.addCateForm);
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.getCateList()
this.addCateDialogVisible=false
})
},
// 监听对话框的关闭事件,重置表单数据
addCateDialogClosed(){
this.$refs.addCateFormRef.resetFields()
this.selectedKeys=[]
this.addCateForm.cat_level=0
this.addCateForm.cat_pid=0
},
// 删除分类
async removeCateById(id){
//弹框询问用户是否删除数据
const confirmResult=await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(err=>err)
// 如果用户点击确认 删除,则返回值confirmResult为字符串confirm
// 如果用户点击取消 删除,则返回值为字符串cancel
// console.log(confirmTResult);
if(confirmResult!=="confirm"){
return this.$message.info("已取消删除")
}
// console.log("确认了删除"); 确认删除后,下一步发送删除的请求
const {data:res}=await this.$http.delete("categories/"+id)
if(res.meta.status!==200){
return this.$messgae.error("删除用户失败")
}
this.$message.success("删除用户成功")
this.getCateList()
},
// 编辑修改分类
//展示编辑分类的对话框 @click="showCateEditDialog(scope.row.cat_id)
async showCateEditDialog(id){ //这个id就是cat_id
// console.log(id);
const {data:res}=await this.$http.get("categories/"+id)
if(res.meta.status!==200){
return this.$message.error("查询分类信息失败")
}
this.editCateForm=res.data
this.editCateDialogVisible=true
},
// 修改分类对话框关闭时触发这个事件
editCateDialogClosed(){
this.$refs.editCateFormRef.resetFields()
},
// 修改分类名称信息并提交(点击修改分类对话框的确定按钮时触发)
editCateInfo(){
this.$refs.editCateFormRef.validate(async valid=>{
if(!valid) return
//发起修改分类信息的数据请求
const {data:res}=await this.$http.put("categories/"+this.editCateForm.cat_id,{
cat_name:this.editCateForm.cat_name,
})
if(res.meta.status!==200) {
return this.$message.error("更新分类信息失败!")
}
// 关闭对话框
this.editCateDialogVisible=false
// 刷新数据列表
this.getCateList()
//提示修改成功
this.$message.success("更新分类信息成功")
})
},
},
}
</script>
<style lang="less" scoped>
.treeTable{
margin-top: 15px;
}
.el-cascader{
width: 100%;
}
</style>
后台管理系统【商品分类】
猜你喜欢
转载自blog.csdn.net/weixin_62765236/article/details/127234314
今日推荐
周排行