elementui樹形組件el-tree回顯的時(shí)候默認(rèn)高亮已選擇的節(jié)點(diǎn),并且定位到當(dāng)前高亮的節(jié)點(diǎn)位置

需求:默認(rèn)進(jìn)來是中選高亮悬包,并且定位當(dāng)高亮的位置


image.png

1.后臺(tái)返回的數(shù)據(jù)铭若,這根線上的所有的數(shù)據(jù)枫匾,一條線上的全部返回灰追,但是其他的需要點(diǎn)擊的時(shí)候調(diào)用另外一個(gè)接口
2.點(diǎn)擊當(dāng)前的節(jié)點(diǎn)調(diào)用接口把返回來的數(shù)據(jù)給當(dāng)前點(diǎn)擊節(jié)點(diǎn)的children就好了堵幽,然后緊接著把高亮節(jié)點(diǎn)
3.高亮節(jié)點(diǎn)必須 node-key="orgCode" 和 this.$refs.deptTree.setCurrentKey(this.dialogForm.deptCode); //設(shè)置選中,配置highlight-current后弹澎,即可高亮
4.計(jì)算當(dāng)前高亮的位置
html

<el-dialog :close-on-click-modal="false" title="修改部門" :visible.sync="dialogVisibleDept" width="700px"  @close="closeDialogDept">
           <div id="divTree" style="height:500px; overflow-y: auto">
                <el-tree
                        id="depTree"
                        accordion
                        highlight-current
                        @node-click="handleCheckChange"
                        :render-content="renderContentCont"
                        :props="props"
                        :data="orgListLine"
                        default-expand-all
                        node-key="orgCode"
                        ref="deptTree"
                >
                </el-tree>
            </div>
            <div class="dialog_button">
                <el-button  @click="closeDialogDept">取消</el-button>
                <el-button type="primary" @click="submitFormDept">確定</el-button>
            </div>
        </el-dialog>

data里面的參數(shù)


/*修改部門*/
dialogVisibleDept:false,
orgListLine:[], //后臺(tái)返回這條線選中的所有數(shù)據(jù)
curNodeCheck:"" ,//臨時(shí)存儲(chǔ)點(diǎn)擊當(dāng)前節(jié)點(diǎn)(最后保存用)

methods里面方法

 //添加層級(jí)圖標(biāo)
            renderContentCont(h, { data }) {
                let createElement = arguments[0];
                if (data.deptType == 1) {
                    return createElement("span", [
                        createElement("i", {
                            attrs: { class: "iconfont icon-jigouyinhang" },
                        }),
                        createElement("span", "     "),
                        createElement("span", arguments[1].node.label),
                    ]);
                } else if (data.deptType == 2) {
                    return createElement("span", [
                        createElement("i", { attrs: { class: "iconfont icon-bumen" } }),
                        createElement("span", "     "),
                        createElement("span", arguments[1].node.label),
                    ]);
                } else {
                    return createElement("span", [
                        createElement("i", { attrs: { class: "iconfont icon-renyuan1" } }),
                        createElement("span", "     "),
                        createElement("span", arguments[1].node.label),
                    ]);
                }
            },
//tree change事件
            handleCheckChange(obj) {
                this.curNodeCheck=obj //當(dāng)前點(diǎn)擊的節(jié)點(diǎn)數(shù)據(jù)
                let params = {
                        //點(diǎn)擊傳參數(shù)
                        deptType: obj.deptType,
                        orgCode: obj.orgCode,
                        orgType: obj.orgType,
                }
                contentMngAddEditApi.organizationsTree(params).then((res) => {
                    if (res.status == 0) {
                        obj.subDeptList=res.data//把點(diǎn)擊出來的數(shù)據(jù)給當(dāng)前的節(jié)點(diǎn)
                    } else {
                        return this.$message.error(res.message);
                    }
                });
            },
 //編輯---修改部門
            deptEdit(){
                this.dialogVisibleDept=true
                this.$nextTick(function () {
                    this.$refs.deptTree.setCurrentKey(this.dialogForm.deptCode); //設(shè)置選中朴下,配置highlight-current后,即可高亮
                    this.scrollToDepTree(this.dialogForm.deptCode) //計(jì)算距離
                })
            },
            //點(diǎn)擊保存---存儲(chǔ)點(diǎn)擊選中的部門
            submitFormDept(){
                this.dialogForm.deptCode=this.curNodeCheck.orgCode;
                this.dialogForm.deptName=this.curNodeCheck.orgName;
                if(this.currentFlag=='deptEditDialog') this.edit()
                this.dialogVisibleDept=false
            },
            //計(jì)算此節(jié)點(diǎn)的距離思路1.計(jì)算出當(dāng)前節(jié)點(diǎn)據(jù)頂部的高度+當(dāng)前節(jié)點(diǎn)在樹的位置的高度-盒子高度的一半
            scrollToDepTree(deptCode){
                 let currentNode = this.$refs.deptTree.getNode(deptCode)
                let parentLevel
                let nodeCount = 1//當(dāng)前樹展開節(jié)點(diǎn)的數(shù)量
                let nodeIndex = 1//當(dāng)前選中節(jié)點(diǎn)在當(dāng)前樹的位置
                let dataIndex; //后臺(tái)返回當(dāng)前選中節(jié)點(diǎn)的父節(jié)點(diǎn)是當(dāng)前的第幾位
                for ( let i=0; i<this.orgListLine.length; i++){
                    if(this.orgListLine[i].subDeptList !=null){//有子集節(jié)點(diǎn)的
                        if(this.orgListLine[i].orgCode==this.orgListLine[i].orgCode){ //this.orgListLine[i].orgCode默認(rèn)選中的父節(jié)點(diǎn)的orgCode(一個(gè))苦蒿,另外一個(gè)this.orgListLine[i].orgCode是一級(jí)節(jié)點(diǎn)所有的orgCode(多個(gè))
                             dataIndex =i
                        }
                    }
                    if(this.orgListLine[i].orgCode==deptCode){ //只有一級(jí)節(jié)點(diǎn)的
                        dataIndex =i
                    }
                }
                let  topHeight=dataIndex*26;//計(jì)算出選中節(jié)點(diǎn)到到頂部的高度
                if(currentNode){
                    let currentNodeOrgCode= currentNode&&currentNode.data.orgCode;
                    //計(jì)算nodeCount和nodeIndex
                    console.log('是否有值',currentNode);
                    do {
                        currentNode = currentNode.parent
                        parentLevel = currentNode.level
                        let childNodes = currentNode.childNodes
                        nodeCount += childNodes.length
                        for (let i = 0; i < childNodes.length; i ++) {
                            if (childNodes[i].data.orgCode == currentNodeOrgCode) {
                                nodeIndex += (i + 1)
                            }
                        }
                        currentNodeOrgCode = currentNode.data.orgCode
                    }
                    while ( parentLevel>0)//包含一級(jí)節(jié)點(diǎn)殴胧,因?yàn)橐患?jí)節(jié)點(diǎn)有多個(gè),如果是一級(jí)節(jié)點(diǎn)有一個(gè)佩迟,那這個(gè)判斷就是while ( 1!=parentLevel)
                    let dom = document.querySelector("#divTree")
                    let dom1 = document.querySelector("#depTree")
                    //一個(gè)節(jié)點(diǎn)的高度是26px,這個(gè)值能否從對(duì)象中獲取团滥,等我把這個(gè)功能做好再考慮吧
                    let nodeHight =26
                    // console.log('nodeCount',nodeCount);
                    // console.log('nodeHight',nodeHight);
                    // console.log('nodeIndex',nodeIndex);
                    // console.log('scrollHeight',dom1.scrollHeight);
                    dom1.style.height = (nodeCount * nodeHight) + "px"
                    let contHeight=(nodeIndex * nodeHight)+topHeight-300//總高度,盒子高度的一半
                    dom.scrollTo(0, contHeight)
                }
            },
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市报强,隨后出現(xiàn)的幾起案子灸姊,更是在濱河造成了極大的恐慌,老刑警劉巖秉溉,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件力惯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡召嘶,警方通過查閱死者的電腦和手機(jī)父晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄跌,“玉大人甲喝,你說我怎么就攤上這事〉螅” “怎么了俺猿?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵茎匠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我押袍,道長(zhǎng)诵冒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任谊惭,我火速辦了婚禮汽馋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圈盔。我一直安慰自己豹芯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布驱敲。 她就那樣靜靜地躺著铁蹈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪众眨。 梳的紋絲不亂的頭發(fā)上握牧,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音娩梨,去河邊找鬼沿腰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狈定,可吹牛的內(nèi)容都是我干的颂龙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼纽什,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼措嵌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稿湿,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤铅匹,失蹤者是張志新(化名)和其女友劉穎押赊,沒想到半個(gè)月后饺藤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡流礁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年涕俗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片神帅。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡再姑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出找御,到底是詐尸還是另有隱情元镀,我是刑警寧澤绍填,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站栖疑,受9級(jí)特大地震影響讨永,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遇革,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一卿闹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萝快,春花似錦锻霎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奄容,卻和暖如春蚌铜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫩海。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工冬殃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叁怪。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓审葬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親奕谭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涣觉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容