1.对话框
<!-- 对话框 -->
<el-dialog 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>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button
>
</span>
</el-dialog>
在data中加入
//对话框是否显示
dialogVisible: false,
category: {name:""},
详情请参考ElementUI官网添加链接描述
效果图
2.对话框细化
<!-- 对话框 -->
<el-dialog 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="addCategory"
>确 定</el-button
>
</span>
</el-dialog>
data中
//对话框是否显示
dialogVisible: false,
category: {
name: "",
parentCid: 0,
catLevel: 0,
showStatus: 1,
sort: 0,
productUnit: "",
icon: "",
catId: null
},
methods中加入
//添加
append(data) {
console.log("添加", data);
//打开对话框
this.dialogVisible = true;
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);
},
3.发送post请求
//添加三级分类
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"
});
});
},
2021-11-11 10:45:11.410 DEBUG 6204 --- [io-10000-exec-5] c.a.g.product.dao.CategoryDao.insert : ==> Preparing: INSERT INTO pms_category ( parent_cid, icon, name, show_status, product_unit, sort, cat_level ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
2021-11-11 10:45:11.413 DEBUG 6204 --- [io-10000-exec-5] c.a.g.product.dao.CategoryDao.insert : ==> Parameters: 34(Long), q(String), 华为(String), 1(Integer), 1(String), 0(Integer), 3(Integer)
2021-11-11 10:45:11.417 DEBUG 6204 --- [io-10000-exec-5] c.a.g.product.dao.CategoryDao.insert : <== Updates: 1
数据库插入成功
4.页面效果优化
保存成功后应该自动关闭对话框并刷新出新的菜单且默认展开添加后的菜单
//添加三级分类
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];
});
},
点击确认
5.完整代码
<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"
v-if="node.childNodes.length == 0"
@click="() => remove(node, data)"
>
Delete
</el-button>
</span>
</span>
</el-tree>
<!-- 对话框 -->
<el-dialog 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="addCategory"
>确 定</el-button
>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
name: "",
//import引入的组件需要注入到对象中才能使用
components: {},
props: {},
data() {
return {
menus: [],
//默认展开节点
expandedKey: [],
//对话框是否显示
dialogVisible: false,
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.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);
},
},
//计算属性 类似于data概念
computed: {},
//监控data中的数据变化
watch: {},
//生命周期 - 创建完成(可以访问当前this实例)
created() {
this.getMenus();
},
//生命周期 - 挂载完成(可以访问DOM元素)
mounted() {},
beforeCreate() {}, //生命周期 - 创建之前
beforeMount() {}, //生命周期 - 挂载之前
beforeUpdate() {}, //生命周期 - 更新之前
updated() {}, //生命周期 - 更新之后
beforeDestroy() {}, //生命周期 - 销毁之前
destroyed() {}, //生命周期 - 销毁完成
activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style scoped>
</style>