@uxda/appkit 4.1.60 → 4.1.62

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 (117) 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 +8 -6
  5. package/dist/assets/asset-3B_CoPto +1 -0
  6. package/dist/index.js +2 -3
  7. package/package.json +77 -77
  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 +66 -66
  12. package/src/balance/api/endpoints.ts +133 -133
  13. package/src/balance/api/index.ts +106 -106
  14. package/src/balance/components/AccountView.vue +749 -750
  15. package/src/balance/components/BalanceCard.vue +215 -215
  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 +250 -250
  20. package/src/balance/components/DateRange.vue +80 -80
  21. package/src/balance/components/ListFilter.vue +62 -62
  22. package/src/balance/components/ListFilterPicker.vue +191 -191
  23. package/src/balance/components/PromoterCard.vue +237 -237
  24. package/src/balance/components/SecondBalance.vue +71 -71
  25. package/src/balance/components/Tip.vue +45 -45
  26. package/src/balance/components/index.ts +8 -8
  27. package/src/balance/types.ts +97 -97
  28. package/src/components/bt-cropper/index.vue +774 -774
  29. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  30. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  31. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  32. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  33. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  34. package/src/components/bt-cropper/utils/ratio.js +3 -3
  35. package/src/components/bt-cropper/utils/tools.js +25 -25
  36. package/src/components/dd-area/index.vue +225 -225
  37. package/src/components/dd-icon/doc.md +21 -21
  38. package/src/components/dd-icon/index.vue +23 -23
  39. package/src/components/dd-notice-bar/index.vue +78 -78
  40. package/src/components/dd-search/doc.md +34 -34
  41. package/src/components/dd-search/index.vue +168 -168
  42. package/src/components/dd-selector/index.vue +124 -124
  43. package/src/components/dd-skeleton/doc.md +19 -19
  44. package/src/components/dd-skeleton/index.vue +36 -36
  45. package/src/global.ts +6 -6
  46. package/src/index.ts +89 -89
  47. package/src/main.scss +1 -1
  48. package/src/notice/api/endpoints.ts +17 -17
  49. package/src/notice/api/index.ts +106 -106
  50. package/src/notice/components/NoticeBanner.vue +243 -243
  51. package/src/notice/components/NoticeEntry.vue +99 -99
  52. package/src/notice/components/NoticeList.vue +315 -315
  53. package/src/notice/components/NoticePopup.vue +162 -162
  54. package/src/notice/components/index.ts +5 -5
  55. package/src/notice/components/useCommonList.ts +86 -86
  56. package/src/notice/components/useNotice.ts +35 -35
  57. package/src/notice/index.ts +1 -1
  58. package/src/notice/types.ts +25 -25
  59. package/src/payment/api/config.ts +7 -7
  60. package/src/payment/api/endpoints.ts +103 -103
  61. package/src/payment/api/index.ts +100 -100
  62. package/src/payment/components/AmountPicker.vue +90 -90
  63. package/src/payment/components/RechargeResult.vue +69 -69
  64. package/src/payment/components/RechargeView.vue +155 -155
  65. package/src/payment/components/RightsPicker.vue +105 -105
  66. package/src/payment/components/TradeView.vue +317 -317
  67. package/src/payment/components/UserAgreement.vue +234 -234
  68. package/src/payment/components/index.ts +22 -22
  69. package/src/payment/index.ts +5 -5
  70. package/src/payment/services/index.ts +16 -16
  71. package/src/payment/services/invoke-recharge.ts +25 -25
  72. package/src/payment/services/request-payment.ts +58 -58
  73. package/src/payment/types.ts +28 -28
  74. package/src/register/components/SelfRegistration.vue +233 -233
  75. package/src/register/components/index.ts +2 -2
  76. package/src/shared/components/AppDrawer.vue +58 -54
  77. package/src/shared/components/AppVerify.vue +128 -128
  78. package/src/shared/components/DeviceVersion.vue +68 -68
  79. package/src/shared/components/EmptyView.vue +33 -33
  80. package/src/shared/components/OcrBusinessLicense.vue +130 -130
  81. package/src/shared/components/OcrIcon.vue +202 -202
  82. package/src/shared/components/PageHeader.vue +79 -79
  83. package/src/shared/components/index.ts +8 -8
  84. package/src/shared/composables/index.ts +8 -8
  85. package/src/shared/composables/useAmount.ts +46 -46
  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/useLogger.ts +123 -123
  91. package/src/shared/composables/useSafeArea.ts +46 -46
  92. package/src/shared/composables/useTabbar.ts +24 -24
  93. package/src/shared/composables/useUpload.ts +54 -54
  94. package/src/shared/composables/useValidator.ts +31 -31
  95. package/src/shared/http/Http.ts +136 -136
  96. package/src/shared/http/index.ts +1 -1
  97. package/src/shared/http/types.ts +157 -157
  98. package/src/shared/index.ts +3 -3
  99. package/src/shared/weixin/payment.ts +38 -38
  100. package/src/styles/vars.scss +3 -3
  101. package/src/user/api/endpoints.ts +17 -17
  102. package/src/user/api/index.ts +111 -111
  103. package/src/user/components/LoginSetting.vue +114 -114
  104. package/src/user/components/UserAuth.vue +216 -216
  105. package/src/user/components/UserBinding.vue +307 -307
  106. package/src/user/components/UserBindingSuccess.vue +80 -80
  107. package/src/user/components/UserEntry.vue +133 -133
  108. package/src/user/components/UserFeedback.vue +431 -431
  109. package/src/user/components/UserFeedbackEntry.vue +192 -192
  110. package/src/user/components/UserHeadCrop.vue +65 -65
  111. package/src/user/components/UserInfo.vue +723 -723
  112. package/src/user/components/UserResourceEmpty.vue +75 -75
  113. package/src/user/components/index.ts +23 -23
  114. package/src/user/index.ts +1 -1
  115. package/tsconfig.json +30 -30
  116. package/types/global.d.ts +21 -21
  117. package/types/vue.d.ts +10 -10
@@ -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: string) {
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: string) {
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: string) {
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: string) {
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'