| 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
 | | <template> |  |     <view class="u-grid-item" :hover-class="parentData.hoverClass" |  |      :hover-stay-time="200" @tap="click" :style="{ |  |             background: bgColor, |  |             width: width, |  |         }"> |  |         <view class="u-grid-item-box" :style="[customStyle]" :class="[parentData.border ? 'u-border-right u-border-bottom' : '']"> |  |             <slot /> |  |         </view> |  |     </view> |  | </template> |  |   |  | <script> |  |     /** |  |      * gridItem 提示 |  |      * @description 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。搭配u-grid使用 |  |      * @tutorial https://www.uviewui.com/components/grid.html |  |      * @property {String} bg-color 宫格的背景颜色(默认#ffffff) |  |      * @property {String Number} index 点击宫格时,返回的值 |  |      * @property {Object} custom-style 自定义样式,对象形式 |  |      * @event {Function} click 点击宫格触发 |  |      * @example <u-grid-item></u-grid-item> |  |      */ |  |     export default { |  |         name: "u-grid-item", |  |         props: { |  |             // 背景颜色 |  |             bgColor: { |  |                 type: String, |  |                 default: '#ffffff' |  |             }, |  |             // 点击时返回的index |  |             index: { |  |                 type: [Number, String], |  |                 default: '' |  |             }, |  |             // 自定义样式,对象形式 |  |             customStyle: { |  |                 type: Object, |  |                 default() { |  |                     return { |  |                         padding: '30rpx 0' |  |                     } |  |                 } |  |             } |  |         }, |  |         data() { |  |             return { |  |                 parentData: { |  |                     hoverClass: '', // 按下去的时候,是否显示背景灰色 |  |                     col: 3, // 父组件划分的宫格数 |  |                     border: true, // 是否显示边框,根据父组件决定 |  |                 } |  |             }; |  |         }, |  |         created() { |  |             // 父组件的实例 |  |             this.updateParentData(); |  |             // this.parent在updateParentData()中定义 |  |             this.parent.children.push(this); |  |         }, |  |         computed: { |  |             // 每个grid-item的宽度 |  |             width() { |  |                 return 100 / Number(this.parentData.col) + '%'; |  |             }, |  |         }, |  |         methods: { |  |             // 获取父组件的参数 |  |             updateParentData() { |  |                 // 此方法写在mixin中 |  |                 this.getParentData('u-grid'); |  |             }, |  |             click() { |  |                 this.$emit('click', this.index); |  |                 this.parent && this.parent.click(this.index); |  |             } |  |         } |  |     }; |  | </script> |  |   |  | <style scoped lang="scss"> |  |     @import "../../libs/css/style.components.scss"; |  |      |  |     .u-grid-item { |  |         box-sizing: border-box; |  |         background: #fff; |  |         @include vue-flex; |  |         align-items: center; |  |         justify-content: center; |  |         position: relative; |  |         flex-direction: column; |  |          |  |         /* #ifdef MP */ |  |         position: relative; |  |         float: left; |  |         /* #endif */ |  |     } |  |   |  |     .u-grid-item-hover { |  |         background: #f7f7f7 !important; |  |     } |  |   |  |     .u-grid-marker-box { |  |         position: absolute; |  |         /* #ifndef APP-NVUE */ |  |         display: inline-flex;         |  |         /* #endif */ |  |         line-height: 0; |  |     } |  |   |  |     .u-grid-marker-wrap { |  |         position: absolute; |  |     } |  |   |  |     .u-grid-item-box { |  |         padding: 30rpx 0; |  |         @include vue-flex; |  |         align-items: center; |  |         justify-content: center; |  |         flex-direction: column; |  |         flex: 1; |  |         width: 100%; |  |         height: 100%; |  |     } |  | </style> | 
 |