@uxda/appkit 4.0.16 → 4.1.0

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.
package/dist/appkit.css CHANGED
@@ -103,12 +103,37 @@
103
103
  margin: 10px;
104
104
  }
105
105
  .app-verify .caption {
106
- font-size: 14px;
107
- color: #666;
106
+ font-size: 10px !important;
107
+ color: #ccc;
108
+ line-height: 21px;
109
+ }
110
+ .app-verify .number {
111
+ line-height: 21px;
112
+ }
113
+ .app-verify .form .nut-cell-group__wrap {
114
+ display: flex;
115
+ align-items: center;
116
+ margin: 20px 0 !important;
117
+ }
118
+ .app-verify .form .nut-cell-group__wrap .form-input {
119
+ height: 36px;
120
+ line-height: 36px;
121
+ border: none;
122
+ background: #f5f5f5;
123
+ border-radius: 5px;
124
+ flex: 1;
125
+ padding-left: 12px;
126
+ }
127
+ .app-verify .form .nut-cell-group__wrap .form-btn {
128
+ margin-left: 12px;
129
+ width: 90px;
108
130
  }
109
131
  .app-verify .buttons .ns-button {
110
132
  width: 104px;
111
133
  }
134
+ .app-verify .buttons .cancel-btn {
135
+ border: 1px solid #969696 !important;
136
+ }
112
137
  .dd-notice-bar {
113
138
  position: fixed;
114
139
  top: 0;
@@ -162,6 +187,14 @@
162
187
  width: 24px;
163
188
  height: 24px;
164
189
  }
190
+ .ocr-icon {
191
+ width: 24px;
192
+ height: 24px;
193
+ }
194
+ .ocr-icon .ns-icon {
195
+ width: 24px;
196
+ height: 24px;
197
+ }
165
198
  .recharge-view {
166
199
  height: 100%;
167
200
  display: flex;
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ import '@nutui/nutui-taro/dist/packages/step/style/css';
25
25
 
26
26
  const _hoisted_1$E = { class: "token-line number" };
27
27
  const _hoisted_2$y = { class: "number" };
28
- var script$H = /* @__PURE__ */ defineComponent({
28
+ var script$I = /* @__PURE__ */ defineComponent({
29
29
  __name: "AmountPicker",
30
30
  props: {
31
31
  items: { type: Array, required: true, default: () => [] },
@@ -94,7 +94,7 @@ var script$H = /* @__PURE__ */ defineComponent({
94
94
  }
95
95
  });
96
96
 
97
- script$H.__file = "src/payment/components/AmountPicker.vue";
97
+ script$I.__file = "src/payment/components/AmountPicker.vue";
98
98
 
99
99
  const _hoisted_1$D = { class: "agreement-doc" };
100
100
  const _hoisted_2$x = /* @__PURE__ */ createStaticVNode('<h1>\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u670D\u52A1\u534F\u8BAE</h1><p>2023-12-01</p><p>\xA0</p><p>\u6B22\u8FCE\u60A8\u4F7F\u7528\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u670D\u52A1\uFF01</p><p>\xA0</p><p>\u3010\u63D0\u793A\u6761\u6B3E\u3011</p><p> \u6B22\u8FCE\u60A8\u4E0E\u5927\u9053\u4E91\u5E73\u53F0\u670D\u52A1\u63D0\u4F9B\u8005\u7B7E\u7F72\u300A\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u5145\u503C\u670D\u52A1\u534F\u8BAE\u300B\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u672C\u534F\u8BAE\u201D\uFF09\u5E76\u4F7F\u7528\u5927\u9053\u4E91\u5E73\u53F0\u4E91\u8C46\u503C\u670D\u52A1\uFF01\u60A8\u7406\u89E3\u548C\u540C\u610F\u672C\u534F\u8BAE\u7CFB\u6839\u636E\u300A\u7528\u6237\u6CE8\u518C\u534F\u8BAE\u300B\u7B49\u534F\u8BAE\u5236\u5B9A\uFF0C\u672C\u534F\u8BAE\u4E3A\u524D\u8FF0\u534F\u8BAE\u4E0D\u53EF\u5206\u5272\u7684\u4E00\u90E8\u5206\uFF0C\u672C\u534F\u8BAE\u672A\u89C4\u5B9A\u7684\uFF0C\u9002\u7528\u300A\u7528\u6237\u6CE8\u518C\u534F\u8BAE\u300B\u7B49\u534F\u8BAE\u4E2D\u7684\u76F8\u5173\u7EA6\u5B9A\u3002 </p><p>\xA0</p><p>\u3010\u5BA1\u614E\u9605\u8BFB\u3011</p><p><span class="bold">\u5728\u4F7F\u7528\u672C\u670D\u52A1\u524D\uFF0C\u8BF7\u60A8\u52A1\u5FC5\u5BA1\u614E\u9605\u8BFB\u3001\u5145\u5206\u7406\u89E3\u5404\u6761\u6B3E\u5185\u5BB9\uFF0C\u7279\u522B\u662F\u514D\u9664\u6216\u9650\u5236\u8D23\u4EFB\u7684\u76F8\u5E94\u6761\u6B3E\uFF0C\u4EE5\u53CA\u5F00\u901A\u6216\u4F7F\u7528\u67D0\u9879\u670D\u52A1\u7684\u5355\u72EC\u534F\u8BAE\uFF0C\u60A8\u4F7F\u7528\u6B64\u670D\u52A1\u5373\u8868\u793A\u60A8\u63A5\u53D7\u672C\u534F\u8BAE\u3002\u9650\u5236\u6216\u514D\u9664\u8D23\u4EFB\u6761\u6B3E\u53EF\u80FD\u4EE5\u52A0\u7C97\u5F62\u5F0F\u63D0\u793A\u60A8\u6CE8\u610F\u3002</span></p><p>\xA0</p><p>\u3010\u7279\u522B\u63D0\u793A\u3011</p><p><span class="bold">\u5145\u503C\u7528\u6237\u786E\u8BA4\uFF0C\u81EA\u5DF1\u4E3A\u5E74\u6EE118\u5468\u5C81\u4E14\u5177\u6709\u5B8C\u5168\u6C11\u4E8B\u884C\u4E3A\u80FD\u529B\u7684\u6210\u5E74\u4EBA\uFF0C\u9664\u975E\u60A8\u5DF2\u9605\u8BFB\u5E76\u63A5\u53D7\u672C\u534F\u8BAE\u6240\u6709\u6761\u6B3E\uFF0C\u5426\u5219\u60A8\u65E0\u6743\u4F7F\u7528\u5927\u9053\u4E91\u5E73\u53F0\u5145\u503C\u670D\u52A1\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u672C\u670D\u52A1\u201D\uFF09\u3002\u60A8\u5BF9\u672C\u670D\u52A1\u7684\u4EFB\u4F55\u8D2D\u4E70\u3001\u767B\u5F55\u3001\u67E5\u770B\u7B49\u4F7F\u7528\u884C\u4E3A\u5373\u89C6\u4E3A\u60A8\u5DF2\u9605\u8BFB\u5E76\u540C\u610F\u672C\u534F\u8BAE\u7684\u7EA6\u675F\u3002</span></p><p>\xA0</p><p><span class="bold">\u4E00\u3001\u534F\u8BAE\u7684\u8303\u56F4</span></p><p>\xA0</p><p>1.1\u3010\u534F\u8BAE\u9002\u7528\u4E3B\u4F53\u8303\u56F4\u3011</p><p>\u672C\u534F\u8BAE\u662F\u60A8\u4E0E\u5927\u9053\u4E91\u5E73\u53F0\u4E4B\u95F4\u5173\u4E8E\u60A8\u4F7F\u7528\u672C\u670D\u52A1\u6240\u8BA2\u7ACB\u7684\u534F\u8BAE\u3002</p><p>\xA0</p><p>1.2\u3010\u670D\u52A1\u5185\u5BB9\u3011</p><p> \u672C\u534F\u8BAE\u9879\u4E0B\u7684\u670D\u52A1\u662F\u6307\u5927\u9053\u4E91\u5E73\u53F0\u5411\u7528\u6237\u63D0\u4F9B\u7684\u4E91\u8C46\u5145\u503C\u670D\u52A1\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u672C\u670D\u52A1\u201D\uFF09\u3002\u672C\u534F\u8BAE\u5185\u5BB9\u540C\u65F6\u5305\u62EC\u5927\u9053\u4E91\u5E73\u53F0\u53EF\u80FD\u4E0D\u65AD\u53D1\u5E03\u7684\u5173\u4E8E\u672C\u670D\u52A1\u7684\u76F8\u5173\u534F\u8BAE\u3001\u4E1A\u52A1\u89C4\u5219\u7B49\u5185\u5BB9\u3002\u4E0A\u8FF0\u5185\u5BB9\u4E00\u7ECF\u6B63\u5F0F\u53D1\u5E03\uFF0C\u5373\u4E3A\u672C\u534F\u8BAE\u4E0D\u53EF\u5206\u5272\u7684\u7EC4\u6210\u90E8\u5206\uFF0C\u60A8\u540C\u6837\u5E94\u5F53\u9075\u5B88\u3002 </p><p>\xA0</p><p><span class="bold">\u4E8C\u3001\u540D\u8BCD\u5B9A\u4E49</span></p><p>\xA0</p><p><span class="bold">2.1\u3010\u4E91\u8C46\u3011</span></p><p><span class="bold">2.1.1 \u4E91\u8C46\u7CFB\u5927\u9053\u4E91\u5E73\u53F0\u4E3A\u7528\u6237\u63D0\u4F9B\u7684\u6570\u5B57\u5316\u5546\u54C1\uFF0C\u7528\u4E8E\u5927\u9053\u4E91\u5E73\u53F0\u4E0A\u7684\u4EA7\u54C1\u6743\u76CA\u4F7F\u7528\u62B5\u6263\u3002</span></p><p>\xA0</p><p><span class="bold">2.1.2 \u4E91\u8C46\u5C5E\u4E8E\u5728\u7EBF\u4EA4\u4ED8\u7684\u6570\u5B57\u5316\u5546\u54C1\uFF0C\u4E91\u8C46\u7684\u8D2D\u4E70\u8D39\u7528\u7CFB\u6570\u5B57\u5316\u5546\u54C1\u4EF7\u683C\uFF0C\u800C\u4E0D\u5177\u6709\u9884\u4ED8\u6B3E\u6027\u8D28\u6216\u8005\u5B9A\u91D1\u3001\u50A8\u503C\u7B49\u6027\u8D28\uFF0C\u4E91\u8C46\u8D2D\u4E70\u6210\u529F\u540E\u4E0D\u53EF\u8F6C\u8BA9\u6216\u8005\u9006\u5411\u5151\u6362\u4E3A\u4EBA\u6C11\u5E01\u6216\u5176\u4ED6\u8D27\u5E01\u3002</span></p><p><span class="bold">2.1.3 \u4E91\u8C46\u4EC5\u9650\u4E8E\u7528\u6237\u81EA\u5DF1\u8D26\u53F7\u5728\u5927\u9053\u4E91\u5E73\u53F0\u4F7F\u7528\uFF0C\u4E0D\u5F97\u4EE5\u76C8\u5229\u7B49\u975E\u4E2A\u4EBA\u4F7F\u7528\u76EE\u7684\u4F7F\u7528\u4E91\u8C46\uFF0C\u6216\u901A\u8FC7\u8D60\u4E0E\u3001\u51FA\u501F\u3001\u8F6C\u8BA9\u3001\u9500\u552E\u3001\u62B5\u62BC\u3001\u8BB8\u53EF\u4ED6\u4EBA\u4F7F\u7528\u7B49\u65B9\u5F0F\u83B7\u53D6\u6216\u5904\u7F6E\u4E91\u8C46\u3002</span></p><p><span class="bold">2.1.4 \u4EBA\u6C11\u5E01\u548C\u4E91\u8C46\u5151\u6362\u7684\u6BD4\u4F8B\u4E3A1:1\uFF08\u53731\u5143\u4EBA\u6C11\u5E01=1\u4E91\u8C46\uFF09\uFF0C\u4E91\u8C46\u5728\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u5177\u6709\u6CD5\u5B9A\u8D27\u5E01\u7684\u6D41\u8F6C\u53CA\u652F\u4ED8\u529F\u80FD\uFF0C\u4E0D\u5F97\u53CD\u5411\u5151\u6362\u4E3A\u4EBA\u6C11\u5E01\u6216\u5176\u4ED6\u6CD5\u5B9A\u8D27\u5E01\u3001\u5B9E\u7269\u548C\u5176\u4ED6\u865A\u62DF\u8D27\u5E01\uFF0C\u8BF7\u60A8\u6839\u636E\u5B9E\u9645\u9700\u6C42\u8D2D\u4E70\u76F8\u5E94\u6570\u91CF\u7684\u4E91\u8C46\u3002</span></p><p>2.2\u3010\u5927\u9053\u4E91\u5E73\u53F0\u3011</p><p> \u6307\u7531<span class="bold">\u5927\u9053\u4E91\u5E73\u53F0\u6240\u62E5\u6709\u3001\u63A7\u5236\u3001\u7ECF\u8425\u7684\u5927\u9053\u4E91\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F\u3001\u8702\u9E1F\u6C47\u4E91\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F\u3001\u8702\u9E1F\u5C45\u95F4\u7CFB\u7EDF\u3001\u8702\u9E1F\u5468\u8F6C\u7CFB\u7EDF\u3002</span></p><p>\xA0</p><p><span class="bold">\u4E09\u3001\u6743\u5229\u4E49\u52A1</span></p><p>\xA0</p><p> 3.1.1 \u60A8\u627F\u8BFA\u5177\u5907\u4F7F\u7528\u672C\u670D\u52A1\u6240\u5FC5\u9700\u7684\u6C11\u4E8B\u80FD\u529B\u548C\u5408\u6CD5\u8D44\u683C\uFF0C\u6709\u6743\u4E14\u6709\u80FD\u529B\u540C\u610F\u672C\u534F\u8BAE\u53CA\u76F8\u5173\u534F\u8BAE\u7684\u5168\u90E8\u5185\u5BB9\u3002 </p><p> 3.1.2 <span class="bold">\u60A8\u5E94\u59A5\u5584\u4FDD\u7BA1\u5927\u9053\u4E91\u5E73\u53F0\u8D26\u53F7\u7684\u7528\u6237\u540D\u53CA\u5176\u5BC6\u7801\uFF0C\u5E76\u5BF9\u8BE5\u8D26\u53F7\u4E0B\u7684\u4E00\u5207\u64CD\u4F5C\u884C\u4E3A\u8D1F\u8D23\u3002\u5982\u60A8\u7684\u5927\u9053\u4E91\u8D26\u53F7\u5B58\u5728\u5F02\u5E38\u60C5\u5F62\uFF0C\u60A8\u53EF\u4EE5\u8054\u7CFB\u5BA2\u670D\u6302\u5931\u6216\u51BB\u7ED3\u60A8\u7684\u8D26\u6237\u3002\u6B64\u65F6\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u9700\u8981\u60A8\u63D0\u4F9B\u5927\u9053\u4E91\u8D26\u53F7\u7684\u6CE8\u518C\u4FE1\u606F\u4EE5\u5B8C\u6210\u8EAB\u4EFD\u6838\u9A8C\u3002\u60A8\u7406\u89E3\u5E76\u786E\u8BA4\uFF0C\u7531\u4E8E\u6280\u672F\u5C40\u9650\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u65E0\u6CD5\u4FDD\u8BC1\u8EAB\u4EFD\u6838\u9A8C\u7684\u51C6\u786E\u6027\u548C\u771F\u5B9E\u6027\u3002</span></p><p> 3.1.3 \u60A8\u627F\u8BFA\u4E0D\u5F97\u901A\u8FC7\u975E\u5927\u9053\u4E91\u5E73\u53F0\u6307\u5B9A\u9014\u5F84\u6216\u4EFB\u4F55\u8FDD\u53CD\u76F8\u5173\u6CD5\u89C4\u3001\u8FDD\u53CD\u672C\u534F\u8BAE\u3001\u4E0D\u6B63\u5F53\u624B\u6BB5\u7B49\u8D2D\u4E70\u4E91\u8C46\u3002 </p><p> 3.1.4 \u5927\u9053\u4E91\u5E73\u53F0\u53EF\u80FD\u4F1A\u6839\u636E\u672C\u670D\u52A1\u7684\u6574\u4F53\u89C4\u5212\uFF0C\u5BF9\u672C\u670D\u52A1\u7684\u6536\u8D39\u6807\u51C6\u3001\u65B9\u5F0F\u7B49\u8FDB\u884C\u4FEE\u6539\u548C\u53D8\u66F4\uFF0C\u524D\u8FF0\u4FEE\u6539\u3001\u53D8\u66F4\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u5C06\u5728\u76F8\u5E94\u670D\u52A1\u9875\u9762\u8FDB\u884C\u901A\u77E5\u6216\u516C\u544A\u3002\u5982\u679C\u60A8\u4E0D\u540C\u610F\u4E0A\u8FF0\u4FEE\u6539\u3001\u53D8\u66F4\uFF0C\u5219\u5E94\u505C\u6B62\u4F7F\u7528\u672C\u670D\u52A1\u3002\u5426\u5219\uFF0C\u60A8\u7684\u4EFB\u4F55\u8D2D\u4E70\u3001\u767B\u5F55\u3001\u67E5\u770B\u7B49\u4F7F\u7528\u884C\u4E3A\uFF0C\u5373\u89C6\u4E3A\u60A8\u540C\u610F\u4E0A\u8FF0\u4FEE\u6539\u3001\u53D8\u66F4\u3002 </p><p> 3.1.5 \u5927\u9053\u4E91\u5E73\u53F0\u5728\u76EE\u524D\u6280\u672F\u6C34\u5E73\u4E0B\uFF0C\u6700\u5927\u7A0B\u5EA6\u5730\u4FDD\u969C\u672C\u529F\u80FD\u7684\u6B63\u5E38\u8FD0\u884C\uFF0C\u4EE5\u7EF4\u62A4\u4F60\u7684\u5229\u76CA\u3002\u5927\u9053\u4E91\u5E73\u53F0\u5BF9\u672C\u670D\u52A1\u4E0D\u4F5C\u4EFB\u4F55\u660E\u793A\u6216\u6697\u793A\u7684\u4FDD\u8BC1\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u5BF9\u672C\u670D\u52A1\u7684\u53EF\u9002\u7528\u6027\u3001\u6301\u7EED\u6027\u7B49\u3002 </p><p>\xA0</p><p><span class="bold">\u56DB\u3001\u4E91\u8C46\u4F7F\u7528\u89C4\u5219\u53CA\u7279\u522B\u7EA6\u5B9A</span></p><p>\xA0</p><p><span class="bold">4.1 \u5927\u9053\u4E91\u5E73\u53F0\u5411\u60A8\u63D0\u4F9B\u8D2D\u4E70\u3001\u7BA1\u7406\u4E91\u8C46\u6709\u5173\u7684\u7F51\u7EDC\u589E\u503C\u670D\u52A1\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u4E91\u8C46\u7684\u8D2D\u4E70\u3001\u8D26\u6237\u7BA1\u7406\u9875\u9762\u3001\u4EA4\u6613\u660E\u7EC6\u67E5\u8BE2\u670D\u52A1\uFF08\u4EE5\u4E0B\u79F0\u201C\u4E91\u8C46\u670D\u52A1\u201D\uFF09\u3002\u4E91\u8C46\u670D\u52A1\u7684\u5177\u4F53\u5185\u5BB9\u8BF7\u4EE5\u76F8\u5173\u9875\u9762\u7684\u4FE1\u606F\u4E3A\u51C6\u3002\u60A8\u540C\u610F\u4EE5\u5927\u9053\u4E91\u5E73\u53F0\u7559\u5B58\u7684\u4EA4\u6613\u8BB0\u5F55\u4F5C\u4E3A\u4E91\u8C46\u8D2D\u4E70\u7684\u552F\u4E00\u6709\u6548\u4F9D\u636E\uFF0C\u5982\u60A8\u5BF9\u5927\u9053\u4E91\u5E73\u53F0\u7559\u5B58\u7684\u4EA4\u6613\u8BB0\u5F55\u6709\u5F02\u8BAE\uFF0C\u60A8\u5E94\u7ACB\u5373\u5411\u5927\u9053\u4E91\u5E73\u53F0\u63D0\u51FA\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u7ECF\u6838\u5BF9\u540E\u53D1\u73B0\u786E\u6709\u9519\u8BEF\u7684\uFF0C\u5C06\u4E88\u4EE5\u6539\u6B63\u3002</span></p><p><span class="bold">4.2. \u60A8\u5E94\u8BE5\u901A\u8FC7\u5927\u9053\u4E91\u5E73\u53F0\u5B98\u65B9\u6307\u5B9A\u7684\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u652F\u4ED8\u5B9D\u3001\u8D22\u4ED8\u901A\u7B49\u65B9\u5F0F\u4F9D\u7EA6\u652F\u4ED8\u4E00\u5B9A\u8D39\u7528\u540E\u8D2D\u4E70\u4E91\u8C46\u3002</span></p><p><span class="bold">4.3 \u60A8\u5FC5\u987B\u4E3A\u7ED1\u5B9A\u7684\u652F\u4ED8\u6E20\u9053\u8D26\u6237\u5F00\u6237\u4EBA/\u6301\u6709\u4EBA\uFF0C\u53EF\u5408\u6CD5\u3001\u6709\u6548\u4F7F\u7528\u8BE5\u8D26\u6237\u4E14\u672A\u4FB5\u72AF\u4EFB\u4F55\u7B2C\u4E09\u65B9\u6743\u76CA\uFF0C\u5426\u5219\u56E0\u6B64\u9020\u6210\u652F\u4ED8\u8D26\u6237\u5B9E\u9645\u6240\u6709\u4EBA\u635F\u5931\u7684\uFF0C\u5E94\u7531\u60A8\u5355\u72EC\u8D1F\u8D23\u89E3\u51B3\u7531\u6B64\u4EA7\u751F\u7684\u7EA0\u7EB7\u5E76\u627F\u62C5\u5168\u90E8\u6CD5\u5F8B\u8D23\u4EFB\u3002</span></p><p><span class="bold">4.4 \u60A8\u5E94\u5728\u8D2D\u4E70\u4E91\u8C46\u65F6\u4ED4\u7EC6\u786E\u8BA4\u8D26\u53F7\u3001\u652F\u4ED8\u8D26\u6237\u3001\u8D2D\u4E70\u6570\u91CF\u3001\u8D2D\u4E70\u8D39\u7528\u7B49\u4EA4\u6613\u4FE1\u606F\u51C6\u786E\u65E0\u8BEF\uFF0C\u5982\u56E0\u60A8\u81EA\u8EAB\u539F\u56E0\uFF08\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u8D26\u53F7\u9519\u8BEF\u3001\u652F\u4ED8\u8D26\u6237\u9519\u8BEF\u3001\u64CD\u4F5C\u4E0D\u5F53\u3001\u8D26\u53F7/\u652F\u4ED8\u8D26\u6237\u5B58\u5728\u5F02\u5E38\u60C5\u51B5\u7B49\uFF09\u5BFC\u81F4\u7684\u4EFB\u4F55\u635F\u5931\u5E94\u7531\u60A8\u81EA\u884C\u627F\u62C5\u3002</span></p><p><span class="bold">4.5 \u5927\u9053\u4E91\u5E73\u53F0\u6709\u6743\u51B3\u5B9A\u4E91\u8C46\u5982\u4F55\u88AB\u4F7F\u7528\uFF08\u5305\u62EC\u5151\u6362\u865A\u62DF\u5546\u54C1\u7B49\u4E8E\u5927\u9053\u4E91\u5E73\u53F0\u4E0A\u4F7F\u7528\u7684\u4EA7\u54C1\u6216\u670D\u52A1\uFF09\u3002</span></p><p>\xA0</p><p><span class="bold">\u4E94\u3001\u884C\u4E3A\u89C4\u8303</span></p><p>\xA0</p><p>5.1\u3010\u7528\u6237\u7981\u6B62\u884C\u4E3A\u3011</p><p>\u672C\u670D\u52A1\u4EC5\u4F9B\u60A8\u4E2A\u4EBA\u4F7F\u7528\uFF0C\u9664\u975E\u7ECF\u5927\u9053\u4E91\u5E73\u53F0\u4E66\u9762\u8BB8\u53EF\uFF0C\u60A8\u4E0D\u5F97\u8FDB\u884C\u4EE5\u4E0B\u884C\u4E3A\uFF1A</p><p>5.1.1 \u5C06\u672C\u670D\u52A1\u8F6C\u8BA9\u8BB8\u53EF\u4ED6\u4EBA\u4F7F\u7528\uFF1B</p><p>5.1.2 \u5176\u4ED6\u672A\u7ECF\u5927\u9053\u4E91\u5E73\u53F0\u4E66\u9762\u8BB8\u53EF\u7684\u884C\u4E3A\u3002</p><p>5.2\u3010\u884C\u4E3A\u8D23\u4EFB\u3011</p><p><span class="bold">\u60A8\u5145\u5206\u4E86\u89E3\u5E76\u540C\u610F\uFF0C\u60A8\u7528\u4EE5\u53C2\u4E0E\u672C\u670D\u52A1\u7684\u5927\u9053\u4E91\u8D26\u53F7\u7531\u60A8\u72EC\u7ACB\u7EF4\u62A4\u3001\u4F7F\u7528\u5E76\u72EC\u7ACB\u627F\u62C5\u5168\u90E8\u8D23\u4EFB\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u4E0D\u4F1A\u3001\u4E5F\u4E0D\u53EF\u80FD\u53C2\u4E0E\u8BE5\u8D26\u53F7\u7684\u4F7F\u7528\u7B49\u4EFB\u4F55\u6D3B\u52A8\u3002\u60A8\u5E94\u5BF9\u672C\u670D\u52A1\u4E2D\u7684\u5185\u5BB9\u81EA\u884C\u52A0\u4EE5\u5224\u65AD\uFF0C\u5E76\u627F\u62C5\u56E0\u4F7F\u7528\u5185\u5BB9\u800C\u5F15\u8D77\u7684\u6240\u6709\u98CE\u9669\uFF0C\u5305\u62EC\u56E0\u5BF9\u5185\u5BB9\u7684\u6B63\u786E\u6027\u3001\u5B8C\u6574\u6027\u6216\u5B9E\u7528\u6027\u7684\u4F9D\u8D56\u800C\u4EA7\u751F\u7684\u98CE\u9669\u3002\u5927\u9053\u4E91\u5E73\u53F0\u65E0\u6CD5\u4E14\u4E0D\u4F1A\u5BF9\u56E0\u524D\u8FF0\u98CE\u9669\u800C\u5BFC\u81F4\u7684\u4EFB\u4F55\u635F\u5931\u6216\u635F\u5BB3\u627F\u62C5\u4EFB\u4F55\u8D23\u4EFB\u3002</span></p><p>\xA0</p><p><span class="bold">\u516D\u3001\u670D\u52A1\u7684\u53D8\u66F4\u3001\u4E2D\u6B62\u6216\u7EC8\u6B62</span></p><p>\xA0</p><p> \u60A8\u5145\u5206\u4E86\u89E3\u5E76\u540C\u610F\uFF0C\u7531\u4E8E\u4E92\u8054\u7F51\u670D\u52A1\u7684\u7279\u6B8A\u6027\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u53EF\u4EE5\u5728\u4E0D\u63D0\u524D\u901A\u77E5\u60A8\u7684\u60C5\u51B5\u4E4B\u4E0B\uFF0C\u6839\u636E\u672C\u670D\u52A1\u7684\u6574\u4F53\u89C4\u5212\uFF0C\u5355\u65B9\u6709\u6743\u5BF9\u672C\u670D\u52A1\u5185\u5BB9\u8FDB\u884C\u53D8\u66F4\u3001\u4E2D\u6B62\u6216\u7EC8\u6B62\u3002 </p><p>\xA0</p><p><span class="bold">\u4E03\u3001\u8FDD\u7EA6\u8D23\u4EFB</span></p><p>\xA0</p><p><span class="bold">7.1 \u5982\u679C\u5927\u9053\u4E91\u5E73\u53F0\u53D1\u73B0\u6216\u6536\u5230\u4ED6\u4EBA\u4E3E\u62A5\u60A8\u6709\u8FDD\u53CD\u672C\u534F\u8BAE\u4EFB\u4F55\u884C\u4E3A\u7684\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u6709\u6743\u8FDB\u884C\u72EC\u7ACB\u5224\u65AD\u5E76\u91C7\u53D6\u6280\u672F\u624B\u6BB5\u4E88\u4EE5\u5220\u9664\u3001\u5C4F\u853D\u6216\u65AD\u5F00\u76F8\u5173\u7684\u4FE1\u606F\u3002\u540C\u65F6\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u6709\u6743\u89C6\u60A8\u7684\u884C\u4E3A\u6027\u8D28\uFF0C\u5BF9\u60A8\u91C7\u53D6\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u6682\u505C\u6216\u7EC8\u6B62\u90E8\u5206\u6216\u5168\u90E8\u672C\u670D\u52A1\u3001\u4E2D\u6B62\u6216\u7EC8\u6B62\u60A8\u5BF9\u8D26\u53F7\u7684\u4F7F\u7528\u3001\u8FFD\u7A76\u6CD5\u5F8B\u8D23\u4EFB\u7B49\u63AA\u65BD\uFF0C\u800C\u7531\u6B64\u7ED9\u60A8\u5E26\u6765\u7684\u635F\u5931\uFF08\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u901A\u4FE1\u4E2D\u65AD\u3001\u76F8\u5173\u6570\u636E\u6E05\u7A7A\u3001\u670D\u52A1\u8D39\u7528\u4F5C\u4E3A\u8FDD\u7EA6\u91D1\u800C\u5F52\u5927\u9053\u4E91\u5E73\u53F0\u6240\u6709\u7B49\uFF09\uFF0C\u7531\u60A8\u81EA\u884C\u627F\u62C5\uFF0C\u9020\u6210\u5927\u9053\u4E91\u5E73\u53F0\u635F\u5931\u7684\uFF0C\u60A8\u4E5F\u5E94\u4E88\u4EE5\u8D54\u507F\u3002\u82E5\u5927\u9053\u4E91\u5E73\u53F0\u4F9D\u524D\u8FF0\u7EA6\u5B9A\u5BF9\u60A8\u91C7\u53D6\u6682\u505C\u6216\u7EC8\u6B62\u90E8\u5206\u6216\u5168\u90E8\u672C\u670D\u52A1\u7684\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u65E0\u9700\u5411\u60A8\u9000\u8FD8\u4EFB\u4F55\u8D39\u7528\uFF0C\u5269\u4F59\u7684\u670D\u52A1\u8D39\u7528\uFF0C\u4F5C\u4E3A\u8FDD\u7EA6\u91D1\u800C\u5F52\u5927\u9053\u4E91\u5E73\u53F0\u6240\u6709\u3002</span></p><p>\xA0</p><p>7.2\u3010\u5BF9\u7B2C\u4E09\u65B9\u635F\u5BB3\u7684\u5904\u7406\u3011</p><p> \u60A8\u6709\u8FDD\u53CD\u672C\u534F\u8BAE\u4EFB\u4F55\u884C\u4E3A\uFF0C\u5BFC\u81F4\u4EFB\u4F55\u7B2C\u4E09\u65B9\u635F\u5BB3\u7684\uFF0C\u60A8\u5E94\u5F53\u72EC\u7ACB\u627F\u62C5\u8D23\u4EFB\uFF1B\u5927\u9053\u4E91\u5E73\u53F0\u56E0\u6B64\u906D\u53D7\u635F\u5931\u7684\uFF0C\u60A8\u4E5F\u5E94\u5F53\u4E00\u5E76\u8D54\u507F\u3002 </p><p>\xA0</p><p><span class="bold">7.3\u3010\u5355\u65B9\u63D0\u524D\u7EC8\u6B62\u670D\u52A1\u3011</span></p><p><span class="bold">\u60A8\u5145\u5206\u4E86\u89E3\u5E76\u540C\u610F\uFF0C\u60A8\u5728\u9009\u62E9\u4F7F\u7528\u672C\u670D\u52A1\u540E\uFF0C\u82E5\u60A8\u5728\u65E0\u4EFB\u4F55\u6CD5\u5B9A\u6216\u7EA6\u5B9A\u7406\u7531\u7684\u60C5\u51B5\u4E4B\u4E0B\uFF0C\u5355\u65B9\u8981\u6C42\u63D0\u524D\u7EC8\u6B62\u672C\u670D\u52A1\u7684\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u65E0\u9700\u5411\u60A8\u9000\u8FD8\u4EFB\u4F55\u8D39\u7528\uFF0C\u5269\u4F59\u7684\u670D\u52A1\u8D39\u7528\uFF0C\u4F5C\u4E3A\u8FDD\u7EA6\u91D1\u800C\u5F52\u5927\u9053\u4E91\u5E73\u53F0\u6240\u6709\u3002</span></p><p>\xA0</p><p><span class="bold">\u516B\u3001\u514D\u8D23\u6761\u6B3E</span></p><p>\xA0</p><p><span class="bold">8.1 \u60A8\u7406\u89E3\u5E76\u540C\u610F\uFF1A\u5728\u4F7F\u7528\u672C\u670D\u52A1\u7684\u8FC7\u7A0B\u4E2D\uFF0C\u53EF\u80FD\u4F1A\u56E0\u4E0D\u53EF\u6297\u529B\u800C\u4F7F\u672C\u670D\u52A1\u53D1\u751F\u4E2D\u65AD\uFF0C\u5E76\u56E0\u6B64\u800C\u5F15\u53D1\u635F\u5BB3\u3002\u4E0D\u53EF\u6297\u529B\u662F\u6307\u4E0D\u80FD\u9884\u89C1\u3001\u4E0D\u80FD\u514B\u670D\u5E76\u4E0D\u80FD\u907F\u514D\u4E14\u5BF9\u4E00\u65B9\u6216\u53CC\u65B9\u9020\u6210\u91CD\u5927\u5F71\u54CD\u7684\u5BA2\u89C2\u4E8B\u4EF6\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u81EA\u7136\u707E\u5BB3\u5982\u6D2A\u6C34\u3001\u5730\u9707\u3001\u98CE\u66B4\u3001\u75AB\u60C5\u7B49\u4EE5\u53CA\u793E\u4F1A\u4E8B\u4EF6\u5982\u6218\u4E89\u3001\u52A8\u4E71\u3001\u653F\u5E9C\u884C\u4E3A\u7B49\u3002\u51FA\u73B0\u4E0A\u8FF0\u60C5\u51B5\u65F6\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u5C06\u52AA\u529B\u5728\u7B2C\u4E00\u65F6\u95F4\u4E0E\u76F8\u5173\u5355\u4F4D\u914D\u5408\uFF0C\u53CA\u65F6\u8FDB\u884C\u4FEE\u590D\uFF0C\u82E5\u7531\u6B64\u7ED9\u60A8\u9020\u6210\u635F\u5931\u7684\uFF0C\u60A8\u540C\u610F\u653E\u5F03\u8FFD\u7A76\u5927\u9053\u4E91\u5E73\u53F0\u7684\u8D23\u4EFB\u3002</span></p><p><span class="bold">8.2 \u60A8\u7406\u89E3\u5E76\u540C\u610F\uFF1A\u82E5\u7531\u4E8E\u4EE5\u4E0B\u60C5\u5F62\u5BFC\u81F4\u7684\u529F\u80FD\u4E2D\u65AD\u6216\u53D7\u963B\uFF0C\u5927\u9053\u4E91\u5E73\u53F0\u5E76\u4E0D\u627F\u62C5\u4EFB\u4F55\u6CD5\u5F8B\u8D23\u4EFB\uFF1A</span></p><p><span class="bold">8.2.1 \u53D7\u5230\u8BA1\u7B97\u673A\u75C5\u6BD2\u3001\u6728\u9A6C\u6216\u5176\u4ED6\u6076\u610F\u7A0B\u5E8F\u3001\u9ED1\u5BA2\u653B\u51FB\u7684\u7834\u574F\uFF1B</span></p><p><span class="bold">8.2.2 \u60A8\u64CD\u4F5C\u4E0D\u5F53\uFF1B</span></p><p><span class="bold">8.2.3 \u5176\u4ED6\u5927\u9053\u4E91\u5E73\u53F0\u65E0\u6CD5\u63A7\u5236\u6216\u5408\u7406\u9884\u89C1\u7684\u60C5\u5F62\u3002</span></p><p>\xA0</p><p>\u4E5D\u3001\u5176\u4ED6</p><p>\xA0</p><p>9.1\u3010\u534F\u8BAE\u7684\u751F\u6548\u4E0E\u53D8\u66F4\u3011</p><p> \u60A8\u4F7F\u7528\u672C\u670D\u52A1\u5373\u89C6\u4E3A\u60A8\u5DF2\u9605\u8BFB\u5E76\u540C\u610F\u53D7\u672C\u534F\u8BAE\u7684\u7EA6\u675F\u3002\u5927\u9053\u4E91\u5E73\u53F0\u6709\u6743\u5728\u5FC5\u8981\u65F6\u4FEE\u6539\u672C\u534F\u8BAE\u6761\u6B3E\u3002\u60A8\u53EF\u4EE5\u5728\u76F8\u5173\u9875\u9762\u4E2D\u67E5\u9605\u6700\u65B0\u7684\u534F\u8BAE\u6761\u6B3E\u3002\u672C\u534F\u8BAE\u6761\u6B3E\u53D8\u66F4\u540E\uFF0C\u5982\u679C\u60A8\u7EE7\u7EED\u4F7F\u7528\u672C\u670D\u52A1\uFF0C\u5373\u89C6\u4E3A\u60A8\u5DF2\u63A5\u53D7\u4FEE\u6539\u540E\u7684\u534F\u8BAE\u3002\u5982\u679C\u60A8\u4E0D\u63A5\u53D7\u4FEE\u6539\u540E\u7684\u534F\u8BAE\uFF0C\u5E94\u5F53\u505C\u6B62\u4F7F\u7528\u672C\u670D\u52A1\u3002 </p><p>9.2\u3010\u534F\u8BAE\u7B7E\u8BA2\u5730\u3011</p><p>\u672C\u534F\u8BAE\u7B7E\u8BA2\u5730\u4E3A\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\u6DF1\u5733\u5E02\u5357\u5C71\u533A\u3002</p><p>9.3\u3010\u9002\u7528\u6CD5\u5F8B\u3011</p><p> \u672C\u534F\u8BAE\u7684\u6210\u7ACB\u3001\u751F\u6548\u3001\u5C65\u884C\u3001\u89E3\u91CA\u53CA\u7EA0\u7EB7\u89E3\u51B3\uFF0C\u9002\u7528\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\u5927\u9646\u5730\u533A\u6CD5\u5F8B\uFF08\u4E0D\u5305\u62EC\u51B2\u7A81\u6CD5\uFF09\u3002 </p><p><span class="bold">9.4\u3010\u4E89\u8BAE\u89E3\u51B3\u3011</span></p><p><span class="bold">\u82E5\u60A8\u548C\u5927\u9053\u4E91\u5E73\u53F0\u4E4B\u95F4\u53D1\u751F\u4EFB\u4F55\u7EA0\u7EB7\u6216\u4E89\u8BAE\uFF0C\u9996\u5148\u5E94\u53CB\u597D\u534F\u5546\u89E3\u51B3\uFF1B\u534F\u5546\u4E0D\u6210\u7684\uFF0C\u5404\u65B9\u5171\u540C\u7EA6\u5B9A\uFF0C\u51E1\u56E0\u672C\u534F\u8BAE\u5F15\u8D77\u7684\u6216\u4E0E\u672C\u534F\u8BAE\u6709\u5173\u7684\u4EFB\u4F55\u4E89\u8BAE\uFF0C\u5747\u63D0\u4EA4\u6E5B\u6C5F\u4EF2\u88C1\u59D4\u5458\u4F1A\u4F9D\u5176\u89C4\u5219\u548C\u56FD\u5BB6\u6CD5\u5F8B\u6CD5\u89C4\u4ECE\u901F\u4EF2\u88C1\u3002</span></p><p>9.5\u3010\u6761\u6B3E\u6807\u9898\u3011</p><p>\u672C\u534F\u8BAE\u6240\u6709\u6761\u6B3E\u7684\u6807\u9898\u4EC5\u4E3A\u9605\u8BFB\u65B9\u4FBF\uFF0C\u672C\u8EAB\u5E76\u65E0\u5B9E\u9645\u6DB5\u4E49\uFF0C\u4E0D\u80FD\u4F5C\u4E3A\u672C\u534F\u8BAE\u6DB5\u4E49\u89E3\u91CA\u7684\u4F9D\u636E\u3002</p><p>9.6\u3010\u6761\u6B3E\u6548\u529B\u3011</p><p>\u672C\u534F\u8BAE\u6761\u6B3E\u65E0\u8BBA\u56E0\u4F55\u79CD\u539F\u56E0\u90E8\u5206\u65E0\u6548\u6216\u4E0D\u53EF\u6267\u884C\uFF0C\u5176\u4F59\u6761\u6B3E\u4ECD\u6709\u6548\uFF0C\u5BF9\u53CC\u65B9\u4ECD\u5177\u6709\u7EA6\u675F\u529B\u3002</p><p>\xA0</p><p>\xA0</p>', 96);
@@ -105,10 +105,10 @@ function render$2(_ctx, _cache) {
105
105
  return openBlock(), createElementBlock("view", _hoisted_1$D, [..._hoisted_98]);
106
106
  }
107
107
 
108
- /* unplugin-vue-components disabled */const script$G = {};
108
+ /* unplugin-vue-components disabled */const script$H = {};
109
109
 
110
- script$G.render = render$2;
111
- script$G.__file = "src/payment/components/UserAgreement.vue";
110
+ script$H.render = render$2;
111
+ script$H.__file = "src/payment/components/UserAgreement.vue";
112
112
 
113
113
  function requestPayment$2(json) {
114
114
  return new Promise((resolve, reject) => {
@@ -311,6 +311,7 @@ function useCrypto(config) {
311
311
  return result;
312
312
  };
313
313
  const resolve = (list, field) => {
314
+ if (list.length === 0) return [];
314
315
  const [first] = list, f = field ? Array.isArray(field) ? field : [field] : Object.entries(first).filter(([_, v]) => /^\{.*\}$/.test(v)).map(([k]) => k);
315
316
  return list.map((item) => {
316
317
  let result = { ...item };
@@ -333,7 +334,7 @@ const _hoisted_1$C = {
333
334
  key: 0,
334
335
  class: "page-title"
335
336
  };
336
- var script$F = /* @__PURE__ */ defineComponent({
337
+ var script$G = /* @__PURE__ */ defineComponent({
337
338
  __name: "PageHeader",
338
339
  props: {
339
340
  title: { type: String, required: false, default: "" },
@@ -381,10 +382,10 @@ var script$F = /* @__PURE__ */ defineComponent({
381
382
  }
382
383
  });
383
384
 
384
- script$F.__file = "src/shared/components/PageHeader.vue";
385
+ script$G.__file = "src/shared/components/PageHeader.vue";
385
386
 
386
387
  const _hoisted_1$B = { class: "drawer-body" };
387
- var script$E = /* @__PURE__ */ defineComponent({
388
+ var script$F = /* @__PURE__ */ defineComponent({
388
389
  __name: "AppDrawer",
389
390
  props: {
390
391
  modelValue: { type: Boolean, required: true },
@@ -408,7 +409,7 @@ var script$E = /* @__PURE__ */ defineComponent({
408
409
  "onUpdate:visible": onVisibleChange
409
410
  }, {
410
411
  default: withCtx(() => [
411
- createVNode(script$F, {
412
+ createVNode(script$G, {
412
413
  title: _ctx.title,
413
414
  onClose: onPageHeaderClose
414
415
  }, null, 8, ["title"]),
@@ -423,17 +424,18 @@ var script$E = /* @__PURE__ */ defineComponent({
423
424
  }
424
425
  });
425
426
 
426
- script$E.__file = "src/shared/components/AppDrawer.vue";
427
+ script$F.__file = "src/shared/components/AppDrawer.vue";
427
428
 
428
429
  const _hoisted_1$A = { class: "app-verify column" };
429
430
  const _hoisted_2$w = { class: "caption" };
430
431
  const _hoisted_3$r = { class: "number" };
431
- const _hoisted_4$l = {
432
+ const _hoisted_4$l = { class: "form-btn" };
433
+ const _hoisted_5$h = {
432
434
  key: 1,
433
435
  class: "caption"
434
436
  };
435
- const _hoisted_5$h = { class: "row buttons" };
436
- var script$D = /* @__PURE__ */ defineComponent({
437
+ const _hoisted_6$c = { class: "row buttons" };
438
+ var script$E = /* @__PURE__ */ defineComponent({
437
439
  __name: "AppVerify",
438
440
  props: {
439
441
  phone: { type: String, required: true },
@@ -489,47 +491,48 @@ var script$D = /* @__PURE__ */ defineComponent({
489
491
  ),
490
492
  createVNode(unref(NsForm), {
491
493
  modelValue: unref(formData),
492
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(formData) ? formData.value = $event : formData = $event)
494
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(formData) ? formData.value = $event : formData = $event),
495
+ class: "form"
493
496
  }, {
494
497
  default: withCtx(() => [
495
498
  createVNode(unref(NsInput), {
499
+ class: "form-input",
496
500
  name: "code",
497
501
  modelValue: unref(formData).code,
498
502
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(formData).code = $event),
499
503
  placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
504
+ maxlength: "6",
500
505
  variant: "solid",
501
506
  rules: ["required", {
502
507
  name: "function",
503
508
  message: "\u8F93\u5165\u9519\u8BEF, \u8BF7\u91CD\u65B0\u8F93\u5165",
504
509
  method: (value) => value.length === 6
505
510
  }]
506
- }, {
507
- append: withCtx(() => [
508
- !sent.value ? (openBlock(), createBlock(unref(NsButton), {
509
- key: 0,
510
- size: "xs",
511
- variant: "plain",
512
- color: "primary",
513
- onClick: send,
514
- label: "\u83B7\u53D6\u9A8C\u8BC1\u7801"
515
- })) : createCommentVNode("v-if", true),
516
- sent.value ? (openBlock(), createElementBlock(
517
- "div",
518
- _hoisted_4$l,
519
- toDisplayString(countdown.value) + " \u79D2\u6536\u91CD\u65B0\u53D1\u9001",
520
- 1
521
- /* TEXT */
522
- )) : createCommentVNode("v-if", true)
523
- ]),
524
- _: 1
525
- /* STABLE */
526
- }, 8, ["modelValue", "rules"])
511
+ }, null, 8, ["modelValue", "rules"]),
512
+ createElementVNode("div", _hoisted_4$l, [
513
+ !sent.value ? (openBlock(), createBlock(unref(NsButton), {
514
+ key: 0,
515
+ size: "xs",
516
+ variant: "plain",
517
+ color: "primary",
518
+ onClick: send,
519
+ label: "\u83B7\u53D6\u9A8C\u8BC1\u7801"
520
+ })) : createCommentVNode("v-if", true),
521
+ sent.value ? (openBlock(), createElementBlock(
522
+ "div",
523
+ _hoisted_5$h,
524
+ toDisplayString(countdown.value) + "s\u540E\u91CD\u65B0\u53D1\u9001",
525
+ 1
526
+ /* TEXT */
527
+ )) : createCommentVNode("v-if", true)
528
+ ])
527
529
  ]),
528
530
  _: 1
529
531
  /* STABLE */
530
532
  }, 8, ["modelValue"]),
531
- createElementVNode("div", _hoisted_5$h, [
533
+ createElementVNode("div", _hoisted_6$c, [
532
534
  createVNode(unref(NsButton), {
535
+ class: "cancel-btn",
533
536
  round: "",
534
537
  onClick: _cache[2] || (_cache[2] = ($event) => emits("cancel"))
535
538
  }, {
@@ -556,7 +559,7 @@ var script$D = /* @__PURE__ */ defineComponent({
556
559
  }
557
560
  });
558
561
 
559
- script$D.__file = "src/shared/components/AppVerify.vue";
562
+ script$E.__file = "src/shared/components/AppVerify.vue";
560
563
 
561
564
  const _hoisted_1$z = { key: 0 };
562
565
  const _hoisted_2$v = /* @__PURE__ */ createElementVNode(
@@ -572,7 +575,7 @@ const _hoisted_2$v = /* @__PURE__ */ createElementVNode(
572
575
  const _hoisted_3$q = [
573
576
  _hoisted_2$v
574
577
  ];
575
- var script$C = /* @__PURE__ */ defineComponent({
578
+ var script$D = /* @__PURE__ */ defineComponent({
576
579
  __name: "index",
577
580
  props: {
578
581
  text: { type: String, required: false },
@@ -623,7 +626,7 @@ var script$C = /* @__PURE__ */ defineComponent({
623
626
  }
624
627
  });
625
628
 
626
- script$C.__file = "src/components/dd-notice-bar/index.vue";
629
+ script$D.__file = "src/components/dd-notice-bar/index.vue";
627
630
 
628
631
  const typeMappings = {
629
632
  CZ: "\u5145\u503C",
@@ -810,7 +813,7 @@ function useHttp$3() {
810
813
  return $http;
811
814
  }
812
815
 
813
- var script$B = /* @__PURE__ */ defineComponent({
816
+ var script$C = /* @__PURE__ */ defineComponent({
814
817
  __name: "DeviceVersion",
815
818
  setup(__props) {
816
819
  const showAlert = ref(false);
@@ -849,7 +852,7 @@ var script$B = /* @__PURE__ */ defineComponent({
849
852
  }
850
853
  });
851
854
  return (_ctx, _cache) => {
852
- return showAlert.value ? (openBlock(), createBlock(script$C, {
855
+ return showAlert.value ? (openBlock(), createBlock(script$D, {
853
856
  key: 0,
854
857
  showClose: "",
855
858
  style: normalizeStyle(topStype.value),
@@ -860,9 +863,9 @@ var script$B = /* @__PURE__ */ defineComponent({
860
863
  }
861
864
  });
862
865
 
863
- script$B.__file = "src/shared/components/DeviceVersion.vue";
866
+ script$C.__file = "src/shared/components/DeviceVersion.vue";
864
867
 
865
- var script$A = /* @__PURE__ */ defineComponent({
868
+ var script$B = /* @__PURE__ */ defineComponent({
866
869
  __name: "OcrIcon",
867
870
  emits: ["complete"],
868
871
  setup(__props, { emit: __emit }) {
@@ -961,7 +964,104 @@ var script$A = /* @__PURE__ */ defineComponent({
961
964
  }
962
965
  });
963
966
 
964
- script$A.__file = "src/shared/components/OcrIcon.vue";
967
+ script$B.__file = "src/shared/components/OcrIcon.vue";
968
+
969
+ var script$A = /* @__PURE__ */ defineComponent({
970
+ __name: "OcrBusinessLicense",
971
+ emits: ["complete"],
972
+ setup(__props, { emit: __emit }) {
973
+ const appKitOptions = useAppKitOptions();
974
+ const emits = __emit;
975
+ async function taroImgCompress(src, quality = 80) {
976
+ return new Promise((resolve, reject) => {
977
+ Taro.compressImage({
978
+ src,
979
+ quality,
980
+ success: (res) => {
981
+ resolve(res);
982
+ },
983
+ fail: (res) => {
984
+ reject(res);
985
+ }
986
+ });
987
+ });
988
+ }
989
+ function getCompressQuality(size) {
990
+ let quality = 100;
991
+ const curSize = size / (1024 * 1024);
992
+ if (curSize > 6) {
993
+ quality = quality - (curSize - 6) / curSize * 100;
994
+ }
995
+ return quality;
996
+ }
997
+ function allTrim(str) {
998
+ return str.replace(/\s+/g, "");
999
+ }
1000
+ async function onIconClick() {
1001
+ console.log("===onIconClick");
1002
+ let result = null;
1003
+ try {
1004
+ const csRes = await Taro.chooseImage({
1005
+ count: 1
1006
+ });
1007
+ let { path, size } = csRes.tempFiles[0];
1008
+ const compressImg = await taroImgCompress(path, getCompressQuality(size)) || {};
1009
+ const filePath = compressImg.tempFilePath || path;
1010
+ Taro.showLoading({ title: "\u8425\u4E1A\u6267\u7167\u8BC6\u522B\u4E2D.." });
1011
+ const session = appKitOptions.token();
1012
+ const baseUrl = appKitOptions.baseUrl();
1013
+ const upRes = await Taro.uploadFile({
1014
+ url: baseUrl + "/promoact/common/parseBusinessLicense",
1015
+ filePath,
1016
+ name: "file",
1017
+ formData: {
1018
+ objectNo: `min${Date.now()}`
1019
+ },
1020
+ header: {
1021
+ sessionKey: session || "",
1022
+ token: session || ""
1023
+ }
1024
+ });
1025
+ Taro.hideLoading();
1026
+ const res = JSON.parse(upRes.data);
1027
+ if (res.code === "200") {
1028
+ const faceInfo = res.result || {};
1029
+ result = {
1030
+ companyName: allTrim(faceInfo.companyName || ""),
1031
+ idCardNo: allTrim(faceInfo.idCardNo || ""),
1032
+ legalPersonName: allTrim(faceInfo.legalPersonName || ""),
1033
+ fileId: faceInfo.fileId,
1034
+ originalUrl: faceInfo.originalUrl,
1035
+ downloadUrl: faceInfo.downloadUrl
1036
+ };
1037
+ console.log("===\u8BC6\u522B", result);
1038
+ if (!result.companyName && !result.idCardNo) {
1039
+ Taro.showToast({ title: "\u8BC6\u522B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5", icon: "none" });
1040
+ }
1041
+ } else {
1042
+ Taro.showToast({
1043
+ title: res.msg,
1044
+ icon: "error"
1045
+ });
1046
+ }
1047
+ } catch (err) {
1048
+ Taro.hideLoading();
1049
+ console.log(err);
1050
+ }
1051
+ emits("complete", result);
1052
+ }
1053
+ return (_ctx, _cache) => {
1054
+ return openBlock(), createElementBlock("div", {
1055
+ class: "ocr-icon",
1056
+ onClick: onIconClick
1057
+ }, [
1058
+ createVNode(unref(NsIcon), { name: "https://simple.shensi.tech/icons/ocr.svg" })
1059
+ ]);
1060
+ };
1061
+ }
1062
+ });
1063
+
1064
+ script$A.__file = "src/shared/components/OcrBusinessLicense.vue";
965
1065
 
966
1066
  var HttpMethod = /* @__PURE__ */ ((HttpMethod2) => {
967
1067
  HttpMethod2["get"] = "GET";
@@ -1330,7 +1430,7 @@ var script$z = /* @__PURE__ */ defineComponent({
1330
1430
  const _component_nut_button = Button;
1331
1431
  return openBlock(), createElementBlock("view", _hoisted_1$y, [
1332
1432
  createElementVNode("view", _hoisted_2$u, [
1333
- createVNode(script$H, {
1433
+ createVNode(script$I, {
1334
1434
  items: amounts.value,
1335
1435
  selected: state.selected,
1336
1436
  onChange: onAmountSelect
@@ -1367,13 +1467,13 @@ var script$z = /* @__PURE__ */ defineComponent({
1367
1467
  /* STABLE */
1368
1468
  }, 8, ["loading"])
1369
1469
  ]),
1370
- createVNode(unref(script$E), {
1470
+ createVNode(unref(script$F), {
1371
1471
  modelValue: state.agreementOpen,
1372
1472
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => state.agreementOpen = $event),
1373
1473
  title: "\u5145\u503C\u534F\u8BAE"
1374
1474
  }, {
1375
1475
  default: withCtx(() => [
1376
- createVNode(script$G)
1476
+ createVNode(script$H)
1377
1477
  ]),
1378
1478
  _: 1
1379
1479
  /* STABLE */
@@ -1753,13 +1853,13 @@ var script$w = /* @__PURE__ */ defineComponent({
1753
1853
  }, 8, ["loading"])
1754
1854
  ])
1755
1855
  ]),
1756
- createVNode(unref(script$E), {
1856
+ createVNode(unref(script$F), {
1757
1857
  modelValue: state.agreementOpen,
1758
1858
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => state.agreementOpen = $event),
1759
1859
  title: "\u5145\u503C\u534F\u8BAE"
1760
1860
  }, {
1761
1861
  default: withCtx(() => [
1762
- createVNode(script$G)
1862
+ createVNode(script$H)
1763
1863
  ]),
1764
1864
  _: 1
1765
1865
  /* STABLE */
@@ -1814,9 +1914,9 @@ var script$w = /* @__PURE__ */ defineComponent({
1814
1914
  script$w.__file = "src/payment/components/TradeView.vue";
1815
1915
 
1816
1916
  const components = {
1817
- AmountPicker: script$H,
1917
+ AmountPicker: script$I,
1818
1918
  RechargeView: script$z,
1819
- UserAgreement: script$G,
1919
+ UserAgreement: script$H,
1820
1920
  RechargeResult: script$y,
1821
1921
  TradeView: script$w
1822
1922
  };
@@ -2710,7 +2810,7 @@ var script$p = /* @__PURE__ */ defineComponent({
2710
2810
  [
2711
2811
  createElementVNode("div", _hoisted_1$o, [
2712
2812
  createElementVNode("div", _hoisted_2$k, [
2713
- createVNode(unref(script$F), {
2813
+ createVNode(unref(script$G), {
2714
2814
  "color-mode": "dark",
2715
2815
  title: "\u6211\u7684\u8D26\u6237",
2716
2816
  class: normalizeClass({ "with-background": scrolled.value > 0 }),
@@ -2884,7 +2984,7 @@ var script$p = /* @__PURE__ */ defineComponent({
2884
2984
  _: 1
2885
2985
  /* STABLE */
2886
2986
  }, 8, ["visible"]),
2887
- createVNode(unref(script$E), {
2987
+ createVNode(unref(script$F), {
2888
2988
  modelValue: secondBalanceOpen.value,
2889
2989
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => secondBalanceOpen.value = $event),
2890
2990
  title: "\u6536\u652F\u660E\u7EC6"
@@ -4441,7 +4541,7 @@ var script$e = /* @__PURE__ */ defineComponent({
4441
4541
  Fragment,
4442
4542
  null,
4443
4543
  renderList(bannerMessages.value, (item, key) => {
4444
- return openBlock(), createBlock(script$C, {
4544
+ return openBlock(), createBlock(script$D, {
4445
4545
  class: normalizeClass({ show: key === activeKey.value }),
4446
4546
  key,
4447
4547
  showClose: item.noticeType === 0,
@@ -7712,4 +7812,4 @@ const AppKit = {
7712
7812
  }
7713
7813
  };
7714
7814
 
7715
- export { script$p as AccountView, script$H as AmountPicker, script$E as AppDrawer, script$D as AppVerify, script$v as BalanceCard, script$o as BalanceReminder, script$n as DateRange, script$B as DeviceVersion, script$l as ListFilter, script$1 as LoginSetting, script$e as NoticeBanner, script$d as NoticeEntry, script$b as NoticeList, script$A as OcrIcon, script$F as PageHeader, script$y as RechargeResult, script$z as RechargeView, script$g as SelfRegistration, script$w as TradeView, script$G as UserAgreement, script$7 as UserBinding, script$6 as UserBindingSuccess, script$a as UserEntry, script$3 as UserFeedback, script$2 as UserFeedbackEntry, script$4 as UserHeadCrop, script$8 as UserInfo, script as UserResourceEmpty, components, createHttp, AppKit as default, defaultCryptoConfig, requestPayment$2 as requestPayment, services$1 as services, useAppKit, useCountdown, useCrypto, useEncode, useSafeArea, useTabbar, useUpload, useValidator };
7815
+ export { script$p as AccountView, script$I as AmountPicker, script$F as AppDrawer, script$E as AppVerify, script$v as BalanceCard, script$o as BalanceReminder, script$n as DateRange, script$C as DeviceVersion, script$l as ListFilter, script$1 as LoginSetting, script$e as NoticeBanner, script$d as NoticeEntry, script$b as NoticeList, script$A as OcrBusinessLicense, script$B as OcrIcon, script$G as PageHeader, script$y as RechargeResult, script$z as RechargeView, script$g as SelfRegistration, script$w as TradeView, script$H as UserAgreement, script$7 as UserBinding, script$6 as UserBindingSuccess, script$a as UserEntry, script$3 as UserFeedback, script$2 as UserFeedbackEntry, script$4 as UserHeadCrop, script$8 as UserInfo, script as UserResourceEmpty, components, createHttp, AppKit as default, defaultCryptoConfig, requestPayment$2 as requestPayment, services$1 as services, useAppKit, useCountdown, useCrypto, useEncode, useSafeArea, useTabbar, useUpload, useValidator };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxda/appkit",
3
- "version": "4.0.16",
3
+ "version": "4.1.0",
4
4
  "description": "小程序应用开发包",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.ts",
@@ -3,78 +3,84 @@
3
3
  <h2>{{ title || '手机号验证' }}</h2>
4
4
  <p class="caption">{{ message || '短信将发送至账号绑定手机号' }}</p>
5
5
  <p class="number">{{ phone }}</p>
6
- <ns-form v-model="formData">
6
+ <ns-form v-model="formData" class="form">
7
7
  <ns-input
8
+ class="form-input"
8
9
  name="code"
9
10
  v-model="formData.code"
10
11
  placeholder="请输入验证码"
12
+ maxlength="6"
11
13
  variant="solid"
12
14
  :rules="['required', {
13
- name: 'function',
14
- message: '输入错误, 请重新输入',
15
- method: (value: string) => value.length === 6,
16
- }]"
15
+ name: 'function',
16
+ message: '输入错误, 请重新输入',
17
+ method: (value: string) => value.length === 6,
18
+ }]"
17
19
  >
18
- <template #append>
19
- <ns-button
20
- v-if="!sent"
21
- size="xs"
22
- variant="plain"
23
- color="primary"
24
- @click="send"
25
- label="获取验证码"
26
- />
27
- <div class="caption" v-if="sent">{{ countdown }} 秒收重新发送</div>
28
- </template>
29
20
  </ns-input>
21
+ <div class="form-btn">
22
+ <ns-button
23
+ v-if="!sent"
24
+ size="xs"
25
+ variant="plain"
26
+ color="primary"
27
+ @click="send"
28
+ label="获取验证码"
29
+ />
30
+ <div class="caption" v-if="sent">{{ countdown }}s后重新发送</div>
31
+ </div>
30
32
  </ns-form>
31
33
  <div class="row buttons">
32
- <ns-button round @click="emits('cancel')">取消</ns-button>
33
- <ns-button round gradient="#FFEBC1,#FFD7A7,#FFB875/90" @click="onOk">确认</ns-button>
34
+ <ns-button class="cancel-btn" round @click="emits('cancel')"
35
+ >取消</ns-button
36
+ >
37
+ <ns-button round gradient="#FFEBC1,#FFD7A7,#FFB875/90" @click="onOk"
38
+ >确认</ns-button
39
+ >
34
40
  </div>
35
41
  </div>
36
42
  </template>
37
43
 
38
44
  <script lang="ts" setup>
39
- import { NsForm, NsInput, NsButton } from '@uxda/nutshell/taro'
40
- import { reactive, ref } from 'vue'
45
+ import { NsForm, NsInput, NsButton } from '@uxda/nutshell/taro';
46
+ import { reactive, ref } from 'vue';
41
47
 
42
48
  export interface AppVerifyProps {
43
- phone: string
44
- title?: string
45
- message?: string
46
- onSend?: Function
49
+ phone: string;
50
+ title?: string;
51
+ message?: string;
52
+ onSend?: Function;
47
53
  }
48
54
 
49
- const emits = defineEmits(['complete', 'cancel'])
55
+ const emits = defineEmits(['complete', 'cancel']);
50
56
 
51
57
  const sent = ref(false),
52
- countdown = ref(60)
58
+ countdown = ref(60);
53
59
 
54
60
  let formData = reactive({
55
61
  code: '',
56
- })
62
+ });
57
63
 
58
64
  const send = () => {
59
- sent.value = true
65
+ sent.value = true;
60
66
 
61
- props.onSend && props.onSend()
67
+ props.onSend && props.onSend();
62
68
 
63
- countdown.value = 60
69
+ countdown.value = 60;
64
70
  let timer = setInterval(() => {
65
- countdown.value--
71
+ countdown.value--;
66
72
  if (countdown.value <= 0) {
67
- clearInterval(timer)
68
- sent.value = false
73
+ clearInterval(timer);
74
+ sent.value = false;
69
75
  }
70
- }, 1000)
71
- }
76
+ }, 1000);
77
+ };
72
78
 
73
79
  const onOk = () => {
74
- emits('complete', { code: formData.code })
75
- }
80
+ emits('complete', { code: formData.code });
81
+ };
76
82
 
77
- const props = defineProps<AppVerifyProps>()
83
+ const props = defineProps<AppVerifyProps>();
78
84
  </script>
79
85
 
80
86
  <style lang="scss">
@@ -86,13 +92,38 @@ const props = defineProps<AppVerifyProps>()
86
92
  margin: 10px;
87
93
  }
88
94
  .caption {
89
- font-size: 14px;
90
- color: #666;
95
+ font-size: 10px !important;
96
+ color: #ccc;
97
+ line-height: 21px;
98
+ }
99
+ .number {
100
+ line-height: 21px;
101
+ }
102
+ .form .nut-cell-group__wrap {
103
+ display: flex;
104
+ align-items: center;
105
+ margin: 20px 0 !important;
106
+ .form-input {
107
+ height: 36px;
108
+ line-height: 36px;
109
+ border: none;
110
+ background: #f5f5f5;
111
+ border-radius: 5px;
112
+ flex: 1;
113
+ padding-left: 12px;
114
+ }
115
+ .form-btn {
116
+ margin-left: 12px;
117
+ width: 90px;
118
+ }
91
119
  }
92
120
  .buttons {
93
121
  .ns-button {
94
122
  width: 104px;
95
123
  }
124
+ .cancel-btn {
125
+ border: 1px solid #969696 !important;
126
+ }
96
127
  }
97
128
  }
98
129
  </style>
@@ -0,0 +1,115 @@
1
+ <template>
2
+ <div class="ocr-icon" @click="onIconClick">
3
+ <ns-icon name="https://simple.shensi.tech/icons/ocr.svg" />
4
+ </div>
5
+ </template>
6
+
7
+ <script lang="ts" setup>
8
+ import Taro from '@tarojs/taro';
9
+ import { NsIcon } from '@uxda/nutshell/taro';
10
+ import { useAppKitOptions } from '../../Appkit';
11
+
12
+ const appKitOptions = useAppKitOptions();
13
+
14
+ const emits = defineEmits(['complete']);
15
+
16
+ export type OcrResult = {
17
+ companyName: string;
18
+ idCardNo: string;
19
+ legalPersonName: string;
20
+ };
21
+
22
+ async function taroImgCompress(src: string, quality = 80) {
23
+ return new Promise((resolve, reject) => {
24
+ Taro.compressImage({
25
+ src: src,
26
+ quality: quality,
27
+ success: (res) => {
28
+ resolve(res);
29
+ },
30
+ fail: (res) => {
31
+ reject(res);
32
+ },
33
+ });
34
+ });
35
+ }
36
+
37
+ function getCompressQuality(size: number) {
38
+ let quality = 100;
39
+ const curSize = size / (1024 * 1024);
40
+ if (curSize > 6) {
41
+ quality = quality - ((curSize - 6) / curSize) * 100;
42
+ }
43
+ return quality;
44
+ }
45
+
46
+ function allTrim(str: string) {
47
+ return str.replace(/\s+/g, '');
48
+ }
49
+
50
+ async function onIconClick() {
51
+ console.log('===onIconClick');
52
+ let result: OcrResult | null = null;
53
+ try {
54
+ const csRes = await Taro.chooseImage({
55
+ count: 1,
56
+ });
57
+ let { path, size } = csRes.tempFiles[0];
58
+ const compressImg: any =
59
+ (await taroImgCompress(path, getCompressQuality(size))) || {};
60
+ const filePath = compressImg.tempFilePath || path;
61
+ Taro.showLoading({ title: '营业执照识别中..' });
62
+ const session = appKitOptions.token();
63
+ const baseUrl = appKitOptions.baseUrl();
64
+ const upRes: any = await Taro.uploadFile({
65
+ url: baseUrl + '/promoact/common/parseBusinessLicense',
66
+ filePath,
67
+ name: 'file',
68
+ formData: {
69
+ objectNo: `min${Date.now()}`,
70
+ },
71
+ header: {
72
+ sessionKey: session || '',
73
+ token: session || '',
74
+ },
75
+ });
76
+ Taro.hideLoading();
77
+ const res = JSON.parse(upRes.data);
78
+ if (res.code === '200') {
79
+ const faceInfo = res.result || {};
80
+ result = {
81
+ companyName: allTrim(faceInfo.companyName || ''),
82
+ idCardNo: allTrim(faceInfo.idCardNo || ''),
83
+ legalPersonName: allTrim(faceInfo.legalPersonName || ''),
84
+ fileId: faceInfo.fileId,
85
+ originalUrl: faceInfo.originalUrl,
86
+ downloadUrl: faceInfo.downloadUrl,
87
+ };
88
+ console.log('===识别', result);
89
+ if (!result.companyName && !result.idCardNo) {
90
+ Taro.showToast({ title: '识别失败,请重试', icon: 'none' });
91
+ }
92
+ } else {
93
+ Taro.showToast({
94
+ title: res.msg,
95
+ icon: 'error',
96
+ });
97
+ }
98
+ } catch (err) {
99
+ Taro.hideLoading();
100
+ console.log(err);
101
+ }
102
+ emits('complete', result);
103
+ }
104
+ </script>
105
+
106
+ <style lang="scss">
107
+ .ocr-icon {
108
+ width: 24px;
109
+ height: 24px;
110
+ .ns-icon {
111
+ width: 24px;
112
+ height: 24px;
113
+ }
114
+ }
115
+ </style>
@@ -3,5 +3,6 @@ import PageHeader from './PageHeader.vue'
3
3
  import AppVerify from './AppVerify.vue'
4
4
  import DeviceVersion from './DeviceVersion.vue'
5
5
  import OcrIcon from './OcrIcon.vue'
6
+ import OcrBusinessLicense from './OcrBusinessLicense.vue'
6
7
 
7
- export { AppDrawer, PageHeader, DeviceVersion, AppVerify, OcrIcon }
8
+ export { AppDrawer, PageHeader, DeviceVersion, AppVerify, OcrIcon, OcrBusinessLicense }
@@ -48,6 +48,7 @@ export function useCrypto (config?: CryptoConfig) {
48
48
  * @returns
49
49
  */
50
50
  const resolve = (list: any[], field?: string | string[]) => {
51
+ if (list.length === 0) return []
51
52
  const [first] = list,
52
53
  f = field
53
54
  ? Array.isArray(field) ? field : [field]
@@ -7,7 +7,7 @@ export type UploadConfig = {
7
7
  headers?: Record<string, string>
8
8
  }
9
9
 
10
- const mappings = {
10
+ const mappings: {[x: string]: keyof Media} = {
11
11
  downloadUrl: 'thrumb',
12
12
  fileId: 'id',
13
13
  fileName: 'name',