@uxda/appkit 4.3.28 → 4.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/.cursor/skills/appkit-build-update-component-rules/SKILL.md +54 -49
  2. package/.cursor/skills/appkit-sync-component-rules/SKILL.md +60 -0
  3. package/.eslintrc.mjs +7 -7
  4. package/Appkit/347/273/204/344/273/266/344/275/277/347/224/250/350/247/204/345/210/231.md +2002 -1786
  5. package/PROJECT_DOCS.md +142 -142
  6. package/README.md +194 -194
  7. package/babel.config.js +12 -12
  8. package/dist/appkit.css +112 -3
  9. package/dist/index.js +155 -28
  10. package/package.json +82 -82
  11. package/project.config.json +15 -15
  12. package/project.tt.json +13 -13
  13. package/rollup.config.mjs +81 -81
  14. package/src/Appkit.ts +72 -72
  15. package/src/balance/api/endpoints.ts +133 -133
  16. package/src/balance/api/index.ts +118 -118
  17. package/src/balance/components/AccountView.vue +770 -770
  18. package/src/balance/components/BalanceCard.vue +210 -210
  19. package/src/balance/components/BalanceReminder.vue +84 -84
  20. package/src/balance/components/ConsumptionFilter.vue +218 -218
  21. package/src/balance/components/ConsumptionRules.vue +68 -68
  22. package/src/balance/components/DateFilter.vue +259 -259
  23. package/src/balance/components/DateRange.vue +111 -111
  24. package/src/balance/components/ListFilter.vue +62 -62
  25. package/src/balance/components/ListFilterPicker.vue +191 -191
  26. package/src/balance/components/PromoterCard.vue +308 -308
  27. package/src/balance/components/SecondBalance.vue +77 -77
  28. package/src/balance/components/Tip.vue +45 -45
  29. package/src/balance/components/index.ts +8 -8
  30. package/src/balance/types.ts +99 -99
  31. package/src/components/bt-cropper/index.vue +730 -730
  32. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  33. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  34. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  35. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  36. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  37. package/src/components/bt-cropper/utils/ratio.js +3 -3
  38. package/src/components/bt-cropper/utils/tools.js +25 -25
  39. package/src/components/dd-area/index.vue +225 -225
  40. package/src/components/dd-icon/doc.md +21 -21
  41. package/src/components/dd-icon/index.vue +23 -23
  42. package/src/components/dd-notice-bar/index.vue +78 -78
  43. package/src/components/dd-search/doc.md +34 -34
  44. package/src/components/dd-search/index.vue +168 -168
  45. package/src/components/dd-selector/index.vue +124 -124
  46. package/src/components/dd-skeleton/doc.md +19 -19
  47. package/src/components/dd-skeleton/index.vue +36 -36
  48. package/src/global.ts +6 -6
  49. package/src/index.ts +101 -101
  50. package/src/main.scss +1 -1
  51. package/src/notice/api/endpoints.ts +54 -54
  52. package/src/notice/api/index.ts +121 -121
  53. package/src/notice/components/NoticeBanner.vue +247 -247
  54. package/src/notice/components/NoticeEntry.vue +99 -99
  55. package/src/notice/components/NoticeList.vue +311 -311
  56. package/src/notice/components/NoticeList2.vue +401 -401
  57. package/src/notice/components/NoticePopup.vue +163 -163
  58. package/src/notice/components/index.ts +6 -6
  59. package/src/notice/components/useCommonList.ts +87 -87
  60. package/src/notice/components/useNotice.ts +35 -35
  61. package/src/notice/index.ts +1 -1
  62. package/src/notice/types.ts +25 -25
  63. package/src/payment/api/config.ts +7 -7
  64. package/src/payment/api/endpoints.ts +112 -112
  65. package/src/payment/api/index.ts +108 -108
  66. package/src/payment/components/AmountPicker.vue +77 -68
  67. package/src/payment/components/RechargeResult.vue +68 -68
  68. package/src/payment/components/RechargeView.vue +414 -227
  69. package/src/payment/components/RightsPicker.vue +105 -105
  70. package/src/payment/components/TradeView.vue +616 -616
  71. package/src/payment/components/UserAgreement.vue +234 -234
  72. package/src/payment/components/index.ts +22 -22
  73. package/src/payment/components/recharge-amount.spec.ts +51 -0
  74. package/src/payment/components/recharge-amount.ts +63 -0
  75. package/src/payment/index.ts +5 -5
  76. package/src/payment/services/index.ts +16 -16
  77. package/src/payment/services/invoke-recharge.ts +25 -25
  78. package/src/payment/services/request-payment.ts +136 -136
  79. package/src/payment/types.ts +34 -34
  80. package/src/register/components/SelfRegistration.vue +233 -233
  81. package/src/register/components/index.ts +2 -2
  82. package/src/scenarios/components/SharePoster.vue +364 -364
  83. package/src/scenarios/components/index.ts +2 -2
  84. package/src/scenarios/components/poster-paste.vue +93 -93
  85. package/src/scenarios/components/share-poster.md +273 -273
  86. package/src/shared/components/AppDrawer.vue +53 -53
  87. package/src/shared/components/AppVerify.vue +137 -137
  88. package/src/shared/components/DeviceVersion.vue +78 -78
  89. package/src/shared/components/EmptyView.vue +33 -33
  90. package/src/shared/components/OcrBank.vue +202 -202
  91. package/src/shared/components/OcrBusinessLicense.vue +120 -120
  92. package/src/shared/components/OcrIcon.vue +267 -267
  93. package/src/shared/components/OcrInvoice.vue +323 -323
  94. package/src/shared/components/OfficeDocx.vue +33 -33
  95. package/src/shared/components/OfficePdf.vue +35 -35
  96. package/src/shared/components/PageHeader.vue +84 -84
  97. package/src/shared/components/index.ts +12 -12
  98. package/src/shared/composables/index.ts +10 -10
  99. package/src/shared/composables/useAmount.ts +46 -46
  100. package/src/shared/composables/useCompress.ts +64 -64
  101. package/src/shared/composables/useCountdown.ts +46 -46
  102. package/src/shared/composables/useCrypto.ts +76 -76
  103. package/src/shared/composables/useDeviceEnv.ts +61 -61
  104. package/src/shared/composables/useDragBox.ts +97 -97
  105. package/src/shared/composables/useEncode.ts +43 -43
  106. package/src/shared/composables/useLogger.ts +149 -149
  107. package/src/shared/composables/useSafeArea.ts +46 -46
  108. package/src/shared/composables/useTabbar.ts +24 -24
  109. package/src/shared/composables/useUpload.ts +106 -106
  110. package/src/shared/composables/useValidator.ts +32 -32
  111. package/src/shared/composables/useWxAuth.ts +49 -49
  112. package/src/shared/http/Http.ts +149 -149
  113. package/src/shared/http/index.ts +1 -1
  114. package/src/shared/http/types.ts +163 -163
  115. package/src/shared/index.ts +9 -9
  116. package/src/shared/tracking/directives/index.ts +40 -40
  117. package/src/shared/tracking/examples/page-tracking-template.vue +27 -27
  118. package/src/shared/weixin/index.ts +9 -9
  119. package/src/shared/weixin/jssdk.ts +104 -104
  120. package/src/shared/weixin/payment.ts +38 -38
  121. package/src/styles/vars.scss +3 -3
  122. package/src/user/api/endpoints.ts +17 -17
  123. package/src/user/api/index.ts +123 -123
  124. package/src/user/components/LoginSetting.vue +114 -114
  125. package/src/user/components/UserAuth.vue +218 -218
  126. package/src/user/components/UserBinding.vue +277 -277
  127. package/src/user/components/UserBindingSuccess.vue +80 -80
  128. package/src/user/components/UserEntry.vue +139 -139
  129. package/src/user/components/UserFeedback.vue +428 -428
  130. package/src/user/components/UserFeedbackEntry.vue +175 -175
  131. package/src/user/components/UserHeadCrop.vue +65 -65
  132. package/src/user/components/UserInfo.vue +711 -711
  133. package/src/user/components/UserResourceEmpty.vue +75 -75
  134. package/src/user/components/index.ts +23 -23
  135. package/src/user/index.ts +1 -1
  136. package/src/utils/utils.ts +33 -33
  137. package/tsconfig.json +30 -30
  138. package/types/global.d.ts +23 -23
  139. package/types/vue.d.ts +10 -10
  140. package/dist/assets/asset-3B_CoPto +0 -1
  141. package/dist/assets/asset-DcH8Kg-2 +0 -1
package/babel.config.js CHANGED
@@ -1,12 +1,12 @@
1
- // babel-preset-taro 更多选项和默认值:
2
- // https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
3
- module.exports = {
4
- presets: [
5
- ['taro', {
6
- framework: 'vue3',
7
- ts: true
8
- }]
9
- ],
10
- plugins: [
11
- ],
12
- }
1
+ // babel-preset-taro 更多选项和默认值:
2
+ // https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
3
+ module.exports = {
4
+ presets: [
5
+ ['taro', {
6
+ framework: 'vue3',
7
+ ts: true
8
+ }]
9
+ ],
10
+ plugins: [
11
+ ],
12
+ }
package/dist/appkit.css CHANGED
@@ -12,6 +12,15 @@
12
12
  .amount-picker .tile.selected .nut-grid-item__content {
13
13
  background: linear-gradient(#FFF7E3, #FEFDE6) padding-box, linear-gradient(to bottom, #efd082, #ffb877) border-box;
14
14
  }
15
+ .amount-picker .tile.custom h4.token-line {
16
+ background-image: none;
17
+ padding-left: 0;
18
+ color: #353535;
19
+ font-size: 14px;
20
+ }
21
+ .amount-picker .tile.custom h5 {
22
+ color: #353535;
23
+ }
15
24
  .amount-picker h4.token-line {
16
25
  background-image: url("https://cdn.ddjf.com/static/images/appkit/yundou.png");
17
26
  background-size: 20px;
@@ -247,6 +256,106 @@
247
256
  .recharge-view .flex-grow {
248
257
  flex-grow: 1;
249
258
  }
259
+ .recharge-view .custom-amount-panel {
260
+ box-sizing: border-box;
261
+ display: block;
262
+ overflow: hidden;
263
+ margin: 8px 12px 12px;
264
+ padding: 12px;
265
+ background-color: rgba(255, 244, 223, 0.3);
266
+ border-radius: 5px;
267
+ border: 1px solid #fd6701;
268
+ }
269
+ .recharge-view .custom-amount-title,
270
+ .recharge-view .custom-amount-input,
271
+ .recharge-view .custom-amount-tip {
272
+ background: transparent;
273
+ }
274
+ .recharge-view .custom-amount-title {
275
+ display: flex;
276
+ align-items: center;
277
+ justify-content: space-between;
278
+ color: #262626;
279
+ font-size: 15px;
280
+ font-weight: 600;
281
+ line-height: 22px;
282
+ }
283
+ .recharge-view .custom-amount-tag {
284
+ color: #fd6701;
285
+ background: rgb(255, 244, 223);
286
+ border-radius: 12px;
287
+ padding: 3px 8px;
288
+ font-size: 10px;
289
+ font-weight: 600;
290
+ line-height: 14px;
291
+ }
292
+ .recharge-view .custom-amount-input {
293
+ display: flex;
294
+ align-items: center;
295
+ min-height: 50px;
296
+ margin-top: 8px;
297
+ padding: 0;
298
+ border: 0;
299
+ background: transparent;
300
+ }
301
+ .recharge-view .custom-amount-input .currency {
302
+ flex: none;
303
+ margin-right: 10px;
304
+ color: #9a9a9a;
305
+ font-size: 26px;
306
+ font-weight: 600;
307
+ line-height: 36px;
308
+ }
309
+ .recharge-view .custom-amount-control {
310
+ flex: 1;
311
+ min-width: 0;
312
+ height: 42px;
313
+ padding: 0;
314
+ border: 0;
315
+ outline: none;
316
+ background: transparent;
317
+ color: #353535;
318
+ caret-color: #fd6701;
319
+ font-size: 28px;
320
+ font-weight: 700;
321
+ line-height: 42px;
322
+ }
323
+ .recharge-view .custom-amount-control:focus, .recharge-view .custom-amount-control:focus-visible {
324
+ border: 0;
325
+ outline: none;
326
+ box-shadow: none;
327
+ }
328
+ .recharge-view .custom-amount-control::placeholder, .recharge-view .custom-amount-control::-webkit-input-placeholder {
329
+ color: #b8b8b8;
330
+ font-size: 26px;
331
+ font-weight: 700;
332
+ }
333
+ .recharge-view .custom-amount-placeholder {
334
+ color: #b8b8b8;
335
+ font-size: 26px;
336
+ font-weight: 700;
337
+ line-height: 42px;
338
+ }
339
+ .recharge-view .custom-amount-tip {
340
+ display: flex;
341
+ align-items: center;
342
+ gap: 6px;
343
+ margin-top: 10px;
344
+ color: #a5a5a5;
345
+ font-size: 10px;
346
+ line-height: 15px;
347
+ }
348
+ .recharge-view .custom-amount-tip-icon {
349
+ flex: none;
350
+ width: 12px;
351
+ height: 12px;
352
+ border: 1px solid #b8b8b8;
353
+ border-radius: 50%;
354
+ color: #9a9a9a;
355
+ font-size: 9px;
356
+ line-height: 12px;
357
+ text-align: center;
358
+ }
250
359
  .recharge-view .amount-footer {
251
360
  position: fixed;
252
361
  bottom: 0;
@@ -514,9 +623,9 @@
514
623
  color: #353535;
515
624
  background: linear-gradient(90deg, #ffebc1 0%, #ffb875 100%);
516
625
  }
517
- page {
518
- --text-color: #333;
519
- --text-color-dark-mode: #eee;
626
+ page {
627
+ --text-color: #333;
628
+ --text-color-dark-mode: #eee;
520
629
  }
521
630
  .account-card .card {
522
631
  background: linear-gradient(90deg, #EEF1FA 0%, #E4E6F3 100%);
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Grid, GridItem, Popup, ActionSheet, Checkbox, Button, Dialog, DatePicker, Form, FormItem, RadioGroup, Radio, Ellipsis, Skeleton, Cell, Input, Steps, Step } 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, createBlock, openBlock, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createTextVNode, ref, computed, onUnmounted, resolveDirective, createCommentVNode, withDirectives, renderSlot, createVNode, normalizeStyle, unref, reactive, 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
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';
@@ -36,7 +36,10 @@ import '@nutui/nutui-taro/dist/packages/steps/style/css';
36
36
  import '@nutui/nutui-taro/dist/packages/step/style/css';
37
37
 
38
38
  const _hoisted_1$I = { class: "token-line number" };
39
- const _hoisted_2$t = { class: "number" };
39
+ const _hoisted_2$t = { key: 0 };
40
+ const _hoisted_3$n = { class: "number" };
41
+ const _hoisted_4$j = { key: 1 };
42
+ const _hoisted_5$g = { class: "number" };
40
43
  var script$Q = /* @__PURE__ */ defineComponent({
41
44
  __name: "AmountPicker",
42
45
  props: {
@@ -46,12 +49,9 @@ var script$Q = /* @__PURE__ */ defineComponent({
46
49
  emits: ["change"],
47
50
  setup(__props, { emit: __emit }) {
48
51
  const emit = __emit;
49
- const state = reactive({
50
- selected: 0
51
- });
52
+ const props = __props;
52
53
  const onGridItemClick = (index) => {
53
- state.selected = index;
54
- emit("change", state.selected);
54
+ emit("change", index);
55
55
  };
56
56
  return (_ctx, _cache) => {
57
57
  const _component_nut_grid_item = GridItem;
@@ -68,7 +68,7 @@ var script$Q = /* @__PURE__ */ defineComponent({
68
68
  null,
69
69
  renderList(__props.items, (amount, index) => {
70
70
  return openBlock(), createBlock(_component_nut_grid_item, {
71
- class: normalizeClass(["tile", { selected: state.selected === index }]),
71
+ class: normalizeClass(["tile", { selected: props.selected === index, custom: amount.custom }]),
72
72
  onClick: () => onGridItemClick(index),
73
73
  key: index
74
74
  }, {
@@ -80,7 +80,15 @@ var script$Q = /* @__PURE__ */ defineComponent({
80
80
  1
81
81
  /* TEXT */
82
82
  ),
83
- createElementVNode("h5", null, [
83
+ amount.custom ? (openBlock(), createElementBlock("h5", _hoisted_2$t, [
84
+ createElementVNode(
85
+ "span",
86
+ _hoisted_3$n,
87
+ toDisplayString(amount.amount),
88
+ 1
89
+ /* TEXT */
90
+ )
91
+ ])) : (openBlock(), createElementBlock("h5", _hoisted_4$j, [
84
92
  _cache[0] || (_cache[0] = createTextVNode(
85
93
  "\xA5",
86
94
  -1
@@ -88,12 +96,12 @@ var script$Q = /* @__PURE__ */ defineComponent({
88
96
  )),
89
97
  createElementVNode(
90
98
  "span",
91
- _hoisted_2$t,
99
+ _hoisted_5$g,
92
100
  toDisplayString(amount.amount),
93
101
  1
94
102
  /* TEXT */
95
103
  )
96
- ])
104
+ ]))
97
105
  ]),
98
106
  _: 2
99
107
  /* DYNAMIC */
@@ -747,11 +755,11 @@ const _hoisted_1$F = { class: "app-verify column" };
747
755
  const _hoisted_2$s = { class: "caption" };
748
756
  const _hoisted_3$m = { class: "number" };
749
757
  const _hoisted_4$i = { class: "form-btn" };
750
- const _hoisted_5$e = {
758
+ const _hoisted_5$f = {
751
759
  key: 1,
752
760
  class: "caption"
753
761
  };
754
- const _hoisted_6$a = { class: "row buttons" };
762
+ const _hoisted_6$b = { class: "row buttons" };
755
763
  var script$N = /* @__PURE__ */ defineComponent({
756
764
  __name: "AppVerify",
757
765
  props: {
@@ -846,7 +854,7 @@ var script$N = /* @__PURE__ */ defineComponent({
846
854
  ]) : createCommentVNode("v-if", true),
847
855
  sent.value ? (openBlock(), createElementBlock(
848
856
  "div",
849
- _hoisted_5$e,
857
+ _hoisted_5$f,
850
858
  toDisplayString(countdown.value) + "s\u540E\u91CD\u65B0\u53D1\u9001",
851
859
  1
852
860
  /* TEXT */
@@ -856,7 +864,7 @@ var script$N = /* @__PURE__ */ defineComponent({
856
864
  _: 1
857
865
  /* STABLE */
858
866
  }, 8, ["modelValue"]),
859
- createElementVNode("div", _hoisted_6$a, [
867
+ createElementVNode("div", _hoisted_6$b, [
860
868
  withDirectives((openBlock(), createBlock(unref(NsButton), {
861
869
  class: "cancel-btn",
862
870
  r: 20,
@@ -3554,10 +3562,54 @@ const isIOS = () => {
3554
3562
  return false;
3555
3563
  };
3556
3564
 
3565
+ const CUSTOM_RECHARGE_AMOUNT_MIN = 1e4;
3566
+ const CUSTOM_RECHARGE_AMOUNT_MAX = 5e4;
3567
+ const CUSTOM_RECHARGE_AMOUNT_ITEM = {
3568
+ token: "\u81EA\u5B9A\u4E49",
3569
+ amount: "1W \u8D77\u5145",
3570
+ custom: true
3571
+ };
3572
+ function appendCustomAmountOption(items) {
3573
+ return [...items, CUSTOM_RECHARGE_AMOUNT_ITEM];
3574
+ }
3575
+ function normalizeCustomRechargeAmountInput(value) {
3576
+ return String(value ?? "").replace(/[^\d]/g, "");
3577
+ }
3578
+ function validateCustomRechargeAmount(value) {
3579
+ const amount = Number(value);
3580
+ if (!Number.isFinite(amount) || amount <= 0) {
3581
+ return { valid: false, message: "\u8BF7\u8F93\u5165\u5145\u503C\u91D1\u989D" };
3582
+ }
3583
+ if (!Number.isInteger(amount)) {
3584
+ return { valid: false, message: "\u8BF7\u8F93\u5165\u6574\u6570\u5145\u503C\u91D1\u989D" };
3585
+ }
3586
+ if (amount < CUSTOM_RECHARGE_AMOUNT_MIN) {
3587
+ return { valid: false, message: "\u5145\u503C\u91D1\u989D\u4E0D\u80FD\u4F4E\u4E8E10000\u5143" };
3588
+ }
3589
+ if (amount > CUSTOM_RECHARGE_AMOUNT_MAX) {
3590
+ return { valid: false, message: "\u5145\u503C\u91D1\u989D\u4E0D\u80FD\u9AD8\u4E8E50000\u5143" };
3591
+ }
3592
+ return { valid: true, amount };
3593
+ }
3594
+ function resolveRechargeAmount(items, selected, customAmount) {
3595
+ const selectedItem = items[selected];
3596
+ if (selectedItem?.custom) {
3597
+ const validation = validateCustomRechargeAmount(customAmount);
3598
+ return validation.valid ? validation.amount : 0;
3599
+ }
3600
+ return Number(selectedItem?.amount || 0);
3601
+ }
3602
+
3557
3603
  const _hoisted_1$B = { class: "view recharge-view" };
3558
3604
  const _hoisted_2$r = { class: "flex-grow" };
3559
- const _hoisted_3$l = { class: "amount-footer" };
3560
- const _hoisted_4$h = { class: "agreement" };
3605
+ const _hoisted_3$l = {
3606
+ key: 0,
3607
+ class: "custom-amount-panel"
3608
+ };
3609
+ const _hoisted_4$h = { class: "custom-amount-input" };
3610
+ const _hoisted_5$e = ["value", "min", "max"];
3611
+ const _hoisted_6$a = { class: "amount-footer" };
3612
+ const _hoisted_7$7 = { class: "agreement" };
3561
3613
  var script$E = /* @__PURE__ */ defineComponent({
3562
3614
  __name: "RechargeView",
3563
3615
  props: {
@@ -3575,9 +3627,12 @@ var script$E = /* @__PURE__ */ defineComponent({
3575
3627
  selected: 0,
3576
3628
  agreementOpen: false,
3577
3629
  buttonLoading: false,
3578
- thirdPayId: ""
3630
+ thirdPayId: "",
3631
+ customAmountText: ""
3579
3632
  });
3580
3633
  const amounts = ref([]);
3634
+ const rechargeAmountItems = computed(() => appendCustomAmountOption(amounts.value));
3635
+ const isCustomAmountSelected = computed(() => rechargeAmountItems.value[state.selected]?.custom === true);
3581
3636
  const onAgreementLinkClick = (e) => {
3582
3637
  e.preventDefault();
3583
3638
  e.stopImmediatePropagation();
@@ -3585,6 +3640,24 @@ var script$E = /* @__PURE__ */ defineComponent({
3585
3640
  };
3586
3641
  const onAmountSelect = (selected) => {
3587
3642
  state.selected = selected;
3643
+ if (!rechargeAmountItems.value[selected]?.custom) {
3644
+ state.customAmountText = "";
3645
+ }
3646
+ };
3647
+ const onCustomAmountInput = (event) => {
3648
+ const value = normalizeCustomRechargeAmountInput(event?.detail?.value ?? event?.target?.value);
3649
+ state.customAmountText = value;
3650
+ return value;
3651
+ };
3652
+ const getSelectedRechargeAmount = () => {
3653
+ if (isCustomAmountSelected.value) {
3654
+ return validateCustomRechargeAmount(state.customAmountText);
3655
+ }
3656
+ const amount = resolveRechargeAmount(rechargeAmountItems.value, state.selected, state.customAmountText);
3657
+ if (!amount) {
3658
+ return { valid: false, message: "\u8BF7\u9009\u62E9\u5145\u503C\u91D1\u989D" };
3659
+ }
3660
+ return { valid: true, amount };
3588
3661
  };
3589
3662
  onMounted(async () => {
3590
3663
  const $http = useHttp$2({ Appcode: props.app !== "cloudkitPro" ? props.app : "", Tenant: props.tenant });
@@ -3598,6 +3671,14 @@ var script$E = /* @__PURE__ */ defineComponent({
3598
3671
  });
3599
3672
  });
3600
3673
  const onPayClick = () => {
3674
+ const selectedAmount = getSelectedRechargeAmount();
3675
+ if (!selectedAmount.valid) {
3676
+ showToast({
3677
+ title: selectedAmount.message,
3678
+ icon: "none"
3679
+ });
3680
+ return false;
3681
+ }
3601
3682
  if (!state.agreed) {
3602
3683
  showToast({
3603
3684
  title: "\u8BF7\u52FE\u9009\u300A\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u534F\u8BAE\u300B",
@@ -3608,7 +3689,7 @@ var script$E = /* @__PURE__ */ defineComponent({
3608
3689
  state.buttonLoading = true;
3609
3690
  if (Taro.getEnv() === "WEB") {
3610
3691
  requestBrandWCPay({
3611
- amount: amounts.value[state.selected].amount,
3692
+ amount: selectedAmount.amount,
3612
3693
  app: "loankitMp",
3613
3694
  tenant: props.tenant,
3614
3695
  accountAuthFlag: false,
@@ -3633,7 +3714,7 @@ var script$E = /* @__PURE__ */ defineComponent({
3633
3714
  wx.login({
3634
3715
  success({ code }) {
3635
3716
  requestPayment({
3636
- amount: amounts.value[state.selected].amount,
3717
+ amount: selectedAmount.amount,
3637
3718
  app: props.app,
3638
3719
  tenant: props.tenant,
3639
3720
  user: code
@@ -3675,20 +3756,66 @@ var script$E = /* @__PURE__ */ defineComponent({
3675
3756
  return openBlock(), createElementBlock("view", _hoisted_1$B, [
3676
3757
  createElementVNode("view", _hoisted_2$r, [
3677
3758
  createVNode(script$Q, {
3678
- items: amounts.value,
3759
+ items: rechargeAmountItems.value,
3679
3760
  selected: state.selected,
3680
3761
  onChange: onAmountSelect
3681
3762
  }, null, 8, ["items", "selected"]),
3763
+ isCustomAmountSelected.value ? (openBlock(), createElementBlock("view", _hoisted_3$l, [
3764
+ _cache[2] || (_cache[2] = createElementVNode(
3765
+ "view",
3766
+ { class: "custom-amount-title" },
3767
+ [
3768
+ createElementVNode("text", null, "\u8F93\u5165\u5145\u503C\u91D1\u989D"),
3769
+ createElementVNode("text", { class: "custom-amount-tag" }, "\u81EA\u5B9A\u4E49\u5927\u989D")
3770
+ ],
3771
+ -1
3772
+ /* CACHED */
3773
+ )),
3774
+ createElementVNode("view", _hoisted_4$h, [
3775
+ _cache[1] || (_cache[1] = createElementVNode(
3776
+ "text",
3777
+ { class: "currency" },
3778
+ "\xA5",
3779
+ -1
3780
+ /* CACHED */
3781
+ )),
3782
+ createElementVNode("input", {
3783
+ class: "custom-amount-control",
3784
+ type: "number",
3785
+ value: state.customAmountText,
3786
+ placeholder: "\u6700\u4F4E1w\u5143\u8D77,\u6700\u9AD85w\u5143",
3787
+ "placeholder-class": "custom-amount-placeholder",
3788
+ "placeholder-style": "color: #b8b8b8; font-size: 26px; font-weight: 700;",
3789
+ inputmode: "numeric",
3790
+ pattern: "[0-9]*",
3791
+ step: "1",
3792
+ min: unref(CUSTOM_RECHARGE_AMOUNT_MIN),
3793
+ max: unref(CUSTOM_RECHARGE_AMOUNT_MAX),
3794
+ maxlength: "6",
3795
+ onInput: onCustomAmountInput
3796
+ }, null, 40, _hoisted_5$e)
3797
+ ]),
3798
+ _cache[3] || (_cache[3] = createElementVNode(
3799
+ "view",
3800
+ { class: "custom-amount-tip" },
3801
+ [
3802
+ createElementVNode("text", { class: "custom-amount-tip-icon" }, "i"),
3803
+ createElementVNode("text", null, "\u81EA\u5B9A\u4E49\u5927\u989D\u5145\u503C\u5C06\u6839\u636E\u5145\u503C\u91D1\u989D\u5373\u65F6\u6362\u7B97\u4E91\u8C46\uFF0C\u6BD4\u4F8B\u4E3A 1:1\u3002")
3804
+ ],
3805
+ -1
3806
+ /* CACHED */
3807
+ ))
3808
+ ])) : createCommentVNode("v-if", true),
3682
3809
  renderSlot(_ctx.$slots, "banner")
3683
3810
  ]),
3684
- createElementVNode("view", _hoisted_3$l, [
3685
- createElementVNode("view", _hoisted_4$h, [
3811
+ createElementVNode("view", _hoisted_6$a, [
3812
+ createElementVNode("view", _hoisted_7$7, [
3686
3813
  createVNode(_component_nut_checkbox, {
3687
3814
  modelValue: state.agreed,
3688
3815
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.agreed = $event)
3689
3816
  }, {
3690
3817
  default: withCtx(() => [
3691
- _cache[2] || (_cache[2] = createTextVNode(
3818
+ _cache[5] || (_cache[5] = createTextVNode(
3692
3819
  "\u6211\u5DF2\u9605\u8BFB\u5E76\u540C\u610F",
3693
3820
  -1
3694
3821
  /* CACHED */
@@ -3696,7 +3823,7 @@ var script$E = /* @__PURE__ */ defineComponent({
3696
3823
  withDirectives((openBlock(), createElementBlock("a", {
3697
3824
  class: "link inline",
3698
3825
  onClick: onAgreementLinkClick
3699
- }, [..._cache[1] || (_cache[1] = [
3826
+ }, [..._cache[4] || (_cache[4] = [
3700
3827
  createTextVNode(
3701
3828
  "\u300A\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u670D\u52A1\u534F\u8BAE\u300B",
3702
3829
  -1
@@ -3717,7 +3844,7 @@ var script$E = /* @__PURE__ */ defineComponent({
3717
3844
  onClick: onPayClick,
3718
3845
  class: "recharge-button"
3719
3846
  }, {
3720
- default: withCtx(() => [..._cache[3] || (_cache[3] = [
3847
+ default: withCtx(() => [..._cache[6] || (_cache[6] = [
3721
3848
  createTextVNode(
3722
3849
  "\u7ACB\u5373\u5145\u503C",
3723
3850
  -1
@@ -4507,7 +4634,7 @@ var script$z = /* @__PURE__ */ defineComponent({
4507
4634
  ])
4508
4635
  ])
4509
4636
  ]),
4510
- 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> ')
4637
+ 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> ')
4511
4638
  ])
4512
4639
  ]);
4513
4640
  };
@@ -8188,7 +8315,7 @@ var script$e = /* @__PURE__ */ defineComponent({
8188
8315
  class: normalizeClass(["tabContainer", { inH5: unref(isWeb)() }])
8189
8316
  },
8190
8317
  [
8191
- 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> '),
8318
+ 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> '),
8192
8319
  createVNode(unref(NsTabs), {
8193
8320
  modelValue: state.tab,
8194
8321
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.tab = $event),
package/package.json CHANGED
@@ -1,82 +1,82 @@
1
- {
2
- "name": "@uxda/appkit",
3
- "version": "4.3.28",
4
- "description": "小程序应用开发包",
5
- "main": "dist/index.js",
6
- "module": "dist/index.ts",
7
- "moduleResolution": "node",
8
- "scripts": {
9
- "dev": "rollup -c rollup.config.mjs --watch",
10
- "build": "rollup -c rollup.config.mjs"
11
- },
12
- "exports": {
13
- ".": "./dist/index.js",
14
- "./appkit.css": "./dist/appkit.css"
15
- },
16
- "browserslist": [
17
- "last 3 versions",
18
- "Android >= 4.1",
19
- "ios >= 8"
20
- ],
21
- "author": "",
22
- "dependencies": {
23
- "@babel/runtime": "^7.28.4",
24
- "@nutui/auto-import-resolver": "^1.0.0",
25
- "@nutui/icons-vue-taro": "^0.0.9",
26
- "@nutui/nutui-taro": "^4.3.14",
27
- "@tarojs/components": "^4.1.7",
28
- "@tarojs/helper": "^4.1.7",
29
- "@tarojs/plugin-framework-vue3": "^4.1.7",
30
- "@tarojs/plugin-html": "^4.1.7",
31
- "@tarojs/plugin-platform-weapp": "^4.1.7",
32
- "@tarojs/router": "^4.1.7",
33
- "@tarojs/runtime": "^4.1.7",
34
- "@tarojs/shared": "^4.1.7",
35
- "@tarojs/taro": "^4.1.7",
36
- "@types/wechat-miniprogram": "^3.4.7",
37
- "@uxda/nutshell": "^1.6.98",
38
- "@vue-office/docx": "^1.6.3",
39
- "@vue-office/pdf": "^2.0.10",
40
- "dayjs": "^1.11.18",
41
- "dsbridge": "^3.1.4",
42
- "lodash-es": "^4.17.21",
43
- "pako": "^2.1.0",
44
- "validator": "^13.15.15",
45
- "vue": "^3.5.22",
46
- "vue-demi": "^0.14.10"
47
- },
48
- "devDependencies": {
49
- "@babel/core": "^7.28.4",
50
- "@tarojs/cli": "^4.1.7",
51
- "@tarojs/taro-loader": "^4.1.7",
52
- "@tarojs/webpack5-runner": "^4.1.7",
53
- "@types/node": "^24.5.2",
54
- "@types/webpack-env": "^1.13.6",
55
- "@typescript-eslint/eslint-plugin": "^8.44.1",
56
- "@typescript-eslint/parser": "^8.44.1",
57
- "@vue/babel-plugin-jsx": "^1.0.6",
58
- "@vue/compiler-sfc": "^3.5.22",
59
- "babel-preset-taro": "^4.0.4",
60
- "css-loader": "^7.1.2",
61
- "eslint": "^9.9.0",
62
- "eslint-config-taro": "^4.0.4",
63
- "eslint-plugin-vue": "^10.5.0",
64
- "postcss": "^8.5.6",
65
- "postcss-import": "^16.1.1",
66
- "rollup": "^4.6.1",
67
- "rollup-plugin-css-only": "^4.5.5",
68
- "rollup-plugin-dts": "^6.1.0",
69
- "rollup-plugin-esbuild": "^6.1.0",
70
- "rollup-plugin-postcss": "^4.0.2",
71
- "rollup-plugin-scss": "^4.0.0",
72
- "rollup-plugin-visualizer": "^6.0.3",
73
- "rollup-plugin-vue": "^6.0.0",
74
- "style-loader": "^4.0.0",
75
- "stylelint": "^16.8.2",
76
- "ts-node": "^10.9.1",
77
- "typescript": "^5.0.0",
78
- "unplugin-auto-import": "^20.2.0",
79
- "unplugin-vue-components": "^29.1.0",
80
- "webpack": "^5.78.0"
81
- }
82
- }
1
+ {
2
+ "name": "@uxda/appkit",
3
+ "version": "4.3.30",
4
+ "description": "小程序应用开发包",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.ts",
7
+ "moduleResolution": "node",
8
+ "scripts": {
9
+ "dev": "rollup -c rollup.config.mjs --watch",
10
+ "build": "rollup -c rollup.config.mjs"
11
+ },
12
+ "exports": {
13
+ ".": "./dist/index.js",
14
+ "./appkit.css": "./dist/appkit.css"
15
+ },
16
+ "browserslist": [
17
+ "last 3 versions",
18
+ "Android >= 4.1",
19
+ "ios >= 8"
20
+ ],
21
+ "author": "",
22
+ "dependencies": {
23
+ "@babel/runtime": "^7.28.4",
24
+ "@nutui/auto-import-resolver": "^1.0.0",
25
+ "@nutui/icons-vue-taro": "^0.0.9",
26
+ "@nutui/nutui-taro": "^4.3.14",
27
+ "@tarojs/components": "^4.1.7",
28
+ "@tarojs/helper": "^4.1.7",
29
+ "@tarojs/plugin-framework-vue3": "^4.1.7",
30
+ "@tarojs/plugin-html": "^4.1.7",
31
+ "@tarojs/plugin-platform-weapp": "^4.1.7",
32
+ "@tarojs/router": "^4.1.7",
33
+ "@tarojs/runtime": "^4.1.7",
34
+ "@tarojs/shared": "^4.1.7",
35
+ "@tarojs/taro": "^4.1.7",
36
+ "@types/wechat-miniprogram": "^3.4.7",
37
+ "@uxda/nutshell": "^1.6.98",
38
+ "@vue-office/docx": "^1.6.3",
39
+ "@vue-office/pdf": "^2.0.10",
40
+ "dayjs": "^1.11.18",
41
+ "dsbridge": "^3.1.4",
42
+ "lodash-es": "^4.17.21",
43
+ "pako": "^2.1.0",
44
+ "validator": "^13.15.15",
45
+ "vue": "^3.5.22",
46
+ "vue-demi": "^0.14.10"
47
+ },
48
+ "devDependencies": {
49
+ "@babel/core": "^7.28.4",
50
+ "@tarojs/cli": "^4.1.7",
51
+ "@tarojs/taro-loader": "^4.1.7",
52
+ "@tarojs/webpack5-runner": "^4.1.7",
53
+ "@types/node": "^24.5.2",
54
+ "@types/webpack-env": "^1.13.6",
55
+ "@typescript-eslint/eslint-plugin": "^8.44.1",
56
+ "@typescript-eslint/parser": "^8.44.1",
57
+ "@vue/babel-plugin-jsx": "^1.0.6",
58
+ "@vue/compiler-sfc": "^3.5.22",
59
+ "babel-preset-taro": "^4.0.4",
60
+ "css-loader": "^7.1.2",
61
+ "eslint": "^9.9.0",
62
+ "eslint-config-taro": "^4.0.4",
63
+ "eslint-plugin-vue": "^10.5.0",
64
+ "postcss": "^8.5.6",
65
+ "postcss-import": "^16.1.1",
66
+ "rollup": "^4.6.1",
67
+ "rollup-plugin-css-only": "^4.5.5",
68
+ "rollup-plugin-dts": "^6.1.0",
69
+ "rollup-plugin-esbuild": "^6.1.0",
70
+ "rollup-plugin-postcss": "^4.0.2",
71
+ "rollup-plugin-scss": "^4.0.0",
72
+ "rollup-plugin-visualizer": "^6.0.3",
73
+ "rollup-plugin-vue": "^6.0.0",
74
+ "style-loader": "^4.0.0",
75
+ "stylelint": "^16.8.2",
76
+ "ts-node": "^10.9.1",
77
+ "typescript": "^5.0.0",
78
+ "unplugin-auto-import": "^20.2.0",
79
+ "unplugin-vue-components": "^29.1.0",
80
+ "webpack": "^5.78.0"
81
+ }
82
+ }