@uxda/appkit 4.3.39 → 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 (141) 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 +11 -6
  9. package/dist/index.js +30 -16
  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 -834
  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
  140. package/dist/assets/asset-3B_CoPto +0 -1
  141. package/dist/assets/asset-DcH8Kg-2 +0 -1
@@ -1,134 +1,134 @@
1
- import { HttpEndpoints } from '../../shared/http'
2
- import { 账户流水筛选项, ConsumptionType } from '../types'
3
-
4
- type OnlyApp = {
5
- app: string
6
- }
7
-
8
- type AndApp<T> = OnlyApp & T
9
-
10
- /**
11
- * 流水交易类型映射
12
- */
13
- const typeMappings: Record<string, ConsumptionType> = {
14
- CZ: '充值',
15
- JF: '缴费',
16
- FE: '返额',
17
- ZJ: '增加',
18
- KJ: '扣减',
19
- XH: '消耗',
20
- TH: '退回',
21
- ZS: '赠送',
22
- HG: '换购',
23
- }
24
-
25
- /**
26
- * 映射还能反过来
27
- */
28
- const typeMappingsReversed = Object.fromEntries(
29
- Object.entries(typeMappings).map(([x, y]) => [y, x])
30
- )
31
-
32
- const positionMappings = {
33
- common: '云豆',
34
- rights: '小云豆',
35
- gift: '权益',
36
- }
37
-
38
- const positionMappingsReversed = Object.fromEntries(
39
- Object.entries(positionMappings).map(([x, y]) => [y, x])
40
- )
41
-
42
- const directionMappings = {
43
- 0: '收入',
44
- 1: '支出',
45
- }
46
-
47
- const directionMappingsReversed = Object.fromEntries(
48
- Object.entries(directionMappings).map(([x, y]) => [y, x])
49
- )
50
-
51
- const endpointsList: HttpEndpoints = {
52
- 获取余额明细: {
53
- path: '/ac-app/account/info/detail/app', // /app
54
- translate: (data: OnlyApp) => ({
55
- appCode: data.app || '',
56
- }),
57
- transform(result: any) {
58
- return {
59
- total: result.commonAccount,
60
- privileges: result.rightsAccountBalList.map((r: any) => ({
61
- title: r.rightsName,
62
- count: r.rightsAccount,
63
- unit: r.rightsUnit,
64
- appCode: r.appCode,
65
- code: r.rightsCode,
66
- id: r.activityId,
67
- })),
68
- }
69
- },
70
- },
71
- 获取账户流水: {
72
- path: '/ac-app/account/record/detail/mobile',
73
- translate: (data: AndApp<账户流水筛选项>) => {
74
- return {
75
- appCode: data.app,
76
- accountType: positionMappingsReversed[data.账户类型] || '',
77
- inOrOut: directionMappingsReversed[data.收入还是支出] || '',
78
- changeType: typeMappingsReversed[data.交易类型] || '',
79
- operateTimeStart: data.dateFrom || '',
80
- operateTimeEnd: data.dateTo || '',
81
- rightsCode: data.权益类目,
82
- pageNum: data.page,
83
- pageSize: 15,
84
- }
85
- },
86
- transform(response: any) {
87
- const data = response.list.map((d: any) => ({
88
- 账户类型: positionMappings[d.accountType],
89
- 交易类型: typeMappings[d.changeType],
90
- 收入还是支出: directionMappings[d.inOrOut],
91
- amount: d.changeValue,
92
- title: d.rightsName,
93
- time: Date.parse(d.operateTime), // 后台返回的是日期字符串,这里格式化成 timestamp
94
- description: d.remark,
95
- }))
96
- return data
97
- },
98
- },
99
- 获取权益类目: {
100
- path: '/ac-app/rights/item/list',
101
- translate: (data: OnlyApp) => ({
102
- appCode: data.app,
103
- }),
104
- // translate (data: ConsumptionFiltering) {
105
- // // return { appCode: data.appCode }
106
- // },
107
- transform: (data: any[]) =>
108
- data.map((d) => ({
109
- name: d.rightsName,
110
- code: d.rightsCode,
111
- })),
112
- },
113
- 获取推广方账户信息: {
114
- path: '/promoact/app/promoter/getPromoterAccountInfo', // /app
115
- translate: (data: OnlyApp) => data,
116
- transform(result: any) {
117
- return result
118
- },
119
- },
120
- }
121
-
122
- const endpoints = Object.fromEntries(
123
- Object.entries(endpointsList).map(([name, def]) => [name, def.path])
124
- )
125
-
126
- const translates = Object.fromEntries(
127
- Object.entries(endpointsList).map(([, def]) => [def.path, def.translate])
128
- )
129
-
130
- const transforms = Object.fromEntries(
131
- Object.entries(endpointsList).map(([, def]) => [def.path, def.transform])
132
- )
133
-
134
- export { endpoints, translates, transforms }
1
+ import { HttpEndpoints } from '../../shared/http'
2
+ import { 账户流水筛选项, ConsumptionType } from '../types'
3
+
4
+ type OnlyApp = {
5
+ app: string
6
+ }
7
+
8
+ type AndApp<T> = OnlyApp & T
9
+
10
+ /**
11
+ * 流水交易类型映射
12
+ */
13
+ const typeMappings: Record<string, ConsumptionType> = {
14
+ CZ: '充值',
15
+ JF: '缴费',
16
+ FE: '返额',
17
+ ZJ: '增加',
18
+ KJ: '扣减',
19
+ XH: '消耗',
20
+ TH: '退回',
21
+ ZS: '赠送',
22
+ HG: '换购',
23
+ }
24
+
25
+ /**
26
+ * 映射还能反过来
27
+ */
28
+ const typeMappingsReversed = Object.fromEntries(
29
+ Object.entries(typeMappings).map(([x, y]) => [y, x])
30
+ )
31
+
32
+ const positionMappings = {
33
+ common: '云豆',
34
+ rights: '小云豆',
35
+ gift: '权益',
36
+ }
37
+
38
+ const positionMappingsReversed = Object.fromEntries(
39
+ Object.entries(positionMappings).map(([x, y]) => [y, x])
40
+ )
41
+
42
+ const directionMappings = {
43
+ 0: '收入',
44
+ 1: '支出',
45
+ }
46
+
47
+ const directionMappingsReversed = Object.fromEntries(
48
+ Object.entries(directionMappings).map(([x, y]) => [y, x])
49
+ )
50
+
51
+ const endpointsList: HttpEndpoints = {
52
+ 获取余额明细: {
53
+ path: '/ac-app/account/info/detail/app', // /app
54
+ translate: (data: OnlyApp) => ({
55
+ appCode: data.app || '',
56
+ }),
57
+ transform(result: any) {
58
+ return {
59
+ total: result.commonAccount,
60
+ privileges: result.rightsAccountBalList.map((r: any) => ({
61
+ title: r.rightsName,
62
+ count: r.rightsAccount,
63
+ unit: r.rightsUnit,
64
+ appCode: r.appCode,
65
+ code: r.rightsCode,
66
+ id: r.activityId,
67
+ })),
68
+ }
69
+ },
70
+ },
71
+ 获取账户流水: {
72
+ path: '/ac-app/account/record/detail/mobile',
73
+ translate: (data: AndApp<账户流水筛选项>) => {
74
+ return {
75
+ appCode: data.app,
76
+ accountType: positionMappingsReversed[data.账户类型] || '',
77
+ inOrOut: directionMappingsReversed[data.收入还是支出] || '',
78
+ changeType: typeMappingsReversed[data.交易类型] || '',
79
+ operateTimeStart: data.dateFrom || '',
80
+ operateTimeEnd: data.dateTo || '',
81
+ rightsCode: data.权益类目,
82
+ pageNum: data.page,
83
+ pageSize: 15,
84
+ }
85
+ },
86
+ transform(response: any) {
87
+ const data = response.list.map((d: any) => ({
88
+ 账户类型: positionMappings[d.accountType],
89
+ 交易类型: typeMappings[d.changeType],
90
+ 收入还是支出: directionMappings[d.inOrOut],
91
+ amount: d.changeValue,
92
+ title: d.rightsName,
93
+ time: Date.parse(d.operateTime), // 后台返回的是日期字符串,这里格式化成 timestamp
94
+ description: d.remark,
95
+ }))
96
+ return data
97
+ },
98
+ },
99
+ 获取权益类目: {
100
+ path: '/ac-app/rights/item/list',
101
+ translate: (data: OnlyApp) => ({
102
+ appCode: data.app,
103
+ }),
104
+ // translate (data: ConsumptionFiltering) {
105
+ // // return { appCode: data.appCode }
106
+ // },
107
+ transform: (data: any[]) =>
108
+ data.map((d) => ({
109
+ name: d.rightsName,
110
+ code: d.rightsCode,
111
+ })),
112
+ },
113
+ 获取推广方账户信息: {
114
+ path: '/promoact/app/promoter/getPromoterAccountInfo', // /app
115
+ translate: (data: OnlyApp) => data,
116
+ transform(result: any) {
117
+ return result
118
+ },
119
+ },
120
+ }
121
+
122
+ const endpoints = Object.fromEntries(
123
+ Object.entries(endpointsList).map(([name, def]) => [name, def.path])
124
+ )
125
+
126
+ const translates = Object.fromEntries(
127
+ Object.entries(endpointsList).map(([, def]) => [def.path, def.translate])
128
+ )
129
+
130
+ const transforms = Object.fromEntries(
131
+ Object.entries(endpointsList).map(([, def]) => [def.path, def.transform])
132
+ )
133
+
134
+ export { endpoints, translates, transforms }
@@ -1,118 +1,118 @@
1
- import Taro, { request as TaroRequest, showToast } from '@tarojs/taro'
2
- import { HttpRequestConfig, PagingData, PagingParams, ResponseRaw, createHttp } from '../../shared'
3
- import { translates, transforms } from './endpoints'
4
- import { useAppKitOptions } from '../../Appkit'
5
- import { useLogger, generateUniqueId } from '../../shared/composables/useLogger'
6
-
7
- const logger = useLogger()
8
- /**
9
- * 小程序端 Http
10
- * 使用 Taro.request 实现
11
- */
12
- const vendor = {
13
- async request<T>(config: HttpRequestConfig) {
14
- return new Promise<ResponseRaw<T>>((resolve, reject) => {
15
- const header = {
16
- ...config.headers,
17
- traceId: generateUniqueId('appkit'),
18
- }
19
- const startTime = new Date().getTime()
20
-
21
- logger.info({
22
- send: JSON.stringify({ url: config.url, data: config.data }),
23
- receive: null,
24
- traceId: header.traceId,
25
- duration: 0,
26
- })
27
- TaroRequest({
28
- url: config.url,
29
- method: config.method,
30
- header,
31
- data: config.data,
32
- })
33
- .then(({ data }) => {
34
- // 记录阿里日志
35
- const endTime = new Date().getTime()
36
- logger.info({
37
- send: JSON.stringify({ url: config.url, data: config.data }),
38
- receive: JSON.stringify(data),
39
- traceId: header.traceId,
40
- duration: endTime - startTime,
41
- })
42
-
43
- if (data.success || data.code === '401') {
44
- resolve({
45
- status: +data.code,
46
- message: data.msg,
47
- data: data.result as T,
48
- })
49
- } else if (data.code !== '401') {
50
- showToast({
51
- title: data.msg,
52
- icon: 'none',
53
- })
54
- }
55
- })
56
- .catch((e: any) => {
57
- reject(e)
58
- })
59
- })
60
- },
61
- }
62
-
63
- function useHttp() {
64
- const appkitOptions = useAppKitOptions()
65
- const headers = {
66
- Token: appkitOptions.tempToken() || appkitOptions.token(),
67
- Appcode: appkitOptions.app(),
68
- tid: appkitOptions.tenant(),
69
- gray: appkitOptions.gray ? appkitOptions.gray() : '0',
70
- }
71
- /**
72
- * 传入配置获取 Http instanse
73
- */
74
- const $http = createHttp({
75
- vendor,
76
- baseUrl: appkitOptions.baseUrl(),
77
- headers,
78
- interceptors: [
79
- (raw) => {
80
- if (raw.status == 401) {
81
- appkitOptions[401]()
82
- return true
83
- }
84
- return false
85
- },
86
- (raw) => {
87
- if (raw.status > 500) {
88
- return true
89
- }
90
- return false
91
- },
92
- ],
93
- paging: {
94
- translate: (params: PagingParams) => ({
95
- pageNum: params.page,
96
- pageSize: params.pageSize || 10,
97
- }),
98
- transform(data: any): PagingData {
99
- const totalRecords = +data.total || 0,
100
- pageSize = +data.pageSize || 10,
101
- total = data.pages || Math.ceil(totalRecords / pageSize),
102
- isLastPage = data.pages === data.pageNum
103
- return {
104
- total,
105
- totalRecords,
106
- isLastPage,
107
- }
108
- },
109
- },
110
- translates,
111
- transforms,
112
- })
113
- return $http
114
- }
115
-
116
- export { useHttp }
117
-
118
- export * from './endpoints'
1
+ import Taro, { request as TaroRequest, showToast } from '@tarojs/taro'
2
+ import { HttpRequestConfig, PagingData, PagingParams, ResponseRaw, createHttp } from '../../shared'
3
+ import { translates, transforms } from './endpoints'
4
+ import { useAppKitOptions } from '../../Appkit'
5
+ import { useLogger, generateUniqueId } from '../../shared/composables/useLogger'
6
+
7
+ const logger = useLogger()
8
+ /**
9
+ * 小程序端 Http
10
+ * 使用 Taro.request 实现
11
+ */
12
+ const vendor = {
13
+ async request<T>(config: HttpRequestConfig) {
14
+ return new Promise<ResponseRaw<T>>((resolve, reject) => {
15
+ const header = {
16
+ ...config.headers,
17
+ traceId: generateUniqueId('appkit'),
18
+ }
19
+ const startTime = new Date().getTime()
20
+
21
+ logger.info({
22
+ send: JSON.stringify({ url: config.url, data: config.data }),
23
+ receive: null,
24
+ traceId: header.traceId,
25
+ duration: 0,
26
+ })
27
+ TaroRequest({
28
+ url: config.url,
29
+ method: config.method,
30
+ header,
31
+ data: config.data,
32
+ })
33
+ .then(({ data }) => {
34
+ // 记录阿里日志
35
+ const endTime = new Date().getTime()
36
+ logger.info({
37
+ send: JSON.stringify({ url: config.url, data: config.data }),
38
+ receive: JSON.stringify(data),
39
+ traceId: header.traceId,
40
+ duration: endTime - startTime,
41
+ })
42
+
43
+ if (data.success || data.code === '401') {
44
+ resolve({
45
+ status: +data.code,
46
+ message: data.msg,
47
+ data: data.result as T,
48
+ })
49
+ } else if (data.code !== '401') {
50
+ showToast({
51
+ title: data.msg,
52
+ icon: 'none',
53
+ })
54
+ }
55
+ })
56
+ .catch((e: any) => {
57
+ reject(e)
58
+ })
59
+ })
60
+ },
61
+ }
62
+
63
+ function useHttp() {
64
+ const appkitOptions = useAppKitOptions()
65
+ const headers = {
66
+ Token: appkitOptions.tempToken() || appkitOptions.token(),
67
+ Appcode: appkitOptions.app(),
68
+ tid: appkitOptions.tenant(),
69
+ gray: appkitOptions.gray ? appkitOptions.gray() : '0',
70
+ }
71
+ /**
72
+ * 传入配置获取 Http instanse
73
+ */
74
+ const $http = createHttp({
75
+ vendor,
76
+ baseUrl: appkitOptions.baseUrl(),
77
+ headers,
78
+ interceptors: [
79
+ (raw) => {
80
+ if (raw.status == 401) {
81
+ appkitOptions[401]()
82
+ return true
83
+ }
84
+ return false
85
+ },
86
+ (raw) => {
87
+ if (raw.status > 500) {
88
+ return true
89
+ }
90
+ return false
91
+ },
92
+ ],
93
+ paging: {
94
+ translate: (params: PagingParams) => ({
95
+ pageNum: params.page,
96
+ pageSize: params.pageSize || 10,
97
+ }),
98
+ transform(data: any): PagingData {
99
+ const totalRecords = +data.total || 0,
100
+ pageSize = +data.pageSize || 10,
101
+ total = data.pages || Math.ceil(totalRecords / pageSize),
102
+ isLastPage = data.pages === data.pageNum
103
+ return {
104
+ total,
105
+ totalRecords,
106
+ isLastPage,
107
+ }
108
+ },
109
+ },
110
+ translates,
111
+ transforms,
112
+ })
113
+ return $http
114
+ }
115
+
116
+ export { useHttp }
117
+
118
+ export * from './endpoints'