vue+element-plus的el-tree和el-tree-select

在项目中有一个添加的类目里面有一个这样的选择,刚开始做项目一直用的是el-tree,于是做这个的时候用的也是el-select+el-tree等做完之后才发现还有更方便的el-tree-select结合,于是也做了一边接下来我把俩个方法都写上,首先是el-select+el-tree

html

<el-form-item label="类别" prop="operateType">
	<el-select v-model="operateType" ref="select" style="width: 100%">
		<el-option>
			<el-tree ref="tree" :data="options" :props="menuProps"
				@node-click="handleNodeClick" :expand-on-click-node="false"
				:check-on-click-node="true" :filter-node-method="filterNode">
			</el-tree>
		</el-option>
	</el-select>
</el-form-item>

js 

data(){
    operateType:"",
    options:[],
    menuProps: {//获取operateTypeName的名字
		label: (data) => {
			return data.operateTypeName;
			},
		},
}
//调取数据
async getGroup() {
   var res = await this.$API.接口所在位置.get();
   if(res.code===200){
       //forEach一下父子级的关系,来进行排序
        res.data.forEach((ele) => {
			const parentId = ele.parentId;
			if (parentId === 0) {
				 return;
			} else {
				res.data.forEach((e) => {
					if (e.id === parentId) {
						let childrenaa = e.children;
						if (!childrenaa) {
							childrenaa = [];
						}
						childrenaa.push(ele);
						e.children = childrenaa;
					  }
				});
			}
		});
		res.data = res.data.filter((ele) => ele.parentId === 0);
		this.options = res.data;
    }
},
//点击树
handleNodeClick(data) {
	this.operateType = data.operateTypeName;//点击渲染到选框里
	this.$refs.select.blur();
			
},

这个方法就完成了,接下来是el-tree-select这个方法

html

<el-form-item label="类别" prop="operateType">
	<el-tree-select v-model="operateType" ref="select"  :data="options" 
      node-key="id"  :props="menuProps" @node-click="handleNodeClick"/>
</el-form-item>

好了,这就ok了js都是一样的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这个Demo需要分为前端页面和后端代码两部分来实现,下面我将介绍具体的实现步骤。 ## 后端代码实现 1. 创建SpringBoot项目,引入相关依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> </dependencies> ``` 2. 创建数据库表,并使用Mybatis进行数据访问操作,这里使用Druid作为数据源: ```java @Mapper public interface DemoMapper { List<Demo> getDemoList(); Demo getDemoById(Integer id); int addDemo(Demo demo); int updateDemo(Demo demo); int deleteDemo(Integer id); } ``` 3. 在Controller层编写接口,提供增删改查的功能: ```java @RestController @RequestMapping("/demo") public class DemoController { @Autowired private DemoMapper demoMapper; @GetMapping("/list") public List<Demo> getDemoList() { return demoMapper.getDemoList(); } @GetMapping("/{id}") public Demo getDemoById(@PathVariable Integer id) { return demoMapper.getDemoById(id); } @PostMapping("/add") public int addDemo(@RequestBody Demo demo) { return demoMapper.addDemo(demo); } @PutMapping("/update") public int updateDemo(@RequestBody Demo demo) { return demoMapper.updateDemo(demo); } @DeleteMapping("/{id}") public int deleteDemo(@PathVariable Integer id) { return demoMapper.deleteDemo(id); } } ``` ## 前端页面实现 1. 创建Vue项目,并引入相关依赖: ```javascript import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; ``` 2. 在页面中使用Element-Plus组件,实现增删改查的功能: ```vue <template> <div class="demo"> <el-button type="primary" @click="showAddDialog">添加</el-button> <el-table :data="tableData"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="sex" label="性别"></el-table-column> <el-table-column label="操作"> <template #default="{ row }"> <el-button type="text" @click="showUpdateDialog(row)">编辑</el-button> <el-button type="text" @click="deleteDemo(row.id)">删除</el-button> </template> </el-table-column> </el-table> <el-dialog title="添加" :visible.sync="addDialogVisible"> <el-form :model="addForm" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="addForm.name"></el-input> </el-form-item> <el-form-item label="年龄" prop="age"> <el-input v-model="addForm.age"></el-input> </el-form-item> <el-form-item label="性别" prop="sex"> <el-radio-group v-model="addForm.sex"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> </el-form> <div slot="footer"> <el-button @click="addDialogVisible = false">取消</el-button> <el-button type="primary" @click="addDemo">确定</el-button> </div> </el-dialog> <el-dialog title="编辑" :visible.sync="updateDialogVisible"> <el-form :model="updateForm" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="updateForm.name"></el-input> </el-form-item> <el-form-item label="年龄" prop="age"> <el-input v-model="updateForm.age"></el-input> </el-form-item> <el-form-item label="性别" prop="sex"> <el-radio-group v-model="updateForm.sex"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> </el-form> <div slot="footer"> <el-button @click="updateDialogVisible = false">取消</el-button> <el-button type="primary" @click="updateDemo">确定</el-button> </div> </el-dialog> </div> </template> <script> import { reactive, toRefs } from 'vue'; import axios from 'axios'; export default { name: 'Demo', setup() { const state = reactive({ tableData: [], addDialogVisible: false, updateDialogVisible: false, addForm: { name: '', age: '', sex: '男' }, updateForm: { id: '', name: '', age: '', sex: '' }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' } ], age: [ { required: true, message: '请输入年龄', trigger: 'blur' } ], sex: [ { required: true, message: '请选择性别', trigger: 'change' } ] } }); const getDemoList = () => { axios.get('/demo/list').then(res => { state.tableData = res.data; }); }; const addDemo = () => { axios.post('/demo/add', state.addForm).then(() => { state.addDialogVisible = false; state.addForm = { name: '', age: '', sex: '男' }; getDemoList(); }); }; const updateDemo = () => { axios.put('/demo/update', state.updateForm).then(() => { state.updateDialogVisible = false; state.updateForm = { id: '', name: '', age: '', sex: '' }; getDemoList(); }); }; const deleteDemo = id => { axios.delete(`/demo/${id}`).then(() => { getDemoList(); }); }; const showAddDialog = () => { state.addDialogVisible = true; }; const showUpdateDialog = row => { state.updateDialogVisible = true; state.updateForm = Object.assign({}, row); }; getDemoList(); return { ...toRefs(state), getDemoList, addDemo, updateDemo, deleteDemo, showAddDialog, showUpdateDialog }; } }; </script> ``` 这样就完成了一个简单的增删改查Demo,前后端分离,前端使用VueElement-Plus实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值