123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <template>
- <view>
- <view v-for="(tree,index) in treesIN" :key="index">
- <view class="grace-tree" :data-havsons="tree.children" :data-treeindexs="indexesIn" :data-index="index" :data-treelevel="level"
- :style="{paddingLeft:(indent*level)+'rpx'}" @tap.stop="taped" :data-cancheck="(allCanCheck || !tree.children)">
- <view class="grace-tree-icons" v-if="type == 'text' && isIcon" style="width:22rpx;">
- <text class="grace-tree-icons-text grace-icons icon-line" v-if="tree.children"></text>
- </view>
- <view class="grace-tree-icons" v-if="type == 'radio' && (allCanCheck || !tree.children)">
- <text class="grace-tree-icons-text grace-icons icon-radio-ckd" :style="{color:checkedColor, fontSize:iconSize}" v-if="tree.id == checkedId"></text>
- <text class="grace-tree-icons-text grace-icons icon-radio" :style="{fontSize:iconSize}" v-else></text>
- </view>
- <view class="grace-tree-icons" v-if="type == 'checkbox' && (allCanCheck || !tree.children)">
- <text class="grace-tree-icons-text grace-icons icon-checkbox-ckd" :style="{color:checkedColor, fontSize:iconSize}" v-if="isChecked(tree.id)"></text>
- <text class="grace-tree-icons-text grace-icons icon-checkbox" :style="{fontSize:iconSize}" v-else></text>
- </view>
- <text class="grace-tree-label" :style="{lineHeight:lineHeight,fontSize:fontSize, color:fontColor}">{{tree.label}}-{{fold}}</text>
- </view>
- <view>
- <graceTree v-if="!fold"
- :trees="tree.children" :indent="indent" :level="level+1" :lineHeight="lineHeight" :allCanCheck="allCanCheck" :iconSize="iconSize"
- :fontSize="fontSize" :fontColor="fontColor" :isIcon="isIcon" :checkedId="checkedId" :checkedIds="checkedIds"
- :type="type" :indexes="[indexesIn,index]" @taped="tapbase"></graceTree>
- </view>
- </view>
- </view>
- </template>
- <script>
- export default{
- name:"graceTree",
- props:{
- trees : {type:Array, default:function () {return [];}},
- indent : {type:Number, default:28},
- level : {type:Number, default:0},
- lineHeight : {type:String, default:'80rpx'},
- fontSize : {type:String, default:'28rpx'},
- fontColor : {type:String, default:'#323232'},
- type : {type:String, default:'text'},
- isIcon : {type:Boolean, default:true},
- iconSize:{type:String, default:'30rpx'},
- indexes : {type:Array, default:function () {return ['',0];}},
- checkedId : {type:[String, Number], default:'-1'},
- checkedIds : {type:Array, default:function () {return [];}},
- checkedColor:{type:String, default:'#3688FF'},
- allCanCheck: {type:Boolean, default:true},
- isFold : {type:Boolean, default:true}
- },
- data() {
- return {
- treesIN:[],
- indexesIn : [],
- fold:false
- }
- },
- created:function(){
- this.treesIN = this.trees;
- if(this.indexes[0] != ''){
- var indexes = this.indexes[0].split(',');
- }else{
- var indexes = [];
- }
- indexes.push(this.indexes[1]);
- this.indexesIn = indexes.join(',');
- },
- methods:{
- taped : function(e){
- var havsons = e.currentTarget.dataset.havsons;
- var treeindexs = e.currentTarget.dataset.treeindexs;
- treeindexs = treeindexs.split(',');
- var index = e.currentTarget.dataset.index;
- treeindexs.push(index);
- treeindexs.shift();
- if(this.type == 'text'){
- if(this.isFold){
- if(havsons){this.fold = !this.fold; return;}
- }
- this.tapbase(treeindexs);
- }else{
- var cancheck = e.currentTarget.dataset.cancheck;
- if(cancheck){this.tapbase(treeindexs);}
- }
-
- },
- tapbase : function(e){
- this.$emit('taped', e);
- },
- setTrees : function (trees) {
- this.treesIN = trees;
- },
- isChecked : function(checkedId){
- for(let i = 0; i < this.checkedIds.length; i++){
- if(this.checkedIds[i] == checkedId){
- return true;
- }
- }
- return false;
- },
- foldIt : function(){
- console.log(1);
- this.fold = !this.fold;
- }
- }
- }
- </script>
- <style>
- .grace-tree{display:flex; flex-direction:row; flex-wrap:nowrap; align-items:center;}
- .grace-tree-label{display:block;}
- .grace-tree-icons{padding-right:16rpx;}
- .grace-tree-icons-text{font-size:22rpx; color:#828282;}
- </style>
|