@10yun/cv-mobile-ui 0.4.1 → 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 (122) 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-cv/cv-calendar → ui-uni/uni-calendar}/calendar.js +0 -0
  12. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/uni-calendar-item.vue +0 -0
  13. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/uni-calendar.vue +0 -0
  14. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  15. package/{ui-cv/cv-card → ui-uni/uni-card}/uni-card.vue +0 -0
  16. package/{ui-cv/cv-col → ui-uni/uni-col}/uni-col.vue +0 -0
  17. package/{ui-cv/cv-collapse → ui-uni/uni-collapse}/uni-collapse.vue +0 -0
  18. package/{ui-cv/cv-collapse-item → ui-uni/uni-collapse-item}/uni-collapse-item.vue +0 -0
  19. package/{ui-cv/cv-combox → ui-uni/uni-combox}/uni-combox.vue +0 -0
  20. package/{ui-cv/cv-countdown → ui-uni/uni-countdown}/uni-countdown.vue +0 -0
  21. package/{ui-cv/cv-data-checkbox → ui-uni/uni-data-checkbox}/uni-data-checkbox.vue +0 -0
  22. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  23. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/uni-data-indexed-list-item.vue +0 -0
  24. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/uni-data-indexed-list.vue +0 -0
  25. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  26. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/uni-data-picker.vue +0 -0
  27. package/{ui-cv/cv-data-pickerview → ui-uni/uni-data-pickerview}/uni-data-picker.js +0 -0
  28. package/{ui-cv/cv-data-pickerview → ui-uni/uni-data-pickerview}/uni-data-pickerview.vue +0 -0
  29. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  30. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/uni-dateformat.vue +0 -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-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.vue +0 -0
  34. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  35. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/time-picker.vue +0 -0
  36. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/uni-datetime-picker.vue +0 -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-cv/cv-easyinput → ui-uni/uni-easyinput}/uni-easyinput.vue +0 -0
  42. package/{ui-cv/cv-fab → ui-uni/uni-fab}/uni-fab.vue +0 -0
  43. package/{ui-cv/cv-fab → ui-uni/uni-fab}/uni-fab.vue.bak +0 -0
  44. package/{ui-cv/cv-fav → ui-uni/uni-fav}/uni-fav.vue +0 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  46. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/uni-file-picker.vue +0 -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 → ui-uni/uni-goods-nav}/uni-goods-nav.vue +0 -0
  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-icons2 → ui-uni/uni-icons}/uni.ttf +0 -0
  60. package/{ui-cv/cv-indexed-list → ui-uni/uni-indexed-list}/uni-indexed-list-item.vue +0 -0
  61. package/{ui-cv/cv-indexed-list → ui-uni/uni-indexed-list}/uni-indexed-list.vue +0 -0
  62. package/ui-uni/uni-link/uni-link.vue +117 -0
  63. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-list.vue +0 -0
  64. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.vue +0 -0
  65. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  66. package/{ui-cv/cv-list-ad → ui-uni/uni-list-ad}/uni-list-ad.vue +0 -0
  67. package/{ui-cv/cv-list-chat → ui-uni/uni-list-chat}/uni-list-chat.scss +0 -0
  68. package/{ui-cv/cv-list-chat → ui-uni/uni-list-chat}/uni-list-chat.vue +0 -0
  69. package/{ui-cv/cv-list-item → ui-uni/uni-list-item}/uni-list-item.vue +0 -0
  70. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  71. package/{ui-cv/cv-nav-bar → ui-uni/uni-nav-bar}/uni-nav-bar.vue +0 -0
  72. package/{ui-cv/cv-nav-bar → ui-uni/uni-nav-bar}/uni-status-bar.vue +0 -0
  73. package/{ui-cv/cv-notice-bar → ui-uni/uni-notice-bar}/uni-notice-bar.vue +0 -0
  74. package/{ui-cv/cv-number-box → ui-uni/uni-number-box}/uni-number-box.vue +0 -0
  75. package/{ui-cv/cv-pagination → ui-uni/uni-pagination}/uni-pagination.vue +0 -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-cv/cv-popup → ui-uni/uni-popup}/uni-popup.vue +0 -0
  79. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  80. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/uni-popup-dialog.vue +0 -0
  81. package/{ui-cv/cv-popup-message → ui-uni/uni-popup-message}/uni-popup-message.vue +0 -0
  82. package/{ui-cv/cv-popup-share → 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-cv/cv-search-bar → ui-uni/uni-search-bar}/uni-search-bar.vue +0 -0
  86. package/{ui-cv/cv-section → ui-uni/uni-section}/uni-section.vue +0 -0
  87. package/{ui-cv/cv-segmented-control → ui-uni/uni-segmented-control}/uni-segmented-control.vue +0 -0
  88. package/{ui-cv/cv-status-bar → ui-uni/uni-status-bar}/uni-status-bar.vue +0 -0
  89. package/{ui-cv/cv-steps → ui-uni/uni-steps}/uni-steps.vue +0 -0
  90. package/{ui-cv/cv-swipe-action → 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 → ui-uni/uni-swipe-action-item}/uni-swipe-action-item.vue +0 -0
  98. package/{ui-cv/cv-swiper-dot → ui-uni/uni-swiper-dot}/uni-swiper-dot.vue +0 -0
  99. package/{ui-cv/cv-table → ui-uni/uni-table}/uni-table.vue +0 -0
  100. package/{ui-cv/cv-tag → ui-uni/uni-tag}/uni-tag.vue +0 -0
  101. package/{ui-cv/cv-tbody → ui-uni/uni-tbody}/uni-tbody.vue +0 -0
  102. package/{ui-cv/cv-td → ui-uni/uni-td}/uni-td.vue +0 -0
  103. package/{ui-cv/cv-test → 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-cv/cv-th → ui-uni/uni-th}/uni-th.vue +0 -0
  106. package/{ui-cv/cv-thead → ui-uni/uni-thead}/uni-thead.vue +0 -0
  107. package/{ui-cv/cv-title → ui-uni/uni-title}/uni-title.vue +0 -0
  108. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  109. package/{ui-cv/cv-tr → ui-uni/uni-tr}/uni-tr.vue +0 -0
  110. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  111. package/{ui-cv/cv-transition → ui-uni/uni-transition}/uni-transition.vue +0 -0
  112. package/ui-cv/cv-badge/uni-badge.vue +0 -249
  113. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  114. package/ui-cv/cv-drawer/keypress.js +0 -45
  115. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  116. package/ui-cv/cv-form-base/validate.js +0 -477
  117. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  118. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  119. package/ui-cv/cv-icons2/cv-icons2.vue +0 -78
  120. package/ui-cv/cv-icons2/icons.js +0 -132
  121. package/ui-cv/cv-link/uni-link.vue +0 -130
  122. package/ui-cv/cv-row/uni-row.vue +0 -157
@@ -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>
@@ -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>