hy-app 0.5.9 → 0.5.11

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 (290) hide show
  1. package/components/hy-action-sheet/hy-action-sheet.vue +200 -200
  2. package/components/hy-action-sheet/props.ts +71 -71
  3. package/components/hy-action-sheet/typing.d.ts +64 -64
  4. package/components/hy-address-picker/hy-address-picker.vue +1 -1
  5. package/components/hy-address-picker/props.ts +100 -100
  6. package/components/hy-address-picker/typing.d.ts +16 -16
  7. package/components/hy-avatar/hy-avatar.vue +163 -163
  8. package/components/hy-avatar/props.ts +78 -78
  9. package/components/hy-avatar/typing.d.ts +4 -4
  10. package/components/hy-back-top/hy-back-top.vue +90 -90
  11. package/components/hy-back-top/props.ts +60 -60
  12. package/components/hy-back-top/typing.d.ts +4 -4
  13. package/components/hy-badge/hy-badge.vue +97 -97
  14. package/components/hy-badge/props.ts +82 -82
  15. package/components/hy-badge/typing.d.ts +9 -9
  16. package/components/hy-button/hy-button.vue +275 -275
  17. package/components/hy-button/props.ts +135 -135
  18. package/components/hy-button/typing.d.ts +30 -30
  19. package/components/hy-calendar/header.vue +60 -60
  20. package/components/hy-calendar/hy-calendar.vue +362 -362
  21. package/components/hy-calendar/month.vue +537 -537
  22. package/components/hy-calendar/props.ts +159 -159
  23. package/components/hy-calendar/typing.d.ts +6 -6
  24. package/components/hy-card/hy-card.vue +161 -161
  25. package/components/hy-card/props.ts +122 -122
  26. package/components/hy-card/typing.d.ts +12 -12
  27. package/components/hy-cell/hy-cell.vue +33 -33
  28. package/components/hy-cell/props.ts +54 -54
  29. package/components/hy-cell/typing.d.ts +4 -4
  30. package/components/hy-cell-item/hy-cell-item.vue +161 -161
  31. package/components/hy-cell-item/props.ts +66 -66
  32. package/components/hy-cell-item/typing.d.ts +7 -7
  33. package/components/hy-check-button/hy-check-button.vue +96 -96
  34. package/components/hy-check-button/props.ts +74 -74
  35. package/components/hy-check-button/typing.d.ts +44 -44
  36. package/components/hy-checkbox/hy-checkbox.vue +227 -227
  37. package/components/hy-checkbox/props.ts +96 -96
  38. package/components/hy-checkbox/typing.d.ts +8 -8
  39. package/components/hy-checkbox-group/hy-checkbox-group.vue +45 -45
  40. package/components/hy-checkbox-group/props.ts +80 -80
  41. package/components/hy-checkbox-group/typing.d.ts +6 -6
  42. package/components/hy-checkbox-item/hy-checkbox-item.vue +199 -199
  43. package/components/hy-checkbox-item/props.ts +24 -24
  44. package/components/hy-checkbox-item/typing.d.ts +7 -7
  45. package/components/hy-code-input/hy-code-input.vue +231 -231
  46. package/components/hy-code-input/props.ts +88 -88
  47. package/components/hy-code-input/typing.d.ts +8 -8
  48. package/components/hy-config-provider/hy-config-provider.vue +53 -53
  49. package/components/hy-config-provider/props.ts +28 -28
  50. package/components/hy-count-down/hy-count-down.vue +170 -170
  51. package/components/hy-count-down/index.ts +52 -52
  52. package/components/hy-count-down/props.ts +32 -32
  53. package/components/hy-count-down/typing.d.ts +14 -14
  54. package/components/hy-count-to/hy-count-to.vue +218 -218
  55. package/components/hy-count-to/props.ts +62 -62
  56. package/components/hy-count-to/typing.d.ts +4 -4
  57. package/components/hy-coupon/hy-coupon.vue +172 -172
  58. package/components/hy-coupon/index.scss +171 -171
  59. package/components/hy-coupon/props.ts +103 -103
  60. package/components/hy-coupon/typing.d.ts +14 -14
  61. package/components/hy-datetime-picker/hy-datetime-picker.vue +521 -521
  62. package/components/hy-datetime-picker/props.ts +142 -142
  63. package/components/hy-datetime-picker/typing.d.ts +20 -20
  64. package/components/hy-divider/hy-divider.vue +132 -132
  65. package/components/hy-divider/props.ts +80 -80
  66. package/components/hy-dropdown/hy-dropdown.vue +60 -60
  67. package/components/hy-dropdown/props.ts +40 -40
  68. package/components/hy-dropdown-item/hy-dropdown-item.vue +206 -206
  69. package/components/hy-dropdown-item/props.ts +21 -21
  70. package/components/hy-dropdown-item/typing.d.ts +17 -17
  71. package/components/hy-empty/hy-empty.vue +116 -116
  72. package/components/hy-empty/icon.ts +72 -72
  73. package/components/hy-empty/props.ts +60 -60
  74. package/components/hy-empty/typing.d.ts +38 -38
  75. package/components/hy-flex/hy-flex.vue +53 -53
  76. package/components/hy-flex/index.scss +8 -8
  77. package/components/hy-flex/props.ts +58 -58
  78. package/components/hy-flex/typing.d.ts +21 -21
  79. package/components/hy-float-button/hy-float-button.vue +378 -378
  80. package/components/hy-float-button/props.ts +111 -111
  81. package/components/hy-float-button/typing.d.ts +35 -35
  82. package/components/hy-folding-panel/hy-folding-panel.vue +109 -109
  83. package/components/hy-folding-panel/props.ts +42 -42
  84. package/components/hy-folding-panel/typing.d.ts +19 -19
  85. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +183 -183
  86. package/components/hy-folding-panel-item/props.ts +81 -81
  87. package/components/hy-folding-panel-item/typing.d.ts +37 -37
  88. package/components/hy-form/hy-form.vue +220 -220
  89. package/components/hy-form/props.ts +37 -37
  90. package/components/hy-form/typing.d.ts +41 -41
  91. package/components/hy-form-group/hy-form-group.vue +333 -333
  92. package/components/hy-form-group/props.ts +105 -105
  93. package/components/hy-form-item/hy-form-item.vue +176 -176
  94. package/components/hy-form-item/index.scss +0 -1
  95. package/components/hy-form-item/props.ts +25 -25
  96. package/components/hy-form-item/typing.d.ts +30 -30
  97. package/components/hy-grid/hy-grid.vue +109 -109
  98. package/components/hy-grid/props.ts +60 -60
  99. package/components/hy-grid/typing.d.ts +35 -35
  100. package/components/hy-icon/hy-icon.vue +112 -112
  101. package/components/hy-icon/index.scss +0 -3
  102. package/components/hy-icon/props.ts +79 -79
  103. package/components/hy-icon/typing.d.ts +9 -9
  104. package/components/hy-image/hy-image.vue +192 -192
  105. package/components/hy-image/props.ts +107 -107
  106. package/components/hy-image/typing.d.ts +10 -10
  107. package/components/hy-input/hy-input.vue +333 -333
  108. package/components/hy-input/index.scss +5 -0
  109. package/components/hy-input/props.ts +186 -186
  110. package/components/hy-input/typing.d.ts +31 -31
  111. package/components/hy-line/hy-line.vue +55 -55
  112. package/components/hy-line/props.ts +43 -43
  113. package/components/hy-line-progress/hy-line-progress.vue +102 -102
  114. package/components/hy-line-progress/index.scss +1 -0
  115. package/components/hy-line-progress/props.ts +33 -33
  116. package/components/hy-list/hy-list.vue +226 -226
  117. package/components/hy-list/props.ts +69 -69
  118. package/components/hy-list/typing.d.ts +6 -6
  119. package/components/hy-loading/hy-loading.vue +107 -107
  120. package/components/hy-loading/props.ts +65 -65
  121. package/components/hy-menu/hy-menu.vue +159 -159
  122. package/components/hy-menu/props.ts +44 -44
  123. package/components/hy-menu/typing.d.ts +34 -34
  124. package/components/hy-modal/hy-modal.vue +173 -173
  125. package/components/hy-modal/props.ts +90 -90
  126. package/components/hy-modal/typing.d.ts +11 -11
  127. package/components/hy-navbar/hy-navbar.vue +144 -144
  128. package/components/hy-navbar/props.ts +78 -78
  129. package/components/hy-navbar/typing.d.ts +6 -6
  130. package/components/hy-notice-bar/hy-column-notice.vue +94 -94
  131. package/components/hy-notice-bar/hy-notice-bar.vue +96 -96
  132. package/components/hy-notice-bar/hy-row-notice.vue +121 -121
  133. package/components/hy-notice-bar/props.ts +85 -85
  134. package/components/hy-notice-bar/typing.d.ts +8 -8
  135. package/components/hy-notify/hy-notify.vue +174 -174
  136. package/components/hy-notify/props.ts +51 -51
  137. package/components/hy-number-step/hy-number-step.vue +367 -367
  138. package/components/hy-number-step/props.ts +112 -112
  139. package/components/hy-number-step/typing.d.ts +16 -16
  140. package/components/hy-overlay/hy-overlay.vue +60 -60
  141. package/components/hy-overlay/props.ts +33 -33
  142. package/components/hy-overlay/typing.d.ts +4 -4
  143. package/components/hy-pagination/hy-pagination.vue +135 -135
  144. package/components/hy-pagination/props.ts +55 -55
  145. package/components/hy-pagination/typing.d.ts +10 -10
  146. package/components/hy-picker/hy-picker.vue +7 -5
  147. package/components/hy-picker/props.ts +7 -2
  148. package/components/hy-picker/typing.d.ts +9 -5
  149. package/components/hy-popover/hy-popover.vue +251 -251
  150. package/components/hy-popover/props.ts +51 -51
  151. package/components/hy-popover/typing.d.ts +39 -39
  152. package/components/hy-popup/hy-popup.vue +197 -197
  153. package/components/hy-popup/props.ts +85 -85
  154. package/components/hy-popup/typing.d.ts +10 -10
  155. package/components/hy-price/hy-price.vue +79 -79
  156. package/components/hy-price/props.ts +54 -54
  157. package/components/hy-price/typing.d.ts +4 -4
  158. package/components/hy-qrcode/hy-qrcode.vue +216 -216
  159. package/components/hy-qrcode/props.ts +70 -70
  160. package/components/hy-qrcode/qrcode.js +1304 -1304
  161. package/components/hy-qrcode/typing.d.ts +8 -8
  162. package/components/hy-radio/hy-radio.vue +226 -226
  163. package/components/hy-radio/props.ts +1 -1
  164. package/components/hy-radio/typing.d.ts +8 -8
  165. package/components/hy-rate/hy-rate.vue +239 -239
  166. package/components/hy-rate/props.ts +77 -77
  167. package/components/hy-rate/typing.d.ts +6 -6
  168. package/components/hy-read-more/hy-read-more.vue +130 -130
  169. package/components/hy-read-more/props.ts +45 -45
  170. package/components/hy-read-more/typing.d.ts +6 -6
  171. package/components/hy-rolling-num/hy-rolling-num.vue +188 -188
  172. package/components/hy-rolling-num/props.ts +68 -68
  173. package/components/hy-scroll-list/hy-scroll-list.vue +123 -123
  174. package/components/hy-scroll-list/props.ts +22 -22
  175. package/components/hy-scroll-list/typing.d.ts +6 -6
  176. package/components/hy-search/hy-search.vue +221 -221
  177. package/components/hy-search/props.ts +131 -131
  178. package/components/hy-search/typing.d.ts +22 -22
  179. package/components/hy-signature/hy-signature.vue +640 -640
  180. package/components/hy-signature/props.ts +118 -118
  181. package/components/hy-signature/typing.d.ts +93 -93
  182. package/components/hy-slider/hy-slider.vue +444 -444
  183. package/components/hy-slider/props.ts +77 -77
  184. package/components/hy-slider/typing.d.ts +10 -10
  185. package/components/hy-status-bar/hy-status-bar.vue +41 -41
  186. package/components/hy-status-bar/props.ts +8 -8
  187. package/components/hy-status-bar/typing.d.ts +12 -12
  188. package/components/hy-steps/hy-steps.vue +267 -267
  189. package/components/hy-steps/props.ts +49 -49
  190. package/components/hy-steps/typing.d.ts +21 -21
  191. package/components/hy-sticky/hy-sticky.vue +226 -226
  192. package/components/hy-sticky/props.ts +24 -24
  193. package/components/hy-sticky/typing.d.ts +4 -4
  194. package/components/hy-submit-bar/hy-submit-bar.vue +189 -189
  195. package/components/hy-submit-bar/props.ts +91 -91
  196. package/components/hy-submit-bar/typing.d.ts +24 -24
  197. package/components/hy-subsection/hy-subsection.vue +207 -207
  198. package/components/hy-subsection/props.ts +52 -52
  199. package/components/hy-subsection/typing.d.ts +13 -13
  200. package/components/hy-swipe-action/hy-swipe-action.vue +323 -323
  201. package/components/hy-swipe-action/index.ts +25 -25
  202. package/components/hy-swipe-action/props.ts +47 -47
  203. package/components/hy-swipe-action/typing.d.ts +25 -25
  204. package/components/hy-swiper/hy-swiper-indicator.vue +75 -75
  205. package/components/hy-swiper/hy-swiper.vue +224 -224
  206. package/components/hy-swiper/props.ts +128 -128
  207. package/components/hy-swiper/typing.d.ts +26 -26
  208. package/components/hy-switch/hy-switch.vue +173 -173
  209. package/components/hy-switch/props.ts +61 -61
  210. package/components/hy-switch/typing.d.ts +8 -8
  211. package/components/hy-tabbar/hy-tabbar.vue +136 -136
  212. package/components/hy-tabbar/props.ts +59 -59
  213. package/components/hy-tabbar/typing.d.ts +21 -21
  214. package/components/hy-tabbar-group/hy-tabbar-group.vue +87 -87
  215. package/components/hy-tabbar-group/props.ts +78 -78
  216. package/components/hy-tabbar-group/typing.d.ts +16 -16
  217. package/components/hy-tabbar-item/hy-tabbar-item.vue +103 -103
  218. package/components/hy-tabbar-item/typing.d.ts +10 -10
  219. package/components/hy-table/hy-table.vue +358 -358
  220. package/components/hy-table/props.ts +47 -47
  221. package/components/hy-table/typing.d.ts +34 -34
  222. package/components/hy-tabs/hy-tabs.vue +335 -335
  223. package/components/hy-tabs/props.ts +77 -77
  224. package/components/hy-tabs/typing.d.ts +33 -33
  225. package/components/hy-tag/hy-tag.vue +174 -174
  226. package/components/hy-tag/props.ts +89 -89
  227. package/components/hy-tag/typing.d.ts +13 -13
  228. package/components/hy-text/hy-text.vue +237 -237
  229. package/components/hy-text/props.ts +115 -115
  230. package/components/hy-text/typing.d.ts +6 -6
  231. package/components/hy-textarea/hy-textarea.vue +197 -197
  232. package/components/hy-textarea/index.scss +5 -0
  233. package/components/hy-textarea/props.ts +116 -116
  234. package/components/hy-textarea/typing.d.ts +22 -22
  235. package/components/hy-toast/hy-toast.vue +190 -190
  236. package/components/hy-toast/typing.d.ts +38 -38
  237. package/components/hy-tooltip/hy-tooltip.vue +277 -277
  238. package/components/hy-tooltip/props.ts +78 -78
  239. package/components/hy-tooltip/typing.d.ts +4 -4
  240. package/components/hy-transition/hy-transition.vue +157 -157
  241. package/components/hy-transition/props.ts +32 -32
  242. package/components/hy-transition/typing.d.ts +16 -16
  243. package/components/hy-upload/hy-upload.vue +385 -385
  244. package/components/hy-upload/props.ts +132 -132
  245. package/components/hy-upload/typing.d.ts +65 -65
  246. package/components/hy-warn/hy-warn.vue +115 -115
  247. package/components/hy-warn/props.ts +49 -49
  248. package/components/hy-warn/typing.d.ts +6 -6
  249. package/components/hy-waterfall/hy-waterfall.vue +191 -191
  250. package/components/hy-waterfall/props.ts +21 -21
  251. package/components/hy-watermark/hy-watermark.vue +978 -978
  252. package/components/hy-watermark/props.ts +104 -104
  253. package/components/index.ts +183 -183
  254. package/global.d.ts +91 -91
  255. package/index.ts +1 -1
  256. package/libs/api/http.ts +140 -140
  257. package/libs/api/index.ts +1 -1
  258. package/libs/common/index.ts +2 -2
  259. package/libs/common/queue.ts +28 -28
  260. package/libs/composables/index.ts +6 -6
  261. package/libs/composables/usePopover.ts +241 -241
  262. package/libs/composables/useQueue.ts +53 -53
  263. package/libs/composables/useShakeService.ts +64 -64
  264. package/libs/composables/useShare.ts +42 -42
  265. package/libs/composables/useToast.ts +45 -45
  266. package/libs/composables/useTouch.ts +51 -51
  267. package/libs/config/color.ts +7 -7
  268. package/libs/config/icon.ts +430 -430
  269. package/libs/config/index.ts +2 -2
  270. package/libs/css/iconfont.css +443 -443
  271. package/libs/css/theme.scss +1 -1
  272. package/libs/global/index.ts +6 -6
  273. package/libs/global/register-properties.ts +37 -37
  274. package/libs/index.ts +7 -7
  275. package/libs/typing/index.ts +4 -4
  276. package/libs/typing/modules/common.d.ts +139 -139
  277. package/libs/typing/modules/enum.ts +67 -67
  278. package/libs/typing/modules/form.ts +5 -1
  279. package/libs/typing/modules/http.ts +17 -17
  280. package/libs/typing/modules/icon.d.ts +366 -366
  281. package/libs/typing/modules/rect.ts +10 -10
  282. package/libs/utils/base64.ts +119 -119
  283. package/libs/utils/calendar.js +1021 -1021
  284. package/libs/utils/colorGradient.ts +112 -112
  285. package/libs/utils/index.ts +5 -5
  286. package/libs/utils/inside.ts +350 -361
  287. package/libs/utils/inspect.ts +171 -171
  288. package/libs/utils/utils.ts +521 -521
  289. package/package.json +18 -18
  290. package/web-types.json +1 -1
@@ -1,361 +1,350 @@
1
- // 内部使用方法
2
- import { inject } from "vue";
3
-
4
- /**
5
- * 生成bem规则类名
6
- * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
7
- * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
8
- * @param {String} name 组件名称
9
- * @param props
10
- * @param {Array} fixed 一直会存在的类名
11
- * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
12
- * @returns {Array|string}
13
- */
14
- export const bem = (
15
- name: string,
16
- props: Record<string, any>,
17
- fixed: string[],
18
- change?: string[],
19
- ): string | string[] => {
20
- // 类名前缀
21
- const prefix = `hy-${name}--`;
22
- const classes: Record<string, string | boolean> = {};
23
- if (fixed) {
24
- fixed.map((item: string) => {
25
- // 这里的类名,会一直存在
26
- classes[prefix + props[item]] = true;
27
- if (item === "type" && props["plain"]) {
28
- classes[prefix + props[item] + "__plain"] = true;
29
- }
30
- });
31
- }
32
- if (change) {
33
- change.map((item: string) => {
34
- // 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类
35
- props[item]
36
- ? (classes[prefix + item] = props[item])
37
- : delete classes[prefix + item];
38
- });
39
- }
40
- return (
41
- Object.keys(classes)
42
- // 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
43
- // #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK
44
- .join(" ")
45
- // #endif
46
- );
47
- };
48
-
49
- /**
50
- * @description 在u-form的子组件内容发生变化,或者失去焦点时,尝试通知u-form执行校验方法
51
- * @param {*} instance
52
- * @param {*} event
53
- */
54
- export function formValidate(event) {
55
- // const formItem = $parent.call(instance, "u-form-item");
56
- const form = inject("uForm");
57
- // 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法
58
- // 同时将form-item的pros传递给form,让其进行精确对象验证
59
- // if (formItem && form) {
60
- // form.validateField(formItem.prop, () => {}, event);
61
- // }
62
- }
63
-
64
- /**
65
- * @description error提示
66
- * @param {*} err 错误内容
67
- */
68
- export function error(err: string) {
69
- // 开发环境才提示,生产环境不会提示
70
- if (process.env.NODE_ENV === "development") {
71
- console.error(`华玥组件提示:${err}`);
72
- }
73
- }
74
-
75
- export const sleep = (value = 100) => {
76
- return new Promise((resolve) => {
77
- setTimeout(() => {
78
- resolve();
79
- }, value);
80
- });
81
- };
82
-
83
- /**
84
- * @param {Number} len uuid的长度
85
- * @param {Boolean} firstU 将返回的首字母置为"u"
86
- * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
87
- */
88
- export function guid(len = 32, firstU = true, radix = null) {
89
- const chars =
90
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
91
- const uuid = [];
92
- radix = radix || chars.length;
93
-
94
- if (len) {
95
- // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
96
- for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];
97
- } else {
98
- let r;
99
- // rfc4122标准要求返回的uuid中,某些位为固定的字符
100
- uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
101
- uuid[14] = "4";
102
-
103
- for (let i = 0; i < 36; i++) {
104
- if (!uuid[i]) {
105
- r = 0 | (Math.random() * 16);
106
- uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
107
- }
108
- }
109
- }
110
- // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
111
- if (firstU) {
112
- uuid.shift();
113
- return `hy${uuid.join("")}`;
114
- }
115
- return uuid.join("");
116
- }
117
-
118
- /**
119
- * @description 获取设备信息
120
- * */
121
- export const getWindowInfo = (): UniNamespace.GetWindowInfoResult => {
122
- let ret: UniNamespace.GetWindowInfoResult;
123
- // #ifdef APP || H5
124
- ret = uni.getWindowInfo();
125
- // #endif
126
- // #ifndef APP || H5
127
- ret = uni.getSystemInfoSync();
128
- // #endif
129
- return ret;
130
- };
131
-
132
- function pickExclude(obj, keys) {
133
- // 某些情况下,type可能会为
134
- if (
135
- !["[object Object]", "[object File]"].includes(
136
- Object.prototype.toString.call(obj),
137
- )
138
- ) {
139
- return {};
140
- }
141
- return Object.keys(obj).reduce((prev, key) => {
142
- if (!keys.includes(key)) {
143
- prev[key] = obj[key];
144
- }
145
- return prev;
146
- }, {});
147
- }
148
-
149
- function formatImage(res) {
150
- return res.tempFiles.map((item) => ({
151
- ...pickExclude(item, ["path"]),
152
- type: "image",
153
- url: item.path,
154
- thumb: item.path,
155
- size: item.size,
156
- // #ifdef H5
157
- name: item.name,
158
- file: item,
159
- // #endif
160
- }));
161
- }
162
-
163
- function formatVideo(res) {
164
- return [
165
- {
166
- ...pickExclude(res, ["tempFilePath", "thumbTempFilePath", "errMsg"]),
167
- type: "video",
168
- url: res.tempFilePath,
169
- thumb: res.thumbTempFilePath,
170
- size: res.size,
171
- // #ifdef H5
172
- name: res.name,
173
- file: res,
174
- // #endif
175
- },
176
- ];
177
- }
178
-
179
- function formatMedia(res) {
180
- return res.tempFiles.map((item) => ({
181
- ...pickExclude(item, ["fileType", "thumbTempFilePath", "tempFilePath"]),
182
- type: res.type,
183
- url: item.tempFilePath,
184
- thumb: res.type === "video" ? item.thumbTempFilePath : item.tempFilePath,
185
- size: item.size,
186
- // #ifdef H5
187
- file: item,
188
- // #endif
189
- }));
190
- }
191
-
192
- function formatFile(res) {
193
- return res.tempFiles.map((item) => ({
194
- ...pickExclude(item, ["path"]),
195
- url: item.path,
196
- size: item.size,
197
- // #ifdef H5
198
- name: item.name,
199
- type: item.type,
200
- file: item,
201
- // #endif
202
- }));
203
- }
204
-
205
- export function chooseFile({
206
- accept,
207
- multiple,
208
- capture,
209
- compressed,
210
- maxDuration,
211
- sizeType,
212
- camera,
213
- maxCount,
214
- extension,
215
- }: any) {
216
- return new Promise((resolve, reject) => {
217
- switch (accept) {
218
- case "image":
219
- uni.chooseImage({
220
- count: multiple ? Math.min(maxCount, 9) : 1,
221
- sourceType: capture,
222
- sizeType,
223
- success: (res) => resolve(formatImage(res)),
224
- fail: reject,
225
- });
226
- break;
227
- // #ifdef MP-WEIXIN
228
- // 只有微信小程序才支持chooseMedia接口
229
- case "media":
230
- wx.chooseMedia({
231
- count: multiple ? Math.min(maxCount, 9) : 1,
232
- sourceType: capture,
233
- maxDuration,
234
- sizeType,
235
- camera,
236
- success: (res) => resolve(formatMedia(res)),
237
- fail: reject,
238
- });
239
- break;
240
- // #endif
241
- case "video":
242
- uni.chooseVideo({
243
- sourceType: capture,
244
- compressed,
245
- maxDuration,
246
- camera,
247
- success: (res) => resolve(formatVideo(res)),
248
- fail: reject,
249
- });
250
- break;
251
- // #ifdef MP-WEIXIN || H5
252
- // 只有微信小程序才支持chooseMessageFile接口
253
- case "file":
254
- // #ifdef MP-WEIXIN
255
- wx.chooseMessageFile({
256
- count: multiple ? maxCount : 1,
257
- type: accept,
258
- success: (res) => resolve(formatFile(res)),
259
- fail: reject,
260
- });
261
- // #endif
262
- // #ifdef H5
263
- // 需要hx2.9.9以上才支持uni.chooseFile
264
- let params = {
265
- count: multiple ? maxCount : 1,
266
- type: accept,
267
- success: (res) => resolve(formatFile(res)),
268
- fail: reject,
269
- };
270
- if (extension.length && extension.length > 0) {
271
- params.extension = extension;
272
- }
273
- uni.chooseFile(params);
274
- // #endif
275
- break;
276
- // #endif
277
- default:
278
- // 此为保底选项,在accept不为上面任意一项的时候选取全部文件
279
- // #ifdef MP-WEIXIN
280
- wx.chooseMessageFile({
281
- count: multiple ? maxCount : 1,
282
- type: "all",
283
- success: (res) => resolve(formatFile(res)),
284
- fail: reject,
285
- });
286
- // #endif
287
- // #ifdef H5
288
- // 需要hx2.9.9以上才支持uni.chooseFile
289
- let paramsFile = {
290
- count: multiple ? maxCount : 1,
291
- type: "all",
292
- success: (res) => resolve(formatFile(res)),
293
- fail: reject,
294
- };
295
- if (extension.length && extension.length > 0) {
296
- paramsFile.extension = extension;
297
- }
298
- uni.chooseFile(paramsFile);
299
- // #endif
300
- }
301
- });
302
- }
303
-
304
- /**
305
- * @description 数字格式化
306
- * @param {number|string} number 要格式化的数字
307
- * @param {number} decimals 保留几位小数
308
- * @param {string} decimalPoint 小数点符号
309
- * @param {string} thousandsSeparator 千分位符号
310
- * @returns {string} 格式化后的数字
311
- */
312
- export function priceFormat(
313
- number: string | number,
314
- decimals = 0,
315
- decimalPoint = ".",
316
- thousandsSeparator = ",",
317
- ) {
318
- number = `${number}`.replace(/[^0-9+-Ee.]/g, "");
319
- const n = !isFinite(+number) ? 0 : +number;
320
- const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
321
- const sep =
322
- typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
323
- const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
324
- let s = "";
325
-
326
- s = (prec ? n + "" : `${Math.round(n)}`).split(".");
327
- const re = /(-?\d+)(\d{3})/;
328
- while (re.test(s[0])) {
329
- s[0] = s[0].replace(re, `$1${sep}$2`);
330
- }
331
-
332
- if ((s[1] || "").length < prec) {
333
- s[1] = s[1] || "";
334
- s[1] += new Array(prec - s[1].length + 1).join("0");
335
- }
336
- return s.join(dec);
337
- }
338
-
339
- /**
340
- * @description 默认的姓名脱敏规则
341
- * @param name 名字
342
- * @return {string}
343
- * */
344
- export const formatName = (name: string): string => {
345
- let value = "";
346
- if (name.length === 2) {
347
- value = name.substring(0, 1) + "*";
348
- } else if (name.length > 2) {
349
- let char = "";
350
- for (let i = 0, len = name.length - 2; i < len; i++) {
351
- char += "*";
352
- }
353
- value =
354
- name.substring(0, 1) +
355
- char +
356
- name.substring(name.length - 1, name.length);
357
- } else {
358
- value = name;
359
- }
360
- return value;
361
- };
1
+ // 内部使用方法
2
+ import { inject } from 'vue'
3
+
4
+ /**
5
+ * 生成bem规则类名
6
+ * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
7
+ * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
8
+ * @param {String} name 组件名称
9
+ * @param props
10
+ * @param {Array} fixed 一直会存在的类名
11
+ * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
12
+ * @returns {Array|string}
13
+ */
14
+ export const bem = (
15
+ name: string,
16
+ props: Record<string, any>,
17
+ fixed: string[],
18
+ change?: string[]
19
+ ): string | string[] => {
20
+ // 类名前缀
21
+ const prefix = `hy-${name}--`
22
+ const classes: Record<string, string | boolean> = {}
23
+ if (fixed) {
24
+ fixed.map((item: string) => {
25
+ // 这里的类名,会一直存在
26
+ classes[prefix + props[item]] = true
27
+ if (item === 'type' && props['plain']) {
28
+ classes[prefix + props[item] + '__plain'] = true
29
+ }
30
+ })
31
+ }
32
+ if (change) {
33
+ change.map((item: string) => {
34
+ // 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类
35
+ props[item] ? (classes[prefix + item] = props[item]) : delete classes[prefix + item]
36
+ })
37
+ }
38
+ return (
39
+ Object.keys(classes)
40
+ // 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
41
+ // #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK
42
+ .join(' ')
43
+ // #endif
44
+ )
45
+ }
46
+
47
+ /**
48
+ * @description 在u-form的子组件内容发生变化,或者失去焦点时,尝试通知u-form执行校验方法
49
+ * @param {*} instance
50
+ * @param {*} event
51
+ */
52
+ export function formValidate(event) {
53
+ // const formItem = $parent.call(instance, "u-form-item");
54
+ const form = inject('uForm')
55
+ // 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法
56
+ // 同时将form-item的pros传递给form,让其进行精确对象验证
57
+ // if (formItem && form) {
58
+ // form.validateField(formItem.prop, () => {}, event);
59
+ // }
60
+ }
61
+
62
+ /**
63
+ * @description error提示
64
+ * @param {*} err 错误内容
65
+ */
66
+ export function error(err: string) {
67
+ // 开发环境才提示,生产环境不会提示
68
+ if (process.env.NODE_ENV === 'development') {
69
+ console.error(`华玥组件提示:${err}`)
70
+ }
71
+ }
72
+
73
+ export const sleep = (value = 100) => {
74
+ return new Promise((resolve) => {
75
+ setTimeout(() => {
76
+ resolve(null)
77
+ }, value)
78
+ })
79
+ }
80
+
81
+ /**
82
+ * @param {Number} len uuid的长度
83
+ * @param {Boolean} firstU 将返回的首字母置为"u"
84
+ * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
85
+ */
86
+ export function guid(len = 32, firstU = true, radix = null) {
87
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
88
+ const uuid = []
89
+ radix = radix || chars.length
90
+
91
+ if (len) {
92
+ // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
93
+ for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
94
+ } else {
95
+ let r
96
+ // rfc4122标准要求返回的uuid中,某些位为固定的字符
97
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
98
+ uuid[14] = '4'
99
+
100
+ for (let i = 0; i < 36; i++) {
101
+ if (!uuid[i]) {
102
+ r = 0 | (Math.random() * 16)
103
+ uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
104
+ }
105
+ }
106
+ }
107
+ // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
108
+ if (firstU) {
109
+ uuid.shift()
110
+ return `hy${uuid.join('')}`
111
+ }
112
+ return uuid.join('')
113
+ }
114
+
115
+ /**
116
+ * @description 获取设备信息
117
+ * */
118
+ export const getWindowInfo = (): UniNamespace.GetWindowInfoResult => {
119
+ let ret: UniNamespace.GetWindowInfoResult
120
+ // #ifdef APP || H5
121
+ ret = uni.getWindowInfo()
122
+ // #endif
123
+ // #ifndef APP || H5
124
+ ret = uni.getSystemInfoSync()
125
+ // #endif
126
+ return ret
127
+ }
128
+
129
+ function pickExclude(obj, keys) {
130
+ // 某些情况下,type可能会为
131
+ if (!['[object Object]', '[object File]'].includes(Object.prototype.toString.call(obj))) {
132
+ return {}
133
+ }
134
+ return Object.keys(obj).reduce((prev, key) => {
135
+ if (!keys.includes(key)) {
136
+ prev[key] = obj[key]
137
+ }
138
+ return prev
139
+ }, {})
140
+ }
141
+
142
+ function formatImage(res) {
143
+ return res.tempFiles.map((item) => ({
144
+ ...pickExclude(item, ['path']),
145
+ type: 'image',
146
+ url: item.path,
147
+ thumb: item.path,
148
+ size: item.size,
149
+ // #ifdef H5
150
+ name: item.name,
151
+ file: item
152
+ // #endif
153
+ }))
154
+ }
155
+
156
+ function formatVideo(res) {
157
+ return [
158
+ {
159
+ ...pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg']),
160
+ type: 'video',
161
+ url: res.tempFilePath,
162
+ thumb: res.thumbTempFilePath,
163
+ size: res.size,
164
+ // #ifdef H5
165
+ name: res.name,
166
+ file: res
167
+ // #endif
168
+ }
169
+ ]
170
+ }
171
+
172
+ function formatMedia(res) {
173
+ return res.tempFiles.map((item) => ({
174
+ ...pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath']),
175
+ type: res.type,
176
+ url: item.tempFilePath,
177
+ thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath,
178
+ size: item.size,
179
+ // #ifdef H5
180
+ file: item
181
+ // #endif
182
+ }))
183
+ }
184
+
185
+ function formatFile(res) {
186
+ return res.tempFiles.map((item) => ({
187
+ ...pickExclude(item, ['path']),
188
+ url: item.path,
189
+ size: item.size,
190
+ // #ifdef H5
191
+ name: item.name,
192
+ type: item.type,
193
+ file: item
194
+ // #endif
195
+ }))
196
+ }
197
+
198
+ export function chooseFile({
199
+ accept,
200
+ multiple,
201
+ capture,
202
+ compressed,
203
+ maxDuration,
204
+ sizeType,
205
+ camera,
206
+ maxCount,
207
+ extension
208
+ }: any) {
209
+ return new Promise((resolve, reject) => {
210
+ switch (accept) {
211
+ case 'image':
212
+ uni.chooseImage({
213
+ count: multiple ? Math.min(maxCount, 9) : 1,
214
+ sourceType: capture,
215
+ sizeType,
216
+ success: (res) => resolve(formatImage(res)),
217
+ fail: reject
218
+ })
219
+ break
220
+ // #ifdef MP-WEIXIN
221
+ // 只有微信小程序才支持chooseMedia接口
222
+ case 'media':
223
+ wx.chooseMedia({
224
+ count: multiple ? Math.min(maxCount, 9) : 1,
225
+ sourceType: capture,
226
+ maxDuration,
227
+ sizeType,
228
+ camera,
229
+ success: (res) => resolve(formatMedia(res)),
230
+ fail: reject
231
+ })
232
+ break
233
+ // #endif
234
+ case 'video':
235
+ uni.chooseVideo({
236
+ sourceType: capture,
237
+ compressed,
238
+ maxDuration,
239
+ camera,
240
+ success: (res) => resolve(formatVideo(res)),
241
+ fail: reject
242
+ })
243
+ break
244
+ // #ifdef MP-WEIXIN || H5
245
+ // 只有微信小程序才支持chooseMessageFile接口
246
+ case 'file':
247
+ // #ifdef MP-WEIXIN
248
+ wx.chooseMessageFile({
249
+ count: multiple ? maxCount : 1,
250
+ type: accept,
251
+ success: (res) => resolve(formatFile(res)),
252
+ fail: reject
253
+ })
254
+ // #endif
255
+ // #ifdef H5
256
+ // 需要hx2.9.9以上才支持uni.chooseFile
257
+ let params = {
258
+ count: multiple ? maxCount : 1,
259
+ type: accept,
260
+ success: (res) => resolve(formatFile(res)),
261
+ fail: reject
262
+ }
263
+ if (extension.length && extension.length > 0) {
264
+ params.extension = extension
265
+ }
266
+ uni.chooseFile(params)
267
+ // #endif
268
+ break
269
+ // #endif
270
+ default:
271
+ // 此为保底选项,在accept不为上面任意一项的时候选取全部文件
272
+ // #ifdef MP-WEIXIN
273
+ wx.chooseMessageFile({
274
+ count: multiple ? maxCount : 1,
275
+ type: 'all',
276
+ success: (res) => resolve(formatFile(res)),
277
+ fail: reject
278
+ })
279
+ // #endif
280
+ // #ifdef H5
281
+ // 需要hx2.9.9以上才支持uni.chooseFile
282
+ let paramsFile = {
283
+ count: multiple ? maxCount : 1,
284
+ type: 'all',
285
+ success: (res) => resolve(formatFile(res)),
286
+ fail: reject
287
+ }
288
+ if (extension.length && extension.length > 0) {
289
+ paramsFile.extension = extension
290
+ }
291
+ uni.chooseFile(paramsFile)
292
+ // #endif
293
+ }
294
+ })
295
+ }
296
+
297
+ /**
298
+ * @description 数字格式化
299
+ * @param {number|string} number 要格式化的数字
300
+ * @param {number} decimals 保留几位小数
301
+ * @param {string} decimalPoint 小数点符号
302
+ * @param {string} thousandsSeparator 千分位符号
303
+ * @returns {string} 格式化后的数字
304
+ */
305
+ export function priceFormat(
306
+ number: string | number,
307
+ decimals = 0,
308
+ decimalPoint = '.',
309
+ thousandsSeparator = ','
310
+ ) {
311
+ number = `${number}`.replace(/[^0-9+-Ee.]/g, '')
312
+ const n = !isFinite(+number) ? 0 : +number
313
+ const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
314
+ const sep = typeof thousandsSeparator === 'undefined' ? ',' : thousandsSeparator
315
+ const dec = typeof decimalPoint === 'undefined' ? '.' : decimalPoint
316
+ let s = ''
317
+
318
+ s = (prec ? n + '' : `${Math.round(n)}`).split('.')
319
+ const re = /(-?\d+)(\d{3})/
320
+ while (re.test(s[0])) {
321
+ s[0] = s[0].replace(re, `$1${sep}$2`)
322
+ }
323
+
324
+ if ((s[1] || '').length < prec) {
325
+ s[1] = s[1] || ''
326
+ s[1] += new Array(prec - s[1].length + 1).join('0')
327
+ }
328
+ return s.join(dec)
329
+ }
330
+
331
+ /**
332
+ * @description 默认的姓名脱敏规则
333
+ * @param name 名字
334
+ * @return {string}
335
+ * */
336
+ export const formatName = (name: string): string => {
337
+ let value = ''
338
+ if (name.length === 2) {
339
+ value = name.substring(0, 1) + '*'
340
+ } else if (name.length > 2) {
341
+ let char = ''
342
+ for (let i = 0, len = name.length - 2; i < len; i++) {
343
+ char += '*'
344
+ }
345
+ value = name.substring(0, 1) + char + name.substring(name.length - 1, name.length)
346
+ } else {
347
+ value = name
348
+ }
349
+ return value
350
+ }