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

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 (168) hide show
  1. package/package.json +1 -1
  2. package/ui-cv/cv-form-item/cv-form-item.vue +1 -1
  3. package/ui-cv/cv-input-password/cv-input-password.vue +2 -2
  4. package/ui-uni/amap-wx/js/util.js +166 -158
  5. package/ui-uni/page-foot/page-foot.vue +38 -0
  6. package/ui-uni/page-head/page-head.vue +16 -0
  7. package/ui-uni/product.vue +52 -52
  8. package/ui-uni/u-charts/u-charts.js +743 -1092
  9. package/ui-uni/u-link/u-link.vue +59 -0
  10. package/ui-uni/uni-badge/uni-badge.vue +250 -0
  11. package/ui-uni/uni-calendar/calendar.js +546 -0
  12. package/ui-uni/uni-calendar/uni-calendar-item.vue +171 -0
  13. package/ui-uni/uni-calendar/uni-calendar.vue +504 -0
  14. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  15. package/ui-uni/uni-card/uni-card.vue +420 -0
  16. package/ui-uni/uni-col/uni-col.vue +2968 -0
  17. package/ui-uni/uni-collapse/uni-collapse.vue +146 -0
  18. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +378 -0
  19. package/ui-uni/uni-combox/uni-combox.vue +237 -0
  20. package/ui-uni/uni-countdown/uni-countdown.vue +234 -0
  21. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +792 -0
  22. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  23. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +142 -0
  24. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +364 -0
  25. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  26. package/ui-uni/uni-data-picker/uni-data-picker.vue +468 -0
  27. package/{ui-cv/cv-data-pickerview/cv-data-picker.js → ui-uni/uni-data-pickerview/uni-data-picker.js} +0 -0
  28. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +298 -0
  29. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  30. package/ui-uni/uni-dateformat/uni-dateformat.vue +88 -0
  31. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar-item.vue +0 -0
  32. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.js +0 -0
  33. package/ui-uni/uni-datetime-picker/calendar.vue +747 -0
  34. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  35. package/ui-uni/uni-datetime-picker/time-picker.vue +899 -0
  36. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +874 -0
  37. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/util.js +0 -0
  38. package/ui-uni/uni-drawer/keypress.js +45 -0
  39. package/ui-uni/uni-drawer/uni-drawer.vue +178 -0
  40. package/{ui-cv/cv-easyinput → ui-uni/uni-easyinput}/common.js +0 -0
  41. package/ui-uni/uni-easyinput/uni-easyinput.vue +438 -0
  42. package/ui-uni/uni-fab/uni-fab.vue +443 -0
  43. package/{ui-cv/cv-fab/cv-fab.vue.bak → ui-uni/uni-fab/uni-fab.vue.bak} +2 -2
  44. package/ui-uni/uni-fav/uni-fav.vue +136 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  46. package/ui-uni/uni-file-picker/uni-file-picker.vue +614 -0
  47. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-file.vue +0 -0
  48. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-image.vue +0 -0
  49. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/utils.js +0 -0
  50. package/ui-uni/uni-forms/uni-forms.vue +467 -0
  51. package/ui-uni/uni-forms/validate.js +486 -0
  52. package/ui-uni/uni-forms-item/uni-forms-item.vue +500 -0
  53. package/{ui-cv/cv-goods-nav/cv-goods-nav.vue → ui-uni/uni-goods-nav/uni-goods-nav.vue} +1 -1
  54. package/ui-uni/uni-grid/uni-grid.vue +141 -0
  55. package/ui-uni/uni-grid-item/uni-grid-item.vue +123 -0
  56. package/ui-uni/uni-group/uni-group.vue +123 -0
  57. package/ui-uni/uni-icons/icons.js +132 -0
  58. package/ui-uni/uni-icons/uni-icons.vue +72 -0
  59. package/{ui-cv/cv-icon2 → ui-uni/uni-icons}/uni.ttf +0 -0
  60. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +142 -0
  61. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +357 -0
  62. package/ui-uni/uni-link/uni-link.vue +117 -0
  63. package/ui-uni/uni-list/uni-list.vue +107 -0
  64. package/ui-uni/uni-list/uni-refresh.vue +65 -0
  65. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  66. package/ui-uni/uni-list-ad/uni-list-ad.vue +106 -0
  67. package/{ui-cv/cv-list-chat/cv-list-chat.scss → ui-uni/uni-list-chat/uni-list-chat.scss} +0 -0
  68. package/{ui-cv/cv-list-chat/cv-list-chat.vue → ui-uni/uni-list-chat/uni-list-chat.vue} +0 -0
  69. package/ui-uni/uni-list-item/uni-list-item.vue +428 -0
  70. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  71. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +244 -0
  72. package/{ui-cv/cv-nav-bar/cv-status-bar.vue → ui-uni/uni-nav-bar/uni-status-bar.vue} +0 -0
  73. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +394 -0
  74. package/ui-uni/uni-number-box/uni-number-box.vue +224 -0
  75. package/ui-uni/uni-pagination/uni-pagination.vue +376 -0
  76. package/{ui-cv/cv-popup → ui-uni/uni-popup}/keypress.js +0 -0
  77. package/{ui-cv/cv-popup → ui-uni/uni-popup}/popup.js +0 -0
  78. package/ui-uni/uni-popup/uni-popup.vue +412 -0
  79. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  80. package/{ui-cv/cv-popup-dialog/cv-popup-dialog.vue → ui-uni/uni-popup-dialog/uni-popup-dialog.vue} +0 -0
  81. package/ui-uni/uni-popup-message/uni-popup-message.vue +143 -0
  82. package/{ui-cv/cv-popup-share/cv-popup-share.vue → ui-uni/uni-popup-share/uni-popup-share.vue} +0 -0
  83. package/ui-uni/uni-rate/uni-rate.vue +357 -0
  84. package/ui-uni/uni-row/uni-row.vue +155 -0
  85. package/ui-uni/uni-search-bar/uni-search-bar.vue +262 -0
  86. package/{ui-cv/cv-section/cv-section.vue → ui-uni/uni-section/uni-section.vue} +0 -0
  87. package/{ui-cv/cv-segmented-control/cv-segmented-control.vue → ui-uni/uni-segmented-control/uni-segmented-control.vue} +0 -0
  88. package/{ui-cv/cv-status-bar/cv-status-bar.vue → ui-uni/uni-status-bar/uni-status-bar.vue} +0 -0
  89. package/ui-uni/uni-steps/uni-steps.vue +250 -0
  90. package/{ui-cv/cv-swipe-action/cv-swipe-action.vue → ui-uni/uni-swipe-action/uni-swipe-action.vue} +0 -0
  91. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/bindingx.js +0 -0
  92. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/index.wxs +0 -0
  93. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/isPC.js +0 -0
  94. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpalipay.js +0 -0
  95. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpother.js +0 -0
  96. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpwxs.js +0 -0
  97. 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
  98. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +205 -0
  99. package/ui-uni/uni-table/uni-table.vue +455 -0
  100. package/ui-uni/uni-tag/uni-tag.vue +283 -0
  101. package/ui-uni/uni-tbody/uni-tbody.vue +30 -0
  102. package/ui-uni/uni-td/uni-td.vue +88 -0
  103. package/{ui-cv/cv-test/cv-test.vue → ui-uni/uni-test/uni-test.vue} +0 -0
  104. package/{ui-cv/cv-th → ui-uni/uni-th}/filter-dropdown.vue +0 -0
  105. package/ui-uni/uni-th/uni-th.vue +259 -0
  106. package/ui-uni/uni-thead/uni-thead.vue +114 -0
  107. package/ui-uni/uni-title/uni-title.vue +171 -0
  108. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  109. package/ui-uni/uni-tr/uni-tr.vue +156 -0
  110. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  111. package/ui-uni/uni-transition/uni-transition.vue +287 -0
  112. package/ui-cv/cv-badge/cv-badge.vue +0 -249
  113. package/ui-cv/cv-calendar/calendar.js +0 -963
  114. package/ui-cv/cv-calendar/cv-calendar-item.vue +0 -198
  115. package/ui-cv/cv-calendar/cv-calendar.vue +0 -508
  116. package/ui-cv/cv-card/cv-card.vue +0 -427
  117. package/ui-cv/cv-col/cv-col.vue +0 -2965
  118. package/ui-cv/cv-collapse/cv-collapse.vue +0 -146
  119. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +0 -395
  120. package/ui-cv/cv-combox/cv-combox.vue +0 -250
  121. package/ui-cv/cv-countdown/cv-countdown.vue +0 -245
  122. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +0 -841
  123. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +0 -154
  124. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +0 -376
  125. package/ui-cv/cv-data-picker/cv-data-picker.vue +0 -486
  126. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +0 -304
  127. package/ui-cv/cv-dateformat/cv-dateformat.vue +0 -86
  128. package/ui-cv/cv-datetime-picker/calendar.vue +0 -761
  129. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +0 -958
  130. package/ui-cv/cv-datetime-picker/time-picker.vue +0 -907
  131. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  132. package/ui-cv/cv-drawer/keypress.js +0 -45
  133. package/ui-cv/cv-easyinput/cv-easyinput.vue +0 -514
  134. package/ui-cv/cv-fab/cv-fab.vue +0 -465
  135. package/ui-cv/cv-fav/cv-fav.vue +0 -150
  136. package/ui-cv/cv-file-picker/cv-file-picker.vue +0 -619
  137. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  138. package/ui-cv/cv-form-base/validate.js +0 -477
  139. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  140. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  141. package/ui-cv/cv-icon2/cv-icon2.vue +0 -78
  142. package/ui-cv/cv-icon2/icons.js +0 -132
  143. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +0 -154
  144. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +0 -371
  145. package/ui-cv/cv-link2/cv-link2.vue +0 -130
  146. package/ui-cv/cv-list/cv-list.vue +0 -107
  147. package/ui-cv/cv-list/cv-refresh.vue +0 -65
  148. package/ui-cv/cv-list-ad/cv-list-ad.vue +0 -113
  149. package/ui-cv/cv-list-item/cv-list-item.vue +0 -449
  150. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +0 -256
  151. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +0 -453
  152. package/ui-cv/cv-number-box/cv-number-box.vue +0 -223
  153. package/ui-cv/cv-pagination/cv-pagination.vue +0 -397
  154. package/ui-cv/cv-popup/cv-popup.vue +0 -429
  155. package/ui-cv/cv-popup-message/cv-popup-message.vue +0 -143
  156. package/ui-cv/cv-row/cv-row.vue +0 -157
  157. package/ui-cv/cv-search-bar/cv-search-bar.vue +0 -280
  158. package/ui-cv/cv-steps/cv-steps.vue +0 -293
  159. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +0 -255
  160. package/ui-cv/cv-table/cv-table.vue +0 -460
  161. package/ui-cv/cv-tag/cv-tag.vue +0 -276
  162. package/ui-cv/cv-tbody/cv-tbody.vue +0 -28
  163. package/ui-cv/cv-td/cv-td.vue +0 -93
  164. package/ui-cv/cv-th/cv-th.vue +0 -270
  165. package/ui-cv/cv-thead/cv-thead.vue +0 -114
  166. package/ui-cv/cv-title/cv-title.vue +0 -168
  167. package/ui-cv/cv-tr/cv-tr.vue +0 -166
  168. 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>