@uxda/appkit 4.1.16 → 4.1.19

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 (116) hide show
  1. package/.eslintrc.mjs +7 -7
  2. package/README.md +187 -187
  3. package/babel.config.js +12 -12
  4. package/dist/appkit.css +25 -22
  5. package/dist/assets/asset-3B_CoPto +1 -0
  6. package/dist/index.js +1141 -1036
  7. package/package.json +77 -75
  8. package/project.config.json +15 -15
  9. package/project.tt.json +13 -13
  10. package/rollup.config.mjs +56 -56
  11. package/src/Appkit.ts +72 -65
  12. package/src/balance/api/endpoints.ts +126 -126
  13. package/src/balance/api/index.ts +82 -82
  14. package/src/balance/components/AccountView.vue +748 -748
  15. package/src/balance/components/BalanceCard.vue +205 -205
  16. package/src/balance/components/BalanceReminder.vue +85 -85
  17. package/src/balance/components/ConsumptionFilter.vue +218 -218
  18. package/src/balance/components/ConsumptionRules.vue +68 -68
  19. package/src/balance/components/DateFilter.vue +249 -227
  20. package/src/balance/components/DateRange.vue +80 -77
  21. package/src/balance/components/ListFilter.vue +63 -63
  22. package/src/balance/components/ListFilterPicker.vue +186 -186
  23. package/src/balance/components/SecondBalance.vue +71 -71
  24. package/src/balance/components/Tip.vue +45 -45
  25. package/src/balance/components/index.ts +13 -13
  26. package/src/balance/types.ts +91 -91
  27. package/src/components/bt-cropper/index.vue +774 -774
  28. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  29. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  30. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  31. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  32. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  33. package/src/components/bt-cropper/utils/ratio.js +3 -3
  34. package/src/components/bt-cropper/utils/tools.js +25 -25
  35. package/src/components/dd-area/index.vue +225 -225
  36. package/src/components/dd-icon/doc.md +21 -21
  37. package/src/components/dd-icon/index.vue +23 -23
  38. package/src/components/dd-notice-bar/index.vue +78 -78
  39. package/src/components/dd-search/doc.md +34 -34
  40. package/src/components/dd-search/index.vue +168 -168
  41. package/src/components/dd-selector/index.vue +124 -124
  42. package/src/components/dd-skeleton/doc.md +19 -19
  43. package/src/components/dd-skeleton/index.vue +36 -36
  44. package/src/components/ocr-id/index.vue +114 -114
  45. package/src/components/ocr-id/types.d.ts +12 -12
  46. package/src/global.ts +6 -6
  47. package/src/index.ts +93 -89
  48. package/src/main.scss +1 -1
  49. package/src/notice/api/endpoints.ts +17 -17
  50. package/src/notice/api/index.ts +82 -82
  51. package/src/notice/components/NoticeBanner.vue +243 -243
  52. package/src/notice/components/NoticeEntry.vue +99 -99
  53. package/src/notice/components/NoticeList.vue +315 -315
  54. package/src/notice/components/NoticePopup.vue +162 -162
  55. package/src/notice/components/index.ts +5 -5
  56. package/src/notice/components/useCommonList.ts +86 -86
  57. package/src/notice/components/useNotice.ts +35 -35
  58. package/src/notice/index.ts +1 -1
  59. package/src/notice/types.ts +25 -25
  60. package/src/payment/api/config.ts +7 -7
  61. package/src/payment/api/endpoints.ts +103 -103
  62. package/src/payment/api/index.ts +76 -71
  63. package/src/payment/components/AmountPicker.vue +93 -93
  64. package/src/payment/components/RechargeResult.vue +69 -69
  65. package/src/payment/components/RechargeView.vue +154 -151
  66. package/src/payment/components/RightsPicker.vue +105 -105
  67. package/src/payment/components/TradeView.vue +294 -294
  68. package/src/payment/components/UserAgreement.vue +234 -234
  69. package/src/payment/components/index.ts +22 -22
  70. package/src/payment/index.ts +5 -5
  71. package/src/payment/services/index.ts +16 -16
  72. package/src/payment/services/invoke-recharge.ts +25 -25
  73. package/src/payment/services/request-payment.ts +58 -58
  74. package/src/payment/types.ts +28 -28
  75. package/src/register/components/SelfRegistration.vue +254 -254
  76. package/src/register/components/index.ts +2 -2
  77. package/src/shared/components/AppDrawer.vue +58 -58
  78. package/src/shared/components/AppVerify.vue +129 -129
  79. package/src/shared/components/DeviceVersion.vue +68 -68
  80. package/src/shared/components/EmptyView.vue +33 -33
  81. package/src/shared/components/OcrBusinessLicense.vue +133 -130
  82. package/src/shared/components/OcrIcon.vue +133 -132
  83. package/src/shared/components/PageHeader.vue +79 -79
  84. package/src/shared/components/index.ts +8 -8
  85. package/src/shared/composables/index.ts +7 -7
  86. package/src/shared/composables/useCountdown.ts +46 -46
  87. package/src/shared/composables/useCrypto.ts +76 -76
  88. package/src/shared/composables/useDragBox.ts +97 -97
  89. package/src/shared/composables/useEncode.ts +43 -43
  90. package/src/shared/composables/useSafeArea.ts +46 -46
  91. package/src/shared/composables/useTabbar.ts +24 -24
  92. package/src/shared/composables/useUpload.ts +54 -54
  93. package/src/shared/composables/useValidator.ts +31 -31
  94. package/src/shared/http/Http.ts +136 -136
  95. package/src/shared/http/index.ts +1 -1
  96. package/src/shared/http/types.ts +157 -157
  97. package/src/shared/index.ts +3 -3
  98. package/src/shared/weixin/payment.ts +38 -38
  99. package/src/styles/fonts.scss +2 -2
  100. package/src/styles/vars.scss +3 -3
  101. package/src/user/api/endpoints.ts +17 -17
  102. package/src/user/api/index.ts +87 -87
  103. package/src/user/components/LoginSetting.vue +114 -114
  104. package/src/user/components/UserBinding.vue +307 -307
  105. package/src/user/components/UserBindingSuccess.vue +80 -80
  106. package/src/user/components/UserEntry.vue +137 -137
  107. package/src/user/components/UserFeedback.vue +431 -431
  108. package/src/user/components/UserFeedbackEntry.vue +192 -192
  109. package/src/user/components/UserHeadCrop.vue +65 -65
  110. package/src/user/components/UserInfo.vue +637 -637
  111. package/src/user/components/UserResourceEmpty.vue +75 -75
  112. package/src/user/components/index.ts +21 -21
  113. package/src/user/index.ts +1 -1
  114. package/tsconfig.json +30 -30
  115. package/types/global.d.ts +21 -21
  116. package/types/vue.d.ts +10 -10
@@ -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,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
+ }
@@ -1,55 +1,55 @@
1
- import Taro from '@tarojs/taro'
2
- import { Media } from '@uxda/nutshell/taro'
3
-
4
- export type UploadConfig = {
5
- baseUrl: string,
6
- name?: string,
7
- headers?: Record<string, string>
8
- }
9
-
10
- const mappings: {[x: string]: keyof Media} = {
11
- downloadUrl: 'thrumb',
12
- fileId: 'id',
13
- fileName: 'name',
14
- fileSize: 'size',
15
- fileSuffix: 'ext',
16
- fileType: 'type',
17
- originalUrl: 'url'
18
- }
19
-
20
- const transformFields = (row: any) => {
21
- return Object.fromEntries(Object.entries(row).map(([k, v]) => [mappings[k] || k, v]))
22
- }
23
-
24
- type UploadFunction = (url: string, file: Media) => Promise<Media>
25
-
26
- export const useUpload = (config: UploadConfig) => {
27
- const upload: UploadFunction = (url: string, file: Media) => {
28
- return new Promise<Media>((resolve, reject) => {
29
- Taro.uploadFile({
30
- url: config.baseUrl + url,
31
- filePath: file.path!,
32
- name: 'file',
33
- header: config.headers ?? {
34
- token: Taro.getStorageSync('session')
35
- },
36
- success: (rsp: any) => {
37
- const { data } = rsp
38
- console.log('===data', data)
39
- try {
40
- const response = JSON.parse(data)
41
- console.log('===response', response)
42
- resolve(transformFields(response.result))
43
- } catch (e) {
44
- reject({
45
- message: '文件上传异常'
46
- })
47
- }
48
- },
49
- })
50
- })
51
- }
52
- return {
53
- upload
54
- }
1
+ import Taro from '@tarojs/taro'
2
+ import { Media } from '@uxda/nutshell/taro'
3
+
4
+ export type UploadConfig = {
5
+ baseUrl: string,
6
+ name?: string,
7
+ headers?: Record<string, string>
8
+ }
9
+
10
+ const mappings: {[x: string]: keyof Media} = {
11
+ downloadUrl: 'thrumb',
12
+ fileId: 'id',
13
+ fileName: 'name',
14
+ fileSize: 'size',
15
+ fileSuffix: 'ext',
16
+ fileType: 'type',
17
+ originalUrl: 'url'
18
+ }
19
+
20
+ const transformFields = (row: any) => {
21
+ return Object.fromEntries(Object.entries(row).map(([k, v]) => [mappings[k] || k, v]))
22
+ }
23
+
24
+ type UploadFunction = (url: string, file: Media) => Promise<Media>
25
+
26
+ export const useUpload = (config: UploadConfig) => {
27
+ const upload: UploadFunction = (url: string, file: Media) => {
28
+ return new Promise<Media>((resolve, reject) => {
29
+ Taro.uploadFile({
30
+ url: config.baseUrl + url,
31
+ filePath: file.path!,
32
+ name: 'file',
33
+ header: config.headers ?? {
34
+ token: Taro.getStorageSync('session')
35
+ },
36
+ success: (rsp: any) => {
37
+ const { data } = rsp
38
+ console.log('===data', data)
39
+ try {
40
+ const response = JSON.parse(data)
41
+ console.log('===response', response)
42
+ resolve(transformFields(response.result))
43
+ } catch (e) {
44
+ reject({
45
+ message: '文件上传异常'
46
+ })
47
+ }
48
+ },
49
+ })
50
+ })
51
+ }
52
+ return {
53
+ upload
54
+ }
55
55
  }
@@ -1,31 +1,31 @@
1
- /**
2
- * 通用表单校验器
3
- */
4
- import { isMobilePhone, isIdentityCard } from 'validator'
5
-
6
- export function useValidator() {
7
- // 身份证号码校验
8
- function certNoValidator(value: unknown) {
9
- if (!value) {
10
- return '请输入身份证号'
11
- } else if (!isIdentityCard(value, 'zh-CN')) {
12
- return '请输入正确的身份证号码'
13
- }
14
- return false
15
- }
16
-
17
- // 电话号码校验
18
- function phoneValidator(value: unknown) {
19
- if (!value) {
20
- return '请输入手机号码'
21
- } else if (!isMobilePhone(value, 'zh-CN')) {
22
- return '请输入正确的手机号'
23
- }
24
- return false
25
- }
26
-
27
- return {
28
- certNoValidator,
29
- phoneValidator,
30
- }
31
- }
1
+ /**
2
+ * 通用表单校验器
3
+ */
4
+ import { isMobilePhone, isIdentityCard } from 'validator'
5
+
6
+ export function useValidator() {
7
+ // 身份证号码校验
8
+ function certNoValidator(value: unknown) {
9
+ if (!value) {
10
+ return '请输入身份证号'
11
+ } else if (!isIdentityCard(value, 'zh-CN')) {
12
+ return '请输入正确的身份证号码'
13
+ }
14
+ return false
15
+ }
16
+
17
+ // 电话号码校验
18
+ function phoneValidator(value: unknown) {
19
+ if (!value) {
20
+ return '请输入手机号码'
21
+ } else if (!isMobilePhone(value, 'zh-CN')) {
22
+ return '请输入正确的手机号'
23
+ }
24
+ return false
25
+ }
26
+
27
+ return {
28
+ certNoValidator,
29
+ phoneValidator,
30
+ }
31
+ }
@@ -1,136 +1,136 @@
1
- import {
2
- HttpInstance,
3
- HttpClientConfig,
4
- HttpMethod,
5
- HttpRequestConfig,
6
- RequestData,
7
- ResponseData,
8
- ResponseRaw,
9
- Paging,
10
- HttpTranslate,
11
- } from './types'
12
- /**
13
- * Useage:
14
- * const $http = createHttp({
15
- *
16
- * })
17
- * $http.get('/url').then(data => {
18
- *
19
- * })
20
- */
21
-
22
- /**
23
- * 统一请求过程
24
- * @param config
25
- * @returns
26
- */
27
- const request: HttpInstance['request'] = <T>(config: HttpRequestConfig) => {
28
- const c = {
29
- ...clientConfig,
30
- ...config,
31
- }
32
- return new Promise<T>((resolve, reject) => {
33
- const data =
34
- config.data && clientConfig.translates && clientConfig.translates[c.url]
35
- ? (clientConfig.translates[c.url] as HttpTranslate)(c.data || {})
36
- : c.data
37
- console.log(`[][][][][]HTTP.${c.method}, ${c.baseUrl}${c.url}`, data)
38
-
39
- clientConfig.vendor &&
40
- clientConfig.vendor
41
- .request({
42
- url: `${c.baseUrl}${c.url}`,
43
- data,
44
- headers: c.headers,
45
- method: c.method,
46
- })
47
- .then((raw: ResponseRaw) => {
48
- // 按顺序执行拦截器
49
- for (const interc of c.interceptors || []) {
50
- const r = interc(raw)
51
- if (r) {
52
- // 某拦截器命中时
53
- // 按拦截结果 决定是否继续执行
54
- reject('===INTERCEPTED===' + raw.status)
55
- return false
56
- }
57
- }
58
- if (raw.data !== void 0) {
59
- // 当用户配置含有 transforms 时, 使用用户提供的 transform
60
- // 先 endpoints transform
61
- // 再组装分页数据
62
- const response =
63
- clientConfig.transforms && clientConfig.transforms[c.url]
64
- ? ((clientConfig.transforms[c.url] as HttpTranslate)(raw.data) as T)
65
- : (raw.data as T)
66
- // 前端要求分页
67
- // 在 endpoints transform 之前格式化分页数据
68
- // 并拼装回原 raw 数据
69
- const paging =
70
- config.data && config.data.page
71
- ? (clientConfig.paging as Paging).transform(raw.data)
72
- : void 0
73
- resolve(
74
- paging
75
- ? ({
76
- ...paging,
77
- data: response,
78
- } as T)
79
- : response
80
- )
81
- } else {
82
- resolve(raw as any)
83
- }
84
- })
85
- .catch((e: any) => {
86
- console.log('request.catch===', e)
87
- })
88
- })
89
- }
90
-
91
- const get: HttpInstance['get'] = <T = ResponseData>(url: string, data?: RequestData) => {
92
- return request<T>({
93
- url,
94
- data,
95
- method: HttpMethod.get,
96
- })
97
- }
98
-
99
- const post: HttpInstance['post'] = <T = ResponseData>(url: string, data: RequestData) => {
100
- return request<T>({
101
- url,
102
- data,
103
- method: HttpMethod.post,
104
- })
105
- }
106
-
107
- /**
108
- * 场景配置
109
- * 本地后台团队统一返回值外层
110
- */
111
- const defaultClientConfig: HttpClientConfig = {
112
- baseUrl: '/',
113
- interceptors: [(raw) => raw.status == 401],
114
- }
115
-
116
- let clientConfig = {
117
- ...defaultClientConfig,
118
- }
119
-
120
- /**
121
- * 写入配置并返回 HTTP instance
122
- * @param config
123
- * @returns
124
- */
125
- export function createHttp(config: HttpClientConfig): HttpInstance {
126
- clientConfig = {
127
- ...defaultClientConfig,
128
- ...config,
129
- }
130
-
131
- return {
132
- request,
133
- get,
134
- post,
135
- }
136
- }
1
+ import {
2
+ HttpInstance,
3
+ HttpClientConfig,
4
+ HttpMethod,
5
+ HttpRequestConfig,
6
+ RequestData,
7
+ ResponseData,
8
+ ResponseRaw,
9
+ Paging,
10
+ HttpTranslate,
11
+ } from './types'
12
+ /**
13
+ * Useage:
14
+ * const $http = createHttp({
15
+ *
16
+ * })
17
+ * $http.get('/url').then(data => {
18
+ *
19
+ * })
20
+ */
21
+
22
+ /**
23
+ * 统一请求过程
24
+ * @param config
25
+ * @returns
26
+ */
27
+ const request: HttpInstance['request'] = <T>(config: HttpRequestConfig) => {
28
+ const c = {
29
+ ...clientConfig,
30
+ ...config,
31
+ }
32
+ return new Promise<T>((resolve, reject) => {
33
+ const data =
34
+ config.data && clientConfig.translates && clientConfig.translates[c.url]
35
+ ? (clientConfig.translates[c.url] as HttpTranslate)(c.data || {})
36
+ : c.data
37
+ console.log(`[][][][][]HTTP.${c.method}, ${c.baseUrl}${c.url}`, data)
38
+
39
+ clientConfig.vendor &&
40
+ clientConfig.vendor
41
+ .request({
42
+ url: `${c.baseUrl}${c.url}`,
43
+ data,
44
+ headers: c.headers,
45
+ method: c.method,
46
+ })
47
+ .then((raw: ResponseRaw) => {
48
+ // 按顺序执行拦截器
49
+ for (const interc of c.interceptors || []) {
50
+ const r = interc(raw)
51
+ if (r) {
52
+ // 某拦截器命中时
53
+ // 按拦截结果 决定是否继续执行
54
+ reject('===INTERCEPTED===' + raw.status)
55
+ return false
56
+ }
57
+ }
58
+ if (raw.data !== void 0) {
59
+ // 当用户配置含有 transforms 时, 使用用户提供的 transform
60
+ // 先 endpoints transform
61
+ // 再组装分页数据
62
+ const response =
63
+ clientConfig.transforms && clientConfig.transforms[c.url]
64
+ ? ((clientConfig.transforms[c.url] as HttpTranslate)(raw.data) as T)
65
+ : (raw.data as T)
66
+ // 前端要求分页
67
+ // 在 endpoints transform 之前格式化分页数据
68
+ // 并拼装回原 raw 数据
69
+ const paging =
70
+ config.data && config.data.page
71
+ ? (clientConfig.paging as Paging).transform(raw.data)
72
+ : void 0
73
+ resolve(
74
+ paging
75
+ ? ({
76
+ ...paging,
77
+ data: response,
78
+ } as T)
79
+ : response
80
+ )
81
+ } else {
82
+ resolve(raw as any)
83
+ }
84
+ })
85
+ .catch((e: any) => {
86
+ console.log('request.catch===', e)
87
+ })
88
+ })
89
+ }
90
+
91
+ const get: HttpInstance['get'] = <T = ResponseData>(url: string, data?: RequestData) => {
92
+ return request<T>({
93
+ url,
94
+ data,
95
+ method: HttpMethod.get,
96
+ })
97
+ }
98
+
99
+ const post: HttpInstance['post'] = <T = ResponseData>(url: string, data: RequestData) => {
100
+ return request<T>({
101
+ url,
102
+ data,
103
+ method: HttpMethod.post,
104
+ })
105
+ }
106
+
107
+ /**
108
+ * 场景配置
109
+ * 本地后台团队统一返回值外层
110
+ */
111
+ const defaultClientConfig: HttpClientConfig = {
112
+ baseUrl: '/',
113
+ interceptors: [(raw) => raw.status == 401],
114
+ }
115
+
116
+ let clientConfig = {
117
+ ...defaultClientConfig,
118
+ }
119
+
120
+ /**
121
+ * 写入配置并返回 HTTP instance
122
+ * @param config
123
+ * @returns
124
+ */
125
+ export function createHttp(config: HttpClientConfig): HttpInstance {
126
+ clientConfig = {
127
+ ...defaultClientConfig,
128
+ ...config,
129
+ }
130
+
131
+ return {
132
+ request,
133
+ get,
134
+ post,
135
+ }
136
+ }
@@ -1,2 +1,2 @@
1
- export * from './Http'
1
+ export * from './Http'
2
2
  export type * from './types'