| | |
| | | <template> |
| | | <div class="tree"> |
| | | <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)"> |
| | | <div class="tree_item"> |
| | | <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.actived === 1 }" v-show="item.fsStatus === 1 && item.childList.length > 0"></i> |
| | | <i class="el-icon-caret-right color" v-show="item.childList.length > 0 && (item.fsStatus === 0 || !item.fsStatus)"></i> |
| | | <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor': item.actived === 1 }">{{ item.name }}</div> |
| | | </div> |
| | | <div class="tree_childern" v-show="item.fsStatus === 1"> |
| | | <tree |
| | | :list="item.childList" |
| | | :alllist="alllist" |
| | | :defaultProps="defaultProps" |
| | | @callback="callback" |
| | | /> |
| | | <!-- @callback="callback" --> |
| | | </div> |
| | | </div> |
| | | <div class="tree"> |
| | | <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)"> |
| | | <div class="tree_item"> |
| | | <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.fsStatus === 1 }" v-show="item.fsStatus === 1 && item.childList && item.childList.length > 0"></i> |
| | | <i class="el-icon-caret-right color" v-show="item.childList && item.childList.length > 0 && (item.fsStatus === 0 || !item.fsStatus)"></i> |
| | | <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor': item.fsDate === 1 && item.childList && item.childList.length === 0 }">{{ item.name }}</div> |
| | | <!-- <i class="el-icon-caret-bottom" :class="{ 'activeColor': item[defaultProps.status] }" v-show="item[defaultProps.status] && item[defaultProps.children]"></i>--> |
| | | <!-- <i class="el-icon-caret-right color" v-show="item[defaultProps.children] && !item[defaultProps.status]"></i>--> |
| | | <!-- <div class="tree_item_label long-title-style" :title="item[defaultProps.name]" :class="{ 'activeColor': item[defaultProps.status] && !item[defaultProps.children] }">{{ item[defaultProps.name] }}</div>--> |
| | | </div> |
| | | <div class="tree_childern" v-show="item.fsStatus === 1"> |
| | | <tree |
| | | :list="item.childList" |
| | | :defaultProps="defaultProps" |
| | | @callback="callback" |
| | | /> |
| | | <!-- @callback="callback" --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | name: 'tree', |
| | | props: { |
| | | list: { |
| | | type: Array, |
| | | required: false, |
| | | default: () => [] |
| | | }, |
| | | alllist: { |
| | | type: Array, |
| | | required: false, |
| | | default: () => [] |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | listForList(){ |
| | | // console.log('===============================',this.alllist) |
| | | }, |
| | | // 点击当前项 |
| | | clickIten (item) { |
| | | // this.listForList() |
| | | // item[this.defaultProps.status] = !item[this.defaultProps.status] |
| | | // this.list.forEach(subItem => { |
| | | // if ((subItem[this.defaultProps.id] !== item[this.defaultProps.id] && subItem[this.defaultProps.status]) || (this.list.length === 1 && subItem[this.defaultProps.status] === false)) { |
| | | // subItem[this.defaultProps.status] = false |
| | | // if (subItem[this.defaultProps.children]) { |
| | | // this.recursion(subItem[this.defaultProps.children]) |
| | | // } |
| | | // } |
| | | // }) |
| | | // if (this.tempItem['id'] === item[this.defaultProps.id]) { |
| | | // this.tempItem = { |
| | | // id: null, |
| | | // name: null, |
| | | // erpId: null |
| | | // } |
| | | // } else { |
| | | // this.tempItem.id = item[this.defaultProps.id] |
| | | // this.tempItem.name = item[this.defaultProps.name] |
| | | // this.tempItem.erpId = item['erpId'] |
| | | // } |
| | | // item.fsDate === 0 || !item.fsDate ? item.fsDate = 1 : item.fsDate = 0 |
| | | const fsDate = item.fsDate === 0 || !item.fsDate ? 1 : 0 |
| | | this.alllist.forEach(i => { |
| | | this.list.forEach(i => { |
| | | i.fsDate = 0 |
| | | i.actived = 0 |
| | | this.recursion1(i.childList) |
| | | }) |
| | | item.fsDate = fsDate |
| | | item.actived = 1 |
| | | if (item.childList.length > 0) { |
| | | item.fsStatus === 0 || !item.fsStatus ? item.fsStatus = 1 : item.fsStatus = 0 |
| | | } |
| | | this.$emit('callback', item, item) |
| | | }, |
| | | recursion1 (children) { |
| | | if (!children || children.length === 0){ |
| | | return |
| | | } |
| | | // 递归方法 |
| | | recursion (children) { |
| | | children.forEach(item => { |
| | | item.actived = 0 |
| | | if (item.childList && item.childList.length > 0) { |
| | | this.recursion1(item.childList) |
| | | item.fsDate = 0 |
| | | if (item.childList.length > 0) { |
| | | this.recursion(item.childList) |
| | | } |
| | | // item[this.defaultProps.status] = false |
| | | // if (item[this.defaultProps.children]) { |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .tree { |
| | | /*width: 100%;*/ |
| | | /*height: auto;*/ |
| | | /*border-radius: 5px;*/ |
| | | /*overflow: hidden;*/ |
| | | /*border: 1px solid #eeeeee;*/ |
| | | /*box-sizing: border-box;*/ |
| | | .tree_childern { |
| | | margin-left: 20px; |
| | | /*width: 100%;*/ |
| | | /*height: auto;*/ |
| | | /*border-radius: 5px;*/ |
| | | /*overflow: hidden;*/ |
| | | /*border: 1px solid #eeeeee;*/ |
| | | /*box-sizing: border-box;*/ |
| | | .tree_childern { |
| | | margin-left: 20px; |
| | | } |
| | | .activeItem { |
| | | background: #F4F7FC; |
| | | } |
| | | .tree_item { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 48px; |
| | | cursor: pointer; |
| | | padding-left: 10px; |
| | | .tree_item_label { |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | white-space: nowrap; |
| | | } |
| | | .activeItem { |
| | | background: #F4F7FC; |
| | | i { |
| | | margin-right: 5px; |
| | | } |
| | | .tree_item { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 48px; |
| | | cursor: pointer; |
| | | padding-left: 10px; |
| | | .tree_item_label { |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | white-space: nowrap; |
| | | } |
| | | i { |
| | | margin-right: 5px; |
| | | } |
| | | .color { |
| | | color: #999999 !important; |
| | | } |
| | | .activeColor { |
| | | color: #305ED5 !important; |
| | | } |
| | | .color { |
| | | color: #999999 !important; |
| | | } |
| | | .activeColor { |
| | | color: #305ED5 !important; |
| | | } |
| | | } |
| | | } |
| | | </style> |