@uxda/appkit 4.1.56 → 4.1.60
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.
- package/.eslintrc.mjs +7 -7
- package/README.md +187 -187
- package/babel.config.js +12 -12
- package/dist/appkit.css +6 -8
- package/dist/index.js +2 -1
- package/package.json +77 -77
- package/project.config.json +15 -15
- package/project.tt.json +13 -13
- package/rollup.config.mjs +56 -56
- package/src/Appkit.ts +66 -66
- package/src/balance/api/endpoints.ts +133 -133
- package/src/balance/api/index.ts +106 -106
- package/src/balance/components/AccountView.vue +750 -749
- package/src/balance/components/BalanceCard.vue +215 -215
- package/src/balance/components/BalanceReminder.vue +85 -85
- package/src/balance/components/ConsumptionFilter.vue +218 -218
- package/src/balance/components/ConsumptionRules.vue +68 -68
- package/src/balance/components/DateFilter.vue +250 -250
- package/src/balance/components/DateRange.vue +80 -80
- package/src/balance/components/ListFilter.vue +62 -62
- package/src/balance/components/ListFilterPicker.vue +191 -191
- package/src/balance/components/PromoterCard.vue +237 -237
- package/src/balance/components/SecondBalance.vue +71 -71
- package/src/balance/components/Tip.vue +45 -45
- package/src/balance/components/index.ts +8 -8
- package/src/balance/types.ts +97 -97
- package/src/components/bt-cropper/index.vue +774 -774
- package/src/components/bt-cropper/utils/calcCropper.js +42 -42
- package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
- package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
- package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
- package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
- package/src/components/bt-cropper/utils/ratio.js +3 -3
- package/src/components/bt-cropper/utils/tools.js +25 -25
- package/src/components/dd-area/index.vue +225 -225
- package/src/components/dd-icon/doc.md +21 -21
- package/src/components/dd-icon/index.vue +23 -23
- package/src/components/dd-notice-bar/index.vue +78 -78
- package/src/components/dd-search/doc.md +34 -34
- package/src/components/dd-search/index.vue +168 -168
- package/src/components/dd-selector/index.vue +124 -124
- package/src/components/dd-skeleton/doc.md +19 -19
- package/src/components/dd-skeleton/index.vue +36 -36
- package/src/global.ts +6 -6
- package/src/index.ts +89 -89
- package/src/main.scss +1 -1
- package/src/notice/api/endpoints.ts +17 -17
- package/src/notice/api/index.ts +106 -106
- package/src/notice/components/NoticeBanner.vue +243 -243
- package/src/notice/components/NoticeEntry.vue +99 -99
- package/src/notice/components/NoticeList.vue +315 -315
- package/src/notice/components/NoticePopup.vue +162 -162
- package/src/notice/components/index.ts +5 -5
- package/src/notice/components/useCommonList.ts +86 -86
- package/src/notice/components/useNotice.ts +35 -35
- package/src/notice/index.ts +1 -1
- package/src/notice/types.ts +25 -25
- package/src/payment/api/config.ts +7 -7
- package/src/payment/api/endpoints.ts +103 -103
- package/src/payment/api/index.ts +100 -100
- package/src/payment/components/AmountPicker.vue +90 -90
- package/src/payment/components/RechargeResult.vue +69 -69
- package/src/payment/components/RechargeView.vue +155 -155
- package/src/payment/components/RightsPicker.vue +105 -105
- package/src/payment/components/TradeView.vue +317 -317
- package/src/payment/components/UserAgreement.vue +234 -234
- package/src/payment/components/index.ts +22 -22
- package/src/payment/index.ts +5 -5
- package/src/payment/services/index.ts +16 -16
- package/src/payment/services/invoke-recharge.ts +25 -25
- package/src/payment/services/request-payment.ts +58 -58
- package/src/payment/types.ts +28 -28
- package/src/register/components/SelfRegistration.vue +233 -233
- package/src/register/components/index.ts +2 -2
- package/src/shared/components/AppDrawer.vue +54 -58
- package/src/shared/components/AppVerify.vue +128 -128
- package/src/shared/components/DeviceVersion.vue +68 -68
- package/src/shared/components/EmptyView.vue +33 -33
- package/src/shared/components/OcrBusinessLicense.vue +130 -130
- package/src/shared/components/OcrIcon.vue +202 -202
- package/src/shared/components/PageHeader.vue +79 -79
- package/src/shared/components/index.ts +8 -8
- package/src/shared/composables/index.ts +8 -8
- package/src/shared/composables/useAmount.ts +46 -46
- package/src/shared/composables/useCountdown.ts +46 -46
- package/src/shared/composables/useCrypto.ts +76 -76
- package/src/shared/composables/useDragBox.ts +97 -97
- package/src/shared/composables/useEncode.ts +43 -43
- package/src/shared/composables/useLogger.ts +123 -123
- package/src/shared/composables/useSafeArea.ts +46 -46
- package/src/shared/composables/useTabbar.ts +24 -24
- package/src/shared/composables/useUpload.ts +54 -54
- package/src/shared/composables/useValidator.ts +31 -31
- package/src/shared/http/Http.ts +136 -136
- package/src/shared/http/index.ts +1 -1
- package/src/shared/http/types.ts +157 -157
- package/src/shared/index.ts +3 -3
- package/src/shared/weixin/payment.ts +38 -38
- package/src/styles/vars.scss +3 -3
- package/src/user/api/endpoints.ts +17 -17
- package/src/user/api/index.ts +111 -111
- package/src/user/components/LoginSetting.vue +114 -114
- package/src/user/components/UserAuth.vue +216 -216
- package/src/user/components/UserBinding.vue +307 -307
- package/src/user/components/UserBindingSuccess.vue +80 -80
- package/src/user/components/UserEntry.vue +133 -133
- package/src/user/components/UserFeedback.vue +431 -431
- package/src/user/components/UserFeedbackEntry.vue +192 -192
- package/src/user/components/UserHeadCrop.vue +65 -65
- package/src/user/components/UserInfo.vue +723 -723
- package/src/user/components/UserResourceEmpty.vue +75 -75
- package/src/user/components/index.ts +23 -23
- package/src/user/index.ts +1 -1
- package/tsconfig.json +30 -30
- package/types/global.d.ts +21 -21
- package/types/vue.d.ts +10 -10
- package/dist/assets/asset-3B_CoPto +0 -1
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 元素拖拽功能
|
|
3
|
-
*/
|
|
4
|
-
import Taro 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 = Taro.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 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 = Taro.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
|
+
}
|
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记录阿里日志
|
|
3
|
-
* 生产: https://sls.console.aliyun.com/lognext/project/ddyk-prod/logsearch/ddjf-internet-web
|
|
4
|
-
*/
|
|
5
|
-
import { useAppKitOptions } from '../../Appkit'
|
|
6
|
-
import Taro from '@tarojs/taro'
|
|
7
|
-
|
|
8
|
-
interface LogType {
|
|
9
|
-
projectName?: string
|
|
10
|
-
logStore?: string
|
|
11
|
-
topic?: string
|
|
12
|
-
APIVersion?: string
|
|
13
|
-
baseUrl?: string
|
|
14
|
-
alislsURL?: string
|
|
15
|
-
systemInfo?: string
|
|
16
|
-
enable?: boolean
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const defaultLogOptions: LogType = {
|
|
20
|
-
projectName: 'ddyk-dev',
|
|
21
|
-
logStore: 'ddjf-internet-web',
|
|
22
|
-
topic: 'appkit',
|
|
23
|
-
enable: true,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 使用时间戳生成唯一标识
|
|
27
|
-
export function generateUniqueId(pre?: string) {
|
|
28
|
-
return `${pre ? pre + '-' : ''}${Date.now().toString(16)}-${Math.random().toString(36).substr(2)}`
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function useLogger(options?: LogType) {
|
|
32
|
-
const appkitOptions = useAppKitOptions()
|
|
33
|
-
const url = appkitOptions.baseUrl()
|
|
34
|
-
|
|
35
|
-
if (url.includes('ytech.ddjf.com')) {
|
|
36
|
-
defaultLogOptions.projectName = 'ddyk-prod'
|
|
37
|
-
}
|
|
38
|
-
if (options) {
|
|
39
|
-
options = Object.assign(defaultLogOptions, options)
|
|
40
|
-
} else {
|
|
41
|
-
options = defaultLogOptions
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const projectName = options.projectName
|
|
45
|
-
const logStore = options.logStore
|
|
46
|
-
const topic = options.topic || ''
|
|
47
|
-
const APIVersion = '0.6.0'
|
|
48
|
-
const baseUrl = `https://${projectName}.cn-shenzhen.log.aliyuncs.com/logstores/${logStore}/track?APIVersion=${APIVersion}`
|
|
49
|
-
const alislsURL = topic ? `${baseUrl}&__topic__=${topic}` : baseUrl
|
|
50
|
-
const enable = options.enable === undefined ? true : options.enable
|
|
51
|
-
|
|
52
|
-
const { miniProgram } = Taro.getAccountInfoSync()
|
|
53
|
-
const systemInfo =
|
|
54
|
-
JSON.stringify({
|
|
55
|
-
...Taro.getSystemInfoSync(),
|
|
56
|
-
appVersion: miniProgram.version,
|
|
57
|
-
}) || '未知'
|
|
58
|
-
|
|
59
|
-
function send(params: Record<string, any>) {
|
|
60
|
-
if (!enable) return
|
|
61
|
-
|
|
62
|
-
params.systemInfo = systemInfo
|
|
63
|
-
const token = appkitOptions.tempToken() || appkitOptions.token()
|
|
64
|
-
if (token) {
|
|
65
|
-
params.userInfo = token
|
|
66
|
-
}
|
|
67
|
-
if (params.msg && !params.send) {
|
|
68
|
-
params.send = params.msg
|
|
69
|
-
}
|
|
70
|
-
if (params.send) {
|
|
71
|
-
params.send = params.send.slice(0, 1024)
|
|
72
|
-
}
|
|
73
|
-
if (params.receive) {
|
|
74
|
-
params.receive = params.receive.slice(0, 1024)
|
|
75
|
-
}
|
|
76
|
-
if (params.duration) {
|
|
77
|
-
params.duration = params.duration
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// 记录页面栈信息
|
|
81
|
-
const pages = Taro.getCurrentPages()
|
|
82
|
-
const currentPage = pages?.[pages.length - 1]
|
|
83
|
-
const lastPage = pages?.[pages.length - 2]
|
|
84
|
-
params.pages = JSON.stringify({
|
|
85
|
-
current: currentPage?.$taroPath,
|
|
86
|
-
last: lastPage?.$taroPath,
|
|
87
|
-
}).slice(0, 1024)
|
|
88
|
-
|
|
89
|
-
console.log(params)
|
|
90
|
-
|
|
91
|
-
const tmpStr = Object.keys(params)
|
|
92
|
-
.map((key) => `${key}=${encodeURIComponent(params[key])}`)
|
|
93
|
-
.join('&')
|
|
94
|
-
const url = `${alislsURL}&${tmpStr}`
|
|
95
|
-
Taro.request({ url })
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function info(params: any) {
|
|
99
|
-
if (!enable) return
|
|
100
|
-
send({
|
|
101
|
-
send: params.send ?? '',
|
|
102
|
-
receive: params.receive ?? '',
|
|
103
|
-
duration: params.duration ?? '',
|
|
104
|
-
traceId: params.traceId as string,
|
|
105
|
-
level: 'info',
|
|
106
|
-
})
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function error(params: any) {
|
|
110
|
-
if (!enable) return
|
|
111
|
-
send({
|
|
112
|
-
send: params.send ?? '',
|
|
113
|
-
receive: params.receive ?? '',
|
|
114
|
-
traceId: params.traceId as string,
|
|
115
|
-
level: 'error',
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
info,
|
|
121
|
-
error,
|
|
122
|
-
}
|
|
123
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 记录阿里日志
|
|
3
|
+
* 生产: https://sls.console.aliyun.com/lognext/project/ddyk-prod/logsearch/ddjf-internet-web
|
|
4
|
+
*/
|
|
5
|
+
import { useAppKitOptions } from '../../Appkit'
|
|
6
|
+
import Taro from '@tarojs/taro'
|
|
7
|
+
|
|
8
|
+
interface LogType {
|
|
9
|
+
projectName?: string
|
|
10
|
+
logStore?: string
|
|
11
|
+
topic?: string
|
|
12
|
+
APIVersion?: string
|
|
13
|
+
baseUrl?: string
|
|
14
|
+
alislsURL?: string
|
|
15
|
+
systemInfo?: string
|
|
16
|
+
enable?: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const defaultLogOptions: LogType = {
|
|
20
|
+
projectName: 'ddyk-dev',
|
|
21
|
+
logStore: 'ddjf-internet-web',
|
|
22
|
+
topic: 'appkit',
|
|
23
|
+
enable: true,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// 使用时间戳生成唯一标识
|
|
27
|
+
export function generateUniqueId(pre?: string) {
|
|
28
|
+
return `${pre ? pre + '-' : ''}${Date.now().toString(16)}-${Math.random().toString(36).substr(2)}`
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function useLogger(options?: LogType) {
|
|
32
|
+
const appkitOptions = useAppKitOptions()
|
|
33
|
+
const url = appkitOptions.baseUrl()
|
|
34
|
+
|
|
35
|
+
if (url.includes('ytech.ddjf.com')) {
|
|
36
|
+
defaultLogOptions.projectName = 'ddyk-prod'
|
|
37
|
+
}
|
|
38
|
+
if (options) {
|
|
39
|
+
options = Object.assign(defaultLogOptions, options)
|
|
40
|
+
} else {
|
|
41
|
+
options = defaultLogOptions
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const projectName = options.projectName
|
|
45
|
+
const logStore = options.logStore
|
|
46
|
+
const topic = options.topic || ''
|
|
47
|
+
const APIVersion = '0.6.0'
|
|
48
|
+
const baseUrl = `https://${projectName}.cn-shenzhen.log.aliyuncs.com/logstores/${logStore}/track?APIVersion=${APIVersion}`
|
|
49
|
+
const alislsURL = topic ? `${baseUrl}&__topic__=${topic}` : baseUrl
|
|
50
|
+
const enable = options.enable === undefined ? true : options.enable
|
|
51
|
+
|
|
52
|
+
const { miniProgram } = Taro.getAccountInfoSync()
|
|
53
|
+
const systemInfo =
|
|
54
|
+
JSON.stringify({
|
|
55
|
+
...Taro.getSystemInfoSync(),
|
|
56
|
+
appVersion: miniProgram.version,
|
|
57
|
+
}) || '未知'
|
|
58
|
+
|
|
59
|
+
function send(params: Record<string, any>) {
|
|
60
|
+
if (!enable) return
|
|
61
|
+
|
|
62
|
+
params.systemInfo = systemInfo
|
|
63
|
+
const token = appkitOptions.tempToken() || appkitOptions.token()
|
|
64
|
+
if (token) {
|
|
65
|
+
params.userInfo = token
|
|
66
|
+
}
|
|
67
|
+
if (params.msg && !params.send) {
|
|
68
|
+
params.send = params.msg
|
|
69
|
+
}
|
|
70
|
+
if (params.send) {
|
|
71
|
+
params.send = params.send.slice(0, 1024)
|
|
72
|
+
}
|
|
73
|
+
if (params.receive) {
|
|
74
|
+
params.receive = params.receive.slice(0, 1024)
|
|
75
|
+
}
|
|
76
|
+
if (params.duration) {
|
|
77
|
+
params.duration = params.duration
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// 记录页面栈信息
|
|
81
|
+
const pages = Taro.getCurrentPages()
|
|
82
|
+
const currentPage = pages?.[pages.length - 1]
|
|
83
|
+
const lastPage = pages?.[pages.length - 2]
|
|
84
|
+
params.pages = JSON.stringify({
|
|
85
|
+
current: currentPage?.$taroPath,
|
|
86
|
+
last: lastPage?.$taroPath,
|
|
87
|
+
}).slice(0, 1024)
|
|
88
|
+
|
|
89
|
+
console.log(params)
|
|
90
|
+
|
|
91
|
+
const tmpStr = Object.keys(params)
|
|
92
|
+
.map((key) => `${key}=${encodeURIComponent(params[key])}`)
|
|
93
|
+
.join('&')
|
|
94
|
+
const url = `${alislsURL}&${tmpStr}`
|
|
95
|
+
Taro.request({ url })
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function info(params: any) {
|
|
99
|
+
if (!enable) return
|
|
100
|
+
send({
|
|
101
|
+
send: params.send ?? '',
|
|
102
|
+
receive: params.receive ?? '',
|
|
103
|
+
duration: params.duration ?? '',
|
|
104
|
+
traceId: params.traceId as string,
|
|
105
|
+
level: 'info',
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function error(params: any) {
|
|
110
|
+
if (!enable) return
|
|
111
|
+
send({
|
|
112
|
+
send: params.send ?? '',
|
|
113
|
+
receive: params.receive ?? '',
|
|
114
|
+
traceId: params.traceId as string,
|
|
115
|
+
level: 'error',
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
info,
|
|
121
|
+
error,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import Taro from '@tarojs/taro'
|
|
2
|
-
/**
|
|
3
|
-
* 屏幕安全区域
|
|
4
|
-
*/
|
|
5
|
-
export type SafeArea = {
|
|
6
|
-
/**
|
|
7
|
-
* 状态条高度
|
|
8
|
-
*/
|
|
9
|
-
status: number
|
|
10
|
-
/**
|
|
11
|
-
* 导航条区域(胶囊)
|
|
12
|
-
*/
|
|
13
|
-
nav: number
|
|
14
|
-
/**
|
|
15
|
-
* 屏幕底部范围
|
|
16
|
-
*/
|
|
17
|
-
bottom: number
|
|
18
|
-
menuRect: any
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 获取屏幕安全区域
|
|
23
|
-
* 从系统 API 获取
|
|
24
|
-
* @returns
|
|
25
|
-
*/
|
|
26
|
-
export function useSafeArea(): SafeArea {
|
|
27
|
-
const systemInfo = Taro.getSystemInfoSync(),
|
|
28
|
-
capsule = Taro.getMenuButtonBoundingClientRect()
|
|
29
|
-
/**
|
|
30
|
-
* 状态条高度
|
|
31
|
-
*/
|
|
32
|
-
const status = systemInfo.statusBarHeight || 0,
|
|
33
|
-
/**
|
|
34
|
-
* 据说是胶囊上下间距
|
|
35
|
-
*/
|
|
36
|
-
gap = capsule.top - status,
|
|
37
|
-
nav = capsule.height + gap * 2,
|
|
38
|
-
safeAreaBottom = (systemInfo.safeArea || {}).bottom || 0,
|
|
39
|
-
bottom = systemInfo.screenHeight - safeAreaBottom
|
|
40
|
-
return {
|
|
41
|
-
status,
|
|
42
|
-
nav,
|
|
43
|
-
bottom,
|
|
44
|
-
menuRect: capsule,
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
import Taro from '@tarojs/taro'
|
|
2
|
+
/**
|
|
3
|
+
* 屏幕安全区域
|
|
4
|
+
*/
|
|
5
|
+
export type SafeArea = {
|
|
6
|
+
/**
|
|
7
|
+
* 状态条高度
|
|
8
|
+
*/
|
|
9
|
+
status: number
|
|
10
|
+
/**
|
|
11
|
+
* 导航条区域(胶囊)
|
|
12
|
+
*/
|
|
13
|
+
nav: number
|
|
14
|
+
/**
|
|
15
|
+
* 屏幕底部范围
|
|
16
|
+
*/
|
|
17
|
+
bottom: number
|
|
18
|
+
menuRect: any
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 获取屏幕安全区域
|
|
23
|
+
* 从系统 API 获取
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export function useSafeArea(): SafeArea {
|
|
27
|
+
const systemInfo = Taro.getSystemInfoSync(),
|
|
28
|
+
capsule = Taro.getMenuButtonBoundingClientRect()
|
|
29
|
+
/**
|
|
30
|
+
* 状态条高度
|
|
31
|
+
*/
|
|
32
|
+
const status = systemInfo.statusBarHeight || 0,
|
|
33
|
+
/**
|
|
34
|
+
* 据说是胶囊上下间距
|
|
35
|
+
*/
|
|
36
|
+
gap = capsule.top - status,
|
|
37
|
+
nav = capsule.height + gap * 2,
|
|
38
|
+
safeAreaBottom = (systemInfo.safeArea || {}).bottom || 0,
|
|
39
|
+
bottom = systemInfo.screenHeight - safeAreaBottom
|
|
40
|
+
return {
|
|
41
|
+
status,
|
|
42
|
+
nav,
|
|
43
|
+
bottom,
|
|
44
|
+
menuRect: capsule,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { ref } from 'vue'
|
|
2
|
-
|
|
3
|
-
const tab = ref<string>(''),
|
|
4
|
-
changeCallback = ref<(value: string) => void>(
|
|
5
|
-
(value: string) => {
|
|
6
|
-
console.log('ORIGINAL changeCallback===', value)
|
|
7
|
-
}
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
const setTab = (value: string) => {
|
|
11
|
-
tab.value = value
|
|
12
|
-
changeCallback.value(value)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const onTabChange = (callback: (value: string) => void) => {
|
|
16
|
-
changeCallback.value = callback
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function useTabbar () {
|
|
20
|
-
return {
|
|
21
|
-
onTabChange,
|
|
22
|
-
setTab
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
const tab = ref<string>(''),
|
|
4
|
+
changeCallback = ref<(value: string) => void>(
|
|
5
|
+
(value: string) => {
|
|
6
|
+
console.log('ORIGINAL changeCallback===', value)
|
|
7
|
+
}
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
const setTab = (value: string) => {
|
|
11
|
+
tab.value = value
|
|
12
|
+
changeCallback.value(value)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const onTabChange = (callback: (value: string) => void) => {
|
|
16
|
+
changeCallback.value = callback
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function useTabbar () {
|
|
20
|
+
return {
|
|
21
|
+
onTabChange,
|
|
22
|
+
setTab
|
|
23
|
+
}
|
|
24
|
+
}
|