@10yun/cv-mobile-ui 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/package.json +1 -1
  2. package/ui-uni/amap-wx/js/util.js +166 -158
  3. package/ui-uni/page-foot/page-foot.vue +38 -0
  4. package/ui-uni/page-head/page-head.vue +16 -0
  5. package/ui-uni/product.vue +52 -52
  6. package/ui-uni/u-charts/u-charts.js +743 -1092
  7. package/ui-uni/u-link/u-link.vue +59 -0
  8. package/ui-uni/uni-badge/uni-badge.vue +250 -0
  9. package/ui-uni/uni-calendar/calendar.js +546 -0
  10. package/ui-uni/uni-calendar/uni-calendar-item.vue +171 -0
  11. package/ui-uni/uni-calendar/uni-calendar.vue +504 -0
  12. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  13. package/ui-uni/uni-card/uni-card.vue +420 -0
  14. package/ui-uni/uni-col/uni-col.vue +2968 -0
  15. package/ui-uni/uni-collapse/uni-collapse.vue +146 -0
  16. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +378 -0
  17. package/ui-uni/uni-combox/uni-combox.vue +237 -0
  18. package/ui-uni/uni-countdown/uni-countdown.vue +234 -0
  19. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +792 -0
  20. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  21. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +142 -0
  22. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +364 -0
  23. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  24. package/ui-uni/uni-data-picker/uni-data-picker.vue +468 -0
  25. package/{ui-cv/cv-data-pickerview/cv-data-picker.js → ui-uni/uni-data-pickerview/uni-data-picker.js} +0 -0
  26. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +298 -0
  27. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  28. package/ui-uni/uni-dateformat/uni-dateformat.vue +88 -0
  29. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar-item.vue +0 -0
  30. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.js +0 -0
  31. package/ui-uni/uni-datetime-picker/calendar.vue +747 -0
  32. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  33. package/ui-uni/uni-datetime-picker/time-picker.vue +899 -0
  34. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +874 -0
  35. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/util.js +0 -0
  36. package/ui-uni/uni-drawer/keypress.js +45 -0
  37. package/ui-uni/uni-drawer/uni-drawer.vue +178 -0
  38. package/{ui-cv/cv-easyinput → ui-uni/uni-easyinput}/common.js +0 -0
  39. package/ui-uni/uni-easyinput/uni-easyinput.vue +438 -0
  40. package/ui-uni/uni-fab/uni-fab.vue +443 -0
  41. package/{ui-cv/cv-fab/cv-fab.vue.bak → ui-uni/uni-fab/uni-fab.vue.bak} +2 -2
  42. package/ui-uni/uni-fav/uni-fav.vue +136 -0
  43. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  44. package/ui-uni/uni-file-picker/uni-file-picker.vue +614 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-file.vue +0 -0
  46. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-image.vue +0 -0
  47. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/utils.js +0 -0
  48. package/ui-uni/uni-forms/uni-forms.vue +467 -0
  49. package/ui-uni/uni-forms/validate.js +486 -0
  50. package/ui-uni/uni-forms-item/uni-forms-item.vue +500 -0
  51. package/{ui-cv/cv-goods-nav/cv-goods-nav.vue → ui-uni/uni-goods-nav/uni-goods-nav.vue} +1 -1
  52. package/ui-uni/uni-grid/uni-grid.vue +141 -0
  53. package/ui-uni/uni-grid-item/uni-grid-item.vue +123 -0
  54. package/ui-uni/uni-group/uni-group.vue +123 -0
  55. package/ui-uni/uni-icons/icons.js +132 -0
  56. package/ui-uni/uni-icons/uni-icons.vue +72 -0
  57. package/{ui-cv/cv-icon2 → ui-uni/uni-icons}/uni.ttf +0 -0
  58. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +142 -0
  59. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +357 -0
  60. package/ui-uni/uni-link/uni-link.vue +117 -0
  61. package/ui-uni/uni-list/uni-list.vue +107 -0
  62. package/ui-uni/uni-list/uni-refresh.vue +65 -0
  63. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  64. package/ui-uni/uni-list-ad/uni-list-ad.vue +106 -0
  65. package/{ui-cv/cv-list-chat/cv-list-chat.scss → ui-uni/uni-list-chat/uni-list-chat.scss} +0 -0
  66. package/{ui-cv/cv-list-chat/cv-list-chat.vue → ui-uni/uni-list-chat/uni-list-chat.vue} +0 -0
  67. package/ui-uni/uni-list-item/uni-list-item.vue +428 -0
  68. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  69. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +244 -0
  70. package/{ui-cv/cv-nav-bar/cv-status-bar.vue → ui-uni/uni-nav-bar/uni-status-bar.vue} +0 -0
  71. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +394 -0
  72. package/ui-uni/uni-number-box/uni-number-box.vue +224 -0
  73. package/ui-uni/uni-pagination/uni-pagination.vue +376 -0
  74. package/{ui-cv/cv-popup → ui-uni/uni-popup}/keypress.js +0 -0
  75. package/{ui-cv/cv-popup → ui-uni/uni-popup}/popup.js +0 -0
  76. package/ui-uni/uni-popup/uni-popup.vue +412 -0
  77. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  78. package/{ui-cv/cv-popup-dialog/cv-popup-dialog.vue → ui-uni/uni-popup-dialog/uni-popup-dialog.vue} +0 -0
  79. package/ui-uni/uni-popup-message/uni-popup-message.vue +143 -0
  80. package/{ui-cv/cv-popup-share/cv-popup-share.vue → ui-uni/uni-popup-share/uni-popup-share.vue} +0 -0
  81. package/ui-uni/uni-rate/uni-rate.vue +357 -0
  82. package/ui-uni/uni-row/uni-row.vue +155 -0
  83. package/ui-uni/uni-search-bar/uni-search-bar.vue +262 -0
  84. package/{ui-cv/cv-section/cv-section.vue → ui-uni/uni-section/uni-section.vue} +0 -0
  85. package/{ui-cv/cv-segmented-control/cv-segmented-control.vue → ui-uni/uni-segmented-control/uni-segmented-control.vue} +0 -0
  86. package/{ui-cv/cv-status-bar/cv-status-bar.vue → ui-uni/uni-status-bar/uni-status-bar.vue} +0 -0
  87. package/ui-uni/uni-steps/uni-steps.vue +250 -0
  88. package/{ui-cv/cv-swipe-action/cv-swipe-action.vue → ui-uni/uni-swipe-action/uni-swipe-action.vue} +0 -0
  89. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/bindingx.js +0 -0
  90. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/index.wxs +0 -0
  91. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/isPC.js +0 -0
  92. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpalipay.js +0 -0
  93. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpother.js +0 -0
  94. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpwxs.js +0 -0
  95. package/{ui-cv/cv-swipe-action-item/cv-swipe-action-item.vue → ui-uni/uni-swipe-action-item/uni-swipe-action-item.vue} +0 -0
  96. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +205 -0
  97. package/ui-uni/uni-table/uni-table.vue +455 -0
  98. package/ui-uni/uni-tag/uni-tag.vue +283 -0
  99. package/ui-uni/uni-tbody/uni-tbody.vue +30 -0
  100. package/ui-uni/uni-td/uni-td.vue +88 -0
  101. package/{ui-cv/cv-test/cv-test.vue → ui-uni/uni-test/uni-test.vue} +0 -0
  102. package/{ui-cv/cv-th → ui-uni/uni-th}/filter-dropdown.vue +0 -0
  103. package/ui-uni/uni-th/uni-th.vue +259 -0
  104. package/ui-uni/uni-thead/uni-thead.vue +114 -0
  105. package/ui-uni/uni-title/uni-title.vue +171 -0
  106. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  107. package/ui-uni/uni-tr/uni-tr.vue +156 -0
  108. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  109. package/ui-uni/uni-transition/uni-transition.vue +287 -0
  110. package/ui-cv/cv-badge/cv-badge.vue +0 -249
  111. package/ui-cv/cv-calendar/calendar.js +0 -963
  112. package/ui-cv/cv-calendar/cv-calendar-item.vue +0 -198
  113. package/ui-cv/cv-calendar/cv-calendar.vue +0 -508
  114. package/ui-cv/cv-card/cv-card.vue +0 -427
  115. package/ui-cv/cv-col/cv-col.vue +0 -2965
  116. package/ui-cv/cv-collapse/cv-collapse.vue +0 -146
  117. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +0 -395
  118. package/ui-cv/cv-combox/cv-combox.vue +0 -250
  119. package/ui-cv/cv-countdown/cv-countdown.vue +0 -245
  120. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +0 -841
  121. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +0 -154
  122. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +0 -376
  123. package/ui-cv/cv-data-picker/cv-data-picker.vue +0 -486
  124. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +0 -304
  125. package/ui-cv/cv-dateformat/cv-dateformat.vue +0 -86
  126. package/ui-cv/cv-datetime-picker/calendar.vue +0 -761
  127. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +0 -958
  128. package/ui-cv/cv-datetime-picker/time-picker.vue +0 -907
  129. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  130. package/ui-cv/cv-drawer/keypress.js +0 -45
  131. package/ui-cv/cv-easyinput/cv-easyinput.vue +0 -514
  132. package/ui-cv/cv-fab/cv-fab.vue +0 -465
  133. package/ui-cv/cv-fav/cv-fav.vue +0 -150
  134. package/ui-cv/cv-file-picker/cv-file-picker.vue +0 -619
  135. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  136. package/ui-cv/cv-form-base/validate.js +0 -477
  137. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  138. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  139. package/ui-cv/cv-icon2/cv-icon2.vue +0 -78
  140. package/ui-cv/cv-icon2/icons.js +0 -132
  141. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +0 -154
  142. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +0 -371
  143. package/ui-cv/cv-link2/cv-link2.vue +0 -130
  144. package/ui-cv/cv-list/cv-list.vue +0 -107
  145. package/ui-cv/cv-list/cv-refresh.vue +0 -65
  146. package/ui-cv/cv-list-ad/cv-list-ad.vue +0 -113
  147. package/ui-cv/cv-list-item/cv-list-item.vue +0 -449
  148. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +0 -256
  149. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +0 -453
  150. package/ui-cv/cv-number-box/cv-number-box.vue +0 -223
  151. package/ui-cv/cv-pagination/cv-pagination.vue +0 -397
  152. package/ui-cv/cv-popup/cv-popup.vue +0 -429
  153. package/ui-cv/cv-popup-message/cv-popup-message.vue +0 -143
  154. package/ui-cv/cv-row/cv-row.vue +0 -157
  155. package/ui-cv/cv-search-bar/cv-search-bar.vue +0 -280
  156. package/ui-cv/cv-steps/cv-steps.vue +0 -293
  157. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +0 -255
  158. package/ui-cv/cv-table/cv-table.vue +0 -460
  159. package/ui-cv/cv-tag/cv-tag.vue +0 -276
  160. package/ui-cv/cv-tbody/cv-tbody.vue +0 -28
  161. package/ui-cv/cv-td/cv-td.vue +0 -93
  162. package/ui-cv/cv-th/cv-th.vue +0 -270
  163. package/ui-cv/cv-thead/cv-thead.vue +0 -114
  164. package/ui-cv/cv-title/cv-title.vue +0 -168
  165. package/ui-cv/cv-tr/cv-tr.vue +0 -166
  166. package/ui-cv/cv-transition/cv-transition.vue +0 -279
@@ -0,0 +1,500 @@
1
+ <template>
2
+ <view class="uni-forms-item" :class="{ 'uni-forms-item--border': border, 'is-first-border': border && isFirstBorder, 'uni-forms-item-error': msg }">
3
+ <view class="uni-forms-item__box">
4
+ <view class="uni-forms-item__inner" :class="['is-direction-' + labelPos]">
5
+ <view class="uni-forms-item__label" :style="{ width: labelWid , justifyContent: justifyContent }">
6
+ <slot name="left">
7
+ <uni-icons v-if="leftIcon" class="label-icon" size="16" :type="leftIcon" :color="iconColor" />
8
+ <text class="label-text">{{ label }}</text>
9
+ <text v-if="required" class="is-required">*</text>
10
+ <view v-if="label" class="label-seat"></view>
11
+ </slot>
12
+ </view>
13
+ <view class="uni-forms-item__content" :class="{ 'is-input-error-border': msg }">
14
+ <slot></slot>
15
+ </view>
16
+ </view>
17
+ <view v-if="msg" class="uni-error-message" :class="{ 'uni-error-msg--boeder': border }" :style="{
18
+ paddingLeft: labelLeft
19
+ }">
20
+ <text class="uni-error-message-text">{{ showMsg === 'undertext' ? msg : '' }}</text>
21
+ </view>
22
+ </view>
23
+ </view>
24
+ </template>
25
+
26
+ <script>
27
+ /**
28
+ * Field 输入框
29
+ * @description 此组件可以实现表单的输入与校验,包括 "text" 和 "textarea" 类型。
30
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=21001
31
+ * @property {Boolean} required 是否必填,左边显示红色"*"号(默认false)
32
+ * @property {String} validateTrigger = [bind|submit] 校验触发器方式 默认 submit 可选
33
+ * @value bind 发生变化时触发
34
+ * @value submit 提交时触发
35
+ * @property {String } leftIcon label左边的图标,限 uni-ui 的图标名称
36
+ * @property {String } iconColor 左边通过icon配置的图标的颜色(默认#606266)
37
+ * @property {String } label 输入框左边的文字提示
38
+ * @property {Number } labelWidth label的宽度,单位px(默认65)
39
+ * @property {String } labelAlign = [left|center|right] label的文字对齐方式(默认left)
40
+ * @value left label 左侧显示
41
+ * @value center label 居中
42
+ * @value right label 右侧对齐
43
+ * @property {String } labelPosition = [top|left] label的文字的位置(默认left)
44
+ * @value top 顶部显示 label
45
+ * @value left 左侧显示 label
46
+ * @property {String } errorMessage 显示的错误提示内容,如果为空字符串或者false,则不显示错误信息
47
+ * @property {String } name 表单域的属性名,在使用校验规则时必填
48
+ */
49
+
50
+ export default {
51
+ name: 'uniFormsItem',
52
+ props: {
53
+ // 自定义内容
54
+ custom: {
55
+ type: Boolean,
56
+ default: false
57
+ },
58
+ // 是否显示报错信息
59
+ showMessage: {
60
+ type: Boolean,
61
+ default: true
62
+ },
63
+ name: String,
64
+ required: Boolean,
65
+ validateTrigger: {
66
+ type: String,
67
+ default: ''
68
+ },
69
+ leftIcon: String,
70
+ iconColor: {
71
+ type: String,
72
+ default: '#606266'
73
+ },
74
+ label: String,
75
+ // 左边标题的宽度单位px
76
+ labelWidth: {
77
+ type: [Number, String],
78
+ default: ''
79
+ },
80
+ // 对齐方式,left|center|right
81
+ labelAlign: {
82
+ type: String,
83
+ default: ''
84
+ },
85
+ // lable的位置,可选为 left-左边,top-上边
86
+ labelPosition: {
87
+ type: String,
88
+ default: ''
89
+ },
90
+ errorMessage: {
91
+ type: [String, Boolean],
92
+ default: ''
93
+ },
94
+ // 表单校验规则
95
+ rules: {
96
+ type: Array,
97
+ default () {
98
+ return [];
99
+ }
100
+ }
101
+ },
102
+ data() {
103
+ return {
104
+ errorTop: false,
105
+ errorBottom: false,
106
+ labelMarginBottom: '',
107
+ errorWidth: '',
108
+ errMsg: '',
109
+ val: '',
110
+ labelPos: '',
111
+ labelWid: '',
112
+ labelAli: '',
113
+ showMsg: 'undertext',
114
+ border: false,
115
+ isFirstBorder: false,
116
+ isArray: false,
117
+ arrayField: ''
118
+ };
119
+ },
120
+ computed: {
121
+ msg() {
122
+ return this.errorMessage || this.errMsg;
123
+ },
124
+ fieldStyle() {
125
+ let style = {};
126
+ if (this.labelPos == 'top') {
127
+ style.padding = '0 0';
128
+ this.labelMarginBottom = '6px';
129
+ }
130
+ if (this.labelPos == 'left' && this.msg !== false && this.msg != '') {
131
+ style.paddingBottom = '0px';
132
+ this.errorBottom = true;
133
+ this.errorTop = false;
134
+ } else if (this.labelPos == 'top' && this.msg !== false && this.msg != '') {
135
+ this.errorBottom = false;
136
+ this.errorTop = true;
137
+ } else {
138
+ // style.paddingBottom = ''
139
+ this.errorTop = false;
140
+ this.errorBottom = false;
141
+ }
142
+ return style;
143
+ },
144
+
145
+ // uni不支持在computed中写style.justifyContent = 'center'的形式,故用此方法
146
+ justifyContent() {
147
+ if (this.labelAli === 'left') return 'flex-start';
148
+ if (this.labelAli === 'center') return 'center';
149
+ if (this.labelAli === 'right') return 'flex-end';
150
+ },
151
+ labelLeft() {
152
+ return (this.labelPos === 'left' ? parseInt(this.labelWid) : 0) + 'px'
153
+ }
154
+ },
155
+ watch: {
156
+ validateTrigger(trigger) {
157
+ this.formTrigger = trigger;
158
+ }
159
+ },
160
+ created() {
161
+ this.form = this.getForm();
162
+ this.group = this.getForm('uniGroup');
163
+ this.formRules = [];
164
+ this.formTrigger = this.validateTrigger;
165
+ // 处理 name,是否数组
166
+ if (this.name && this.name.indexOf('[') !== -1 && this.name.indexOf(']') !== -1) {
167
+ this.isArray = true;
168
+ this.arrayField = this.name
169
+ // fix by mehaotian 修改不修改的情况,动态值不检验的问题
170
+ this.form.formData[this.name] = this.form._getValue(this.name, '')
171
+ }
172
+ },
173
+ mounted() {
174
+ if (this.form) {
175
+ this.form.childrens.push(this);
176
+ }
177
+ this.init();
178
+ },
179
+ // #ifndef VUE3
180
+ destroyed() {
181
+ if (this.__isUnmounted) return
182
+ this.unInit()
183
+ },
184
+ // #endif
185
+ // #ifdef VUE3
186
+ unmounted() {
187
+ this.__isUnmounted = true
188
+ this.unInit()
189
+ },
190
+ // #endif
191
+ methods: {
192
+ init() {
193
+ if (this.form) {
194
+ let {
195
+ formRules,
196
+ validator,
197
+ formData,
198
+ value,
199
+ labelPosition,
200
+ labelWidth,
201
+ labelAlign,
202
+ errShowType
203
+ } = this.form;
204
+ this.labelPos = this.labelPosition ? this.labelPosition : labelPosition;
205
+
206
+ if (this.label) {
207
+ this.labelWid = (this.labelWidth ? this.labelWidth : (labelWidth || 70))
208
+ } else {
209
+ this.labelWid = (this.labelWidth ? this.labelWidth : (labelWidth || 'auto'))
210
+ }
211
+ if (this.labelWid && this.labelWid !== 'auto') {
212
+ this.labelWid += 'px'
213
+ }
214
+ this.labelAli = this.labelAlign ? this.labelAlign : labelAlign;
215
+
216
+ // 判断第一个 item
217
+ if (!this.form.isFirstBorder) {
218
+ this.form.isFirstBorder = true;
219
+ this.isFirstBorder = true;
220
+ }
221
+
222
+ // 判断 group 里的第一个 item
223
+ if (this.group) {
224
+ if (!this.group.isFirstBorder) {
225
+ this.group.isFirstBorder = true;
226
+ this.isFirstBorder = true;
227
+ }
228
+ }
229
+
230
+ this.border = this.form.border;
231
+ this.showMsg = errShowType;
232
+ let name = this.isArray ? this.arrayField : this.name;
233
+ if (formRules) {
234
+ if (!formRules[name]) {
235
+ formRules[name] = {
236
+ rules: this.rules
237
+ }
238
+ }
239
+ this.formRules = formRules[name];
240
+ }
241
+ if (this.rules.length > 0) {
242
+ validator.updateSchema(formRules);
243
+ }
244
+
245
+ this.validator = validator;
246
+ } else {
247
+ this.labelPos = this.labelPosition || 'left';
248
+ this.labelWid = this.labelWidth || 65;
249
+ this.labelAli = this.labelAlign || 'left';
250
+ }
251
+ },
252
+ unInit() {
253
+ if (this.form) {
254
+ this.form.childrens.forEach((item, index) => {
255
+ if (item === this) {
256
+ this.form.childrens.splice(index, 1)
257
+ delete this.form.formData[item.name]
258
+ }
259
+ })
260
+ }
261
+ },
262
+ /**
263
+ * 获取父元素实例
264
+ */
265
+ getForm(name = 'uniForms') {
266
+ let parent = this.$parent;
267
+ let parentName = parent.$options.name;
268
+ while (parentName !== name) {
269
+ parent = parent.$parent;
270
+ if (!parent) return false;
271
+ parentName = parent.$options.name;
272
+ }
273
+ return parent;
274
+ },
275
+
276
+ /**
277
+ * 移除该表单项的校验结果
278
+ */
279
+ clearValidate() {
280
+ this.errMsg = '';
281
+ },
282
+ /**
283
+ * 子组件调用,如 easyinput
284
+ * @param {Object} value
285
+ */
286
+ setValue(value) {
287
+ let name = this.isArray ? this.arrayField : this.name;
288
+ if (name) {
289
+ if (this.errMsg) this.errMsg = '';
290
+ // 给组件赋值
291
+ this.form.formData[name] = this.form._getValue(name, value);
292
+ if (!this.formRules || (typeof this.formRules && JSON.stringify(this.formRules) === '{}')) return;
293
+ this.triggerCheck(this.form._getValue(this.name, value));
294
+ }
295
+ },
296
+
297
+ /**
298
+ * 校验规则
299
+ * @param {Object} value
300
+ */
301
+ async triggerCheck(value, formTrigger) {
302
+ let promise = null;
303
+ this.errMsg = '';
304
+ if (!this.validator) return;
305
+ const isNoField = this.isRequired(this.formRules.rules || []);
306
+ let isTrigger = this.isTrigger(this.formRules.validateTrigger, this.validateTrigger, this.form.validateTrigger);
307
+ let result = null;
308
+ if (!!isTrigger || formTrigger) {
309
+ let name = this.isArray ? this.arrayField : this.name;
310
+ result = await this.validator.validateUpdate({
311
+ [name]: value
312
+ },
313
+ this.form.formData
314
+ );
315
+ }
316
+ // 判断是否必填,非必填,不填不校验,填写才校验
317
+ if (!isNoField && (value === undefined || value === '')) {
318
+ result = null;
319
+ }
320
+ const inputComp = this.form.inputChildrens.find(child => child.rename === this.name);
321
+ if ((isTrigger || formTrigger) && result && result.errorMessage) {
322
+ if (inputComp) {
323
+ inputComp.errMsg = result.errorMessage;
324
+ }
325
+ if (this.form.errShowType === 'toast') {
326
+ uni.showToast({
327
+ title: result.errorMessage || '校验错误',
328
+ icon: 'none'
329
+ });
330
+ }
331
+ if (this.form.errShowType === 'modal') {
332
+ uni.showModal({
333
+ title: '提示',
334
+ content: result.errorMessage || '校验错误'
335
+ });
336
+ }
337
+ } else {
338
+ if (inputComp) {
339
+ inputComp.errMsg = '';
340
+ }
341
+ }
342
+
343
+ this.errMsg = !result ? '' : result.errorMessage;
344
+ // 触发validate事件
345
+ this.form.validateCheck(result ? result : null);
346
+ // typeof callback === 'function' && callback(result ? result : null);
347
+ // if (promise) return promise
348
+ return result ? result : null;
349
+ },
350
+ /**
351
+ * 触发时机
352
+ * @param {Object} event
353
+ */
354
+ isTrigger(rule, itemRlue, parentRule) {
355
+ let rl = true;
356
+ // bind submit
357
+ if (rule === 'submit' || !rule) {
358
+ if (rule === undefined) {
359
+ if (itemRlue !== 'bind') {
360
+ if (!itemRlue) {
361
+ return parentRule === 'bind' ? true : false;
362
+ }
363
+ return false;
364
+ }
365
+ return true;
366
+ }
367
+ return false;
368
+ }
369
+ return true;
370
+ },
371
+ // 是否有必填字段
372
+ isRequired(rules) {
373
+ let isNoField = false;
374
+ for (let i = 0; i < rules.length; i++) {
375
+ const ruleData = rules[i];
376
+ if (ruleData.required) {
377
+ isNoField = true;
378
+ break;
379
+ }
380
+ }
381
+ return isNoField;
382
+ }
383
+ }
384
+ };
385
+ </script>
386
+
387
+ <style scoped>
388
+ .uni-forms-item {
389
+ position: relative;
390
+ padding: 0px;
391
+ text-align: left;
392
+ color: #333;
393
+ font-size: 14px;
394
+ }
395
+
396
+ .uni-forms-item__box {
397
+ position: relative;
398
+ }
399
+
400
+ .uni-forms-item__inner {
401
+ /* #ifndef APP-NVUE */
402
+ display: flex;
403
+ /* #endif */
404
+ padding-bottom: 22px;
405
+ }
406
+
407
+ .is-direction-left {
408
+ flex-direction: row;
409
+ }
410
+
411
+ .is-direction-top {
412
+ flex-direction: column;
413
+ }
414
+
415
+ .uni-forms-item__label {
416
+ /* #ifndef APP-NVUE */
417
+ display: flex;
418
+ flex-shrink: 0;
419
+ box-sizing: border-box;
420
+ /* #endif */
421
+ flex-direction: row;
422
+ align-items: center;
423
+ width: 65px;
424
+ padding: 5px 0;
425
+ height: 36px;
426
+ }
427
+
428
+ .uni-forms-item__label .label-text {
429
+ font-size: 14px;
430
+ color: #333;
431
+ }
432
+
433
+ .uni-forms-item__label .label-seat {
434
+ margin-right: 5px;
435
+ }
436
+
437
+ .uni-forms-item__content {
438
+ /* #ifndef APP-NVUE */
439
+ width: 100%;
440
+ box-sizing: border-box;
441
+ min-height: 36px;
442
+ /* #endif */
443
+ flex: 1;
444
+ }
445
+
446
+ .label-icon {
447
+ margin-right: 5px;
448
+ margin-top: -1px;
449
+ }
450
+
451
+ .is-required {
452
+ color: #dd524d;
453
+ }
454
+
455
+ .uni-error-message {
456
+ position: absolute;
457
+ bottom: 0px;
458
+ left: 0;
459
+ text-align: left;
460
+ }
461
+
462
+ .uni-error-message-text {
463
+ line-height: 22px;
464
+ color: #dd524d;
465
+ font-size: 12px;
466
+ }
467
+
468
+ .uni-error-msg--boeder {
469
+ position: relative;
470
+ bottom: 0;
471
+ line-height: 22px;
472
+ }
473
+
474
+ .is-input-error-border {
475
+ border-color: #dd524d;
476
+ }
477
+
478
+ .uni-forms-item--border {
479
+ margin-bottom: 0;
480
+ padding: 10px 0;
481
+ border-top: 1px #eee solid;
482
+ }
483
+
484
+ .uni-forms-item--border .uni-forms-item__inner {
485
+ padding: 0;
486
+ }
487
+
488
+ .is-first-border {
489
+ /* #ifndef APP-NVUE */
490
+ border: none;
491
+ /* #endif */
492
+ /* #ifdef APP-NVUE */
493
+ border-width: 0;
494
+ /* #endif */
495
+ }
496
+
497
+ .uni-forms--no-padding {
498
+ padding: 0;
499
+ }
500
+ </style>
@@ -6,7 +6,7 @@
6
6
  <view class="flex uni-tab__cart-sub-left">
7
7
  <view v-for="(item,index) in options" :key="index" class="flex uni-tab__cart-button-left uni-tab__shop-cart" @click="onClick(index,item)">
8
8
  <view class="uni-tab__icon">
9
- <cv-icon2 :type="item.icon" size="20" color="#646566"></cv-icon2>
9
+ <uni-icons :type="item.icon" size="20" color="#646566"></uni-icons>
10
10
  <!-- <image class="image" :src="item.icon" mode="widthFix" /> -->
11
11
  </view>
12
12
  <text class="uni-tab__text">{{ item.text }}</text>
@@ -0,0 +1,141 @@
1
+ <template>
2
+ <view class="uni-grid-wrap">
3
+ <view :id="elId" ref="uni-grid" class="uni-grid" :class="{ 'uni-grid--border': showBorder }" :style="{ 'border-left-color':borderColor}">
4
+ <slot />
5
+ </view>
6
+ </view>
7
+ </template>
8
+
9
+ <script>
10
+ // #ifdef APP-NVUE
11
+ const dom = uni.requireNativePlugin('dom');
12
+ // #endif
13
+
14
+ /**
15
+ * Grid 宫格
16
+ * @description 宫格组件
17
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=27
18
+ * @property {Number} column 每列显示个数
19
+ * @property {String} borderColor 边框颜色
20
+ * @property {Boolean} showBorder 是否显示边框
21
+ * @property {Boolean} square 是否方形显示
22
+ * @property {Boolean} Boolean 点击背景是否高亮
23
+ * @event {Function} change 点击 grid 触发,e={detail:{index:0}},index 为当前点击 gird 下标
24
+ */
25
+ export default {
26
+ name: 'UniGrid',
27
+ emits: ['change'],
28
+ props: {
29
+ // 每列显示个数
30
+ column: {
31
+ type: Number,
32
+ default: 3
33
+ },
34
+ // 是否显示边框
35
+ showBorder: {
36
+ type: Boolean,
37
+ default: true
38
+ },
39
+ // 边框颜色
40
+ borderColor: {
41
+ type: String,
42
+ default: '#e5e5e5'
43
+ },
44
+ // 是否正方形显示,默认为 true
45
+ square: {
46
+ type: Boolean,
47
+ default: true
48
+ },
49
+ highlight: {
50
+ type: Boolean,
51
+ default: true
52
+ }
53
+ },
54
+ provide() {
55
+ return {
56
+ grid: this
57
+ }
58
+ },
59
+ data() {
60
+ const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
61
+ return {
62
+ elId,
63
+ width: 0
64
+ }
65
+ },
66
+ created() {
67
+ this.children = []
68
+ },
69
+ mounted() {
70
+ this.$nextTick(() => {
71
+ this.init()
72
+ })
73
+ },
74
+ methods: {
75
+ init() {
76
+ setTimeout(() => {
77
+ this._getSize((width) => {
78
+ this.children.forEach((item, index) => {
79
+ item.width = width
80
+ })
81
+ })
82
+ }, 50)
83
+ },
84
+ change(e) {
85
+ this.$emit('change', e)
86
+ },
87
+ _getSize(fn) {
88
+ // #ifndef APP-NVUE
89
+ uni.createSelectorQuery()
90
+ .in(this)
91
+ .select(`#${this.elId}`)
92
+ .boundingClientRect()
93
+ .exec(ret => {
94
+ this.width = parseInt((ret[0].width - 1) / this.column) + 'px'
95
+ fn(this.width)
96
+ })
97
+ // #endif
98
+ // #ifdef APP-NVUE
99
+ dom.getComponentRect(this.$refs['uni-grid'], (ret) => {
100
+ this.width = parseInt((ret.size.width - 1) / this.column) + 'px'
101
+ fn(this.width)
102
+ })
103
+ // #endif
104
+ }
105
+ }
106
+ }
107
+ </script>
108
+
109
+ <style scoped>
110
+ .uni-grid-wrap {
111
+ /* #ifndef APP-NVUE */
112
+ display: flex;
113
+ /* #endif */
114
+ flex: 1;
115
+ flex-direction: column;
116
+ /* #ifdef H5 */
117
+ width: 100%;
118
+ /* #endif */
119
+ }
120
+
121
+ .uni-grid {
122
+ /* #ifndef APP-NVUE */
123
+ display: flex;
124
+ /* #endif */
125
+ flex-direction: row;
126
+ flex-wrap: wrap;
127
+ }
128
+
129
+ .uni-grid--border {
130
+ position: relative;
131
+ /* #ifdef APP-NVUE */
132
+ border-left-color: #e5e5e5;
133
+ border-left-style: solid;
134
+ border-left-width: 0.5px;
135
+ /* #endif */
136
+ /* #ifndef APP-NVUE */
137
+ z-index: 1;
138
+ border-left: 1px #e5e5e5 solid;
139
+ /* #endif */
140
+ }
141
+ </style>