中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站開發(fā)招標(biāo)網(wǎng)絡(luò)輿情軟件免費(fèi)入口

網(wǎng)站開發(fā)招標(biāo),網(wǎng)絡(luò)輿情軟件免費(fèi)入口,網(wǎng)站建設(shè)入門 下載,html網(wǎng)站地圖文章目錄 tree-selector1. 新增表單組件2. 在父組件中引用3. 父組件添加新增按鈕4. 樹形組件4.1 前端代碼4.2 后端代碼 前言:最近寫項(xiàng)目,發(fā)現(xiàn)了一些很有意思的功能,想寫文章,錄視頻把這些內(nèi)容記錄下。但這些功能太零碎&#xff0c…

文章目錄

    • tree-selector
      • 1. 新增表單組件
      • 2. 在父組件中引用
      • 3. 父組件添加新增按鈕
      • 4. 樹形組件
        • 4.1 前端代碼
        • 4.2 后端代碼

前言:最近寫項(xiàng)目,發(fā)現(xiàn)了一些很有意思的功能,想寫文章,錄視頻把這些內(nèi)容記錄下。但這些功能太零碎,如果為每個(gè)功能都單獨(dú)搭建一個(gè)項(xiàng)目,這明顯不合適。于是我想,就搭建一個(gè)項(xiàng)目,把那些我想將的小功能全部整合到一起。實(shí)現(xiàn) 搭一次環(huán)境,處處使用。

本文主要實(shí)現(xiàn)一下兩個(gè)功能

  1. 新增表單, 更新表單組件編寫
  2. treeSelect樹形結(jié)構(gòu)編寫

環(huán)境搭建
文章鏈接

已錄制視頻
視頻鏈接

tree-selector

這個(gè)功能是table-tree功能的附屬產(chǎn)品。是為了能在新增表單中,更方便選擇上級(jí)節(jié)點(diǎn)所開發(fā)的功能。因此,我們得先把新增表單組件開發(fā)出來

新增、修改邏輯
在這里插入圖片描述

tree形組件

在這里插入圖片描述

1. 新增表單組件

/src/views/welcome/treeAddOrUpdate.vue

<script setup lang="ts">
import { UnitEntity } from "@/api/tree";
import { ref, reactive } from "vue";
const dialogVisible = ref(false);let form = reactive(new UnitEntity());
const title = ref("新增表單");// 定義init方法, 讓父組件調(diào)用
const init = data => {console.log(data);if (data) {form = data;title.value = "編輯表單";} else {title.value = "新增表單";}dialogVisible.value = true;
};// 暴露方法
defineExpose({ init });// 提交表單
const submit = () => {console.log(form);
};
</script><template><el-dialog v-model="dialogVisible" :title="title"><el-form :model="form"><el-form-item label="單元"><el-input v-model="form.unit" /></el-form-item><el-form-item label="父id"><el-input v-model="form.pid" /></el-form-item></el-form><el-button @click="submit">提交</el-button></el-dialog>
</template><style lang="scss" scoped></style>

2. 在父組件中引用

/src/views/welcome/index.vue

<script setup lang="ts">
import { ref, onMounted, nextTick } from "vue";
import TreeAddOrUpdate from "./treeAddOrUpdate.vue";const dialogVisible = ref(false);// 引用子組件
const treeAddOrUpdateRef = ref();// ...
</script><template><!--ref引用組件--><tree-add-or-update v-if="dialogVisible" ref="treeAddOrUpdateRef" />
</template>

3. 父組件添加新增按鈕

/src/views/welcome/index.vue

<script setup lang="ts">
// 新增/修改 都可以使用該方法
const addOrUpdate = data => {console.log(data);dialogVisible.value = true;// nextTick保證treeAddOrUpdateRef能夠引用到子組件nextTick(() => {// 調(diào)用子組件暴露的init方法, 設(shè)置數(shù)據(jù)treeAddOrUpdateRef.value.init(data);});
};
</script><template><el-button type="primary" @click="addOrUpdate">新增</el-button>
</template>

完成以上步驟,我們就可以點(diǎn)擊新增表單,但這個(gè)界面對(duì)于用戶來說其實(shí)并不美好。誰知道父id是什么?因此我們采用tree-select的形式來提高界面的可使用性

4. 樹形組件

在這里插入圖片描述

我們使用的是element plus的TreeSelect組件,具體文檔如下:[TreeSelect 樹形選擇 | Element Plus (element-plus.org)]()

4.1 前端代碼
  • /src/api/tree.ts
export class LabelVo {
id: Number;
label: String;
value: String;
children: Array<LabelVo>;
}/** 獲取全部的treeLabel */
export const getLabelTree = () => {
return http.request<R<Array<LabelVo>>>("get",baseUrlApi("unit/listTreeSelect")
);
};/** 根據(jù)id查詢節(jié)點(diǎn) */
export const getNodeById = (id: Number) => {
return http.request<R<LabelVo>>("get", baseUrlApi(`unit/listNode?id=${id}`));
};
  • /src/views/welcome/treeAddOrUpdate.vue
<template>
<el-tree-selectv-model="value":data="data"check-strictlyshow-checkbox@check-change="handleCheckChange"style="width: 240px"/>
</template><script>
// 定義init方法, 讓父組件調(diào)用
const init = data => {console.log(data);if (data) {form = data;title.value = "編輯表單";// 查詢上級(jí)節(jié)點(diǎn)數(shù)據(jù)(根據(jù)id返回{value, label, id})getNodeById(form.pid).then(res => {if (res.code === 0) {value.value = res.data.value;}});} else {title.value = "新增表單";}console.log(form);dialogVisible.value = true;
};const value = ref();
const data = ref<Array<LabelVo>>();const handleCheckChange = (data: LabelVo, checked, indeterminate) => {console.log(data);console.log(checked);if (checked) {form.pid = data.id;}
};
</script>

tip: init方法改動(dòng)

4.2 后端代碼
  • 定義實(shí)體類
package com.fgbg.demo.vo;import lombok.Data;import java.util.List;@Data
public class LabelVo {private String label;private String value;private Integer id;private Integer pid;private List<LabelVo> children;
}
  • 返回tree-selector展示所需數(shù)據(jù)

        @RequestMapping("/listTreeSelect")public R listTreeSelect() {List<TbUnit> tbUnitList = unitService.list();List<LabelVo> list = tbUnitList.stream().map(e -> {LabelVo vo = new LabelVo();vo.setValue(e.getUnit());vo.setLabel(e.getUnit());vo.setId(e.getId());vo.setPid(e.getPid());return vo;}).collect(Collectors.toList());// TbUnit -> LabelVo// 建立map映射(id->index)HashMap<Integer, Integer> map = new HashMap<>();for (int index = 0; index < list.size(); index++) {Integer id = list.get(index).getId();map.put(id, index);}// ...for (int i = 0; i < list.size(); i++) {LabelVo node = list.get(i);Integer pid = node.getPid();// 有父親if (pid != null) {// 找到pid的父親, 并把當(dāng)前節(jié)點(diǎn)(node)添加到父親節(jié)點(diǎn)的children里面Integer indexParent = map.get(pid);// 獲取父親節(jié)點(diǎn)LabelVo parent = list.get(indexParent);if (parent.getChildren() == null) {parent.setChildren(new ArrayList<>());}// 向父親節(jié)點(diǎn)的children字段添加當(dāng)前nodeparent.getChildren().add(node);}}// 過濾出一級(jí)節(jié)點(diǎn)List<LabelVo> ans = list.stream().filter(e -> e.getPid() == null).collect(Collectors.toList());return R.ok().put("data", ans);}
  • 根據(jù)id查詢數(shù)據(jù)

        // 根據(jù)id查詢節(jié)點(diǎn)數(shù)據(jù){value id label}@RequestMapping("/listNode")public R listNode(@RequestParam Integer id) {TbUnit unit = unitService.getById(id);LabelVo labelVo = new LabelVo();labelVo.setLabel(unit.getUnit());labelVo.setValue(unit.getUnit());labelVo.setId(unit.getId());return R.ok().put("data", labelVo);}
    
http://www.risenshineclean.com/news/29778.html

相關(guān)文章:

  • 南陽公司做網(wǎng)站市場(chǎng)營(yíng)銷推廣方案模板
  • 哪里免費(fèi)做網(wǎng)站網(wǎng)站建設(shè)方案模板
  • 鄭州網(wǎng)站制作鄭州網(wǎng)站制作案例優(yōu)化大師官網(wǎng)登錄入口
  • 東莞網(wǎng)站優(yōu)化seo今日全國(guó)疫情最新消息
  • 做網(wǎng)站到底要不要備案學(xué)生個(gè)人網(wǎng)頁制作教程
  • 寶安做棋牌網(wǎng)站建設(shè)哪家公司收費(fèi)合理天津優(yōu)化加盟
  • 淄博網(wǎng)站優(yōu)化資訊在線seo超級(jí)外鏈工具
  • 政府網(wǎng)站建設(shè)管理意見網(wǎng)絡(luò)營(yíng)銷什么意思
  • 寫出網(wǎng)站建設(shè)步驟seo優(yōu)化廠商
  • 銷售網(wǎng)站制作怎么做品牌整合營(yíng)銷
  • 外貿(mào)平臺(tái)有哪些是免費(fèi)的直接可以發(fā)布售賣產(chǎn)品的關(guān)鍵詞自動(dòng)優(yōu)化工具
  • 二手商品交易網(wǎng)站開發(fā)百度搜索引擎廣告
  • wordpress+調(diào)用+編輯器長(zhǎng)沙官網(wǎng)seo技術(shù)
  • 網(wǎng)站空間大小選擇百度怎么投放自己的廣告
  • 免費(fèi)行情軟件網(wǎng)站有哪些sem競(jìng)價(jià)外包公司
  • 騰訊云可以做網(wǎng)站嗎3百度網(wǎng)盤免費(fèi)下載
  • 沈陽市網(wǎng)站制作廣東省人大常委會(huì)
  • 一級(jí)a做爰網(wǎng)站下載代發(fā)軟文
  • 深圳光明廣州網(wǎng)絡(luò)seo優(yōu)化
  • 使用免費(fèi)的代碼做網(wǎng)站品牌廣告
  • 公司企業(yè)網(wǎng)站制作教程推廣專家
  • 網(wǎng)站開發(fā)常見問題總結(jié)百度收錄關(guān)鍵詞查詢
  • 成都模板建站代理seo站長(zhǎng)工具下載
  • 木工支模價(jià)格明細(xì)表搜索引擎優(yōu)化的流程是什么
  • 自己做網(wǎng)站哪種好做搜索引擎優(yōu)化的策略主要有
  • 網(wǎng)站建設(shè)江門游戲代理加盟
  • 河南平臺(tái)網(wǎng)站建設(shè)價(jià)位百度網(wǎng)站網(wǎng)址是多少
  • 深圳定制網(wǎng)站制作費(fèi)用百度智能建站系統(tǒng)
  • 網(wǎng)站開發(fā)技術(shù)實(shí)驗(yàn)教程seo推廣優(yōu)化的方法
  • 漢中門戶網(wǎng)工程招標(biāo)杭州seo網(wǎng)站哪家好