@uxda/appkit 4.3.8 → 4.3.12

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 (135) hide show
  1. package/.eslintrc.mjs +7 -7
  2. package/COMPONENT_USAGE.md +1523 -1523
  3. package/PROJECT_DOCS.md +142 -142
  4. package/README.md +187 -187
  5. package/babel.config.js +12 -12
  6. package/dist/appkit.css +63 -15
  7. package/dist/index.js +881 -259
  8. package/package.json +79 -79
  9. package/project.config.json +15 -15
  10. package/project.tt.json +13 -13
  11. package/rollup.config.mjs +78 -78
  12. package/src/Appkit.ts +72 -72
  13. package/src/balance/api/endpoints.ts +133 -133
  14. package/src/balance/api/index.ts +118 -118
  15. package/src/balance/components/AccountView.vue +770 -770
  16. package/src/balance/components/BalanceCard.vue +210 -210
  17. package/src/balance/components/BalanceReminder.vue +84 -84
  18. package/src/balance/components/ConsumptionFilter.vue +218 -218
  19. package/src/balance/components/ConsumptionRules.vue +68 -68
  20. package/src/balance/components/DateFilter.vue +259 -259
  21. package/src/balance/components/DateRange.vue +111 -111
  22. package/src/balance/components/ListFilter.vue +62 -62
  23. package/src/balance/components/ListFilterPicker.vue +191 -191
  24. package/src/balance/components/PromoterCard.vue +308 -307
  25. package/src/balance/components/SecondBalance.vue +77 -77
  26. package/src/balance/components/Tip.vue +45 -45
  27. package/src/balance/components/index.ts +8 -8
  28. package/src/balance/types.ts +99 -99
  29. package/src/components/bt-cropper/index.vue +730 -730
  30. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  31. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  32. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  33. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  34. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  35. package/src/components/bt-cropper/utils/ratio.js +3 -3
  36. package/src/components/bt-cropper/utils/tools.js +25 -25
  37. package/src/components/dd-area/index.vue +225 -225
  38. package/src/components/dd-icon/doc.md +21 -21
  39. package/src/components/dd-icon/index.vue +23 -23
  40. package/src/components/dd-notice-bar/index.vue +78 -78
  41. package/src/components/dd-search/doc.md +34 -34
  42. package/src/components/dd-search/index.vue +168 -168
  43. package/src/components/dd-selector/index.vue +124 -124
  44. package/src/components/dd-skeleton/doc.md +19 -19
  45. package/src/components/dd-skeleton/index.vue +36 -36
  46. package/src/global.ts +6 -6
  47. package/src/index.ts +101 -101
  48. package/src/main.scss +1 -1
  49. package/src/notice/api/endpoints.ts +54 -54
  50. package/src/notice/api/index.ts +121 -121
  51. package/src/notice/components/NoticeBanner.vue +247 -247
  52. package/src/notice/components/NoticeEntry.vue +99 -99
  53. package/src/notice/components/NoticeList.vue +311 -311
  54. package/src/notice/components/NoticeList2.vue +401 -400
  55. package/src/notice/components/NoticePopup.vue +163 -163
  56. package/src/notice/components/index.ts +6 -6
  57. package/src/notice/components/useCommonList.ts +87 -86
  58. package/src/notice/components/useNotice.ts +35 -35
  59. package/src/notice/index.ts +1 -1
  60. package/src/notice/types.ts +25 -25
  61. package/src/payment/api/config.ts +7 -7
  62. package/src/payment/api/endpoints.ts +98 -96
  63. package/src/payment/api/index.ts +108 -107
  64. package/src/payment/components/AmountPicker.vue +90 -90
  65. package/src/payment/components/RechargeResult.vue +68 -69
  66. package/src/payment/components/RechargeView.vue +195 -191
  67. package/src/payment/components/RightsPicker.vue +105 -105
  68. package/src/payment/components/TradeView.vue +573 -363
  69. package/src/payment/components/UserAgreement.vue +234 -234
  70. package/src/payment/components/index.ts +22 -22
  71. package/src/payment/index.ts +5 -5
  72. package/src/payment/services/index.ts +16 -16
  73. package/src/payment/services/invoke-recharge.ts +25 -25
  74. package/src/payment/services/request-payment.ts +132 -130
  75. package/src/payment/types.ts +34 -33
  76. package/src/register/components/SelfRegistration.vue +233 -233
  77. package/src/register/components/index.ts +2 -2
  78. package/src/scenarios/components/SharePoster.vue +364 -364
  79. package/src/scenarios/components/index.ts +2 -2
  80. package/src/scenarios/components/poster-paste.vue +93 -93
  81. package/src/scenarios/components/share-poster.md +273 -273
  82. package/src/shared/components/AppDrawer.vue +53 -53
  83. package/src/shared/components/AppVerify.vue +137 -128
  84. package/src/shared/components/DeviceVersion.vue +78 -78
  85. package/src/shared/components/EmptyView.vue +33 -33
  86. package/src/shared/components/OcrBank.vue +202 -0
  87. package/src/shared/components/OcrBusinessLicense.vue +120 -137
  88. package/src/shared/components/OcrIcon.vue +267 -229
  89. package/src/shared/components/OcrInvoice.vue +322 -0
  90. package/src/shared/components/PageHeader.vue +84 -84
  91. package/src/shared/components/index.ts +10 -8
  92. package/src/shared/composables/index.ts +10 -9
  93. package/src/shared/composables/useAmount.ts +46 -46
  94. package/src/shared/composables/useCompress.ts +64 -0
  95. package/src/shared/composables/useCountdown.ts +46 -46
  96. package/src/shared/composables/useCrypto.ts +76 -76
  97. package/src/shared/composables/useDeviceEnv.ts +26 -26
  98. package/src/shared/composables/useDragBox.ts +97 -97
  99. package/src/shared/composables/useEncode.ts +43 -43
  100. package/src/shared/composables/useLogger.ts +144 -144
  101. package/src/shared/composables/useSafeArea.ts +46 -46
  102. package/src/shared/composables/useTabbar.ts +24 -24
  103. package/src/shared/composables/useUpload.ts +106 -61
  104. package/src/shared/composables/useValidator.ts +32 -32
  105. package/src/shared/composables/useWxAuth.ts +48 -48
  106. package/src/shared/http/Http.ts +149 -148
  107. package/src/shared/http/index.ts +1 -1
  108. package/src/shared/http/types.ts +163 -163
  109. package/src/shared/index.ts +9 -9
  110. package/src/shared/tracking/directives/index.ts +40 -40
  111. package/src/shared/tracking/examples/page-tracking-template.vue +27 -27
  112. package/src/shared/tracking/tracking-sdk.ts +0 -1
  113. package/src/shared/weixin/index.ts +9 -9
  114. package/src/shared/weixin/jssdk.ts +104 -103
  115. package/src/shared/weixin/payment.ts +38 -38
  116. package/src/styles/vars.scss +3 -3
  117. package/src/user/api/endpoints.ts +17 -17
  118. package/src/user/api/index.ts +123 -123
  119. package/src/user/components/LoginSetting.vue +114 -114
  120. package/src/user/components/UserAuth.vue +218 -218
  121. package/src/user/components/UserBinding.vue +277 -277
  122. package/src/user/components/UserBindingSuccess.vue +80 -80
  123. package/src/user/components/UserEntry.vue +139 -139
  124. package/src/user/components/UserFeedback.vue +428 -427
  125. package/src/user/components/UserFeedbackEntry.vue +175 -175
  126. package/src/user/components/UserHeadCrop.vue +65 -65
  127. package/src/user/components/UserInfo.vue +711 -709
  128. package/src/user/components/UserResourceEmpty.vue +75 -75
  129. package/src/user/components/index.ts +23 -23
  130. package/src/user/index.ts +1 -1
  131. package/src/utils/utils.ts +33 -33
  132. package/tsconfig.json +30 -30
  133. package/types/global.d.ts +24 -22
  134. package/types/vue.d.ts +10 -10
  135. package/dist/assets/asset-DcH8Kg-2 +0 -1
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
- import { Grid, GridItem, Popup, ActionSheet, Checkbox, Button, Dialog, DatePicker, Form, FormItem, RadioGroup, Radio, Ellipsis, Skeleton, Cell, Input, Steps, Step } from '@nutui/nutui-taro';
1
+ import { GridItem, Grid, Popup, ActionSheet, Checkbox, Button, Dialog, DatePicker, Radio, RadioGroup, FormItem, Form, Ellipsis, Skeleton, Cell, Input, Step, Steps } from '@nutui/nutui-taro';
2
2
  import '@nutui/nutui-taro/dist/packages/button/style/css';
3
3
  import '@nutui/nutui-taro/dist/packages/checkbox/style/css';
4
- import { defineComponent, reactive, createBlock, openBlock, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createTextVNode, ref, computed, onUnmounted, resolveDirective, createCommentVNode, withDirectives, renderSlot, createVNode, normalizeStyle, unref, isRef, onMounted, createStaticVNode, watch, vShow, mergeModels, useModel, resolveComponent, vModelText, watchPostEffect, withModifiers } from 'vue';
4
+ import { defineComponent, reactive, openBlock, createBlock, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createTextVNode, ref, computed, onUnmounted, resolveDirective, createCommentVNode, withDirectives, renderSlot, createVNode, normalizeStyle, unref, isRef, onMounted, createStaticVNode, watch, vShow, mergeModels, useModel, resolveComponent, vModelText, watchPostEffect, withModifiers } from 'vue';
5
5
  import '@nutui/nutui-taro/dist/packages/grid/style/css';
6
6
  import '@nutui/nutui-taro/dist/packages/griditem/style/css';
7
- import Taro, { showModal, getSystemInfoSync, getMenuButtonBoundingClientRect, uploadFile, request as request$1, showToast, chooseMedia, chooseMessageFile, showLoading, hideLoading, getStorageSync, setStorageSync, getSystemInfo, getNetworkType, getEnv, getAccountInfoSync, getPerformance, onAppHide, useDidShow, onAppShow, onNetworkStatusChange, useRouter } from '@tarojs/taro';
7
+ import Taro, { showModal, getSystemInfoSync, getMenuButtonBoundingClientRect, request as request$1, uploadFile, showToast, chooseMedia, chooseMessageFile, showLoading, hideLoading, getStorageSync, setStorageSync, getSystemInfo, getNetworkType, getEnv, getAccountInfoSync, getPerformance, onAppHide, useDidShow, onAppShow, onNetworkStatusChange, useRouter } from '@tarojs/taro';
8
8
  import '@nutui/nutui-taro/dist/packages/popup/style/css';
9
9
  import isMobilePhone from 'validator/es/lib/isMobilePhone';
10
10
  import isIdentityCard from 'validator/es/lib/isIdentityCard';
11
11
  import qs from 'qs';
12
- import { NsForm, NsInput, NsButton, NsIcon, usePopup, useNutshell, NsButtonGroup, usePaging, NsPage, NsTabs, NsPageContent, NsSkeleton, NsRepeator, NsCard, NsEmpty, NsCheckbox } from '@uxda/nutshell/taro';
12
+ import { NsForm, NsInput, NsButton, useNutshell, NsIcon, usePopup, NsButtonGroup, usePaging, NsPage, NsTabs, NsPageContent, NsSkeleton, NsRepeator, NsCard, NsEmpty, NsCheckbox } from '@uxda/nutshell/taro';
13
13
  import '@nutui/nutui-taro/dist/packages/actionsheet/style/css';
14
14
  import pako from 'pako';
15
15
  import dsBridge from 'dsbridge';
@@ -34,7 +34,7 @@ import '@nutui/nutui-taro/dist/packages/step/style/css';
34
34
 
35
35
  const _hoisted_1$G = { class: "token-line number" };
36
36
  const _hoisted_2$t = { class: "number" };
37
- var script$M = /* @__PURE__ */ defineComponent({
37
+ var script$O = /* @__PURE__ */ defineComponent({
38
38
  __name: "AmountPicker",
39
39
  props: {
40
40
  items: { type: Array, required: true, default: () => [] },
@@ -107,7 +107,7 @@ var script$M = /* @__PURE__ */ defineComponent({
107
107
  }
108
108
  });
109
109
 
110
- script$M.__file = "src/payment/components/AmountPicker.vue";
110
+ script$O.__file = "src/payment/components/AmountPicker.vue";
111
111
 
112
112
  const getSdkConfig = (appCode, url) => {
113
113
  return new Promise((resolve, reject) => {
@@ -128,6 +128,7 @@ function requestWxH5Pay(options) {
128
128
  title: "\u63D0\u793A",
129
129
  content: "\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u5FAE\u4FE1\u652F\u4ED8\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u5185\u7F6E\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00",
130
130
  confirmText: "\u786E\u5B9A",
131
+ confirmColor: "#017fff",
131
132
  success: () => {
132
133
  }
133
134
  });
@@ -310,71 +311,84 @@ function useEncode() {
310
311
  };
311
312
  }
312
313
 
313
- const globalData = {};
314
-
315
- const appKitOptions = {
316
- app: () => "",
317
- tenant: () => "",
318
- token: () => "",
319
- tempToken: () => "",
320
- baseUrl: () => "",
321
- 401() {
322
- },
323
- gray: () => ""
324
- };
325
- const useAppKitOptions = () => {
326
- if (!globalData.$appKitOptions) {
327
- globalData.$appKitOptions = appKitOptions;
328
- }
329
- return globalData.$appKitOptions;
330
- };
331
-
332
- const mappings$1 = {
333
- downloadUrl: "thrumb",
334
- fileId: "id",
335
- fileName: "name",
336
- fileSize: "size",
337
- fileSuffix: "ext",
338
- fileType: "type",
339
- originalUrl: "url"
340
- };
341
- const transformFields = (row) => {
342
- return Object.fromEntries(Object.entries(row).map(([k, v]) => [mappings$1[k] || k, v]));
314
+ const compressImageWithCanvas = (src, quality) => {
315
+ return new Promise((resolve, reject) => {
316
+ const img = new Image();
317
+ img.crossOrigin = "anonymous";
318
+ img.onload = () => {
319
+ try {
320
+ const canvas = document.createElement("canvas");
321
+ const ctx = canvas.getContext("2d");
322
+ if (!ctx) {
323
+ reject(new Error("\u65E0\u6CD5\u83B7\u53D6 canvas \u4E0A\u4E0B\u6587"));
324
+ return;
325
+ }
326
+ const maxWidth = 850;
327
+ const maxHeight = 850;
328
+ let width = img.width;
329
+ let height = img.height;
330
+ if (width > maxWidth || height > maxHeight) {
331
+ const ratio = Math.min(maxWidth / width, maxHeight / height);
332
+ width = width * ratio;
333
+ height = height * ratio;
334
+ }
335
+ canvas.width = width;
336
+ canvas.height = height;
337
+ ctx.drawImage(img, 0, 0, width, height);
338
+ canvas.toBlob(
339
+ (blob) => {
340
+ if (!blob) {
341
+ reject(new Error("\u56FE\u7247\u538B\u7F29\u5931\u8D25"));
342
+ return;
343
+ }
344
+ const compressedUrl = URL.createObjectURL(blob);
345
+ resolve(compressedUrl);
346
+ },
347
+ "image/jpeg",
348
+ quality / 100
349
+ );
350
+ } catch (error) {
351
+ reject(error);
352
+ }
353
+ };
354
+ img.onerror = () => {
355
+ reject(new Error("\u56FE\u7247\u52A0\u8F7D\u5931\u8D25"));
356
+ };
357
+ img.src = src;
358
+ });
343
359
  };
344
- const useUpload = (config) => {
345
- const appkitOptions = useAppKitOptions();
346
- const upload = (url, file) => {
360
+ async function compressImage(src, quality = 80) {
361
+ if (Taro.getEnv() === "WEB") {
362
+ try {
363
+ const compressedUrl = await compressImageWithCanvas(src, quality);
364
+ return { tempFilePath: compressedUrl };
365
+ } catch (error) {
366
+ console.error("\u56FE\u7247\u538B\u7F29\u5931\u8D25:", error);
367
+ return { tempFilePath: src };
368
+ }
369
+ } else {
347
370
  return new Promise((resolve, reject) => {
348
- uploadFile({
349
- url: config.baseUrl + url,
350
- filePath: file.path,
351
- name: "file",
352
- formData: {
353
- objectNo: `min${Date.now()}`
354
- },
355
- header: {
356
- ...config.headers,
357
- token: appkitOptions.tempToken() || appkitOptions.token()
371
+ Taro.compressImage({
372
+ src,
373
+ quality,
374
+ success: (res) => {
375
+ resolve(res);
358
376
  },
359
- success: (rsp) => {
360
- const { data } = rsp;
361
- try {
362
- const response = JSON.parse(data);
363
- console.log("===response", response);
364
- resolve(transformFields(response.result));
365
- } catch (e) {
366
- reject({
367
- message: "\u6587\u4EF6\u4E0A\u4F20\u5F02\u5E38"
368
- });
369
- }
377
+ fail: (res) => {
378
+ reject(res);
370
379
  }
371
380
  });
372
381
  });
373
- };
374
- return {
375
- upload
376
- };
377
- };
382
+ }
383
+ }
384
+ function getCompressQuality(size) {
385
+ let quality = 100;
386
+ const curSize = size / (1024 * 1024);
387
+ if (curSize > 6) {
388
+ quality = quality - (curSize - 6) / curSize * 100;
389
+ }
390
+ return quality;
391
+ }
378
392
 
379
393
  const defaultCryptoConfig = {
380
394
  maskField: "mask",
@@ -415,6 +429,25 @@ function useCrypto(config) {
415
429
  };
416
430
  }
417
431
 
432
+ const globalData = {};
433
+
434
+ const appKitOptions = {
435
+ app: () => "",
436
+ tenant: () => "",
437
+ token: () => "",
438
+ tempToken: () => "",
439
+ baseUrl: () => "",
440
+ 401() {
441
+ },
442
+ gray: () => ""
443
+ };
444
+ const useAppKitOptions = () => {
445
+ if (!globalData.$appKitOptions) {
446
+ globalData.$appKitOptions = appKitOptions;
447
+ }
448
+ return globalData.$appKitOptions;
449
+ };
450
+
418
451
  const defaultLogOptions = {
419
452
  projectName: "ddyk-dev",
420
453
  logStore: "ddjf-internet-web",
@@ -548,11 +581,59 @@ function useWxAuth() {
548
581
  };
549
582
  }
550
583
 
584
+ const mappings$1 = {
585
+ downloadUrl: "thrumb",
586
+ fileId: "id",
587
+ fileName: "name",
588
+ fileSize: "size",
589
+ fileSuffix: "ext",
590
+ fileType: "type",
591
+ originalUrl: "url"
592
+ };
593
+ const transformFields = (row) => {
594
+ return Object.fromEntries(Object.entries(row).map(([k, v]) => [mappings$1[k] || k, v]));
595
+ };
596
+ const useUpload = (config) => {
597
+ const appkitOptions = useAppKitOptions();
598
+ const upload = (url, file) => {
599
+ return new Promise((resolve, reject) => {
600
+ uploadFile({
601
+ url: config.baseUrl + url,
602
+ filePath: file.path,
603
+ name: "file",
604
+ formData: {
605
+ objectNo: `min${Date.now()}`,
606
+ appCode: config.headers?.appcode || appkitOptions.app()
607
+ },
608
+ header: {
609
+ ...config.headers,
610
+ token: appkitOptions.tempToken() || appkitOptions.token()
611
+ },
612
+ success: (rsp) => {
613
+ const { data } = rsp;
614
+ try {
615
+ const response = JSON.parse(data);
616
+ console.log("===response", response);
617
+ resolve(transformFields(response.result));
618
+ } catch (e) {
619
+ reject({
620
+ message: "\u6587\u4EF6\u4E0A\u4F20\u5F02\u5E38"
621
+ });
622
+ }
623
+ }
624
+ });
625
+ });
626
+ };
627
+ return {
628
+ upload
629
+ };
630
+ };
631
+
551
632
  const _hoisted_1$F = {
552
633
  key: 0,
553
634
  class: "page-title"
554
635
  };
555
- var script$L = /* @__PURE__ */ defineComponent({
636
+ var script$N = /* @__PURE__ */ defineComponent({
556
637
  __name: "PageHeader",
557
638
  props: {
558
639
  title: { type: String, required: false, default: "" },
@@ -609,10 +690,10 @@ var script$L = /* @__PURE__ */ defineComponent({
609
690
  }
610
691
  });
611
692
 
612
- script$L.__file = "src/shared/components/PageHeader.vue";
693
+ script$N.__file = "src/shared/components/PageHeader.vue";
613
694
 
614
695
  const _hoisted_1$E = { class: "drawer-body" };
615
- var script$K = /* @__PURE__ */ defineComponent({
696
+ var script$M = /* @__PURE__ */ defineComponent({
616
697
  __name: "AppDrawer",
617
698
  props: {
618
699
  modelValue: { type: Boolean, required: true },
@@ -636,7 +717,7 @@ var script$K = /* @__PURE__ */ defineComponent({
636
717
  "onUpdate:visible": onVisibleChange
637
718
  }, {
638
719
  default: withCtx(() => [
639
- createVNode(script$L, {
720
+ createVNode(script$N, {
640
721
  title: __props.title,
641
722
  style: normalizeStyle(unref(Taro).getEnv() !== "WEB" ? "" : "--height: 40px"),
642
723
  onClose: onPageHeaderClose
@@ -652,7 +733,7 @@ var script$K = /* @__PURE__ */ defineComponent({
652
733
  }
653
734
  });
654
735
 
655
- script$K.__file = "src/shared/components/AppDrawer.vue";
736
+ script$M.__file = "src/shared/components/AppDrawer.vue";
656
737
 
657
738
  const _hoisted_1$D = { class: "app-verify column" };
658
739
  const _hoisted_2$s = { class: "caption" };
@@ -663,7 +744,7 @@ const _hoisted_5$e = {
663
744
  class: "caption"
664
745
  };
665
746
  const _hoisted_6$a = { class: "row buttons" };
666
- var script$J = /* @__PURE__ */ defineComponent({
747
+ var script$L = /* @__PURE__ */ defineComponent({
667
748
  __name: "AppVerify",
668
749
  props: {
669
750
  phone: { type: String, required: true },
@@ -770,6 +851,7 @@ var script$J = /* @__PURE__ */ defineComponent({
770
851
  createElementVNode("div", _hoisted_6$a, [
771
852
  withDirectives((openBlock(), createBlock(unref(NsButton), {
772
853
  class: "cancel-btn",
854
+ r: 20,
773
855
  onClick: _cache[2] || (_cache[2] = ($event) => emits("cancel"))
774
856
  }, {
775
857
  default: withCtx(() => [..._cache[3] || (_cache[3] = [
@@ -786,6 +868,7 @@ var script$J = /* @__PURE__ */ defineComponent({
786
868
  ]),
787
869
  withDirectives((openBlock(), createBlock(unref(NsButton), {
788
870
  color: "primary",
871
+ r: 20,
789
872
  onClick: onOk
790
873
  }, {
791
874
  default: withCtx(() => [..._cache[4] || (_cache[4] = [
@@ -806,10 +889,10 @@ var script$J = /* @__PURE__ */ defineComponent({
806
889
  }
807
890
  });
808
891
 
809
- script$J.__file = "src/shared/components/AppVerify.vue";
892
+ script$L.__file = "src/shared/components/AppVerify.vue";
810
893
 
811
894
  const _hoisted_1$C = { key: 0 };
812
- var script$I = /* @__PURE__ */ defineComponent({
895
+ var script$K = /* @__PURE__ */ defineComponent({
813
896
  __name: "index",
814
897
  props: {
815
898
  text: { type: String, required: false },
@@ -876,7 +959,7 @@ var script$I = /* @__PURE__ */ defineComponent({
876
959
  }
877
960
  });
878
961
 
879
- script$I.__file = "src/components/dd-notice-bar/index.vue";
962
+ script$K.__file = "src/components/dd-notice-bar/index.vue";
880
963
 
881
964
  const typeMappings = {
882
965
  CZ: "\u5145\u503C",
@@ -1081,7 +1164,7 @@ function useHttp$3() {
1081
1164
  return $http;
1082
1165
  }
1083
1166
 
1084
- var script$H = /* @__PURE__ */ defineComponent({
1167
+ var script$J = /* @__PURE__ */ defineComponent({
1085
1168
  __name: "DeviceVersion",
1086
1169
  props: {
1087
1170
  versions: { type: String, required: false, default: "{}" }
@@ -1128,7 +1211,7 @@ var script$H = /* @__PURE__ */ defineComponent({
1128
1211
  }
1129
1212
  });
1130
1213
  return (_ctx, _cache) => {
1131
- return showAlert.value ? (openBlock(), createBlock(script$I, {
1214
+ return showAlert.value ? (openBlock(), createBlock(script$K, {
1132
1215
  key: 0,
1133
1216
  showClose: "",
1134
1217
  style: normalizeStyle(topStype.value),
@@ -1139,102 +1222,262 @@ var script$H = /* @__PURE__ */ defineComponent({
1139
1222
  }
1140
1223
  });
1141
1224
 
1142
- script$H.__file = "src/shared/components/DeviceVersion.vue";
1225
+ script$J.__file = "src/shared/components/DeviceVersion.vue";
1143
1226
 
1144
- var script$G = /* @__PURE__ */ defineComponent({
1227
+ var script$I = /* @__PURE__ */ defineComponent({
1145
1228
  __name: "OcrIcon",
1146
1229
  props: {
1147
1230
  disabled: { type: Boolean, required: false, default: false },
1148
1231
  side: { type: String, required: false, default: "face" },
1149
- class: { type: String, required: false, default: "" }
1232
+ className: { type: String, required: false, default: "" },
1233
+ uploadUrl: { type: String, required: false, default: "/saas-base/file/uploadPublic" },
1234
+ customUpload: { type: Function, required: false },
1235
+ hasUploadVo: { type: Boolean, required: false, default: true },
1236
+ customClick: { type: Boolean, required: false, default: false }
1150
1237
  },
1151
1238
  emits: ["complete"],
1152
- setup(__props, { emit: __emit }) {
1239
+ setup(__props, { expose: __expose, emit: __emit }) {
1153
1240
  const appKitOptions = useAppKitOptions();
1241
+ const $http = useHttp$3(), $n = useNutshell();
1154
1242
  const emits = __emit;
1155
1243
  const props = __props;
1156
- async function taroImgCompress(src, quality = 80) {
1157
- if (Taro.getEnv() === "WEB") {
1158
- return src;
1159
- } else {
1160
- return new Promise((resolve, reject) => {
1161
- Taro.compressImage({
1162
- src,
1163
- quality,
1164
- success: (res) => {
1165
- resolve(res);
1166
- },
1167
- fail: (res) => {
1168
- reject(res);
1244
+ function allTrim(str) {
1245
+ return str.replace(/\s+/g, "");
1246
+ }
1247
+ async function onUploadFile(csRes) {
1248
+ let result = null;
1249
+ try {
1250
+ let { path, size, tempFilePath } = csRes.tempFiles[0];
1251
+ const compressImg = await compressImage(path || tempFilePath, getCompressQuality(size)) || {};
1252
+ const filePath = compressImg.tempFilePath || path;
1253
+ if (props.customUpload) {
1254
+ props.customUpload(filePath);
1255
+ return;
1256
+ }
1257
+ showLoading({ title: "\u8EAB\u4EFD\u8BC1\u8BC6\u522B\u4E2D..", mask: true });
1258
+ const session = appKitOptions.token();
1259
+ const baseUrl = appKitOptions.baseUrl();
1260
+ const upRes = await uploadFile({
1261
+ url: `${baseUrl}${!props.hasUploadVo ? props.uploadUrl : "/hkapprove/ocr/idcard"}`,
1262
+ filePath,
1263
+ name: "file",
1264
+ formData: {
1265
+ objectNo: `min${Date.now()}`,
1266
+ side: props.side,
1267
+ appCode: appKitOptions.app()
1268
+ },
1269
+ header: {
1270
+ token: session || ""
1271
+ }
1272
+ });
1273
+ const res = JSON.parse(upRes.data);
1274
+ if (res.code === "200") {
1275
+ if (props.hasUploadVo) {
1276
+ hideLoading();
1277
+ const faceInfo = res.result.faceInfo || {};
1278
+ const backInfo = res.result.backInfo || {};
1279
+ result = {
1280
+ faceInfo: {
1281
+ name: allTrim(faceInfo.name || ""),
1282
+ certNo: allTrim(faceInfo.num || ""),
1283
+ address: allTrim(faceInfo.address || "")
1284
+ },
1285
+ backInfo: {
1286
+ startDate: backInfo?.startDate || "",
1287
+ endDate: backInfo?.endDate || ""
1288
+ },
1289
+ fileUploadVO: res.result.fileUploadVO || {}
1290
+ };
1291
+ if (props.side === "face" && !result.faceInfo.name && !result.faceInfo.certNo) {
1292
+ showToast({ title: "\u8BC6\u522B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5", icon: "none" });
1293
+ }
1294
+ if (props.side === "back" && !result.backInfo?.startDate && !result.backInfo?.endDate) {
1295
+ showToast({ title: "\u8BC6\u522B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5", icon: "none" });
1169
1296
  }
1297
+ } else {
1298
+ await getOcrInfo(res.result);
1299
+ }
1300
+ } else {
1301
+ hideLoading();
1302
+ showToast({
1303
+ title: res.msg,
1304
+ icon: "error"
1305
+ });
1306
+ }
1307
+ } catch (err) {
1308
+ hideLoading();
1309
+ console.log(err);
1310
+ }
1311
+ props.hasUploadVo && (result?.faceInfo.name || result?.backInfo.startDate) && emits("complete", result);
1312
+ }
1313
+ async function getOcrInfo(file) {
1314
+ try {
1315
+ const res = await $http.get("/hkbase/common/idCard", {
1316
+ fileUrl: typeof file === "string" ? file : file.originalUrl,
1317
+ side: props.side
1318
+ });
1319
+ hideLoading();
1320
+ if (props.side === "face" && !res?.name || props.side === "back" && !res?.signDate) {
1321
+ $n.dialog({
1322
+ title: "\u8BC6\u522B\u5931\u8D25",
1323
+ message: `\u60A8\u4E0A\u4F20\u7684\u56FE\u7247\u53EF\u80FD\u4E0D\u591F\u6E05\u6670\u6216\u4E0E\u5F53\u524D\u529F\u80FD\u4E0D\u7B26\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20\u4E00\u5F20\u6E05\u6670\u3001\u5B8C\u6574\u7684\u56FE\u7247\u3002\u8C22\u8C22\uFF01`,
1324
+ okText: "\u6211\u77E5\u9053\u4E86",
1325
+ cancelText: ""
1170
1326
  });
1327
+ return;
1328
+ }
1329
+ emits("complete", {
1330
+ faceInfo: {
1331
+ name: allTrim(res?.name || ""),
1332
+ certNo: allTrim(res?.cardNumber || ""),
1333
+ address: allTrim(res?.address || "")
1334
+ },
1335
+ backInfo: {
1336
+ startDate: res?.expireDate || "",
1337
+ endDate: res?.signDate || ""
1338
+ },
1339
+ fileUploadVO: {
1340
+ fileUrl: typeof file === "string" ? file : file.originalUrl,
1341
+ fileKey: typeof file === "string" ? file : file.fileId
1342
+ }
1171
1343
  });
1344
+ } catch (err) {
1345
+ hideLoading();
1172
1346
  }
1173
1347
  }
1174
- function getCompressQuality(size) {
1175
- let quality = 100;
1176
- const curSize = size / (1024 * 1024);
1177
- if (curSize > 6) {
1178
- quality = quality - (curSize - 6) / curSize * 100;
1348
+ const activeSheetVisible = ref(false);
1349
+ const actionSheetMenus = [
1350
+ {
1351
+ name: "\u62CD\u6444",
1352
+ type: "camera"
1353
+ },
1354
+ {
1355
+ name: "\u4ECE\u76F8\u518C\u9009\u62E9",
1356
+ type: "album"
1357
+ },
1358
+ {
1359
+ name: "\u4ECE\u804A\u5929\u4F1A\u8BDD\u9009\u62E9",
1360
+ type: "message"
1179
1361
  }
1180
- return quality;
1362
+ ];
1363
+ if (Taro.getEnv() === "WEB") {
1364
+ actionSheetMenus.pop();
1181
1365
  }
1182
- function allTrim(str) {
1183
- return str.replace(/\s+/g, "");
1366
+ async function chooseImages(item) {
1367
+ if (["camera", "album"].includes(item.type)) {
1368
+ const csRes = await chooseMedia({
1369
+ count: 1,
1370
+ sourceType: [item.type],
1371
+ // "camera" | "album"
1372
+ maxDuration: 60
1373
+ // 使用duration属性判断是图片还是视频,图片没有该属性
1374
+ });
1375
+ onUploadFile(csRes);
1376
+ } else {
1377
+ const csRes = await chooseMessageFile({
1378
+ count: 1,
1379
+ type: "image"
1380
+ });
1381
+ onUploadFile(csRes);
1382
+ }
1184
1383
  }
1384
+ async function onUpload() {
1385
+ if (props.disabled) return;
1386
+ if (Taro.getEnv() === "WEB") {
1387
+ const csRes = await chooseMedia({
1388
+ count: 1,
1389
+ sourceType: ["album"],
1390
+ // "camera" | "album"
1391
+ maxDuration: 60
1392
+ // 使用duration属性判断是图片还是视频,图片没有该属性
1393
+ });
1394
+ onUploadFile(csRes);
1395
+ return;
1396
+ }
1397
+ activeSheetVisible.value = true;
1398
+ }
1399
+ __expose({
1400
+ onUpload
1401
+ });
1402
+ return (_ctx, _cache) => {
1403
+ const _component_nut_action_sheet = ActionSheet;
1404
+ const _directive_track_click = resolveDirective("track-click");
1405
+ return openBlock(), createElementBlock(
1406
+ Fragment,
1407
+ null,
1408
+ [
1409
+ withDirectives((openBlock(), createElementBlock(
1410
+ "div",
1411
+ {
1412
+ class: normalizeClass(["ocr-icon", [__props.disabled ? "disabled" : "", __props.className]]),
1413
+ onClick: _cache[0] || (_cache[0] = ($event) => !__props.customClick ? onUpload() : null)
1414
+ },
1415
+ [
1416
+ renderSlot(_ctx.$slots, "icon", {}, () => [
1417
+ createVNode(unref(NsIcon), { name: "https://cdn.ddjf.com/static/images/beidouxing/ocr-icon.png" })
1418
+ ])
1419
+ ],
1420
+ 2
1421
+ /* CLASS */
1422
+ )), [
1423
+ [_directive_track_click, "\u8EAB\u4EFD\u8BC1\u8BC6\u522B-\u70B9\u51FB"]
1424
+ ]),
1425
+ createVNode(_component_nut_action_sheet, {
1426
+ visible: activeSheetVisible.value,
1427
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => activeSheetVisible.value = $event),
1428
+ "menu-items": actionSheetMenus,
1429
+ onChoose: chooseImages,
1430
+ "cancel-txt": "\u53D6\u6D88"
1431
+ }, null, 8, ["visible"])
1432
+ ],
1433
+ 64
1434
+ /* STABLE_FRAGMENT */
1435
+ );
1436
+ };
1437
+ }
1438
+ });
1439
+
1440
+ script$I.__file = "src/shared/components/OcrIcon.vue";
1441
+
1442
+ var script$H = /* @__PURE__ */ defineComponent({
1443
+ __name: "OcrBank",
1444
+ props: {
1445
+ disabled: { type: Boolean, required: false, default: false },
1446
+ class: { type: String, required: false, default: "" },
1447
+ uploadUrl: { type: String, required: false, default: "/hkbase/file/uploadFile" },
1448
+ customClick: { type: Boolean, required: false, default: false }
1449
+ },
1450
+ emits: ["complete"],
1451
+ setup(__props, { expose: __expose, emit: __emit }) {
1452
+ const appKitOptions = useAppKitOptions();
1453
+ const $http = useHttp$3(), $n = useNutshell();
1454
+ const emits = __emit;
1455
+ const props = __props;
1185
1456
  async function onUploadFile(csRes) {
1186
- let result = null;
1187
1457
  try {
1188
- console.log("===\u4E0A\u4F20", csRes);
1189
1458
  let { path, size, tempFilePath } = csRes.tempFiles[0];
1190
- let filePath;
1191
- if (Taro.getEnv() !== "WEB") {
1192
- const compressImg = await taroImgCompress(path || tempFilePath, getCompressQuality(size)) || {};
1193
- filePath = compressImg.tempFilePath || path;
1194
- } else {
1195
- filePath = path || tempFilePath;
1196
- }
1197
- console.log(filePath, "filePath");
1198
- showLoading({ title: "\u8EAB\u4EFD\u8BC1\u8BC6\u522B\u4E2D.." });
1459
+ const compressImg = await compressImage(path || tempFilePath, getCompressQuality(size)) || {};
1460
+ const filePath = compressImg.tempFilePath || path;
1461
+ showLoading({ title: "\u94F6\u884C\u5361\u8BC6\u522B\u4E2D..", mask: true });
1199
1462
  const session = appKitOptions.token();
1200
1463
  const baseUrl = appKitOptions.baseUrl();
1201
1464
  const upRes = await uploadFile({
1202
- url: baseUrl + "/hkapprove/ocr/idcard",
1465
+ url: baseUrl + props.uploadUrl,
1203
1466
  filePath,
1204
1467
  name: "file",
1205
1468
  formData: {
1206
1469
  objectNo: `min${Date.now()}`,
1207
- side: props.side
1470
+ appCode: appKitOptions.app()
1208
1471
  },
1209
1472
  header: {
1210
1473
  token: session || ""
1211
1474
  }
1212
1475
  });
1213
- hideLoading();
1214
1476
  const res = JSON.parse(upRes.data);
1215
1477
  if (res.code === "200") {
1216
- const faceInfo = res.result.faceInfo || {};
1217
- const backInfo = res.result.backInfo || {};
1218
- result = {
1219
- faceInfo: {
1220
- name: allTrim(faceInfo.name || ""),
1221
- certNo: allTrim(faceInfo.num || ""),
1222
- address: allTrim(faceInfo.address || "")
1223
- },
1224
- backInfo: {
1225
- startDate: backInfo?.startDate || "",
1226
- endDate: backInfo?.endDate || ""
1227
- },
1228
- fileUploadVO: res.result.fileUploadVO || {}
1229
- };
1230
- console.log("===\u8BC6\u522B", result);
1231
- if (props.side === "face" && !result.faceInfo.name && !result.faceInfo.certNo) {
1232
- showToast({ title: "\u8BC6\u522B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5", icon: "none" });
1233
- }
1234
- if (props.side === "back" && !result.backInfo?.startDate && !result.backInfo?.endDate) {
1235
- showToast({ title: "\u8BC6\u522B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5", icon: "none" });
1236
- }
1478
+ await getBankCardInfo(res.result);
1237
1479
  } else {
1480
+ hideLoading();
1238
1481
  showToast({
1239
1482
  title: res.msg,
1240
1483
  icon: "error"
@@ -1242,9 +1485,32 @@ var script$G = /* @__PURE__ */ defineComponent({
1242
1485
  }
1243
1486
  } catch (err) {
1244
1487
  hideLoading();
1245
- console.log(err);
1488
+ console.log(err);
1489
+ }
1490
+ }
1491
+ async function getBankCardInfo(file) {
1492
+ try {
1493
+ const res = await $http.get("/hkbase/common/bankCard", {
1494
+ fileUrl: typeof file === "string" ? file : file.originalUrl
1495
+ });
1496
+ hideLoading();
1497
+ if (res && !res.bankCardNumber) {
1498
+ $n.dialog({
1499
+ title: "\u8BC6\u522B\u5931\u8D25",
1500
+ message: `\u60A8\u4E0A\u4F20\u7684\u56FE\u7247\u53EF\u80FD\u4E0D\u591F\u6E05\u6670\u6216\u4E0E\u5F53\u524D\u529F\u80FD\u4E0D\u7B26\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20\u4E00\u5F20\u6E05\u6670\u3001\u5B8C\u6574\u7684\u56FE\u7247\u3002\u8C22\u8C22\uFF01`,
1501
+ okText: "\u6211\u77E5\u9053\u4E86",
1502
+ cancelText: ""
1503
+ });
1504
+ return;
1505
+ }
1506
+ emits("complete", {
1507
+ ...res,
1508
+ fileUrl: typeof file === "string" ? file : file.originalUrl,
1509
+ fileKey: typeof file === "string" ? file : file.fileId
1510
+ });
1511
+ } catch (err) {
1512
+ hideLoading();
1246
1513
  }
1247
- emits("complete", result);
1248
1514
  }
1249
1515
  const activeSheetVisible = ref(false);
1250
1516
  const actionSheetMenus = [
@@ -1282,7 +1548,7 @@ var script$G = /* @__PURE__ */ defineComponent({
1282
1548
  onUploadFile(csRes);
1283
1549
  }
1284
1550
  }
1285
- async function onPhotograph() {
1551
+ async function onUpload() {
1286
1552
  if (props.disabled) return;
1287
1553
  if (Taro.getEnv() === "WEB") {
1288
1554
  const csRes = await chooseMedia({
@@ -1297,6 +1563,9 @@ var script$G = /* @__PURE__ */ defineComponent({
1297
1563
  }
1298
1564
  activeSheetVisible.value = true;
1299
1565
  }
1566
+ __expose({
1567
+ onUpload
1568
+ });
1300
1569
  return (_ctx, _cache) => {
1301
1570
  const _component_nut_action_sheet = ActionSheet;
1302
1571
  const _directive_track_click = resolveDirective("track-click");
@@ -1307,8 +1576,8 @@ var script$G = /* @__PURE__ */ defineComponent({
1307
1576
  withDirectives((openBlock(), createElementBlock(
1308
1577
  "div",
1309
1578
  {
1310
- class: normalizeClass(["ocr-icon", [__props.disabled ? "disabled" : ""]]),
1311
- onClick: onPhotograph
1579
+ class: normalizeClass(["ocr-bank", [__props.disabled ? "disabled" : ""]]),
1580
+ onClick: _cache[0] || (_cache[0] = ($event) => !__props.customClick ? onUpload() : null)
1312
1581
  },
1313
1582
  [
1314
1583
  renderSlot(_ctx.$slots, "icon", {}, () => [
@@ -1318,11 +1587,11 @@ var script$G = /* @__PURE__ */ defineComponent({
1318
1587
  2
1319
1588
  /* CLASS */
1320
1589
  )), [
1321
- [_directive_track_click, "\u8EAB\u4EFD\u8BC1\u8BC6\u522B-\u70B9\u51FB"]
1590
+ [_directive_track_click, "\u94F6\u884C\u5361\u8BC6\u522B-\u70B9\u51FB"]
1322
1591
  ]),
1323
1592
  createVNode(_component_nut_action_sheet, {
1324
1593
  visible: activeSheetVisible.value,
1325
- "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => activeSheetVisible.value = $event),
1594
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => activeSheetVisible.value = $event),
1326
1595
  "menu-items": actionSheetMenus,
1327
1596
  onChoose: chooseImages,
1328
1597
  "cancel-txt": "\u53D6\u6D88"
@@ -1335,48 +1604,26 @@ var script$G = /* @__PURE__ */ defineComponent({
1335
1604
  }
1336
1605
  });
1337
1606
 
1338
- script$G.__file = "src/shared/components/OcrIcon.vue";
1607
+ script$H.__file = "src/shared/components/OcrBank.vue";
1339
1608
 
1340
- var script$F = /* @__PURE__ */ defineComponent({
1609
+ var script$G = /* @__PURE__ */ defineComponent({
1341
1610
  __name: "OcrBusinessLicense",
1342
1611
  props: {
1343
- disabled: { type: Boolean, required: true }
1612
+ disabled: { type: Boolean, required: true, default: false },
1613
+ customClick: { type: Boolean, required: false, default: false }
1344
1614
  },
1345
1615
  emits: ["complete"],
1346
- setup(__props, { emit: __emit }) {
1616
+ setup(__props, { expose: __expose, emit: __emit }) {
1347
1617
  const appKitOptions = useAppKitOptions();
1348
1618
  const emits = __emit;
1349
1619
  const props = __props;
1350
- async function taroImgCompress(src, quality = 80) {
1351
- return new Promise((resolve, reject) => {
1352
- Taro.compressImage({
1353
- src,
1354
- quality,
1355
- success: (res) => {
1356
- resolve(res);
1357
- },
1358
- fail: (res) => {
1359
- reject(res);
1360
- }
1361
- });
1362
- });
1363
- }
1364
- function getCompressQuality(size) {
1365
- let quality = 100;
1366
- const curSize = size / (1024 * 1024);
1367
- if (curSize > 6) {
1368
- quality = quality - (curSize - 6) / curSize * 100;
1369
- }
1370
- return quality;
1371
- }
1372
1620
  function allTrim(str) {
1373
1621
  return str.replace(/\s+/g, "");
1374
1622
  }
1375
- async function onIconClick() {
1623
+ async function onUpload() {
1376
1624
  if (props.disabled) {
1377
1625
  return;
1378
1626
  }
1379
- console.log("===onIconClick");
1380
1627
  let result = null;
1381
1628
  try {
1382
1629
  const csRes = await chooseMedia({
@@ -1384,14 +1631,9 @@ var script$F = /* @__PURE__ */ defineComponent({
1384
1631
  sourceType: ["album", "camera"]
1385
1632
  });
1386
1633
  let { size, tempFilePath } = csRes.tempFiles[0];
1387
- let filePath;
1388
- if (Taro.getEnv() !== "WEB") {
1389
- const compressImg = await taroImgCompress(tempFilePath, getCompressQuality(size)) || {};
1390
- filePath = compressImg.tempFilePath;
1391
- } else {
1392
- filePath = tempFilePath;
1393
- }
1394
- showLoading({ title: "\u8425\u4E1A\u6267\u7167\u8BC6\u522B\u4E2D.." });
1634
+ const compressImg = await compressImage(tempFilePath, getCompressQuality(size)) || {};
1635
+ const filePath = compressImg.tempFilePath;
1636
+ showLoading({ title: "\u8425\u4E1A\u6267\u7167\u8BC6\u522B\u4E2D..", mask: true });
1395
1637
  const session = appKitOptions.token();
1396
1638
  const baseUrl = appKitOptions.baseUrl();
1397
1639
  const upRes = await uploadFile({
@@ -1399,7 +1641,8 @@ var script$F = /* @__PURE__ */ defineComponent({
1399
1641
  filePath,
1400
1642
  name: "file",
1401
1643
  formData: {
1402
- objectNo: `min${Date.now()}`
1644
+ objectNo: `min${Date.now()}`,
1645
+ appCode: appKitOptions.app()
1403
1646
  },
1404
1647
  header: {
1405
1648
  token: session || ""
@@ -1433,16 +1676,21 @@ var script$F = /* @__PURE__ */ defineComponent({
1433
1676
  }
1434
1677
  emits("complete", result);
1435
1678
  }
1679
+ __expose({
1680
+ onUpload
1681
+ });
1436
1682
  return (_ctx, _cache) => {
1437
1683
  const _directive_track_click = resolveDirective("track-click");
1438
1684
  return withDirectives((openBlock(), createElementBlock(
1439
1685
  "div",
1440
1686
  {
1441
1687
  class: normalizeClass([["ocr-business-license", __props.disabled ? "disabled" : ""], "ocr-icon"]),
1442
- onClick: onIconClick
1688
+ onClick: _cache[0] || (_cache[0] = ($event) => !__props.customClick ? onUpload() : null)
1443
1689
  },
1444
1690
  [
1445
- createVNode(unref(NsIcon), { name: "https://cdn.ddjf.com/static/images/beidouxing/ocr-icon.png" })
1691
+ renderSlot(_ctx.$slots, "icon", {}, () => [
1692
+ createVNode(unref(NsIcon), { name: "https://cdn.ddjf.com/static/images/beidouxing/ocr-icon.png" })
1693
+ ])
1446
1694
  ],
1447
1695
  2
1448
1696
  /* CLASS */
@@ -1453,7 +1701,264 @@ var script$F = /* @__PURE__ */ defineComponent({
1453
1701
  }
1454
1702
  });
1455
1703
 
1456
- script$F.__file = "src/shared/components/OcrBusinessLicense.vue";
1704
+ script$G.__file = "src/shared/components/OcrBusinessLicense.vue";
1705
+
1706
+ var script$F = /* @__PURE__ */ defineComponent({
1707
+ __name: "OcrInvoice",
1708
+ props: {
1709
+ disabled: { type: Boolean, required: false, default: false },
1710
+ side: { type: String, required: false, default: "face" },
1711
+ className: { type: String, required: false, default: "" },
1712
+ customUpload: { type: Function, required: false },
1713
+ uploadUrl: { type: String, required: false, default: "/hkbase/file/uploadFile" },
1714
+ customClick: { type: Boolean, required: false, default: false }
1715
+ },
1716
+ emits: ["complete"],
1717
+ setup(__props, { expose: __expose, emit: __emit }) {
1718
+ const appKitOptions = useAppKitOptions();
1719
+ const $http = useHttp$3(), $n = useNutshell();
1720
+ const emits = __emit;
1721
+ const props = __props;
1722
+ function getFileType(filePath, fileName) {
1723
+ const lowerPath = filePath.toLowerCase();
1724
+ const lowerName = (fileName || "").toLowerCase();
1725
+ if (lowerPath.endsWith(".pdf") || lowerName.endsWith(".pdf")) {
1726
+ return "pdf";
1727
+ }
1728
+ const imageExtensions = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"];
1729
+ if (imageExtensions.some((ext) => lowerPath.endsWith(ext) || lowerName.endsWith(ext))) {
1730
+ return "img";
1731
+ }
1732
+ return "img";
1733
+ }
1734
+ async function onUploadFile(csRes, fileType) {
1735
+ try {
1736
+ let { path, size, tempFilePath, name } = csRes.tempFiles[0];
1737
+ const originalPath = path || tempFilePath;
1738
+ const detectedFileType = fileType || getFileType(originalPath, name);
1739
+ let filePath = originalPath;
1740
+ if (detectedFileType === "img") {
1741
+ const compressImg = await compressImage(originalPath, getCompressQuality(size)) || {};
1742
+ filePath = compressImg.tempFilePath || originalPath;
1743
+ }
1744
+ if (props.customUpload) {
1745
+ props.customUpload(filePath, detectedFileType);
1746
+ return;
1747
+ }
1748
+ showLoading({ title: "\u53D1\u7968\u8BC6\u522B\u4E2D..", mask: true });
1749
+ const session = appKitOptions.token();
1750
+ const baseUrl = appKitOptions.baseUrl();
1751
+ const upRes = await uploadFile({
1752
+ url: `${baseUrl}${props.uploadUrl}`,
1753
+ filePath,
1754
+ name: "file",
1755
+ formData: {
1756
+ objectNo: `min${Date.now()}`,
1757
+ appCode: appKitOptions.app()
1758
+ },
1759
+ header: {
1760
+ token: session || ""
1761
+ }
1762
+ });
1763
+ const res = JSON.parse(upRes.data);
1764
+ if (res.code === "200") {
1765
+ await getOcrInfo(res.result, detectedFileType);
1766
+ } else {
1767
+ hideLoading();
1768
+ showToast({
1769
+ title: res.msg,
1770
+ icon: "error"
1771
+ });
1772
+ }
1773
+ } catch (err) {
1774
+ hideLoading();
1775
+ console.log(err);
1776
+ }
1777
+ }
1778
+ async function getOcrInfo(file, fileType = "img") {
1779
+ try {
1780
+ const fileUrl = typeof file === "string" ? file : file.originalUrl;
1781
+ const res = await $http.get("/hkbase/common/vatInvoice", {
1782
+ fileUrl,
1783
+ fileType
1784
+ });
1785
+ hideLoading();
1786
+ if (!res?.purchaserRegisterNum) {
1787
+ $n.dialog({
1788
+ title: "\u8BC6\u522B\u5931\u8D25",
1789
+ message: `\u60A8\u4E0A\u4F20\u7684${fileType === "pdf" ? "\u6587\u4EF6" : "\u56FE\u7247"}\u53EF\u80FD\u4E0D\u591F\u6E05\u6670\u6216\u4E0E\u5F53\u524D\u529F\u80FD\u4E0D\u7B26\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20\u4E00\u5F20\u6E05\u6670\u3001\u5B8C\u6574\u7684${fileType === "pdf" ? "PDF\u6587\u4EF6" : "\u56FE\u7247"}\u3002\u8C22\u8C22\uFF01`,
1790
+ okText: "\u6211\u77E5\u9053\u4E86",
1791
+ cancelText: ""
1792
+ });
1793
+ return;
1794
+ }
1795
+ emits("complete", {
1796
+ invoiceDate: res?.invoiceDate,
1797
+ invoiceNum: res?.invoiceNum,
1798
+ invoiceNumConfirm: res?.invoiceNumConfirm,
1799
+ invoiceType: res?.invoiceType,
1800
+ noteDrawer: res?.noteDrawer,
1801
+ purchaserBank: res?.purchaserBank,
1802
+ purchaserName: res?.purchaserName,
1803
+ purchaserRegisterNum: res?.purchaserRegisterNum,
1804
+ remarks: res?.remarks,
1805
+ sellerName: res?.sellerName,
1806
+ sellerRegisterNum: res?.sellerRegisterNum,
1807
+ serviceType: res?.serviceType,
1808
+ totalAmount: res?.totalAmount,
1809
+ totalTax: res?.totalTax,
1810
+ fileUrl,
1811
+ fileType,
1812
+ fileKey: typeof file === "string" ? file : file.fileId
1813
+ });
1814
+ } catch (err) {
1815
+ hideLoading();
1816
+ }
1817
+ }
1818
+ const activeSheetVisible = ref(false);
1819
+ const actionSheetMenus = [
1820
+ {
1821
+ name: "\u62CD\u6444",
1822
+ type: "camera"
1823
+ },
1824
+ {
1825
+ name: "\u4ECE\u76F8\u518C\u9009\u62E9",
1826
+ type: "album"
1827
+ },
1828
+ {
1829
+ name: "\u4ECE\u804A\u5929\u4F1A\u8BDD\u9009\u62E9",
1830
+ type: "message"
1831
+ },
1832
+ {
1833
+ name: "\u9009\u62E9\u6587\u4EF6",
1834
+ type: "file"
1835
+ }
1836
+ ];
1837
+ if (Taro.getEnv() === "WEB") {
1838
+ actionSheetMenus.splice(2, 1);
1839
+ }
1840
+ async function chooseImages(item) {
1841
+ if (["camera", "album"].includes(item.type)) {
1842
+ const csRes = await chooseMedia({
1843
+ count: 1,
1844
+ sourceType: [item.type],
1845
+ // "camera" | "album"
1846
+ maxDuration: 60
1847
+ // 使用duration属性判断是图片还是视频,图片没有该属性
1848
+ });
1849
+ onUploadFile(csRes);
1850
+ } else if (item.type === "message") {
1851
+ const csRes = await chooseMessageFile({
1852
+ count: 1,
1853
+ type: "image"
1854
+ });
1855
+ onUploadFile(csRes);
1856
+ } else if (item.type === "file") {
1857
+ const csRes = await chooseMessageFile({
1858
+ count: 1,
1859
+ type: "file"
1860
+ });
1861
+ onUploadFile(csRes);
1862
+ }
1863
+ }
1864
+ function chooseFileInWeb() {
1865
+ return new Promise((resolve, reject) => {
1866
+ const input = document.createElement("input");
1867
+ input.type = "file";
1868
+ input.accept = "image/*,.pdf";
1869
+ input.style.display = "none";
1870
+ input.onchange = async (e) => {
1871
+ const file = e.target?.files?.[0];
1872
+ if (!file) {
1873
+ document.body.removeChild(input);
1874
+ resolve();
1875
+ return;
1876
+ }
1877
+ let fileType = "img";
1878
+ if (file.type === "application/pdf" || file.name.toLowerCase().endsWith(".pdf")) {
1879
+ fileType = "pdf";
1880
+ }
1881
+ const filePath = URL.createObjectURL(file);
1882
+ try {
1883
+ const csRes = {
1884
+ tempFiles: [{
1885
+ path: filePath,
1886
+ tempFilePath: filePath,
1887
+ size: file.size,
1888
+ name: file.name
1889
+ }]
1890
+ };
1891
+ await onUploadFile(csRes, fileType);
1892
+ resolve();
1893
+ } catch (error) {
1894
+ reject(error);
1895
+ } finally {
1896
+ document.body.removeChild(input);
1897
+ URL.revokeObjectURL(filePath);
1898
+ }
1899
+ };
1900
+ input.oncancel = () => {
1901
+ document.body.removeChild(input);
1902
+ resolve();
1903
+ };
1904
+ document.body.appendChild(input);
1905
+ input.click();
1906
+ });
1907
+ }
1908
+ async function onUpload() {
1909
+ if (props.disabled) return;
1910
+ if (Taro.getEnv() === "WEB") {
1911
+ try {
1912
+ await chooseFileInWeb();
1913
+ } catch (err) {
1914
+ console.error("\u6587\u4EF6\u9009\u62E9\u5931\u8D25:", err);
1915
+ }
1916
+ return;
1917
+ }
1918
+ activeSheetVisible.value = true;
1919
+ }
1920
+ __expose({
1921
+ onUpload
1922
+ });
1923
+ return (_ctx, _cache) => {
1924
+ const _component_nut_action_sheet = ActionSheet;
1925
+ const _directive_track_click = resolveDirective("track-click");
1926
+ return openBlock(), createElementBlock(
1927
+ Fragment,
1928
+ null,
1929
+ [
1930
+ withDirectives((openBlock(), createElementBlock(
1931
+ "div",
1932
+ {
1933
+ class: normalizeClass(["ocr-invoice", [__props.disabled ? "disabled" : "", __props.className]]),
1934
+ onClick: _cache[0] || (_cache[0] = ($event) => !__props.customClick ? onUpload() : null)
1935
+ },
1936
+ [
1937
+ renderSlot(_ctx.$slots, "icon", {}, () => [
1938
+ createVNode(unref(NsIcon), { name: "https://cdn.ddjf.com/static/images/beidouxing/ocr-icon.png" })
1939
+ ])
1940
+ ],
1941
+ 2
1942
+ /* CLASS */
1943
+ )), [
1944
+ [_directive_track_click, "\u53D1\u7968\u8BC6\u522B-\u70B9\u51FB"]
1945
+ ]),
1946
+ createVNode(_component_nut_action_sheet, {
1947
+ visible: activeSheetVisible.value,
1948
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => activeSheetVisible.value = $event),
1949
+ "menu-items": actionSheetMenus,
1950
+ onChoose: chooseImages,
1951
+ "cancel-txt": "\u53D6\u6D88"
1952
+ }, null, 8, ["visible"])
1953
+ ],
1954
+ 64
1955
+ /* STABLE_FRAGMENT */
1956
+ );
1957
+ };
1958
+ }
1959
+ });
1960
+
1961
+ script$F.__file = "src/shared/components/OcrInvoice.vue";
1457
1962
 
1458
1963
  var HttpMethod = /* @__PURE__ */ ((HttpMethod2) => {
1459
1964
  HttpMethod2["get"] = "GET";
@@ -1501,6 +2006,7 @@ const request = (config) => {
1501
2006
  }
1502
2007
  }).catch((e) => {
1503
2008
  console.log("request.catch===", e);
2009
+ reject(e);
1504
2010
  });
1505
2011
  });
1506
2012
  };
@@ -1559,15 +2065,6 @@ function isApp() {
1559
2065
  var __defProp = Object.defineProperty;
1560
2066
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1561
2067
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1562
- var TrackingEventType = /* @__PURE__ */ ((TrackingEventType2) => {
1563
- TrackingEventType2["PAGE_VIEW"] = "page_view";
1564
- TrackingEventType2["PAGE_LEAVE"] = "page_leave";
1565
- TrackingEventType2["APP_DEVICE_INFO"] = "app_device_info";
1566
- TrackingEventType2["CLICK"] = "click";
1567
- TrackingEventType2["CUSTOM"] = "custom";
1568
- return TrackingEventType2;
1569
- })(TrackingEventType || {});
1570
- const { PAGE_VIEW, PAGE_LEAVE, CLICK, CUSTOM, APP_DEVICE_INFO } = TrackingEventType;
1571
2068
  const DEFAULT_CONFIG = {
1572
2069
  enabled: true,
1573
2070
  debug: false,
@@ -2017,7 +2514,6 @@ class TrackingSDK {
2017
2514
  * 发送埋点数据
2018
2515
  */
2019
2516
  async flush() {
2020
- console.log(this.eventQueue.length, "this.eventQueue.length");
2021
2517
  if (this.eventQueue.length === 0) return;
2022
2518
  const events = [...this.eventQueue];
2023
2519
  this.eventQueue = [];
@@ -2703,9 +3199,11 @@ const endpointsList$2 = {
2703
3199
  certificateNo: params.user,
2704
3200
  accountAuthFlag: params.accountAuthFlag || false,
2705
3201
  channelCode: params.channelCode || null,
2706
- payFinishJumpUrl: params.payFinishJumpUrl || null
3202
+ payFinishJumpUrl: params.payFinishJumpUrl || null,
3203
+ useCloudBean: params.useCloudBean || false
2707
3204
  }),
2708
3205
  transform: (data) => {
3206
+ console.log(data, "data-----");
2709
3207
  let json = null;
2710
3208
  try {
2711
3209
  json = JSON.parse(data.prePayStr);
@@ -2773,6 +3271,7 @@ const vendor$2 = {
2773
3271
  title: data.msg,
2774
3272
  icon: "none"
2775
3273
  });
3274
+ reject(data.msg);
2776
3275
  }
2777
3276
  }).catch((e) => {
2778
3277
  reject(e);
@@ -2936,6 +3435,8 @@ const requestBrandWCPayByBean = (params, Appcode = "") => {
2936
3435
  }
2937
3436
  });
2938
3437
  }
3438
+ }).catch(() => {
3439
+ resolve(false);
2939
3440
  });
2940
3441
  });
2941
3442
  };
@@ -2972,7 +3473,7 @@ var script$E = /* @__PURE__ */ defineComponent({
2972
3473
  tenant: { type: String, required: true },
2973
3474
  payFinishJumpUrl: { type: String, required: false }
2974
3475
  },
2975
- emits: ["complete", "agree"],
3476
+ emits: ["complete", "agree", "loaded"],
2976
3477
  setup(__props, { emit: __emit }) {
2977
3478
  const props = __props;
2978
3479
  const { params } = useRouter();
@@ -2999,6 +3500,7 @@ var script$E = /* @__PURE__ */ defineComponent({
2999
3500
  tenant: props.tenant
3000
3501
  }).then((response) => {
3001
3502
  amounts.value = response;
3503
+ emit("loaded");
3002
3504
  });
3003
3505
  });
3004
3506
  const onPayClick = () => {
@@ -3061,11 +3563,12 @@ var script$E = /* @__PURE__ */ defineComponent({
3061
3563
  const _directive_track_click = resolveDirective("track-click");
3062
3564
  return openBlock(), createElementBlock("view", _hoisted_1$B, [
3063
3565
  createElementVNode("view", _hoisted_2$r, [
3064
- createVNode(script$M, {
3566
+ createVNode(script$O, {
3065
3567
  items: amounts.value,
3066
3568
  selected: state.selected,
3067
3569
  onChange: onAmountSelect
3068
- }, null, 8, ["items", "selected"])
3570
+ }, null, 8, ["items", "selected"]),
3571
+ renderSlot(_ctx.$slots, "banner")
3069
3572
  ]),
3070
3573
  createElementVNode("view", _hoisted_3$l, [
3071
3574
  createElementVNode("view", _hoisted_4$h, [
@@ -3340,26 +3843,35 @@ const _hoisted_6$9 = {
3340
3843
  };
3341
3844
  const _hoisted_7$6 = { class: "amount" };
3342
3845
  const _hoisted_8$5 = ["src"];
3343
- const _hoisted_9$4 = { class: "amount-footer" };
3846
+ const _hoisted_9$4 = {
3847
+ key: 0,
3848
+ class: "balance-warning"
3849
+ };
3344
3850
  const _hoisted_10$3 = {
3851
+ key: 1,
3852
+ class: "balance-warning-tip"
3853
+ };
3854
+ const _hoisted_11$3 = { class: "amount-footer" };
3855
+ const _hoisted_12$3 = {
3345
3856
  key: 0,
3346
3857
  class: "agreement"
3347
3858
  };
3348
- const _hoisted_11$3 = { class: "buy-amount" };
3349
- const _hoisted_12$3 = { class: "left" };
3350
- const _hoisted_13$2 = { class: "amount" };
3351
- const _hoisted_14$2 = { class: "item" };
3352
- const _hoisted_15$2 = { class: "item" };
3859
+ const _hoisted_13$2 = { class: "buy-amount" };
3860
+ const _hoisted_14$2 = { class: "left" };
3861
+ const _hoisted_15$2 = { class: "amount" };
3353
3862
  const _hoisted_16$2 = { class: "item" };
3863
+ const _hoisted_17$2 = { class: "item" };
3864
+ const _hoisted_18$2 = { class: "item" };
3354
3865
  var script$A = /* @__PURE__ */ defineComponent({
3355
3866
  __name: "TradeView",
3356
3867
  props: {
3357
3868
  headerApp: { type: String, required: true },
3358
3869
  app: { type: String, required: true },
3359
3870
  tenant: { type: String, required: true },
3360
- payFinishJumpUrl: { type: String, required: false }
3871
+ payFinishJumpUrl: { type: String, required: false },
3872
+ apps: { type: String, required: false }
3361
3873
  },
3362
- emits: ["complete", "agree"],
3874
+ emits: ["complete", "agree", "loaded"],
3363
3875
  setup(__props, { emit: __emit }) {
3364
3876
  const props = __props;
3365
3877
  const { formatAmount } = useAmount();
@@ -3383,8 +3895,28 @@ var script$A = /* @__PURE__ */ defineComponent({
3383
3895
  state.selected = selected;
3384
3896
  selectBean.value = false;
3385
3897
  };
3898
+ const extraPaymentAmount = computed(() => {
3899
+ if (!selectBean.value || !amounts.value[state.selected]) {
3900
+ return 0;
3901
+ }
3902
+ const paymentAmount = amounts.value[state.selected].paymentAmount || 0;
3903
+ const currentBalance = balance.value || 0;
3904
+ return Math.max(0, paymentAmount - currentBalance);
3905
+ });
3386
3906
  const currentAmount = computed(() => {
3387
- return amounts.value[state.selected] && !selectBean.value ? amounts.value[state.selected].paymentAmount : 0;
3907
+ if (!amounts.value[state.selected]) {
3908
+ return 0;
3909
+ }
3910
+ if (selectBean.value) {
3911
+ if (balance.value < amounts.value[state.selected].paymentAmount) {
3912
+ return extraPaymentAmount.value;
3913
+ }
3914
+ return 0;
3915
+ }
3916
+ return amounts.value[state.selected].paymentAmount || 0;
3917
+ });
3918
+ const isCombinedPayment = computed(() => {
3919
+ return selectBean.value && amounts.value[state.selected] && balance.value < amounts.value[state.selected].paymentAmount;
3388
3920
  });
3389
3921
  onMounted(() => {
3390
3922
  const $http = useHttp$2({ Appcode: props.headerApp, Tenant: props.tenant });
@@ -3393,29 +3925,34 @@ var script$A = /* @__PURE__ */ defineComponent({
3393
3925
  }).then((res) => {
3394
3926
  balance.value = res.balance;
3395
3927
  amounts.value = res.paymentCaseConfigVOS;
3928
+ emit("loaded");
3396
3929
  });
3397
3930
  });
3398
3931
  const showDialog = ref(false);
3399
3932
  async function beanPay() {
3400
3933
  const $http = useHttp$2({ Appcode: props.headerApp, Tenant: props.tenant });
3401
- $http.post(`/payment/paymentCaseConfig/purchase/${amounts.value[state.selected].id}`).then((response) => {
3934
+ try {
3935
+ const response = await $http.post(
3936
+ `/payment/paymentCaseConfig/purchase/${amounts.value[state.selected].id}`
3937
+ );
3402
3938
  if (response) {
3403
3939
  showDialog.value = false;
3404
3940
  emit("complete", { result: response, type: "bean" });
3405
3941
  } else {
3406
3942
  showToast({
3407
- title: response.message,
3943
+ title: response?.message || "\u652F\u4ED8\u5931\u8D25",
3408
3944
  icon: "none"
3409
3945
  });
3410
3946
  }
3411
- });
3412
- }
3413
- const onPayClick = () => {
3414
- if (selectBean.value) {
3415
- showDialog.value = true;
3416
- return;
3947
+ } catch (error) {
3948
+ showToast({
3949
+ title: error?.message || "\u652F\u4ED8\u5931\u8D25",
3950
+ icon: "none"
3951
+ });
3417
3952
  }
3418
- if (!selectBean.value && !state.agreed) {
3953
+ }
3954
+ function proceedWechatPayment() {
3955
+ if (!state.agreed) {
3419
3956
  showToast({
3420
3957
  title: "\u8BF7\u52FE\u9009\u300A\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u534F\u8BAE\u300B",
3421
3958
  icon: "none"
@@ -3434,41 +3971,109 @@ var script$A = /* @__PURE__ */ defineComponent({
3434
3971
  }
3435
3972
  requestBrandWCPayByBean({
3436
3973
  caseConfigId: amounts.value[state.selected].id,
3437
- amount: amounts.value[state.selected].paymentAmount,
3974
+ amount: currentAmount.value,
3438
3975
  app: "loankitMp",
3439
3976
  tenant: props.tenant,
3440
3977
  accountAuthFlag: false,
3441
3978
  channelCode: "centergzh",
3442
3979
  payFinishJumpUrl: props.payFinishJumpUrl,
3443
- fromMini: !!params.from
3980
+ fromMini: !!params.from,
3981
+ useCloudBean: isCombinedPayment.value
3444
3982
  }).then((result) => {
3445
- console.log(result, "------requestBrandWCPay");
3446
3983
  state.buttonLoading = false;
3447
3984
  if (typeof result === "boolean" && result) {
3448
3985
  window.location.href = props.payFinishJumpUrl;
3449
3986
  } else {
3450
- emit("complete", { result, type: "wePay" });
3987
+ emit("complete", {
3988
+ result,
3989
+ type: isCombinedPayment.value ? "combined" : "wePay"
3990
+ });
3451
3991
  }
3992
+ }).catch((error) => {
3993
+ state.buttonLoading = false;
3994
+ showToast({
3995
+ title: error.message || "\u652F\u4ED8\u5931\u8D25",
3996
+ icon: "none"
3997
+ });
3452
3998
  });
3453
3999
  } else {
3454
4000
  wx.login({
3455
4001
  success({ code }) {
3456
- requestPaymentByBean({
3457
- caseConfigId: amounts.value[state.selected].id,
3458
- amount: amounts.value[state.selected].paymentAmount,
3459
- app: props.app,
3460
- tenant: props.tenant,
3461
- user: code
3462
- }, props.headerApp).then((result) => {
4002
+ requestPaymentByBean(
4003
+ {
4004
+ caseConfigId: amounts.value[state.selected].id,
4005
+ amount: currentAmount.value,
4006
+ app: props.app,
4007
+ tenant: props.tenant,
4008
+ user: code
4009
+ },
4010
+ props.headerApp
4011
+ ).then((result) => {
3463
4012
  state.buttonLoading = false;
3464
4013
  if (result) {
3465
- emit("complete", { result: true, type: "wePay" });
4014
+ emit("complete", {
4015
+ result: true,
4016
+ type: isCombinedPayment.value ? "combined" : "wePay"
4017
+ });
3466
4018
  }
4019
+ }).catch((error) => {
4020
+ state.buttonLoading = false;
4021
+ showToast({
4022
+ title: error.message || "\u652F\u4ED8\u5931\u8D25",
4023
+ icon: "none"
4024
+ });
4025
+ });
4026
+ },
4027
+ fail() {
4028
+ state.buttonLoading = false;
4029
+ showToast({
4030
+ title: "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
4031
+ icon: "none"
3467
4032
  });
3468
4033
  }
3469
4034
  });
3470
4035
  }
4036
+ }
4037
+ const onPayClick = async () => {
4038
+ if (selectBean.value && !isCombinedPayment.value) {
4039
+ showDialog.value = true;
4040
+ return;
4041
+ }
4042
+ if (isCombinedPayment.value) {
4043
+ const res = await checkBalance();
4044
+ if (!res) return;
4045
+ }
4046
+ proceedWechatPayment();
3471
4047
  };
4048
+ async function checkBalance() {
4049
+ const $http = useHttp$2();
4050
+ return new Promise((resolve, reject) => {
4051
+ state.buttonLoading = true;
4052
+ $http.get(endpoints$2.\u83B7\u53D6\u4F59\u989D\u660E\u7EC6, {
4053
+ app: props.apps
4054
+ }).then((data) => {
4055
+ state.buttonLoading = false;
4056
+ if (data.commonAccount < balance.value) {
4057
+ showModal({
4058
+ title: "\u6E29\u99A8\u63D0\u793A",
4059
+ content: "\u4E91\u8C46\u4E0D\u8DB3\uFF0C\u8BF7\u5237\u65B0\u540E\u518D\u6B21\u786E\u8BA4",
4060
+ showCancel: false,
4061
+ confirmText: "\u5237\u65B0",
4062
+ confirmColor: "#017fff",
4063
+ success: () => {
4064
+ balance.value = data.commonAccount;
4065
+ }
4066
+ });
4067
+ resolve(false);
4068
+ } else {
4069
+ resolve(true);
4070
+ }
4071
+ }).catch((error) => {
4072
+ state.buttonLoading = false;
4073
+ resolve(false);
4074
+ });
4075
+ });
4076
+ }
3472
4077
  return (_ctx, _cache) => {
3473
4078
  const _component_nut_checkbox = Checkbox;
3474
4079
  const _component_nut_button = Button;
@@ -3490,29 +4095,28 @@ var script$A = /* @__PURE__ */ defineComponent({
3490
4095
  -1
3491
4096
  /* CACHED */
3492
4097
  )),
3493
- !selectBean.value ? (openBlock(), createElementBlock(
4098
+ !selectBean.value || isCombinedPayment.value ? (openBlock(), createElementBlock(
3494
4099
  "div",
3495
4100
  _hoisted_5$d,
3496
- "\u4F59\u989D " + toDisplayString(unref(formatAmount)(balance.value || 0)),
4101
+ " \u4F59\u989D " + toDisplayString(unref(formatAmount)(balance.value || 0)),
3497
4102
  1
3498
4103
  /* TEXT */
3499
4104
  )) : (openBlock(), createElementBlock(
3500
4105
  "div",
3501
4106
  _hoisted_6$9,
3502
- "\u6263\u51CF\u540E\u4F59\u989D " + toDisplayString(unref(formatAmount)(balance.value - amounts.value[state.selected].paymentAmount)),
4107
+ " \u6263\u51CF\u540E\u4F59\u989D " + toDisplayString(unref(formatAmount)(balance.value - amounts.value[state.selected].paymentAmount)),
3503
4108
  1
3504
4109
  /* TEXT */
3505
4110
  ))
3506
4111
  ]),
3507
- balance.value >= amounts.value[state.selected].paymentAmount ? (openBlock(), createElementBlock("div", {
3508
- key: 0,
4112
+ createElementVNode("div", {
3509
4113
  class: "right",
3510
4114
  onClick: _cache[0] || (_cache[0] = ($event) => selectBean.value = !selectBean.value)
3511
4115
  }, [
3512
4116
  createElementVNode(
3513
4117
  "div",
3514
4118
  _hoisted_7$6,
3515
- "-" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].paymentAmount || 0)),
4119
+ " -" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].paymentAmount || 0)),
3516
4120
  1
3517
4121
  /* TEXT */
3518
4122
  ),
@@ -3520,12 +4124,20 @@ var script$A = /* @__PURE__ */ defineComponent({
3520
4124
  class: "icon",
3521
4125
  src: selectBean.value ? "https://cdn.ddjf.com/static/images/appkit/select.svg" : "https://cdn.ddjf.com/static/images/appkit/not-select.svg"
3522
4126
  }, null, 8, _hoisted_8$5)
3523
- ])) : createCommentVNode("v-if", true)
4127
+ ]),
4128
+ isCombinedPayment.value ? (openBlock(), createElementBlock(
4129
+ "div",
4130
+ _hoisted_9$4,
4131
+ " \u4E91\u8C46\u4F59\u989D\u4E0D\u8DB3,\u8FD8\u9700\u989D\u5916\u652F\u4ED8" + toDisplayString(unref(formatAmount)(extraPaymentAmount.value)) + "\u5143 ",
4132
+ 1
4133
+ /* TEXT */
4134
+ )) : createCommentVNode("v-if", true)
3524
4135
  ])) : createCommentVNode("v-if", true),
4136
+ isCombinedPayment.value ? (openBlock(), createElementBlock("div", _hoisted_10$3, " \u8BF7\u5728\u652F\u4ED8\u5B8C\u6210\u524D\u786E\u4FDD\u5143\u8C46\u4F59\u989D\u4E0D\u88AB\u6D88\u8017,\u5426\u5219\u672C\u6B21\u6743\u76CA\u53EF\u80FD\u8D2D\u4E70\u5931\u8D25 ")) : createCommentVNode("v-if", true),
3525
4137
  renderSlot(_ctx.$slots, "banner")
3526
4138
  ]),
3527
- createElementVNode("view", _hoisted_9$4, [
3528
- !selectBean.value ? (openBlock(), createElementBlock("view", _hoisted_10$3, [
4139
+ createElementVNode("view", _hoisted_11$3, [
4140
+ !selectBean.value || isCombinedPayment.value ? (openBlock(), createElementBlock("view", _hoisted_12$3, [
3529
4141
  createVNode(_component_nut_checkbox, {
3530
4142
  modelValue: state.agreed,
3531
4143
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => state.agreed = $event)
@@ -3553,14 +4165,14 @@ var script$A = /* @__PURE__ */ defineComponent({
3553
4165
  /* STABLE */
3554
4166
  }, 8, ["modelValue"])
3555
4167
  ])) : createCommentVNode("v-if", true),
3556
- createElementVNode("div", _hoisted_11$3, [
3557
- createElementVNode("div", _hoisted_12$3, [
4168
+ createElementVNode("div", _hoisted_13$2, [
4169
+ createElementVNode("div", _hoisted_14$2, [
3558
4170
  _cache[8] || (_cache[8] = createTextVNode(
3559
4171
  " \u5F85\u652F\u4ED8\uFF1A ",
3560
4172
  -1
3561
4173
  /* CACHED */
3562
4174
  )),
3563
- createElementVNode("span", _hoisted_13$2, [
4175
+ createElementVNode("span", _hoisted_15$2, [
3564
4176
  _cache[7] || (_cache[7] = createElementVNode(
3565
4177
  "i",
3566
4178
  null,
@@ -3611,22 +4223,22 @@ var script$A = /* @__PURE__ */ defineComponent({
3611
4223
  [
3612
4224
  createElementVNode(
3613
4225
  "div",
3614
- _hoisted_14$2,
3615
- "\u4E91\u8C46\u6263\u51CF\uFF1A" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].paymentAmount || 0)),
4226
+ _hoisted_16$2,
4227
+ " \u4E91\u8C46\u6263\u51CF\uFF1A" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].paymentAmount || 0)),
3616
4228
  1
3617
4229
  /* TEXT */
3618
4230
  ),
3619
4231
  createElementVNode(
3620
4232
  "div",
3621
- _hoisted_15$2,
3622
- "\u6743\u76CA\u589E\u52A0\uFF1A" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].priceRightNum || 0)) + "\u7B14",
4233
+ _hoisted_17$2,
4234
+ " \u6743\u76CA\u589E\u52A0\uFF1A" + toDisplayString(unref(formatAmount)(amounts.value[state.selected].priceRightNum || 0)) + "\u7B14 ",
3623
4235
  1
3624
4236
  /* TEXT */
3625
4237
  ),
3626
4238
  createElementVNode(
3627
4239
  "div",
3628
- _hoisted_16$2,
3629
- "\u6263\u51CF\u540E\u4E91\u8C46\u4F59\u989D\uFF1A" + toDisplayString(unref(formatAmount)(balance.value - amounts.value[state.selected].paymentAmount)),
4240
+ _hoisted_18$2,
4241
+ " \u6263\u51CF\u540E\u4E91\u8C46\u4F59\u989D\uFF1A" + toDisplayString(unref(formatAmount)(balance.value - amounts.value[state.selected].paymentAmount)),
3630
4242
  1
3631
4243
  /* TEXT */
3632
4244
  )
@@ -3646,7 +4258,7 @@ var script$A = /* @__PURE__ */ defineComponent({
3646
4258
  script$A.__file = "src/payment/components/TradeView.vue";
3647
4259
 
3648
4260
  const components = {
3649
- AmountPicker: script$M,
4261
+ AmountPicker: script$O,
3650
4262
  RechargeView: script$E,
3651
4263
  UserAgreement: script$D,
3652
4264
  RechargeResult: script$C,
@@ -3757,7 +4369,7 @@ var script$z = /* @__PURE__ */ defineComponent({
3757
4369
  ])
3758
4370
  ])
3759
4371
  ]),
3760
- createCommentVNode(' <div class="line"></div>\r\n <div class="card-row">\r\n <div class="card-row-left desc">\u6743\u76CA\u4F7F\u7528\u65F6\u81EA\u52A8\u6263\u51CF\u4E91\u8C46</div>\r\n <div class="card-row-right">\r\n <div class="pay" v-track-click @click="gotoRecharge">\r\n <div>\u5145\u503C</div>\r\n <img\r\n class="pay-icon"\r\n src="https://cdn.ddjf.com/static/images/bpms-workBench/bean-right.png"\r\n />\r\n </div>\r\n </div>\r\n </div> ')
4372
+ createCommentVNode(' <div class="line"></div>\n <div class="card-row">\n <div class="card-row-left desc">\u6743\u76CA\u4F7F\u7528\u65F6\u81EA\u52A8\u6263\u51CF\u4E91\u8C46</div>\n <div class="card-row-right">\n <div class="pay" v-track-click @click="gotoRecharge">\n <div>\u5145\u503C</div>\n <img\n class="pay-icon"\n src="https://cdn.ddjf.com/static/images/bpms-workBench/bean-right.png"\n />\n </div>\n </div>\n </div> ')
3761
4373
  ])
3762
4374
  ]);
3763
4375
  };
@@ -4464,7 +5076,7 @@ var script$t = /* @__PURE__ */ defineComponent({
4464
5076
  [
4465
5077
  createElementVNode("div", _hoisted_1$q, [
4466
5078
  createElementVNode("div", _hoisted_2$k, [
4467
- createVNode(unref(script$L), {
5079
+ createVNode(unref(script$N), {
4468
5080
  title: unref(Taro).getEnv() !== "WEB" ? "\u6211\u7684\u8D26\u6237" : "",
4469
5081
  class: normalizeClass({ "with-background": scrolled.value > 0 }),
4470
5082
  onClose: onPageHeaderClose
@@ -4769,7 +5381,7 @@ var script$t = /* @__PURE__ */ defineComponent({
4769
5381
  _: 1
4770
5382
  /* STABLE */
4771
5383
  }, 8, ["visible"]),
4772
- createVNode(unref(script$K), {
5384
+ createVNode(unref(script$M), {
4773
5385
  modelValue: secondBalanceOpen.value,
4774
5386
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => secondBalanceOpen.value = $event),
4775
5387
  title: "\u6536\u652F\u660E\u7EC6"
@@ -5456,6 +6068,7 @@ var script$o = /* @__PURE__ */ defineComponent({
5456
6068
  showModal({
5457
6069
  content: toastMap[type],
5458
6070
  showCancel: false,
6071
+ confirmColor: "#017fff",
5459
6072
  confirmText: "\u77E5\u9053\u4E86"
5460
6073
  });
5461
6074
  }
@@ -6138,7 +6751,10 @@ var script$k = /* @__PURE__ */ defineComponent({
6138
6751
  ), [
6139
6752
  [vModelText, formState.name]
6140
6753
  ]),
6141
- createVNode(script$G, { onComplete: onOCRInfo }, {
6754
+ createVNode(script$I, {
6755
+ "has-upload-vo": false,
6756
+ onComplete: onOCRInfo
6757
+ }, {
6142
6758
  icon: withCtx(() => [..._cache[9] || (_cache[9] = [
6143
6759
  createElementVNode(
6144
6760
  "img",
@@ -6584,7 +7200,7 @@ var script$i = /* @__PURE__ */ defineComponent({
6584
7200
  emits: ["detail", "close", "view", "popup", "hasBanner"],
6585
7201
  setup(__props, { emit: __emit }) {
6586
7202
  const props = __props;
6587
- const { noticeClick } = useNotice();
7203
+ const { toReadFun, noticeClick } = useNotice();
6588
7204
  const bannerMessages = ref([]);
6589
7205
  const popMessages = ref([]);
6590
7206
  const activeKey = ref(0);
@@ -6709,7 +7325,7 @@ var script$i = /* @__PURE__ */ defineComponent({
6709
7325
  Fragment,
6710
7326
  null,
6711
7327
  renderList(bannerMessages.value, (item, key) => {
6712
- return withDirectives((openBlock(), createBlock(script$I, {
7328
+ return withDirectives((openBlock(), createBlock(script$K, {
6713
7329
  class: normalizeClass({ show: key === activeKey.value }),
6714
7330
  key,
6715
7331
  showClose: item.noticeType === 0,
@@ -6980,7 +7596,8 @@ function useCommonList(api, query, loading = true, method = "GET") {
6980
7596
  const isLoading = ref(false);
6981
7597
  async function fetchData(loading2) {
6982
7598
  loading2 && showLoading({
6983
- title: "\u52A0\u8F7D\u4E2D..."
7599
+ title: "\u52A0\u8F7D\u4E2D...",
7600
+ mask: true
6984
7601
  });
6985
7602
  isLoading.value = true;
6986
7603
  const $http = useHttp$1();
@@ -7382,7 +7999,8 @@ var script$e = /* @__PURE__ */ defineComponent({
7382
7999
  async function readAll() {
7383
8000
  try {
7384
8001
  showLoading({
7385
- title: "\u8BF7\u7A0D\u540E..."
8002
+ title: "\u8BF7\u7A0D\u540E...",
8003
+ mask: true
7386
8004
  });
7387
8005
  const appkitOptions = useAppKitOptions();
7388
8006
  const ep = endpoints["\u5168\u90E8\u5DF2\u8BFB"];
@@ -7432,7 +8050,7 @@ var script$e = /* @__PURE__ */ defineComponent({
7432
8050
  class: normalizeClass(["tabContainer", { inH5: unref(isWeb)() }])
7433
8051
  },
7434
8052
  [
7435
- createCommentVNode(' <ns-tabs\r\n v-model="state.tab"\r\n fill="#fff"\r\n square\r\n size="xl"\r\n style="height: 46px"\r\n @change="onTabChange"\r\n >\r\n <ns-tabs-item key="\u5168\u90E8" tab="\u5168\u90E8"></ns-tabs-item>\r\n <ns-tabs-item key="\u4E1A\u52A1\u6D88\u606F" tab="\u4E1A\u52A1\u6D88\u606F"></ns-tabs-item>\r\n <ns-tabs-item key="\u7CFB\u7EDF\u516C\u544A" tab="\u7CFB\u7EDF\u516C\u544A"></ns-tabs-item>\r\n <ns-tabs-item key="\u672A\u8BFB" tab="\u672A\u8BFB"></ns-tabs-item>\r\n </ns-tabs> '),
8053
+ createCommentVNode(' <ns-tabs\n v-model="state.tab"\n fill="#fff"\n square\n size="xl"\n style="height: 46px"\n @change="onTabChange"\n >\n <ns-tabs-item key="\u5168\u90E8" tab="\u5168\u90E8"></ns-tabs-item>\n <ns-tabs-item key="\u4E1A\u52A1\u6D88\u606F" tab="\u4E1A\u52A1\u6D88\u606F"></ns-tabs-item>\n <ns-tabs-item key="\u7CFB\u7EDF\u516C\u544A" tab="\u7CFB\u7EDF\u516C\u544A"></ns-tabs-item>\n <ns-tabs-item key="\u672A\u8BFB" tab="\u672A\u8BFB"></ns-tabs-item>\n </ns-tabs> '),
7436
8054
  createVNode(unref(NsTabs), {
7437
8055
  modelValue: state.tab,
7438
8056
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.tab = $event),
@@ -8018,7 +8636,8 @@ var script$b = /* @__PURE__ */ defineComponent({
8018
8636
  }
8019
8637
  async function updateImage(filePath) {
8020
8638
  showLoading({
8021
- title: "\u4E0A\u4F20\u4E2D..."
8639
+ title: "\u4E0A\u4F20\u4E2D...",
8640
+ mask: true
8022
8641
  });
8023
8642
  const appkitOptions = useAppKitOptions();
8024
8643
  const $http = useHttp();
@@ -8131,6 +8750,7 @@ var script$b = /* @__PURE__ */ defineComponent({
8131
8750
  title: "\u63D0\u793A",
8132
8751
  content: "\u786E\u5B9A\u8981\u9000\u51FA\u767B\u5F55\u5417\uFF1F",
8133
8752
  confirmText: "\u786E\u5B9A",
8753
+ confirmColor: "#017fff",
8134
8754
  success: async (e) => {
8135
8755
  if (e.confirm) {
8136
8756
  emits("logout");
@@ -9994,7 +10614,8 @@ var script$6 = /* @__PURE__ */ defineComponent({
9994
10614
  const $http = useHttp();
9995
10615
  const appkitOptions = useAppKitOptions();
9996
10616
  showLoading({
9997
- title: "\u53CD\u9988\u4E2D..."
10617
+ title: "\u53CD\u9988\u4E2D...",
10618
+ mask: true
9998
10619
  });
9999
10620
  const attachment = JSON.parse(
10000
10621
  JSON.stringify(
@@ -10704,8 +11325,9 @@ var script$2 = /* @__PURE__ */ defineComponent({
10704
11325
  rules: ["required"]
10705
11326
  }, {
10706
11327
  append: withCtx(() => [
10707
- !\u5DF2\u8BA4\u8BC1.value ? (openBlock(), createBlock(unref(script$G), {
11328
+ !\u5DF2\u8BA4\u8BC1.value ? (openBlock(), createBlock(unref(script$I), {
10708
11329
  key: 0,
11330
+ "has-upload-vo": false,
10709
11331
  onComplete: onOcrComplete
10710
11332
  })) : createCommentVNode("v-if", true)
10711
11333
  ]),
@@ -11314,4 +11936,4 @@ const AppKit = {
11314
11936
  }
11315
11937
  };
11316
11938
 
11317
- export { script$t as AccountView, script$M as AmountPicker, script$K as AppDrawer, script$J as AppVerify, script$z as BalanceCard, script$s as BalanceReminder, script$r as DateRange, script$H as DeviceVersion, script$p as ListFilter, script$4 as LoginSetting, script$i as NoticeBanner, script$h as NoticeEntry, script$f as NoticeList, script$e as NoticeList2, script$F as OcrBusinessLicense, script$G as OcrIcon, script$L as PageHeader, script$o as PromoterCard, script$C as RechargeResult, script$E as RechargeView, script$k as SelfRegistration, script as SharePoster, script$A as TradeView, script$D as UserAgreement, script$2 as UserAuth, script$a as UserBinding, script$9 as UserBindingSuccess, script$d as UserEntry, script$6 as UserFeedback, script$5 as UserFeedbackEntry, script$7 as UserHeadCrop, script$b as UserInfo, script$3 as UserResourceEmpty, components, createHttp, AppKit as default, defaultCryptoConfig, generateUniqueId, getSdkConfig, initTracking, installTrackingPlugin, jssdkServices, requestPayment$2 as requestPayment, requestWxH5Pay, services$1 as services, trackingSDK, useAppKit, useCountdown, useCrypto, useEncode, useLogger, usePageTracking, useSafeArea, useTabbar, useUpload, useValidator, useWxAuth };
11939
+ export { script$t as AccountView, script$O as AmountPicker, script$M as AppDrawer, script$L as AppVerify, script$z as BalanceCard, script$s as BalanceReminder, script$r as DateRange, script$J as DeviceVersion, script$p as ListFilter, script$4 as LoginSetting, script$i as NoticeBanner, script$h as NoticeEntry, script$f as NoticeList, script$e as NoticeList2, script$H as OcrBank, script$G as OcrBusinessLicense, script$I as OcrIcon, script$F as OcrInvoice, script$N as PageHeader, script$o as PromoterCard, script$C as RechargeResult, script$E as RechargeView, script$k as SelfRegistration, script as SharePoster, script$A as TradeView, script$D as UserAgreement, script$2 as UserAuth, script$a as UserBinding, script$9 as UserBindingSuccess, script$d as UserEntry, script$6 as UserFeedback, script$5 as UserFeedbackEntry, script$7 as UserHeadCrop, script$b as UserInfo, script$3 as UserResourceEmpty, components, compressImage, compressImageWithCanvas, createHttp, AppKit as default, defaultCryptoConfig, generateUniqueId, getCompressQuality, getSdkConfig, initTracking, installTrackingPlugin, jssdkServices, requestPayment$2 as requestPayment, requestWxH5Pay, services$1 as services, trackingSDK, useAppKit, useCountdown, useCrypto, useEncode, useLogger, usePageTracking, useSafeArea, useTabbar, useUpload, useValidator, useWxAuth };