1.添加修改按钮
在添加按钮后添加修改按钮
<el-button
type="text"
size="mini"
@click="() => edit(data)">
Edit
</el-button>
在remove方法后加上修改方法
//修改
edit(data){
console.log("要修改的数据:",data);
}
2.弹出修改对话框
//修改
edit(data){
console.log("要修改的数据:",data);
//打开对话框
this.dialogVisible = true;
this.category.name = data.name;
this.category.catId = data.catId;
this.category.productUnit = data.productUnit;
},
问题: 修改和添加共用了一个对话框,这样修改点击确认如何发送请求?
3.对话框类型的划分
将原先对话框中确认点击触发函数改为submitData,新增一个属性对话框类型dialogType(2种类型add/edit)和对话框提示信息title,在添加和修改方法分别赋值即可,并修改对话框提示信息
<!-- 对话框 -->
<el-dialog :title="title" :visible.sync="dialogVisible" width="30%">
<el-form :model="category">
<el-form-item label="分类名称" >
<el-input v-model="category.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="图标">
<el-input v-model="category.icon" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="计量单位">
<el-input v-model="category.productUnit" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitData"
>确 定</el-button
>
</span>
</el-dialog>
在data中新增对话框类型和对话框提示信息
//对话框类型 add/edit
dialogType: "",
//话框提示信息
title: "",
对应方法中的赋值与submitData方法
//添加
append(data) {
console.log("添加", data);
//打开对话框
this.dialogVisible = true;
this.dialogType = "add";
this.title = "添加分类";
this.category.parentCid = data.catId;
this.category.catLevel = data.catLevel * 1 + 1;
this.category.catId = null;
this.category.name = "";
this.category.icon = "";
this.category.productUnit = "";
this.category.sort = 0;
this.category.showStatus = 1;
},
//修改
edit(data){
//console.log("要修改的数据:",data);
//打开对话框
this.dialogVisible = true;
this.dialogType = "edit";
this.title = "修改分类";
//发送请求获取当前节点最新的数据
this.$http({
url: this.$http.adornUrl(`/product/category/info/${data.catId}`),
method: "get",
}).then(({ data }) => {
console.log("修改回显的数据", data);
this.category.name = data.data.name;
this.category.catId = data.data.catId;
this.category.icon = data.data.icon;
this.category.productUnit = data.data.productUnit;
this.category.parentCid = data.data.parentCid;
this.category.catLevel = data.data.catLevel;
this.category.sort = data.data.sort;
this.category.showStatus = data.data.showStatus;
});
},
//根据对话框类型提交数据
submitData(){
if (this.dialogType == "add") {
this.addCategory();
}
if (this.dialogType == "edit") {
this.editCategory();
}
},
//修改三级分类数据
editCategory() {
},
点击添加
点击修改
4.发送请求修改数据
//修改三级分类数据
editCategory() {
var { catId, name, icon, productUnit } = this.category;
this.$http({
url: this.$http.adornUrl("/product/category/update"),
method: "post",
data: this.$http.adornData({ catId, name, icon, productUnit }, false),
}).then(({ data }) => {
this.$message({
message: `【${this.category.name}】菜单修改成功`,
type: "success",
});
//关闭对话框
this.dialogVisible = false;
//刷新出新的菜单
this.getMenus();
//设置需要默认展开的菜单
this.expandedKey = [this.category.parentCid];
});
},
SQL语句
2021-11-12 10:26:51.102 DEBUG 4800 --- [io-10000-exec-6] c.a.g.p.dao.CategoryDao.updateById : ==> Preparing: UPDATE pms_category SET icon=?, name=?, product_unit=? WHERE cat_id=? AND show_status=1
2021-11-12 10:26:51.113 DEBUG 4800 --- [io-10000-exec-6] c.a.g.p.dao.CategoryDao.updateById : ==> Parameters: q(String), 苹果(String), 件(String), 1433(Long)
2021-11-12 10:26:51.115 DEBUG 4800 --- [io-10000-exec-6] c.a.g.p.dao.CategoryDao.updateById : <== Updates: 1
5.对话框优化
发现鼠标滑出对话框随便点击一下,对话框就关闭啦,此效果不太友好,将此功能关闭
<!-- 对话框 -->
<el-dialog :title="title" :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false">
<el-form :model="category">
<el-form-item label="分类名称" >
<el-input v-model="category.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="图标">
<el-input v-model="category.icon" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="计量单位">
<el-input v-model="category.productUnit" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitData"
>确 定</el-button
>
</span>
</el-dialog>
6.完整代码
<template>
<div>
<el-tree
:data="menus"
:props="defaultProps"
:expand-on-click-node="false"
node-key="catId"
:default-expanded-keys="expandedKey"
show-checkbox
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{{ node.label }}</span>
<span>
<el-button
type="text"
size="mini"
v-if="node.level <= 2"
@click="() => append(data)"
>
Append
</el-button>
<el-button
type="text"
size="mini"
@click="() => edit(data)"
>
Edit
</el-button>
<el-button
type="text"
size="mini"
v-if="node.childNodes.length == 0"
@click="() => remove(node, data)"
>
Delete
</el-button>
</span>
</span>
</el-tree>
<!-- 对话框 -->
<el-dialog :title="title" :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false">
<el-form :model="category">
<el-form-item label="分类名称" >
<el-input v-model="category.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="图标">
<el-input v-model="category.icon" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="计量单位">
<el-input v-model="category.productUnit" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitData"
>确 定</el-button
>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
name: "",
//import引入的组件需要注入到对象中才能使用
components: {},
props: {},
data() {
return {
menus: [],
//默认展开节点
expandedKey: [],
//对话框是否显示
dialogVisible: false,
//对话框类型 add/edit
dialogType: "",
//话框提示信息
title: "",
category: {
name: "",
parentCid: 0,
catLevel: 0,
showStatus: 1,
sort: 0,
productUnit: "",
icon: "",
catId: null
},
defaultProps: {
children: "children",
label: "name",
},
};
},
methods: {
//获取菜单
getMenus() {
this.$http({
url: this.$http.adornUrl("/product/category/list/tree"),
method: "get",
}).then(({ data }) => {
console.log("获取菜单数据成功", data.data);
this.menus = data.data;
});
},
//添加
append(data) {
console.log("添加", data);
//打开对话框
this.dialogVisible = true;
this.dialogType = "add";
this.title = "添加分类";
this.category.parentCid = data.catId;
this.category.catLevel = data.catLevel * 1 + 1;
//将修改的回显值还原为默认值
this.category.catId = null;
this.category.name = "";
this.category.icon = "";
this.category.productUnit = "";
this.category.sort = 0;
this.category.showStatus = 1;
},
//添加三级分类
addCategory(){
console.log("提交的三级分类数据", this.category);
this.$http({
url: this.$http.adornUrl("/product/category/save"),
method: "post",
data: this.$http.adornData(this.category, false)
}).then(({ data }) => {
this.$message({
message: `【${this.category.name}】菜单保存成功 `,
type: "success"
});
//关闭对话框
this.dialogVisible = false;
//刷新出新的菜单
this.getMenus();
//设置需要默认展开的菜单
this.expandedKey = [this.category.parentCid];
});
},
//删除
remove(node, data) {
var ids = [data.catId];
this.$confirm(`是否删除【${data.name}】菜单?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$http({
url: this.$http.adornUrl("/product/category/delete"),
method: "post",
data: this.$http.adornData(ids, false),
}).then(({ data }) => {
//console.log("6666:"+node.data.name);
this.$message({
message: `【${node.data.name}】菜单删除成功`,
type: "success",
});
//刷新出新的菜单
this.getMenus();
//设置需要默认展开的菜单(当前删除节点的父节点)
this.expandedKey = [node.parent.data.catId];
});
})
.catch(() => {});
console.log("remove", node, data);
},
//修改
edit(data){
// console.log("要修改的数据:",data);
//打开对话框
this.dialogVisible = true;
this.dialogType = "edit";
this.title = "修改分类";
//发送请求获取当前节点最新的数据
this.$http({
url: this.$http.adornUrl(`/product/category/info/${data.catId}`),
method: "get",
}).then(({ data }) => {
console.log("修改回显的数据", data);
this.category.name = data.data.name;
this.category.catId = data.data.catId;
this.category.icon = data.data.icon;
this.category.productUnit = data.data.productUnit;
this.category.parentCid = data.data.parentCid;
this.category.catLevel = data.data.catLevel;
this.category.sort = data.data.sort;
this.category.showStatus = data.data.showStatus;
});
},
//根据对话框类型提交数据
submitData(){
if (this.dialogType == "add") {
this.addCategory();
}
if (this.dialogType == "edit") {
this.editCategory();
}
},
//修改三级分类数据
editCategory() {
var { catId, name, icon, productUnit } = this.category;
this.$http({
url: this.$http.adornUrl("/product/category/update"),
method: "post",
data: this.$http.adornData({ catId, name, icon, productUnit }, false),
}).then(({ data }) => {
this.$message({
message: `【${this.category.name}】菜单修改成功`,
type: "success",
});
//关闭对话框
this.dialogVisible = false;
//刷新出新的菜单
this.getMenus();
//设置需要默认展开的菜单
this.expandedKey = [this.category.parentCid];
});
},
},
//计算属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//生命周期 - 创建完成(可以访问当前this实例)
created() {
this.getMenus();
},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeCreate() {}, //生命周期 - 创建之前
beforeMount() {}, //生命周期 - 挂载之前
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style scoped>
</style>