若依生成樹表和下拉框選擇樹表結構(在其他頁面使用該下拉框輸入)

1.數據庫表設計

  • 生成樹結構的主要列是id列和parent_id列,后者指向他的父級
    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/a945bf568f9d45c98cd96407fbb0f3d3.png

2.來到前端代碼生成器頁面

  • 導入你剛剛寫出該格式的數據庫表
    在這里插入圖片描述

3.點擊編輯,來到字段

  • 祖籍列表是為了好找到直接父類,不屬于代碼生成器方法,需要后臺編寫
    在這里插入圖片描述

4.改變生成結構為樹表結構

在這里插入圖片描述

5.提交然后生成代碼并復制到對應目錄當中

6.修改serviceImpl當中插入修改方法

    /*** 新增原料** @param tIngredient 原料* @return 結果*/@Overridepublic int insertTIngredient(TIngredient tIngredient) {TIngredient info = tIngredientMapper.selectTIngredientById(tIngredient.getParentId());// 如果父節點不為正常狀態,則不允許新增子節點if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {throw new ServiceException("原料類型停用,不允許新增");}tIngredient.setAncestors(info.getAncestors() + "," + tIngredient.getParentId());tIngredient.setCreateTime(DateUtils.getNowDate());return tIngredientMapper.insertTIngredient(tIngredient);}/*** 修改原料** @param tIngredient 原料* @return 結果*/@Overridepublic int updateTIngredient(TIngredient tIngredient) {TIngredient newParentDept = tIngredientMapper.selectTIngredientById(tIngredient.getParentId());TIngredient oldDept = tIngredientMapper.selectTIngredientById(tIngredient.getId());if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) {String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getId();String oldAncestors = oldDept.getAncestors();tIngredient.setAncestors(newAncestors);updateDeptChildren(tIngredient.getId(), newAncestors, oldAncestors);}tIngredient.setUpdateTime(DateUtils.getNowDate());int result = tIngredientMapper.updateTIngredient(tIngredient);if (UserConstants.DEPT_NORMAL.equals(tIngredient.getStatus()) && StringUtils.isNotEmpty(tIngredient.getAncestors())&& !StringUtils.equals("0", tIngredient.getAncestors())) {// 如果該部門是啟用狀態,則啟用該部門的所有上級部門updateParentDeptStatusNormal(tIngredient);}return result;}
  • 用到了兩個額外對數操作方法,聯動子父級菜單的修改
    /*** 修改該部門的父級部門狀態** @param tIngredient 當前部門*/private void updateParentDeptStatusNormal(TIngredient tIngredient) {String ancestors = tIngredient.getAncestors();Long[] deptIds = Convert.toLongArray(ancestors);tIngredientMapper.enableTIngredientByIds(deptIds);}/*** 修改子元素關系** @param deptId       被修改的部門ID* @param newAncestors 新的父ID集合* @param oldAncestors 舊的父ID集合*/public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) {List<TIngredient> children = tIngredientMapper.selectChildrenTIngredientById(deptId);for (TIngredient child : children) {child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));}if (children.size() > 0) {tIngredientMapper.updateTIngredientChildren(children);}}

生成完畢,額外處理自己表中數據也是在新增或者修改當中寫

來到想要使用的前端頁面(其他頁面使用)

1.導入依賴

  • 第一個依賴是生成樹的請求
  • 第二個組件是vue.js的樹形選擇組件
  • 第三個是樹形組件的css樣式
import { listIngredient } from "@/api/bases/ingredient";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";

2.注冊樹形組件

  components: {Treeselect},

在這里插入圖片描述

3.要使用的核心方法

    /** 查詢原料下拉樹結構 */getTreeselect () {listIngredient().then(response => {this.ingredientOptions = [];const data = { id: 0, ingredientName: '頂級節點', children: [] };data.children = this.handleTree(response.data, "id", "parentId");this.ingredientOptions.push(data);});},/** 轉換原料數據結構 */normalizer (node) {if (node.children && !node.children.length) {delete node.children;}return {id: node.id,label: node.ingredientName,children: node.children};},

4調用方法,我是通過新增按鈕來實現的

    /** 新增原料操作 */handleAddIngredientVO () {this.reset();this.getTreeselect();this.openAddIngredientVO = true;this.titleAddIngredientVO = "添加產品原料";},

5.調用方法的下拉框表單

            <!-- 新增或者修改原料 --><el-dialog:title="titleAddIngredientVO":visible.sync="openAddIngredientVO"width="500px"append-to-body><el-formref="formVO":model="formVO":rules="rules"label-width="80px"><el-form-itemlabel="產品編碼"prop="breedId"><el-inputv-model="formVO.breedId"placeholder="請輸入產品編碼"/></el-form-item><el-form-itemlabel="父級"prop="materialId"><treeselectv-model="formVO.materialId":options="ingredientOptions":normalizer="normalizer":disable-branch-nodes="true"placeholder="請選擇原料"/></el-form-item><el-form-itemlabel="kg/每米"prop="remark"><el-inputv-model="formVO.remark"placeholder="請輸入每米多少千克"/></el-form-item></el-form><divslot="footer"class="dialog-footer"><el-buttontype="primary"@click="submitForm">確 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog>
  • **重點**
    在這里插入圖片描述

6.附treeselect組件常用屬性

<treeselect:multiple="true"v-model="form.postIds"//多選id值可賦值可傳給后臺:options="postOptions"//下拉樹樁多選框的數據:show-count="true"//展示下拉總數數據:flat="true"//設置平面模式(選中的標簽不聯動子節點和父節點):limit="5"//展示多選的標簽個數:limitText="count => `及其它${count}項`"//多選的超出文字展示方式:auto-deselect-descendants="true"//取消節點時,取消其接點的子節點(僅可在平面模式下使用):auto-select-descendants="true"//選擇節點時,取消其接點的子節點(僅可在平面模式下使用)placeholder="請選擇區域":disable-branch-nodes="true"//只能選擇末級節點/>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11444.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【XSRP軟件無線電】基于軟件無線電平臺的QPSK頻帶通信系統設計

目錄&#xff1a; 目錄&#xff1a; 一、緒論 1.1 設計背景 1.2 設計目的 二、系統總體方案 2.1 專題調研題目 2.2 調研背景 2.3 設計任務解讀 2.4 設計原理 2.4.1 原理框圖 2.4.2 功能驗證 三、軟件設計 3.1 程序解讀 3.2 程序設計 3.3 仿真結果&#xff1a; 四、程序代碼分析…

網絡基礎-SSH協議(思科、華為、華三)

SSH&#xff08;Secure Shell&#xff09;是一種用于安全遠程訪問和安全文件傳輸的協議。它提供了加密的通信通道&#xff0c;使得用戶可以在不安全的網絡上安全地遠程登錄到遠程主機&#xff0c;并在遠程主機上執行命令、訪問文件以及傳輸文件&#xff0c;本篇主要講解命令執行…

SpringAI集成本地AI大模型ollama(調用篇)非常簡單!!

一&#xff0c;前提準備本地ai模型 1&#xff0c;首先需要去ollama官網下載開源ai到本地 網址&#xff1a;Ollama 直接下載到本地&#xff0c;然后啟動ollama 啟動完成后&#xff0c;我們可以在cmd中執行ollama可以看到相關命令行 2&#xff0c; 下載ai moudle 然后我們需要…

基于C#開發web網頁模板流程-登錄界面

前言&#xff0c;首先介紹一下本項目將要實現的功能 &#xff08;一&#xff09;登錄界面 實現一個不算特別美觀的登錄窗口&#xff0c;當然這一步跟開發者本身的設計美學相關&#xff0c;像蒟蒻博主就沒啥藝術細胞&#xff0c;勉強能用能看就行…… &#xff08;二&#xff09…

【vector】迭代器

Vector的基本數據結構 可以看到end指向的是數組的最后一個元素&#xff1b; 那么在使用函數遍歷的時候就要注意這種清理&#xff1b; 比如計算一個數組前5個數字的最小值&#xff1b; vector<int> prices{2,1,4,2,0,52,12};auto iter_min min_element(prices.begin(),pr…

NSSCTF | [LitCTF 2023]我Flag呢?

這道題沒啥好說的&#xff0c;題目標簽為源碼泄露&#xff0c;我們直接CtrlU查看網頁源碼就能在最后找到flag 本題完

深入學習指針2

前言 hello,我又來了&#xff0c;今天有我繼續帶領大家深入的學習指針&#xff0c;通過上次的學習&#xff0c;我們已經了解到了指針的基本概念&#xff0c;指針如何使用&#xff0c;指針使用的益處&#xff0c;以及一些相關的概念&#xff0c;那今天我們就繼續深入的學習&am…

Vue3專欄項目 -- 二、自定義From組件(下)

需求分析&#xff1a; 現在我們還需要一個整體的表單在單擊某個按鈕的時候可以循環的驗證每個input的值&#xff0c;最后我們還需要有一個事件可以得到最后驗證的結果&#xff0c;從而進行下一步的操作 如下&#xff0c;我們應該有一個form表單包裹著全部的input表單&#xf…

Java面試八股之Java中的IO流分為幾種

Java中的IO流分為幾種 按數據單位分類&#xff1a; 字節流&#xff08;Byte Stream&#xff09;&#xff1a;以字節&#xff08;8位二進制數&#xff09;為基本單位進行數據讀寫。字節流適合處理所有類型的數據&#xff0c;包括文本、圖像、音頻、視頻等二進制文件。抽象基類…

打破地域界限,HubSpot海外獲客系統引領企業走向國際化

在全球化的浪潮中&#xff0c;企業如何精準把握海外市場、高效獲取并轉化目標客戶&#xff0c;已成為決定其市場地位與未來發展的關鍵因素。HubSpot海外獲客系統以其獨特的視角、強大的功能和卓越的性能&#xff0c;正在引領全球營銷進入一個新的時代。今天運營壇將深入剖析Hub…

阿里巴巴找黃金寶箱(II) - 貪心思維

系列文章目錄 文章目錄 系列文章目錄前言一、題目描述二、輸出描述三、輸入描述四、java代碼五、測試用例 前言 本人最近再練習算法&#xff0c;所以會發布自己的解題思路&#xff0c;希望大家多指教 一、題目描述 一貧如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;無意中發…

KUKA機器人專業名詞解釋

1、CCU Cabinet Control Unit &#xff08;控制柜控制單元&#xff09; 2、CIB Cabinet Interface Board &#xff08;控制柜接口板&#xff09; 3、HMI Human Machine Interface &#xff08;人機界面&#xff09;&#xff1b;KUKA.HMI 是 KUKA 操作界面。 4、KCB …

工作組PTH

文章目錄 簡述RID 500本地管理員密碼噴灑何為RIP 500 安全標識符SID與RIDPTH為何必須是RID 500CrackMapExec進行密碼噴灑 簡述 在工作組PTH中為什么只有administrator賬號可以,下面進行講解與利用。RID 500本地管理員密碼噴灑 何為RIP 500 安全標識符 安全標識符 安全標識符…

觸摸OpenNJet,云原生世界觸手可及

&#x1f308;個人主頁: Aileen_0v0 &#x1f525;熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?&#x1f4ab;個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄 導言OpenNJet云原生引擎介紹云原生平臺的介紹優化與創新 為什么選擇OpenNJet云原生引擎如何在windo…

Pytorch基礎:torch.cuda.set_device函數

相關閱讀 Pytorch基礎https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 torch.cuda.set_device函數用于設置當前使用的cuda設備&#xff0c;在當擁有多個可用的GPU且能被pytorch識別的cuda設備情況下&#xff08;環境變量CUDA_VISIBLE_…

【AI大模型】自動生成紅隊攻擊提示--GPTFUZZER

本篇參考論文為&#xff1a; Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 雖然LLM在今天的各個領域得到了廣泛的運用…

計算方法實驗7:實現三次樣條插值算法

任務 point.txt文件中包含了21個壓鐵的位置信息 利用大M法計算出木條在壓鐵控制下的曲線&#xff0c;邊界條件取自然邊界條件&#xff1b;將第10個壓鐵的位置移動至(0,10)&#xff0c;計算出新的曲線&#xff0c;觀察每個區間內的三次函數是否改變。 算法 μ i M i ? 1 2 …

MacOS java多版本安裝與管理

Home - SDKMAN! the Software Development Kit Manager # 安裝sdkman curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk version正常出現sdkman版本號就安裝成功了 # 安裝java # 安裝java8 sdk install java 8.0…

論文筆記:僅一個進程故障就無法達成共識

僅一個進程故障就無法達成共識 僅一個進程故障指的是在異步的分布式系統中 摘要 異步系統的共識問題&#xff08;consensus&#xff09;涉及一組進程&#xff0c;其中有的進程可能不可靠&#xff08;unreliable&#xff09;。共識問題要求可靠的進程一致地從兩個侯選中決定&…

【MATLAB源碼-第207期】基于matlab的單相光伏并網系統仿真,并網策略采用基于擾動觀測法的MPPT模型和使用電壓電流雙閉環SPWM控制。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 本文將重點分析光伏發電最大功率點跟蹤&#xff08;MPPT&#xff09;技術和逆變器的并網控制技術&#xff0c;并在Simulink環境下建立模擬系統&#xff0c;以體現這些技術的應用與效果。文章結構如下&#xff1a;首先簡介光伏…