@uxda/appkit 4.3.11 → 4.3.13

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 (32) hide show
  1. package/dist/appkit.css +105 -12
  2. package/dist/index.js +1097 -407
  3. package/package.json +2 -5
  4. package/src/balance/api/index.ts +1 -1
  5. package/src/balance/components/PromoterCard.vue +1 -0
  6. package/src/notice/api/index.ts +1 -1
  7. package/src/notice/components/NoticeList2.vue +234 -73
  8. package/src/notice/components/useCommonList.ts +1 -0
  9. package/src/payment/api/endpoints.ts +2 -0
  10. package/src/payment/api/index.ts +2 -1
  11. package/src/payment/components/RechargeResult.vue +0 -1
  12. package/src/payment/components/TradeView.vue +329 -121
  13. package/src/payment/services/request-payment.ts +2 -0
  14. package/src/payment/types.ts +1 -0
  15. package/src/register/components/SelfRegistration.vue +1 -1
  16. package/src/shared/components/AppVerify.vue +15 -6
  17. package/src/shared/components/OcrBank.vue +202 -0
  18. package/src/shared/components/OcrBusinessLicense.vue +20 -37
  19. package/src/shared/components/OcrIcon.vue +105 -67
  20. package/src/shared/components/OcrInvoice.vue +322 -0
  21. package/src/shared/components/index.ts +3 -1
  22. package/src/shared/composables/index.ts +1 -0
  23. package/src/shared/composables/useCompress.ts +64 -0
  24. package/src/shared/composables/useUpload.ts +96 -51
  25. package/src/shared/http/Http.ts +1 -0
  26. package/src/shared/tracking/tracking-sdk.ts +0 -1
  27. package/src/shared/weixin/jssdk.ts +1 -0
  28. package/src/user/api/index.ts +1 -1
  29. package/src/user/components/UserAuth.vue +1 -1
  30. package/src/user/components/UserFeedback.vue +1 -0
  31. package/src/user/components/UserInfo.vue +2 -0
  32. package/types/global.d.ts +2 -0
@@ -1,28 +1,58 @@
1
1
  <template>
2
2
  <view class="view recharge-view2">
3
3
  <view class="flex-grow">
4
- <rights-picker :items="amounts" :selected="state.selected" @change="onAmountSelect" />
4
+ <rights-picker
5
+ :items="amounts"
6
+ :selected="state.selected"
7
+ @change="onAmountSelect"
8
+ />
5
9
  <div class="bean-buy" v-if="amounts[state.selected]">
6
10
  <div class="left">
7
11
  <div class="title">使用云豆支付</div>
8
- <div class="amount" v-if="!selectBean">余额 {{ formatAmount(balance || 0) }}</div>
9
- <div class="amount" v-else>扣减后余额 {{ formatAmount(balance - amounts[state.selected].paymentAmount) }}</div>
12
+ <div class="amount" v-if="!selectBean || isCombinedPayment">
13
+ 余额 {{ formatAmount(balance || 0) }}
14
+ </div>
15
+ <div class="amount" v-else>
16
+ 扣减后余额
17
+ {{ formatAmount(balance - amounts[state.selected].paymentAmount) }}
18
+ </div>
10
19
  </div>
11
- <div class="right" v-if="balance >= amounts[state.selected].paymentAmount" @click="selectBean = !selectBean">
12
- <div class="amount">-{{ formatAmount(amounts[state.selected].paymentAmount || 0) }}</div>
13
- <img class="icon"
14
- :src="selectBean ? 'https://cdn.ddjf.com/static/images/appkit/select.svg' : 'https://cdn.ddjf.com/static/images/appkit/not-select.svg'" />
20
+ <div class="right" @click="selectBean = !selectBean">
21
+ <div class="amount">
22
+ -{{ formatAmount(amounts[state.selected].paymentAmount || 0) }}
23
+ </div>
24
+ <img
25
+ class="icon"
26
+ :src="
27
+ selectBean
28
+ ? 'https://cdn.ddjf.com/static/images/appkit/select.svg'
29
+ : 'https://cdn.ddjf.com/static/images/appkit/not-select.svg'
30
+ "
31
+ />
32
+ </div>
33
+
34
+ <div class="balance-warning" v-if="isCombinedPayment">
35
+ 云豆余额不足,还需额外支付{{ formatAmount(extraPaymentAmount) }}元
15
36
  </div>
16
37
  </div>
17
38
 
39
+ <div class="balance-warning-tip" v-if="isCombinedPayment">
40
+ 请在支付完成前确保元豆余额不被消耗,否则本次权益可能购买失败
41
+ </div>
18
42
 
19
43
  <slot name="banner"></slot>
20
44
  </view>
21
45
 
22
46
  <view class="amount-footer">
23
- <view class="agreement" v-if="!selectBean">
24
- <nut-checkbox v-model="state.agreed">我已阅读并同意<a v-track-click class="link inline"
25
- @click="onAgreementLinkClick">《大道云平台云豆充值服务协议》</a></nut-checkbox>
47
+ <view class="agreement" v-if="!selectBean || isCombinedPayment">
48
+ <nut-checkbox v-model="state.agreed"
49
+ >我已阅读并同意<a
50
+ v-track-click
51
+ class="link inline"
52
+ @click="onAgreementLinkClick"
53
+ >《大道云平台云豆充值服务协议》</a
54
+ ></nut-checkbox
55
+ >
26
56
  </view>
27
57
  <div class="buy-amount">
28
58
  <div class="left">
@@ -31,29 +61,54 @@
31
61
  <i>¥</i>{{ formatAmount(currentAmount) }}
32
62
  </span>
33
63
  </div>
34
- <nut-button block shape="square" :loading="state.buttonLoading" v-track-click @click="onPayClick"
35
- class="recharge-button">购买</nut-button>
64
+ <nut-button
65
+ block
66
+ shape="square"
67
+ :loading="state.buttonLoading"
68
+ v-track-click
69
+ @click="onPayClick"
70
+ class="recharge-button"
71
+ >购买</nut-button
72
+ >
36
73
  </div>
37
74
  </view>
38
- <nut-dialog title="确认购买" custom-class="trade-dialog" v-model:visible="showDialog" @cancel="showDialog = !showDialog"
39
- @ok="beanPay">
75
+ <nut-dialog
76
+ title="确认购买"
77
+ custom-class="trade-dialog"
78
+ v-model:visible="showDialog"
79
+ @cancel="showDialog = !showDialog"
80
+ @ok="beanPay"
81
+ >
40
82
  <template v-if="amounts[state.selected]">
41
- <div class="item">云豆扣减:{{ formatAmount(amounts[state.selected].paymentAmount || 0) }}</div>
42
- <div class="item">权益增加:{{ formatAmount(amounts[state.selected].priceRightNum || 0) }}笔</div>
43
- <div class="item">扣减后云豆余额:{{ formatAmount(balance - amounts[state.selected].paymentAmount) }}</div>
83
+ <div class="item">
84
+ 云豆扣减:{{
85
+ formatAmount(amounts[state.selected].paymentAmount || 0)
86
+ }}
87
+ </div>
88
+ <div class="item">
89
+ 权益增加:{{
90
+ formatAmount(amounts[state.selected].priceRightNum || 0)
91
+ }}笔
92
+ </div>
93
+ <div class="item">
94
+ 扣减后云豆余额:{{
95
+ formatAmount(balance - amounts[state.selected].paymentAmount)
96
+ }}
97
+ </div>
44
98
  </template>
45
99
  </nut-dialog>
46
100
  </view>
47
101
  </template>
48
102
 
49
103
  <script lang="ts" setup>
50
- import { computed, onMounted, reactive, ref } from 'vue'
51
- import RightsPicker, { Amount } from './RightsPicker.vue'
52
- import { endpoints, useHttp } from '../api'
53
- import { requestBrandWCPayByBean, requestPaymentByBean } from '../services'
54
- import Taro, { showToast, useRouter } from '@tarojs/taro'
55
- import { useAmount } from '../../shared/composables/useAmount'
56
- import { isWechat } from '../../shared/composables/useDeviceEnv'
104
+ import { computed, onMounted, reactive, ref } from "vue";
105
+ import RightsPicker, { Amount } from "./RightsPicker.vue";
106
+ import { endpoints, useHttp } from "../api";
107
+ import { endpoints as balanceEndpoints } from "../../balance/api";
108
+ import { requestBrandWCPayByBean, requestPaymentByBean } from "../services";
109
+ import Taro, { showToast, useRouter, showModal } from "@tarojs/taro";
110
+ import { useAmount } from "../../shared/composables/useAmount";
111
+ import { isWechat } from "../../shared/composables/useDeviceEnv";
57
112
 
58
113
  // 充值用户界面
59
114
  // 配置了必须的属性后
@@ -63,11 +118,11 @@ export interface RechargeViewProps {
63
118
  /**
64
119
  * header头中的appcode,一般情况下与app参数一致,当无应用权限时,此参数未空
65
120
  **/
66
- headerApp: string,
121
+ headerApp: string;
67
122
  /**
68
123
  * 应用
69
124
  **/
70
- app: string,
125
+ app: string;
71
126
  /**
72
127
  * 充值场景
73
128
  */
@@ -75,16 +130,20 @@ export interface RechargeViewProps {
75
130
  /**
76
131
  * 租户
77
132
  */
78
- tenant: string,
133
+ tenant: string;
79
134
  /**
80
135
  * h5支付完成后跳转地址
81
136
  */
82
- payFinishJumpUrl?: ''
137
+ payFinishJumpUrl?: "";
138
+ /**
139
+ * 所有应用
140
+ **/
141
+ apps?: string;
83
142
  }
84
143
 
85
- const props = defineProps<RechargeViewProps>()
86
- const { formatAmount } = useAmount()
87
- const { params } = useRouter()
144
+ const props = defineProps<RechargeViewProps>();
145
+ const { formatAmount } = useAmount();
146
+ const { params } = useRouter();
88
147
 
89
148
  const emit = defineEmits<{
90
149
  (event: 'complete', value: { result: boolean, type: string }): void,
@@ -97,121 +156,249 @@ const state = reactive({
97
156
  selected: 0,
98
157
  // agreementOpen: false,
99
158
  buttonLoading: false,
100
- })
159
+ });
101
160
 
102
-
103
- const balance = ref<number>(0)
104
- const amounts = ref<Amount[]>([])
105
- const selectBean = ref<boolean>(false)
161
+ const balance = ref<number>(0);
162
+ const amounts = ref<Amount[]>([]);
163
+ const selectBean = ref<boolean>(false);
106
164
 
107
165
  const onAgreementLinkClick = (e) => {
108
- e.preventDefault()
109
- e.stopImmediatePropagation()
110
- emit('agree')
166
+ e.preventDefault();
167
+ e.stopImmediatePropagation();
168
+ emit("agree");
111
169
  // state.agreementOpen = true
112
- }
170
+ };
113
171
 
114
172
  const onAmountSelect = (selected: number) => {
115
- state.selected = selected
116
- selectBean.value = false
117
- }
173
+ state.selected = selected;
174
+ selectBean.value = false;
175
+ };
176
+
177
+ // 计算额外支付金额(当云豆余额不足时)
178
+ const extraPaymentAmount = computed(() => {
179
+ if (!selectBean.value || !amounts.value[state.selected]) {
180
+ return 0;
181
+ }
182
+ const paymentAmount = amounts.value[state.selected].paymentAmount || 0;
183
+ const currentBalance = balance.value || 0;
184
+ return Math.max(0, paymentAmount - currentBalance);
185
+ });
118
186
 
187
+ // 计算待支付金额
119
188
  const currentAmount = computed(() => {
120
- return amounts.value[state.selected] && !selectBean.value ? amounts.value[state.selected].paymentAmount : 0
121
- })
189
+ if (!amounts.value[state.selected]) {
190
+ return 0;
191
+ }
192
+
193
+ // 如果选择了云豆支付
194
+ if (selectBean.value) {
195
+ // 如果余额不足,返回额外需要支付的金额
196
+ if (balance.value < amounts.value[state.selected].paymentAmount) {
197
+ return extraPaymentAmount.value;
198
+ }
199
+ // 如果余额充足,返回0(全部用云豆支付)
200
+ return 0;
201
+ }
202
+
203
+ // 如果没有选择云豆支付,返回全额
204
+ return amounts.value[state.selected].paymentAmount || 0;
205
+ });
206
+
207
+ // 判断是否为组合支付
208
+ const isCombinedPayment = computed(() => {
209
+ return (
210
+ selectBean.value &&
211
+ amounts.value[state.selected] &&
212
+ balance.value < amounts.value[state.selected].paymentAmount
213
+ );
214
+ });
122
215
 
123
216
  onMounted(() => {
124
- const $http = useHttp({ Appcode: props.headerApp, Tenant: props.tenant })
125
- $http.get<any[]>(endpoints.获取增值权益类目, {
126
- rightCode: props.app === 'corporateStar' ? 'riskQueryCompany' : 'riskQueryMulti',
127
- }).then((res: any) => {
128
- balance.value = res.balance
129
- amounts.value = res.paymentCaseConfigVOS
130
- emit('loaded')
131
- })
132
- })
217
+ const $http = useHttp({ Appcode: props.headerApp, Tenant: props.tenant });
218
+ $http
219
+ .get<any[]>(endpoints.获取增值权益类目, {
220
+ rightCode:
221
+ props.app === "corporateStar" ? "riskQueryCompany" : "riskQueryMulti",
222
+ })
223
+ .then((res: any) => {
224
+ balance.value = res.balance;
225
+ amounts.value = res.paymentCaseConfigVOS;
226
+ emit("loaded");
227
+ });
228
+ });
229
+
230
+ // 云豆支付对话框
231
+ const showDialog = ref<boolean>(false);
133
232
 
134
- // 云豆支付
135
- const showDialog = ref<boolean>(false)
233
+ // 处理确认支付(纯云豆支付)
136
234
  async function beanPay() {
137
- const $http = useHttp({ Appcode: props.headerApp, Tenant: props.tenant })
138
- $http.post(`/payment/paymentCaseConfig/purchase/${amounts.value[state.selected].id}`).then((response: any) => {
235
+ const $http = useHttp({ Appcode: props.headerApp, Tenant: props.tenant });
236
+ try {
237
+ const response: any = await $http.post(
238
+ `/payment/paymentCaseConfig/purchase/${amounts.value[state.selected].id}`
239
+ );
139
240
  if (response) {
140
- showDialog.value = false
141
- emit('complete', { result: response, type: 'bean' })
241
+ showDialog.value = false;
242
+ emit("complete", { result: response, type: "bean" });
142
243
  } else {
143
244
  showToast({
144
- title: response.message,
145
- icon: 'none',
146
- })
245
+ title: (response as any)?.message || "支付失败",
246
+ icon: "none",
247
+ });
147
248
  }
148
- })
149
- }
150
-
151
-
152
- const onPayClick = () => {
153
- // 用云豆支付
154
- if (selectBean.value) {
155
- showDialog.value = true
156
- return
249
+ } catch (error: any) {
250
+ showToast({
251
+ title: error?.message || "支付失败",
252
+ icon: "none",
253
+ });
157
254
  }
255
+ }
158
256
 
159
- // 微信支付
160
- if (!selectBean.value && !state.agreed) {
257
+ // 执行微信支付(用于组合支付或纯微信支付)
258
+ function proceedWechatPayment() {
259
+ if (!state.agreed) {
161
260
  showToast({
162
- title: '请勾选《大道云平台云豆充值协议》',
163
- icon: 'none',
164
- })
165
- return false
261
+ title: "请勾选《大道云平台云豆充值协议》",
262
+ icon: "none",
263
+ });
264
+ return false;
166
265
  }
167
- state.buttonLoading = true
168
266
 
169
- if (Taro.getEnv() === 'WEB') {
267
+ state.buttonLoading = true;
268
+
269
+ if (Taro.getEnv() === "WEB") {
170
270
  if (!isWechat()) {
171
271
  showToast({
172
- title: '请使用微信浏览器打开',
173
- icon: 'none',
174
- })
175
- state.buttonLoading = false
176
- return false
272
+ title: "请使用微信浏览器打开",
273
+ icon: "none",
274
+ });
275
+ state.buttonLoading = false;
276
+ return false;
177
277
  }
278
+ // 组合支付或纯微信支付:传递caseConfigId和amount,后端会自动处理云豆扣减
178
279
  requestBrandWCPayByBean({
179
280
  caseConfigId: amounts.value[state.selected].id,
180
- amount: amounts.value[state.selected].paymentAmount,
181
- app: 'loankitMp',
281
+ amount: currentAmount.value,
282
+ app: "loankitMp",
182
283
  tenant: props.tenant,
183
284
  accountAuthFlag: false,
184
- channelCode: 'centergzh',
285
+ channelCode: "centergzh",
185
286
  payFinishJumpUrl: props.payFinishJumpUrl,
186
- fromMini: !!params.from
187
- }).then(result => {
188
- console.log(result, '------requestBrandWCPay')
189
- state.buttonLoading = false
190
- if (typeof result === 'boolean' && result) {
191
- window.location.href = props.payFinishJumpUrl as string
192
- } else {
193
- emit('complete', { result, type: 'wePay' })
194
- }
287
+ fromMini: !!params.from,
288
+ useCloudBean: isCombinedPayment.value
195
289
  })
290
+ .then((result) => {
291
+ state.buttonLoading = false;
292
+ if (typeof result === "boolean" && result) {
293
+ window.location.href = props.payFinishJumpUrl as string;
294
+ } else {
295
+ emit("complete", {
296
+ result,
297
+ type: isCombinedPayment.value ? "combined" : "wePay",
298
+ });
299
+ }
300
+ })
301
+ .catch((error) => {
302
+ state.buttonLoading = false;
303
+ showToast({
304
+ title: error.message || "支付失败",
305
+ icon: "none",
306
+ });
307
+ });
196
308
  } else {
197
309
  wx.login({
198
310
  success({ code }: { code: string }) {
199
- requestPaymentByBean({
200
- caseConfigId: amounts.value[state.selected].id,
201
- amount: amounts.value[state.selected].paymentAmount,
202
- app: props.app,
203
- tenant: props.tenant,
204
- user: code,
205
- }, props.headerApp).then(result => {
206
- state.buttonLoading = false
207
- if (result) {
208
- emit('complete', { result: true, type: 'wePay' })
209
- }
210
- })
211
- }
212
- })
311
+ requestPaymentByBean(
312
+ {
313
+ caseConfigId: amounts.value[state.selected].id,
314
+ amount: currentAmount.value,
315
+ app: props.app,
316
+ tenant: props.tenant,
317
+ user: code,
318
+ },
319
+ props.headerApp
320
+ )
321
+ .then((result) => {
322
+ state.buttonLoading = false;
323
+ if (result) {
324
+ emit("complete", {
325
+ result: true,
326
+ type: isCombinedPayment.value ? "combined" : "wePay",
327
+ });
328
+ }
329
+ })
330
+ .catch((error) => {
331
+ state.buttonLoading = false;
332
+ showToast({
333
+ title: error.message || "支付失败",
334
+ icon: "none",
335
+ });
336
+ });
337
+ },
338
+ fail() {
339
+ state.buttonLoading = false;
340
+ showToast({
341
+ title: "登录失败,请重试",
342
+ icon: "none",
343
+ });
344
+ },
345
+ });
346
+ }
347
+ }
348
+
349
+ const onPayClick = async () => {
350
+ // 用云豆支付(纯云豆支付)
351
+ if (selectBean.value && !isCombinedPayment.value) {
352
+ showDialog.value = true;
353
+ return;
354
+ }
355
+
356
+ if (isCombinedPayment.value) {
357
+ // 检验云豆是否已经改变,改变则刷新选择
358
+ const res = await checkBalance()
359
+ if (!res) return
213
360
  }
361
+
362
+ // 纯微信支付
363
+ proceedWechatPayment();
364
+ }
365
+
366
+ /**
367
+ * 校验余额是否充足
368
+ */
369
+ async function checkBalance() {
370
+ const $http = useHttp()
371
+ return new Promise((resolve, reject) => {
372
+ state.buttonLoading = true;
373
+ $http
374
+ .get<any>(balanceEndpoints.获取余额明细, {
375
+ app: props.apps,
376
+ })
377
+ .then((data) => {
378
+ state.buttonLoading = false;
379
+ if (data.commonAccount < balance.value) {
380
+ showModal({
381
+ title: '温馨提示',
382
+ content: '云豆不足,请刷新后再次确认',
383
+ showCancel: false,
384
+ confirmText: '刷新',
385
+ confirmColor: '#017fff',
386
+ success: () => {
387
+ balance.value = data.commonAccount;
388
+ }
389
+ })
390
+ resolve(false)
391
+
392
+ } else {
393
+ resolve(true)
394
+ }
395
+ }).catch((error) => {
396
+ state.buttonLoading = false;
397
+ resolve(false)
398
+ })
399
+ })
214
400
  }
401
+
215
402
  </script>
216
403
 
217
404
  <style lang="scss">
@@ -228,15 +415,16 @@ const onPayClick = () => {
228
415
  .bean-buy {
229
416
  margin: 0 15px;
230
417
  padding: 10px;
231
- background: #FFFBF3;
418
+ background: #fffbf3;
232
419
  border-radius: 5px;
233
420
  display: flex;
234
421
  justify-content: space-between;
235
422
  align-items: center;
423
+ flex-wrap: wrap;
236
424
 
237
425
  .left {
238
426
  .title {
239
- color: #FD6701;
427
+ color: #fd6701;
240
428
  font-size: 14px;
241
429
  font-weight: 600;
242
430
  line-height: 20px;
@@ -247,7 +435,7 @@ const onPayClick = () => {
247
435
  color: #353535;
248
436
  font-size: 13px;
249
437
  line-height: 16px;
250
- background-image: url('https://cdn.ddjf.com/static/images/appkit/yundou.png');
438
+ background-image: url("https://cdn.ddjf.com/static/images/appkit/yundou.png");
251
439
  background-repeat: no-repeat;
252
440
  background-size: 16px 16px;
253
441
  padding-left: 24px;
@@ -274,9 +462,24 @@ const onPayClick = () => {
274
462
  }
275
463
  }
276
464
 
465
+ .balance-warning {
466
+ width: 100%;
467
+ padding: 8px 10px;
468
+ margin-top: 10px;
469
+ background: #fdefe6;
470
+ border-radius: 5px;
471
+ color: #fd6701;
472
+ font-size: 12px;
473
+
474
+ &-tip {
475
+ margin: 10px 26px 0;
476
+ color: #666666;
477
+ font-size: 10px;
478
+ }
479
+ }
480
+
277
481
  .amount-footer {
278
482
  padding: 10px 0;
279
- padding-bottom: 20px;
280
483
 
281
484
  .agreement {
282
485
  font-size: 12px;
@@ -301,7 +504,7 @@ const onPayClick = () => {
301
504
  font-size: 13px;
302
505
 
303
506
  .amount {
304
- color: #FD6701;
507
+ color: #fd6701;
305
508
  font-size: 20px;
306
509
  font-weight: 600;
307
510
 
@@ -313,7 +516,12 @@ const onPayClick = () => {
313
516
  }
314
517
 
315
518
  .recharge-button {
316
- background: linear-gradient(90deg, #FFEBC1 0%, #FFD7A7 52.29%, #FFB875 100%);
519
+ background: linear-gradient(
520
+ 90deg,
521
+ #ffebc1 0%,
522
+ #ffd7a7 52.29%,
523
+ #ffb875 100%
524
+ );
317
525
  color: #353535;
318
526
  margin: 12px 0;
319
527
  border: 0;
@@ -334,7 +542,7 @@ const onPayClick = () => {
334
542
 
335
543
  .link {
336
544
  display: inline;
337
- color: #FD6701;
545
+ color: #fd6701;
338
546
  }
339
547
  }
340
548
  }
@@ -342,7 +550,7 @@ const onPayClick = () => {
342
550
  .trade-dialog {
343
551
  .nut-dialog__header {
344
552
  font-size: 16px;
345
- color: #262626
553
+ color: #262626;
346
554
  }
347
555
 
348
556
  .item {
@@ -353,13 +561,13 @@ const onPayClick = () => {
353
561
 
354
562
  .nut-dialog__footer-cancel {
355
563
  color: #353535 !important;
356
- border-color: #CCCCCC !important;
564
+ border-color: #cccccc !important;
357
565
  }
358
566
 
359
567
  .nut-dialog__footer-ok {
360
568
  border: none;
361
569
  color: #353535;
362
- background: linear-gradient(90deg, #FFEBC1 0%, #FFB875 100%);
570
+ background: linear-gradient(90deg, #ffebc1 0%, #ffb875 100%);
363
571
  }
364
572
  }
365
573
  </style>
@@ -117,6 +117,8 @@ const requestBrandWCPayByBean = (params: PaymentParams, Appcode = '') => {
117
117
  }
118
118
  })
119
119
  }
120
+ }).catch(() => {
121
+ resolve(false)
120
122
  })
121
123
  })
122
124
  }
@@ -28,6 +28,7 @@ export type PaymentParams = {
28
28
  payFinishJumpUrl?: string
29
29
  fromMini?: Boolean
30
30
  clientInfo?: string
31
+ useCloudBean?: boolean
31
32
  }
32
33
 
33
34
  export type RechargeParams = Pick<PaymentParams, 'app' | 'tenant'>
@@ -124,7 +124,7 @@ async function submit() {
124
124
  <nut-form-item label="你的姓名" required>
125
125
  <div class="self-registration__input">
126
126
  <input v-model="formState.name" class="nut-input-text" placeholder="请输入或拍照识别" type="text" :maxlength="20" />
127
- <OcrIcon @complete="onOCRInfo">
127
+ <OcrIcon :has-upload-vo="false" @complete="onOCRInfo">
128
128
  <template #icon>
129
129
  <img style="width: 20px; height: 20px; margin-left: 5px;"
130
130
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggb3BhY2l0eT0iLjAxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQwIDB2NDBIMFYwaDQweiIgZmlsbD0iI0M0QzRDNCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzMuMDQ0IDE3LjM2M2MuOTYgMCAxLjczOS0uNzkgMS43MzktMS43NjYgMC0uOTc1LS43NzktMS43NjYtMS43NC0xLjc2Ni0uOTYgMC0xLjczOC43OS0xLjczOCAxLjc2NnMuNzc4IDEuNzY2IDEuNzM5IDEuNzY2eiIgZmlsbD0iIzRCQ0I5MyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAzMS44MTJWMTQuNzg4YzAtMi4yNTggMi4wNDktNC4wOTcgNC41NjQtNC4wOTdoMy44NDRsMS4xMzYtMy42NThDOS44ODggNS45MTMgMTEuMjM3IDUgMTIuNTQ4IDVIMjcuNDVjMS4zOSAwIDIuNjguODc2IDMuMDEgMi4wNDRsMS4xMzMgMy42NDdoMy44NDRjMi41MTUgMCA0LjU2NCAxLjgzOSA0LjU2NCA0LjA5N3YxLjczOWMwIC41MDMtLjQ1NC45MS0xLjAxNC45MXMtMS4wMTQtLjQwNy0xLjAxNC0uOTF2LTEuNzRjMC0xLjI1My0xLjEzOS0yLjI3NS0yLjUzNi0yLjI3NWgtMy44NDRjLS45MDcgMC0xLjcxMS0uNTQ5LTEuOTU1LTEuMzMybC0xLjEzNi0zLjY2YS4zNDIuMzQyIDAgMCAwLS4wMDctLjAyNWMtLjExLS4zOTYtLjYzOS0uNjc0LTEuMDQ1LS42NzRoLTE0LjljLS4zOTkgMC0uOTUuMzY2LTEuMDUzLjY5OWwtMS4xMzYgMy42NmMtLjI0Ny43ODYtMS4wNDUgMS4zMy0xLjk1NSAxLjMzMkg0LjU2NGMtMS4zOTcgMC0yLjUzNiAxLjAyMi0yLjUzNiAyLjI3NnYxNy4wMjRjMCAxLjI1NCAxLjEzOSAyLjI3NiAyLjUzNiAyLjI3NmgzMC44N2MxLjM5NyAwIDIuNTM1LTEuMDIyIDIuNTM1LTIuMjc2VjIxLjU5NmMwLS41MDMuNDU0LS45MSAxLjAxNC0uOTFzMS4wMTUuNDA3IDEuMDE1LjkxVjMxLjgxYy0uMDAzIDIuMjYtMi4wNSA0LjEtNC41NjcgNC4xSDQuNTY0QzIuMDQ5IDM1LjkxIDAgMzQuMDcgMCAzMS44MTF6IiBmaWxsPSIjNEJDQjkzIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi4xNzQgMjEuNzc4YzAtNC44NyAzLjcwNS04LjgzIDguMjYtOC44MyA0LjU1NiAwIDguMjYyIDMuOTYgOC4yNjIgOC44M3MtMy43MDYgOC44MzItOC4yNjEgOC44MzJjLTQuNTU2IDAtOC4yNjEtMy45NjItOC4yNjEtOC44MzJ6bTEuNzc5LjEzYzAgMy43OTYgMi45MDcgNi44ODMgNi40ODIgNi44ODMgMy41NzQgMCA2LjQ4MS0zLjA4NyA2LjQ4MS02Ljg4M3MtMi45MDctNi44ODMtNi40ODItNi44ODNjLTMuNTc0IDAtNi40ODEgMy4wODctNi40ODEgNi44ODN6IiBmaWxsPSIjNEJDQjkzIi8+PC9zdmc+" />