最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.js遞歸組件實(shí)現(xiàn)組織架構(gòu)樹和選人功能

 更新時(shí)間:2019年07月04日 11:14:30   作者:碼上組合  
這篇文章主要介紹了Vue.js遞歸組件實(shí)現(xiàn)組織架構(gòu)樹和選人功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

大家好!先上圖看看本次案例的整體效果。

浪奔,浪流,萬(wàn)里濤濤江水永不休。如果在jq時(shí)代來(lái)實(shí)這個(gè)功能簡(jiǎn)直有些噩夢(mèng)了,但是自從前端思想發(fā)展到現(xiàn)在的以MVVM為主流的大背景下,來(lái)實(shí)現(xiàn)一個(gè)這樣繁雜的功能簡(jiǎn)直不能容易太多。下面就手把手帶您一步步撥開這個(gè)案例的層層迷霧。

實(shí)現(xiàn)步驟如下:

1. api構(gòu)建部門和員工信息接口,vuex全局存放部門list和員工list數(shù)據(jù)信息。

api:

export default {
 getEmployeeList () {
  return {
   returncode: 0,
   message: '',
   result: [
    {
     id: 1,
     employeeName: '吳亦凡',
     departmentId: 44
    },
    {
     id: 2,
     employeeName: '鹿晗',
     departmentId: 45
    },
    {
     id: 3,
     employeeName: '孫紅雷',
     departmentId: 44
    },
    {
     id: 4,
     employeeName: '周杰倫',
     departmentId: 45
    },
    {
     id: 5,
     employeeName: '張國(guó)榮',
     departmentId: 45
    },
    {
     id: 6,
     employeeName: '陳百?gòu)?qiáng)',
     departmentId: 45
    },
    {
     id: 7,
     employeeName: '譚詠麟',
     departmentId: 41
    },
    {
     id: 8,
     employeeName: '谷村新司',
     departmentId: 45
    },
    {
     id: 9,
     employeeName: '中島美雪',
     departmentId: 46
    },
    {
     id: 10,
     employeeName: '周潤(rùn)發(fā)',
     departmentId: 47
    },
    {
     id: 14,
     employeeName: '周慧敏',
     departmentId: 58
    },
    {
     id: 13,
     employeeName: '張學(xué)友',
     departmentId: 58
    }
   ]
  }
 },
 getDepartmentList () {
  return {
   returncode: 0,
   message: '',
   result: [
    {
     id: 40,
     name: '研發(fā)一部',
     parentId: 37,
     sequence: 2
    },
    {
     id: 41,
     name: '研發(fā)二部',
     parentId: 37,
     sequence: 4
    },
    {
     id: 43,
     name: '市場(chǎng)',
     parentId: 0,
     sequence: 6
    },
    {
     id: 44,
     name: '銷售',
     parentId: 0,
     sequence: 4
    },
    {
     id: 45,
     name: '財(cái)務(wù)',
     parentId: 0,
     sequence: 5
    },
    {
     id: 46,
     name: '研發(fā)三部',
     parentId: 37,
     sequence: 1
    },
    {
     id: 47,
     name: '研發(fā)四部',
     parentId: 37,
     sequence: 3
    },
    {
     id: 37,
     name: '研發(fā)',
     parentId: 0,
     sequence: 5
    },
    {
     id: 58,
     name: '研發(fā)一部',
     parentId: 57,
     sequence: 1
    },
    {
     id: 59,
     name: '測(cè)試',
     parentId: 0,
     sequence: 5
    },
    {
     id: 60,
     name: '測(cè)試一部',
     parentId: 59,
     sequence: 1
    },
    {
     id: 61,
     name: '測(cè)試二部',
     parentId: 59,
     sequence: 2
    },
    {
     id: 62,
     name: '研發(fā)二部',
     parentId: 57,
     sequence: 2
    }
   ]
  }
 }
}

store:

import dataApi from '@/api/data.api.js'
const state = {
 employeeList: [],
 departmentList: []
}

const getters = {
 employeeList: state => state.employeeList,
 departmentList: state => state.departmentList
}

const mutations = {
 SetEmployeeList (state, { employeeList }) {
  state.employeeList = employeeList
 },
 SetDepartmentList (state, { departmentList }) {
  state.departmentList = departmentList
 }
}

const actions = {
 getEmployeeList ({ commit }) {
  let employeeResult = dataApi.getEmployeeList()
  if (employeeResult.returncode === 0) {
   commit('SetEmployeeList', { employeeList: employeeResult.result })
  }
 },
 getDepartmentList ({ commit }) {
  let departmentResult = dataApi.getDepartmentList()
  if (departmentResult.returncode === 0) {
   commit('SetDepartmentList', { departmentList: departmentResult.result })
  }
 }
}

export default {
 state,
 getters,
 mutations,
 actions,
 namespaced: true
}

2. vue.$set為員工對(duì)象增加響應(yīng)式屬性checked控制是否選中,methods中創(chuàng)建選中方法如下:

selectEmployee () {
   var self = this
   if (self.employee.checked === undefined) {
    this.$set(self.employee, 'checked', true)
   } else {
    self.employee.checked = !self.employee.checked
   }
  }

3. computed計(jì)算屬性監(jiān)控文本框輸入字段searchKey的變化實(shí)現(xiàn)左側(cè)員工列表實(shí)時(shí)檢索功能。

searchEmployeeList () {
   var self = this
   if (self.searchKey.trim() === '') {
    console.log(self.employeeList)
    return self.employeeList.filter(item => item.checked === undefined || !item.checked)
   } else {
    return self.employeeList.filter(item => (item.employeeName.indexOf(self.searchKey.trim()) !== -1) && (item.checked === undefined || !item.checked))
   }
  }

4. 構(gòu)建組織結(jié)構(gòu)樹的部門組件,部門下可能存在子部門和員工,所以組件內(nèi)部再調(diào)用部門組件和員工組件,以達(dá)到循環(huán)遞歸的效果。

<template>
 <li @click.stop="expandTree()">
  <a :class="lvl|level">
   <span class="expand-tree-icon">
    <i class="fa fa-caret-right" :class="{'active':department.expand}"></i>
   </span>
   <span>
    <i class="lcfont lc-department-o"></i>
   </span>
   <span class="title">
    <span>{{department.name}}</span>
    <span class="title-desc">({{allChildEmployeeList.length}}人 )</span>
    <i class="lcfont lc-add" @click.stop="selectDepartmentEmployees()" title="添加整個(gè)部門成員"></i>
   </span>
  </a>
  <ul v-show="department.expand">
   <child-employee
    v-for="(employee,index) in childEmployeeList"
    :employee="employee"
    :lvl="lvl+1"
    :key="index"
   ></child-employee>
   <child-department
    v-for="(department,index) in childDepartmentList"
    :department="department"
    :employeeList="employeeList"
    :departmentList="departmentList"
    :lvl="lvl+1"
    :key="index"
   ></child-department>
  </ul>
 </li>
</template>

5. 結(jié)構(gòu)樹之員工組件

<template>
 <li v-on:click.stop="selectEmployee()">
  <a class="member-item" v-bind:class="lvl|level" href="javascript:;" rel="external nofollow" >
   <div class="lc-avatar flex-se1" name="true" size="30">
    <div class="lc-avatar-30" :title="employee.employeeName">
     <span class="lc-avatar-def" style="background-color: rgb(112, 118, 142);">
      <div>{{employee.employeeName}}</div>
     </span>
     <div class="lc-avatar-name">{{employee.employeeName}}</div>
    </div>
   </div>
   <i class="lcfont" v-bind:class="{'lc-check':employee.checked}"></i>
  </a>
 </li>
</template>

6. 和上面員工的選中原理類似,控制部門節(jié)點(diǎn)的展開和合并也通過(guò)$set方法擴(kuò)展一個(gè)響應(yīng)式的expand屬性。

expandTree () {
   var self = this
   if (self.department.expand === undefined) {
    self.$set(self.department, 'expand', true)
   } else {
    self.department.expand = !self.department.expand
   }
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3?源碼解讀之副作用函數(shù)與依賴收集

    Vue3?源碼解讀之副作用函數(shù)與依賴收集

    本文深入分析了副作用的實(shí)現(xiàn)以及執(zhí)行時(shí)機(jī),并詳細(xì)分析了用于存儲(chǔ)副作用函數(shù)的targetMap的數(shù)據(jù)結(jié)構(gòu)及其實(shí)現(xiàn)原理,還深入分析了依賴收集track函數(shù)以及派發(fā)更新 trigger 函數(shù)的實(shí)現(xiàn),需要的朋友可以參考下
    2022-08-08
  • vue3組件式彈窗打開的3種方式小結(jié)

    vue3組件式彈窗打開的3種方式小結(jié)

    這篇文章主要給大家介紹了關(guān)于vue3組件式彈窗打開的3種方式,彈窗組件是常見(jiàn)的交互組件,它能夠彈出一些提示信息、提醒用戶進(jìn)行操作等等,需要的朋友可以參考下
    2023-07-07
  • 詳解Vue2 添加對(duì)scss的支持

    詳解Vue2 添加對(duì)scss的支持

    這篇文章主要介紹了詳解Vue2 添加對(duì)scss的支持,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Vue header組件開發(fā)詳解

    Vue header組件開發(fā)詳解

    本篇文章主要介紹了Vue header組件開發(fā)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 深入理解Vuex的作用

    深入理解Vuex的作用

    這篇文章主要介紹了深入理解Vuex的作用,對(duì)Vuex感興趣的同學(xué),可以參考下
    2021-05-05
  • Vue.js 實(shí)現(xiàn)地址管理頁(yè)面思路詳解(地址添加、編輯、刪除和設(shè)置默認(rèn)地址)

    Vue.js 實(shí)現(xiàn)地址管理頁(yè)面思路詳解(地址添加、編輯、刪除和設(shè)置默認(rèn)地址)

    這篇文章主要介紹了Vue.js 實(shí)現(xiàn)地址管理頁(yè)面的思路(地址添加、編輯、刪除和設(shè)置默認(rèn)地址),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • vue組件三大核心概念圖文詳解

    vue組件三大核心概念圖文詳解

    本文主要介紹屬性、事件和插槽這三個(gè)vue基礎(chǔ)概念、使用方法及其容易被忽略的一些重要細(xì)節(jié),感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • Vue+ElementUI容器無(wú)法鋪滿網(wǎng)頁(yè)的問(wèn)題解決

    Vue+ElementUI容器無(wú)法鋪滿網(wǎng)頁(yè)的問(wèn)題解決

    這篇文章主要介紹了Vue+ElementUI容器無(wú)法鋪滿網(wǎng)頁(yè)的問(wèn)題解決,文章通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • Vue?h函數(shù)的使用詳解

    Vue?h函數(shù)的使用詳解

    本文主要介紹了Vue?h函數(shù)的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vue-cli 打包后提交到線上出現(xiàn)

    vue-cli 打包后提交到線上出現(xiàn) "Uncaught SyntaxError:Unexpected token" 報(bào)

    這篇文章主要介紹了vue-cli 打包后提交到線上出現(xiàn) "Uncaught SyntaxError:Unexpected token" 報(bào)錯(cuò),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論

东山县| 乐都县| 克拉玛依市| 桦川县| 宜宾县| 维西| 夏河县| 富阳市| 乌兰察布市| 云梦县| 高台县| 历史| 津南区| 嘉义市| 定边县| 临湘市| 白玉县| 贵州省| 江口县| 兴义市| 东山县| 大厂| 大邑县| 炎陵县| 邵阳县| 玉龙| 珠海市| 蛟河市| 四川省| 盖州市| 平昌县| 淮阳县| 慈溪市| 日喀则市| 华宁县| 新巴尔虎左旗| 杭锦旗| 张家界市| 台北市| 牙克石市| 宝兴县|