uview-pro 0.1.0 → 0.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 (244) hide show
  1. package/changelog.md +459 -406
  2. package/components/common/props.ts +22 -0
  3. package/components/u-action-sheet/types.ts +35 -35
  4. package/components/u-action-sheet/u-action-sheet.vue +160 -160
  5. package/components/u-alert-tips/types.ts +39 -39
  6. package/components/u-alert-tips/u-alert-tips.vue +212 -212
  7. package/components/u-avatar/types.ts +34 -34
  8. package/components/u-avatar/u-avatar.vue +193 -193
  9. package/components/u-avatar-cropper/types.ts +23 -23
  10. package/components/u-avatar-cropper/u-avatar-cropper.vue +286 -286
  11. package/components/u-avatar-cropper/weCropper.d.ts +62 -62
  12. package/components/u-avatar-cropper/weCropper.js +1253 -1253
  13. package/components/u-avatar-cropper/weCropper.ts +1255 -1255
  14. package/components/u-back-top/types.ts +39 -39
  15. package/components/u-back-top/u-back-top.vue +125 -125
  16. package/components/u-badge/types.ts +36 -36
  17. package/components/u-badge/u-badge.vue +165 -165
  18. package/components/u-button/types.ts +66 -66
  19. package/components/u-button/u-button.vue +556 -556
  20. package/components/u-calendar/types.ts +63 -63
  21. package/components/u-calendar/u-calendar.vue +592 -592
  22. package/components/u-car-keyboard/types.ts +12 -12
  23. package/components/u-car-keyboard/u-car-keyboard.vue +234 -234
  24. package/components/u-card/types.ts +59 -59
  25. package/components/u-card/u-card.vue +194 -194
  26. package/components/u-cell-group/types.ts +17 -17
  27. package/components/u-cell-group/u-cell-group.vue +50 -50
  28. package/components/u-cell-item/types.ts +54 -54
  29. package/components/u-cell-item/u-cell-item.vue +202 -202
  30. package/components/u-checkbox/types.ts +31 -31
  31. package/components/u-checkbox/u-checkbox.vue +267 -267
  32. package/components/u-checkbox-group/types.ts +32 -32
  33. package/components/u-checkbox-group/u-checkbox-group.vue +79 -79
  34. package/components/u-circle-progress/types.ts +52 -52
  35. package/components/u-circle-progress/u-circle-progress.vue +187 -187
  36. package/components/u-city-select/types.ts +20 -20
  37. package/components/u-city-select/u-city-select.vue +236 -236
  38. package/components/u-col/types.ts +30 -30
  39. package/components/u-col/u-col.vue +123 -123
  40. package/components/u-collapse/types.ts +33 -31
  41. package/components/u-collapse/u-collapse.vue +69 -68
  42. package/components/u-collapse-item/types.ts +27 -25
  43. package/components/u-collapse-item/u-collapse-item.vue +201 -194
  44. package/components/u-column-notice/types.ts +48 -48
  45. package/components/u-column-notice/u-column-notice.vue +176 -176
  46. package/components/u-count-down/types.ts +42 -42
  47. package/components/u-count-down/u-count-down.vue +258 -258
  48. package/components/u-count-to/types.ts +32 -32
  49. package/components/u-count-to/u-count-to.vue +241 -241
  50. package/components/u-divider/types.ts +31 -31
  51. package/components/u-divider/u-divider.vue +121 -121
  52. package/components/u-dropdown/types.ts +32 -32
  53. package/components/u-dropdown/u-dropdown.vue +289 -289
  54. package/components/u-dropdown-item/types.ts +27 -27
  55. package/components/u-dropdown-item/u-dropdown-item.vue +123 -123
  56. package/components/u-empty/types.ts +36 -36
  57. package/components/u-empty/u-empty.vue +88 -88
  58. package/components/u-field/types.ts +69 -69
  59. package/components/u-field/u-field.vue +354 -354
  60. package/components/u-form/u-form.vue +132 -132
  61. package/components/u-form-item/u-form-item.vue +417 -417
  62. package/components/u-full-screen/types.ts +14 -14
  63. package/components/u-full-screen/u-full-screen.vue +82 -82
  64. package/components/u-gap/types.ts +18 -18
  65. package/components/u-gap/u-gap.vue +40 -40
  66. package/components/u-grid/types.ts +19 -19
  67. package/components/u-grid/u-grid.vue +93 -93
  68. package/components/u-grid-item/types.ts +16 -16
  69. package/components/u-grid-item/u-grid-item.vue +130 -130
  70. package/components/u-icon/types.ts +62 -62
  71. package/components/u-icon/u-icon.vue +281 -274
  72. package/components/u-image/types.ts +51 -51
  73. package/components/u-image/u-image.vue +222 -222
  74. package/components/u-index-anchor/types.ts +16 -16
  75. package/components/u-index-anchor/u-index-anchor.vue +86 -86
  76. package/components/u-index-list/types.ts +43 -43
  77. package/components/u-index-list/u-index-list.vue +355 -355
  78. package/components/u-input/types.ts +140 -140
  79. package/components/u-input/u-input.vue +264 -255
  80. package/components/u-keyboard/types.ts +40 -40
  81. package/components/u-keyboard/u-keyboard.vue +158 -158
  82. package/components/u-lazy-load/types.ts +37 -37
  83. package/components/u-lazy-load/u-lazy-load.vue +233 -233
  84. package/components/u-line/types.ts +44 -44
  85. package/components/u-line/u-line.vue +59 -59
  86. package/components/u-line-progress/types.ts +58 -58
  87. package/components/u-line-progress/u-line-progress.vue +109 -109
  88. package/components/u-link/types.ts +43 -43
  89. package/components/u-link/u-link.vue +75 -75
  90. package/components/u-loading/types.ts +35 -35
  91. package/components/u-loading/u-loading.vue +90 -90
  92. package/components/u-loading-popup/types.ts +26 -26
  93. package/components/u-loading-popup/u-loading-popup.vue +239 -239
  94. package/components/u-loadmore/types.ts +79 -79
  95. package/components/u-loadmore/u-loadmore.vue +140 -140
  96. package/components/u-mask/types.ts +43 -43
  97. package/components/u-mask/u-mask.vue +106 -106
  98. package/components/u-message-input/types.ts +74 -74
  99. package/components/u-message-input/u-message-input.vue +255 -255
  100. package/components/u-modal/types.ts +118 -118
  101. package/components/u-modal/u-modal.vue +204 -204
  102. package/components/u-navbar/types.ts +103 -103
  103. package/components/u-navbar/u-navbar.vue +226 -226
  104. package/components/u-no-network/image.ts +2 -2
  105. package/components/u-no-network/types.ts +28 -28
  106. package/components/u-no-network/u-no-network.vue +290 -290
  107. package/components/u-notice-bar/types.ts +111 -111
  108. package/components/u-notice-bar/u-notice-bar.vue +174 -174
  109. package/components/u-number-box/types.ts +42 -42
  110. package/components/u-number-box/u-number-box.vue +312 -312
  111. package/components/u-number-keyboard/types.ts +26 -26
  112. package/components/u-number-keyboard/u-number-keyboard.vue +166 -166
  113. package/components/u-picker/types.ts +123 -123
  114. package/components/u-picker/u-picker.vue +637 -637
  115. package/components/u-popup/types.ts +59 -59
  116. package/components/u-popup/u-popup.vue +359 -359
  117. package/components/u-radio/types.ts +25 -25
  118. package/components/u-radio/u-radio.vue +258 -258
  119. package/components/u-radio-group/types.ts +29 -29
  120. package/components/u-radio-group/u-radio-group.vue +98 -98
  121. package/components/u-rate/types.ts +40 -40
  122. package/components/u-rate/u-rate.vue +234 -234
  123. package/components/u-read-more/types.ts +35 -35
  124. package/components/u-read-more/u-read-more.vue +150 -150
  125. package/components/u-row/types.ts +20 -20
  126. package/components/u-row/u-row.vue +87 -87
  127. package/components/u-row-notice/types.ts +39 -39
  128. package/components/u-row-notice/u-row-notice.vue +213 -213
  129. package/components/u-safe-bottom/u-safe-bottom.vue +46 -46
  130. package/components/u-search/types.ts +53 -53
  131. package/components/u-search/u-search.vue +256 -256
  132. package/components/u-section/types.ts +32 -32
  133. package/components/u-section/u-section.vue +125 -125
  134. package/components/u-select/types.ts +43 -43
  135. package/components/u-select/u-select.vue +361 -361
  136. package/components/u-skeleton/types.ts +20 -20
  137. package/components/u-skeleton/u-skeleton.vue +205 -205
  138. package/components/u-slider/types.ts +32 -32
  139. package/components/u-slider/u-slider.vue +238 -238
  140. package/components/u-status-bar/u-status-bar.vue +65 -65
  141. package/components/u-steps/types.ts +28 -28
  142. package/components/u-steps/u-steps.vue +160 -160
  143. package/components/u-sticky/types.ts +22 -22
  144. package/components/u-sticky/u-sticky.vue +159 -159
  145. package/components/u-subsection/types.ts +36 -36
  146. package/components/u-subsection/u-subsection.vue +328 -328
  147. package/components/u-swipe-action/types.ts +50 -50
  148. package/components/u-swipe-action/u-swipe-action.vue +253 -253
  149. package/components/u-swiper/types.ts +47 -47
  150. package/components/u-swiper/u-swiper.vue +266 -266
  151. package/components/u-switch/types.ts +28 -28
  152. package/components/u-switch/u-switch.vue +136 -136
  153. package/components/u-tabbar/types.ts +36 -36
  154. package/components/u-tabbar/u-tabbar.vue +280 -280
  155. package/components/u-table/types.ts +25 -25
  156. package/components/u-table/u-table.vue +55 -55
  157. package/components/u-tabs/types.ts +51 -51
  158. package/components/u-tabs/u-tabs.vue +284 -284
  159. package/components/u-tabs-swiper/types.ts +53 -53
  160. package/components/u-tabs-swiper/u-tabs-swiper.vue +379 -379
  161. package/components/u-tag/types.ts +37 -37
  162. package/components/u-tag/u-tag.vue +244 -244
  163. package/components/u-td/types.ts +12 -12
  164. package/components/u-td/u-td.vue +87 -87
  165. package/components/u-text/types.ts +69 -0
  166. package/components/u-text/u-text.vue +326 -0
  167. package/components/u-th/types.ts +12 -12
  168. package/components/u-th/u-th.vue +81 -81
  169. package/components/u-time-line/u-time-line.vue +39 -39
  170. package/components/u-time-line-item/types.ts +14 -14
  171. package/components/u-time-line-item/u-time-line-item.vue +78 -78
  172. package/components/u-toast/types.ts +36 -36
  173. package/components/u-toast/u-toast.vue +233 -233
  174. package/components/u-top-tips/types.ts +14 -14
  175. package/components/u-top-tips/u-top-tips.vue +113 -113
  176. package/components/u-tr/types.ts +8 -8
  177. package/components/u-tr/u-tr.vue +24 -24
  178. package/components/u-upload/types.ts +74 -74
  179. package/components/u-upload/u-upload.vue +545 -545
  180. package/components/u-verification-code/types.ts +22 -22
  181. package/components/u-verification-code/u-verification-code.vue +164 -164
  182. package/components/u-waterfall/types.ts +16 -16
  183. package/components/u-waterfall/u-waterfall.vue +175 -175
  184. package/iconfont.css +912 -912
  185. package/index.scss +25 -23
  186. package/index.ts +29 -204
  187. package/libs/config/config.ts +26 -26
  188. package/libs/config/zIndex.ts +37 -37
  189. package/libs/css/color.scss +155 -155
  190. package/libs/css/common.scss +178 -178
  191. package/libs/css/style.components.scss +16 -7
  192. package/libs/css/style.h5.scss +8 -8
  193. package/libs/css/style.mp.scss +72 -72
  194. package/libs/css/style.nvue.scss +15 -3
  195. package/libs/css/style.vue.scss +188 -177
  196. package/libs/function/$parent.ts +21 -21
  197. package/libs/function/addUnit.ts +13 -13
  198. package/libs/function/color.ts +37 -71
  199. package/libs/function/colorGradient.ts +125 -125
  200. package/libs/function/debounce.ts +28 -28
  201. package/libs/function/deepClone.ts +39 -39
  202. package/libs/function/deepMerge.ts +34 -34
  203. package/libs/function/getParent.ts +59 -59
  204. package/libs/function/getRect.ts +26 -26
  205. package/libs/function/guid.ts +42 -42
  206. package/libs/function/md5.ts +391 -391
  207. package/libs/function/parent.ts +21 -21
  208. package/libs/function/queryParams.ts +60 -60
  209. package/libs/function/random.ts +16 -16
  210. package/libs/function/randomArray.ts +11 -11
  211. package/libs/function/route.ts +118 -118
  212. package/libs/function/styleUtils.ts +83 -83
  213. package/libs/function/sys.ts +15 -15
  214. package/libs/function/test.ts +285 -229
  215. package/libs/function/throttle.ts +31 -31
  216. package/libs/function/timeFormat.ts +54 -54
  217. package/libs/function/timeFrom.ts +48 -48
  218. package/libs/function/toast.ts +14 -14
  219. package/libs/function/trim.ts +21 -21
  220. package/libs/function/type2icon.ts +36 -36
  221. package/libs/hooks/index.ts +3 -0
  222. package/libs/hooks/useEmitter.ts +77 -77
  223. package/libs/hooks/useParent.ts +31 -29
  224. package/libs/hooks/useRect.ts +33 -0
  225. package/libs/index.ts +291 -0
  226. package/libs/request/auto-http.ts +76 -76
  227. package/libs/request/index.ts +223 -223
  228. package/libs/store/index.ts +88 -88
  229. package/libs/util/area.ts +3771 -3771
  230. package/libs/util/async-validator.d.ts +62 -62
  231. package/libs/util/async-validator.js +1368 -1368
  232. package/libs/util/city.ts +432 -432
  233. package/libs/util/emitter.ts +102 -102
  234. package/libs/util/mitt.ts +115 -115
  235. package/libs/util/parent.ts +20 -20
  236. package/libs/util/province.ts +37 -37
  237. package/package.json +1 -1
  238. package/readme.md +237 -237
  239. package/theme.scss +38 -38
  240. package/types/components.d.ts +96 -95
  241. package/types/global.d.ts +255 -221
  242. package/types/ignore-errors.d.ts +30 -30
  243. package/types/index.d.ts +19 -90
  244. package/types/uni-app.d.ts +63 -63
@@ -1,59 +1,59 @@
1
- // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
2
- // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
3
- interface VueInstance {
4
- $parent?: VueInstance;
5
- $options?: { name?: string };
6
- [key: string]: any;
7
- }
8
-
9
- /**
10
- * 获取父组件参数
11
- * @param this 当前组件实例
12
- * @param name 父组件name
13
- * @param keys 需要获取的参数名数组或对象
14
- * @returns 父组件参数对象
15
- */
16
- export default function getParent(this: VueInstance, name: string, keys: string[] | Record<string, any>): Record<string, any> {
17
- let parent = this.$parent;
18
- // 通过while历遍,这里主要是为了H5需要多层解析的问题
19
- while (parent) {
20
- // 父组件
21
- if (parent.$options?.name !== name) {
22
- // 如果组件的name不相等,继续上一级寻找
23
- parent = parent.$parent;
24
- } else {
25
- const data: Record<string, any> = {};
26
- // 判断keys是否数组,如果传过来的是一个数组,那么直接使用数组元素值当做键值去父组件寻找
27
- if (Array.isArray(keys)) {
28
- keys.forEach(val => {
29
- data[val] = parent?.[val] ? parent[val] : '';
30
- });
31
- } else {
32
- // 历遍传过来的对象参数
33
- for (const i in keys) {
34
- // 如果子组件有此值则用,无此值则用父组件的值
35
- // 判断是否空数组,如果是,则用父组件的值,否则用子组件的值
36
- if (Array.isArray(keys[i])) {
37
- if (keys[i].length) {
38
- data[i] = keys[i];
39
- } else {
40
- data[i] = parent[i];
41
- }
42
- } else if (keys[i] && keys[i].constructor === Object) {
43
- // 判断是否对象,如果是对象,且有属性,那么使用子组件的值,否则使用父组件的值
44
- if (Object.keys(keys[i]).length) {
45
- data[i] = keys[i];
46
- } else {
47
- data[i] = parent[i];
48
- }
49
- } else {
50
- // 只要子组件有传值,即使是false值,也是“传值”了,也需要覆盖父组件的同名参数
51
- data[i] = keys[i] || keys[i] === false ? keys[i] : parent[i];
52
- }
53
- }
54
- }
55
- return data;
56
- }
57
- }
58
- return {};
59
- }
1
+ // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
2
+ // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
3
+ interface VueInstance {
4
+ $parent?: VueInstance;
5
+ $options?: { name?: string };
6
+ [key: string]: any;
7
+ }
8
+
9
+ /**
10
+ * 获取父组件参数
11
+ * @param this 当前组件实例
12
+ * @param name 父组件name
13
+ * @param keys 需要获取的参数名数组或对象
14
+ * @returns 父组件参数对象
15
+ */
16
+ export default function getParent(this: VueInstance, name: string, keys: string[] | Record<string, any>): Record<string, any> {
17
+ let parent = this.$parent;
18
+ // 通过while历遍,这里主要是为了H5需要多层解析的问题
19
+ while (parent) {
20
+ // 父组件
21
+ if (parent.$options?.name !== name) {
22
+ // 如果组件的name不相等,继续上一级寻找
23
+ parent = parent.$parent;
24
+ } else {
25
+ const data: Record<string, any> = {};
26
+ // 判断keys是否数组,如果传过来的是一个数组,那么直接使用数组元素值当做键值去父组件寻找
27
+ if (Array.isArray(keys)) {
28
+ keys.forEach(val => {
29
+ data[val] = parent?.[val] ? parent[val] : '';
30
+ });
31
+ } else {
32
+ // 历遍传过来的对象参数
33
+ for (const i in keys) {
34
+ // 如果子组件有此值则用,无此值则用父组件的值
35
+ // 判断是否空数组,如果是,则用父组件的值,否则用子组件的值
36
+ if (Array.isArray(keys[i])) {
37
+ if (keys[i].length) {
38
+ data[i] = keys[i];
39
+ } else {
40
+ data[i] = parent[i];
41
+ }
42
+ } else if (keys[i] && keys[i].constructor === Object) {
43
+ // 判断是否对象,如果是对象,且有属性,那么使用子组件的值,否则使用父组件的值
44
+ if (Object.keys(keys[i]).length) {
45
+ data[i] = keys[i];
46
+ } else {
47
+ data[i] = parent[i];
48
+ }
49
+ } else {
50
+ // 只要子组件有传值,即使是false值,也是“传值”了,也需要覆盖父组件的同名参数
51
+ data[i] = keys[i] || keys[i] === false ? keys[i] : parent[i];
52
+ }
53
+ }
54
+ }
55
+ return data;
56
+ }
57
+ }
58
+ return {};
59
+ }
@@ -1,26 +1,26 @@
1
- /**
2
- * 获取元素的位置信息
3
- * @param {any} selector 选择器
4
- * @param {boolean} all 是否获取所有匹配元素
5
- * @returns {Promise<any>} 返回一个 Promise,解析为元素的位置信息
6
- */
7
-
8
- import { getCurrentInstance } from 'vue';
9
-
10
- export default function (selector: any, _instance: any = null, all: boolean = false): Promise<any> {
11
- const instance = _instance || getCurrentInstance();
12
- return new Promise(resolve => {
13
- uni.createSelectorQuery()
14
- .in(instance?.proxy)
15
- [all ? 'selectAll' : 'select'](selector)
16
- .boundingClientRect((rect: any) => {
17
- if (all && Array.isArray(rect) && rect.length) {
18
- resolve(rect);
19
- }
20
- if (!all && rect) {
21
- resolve(rect);
22
- }
23
- })
24
- .exec();
25
- });
26
- }
1
+ /**
2
+ * 获取元素的位置信息
3
+ * @param {any} selector 选择器
4
+ * @param {boolean} all 是否获取所有匹配元素
5
+ * @returns {Promise<any>} 返回一个 Promise,解析为元素的位置信息
6
+ */
7
+
8
+ import { getCurrentInstance } from 'vue';
9
+
10
+ export default function (selector: any, _instance: any = null, all: boolean = false): Promise<any> {
11
+ const instance = _instance || getCurrentInstance();
12
+ return new Promise(resolve => {
13
+ uni.createSelectorQuery()
14
+ .in(instance?.proxy)
15
+ [all ? 'selectAll' : 'select'](selector)
16
+ .boundingClientRect((rect: any) => {
17
+ if (all && Array.isArray(rect) && rect.length) {
18
+ resolve(rect);
19
+ }
20
+ if (!all && rect) {
21
+ resolve(rect);
22
+ }
23
+ })
24
+ .exec();
25
+ });
26
+ }
@@ -1,42 +1,42 @@
1
- /**
2
- * 本算法来源于简书开源代码,详见:https://www.jianshu.com/p/fdbf293d0a85
3
- * 全局唯一标识符(uuid,Globally Unique Identifier),也称作 uuid(Universally Unique IDentifier)
4
- * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题
5
- * 最可能的情况是左滑删除item或者对某条信息流"不喜欢"并去掉它的时候,会导致组件内的数据可能出现错乱
6
- * v-for的时候,推荐使用后端返回的id而不是循环的index
7
- * @param len uuid的长度,默认32
8
- * @param firstU 将返回的首字母置为"u",默认true
9
- * @param radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
10
- * @returns 生成的uuid字符串
11
- */
12
- function guid(len: number = 32, firstU: boolean = true, radix?: number): string {
13
- const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
14
- const uuid: string[] = [];
15
- const base = radix || chars.length;
16
-
17
- if (len) {
18
- // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
19
- for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * base)];
20
- } else {
21
- let r: number;
22
- // rfc4122标准要求返回的uuid中,某些位为固定的字符
23
- uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
24
- uuid[14] = '4';
25
-
26
- for (let i = 0; i < 36; i++) {
27
- if (!uuid[i]) {
28
- r = 0 | (Math.random() * 16);
29
- uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
30
- }
31
- }
32
- }
33
- // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guid不能用作id或者class
34
- if (firstU) {
35
- uuid.shift();
36
- return 'u' + uuid.join('');
37
- } else {
38
- return uuid.join('');
39
- }
40
- }
41
-
42
- export default guid;
1
+ /**
2
+ * 本算法来源于简书开源代码,详见:https://www.jianshu.com/p/fdbf293d0a85
3
+ * 全局唯一标识符(uuid,Globally Unique Identifier),也称作 uuid(Universally Unique IDentifier)
4
+ * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题
5
+ * 最可能的情况是左滑删除item或者对某条信息流"不喜欢"并去掉它的时候,会导致组件内的数据可能出现错乱
6
+ * v-for的时候,推荐使用后端返回的id而不是循环的index
7
+ * @param len uuid的长度,默认32
8
+ * @param firstU 将返回的首字母置为"u",默认true
9
+ * @param radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
10
+ * @returns 生成的uuid字符串
11
+ */
12
+ function guid(len: number = 32, firstU: boolean = true, radix?: number): string {
13
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
14
+ const uuid: string[] = [];
15
+ const base = radix || chars.length;
16
+
17
+ if (len) {
18
+ // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
19
+ for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * base)];
20
+ } else {
21
+ let r: number;
22
+ // rfc4122标准要求返回的uuid中,某些位为固定的字符
23
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
24
+ uuid[14] = '4';
25
+
26
+ for (let i = 0; i < 36; i++) {
27
+ if (!uuid[i]) {
28
+ r = 0 | (Math.random() * 16);
29
+ uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
30
+ }
31
+ }
32
+ }
33
+ // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guid不能用作id或者class
34
+ if (firstU) {
35
+ uuid.shift();
36
+ return 'u' + uuid.join('');
37
+ } else {
38
+ return uuid.join('');
39
+ }
40
+ }
41
+
42
+ export default guid;