@didaoktv/didaoui-uniapp 1.0.0 → 1.2.0

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 (114) hide show
  1. package/README.md +16 -7
  2. package/components/dd-action-sheet/dd-action-sheet.vue +3 -3
  3. package/components/dd-album/album.js +19 -0
  4. package/components/dd-album/dd-album.vue +345 -0
  5. package/components/dd-album/props.js +89 -0
  6. package/components/dd-avatar/avatar.js +19 -0
  7. package/components/dd-avatar/dd-avatar.vue +172 -160
  8. package/components/dd-avatar/props.js +84 -0
  9. package/components/dd-avatar-group/avatarGroup.js +14 -0
  10. package/components/dd-avatar-group/dd-avatar-group.vue +110 -0
  11. package/components/dd-avatar-group/props.js +57 -0
  12. package/components/dd-badge/dd-badge.vue +2 -2
  13. package/components/dd-barcode/dd-barcode.vue +1030 -0
  14. package/components/dd-bill-detail/dd-bill-detail.vue +265 -0
  15. package/components/dd-button/dd-button.vue +17 -17
  16. package/components/dd-calendar/dd-calendar.vue +357 -0
  17. package/components/dd-canvas/dd-canvas.vue +1088 -0
  18. package/components/dd-capsule-button/dd-capsule-button.vue +6 -6
  19. package/components/dd-car-keyboard/carKeyboard.js +6 -0
  20. package/components/dd-car-keyboard/dd-car-keyboard.vue +315 -0
  21. package/components/dd-car-keyboard/props.js +19 -0
  22. package/components/dd-cascader/dd-cascader.vue +405 -0
  23. package/components/dd-cell/dd-cell.vue +50 -23
  24. package/components/dd-cell-group/dd-cell-group.vue +32 -25
  25. package/components/dd-champion-card/dd-champion-card.vue +4 -4
  26. package/components/dd-checkbox/dd-checkbox.vue +30 -39
  27. package/components/dd-checkbox-group/dd-checkbox-group.vue +67 -0
  28. package/components/dd-copy/dd-copy.vue +74 -0
  29. package/components/dd-coupon/dd-coupon.vue +368 -0
  30. package/components/dd-cropper/dd-cropper.vue +1297 -0
  31. package/components/dd-dialog/dd-dialog.vue +1 -1
  32. package/components/dd-divider/dd-divider.vue +3 -3
  33. package/components/dd-dropdown-item/dd-dropdown-item.vue +5 -5
  34. package/components/dd-empty-state/dd-empty-state.vue +1 -1
  35. package/components/dd-field/dd-field.vue +531 -106
  36. package/components/dd-form/dd-form.vue +116 -0
  37. package/components/dd-form/rules.ts +84 -0
  38. package/components/dd-goods-sku/dd-goods-sku.vue +434 -0
  39. package/components/dd-icon/dd-icon.vue +2 -2
  40. package/components/dd-image/dd-image.vue +4 -4
  41. package/components/dd-input/dd-input.vue +5 -5
  42. package/components/dd-keyboard/dd-keyboard.vue +178 -0
  43. package/components/dd-keyboard/keyboard.js +22 -0
  44. package/components/dd-keyboard/props.js +89 -0
  45. package/components/dd-link/dd-link.vue +87 -0
  46. package/components/dd-link/link.js +18 -0
  47. package/components/dd-link/props.js +44 -0
  48. package/components/dd-list-cell/dd-list-cell.vue +4 -4
  49. package/components/dd-loading/dd-loading.vue +1 -1
  50. package/components/dd-loadmore/dd-loadmore.vue +2 -2
  51. package/components/dd-markdown/dd-markdown.vue +344 -0
  52. package/components/dd-markdown/marked.esm.mjs +7 -0
  53. package/components/dd-mini-program-navbar/dd-mini-program-navbar.vue +9 -9
  54. package/components/dd-navigation/dd-navigation.vue +5 -5
  55. package/components/dd-number-keyboard/dd-number-keyboard.vue +200 -0
  56. package/components/dd-number-keyboard/numberKeyboard.js +8 -0
  57. package/components/dd-number-keyboard/props.js +24 -0
  58. package/components/dd-parse/dd-parse.vue +534 -0
  59. package/components/dd-parse/node/handler.wxs +26 -0
  60. package/components/dd-parse/node/node.vue +603 -0
  61. package/components/dd-parse/parse.js +13 -0
  62. package/components/dd-parse/parser.js +1400 -0
  63. package/components/dd-parse/props.js +57 -0
  64. package/components/dd-popover/dd-popover.vue +10 -10
  65. package/components/dd-popover-item/dd-popover-item.vue +3 -3
  66. package/components/dd-popup/dd-popup.vue +5 -5
  67. package/components/dd-poster/dd-poster.vue +695 -0
  68. package/components/dd-progress/dd-progress.vue +3 -3
  69. package/components/dd-pull-refresh/dd-pull-refresh.vue +3 -3
  70. package/components/dd-qrcode/dd-qrcode.vue +509 -0
  71. package/components/dd-qrcode/qrcode.js +1283 -0
  72. package/components/dd-radio/dd-radio.vue +19 -20
  73. package/components/dd-radio-group/dd-radio-group.vue +53 -0
  74. package/components/dd-rate/dd-rate.vue +1 -1
  75. package/components/dd-room-card/dd-room-card.vue +3 -3
  76. package/components/dd-search-bar/dd-search-bar.vue +8 -8
  77. package/components/dd-segmented-tab/dd-segmented-tab.vue +6 -6
  78. package/components/dd-signature/dd-signature.vue +513 -0
  79. package/components/dd-skeleton/dd-skeleton.vue +1 -1
  80. package/components/dd-slider/dd-slider.vue +4 -4
  81. package/components/dd-stat-card/dd-stat-card.vue +5 -5
  82. package/components/dd-step/dd-step.vue +11 -11
  83. package/components/dd-stepper/dd-stepper.vue +6 -6
  84. package/components/dd-swipe-action/dd-swipe-action.vue +1 -1
  85. package/components/dd-swipeable-tab/dd-swipeable-tab.vue +1 -1
  86. package/components/dd-tabbar-item/dd-tabbar-item.vue +8 -8
  87. package/components/dd-tag/dd-tag.vue +17 -1
  88. package/components/dd-text/dd-text.vue +250 -0
  89. package/components/dd-text/props.js +120 -0
  90. package/components/dd-text/text.js +30 -0
  91. package/components/dd-text/value.js +87 -0
  92. package/components/dd-toast/dd-toast.vue +2 -2
  93. package/components/dd-upload/dd-upload.vue +4 -4
  94. package/components/dd-workorder-card/dd-workorder-card.vue +237 -0
  95. package/index.ts +50 -9
  96. package/libs/config/color.js +16 -0
  97. package/libs/config/config.js +25 -0
  98. package/libs/config/props.js +185 -0
  99. package/libs/config/zIndex.js +20 -0
  100. package/libs/function/digit.js +167 -0
  101. package/libs/function/index.js +932 -0
  102. package/libs/function/test.js +327 -0
  103. package/libs/i18n/index.d.ts +2 -0
  104. package/libs/i18n/index.js +89 -0
  105. package/libs/i18n/locales/zh-Hans.js +86 -0
  106. package/libs/mixin/button.js +18 -0
  107. package/libs/mixin/mixin.js +44 -0
  108. package/libs/mixin/mpMixin.js +13 -0
  109. package/libs/mixin/openType.js +27 -0
  110. package/libs/utils.ts +462 -0
  111. package/libs/vue.js +3 -0
  112. package/package.json +1 -1
  113. package/scss/_dd-shared.scss +40 -0
  114. package/scss/_variables.scss +4 -1
@@ -0,0 +1,327 @@
1
+ /**
2
+ * 验证电子邮箱格式
3
+ */
4
+ export function email(value) {
5
+ return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)
6
+ }
7
+
8
+ /**
9
+ * 验证手机格式
10
+ */
11
+ export function mobile(value) {
12
+ return /^1[23456789]\d{9}$/.test(value)
13
+ }
14
+
15
+ /**
16
+ * 验证URL格式
17
+ */
18
+ export function url(value) {
19
+ return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/
20
+ .test(value)
21
+ }
22
+
23
+ /**
24
+ * 验证日期格式
25
+ * @param {number | string} value yyyy-mm-dd hh:mm:ss 或 时间戳
26
+ */
27
+ export function date(value) {
28
+ if (!value) return false;
29
+ // number类型,判断是否是时间戳
30
+ if (typeof value === "number") {
31
+ // len === 10 秒级时间戳 len === 13 毫秒级时间戳
32
+ if (value.toString().length !== 10 && value.toString().length !== 13) {
33
+ return false;
34
+ }
35
+ return !isNaN(new Date(value).getTime());
36
+ }
37
+ if (typeof value === "string") {
38
+ // 是否为string类型时间戳
39
+ const numV = Number(value);
40
+ if (!isNaN(numV)) {
41
+ if (
42
+ numV.toString().length === 10 ||
43
+ numV.toString().length === 13
44
+ ) {
45
+ return !isNaN(new Date(numV).getTime());
46
+ }
47
+ }
48
+ // 非时间戳,且长度在yyyy-mm-dd 至 yyyy-mm-dd hh:mm:ss 之间
49
+ if (value.length < 10 || value.length > 19) {
50
+ return false;
51
+ }
52
+ const dateRegex =
53
+ /^\d{4}[-\/]\d{2}[-\/]\d{2}( \d{1,2}:\d{2}(:\d{2})?)?$/;
54
+ if (!dateRegex.test(value)) {
55
+ return false;
56
+ }
57
+ // 检查是否为有效日期
58
+ const dateValue = new Date(value);
59
+ return !isNaN(dateValue.getTime());
60
+ }
61
+ // 非number和string类型,不做校验
62
+ return false;
63
+ }
64
+
65
+ /**
66
+ * 验证ISO类型的日期格式
67
+ */
68
+ export function dateISO(value) {
69
+ return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
70
+ }
71
+
72
+ /**
73
+ * 验证十进制数字
74
+ */
75
+ export function number(value) {
76
+ return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
77
+ }
78
+
79
+ /**
80
+ * 验证字符串
81
+ */
82
+ export function string(value) {
83
+ return typeof value === 'string'
84
+ }
85
+
86
+ /**
87
+ * 验证整数
88
+ */
89
+ export function digits(value) {
90
+ return /^\d+$/.test(value)
91
+ }
92
+
93
+ /**
94
+ * 验证身份证号码
95
+ */
96
+ export function idCard(value) {
97
+ return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
98
+ value
99
+ )
100
+ }
101
+
102
+ /**
103
+ * 是否车牌号
104
+ */
105
+ export function carNo(value) {
106
+ // 新能源车牌
107
+ const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
108
+ // 旧车牌
109
+ const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
110
+ if (value.length === 7) {
111
+ return creg.test(value)
112
+ } if (value.length === 8) {
113
+ return xreg.test(value)
114
+ }
115
+ return false
116
+ }
117
+
118
+ /**
119
+ * 金额,只允许2位小数
120
+ */
121
+ export function amount(value) {
122
+ // 金额,只允许保留两位小数
123
+ return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value)
124
+ }
125
+
126
+ /**
127
+ * 中文
128
+ */
129
+ export function chinese(value) {
130
+ const reg = /^[\u4e00-\u9fa5]+$/gi
131
+ return reg.test(value)
132
+ }
133
+
134
+ /**
135
+ * 只能输入字母
136
+ */
137
+ export function letter(value) {
138
+ return /^[a-zA-Z]*$/.test(value)
139
+ }
140
+
141
+ /**
142
+ * 只能是字母或者数字
143
+ */
144
+ export function enOrNum(value) {
145
+ // 英文或者数字
146
+ const reg = /^[0-9a-zA-Z]*$/g
147
+ return reg.test(value)
148
+ }
149
+
150
+ /**
151
+ * 验证是否包含某个值
152
+ */
153
+ export function contains(value, param) {
154
+ return value.indexOf(param) >= 0
155
+ }
156
+
157
+ /**
158
+ * 验证一个值范围[min, max]
159
+ */
160
+ export function range(value, param) {
161
+ return value >= param[0] && value <= param[1]
162
+ }
163
+
164
+ /**
165
+ * 验证一个长度范围[min, max]
166
+ */
167
+ export function rangeLength(value, param) {
168
+ return value.length >= param[0] && value.length <= param[1]
169
+ }
170
+
171
+ /**
172
+ * 是否固定电话
173
+ */
174
+ export function landline(value) {
175
+ const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
176
+ return reg.test(value)
177
+ }
178
+
179
+ /**
180
+ * 判断是否为空
181
+ */
182
+ export function empty(value) {
183
+ switch (typeof value) {
184
+ case 'undefined':
185
+ return true
186
+ case 'string':
187
+ if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
188
+ break
189
+ case 'boolean':
190
+ if (!value) return true
191
+ break
192
+ case 'number':
193
+ if (value === 0 || isNaN(value)) return true
194
+ break
195
+ case 'object':
196
+ if (value === null || value.length === 0) return true
197
+ for (const i in value) {
198
+ return false
199
+ }
200
+ return true
201
+ }
202
+ return false
203
+ }
204
+
205
+ /**
206
+ * 是否json字符串
207
+ */
208
+ export function jsonString(value) {
209
+ if (typeof value === 'string') {
210
+ try {
211
+ const obj = JSON.parse(value)
212
+ if (typeof obj === 'object' && obj) {
213
+ return true
214
+ }
215
+ return false
216
+ } catch (e) {
217
+ return false
218
+ }
219
+ }
220
+ return false
221
+ }
222
+
223
+ /**
224
+ * 是否数组
225
+ */
226
+ export function array(value) {
227
+ if (typeof Array.isArray === 'function') {
228
+ return Array.isArray(value)
229
+ }
230
+ return Object.prototype.toString.call(value) === '[object Array]'
231
+ }
232
+
233
+ /**
234
+ * 是否对象
235
+ */
236
+ export function object(value) {
237
+ return Object.prototype.toString.call(value) === '[object Object]'
238
+ }
239
+
240
+ /**
241
+ * 是否是Promise对象
242
+ */
243
+ export function objectPromise(value) {
244
+ return Object.prototype.toString.call(value) === '[object Promise]';
245
+ }
246
+
247
+ /**
248
+ * 是否短信验证码
249
+ */
250
+ export function code(value, len = 6) {
251
+ return new RegExp(`^\\d{${len}}$`).test(value)
252
+ }
253
+
254
+ /**
255
+ * 是否函数方法
256
+ * @param {Object} value
257
+ */
258
+ export function func(value) {
259
+ return typeof value === 'function'
260
+ }
261
+
262
+ /**
263
+ * 是否promise对象
264
+ * @param {Object} value
265
+ */
266
+ export function promise(value) {
267
+ return objectPromise(value) && func(value.then) && func(value.catch)
268
+ }
269
+
270
+ /** 是否图片格式
271
+ * @param {Object} value
272
+ */
273
+ export function image(value) {
274
+ const newValue = value.split('?')[0]
275
+ const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i
276
+ return IMAGE_REGEXP.test(newValue)
277
+ }
278
+
279
+ /**
280
+ * 是否视频格式
281
+ * @param {Object} value
282
+ */
283
+ export function video(value) {
284
+ const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i
285
+ return VIDEO_REGEXP.test(value)
286
+ }
287
+
288
+ /**
289
+ * 是否为正则对象
290
+ * @param {Object}
291
+ * @return {Boolean}
292
+ */
293
+ export function regExp(o) {
294
+ return o && Object.prototype.toString.call(o) === '[object RegExp]'
295
+ }
296
+
297
+ export default {
298
+ email,
299
+ mobile,
300
+ url,
301
+ date,
302
+ dateISO,
303
+ number,
304
+ digits,
305
+ idCard,
306
+ carNo,
307
+ amount,
308
+ chinese,
309
+ letter,
310
+ enOrNum,
311
+ contains,
312
+ range,
313
+ rangeLength,
314
+ empty,
315
+ isEmpty: empty,
316
+ jsonString,
317
+ landline,
318
+ object,
319
+ array,
320
+ code,
321
+ func,
322
+ promise,
323
+ video,
324
+ image,
325
+ regExp,
326
+ string
327
+ }
@@ -0,0 +1,2 @@
1
+ /** i18n 轻量翻译(JS 实现,此处仅提供类型) */
2
+ export declare function t(key: string, ...args: any[]): string
@@ -0,0 +1,89 @@
1
+ import zhHans from './locales/zh-Hans.js'
2
+
3
+ const settings = {
4
+ lang: typeof uni !== 'undefined' && typeof uni.getLocale === 'function'
5
+ ? uni.getLocale()
6
+ : 'zh-Hans',
7
+ locales: {
8
+ 'zh-Hans': zhHans
9
+ }
10
+ }
11
+
12
+ if (typeof uni !== 'undefined' && typeof uni.onLocaleChange === 'function') {
13
+ uni.onLocaleChange((locale) => {
14
+ // uni-app 部分平台回调可能是字符串,也可能是 { locale }
15
+ settings.lang = typeof locale === 'string'
16
+ ? locale
17
+ : (locale && locale.locale) || settings.lang
18
+ })
19
+ }
20
+
21
+ function isPlainObject(value) {
22
+ return Object.prototype.toString.call(value) === '[object Object]'
23
+ }
24
+
25
+ export function hasLocale(locale) {
26
+ return !!(locale && settings.locales[locale])
27
+ }
28
+
29
+ export function getLocale() {
30
+ return settings.lang
31
+ }
32
+
33
+ export function setLocale(locale) {
34
+ if (!locale || typeof locale !== 'string') return settings.lang
35
+ settings.lang = locale
36
+ if (typeof uni !== 'undefined' && typeof uni.setLocale === 'function') {
37
+ try {
38
+ uni.setLocale(locale)
39
+ } catch (e) {
40
+ // 部分平台 setLocale 可能受限,忽略以保持 set 内部状态成功
41
+ }
42
+ }
43
+ return settings.lang
44
+ }
45
+
46
+ /**
47
+ * 注册语言包
48
+ * registerLocale('en', messages)
49
+ * registerLocale({ en: messages, ja: messages2 })
50
+ */
51
+ export function registerLocale(localeOrMap, messages) {
52
+ if (typeof localeOrMap === 'string') {
53
+ if (!localeOrMap || !isPlainObject(messages)) return
54
+ settings.locales[localeOrMap] = messages
55
+ return
56
+ }
57
+ if (!isPlainObject(localeOrMap)) return
58
+ Object.keys(localeOrMap).forEach((key) => {
59
+ const value = localeOrMap[key]
60
+ if (isPlainObject(value)) {
61
+ settings.locales[key] = value
62
+ }
63
+ })
64
+ }
65
+
66
+ /**
67
+ * 多语言方法
68
+ */
69
+ export function t(value, params = {}) {
70
+ if (value) {
71
+ let lang = settings.lang
72
+ if (!settings.locales[settings.lang]) {
73
+ lang = 'zh-Hans'
74
+ }
75
+ let result = settings.locales[lang][value] || value
76
+ if (params && typeof params === 'object') {
77
+ Object.keys(params).forEach((key) => {
78
+ const reg = new RegExp(`{${key}}`, 'g')
79
+ result = String(result).replace(reg, params[key])
80
+ })
81
+ }
82
+ return result
83
+ }
84
+ return value
85
+ }
86
+
87
+ export default {
88
+ settings
89
+ }
@@ -0,0 +1,86 @@
1
+ export default {
2
+ "dd.common.cancel": "取消",
3
+ "dd.common.confirm": "确定",
4
+ "dd.common.start": "开始",
5
+ "dd.common.end": "结束",
6
+ "dd.common.stop": "停止",
7
+ "dd.common.copy": "复制",
8
+ "dd.common.none": "暂无",
9
+ "dd.common.tip": "提示",
10
+ "dd.common.success": "成功",
11
+ "dd.common.fail": "失败",
12
+ "dd.common.close": "关闭",
13
+ "dd.common.preview": "预览",
14
+ "dd.common.re-select": "重选",
15
+ "dd.common.rotate": "旋转",
16
+ "dd.common.pleaseChoose": "请选择",
17
+ "dd.common.loading": "加载中",
18
+ "dd.common.loading2": "正在加载",
19
+ "dd.common.inOperation": "操作中",
20
+ "dd.common.settings": "设置",
21
+ "dd.common.retry": "重试",
22
+ "dd.common.search": "搜索",
23
+ "dd.common.more": "更多",
24
+ "dd.common.video": "视频",
25
+ "dd.common.file": "文件",
26
+ "dd.week.one": "一",
27
+ "dd.week.two": "二",
28
+ "dd.week.three": "三",
29
+ "dd.week.four": "四",
30
+ "dd.week.five": "五",
31
+ "dd.week.six": "六",
32
+ "dd.week.seven": "日",
33
+ "dd.barcode.error": "生成条码失败",
34
+ "dd.calendar.chooseDates": "日期选择",
35
+ "dd.calendar.disabled": "该日期已禁用",
36
+ "dd.calendar.daysExceed": "选择天数不能超过{days}天",
37
+ "dd.calendar.today": "今天",
38
+ "dd.cityLocate.locateCity": "定位城市",
39
+ "dd.cityLocate.fail": "定位失败,请点击重试。",
40
+ "dd.cityLocate.locating": "定位中",
41
+ "dd.code.send": "获取验证码",
42
+ "dd.code.resendAfter": "X秒重新获取",
43
+ "dd.code.resend": "重新获取",
44
+ "dd.cropper.emptyWidhtOrHeight": "裁剪框的宽或高没有设置",
45
+ "dd.empty.car": "购物车为空",
46
+ "dd.empty.page": "页面不存在",
47
+ "dd.empty.search": "没有搜索结果",
48
+ "dd.empty.address": "没有收货地址",
49
+ "dd.empty.wifi": "没有WiFi",
50
+ "dd.empty.order": "订单为空",
51
+ "dd.empty.coupon": "没有优惠券",
52
+ "dd.empty.favor": "暂无收藏",
53
+ "dd.empty.permission": "无权限",
54
+ "dd.empty.history": "无历史记录",
55
+ "dd.empty.news": "无新闻列表",
56
+ "dd.empty.message": "消息列表为空",
57
+ "dd.empty.list": "列表为空",
58
+ "dd.empty.data": "数据为空",
59
+ "dd.empty.comment": "暂无评论",
60
+ "dd.link.copyed": "链接已复制,请在浏览器打开",
61
+ "dd.loadmoe.loadmore": "加载更多",
62
+ "dd.loadmoe.nomore": "没有更多了",
63
+ "dd.noNetwork.text": "哎呀,网络信号丢失",
64
+ "dd.noNetwork.pleaseCheck": "请检查网络,或前往",
65
+ "dd.noNetwork.connect": "网络已连接",
66
+ "dd.noNetwork.disconnect": "无网络连接",
67
+ "dd.pagination.previous": "上一页",
68
+ "dd.pagination.next": "下一页",
69
+ "dd.pullRefresh.pull": "下拉刷新",
70
+ "dd.pullRefresh.release": "释放刷新",
71
+ "dd.pullRefresh.refreshing": "正在刷新",
72
+ "dd.readMore.expand": "展开阅读全文",
73
+ "dd.readMore.fold": "收起",
74
+ "dd.search.placeholder": "请输入关键字",
75
+ "dd.signature.penSize": "笔画大小",
76
+ "dd.signature.penColor": "笔画颜色",
77
+ "dd.upload.sizeExceed": "超过大小限制",
78
+ "dd.upload.uploading": "上传中",
79
+ "dd.upload.previewImageFail": "预览图片失败",
80
+ "dd.upload.previewVideoFail": "预览视频失败",
81
+ "dd.goodsSku.stock": "库存",
82
+ "dd.goodsSku.price": "价格",
83
+ "dd.goodsSku.amount": "件",
84
+ "dd.goodsSku.choosed": "已选",
85
+ "dd.goodsSku.buyAmount": "购买数量"
86
+ }
@@ -0,0 +1,18 @@
1
+ import { defineMixin } from '../vue'
2
+
3
+ export const buttonMixin = defineMixin({
4
+ props: {
5
+ lang: String,
6
+ sessionFrom: String,
7
+ sendMessageTitle: String,
8
+ sendMessagePath: String,
9
+ sendMessageImg: String,
10
+ showMessageCard: Boolean,
11
+ appParameter: String,
12
+ formType: String,
13
+ openType: String
14
+ }
15
+ })
16
+
17
+ export default buttonMixin
18
+
@@ -0,0 +1,44 @@
1
+ // ponytail: 组件库基础 mixin 的轻量版——只保留组件实际消费的能力
2
+ // (props customStyle/customClass/url/linkType、getRect)。
3
+ // 不携带运行时主题注入,DidaoUI 用 scss 变量体系,不需要。
4
+ import { defineMixin } from '../vue'
5
+
6
+ export const mixin = defineMixin({
7
+ props: {
8
+ customStyle: {
9
+ type: [Object, String],
10
+ default: () => ({})
11
+ },
12
+ customClass: {
13
+ type: String,
14
+ default: ''
15
+ },
16
+ url: {
17
+ type: String,
18
+ default: ''
19
+ },
20
+ linkType: {
21
+ type: String,
22
+ default: 'navigateTo'
23
+ }
24
+ },
25
+ methods: {
26
+ // 查询组件内节点信息
27
+ async getRect(selector, all = false) {
28
+ const inst = uni.createSelectorQuery().in(this)
29
+ const q = all ? inst.selectAll(selector) : inst.select(selector)
30
+ return new Promise((resolve) => {
31
+ q.boundingClientRect((rect) => {
32
+ resolve(all && Array.isArray(rect) && rect.length ? rect : rect)
33
+ }).exec()
34
+ })
35
+ },
36
+ // 空操作:键盘等组件模板 @touchmove.stop.prevent="noop" 依赖此方法,
37
+ // 缺失时 handler 为 undefined 会在渲染期抛 _withMods 错误
38
+ noop(e) {
39
+ e && typeof e.stopPropagation === 'function' && e.stopPropagation()
40
+ }
41
+ }
42
+ })
43
+
44
+ export default mixin
@@ -0,0 +1,13 @@
1
+ import { defineMixin } from '../vue'
2
+
3
+ export const mpMixin = defineMixin({
4
+ // #ifdef MP-WEIXIN
5
+ // 将自定义节点设置成虚拟的,更加接近Vue组件的表现,能更好的使用flex属性
6
+ options: {
7
+ virtualHost: true
8
+ }
9
+ // #endif
10
+ })
11
+
12
+ export default mpMixin
13
+
@@ -0,0 +1,27 @@
1
+ import { defineMixin } from '../vue'
2
+
3
+ export const openType = defineMixin({
4
+ props: {
5
+ openType: String
6
+ },
7
+ methods: {
8
+ onGetUserInfo(event) {
9
+ this.$emit('getuserinfo', event.detail)
10
+ },
11
+ onContact(event) {
12
+ this.$emit('contact', event.detail)
13
+ },
14
+ onGetPhoneNumber(event) {
15
+ this.$emit('getphonenumber', event.detail)
16
+ },
17
+ onError(event) {
18
+ this.$emit('error', event.detail)
19
+ },
20
+ onLaunchApp(event) {
21
+ this.$emit('launchapp', event.detail)
22
+ },
23
+ onOpenSetting(event) {
24
+ this.$emit('opensetting', event.detail)
25
+ }
26
+ }
27
+ })