@uxda/appkit 4.2.0 → 4.2.2

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 (118) 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 +19 -49
  7. package/package.json +79 -79
  8. package/project.config.json +15 -15
  9. package/project.tt.json +13 -13
  10. package/rollup.config.mjs +67 -67
  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 +750 -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 +32 -32
  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 +238 -238
  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 +817 -732
  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/stats.html +4842 -0
  116. package/tsconfig.json +30 -30
  117. package/types/global.d.ts +21 -21
  118. package/types/vue.d.ts +10 -10
@@ -1,238 +1,238 @@
1
- <template>
2
- <ns-page class="user-auth">
3
- <ns-page-content>
4
- <ns-card fill="#fff">
5
- <ns-form ref="formRef" v-model="formData">
6
- <ns-input
7
- label="你的姓名"
8
- name="姓名"
9
- v-model="formData.姓名"
10
- placeholder="请输入或拍照识别"
11
- :maxlength="30"
12
- :rules="['required']"
13
- >
14
- <template #append>
15
- <ocr-icon v-if="!已认证" @complete="onOcrComplete" />
16
- </template>
17
- </ns-input>
18
- <ns-input
19
- label="身份证号码"
20
- name="身份证号码"
21
- placeholder="请输入身份证号码"
22
- :maxlength="30"
23
- v-model="formData.身份证号码"
24
- :rules="[
25
- 'required',
26
- {
27
- name: 'function',
28
- message: '请输入正确格式的证件号码',
29
- method: (value: string) => isIdentityCard(value, 'zh-CN')
30
- }
31
- ]"
32
- />
33
- <ns-input
34
- label="电话号码"
35
- name="电话号码"
36
- placeholder="请输入电话号码"
37
- :maxlength="11"
38
- v-model="formData.电话号码"
39
- :disabled="true"
40
- :rules="[
41
- {
42
- name: 'function',
43
- message: '请输入正确格式的电话号码',
44
- method: (value: string) => isMobilePhone(value, 'zh-CN')
45
- }
46
- ]"
47
- />
48
- </ns-form>
49
- </ns-card>
50
-
51
- <div class="user-auth-footer">
52
- <div v-if="!已认证" class="checkbox-row">
53
- <ns-checkbox style="font-size: 11px" v-model="formData.同意"
54
- >我已阅读并同意</ns-checkbox
55
- >
56
- <span @click="showAgreement" class="book">《个人信息授权协议》</span>
57
- </div>
58
- <ns-button
59
- v-if="!已认证"
60
- class="btn"
61
- color="primary"
62
- type="primary"
63
- @click="toSubmit"
64
- >立即认证</ns-button
65
- >
66
- <ns-button
67
- v-else
68
- class="btn"
69
- color="primary"
70
- type="primary"
71
- @click="toBack"
72
- >返回</ns-button
73
- >
74
- </div>
75
- </ns-page-content>
76
- </ns-page>
77
- </template>
78
-
79
- <script lang="ts" setup>
80
- import { reactive, ref, watch } from "vue";
81
- import {
82
- NsForm,
83
- NsInput,
84
- NsCard,
85
- NsPage,
86
- NsPageContent,
87
- NsButton,
88
- NsCheckbox,
89
- } from "@uxda/nutshell/taro";
90
- import { OcrIcon } from "../../shared/components";
91
- import Taro from "@tarojs/taro";
92
- import { useNutshell } from "@uxda/nutshell/taro";
93
- import isMobilePhone from 'validator/es/lib/isMobilePhone'
94
- import isIdentityCard from 'validator/es/lib/isIdentityCard'
95
- import { useHttp } from "../api";
96
-
97
- const props = withDefaults(
98
- defineProps<{
99
- userId: string;
100
- verifyResult: number;
101
- mobile: string;
102
- }>(),
103
- {
104
- verifyResult: -1,
105
- userId: "",
106
- mobile: "",
107
- }
108
- );
109
-
110
- const formRef = ref(),
111
- $n = useNutshell();
112
-
113
- let formData = reactive({
114
- 姓名: "",
115
- 身份证号码: "",
116
- 电话号码: "",
117
- 同意: false,
118
- });
119
-
120
- const 已认证 = ref(false);
121
-
122
- const onOcrComplete = (result) => {
123
- formData.姓名 = result?.faceInfo.name;
124
- formData.身份证号码 = result?.faceInfo.certNo;
125
- };
126
-
127
- // 查看协议
128
- function showAgreement() {
129
- emits("toAgreement");
130
- }
131
-
132
- // 返回
133
- function toBack() {
134
- Taro.navigateBack();
135
- }
136
-
137
- // 认证
138
- async function toSubmit() {
139
- const res = await formRef.value.validate();
140
- if (!res.valid) {
141
- return $n.toast(res.errors[0].message, {});
142
- }
143
-
144
- if (!formData.同意) {
145
- return $n.toast("请先阅读并同意协议", {});
146
- }
147
- const $http = useHttp();
148
-
149
- $http
150
- .post("/cas/sysAccount/verifyId3", {
151
- // appCode:
152
- idCard: formData.身份证号码,
153
- mobile: formData.电话号码,
154
- name: formData.姓名,
155
- tenantId: props.userId,
156
- })
157
- .then(() => {
158
- Taro.showToast({ title: "已提交认证信息", icon: "none" });
159
- // 提交认证信息,成功后返回
160
- toBack();
161
- })
162
- .catch((err) => {
163
- Taro.showToast({ title: err?.errMsg || "认证失败", icon: "none" });
164
- });
165
- }
166
- watch(
167
- () => props.verifyResult,
168
- () => {
169
- if (props.verifyResult == 1) {
170
- 已认证.value = true;
171
- }
172
- },
173
- { deep: true, immediate: true }
174
- );
175
- watch(
176
- () => props.mobile,
177
- () => {
178
- formData.电话号码 = props.mobile;
179
- },
180
- { deep: true, immediate: true }
181
- );
182
-
183
- const emits = defineEmits(["toAgreement"]);
184
- </script>
185
-
186
- <style lang="scss">
187
- .user-auth {
188
- height: 100vh;
189
-
190
- &-footer {
191
- position: fixed;
192
- z-index: 10;
193
- bottom: 0;
194
- left: 0;
195
- width: 100%;
196
- min-height: 63px;
197
- background: #ffffff;
198
- box-shadow: 0 -3px 11px 0 rgba(224, 224, 224, 0.5);
199
- padding: 10px 12px calc(8px + var(--safe-bottom-height));
200
- display: flex;
201
- justify-content: space-between;
202
- box-sizing: border-box;
203
-
204
- .btn {
205
- width: 100%;
206
- }
207
-
208
- .checkbox-row {
209
- --nut-primary-color: #017fff;
210
- position: absolute;
211
- top: -36px;
212
- left: 50%;
213
- transform: translateX(-50%);
214
- white-space: nowrap;
215
- display: flex;
216
- align-items: center;
217
-
218
- .nut-checkbox__label {
219
- margin-left: 2px;
220
- font-size: 11px;
221
- }
222
-
223
- .nut-icon-check-normal {
224
- margin-top: 0 !important;
225
- }
226
-
227
- .nut-icon-checked {
228
- font-size: 11px;
229
- }
230
-
231
- .book {
232
- font-size: 11px;
233
- color: #007aff;
234
- }
235
- }
236
- }
237
- }
238
- </style>
1
+ <template>
2
+ <ns-page class="user-auth">
3
+ <ns-page-content>
4
+ <ns-card fill="#fff">
5
+ <ns-form ref="formRef" v-model="formData">
6
+ <ns-input
7
+ label="你的姓名"
8
+ name="姓名"
9
+ v-model="formData.姓名"
10
+ placeholder="请输入或拍照识别"
11
+ :maxlength="30"
12
+ :rules="['required']"
13
+ >
14
+ <template #append>
15
+ <ocr-icon v-if="!已认证" @complete="onOcrComplete" />
16
+ </template>
17
+ </ns-input>
18
+ <ns-input
19
+ label="身份证号码"
20
+ name="身份证号码"
21
+ placeholder="请输入身份证号码"
22
+ :maxlength="30"
23
+ v-model="formData.身份证号码"
24
+ :rules="[
25
+ 'required',
26
+ {
27
+ name: 'function',
28
+ message: '请输入正确格式的证件号码',
29
+ method: (value: string) => isIdentityCard(value, 'zh-CN')
30
+ }
31
+ ]"
32
+ />
33
+ <ns-input
34
+ label="电话号码"
35
+ name="电话号码"
36
+ placeholder="请输入电话号码"
37
+ :maxlength="11"
38
+ v-model="formData.电话号码"
39
+ :disabled="true"
40
+ :rules="[
41
+ {
42
+ name: 'function',
43
+ message: '请输入正确格式的电话号码',
44
+ method: (value: string) => isMobilePhone(value, 'zh-CN')
45
+ }
46
+ ]"
47
+ />
48
+ </ns-form>
49
+ </ns-card>
50
+
51
+ <div class="user-auth-footer">
52
+ <div v-if="!已认证" class="checkbox-row">
53
+ <ns-checkbox style="font-size: 11px" v-model="formData.同意"
54
+ >我已阅读并同意</ns-checkbox
55
+ >
56
+ <span @click="showAgreement" class="book">《个人信息授权协议》</span>
57
+ </div>
58
+ <ns-button
59
+ v-if="!已认证"
60
+ class="btn"
61
+ color="primary"
62
+ type="primary"
63
+ @click="toSubmit"
64
+ >立即认证</ns-button
65
+ >
66
+ <ns-button
67
+ v-else
68
+ class="btn"
69
+ color="primary"
70
+ type="primary"
71
+ @click="toBack"
72
+ >返回</ns-button
73
+ >
74
+ </div>
75
+ </ns-page-content>
76
+ </ns-page>
77
+ </template>
78
+
79
+ <script lang="ts" setup>
80
+ import { reactive, ref, watch } from "vue";
81
+ import {
82
+ NsForm,
83
+ NsInput,
84
+ NsCard,
85
+ NsPage,
86
+ NsPageContent,
87
+ NsButton,
88
+ NsCheckbox,
89
+ } from "@uxda/nutshell/taro";
90
+ import { OcrIcon } from "../../shared/components";
91
+ import Taro from "@tarojs/taro";
92
+ import { useNutshell } from "@uxda/nutshell/taro";
93
+ import isMobilePhone from 'validator/es/lib/isMobilePhone'
94
+ import isIdentityCard from 'validator/es/lib/isIdentityCard'
95
+ import { useHttp } from "../api";
96
+
97
+ const props = withDefaults(
98
+ defineProps<{
99
+ userId: string;
100
+ verifyResult: number;
101
+ mobile: string;
102
+ }>(),
103
+ {
104
+ verifyResult: -1,
105
+ userId: "",
106
+ mobile: "",
107
+ }
108
+ );
109
+
110
+ const formRef = ref(),
111
+ $n = useNutshell();
112
+
113
+ let formData = reactive({
114
+ 姓名: "",
115
+ 身份证号码: "",
116
+ 电话号码: "",
117
+ 同意: false,
118
+ });
119
+
120
+ const 已认证 = ref(false);
121
+
122
+ const onOcrComplete = (result) => {
123
+ formData.姓名 = result?.faceInfo.name;
124
+ formData.身份证号码 = result?.faceInfo.certNo;
125
+ };
126
+
127
+ // 查看协议
128
+ function showAgreement() {
129
+ emits("toAgreement");
130
+ }
131
+
132
+ // 返回
133
+ function toBack() {
134
+ Taro.navigateBack();
135
+ }
136
+
137
+ // 认证
138
+ async function toSubmit() {
139
+ const res = await formRef.value.validate();
140
+ if (!res.valid) {
141
+ return $n.toast(res.errors[0].message, {});
142
+ }
143
+
144
+ if (!formData.同意) {
145
+ return $n.toast("请先阅读并同意协议", {});
146
+ }
147
+ const $http = useHttp();
148
+
149
+ $http
150
+ .post("/cas/sysAccount/verifyId3", {
151
+ // appCode:
152
+ idCard: formData.身份证号码,
153
+ mobile: formData.电话号码,
154
+ name: formData.姓名,
155
+ tenantId: props.userId,
156
+ })
157
+ .then(() => {
158
+ Taro.showToast({ title: "已提交认证信息", icon: "none" });
159
+ // 提交认证信息,成功后返回
160
+ toBack();
161
+ })
162
+ .catch((err) => {
163
+ Taro.showToast({ title: err?.errMsg || "认证失败", icon: "none" });
164
+ });
165
+ }
166
+ watch(
167
+ () => props.verifyResult,
168
+ () => {
169
+ if (props.verifyResult == 1) {
170
+ 已认证.value = true;
171
+ }
172
+ },
173
+ { deep: true, immediate: true }
174
+ );
175
+ watch(
176
+ () => props.mobile,
177
+ () => {
178
+ formData.电话号码 = props.mobile;
179
+ },
180
+ { deep: true, immediate: true }
181
+ );
182
+
183
+ const emits = defineEmits(["toAgreement"]);
184
+ </script>
185
+
186
+ <style lang="scss">
187
+ .user-auth {
188
+ height: 100vh;
189
+
190
+ &-footer {
191
+ position: fixed;
192
+ z-index: 10;
193
+ bottom: 0;
194
+ left: 0;
195
+ width: 100%;
196
+ min-height: 63px;
197
+ background: #ffffff;
198
+ box-shadow: 0 -3px 11px 0 rgba(224, 224, 224, 0.5);
199
+ padding: 10px 12px calc(8px + var(--safe-bottom-height));
200
+ display: flex;
201
+ justify-content: space-between;
202
+ box-sizing: border-box;
203
+
204
+ .btn {
205
+ width: 100%;
206
+ }
207
+
208
+ .checkbox-row {
209
+ --nut-primary-color: #017fff;
210
+ position: absolute;
211
+ top: -36px;
212
+ left: 50%;
213
+ transform: translateX(-50%);
214
+ white-space: nowrap;
215
+ display: flex;
216
+ align-items: center;
217
+
218
+ .nut-checkbox__label {
219
+ margin-left: 2px;
220
+ font-size: 11px;
221
+ }
222
+
223
+ .nut-icon-check-normal {
224
+ margin-top: 0 !important;
225
+ }
226
+
227
+ .nut-icon-checked {
228
+ font-size: 11px;
229
+ }
230
+
231
+ .book {
232
+ font-size: 11px;
233
+ color: #007aff;
234
+ }
235
+ }
236
+ }
237
+ }
238
+ </style>