1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  | <template> 
 |    <view class="tn-collapse-class tn-collapse"> 
 |      <slot></slot> 
 |    </view> 
 |  </template> 
 |    
 |  <script> 
 |    export default { 
 |      name: 'tn-collapse', 
 |      props: { 
 |        // 是否为手风琴 
 |        accordion: { 
 |          type: Boolean, 
 |          default: true 
 |        }, 
 |        // 头部样式 
 |        headStyle: { 
 |          type: Object, 
 |          default() { 
 |            return {} 
 |          } 
 |        }, 
 |        // 主题样式 
 |        bodyStyle: { 
 |          type: Object, 
 |          default() { 
 |            return {} 
 |          } 
 |        }, 
 |        // 每一个item的样式 
 |        itemStyle: { 
 |          type: Object, 
 |          default() { 
 |            return {} 
 |          } 
 |        }, 
 |        // 显示箭头 
 |        arrow: { 
 |          type: Boolean, 
 |          default: true 
 |        }, 
 |        // 箭头颜色 
 |        arrowColor: { 
 |          type: String, 
 |          default: '#AAAAAA' 
 |        }, 
 |        // 点击标题栏时的按压样式 
 |        hoverClass: { 
 |          type: String, 
 |          default: 'tn-hover' 
 |        } 
 |      }, 
 |      computed: { 
 |        parentData() { 
 |          return [this.headStyle, this.bodyStyle, this.itemStyle, this.arrow, this.arrowColor, this.hoverClass] 
 |        } 
 |      }, 
 |      data() { 
 |        return { 
 |           
 |        } 
 |      }, 
 |      watch: { 
 |        parentData() { 
 |          // 如果父组件的参数发生变化重新初始化子组件的信息 
 |          if (this.childrens.length > 0) { 
 |            this.init() 
 |          } 
 |        } 
 |      }, 
 |      created() { 
 |        this.childrens = [] 
 |      }, 
 |      methods: { 
 |        // 重新初始化内部所有子元素计算高度,异步获取数据时重新渲染 
 |        init() { 
 |          this.childrens.forEach((child, index) => { 
 |            child.init() 
 |          }) 
 |        }, 
 |        // collapseItem被点击时由collapseItem调用父组件 
 |        onChange() { 
 |          let activeItem = [] 
 |          this.childrens.forEach((child, index) => { 
 |            if (child.isShow) { 
 |              activeItem.push(child.nameSync) 
 |            } 
 |          }) 
 |          // 如果时手风琴模式,只有一个匹配结果,即activeItem长度为1 
 |          if (this.accordion) activeItem = activeItem.join(',') 
 |          this.$emit('change', activeItem) 
 |        } 
 |      } 
 |    } 
 |  </script> 
 |    
 |  <style lang="scss" scoped> 
 |  </style> 
 |  
  |