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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
  | <template> 
 |      <view class="uni-group" :class="['uni-group--'+mode ,margin?'group-margin':'']" :style="{marginTop: `${top}px` }"> 
 |          <slot name="title"> 
 |              <view v-if="title" class="uni-group__title" :style="{'padding-left':border?'30px':'15px'}"> 
 |                  <text class="uni-group__title-text">{{ title }}</text> 
 |              </view> 
 |          </slot> 
 |          <view class="uni-group__content" :class="{'group-conent-padding':border}"> 
 |              <slot /> 
 |          </view> 
 |      </view> 
 |  </template> 
 |    
 |  <script> 
 |      /** 
 |       * Group 分组 
 |       * @description 表单字段分组 
 |       * @tutorial https://ext.dcloud.net.cn/plugin?id=3281 
 |       * @property {String} title 主标题 
 |       * @property {Number} top 分组间隔 
 |       * @property {Number} mode 模式 
 |       */ 
 |      export default { 
 |          name: 'uniGroup', 
 |          emits:['click'], 
 |          props: { 
 |              title: { 
 |                  type: String, 
 |                  default: '' 
 |              }, 
 |              top: { 
 |                  type: [Number, String], 
 |                  default: 10 
 |              }, 
 |              mode: { 
 |                  type: String, 
 |                  default: 'default' 
 |              }, 
 |              stat:{ 
 |                  type: Boolean, 
 |                  default: false 
 |              } 
 |          }, 
 |          data() { 
 |              return { 
 |                  margin: false, 
 |                  border: false 
 |              } 
 |          }, 
 |          watch: { 
 |              title(newVal) { 
 |                  if (uni.report && this.stat && newVal !== '') { 
 |                      uni.report('title', newVal) 
 |                  } 
 |              } 
 |          }, 
 |          created() { 
 |              this.form = this.getForm() 
 |              if (this.form) { 
 |                  this.margin = true 
 |                  this.border = this.form.border 
 |              } 
 |          }, 
 |          methods: { 
 |              /** 
 |               * 获取父元素实例 
 |               */ 
 |              getForm() { 
 |                  let parent = this.$parent; 
 |                  let parentName = parent.$options.name; 
 |                  while (parentName !== 'uniForms') { 
 |                      parent = parent.$parent; 
 |                      if (!parent) return false 
 |                      parentName = parent.$options.name; 
 |                  } 
 |                  return parent; 
 |              }, 
 |              onClick() { 
 |                  this.$emit('click') 
 |              } 
 |          } 
 |      } 
 |  </script> 
 |  <style lang="scss" > 
 |      .uni-group { 
 |          background: #fff; 
 |          margin-top: 10px; 
 |          // border: 1px red solid; 
 |      } 
 |    
 |      .group-margin { 
 |          // margin: 0 -15px; 
 |      } 
 |    
 |      .uni-group__title { 
 |          /* #ifndef APP-NVUE */ 
 |          display: flex; 
 |          /* #endif */ 
 |          flex-direction: row; 
 |          align-items: center; 
 |          padding-left: 15px; 
 |          height: 40px; 
 |          background-color: #eee; 
 |          font-weight: normal; 
 |          color: #666; 
 |      } 
 |    
 |      .uni-group__content { 
 |          padding: 15px; 
 |          // padding-bottom: 5px; 
 |          // background-color: #FFF; 
 |      } 
 |    
 |      .group-conent-padding { 
 |          padding: 0 15px; 
 |      } 
 |    
 |      .uni-group__title-text { 
 |          font-size: 14px; 
 |          color: #666; 
 |      } 
 |    
 |      .distraction { 
 |          flex-direction: row; 
 |          align-items: center; 
 |      } 
 |    
 |      .uni-group--card { 
 |          margin: 10px; 
 |          border-radius: 5px; 
 |          overflow: hidden; 
 |          box-shadow: 0 0 5px 1px rgba($color: #000000, $alpha: 0.08); 
 |      } 
 |  </style> 
 |  
  |