@uxda/appkit 4.3.40 → 4.3.42

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 (139) hide show
  1. package/.cursor/skills/appkit-build-update-component-rules/SKILL.md +54 -54
  2. package/.cursor/skills/appkit-sync-component-rules/SKILL.md +60 -60
  3. package/.eslintrc.mjs +7 -7
  4. package/Appkit/347/273/204/344/273/266/344/275/277/347/224/250/350/247/204/345/210/231.md +2002 -2002
  5. package/PROJECT_DOCS.md +150 -142
  6. package/README.md +194 -194
  7. package/babel.config.js +12 -12
  8. package/dist/appkit.css +3 -3
  9. package/dist/index.js +4 -4
  10. package/package.json +82 -82
  11. package/project.config.json +15 -15
  12. package/project.tt.json +13 -13
  13. package/rollup.config.mjs +81 -81
  14. package/src/Appkit.ts +72 -72
  15. package/src/balance/api/endpoints.ts +134 -134
  16. package/src/balance/api/index.ts +118 -118
  17. package/src/balance/components/AccountView.vue +850 -850
  18. package/src/balance/components/BalanceCard.vue +210 -210
  19. package/src/balance/components/BalanceReminder.vue +84 -84
  20. package/src/balance/components/ConsumptionFilter.vue +218 -218
  21. package/src/balance/components/ConsumptionRules.vue +68 -68
  22. package/src/balance/components/DateFilter.vue +259 -259
  23. package/src/balance/components/DateRange.vue +111 -111
  24. package/src/balance/components/ListFilter.vue +62 -62
  25. package/src/balance/components/ListFilterPicker.vue +191 -191
  26. package/src/balance/components/PromoterCard.vue +308 -308
  27. package/src/balance/components/SecondBalance.vue +77 -77
  28. package/src/balance/components/Tip.vue +45 -45
  29. package/src/balance/components/index.ts +8 -8
  30. package/src/balance/types.ts +99 -99
  31. package/src/components/bt-cropper/index.vue +730 -730
  32. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  33. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  34. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  35. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  36. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  37. package/src/components/bt-cropper/utils/ratio.js +3 -3
  38. package/src/components/bt-cropper/utils/tools.js +25 -25
  39. package/src/components/dd-area/index.vue +225 -225
  40. package/src/components/dd-icon/doc.md +21 -21
  41. package/src/components/dd-icon/index.vue +23 -23
  42. package/src/components/dd-notice-bar/index.vue +78 -78
  43. package/src/components/dd-search/doc.md +34 -34
  44. package/src/components/dd-search/index.vue +168 -168
  45. package/src/components/dd-selector/index.vue +124 -124
  46. package/src/components/dd-skeleton/doc.md +19 -19
  47. package/src/components/dd-skeleton/index.vue +36 -36
  48. package/src/global.ts +6 -6
  49. package/src/index.ts +101 -101
  50. package/src/main.scss +1 -1
  51. package/src/notice/api/endpoints.ts +54 -54
  52. package/src/notice/api/index.ts +121 -121
  53. package/src/notice/components/NoticeBanner.vue +247 -247
  54. package/src/notice/components/NoticeEntry.vue +99 -99
  55. package/src/notice/components/NoticeList.vue +311 -311
  56. package/src/notice/components/NoticeList2.vue +401 -401
  57. package/src/notice/components/NoticePopup.vue +163 -163
  58. package/src/notice/components/index.ts +6 -6
  59. package/src/notice/components/useCommonList.ts +87 -87
  60. package/src/notice/components/useNotice.ts +35 -35
  61. package/src/notice/index.ts +1 -1
  62. package/src/notice/types.ts +25 -25
  63. package/src/payment/api/config.ts +7 -7
  64. package/src/payment/api/endpoints.ts +112 -112
  65. package/src/payment/api/index.ts +108 -108
  66. package/src/payment/components/AmountPicker.vue +56 -56
  67. package/src/payment/components/RechargeResult.vue +68 -68
  68. package/src/payment/components/RechargeView.vue +420 -420
  69. package/src/payment/components/RightsPicker.vue +105 -105
  70. package/src/payment/components/TradeView.vue +627 -627
  71. package/src/payment/components/UserAgreement.vue +234 -234
  72. package/src/payment/components/index.ts +22 -22
  73. package/src/payment/components/recharge-amount.spec.ts +54 -54
  74. package/src/payment/components/recharge-amount.ts +67 -67
  75. package/src/payment/index.ts +5 -5
  76. package/src/payment/services/index.ts +16 -16
  77. package/src/payment/services/invoke-recharge.ts +25 -25
  78. package/src/payment/services/request-payment.ts +136 -136
  79. package/src/payment/types.ts +34 -34
  80. package/src/register/components/SelfRegistration.vue +233 -233
  81. package/src/register/components/index.ts +2 -2
  82. package/src/scenarios/components/SharePoster.vue +364 -364
  83. package/src/scenarios/components/index.ts +2 -2
  84. package/src/scenarios/components/poster-paste.vue +93 -93
  85. package/src/scenarios/components/share-poster.md +273 -273
  86. package/src/shared/components/AppDrawer.vue +53 -53
  87. package/src/shared/components/AppVerify.vue +137 -137
  88. package/src/shared/components/DeviceVersion.vue +78 -78
  89. package/src/shared/components/EmptyView.vue +33 -33
  90. package/src/shared/components/OcrBank.vue +202 -202
  91. package/src/shared/components/OcrBusinessLicense.vue +120 -120
  92. package/src/shared/components/OcrIcon.vue +267 -267
  93. package/src/shared/components/OcrInvoice.vue +323 -323
  94. package/src/shared/components/OfficeDocx.vue +33 -33
  95. package/src/shared/components/OfficePdf.vue +35 -35
  96. package/src/shared/components/PageHeader.vue +84 -84
  97. package/src/shared/components/index.ts +12 -12
  98. package/src/shared/composables/index.ts +10 -10
  99. package/src/shared/composables/useAmount.ts +46 -46
  100. package/src/shared/composables/useCompress.ts +64 -64
  101. package/src/shared/composables/useCountdown.ts +46 -46
  102. package/src/shared/composables/useCrypto.ts +76 -76
  103. package/src/shared/composables/useDeviceEnv.ts +61 -61
  104. package/src/shared/composables/useDragBox.ts +97 -97
  105. package/src/shared/composables/useEncode.ts +43 -43
  106. package/src/shared/composables/useLogger.ts +149 -149
  107. package/src/shared/composables/useSafeArea.ts +46 -46
  108. package/src/shared/composables/useTabbar.ts +24 -24
  109. package/src/shared/composables/useUpload.ts +106 -106
  110. package/src/shared/composables/useValidator.ts +32 -32
  111. package/src/shared/composables/useWxAuth.ts +49 -49
  112. package/src/shared/http/Http.ts +149 -149
  113. package/src/shared/http/index.ts +1 -1
  114. package/src/shared/http/types.ts +163 -163
  115. package/src/shared/index.ts +9 -9
  116. package/src/shared/tracking/directives/index.ts +40 -40
  117. package/src/shared/tracking/examples/page-tracking-template.vue +27 -27
  118. package/src/shared/weixin/index.ts +9 -9
  119. package/src/shared/weixin/jssdk.ts +104 -104
  120. package/src/shared/weixin/payment.ts +38 -38
  121. package/src/styles/vars.scss +3 -3
  122. package/src/user/api/endpoints.ts +17 -17
  123. package/src/user/api/index.ts +123 -123
  124. package/src/user/components/LoginSetting.vue +114 -114
  125. package/src/user/components/UserAuth.vue +218 -218
  126. package/src/user/components/UserBinding.vue +277 -277
  127. package/src/user/components/UserBindingSuccess.vue +80 -80
  128. package/src/user/components/UserEntry.vue +139 -139
  129. package/src/user/components/UserFeedback.vue +428 -428
  130. package/src/user/components/UserFeedbackEntry.vue +175 -175
  131. package/src/user/components/UserHeadCrop.vue +65 -65
  132. package/src/user/components/UserInfo.vue +711 -711
  133. package/src/user/components/UserResourceEmpty.vue +75 -75
  134. package/src/user/components/index.ts +23 -23
  135. package/src/user/index.ts +1 -1
  136. package/src/utils/utils.ts +33 -33
  137. package/tsconfig.json +30 -30
  138. package/types/global.d.ts +23 -23
  139. package/types/vue.d.ts +10 -10
@@ -1,77 +1,77 @@
1
- // 解析脱敏姓名、手机号码等
2
-
3
- export type CryptoConfig = {
4
- maskField: string,
5
- secretField: string,
6
- }
7
-
8
- export const defaultCryptoConfig: CryptoConfig = {
9
- maskField: 'mask',
10
- secretField: 'secretKey'
11
- }
12
-
13
- export type DecodeResult<T extends string> = {
14
- [key in T | `${T}Secret`]: string
15
- }
16
-
17
- export type DefaultDecodeResult = DecodeResult<'masked'>
18
-
19
- export type DecodeFunction = (encoded: string, key: string) => DecodeResult<`${key}`>
20
-
21
- /**
22
- * 解析以及解密脱敏数据
23
- * @param config
24
- * @returns
25
- */
26
- export function useCrypto (config?: CryptoConfig) {
27
-
28
- const conf = config || defaultCryptoConfig
29
-
30
- const parse: DecodeFunction = (data: string, key?: string) => {
31
- let k = key || 'masked'
32
- let result: Record<string, any> = {}
33
- try {
34
- result = JSON.parse(data)
35
- result = {
36
- [k]: result.mask,
37
- // 字段后加$表示用于解密的 secret
38
- [`${k}$`]: result.secretKey
39
- }
40
- } catch (e) {}
41
- return result
42
- }
43
-
44
- /**
45
- * 批量解析数组内的数据
46
- * @param list
47
- * @param field
48
- * @returns
49
- */
50
- const resolve = (list: any[], field?: string | string[]) => {
51
- if (list.length === 0) return []
52
- const [first] = list,
53
- f = field
54
- ? Array.isArray(field) ? field : [field]
55
- // 自动探测需要解密的字段
56
- // '{"secretKey":"","mask":""}' 形式
57
- : Object.entries(first)
58
- .filter(([_, v]) => /^\{.*\}$/.test(v as string))
59
- .map(([k]) => k)
60
- return list
61
- .map(item => {
62
- let result = { ...item }
63
- f.forEach(r => {
64
- result = {
65
- ...result,
66
- ...parse(item[r], r)
67
- }
68
- })
69
- return result
70
- })
71
- }
72
-
73
- return {
74
- parse,
75
- resolve,
76
- }
1
+ // 解析脱敏姓名、手机号码等
2
+
3
+ export type CryptoConfig = {
4
+ maskField: string,
5
+ secretField: string,
6
+ }
7
+
8
+ export const defaultCryptoConfig: CryptoConfig = {
9
+ maskField: 'mask',
10
+ secretField: 'secretKey'
11
+ }
12
+
13
+ export type DecodeResult<T extends string> = {
14
+ [key in T | `${T}Secret`]: string
15
+ }
16
+
17
+ export type DefaultDecodeResult = DecodeResult<'masked'>
18
+
19
+ export type DecodeFunction = (encoded: string, key: string) => DecodeResult<`${key}`>
20
+
21
+ /**
22
+ * 解析以及解密脱敏数据
23
+ * @param config
24
+ * @returns
25
+ */
26
+ export function useCrypto (config?: CryptoConfig) {
27
+
28
+ const conf = config || defaultCryptoConfig
29
+
30
+ const parse: DecodeFunction = (data: string, key?: string) => {
31
+ let k = key || 'masked'
32
+ let result: Record<string, any> = {}
33
+ try {
34
+ result = JSON.parse(data)
35
+ result = {
36
+ [k]: result.mask,
37
+ // 字段后加$表示用于解密的 secret
38
+ [`${k}$`]: result.secretKey
39
+ }
40
+ } catch (e) {}
41
+ return result
42
+ }
43
+
44
+ /**
45
+ * 批量解析数组内的数据
46
+ * @param list
47
+ * @param field
48
+ * @returns
49
+ */
50
+ const resolve = (list: any[], field?: string | string[]) => {
51
+ if (list.length === 0) return []
52
+ const [first] = list,
53
+ f = field
54
+ ? Array.isArray(field) ? field : [field]
55
+ // 自动探测需要解密的字段
56
+ // '{"secretKey":"","mask":""}' 形式
57
+ : Object.entries(first)
58
+ .filter(([_, v]) => /^\{.*\}$/.test(v as string))
59
+ .map(([k]) => k)
60
+ return list
61
+ .map(item => {
62
+ let result = { ...item }
63
+ f.forEach(r => {
64
+ result = {
65
+ ...result,
66
+ ...parse(item[r], r)
67
+ }
68
+ })
69
+ return result
70
+ })
71
+ }
72
+
73
+ return {
74
+ parse,
75
+ resolve,
76
+ }
77
77
  }
@@ -1,61 +1,61 @@
1
- // 是否微信环境
2
- export function isWechat() {
3
- let ua = window.navigator.userAgent.toLowerCase()
4
- return ua.includes('micromessenger')
5
- }
6
-
7
- // 是否支付宝环境
8
- export function isAlipay() {
9
- let ua = window.navigator.userAgent.toLowerCase()
10
- return ua.includes('alipayclient')
11
- }
12
-
13
- // 判断是否为 iOS 设备
14
- export const isIOS = () => {
15
- if (typeof window !== 'undefined') {
16
- return /iPhone|iPad|iPod/i.test(window.navigator.userAgent)
17
- }
18
- return false
19
- }
20
-
21
- // 判断是否为 Android 设备
22
- export const isAndroid = () => {
23
- if (typeof window !== 'undefined') {
24
- return /Android/i.test(window.navigator.userAgent)
25
- }
26
- return false
27
- }
28
-
29
- /** 浏览器类型 */
30
- export type BrowserType = 'safari' | 'chrome' | 'other'
31
-
32
- /**
33
- * 获取当前浏览器类型
34
- * @returns 'safari' | 'chrome' | 'other'
35
- */
36
- export function getBrowser(): BrowserType {
37
- if (typeof window === 'undefined') return 'other'
38
- const ua = window.navigator.userAgent.toLowerCase()
39
- // Edge、Opera 等基于 Chromium 的浏览器归为 other,优先判断
40
- if (/edg\/|edge\//.test(ua) || /opr\/|opera/.test(ua)) return 'other'
41
- // Chrome(含 iOS 端 CriOS)
42
- if (/chrome\/|crios\//.test(ua)) return 'chrome'
43
- // Safari:含 safari 且不含 chrome(Chrome 的 UA 同时包含两者)
44
- if (/safari\//.test(ua) && !/chrome|crios/.test(ua)) return 'safari'
45
- return 'other'
46
- }
47
-
48
- /** 是否 Safari 浏览器 */
49
- export function isSafari(): boolean {
50
- return getBrowser() === 'safari'
51
- }
52
-
53
- /** 是否 Chrome 浏览器(含 iOS 端) */
54
- export function isChrome(): boolean {
55
- return getBrowser() === 'chrome'
56
- }
57
-
58
- /** 是否其他浏览器(非 Safari、非 Chrome) */
59
- export function isOtherBrowser(): boolean {
60
- return getBrowser() === 'other'
61
- }
1
+ // 是否微信环境
2
+ export function isWechat() {
3
+ let ua = window.navigator.userAgent.toLowerCase()
4
+ return ua.includes('micromessenger')
5
+ }
6
+
7
+ // 是否支付宝环境
8
+ export function isAlipay() {
9
+ let ua = window.navigator.userAgent.toLowerCase()
10
+ return ua.includes('alipayclient')
11
+ }
12
+
13
+ // 判断是否为 iOS 设备
14
+ export const isIOS = () => {
15
+ if (typeof window !== 'undefined') {
16
+ return /iPhone|iPad|iPod/i.test(window.navigator.userAgent)
17
+ }
18
+ return false
19
+ }
20
+
21
+ // 判断是否为 Android 设备
22
+ export const isAndroid = () => {
23
+ if (typeof window !== 'undefined') {
24
+ return /Android/i.test(window.navigator.userAgent)
25
+ }
26
+ return false
27
+ }
28
+
29
+ /** 浏览器类型 */
30
+ export type BrowserType = 'safari' | 'chrome' | 'other'
31
+
32
+ /**
33
+ * 获取当前浏览器类型
34
+ * @returns 'safari' | 'chrome' | 'other'
35
+ */
36
+ export function getBrowser(): BrowserType {
37
+ if (typeof window === 'undefined') return 'other'
38
+ const ua = window.navigator.userAgent.toLowerCase()
39
+ // Edge、Opera 等基于 Chromium 的浏览器归为 other,优先判断
40
+ if (/edg\/|edge\//.test(ua) || /opr\/|opera/.test(ua)) return 'other'
41
+ // Chrome(含 iOS 端 CriOS)
42
+ if (/chrome\/|crios\//.test(ua)) return 'chrome'
43
+ // Safari:含 safari 且不含 chrome(Chrome 的 UA 同时包含两者)
44
+ if (/safari\//.test(ua) && !/chrome|crios/.test(ua)) return 'safari'
45
+ return 'other'
46
+ }
47
+
48
+ /** 是否 Safari 浏览器 */
49
+ export function isSafari(): boolean {
50
+ return getBrowser() === 'safari'
51
+ }
52
+
53
+ /** 是否 Chrome 浏览器(含 iOS 端) */
54
+ export function isChrome(): boolean {
55
+ return getBrowser() === 'chrome'
56
+ }
57
+
58
+ /** 是否其他浏览器(非 Safari、非 Chrome) */
59
+ export function isOtherBrowser(): boolean {
60
+ return getBrowser() === 'other'
61
+ }
@@ -1,97 +1,97 @@
1
- /**
2
- * 元素拖拽功能
3
- */
4
- import Taro, { getSystemInfoSync } from '@tarojs/taro'
5
- import { reactive } from 'vue'
6
-
7
- export function useDragBox() {
8
- const dragData = reactive({
9
- left: 0, // 浮动按钮的左边距
10
- top: 0, // 浮动按钮的上边距
11
- width: 0, // 浮动按钮的宽度
12
- height: 0, // 浮动按钮的高度
13
- startX: 0, // 手指触摸起始点的横坐标
14
- startY: 0, // 手指触摸起始点的纵坐标
15
- screenWidth: 0, // 屏幕宽度
16
- screenHeight: 0, // 屏幕高度
17
- isDrag: false, // 是否开始拖拽
18
- oldLeft: 0,
19
- limitHorizontal: [0, 0], // 横向拖动限制范围
20
- limitVertical: [0, 0], // 纵向拖动限制范围
21
- })
22
-
23
- // 初始化元素拖拽模型
24
- function initDragData(data: any) {
25
- // 获取屏幕宽度和高度
26
- const res = getSystemInfoSync()
27
- dragData.screenWidth = res.windowWidth
28
- dragData.screenHeight = res.windowHeight
29
- if (!data) data = {}
30
-
31
- const scale = dragData.screenWidth / 375
32
- dragData.width = data.width * scale || 0
33
- dragData.height = data.height * scale || 0
34
- dragData.left = data.left * scale || 0
35
- dragData.top = data.top * scale || 0
36
- dragData.oldLeft = data.left * scale || 0
37
-
38
- if (data.limitHorizontal && data.limitHorizontal.length) {
39
- dragData.limitHorizontal = data.limitHorizontal
40
- }
41
- if (data.limitVertical && data.limitVertical.length) {
42
- dragData.limitVertical = data.limitVertical
43
- }
44
- }
45
-
46
- // 触屏开始
47
- function onDragStart(event: any) {
48
- dragData.startX = event.touches[0].clientX
49
- dragData.startY = event.touches[0].clientY
50
- dragData.isDrag = true
51
- }
52
-
53
- // 触屏移动
54
- function onDragMove(event: any) {
55
- const moveX = event.touches[0].clientX - dragData.startX
56
- const moveY = event.touches[0].clientY - dragData.startY
57
-
58
- let left = dragData.left + moveX
59
- let top = dragData.top + moveY
60
-
61
- // 防止浮动按钮移出屏幕
62
- if (left < dragData.limitHorizontal[0]) {
63
- left = dragData.limitHorizontal[0]
64
- } else if (left > dragData.screenWidth - dragData.width - dragData.limitHorizontal[1]) {
65
- left = dragData.screenWidth - dragData.width - dragData.limitHorizontal[1]
66
- }
67
-
68
- if (top < dragData.limitVertical[0]) {
69
- top = dragData.limitVertical[0]
70
- } else if (top > dragData.screenHeight - dragData.height - dragData.limitVertical[1]) {
71
- top = dragData.screenHeight - dragData.height - dragData.limitVertical[1]
72
- }
73
-
74
- dragData.left = left
75
- dragData.top = top
76
-
77
- dragData.startX = event.touches[0].clientX
78
- dragData.startY = event.touches[0].clientY
79
-
80
- // 阻止页面滚动
81
- event.preventDefault()
82
- }
83
-
84
- // 触屏结束
85
- function onDragEnd() {
86
- dragData.isDrag = false
87
- dragData.left = dragData.oldLeft
88
- }
89
-
90
- return {
91
- dragData,
92
- initDragData,
93
- onDragStart,
94
- onDragMove,
95
- onDragEnd,
96
- }
97
- }
1
+ /**
2
+ * 元素拖拽功能
3
+ */
4
+ import Taro, { getSystemInfoSync } from '@tarojs/taro'
5
+ import { reactive } from 'vue'
6
+
7
+ export function useDragBox() {
8
+ const dragData = reactive({
9
+ left: 0, // 浮动按钮的左边距
10
+ top: 0, // 浮动按钮的上边距
11
+ width: 0, // 浮动按钮的宽度
12
+ height: 0, // 浮动按钮的高度
13
+ startX: 0, // 手指触摸起始点的横坐标
14
+ startY: 0, // 手指触摸起始点的纵坐标
15
+ screenWidth: 0, // 屏幕宽度
16
+ screenHeight: 0, // 屏幕高度
17
+ isDrag: false, // 是否开始拖拽
18
+ oldLeft: 0,
19
+ limitHorizontal: [0, 0], // 横向拖动限制范围
20
+ limitVertical: [0, 0], // 纵向拖动限制范围
21
+ })
22
+
23
+ // 初始化元素拖拽模型
24
+ function initDragData(data: any) {
25
+ // 获取屏幕宽度和高度
26
+ const res = getSystemInfoSync()
27
+ dragData.screenWidth = res.windowWidth
28
+ dragData.screenHeight = res.windowHeight
29
+ if (!data) data = {}
30
+
31
+ const scale = dragData.screenWidth / 375
32
+ dragData.width = data.width * scale || 0
33
+ dragData.height = data.height * scale || 0
34
+ dragData.left = data.left * scale || 0
35
+ dragData.top = data.top * scale || 0
36
+ dragData.oldLeft = data.left * scale || 0
37
+
38
+ if (data.limitHorizontal && data.limitHorizontal.length) {
39
+ dragData.limitHorizontal = data.limitHorizontal
40
+ }
41
+ if (data.limitVertical && data.limitVertical.length) {
42
+ dragData.limitVertical = data.limitVertical
43
+ }
44
+ }
45
+
46
+ // 触屏开始
47
+ function onDragStart(event: any) {
48
+ dragData.startX = event.touches[0].clientX
49
+ dragData.startY = event.touches[0].clientY
50
+ dragData.isDrag = true
51
+ }
52
+
53
+ // 触屏移动
54
+ function onDragMove(event: any) {
55
+ const moveX = event.touches[0].clientX - dragData.startX
56
+ const moveY = event.touches[0].clientY - dragData.startY
57
+
58
+ let left = dragData.left + moveX
59
+ let top = dragData.top + moveY
60
+
61
+ // 防止浮动按钮移出屏幕
62
+ if (left < dragData.limitHorizontal[0]) {
63
+ left = dragData.limitHorizontal[0]
64
+ } else if (left > dragData.screenWidth - dragData.width - dragData.limitHorizontal[1]) {
65
+ left = dragData.screenWidth - dragData.width - dragData.limitHorizontal[1]
66
+ }
67
+
68
+ if (top < dragData.limitVertical[0]) {
69
+ top = dragData.limitVertical[0]
70
+ } else if (top > dragData.screenHeight - dragData.height - dragData.limitVertical[1]) {
71
+ top = dragData.screenHeight - dragData.height - dragData.limitVertical[1]
72
+ }
73
+
74
+ dragData.left = left
75
+ dragData.top = top
76
+
77
+ dragData.startX = event.touches[0].clientX
78
+ dragData.startY = event.touches[0].clientY
79
+
80
+ // 阻止页面滚动
81
+ event.preventDefault()
82
+ }
83
+
84
+ // 触屏结束
85
+ function onDragEnd() {
86
+ dragData.isDrag = false
87
+ dragData.left = dragData.oldLeft
88
+ }
89
+
90
+ return {
91
+ dragData,
92
+ initDragData,
93
+ onDragStart,
94
+ onDragMove,
95
+ onDragEnd,
96
+ }
97
+ }
@@ -1,43 +1,43 @@
1
- /**
2
- * @description: 脱敏相关方法
3
- */
4
-
5
- export function useEncode() {
6
- // 姓名脱敏
7
- function encodeName(name: string) {
8
- name = name.trim()
9
- if (name.length > 2) {
10
- return name[0].padEnd(name.length - 1, '*') + (name[name.length - 1] || '')
11
- }
12
- if (name.length == 0) {
13
- return ''
14
- } else {
15
- return name[0].padEnd(name.length, '*')
16
- }
17
- }
18
-
19
- // 证件脱敏
20
- function encodeCard(card: string) {
21
- if (card.length === 18) {
22
- return card.replace(/(\d{6})\d{8}(\d{3}.)/g, '$1********$2')
23
- } else {
24
- return card
25
- }
26
- }
27
-
28
- // 手机脱敏
29
- function encodePhone(phone: string) {
30
- phone = String(phone)
31
- if (phone.length === 11) {
32
- return phone.replace(/(1\d{2})\d{4}(\d{4})/g, '$1****$2')
33
- } else {
34
- return phone
35
- }
36
- }
37
-
38
- return {
39
- encodeName,
40
- encodeCard,
41
- encodePhone,
42
- }
43
- }
1
+ /**
2
+ * @description: 脱敏相关方法
3
+ */
4
+
5
+ export function useEncode() {
6
+ // 姓名脱敏
7
+ function encodeName(name: string) {
8
+ name = name.trim()
9
+ if (name.length > 2) {
10
+ return name[0].padEnd(name.length - 1, '*') + (name[name.length - 1] || '')
11
+ }
12
+ if (name.length == 0) {
13
+ return ''
14
+ } else {
15
+ return name[0].padEnd(name.length, '*')
16
+ }
17
+ }
18
+
19
+ // 证件脱敏
20
+ function encodeCard(card: string) {
21
+ if (card.length === 18) {
22
+ return card.replace(/(\d{6})\d{8}(\d{3}.)/g, '$1********$2')
23
+ } else {
24
+ return card
25
+ }
26
+ }
27
+
28
+ // 手机脱敏
29
+ function encodePhone(phone: string) {
30
+ phone = String(phone)
31
+ if (phone.length === 11) {
32
+ return phone.replace(/(1\d{2})\d{4}(\d{4})/g, '$1****$2')
33
+ } else {
34
+ return phone
35
+ }
36
+ }
37
+
38
+ return {
39
+ encodeName,
40
+ encodeCard,
41
+ encodePhone,
42
+ }
43
+ }