摘要:解除禁用系統(tǒng)異常添加修改刪除搜索調(diào)用地址選擇方法方法顯示哪些按鈕可可搜索數(shù)據(jù)類型獲取成功公司研發(fā)部產(chǎn)品產(chǎn)品財(cái)務(wù)部會計(jì)外包科技部
treeUtil.js
import {Tree,message,Button,Input } from "antd"; import React from "react" import axios from "axios" const { TreeNode } = Tree; const Search = Input.Search; const getParentKey = (key, tree) => { let parentKey; for (let i = 0; i < tree.length; i++) { const node = tree[i]; if (node.children) { if (node.children.some(item => item.key === key)) { parentKey = node.key; } else if (getParentKey(key, node.children)) { parentKey = getParentKey(key, node.children); } } } return parentKey; }; const dataList = []; const generateList = (data) => { for (let i = 0; i < data.length; i++) { const node = data[i]; const key = node.key; dataList.push({ key, title: node.title }); if (node.children) { generateList(node.children); } } }; export default class treeUtil extends React.Component{ constructor(props) { super(props); this.state = { treeData:[] }; } componentWillMount (){ this.getTree(); } getTree(){ axios.get(this.props.treeurl).then(res =>{ generateList(res.data.data) this.setState({ treeData:res.data.data, haveTreeData:true, expandedKeys: [], searchValue: "", autoExpandParent: true, }) }) } onExpand = (expandedKeys) => { this.setState({ expandedKeys, autoExpandParent: false, }); } onSelect = (selectedKeys) => { console.log(this.props) // this.formRef.setState({ // disabled:true // }) this.setState({ selectedKeys}); if(selectedKeys.length>0 && this.props.selectMethod){ this.props.selectMethod(selectedKeys) } } onChange = (e) => { const value = e.target.value; const newExpandedKeys = [] let expandedKeys = dataList.map((item) => { if (item.title.indexOf(value) > -1) { return getParentKey(item.key, this.state.treeData); } return null; }).filter((item, i, self) => item && self.indexOf(item) === i); expandedKeys.forEach(x=>{ newExpandedKeys.push(x.toString()) }) this.setState({ expandedKeys:newExpandedKeys, searchValue: value, autoExpandParent: true, }); } onCheck = (checkedKeys) => { console.log("onCheck", checkedKeys); if(checkedKeys.length>0 && this.props.checkMethod){ this.props.checkMethod(checkedKeys) } this.setState({ checkedKeys }); } renderTreeNodes = data => data.map((item) => { if (item.children) { return ({this.renderTreeNodes(item.children)} ); } return; }) addTree(){ // //解除禁用 // this.formRef.setState({ // disabled:false // }) let selectedKey = null; if(this.state.selectedKeys){ selectedKey= this.state.selectedKeys[0] }else { selectedKey = null; } } change(){ // this.formRef.setState({ // disabled:false // }) } delete(){ axios.get(this.props.deleteUrl+this.state.selectedKeys[0] ).then(res =>{ if(res.data.success){ message.success(res.message); this.getTree() this.formRef.props.form.resetFields(); }else{ message.warning("系統(tǒng)異常"); } }) } render(){ const { searchValue, expandedKeys, autoExpandParent } = this.state; const loop = data => data.map((item) => { const index = item.title.indexOf(searchValue); const beforeStr = item.title.substr(0, index); const afterStr = item.title.substr(index + searchValue.length); const title = index > -1 ? ( {beforeStr} {searchValue} {afterStr} ) : {item.title}; if (item.children) { return ( {loop(item.children)} ); } return; }); return( {this.props.button?) } }{this.props.button.includes("add")?:""} {this.props.button.includes("update")?:""} {this.props.button.includes("delete")?:""}:"" } {this.props.searchable?:""} {loop(this.state.treeData)}
調(diào)用 const treeOption = { treeurl:React.rootDirectoryUrl+"/department/getDepartmentTree",//地址 selectMethod:this.onSelect, //選擇方法 checkMethod:this.onCheck ,//chect方法 button:["add","update","delete"],//顯示哪些按鈕 checkable:true,//可check searchable:true,//可搜索 }
數(shù)據(jù)類型
{ "code":"200", "message":"獲取成功", "data":[ { "key":45, "title":"公司", "pid":null, "children":[ { "key":46, "title":"研發(fā)部", "pid":45, "children":[ { "key":48, "title":"產(chǎn)品1", "pid":46, "children":[] },{ "key":49, "title":"產(chǎn)品2", "pid":46, "children":[] } ] },{ "key":50, "title":"財(cái)務(wù)部", "pid":45, "children":[ { "key":52, "title":"會計(jì)", "pid":50, "children":[] } ] } ] },{ "key":53, "title":"外包", "pid":null, "children":[ {"key":54,"title":"科技部","pid":53,"children":[]} ] } ],"success":true}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/110189.html
摘要:但是加了一定要比沒加的性能更高嗎我們再來看一個例子現(xiàn)在有一集合渲染成如下的樣子現(xiàn)在我們將這個集合的順序打亂變成。不加操作修改第個到第個節(jié)點(diǎn)的如果我們對這個集合進(jìn)行增刪的操作改成。 拋磚引玉 React通過引入Virtual DOM的概念,極大地避免無效的Dom操作,已使我們的頁面的構(gòu)建效率提到了極大的提升。但是如何高效地通過對比新舊Virtual DOM來找出真正的Dom變化之處同樣也...
摘要:使用來進(jìn)行按需加載安裝關(guān)于插件的介紹和使用,可參考使用這個插件之后仍然可以用來引入組件,但是這個時候插件會幫你轉(zhuǎn)換成的寫法。另外此插件配合屬性可以做到模塊樣式的按需自動加載。 引言 create-react-app:是一個創(chuàng)建react項(xiàng)目特別方便的腳手架,他幫我們配置好了各種需要使用的工具,減少了很多工作量。antd:是螞蟻金服推出的一個很優(yōu)秀的react UI庫,其中包含了很多我...
摘要:但在中,這一問題該如何解決呢使用遇到的問題如何自定義模塊文件后綴名的優(yōu)先級和一樣,也提供了一個叫的配置選項(xiàng),用于設(shè)定模塊文件的后綴名及其優(yōu)先級。 antd-mobile是螞蟻金服出的移動端設(shè)計(jì)指南和前端框架,它提供了一套基于React的移動端組件庫,可以很方便地用來開發(fā)體驗(yàn)良好的移動應(yīng)用。 使用antd-mobile遇到的問題:react-native模塊找不到 在閱讀了antd-mo...
摘要:很久沒上掘金發(fā)現(xiàn)草稿箱里存了好幾篇沒發(fā)的文章最近梳理下發(fā)出來往期面試官系列如何實(shí)現(xiàn)深克隆面試官系列的實(shí)現(xiàn)面試官系列前端路由的實(shí)現(xiàn)面試官系列基于數(shù)據(jù)劫持的雙向綁定優(yōu)勢所在面試官系列你為什么使用前端框架前言設(shè)計(jì)前端組件是最能考驗(yàn)開發(fā)者基本功的測 很久沒上掘金,發(fā)現(xiàn)草稿箱里存了好幾篇沒發(fā)的文章,最近梳理下發(fā)出來 往期 面試官系列(1): 如何實(shí)現(xiàn)深克隆 面試官系列(2): Event Bus...
摘要:是校驗(yàn)表單組件數(shù)據(jù)正確性的字段,其值為數(shù)組,里面的數(shù)組元素可以為。所以數(shù)組元素如果為的話,其內(nèi)容就是的。到目前為止,表單適合大部分的表單應(yīng)用場景。 JSON表單 描述 JSON表單是一個基于React的抽象組件,它可以把JSON數(shù)據(jù)格式描述的表單轉(zhuǎn)換成項(xiàng)目中的表單,它可以用簡短的幾行代碼,快速的生成Form表單。JSON表單的優(yōu)點(diǎn)是: 可以快速構(gòu)建出一個表單 表單的數(shù)據(jù)、邏輯、視圖分...
閱讀 575·2023-04-26 01:42
閱讀 3221·2021-11-22 11:56
閱讀 2391·2021-10-08 10:04
閱讀 836·2021-09-24 10:37
閱讀 3125·2019-08-30 15:52
閱讀 1731·2019-08-29 13:44
閱讀 472·2019-08-28 17:51
閱讀 2141·2019-08-26 18:26