From 39f63c38738cd40b142458708dee9bfbf8d1db1a Mon Sep 17 00:00:00 2001
From: liangjin <liangjin@finlean.com>
Date: Mon, 22 Mar 2021 17:48:27 +0800
Subject: [PATCH] 和微分项目
---
src/views/zfblx/lxOrder.vue | 526
src/views/mdyh/bdjc/bdCourse.vue | 290
src/views/old/merchant/xyg/merOpen.vue | 413
static/img/2.png | 0
src/assets/imgs/myHeader.png | 0
src/views/old/store/channel-selection_sh.vue | 250
src/views/mine/account/account-add.vue | 199
static/img/ddxtlogo.png | 0
src/assets/img/bg_top.png | 0
static/img/img_agree.png | 0
src/api/oldapi.js | 478
src/views/old/store/choose-payment-method.vue | 152
src/views/product/wxScore-detail.vue | 214
src/utils/dateformat.js | 282
src/views/mine/redEnvelopes/withdrawals.vue | 404
src/assets/imgs/nodata.png | 0
src/components/old/upload/uploadImgStore.vue | 311
src/views/old/merchant/gzzj/mgrBaseInfo.vue | 79
src/views/old/merchant/heyd/storeBaseMgrInfo.vue | 87
src/assets/zfblx/bg.png | 0
src/components/old/FUpLoad.vue | 155
src/assets/img/img_upload.png | 0
src/views/old/store/getHBQRCode.vue | 273
src/views/old/store/zxh/createcode.vue | 258
src/assets/img/gjzj.png | 0
src/style/normalize.less | 219
src/views/relatedPictures.vue | 174
src/views/old/store/getXygHbQRCode.vue | 248
src/views/user/loginByWx.vue | 255
src/views/old/store/xyg/createcode.vue | 420
src/views/old/merchant/huabei/storePictures.vue | 278
src/views/old/store/shsk/payResult.vue | 144
src/views/old/facepay/code.vue | 135
src/assets/zfblx/code1.png | 0
src/views/old/merchant/xyg/merPictures.vue | 55
static/agreement1.js | 3
src/components/vant_register.js | 90
src/views/old/merchant/gjzj/openResult.vue | 100
src/views/user/login.vue | 246
src/views/mine/channel/channel.vue | 153
src/components/vux_register.js | 345
src/views/old/store/xyg/upload.vue | 498
src/views/template/list.vue | 141
static/img/logo.png | 0
src/utils/console.js | 19
src/views/zfblx/lxOrderDetail.vue | 189
src/views/order/hb.vue | 334
src/views/old/store/shsk/shsk.vue | 231
src/assets/img/1.png | 0
src/components/old/FFilter.vue | 464
src/views/main/index.vue | 90
package-lock.json | 11667 +++++++++
src/views/product/zxh-detail.vue | 129
src/views/appLiandeng/login.vue | 7
src/views/mdyh/shtx/mer-date.vue | 463
src/views/product/dmf-code.vue | 139
src/components/common/v-order-item.vue | 143
src/components/common/v-scroll-x.vue | 32
src/views/mine/setting/setting.vue | 109
src/views/appLiandeng/opening/fillingInfo.vue | 7
src/assets/zfblx/code.png | 0
src/components/common/h-list.vue | 73
src/assets/img/xykdh.png | 0
src/store/module/test.js | 11
src/views/zfblx/lxCode.vue | 127
src/views/mine/channel/channel-detail.vue | 74
src/views/order/hbjl.vue | 322
src/assets/img/shsk.png | 0
src/api/index.js | 577
src/assets/imgs/logo.png | 0
src/assets/zfblx/4.png | 0
src/components/common/v-dialog.vue | 59
src/views/product/shtx-detail.vue | 363
src/utils/date.js | 73
src/components/common/h-login-box.vue | 62
public/index.html | 140
src/assets/imgs/openpic.png | 0
src/utils/createUserProtocol.js | 27
webpack.dev.js | 63
src/style/mixins.less | 139
src/assets/img/spfx.png | 0
src/components/common/v-filter.vue | 573
src/views/product/dmf-detail.vue | 351
src/views/old/store/xyg/xyg-mation.vue | 318
static/img/tonglian.png | 0
babel.config.js | 9
src/assets/img/wxfk.png | 0
src/views/old/store/gzzj/gzzjQrCode.vue | 198
src/views/old/store/hb-contract.vue | 264
src/views/old/merchant/xyg/merBaseInfo.vue | 267
src/views/mdyh/overdue/overdue.vue | 446
src/views/old/merchant/xyg/mgrBaseInfo.vue | 80
src/views/old/store/gzzj/set.vue | 197
src/components/old/FVercode.vue | 118
src/views/old/store/xyg/message.vue | 105
src/components/common/v-button-circle.vue | 59
src/assets/img/imgti.png | 0
static/img/img.png | 0
src/components/old/FConfirmSimple.vue | 139
src/views/appLiandeng/home.vue | 208
src/views/user/register.vue | 186
src/views/product/facepay/facepay.vue | 221
src/views/old/merchant/gzzj/merBaseInfo.vue | 168
src/views/old/merchant/huabei/staging.vue | 259
src/components/old/FButton.vue | 113
src/views/product/gjzj-detail.vue | 118
src/views/appLiandeng/changeMer.vue | 118
src/components/common/v-datacard.vue | 80
static/img/3.png | 0
src/views/old/merchant/huabei/staging_dmf.vue | 225
src/views/old/facepay/orderList.vue | 160
src/views/old/merchant/shtx/open.vue | 140
src/views/old/store/contract/contractInstallment.vue | 178
src/views/old/store/wx-pay-score.vue | 409
src/views/main/product.vue | 234
src/views/old/merchant/tonglian/staging.vue | 199
src/components/old/FBlock.vue | 41
src/views/old/facepay/calcmoney.vue | 246
src/components/old/FNoData.vue | 35
src/components/old/FToast.vue | 83
src/components/common/h-ipt.vue | 112
src/views/appLiandeng/opening/pictureUpload.vue | 7
src/views/old/store/xyg/xygList.vue | 557
src/views/old/merchant/gjzj/open.vue | 359
src/assets/img/shsaom.png | 0
src/text.vue | 27
src/components/old/upload/uploadImg.vue | 375
src/views/old/merchant/tonglian/open.vue | 215
src/router/index.js | 128
src/views/old/merchant/heyd/storeOpen.vue | 459
src/views/order/xyg.vue | 292
src/views/product/gzzj-detail.vue | 146
src/views/old/store/contract/contractQrcode.vue | 113
src/views/order/zxh.vue | 292
webpack.prod.js | 38
src/assets/img/zxsyt.png | 0
src/components/common/h-staging-detail.vue | 191
src/assets/imgs/business.png | 0
src/assets/img/idcardf.png | 0
src/views/old/store/xyg/xygHb.vue | 419
src/views/old/facepay/README.md | 3
src/views/mdyh/product/productMent.vue | 761
src/views/product/lthyj-detail.vue | 120
static/img/circle-bottom.png | 0
postcss.config.js | 11
src/views/order/phone.vue | 345
src/assets/img/xygpic.png | 0
src/utils/filters.js | 31
.gitignore | 13
src/views/old/merchant/heyd/merOpen.vue | 413
src/views/user/register-home.vue | 533
src/views/template/distribute.vue | 327
static/img/hongbao.png | 0
src/assets/zfblx/3.png | 0
src/views/mdyh/overdue/ovderdueDetail.vue | 422
src/assets/img/2.png | 0
src/components/old/FSearch.vue | 80
src/views/order/gjzj.vue | 318
src/components/old/FLoad.vue | 52
static/agreement2.js | 1
src/views/old/merchant/heyd/merBaseInfo.vue | 267
src/store/mutations.js | 75
src/views/old/merchant/huabei/staging_hbjl.vue | 213
src/views/main/message.vue | 121
src/views/old/merchant/heyd/merPictures.vue | 55
src/assets/img/shs.png | 0
src/assets/zfblx/bg4.png | 0
src/views/old/store/mobile/mobileInstallment.vue | 279
src/utils/validator.js | 213
src/views/old/facepay/orderDetails.vue | 175
static/img/bg_code.png | 0
src/style/vant_reset.less | 199
src/views/user/forgetpassword.vue | 244
src/views/mine/stores/stores-add.vue | 200
src/views/old/store/gzzj/createcode.vue | 280
src/assets/img/zfbfk.png | 0
src/views/main/approve.vue | 323
src/views/old/merchant/tonglian/withdrawal.vue | 408
src/assets/img/shtx.png | 0
src/views/old/merchant/tonglian/verification.vue | 204
src/views/old/store/hb-merchant-installment.vue | 439
static/img/back.png | 0
webpack.common.js | 133
src/views/old/store/channel-selection.vue | 206
package.json | 68
src/utils/agreement2.js | 1
static/img/ing.png | 0
src/views/old/merchant/xyg/storeBaseMgrInfo.vue | 88
src/App.vue | 55
src/views/mine/mer/mer-manager.vue | 333
src/views/mine/account/account.vue | 143
src/views/product/xyg-hb-detail.vue | 336
src/views/mine/mer/mer-photo-chose.vue | 166
src/components/old/FConfirm.vue | 132
src/utils/jsBridge.js | 265
src/views/old/merchant/xyg/storeBaseInfo.vue | 179
static/img/hongbaoxiao.png | 0
vue.config.js | 15
src/views/mdyh/shtx/shtx.vue | 750
src/views/old/merchant/heyd/openResult.vue | 168
src/views/old/merchant/xyg/storePictures.vue | 114
static/img/circle-top.png | 0
src/views/old/store/zxh/set.vue | 197
src/views/old/merchant/gjzj/storePictures.vue | 71
src/views/old/merchant/gzzj/merOpen.vue | 416
src/assets/img/tkimg.png | 0
src/utils/formCheckAndComb.js | 194
src/views/old/merchant/productManagement.vue | 407
src/views/order/xyg-hb.vue | 323
src/views/product/hb-detail.vue | 382
src/views/old/merchant/huabei/open.vue | 178
static/agreement4.js | 428
static/img/post_agree.png | 0
src/views/product/xyg-detail.vue | 175
src/views/order/gzzj.vue | 271
src/views/old/store/hb-credit-installment.vue | 714
src/views/old/store/gzzj/message.vue | 105
src/views/order/dmf.vue | 337
src/views/user/supplement.vue | 163
src/components/common/v-navbar.vue | 96
src/views/JSX_Demo.vue | 67
static/img/bg-qr-code.png | 0
src/views/old/merchant/gzzj/storeBaseMgrInfo.vue | 87
src/views/old/merchant/heyd/mgrOpen.vue | 154
src/views/old/store/getShtxQRCode.vue | 293
src/views/zfblx/lxExplain.vue | 34
static/img/4.png | 0
src/views/product/facepay/orderlist.vue | 186
src/store/index.js | 409
src/views/appLiandeng/shskVersionDetail.vue | 64
src/views/old/store/mobile/submitResult.vue | 98
src/views/main/home.vue | 919
src/views/product/hbhy-detail.vue | 393
static/img/zxsyt.png | 0
src/views/old/store/gzzj/upload.vue | 273
static/img/left.png | 0
src/assets/img/xshsk.png | 0
static/img/shsaom.png | 0
debug.log | 12
src/assets/imgs/pic.png | 0
src/assets/img/xyg.png | 0
src/utils/index.js | 361
src/components/common/v-cell.vue | 138
src/views/old/merchant/creditStaging.vue | 92
src/assets/imgs/userImg.png | 0
src/views/order/shtx.vue | 322
src/views/appLiandeng/zfbVersionDetail.vue | 152
src/views/old/store/zxh/upload.vue | 273
src/assets/zfblx/2.png | 0
src/views/old/merchant/tonglian/withdrawal-result.vue | 115
static/img/img_reupload.png | 0
src/components/index.js | 40
src/views/mine/stores/stores.vue | 180
static/img/cs.png | 0
src/views/old/merchant/tonglian/openResult.vue | 327
src/views/old/merchant/heyd/storePictures.vue | 114
src/utils/pageBackByAndroid.js | 36
src/views/old/merchant/xyg/storeOpen.vue | 460
src/views/old/store/productManagement.vue | 296
src/assets/img/支付成功.png | 0
src/components/common/v-gzzj-order-item.vue | 167
src/utils/wechat.js | 30
src/views/old/store/hbcp.vue | 147
src/views/product/facepay/facepay-qrcode.vue | 72
src/assets/img/3.png | 0
src/utils/agreement1.js | 3
src/views/old/README.md | 8
src/views/old/merchant/tonglian/withdrawal-history.vue | 139
src/views/old/store/getShskQRCode.vue | 127
src/api/config.js | 174
src/components/old/FFooter.vue | 57
src/views/old/store/contract/upload.vue | 218
src/components/common/new-v-order-item.vue | 151
src/views/old/store/hbjl/creat-hbjl.vue | 191
src/views/old/merchant/gjzj/baseInfo.vue | 183
src/assets/zfblx/bg3.png | 0
src/assets/zfblx/course.png | 0
src/views/mine/mer/mer-info.vue | 182
static/agreement3.js | 126
static/img/img_refuse.png | 0
src/components/common/v-wxScore-order-item.vue | 159
src/views/order/order-lthyj.vue | 277
src/views/product/hbjl-detail.vue | 339
src/views/old/merchant/heyd/storeBaseInfo.vue | 179
src/views/old/store/bannerContent/bannerContent.vue | 58
src/utils/IDValidator.js | 3844 +++
src/views/user/reset-pwd.vue | 142
src/components/common/h-staging-detail-dmf.vue | 188
src/views/product/credit-detail.vue | 109
src/assets/imgs/credit.png | 0
src/views/old/merchant/huabei/openResult.vue | 237
src/router/routes.js | 1155
src/views/old/merchant/gzzj/merPictures.vue | 55
src/assets/img/hbjl.png | 0
src/views/old/store/credit-installment.vue | 221
src/views/old/merchant/gzzj/storePictures.vue | 114
static/img/1.png | 0
src/views/old/merchant/lj/ljcreditStaging.vue | 81
src/store/mutations-types.js | 30
src/components/old/FPosition.vue | 103
src/utils/formValidator.js | 101
src/views/old/merchant/tonglian/startOpen.vue | 985
static/img/bg.png | 0
src/views/old/merchant/gzzj/openResult.vue | 168
src/views/old/store/pay-result.vue | 154
src/components/old/FSpace.vue | 41
src/views/old/merchant/shtx/staging.vue | 268
src/assets/zfblx/5.png | 0
src/assets/img/4.png | 0
src/assets/img/xydk.png | 0
src/style/myVideo.less | 8
static/agreement5.js | 283
src/views/old/merchant/xyg/mgrOpen.vue | 155
src/views/old/store/getWxQRCode.vue | 267
src/assets/img/zxh.png | 0
src/views/old/store/lthyjQrcode.vue | 105
src/assets/zfblx/zfb.png | 0
src/assets/img/支付中.png | 0
src/views/main/mine.vue | 236
src/views/mine/setting/merchants-approval.vue | 61
static/img/paying.png | 0
src/components/old/FTips.vue | 28
src/utils/deviceInfo.js | 88
src/views/old/store/business-center.vue | 758
src/views/old/store/lthyj.vue | 188
src/assets/img/circle-bottom.png | 0
src/views/old/store/zxh/message.vue | 105
src/views/mine/stores/stores-detail.vue | 236
src/views/old/store/xyg/set.vue | 197
src/assets/img/hyfq.png | 0
src/style/mixin.less | 98
src/views/old/store/getQRCode.vue | 124
src/views/zfblx/lxLogin.vue | 192
src/assets/img/idcardz.png | 0
src/views/old/store/wx-score-result.vue | 154
src/assets/imgs/yqpic.png | 0
src/views/old/store/hbcp_sh.vue | 180
src/views/mine/channel/channel-add.vue | 223
src/assets/img/circle-top.png | 0
src/views/appLiandeng/opening/startOpen.vue | 7
src/views/old/merchant/xyg/openResult.vue | 168
src/style/myVant.less | 12
src/views/product/gzzj_order_detail_pics.vue | 82
static/img/img_auditing.png | 0
static/img/img_frozen.png | 0
src/assets/img/bg-qr-code.png | 0
src/assets/zfblx/1.png | 0
src/views/old/merchant/heyd/mgrBaseInfo.vue | 79
src/views/order/credit.vue | 299
src/components/old/upload/uploadImgTl.vue | 458
src/views/old/merchant/hb-product.vue | 154
src/assets/img/bg_code.png | 0
src/views/old/merchant/gzzj/storeOpen.vue | 278
src/views/old/merchant/gzzj/mgrOpen.vue | 147
static/img/bg_top.png | 0
src/utils/config.js | 29
src/index.js | 67
src/style/themes.less | 51
src/views/user/index.vue | 12
src/assets/img/超时.png | 0
src/assets/img/qqfk.png | 0
src/views/old/merchant/tonglian/storePictures.vue | 350
static/img/cg.png | 0
src/views/mine/toggle-identity.vue | 186
static/img/share_pic.png | 0
src/views/old/store/hbhy-installment.vue | 448
static/README.md | 8
src/assets/img/pic.png | 0
/dev/null | 4
src/assets/zfblx/bg2.png | 0
src/style/common.less | 191
src/views/order/wxScore.vue | 204
src/views/appLiandeng/opening/openResult.vue | 7
src/views/old/merchant/huabei/alipay.vue | 298
src/views/old/store/hbjl/hbjl-qr.vue | 117
src/views/order/xyg-cx.vue | 329
src/assets/imgs/img_details.png | 0
src/views/template/detail.vue | 1228
src/views/mine/redEnvelopes/red-envelopes.vue | 430
src/assets/img/ysffk.png | 0
src/views/appLiandeng/choseVersion.vue | 147
src/views/old/merchant/gzzj/storeBaseInfo.vue | 176
static/img/right.png | 0
383 files changed, 75,543 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d3d5eef
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
diff --git a/README.md b/README.md
deleted file mode 100644
index 6fa84b8..0000000
--- a/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## scene_wxscore_business
-
-微信支付分
-
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..4ce7753
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+ plugins: [
+ ['import', {
+ libraryName: 'vant',
+ libraryDirectory: 'es',
+ style: true
+ }, 'vant']
+ ]
+};
\ No newline at end of file
diff --git a/debug.log b/debug.log
new file mode 100644
index 0000000..4a19538
--- /dev/null
+++ b/debug.log
@@ -0,0 +1,12 @@
+[1008/143351.981:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1009/090254.570:WARNING:minidump_to_upload_parameters.cc(66)] duplicate annotation name metrics_client_id, discarding value 6cdb146c16ce4bfab185288f8bae5c8b
+[1009/090315.609:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1011/110357.879:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1011/135443.332:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/133259.641:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/144714.941:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/161814.067:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1017/091122.502:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1017/103028.328:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1025/160715.460:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[0428/174357.264:ERROR:http_transport_win.cc(276)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..f9ce6e5
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,11667 @@
+{
+ "name": "scene_staging",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@antv/adjust": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@antv/adjust/-/adjust-0.1.1.tgz",
+ "integrity": "sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q==",
+ "requires": {
+ "@antv/util": "~1.3.1"
+ },
+ "dependencies": {
+ "@antv/util": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-1.3.1.tgz",
+ "integrity": "sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==",
+ "requires": {
+ "@antv/gl-matrix": "^2.7.1"
+ }
+ }
+ }
+ },
+ "@antv/attr": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@antv/attr/-/attr-0.1.2.tgz",
+ "integrity": "sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew==",
+ "requires": {
+ "@antv/util": "~1.3.1"
+ },
+ "dependencies": {
+ "@antv/util": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-1.3.1.tgz",
+ "integrity": "sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==",
+ "requires": {
+ "@antv/gl-matrix": "^2.7.1"
+ }
+ }
+ }
+ },
+ "@antv/f2": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@antv/f2/-/f2-3.4.1.tgz",
+ "integrity": "sha512-S23YN1Ns2heROHxLHzXzhWla6LNs2uAL0RlMQHbDripVBZUFZi5TKoT0xZorIKM18DcMnffEJqUDrqLQ5jX91g==",
+ "requires": {
+ "@antv/adjust": "~0.1.1",
+ "@antv/attr": "~0.1.0",
+ "@antv/scale": "~0.1.2",
+ "@antv/util": "~1.2.5",
+ "hammerjs": "^2.0.8"
+ }
+ },
+ "@antv/gl-matrix": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz",
+ "integrity": "sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q=="
+ },
+ "@antv/scale": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.1.3.tgz",
+ "integrity": "sha512-oknlOg4OUqIh8LygrfQttx+OAnNJm2fQ81si4g8aby1WJJwj/TU1gCr+J3loIpKBtBK4VpP/OzTTqg1Ym67SOQ==",
+ "requires": {
+ "@antv/util": "~1.3.1",
+ "fecha": "~2.3.3"
+ },
+ "dependencies": {
+ "@antv/util": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-1.3.1.tgz",
+ "integrity": "sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==",
+ "requires": {
+ "@antv/gl-matrix": "^2.7.1"
+ }
+ }
+ }
+ },
+ "@antv/util": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@antv/util/-/util-1.2.5.tgz",
+ "integrity": "sha512-yz1AjXSEjNu9O5kK9pqKq69f/Iliu/IA3XXljUcfrlbUtmUJ0CH1tB5I60vPqfaKaUPhz+/35K+56yqaCsGmqA==",
+ "requires": {
+ "@antv/gl-matrix": "^2.7.1"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
+ "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.5.5",
+ "@babel/helpers": "^7.5.5",
+ "@babel/parser": "^7.5.5",
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.5.5",
+ "@babel/types": "^7.5.5",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
+ "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.5.5",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+ "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz",
+ "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.5.5",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+ "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz",
+ "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.5.5"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz",
+ "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/template": "^7.4.4",
+ "@babel/types": "^7.5.5",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+ "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz",
+ "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.5.5",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.5.5",
+ "@babel/types": "^7.5.5"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
+ "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.5.5",
+ "@babel/types": "^7.5.5"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
+ "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz",
+ "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz",
+ "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+ "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+ "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz",
+ "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz",
+ "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz",
+ "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.5.5",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.5.5",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz",
+ "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+ "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
+ "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+ "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+ "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+ "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
+ "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz",
+ "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.4.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz",
+ "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.4.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
+ "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
+ "dev": true,
+ "requires": {
+ "regexp-tree": "^0.1.6"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+ "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
+ "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.5.5"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+ "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.4.4",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+ "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
+ "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.0"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+ "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+ "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+ "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz",
+ "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-dynamic-import": "^7.5.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.5.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.5.5",
+ "@babel/plugin-transform-classes": "^7.5.5",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.5.0",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/plugin-transform-duplicate-keys": "^7.5.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.4.4",
+ "@babel/plugin-transform-function-name": "^7.4.4",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-member-expression-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.5.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.5.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.5.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
+ "@babel/plugin-transform-new-target": "^7.4.4",
+ "@babel/plugin-transform-object-super": "^7.5.5",
+ "@babel/plugin-transform-parameters": "^7.4.4",
+ "@babel/plugin-transform-property-literals": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.4.5",
+ "@babel/plugin-transform-reserved-words": "^7.2.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.2.0",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.4.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.4.4",
+ "@babel/types": "^7.5.5",
+ "browserslist": "^4.6.0",
+ "core-js-compat": "^3.1.1",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
+ "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
+ "requires": {
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
+ "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.5.5",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.5.5",
+ "@babel/types": "^7.5.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+ "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.7.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz",
+ "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
+ "dev": true
+ },
+ "@vant/icons": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.2.1.tgz",
+ "integrity": "sha512-5ivsKQR4ySbdBW5UPoQDVqO6rdc1um3rvq/0VL+ZSA7Y3MdBQ3E4/NL0hoAY5/sZZeYfIDKEP21gpjUzdeEDQQ=="
+ },
+ "@vue/babel-helper-vue-jsx-merge-props": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
+ "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw=="
+ },
+ "@vue/babel-plugin-transform-vue-jsx": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz",
+ "integrity": "sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+ "html-tags": "^2.0.0",
+ "lodash.kebabcase": "^4.1.1",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-preset-jsx": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.0.tgz",
+ "integrity": "sha512-EeZ9gwEmu79B4A6LMLAw5cPCVYIcbKWgJgJafWtLzh1S+SgERUmTkVQ9Vx4k8zYBiCuxHK3XziZ3VJIMau7THA==",
+ "dev": true,
+ "requires": {
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
+ "@vue/babel-sugar-functional-vue": "^1.0.0",
+ "@vue/babel-sugar-inject-h": "^1.0.0",
+ "@vue/babel-sugar-v-model": "^1.0.0",
+ "@vue/babel-sugar-v-on": "^1.1.0"
+ }
+ },
+ "@vue/babel-sugar-functional-vue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz",
+ "integrity": "sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-inject-h": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz",
+ "integrity": "sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-v-model": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0.tgz",
+ "integrity": "sha512-Pfg2Al0io66P1eO6zUbRIgpyKCU2qTnumiE0lao/wA/uNdb7Dx5Tfd1W6tO5SsByETPnEs8i8+gawRIXX40rFw==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
+ "camelcase": "^5.0.0",
+ "html-tags": "^2.0.0",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-sugar-v-on": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.0.tgz",
+ "integrity": "sha512-8DwAj/RLpmrDP4eZ3erJcKcyuLArLUYagNODTsSQrMdG5zmLJoFFtEjODfYRh/XxM2wXv9Wxe+HAB41FQxxwQA==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.0.0",
+ "camelcase": "^5.0.0"
+ }
+ },
+ "@vue/component-compiler-utils": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz",
+ "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==",
+ "dev": true,
+ "requires": {
+ "consolidate": "^0.15.1",
+ "hash-sum": "^1.0.2",
+ "lru-cache": "^4.1.2",
+ "merge-source-map": "^1.1.0",
+ "postcss": "^7.0.14",
+ "postcss-selector-parser": "^5.0.0",
+ "prettier": "1.16.3",
+ "source-map": "~0.6.1",
+ "vue-template-es2015-compiler": "^1.9.0"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+ "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+ "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+ "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+ "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+ "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+ "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+ "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "mamacro": "^0.0.3"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+ "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+ "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+ "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+ "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+ "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+ "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/helper-wasm-section": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-opt": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+ "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+ "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+ "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+ "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-code-frame": "1.8.5",
+ "@webassemblyjs/helper-fsm": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+ "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
+ "dev": true
+ },
+ "aes-decrypter": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-1.0.3.tgz",
+ "integrity": "sha1-nAa4pUNaWtCduTP4oBSvzxhMw04=",
+ "requires": {
+ "pkcs7": "^0.2.3"
+ }
+ },
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
+ },
+ "array-find": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz",
+ "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg="
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+ },
+ "array-shuffle": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz",
+ "integrity": "sha1-fqSIKjVrS8pfVF4LblLq9tlxVXo="
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true,
+ "optional": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "async-validator": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
+ "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+ "requires": {
+ "babel-runtime": "6.x"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true,
+ "optional": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz",
+ "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.6.3",
+ "caniuse-lite": "^1.0.30000980",
+ "chalk": "^2.4.2",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.17",
+ "postcss-value-parser": "^4.0.0"
+ }
+ },
+ "autosize": {
+ "version": "3.0.21",
+ "resolved": "https://registry.npmjs.org/autosize/-/autosize-3.0.21.tgz",
+ "integrity": "sha1-8YL0DRd1fZeKE5pMnKQMTA5EhgM="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true,
+ "optional": true
+ },
+ "axios": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
+ "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
+ "requires": {
+ "follow-redirects": "1.5.10",
+ "is-buffer": "^2.0.2"
+ }
+ },
+ "babel-helper-vue-jsx-merge-props": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+ "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
+ },
+ "babel-loader": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
+ "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^2.0.0",
+ "loader-utils": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "pify": "^4.0.1"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+ "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-dynamic-import-webpack": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-webpack/-/babel-plugin-dynamic-import-webpack-1.1.0.tgz",
+ "integrity": "sha512-Q/Vxl3zRwC5/DMyg97Ey2UD/f7ApvO+0zXgzwT3G2N7oajGFroqcUEmXZ23QXJsr0Y+DBVNK57saaUnQhCpllA==",
+ "dev": true
+ },
+ "babel-plugin-import": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.12.0.tgz",
+ "integrity": "sha512-3Fo7sJ2Hm71y1VJS7eMA/E7J5+roKJmzwia5BxzUQREBs6CRylwtvQq8m39W8nplG4Y7rZwOCndh5MzRTSmHpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/runtime": "^7.0.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz",
+ "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ=="
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+ "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
+ "dev": true
+ },
+ "blueimp-md5": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.11.1.tgz",
+ "integrity": "sha512-4UiOAmql2XO0Sws07OVzYdCKK0K2Va5g6AVgYXoGhEQiKrdSOefjUCm1frPk6E+xiIOHRqaFg+TUGo7cClKg5g=="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz",
+ "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000984",
+ "electron-to-chromium": "^1.3.191",
+ "node-releases": "^1.1.25"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
+ "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000990",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000990.tgz",
+ "integrity": "sha512-92QOtfA36W2+PxhE5hNe3hTOSJpmtOs9zuZQUfkKwSiHOpmaus+0rVhSqG6/aAj4w5PujBusIzDksZM81j8tCg==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000989",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
+ "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true,
+ "optional": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
+ "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
+ "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "clean-webpack-plugin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-1.0.1.tgz",
+ "integrity": "sha512-gvwfMsqu3HBgTVvaBa1H3AZKO03CHpr5uP92SPIktP3827EovAitwW+1xoqXyTxCuXnLYpMHG5ytS4AoukHDWA==",
+ "dev": true,
+ "requires": {
+ "rimraf": "^2.6.1"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true,
+ "optional": true
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
+ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "requires": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ }
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "compare-versions": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz",
+ "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+ "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.40.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "consolidate": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "copy-webpack-plugin": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz",
+ "integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.3.3",
+ "find-cache-dir": "^2.1.0",
+ "glob-parent": "^3.1.0",
+ "globby": "^7.1.1",
+ "is-glob": "^4.0.1",
+ "loader-utils": "^1.2.3",
+ "minimatch": "^3.0.4",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^2.2.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.7.0",
+ "webpack-log": "^2.0.0"
+ }
+ },
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+ },
+ "core-js-compat": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
+ "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.6.6",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "countup.js": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-1.9.3.tgz",
+ "integrity": "sha1-zj5QzXFgRB5HjwfaMYle3MDxyd0="
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.x.x"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-line-break": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz",
+ "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==",
+ "requires": {
+ "base64-arraybuffer": "^0.2.0"
+ }
+ },
+ "css-loader": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz",
+ "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.2.0",
+ "icss-utils": "^4.1.0",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.14",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^2.0.6",
+ "postcss-modules-scope": "^2.1.0",
+ "postcss-modules-values": "^2.0.0",
+ "postcss-value-parser": "^3.3.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "css-select": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+ "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^2.1.2",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.33",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz",
+ "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.5.3"
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
+ "dev": true
+ },
+ "css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true
+ },
+ "csso": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+ "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+ "dev": true,
+ "requires": {
+ "css-tree": "1.0.0-alpha.29"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.29",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+ "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ }
+ },
+ "mdn-data": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+ "dev": true
+ }
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
+ "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dijkstrajs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
+ "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs="
+ },
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+ "dev": true,
+ "requires": {
+ "path-type": "^3.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
+ "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+ "dev": true
+ }
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "draftlog": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/draftlog/-/draftlog-1.0.12.tgz",
+ "integrity": "sha1-fbajxbYhBrsy3Uo11nvMy2x9naA=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.226",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.226.tgz",
+ "integrity": "sha512-Qnj+JyUodfuzzPbs66CxO5oz1/bOrIhXh/4qh24GMOYzjuUt0sq7mFlhq78dP68CR38NkZ6KOAfhGP6kElU65A==",
+ "dev": true
+ },
+ "element-ui": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.0.tgz",
+ "integrity": "sha512-KYsHWsBXYbLELS8cdfvgJTOMSUby3UEjvsPV1V1VmgJ/DdkOAS4z3MiOrPxrT9w2Cc5lZ4eVSQiGhYFR5NVChw==",
+ "requires": {
+ "async-validator": "~1.8.1",
+ "babel-helper-vue-jsx-merge-props": "^2.0.0",
+ "deepmerge": "^1.2.0",
+ "normalize-wheel": "^1.0.1",
+ "resize-observer-polyfill": "^1.5.0",
+ "throttle-debounce": "^1.0.1"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
+ }
+ }
+ },
+ "elliptic": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
+ "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es5-shim": {
+ "version": "4.5.13",
+ "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.13.tgz",
+ "integrity": "sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw=="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
+ "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esprima-extract-comments": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-0.2.1.tgz",
+ "integrity": "sha1-kBjY3zf/2V3WFQFajF8Ede10NCM=",
+ "dev": true,
+ "requires": {
+ "esprima": "^2.7.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
+ "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
+ "dev": true
+ },
+ "events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exif-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/exif-js/-/exif-js-2.3.0.tgz",
+ "integrity": "sha1-nRCBm/Vx+HOBPnZAJBJVq5zhqBQ="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true,
+ "optional": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extract-comments": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-0.10.1.tgz",
+ "integrity": "sha1-i2AxgIovX94c1nv4MXuRggQwRAg=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "esprima-extract-comments": "^0.2.1",
+ "extend-shallow": "^2.0.1",
+ "parse-code-context": "^0.2.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastclick": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz",
+ "integrity": "sha1-FhYlsnsaWAZAWTa9qaLBkm0Gvmo="
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fecha": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
+ "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
+ "file-loader": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+ "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.0.2",
+ "schema-utils": "^1.0.0"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ }
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz",
+ "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1",
+ "node-pre-gyp": "*"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.14.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4.4.2"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.13",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "global": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "~0.5.1"
+ },
+ "dependencies": {
+ "process": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ }
+ }
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^3.0.0"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "globby": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+ "dev": true
+ },
+ "hammerjs": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
+ "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
+ },
+ "handle-thing": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "dev": true
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
+ }
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ },
+ "html-webpack-plugin": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+ "dev": true,
+ "requires": {
+ "html-minifier": "^3.2.3",
+ "loader-utils": "^0.2.16",
+ "lodash": "^4.17.3",
+ "pretty-error": "^2.0.2",
+ "tapable": "^1.0.0",
+ "toposort": "^1.0.0",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ }
+ }
+ },
+ "html2canvas": {
+ "version": "1.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.3.tgz",
+ "integrity": "sha512-nWRk34IO3QopcDYpiPAbRW6VoI10H7uxEhcSFjox0JB6wZOMd6Mak+NqHPLljSFFEOvBjPafyRgcHnuWcFpWvg==",
+ "requires": {
+ "css-line-break": "1.1.1"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^3.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+ "dev": true
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true,
+ "optional": true
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "dev": true,
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "individual": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/individual/-/individual-2.0.0.tgz",
+ "integrity": "sha1-gzsJfa0jKU52EXqY+zjg2a1hu5c="
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inline-manifest-webpack-plugin": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/inline-manifest-webpack-plugin/-/inline-manifest-webpack-plugin-3.0.1.tgz",
+ "integrity": "sha1-yiFRBjEVKY4v2UtmmrdsfdY+RK0=",
+ "dev": true,
+ "requires": {
+ "source-map-url": "0.4.0"
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ }
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-function": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
+ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true,
+ "optional": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true,
+ "optional": true
+ },
+ "js-base64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
+ "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
+ "dev": true
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true,
+ "optional": true
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "last-call-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.5",
+ "webpack-sources": "^1.1.0"
+ }
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "less": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
+ "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.2",
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.4.1",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "^2.83.0",
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "less-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "loader-utils": "^1.1.0",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ },
+ "lodash.differencewith": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz",
+ "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
+ "lodash.unionwith": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz",
+ "integrity": "sha1-dNFAtcqBRubGQ8NyT1FSU42awfA=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "loglevel": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
+ "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "m3u8-parser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/m3u8-parser/-/m3u8-parser-2.1.0.tgz",
+ "integrity": "sha1-yBcDKewc1RXQ1Yu4t2LamJbLA2g="
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "mamacro": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
+ "dev": true
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-source-map": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "mini-css-extract-plugin": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
+ "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mux.js": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/mux.js/-/mux.js-4.3.2.tgz",
+ "integrity": "sha512-g0q6DPdvb3yYcoK7ElBGobdSSrhY/RjPt19U7uUc733aqvc5bCS/aCvL9z+448y+IoCZnYDwyZfQBBXMSmGOaQ=="
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node-cli-config": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/node-cli-config/-/node-cli-config-0.0.1.tgz",
+ "integrity": "sha1-r3d02FQCprfLlsH5G7JP3VjXwLA=",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
+ "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "node-releases": {
+ "version": "1.1.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.27.tgz",
+ "integrity": "sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "normalize-wheel": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+ "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.12.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimize-css-assets-webpack-plugin": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz",
+ "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==",
+ "dev": true,
+ "requires": {
+ "cssnano": "^4.1.10",
+ "last-call-webpack-plugin": "^3.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "pako": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
+ "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-code-context": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-0.2.2.tgz",
+ "integrity": "sha1-FEuK+3IZSC1+iMHranZVlvOmrA0=",
+ "dev": true
+ },
+ "parse-headers": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz",
+ "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==",
+ "requires": {
+ "for-each": "^0.3.3",
+ "string.prototype.trim": "^1.1.2"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true,
+ "optional": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkcs7": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/pkcs7/-/pkcs7-0.2.3.tgz",
+ "integrity": "sha1-ItYGZtAQZcXyRDkJjkpIMEUic74="
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+ },
+ "portfinder": {
+ "version": "1.0.21",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz",
+ "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "debug": "^2.2.0",
+ "mkdirp": "0.5.x"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.17",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz",
+ "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+ "dev": true,
+ "requires": {
+ "css-unit-converter": "^1.1.1",
+ "postcss": "^7.0.5",
+ "postcss-selector-parser": "^5.0.0-rc.4",
+ "postcss-value-parser": "^3.3.1"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+ "dev": true
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+ "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
+ "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0",
+ "postcss-value-parser": "^3.3.1"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz",
+ "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
+ "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
+ "dev": true,
+ "requires": {
+ "icss-replace-symbols": "^1.1.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-pxtorem": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-4.0.1.tgz",
+ "integrity": "sha1-nGTQ7+SIVHPMHLAwXG/8PrtFsc0=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "postcss": "^5.2.10"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "dev": true,
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+ "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
+ "dev": true
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz",
+ "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==",
+ "dev": true
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "requires": {
+ "renderkid": "^2.0.1",
+ "utila": "~0.4"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "progress-bar-webpack-plugin": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.12.1.tgz",
+ "integrity": "sha512-tVbPB5xBbqNwdH3mwcxzjL1r1Vrm/xGu93OsqVSAbCaXGoKFvfWIh0gpMDpn2kYsPVRSAIK0pBkP9Vfs+JJibQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "object.assign": "^4.0.1",
+ "progress": "^1.1.8"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "dev": true,
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.0"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
+ "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
+ "dev": true,
+ "optional": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qr.js": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
+ "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8="
+ },
+ "qrcode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.1.tgz",
+ "integrity": "sha512-3JhHQJkKqJL4PfoM6t+B40f0GWv9eNJAJmuNx2X/sHEOLvMyvEPN8GfbdN1qmr19O8N2nLraOzeWjXocHz1S4w==",
+ "requires": {
+ "dijkstrajs": "^1.0.1",
+ "isarray": "^2.0.1",
+ "pngjs": "^3.3.0",
+ "yargs": "^13.2.4"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ }
+ }
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true,
+ "optional": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+ "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+ },
+ "regenerator-transform": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+ "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp-tree": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz",
+ "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz",
+ "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.1.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.1.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "renderkid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+ "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+ "dev": true,
+ "requires": {
+ "css-select": "^1.1.0",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.3.0",
+ "strip-ansi": "^3.0.0",
+ "utila": "^0.4.0"
+ },
+ "dependencies": {
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
+ "resolve": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rust-result": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rust-result/-/rust-result-1.0.0.tgz",
+ "integrity": "sha1-NMdbLm3Dn+WHXlveyFteD5FTb3I=",
+ "requires": {
+ "individual": "^2.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-json-parse": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-4.0.0.tgz",
+ "integrity": "sha1-fA9XjPzNEtM6ccDgVBPi7KFx6qw=",
+ "requires": {
+ "rust-result": "^1.0.0"
+ }
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
+ "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.7.5"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
+ "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
+ "dev": true
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shake.js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/shake.js/-/shake.js-1.2.2.tgz",
+ "integrity": "sha1-sqxWCoKr5o14oCliOnCI4bMLrP8="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shvl": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/shvl/-/shvl-1.3.1.tgz",
+ "integrity": "sha512-+rRPP46hloYUAEImJcqprUgXu+05Ikqr4h4V+w5i2zJy37nAqtkQKufs3+3S2fDq6JNRrHMIQhB/Vaex+jgAAw=="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "sockjs": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz",
+ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.5",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "~0.11.1",
+ "inherits": "^2.0.3",
+ "json3": "^3.3.2",
+ "url-parse": "^1.4.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdy": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+ "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz",
+ "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.13.0",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-comments": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-0.4.4.tgz",
+ "integrity": "sha1-ucqvxP6QX5bAkd+J+achXyqmKcY=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "extract-comments": "^0.10.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "strip-css-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-3.0.0.tgz",
+ "integrity": "sha1-elYl7/iisibPiUehElTaluE9rok=",
+ "dev": true,
+ "requires": {
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "style-loader": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
+ "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "schema-utils": "^1.0.0"
+ }
+ },
+ "style-resources-loader": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.2.1.tgz",
+ "integrity": "sha512-ekId7AwZRW429UjQo02CJTt0Y8GwoT9zidvJLq4lRTJbu0cghv9XNRmt9mS4MR41+gZwMRT0EpFzP68HDWLbXQ==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.2",
+ "is-callable": "^1.1.4",
+ "is-plain-object": "^2.0.4",
+ "is-promise": "^2.1.0",
+ "loader-utils": "^1.1.0"
+ }
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz",
+ "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.33",
+ "csso": "^3.5.1",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true
+ },
+ "terser": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz",
+ "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+ "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.7.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "12.0.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz",
+ "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "throttle-debounce": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+ "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
+ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "toposort": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
+ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+ "dev": true
+ },
+ "touch": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz",
+ "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=",
+ "dev": true,
+ "requires": {
+ "nopt": "~1.0.10"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "dev": true
+ },
+ "tsml": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tsml/-/tsml-1.0.1.tgz",
+ "integrity": "sha1-ifghi52eJX9H1/a1bQHFpNLGj8M="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz",
+ "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.7.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.6.0",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "12.0.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz",
+ "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
+ "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.20.0",
+ "source-map": "~0.6.1"
+ }
+ }
+ }
+ },
+ "underscore": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
+ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
+ "dev": true
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
+ "dev": true
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-loader": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz",
+ "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "mime": "^2.0.3",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "dev": true
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "url-toolkit": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/url-toolkit/-/url-toolkit-2.1.6.tgz",
+ "integrity": "sha512-UaZ2+50am4HwrV2crR/JAf63Q4VvPYphe63WGeoJxeu8gmOm0qxPt+KsukfakPNrX9aymGNEkkaoICwn+OuvBw=="
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
+ "dev": true
+ },
+ "validator": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz",
+ "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA=="
+ },
+ "vanilla-masker": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vanilla-masker/-/vanilla-masker-1.2.0.tgz",
+ "integrity": "sha1-woMOnZlKX+zSJhUGR3wnB/5Yl1Y="
+ },
+ "vant": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/vant/-/vant-2.4.7.tgz",
+ "integrity": "sha512-wjAUP+jw7PN/2jZ9JVpzE+p2Nq1JWN3seVO+jRityESquGEixfC1bBRL9WO6YdjzqzgbvrzLhvYeUPlR309ksQ==",
+ "requires": {
+ "@babel/runtime": "7.x",
+ "@vant/icons": "1.2.1",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+ "vue-lazyload": "1.2.3"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vendors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz",
+ "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "video.js": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/video.js/-/video.js-6.13.0.tgz",
+ "integrity": "sha512-36/JR/GhPQSZj0o+GNbhcEYv/b0SkV9SQsjlodAnzMQYN0TA7VhmqrKPYMCi1NGRYu7S9W3OaFCFoUxkYfSVlg==",
+ "requires": {
+ "babel-runtime": "^6.9.2",
+ "global": "4.3.2",
+ "safe-json-parse": "4.0.0",
+ "tsml": "1.0.1",
+ "videojs-font": "2.1.0",
+ "videojs-ie8": "1.1.2",
+ "videojs-vtt.js": "0.12.6",
+ "xhr": "2.4.0"
+ }
+ },
+ "videojs-contrib-hls": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/videojs-contrib-hls/-/videojs-contrib-hls-5.15.0.tgz",
+ "integrity": "sha512-18zbMYZ0XRBKTPEayA9bFTWWrqhT9b4G8+zf0czJLD7Epe5PcK1I/3dflTHQeQ5rwlWir+/XnFU3sMg/B2MMcw==",
+ "requires": {
+ "aes-decrypter": "1.0.3",
+ "global": "^4.3.0",
+ "m3u8-parser": "2.1.0",
+ "mux.js": "4.3.2",
+ "url-toolkit": "^2.1.3",
+ "video.js": "^5.19.1 || ^6.2.0",
+ "videojs-contrib-media-sources": "4.7.2",
+ "webwackify": "0.1.6"
+ }
+ },
+ "videojs-contrib-media-sources": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/videojs-contrib-media-sources/-/videojs-contrib-media-sources-4.7.2.tgz",
+ "integrity": "sha512-e6iCHWBFuV05EGo7v+pS9iepObXnJ9joms467gzi8ZjpKVb3ifha9M0Ja24Rd8JfvYpzjltsgDVtGFDvIg4hQQ==",
+ "requires": {
+ "global": "^4.3.0",
+ "mux.js": "4.3.2",
+ "video.js": "^5.17.0 || ^6.2.0",
+ "webwackify": "0.1.6"
+ }
+ },
+ "videojs-flash": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/videojs-flash/-/videojs-flash-2.2.1.tgz",
+ "integrity": "sha512-mHu6TD12EKkxMvr8tg4AcfV/DuVLff427nneoZom3N9Dd2bv0sJOWwdLPQH1v5BCuAuXAVuAOba56ovTl+G3tQ==",
+ "requires": {
+ "global": "^4.4.0",
+ "video.js": "^6 || ^7",
+ "videojs-swf": "5.4.2"
+ },
+ "dependencies": {
+ "global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ }
+ }
+ },
+ "videojs-font": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/videojs-font/-/videojs-font-2.1.0.tgz",
+ "integrity": "sha1-olkwpn9snPvyu4jay4xrRR8JM3k="
+ },
+ "videojs-hotkeys": {
+ "version": "0.2.25",
+ "resolved": "https://registry.npmjs.org/videojs-hotkeys/-/videojs-hotkeys-0.2.25.tgz",
+ "integrity": "sha512-XgMjWiqGlmAjuHtpP529A2voVh++z46FSD0XeSy+65yeuTZOd+w2CJmfrL4jPpGm+MME5l9lOLfVpoEeDaBa1Q=="
+ },
+ "videojs-ie8": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/videojs-ie8/-/videojs-ie8-1.1.2.tgz",
+ "integrity": "sha1-oj09hgitcZK2nGB3/E64SJmNNdk=",
+ "requires": {
+ "es5-shim": "^4.5.1"
+ }
+ },
+ "videojs-swf": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/videojs-swf/-/videojs-swf-5.4.2.tgz",
+ "integrity": "sha512-FGg+Csioa8/A/EacvFefBdb9Z0rSiMlheHDunZnN3xXfUF43jvjawcWFQnZvrv1Cs1nE1LBrHyUZjF7j2mKOLw=="
+ },
+ "videojs-vtt.js": {
+ "version": "0.12.6",
+ "resolved": "https://registry.npmjs.org/videojs-vtt.js/-/videojs-vtt.js-0.12.6.tgz",
+ "integrity": "sha512-XFXeGBQiljnElMhwCcZst0RDbZn2n8LU7ZScXryd3a00OaZsHAjdZu/7/RdSr7Z1jHphd45FnOvOQkGK4YrWCQ==",
+ "requires": {
+ "global": "^4.3.1"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
+ },
+ "vue": {
+ "version": "2.6.10",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz",
+ "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
+ },
+ "vue-hot-reload-api": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz",
+ "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==",
+ "dev": true
+ },
+ "vue-i18n": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.14.0.tgz",
+ "integrity": "sha512-utI1Rvc8i+fmmUkkKRmHaf4QQ87s7rGVL5ZZLsKvvRzmgaIr1l+GfGxxxRmsZxHpPlgeB8OxoUZ4noqZgDL6xg=="
+ },
+ "vue-lazyload": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.2.3.tgz",
+ "integrity": "sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g=="
+ },
+ "vue-loader": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz",
+ "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==",
+ "dev": true,
+ "requires": {
+ "@vue/component-compiler-utils": "^2.5.1",
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.1.0",
+ "vue-hot-reload-api": "^2.3.0",
+ "vue-style-loader": "^4.1.0"
+ }
+ },
+ "vue-router": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.2.tgz",
+ "integrity": "sha512-WssQEHSEvIS1/CI4CO2T8LJdoK4Q9Ngox28K7FDNMTfzNTk2WS5D0dDlqYCaPG+AG4Z8wJkn1KrBc7AhspZJUQ=="
+ },
+ "vue-style-loader": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
+ "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==",
+ "dev": true,
+ "requires": {
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.0.2"
+ }
+ },
+ "vue-template-compiler": {
+ "version": "2.6.10",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz",
+ "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==",
+ "dev": true,
+ "requires": {
+ "de-indent": "^1.0.2",
+ "he": "^1.1.0"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
+ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
+ "dev": true
+ },
+ "vue-video-player": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/vue-video-player/-/vue-video-player-5.0.2.tgz",
+ "integrity": "sha512-IZXeRGGSX4YIp54G0Q5cB7iqh6Ok6Dpa2jRkjdyvMWw7MShJuh54/d5QNb1CZ+CvZUzX/TH7osnpir7mBNcFvQ==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "video.js": "^6.6.0",
+ "videojs-contrib-hls": "^5.12.2",
+ "videojs-flash": "^2.1.0",
+ "videojs-hotkeys": "^0.2.20"
+ }
+ },
+ "vuex": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz",
+ "integrity": "sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg=="
+ },
+ "vuex-persistedstate": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.5.4.tgz",
+ "integrity": "sha512-XYJhKIwO+ZVlTaXyxKxnplrJ88Fnvk5aDw753bxzRw5/yMKLQ6lq9CDCBex2fwZaQcLibhtgJOxGCHjy9GLSlQ==",
+ "requires": {
+ "deepmerge": "^2.1.0",
+ "shvl": "^1.3.0"
+ }
+ },
+ "vux": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/vux/-/vux-2.9.2.tgz",
+ "integrity": "sha512-Ve8PabP4U2R10GZZPFXMa6fXxk5n2OBr0VSlBcSA/aavCSe2E4hR6Jzllg5jObvmUuhLSBP/wq8Ko+2Ik+O0nA==",
+ "requires": {
+ "@antv/f2": "^3.1.4-beta.2",
+ "array-filter": "^1.0.0",
+ "array-find": "^1.0.0",
+ "array-map": "^0.0.0",
+ "array-shuffle": "^1.0.1",
+ "autosize": "^3.0.20",
+ "axios": "^0.15.3",
+ "big.js": "^3.1.3",
+ "blueimp-md5": "^2.6.0",
+ "countup.js": "^1.8.1",
+ "fastclick": "^1.0.6",
+ "lodash.debounce": "^4.0.8",
+ "lodash.throttle": "^4.1.1",
+ "object-assign": "^4.1.0",
+ "qr.js": "0.0.0",
+ "shake.js": "^1.2.2",
+ "validator": "^9.3.0",
+ "vanilla-masker": "^1.2.0",
+ "vux-blazy": "^1.6.4",
+ "vux-xscroll": "^3.1.10",
+ "x-photoswipe": "^4.1.3-rc.1"
+ },
+ "dependencies": {
+ "axios": {
+ "version": "0.15.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz",
+ "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=",
+ "requires": {
+ "follow-redirects": "1.0.0"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz",
+ "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=",
+ "requires": {
+ "debug": "^2.2.0"
+ }
+ }
+ }
+ },
+ "vux-blazy": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/vux-blazy/-/vux-blazy-1.6.4.tgz",
+ "integrity": "sha1-4zBz2QLgo4RO8aRjzOPKLgqrR78="
+ },
+ "vux-loader": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/vux-loader/-/vux-loader-1.2.9.tgz",
+ "integrity": "sha512-AjaD08eyeflQgGwAVJjcwA245h2hTJgXR5pRfLajgmIeEXpbzXs41FnuKLig5U2EQpYyMJ7/f/2Rdlr7cYrIOA==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.1.2",
+ "compare-versions": "^3.1.0",
+ "cssnano": "^3.7.4",
+ "draftlog": "^1.0.10",
+ "escodegen": "^1.9.0",
+ "inline-manifest-webpack-plugin": "^3.0.1",
+ "js-yaml": "^3.6.1",
+ "less": "^2.7.1",
+ "loader-utils": "^0.2.15",
+ "node-cli-config": "^0.0.1",
+ "parse5": "^3.0.2",
+ "progress-bar-webpack-plugin": "^1.9.3",
+ "strip-comments": "^0.4.4",
+ "strip-css-comments": "^3.0.0",
+ "touch": "^1.0.0",
+ "underscore": "^1.8.3",
+ "uuid": "^3.0.1",
+ "webpack-merge": "^1.1.2",
+ "webpack-sources": "^0.1.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
+ }
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true,
+ "optional": true
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true,
+ "optional": true
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "^1.1.2"
+ }
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "^4.9.1",
+ "har-schema": "^1.0.5"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "less": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
+ "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.2.11",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "2.81.0",
+ "source-map": "^0.5.3"
+ }
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true,
+ "optional": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true,
+ "optional": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "requires": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.16"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.5"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "requires": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true,
+ "optional": true
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~4.2.1",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "performance-now": "^0.2.0",
+ "qs": "~6.4.0",
+ "safe-buffer": "^5.0.1",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.0.0"
+ }
+ },
+ "source-list-map": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
+ "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "requires": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ }
+ },
+ "webpack-merge": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-1.1.2.tgz",
+ "integrity": "sha1-SfKmi6X9NLsTwzjBhMcCjZOENDI=",
+ "dev": true,
+ "requires": {
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.differencewith": "^4.5.0",
+ "lodash.isequal": "^4.4.0",
+ "lodash.isfunction": "^3.0.8",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.mergewith": "^4.6.0",
+ "lodash.unionwith": "^4.6.0"
+ }
+ },
+ "webpack-sources": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz",
+ "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "~0.1.7",
+ "source-map": "~0.5.3"
+ }
+ }
+ }
+ },
+ "vux-xscroll": {
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/vux-xscroll/-/vux-xscroll-3.1.12.tgz",
+ "integrity": "sha1-41Ln+dxfn+6SU9szHJZ91Ws7yVA="
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "webpack": {
+ "version": "4.39.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.2.tgz",
+ "integrity": "sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/wasm-edit": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "acorn": "^6.2.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.1",
+ "watchpack": "^1.6.0",
+ "webpack-sources": "^1.4.1"
+ }
+ },
+ "webpack-cli": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.6.tgz",
+ "integrity": "sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "enhanced-resolve": "4.1.0",
+ "findup-sync": "3.0.0",
+ "global-modules": "2.0.0",
+ "import-local": "2.0.0",
+ "interpret": "1.2.0",
+ "loader-utils": "1.2.3",
+ "supports-color": "6.1.0",
+ "v8-compile-cache": "2.0.3",
+ "yargs": "13.2.4"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz",
+ "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.2",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz",
+ "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.6",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.2.1",
+ "http-proxy-middleware": "^0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.0",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.3",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.21",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.4",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.19",
+ "sockjs-client": "1.3.0",
+ "spdy": "^4.0.1",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.0",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "12.0.5"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.0.tgz",
+ "integrity": "sha512-3OkP8XrM2Xq4/IxsJnClfMp3OaM3TAatLPLKPeWcxLBTrpe6hihwtX+XZfJTcXg/FTRi4qjy0y/C5qiyNxY24g==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-merge": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz",
+ "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.5"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.4.0 <0.4.11",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "webwackify": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/webwackify/-/webwackify-0.1.6.tgz",
+ "integrity": "sha512-pGcw1T3HpNnM/UTRQqqRkkkzythSLts05mB+7Gr00B+0VbL0m39dFL5g20rSIEUt9Wrpw+/8k+snxRlUFHhcqA=="
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "dev": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "x-photoswipe": {
+ "version": "4.1.3-rc.1",
+ "resolved": "https://registry.npmjs.org/x-photoswipe/-/x-photoswipe-4.1.3-rc.1.tgz",
+ "integrity": "sha512-ok+x+1ufLuBT9dfM5P2FcRefwNniQoVwwfBhGa5gLn8NrSTzNah2p4IElMLwzXuKLtyH4yb+z3IsdDef3FOL5A=="
+ },
+ "xhr": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.0.tgz",
+ "integrity": "sha1-4W5mpF+GmGHu76tBbV7/ci3ECZM=",
+ "requires": {
+ "global": "~4.3.0",
+ "is-function": "^1.0.1",
+ "parse-headers": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..94a6bd2
--- /dev/null
+++ b/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "scene_staging",
+ "version": "1.0.0",
+ "description": "智享收银台项目重构",
+ "main": "webpack.common.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "webpack --env.production --config webpack.prod.js",
+ "dev": "webpack-dev-server --open --config webpack.dev.js"
+ },
+ "keywords": [],
+ "author": "小明丶",
+ "license": "ISC",
+ "devDependencies": {
+ "@babel/core": "^7.3.4",
+ "@babel/preset-env": "^7.3.4",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.3",
+ "@vue/babel-preset-jsx": "^1.0.0-beta.3",
+ "autoprefixer": "^9.4.10",
+ "babel-loader": "^8.0.0-beta.0",
+ "babel-plugin-dynamic-import-webpack": "^1.1.0",
+ "babel-plugin-import": "^1.12.0",
+ "clean-webpack-plugin": "^1.0.1",
+ "copy-webpack-plugin": "^5.0.2",
+ "css-loader": "^2.1.0",
+ "cssnano": "^4.1.10",
+ "file-loader": "^3.0.1",
+ "html-webpack-plugin": "^3.2.0",
+ "less": "^3.9.0",
+ "less-loader": "^4.1.0",
+ "mini-css-extract-plugin": "^0.5.0",
+ "optimize-css-assets-webpack-plugin": "^5.0.1",
+ "postcss-loader": "^3.0.0",
+ "postcss-pxtorem": "^4.0.1",
+ "style-loader": "^0.23.1",
+ "style-resources-loader": "^1.2.1",
+ "uglifyjs-webpack-plugin": "^2.1.2",
+ "url-loader": "^1.1.2",
+ "vue-loader": "^15.7.0",
+ "vue-template-compiler": "^2.6.10",
+ "vux-loader": "^1.2.9",
+ "webpack": "^4.29.6",
+ "webpack-cli": "^3.2.3",
+ "webpack-dev-server": "^3.2.1",
+ "webpack-merge": "^4.2.1"
+ },
+ "dependencies": {
+ "axios": "^0.18.0",
+ "blueimp-md5": "^2.11.1",
+ "element-ui": "^2.13.0",
+ "exif-js": "^2.3.0",
+ "html2canvas": "^1.0.0-rc.3",
+ "qrcode": "^1.4.1",
+ "vant": "^2.4.7",
+ "vue": "^2.6.10",
+ "vue-i18n": "^8.14.0",
+ "vue-router": "^3.0.2",
+ "vue-video-player": "^5.0.2",
+ "vuex": "^3.1.0",
+ "vuex-persistedstate": "^2.5.4",
+ "vux": "^2.9.2"
+ },
+ "browserslist": [
+ "last 1 version",
+ "> 1%",
+ "IE 10"
+ ]
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..4177fb7
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,11 @@
+module.exports = {
+ plugins: {
+ 'autoprefixer': {},
+ //默认不开启rem配置
+ 'postcss-pxtorem': {
+ rootValue: 50,
+ mediaQuery:true, //允许在媒体查询中转换px
+ propList: ['*'],//px 大写 Px 就不会被转换
+ }
+ }
+ }
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..d961f79
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,140 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: wen丶
+ * @LastEditTime: 2021-01-27 10:26:28
+ * @Description:
+ -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,maximum-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
+ <title>智享收银台</title>
+ <link rel="stylesheet" href="https://at.alicdn.com/t/font_1351259_9f4tnx487aa.css">
+ <link rel="stylesheet" href="https://at.alicdn.com/t/font_772985_eb4yiklmyk.css">
+ <link rel="stylesheet" href="//at.alicdn.com/t/font_1351259_2bjudp60ygk.css">
+ <link rel="stylesheet" href="//at.alicdn.com/t/font_1351259_rg7lh167259.css">
+ <link rel="stylesheet" href="//at.alicdn.com/t/font_1351259_se186hqx3s.css">
+ <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
+ <script>
+ if (navigator.userAgent.indexOf('AlipayClient') > -1 || navigator.userAgent.indexOf('mPaaSClient') > -1) {
+ document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
+ }
+ </script>
+ <script>
+ if(location.href.split('?')[1]){
+ if(location.href.split('?')[1].split('appToken=')[1]){
+ document.title = ''
+ }
+ }
+ if(window.sessionStorage.getItem("wxScore") && window.sessionStorage.getItem("wxScore") == '1'){
+ document.title = '和微分';
+ }
+ if(window.sessionStorage.getItem("chanSource") && window.sessionStorage.getItem("chanSource") == 'xml'){
+ document.title = '花呗分期';
+ }
+ if(window.sessionStorage.getItem("chanSource") && window.sessionStorage.getItem("chanSource") == 'xml'){
+ document.title = '花呗分期';
+ }else if(window.location.href.indexOf("chanSource=")>-1 ){
+ if(window.location.href.split("chanSource=")[1] == 'xml'){
+ document.title = '花呗分期';
+ window.sessionStorage.setItem("chanSource", 'xml');
+ }else{
+ if(window.sessionStorage.getItem("chanSource")!=null && window.sessionStorage.getItem("chanSource") == 'xml'){
+ document.title = '花呗分期';
+ }
+ }
+ }else if(window.location.href.indexOf("wxScore=")>-1 ){
+ if(window.location.href.split("wxScore=")[1] == '1'){
+ document.title = '和微分';
+ window.sessionStorage.setItem("wxScore", '1');
+ }else{
+ if(window.sessionStorage.getItem("wxScore") && window.sessionStorage.getItem("wxScore") == '1'){
+ document.title = '和微分';
+ }
+ }
+ }
+ (function (doc, win) {
+ var docEl = doc.documentElement,
+ isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
+ dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
+ dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
+ dpr = 1,
+ scale = 1 / dpr,
+ resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
+ docEl.dataset.dpr = dpr;
+ var metaEl = doc.createElement('meta');
+ metaEl.name = 'viewport';
+ metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
+ docEl.firstElementChild.appendChild(metaEl);
+ var recalc = function () {
+ var width = docEl.clientWidth;
+ if (width / dpr > 750) {
+ width = 750 * dpr;
+ }
+ // 乘以50,px : rem = 50 : 1
+ docEl.style.fontSize = 100 * (width / 750) + 'px';
+ };
+ recalc();
+ if (!doc.addEventListener) return;
+ win.addEventListener(resizeEvt, recalc, false);
+ })(document, window);
+ (function (m, ei, q, i, a, j, s) {
+ m[i] = m[i] || function () {
+ (m[i].a = m[i].a || []).push(arguments)
+ };
+ j = ei.createElement(q),
+ s = ei.getElementsByTagName(q)[0];
+ j.async = true;
+ j.charset = 'UTF-8';
+ j.src = 'https://static.meiqia.com/dist/meiqia.js?_=t';
+ s.parentNode.insertBefore(j, s);
+ })(window, document, 'script', '_MEIQIA');
+ _MEIQIA('entId', 119312);
+ _MEIQIA('withoutBtn');
+ </script>
+</head>
+
+<body>
+
+ <body>
+ <div id="app"></div>
+ <!--<script src="../src/utils/agreement1.js"></script>-->
+ <!--<script src="../src/utils/agreement2.js"></script>-->
+
+ <script src="static/agreement1.js"></script>
+ <script src="static/agreement2.js"></script>
+ <script src="static/agreement3.js"></script>
+ <script src="static/agreement4.js"></script>
+ <script src="static/agreement5.js"></script>
+ <!-- cdn 生产环境打开注释!!! -->
+ <!-- icon 图标 -->
+ <!-- 移动端调试用需要时解开 -->
+ <!-- <script src="https://cdn.bootcdn.net/ajax/libs/vConsole/3.3.4/vconsole.min.js"></script>
+ <script>
+ var vConsole = new VConsole();
+ </script> -->
+
+ <script src="https://at.alicdn.com/t/font_1351259_odonw5vycnt.js"></script>
+ <script src="https://at.alicdn.com/t/font_1351259_9f4tnx487aa.js"></script>
+ <script src="https://at.alicdn.com/t/font_1351259_se186hqx3s.js"></script>
+ <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.echarts.common.min.js></script>
+ <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.axios.min.js></script>
+ <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue.js></script>
+ <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue-router.js></script>
+ <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue.min.js></script>
+ <script src=https://res.wx.qq.com/open/js/jweixin-1.4.0.js></script>
+ <!-- <script src="https://unpkg.com/vue/dist/vue.js"></script> -->
+
+ <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js "></script>
+ <script>
+ Vue.prototype.$t = ()=>{};
+ </script>
+ <!-- <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> -->
+ </body>
+</body>
+
+</html>
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..5e81c26
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,55 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-22 16:09:23
+ * @Description:
+ -->
+<template>
+ <div class="h-100">
+ <router-view></router-view>
+ <van-loading type="spinner" color="white" class="app-loading" v-show="AppLoading"></van-loading>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapActions,
+ } from 'vuex';
+
+ export default {
+ data() {
+ return {
+
+ }
+ },
+ computed:{
+ ...mapState(['AppLoading'])
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ },
+ created() {
+ this.getArea();
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .h-100 {
+ height: 100%;
+ }
+
+
+ .app-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: @zIndex-999;
+ background-color: rgba(0, 0, 0, 0.5);
+ padding: 30px;
+ border-radius: 4px;
+ }
+</style>
diff --git a/src/api/config.js b/src/api/config.js
new file mode 100644
index 0000000..c959f6e
--- /dev/null
+++ b/src/api/config.js
@@ -0,0 +1,174 @@
+/*
+ * @Descripttion: 配置axios
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-30 09:07:29
+ * @LastEditTime: 2021-01-07 10:32:33
+ */
+import axios from 'axios';
+import md5 from 'blueimp-md5';
+import Store from "@/store/index";
+import router from '@/router/index';
+import { Notify} from 'vant';
+import {SET_APP_LOADING,SET_USER_INFO,SET_SESSION_ID} from '@/store/mutations-types';
+
+
+function createSign(params){
+ if(params.jttechSign){
+ delete params.jttechSign;
+ }
+ let keys = Object.keys(params),
+ paramsSign = '';
+ keys.forEach(key=>{
+ let val = params[key];
+ if(typeof val ==='string'){
+ if(val.trim().length>0){
+ paramsSign +=val;
+ }else{
+ delete params[key]
+ }
+ }else if(typeof val === 'number' && !isNaN(val)){
+ paramsSign +=val;
+ }else if(Array.isArray(val) && !val.length){
+ delete params[key]
+ }else if(val===null){
+ delete params[key]
+ }
+
+ })
+ let sessionId = Store.state.sessionId || '';
+ params.jttechSign = md5(paramsSign + sessionId);
+ return params;
+}
+
+
+function deleteCatchInfo(){
+ localStorage.removeItem('user_account')
+ localStorage.removeItem('user_pwd')
+ Store.commit(SET_USER_INFO,{})
+ Store.commit(SET_SESSION_ID,{})
+}
+
+// 错误处理
+const resolveError = {
+ 999(message){
+ Notify(message || '网络异常,请稍后重试');
+ },
+ // 90040006
+ 99(){
+ deleteCatchInfo()
+ Notify('登录超时,请重新登录!');
+ if(sessionStorage.isddxt==1){
+ router.push({
+ path:'/',
+ query:{
+ platNo:'ddxt'
+ }
+ });
+ }else if(sessionStorage.appToken != undefined){
+ router.push({
+ path:'/app/home',
+ query:{
+ appToken:sessionStorage.appToken,
+ backUrl:sessionStorage.backUrl
+ }
+ });
+ }else{
+ router.push('/');
+ }
+
+
+ },
+ 90040006(message){
+ deleteCatchInfo()
+ Notify(message || '登录超时,请重新登录!');
+ if(sessionStorage.isddxt==1){
+ router.push({
+ path:'/',
+ query:{
+ platNo:'ddxt'
+ }
+ });
+ }else if(sessionStorage.appToken != undefined){
+ router.push({
+ path:'/app/home',
+ query:{
+ appToken:sessionStorage.appToken,
+ backUrl:sessionStorage.backUrl,
+ wxScore:sessionStorage.wxScore
+ }
+ });
+ }else{
+ router.push({
+ path:'/',
+ query:{
+ wxScore:sessionStorage.wxScore
+ }
+ });
+ }
+ },
+ // 密码错误
+ 9990027(message){
+ Notify(message);
+ deleteCatchInfo()
+ },
+ // 密码错误
+ 1340004(message){
+ Notify(message);
+ deleteCatchInfo()
+ if(sessionStorage.isddxt==1){
+ router.push({
+ path:'/',
+ query:{
+ platNo:'ddxt'
+ }
+ });
+ }else{
+ router.push('/');
+ }
+ }
+}
+
+const $http = axios.create({
+ baseURL: '/sib',
+ timeout: 90000,
+ headers: {
+ 'Content-Type': 'application/json; charset=UTF-8'
+ }
+})
+console.log($http.interceptors)
+// 添加请求拦截器
+$http.interceptors.request.use(config => {
+ if(typeof config.data ==='undefined'){
+ config.data = {};
+ }
+ config.data = createSign(config.data);
+
+ if(!config.data.apploading){
+ Store.commit(SET_APP_LOADING,true);
+ }
+
+ return config;
+}, error => {
+ Store.commit(SET_APP_LOADING,false);
+ return Promise.reject(error);
+})
+
+// 添加响应拦截器
+$http.interceptors.response.use(response => {
+ Store.commit(SET_APP_LOADING,false);
+ return response.data;
+}, error => {
+ Store.commit(SET_APP_LOADING,false);
+ let data = error.response.data;
+
+ let code = Math.abs(data.errorCode || data.status);
+ if(typeof resolveError[code] ==='function'){
+ resolveError[code](data.errMsg || data.message);
+ }else{
+ Notify(data.errMsg || data.message || '系统错误');
+ }
+ return Promise.reject(data);
+})
+
+export default $http;
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000..13911d0
--- /dev/null
+++ b/src/api/index.js
@@ -0,0 +1,577 @@
+/*
+ * @Descripttion:该文件用于组织服务器请求,添加请求函数时注意 函数重名!
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-30 08:27:46
+ * @LastEditTime: 2021-01-04 09:34:57
+ */
+
+import $http from './config';
+import oldapi from './oldapi';
+
+
+const api = {
+ ...oldapi,
+ // 获取微信配置
+ getTokenInfo(data) {
+ data.apploading = 1;
+ return $http.post('/wechat/getSign', data);
+ },
+ // 获取微信token
+ getWeChatUserInfo(data) {
+ return $http.post('/wechat/userInfo', data);
+ },
+ setUserOpenId(data) {
+ return Service.post('/wechat/binding', data);
+ },
+ //token登陆
+ loginByToken(data) {
+ return $http.post('/login/loginByToken', data);
+ },
+ loginByMerToken(data){
+ return $http.post('/login/loginByMerToken',data);
+ },
+ //登陆
+ login(data) {
+ return $http.post('/login/login', data);
+ },
+ //登出
+ logout(data) {
+ return $http.post('/login/logout', data);
+ },
+ // 获取角色列表
+ getRole(data) {
+ return $http.post('/user/getUserMgrInfo', data);
+ },
+ getAgencyMerList(data){
+ return $http.post('/user/getAgencyMerList',data)
+ },
+ // 获取用户信息
+ getPowerInfo(mgrId) {
+ return $http.post('/user/mgr/powerInfo', {
+ mgrId
+ });
+ },
+ // 账户管理——获取用户信息
+ getUserDetail(mgrId) {
+ return $http.post('/user/mgr/detail', {
+ mgrId
+ });
+ },
+ //修改密码
+ userUpdatePwd(data) {
+ return $http.post('/user/updatePwd', data);
+ },
+ //获取验证码
+ userSendMsg(data) {
+ return $http.post('/user/sendMsg', data);
+ },
+ //忘记密码
+ userForgetPwd(data) {
+ return $http.post('/user/forgetPwd', data);
+ },
+
+
+
+ // 获取地区列表
+ getArea() {
+ let data = {
+ apploading:1
+ };
+ return $http.post('/public/areaList',data);
+ },
+
+ // 获取机构拥有的地区列表
+ getOrgAreaInfo(orgType) {
+ let data = {
+ apploading:1,
+ orgType
+ };
+ return $http.post('/public/getOrgAreaInfo', data);
+ },
+ /**
+ * 渠道相关
+ */
+ //列表
+ getChannel() {
+ return $http.post('/chan/chanList');
+ },
+ //添加
+ addChan(data) {
+ return $http.post('/chan/addChan', data);
+ },
+ //切换状态
+ channSwitchStatus(data) {
+ return $http.post('/chan/switchStatus', data);
+ },
+ //更新渠道详细信息
+ updateChan(data) {
+ return $http.post('/chan/updateChan', data);
+ },
+ //查看/加载渠道详细信息
+ getChannelInfo(chanId) {
+ return $http.post('/chan/viewChanInf', {chanId});
+ },
+
+ // 获取审批列表
+ getAuditList(data) {
+ return $http.post('/merchant/auditList', data);
+ },
+ //审批商户
+ merAudit(data){
+ return $http.post('/merchant/audit', data);
+ },
+
+ // /merchant/auditList
+
+ getAuditType(data){
+ return $http.post('/merchant/auditType', data);
+ },
+ setAuditType(data){
+ return $http.post('/merchant/setAuditType', data);
+ },
+
+
+ /**
+ * 门店管理相关
+ */
+ //门店列表
+ storeStoreList(data) {
+ return $http.post('/store/storeList', data);
+ },
+ //门店详情
+ storeDtl(data) {
+ return $http.post('/store/dtl', data);
+ },
+ //编辑门店
+ storeEdit(data) {
+ return $http.post('/store/edit', data);
+ },
+ //添加门店
+ storeAdd(data) {
+ return $http.post('/store/add', data);
+ },
+
+
+
+
+
+
+
+
+
+
+ // 数据查询相关
+ //获取产品列表
+ getProductList(data) {
+ return $http.post('/prod/typeList', data);
+ },
+
+ // 获取订单初始化数据
+ getOrderInit(data) {
+ return $http.post('/order/init', data);
+ },
+
+
+
+
+
+ // 账号管理——列表
+ getMgrList(data) {
+ return $http.post('/user/getMgrList', data);
+ },
+ // 账户管理——冻结账户
+ userFreezeMgr(mgrId){
+ return $http.post('/user/freezeMgr', {mgrId});
+ },
+ // 账户管理——增加账户
+ userAdd(data){
+ return $http.post('/user/add', data);
+ },
+ // 账户管理——更新账户信息
+ userUpdate(data){
+ return $http.post('/user/update', data);
+ },
+
+ // 花呗订单列表
+ getHBList(data){
+ return $http.post('/order/hbList', data);
+ },
+ // 获取花呗订单详情
+ getHBDetail(orderId){
+ return $http.post('/order/hbOrderDtl', {orderId});
+ },
+ // 花呗订单——退款
+ hbOrderRefund(data){
+ return $http.post('/hbOrder/refund', data);
+ },
+ // 花呗——订单导出
+ hbExport(data){
+ return $http.post('/order/hbExport', data);
+ },
+ // 获取产品订单金额统计
+ getAmtReport(prodId){
+ return $http.post('/order/amtReport', {prodId});
+ },
+ //获取周次商户统计
+ getMerWeeksReport(){
+ return $http.post('/merchant/weeksReport');
+ },
+ // 商户统计
+ getMerReport(data){
+ return $http.post('/merchant/report',data);
+ },
+ // 获取订单统计
+ getOrderReport(data){
+ return $http.post('/order/report',data);
+ },
+
+
+
+
+
+
+ //获取商户列表
+ merList(data) {
+ return $http.post('/merchant/list', data);
+ },
+ //商户详情
+ merDetail(data) {
+ return $http.post('/merchant/merDetail', data);
+ },
+ //商户照片信息
+ merFile(data) {
+ return $http.post('/merchant/file', data);
+ },
+ //商户列表导出
+ merExport(data) {
+ return $http.post('/merchant/export', data);
+ },
+ getUnAuditNb(data){
+ return $http.post('/merchant/unAuditNb',data);
+ },
+ // 信用卡分期订单
+ getCreditOrderList(data){
+ return $http.post('/order/list', data);
+ },
+ // 信用卡分期 导出
+ creditExport(data){
+ return $http.post('/order/export', data);
+ },
+ // 信用卡分期 详情
+ getCreditDetail(orderId){
+ return $http.post('/order/orderDtl', {orderId});
+ },
+
+
+
+
+ // 手机分期订单列表
+ ljOrderList(data){
+ return $http.post('/ljOrder/list', data);
+ },
+ // 手机分期——导出
+ ljOrderExport(data){
+ return $http.post('/ljOrder/export', data);
+ },
+ // 智享花 ——订单
+ getHeydOrder(data){
+ return $http.post('/heydOrder/list', data);
+ },
+ // 智享花 ——导出
+ zxhExport(data){
+ return $http.post('/heydOrder/export', data);
+ },
+
+ // 信用购 ——订单
+ getXygOrder(data){
+ return $http.post('/xygOrder/list', data);
+ },
+ // 信用购 ——导出
+ xygExport(data){
+ return $http.post('/xygOrder/export', data);
+ },
+ getXygDetail(orderId){
+ return $http.post('/xygOrder/orderDtl', {orderId});
+ },
+ // 信用购 ——订单
+ getGzzjOrder(data){
+ return $http.post('/gzzjOrder/list', data);
+ },
+ // 信用购 ——导出
+ gzzjExport(data){
+ return $http.post('/gzzjOrder/export', data);
+ },
+ getGzzjDetail(orderId){
+ return $http.post('/gzzjOrder/orderDtl', {orderId});
+ },
+ // 获取商户收款订单列表
+ getDmfOrderList(data){
+ return $http.post('/dmfOrder/orderList', data);
+ },
+ //商户收款 详情
+ getDmfOrderDetail(orderId){
+ return $http.post('/dmfOrder/orderDetails', {orderId});
+ },
+ //商户收款 退款
+ facepay_refund(data){
+ return $http.post('/dmfOrder/refund', data);
+ },
+ // 商户收款 获取支付状态
+ facepay_getStatus(orderId){
+ return $http.post('/dmfOrder/findOrderSts', {orderId});
+ },
+
+ // 购机直降——订单列表
+ getGjzjList(data){
+ return $http.post('/gjzjOrder/list', data);
+ },
+ // 购机直降——详情
+ getGjzjDetail(orderId){
+ return $http.post('/gjzjOrder/orderDtl', {orderId});
+ },
+ // 购机直降——导出
+ gjzjExport(data){
+ return $http.post('/gjzjOrder/export', data);
+ },
+
+ getZxhDetail(orderId){
+ return $http.post('/heydOrder/orderDtl', {orderId});
+ },
+
+
+
+
+
+ //商户注册
+ merRegist(data) {
+ return $http.post('/user/regist', data);
+ },
+ // 商户筛选条件初始化
+ merInitFilter(data){
+ return $http.post('/merchant/initFilter', data);
+ },
+
+ // 模板列表
+ getTempList(data){
+ return $http.post('/temp/tempList', data);
+ },
+ // 模板 初始化数据
+ // getTempInit(){
+ // return $http.post('/temp/init');
+ // },
+ getTempInit(data){
+ return $http.post('/tempManager/init',data);
+ },
+ // 模板详情
+ // getTempDetail(tempId){
+ // return $http.post('/temp/detail',{tempId});
+ // },
+ getTempDetail(tempId){
+ return $http.post('/tempManager/detail',{tempId});
+ },
+ //模板——保存
+ // tempSave(data){
+ // return $http.post('/temp/save',data);
+ // },
+ tempSave(data){
+ return $http.post('/tempManager/save',data);
+ },
+ tempManagerUpdate(data){
+ return $http.post('/tempManager/update',data)
+ },
+ //模板——商户保存
+ tempSaveMerTemp(data){
+ return $http.post('/temp/saveMerTemp',data);
+ },
+ getTempMerRef(data){
+ return $http.post('/temp/getTempMerRef',data);
+ },
+ tempGetMerRef(data){
+ return $http.post('/temp/getMerRef',data);
+ },
+ //模板——商户列表
+ getTempMerList(data){
+ return $http.post('/temp/tempMerList',data);
+ },
+ //模板 保存商户分配模板
+ saveMerListTemp(data){
+ return $http.post('/temp/saveMerListTemp',data);
+ },
+
+ //红包接口
+ redPacketInit(data){
+ return $http.post('/redPacket/init',data)
+ },
+ redPacketIncomeList(data){
+ return $http.post('/redPacket/incomeList',data)
+ },
+ redPacketExpendList(data){
+ return $http.post('/redPacket/expendList',data)
+ },
+ redPacketBindAliInfo(data){
+ return $http.post('/redPacket/bindAliInfo',data)
+ },
+ redPacketExpend(data){
+ return $http.post('/redPacket/expend',data)
+ },
+ //花呗合约机套餐信息获取
+ categoryList(data){
+ return $http.post('/contract/categoryList',data)
+ },
+ // 信用购花呗导出
+ xygOrderHbExport(data){
+ return $http.post('/xygOrder/hbExport',data)
+ },
+ // 信用购花呗列表获取
+ xygOrderHbList(data){
+ return $http.post('/xygOrder/hbList',data)
+ },
+ // 验证是否需要手动绑定
+ xygOrderCheckInfo(data){
+ return $http.post('/xygOrder/checkInfo',data)
+ },
+ //绑定信息
+ xygOrderBindInfo(data){
+ return $http.post('/xygOrder/bindInfo',data)
+ },
+ //信用购花呗创建订单
+ xygOrderCreateHbOrder(data){
+ return $http.post('/xygOrder/createHbOrder',data)
+ },
+ // 信用购花呗订单详情
+ xygOrderHbOrderDtl(data){
+ return $http.post('/xygOrder/hbOrderDtl',data)
+ },
+ // 信用购花呗 退款
+ xygOrderRefundHb(data){
+ return $http.post('/xygOrder/refundHb',data)
+ },
+
+ // 花呗间联接口
+ hbjlOrderList(data){
+ return $http.post('/hbjlOrder/list',data)
+ },
+ hbjlOrderInit(data){
+ return $http.post('/hbjlOrder/init',data)
+ },//创建订单初始化
+ hbjlOrderExport(data){
+ return $http.post('/hbjlOrder/export',data)
+ },
+ hbjlOrderTrial(data){
+ return $http.post('/hbjlOrder/trial',data)
+ },
+ hbjlOrderOrderDtl(data){
+ return $http.post('/hbjlOrder/orderDtl',data)
+ },
+ /**
+ * 通联接口
+ * **/
+ tltMerOpenInit(data){
+ return $http.post('/tlt/merOpen/init',data)
+ },//页面信息初始化
+ tltMerOpenOpen(data){
+ return $http.post('/tlt/merOpen/open',data)
+ },//商户开通
+ tltMerOpenFindOpenSts(data){
+ return $http.post('/tlt/merOpen/findOpenSts',data)
+ },//查询开通状态
+ tltMerOpenSendSmsCode(data){
+ return $http.post('/tlt/merOpen/sendSmsCode',data)
+ },//获取网商验证码
+ tltMerOpenReOpenMer(data){
+ return $http.post('/tlt/merOpen/reOpenMer',data)
+ },//重置开通状态
+ tltMerOpenQueryElectUrl(data){
+ return $http.post('/tlt/merOpen/queryElectUrl',data)
+ },//进件电子协议URL查询
+ tltMerOpenRepair(data){
+ return $http.post('/tlt/merOpen/repair',data)
+ },//商户资料补录
+ tltMerOpenPayAuth(data){
+ return $http.post('/tlt/merOpen/payAuth',data)
+ },//打款验证接口
+ /**
+ * 通联提现接口
+ * **/
+ tltWalletOpenStatus(data){
+ return $http.post('tlt/wallet/openStatus',data)
+ },
+ tltWalletInit(data){
+ return $http.post('/tlt/wallet/init',data)
+ },//钱包初始化
+ tltWalletSendSmsCode(data){
+ return $http.post('/tlt/wallet/sendSmsCode',data)
+ },//获取网商验证码
+ tltWalletWithdraw(data){
+ return $http.post('/tlt/wallet/withdraw',data)
+ },//提现
+ tltWalletWithdrawDetails(data){
+ return $http.post('/tlt/wallet/withdrawDetails',data)
+ },//提现记录
+ tltWalletWithdrawStatus(data){
+ return $http.post('/tlt/wallet/withdrawStatus',data)
+ },//提现状态
+ tltMerOpenSendAuthFile(data){
+ return $http.post('/tlt/merOpen/sendAuthFile',data)
+ },//获取授权书模板
+ // 风控订单接口
+ riskNum(data){
+ return $http.post('/risk/num',data)
+ },
+ riskInit(data){
+ return $http.post('/risk/init',data)
+ },
+ riskList(data){
+ return $http.post('/risk/list',data)
+ },
+ riskHandle(data){
+ return $http.post('/risk/handle',data)
+ },
+ riskExport(data){
+ return $http.post('/risk/export',data)
+ },
+ // 微信扫码登录
+ loginByOpenId(data){
+ return $http.post('/login/loginByOpenId',data)
+ },//openid登录
+ checkOpenIdIsBind(data){
+ return $http.post('/user/checkOpenIdIsBind',data)
+ },//判断是否绑定openId
+ userAddStoreManager(data){
+ return $http.post('/user/addStoreManager',data)
+ },//资料补充
+
+ // 商户收款接口
+ shskTypeList(data){
+ return $http.post('/prod/dmfTypeList',data)
+ },//获取支付方式列表
+ shskCalAmt(data){
+ return $http.post('/prod/calAmt',data)
+ },
+ shskProdFee(data){
+ return $http.post('/dmfOrder/prodFee',data)
+ },//获取支付方式费率
+
+ // 联通合约机
+ cuccOrderInit(data){
+ return $http.post('/cuccOrder/init',data)
+ },//初始化合约套餐
+ cuccOrderPreCreate(data){
+ return $http.post('/cuccOrder/preCreate',data)
+ },//订单预创建
+ cuccOrderList(data){
+ return $http.post('/cuccOrder/list',data)
+ },//订单列表
+ cuccOrderDetail(data){
+ return $http.post('cuccOrder/detail',data)
+ },//订单详情
+
+
+}
+
+export default {
+ install(Vue, opt) {
+ Vue.prototype.$api = api;
+ }
+}
diff --git a/src/api/oldapi.js b/src/api/oldapi.js
new file mode 100644
index 0000000..a432a61
--- /dev/null
+++ b/src/api/oldapi.js
@@ -0,0 +1,478 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-30 10:46:07
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-03 17:18:42
+ * @Description:
+ */
+import $http from './config';
+
+export default {
+ //创建订单
+ facepay_create(data) {
+ return $http.post('/dmfOrder/create', data);
+ },
+ //查询订单支付状态
+ facepay_getStatus(data) {
+ data.hiddenLoading = true;
+ return $http.post('/dmfOrder/findOrderSts', data);
+ },
+ //订单列表
+ facepay_orderList(data) {
+ return $http.post('/dmfOrder/orderList', data);
+ },
+ //订单 退款
+ facepay_refund(data) {
+ return $http.post('/dmfOrder/refund', data);
+ },
+ //订单详情
+ facepay_orderDetails(orderId) {
+ return $http.post('/dmfOrder/orderDetails', {orderId});
+ },
+
+ //订单列表导出
+ facepayOrderExport(data) {
+ return $http.post('/dmfOrder/export', data);
+ },
+
+ // return $http.post('/wechat/getSign', data);
+ prodList(data) {
+ return $http.post('/prod/typeList', data);
+ },
+ //新商户产品管理接口
+ prodManagerInit(data){
+ return $http.post('/prod/managerInit',data)
+ },
+ // 新商户数据页面获取列表接口
+ prodListTitle(data){
+ return $http.post('/prod/listTitle',data)
+ },
+ // 新门店主页获取业务数据
+ prodIndexTypeList(data){
+ return $http.post('/prod/indexTypeList',data)
+ },
+ // 花呗业务产品页面获取产品列表
+ prodHbProd(data){
+ return $http.post('/prod/hbProd',data)
+ },
+ storeProdList(data) {
+ return $http.post('/prod/storeTypeList', data);
+ },
+ walletUrl(data){
+ return $http.post('/prod/walletUrl', data);
+ },
+ hbLinesSMS(data){
+ return $http.post('/order/hbLinesSMS', data);
+ },
+ findTerms(data){
+ return $http.post('/prod/findTerms', data);
+ },
+ calAmt(data){
+ return $http.post('/prod/calAmt', data);
+ },
+ hbOrderInit(data) {
+ return $http.post('/hbOrder/init', data);
+ },
+ shtxOrderInit(data){
+ return $http.post('/shtxOrder/init',data)
+ },
+ shtxOrderCreate(data){
+ return $http.post('/shtxOrder/create',data)
+ },
+ getMonthMoney(data){
+ return $http.post('/shtxOrder/trial',data)
+ },
+ calcMonthMoney(data){
+ return $http.post('/hbOrder/trial', data);
+ },
+ hbOrderCreate(data) {
+ return $http.post('/hbOrder/create', data);
+ },
+ hbhyjCreate(data) {
+ return $http.post('/hbOrder/createMbl', data);
+ },
+ contractList(data) {
+ return $http.post('/contract/list', data);
+ },
+ hbOrderFindOrderSts(data){
+ return $http.post('/hbOrder/findOrderSts', data);
+ },
+ shtxOrderFindOrderSts(data){
+ return $http.post('/shtxOrder/findOrderSts', data);
+ },
+ getShtxDetail(data){
+ return $http.post('/shtxOrder/refund',data)
+ },
+ /**
+ * 手机分期相关
+ */
+ //订单创建
+ ljOrderCreate(data) {
+ return $http.post('/ljOrder/create', data);
+ },
+ //订单创建初始化
+ ljOrderCreateInit(data) {
+ return $http.post('/ljOrder/createInit', data);
+ },
+ //订单列表导出
+ ljOrderExport(data) {
+ return $http.post('/ljOrder/export', data);
+ },
+ //订单列表
+ ljOrderList(data) {
+ return $http.post('/ljOrder/list', data);
+ },
+ //订单详情
+ ljOrderOrderDtl(data) {
+ return $http.post('/ljOrder/orderDtl', data);
+ },
+ //订单创建试算
+ ljOrderTrial(data) {
+ return $http.post('/ljOrder/trial', data);
+ },
+
+
+ saveProtocol(data){
+ return $http.post('/gjzjOrder/uploadProtocol', data);
+ },
+
+ uploadFile(data){
+ return $http.post('/order/uploadFile', data);
+ },
+
+
+ prodRefInit(data) {
+ return $http.post('/prod/refInit', data);
+ },
+
+ prodSaveRef(data) {
+ return $http.post('/prod/saveRef', data);
+ },
+
+
+ h_contractList(data) {
+ return $http.post('/contract/list', data);
+ },
+
+
+
+ // 检查授权
+ checkAuth (data) {
+ return $http.post('/hbOpen/checkAuth', data);
+ },
+ // 花呗开户初始化
+ hbOpenInit (data) {
+ return $http.post('/hbOpen/init', data);
+ },
+ // 商户详情
+ merPayInfo(data) {
+ return $http.post('/merchant/merPayInfo', data);
+ },
+ // xyg花呗开户初始化
+ xygHbOpenInit (data) {
+ return $http.post('/hbOpen/xygInit', data);
+ },
+ // xyg花呗检查授权
+ xygCheckAuth(data){
+ return $http.post('/hbOpen/xygCheckAuth',data)
+ },
+ // xyg花呗开通
+ hbOpenXygOpen(data){
+ return $http.post('/hbOpen/xygOpen',data)
+ },
+ //照片上传
+ merUploadPhoto(data) {
+ return $http.post('/user/uploadPhoto', data);
+ },
+ // 信用购开通上传图片
+ uploadXygPhoto(data){
+ return $http.post('/user/uploadXygPhoto', data);
+ },
+ //照片上传
+ merUploadPhotoStore(data) {
+ return $http.post('/public/uploadFile', data);
+ },
+
+ heydInitOpen(data) {
+ return $http.post('/heydOpen/init', data);
+ },
+ // 开通
+ heydOpen(data) {
+ return $http.post('/heydOpen/open', data);
+ },
+ // 开通
+ heydInitStore(data) {
+ return $http.post('/heydOpen/initStore', data);
+ },
+ // 开通
+ heydInitMgr(data) {
+ return $http.post('/heydOpen/initMgr', data);
+ },
+ // 营业员开通
+ heydOpenMgr(data) {
+ return $http.post('/heydOpen/openMgr', data);
+ },
+ // 门店开通
+ heydOpenStore(data) {
+ return $http.post('/heydOpen/openStore', data);
+ },
+
+ getMerInfo(merId){
+ return $http.post('/heydOpen/merInfo', {merId});
+ },
+
+
+ h_uploadProtocol(data) {
+ return $http.post('/heydOrder/uploadProtocol', data);
+ },
+ h_getFileType(data={}){
+ return $http.post('/heydOrder/getFileType', data);
+ },
+ //退货
+ h_refund(data) {
+ return $http.post('/heydOrder/refund', data);
+ },
+ //海尔云贷经纬度保存
+ gpsAddr(data){
+ return $http.post('/heydOpen/updateMgrDeviceInfo',data);
+ },
+ gjzjOpenInit (data) {
+ return $http.post('/gjzjOpen/init', data);
+ },
+ // 商户开通
+ gjzjOpen (data) {
+ return $http.post('/gjzjOpen/open', data);
+ },
+
+ // 商户开通
+ hbOpenOpen (data) {
+ return $http.post('/hbOpen/open', data);
+ },
+ // 商户重新开通
+ hbOpenReOpen (data) {
+ return $http.post('/hbOpen/reOpen', data);
+ },
+ // 查询商户开通状态
+ findOpenSts (data) {
+ return $http.post('/hbOpen/findOpenSts', data);
+ },
+ getJson() {
+ return $http.get('/scene/json/childChanList.json');
+ },
+ getShsUrl() {
+ return $http.post('/shsOrder/getUrl');
+ },
+
+ //门店优化
+ indexInit(data){
+ return $http.post('/index/init',data);
+ },
+ indexDetail(data){
+ return $http.post('/index/bannerDetail',data);
+ },
+ //消息
+ noticeDetail(data){
+ return $http.post('/notice/detail',data);
+ },
+ noticeList(data){
+ return $http.post('/notice/list',data);
+ },
+
+ //商户
+ merchantDetail(data){
+ return $http.post('/merchant/merDetail',data);
+ },
+ merchantEdit(data){
+ return $http.post('/merchant/merEdit',data);
+ },
+ //逾期用户列表
+ overdueList(data){
+ return $http.post('/overdue/oveList',data);
+ },
+ //逾期详情
+ overdueDetail(data){
+ return $http.post('/overdue/oveDetail',data);
+ },
+ //逾期用户数
+ overdueNum(data){
+ return $http.post('/overdue/oveNum',data);
+ },
+ //保存跟进记录
+ overdueSaveOveFol(data){
+ return $http.post('/overdue/saveOveFol',data);
+ },
+ // 支付宝拉新
+ zfbLxSave(data){
+ return $http.post('/zfb/lx/save',data);
+ },
+ //支付宝拉新查询列表
+ zfbLxList(data){
+ return $http.post('/zfb/lx/list',data);
+ },
+ //支付宝拉新列表初始化
+ zfbLxInit(data){
+ return $http.post('/zfb/lx/init',data);
+ },
+ //支付宝拉新查询
+ zfbLxReport(data){
+ return $http.post('/zfb/lx/report',data);
+ },
+ //支付宝周数据统计
+ zfbLxWeekReport(data){
+ return $http.post('/zfb/lx/weekReport',data);
+ },
+ //支付宝数据导出
+ zfbLxExport(data){
+ return $http.post('/zfb/lx/export',data);
+ },
+ // 信用购接口开始
+
+ xygInitOpen(data) {
+ return $http.post('/xygOpen/init', data);
+ },
+ // 信用购开通
+ xygOpen(data) {
+ return $http.post('/xygOpen/open', data);
+ },
+ // 信用购开通
+ xygInitStore(data) {
+ return $http.post('/xygOpen/initStore', data);
+ },
+ // 信用购开通
+ xygInitMgr(data) {
+ return $http.post('/xygOpen/initMgr', data);
+ },
+ // 信用购营业员开通
+ xygOpenMgr(data) {
+ return $http.post('/xygOpen/openMgr', data);
+ },
+ // 信用购门店开通
+ xygOpenStore(data) {
+ return $http.post('/xygOpen/openStore', data);
+ },
+ getXygMerInfo(merId){
+ return $http.post('/xygOpen/merInfo', {merId});
+ },
+ getunhandingList(data){
+ return $http.post('xygOrder/unhandingList',data)
+ },
+ getGoodsTypeList(data){
+ return $http.post('xygOrder/createInit',data)
+ },
+ h_uploadXygProtocol(data) {
+ return $http.post('/xygOrder/uploadProtocol', data);
+ },
+ h_getXygFileType(data={}){
+ return $http.post('/xygOrder/getFileType', data);
+ },
+ //信用购退货
+ h_xygRefund(data) {
+ return $http.post('/xygOrder/refund', data);
+ },
+ //信用购经纬度保存
+ gpsXygAddr(data){
+ return $http.post('/xygOpen/updateMgrDeviceInfo',data);
+ },
+
+ // 信用购接口结束
+ //开通花呗省市区数据获取
+ getAliAreaList(data){
+ return $http.post('/public/aliAreaList',data);
+ },
+ // 获取通道
+ prodZfbVersion(data){
+ return $http.post('/prod/zfbVersion',data);
+ },
+ // 信用购花呗开通结果
+ findXygOpenSts(data){
+ return $http.post('/hbOpen/findXygOpenSts',data)
+ },
+ // xyg花呗开通详情获取
+ merXygPayInfo(data){
+ return $http.post('/merchant/merXygPayInfo',data)
+ },
+ // 门店管理分页
+ storeStoreList(data){
+ return $http.post('/store/storeList',data)
+ },
+ // 微信分创建
+ wxScoreCreate(data){
+ return $http.post('/cmccWxpay/create',data)
+ },
+ // 微信分订单详情
+ wxScoreDetail(data){
+ return $http.post('/cmccWxpay/detail',data)
+ },
+ // 微信分初始化
+ wxScoreInit(data){
+ return $http.post('/cmccWxpay/init',data)
+ },
+ // 微信分订单列表
+ wxScoreList(data){
+ return $http.post('/cmccWxpay/list',data)
+ },
+ // 微信分套餐列表
+ wxScoreContList(data){
+ return $http.post('/cmccWxpay/contList',data)
+ },
+ // 微信分返销
+ wxScoreRefund(data){
+ return $http.post('/cmccWxpay/refund',data)
+ },
+ // 微信分手机号验证
+ wxScoreVertify(data){
+ return $http.post('/cmccWxpay/verifyMblNo',data)
+ },
+ // 微信分手机号验证
+ wxScoreOrderStatus(data){
+ return $http.post('/cmccWxpay/orderStatus',data)
+ },
+ wxScoreExport(data){
+ return $http.post('/cmccWxpay/export', data);
+ },
+ //公众租机接口开始
+ gzzjInitOpen(data) {
+ return $http.post('/gzzjOpen/init', data);
+ },
+ // 开通
+ gzzjOpen(data) {
+ return $http.post('/gzzjOpen/open', data);
+ },
+ // 开通
+ gzzjInitStore(data) {
+ return $http.post('/gzzjOpen/initStore', data);
+ },
+ // 开通
+ gzzjInitMgr(data) {
+ return $http.post('/gzzjOpen/initMgr', data);
+ },
+ // 营业员开通
+ gzzjOpenMgr(data) {
+ return $http.post('/gzzjOpen/openMgr', data);
+ },
+ // 门店开通
+ gzzjOpenStore(data) {
+ return $http.post('/gzzjOpen/openStore', data);
+ },
+
+ getGzzjMerInfo(merId){
+ return $http.post('/gzzjOpen/merInfo', {merId});
+ },
+ gzzjOrderInit(data) {
+ return $http.post('/gzzjOrder/init', data);
+ },
+ gzzjOrderPrecreate(data) {
+ return $http.post('/gzzjOrder/preCreate', data);
+ },
+ gzzj_h_uploadProtocol(data) {
+ return $http.post('/gzzjOrder/uploadProtocol', data);
+ },
+ gzzj_h_getFileType(data={}){
+ return $http.post('/gzzjOrder/getFileType', data);
+ },
+ //退货
+ gzzj_h_refund(data) {
+ return $http.post('/gzzjOrder/refund', data);
+ },
+ //公众租机接口结束
+}
diff --git a/src/assets/img/1.png b/src/assets/img/1.png
new file mode 100644
index 0000000..7d492d7
--- /dev/null
+++ b/src/assets/img/1.png
Binary files differ
diff --git a/src/assets/img/2.png b/src/assets/img/2.png
new file mode 100644
index 0000000..3197eb8
--- /dev/null
+++ b/src/assets/img/2.png
Binary files differ
diff --git a/src/assets/img/3.png b/src/assets/img/3.png
new file mode 100644
index 0000000..eae2437
--- /dev/null
+++ b/src/assets/img/3.png
Binary files differ
diff --git a/src/assets/img/4.png b/src/assets/img/4.png
new file mode 100644
index 0000000..5a8d054
--- /dev/null
+++ b/src/assets/img/4.png
Binary files differ
diff --git a/src/assets/img/bg-qr-code.png b/src/assets/img/bg-qr-code.png
new file mode 100644
index 0000000..0748e2a
--- /dev/null
+++ b/src/assets/img/bg-qr-code.png
Binary files differ
diff --git a/src/assets/img/bg_code.png b/src/assets/img/bg_code.png
new file mode 100644
index 0000000..7908d74
--- /dev/null
+++ b/src/assets/img/bg_code.png
Binary files differ
diff --git a/src/assets/img/bg_top.png b/src/assets/img/bg_top.png
new file mode 100644
index 0000000..2fbcfe3
--- /dev/null
+++ b/src/assets/img/bg_top.png
Binary files differ
diff --git a/src/assets/img/circle-bottom.png b/src/assets/img/circle-bottom.png
new file mode 100644
index 0000000..83238d9
--- /dev/null
+++ b/src/assets/img/circle-bottom.png
Binary files differ
diff --git a/src/assets/img/circle-top.png b/src/assets/img/circle-top.png
new file mode 100644
index 0000000..1ec6a83
--- /dev/null
+++ b/src/assets/img/circle-top.png
Binary files differ
diff --git a/src/assets/img/gjzj.png b/src/assets/img/gjzj.png
new file mode 100644
index 0000000..672fc09
--- /dev/null
+++ b/src/assets/img/gjzj.png
Binary files differ
diff --git a/src/assets/img/hbjl.png b/src/assets/img/hbjl.png
new file mode 100644
index 0000000..5bf7116
--- /dev/null
+++ b/src/assets/img/hbjl.png
Binary files differ
diff --git a/src/assets/img/hyfq.png b/src/assets/img/hyfq.png
new file mode 100644
index 0000000..8336543
--- /dev/null
+++ b/src/assets/img/hyfq.png
Binary files differ
diff --git a/src/assets/img/idcardf.png b/src/assets/img/idcardf.png
new file mode 100644
index 0000000..0c0bc54
--- /dev/null
+++ b/src/assets/img/idcardf.png
Binary files differ
diff --git a/src/assets/img/idcardz.png b/src/assets/img/idcardz.png
new file mode 100644
index 0000000..7647289
--- /dev/null
+++ b/src/assets/img/idcardz.png
Binary files differ
diff --git a/src/assets/img/img_upload.png b/src/assets/img/img_upload.png
new file mode 100644
index 0000000..2644339
--- /dev/null
+++ b/src/assets/img/img_upload.png
Binary files differ
diff --git a/src/assets/img/imgti.png b/src/assets/img/imgti.png
new file mode 100644
index 0000000..5653d38
--- /dev/null
+++ b/src/assets/img/imgti.png
Binary files differ
diff --git a/src/assets/img/pic.png b/src/assets/img/pic.png
new file mode 100644
index 0000000..3c22470
--- /dev/null
+++ b/src/assets/img/pic.png
Binary files differ
diff --git a/src/assets/img/qqfk.png b/src/assets/img/qqfk.png
new file mode 100644
index 0000000..b6dbef8
--- /dev/null
+++ b/src/assets/img/qqfk.png
Binary files differ
diff --git a/src/assets/img/shs.png b/src/assets/img/shs.png
new file mode 100644
index 0000000..4d78712
--- /dev/null
+++ b/src/assets/img/shs.png
Binary files differ
diff --git a/src/assets/img/shsaom.png b/src/assets/img/shsaom.png
new file mode 100644
index 0000000..f2e1a2e
--- /dev/null
+++ b/src/assets/img/shsaom.png
Binary files differ
diff --git a/src/assets/img/shsk.png b/src/assets/img/shsk.png
new file mode 100644
index 0000000..8ada23f
--- /dev/null
+++ b/src/assets/img/shsk.png
Binary files differ
diff --git a/src/assets/img/shtx.png b/src/assets/img/shtx.png
new file mode 100644
index 0000000..16d30a3
--- /dev/null
+++ b/src/assets/img/shtx.png
Binary files differ
diff --git a/src/assets/img/spfx.png b/src/assets/img/spfx.png
new file mode 100644
index 0000000..a275cfd
--- /dev/null
+++ b/src/assets/img/spfx.png
Binary files differ
diff --git a/src/assets/img/tkimg.png b/src/assets/img/tkimg.png
new file mode 100644
index 0000000..1d72d1e
--- /dev/null
+++ b/src/assets/img/tkimg.png
Binary files differ
diff --git a/src/assets/img/wxfk.png b/src/assets/img/wxfk.png
new file mode 100644
index 0000000..4e2203d
--- /dev/null
+++ b/src/assets/img/wxfk.png
Binary files differ
diff --git a/src/assets/img/xshsk.png b/src/assets/img/xshsk.png
new file mode 100644
index 0000000..8228730
--- /dev/null
+++ b/src/assets/img/xshsk.png
Binary files differ
diff --git a/src/assets/img/xydk.png b/src/assets/img/xydk.png
new file mode 100644
index 0000000..25bf0dc
--- /dev/null
+++ b/src/assets/img/xydk.png
Binary files differ
diff --git a/src/assets/img/xyg.png b/src/assets/img/xyg.png
new file mode 100755
index 0000000..9b21225
--- /dev/null
+++ b/src/assets/img/xyg.png
Binary files differ
diff --git a/src/assets/img/xygpic.png b/src/assets/img/xygpic.png
new file mode 100644
index 0000000..57612ff
--- /dev/null
+++ b/src/assets/img/xygpic.png
Binary files differ
diff --git a/src/assets/img/xykdh.png b/src/assets/img/xykdh.png
new file mode 100644
index 0000000..5278a85
--- /dev/null
+++ b/src/assets/img/xykdh.png
Binary files differ
diff --git a/src/assets/img/ysffk.png b/src/assets/img/ysffk.png
new file mode 100644
index 0000000..e789351
--- /dev/null
+++ b/src/assets/img/ysffk.png
Binary files differ
diff --git a/src/assets/img/zfbfk.png b/src/assets/img/zfbfk.png
new file mode 100644
index 0000000..1a199b3
--- /dev/null
+++ b/src/assets/img/zfbfk.png
Binary files differ
diff --git a/src/assets/img/zxh.png b/src/assets/img/zxh.png
new file mode 100644
index 0000000..e58a98b
--- /dev/null
+++ b/src/assets/img/zxh.png
Binary files differ
diff --git a/src/assets/img/zxsyt.png b/src/assets/img/zxsyt.png
new file mode 100644
index 0000000..c32a7ac
--- /dev/null
+++ b/src/assets/img/zxsyt.png
Binary files differ
diff --git "a/src/assets/img/\346\224\257\344\273\230\344\270\255.png" "b/src/assets/img/\346\224\257\344\273\230\344\270\255.png"
new file mode 100644
index 0000000..4a6c7e9
--- /dev/null
+++ "b/src/assets/img/\346\224\257\344\273\230\344\270\255.png"
Binary files differ
diff --git "a/src/assets/img/\346\224\257\344\273\230\346\210\220\345\212\237.png" "b/src/assets/img/\346\224\257\344\273\230\346\210\220\345\212\237.png"
new file mode 100644
index 0000000..bb996f6
--- /dev/null
+++ "b/src/assets/img/\346\224\257\344\273\230\346\210\220\345\212\237.png"
Binary files differ
diff --git "a/src/assets/img/\350\266\205\346\227\266.png" "b/src/assets/img/\350\266\205\346\227\266.png"
new file mode 100644
index 0000000..72e3679
--- /dev/null
+++ "b/src/assets/img/\350\266\205\346\227\266.png"
Binary files differ
diff --git a/src/assets/imgs/business.png b/src/assets/imgs/business.png
new file mode 100644
index 0000000..0b2c429
--- /dev/null
+++ b/src/assets/imgs/business.png
Binary files differ
diff --git a/src/assets/imgs/credit.png b/src/assets/imgs/credit.png
new file mode 100644
index 0000000..21a76d2
--- /dev/null
+++ b/src/assets/imgs/credit.png
Binary files differ
diff --git a/src/assets/imgs/img_details.png b/src/assets/imgs/img_details.png
new file mode 100644
index 0000000..d8f9080
--- /dev/null
+++ b/src/assets/imgs/img_details.png
Binary files differ
diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png
new file mode 100644
index 0000000..4419c20
--- /dev/null
+++ b/src/assets/imgs/logo.png
Binary files differ
diff --git a/src/assets/imgs/myHeader.png b/src/assets/imgs/myHeader.png
new file mode 100644
index 0000000..fa8a747
--- /dev/null
+++ b/src/assets/imgs/myHeader.png
Binary files differ
diff --git a/src/assets/imgs/nodata.png b/src/assets/imgs/nodata.png
new file mode 100644
index 0000000..9ea398f
--- /dev/null
+++ b/src/assets/imgs/nodata.png
Binary files differ
diff --git a/src/assets/imgs/openpic.png b/src/assets/imgs/openpic.png
new file mode 100644
index 0000000..dd78720
--- /dev/null
+++ b/src/assets/imgs/openpic.png
Binary files differ
diff --git a/src/assets/imgs/pic.png b/src/assets/imgs/pic.png
new file mode 100644
index 0000000..edc845c
--- /dev/null
+++ b/src/assets/imgs/pic.png
Binary files differ
diff --git a/src/assets/imgs/userImg.png b/src/assets/imgs/userImg.png
new file mode 100644
index 0000000..b1b84e5
--- /dev/null
+++ b/src/assets/imgs/userImg.png
Binary files differ
diff --git a/src/assets/imgs/yqpic.png b/src/assets/imgs/yqpic.png
new file mode 100644
index 0000000..3123494
--- /dev/null
+++ b/src/assets/imgs/yqpic.png
Binary files differ
diff --git a/src/assets/zfblx/1.png b/src/assets/zfblx/1.png
new file mode 100644
index 0000000..51ff3db
--- /dev/null
+++ b/src/assets/zfblx/1.png
Binary files differ
diff --git a/src/assets/zfblx/2.png b/src/assets/zfblx/2.png
new file mode 100644
index 0000000..fed081b
--- /dev/null
+++ b/src/assets/zfblx/2.png
Binary files differ
diff --git a/src/assets/zfblx/3.png b/src/assets/zfblx/3.png
new file mode 100644
index 0000000..22003ad
--- /dev/null
+++ b/src/assets/zfblx/3.png
Binary files differ
diff --git a/src/assets/zfblx/4.png b/src/assets/zfblx/4.png
new file mode 100644
index 0000000..64b7849
--- /dev/null
+++ b/src/assets/zfblx/4.png
Binary files differ
diff --git a/src/assets/zfblx/5.png b/src/assets/zfblx/5.png
new file mode 100644
index 0000000..3a363f8
--- /dev/null
+++ b/src/assets/zfblx/5.png
Binary files differ
diff --git a/src/assets/zfblx/bg.png b/src/assets/zfblx/bg.png
new file mode 100644
index 0000000..1050eb2
--- /dev/null
+++ b/src/assets/zfblx/bg.png
Binary files differ
diff --git a/src/assets/zfblx/bg2.png b/src/assets/zfblx/bg2.png
new file mode 100644
index 0000000..30e57b8
--- /dev/null
+++ b/src/assets/zfblx/bg2.png
Binary files differ
diff --git a/src/assets/zfblx/bg3.png b/src/assets/zfblx/bg3.png
new file mode 100644
index 0000000..76795bf
--- /dev/null
+++ b/src/assets/zfblx/bg3.png
Binary files differ
diff --git a/src/assets/zfblx/bg4.png b/src/assets/zfblx/bg4.png
new file mode 100644
index 0000000..91b1433
--- /dev/null
+++ b/src/assets/zfblx/bg4.png
Binary files differ
diff --git a/src/assets/zfblx/code.png b/src/assets/zfblx/code.png
new file mode 100644
index 0000000..cfe225c
--- /dev/null
+++ b/src/assets/zfblx/code.png
Binary files differ
diff --git a/src/assets/zfblx/code1.png b/src/assets/zfblx/code1.png
new file mode 100644
index 0000000..cfe225c
--- /dev/null
+++ b/src/assets/zfblx/code1.png
Binary files differ
diff --git a/src/assets/zfblx/course.png b/src/assets/zfblx/course.png
new file mode 100644
index 0000000..c3ff11b
--- /dev/null
+++ b/src/assets/zfblx/course.png
Binary files differ
diff --git a/src/assets/zfblx/zfb.png b/src/assets/zfblx/zfb.png
new file mode 100644
index 0000000..85c76b2
--- /dev/null
+++ b/src/assets/zfblx/zfb.png
Binary files differ
diff --git a/src/components/common/h-ipt.vue b/src/components/common/h-ipt.vue
new file mode 100644
index 0000000..ed60d1b
--- /dev/null
+++ b/src/components/common/h-ipt.vue
@@ -0,0 +1,112 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-01-15 09:50:23
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2020-01-15 16:51:51
+ * @Description:
+ -->
+<template>
+ <div class="ipt-com">
+ <p>
+ <span>{{tit}}</span>
+ <span v-if="mustFill">*</span>
+ </p>
+ <input v-model="newVal" class="input" :class="[readonly ? 'readonly' : '']" :type="type" :maxlength="max" :disabled="readonly" :placeholder="placeholder" >
+ </div>
+</template>
+<script>
+export default {
+ model: {
+ prop: 'value',
+ event: 'input'
+ },
+ props: {
+ tit:String,
+ mustFill:{
+ type:Boolean,
+ default:false
+ },
+ max:[String,Number],
+ type:{
+ type:String,
+ default:'text'
+ },
+ // 左侧文字
+ label:String,
+ //左侧图标类名
+ icon: String,
+ //是否展示右侧图标
+ isLink: {
+ type: Boolean,
+ default: false
+ },
+ // title文字加粗
+ isTitle:{
+ type: Boolean,
+ default: false
+ },
+ // 是否只读
+ readonly: {
+ type: Boolean,
+ default: false
+ },
+ // 是否禁用
+ disabled:{
+ type: Boolean,
+ default: false
+ },
+ // input 的vmodel
+ value:[String, Number],
+ placeholder:String,
+ },
+ computed: {
+ newVal: {
+ get:function() {
+ return this.value;
+ },
+ set:function(value) {
+ this.$emit('input', value);
+ }
+ },
+ },
+}
+</script>
+<style lang="less" scoped>
+ .ipt-com{
+ width: 100%;
+ margin-bottom: 16px;
+ p{
+ margin-bottom: 10px;
+ span:nth-of-type(1){
+ font-size: 13px;
+ color: #999999;
+ }
+ span:nth-of-type(2){
+ font-size: 13px;
+ color: #FF6666
+ }
+ }
+ input::-webkit-input-placeholder{color:#333333;}
+ input{
+ background-color: #F9FAFF;
+ width: 100%;
+ height: 40px;
+ border: 1px solid rgba(205,211,246,1);
+ border-radius:4px;
+ font-size: 14px;
+ color: #333;
+ padding-left: 8px;
+ display: inline-block;
+ box-sizing: border-box;
+ }
+ select{
+ background-color: #CDD3F6;
+ width: 100%;
+ height: 40px;
+ border: 1px solid rgba(205,211,246,1);
+ border-radius:4px;
+ font-size: 14px;
+ color: #333;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/components/common/h-list.vue b/src/components/common/h-list.vue
new file mode 100644
index 0000000..782b6ca
--- /dev/null
+++ b/src/components/common/h-list.vue
@@ -0,0 +1,73 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-01-07 09:27:05
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-12 12:49:30
+ * @Description: 下滑分页组件 为保证不重复请求 使用时要根据显示内容的div高度确定一次返回条数,数据足够的情况下一次放回请装满容器
+ -->
+<template>
+ <div class="h-list" :style="{'height':height}">
+ <div class="box" ref="lisBox">
+ <slot></slot>
+ <p v-if="loading" class="load">加载中....</p>
+ <p v-if="finished" class="finish">没有更多了</p>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ /**
+ * defScroll-滚动条距离底部小于此距离执行加载,可根据需求调整距离(必传)
+ * finished-是否已经等到所有数据(必传)
+ * loading-是否显示加载(必传)
+ */
+ props:['defScroll','finished','loading','height'],
+ data() {
+ return {
+ previous:0,
+ now:0,
+ }
+ },
+ mounted(){
+ document.querySelector('.h-list').addEventListener('scroll', this.boxScroll,true)
+ //window.addEventListener('scroll', this.boxScroll,true)
+ console.log(this.defScroll)
+ },
+ methods:{
+ boxScroll(e){
+ this.now = new Date().getTime()
+ // 获取滚动条距离容器底部的距离
+ let scrollBottom =
+ e.target.scrollHeight -
+ e.target.scrollTop -
+ e.target.clientHeight;
+ if(this.now-this.previous > 100){
+ if(scrollBottom < this.defScroll && !this.finished && scrollBottom!=0){
+ this.loading = true
+ this.$emit('scroll')
+ this.previous = this.now
+ return
+ }else{
+ this.loading = false
+ return
+ }
+ }
+ },
+ }
+}
+</script>
+<style lang="less" scoped>
+.h-list::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ display: none;
+ }
+.h-list{
+ overflow: scroll;
+ height: 75vh;
+ background-color: #fff;
+ width: 100%;
+ padding-bottom: 20px;
+ .load,.finish{
+ text-align: center;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/components/common/h-login-box.vue b/src/components/common/h-login-box.vue
new file mode 100644
index 0000000..040143c
--- /dev/null
+++ b/src/components/common/h-login-box.vue
@@ -0,0 +1,62 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-09 09:50:39
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-10 11:17:07
+ * @Description: 登录样式组件
+-->
+<template>
+ <div class="login-box">
+ <div class="h-login">
+ <van-icon :name="icon" :size="iconSize"/>
+ <input :type="type" v-model="caleValue" :maxlength="max" :placeholder="placeholder">
+ <slot name="right-content">
+
+ </slot>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ name:'loginBox',
+ props:{
+ icon:String,
+ iconSize:String,
+ type:{
+ type:String,
+ default:'text'
+ },
+ max:Number,
+ placeholder:String,
+ value:[String,Number]
+ },
+ computed:{
+ caleValue:{
+ get(){
+ return this.value
+ },
+ set(newValue){
+ this.$emit('input', newValue)
+ }
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.login-box{
+ &{
+ border-bottom:1px #ebedf0 solid ;
+ margin-bottom: 20px;
+ }
+ .h-login{
+ display: flex;
+ padding: 11px 16px ;
+ }
+ input{
+ border: 0;
+ outline: none;
+ background: #fff;
+ text-align: left;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/components/common/h-staging-detail-dmf.vue b/src/components/common/h-staging-detail-dmf.vue
new file mode 100644
index 0000000..4f6c2b2
--- /dev/null
+++ b/src/components/common/h-staging-detail-dmf.vue
@@ -0,0 +1,188 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-27 11:08:39
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-08 14:34:06
+ * @Description: 产品已开通费率展示组件
+-->
+<template>
+ <div class="h-staging-detail-component">
+ <div class="info-box">
+ <div class="info-box-top">
+ <van-cell
+ :title="item.title"
+ :value="item.value"
+ title-class="tit-class"
+ value-class="val-class"
+ v-for="(item, index) in infoList"
+ :key="index"
+ />
+ </div>
+ <div class="info-box-bottom" v-if="rateList.length > 1">
+ <div class="left-cr" :style="{ background: bcColor }"></div>
+ <div class="right-cr" :style="{ background: bcColor }"></div>
+ <div class="rate-title">费率</div>
+ <div class="item" v-for="i in spanList" :key="i.termName">
+ <span v-for="(e, key) in i" :key="key">{{ e }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+/**
+ * infoList 展示信息数组 数组得再父组件按照 想要的数据先处理好顺序,形成一个对象数组,其实作用不大只是想减少下HTML代码
+ * hasTitle 费率是否含有标题栏 费率展示处是否展示标题栏 需要标题栏请手动在rateList第一项给入对应对象
+ * rateList 费率数组 费率数组全部传入即可
+ * rateListRule 费率数组规则 rateList里哪些要展示就在此数组定义 每一项为一个对象 keyName为rateList中需要展示的某一项的键名,type为特殊类型会添加% 期 这些后缀
+ * bcColor 小圆形的背景色,如果内容过少可以 小圆会呈现在上部有背景色处,所以给一个自定义颜色传入
+ * **/
+export default {
+ name: "h-staging-detail",
+ props: {
+ rateList: {
+ type: Array,
+ }, //费率数组
+ infoList: {
+ type: Array,
+ }, //展示信息数组
+ rateListRule: {
+ type: Array,
+ }, //费率数组规则
+ hasTitle: {
+ type: Boolean,
+ default: false,
+ }, //费率是否含有标题栏
+ bcColor: {
+ type: String,
+ default: "#f5f5f5",
+ }, //小圆形的背景色
+ },
+ computed: {
+ spanList() {
+ let arr = [];
+ this.rateList.forEach((item, index) => {
+ let obj = {};
+ this.rateListRule.forEach((e) => {
+ if (item.hasOwnProperty(e.keyName)) {
+ if (this.hasTitle) {
+ if (e.type == "isTerm") {
+ obj[e.keyName] =
+ index == 0 ? item[e.keyName] : `${item[e.keyName]}期`;
+ }
+ if (e.type == "isRate") {
+ obj[e.keyName] =
+ index == 0 ? item[e.keyName] : `${item[e.keyName]}%`;
+ } else {
+ obj[e.keyName] = item[e.keyName];
+ }
+ } else {
+ if (e.type == "isTerm") {
+ obj[e.keyName] = item[e.keyName] + "期";
+ }
+ if (e.type == "isRate") {
+ obj[e.keyName] = item[e.keyName] + "%";
+ } else {
+ obj[e.keyName] = item[e.keyName];
+ }
+ }
+ }
+ });
+ arr.push(obj);
+ });
+ return arr;
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.h-staging-detail-component {
+ .info-box {
+ width: 92%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ .info-box-bottom {
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ border-top: 1px dashed #e6e6e6;
+ }
+ }
+
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ display: inline-block;
+ }
+ span:nth-child(1) {
+ width: 45%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+ }
+ }
+ .tit-class {
+ min-width: 36%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 64%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+}
+</style>
diff --git a/src/components/common/h-staging-detail.vue b/src/components/common/h-staging-detail.vue
new file mode 100644
index 0000000..80aed7e
--- /dev/null
+++ b/src/components/common/h-staging-detail.vue
@@ -0,0 +1,191 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-27 11:08:39
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 14:11:39
+ * @Description: 产品已开通费率展示组件
+-->
+<template>
+ <div class="h-staging-detail-component">
+ <div class="info-box">
+ <div class="info-box-top">
+ <van-cell
+ :title="item.title"
+ :value="item.value"
+ title-class="tit-class"
+ value-class="val-class"
+ v-for="(item, index) in infoList"
+ :key="index"
+ />
+ </div>
+ <div class="info-box-bottom" v-if="rateList.length > 1">
+ <div class="left-cr" :style="{ background: bcColor }"></div>
+ <div class="right-cr" :style="{ background: bcColor }"></div>
+ <div class="rate-title">费率</div>
+ <div class="item" v-for="i in spanList" :key="i.termName">
+ <span v-for="(e, key) in i" :key="key">{{ e }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+/**
+ * infoList 展示信息数组 数组得再父组件按照 想要的数据先处理好顺序,形成一个对象数组,其实作用不大只是想减少下HTML代码
+ * hasTitle 费率是否含有标题栏 费率展示处是否展示标题栏 需要标题栏请手动在rateList第一项给入对应对象
+ * rateList 费率数组 费率数组全部传入即可
+ * rateListRule 费率数组规则 rateList里哪些要展示就在此数组定义 每一项为一个对象 keyName为rateList中需要展示的某一项的键名,type为特殊类型会添加% 期 这些后缀
+ * bcColor 小圆形的背景色,如果内容过少可以 小圆会呈现在上部有背景色处,所以给一个自定义颜色传入
+ * **/
+export default {
+ name: "h-staging-detail",
+ props: {
+ rateList: {
+ type: Array,
+ }, //费率数组
+ infoList: {
+ type: Array,
+ }, //展示信息数组
+ rateListRule: {
+ type: Array,
+ }, //费率数组规则
+ hasTitle: {
+ type: Boolean,
+ default: false,
+ }, //费率是否含有标题栏
+ bcColor: {
+ type: String,
+ default: "#f5f5f5",
+ }, //小圆形的背景色
+ },
+ computed: {
+ spanList() {
+ let arr = [];
+ this.rateList.forEach((item, index) => {
+ let obj = {};
+ this.rateListRule.forEach((e) => {
+ if (item.hasOwnProperty(e.keyName)) {
+ if (this.hasTitle) {
+ if (e.type == "isTerm") {
+ obj[e.keyName] =
+ index == 0 ? item[e.keyName] : `${item[e.keyName]}期`;
+ }
+ if (e.type == "isRate") {
+ obj[e.keyName] =
+ index == 0 ? item[e.keyName] : `${item[e.keyName]}%`;
+ } else {
+ obj[e.keyName] = item[e.keyName];
+ }
+ } else {
+ if (e.type == "isTerm") {
+ obj[e.keyName] = item[e.keyName] + "期";
+ }
+ if (e.type == "isRate") {
+ obj[e.keyName] = item[e.keyName] + "%";
+ } else {
+ obj[e.keyName] = item[e.keyName];
+ }
+ }
+ }
+ });
+ arr.push(obj);
+ });
+ return arr;
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.h-staging-detail-component {
+ .info-box {
+ width: 92%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ .info-box-bottom {
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ border-top: 1px dashed #e6e6e6;
+ }
+ }
+
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ display: inline-block;
+ }
+ span:nth-child(1) {
+ width: 15%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+ span:nth-child(3) {
+ width: 45%;
+ }
+ }
+ }
+ .tit-class {
+ min-width: 36%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 64%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+}
+</style>
diff --git a/src/components/common/new-v-order-item.vue b/src/components/common/new-v-order-item.vue
new file mode 100644
index 0000000..cf03202
--- /dev/null
+++ b/src/components/common/new-v-order-item.vue
@@ -0,0 +1,151 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:55:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-23 16:28:59
+ * @Description: 订单组件
+ -->
+<template>
+ <div class="order-item" @click="$emit('click')">
+ <header class="header flex-around-g text-center-g">
+ <div class="flex-1-g" :class="[index!==list.length-1 ? 'border-right' : '']" v-for="(item, index) in list"
+ :key="index">
+ <h5 class="title" :class="[item.color,index===2?'ch-status':'']" >{{item.value}}</h5>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </header>
+ <footer class="footer">
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="orderId" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="text-clip-g" style="max-width:120px;">{{orderId}}</span>
+ </p>
+ <p v-if="time" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshijian"></use>
+ </svg>
+ <time>{{+time | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </slot>
+ </div>
+ <!-- <p v-if="user" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{user}}</span>
+ </p> -->
+ <p v-if="name" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{name}}</span>
+ </p>
+
+ </footer>
+ </div>
+</template>
+<script>
+ // list结构说明:
+ // [
+ // {
+ // label:'',
+ // value:'',
+ // color:'' //标识状态颜色
+ // }
+ // ]
+ export default {
+ name: 'new-v-order-item',
+ props: {
+ time: {//时间
+ type:[String,Number],
+ },
+ name: String,
+ user: String,
+ orderId: Number,
+ list: { //header数据展示
+ type: Array
+ }
+ },
+ created() {
+ console.log(this.list)
+ }
+ }
+</script>
+<style lang="less" scoped>
+
+
+ .ch-status{
+ font-size: 13px!important;
+ width: 60px;
+ margin-left: 30px;
+ }
+
+ .order-item {
+ background-color: @c-bg-fff;
+ margin-bottom: 10px;
+ padding: 0 8px 10px;
+ border-radius: 3px;
+ .header {
+ height: 80px;
+ }
+ // .info{
+ // height: 100%;
+ // .flex(center,center,'',column);
+ // }
+
+ .title {
+ font-size: @font-18;
+ margin-bottom: 8px;
+ }
+
+ .label {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+
+ .footer {
+ height: 50px;
+ line-height: 25px;
+ background-color: #F7F7FA;
+ padding: 0 12px;
+ font-size: @font-12;
+ color: @c-text-666;
+
+ .icon {
+ width: 18px;
+ margin-right: 8px;
+ }
+ }
+
+ .success {
+ color: #19BE6B;
+ }
+
+ .error {
+ color: #ED4014;
+ }
+
+ .warning {
+ color: #FF9900;
+ }
+ }
+
+ .border-right {
+ position: relative;
+ &::after {
+ content: "";
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 32px;
+ background: rgba(230, 230, 230, 1);
+
+ }
+ }
+</style>
diff --git a/src/components/common/v-button-circle.vue b/src/components/common/v-button-circle.vue
new file mode 100644
index 0000000..23ba5b6
--- /dev/null
+++ b/src/components/common/v-button-circle.vue
@@ -0,0 +1,59 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:45:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:55:24
+ * @Description: 全局圆形按钮
+ -->
+<template>
+ <van-button class="btn-export" @click="$emit('click')" :style="{background:$store.state.backColor}">
+ <div class="inner">
+ <svg class="icon" aria-hidden="true" style="width:15px;height:15px;fill:#fff">
+ <use :xlink:href="'#'+icon"></use>
+ </svg>
+ <span class="text">{{title}}</span>
+ </div>
+ </van-button>
+</template>
+<script>
+export default {
+ name:'v-button-circle',
+ props:{
+ title:{
+ type:String,
+ required:true,
+ },
+ icon:{
+ type:String,
+ required:true,
+ },
+ }
+}
+</script>
+<style lang="less" scoped>
+ .btn-export {
+ position: fixed;
+ width: 50px;
+ height: 50px;
+ padding: 0;
+ right: 8px;
+ bottom: 68px;
+ border-radius: 50%;
+ color: @c-text-f5;
+ z-index: @zIndex-50;
+ box-shadow: 0px 5px 9px 0px rgba(80, 47, 183, 0.3);
+ background: linear-gradient(0deg, rgba(106, 79, 188, 1), rgba(137, 110, 219, 1));
+
+ .inner {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .text {
+ .lh(15px);
+ margin-top: 2px;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/components/common/v-cell.vue b/src/components/common/v-cell.vue
new file mode 100644
index 0000000..63b8d9b
--- /dev/null
+++ b/src/components/common/v-cell.vue
@@ -0,0 +1,138 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 10:05:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-09 11:12:38
+ * @Description:
+ -->
+<template>
+ <div class="flex-between-g v-cell-box">
+ <div class="left flex-start-g">
+ <svg v-if="icon" class="icon" aria-hidden="true" style="width:16px;height:16px;">
+ <use :xlink:href="'#'+icon"></use>
+ </svg>
+ <span class="label" :class="[isTitle? 'title' : '']">{{label}}</span>
+ </div>
+ <div class="right flex-end-g">
+ <slot name="v-cell-right">
+ <div class="c-text-999-g" v-if="!Show_input">{{calcValue}}</div>
+ <input class="input" :class="[readonly ? 'readonly' : '']" :type="type" :maxlength="max" v-if="Show_input" :disabled="readonly" v-model="calcValue" :placeholder="placeholder">
+
+ <svg v-if="isLink" class="icon" aria-hidden="true" style="width:18px;height:18px;fill:#999;">
+ <use xlink:href="#iconyou"></use>
+ </svg>
+ </slot>
+ </div>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'v-cell',
+ props: {
+ max:[String,Number],
+ type:{
+ type:String,
+ default:'text'
+ },
+ // 左侧文字
+ label:String,
+ //左侧图标类名
+ icon: String,
+ //是否展示右侧图标
+ isLink: {
+ type: Boolean,
+ default: false
+ },
+ // title文字加粗
+ isTitle:{
+ type: Boolean,
+ default: false
+ },
+ // 是否只读
+ readonly: {
+ type: Boolean,
+ default: false
+ },
+ // 是否禁用
+ disabled:{
+ type: Boolean,
+ default: false
+ },
+ Show_input:{
+ type:Boolean,
+ default: true
+ },
+ // input 的vmodel
+ value:[String, Number],
+ placeholder:String,
+ },
+ computed: {
+ calcValue: {
+ get() {
+ return this.value;
+ },
+ set(v) {
+ this.$emit('input', v)
+ }
+ }
+ },
+ mounted(){
+
+ },
+ methods:{
+
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+ .v-cell-box {
+ padding: 16px 12px;
+ background-color: @c-bg-fff;
+ margin-bottom: 1px;
+
+
+
+ &:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ }
+
+ &:last-child {
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ margin-bottom: 0;
+ }
+
+ .label {
+ font-size: @font-16;
+ &.title{
+ font-weight: bold;
+ }
+ }
+
+ .left {
+ .icon {
+ margin-right: 8px;
+ }
+ }
+
+ .input {
+ border: none;
+ outline: none;
+ text-align: right;
+ color: @c-text-333;
+ background: @c-bg-fff;
+ &.readonly{
+ color: @c-text-999;
+ }
+ &[disabled]{
+ opacity: 1;
+ -webkit-opacity:1;
+ color: @c-text-999;
+ -webkit-text-fill-color:@c-text-999;
+ }
+ }
+ }
+</style>
diff --git a/src/components/common/v-datacard.vue b/src/components/common/v-datacard.vue
new file mode 100644
index 0000000..d696adf
--- /dev/null
+++ b/src/components/common/v-datacard.vue
@@ -0,0 +1,80 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:23:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:50:58
+ * @Description: 数据展示
+ -->
+<template>
+ <section class="datacard-box flex-around-g text-center-g" :style="{background:$store.state.backColor}">
+ <!-- <img src="static/img/circle-top.png" class="img top" alt="">
+ <img src="static/img/circle-bottom.png" class="img bottom" alt=""> -->
+ <div v-for="(item,index) in list" :key="index">
+ <h4 class="title">{{ item.num || '0' }}</h4>
+ <p class="label">{{ item.title || '' }}</p>
+ </div>
+
+ </section>
+</template>
+<script>
+ export default {
+ name: 'v-datacard',
+ props:{
+ list:{
+ type:Array,
+ default: () => {
+ return [
+ {
+ title:'交易额',
+ num:'126,500'
+ },
+ {
+ title:'交易单数',
+ num:'3,211'
+ },
+ {
+ title:'交易商户数',
+ num:'126'
+ }
+ ]
+ }
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.datacard-box{
+ position: relative;
+ height:105px;
+ background:rgba(66,61,93,1);
+ box-shadow:0px 6px 10px 0px rgba(66,61,93,0.3);
+ border-radius:3px;
+ color: @c-text-fff;
+ background-image: url('../../../static/img/circle-top.png'),url('../../../static/img/circle-bottom.png');
+ background-position: 0 0,100% 100%;
+ background-size: 78px 65px,54px 41px;
+ background-repeat: no-repeat;
+ .title{
+ font-size: @font-20;
+ margin-bottom: 10px;
+ }
+ .label{
+ font-size: @font-12;
+ }
+ // .img{
+ // position: absolute;
+ // &.top{
+ // top: 0;
+ // left: 0;
+ // width: 78px;
+ // height: 65px;
+ // }
+ // &.bottom{
+ // right: 0;
+ // bottom: 0;
+ // width: 54px;
+ // height: 41px;
+ // }
+ // }
+}
+</style>
diff --git a/src/components/common/v-dialog.vue b/src/components/common/v-dialog.vue
new file mode 100644
index 0000000..15069c3
--- /dev/null
+++ b/src/components/common/v-dialog.vue
@@ -0,0 +1,59 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-13 10:43:38
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-13 11:10:52
+ * @Description:
+-->
+<template>
+ <div class="v-dialog">
+ <van-dialog v-model="show" title="提示" show-cancel-button @cancel="hanldCancel" @confirm="hanldConfirm">
+ <div class="content">
+ <p>当前支付宝无法办理业务,企业类型商户请使用企业支付宝账号扫码授权,个体工商户请使用经营者支付宝账号扫码授权!</p>
+ </div>
+ </van-dialog>
+ </div>
+</template>
+<script>
+export default {
+ name:'Vdialog',
+ props:{
+ show:{
+ type:Boolean,
+ default:false
+ }
+ },
+ data() {
+ return {
+
+ }
+ },
+ methods:{
+ hanldConfirm(){
+ this.$router.push({
+ path:'/huabei/open',
+ query:{
+ isCreateOrderPush:true,
+ title:'花呗分期',
+ path:this.$route.path,
+ ...this.$route.query
+ }
+ })
+ },
+ hanldCancel(){
+ this.$emit('cancel',false)
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.v-dialog{
+ /deep/.content{
+ display: flex;
+ min-height: 100px;
+ text-align: center;
+ align-items: center;
+ padding: 0 20px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/components/common/v-filter.vue b/src/components/common/v-filter.vue
new file mode 100644
index 0000000..067c1cc
--- /dev/null
+++ b/src/components/common/v-filter.vue
@@ -0,0 +1,573 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-26 10:46:28
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-07 11:20:10
+ * @Description: 全局筛选组件
+ -->
+<template>
+ <div class="filter-box">
+ <van-popup v-model="calcValue" position="right" :style="{ minHeight: '100%',width:'75%',overflow:'scroll', }">
+ <van-collapse v-model="cityCodeArr">
+ <!-- 时间范围 -->
+ <van-collapse-item v-if="hasTime" title="时间范围" name="time">
+ <p class="time-box flex-around-g text-center-g">
+ <time class="time-item" @click="isShow = true;">{{getDateText(startDay) || '请选择起始日期'}}</time>
+ <span>至</span>
+ <time class="time-item" @click="isShow2 = true;">{{getDateText(endDay) || '请选择结束日期'}} </time>
+ </p>
+ </van-collapse-item>
+ <!-- 所属 -->
+ <van-collapse-item v-if="belongArr.length" :title="calcParam.title" name="belongArr">
+ <ul>
+ <li class="filter-item" :style="belongArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[belongArrCode==item.code?'active':'']" v-for="(item) of belongArr" :key="item.code" @click="setCode('belongArrCode',item.code)">
+ {{item.name}}
+ </li>
+ <!-- :class="[belongArrCode==item.code?'active':'']" -->
+ </ul>
+ </van-collapse-item>
+ <!-- 模板 -->
+ <!-- <van-collapse-item v-if="templateArr.length" title="模板" name="template">
+ <ul>
+ <li class="filter-item" :class="[templateArrCode==item.code?'active':'']" v-for="(item) of templateArr" :key="item.code" @click="setCode('templateArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item> -->
+ <!-- 分期期数 -->
+ <van-collapse-item v-if="periodsArr.length" title="分期期数" name="periodsArr">
+ <ul>
+ <li class="filter-item" :style="periodsArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[periodsArrCode==item.code?'active':'']" v-for="(item) of periodsArr" :key="item.code" @click="setCode('periodsArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 风险级别 -->
+ <van-collapse-item v-if="riskLevelArr.length" title="风险级别" name="riskLevelArr">
+ <ul>
+ <li class="filter-item" :style="riskLevelArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[riskLevelArrCode==item.code?'active':'']" v-for="(item) of riskLevelArr" :key="item.code" @click="setCode('riskLevelArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 风险类型 -->
+ <van-collapse-item v-if="riskTypeArr.length" title="风险类型" name="riskTypeArr">
+ <ul>
+ <li class="filter-item" :style="riskTypeArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[riskTypeArrCode==item.code?'active':'']" v-for="(item) of riskTypeArr" :key="item.code" @click="setCode('riskTypeArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 订单状态 -->
+ <van-collapse-item v-if="statusArr.length" title="订单状态" name="status">
+ <ul>
+ <li class="filter-item" :style="statusArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[statusArrCode===item.code?'active':'']" v-for="(item) of statusArr" :key="item.code" @click="setCode('statusArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 支付通道 -->
+ <van-collapse-item v-if="zfbVersionArr.length" title="通道" name="zfbVersion">
+ <ul>
+ <li class="filter-item" :style="zfbVersionArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[zfbVersionArrCode===item.code?'active':'']" v-for="(item) of zfbVersionArr" :key="item.code" @click="setCode('zfbVersionArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 所属渠道 -->
+ <van-collapse-item v-if="channelArr.length" title="所属渠道" name="channel">
+ <ul>
+ <li class="filter-item" :style="channelArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[channelArrCode==item.code?'active':'']" v-for="(item) of channelArr" :key="item.code" @click="setCode('channelArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <!-- 模板 -->
+ <van-collapse-item v-if="templateArr.length" title="模板" name="template">
+ <ul>
+ <li class="filter-item" :style="templateArrCode==item.code?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[templateArrCode==item.code?'active':'']" v-for="(item) of templateArr" :key="item.code" @click="setCode('templateArrCode',item.code)">
+ {{item.name}}
+ </li>
+ </ul>
+ </van-collapse-item>
+
+ <van-collapse-item v-if="hasMoney" :title="customTitle" name="template">
+ <div class="input-box flex-between-g">
+ <input class="input" v-model="startAmt" maxlength="6" type="text" placeholder="请输入起始金额">
+ <span>-</span>
+ <input class="input" v-model="endAmt" maxlength="6" type="text" placeholder="请输入结束金额">
+ </div>
+ </van-collapse-item>
+
+
+ <!-- 省市区联动 -->
+ <van-collapse-item v-if="hasCity" title="省份" name="province_list">
+ <ul>
+ <li class="filter-item" :style="provinceCode==value?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[provinceCode==value?'active':'']"
+ v-for="(text,value) of areaList.province_list" :key="value" @click='getCity(text,value)'>
+ {{text}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <van-collapse-item v-if="hasCity" title="城市" name="city_list">
+ <ul>
+ <li class="filter-item" :style="cityCode==value?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[cityCode==value?'active':'']" v-for="(text,value) of city_list"
+ :key="value" @click='getCounty(text,value)'>
+ {{text}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <van-collapse-item v-if="hasCity" title="区县" name="county_list">
+ <ul>
+ <li class="filter-item" :style="countyCode==value?{color:$store.state.backColor,border:`0.5px solid ${$store.state.backColor}`}:''" :class="[countyCode==value?'active':'']"
+ v-for="(text,value) of county_list" :key="value" @click="setCountyCode(text,value)">
+ {{text}}
+ </li>
+ </ul>
+ </van-collapse-item>
+ <f-search :placeholder="getSearchTips.searchTip" @on-value="onValue" :queryStr='queryStr' v-if="hasSearch"></f-search>
+ <!-- 占位标签 -->
+ <div id="adress" class="slider"></div>
+ </van-collapse>
+
+ </van-popup>
+ <footer class="footer" v-show="calcValue">
+ <van-button class="btn btn-left" @click="reset">重置</van-button>
+ <van-button :color="$store.state.backColor" class="btn btn-right" @click="search">确定</van-button>
+ </footer>
+
+ <van-popup v-model="isShow" position="bottom" :close-on-click-overlay="false">
+ <van-datetime-picker
+ :value="startDay"
+ @cancel="isShow = false;"
+ @confirm="setStartDay"
+ :max-date="new Date()"
+ cancel-button-text='关闭'
+ type="date"
+ />
+ </van-popup>
+ <van-popup v-model="isShow2" position="bottom" :close-on-click-overlay="false">
+ <van-datetime-picker
+ :value="endDay"
+ @cancel="isShow2 = false;"
+ @confirm="setEndDay"
+ :max-date="new Date()"
+ :min-date="startDay || new Date('2010-01-01')"
+ cancel-button-text='关闭'
+ type="date"
+ />
+ </van-popup>
+ </div>
+
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ export default {
+ name: "v-filter",
+ data() {
+ return {
+ orgType: 1,
+ isShow:false,
+ isShow2:false,
+ startDay:'',
+ queryStr:'',
+ endDay:'',
+ cityCodeArr: [],
+ provinceCode: null, //省code
+ city_list: {}, //市
+ cityCode: null, //市code
+ county_list: {}, //区县
+ countyCode: null, //区县code
+ statusArrCode: null,
+ channelArrCode:'',
+ templateArrCode:'',
+ periodsArrCode:'',
+ riskLevelArrCode:'',// 风险级别
+ riskTypeArrCode: '',// 风险类型
+ belongArrCode:'',
+ zfbVersionArrCode:'',
+ startAmt:'', //起始金额
+ endAmt:'',//结束金额
+ }
+ },
+ props: {
+ //vmodel
+ value: {
+ type: Boolean,
+ default: false
+ },
+ // 是否包含城市组件
+ hasCity: {
+ type: Boolean,
+ default: false
+ },
+ //订单状态
+ statusArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //渠道
+ channelArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //模板
+ templateArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //期数
+ periodsArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //风险级别
+ riskLevelArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //风险类型
+ riskTypeArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ //通道
+ zfbVersionArr: {
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ // 所属---(渠道,商户,店员)
+ belongArr:{
+ type: Array,
+ default(){
+ return []
+ }
+ },
+ // 是否有办单员搜索条件
+ hasSearch:{
+ type:Boolean,
+ default:false,
+ },
+ // 是否有办单员搜索条件
+ hasWxScore:{
+ type:Boolean,
+ default:false,
+ },
+ // 是否有金额筛选条件
+ hasMoney:{
+ type:Boolean,
+ default:true,
+ },
+ // 是否显示时间选择
+ hasTime:{
+ type:Boolean,
+ default:true,
+ },
+ customTitle:{
+ type:String,
+ default:'商品金额'
+ },
+ //地区列表——商户管理页面才有
+ areaList:Object
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ calcValue: {
+ get() {
+ return this.value
+ },
+ set(v) {
+ this.$emit('input', v)
+ }
+ },
+ getSearchTips() {
+ let orgType = this.userinfo.orgType,
+ searchTip = '';
+ if(this.hasWxScore){
+ searchTip = '姓名/手机号';
+ }else{
+ if (orgType === 1) {
+ searchTip = '姓名/渠道名称/商户名称';
+ } else if (orgType === 2) {
+ searchTip = '姓名/商户名称';
+ } else if (orgType === 3) {
+ searchTip = '姓名/门店名称';
+ } else {
+ searchTip = '姓名/办单员';
+ }
+ }
+
+ return {
+ searchTip
+ };
+ },
+ calcParam(){
+ let orgType = this.userinfo.orgType,
+ title='',
+ searchKey='';
+ if (orgType === 1) {
+ title = '所属渠道';
+ searchKey = 'chanList';
+ } else if (orgType === 2) {
+ title = '所属商户';
+ searchKey = 'merList';
+ } else if (orgType === 3) {
+ title = '所属门店';
+ searchKey = 'storeList';
+ } else {
+ title = '办单员';
+ searchKey = 'mgrList';
+ }
+ return {
+ title,
+ searchKey
+ };
+ },
+ // 查询参数组合
+ searchParam(){
+ console.log(this.belongArrCode)
+ let insTerm = this.periodsArrCode,
+ key = this.calcParam.searchKey,
+ orderStatus = this.statusArrCode,
+ startDay =this.getDateText(this.startDay),
+ endDay = this.getDateText(this.endDay),
+ startAmt = +this.startAmt || '',
+ endAmt = +this.endAmt || '',
+ provCode = this.provinceCode,
+ cityCode = this.cityCode,
+ countyCode = this.countyCode,
+ zfbVersion = this.zfbVersionArrCode,
+ arr = this.belongArrCode ? [this.belongArrCode] : [],
+ tempList = this.templateArrCode ? [this.templateArrCode] : [],
+ queryStr = this.queryStr,
+ riskLevelArrCode = this.riskLevelArrCode,// 风险级别
+ riskTypeArrCode = this.riskTypeArrCode// 风险类型
+ return {
+ insTerm,
+ orderStatus,
+ [key]:arr,
+ tempList,
+ startDay,
+ endDay,
+ startAmt,
+ endAmt,
+ provCode,
+ cityCode,
+ countyCode,
+ zfbVersion,
+ queryStr,
+ riskLevelArrCode,
+ riskTypeArrCode
+ }
+ },
+ },
+ methods: {
+ // 获取时间日期文字
+ getDateText(date){
+ if(date instanceof Date){
+ let y = date.getFullYear(),
+ m =date.getMonth()+1,
+ d = date.getDate();
+
+ if(m<10){
+ m = '0'+m;
+ }
+ if(d<10){
+ d = '0'+d;
+ }
+ return y +'-' + m + '-' + d;
+ }
+ return '';
+ },
+ // 设置起始日期
+ setEndDay(v){
+ this.endDay = v;
+ this.isShow2 = false;
+ },
+ // 设置结束日期
+ setStartDay(v){
+ this.startDay = v;
+ this.isShow = false;
+ },
+ // 搜索回调
+ onValue(val) {
+ this.queryStr = val;
+ },
+ // 触发查询
+ search(){
+ let notify={
+ type:'warning',
+ message:'请输入正确的数字'
+ };
+ if(this.startAmt && isNaN(this.startAmt)){
+ this.startAmt = '';
+ this.$notify(notify)
+ return
+ }
+ if(this.endAmt && isNaN(this.endAmt)){
+ this.endAmt = '';
+ this.$notify(notify)
+ return
+ }
+ this.$emit('search',this.searchParam)
+ },
+ //设置区县code
+ setCountyCode(text, value) {
+ this.countyCode = value;
+ },
+ // 根据市 code 获取下级区县
+ getCounty(text, value) {
+ this.cityCode = value;
+ this.countyCode = null;
+ let county = this.areaList.county_list;
+ this.county_list = {};
+ for (let key in county) {
+ let code = +key;
+ if (key - code % 100 == value) {
+ this.county_list[key] = county[key]
+ }
+ }
+ },
+ // 根据省 code 获取下级市
+ getCity(text, value) {
+ this.cityCode = null;
+ this.countyCode = null;
+ this.provinceCode = value;
+ let city = this.areaList.city_list;
+ this.county_list = {};
+ this.city_list = {};
+ for (let key in city) {
+ let code = +key;
+ if (key - code % 10000 == value) {
+ this.city_list[key] = city[key]
+ }
+ }
+ },
+ setCode(key,code){
+ console.log(key)
+ console.log(code)
+ this[key] = code;
+ },
+ // 重置
+ reset(){
+ this.statusArrCode = '';
+ this.channelArrCode = '';
+ this.templateArrCode= '';
+ this.periodsArrCode='';
+ this.riskLevelArrCode = '';
+ this.riskTypeArrCode = '';
+ this.belongArrCode='';
+ this.startAmt = '';
+ this.endAmt = '';
+ this.startDay = '';
+ this.endDay = '';
+ this.provinceCode = '';
+ this.cityCode = '';
+ this.countyCode = '';
+ this.queryStr = '';
+ this.zfbVersionArrCode = '';
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .filter-box{
+ width: 100%;
+ }
+ .filter-item {
+ .lh(32px);
+ display: inline-block;
+ width: 32%;
+ margin-bottom: 6px;
+ margin-right: 2%;
+ text-align: center;
+ color: @c-text-666;
+ font-size: 12Px;
+ background-color: @c-bg-f5;
+ padding: 0 2px;
+ box-sizing: border-box;
+ overflow: hidden;
+ vertical-align: bottom;
+ border-radius: 16px;
+ border: .5px solid transparent;
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+
+ &.active {
+ background: rgba(244, 241, 255, 1);
+ border: .5px solid @c-default;
+ color: @c-text-default;
+ }
+ }
+
+ .time-box {
+ .time-item {
+ .lh(32px);
+ width: 110px;
+ font-size: @font-12;
+ color: @c-text-666;
+ background-color: @c-bg-f5;
+ border-radius: 16px;
+ }
+ }
+
+ .footer {
+ position: fixed;
+ z-index: 3000;
+ width: 75%;
+ right: 0;
+ bottom: 0;
+
+ .btn {
+ width: 50%;
+ float: left;
+ font-size: @font-16;
+
+ &.btn-left {
+ color: @c-text-666;
+ background-color: @c-bg-eee;
+ }
+
+ &.btn-right {
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+ }
+ .slider{
+ height: 74px;
+ }
+ .input-box{
+ .input{
+ border: none;
+ width: 45%;
+ padding: 5px 0;
+ outline: none;
+ color: @c-text-black;
+ background-color: @c-bg-f5;
+ text-align: center;
+ font-size: @font-12;
+ border-radius: 16px;
+
+ }
+ }
+</style>
diff --git a/src/components/common/v-gzzj-order-item.vue b/src/components/common/v-gzzj-order-item.vue
new file mode 100644
index 0000000..0a0e297
--- /dev/null
+++ b/src/components/common/v-gzzj-order-item.vue
@@ -0,0 +1,167 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:55:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-23 16:28:59
+ * @Description: 订单组件
+ -->
+<template>
+ <div class="order-item" @click="$emit('click')">
+ <header class="header flex-around-g text-center-g">
+ <div class="flex-1-g" :class="[index!==list.length-1 ? 'border-right' : '']" v-for="(item, index) in list"
+ :key="index">
+ <h5 class="title" :class="[item.color,index===2?'ch-status':'']" >{{item.value}}</h5>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </header>
+ <footer class="footer">
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="orderId" class="flex-start-g">
+ 订单编号:
+ <span class="text-clip-g" style="max-width:120px;">{{orderId}}</span>
+ </p>
+ <p v-if="storeName" class="flex-start-g">
+ 门店:
+ <span class="text-clip-g" style="max-width:120px;">{{storeName}}</span>
+ </p>
+ </slot>
+ </div>
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+
+ <p v-if="orderTime" class="flex-start-g">
+ 订单时间:
+ <time>{{+orderTime | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </slot>
+ </div>
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="signTime" class="flex-start-g">
+ 签约时间:
+ <time>{{+signTime | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </slot>
+ </div>
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="userName" class="flex-start-g">
+ 用户名称:
+ <span class="text-clip-g" style="max-width:120px;">{{userName}}</span>
+ </p>
+ <p v-if="mblNo" class="flex-start-g">
+ 用户电话:
+ <span class="text-clip-g" style="max-width:120px;">{{mblNo}}</span>
+ </p>
+ </slot>
+ </div>
+ </footer>
+ </div>
+</template>
+<script>
+ // list结构说明:
+ // [
+ // {
+ // label:'',
+ // value:'',
+ // color:'' //标识状态颜色
+ // }
+ // ]
+ export default {
+ name: 'v-gzzj-order-item',
+ props: {
+ orderTime: {//时间
+ type:[String,Number],
+ },
+ signTime: {//时间
+ type:[String,Number],
+ },
+ storeName: String, //商户名
+ mblNo: String, //商户名
+ userName: String, //商户名
+ orderId: Number, //用户名
+ list: { //header数据展示
+ type: Array
+ }
+ },
+ created() {
+ console.log(this.list)
+ }
+ }
+</script>
+<style lang="less" scoped>
+
+
+ .ch-status{
+ font-size: 13px!important;
+ width: 80px;
+ margin-left: 20px;
+ }
+
+ .order-item {
+ background-color: @c-bg-fff;
+ margin-bottom: 10px;
+ padding: 0 8px 10px;
+ border-radius: 3px;
+ .header {
+ height: 120px;
+ }
+ // .info{
+ // height: 100%;
+ // .flex(center,center,'',column);
+ // }
+
+ .title {
+ font-size: @font-18;
+ margin-bottom: 8px;
+ }
+
+ .label {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+
+ .footer {
+ height: 100px;
+ line-height: 25px;
+ background-color: #F7F7FA;
+ padding: 0 12px;
+ font-size: @font-12;
+ color: @c-text-666;
+
+ .icon {
+ width: 18px;
+ margin-right: 8px;
+ }
+ }
+
+ .success {
+ color: #19BE6B;
+ }
+
+ .error {
+ color: #ED4014;
+ }
+
+ .warning {
+ color: #FF9900;
+ }
+ }
+
+ .border-right {
+ position: relative;
+ &::after {
+ content: "";
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 32px;
+ background: rgba(230, 230, 230, 1);
+
+ }
+ }
+</style>
diff --git a/src/components/common/v-navbar.vue b/src/components/common/v-navbar.vue
new file mode 100644
index 0000000..8c13dcd
--- /dev/null
+++ b/src/components/common/v-navbar.vue
@@ -0,0 +1,96 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 15:44:44
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-19 16:40:34
+ * @Description:
+ -->
+<template>
+ <div class="nav-bar flex-start-g" :class="[fixed ? 'fixed' : '']">
+ <slot name="left-back">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:44px;" @click="go">
+ <use xlink:href="#iconzuojiantou"></use>
+ </svg>
+ </slot>
+ <h4 class="title text-center-g">{{title}}</h4>
+ <div class="rightText" @click="rightClick">
+ <slot name="right">{{rightText}}</slot>
+ </div>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'v-navbar',
+ props: {
+ title: {
+ type: String,
+ require: true,
+ },
+ rightText: {
+ type: String,
+ },
+ fixed:{
+ type:Boolean,
+ default:false
+ },
+ back:{
+ type:Boolean,
+ default:false
+ }
+ },
+ methods:{
+ rightClick(){
+ this.$emit('right-click')
+ },
+ go(){
+ if(this.back){
+ if(sessionStorage.isdddxt == 1){
+ this.$router.push('/?platNo=ddxt')
+ }else{
+ this.$router.push('/')
+ }
+
+ }else{
+ this.$router.back()
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+ .nav-bar {
+ background-color: @c-bg-fff;
+ .lh(44px);
+ position: relative;
+ padding: 0 20px;
+ z-index: @zIndex-100;
+ &.fixed{
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ }
+
+ .icon {
+ z-index: @zIndex-20;
+ }
+
+ .title {
+ font-size: @font-16;
+ position: absolute;
+ left: 60px;
+ right: 60px;
+ }
+
+ .rightText {
+ font-size: @font-14;
+ position: absolute;
+ right: 20px;
+ height: 44px;
+ min-width: 50px;
+ text-align: right;
+ }
+ }
+</style>
diff --git a/src/components/common/v-order-item.vue b/src/components/common/v-order-item.vue
new file mode 100644
index 0000000..220926a
--- /dev/null
+++ b/src/components/common/v-order-item.vue
@@ -0,0 +1,143 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:55:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-23 16:28:59
+ * @Description: 订单组件
+ -->
+<template>
+ <div class="order-item" @click="$emit('click')">
+ <header class="header flex-around-g text-center-g">
+ <div class="flex-1-g" :class="[index!==list.length-1 ? 'border-right' : '']" v-for="(item, index) in list"
+ :key="index">
+ <h5 class="title" :class="[item.color,index===2?'ch-status':'']" >{{item.value}}</h5>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </header>
+ <footer class="footer">
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="orderId" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ <span class="text-clip-g" style="max-width:120px;">{{orderId}}</span>
+ </p>
+ <p v-if="time" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshijian"></use>
+ </svg>
+ <time>{{+time | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </slot>
+ </div>
+ <p v-if="user" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{user}}</span>
+ </p>
+ </footer>
+ </div>
+</template>
+<script>
+ // list结构说明:
+ // [
+ // {
+ // label:'',
+ // value:'',
+ // color:'' //标识状态颜色
+ // }
+ // ]
+ export default {
+ name: 'v-order-item',
+ props: {
+ time: {//时间
+ type:[String,Number],
+ },
+ user: String, //商户名
+ orderId: Number, //用户名
+ list: { //header数据展示
+ type: Array
+ }
+ },
+ created() {
+ console.log(this.list)
+ }
+ }
+</script>
+<style lang="less" scoped>
+
+
+ .ch-status{
+ font-size: 13px!important;
+ width: 60px;
+ margin-left: 30px;
+ }
+
+ .order-item {
+ background-color: @c-bg-fff;
+ margin-bottom: 10px;
+ padding: 0 8px 10px;
+ border-radius: 3px;
+ .header {
+ height: 80px;
+ }
+ // .info{
+ // height: 100%;
+ // .flex(center,center,'',column);
+ // }
+
+ .title {
+ font-size: @font-18;
+ margin-bottom: 8px;
+ }
+
+ .label {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+
+ .footer {
+ height: 50px;
+ line-height: 25px;
+ background-color: #F7F7FA;
+ padding: 0 12px;
+ font-size: @font-12;
+ color: @c-text-666;
+
+ .icon {
+ width: 18px;
+ margin-right: 8px;
+ }
+ }
+
+ .success {
+ color: #19BE6B;
+ }
+
+ .error {
+ color: #ED4014;
+ }
+
+ .warning {
+ color: #FF9900;
+ }
+ }
+
+ .border-right {
+ position: relative;
+ &::after {
+ content: "";
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 32px;
+ background: rgba(230, 230, 230, 1);
+
+ }
+ }
+</style>
diff --git a/src/components/common/v-scroll-x.vue b/src/components/common/v-scroll-x.vue
new file mode 100644
index 0000000..a717e56
--- /dev/null
+++ b/src/components/common/v-scroll-x.vue
@@ -0,0 +1,32 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-23 09:54:25
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-23 09:55:47
+ * @Description: 公共横向滑动组件
+ -->
+<template>
+ <div class="cardsList">
+ <slot></slot>
+ </div>
+</template>
+
+<script>
+export default {
+ name:'v-scroll-x'
+}
+</script>
+
+<style lang="less" scoped>
+.cardsList{
+ display: -webkit-box;
+ justify-content: flex-start;
+ align-items: flex-start;
+ overflow-x: scroll;
+ overflow-y:hidden;
+ &::-webkit-scrollbar{
+ display: none;
+ }
+
+}
+</style>
diff --git a/src/components/common/v-wxScore-order-item.vue b/src/components/common/v-wxScore-order-item.vue
new file mode 100644
index 0000000..a15dd67
--- /dev/null
+++ b/src/components/common/v-wxScore-order-item.vue
@@ -0,0 +1,159 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:55:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-23 16:28:59
+ * @Description: 订单组件
+ -->
+<template>
+ <div class="order-item" @click="$emit('click')">
+ <header class="header flex-around-g text-center-g">
+ <div class="flex-1-g" :class="[index!==list.length-1 ? 'border-right' : '']" v-for="(item, index) in list"
+ :key="index">
+ <h5 class="title" :class="[item.color,index===2?'ch-status':'']" >{{item.value}}</h5>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </header>
+ <footer class="footer">
+ <div class="flex-between-g">
+ <slot name="bottom-status">
+ <p v-if="userName" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ <span class="text-clip-g" style="max-width:120px;">{{userName}}</span>
+ </p>
+ <p v-if="time" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshijian"></use>
+ </svg>
+ <time>{{+time | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </slot>
+ </div>
+ <!-- <p v-if="user" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{user}}</span>
+ </p> -->
+ <p v-if="contName" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{contName}}</span>
+ </p>
+ <p v-if="term" class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span class="flex-1-g text-clip-g">{{term}}</span>
+ </p>
+ </footer>
+ </div>
+</template>
+<script>
+ // list结构说明:
+ // [
+ // {
+ // label:'',
+ // value:'',
+ // color:'' //标识状态颜色
+ // }
+ // ]
+ export default {
+ name: 'v-wxScore-order-item',
+ props: {
+ time: {//时间
+ type:[String,Number],
+ },
+ userName: String,
+ user: String,
+ contName: String,
+ orderId: Number,
+ term:String,
+ guaranteedAmt: Number,
+ list: { //header数据展示
+ type: Array
+ }
+ },
+ created() {
+ console.log(this.list)
+ }
+ }
+</script>
+<style lang="less" scoped>
+
+
+ .ch-status{
+ font-size: 13px!important;
+ width: 60px;
+ margin-left: 30px;
+ }
+
+ .order-item {
+ background-color: @c-bg-fff;
+ margin-bottom: 10px;
+ padding: 0 8px 10px;
+ border-radius: 3px;
+ .header {
+ height: 80px;
+ }
+ // .info{
+ // height: 100%;
+ // .flex(center,center,'',column);
+ // }
+
+ .title {
+ font-size: @font-18;
+ margin-bottom: 8px;
+ }
+
+ .label {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+
+ .footer {
+ height: 75px;
+ line-height: 25px;
+ background-color: #F7F7FA;
+ padding: 0 12px;
+ font-size: @font-12;
+ color: @c-text-666;
+
+ .icon {
+ width: 18px;
+ margin-right: 8px;
+ }
+ }
+
+ .success {
+ color: #19BE6B;
+ }
+
+ .error {
+ color: #ED4014;
+ }
+
+ .warning {
+ color: #FF9900;
+ }
+ }
+
+ .border-right {
+ position: relative;
+ &::after {
+ content: "";
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 32px;
+ background: rgba(230, 230, 230, 1);
+
+ }
+ }
+</style>
diff --git a/src/components/index.js b/src/components/index.js
new file mode 100644
index 0000000..c0ad637
--- /dev/null
+++ b/src/components/index.js
@@ -0,0 +1,40 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-15 15:46:39
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-30 11:15:38
+ * @Description:
+ */
+import vNavBar from './common/v-navbar';
+import vCell from './common/v-cell';
+import vDatacard from './common/v-datacard';
+import vButtonCircle from './common/v-button-circle';
+import vOrderItem from './common/v-order-item';
+import newvOrderItem from './common/new-v-order-item';
+import vWxScoreOrderItem from './common/v-wxScore-order-item';
+import vGzzjOrderItem from './common/v-gzzj-order-item';
+import vScrollX from './common/v-scroll-x';
+import vFilter from './common/v-filter';
+import fButton from './old/FButton';
+
+let arr = [
+ vNavBar,
+ vCell,
+ vDatacard,
+ vButtonCircle,
+ vOrderItem,
+ newvOrderItem,
+ vWxScoreOrderItem,
+ vGzzjOrderItem,
+ vScrollX,
+ vFilter,
+ fButton
+];
+
+export default {
+ install(Vue,opt){
+ arr.forEach(item=>{
+ Vue.component(item.name,item)
+ })
+ }
+}
diff --git a/src/components/old/FBlock.vue b/src/components/old/FBlock.vue
new file mode 100644
index 0000000..1d8d437
--- /dev/null
+++ b/src/components/old/FBlock.vue
@@ -0,0 +1,41 @@
+<template>
+ <div class="f-block">
+ <p class="block-title vux-1px-b">{{ title }}</p>
+ <div class="block-content">
+ <slot></slot>
+ </div>
+ </div>
+</template>
+
+<script>
+ /**
+ * Created by TANGiMING
+ * 2018-8-7
+ * 一个功能块,可以设置标题,内容自定义
+ * @prop title 定义功能块的标题
+ * @slot 定义功能块内容
+ */
+ export default {
+ name: 'f-block',
+ props: {
+ title: {
+ type: String,
+ required: true,
+ default: '功能块'
+ }
+ }
+ };
+</script>
+<style lang="less" scoped>
+ .f-block {
+ margin-top: 10px;
+ background-color: #fff;
+ .block-title {
+ height: 44px;
+ line-height: 44px;
+ font-size: 15px;
+ padding-left: 20px;
+ color: #3a3a3a;
+ }
+ }
+</style>
diff --git a/src/components/old/FButton.vue b/src/components/old/FButton.vue
new file mode 100644
index 0000000..aa6fe4e
--- /dev/null
+++ b/src/components/old/FButton.vue
@@ -0,0 +1,113 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-13 10:22:41
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-23 09:52:02
+ * @文件说明:按钮组件,仅有2种颜色的按钮
+ * @使用方式: <f-button @on-click="freeze" type="normal" width="160px">冻结渠道</f-button> 金色按钮
+ <f-button @on-click="search">商户查询</f-button> 黑色按钮
+ */
+<template>
+ <div class="f-button-component">
+ <button @click="handleButtonClick"
+ class="f-button"
+ :class="buttonClass" :disabled="disabled" :style="{width:width}">
+ <slot>{{ text }}</slot>
+ </button>
+ <slot name="sbIphoneX"></slot>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'f-button',
+ computed: {
+ // button的class
+ buttonClass() {
+ return [
+ {
+ 'f-btn-disabled': this.disabled,
+ 'f-btn-normal': this.type === 'normal',
+ 'f-btn-fixed': this.fixed
+ }
+ ];
+ }
+ },
+ methods: {
+ // 处理非城市那妞的button的事件
+ handleButtonClick() {
+ if (this.disabled) {
+ return false;
+ }
+ this.$emit('on-click');
+ }
+ },
+ props: {
+ // type的按钮类型,默认按钮:default(黑色)||normal(金色)
+ type: {
+ type: String,
+ default: 'default'
+ },
+ // 是否禁用
+ disabled: {
+ type: Boolean,
+ default: false
+ },
+ // 按钮的文字
+ text: {
+ type: String
+ },
+ // 是否固定在底部
+ fixed: {
+ type: Boolean,
+ default: false
+ },
+ // 按钮宽度,默认宽度为width: 85.3%,在css里面定义的
+ width: {
+ type: String,
+ default: ''
+ }
+ }
+ };
+</script>
+
+<style lang="less">
+ @media (device-width: 375px) and (device-height: 812px) and (-webkit-min-device-pixel-ratio: 3) {
+ //如果以后出现375*812,非ios机型,可以加上下面语句
+ .sbIphoneX {
+ height: 34px !important;
+ background-color: @color-white;
+ }
+ }
+ .f-button-component {
+ .f-button {
+ display: block;
+ width: 85.3%;
+ height: 44px;
+ margin: 32px auto 0;
+ line-height: @font-line-height-base;
+ font-size: @font-size-primary;
+ color: #fff;
+ text-align: center;
+ border: none;
+ background-color: @color-button-default;
+ outline: 0;
+ -webkit-appearance: none;
+ }
+
+ .f-btn-normal {
+ background-color: @color-button-normal;
+ }
+ .f-btn-disabled {
+ background: #a3a3a3;
+ }
+
+ .f-btn-fixed {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ margin: 0;
+ }
+ }
+</style>
diff --git a/src/components/old/FConfirm.vue b/src/components/old/FConfirm.vue
new file mode 100644
index 0000000..115f1d5
--- /dev/null
+++ b/src/components/old/FConfirm.vue
@@ -0,0 +1,132 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 10:21:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 16:06:16
+ * @Description:
+ -->
+<template>
+ <div class="f-confirm">
+ <Confirm :title='title' :confirm-text='confirmText' @on-confirm='confirmFunc' @on-cancel='cancelFunc' :cancel-text='cancelText' :show-cancel-button='showCancelBtn' v-model="showModal">
+ <div class="icon-box" v-if="showIcon">
+ <i class="iconfont" :class="iconClass" :style="{color:iconColor}"></i>
+ </div>
+ <div class="content-box">
+ <slot></slot>
+ </div>
+ </Confirm>
+ </div>
+</template>
+<script>
+ import {Confirm} from 'vux';
+ export default {
+ name: 'f-confirm',
+ components: {
+ Confirm
+ },
+ props: {
+ /**是否显示图标 */
+ showIcon: {
+ type: Boolean,
+ default: false
+ },
+ /**图标类名 */
+ iconClass: {
+ tyoe: String,
+ default: 'scene_Staging-shenhezhong'
+ },
+ /**图标颜色 */
+ iconColor: {
+ type: String,
+ default: '#fff'
+ },
+ /**标题 */
+ title: {
+ type: String
+ },
+ /**是否显示取消按钮 */
+ showCancelBtn: {
+ type: Boolean,
+ default: true
+ },
+ /**确定按钮的文字 */
+ confirmText: {
+ type: String,
+ default: '确定'
+ },
+ /**取消按钮的文字 */
+ cancelText: {
+ type: String,
+ default: '取消'
+ },
+ value: {
+ type: Boolean,
+ default: false
+ }
+ },
+ watch: {
+ value(val) {
+ this.showModal = val;
+ }
+ },
+ methods: {
+ confirmFunc(val) {
+ this.$emit('on-confirm');
+ this.$emit('input', false);
+ },
+ cancelFunc() {
+ this.$emit('on-cancel');
+ this.$emit('input', false);
+ }
+ },
+ data() {
+ return {
+ showModal: false
+ };
+ },
+ created(){
+ this.showModal=this.value
+ }
+ };
+</script>
+<style lang="less" scoped>
+ @import '../../style/mixin.less';
+
+ .f-confirm {
+ position: relative;
+ & /deep/ .weui-dialog {
+ overflow: inherit;
+ .weui-dialog__ft {
+ font-size: @font-size-primary;
+ .weui-dialog__btn_primary {
+ color: @color-text-three;
+ }
+ .weui-dialog__btn_default {
+ color: @color-text-second;
+ }
+ }
+ }
+ .content-box {
+ color: @color-text-second;
+ font-size: @font-size-medium;
+ margin-top: 12px;
+ .flexLayout(center,center,center);
+ }
+ .icon-box {
+ position: absolute;
+ top: -20%;
+ left: 50%;
+ width: 64px;
+ height: 64px;
+ line-height: 64px;
+ border-radius: 50%;
+ background-color: @color-text-three;
+ text-align: center;
+ transform: translateX(-50%);
+ i {
+ color: #fff;
+ font-size: 36px;
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FConfirmSimple.vue b/src/components/old/FConfirmSimple.vue
new file mode 100644
index 0000000..df2a7c6
--- /dev/null
+++ b/src/components/old/FConfirmSimple.vue
@@ -0,0 +1,139 @@
+<!--
+ * @Date: 2019-08-30 10:21:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 10:52:10
+ * @Description:
+ -->
+<template>
+ <div class="f-sample-confirm">
+ <Confirm :title='title' :confirm-text='confirmText'
+ :hide-on-blur="true"
+ @on-hide="handleHide"
+ @on-confirm='confirmFunc' @on-cancel='cancelFunc'
+ :cancel-text='cancelText' :show-cancel-button='showCancelBtn' v-model="showModal">
+ <div class="icon-box" v-if="showIcon">
+ <i class="iconfont" :class="iconClass" :style="{color:iconColor}"></i>
+ </div>
+ <div class="content-box">
+ <slot></slot>
+ </div>
+ </Confirm>
+ </div>
+</template>
+<script>
+ import {Confirm} from 'vux';
+ export default {
+ name: 'f-confirm',
+ components: {
+ Confirm
+ },
+ data() {
+ return {
+ showModal: false
+ };
+ },
+ created(){
+ this.showModal = this.value
+ },
+ props: {
+ /**是否显示图标 */
+ showIcon: {
+ type: Boolean,
+ default: false
+ },
+ /**图标类名 */
+ iconClass: {
+ type: String,
+ default: 'scene_Staging-shenhezhong'
+ },
+ /**图标颜色 */
+ iconColor: {
+ type: String,
+ default: '#fff'
+ },
+ /**标题 */
+ title: {
+ type: String
+ },
+ /**是否显示取消按钮 */
+ showCancelBtn: {
+ type: Boolean,
+ default: true
+ },
+ /**确定按钮的文字 */
+ confirmText: {
+ type: String,
+ default: '确定'
+ },
+ /**取消按钮的文字 */
+ cancelText: {
+ type: String,
+ default: '取消'
+ },
+ value: {
+ type: Boolean,
+ default: false
+ }
+ },
+ watch: {
+ value(val) {
+ this.showModal = val;
+ }
+ },
+ methods: {
+ confirmFunc(val) {
+ this.$emit('on-confirm');
+ this.$emit('input', false);
+ },
+ cancelFunc() {
+ this.$emit('on-cancel');
+ this.$emit('input', false);
+ },
+ handleHide () {
+ this.$emit('on-hide');
+ this.$emit('input', false);
+ }
+ },
+
+ };
+</script>
+<style lang="less" >
+ .f-sample-confirm {
+ position: relative;
+ .weui-dialog {
+ overflow: inherit;
+ .weui-dialog__ft {
+ display: none;
+ font-size: @font-size-primary;
+ .weui-dialog__btn_primary {
+ color: @color-text-three;
+ }
+ .weui-dialog__btn_default {
+ color: @color-text-second;
+ }
+ }
+ }
+ .content-box {
+ color: @color-text-second;
+ font-size: @font-size-medium;
+ line-height: 1.8;
+ text-align: left;
+ }
+ .icon-box {
+ position: absolute;
+ top: -16%;
+ left: 50%;
+ width: 64px;
+ height: 64px;
+ line-height: 64px;
+ border-radius: 50%;
+ background-color: @color-text-three;
+ text-align: center;
+ transform: translateX(-50%);
+ i {
+ color: #fff;
+ font-size: 32px;
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FFilter.vue b/src/components/old/FFilter.vue
new file mode 100644
index 0000000..b1818d2
--- /dev/null
+++ b/src/components/old/FFilter.vue
@@ -0,0 +1,464 @@
++/*
+ * @Author: hzq
+ * @Date: 2018-08-08 15:55:18
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-08 18:14:51
+ * @文件说明:筛选组件 回调函数:on-filter,返回:筛选结果
+ * @使用方式:<f-filter :show.sync="showFilter" @on-filter="onFilter"></f-filter>
+ */
+<template>
+ <div class="f-filter" v-if="show" @click.self="hideFilter">
+ <div class="filter-warp">
+ <div class="filter-title">筛选</div>
+ <div class="filter-content">
+ <div class="content-item" v-for="i in filterList" :key="i.searchKey">
+ <!-- 其他正常筛选条件 -->
+ <div class="content-title" @click="openLi(i)">
+ <span class="title">{{i.title}}</span>
+ <i class="iconfont scene_Staging-return" :class="i.open?'up':'down'"></i>
+ </div>
+ <ul class="content-list" v-show="i.open">
+ <li class="list-item" :class="{liChoosed:j.choosed}" v-for="j in i.data" :key="j.code" @click="liClick(i,j)">{{j.name}}</li>
+ </ul>
+ </div>
+ <!-- 日期筛选条件 -->
+ <div class="content-item" v-if="calendar">
+ <group class="calandarStyle">
+ <div class="content-title">
+ <span class="title">交易日期</span>
+ </div>
+ <div class="calendarDiv">
+ <calendar title="" v-model="startDay" disable-future @on-change="startDayChange" placeholder="请选择起始日期"></calendar>
+ <span class="line">-</span>
+ <calendar title="" v-model="endDay" disable-future @on-change="endDayChange" placeholder="请选择结束日期"></calendar>
+ </div>
+ </group>
+ </div>
+ <!-- 金额筛选条件 -->
+ <div class="content-item" v-if="amt">
+ <group class="amtStyle">
+ <div class="content-title">
+ <span class="title">{{ prodTitle }}</span>
+ </div>
+ <div class="amtDiv">
+ <x-input placeholder="请输入起始金额" type="tel" :max="6" v-model="startAmt" text-align="center" @on-blur="startAmtBlur"></x-input>
+ <span class="line">-</span>
+ <x-input placeholder="请输入结束金额" type="tel" :max="6" v-model="endAmt" text-align="center" @on-blur="endAmtBlur"></x-input>
+ </div>
+ </group>
+ </div>
+ <!-- 省市区筛选条件 -->
+ <div v-if="showArea">
+ <div class="content-item" v-for="i in areaInfo" :key="i.searchKey">
+ <div class="content-title" @click="openLi(i)">
+ <span class="title">{{i.title}}</span>
+ <i class="iconfont scene_Staging-return" :class="i.open?'up':'down'"></i>
+ </div>
+ <ul class="content-list" v-show="i.open">
+ <li class="list-item" :class="{liChoosed:j.choosed}" v-for="j in i.data" :key="j.code" @click="liClick(i,j)">{{j.name}}</li>
+ </ul>
+ </div>
+ </div>
+
+ </div>
+ <div class="filter-footer">
+ <f-button type="normal" width="100%" @on-click="init('reset')">重置</f-button>
+ <f-button width="100%" @on-click="confirm">确定</f-button>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+ import { Calendar } from 'vux';
+ export default {
+ name: 'f-filter',
+ components: { Calendar },
+ props: {
+ show: {
+ // 是否显示该组件
+ type: Boolean,
+ default: false
+ },
+ list: {
+ // 筛选数据
+ type: Array,
+ default() {
+ return [
+ // {
+ // title: '所属渠道',
+ // type: [],
+ // searchKey: 'channel',
+ // data: [
+ // {
+ // name: '七六八八',
+ // code: '7688'
+ // }
+ // ]
+ // },
+ // {
+ // title: '分期期数',
+ // type: '',
+ // searchKey: 'qishu',
+ // data: [
+ // {
+ // name: '3期',
+ // code: '3'
+ // }
+ // ]
+ // }
+ ];
+ }
+ },
+ one: {
+ //是否为单选,默认true
+ type: Boolean,
+ default: true
+ },
+ calendar: {
+ //是否为开启日期选择,默认false
+ type: Boolean,
+ default: false
+ },
+ amt: {
+ //是否为开启金额选择,默认false
+ type: Boolean,
+ default: false
+ },
+ showArea: {
+ //是否为开启省市区联查,默认false
+ type: Boolean,
+ default: false
+ },
+ // 商品金额title
+ prodTitle: {
+ type: String,
+ default: '商品金额'
+ }
+ },
+ data() {
+ return {
+ // 筛选数据列表
+ filterList: null,
+ // 筛选结果
+ filterResult: {},
+ // 开始时间
+ startDay: '',
+ // 结束时间
+ endDay: '',
+ // 开始金额
+ startAmt: '',
+ // 结束金额
+ endAmt: '',
+ // 是否能点击确认
+ canClick: true,
+ // 省市区数据
+ areaInfo: [
+ {
+ title: '省份',
+ open: false,
+ data: [],
+ searchKey: 'provCode'
+ },
+ {
+ title: '城市',
+ open: false,
+ data: [],
+ searchKey: 'cityCode'
+ },
+ {
+ title: '区县',
+ open: false,
+ data: [],
+ searchKey: 'areaCode'
+ }
+ ]
+ };
+ },
+ methods: {
+ // 显示、隐藏
+ openLi(i) {
+ i.open = !i.open;
+ },
+ // 每一个筛选块的点击事件
+ liClick(i, j) {
+ if (this.one) {
+ i.data.map(val => {
+ if (val.code === j.code) {
+ j.choosed = !j.choosed;
+ } else {
+ val.choosed = false;
+ }
+ });
+ if (Array.isArray(this.filterResult[i.searchKey])) {
+ this.filterResult[i.searchKey] = j.choosed ? [j.code] : [];
+ } else {
+ this.filterResult[i.searchKey] = j.choosed ? j.code : '';
+ }
+ if (this.showArea) {
+ if (i.searchKey === 'provCode') {
+ let childList = this.$copy(j.childList);
+ childList.map(val => this.$set(val, 'choosed', false));
+ this.areaInfo[1].data = j.choosed ? childList : [];
+ this.areaInfo[2].data = [];
+ this.filterResult.cityCode = '';
+ this.filterResult.areaCode = '';
+ } else if (i.searchKey === 'cityCode') {
+ let childList = this.$copy(j.childList);
+ childList.map(val => this.$set(val, 'choosed', false));
+ this.areaInfo[2].data = j.choosed ? childList : [];
+ this.filterResult.areaCode = '';
+ }
+ }
+ } else {
+ j.choosed = !j.choosed;
+ let index = this.filterResult[i.searchKey].findIndex(val => {
+ return val === j.code;
+ });
+ if (index === -1) {
+ this.filterResult[i.searchKey].push(j.code);
+ } else {
+ this.filterResult[i.searchKey].splice(index, 1);
+ }
+ }
+ },
+ // 开始日期值改变时触发
+ startDayChange() {
+ this.filterResult.startDay = this.startDay;
+ },
+ // 结束日期值改变时触发
+ endDayChange() {
+ if (
+ Number(new Date(this.endDay)) < Number(new Date(this.startDay))
+ ) {
+ this.$tool.toast('交易日期错误');
+ this.endDay = '';
+ return;
+ }
+ this.filterResult.endDay = this.endDay;
+ },
+ // 开始金额失去焦点时触发
+ startAmtBlur() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.startAmt)) {
+ this.canClick = true;
+ this.filterResult.startAmt = this.startAmt;
+ } else {
+ this.startAmt = Number(this.startAmt);
+ if (isNaN(this.startAmt)) {
+ v.toast('请输入正确的数字');
+ this.startAmt = '';
+ this.canClick = false;
+ } else {
+ this.canClick = true;
+ this.filterResult.startAmt = this.startAmt;
+ }
+ }
+ },
+ // 结束金额失去焦点时触发
+ endAmtBlur() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.endAmt)) {
+ this.canClick = true;
+ this.filterResult.endAmt = this.endAmt;
+ } else {
+ this.endAmt = Number(this.endAmt);
+ if (isNaN(this.endAmt)) {
+ v.toast('请输入正确的数字');
+ this.endAmt = '';
+ this.canClick = false;
+ } else {
+ this.canClick = true;
+ this.filterResult.endAmt = this.endAmt;
+ }
+ }
+ },
+ // 底部【确定】按钮,回调函数,返回选中的筛选值
+ confirm() {
+ if (this.canClick) {
+ if (Number(this.endAmt) < Number(this.startAmt)) {
+ this.$tool.toast('交易金额错误');
+ return;
+ }
+ let result = this.$copy(this.filterResult);
+ for (let k in result) {
+ if (this.$tool.checkValEmpty(result[k])) delete result[k];
+ }
+ this.hideFilter();
+ this.$emit('on-filter', result);
+ } else this.canClick = true;
+ },
+ // 初始化筛选数据
+ init(flag) {
+ if (this.filterList.length) {
+ this.filterList.map(val => {
+ if (flag === 'init') this.$set(val, 'open', false);
+ let value = this.one ? val.type : [];
+ this.$set(this.filterResult, val.searchKey, value);
+ val.data.map(_val => this.$set(_val, 'choosed', false));
+ });
+ this.startDay = '';
+ this.endDay = '';
+ this.startAmt = '';
+ this.endAmt = '';
+ if (this.calendar) {
+ this.filterResult.startDay = '';
+ this.filterResult.endDay = '';
+ }
+ if (this.amt) {
+ this.filterResult.startAmt = '';
+ this.filterResult.endAmt = '';
+ }
+ }
+ if (flag === 'reset' && this.showArea) this.initArea('reset');
+ },
+ // 初始化省市区筛选数据
+ initArea(flag) {
+ this.areaInfo.map(val => {
+ if (flag === 'init') this.$set(val, 'open', true);
+ this.$set(this.filterResult, val.searchKey, '');
+ val.data.map(_val => this.$set(_val, 'choosed', false));
+ });
+ this.areaInfo[1].data = [];
+ this.areaInfo[2].data = [];
+ },
+ // 隐藏筛选组件
+ hideFilter() {
+ this.$emit('hideFilter', false);
+ this.$emit('update:show', false);
+ }
+ },
+ watch: {
+ list(val) {
+ this.filterList = this.$copy(val);
+ this.init('init');
+ }
+ },
+ activated() {
+ this.filterList = this.$copy(this.list);
+ this.init('init');
+ if (this.showArea) {
+ this.$api.getOrgAreaInfo({ orgType: 2 }).then(res => {
+ this.areaInfo[0].data = this.$copy(res.body);
+ this.initArea('init');
+ });
+ }
+ }
+ };
+</script>
+
+<style lang='less' scoped>
+ .f-filter {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 500;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+ .filter-warp {
+ height: 100%;
+ margin-left: 75px;
+ background-color: #fff;
+ .filter-title {
+ height: 44px;
+ line-height: 44px;
+ padding: 0 12px;
+ font-size: @font-size-medium;
+ color: @color-text-placeholder;
+ background-color: @backgroundColor;
+ }
+ .filter-content {
+ height: calc(~'100% - 88px');
+ overflow-y: auto;
+ padding: 0 12px;
+ .content-item {
+ margin-bottom: 12px;
+ .content-title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 37px;
+ .title {
+ color: @color-text-main;
+ font-size: @font-size-medium;
+ }
+ .iconfont {
+ color: @color-text-placeholder;
+ font-size: @font-size-medium;
+ }
+ .up {
+ transform: rotate(-90deg);
+ }
+ .down {
+ transform: rotate(90deg);
+ }
+ }
+ .content-list {
+ .list-item {
+ display: inline-block;
+ width: 32%;
+ height: 44px;
+ margin-bottom: 2%;
+ margin-right: 2%;
+ text-align: center;
+ line-height: 44px;
+ color: @color-text-main;
+ font-size: @font-size-small;
+ background-color: @backgroundColor;
+ overflow: hidden;
+ vertical-align: bottom;
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+ }
+ .liChoosed {
+ color: #fff;
+ background-color: @color-button-normal;
+ }
+ }
+ .calendarDiv {
+ display: flex;
+ align-items: center;
+ .line {
+ height: 44px;
+ line-height: 44px;
+ }
+ }
+ .amtStyle {
+ & /deep/ .weui-cells {
+ &::before,
+ &::after {
+ display: none;
+ }
+ .amtDiv {
+ display: flex;
+ align-items: center;
+ .weui-cell {
+ flex: 1;
+ padding: 0;
+ &::before,
+ &::after {
+ display: none;
+ }
+ .weui-input::-webkit-input-placeholder {
+ font-size: @font-size-small;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .filter-footer {
+ display: flex;
+ & /deep/ .f-button-component {
+ flex: 1;
+ .f-button {
+ margin: 0;
+ }
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FFooter.vue b/src/components/old/FFooter.vue
new file mode 100644
index 0000000..7debf18
--- /dev/null
+++ b/src/components/old/FFooter.vue
@@ -0,0 +1,57 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-08 10:08:52
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-23 09:38:25
+ * @文件说明: 底部tabbar选项组件
+ * @使用方式:<f-footer index="2"></f-footer>
+ */
+<template>
+ <tabbar class="tabbar">
+ <tabbar-item v-for="(i,index) in footerMenu" :key="index" :selected="index===currIndex" @on-item-click="$router.push(i.router)">
+ <i slot="icon" class="iconfont" :class="i.icon"></i>
+ <span slot="label">{{i.label}}</span>
+ </tabbar-item>
+ </tabbar>
+</template>
+
+<script>
+ import {Tabbar, TabbarItem} from 'vux';
+
+ export default {
+ name: 'f-footer',
+ components: {Tabbar, TabbarItem},
+ data() {
+ return {
+ footerMenu: []
+ };
+ },
+ computed: {
+ currIndex() {
+ return this.footerMenu.findIndex(val => {
+ return val.router === this.$route.path;
+ });
+ }
+ },
+ created() {
+ this.footerMenu = sessionStorage.getItem('footerMenu');
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .tabbar {
+ position: fixed;
+ height: 49px;
+ z-index: 499;
+ &::before {
+ border-top-color: @color-line !important;
+ }
+ & /deep/ .weui-tabbar__icon {
+ height: 24px;
+ .iconfont {
+ font-size: @font-size-primary;
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FLoad.vue b/src/components/old/FLoad.vue
new file mode 100644
index 0000000..20628a4
--- /dev/null
+++ b/src/components/old/FLoad.vue
@@ -0,0 +1,52 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-07 09:23:43
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-13 16:10:18
+ * @文件说明:全局加载组件
+ * @使用方式:this.$loading({isLoading: false})
+ */
+<template>
+ <div class="f-load">
+ <loading :show="isLoading" text="加载中"></loading>
+ </div>
+</template>
+
+<script>
+ import {Loading, TransferDomDirective as TransferDom} from 'vux';
+ export default {
+ name: 'f-load',
+ directives: {TransferDom},
+ components: {Loading},
+ computed: {
+ isLoading() {
+ return this.$store.state.isLoading;
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .f-load {
+ & /deep/ .weui-toast {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 84px;
+ height: 84px;
+ min-height: 84px;
+ .weui-loading {
+ width: 28px;
+ height: 28px;
+ margin: 0;
+ }
+ .weui-toast__content {
+ position: relative;
+ top: 7px;
+ margin: 0;
+ font-size: @font-size-small;
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FNoData.vue b/src/components/old/FNoData.vue
new file mode 100644
index 0000000..72a70a1
--- /dev/null
+++ b/src/components/old/FNoData.vue
@@ -0,0 +1,35 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-10 16:22:09
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-10 16:41:27
+ * @文件说明:没有数据组件
+ * @使用方式:<f-no-data></f-no-data>
+ */
+<template>
+ <div class="f-no-data">
+ <img class="img" src="../../assets/imgs/nodata.png" alt="nodata">
+ <p class="text">亲,还没相关数据哦</p>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'f-no-data'
+ };
+</script>
+
+<style lang='less' scoped>
+ .f-no-data {
+ margin-top: 80px;
+ text-align: center;
+ .img {
+ width: 91px;
+ }
+ .text {
+ margin-top: 15px;
+ font-size: @font-size-medium;
+ color: @color-text-placeholder;
+ }
+ }
+</style>
diff --git a/src/components/old/FPosition.vue b/src/components/old/FPosition.vue
new file mode 100644
index 0000000..fcbbe96
--- /dev/null
+++ b/src/components/old/FPosition.vue
@@ -0,0 +1,103 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-08 11:05:56
+ * @Last Modified by: zxq
+ * @Last Modified time: 2018-08-18 14:00:10
+ * @文件说明:字母列表组件
+ * @使用方式:<f-position> <div>你的列表代码</div> </f-position>,可参考:views/agent/channelManagement.vue
+ */
+<template>
+ <div class="position-page">
+ <!--滚动区域-->
+ <div class="position-content" :style="{height: contentHeight}" ref="posContent">
+ <!--数据列表-->
+ <slot></slot>
+ <!--首字母列表-->
+ <ul class="letter_ul">
+ <li v-for="letter in letterList" :key="letter" v-html="letter" @click="clickLetter(letter)"></li>
+ </ul>
+ </div>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'f-position',
+ props: {
+ height: {
+ // 需要减去的高度
+ type: Number,
+ default: 96
+ },
+ letterList: {
+ // 字母列表数据
+ type: Array,
+ default() {
+ return [
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ 'F',
+ 'G',
+ 'H',
+ 'J',
+ 'K',
+ 'L',
+ 'M',
+ 'N',
+ 'P',
+ 'Q',
+ 'R',
+ 'S',
+ 'T',
+ 'W',
+ 'X',
+ 'Y',
+ 'Z'
+ ];
+ }
+ }
+ },
+ computed: {
+ contentHeight() {
+ // 计算列表内容高度
+ return document.documentElement.clientHeight - this.height + 'px';
+ }
+ },
+ methods: {
+ // 点击一个字母事件
+ clickLetter(letter) {
+ let dom = document.getElementById('letter_' + letter);
+ if (dom) {
+ this.$refs.posContent.scrollTop = dom.offsetTop - this.height;
+ } else {
+ // this.$refs.posContent.scrollTop = 0;
+ }
+ }
+ }
+ };
+</script>
+
+
+<style lang="less" scoped>
+ .position-page {
+ .position-content {
+ overflow-y: auto;
+ }
+ .letter_ul {
+ position: fixed;
+ top: 50%;
+ right: 0px;
+ width: 30px;
+ text-align: center;
+ font-size: @font-size-small;
+ color: @color-text-three;
+ background-color: transparent;
+ transform: translate3d(0, -50%, 0);
+ z-index: 999;
+ line-height: 1.5;
+ }
+ }
+</style>
diff --git a/src/components/old/FSearch.vue b/src/components/old/FSearch.vue
new file mode 100644
index 0000000..a978bbb
--- /dev/null
+++ b/src/components/old/FSearch.vue
@@ -0,0 +1,80 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 10:21:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 16:06:52
+ * @Description:
+ -->
+/*
+* @Author: hzq
+* @Date: 2018-08-08 15:12:59
+* @Last Modified by: hzq
+* @Last Modified time: 2018-08-10 16:13:12
+* @文件说明:圆角搜索输入框组件--实时搜索0.2s延迟 回调函数:on-value,返回输入框的值
+* @使用方式: <f-search placeholder="渠道名称/负责人姓名/负责人电话" @on-value="onValue"></f-search>,可参考:views/agent/channelManagement.vue
+*/
+<template>
+ <div class="f-search">
+ <group>
+ <x-input ref="inputDom" :placeholder="placeholder" v-model="queryStr" :debounce="200" @on-change="inputChange" :show-clear="true">
+ <i slot="label" class="iconfont scene_Staging-normal"></i>
+ </x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'f-search',
+ props: {
+ placeholder: {
+ //暗提示文字
+ type: String,
+ default: '请输入'
+ },
+ queryStr: {
+ type: String
+ }
+ },
+ methods: {
+ inputChange(value) {
+ this.$emit('on-value', value.trim());
+ },
+ },
+ deactivated() {
+ this.$refs.inputDom.reset();
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .f-search {
+ & /deep/ .weui-cells {
+ height: 32px;
+ margin: 10px 12px;
+ border-radius: 50px;
+
+ &::after,
+ &::before {
+ display: none;
+ }
+
+ .weui-cell {
+ height: 32px;
+ padding: 5px 15px;
+
+ &::after {
+ display: none;
+ }
+
+ .scene_Staging-normal {
+ margin-right: 10px;
+ color: @color-text-placeholder;
+ }
+ }
+
+ }
+ }
+
+</style>
diff --git a/src/components/old/FSpace.vue b/src/components/old/FSpace.vue
new file mode 100644
index 0000000..4a856e6
--- /dev/null
+++ b/src/components/old/FSpace.vue
@@ -0,0 +1,41 @@
+<template>
+ <div>
+ <div class="f-space-small" v-if="type === 'small'"></div>
+ <div class="f-space-large" v-if="type === 'large'"></div>
+ </div>
+</template>
+
+<script>
+ /**
+ * Created by c.y on 2018/3/16.
+ * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件)
+ * 全局板块的区分,以及footer的遮挡空白区域, small代表版块的区分,large代表footer的遮挡空白区域
+ */
+ export default {
+ name: 'fspace',
+ props: {
+ type: {
+ type: String,
+ default: 'small'
+ }
+ }
+ };
+</script>
+
+<style lang="less">
+ .f-space-small {
+ width: 100%;
+ height: 10px;
+ // background-color: @color-background-default;
+ }
+ .f-space-large {
+ width: 100%;
+ height: 59px;
+ background: transparent;
+ }
+ @media (device-width: 375px) and (device-height: 812px) and (-webkit-min-device-pixel-ratio: 3) {
+ .f-space-large {
+ height: 83px;
+ }
+ }
+</style>
diff --git a/src/components/old/FTips.vue b/src/components/old/FTips.vue
new file mode 100644
index 0000000..9e68d63
--- /dev/null
+++ b/src/components/old/FTips.vue
@@ -0,0 +1,28 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-06 15:19:07
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-07 15:29:15
+ * @文件说明:页面提示文字
+ */
+<template>
+ <div class="f-tips">
+ <slot></slot>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'f-tips'
+ };
+</script>
+
+<style lang="less" scoped>
+ .f-tips {
+ padding: 10px 15px;
+ // height: 40px;
+ // line-height: 40px;
+ color: @color-text-three;
+ font-size: @font-size-small;
+ }
+</style>
diff --git a/src/components/old/FToast.vue b/src/components/old/FToast.vue
new file mode 100644
index 0000000..f8a0532
--- /dev/null
+++ b/src/components/old/FToast.vue
@@ -0,0 +1,83 @@
+/*
+ * @Author: hzq
+ * @Date: 2018-08-07 09:23:43
+ * @Last Modified by: hzq
+ * @Last Modified time: 2018-08-13 16:11:17
+ * @文件说明:非文字提示组件-成功、失败、网络异常
+ * @使用方式:this.$toast({
+ type: 'success||fail||network',
+ text: '冻结成功'
+ });
+ */
+<template>
+ <div class="f-toast">
+ <div v-if="toastType">
+ <toast :value="true" position="middle" :is-show-mask="true" :time="1000" @on-hide="onHide">
+ <div slot="default" class="slot">
+ <i class="iconfont" :class="iconClass"></i>
+ <div>{{toastText}}</div>
+ </div>
+ </toast>
+ </div>
+ </div>
+</template>
+
+<script>
+ import {Toast} from 'vux';
+ export default {
+ name: 'f-toast',
+ components: {Toast},
+ computed: {
+ iconClass() {
+ // 计算iconfont
+ if (this.$store.state.toastType === 'success')
+ return 'scene_Staging-chenggong';
+ else if (this.$store.state.toastType === 'fail')
+ return 'scene_Staging-shibai';
+ else if (this.$store.state.toastType === 'network')
+ return 'scene_Staging-wangluoyichang';
+ },
+ toastType() {
+ return this.$store.state.toastType;
+ },
+ toastText() {
+ return this.$store.state.toastText;
+ }
+ },
+ methods: {
+ onHide() {
+ this.$toast({type: '', tetx: ''});
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .f-toast {
+ & /deep/ .weui-toast {
+ width: 84px;
+ height: 84px;
+ min-height: 84px;
+ .weui-icon_toast {
+ display: none;
+ }
+ .weui-toast__content {
+ height: 84px;
+ min-height: 84px;
+ margin: 0;
+ font-size: @font-size-small;
+ .slot {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ height: 84px;
+ min-height: 84px;
+ .iconfont {
+ font-size: 28px;
+ }
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/components/old/FUpLoad.vue b/src/components/old/FUpLoad.vue
new file mode 100644
index 0000000..986269b
--- /dev/null
+++ b/src/components/old/FUpLoad.vue
@@ -0,0 +1,155 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 10:21:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-30 10:21:30
+ * @Description:
+ -->
+/*
+ * @Author: hzq
+ * @Date: 2018-07-24 15:22:44
+ * @Last Modified by: CL
+ * @Last Modified time: 2019-01-29 16:49:46
+ * @说明: 上拉加载、下拉刷新组件,现用于客户列表、订单列表、客户经理列表
+ * 参数说明 : defheight 默认高度,距离底部的高度
+ * @使用说明: 以下为使用方法
+ <f-upload :querys="querys" apiUrl="clientList" @returnData="returnData">
+ //以下代码为你的列表html
+ <ul>
+ <li>你的列表数据</li>
+ </ul>
+ //以上代码为你的列表html
+ </f-upload>
+ */
+
+<template>
+ <div class="f-upload">
+ <Scroller ref="scroller"
+ lock-x
+ :height="defHeight" use-pullup :pullup-config="pullUpConfig" @on-pullup-loading="upLoadData">
+ <div>
+ <slot></slot>
+ </div>
+ <divider v-if="showNone">我是有底线的</divider>
+ </Scroller>
+ </div>
+</template>
+
+<script>
+import { Scroller, Divider } from 'vux';
+export default {
+ name: 'f-upload',
+ components: { Scroller, Divider},
+ props: {
+ apiUrl: {
+ //数据请求接口地址,必填
+ type: String,
+ required: true
+ },
+ querys: {
+ //数据请求接口参数,选填
+ type: Object
+ },
+ pageSize: {
+ // 查询数量,选填
+ type: Number,
+ default: 10
+ },
+ lastId: {
+ // 列表最后一个数据的id,用于上拉加载查询,必填
+ required: true,
+ default: '001'
+ },
+ disablePullup: {
+ // 是否禁用上拉
+ default: 1
+ },
+ loadData: {
+ // 是否在加载数据
+ type: Boolean,
+ default: false
+ },
+ defHeight: {
+ // 是否在加载数据
+ type: String,
+ default: "-150"
+ },
+ showNone: {
+ type: Boolean,
+ }
+ },
+ data() {
+ return {
+ //上拉加载 组件参数
+ pullUpConfig: {
+ height: 50,
+ downContent: '释放加载',
+ upContent: '上拉加载',
+ loadingContent: '正在加载...'
+ },
+ //是否正在访问接口
+ isLoadData: false,
+ };
+ },
+ watch: {
+ disablePullup(val) {
+ if (val.length) {
+ if (val.length % this.pageSize) {
+ this.$refs.scroller.disablePullup();
+ } else {
+ this.$refs.scroller.enablePullup();
+ }
+ } else {
+ this.$refs.scroller.disablePullup();
+ }
+ },
+ loadData(val) {
+ if (val) {
+ this.$refs.scroller.reset({ top: 0 });
+ }
+ },
+ },
+
+ methods: {
+ //上拉加载数据
+ upLoadData() {
+ // 1.判断是否已经在加载数据了
+ if (this.isLoadData) return;
+ this.isLoadData = true;
+ // 2.收集【上拉刷新】操作所需的参数
+ let obj = {
+ ...this.querys,
+ orderId: this.lastId
+ };
+ // 3.访问接口
+ this.$api[this.apiUrl](obj).then(res => {
+ if (res.body.length !== this.pageSize) {
+ // 禁用上拉, 判断页面是否加载完成
+ this.$refs.scroller.disablePullup();
+ }
+ // 将列表数据返回给父组件
+ this.$emit('returnData', res.body);
+ setTimeout(() => {
+ this.$nextTick(() => {
+ this.isLoadData = false;
+ // 下拉加载操作完成
+ this.$refs.scroller.donePullup();
+ // this.$refs.scroller.reset({top: 0});
+ });
+ }, 200);
+ });
+ }
+ },
+ created() {
+ this.isLoadData = false;
+ }
+};
+</script>
+
+<style lang="less" scoped>
+ .f-upload {
+ & /deep/ .xs-plugin-pullup-container {
+ line-height: 50px;
+ }
+ }
+</style>
diff --git a/src/components/old/FVercode.vue b/src/components/old/FVercode.vue
new file mode 100644
index 0000000..5ef2ceb
--- /dev/null
+++ b/src/components/old/FVercode.vue
@@ -0,0 +1,118 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 10:21:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 16:06:30
+ * @Description:
+ -->
+<template>
+ <div class="f-vercode" :style="{margin:margin?'10px 0':'0'}">
+ <group>
+ <x-input placeholder='请输入短信验证码' @on-change='changeVal' v-model="verCode" :max="4">
+ <div slot="right" class="getVerCode" :style="{color:abledClick?'#bfa073':'#a3a3a3'}" @click="getStatus">{{ verText }}</div>
+ </x-input>
+ </group>
+ </div>
+</template>
+<script>
+ export default {
+ name: 'f-vercode',
+ data() {
+ return {
+ verCode: '',
+ abledClick: true,
+ verText: '发送验证码',
+ timer: null
+ };
+ },
+ props: {
+ clear: {
+ type: Boolean,
+ default: false
+ },
+ value: {
+ type: String,
+ default: ''
+ },
+ passStatus: {
+ type: Boolean,
+ required: true,
+ default: false
+ },
+ api: {
+ type: String,
+ required: true,
+ default: ''
+ },
+ params: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ },
+ margin: {
+ type: Boolean,
+ default: false
+ }
+ },
+ watch: {
+ passStatus(val) {
+ if (val) {
+ this.sendCode();
+ }
+ },
+ clear(val) {
+ if (val) {
+ this.abledClick = true;
+ clearInterval(this.timer);
+ this.verText = '发送验证码';
+ this.$emit('update:passStatus', false);
+ }
+ }
+ },
+ methods: {
+ changeVal(val) {
+ this.$emit('input', val);
+ },
+ getStatus() {
+ this.$emit('sendCode');
+ },
+ sendCode() {
+ if (!this.abledClick) {
+ return;
+ }
+ this.abledClick = false;
+ // 设置倒计时
+ let countDown = 60;
+ this.verText = countDown + 's后重发';
+ this.timer = setInterval(() => {
+ countDown--;
+ this.verText = countDown + 's后重发';
+ if (countDown === 0) {
+ clearInterval(this.timer);
+ this.verText = '重新发送';
+ this.$emit('update:passStatus', false);
+ this.abledClick = true;
+ }
+ }, 1000);
+ //开始拉取接口
+ this.$api[this.api](this.params).then(res => {
+ this.$emit('end', res);
+ });
+ }
+ }
+ };
+</script>
+<style lang="less" scoped>
+.f-vercode {
+ .getVerCode {
+ width: 105px;
+ text-align: center;
+ box-sizing: border-box;
+ padding-left: 18px;
+ border-left: 1px solid #dddddd;
+ color: @color-text-three;
+ font-size: @font-size-medium;
+ }
+}
+</style>
diff --git a/src/components/old/upload/uploadImg.vue b/src/components/old/upload/uploadImg.vue
new file mode 100644
index 0000000..9368dd1
--- /dev/null
+++ b/src/components/old/upload/uploadImg.vue
@@ -0,0 +1,375 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-25 10:54:21
+ * @Description:
+ -->
+<template>
+ <div class="component-photo-upload">
+ <!--title 和上传按钮的图标-->
+ <div class="pic-title">
+ <h4>{{ title }}</h4>
+ </div>
+ <!--图片上传列表,删除即重新上传-->
+ <div class="photo-list">
+ <!--图片上传列表-->
+ <div
+ class="pic-item-box"
+ v-for="(item, index) in picList"
+ v-if="picList instanceof Array && picList.length"
+ :key="index"
+ >
+ <div class="close-div">
+ <div class="close-div-box">
+ <van-icon name="clear" v-if="picList.length > 1" @click="deletPhoto(item,index)" />
+ </div>
+ </div>
+ <img :src="item.fileUrl" @click="handleDeletePicture(index)" />
+ </div>
+ <!--上传按钮-->
+ <div class="pic-item-box" @click="handleUploadPicture" v-if="showUploadBtn">
+ <i class="iconfont scene_Staging-jiahao"></i>
+ </div>
+ </div>
+ <!-- 真正的上传按钮-->
+ <div>
+ <input
+ style="display: none"
+ type="file"
+ ref="androidInputFileImage"
+ @change="handlePhotoChange($event)"
+ accept="image/*"
+ />
+ <input
+ style="display: none"
+ type="file"
+ ref="androidInputFileCapture"
+ @change="handlePhotoChange($event)"
+ accept="image/*"
+ capture="camera"
+ />
+ </div>
+ <!--选择上传图片还是拍照-->
+
+ <van-action-sheet
+ v-model="selectModel"
+ :close-on-click-overlay="false"
+ cancel-text="取消"
+ :actions="nav"
+ @select="handleMenuSelect"
+ ></van-action-sheet>
+ </div>
+</template>
+
+<script>
+import { SET_APP_LOADING } from "@/store/mutations-types";
+import { mapMutations } from "vuex";
+import EXIF from "exif-js";
+
+import { _imgCompress, _fileToBase64 } from "@/utils/index";
+import Vue from "vue";
+import { Icon } from "vant";
+
+Vue.use(Icon);
+export default {
+ name: "sceneUploadFile",
+ data() {
+ return {
+ selectModel: false, // 模态窗选择拍照还是相册
+ deleteIndex: -1, // 删除图片的index
+ nav: [{ name: "拍照" }, { name: "从手机相册选择" }]
+ };
+ },
+ props: [
+ "title",
+ "fileType", // 文件类型
+ "picList",
+ "sourceType",
+ "typeId"
+ ],
+ computed: {
+ showUploadBtn() {
+ let num = Number(this.fileType),
+ isArray = Array.isArray(this.picList);
+
+ // 这里只能上传一张
+ if (
+ num === 0 ||
+ num === 2 ||
+ num === 3 ||
+ num === 8 ||
+ num === 9 ||
+ num === 11 ||
+ num === 14 ||
+ num === 25
+ ) {
+ return isArray && this.picList.length < 1;
+ } else if (num === 10 || num === 13) {
+ // 这个类型,只能上传两张
+ return isArray && this.picList.length < 2;
+ } else {
+ return isArray && this.picList.length < 3;
+ }
+ }
+ },
+ methods: {
+ ...mapMutations([SET_APP_LOADING]),
+ //删除照片
+ deletPhoto(item, i) {
+ //console.log(item);
+ this.picList.splice(i, 1);
+ },
+ // 处理图片上传的事件(deleteIndex---删除图片的索引)
+ handlePhotoChange: function(evt) {
+ let that = this;
+ that.SET_APP_LOADING(true);
+ // 图片是单选还是多选
+ const files = Array.prototype.slice.call(evt.target.files);
+ // 图片的处理
+ files.forEach(function(file, i) {
+ // 图片的拍摄方向
+ var orientation;
+ // 格式是否支持的判断
+ if (!/\/(?:jpg|jpeg|png)/i.test(file.type)) {
+ that.$vux.toast.text("仅支持jpg|png图片格式", "middle");
+ that.SET_APP_LOADING(false);
+ return;
+ }
+ // 读取图片的元信息
+ EXIF.getData(file, function() {
+ orientation = EXIF.getTag(this, "Orientation");
+ });
+ // 获取文件内容
+ let reader = new FileReader();
+ reader.onload = function() {
+ that.$refs.androidInputFileCapture.value = null;
+ that.$refs.androidInputFileImage.value = null;
+ // 使用exif,处理图片的旋转问题,然后执行回调函数
+ that.getImgData(this.result, orientation, function(data) {
+ // 这里可以使用校正后的图片data了
+ var img = new Image();
+ img.src = data;
+
+ // 图片加载完毕之后进行压缩,然后上传
+ if (img.complete) {
+ callback();
+ } else {
+ img.onload = callback;
+ }
+ // 图片的路径获取成功后
+ function callback() {
+
+ // 压缩后的图片的base64字符串
+ let data = that.compress(img);
+ // 调取接口上传图片
+ that.submitUploadImg(that.fileType, data, that.deleteIndex);
+ }
+ });
+ };
+ reader.readAsDataURL(file);
+ });
+ },
+ // type文件上传的路径,data图片的base64字符串(删除图片即重新上传)
+ submitUploadImg: function(type, base64, deleteIndex) {
+ let that = this;
+ // 防止操作的模态窗
+ let submitInfo = {
+ base64Data: base64.split(",")[1], // 文件base64
+ fileType: type,
+ suffix: base64
+ .split(",")[0]
+ .split(";")
+ ["0"].split("/")[1]
+ };
+ this.$api
+ .merUploadPhoto({
+ ...submitInfo,
+ sourceType: that.sourceType
+ })
+ .then(
+ res => {
+ // 如果存在删除图片索引
+ if (deleteIndex >= 0) {
+ // 删除以前的那张照片,然后添加新上传的图片
+ this.picList.splice(deleteIndex, 1, {
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ // 将删除索引重置为-1,即当前状态重置为新增,而非删除状态
+ this.deleteIndex = -1;
+ } else {
+ this.picList.unshift({
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ }
+ // 如果是支付二维码的话,需要调取检查授权
+ if (Number(this.fileType) === 8) {
+ this.checkAuth(res.body.id);
+ }
+ that.SET_APP_LOADING(false);
+ // 提交整个图片列表
+ this.$emit("on-change-pic", this.picList);
+ },
+ error => {
+ this.SET_APP_LOADING(false);
+ }
+ );
+ },
+ // 图片旋转处理
+ getImgData: function(img, dir, next) {
+ // @param {string} img 图片的base64
+ // @param {int} dir exif获取的方向信息
+ // @param {function} next 回调方法,返回校正方向后的base64
+ var image = new Image();
+ let canvas = document.createElement("canvas");
+ let ctx = canvas.getContext("2d");
+ image.onload = function() {
+ let resultWidth = 0;
+ let resultHeight = 0;
+ let maxWidthOrHeight = 1024;
+ let drawWidth = this.naturalWidth;
+ let drawHeight = this.naturalHeight;
+
+ // 以下改变图片大小,控制最大宽度为1024
+ var maxSide = Math.max(drawWidth, drawHeight);
+ if (maxSide > maxWidthOrHeight) {
+ let minSide = Math.min(drawWidth, drawHeight);
+ minSide = (minSide / maxSide) * maxWidthOrHeight;
+ maxSide = maxWidthOrHeight;
+ if (drawWidth > drawHeight) {
+ resultWidth = maxSide;
+ resultHeight = minSide;
+ } else {
+ resultWidth = minSide;
+ resultHeight = maxSide;
+ }
+ } else {
+ resultWidth = drawWidth;
+ resultHeight = drawHeight;
+ }
+
+ if (dir === 3) {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ ctx.translate(resultWidth, resultHeight);
+ ctx.rotate(Math.PI);
+ } else if (dir === 6) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(resultHeight, 0);
+ ctx.rotate(Math.PI / 2);
+ } else if (dir === 8) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(0, resultWidth);
+ ctx.rotate(-Math.PI / 2);
+ } else {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ }
+ ctx.drawImage(this, 0, 0, resultWidth, resultHeight);
+ // 返回校正图片
+ next(canvas.toDataURL("image/jpeg", 0.8));
+ };
+ image.src = img;
+ },
+ compress(img) {
+ let quality = 0.92, //压缩比例
+ w = img.width,
+ h = img.height,
+ canvas = document.createElement("canvas"),
+ ctx = canvas.getContext("2d");
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(img, 0, 0, w, h);
+
+ return canvas.toDataURL("image/jpeg", quality);
+ },
+ checkAuth(id) {
+ // authStatus: 0 未授权 1授权---用户授权后才能执行下一步
+ this.$api
+ .checkAuth({
+ fileId: id
+ })
+ .then(res => {
+ if (res.body.authStatus === 1) {
+ this.$emit("on-check-auth", "下一步");
+ }
+ });
+ },
+ // 点击上传按钮
+ handleUploadPicture() {
+ this.selectModel = true;
+ },
+ // 选择拍照或者相册选项
+ handleMenuSelect(item, index) {
+ if (index === 0) {
+ this.$refs.androidInputFileCapture.click();
+ } else {
+ this.$refs.androidInputFileImage.click();
+ }
+ this.selectModel = false;
+ },
+ // 处理图片的删除
+ handleDeletePicture(index) {
+ this.deleteIndex = index;
+ this.selectModel = true;
+ }
+ }
+};
+</script>
+
+<style lang="less" scoped >
+.component-photo-upload {
+ .pic-title {
+ h4 {
+ padding: 10px 0;
+ font-size: 15px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+ }
+
+ .photo-list {
+ display: flex;
+ padding-bottom: 20px;
+ flex-wrap: wrap;
+
+ .pic-item-box {
+ position: relative;
+ height: 100px;
+ width: 100px;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ line-height: 100px;
+ text-align: center;
+ background-color: #fff;
+ border: 1px dashed #d9d9d9;
+ .close-div {
+ position: absolute;
+ top: -45px;
+ right: -10px;
+ //border: 1px red solid;
+ //border-radius:50% ;
+ height: 20px;
+ width: 20px;
+ .close-div-box {
+ //border: 1px red solid;
+ //border-radius:50% ;
+ height: 20px;
+ width: 20px;
+ i {
+ font-size: 20px;
+ }
+ }
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+}
+</style>
diff --git a/src/components/old/upload/uploadImgStore.vue b/src/components/old/upload/uploadImgStore.vue
new file mode 100644
index 0000000..855ae93
--- /dev/null
+++ b/src/components/old/upload/uploadImgStore.vue
@@ -0,0 +1,311 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:54:16
+ * @Description:
+ -->
+<template>
+ <div class="component-photo-upload" v-if="Number(this.bizLicenseType) === 2">
+ <!--title 和上传按钮的图标-->
+ <div class="pic-title">
+ <h4>{{ title }}</h4>
+ </div>
+ <!--图片上传列表,删除即重新上传-->
+ <div class="photo-list">
+ <!--图片上传列表-->
+ <div class="pic-item-box" v-for="(item, index) in picList"
+ v-if="picList instanceof Array && picList.length" :key="index">
+ <img :src="item.fileUrl" @click="handleDeletePicture(index)">
+ </div>
+ <!--上传按钮-->
+ <div class="pic-item-box" @click="handleUploadPicture" v-if="showUploadBtn">
+ <i class="iconfont scene_Staging-jiahao"></i>
+ </div>
+ </div>
+ <!-- 真正的上传按钮-->
+ <div>
+ <input style="display: none" type="file" ref="androidInputFileImage" @change="handlePhotoChange($event)"
+ accept="image/jpg, image/jpeg, image/png">
+ <input style="display: none" type="file" ref="androidInputFileCapture" @change="handlePhotoChange($event)"
+ accept="image/*" capture="camera">
+ </div>
+ <!--选择上传图片还是拍照-->
+
+ <van-action-sheet v-model="selectModel" :close-on-click-overlay="false" cancel-text="取消" :actions="nav" @select="handleMenuSelect">
+ </van-action-sheet>
+
+ </div>
+</template>
+
+<script>
+ import {
+ SET_APP_LOADING
+ } from '@/store/mutations-types';
+ import {
+ mapMutations
+ } from 'vuex';
+ import EXIF from 'exif-js';
+
+ import {_imgCompress,_fileToBase64} from "@/utils/index";
+ export default {
+ name: 'sceneUploadFile',
+ data() {
+ return {
+ selectModel: false, // 模态窗选择拍照还是相册
+ deleteIndex: -1, // 删除图片的index
+ nav:[
+ {name:'拍照'},
+ {name:'从手机相册选择'},
+ ]
+ };
+ },
+ props: [
+ 'title',
+ 'fileType', // 文件类型
+ 'picList',
+ 'bizLicenseType',
+ 'showNum'
+ ],
+ computed: {
+ showUploadBtn() {
+ let num = Number(this.fileType),
+ isArray = Array.isArray(this.picList);
+
+ // 这里只能上传一张
+ if (num === 1 ) {
+ return isArray && this.picList.length < 1;
+ } else if (num === 2) {
+ // 这个类型,只能上传两张
+ return isArray && this.picList.length < 2;
+ } else if (num === 3) {
+ // 购机直降
+ return isArray && this.picList.length < 3;
+ } else if (num === 4) {
+ // 购机直降
+ return isArray && this.picList.length < 4;
+ }
+ }
+ },
+ methods: {
+ ...mapMutations([SET_APP_LOADING]),
+ // 处理图片上传的事件(deleteIndex---删除图片的索引)
+ handlePhotoChange: function (evt) {
+ let that = this;
+ that.SET_APP_LOADING(true);
+ // 图片是单选还是多选
+ const files = Array.prototype.slice.call(evt.target.files);
+ // 图片的处理
+ files.forEach(function (file, i) {
+ // 图片的拍摄方向
+ var orientation;
+ // 格式是否支持的判断
+ if (!/\/(?:jpg|jpeg|png)/i.test(file.type)) {
+ that.$vux.toast.text('仅支持jpg|png图片格式', 'middle');
+ that.SET_APP_LOADING(false);
+ return;
+ }
+ // 读取图片的元信息
+ EXIF.getData(file, function () {
+ orientation = EXIF.getTag(this, 'Orientation');
+ });
+ // 获取文件内容
+ let reader = new FileReader();
+ reader.onload = function () {
+ that.$refs.androidInputFileCapture.value = null;
+ that.$refs.androidInputFileImage.value = null;
+ // 使用exif,处理图片的旋转问题,然后执行回调函数
+ that.getImgData(this.result, orientation, function (data) {
+ // 这里可以使用校正后的图片data了
+ var img = new Image();
+ img.src = data;
+
+ // 图片加载完毕之后进行压缩,然后上传
+ if (img.complete) {
+ callback();
+ } else {
+ img.onload = callback;
+ }
+ // 图片的路径获取成功后
+ function callback() {
+ // 压缩后的图片的base64字符串
+ let data = that.compress(img);
+ // 调取接口上传图片
+ that.submitUploadImg(that.fileType, data, that.deleteIndex);
+ }
+ });
+ };
+ reader.readAsDataURL(file);
+ });
+ },
+ // type文件上传的路径,data图片的base64字符串(删除图片即重新上传)
+ submitUploadImg: function (type, base64, deleteIndex) {
+ let that = this;
+ // 防止操作的模态窗
+ let submitInfo = {
+ base64Data: base64.split(',')[1], // 文件base64
+ suffix: base64.split(',')[0].split(';')['0'].split('/')[1],
+ };
+ this.$api.merUploadPhotoStore(submitInfo).then((res) => {
+ // 如果存在删除图片索引
+ if (deleteIndex >= 0) {
+ // 删除以前的那张照片,然后添加新上传的图片
+ this.picList.splice(deleteIndex, 1, {
+ fileUrl: res.body.fileUrl,
+ fileId: res.body.fileId
+ });
+ // 将删除索引重置为-1,即当前状态重置为新增,而非删除状态
+ this.deleteIndex = -1;
+ } else {
+ console.log()
+ this.picList.unshift({
+ fileUrl: res.body.fileUrl,
+ fileId: res.body.fileId
+ });
+ }
+ that.SET_APP_LOADING(false);
+ // 提交整个图片列表
+ this.$emit('on-change-pic', this.picList);
+ }, (error) => {
+ this.SET_APP_LOADING(false);
+ });
+ },
+ // 图片旋转处理
+ getImgData: function (img, dir, next) {
+ // @param {string} img 图片的base64
+ // @param {int} dir exif获取的方向信息
+ // @param {function} next 回调方法,返回校正方向后的base64
+ var image = new Image();
+ let canvas = document.createElement('canvas');
+ let ctx = canvas.getContext('2d');
+ image.onload = function () {
+ let resultWidth = 0;
+ let resultHeight = 0;
+ let maxWidthOrHeight = 1024;
+ let drawWidth = this.naturalWidth;
+ let drawHeight = this.naturalHeight;
+
+ // 以下改变图片大小,控制最大宽度为1024
+ var maxSide = Math.max(drawWidth, drawHeight);
+ if (maxSide > maxWidthOrHeight) {
+ let minSide = Math.min(drawWidth, drawHeight);
+ minSide = minSide / maxSide * maxWidthOrHeight;
+ maxSide = maxWidthOrHeight;
+ if (drawWidth > drawHeight) {
+ resultWidth = maxSide;
+ resultHeight = minSide;
+ } else {
+ resultWidth = minSide;
+ resultHeight = maxSide;
+ }
+ } else {
+ resultWidth = drawWidth;
+ resultHeight = drawHeight;
+ }
+
+ if (dir === 3) {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ ctx.translate(resultWidth, resultHeight);
+ ctx.rotate(Math.PI);
+ } else if (dir === 6) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(resultHeight, 0);
+ ctx.rotate(Math.PI / 2);
+ } else if (dir === 8) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(0, resultWidth);
+ ctx.rotate(-Math.PI / 2);
+ } else {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ }
+ ctx.drawImage(this, 0, 0, resultWidth, resultHeight);
+ // 返回校正图片
+ next(canvas.toDataURL('image/jpeg', 0.8));
+ };
+ image.src = img;
+ },
+ compress(img) {
+ let quality = 0.92, //压缩比例
+ w = img.width,
+ h = img.height,
+ canvas = document.createElement('canvas'),
+ ctx = canvas.getContext('2d');
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(img, 0, 0, w, h);
+ return canvas.toDataURL('image/jpeg', quality);
+ },
+ checkAuth(id) {
+ // authStatus: 0 未授权 1授权---用户授权后才能执行下一步
+ this.$api.checkAuth({
+ fileId: id
+ }).then((res) => {
+ if (res.body.authStatus === 1) {
+ this.$emit('on-check-auth', '下一步');
+ }
+ });
+ },
+ // 点击上传按钮
+ handleUploadPicture() {
+ this.selectModel = true;
+ },
+ // 选择拍照或者相册选项
+ handleMenuSelect(item, index) {
+ if (index===0) {
+ this.$refs.androidInputFileCapture.click();
+ } else {
+ this.$refs.androidInputFileImage.click();
+ }
+ this.selectModel = false;
+ },
+ // 处理图片的删除
+ handleDeletePicture(index) {
+ this.deleteIndex = index;
+ this.selectModel = true;
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped >
+ .component-photo-upload {
+ .pic-title {
+ h4 {
+ padding: 10px 0;
+ font-size: 15px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+
+ }
+
+ .photo-list {
+ display: flex;
+ padding-bottom: 20px;
+ flex-wrap: wrap;
+
+ .pic-item-box {
+ position: relative;
+ height: 100px;
+ width: 100px;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ line-height: 100px;
+ text-align: center;
+ background-color: #FDFCFF;
+ border: 1px dashed #d9d9d9;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+
+</style>
diff --git a/src/components/old/upload/uploadImgTl.vue b/src/components/old/upload/uploadImgTl.vue
new file mode 100644
index 0000000..fab7dca
--- /dev/null
+++ b/src/components/old/upload/uploadImgTl.vue
@@ -0,0 +1,458 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-25 11:16:31
+ * @Description:
+ -->
+<template>
+ <div class="component-photo-upload">
+ <!--title 和上传按钮的图标-->
+ <div class="pic-title">
+ <p>{{ title }}
+ <span style="font-size:12px;color:rgba(255,102,102,1);">{{tips}}</span>
+ </p>
+
+ </div>
+ <!--图片上传列表,删除即重新上传-->
+ <div class="photo-list">
+ <!--图片上传列表-->
+ <div
+ class="pic-item-box"
+ v-for="(item, index) in picList"
+ v-if="picList instanceof Array && picList.length"
+ :key="index"
+ >
+ <div class="close-div">
+ <div class="close-div-box">
+ <van-icon name="clear" color="#FC8349" v-if="picList.length > 1" @click="deletPhoto(item,index)" />
+ </div>
+ </div>
+ <img :src="item.fileUrl" @click="handleDeletePicture(index)" />
+ </div>
+ <!--上传按钮-->
+ <div class="pic-item-box" @click="handleUploadPicture" v-if="showUploadBtn">
+ <!-- <i class="iconfont iconzhaoxiang" style="color:#FC8349"></i> -->
+ <img v-if="isCard == 1 " src="../../../assets/img/idcardz.png">
+ <img v-if="isCard == 2 " src="../../../assets/img/idcardf.png">
+ <img v-if="isCard == 0 " src="../../../assets/img/img_upload.png">
+ </div>
+ </div>
+ <!-- 真正的上传按钮-->
+ <div>
+ <input
+ style="display: none"
+ type="file"
+ ref="androidInputFileImage"
+ @change="handlePhotoChange($event)"
+ accept="image/*"
+ />
+ <input
+ style="display: none"
+ type="file"
+ ref="androidInputFileCapture"
+ @change="handlePhotoChange($event)"
+ accept="image/*"
+ capture="camera"
+ />
+ </div>
+ <!--选择上传图片还是拍照-->
+
+ <van-action-sheet
+ v-model="selectModel"
+ :close-on-click-overlay="false"
+ cancel-text="取消"
+ :actions="nav"
+ @select="handleMenuSelect"
+ ></van-action-sheet>
+ </div>
+</template>
+
+<script>
+import { SET_APP_LOADING } from "@/store/mutations-types";
+import { mapMutations } from "vuex";
+import EXIF from "exif-js";
+
+import { _imgCompress, _fileToBase64 } from "@/utils/index";
+import Vue from "vue";
+import { Icon } from "vant";
+
+Vue.use(Icon);
+export default {
+ name: "sceneUploadFile",
+ data() {
+ return {
+ selectModel: false, // 模态窗选择拍照还是相册
+ deleteIndex: -1, // 删除图片的index
+ nav: [{ name: "拍照" }, { name: "从手机相册选择" }]
+ };
+ },
+ props: [
+ "title",
+ "fileType", // 文件类型
+ "picList",
+ "sourceType",
+ "typeId",
+ "tips",
+ "isCard",//确定是否为身份证0-其他 1-正面 2-反面
+ ],
+ computed: {
+ showUploadBtn() {
+ let num = Number(this.fileType),
+ isArray = Array.isArray(this.picList);
+
+ // 这里只能上传一张
+ if (
+ num === 0 ||
+ num === 2 ||
+ num === 3 ||
+ num === 8 ||
+ num === 9 ||
+ num === 11 ||
+ num === 14 ||
+ num === 21 ||
+ num === 22 ||
+ num === 25
+ ) {
+ return isArray && this.picList.length < 1;
+ } else if (num === 10 || num === 13) {
+ // 这个类型,只能上传两张
+ return isArray && this.picList.length < 2;
+ } else {
+ return isArray && this.picList.length < 3;
+ }
+ }
+ },
+ methods: {
+ ...mapMutations([SET_APP_LOADING]),
+ //删除照片
+ deletPhoto(item, i) {
+ //console.log(item);
+ this.picList.splice(i, 1);
+ },
+ // 处理图片上传的事件(deleteIndex---删除图片的索引)
+ handlePhotoChange: function(evt) {
+ let that = this;
+ that.SET_APP_LOADING(true);
+ // 图片是单选还是多选
+ const files = Array.prototype.slice.call(evt.target.files);
+ // 图片的处理
+ files.forEach(function(file, i) {
+ // 图片的拍摄方向
+ var orientation;
+ // 格式是否支持的判断
+ if (!/\/(?:jpg|jpeg|png)/i.test(file.type)) {
+ that.$vux.toast.text("仅支持jpg|png图片格式", "middle");
+ that.SET_APP_LOADING(false);
+ return;
+ }
+ if(file.size > 1024*1024*10){
+ that.$tool.toast("上传图片不可大于10M,请重新选择图片");
+ that.SET_APP_LOADING(false);
+ return
+ }
+ // 读取图片的元信息
+ EXIF.getData(file, function() {
+ orientation = EXIF.getTag(this, "Orientation");
+ });
+ // 获取文件内容
+ let reader = new FileReader();
+ reader.onload = function() {
+ that.$refs.androidInputFileCapture.value = null;
+ that.$refs.androidInputFileImage.value = null;
+ // 使用exif,处理图片的旋转问题,然后执行回调函数
+ that.getImgData(this.result, orientation, function(data) {
+ // 这里可以使用校正后的图片data了
+
+ var img = new Image();
+ img.src = data;
+
+ // 图片加载完毕之后进行压缩,然后上传
+ if (img.complete) {
+ callback();
+ } else {
+ img.onload = callback;
+ }
+ // 图片的路径获取成功后
+ function callback() {
+ console.log(img.width,img.height)
+ // 压缩后的图片的base64字符串
+ let data = that.compress(img);
+ console.log(that.getFile(data))
+
+ // 调取接口上传图片
+ that.submitUploadImg(that.fileType, data, that.deleteIndex);
+ }
+ });
+ };
+ reader.readAsDataURL(file);
+ });
+ },
+ // base64转file对象判断压缩后大小
+ getFile(data,filename){
+ var arr = data.split(','),
+ mime = arr[0].match(/:(.*?);/)[1],
+ bstr = atob(arr[1]),
+ n = bstr.length,
+ u8arr = new Uint8Array(n);
+ while(n--){
+ u8arr[n] = bstr.charCodeAt(n);
+ }
+ return new File([u8arr], filename, {type:mime});
+ },
+ // type文件上传的路径,data图片的base64字符串(删除图片即重新上传)
+ submitUploadImg: function(type, base64, deleteIndex) {
+ let that = this;
+ var str = base64.replace('data:image/png;base64,', '');//这里根据自己上传图片的格式进行相应修改
+ var strLength = str.length;
+ var fileLength = parseInt(strLength - (strLength / 8) * 2);
+ // 由字节转换为MB
+ var size = "";
+ size = (fileLength / 1024 / 1024).toFixed(2);
+
+ if(parseInt(size)>2){
+ that.$tool.toast("图片过大,请重新上传");
+ that.SET_APP_LOADING(false);
+ return
+ }
+
+ // 防止操作的模态窗
+ let submitInfo = {
+ base64Data: base64.split(",")[1], // 文件base64
+ fileType: type,
+ suffix: base64
+ .split(",")[0]
+ .split(";")
+ ["0"].split("/")[1]
+ };
+ if (that.typeId == "200011") {
+ this.$api.uploadXygPhoto(submitInfo).then(
+ res => {
+ // 如果存在删除图片索引
+ if (deleteIndex >= 0) {
+ // 删除以前的那张照片,然后添加新上传的图片
+ this.picList.splice(deleteIndex, 1, {
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ // 将删除索引重置为-1,即当前状态重置为新增,而非删除状态
+ this.deleteIndex = -1;
+ } else {
+ this.picList.unshift({
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ }
+ // 如果是支付二维码的话,需要调取检查授权
+ if (Number(this.fileType) === 8) {
+ this.checkAuth(res.body.id);
+ }
+ that.SET_APP_LOADING(false);
+ // 提交整个图片列表
+ this.$emit("on-change-pic", this.picList);
+ },
+ error => {
+ this.SET_APP_LOADING(false);
+ }
+ );
+ } else {
+ this.$api
+ .merUploadPhoto({
+ ...submitInfo,
+ sourceType: that.sourceType
+ })
+ .then(
+ res => {
+ // 如果存在删除图片索引
+ if (deleteIndex >= 0) {
+ // 删除以前的那张照片,然后添加新上传的图片
+ this.picList.splice(deleteIndex, 1, {
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ // 将删除索引重置为-1,即当前状态重置为新增,而非删除状态
+ this.deleteIndex = -1;
+ } else {
+ this.picList.unshift({
+ fileUrl: res.body.fileUrl,
+ id: res.body.id
+ });
+ }
+ // 如果是支付二维码的话,需要调取检查授权
+ if (Number(this.fileType) === 8) {
+ this.checkAuth(res.body.id);
+ }
+ that.SET_APP_LOADING(false);
+ // 提交整个图片列表
+ this.$emit("on-change-pic", this.picList);
+ },
+ error => {
+ this.SET_APP_LOADING(false);
+ }
+ );
+ }
+ },
+ // 图片旋转处理
+ getImgData: function(img, dir, next) {
+ // @param {string} img 图片的base64
+ // @param {int} dir exif获取的方向信息
+ // @param {function} next 回调方法,返回校正方向后的base64
+ var image = new Image();
+ let canvas = document.createElement("canvas");
+ let ctx = canvas.getContext("2d");
+ image.onload = function() {
+ let resultWidth = 0;
+ let resultHeight = 0;
+ let maxWidthOrHeight = 1024;
+ let drawWidth = this.naturalWidth;
+ let drawHeight = this.naturalHeight;
+ console.log(drawWidth,drawHeight)
+ // 以下改变图片大小,控制最大宽度为1024
+ var maxSide = Math.max(drawWidth, drawHeight);
+ if (maxSide > maxWidthOrHeight) {
+
+ let minSide = Math.min(drawWidth, drawHeight);
+ minSide = (minSide / maxSide) * maxWidthOrHeight;
+ maxSide = maxWidthOrHeight;
+ if (drawWidth > drawHeight) {
+ resultWidth = maxSide;
+ resultHeight = minSide;
+ } else {
+ resultWidth = minSide;
+ resultHeight = maxSide;
+ }
+ } else {
+ resultWidth = drawWidth;
+ resultHeight = drawHeight;
+ }
+
+ if (dir === 3) {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ ctx.translate(resultWidth, resultHeight);
+ ctx.rotate(Math.PI);
+ } else if (dir === 6) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(resultHeight, 0);
+ ctx.rotate(Math.PI / 2);
+ } else if (dir === 8) {
+ canvas.width = resultHeight;
+ canvas.height = resultWidth;
+ ctx.translate(0, resultWidth);
+ ctx.rotate(-Math.PI / 2);
+ } else {
+ canvas.width = resultWidth;
+ canvas.height = resultHeight;
+ }
+ ctx.drawImage(this, 0, 0, resultWidth, resultHeight);
+ // 返回校正图片
+ next(canvas.toDataURL("image/jpg", 0.8));
+
+ console.log(image.width,image.height)
+ };
+ image.src = img;
+
+ },
+ compress(img) {
+ let quality = 0.92, //压缩比例
+ w = img.width,
+ h = img.height,
+ canvas = document.createElement("canvas"),
+ ctx = canvas.getContext("2d");
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(img, 0, 0, w, h);
+ return canvas.toDataURL("image/jpg", quality);
+ },
+ checkAuth(id) {
+ // authStatus: 0 未授权 1授权---用户授权后才能执行下一步
+ this.$api
+ .checkAuth({
+ fileId: id
+ })
+ .then(res => {
+ if (res.body.authStatus === 1) {
+ this.$emit("on-check-auth", "下一步");
+ }
+ });
+ },
+ // 点击上传按钮
+ handleUploadPicture() {
+ this.selectModel = true;
+ },
+ // 选择拍照或者相册选项
+ handleMenuSelect(item, index) {
+ if (index === 0) {
+ this.$refs.androidInputFileCapture.click();
+ } else {
+ this.$refs.androidInputFileImage.click();
+ }
+ this.selectModel = false;
+ },
+ // 处理图片的删除
+ handleDeletePicture(index) {
+ this.deleteIndex = index;
+ this.selectModel = true;
+ }
+ }
+};
+</script>
+
+<style lang="less" scoped >
+.component-photo-upload {
+ .pic-title {
+ margin-bottom: 10px;
+ h4 {
+ padding: 10px 0;
+ font-size: 15px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+ }
+
+ .photo-list {
+ display: flex;
+ padding-bottom: 20px;
+ flex-wrap: wrap;
+
+ .pic-item-box {
+ position: relative;
+ height: 100px;
+ width: 100px;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ line-height: 100px;
+ text-align: center;
+ background-color: #fff;
+ //border: 1px dashed #d9d9d9;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ .close-div {
+ position: absolute;
+ top: -45px;
+ right: -10px;
+ //border: 1px red solid;
+ //border-radius:50% ;
+ height: 20px;
+ width: 20px;
+ .close-div-box {
+ //border: 1px red solid;
+ //border-radius:50% ;
+ height: 20px;
+ width: 20px;
+ i {
+ font-size: 20px;
+ }
+ }
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+}
+</style>
diff --git a/src/components/vant_register.js b/src/components/vant_register.js
new file mode 100644
index 0000000..44083cc
--- /dev/null
+++ b/src/components/vant_register.js
@@ -0,0 +1,90 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:40:29
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:38:20
+ * @Description: 注册want组件
+ */
+import {
+ Button,
+ Swipe,
+ SwipeItem,
+ Dialog,
+ Checkbox,
+ CheckboxGroup,
+ Search,
+ Icon,
+ NumberKeyboard,
+ Notify,
+ Loading,
+ Popup,
+ Picker,
+ Tabbar,
+ TabbarItem,
+ NavBar,
+ Cell,
+ CellGroup,
+ RadioGroup,
+ Radio,
+ Area,
+ Field,
+ Collapse,
+ CollapseItem,
+ DatetimePicker,
+ Toast,
+ List,
+ Switch,ActionSheet
+} from 'vant';
+
+let arr = [
+ Button,
+ Swipe,
+ SwipeItem,
+ Dialog,
+ Checkbox,
+ CheckboxGroup,
+ Search,
+ Icon,
+ NumberKeyboard,
+ Notify,
+ Loading,
+ Popup,
+ Picker,
+ Tabbar, TabbarItem,
+ NavBar,
+ Cell, CellGroup, RadioGroup,
+ Radio,
+ Area,
+ Field,
+ Collapse, CollapseItem,
+ DatetimePicker,
+ Toast,
+ List,
+ Switch,ActionSheet
+]
+
+// Notify.setDefaultOptions({
+// background: '#896EDB'
+// })
+
+export default {
+ install(Vue, opt) {
+ arr.forEach(item => {
+ Vue.use(item)
+ })
+
+ // Vue.prototype.$notify = (text) => {
+ // Notify({
+ // message: text,
+ // background: 'red'
+ // })
+ // }
+
+ Vue.prototype.$notify_success = (text) => {
+ Notify({
+ message: text,
+ background: '#1989fa'
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/components/vux_register.js b/src/components/vux_register.js
new file mode 100644
index 0000000..7d32406
--- /dev/null
+++ b/src/components/vux_register.js
@@ -0,0 +1,345 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:40:29
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-30 14:35:12
+ * @Description: 注册want组件
+ */
+
+import {
+ Notify,
+} from 'vant';
+import IDValidator from '@/utils/IDValidator';
+
+
+import {
+ Selector,XHeader,Group,XInput,XButton
+} from 'vux';
+
+import FSpace from '@/components/old/FSpace';
+import FButton from '@/components/old/FButton';
+import FTips from '@/components/old/FTips';
+import FFooter from '@/components/old/FFooter';
+import FSearch from '@/components/old/FSearch';
+import FConfirm from '@/components/old/FConfirm';
+import FNoData from '@/components/old/FNoData';
+
+// import
+
+
+let arr = [
+ Selector,XHeader,Group,XInput,XButton
+]
+
+
+
+export default {
+ install(Vue, opt) {
+ Vue.component('selector', Selector);
+ Vue.component('f-space', FSpace);
+ Vue.component('f-button', FButton);
+ Vue.component('f-tips', FTips);
+ Vue.component('f-footer', FFooter);
+ Vue.component('f-search', FSearch);
+ Vue.component('f-confirm', FConfirm);
+ Vue.component('f-no-data', FNoData);
+
+ arr.forEach(item => {
+ // console.log(item);
+ // Vue.use(item)
+ Vue.component(item.name,item)
+ })
+
+
+
+ // 老项目的 函数
+ Vue.prototype.$tool = {
+ toast(text) {
+ Notify({
+ message: text,
+ background: '#1989fa'
+ })
+ },
+ // 金额格式化
+ formatMoney(str = 0) {
+ str = str + '';
+ let newStr = '';
+ let count = 0;
+ if (str.indexOf('.') === -1) {
+ for (let i = str.length - 1; i >= 0; i--) {
+ if (count % 3 === 0 && count !== 0) {
+ newStr = str.charAt(i) + ',' + newStr;
+ } else {
+ newStr = str.charAt(i) + newStr;
+ }
+ count++;
+ }
+ str = newStr + '.00'; // 自动补小数点后两位
+ return str;
+ } else {
+ for (let i = str.indexOf('.') - 1; i >= 0; i--) {
+ if (count % 3 === 0 && count !== 0) {
+ newStr = str.charAt(i) + ',' + newStr;
+ } else {
+ newStr = str.charAt(i) + newStr; // 逐个字符相接起来
+ }
+ count++;
+ }
+ str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3);
+ return str;
+ }
+ },
+ // 身份证 中间用* 显示
+ cardIDHide(cardid) {
+ if (cardid) {
+ return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2');
+ } else {
+ return '';
+ }
+ },
+ //手机号,中间四位*显示
+ formatPhone(phone) {
+ return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
+ },
+ // 电话号码格式
+ checkPhone(phone) {
+ let reg = /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/;
+ return reg.test(phone);
+ },
+ checkEmail(email) {
+ // 验证邮箱格式
+ let reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
+ // let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;
+ return reg.test(email);
+ },
+ checkVerifyCode(code) {
+ // 验证验证码格式
+ let reg = /^\d{6}$/;
+ return reg.test(code);
+ },
+ checkDynamicCode(code) {
+ // 验证邀请码格式
+ let reg = /^[A-Za-z0-9]{4}$/;
+ return reg.test(code);
+ },
+ // password check
+ checkPassword(password) {
+ // 验证密码格式
+ let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
+ return reg.test(password);
+ },
+ // name check
+ checkName(name) {
+ // 验证用户名格式
+ let reg = /^[\u4E00-\u9FA5]{2,10}$/;
+ return reg.test(name);
+ },
+ // 账户名称的正则表达式
+ checkUsername(name) {
+ let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/;
+ return reg.test(name);
+ },
+ // 统一验证
+ checkCommonField(name) {
+ let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/;
+ return reg.test(name);
+ },
+ // idCard check
+ checkIDCard(idCard) {
+ // 验证身份证格式
+ return IDValidator.isValid(idCard);
+ },
+ isIdcard(val) {
+ let result = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val);
+ return result;
+ },
+ checkValEmpty(str) {
+ // 验证是否为空
+ if (
+ str === undefined ||
+ str === null ||
+ str.length <= 0 ||
+ str === 'undefined'
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ // 验证佣金输入金额
+ checkCommission(commission) {
+ // 小于100且后面可以带4个小数点
+ let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/;
+ //一亿以内,保留四位小数
+ // /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/
+ // 如果通过的话,那么判断小数点的前几位数字
+ return reg.test(commission);
+ },
+ // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写
+ checkChannelNo(channelNo) {
+ let reg = /^[\w\d]{4,8}$/;
+ return reg.test(channelNo);
+ },
+ //验证是否包含空格
+ checkSpace(val) {
+ let reg = /^\s+$/;
+ if (reg.test(val)) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ //将发送请求中的参数格式化,如果为空则转为null
+ formatReq(obj) {
+ for (let i in obj) {
+ let item = obj[i];
+ if (item === null) continue;
+ if (
+ item === undefined ||
+ item === '' ||
+ item === 'undefined' ||
+ item.length <= 0 ||
+ JSON.stringify(item) == '{}'
+ ) {
+ obj[i] = null;
+ }
+ }
+ return obj;
+ },
+ // 只能输入数字与小数点正则判断
+ checkIntegerAndDot(checkVal) {
+ let dotReg = /\./g;
+ let IntegerReg = /^[1-9]{1}\d{0,5}$/;
+ // 如果输入了多个点,直接不符合要求
+ if (checkVal.match(dotReg) && checkVal.match(dotReg).length > 1) {
+ return false;
+ // 输入了一个点
+ } else if (
+ checkVal.match(dotReg) &&
+ checkVal.match(dotReg).length === 1
+ ) {
+ // 开头与结尾都不能出现点,点的前面与后面必须是数字
+ let strLen = checkVal.length;
+ if (
+ checkVal.indexOf('.') === 0 ||
+ checkVal.indexOf('.') === strLen - 1
+ ) {
+ return false;
+ // 超过个数的限制的话
+ } else {
+ return strLen <= 6;
+ }
+ // 没有小数点的话,那么就是全部数字进行匹配
+ } else if (!checkVal.match(dotReg)) {
+ return IntegerReg.test(checkVal);
+ }
+ },
+ //银行卡验证
+ bankCard(iccid) {
+ let initCard = iccid;
+ var s1 = 0,
+ s2 = 0;
+ iccid = iccid.substring(0, iccid.length - 1);
+ var reverse = '';
+ for (var i = iccid.length; i > 0; i--) {
+ reverse += iccid.charAt(i - 1);
+ }
+ for (i = 0; i < reverse.length; i++) {
+ var digit = parseInt(reverse.charAt(i), 10);
+ if (i % 2 != 0) {
+ // this is for odd digits, they are 1-indexed in the
+ // algorithm
+ s1 += digit;
+ } else {
+ // add 2 * digit for 0-4, add 2 * digit - 9 for 5-9
+ s2 += 2 * digit;
+ if (digit >= 5) {
+ s2 -= 9;
+ }
+ }
+ }
+ var sum = 10 - ((s1 + s2) % 10);
+ if (sum === 10) {
+ sum = 0;
+ }
+ return iccid + sum == initCard;
+ },
+ date(date, fmt) {
+ if (!date) {
+ return null;
+ }
+ if (typeof date === 'string') {
+ date = new Date(date.replace(/-/g, '/'));
+ }
+ if (typeof date === 'number') {
+ date = new Date(date);
+ }
+ if (fmt === undefined) {
+ return Number(date);
+ } else {
+ var o = {
+ 'M+': date.getMonth() + 1,
+ 'D+': date.getDate(),
+ 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
+ 'H+': date.getHours(),
+ 'm+': date.getMinutes(),
+ 's+': date.getSeconds(),
+ 'q+': Math.floor((date.getMonth() + 3) / 3),
+ S: date.getMilliseconds()
+ };
+ var week = {
+ '0': '\u65e5',
+ '1': '\u4e00',
+ '2': '\u4e8c',
+ '3': '\u4e09',
+ '4': '\u56db',
+ '5': '\u4e94',
+ '6': '\u516d'
+ };
+ if (/(Y+)/.test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+ );
+ }
+ if (/(E+)/.test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ (RegExp.$1.length > 1
+ ? RegExp.$1.length > 2
+ ? '\u661f\u671f'
+ : '\u5468'
+ : '') + week[date.getDay() + '']
+ );
+ }
+ for (var k in o) {
+ if (new RegExp('(' + k + ')').test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ RegExp.$1.length === 1
+ ? o[k]
+ : ('00' + o[k]).substr(('' + o[k]).length)
+ );
+ }
+ }
+ return fmt;
+ }
+ },
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ }
+}
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..c24937b
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,67 @@
+/*
+ * @Descripttion: 修改配置
+ * @Author: TM丶
+ * @Date: 2019-08-14 14:05:51
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-09-03 10:44:01
+ */
+
+
+import Vue from 'vue';
+import customerComponents from '@/components/index'; //自定义组件
+// import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import { Button, Select } from 'element-ui'
+import vantRegister from '@/components/vant_register'; //vant组件
+import vuxRegister from '@/components/vux_register'; //vant组件
+import Validator from '@/utils/formValidator'; //vant组件
+import log from '@/utils/console';
+
+import store from "@/store/index";
+import router from "@/router/index";
+import App from "./App.vue";
+import api from "@/api"; //接口
+import filters from '@/utils/filters';
+
+
+import androidBack from './utils/pageBackByAndroid';
+Vue.config.productionTip = false; // 关闭生产的提示
+
+
+import "@/style/normalize.less";
+import "@/style/common.less";
+import "@/style/vant_reset.less";
+
+
+Vue.use(api)
+Vue.use(filters)
+Vue.use(Validator)
+Vue.use(vuxRegister)
+Vue.use(vantRegister)
+Vue.use(customerComponents)
+Vue.use(Select)
+Vue.use(log);
+
+
+new Vue({
+ store,
+ router,
+ mounted() {
+ var u = navigator.userAgent;
+ if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {
+ window.addEventListener("resize", function() {
+ let el = document.activeElement;
+ if(el.tagName=="INPUT" || el.tagName=="TEXTAREA") {
+ window.setTimeout(function() {
+ el.scrollIntoView({
+ behavior:'smooth',
+ });
+ },16.7);
+ }
+ })
+ }
+ },
+ render: h => h(App)
+}).$mount("#app")
+
+androidBack.androidBackBtn();
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..9d64d00
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,128 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-08 10:00:52
+ * @Description:
+ */
+import Vue from "vue";
+import VueRouter from 'vue-router';
+import routes from './routes';
+import Store from '@/store';
+Vue.use(VueRouter);
+
+let router = new VueRouter({
+ mode:"hash", //history
+ routes,
+ scrollBehavior (to, from, savedPosition) {
+ return {
+ x:0,
+ y:0
+ }
+ },
+})
+
+
+// 全局前置守卫:页面跳转前拦截
+router.beforeEach((to, from, next) => {
+
+ // 解决叮咚助学自动登录主题色设置问题
+ if(to.query.platNo == 'ddxt'){
+ console.log(111)
+ window.sessionStorage.setItem("isddxt",1)
+ Store.dispatch('setColor',{
+ backColor:'#ff8e01',
+ backJbColorF:'#ff7b00',
+ backJbColorB:'#ff8e01',
+ defaultBgColor:'linear-gradient(90deg, #ff7b00, #ff8e01)',
+ lastColor:'#ff8e01'
+ })
+ }
+ if(to.query.wxScore == '1'){
+ window.sessionStorage.setItem("wxScore",1)
+ }
+ window.sessionStorage.setItem("gotoPagetemp", to.path);
+ // if(to.name == 'login-by-wx'){
+ // localStorage.user_pwd = 'undefined'
+ // }
+ if(to.meta && typeof to.meta.isLogin !=='undefined' ){
+ //判断地址是否带有token参数有就截取存储
+ if(location.href.split('?')[1]){
+ if(location.href.split('?')[1].split('token=')[1]){
+ console.log('qqq:',location.href.split('?')[1])
+ let str = location.href.split('?')[1].split('token=')[1]
+ localStorage.hjToken = str
+ }
+ if(location.href.split('?')[1].split('appToken=')[1]){
+ let str = location.href.split('?')[1].split('appToken=')[1]
+ if(str.indexOf('&') != -1){
+ var backUrl = str.split('&')[1].split('backUrl=')[1]
+ var appToken = str.split('&')[0]
+ }else{
+ var appToken = str
+ }
+
+ }
+ }
+ console.log('token:',localStorage.hjToken)
+ let user_pwd = localStorage.user_pwd;
+ let hjToken = localStorage.hjToken;
+ // let appToken = sessionStorage.appToken;
+ // 红茄登录
+ if(typeof hjToken !='undefined' && hjToken){
+ Store.dispatch('loginByToken',{
+ vm:Vue.prototype,
+ hjToken,
+ next
+ })
+ return
+ }
+ // app跳转登录
+ if(typeof appToken !='undefined' && appToken){
+ document.title = ''
+ Store.dispatch('loginByAppToken',{
+ vm:Vue.prototype,
+ appToken,
+ backUrl,
+ next
+ })
+ return
+ }
+ // 自动登录
+ if(typeof user_pwd !=='undefined'){
+ let userNo = localStorage.user_account,
+ password = user_pwd;
+ Store.dispatch('login',{
+ vm:Vue.prototype,
+ userNo,
+ password,
+ sib_mer_sysPlat: localStorage.sib_mer_sysPlat,
+ next
+ })
+ return
+ }
+ if(typeof hjToken =='undefined' && !hjToken){
+ next()
+ }
+ }else{
+ // 需要登录的页面
+ if(Store.state.sessionId || to.name == 'login-by-wx' || to.name == 'supplement'){
+ next()
+ }else{
+ // if(sessionStorage.isLoginByOpenId == 1){
+ // next()
+ // }else{
+ next('/')
+ // }
+
+ }
+ }
+})
+
+
+//全局后置守卫:页面跳转后执行
+router.afterEach((to, from) => {
+
+})
+
+export default router;
diff --git a/src/router/routes.js b/src/router/routes.js
new file mode 100644
index 0000000..4868113
--- /dev/null
+++ b/src/router/routes.js
@@ -0,0 +1,1155 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 14:58:59
+ * @Description:
+ */
+const oldRouter = [
+ {
+ path: '/credit-installment',
+ name: 'credit-installment',
+ component:()=>import("@/views/old/store/credit-installment.vue")
+ },
+ {
+ path: '/getQRCode',
+ name: 'getQRCode',
+ component:()=>import("@/views/old/store/getQRCode.vue")
+
+ },
+ //商户贴息
+ {
+ path: '/hb-merchant-installment',
+ name: 'hb-merchant-installment',
+ component:()=>import("@/views/old/store/hb-merchant-installment.vue")
+ },
+ {
+ path: '/hb-credit-installment',
+ name: 'hb-credit-installment',
+ component:()=>import("@/views/old/store/hb-credit-installment.vue")
+ },
+ {
+ path: '/hb-contract',
+ name: 'hb-contract',
+ component:()=>import("@/views/old/store/hb-contract.vue")
+ },
+
+ {
+ path: '/hb-getHBQRCode',
+ name: 'hb-getHBQRCode',
+ component:()=>import("@/views/old/store/getHBQRCode.vue")
+
+ },
+ {
+ path: '/pay-result',
+ name: 'pay-result',
+ component:()=>import("@/views/old/store/pay-result.vue")
+
+ },
+ {
+ path: '/xyg-getXygHbQRCode',
+ name: 'hb-getHBQRCode',
+ component:()=>import("@/views/old/store/getXygHbQRCode.vue")
+
+ },
+ {
+ path: '/product/shtx-detail',
+ name: 'shtx-detail',
+ component:()=>import("@/views/product/shtx-detail.vue")
+ },
+ {
+ path: '/shtx/staging',
+ name: 'shtx-staging',
+ component:()=>import("@/views/old/merchant/shtx/staging.vue")
+ },
+ {
+ path: '/shtx-getShtxQRCode',
+ name: 'shtx-getShtxQRCode',
+ component:()=>import("@/views/old/store/getShtxQRCode.vue")
+ },
+ {
+ path: '/order/shtx',
+ name: 'order-shtx',
+ component:()=>import("@/views/order/shtx.vue")
+ },
+ {
+ path: '/mobile-installment',
+ name: 'mobile-installment',
+ component:()=>import("@/views/old/store/mobile/mobileInstallment.vue")
+ },
+ {
+ path: '/mobile-submit-result',
+ name: 'mobile-submit-result',
+ component:()=>import("@/views/old/store/mobile/submitResult.vue")
+ },
+
+
+ {
+ path: '/contract-installment',
+ name: 'contract-installment',
+ component:()=>import("@/views/old/store/contract/contractInstallment.vue")
+ },
+ // 生成二维码
+ {
+ path: '/contract-qrcode',
+ name: 'contract-qrcode',
+ component:()=>import("@/views/old/store/contract/contractQrcode.vue")
+ },
+ {
+ path: '/lthyj-qrcode',
+ name: 'lthyj-qrcode',
+ component:()=>import("@/views/old/store/lthyjQrcode.vue")
+ },
+ {
+ path: '/contract-order-upload/:orderId',
+ name: 'contract-order-upload',
+ props:true,
+ component:()=>import("@/views/old/store/contract/upload.vue")
+ },
+
+
+ {
+ path: '/hrydset',
+ name: 'hryd_set',
+ component:()=>import("@/views/old/store/zxh/set.vue")
+ },
+ {
+ path: '/hryd/upload/:orderId', //上传合约资料
+ name: 'hryd_upload',
+ props: true,
+ component:()=>import("@/views/old/store/zxh/upload.vue")
+ },
+ {
+ path: '/hryd/createcode', //生成二维码
+ name: 'hryd_createcode',
+ props: true,
+ component:()=>import("@/views/old/store/zxh/createcode.vue")
+ },
+
+ {
+ path: '/xygset',
+ name: 'xyg_set',
+ component:()=>import("@/views/old/store/xyg/set.vue")
+ },
+ {
+ path: '/xyg/upload/:orderId', //上传合约资料
+ name: 'xyg_upload',
+ props: true,
+ component:()=>import("@/views/old/store/xyg/upload.vue")
+ },
+ // {
+ // path: '/xyg/upload/', //上传合约资料
+ // name: 'xyg_upload',
+ // props: true,
+ // component:()=>import("@/views/old/store/xyg/upload.vue")
+ // },
+ {
+ path: '/xyg/mation', //花呗,储蓄卡信用购选择表页面
+ name: 'xyg_mation',
+ props: true,
+ component:()=>import("@/views/old/store/xyg/xyg-mation.vue")
+ },
+ {
+ path: '/xyg/xygHb', //信用购花呗办单页面
+ name: 'xygHb',
+ props: true,
+ component:()=>import("@/views/old/store/xyg/xygHb.vue")
+ },
+ {
+ path: '/xyg/list', //信用购列表页面
+ name: 'xyg_list',
+ props: true,
+ component:()=>import("@/views/old/store/xyg/xygList.vue")
+ },
+ {
+ path: '/xyg/createcode', //生成二维码
+ name: 'xyg_createcode',
+ props: true,
+ component:()=>import("@/views/old/store/xyg/createcode.vue")
+ },
+ {
+ path: '/gzzjset',
+ name: 'gzzj_set',
+ component:()=>import("@/views/old/store/gzzj/set.vue")
+ },
+ {
+ path: '/gzzj/upload/:orderId', //上传合约资料
+ name: 'gzzj_upload',
+ props: true,
+ component:()=>import("@/views/old/store/gzzj/upload.vue")
+ },
+ {
+ path: '/gzzj/createcode', //生成二维码
+ name: 'gzzj_createcode',
+ props: true,
+ component:()=>import("@/views/old/store/gzzj/createcode.vue")
+ },
+ {
+ path:"/gzzj/gzzjQrCode",
+ name:'gzzj_qrCode',
+ component:()=>import("@/views/old/store/gzzj/gzzjQrCode.vue")
+ },
+ {
+ path: '/main/productManagement', // 商户-产品管理
+ name: 'productManagement',
+ component: function(resolve) {
+ require(['../views/old/merchant/productManagement'], resolve);
+ }
+ },
+ {
+ path: '/main/hb-product', // 花呗通道内产品管理
+ name: 'hb-product',
+ component: function(resolve) {
+ require(['../views/old/merchant/hb-product'], resolve);
+ }
+ },
+
+ //选择通道
+ {
+ path:'/channel-selection',
+ name:'channel-selection',
+ component(resolve) {
+ require(['@/views/old/store/channel-selection.vue'], resolve);
+ }
+ },
+
+ {
+ path:'/facepay/calcmoney',
+ name:'facepay_calcmoney',
+ component(resolve) {
+ require(['@/views/old/facepay/calcmoney.vue'], resolve);
+ }
+ },
+ {
+ path:'/facepay/details',
+ name:'facepay_details',
+ component(resolve) {
+ require(['@/views/old/facepay/orderDetails.vue'], resolve);
+ }
+ },
+ {
+ path:'/facepay/list',
+ name:'facepay_list',
+ component(resolve) {
+ require(['@/views/old/facepay/orderList.vue'], resolve);
+ }
+ },
+ {
+ path:'/facepay/code',
+ name:'facepay_code',
+ component(resolve) {
+ require(['@/views/old/facepay/code.vue'], resolve);
+ }
+ },
+
+
+]
+
+
+const old_merRouter = [
+ {
+ path: '/ljcreditStaging', // 商户-信用卡分期
+ name: 'ljcreditStaging',
+ component: function(resolve) {
+ require(['../views/old/merchant/lj/ljcreditStaging'], resolve);
+ }
+ },
+
+ {
+ path: '/creditStaging', // 商户-信用卡分期
+ name: 'creditStaging',
+ component: function(resolve) {
+ require(['../views/old/merchant/creditStaging'], resolve);
+ }
+ },
+
+ {
+ path: '/tonglian/startOpen', // 开通通联通道页面
+ name: 'tonglianStartOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/startOpen'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/store-pictures', // 开通通联通道上传图片页面
+ name: 'tonglianStorePictures',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/storePictures'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/open', // 确认开通通联通道页面
+ name: 'tonglianOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/open'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/open-result', // 开通通联通道开通结果页面
+ name: 'tonglianOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/openResult'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/verification', //
+ name: 'verification',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/verification'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/staging', // 开通通联通道开通信息页面
+ name: 'tonglianStaging',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/staging'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/withdrawal', // 通联通道提现
+ name: 'tonglianWithdrawal',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/withdrawal'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/withdrawal-history', // 通联通道提现纪录
+ name: 'tonglianWithdrawalHistory',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/withdrawal-history'], resolve);
+ }
+ },
+ {
+ path: '/tonglian/Withdrawal-result', // 通联通道提现结果
+ name: 'tonglianWithdrawalResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/tonglian/withdrawal-result'], resolve);
+ }
+ },
+ {
+ path: '/huabei/open', // 开通花呗页面
+ name: 'huaBeiOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/open'], resolve);
+ }
+ },
+ {
+ path: '/huabei/alipay', // 开通花呗--选择支付宝账号页面
+ name: 'huaBeiAlipay',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/alipay'], resolve);
+ }
+ },
+ {
+ path: '/huabei/store-pictures', // 开通花呗--门店相关照片上传
+ name: 'huaBeiStorePictures',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/storePictures'], resolve);
+ }
+ },
+ {
+ path: '/huabei/open-result', // 开通花呗--审核结果
+ name: 'huaBeiOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/openResult'], resolve);
+ }
+ },
+ {
+ path: '/huabei/staging', // 花呗开通成功后-使用花呗分期时,填写详情页面
+ name: 'huaBeiStaging',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/staging'], resolve);
+ }
+ },
+ {
+ path: '/huabei/staging_hbjl', // 花呗开通成功后-使用花呗分期时,填写详情页面
+ name: 'huaBeiStaging_hbjl',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/staging_hbjl'], resolve);
+ }
+ },
+ {
+ path: '/huabei/staging_dmf', // 花呗开通成功后-使用花呗分期时,填写详情页面
+ name: 'huaBeiStaging_dmf',
+ component: function(resolve) {
+ require(['../views/old/merchant/huabei/staging_dmf'], resolve);
+ }
+ },
+
+ {
+ path: '/gjzj/open', // 开通购机直降
+ name: 'gjzjOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/gjzj/open'], resolve);
+ }
+ },
+ {
+ path: '/gjzj/open-result', // 购机直降--审核结果
+ name: 'gjzjOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/gjzj/openResult'], resolve);
+ }
+ },
+ {
+ path: '/heyd/merOpen', // 开通海尔云贷
+ name: 'heydMerOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/heyd/merOpen'], resolve);
+ }
+ },
+ {
+ path: '/heyd/storeOpen', // 开通海尔云贷
+ name: 'heydStoreOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/heyd/storeOpen'], resolve);
+ }
+ },
+ {
+ path: '/heyd/mgrOpen', // 开通海尔云贷
+ name: 'heydMgrOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/heyd/mgrOpen'], resolve);
+ }
+ },
+ {
+ path: '/heyd/open-result', // 海尔云贷--审核结果
+ name: 'heydOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/heyd/openResult'], resolve);
+ }
+ },
+ {
+ path: '/xyg/merOpen', // 开通海尔云贷
+ name: 'xygMerOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/xyg/merOpen'], resolve);
+ }
+ },
+ {
+ path: '/xyg/storeOpen', // 开通海尔云贷
+ name: 'xygStoreOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/xyg/storeOpen'], resolve);
+ }
+ },
+ {
+ path: '/xyg/mgrOpen', // 开通海尔云贷
+ name: 'xygMgrOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/xyg/mgrOpen'], resolve);
+ }
+ },
+ {
+ path: '/xyg/open-result', // 海尔云贷--审核结果
+ name: 'xygOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/xyg/openResult'], resolve);
+ }
+ },
+ {
+ path: '/gzzj/merOpen', // 开通海尔云贷
+ name: 'gzzjMerOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/gzzj/merOpen'], resolve);
+ }
+ },
+ {
+ path: '/gzzj/storeOpen', // 开通海尔云贷
+ name: 'gzzjStoreOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/gzzj/storeOpen'], resolve);
+ }
+ },
+ {
+ path: '/gzzj/mgrOpen', // 开通海尔云贷
+ name: 'gzzjMgrOpen',
+ component: function(resolve) {
+ require(['../views/old/merchant/gzzj/mgrOpen'], resolve);
+ }
+ },
+ {
+ path: '/gzzj/open-result', // 海尔云贷--审核结果
+ name: 'gzzjOpenResult',
+ component: function(resolve) {
+ require(['../views/old/merchant/gzzj/openResult'], resolve);
+ }
+ },
+]
+
+const APPRouter = [
+ {
+ path: '/app/login', // app联登主页
+ name: 'AppHome',
+ component: function(resolve) {
+ require(['../views/appLiandeng/login.vue'], resolve);
+ },
+ meta:{
+ isLogin:false
+ }
+ },
+ {
+ path: '/app/home', // app联登主页
+ name: 'AppHome',
+ component: function(resolve) {
+ require(['../views/appLiandeng/home.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/changeMer',
+ name: 'AppchangeMer',
+ component: function(resolve) {
+ require(['../views/appLiandeng/changeMer.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/choseVersion',
+ name: 'AppchoseVersion',
+ component: function(resolve) {
+ require(['../views/appLiandeng/choseVersion.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/shskVersionDetail',
+ name: 'AppshskVersionDetail',
+ component: function(resolve) {
+ require(['../views/appLiandeng/shskVersionDetail.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/zfbVersionDetail',
+ name: 'AppzfbVersionDetail',
+ component: function(resolve) {
+ require(['../views/appLiandeng/zfbVersionDetail.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/opening/startOpen',
+ name: 'AppopeningstartOpen',
+ component: function(resolve) {
+ require(['../views/appLiandeng/opening/startOpen.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/opening/fillingInfo',
+ name: 'AppopeningfillingInfo',
+ component: function(resolve) {
+ require(['../views/appLiandeng/opening/fillingInfo.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/opening/pictureUpload',
+ name: 'AppopeningpictureUpload',
+ component: function(resolve) {
+ require(['../views/appLiandeng/opening/pictureUpload.vue'], resolve);
+ }
+ },
+ {
+ path: '/app/opening/openResult',
+ name: 'AppopeningopenResult',
+ component: function(resolve) {
+ require(['../views/appLiandeng/opening/openResult.vue'], resolve);
+ }
+ },
+]
+export default [
+ ...old_merRouter,
+ ...oldRouter,
+ ...APPRouter,
+ // 用户中心
+ {
+ path:"/",
+ name:'login',
+ component:()=>import("@/views/user/login.vue"),
+ meta:{
+ isLogin:false
+ }
+ },
+ {
+ path:"/user/reset-pwd",
+ name:'reset-pwd',
+ component:()=>import("@/views/user/reset-pwd.vue")
+ },
+ {
+ path:"/user/register", //商户注册
+ name:'register',
+ component:()=>import("@/views/user/register.vue")
+ },
+ {
+ path:"/user/register-home", //登录页里面的 注册
+ name:'register-home',
+ component:()=>import("@/views/user/register-home.vue"),
+ meta:{
+ isLogin:false
+ }
+ },
+ {
+ path:"/user/forgetpassword", //忘记密码
+ name:'forgetpassword',
+ component:()=>import("@/views/user/forgetpassword.vue"),
+ meta:{
+ isLogin:false
+ }
+ },
+ {
+ path:"/message",
+ name:'message',
+ component:()=>import("@/views/old/store/zxh/message.vue"),
+ },
+
+
+
+
+
+
+
+
+
+
+ {
+ path:"/main",
+ component:()=>import("@/views/main/index.vue"),
+ children:[
+ {
+ path:"home",
+ name:'home',
+ component:()=>import("@/views/main/home.vue"),
+ meta:{
+ powerId: 100001,
+ }
+ },
+ {
+ path:"message",
+ name:'message',
+ component:()=>import("@/views/main/message.vue"),
+ meta:{
+ powerId: 300000,
+ }
+ },
+ {
+ path:"mine",
+ name:'mine',
+ component:()=>import("@/views/main/mine.vue"),
+ meta:{
+ powerId: 200000,
+ }
+ },
+ {
+ path:"approve",
+ name:'approve',
+ component:()=>import("@/views/main/approve.vue"),
+ meta:{
+ powerId: 100003
+ }
+ },
+ {
+ path:"product",
+ name:'product',
+ component:()=>import("@/views/old/store/business-center.vue"),
+ meta:{
+ powerId: 100006,
+ }
+ },
+ // {
+ // path: 'productManagement', // 商户-产品管理
+ // name: 'productManagement',
+ // component: function(resolve) {
+ // require(['../views/old/merchant/productManagement'], resolve);
+ // },
+ // meta:{
+ // powerId: 100004,
+ // }
+ // },//hb-product
+ // {
+ // path: 'hb-product', // 花呗通道内产品管理
+ // name: 'hb-product',
+ // component: function(resolve) {
+ // require(['../views/old/merchant/hb-product'], resolve);
+ // },
+ // // meta:{
+ // // powerId: 100004,
+ // // }
+ // },
+ ]
+ },
+ {
+ path:"/mine/channel",
+ name:'channel',
+ component:()=>import("@/views/mine/channel/channel.vue")
+ },
+ {
+ path:"/mine/channel-detail",
+ name:'channel-detail',
+ component:()=>import("@/views/mine/channel/channel-detail.vue")
+ },
+ {
+ path:"/mine/channel-add",
+ name:'channel-add',
+ component:()=>import("@/views/mine/channel/channel-add.vue")
+ },
+ {
+ path:"/mine/toggle-identity",
+ name:'toggle-identity',
+ component:()=>import("@/views/mine/toggle-identity.vue")
+ },
+
+
+
+
+ // 设置中心 - 路由
+ {
+ path:"/mine/setting",
+ name:'setting',
+ component:()=>import("@/views/mine/setting/setting.vue")
+ }, //
+ {
+ path:"/mine/setting/merchants-approval", //商户审批
+ name:'merchants-approval',
+ component:()=>import("@/views/mine/setting/merchants-approval.vue")
+ },
+ {
+ path:"/mine/red-envelopes",
+ name:'red-envelopes',
+ component:()=>import("@/views/mine/redEnvelopes/red-envelopes.vue")
+ },//红包账户
+ {
+ path:"/mine/withdrawals",
+ name:'withdrawals',
+ component:()=>import("@/views/mine/redEnvelopes/withdrawals.vue")
+ },//红包提现
+
+
+
+
+ // 产品管理 - 路由
+ {
+ path:"/product/credit-detail",
+ name:'credit-detail',
+ component:()=>import("@/views/product/credit-detail.vue")
+ },
+ {
+ path:"/product/dmf-detail",
+ name:'dmf-detail',
+ component:()=>import("@/views/product/dmf-detail.vue")
+ },
+ {
+ path:"/product/hbjl-detail",
+ name:'hbjl-detail',
+ component:()=>import("@/views/product/hbjl-detail.vue")
+ },
+ {
+ path:"/product/hb-detail",
+ name:'hb-detail',
+ component:()=>import("@/views/product/hb-detail.vue")
+ },
+ {
+ path:"/product/xyg-hb-detail",
+ name:'xyg-hb-detail',
+ component:()=>import("@/views/product/xyg-hb-detail.vue")
+ },
+ {
+ path:"/product/gjzj-detail",
+ name:'gjzj-detail',
+ component:()=>import("@/views/product/gjzj-detail.vue")
+ },
+ {
+ path:"/product/zxh-detail",
+ name:'zxh-detail',
+ component:()=>import("@/views/product/zxh-detail.vue")
+ },
+ {
+ path:"/product/xyg-detail",
+ name:'xyg-detail',
+ component:()=>import("@/views/product/xyg-detail.vue")
+ },
+ {
+ path:"/product/gzzj-detail",
+ name:'gzzj-detail',
+ component:()=>import("@/views/product/gzzj-detail.vue")
+ },
+ {
+ path:"/product/gzzj_order_detail_pics",
+ name:'gzzj_order_detail_pics',
+ component:()=>import("@/views/product/gzzj_order_detail_pics.vue")
+ },
+ {
+ path:"/product/productMent",
+ name:'mer-productMent',
+ component:()=>import("@/views/mdyh/product/productMent.vue")
+ },
+ {
+ path:"/product/lthyj-detail",
+ name:'lthyj-detail',
+ component:()=>import("@/views/product/lthyj-detail.vue")
+ },
+ {
+ path:"/product/wxScore-detail",
+ name:'wxScore-detail',
+ component:()=>import("@/views/product/wxScore-detail.vue")
+ },
+ //花呗合约套餐页面
+ {
+ path:"/hbhy-installment",
+ name:'hbhy-installment',
+ component:()=>import("@/views/old/store/hbhy-installment.vue")
+ },
+ //花呗合约机办理页面
+ {
+ path:"/hbhy-detail",
+ name:'hbhy-detail',
+ component:()=>import("@/views/product/hbhy-detail.vue")
+ },
+ {
+ path:"/product/facepay",
+ name:'facepay',
+ component:()=>import("@/views/product/facepay/facepay.vue")
+ },
+ {
+ path:"/product/orderlist",
+ name:'orderlist',
+ component:()=>import("@/views/product/facepay/orderlist.vue")
+ },
+ {
+ path:"/product/facepay-qrcode",
+ name:'facepay-qrcode',
+ component:()=>import("@/views/product/facepay/facepay-qrcode.vue")
+ },
+ //支付宝拉新
+ {
+ path:"/product/zfblx",
+ name:'zfblx',
+ component:()=>import("@/views/zfblx/lxLogin.vue"),
+ // children:[
+ // {
+ // path: "lxexplain",
+ // name: "lxexplain",
+ // component:()=>import("@/views/zfblx/lxExplain.vue"),
+ // },
+ // {
+ // path: "lxcode",
+ // name: "lxcode",
+ // component:()=>import("@/views/zfblx/lxCode.vue"),
+ // },
+ // ]
+ },
+ {
+ path:"/product/zfblx/lxexplain",
+ name:'lxexplain',
+ component:()=>import("@/views/zfblx/lxExplain.vue")
+ },
+ {
+ path:"/product/zfblx/lxcode",
+ name:'lxcode',
+ component:()=>import("@/views/zfblx/lxCode.vue")
+ },
+ //支付宝拉新订单
+ {
+ path:"/order/lxOredr",
+ name:'lxOredr',
+ component:()=>import("@/views/zfblx/lxOrder.vue")
+ },
+ //支付宝拉新订单详情
+ {
+ path:"/order/lxOredrDetail",
+ name:'lxOredrDetail',
+ component:()=>import("@/views/zfblx/lxOrderDetail.vue")
+ },
+
+
+
+
+
+ // 商户管理
+ {
+ path:"/mine/mer-manager",
+ name:'mer-manager',
+ component:()=>import("@/views/mine/mer/mer-manager.vue")
+ },
+ {
+ path:"/mine/mer-info",
+ name:'mer-info',
+ component:()=>import("@/views/mine/mer/mer-info.vue")
+ },
+ {
+ path:"/mine/mer-photo-chose",
+ name:'mer-info',
+ component:()=>import("@/views/mine/mer/mer-photo-chose.vue")
+ },
+
+
+
+
+ // 门店管理-路由
+ {
+ path:"/mine/stores",
+ name:'stores',
+ component:()=>import("@/views/mine/stores/stores.vue")
+ },
+ {
+ path:"/mine/stores-add",
+ name:'stores-add',
+ component:()=>import("@/views/mine/stores/stores-add.vue")
+ },
+ {
+ path:"/mine/stores-detail",
+ name:'stores-detail',
+ component:()=>import("@/views/mine/stores/stores-detail.vue")
+ },
+
+
+
+
+ // 订单相关
+ {
+ path:"/order/credit",
+ name:'order-credit',
+ component:()=>import("@/views/order/credit.vue")
+ },
+ {
+ path:"/order/hb",
+ name:'order-hb',
+ component:()=>import("@/views/order/hb.vue")
+ },
+ {
+ path:"/order/wxScore",
+ name:'order-wxScore',
+ component:()=>import("@/views/order/wxScore.vue")
+ },
+ {
+ path:"/order/gzzj",
+ name:'order-wxScore',
+ component:()=>import("@/views/order/gzzj.vue")
+ },
+ {
+ path:"/order/dmf",
+ name:'order-dmf',
+ component:()=>import("@/views/order/dmf.vue")
+ },
+ {
+ path:"/order/hbjl",
+ name:'order-hbjl',
+ component:()=>import("@/views/order/hbjl.vue")
+ },
+ {
+ path:"/order/gjzj",
+ name:'order-gjzj',
+ component:()=>import("@/views/order/gjzj.vue")
+ },
+ {
+ path:"/order/phone",
+ name:'order-phone',
+ component:()=>import("@/views/order/phone.vue")
+ },
+ {
+ path:"/order/zxh",
+ name:'order-zxh',
+ component:()=>import("@/views/order/zxh.vue")
+ },
+
+ {
+ path:"/order/xyg",
+ name:'order-xyg',
+ component:()=>import("@/views/order/xyg.vue")
+ },
+ {
+ path:"/order/xyg-hb",
+ name:'order-xyg-hb',
+ component:()=>import("@/views/order/xyg-hb.vue")
+ },
+ {
+ path:"/order/xyg-cx",
+ name:'order-xyg-cx',
+ component:()=>import("@/views/order/xyg-cx.vue")
+ },
+ {
+ path:"/order/order-lthyj",
+ name:'order-lthyj',
+ component:()=>import("@/views/order/order-lthyj.vue")
+ },
+ //和微分
+ {
+ path:"/wx-pay-score",
+ name:'store-wxPayScore',
+ component:()=>import("@/views/old/store/wx-pay-score.vue")
+ },
+ {
+ path:"/wx-getWxQRCode",
+ name:'wx-getWxQRCode',
+ component:()=>import("@/views/old/store/getWxQRCode.vue")
+ },
+ {
+ path:"/wx-scoreResult",
+ name:'wx-scoreResult',
+ component:()=>import("@/views/old/store/wx-score-result.vue")
+ },
+ {
+ path:"/order/order-lthyj",
+ name:'order-lthyj',
+ component:()=>import("@/views/order/order-lthyj.vue")
+ },
+
+ // 账号管理 - 路由
+ {
+ path:"/mine/account",
+ name:'account',
+ component:()=>import("@/views/mine/account/account.vue")
+ },
+ {
+ path:"/mine/account-add",
+ name:'account-add',
+ component:()=>import("@/views/mine/account/account-add.vue")
+ },
+
+
+
+
+
+
+ {
+ path:"/relatedpictures",
+ name:'relatedpictures',
+ component:()=>import("@/views/relatedPictures.vue")
+ },
+
+
+ {
+ path:"/template/list",
+ name:'template_list',
+ component:()=>import("@/views/template/list.vue")
+ },
+ // 门店产品管理
+ {
+ path:"/store/productManage",
+ name:'store_productManage',
+ component:()=>import("@/views/old/store/productManagement.vue")
+ },
+ {
+ path:"/template/detail",
+ name:'template_detail',
+ component:()=>import("@/views/template/detail.vue")
+ },
+ {
+ path:"/template/distribute",
+ name:'template_distribute',
+ component:()=>import("@/views/template/distribute.vue")
+ },
+
+
+ //banner主要内容
+ {
+ path:"/bannerContent",
+ name:'bannerContent',
+ component:()=>import("@/views/old/store/bannerContent/bannerContent.vue")
+ },
+
+ //逾期
+ {
+ path:"/overdue",
+ name:'overdue',
+ component:()=>import("@/views/mdyh/overdue/overdue.vue"),
+ },
+ {
+ path:"/ovderdueDetail",
+ name:'ovderdueDetail',
+ component:()=>import("@/views/mdyh/overdue/ovderdueDetail.vue"),
+ },
+ //办单教程
+ {
+ path:"/bdCourse",
+ name:'bdCourse',
+ component:()=>import("@/views/mdyh/bdjc/bdCourse.vue")
+ },
+ //商户贴息
+ {
+ path:"/shtx",
+ name:'shtx',
+ component:()=>import("@/views/mdyh/shtx/shtx.vue")
+ },
+ //商户资料
+ {
+ path:"/setting/mer-date",
+ name:'mer-date',
+ component:()=>import("@/views/mdyh/shtx/mer-date.vue")
+ },
+
+ // 花呗间联
+ {
+ path:"/creat-hbjl",
+ name:'creat-hbjl',
+ component:()=>import("@/views/old/store/hbjl/creat-hbjl.vue")
+ },
+ {
+ path:"/hbjl-qr",
+ name:'hbjl-qr',
+ component:()=>import("@/views/old/store/hbjl/hbjl-qr.vue")
+ },
+
+ {
+ path:"/hbcp",
+ name:'hbcp',
+ component:()=>import("@/views/old/store/hbcp.vue")
+ },
+ // 云南联通合约机
+ {
+ path:"/lthyj",
+ name:'lthyj',
+ component:()=>import("@/views/old/store/lthyj.vue")
+ },
+ {
+ path:"/hbcp_sh",
+ name:'hbcp_sh',
+ component:()=>import("@/views/old/store/hbcp_sh.vue")
+ },
+ {
+ path:'/channel-selection_sh',
+ name:'channel-selection_sh',
+ component(resolve) {
+ require(['@/views/old/store/channel-selection_sh.vue'], resolve);
+ }
+ },
+ {
+ path:'/choose-payment-method',
+ name:'choose-payment-method',
+ component(resolve) {
+ require(['@/views/old/store/choose-payment-method.vue'], resolve);
+ }
+ },
+ {
+ path:'/store-shsk',
+ name:'store-shsk',
+ component(resolve) {
+ require(['@/views/old/store/shsk/shsk.vue'], resolve);
+ }
+ },
+ {
+ path:'/getShskQRCode',
+ name:'getShskQRCode',
+ component(resolve) {
+ require(['@/views/old/store/getShskQRCode.vue'], resolve);
+ }
+ },
+ {
+ path:'/shsk-payResult',
+ name:'shsk-payResult',
+ component(resolve) {
+ require(['@/views/old/store/shsk/payResult.vue'], resolve);
+ }
+ },
+ {
+ path:'/loginByWx',
+ name:'login-by-wx',
+ component:()=>import("@/views/user/loginByWx.vue"),
+ // meta:{
+ // isLogin:false,
+ // isOpenId:true
+ // }
+ },
+ {
+ path:'/supplement',
+ name:'supplement',
+ component:()=>import("@/views/user/supplement.vue"),
+ // meta:{
+ // isLogin:false,
+ // isOpenId:true
+ // }
+ },
+]
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..8a462f1
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,409 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 15:20:51
+ * @Description:
+ */
+import Vue from 'vue';
+import Vuex from "vuex";
+import md5 from 'blueimp-md5';
+import mutations from "./mutations";
+import test from "./module/test";
+// 数据持久化到session的插件
+import createPersistedState from 'vuex-persistedstate';
+import { calcArea } from '@/utils/index';
+
+import {
+ SET_SESSION_ID,
+ SET_FOOTER_NAV,
+ SET_USER_PAGE,
+ SET_USER_INFO,
+ SET_AREA_LIST,
+ SET_MESSAGE_CONUT,
+ SET_INVITE_CODE,
+ SET_BCAKCOLOR,
+ SET_BCJBCOLORF,
+ SET_BCJBCOLORB,
+ SET_DEFAULT_BG_COLOR,
+ SET_LAST_COLOR
+} from './mutations-types';
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+ plugins: [createPersistedState({ storage: window.sessionStorage })],
+ state: {
+ AppLoading: false,
+ sessionId: '',//判断是否登录
+ footerNav: [], //底部导航
+ userPage: [], //管理页面 用户有的权限页面
+ userinfo: {}, //用户信息
+ areaList: {//地区列表
+ province_list: {}, //省
+ city_list: {}, //市
+ county_list: {}, //地区、县
+ },
+ msgCount: {},
+ inviteCode: '', //邀请码
+
+ lastColor:'#423d5d',
+ backColor:'#896EDB',//主题色
+ backJbColorF:'#8F6AFF',//主题渐变色
+ backJbColorB:'#9459EC',
+ defaultBgColor:'linear-gradient(180deg, #554E7A, #423D5D)',
+ },
+ getters: {
+ orgType(state) {
+ return state.userinfo.orgType
+ },
+ orgId(state) {
+ return state.userinfo.orgId
+ }
+ },
+ mutations,
+ actions: {
+ loginByAppToken({ commit, dispatch }, { vm, appToken, backUrl, next }){
+ sessionStorage.appToken = appToken;
+ sessionStorage.backUrl = backUrl;
+ let p = new Promise(function(resolve,reject){
+ Vue.prototype.$api.loginByMerToken({
+ token:appToken
+ }).then(res=>{
+ sessionStorage.jumpUrl = res.body.clientAccessDomain;
+ let lastLoginMgrId = res.body.lastLoginMgrId
+ let sessionId = res.body.sessionId
+ commit(SET_SESSION_ID, sessionId);
+ if(lastLoginMgrId){
+ resolve(lastLoginMgrId)
+ }else{
+ next('/app/changeMer')
+ }
+ })
+ })
+ p.then(lastLoginMgrId=>{
+ sessionStorage.sid = lastLoginMgrId;
+ Vue.prototype.$api.getPowerInfo(lastLoginMgrId).then(res=>{
+ commit(SET_USER_INFO,res.body)
+ next('/app/home')
+ })
+ })
+ },
+
+ loginByToken({ commit, dispatch }, { vm, hjToken, next }) {
+ localStorage.hjToken = hjToken
+ Vue.prototype.$api.loginByToken({
+ token: hjToken
+ }).then(res => {
+
+ sessionStorage.jumpUrl = res.body.clientAccessDomain;
+
+ let lastLoginMgrId = res.body.lastLoginMgrId
+ let sessionId = res.body.sessionId
+ commit(SET_SESSION_ID, sessionId);
+
+
+ if (lastLoginMgrId) {
+ dispatch('setUserMenu', { vm, lastLoginMgrId, next })
+ } else {
+ if (next) {
+ next('/mine/toggle-identity');
+ } else {
+ vm.$router.push('/mine/toggle-identity');
+ }
+ }
+ })
+ },
+ loginByOpenId({ commit, dispatch },{ vm, loginType, verCode, mblNo,merId,wechatOpenId,userId, next}){
+ Vue.prototype.$api.loginByOpenId({
+ loginType:loginType,
+ verCode:verCode,
+ mblNo:mblNo,
+ merId:merId,
+ wechatOpenId:wechatOpenId,
+ userId:userId
+ }).then(res=>{
+ if(mblNo){
+ localStorage.sib_wx_mblNo = mblNo
+ }
+ sessionStorage.isLoginByOpenId = 1
+ localStorage.sib_wx_openId = wechatOpenId
+ localStorage.storeList = JSON.stringify(res.body.storeList)
+ // localStorage.sib_wx_mblNo = res.body.mblNo
+ // localStorage.sib_wx_userId = res.body.userId
+ commit(SET_SESSION_ID, res.body.sessionId);
+ if(res.body.isRegister == 1){
+ vm.$router.push({
+ path:'/supplement',
+ query:{
+ storeList:JSON.stringify(res.body.storeList)
+ }
+ })
+ }else{
+ if(res.body.storeList.length == 1){
+ let lastLoginMgrId = res.body.storeList[0].id
+ dispatch('setUserMenu', { vm, lastLoginMgrId, next })
+ }
+ if(res.body.storeList.length > 1){
+ vm.$router.push({
+ path:'/mine/toggle-identity',
+ query:{
+ title:'选择门店',
+ storeList:JSON.stringify(res.body.storeList)
+ }
+ })
+ }
+
+ }
+ // if(res.body.storeList.length == 1){
+ // vm.$router.push({
+ // path:'/main/mine',
+ // query:{
+ // isLoginByOpenId:1
+ // }
+ // })
+ // }
+ // if(res.body.storeList.length > 1){
+ // vm.$router.push({
+ // path:'/mine/toggle-identity',
+ // query:{
+ // title:'选择门店',
+ // storeList:res.body.storeList
+ // }
+ // })
+ // }
+ })
+ },
+ login({ commit, dispatch }, { vm, userNo, password, sib_mer_sysPlat, next }) {
+ window.localStorage.clear()
+ if(sessionStorage.isddxt == 1){
+ window.document.title = '叮咚学堂'
+ }
+ let tmpPassword = md5(userNo + password);
+ let passwordLogin = {
+ userNo: userNo,
+ password: tmpPassword
+ };
+ Vue.prototype.$api.login(passwordLogin).then(res => {
+ sessionStorage.jumpUrl = res.body.clientAccessDomain;
+ let {
+ lastLoginMgrId,
+ sessionId
+ } = res.body;
+ commit(SET_SESSION_ID, sessionId);
+ // window.sessionStorage.setItem(
+ // 'jumpUrl',
+ // res.body.clientAccessDomain
+ // );
+ // // 存储起来自动登录
+ localStorage.user_account = userNo;
+ localStorage.user_pwd = password;
+ localStorage.sib_mer_sysPlat = sib_mer_sysPlat; // 1 微信 2支付宝
+ if (lastLoginMgrId) {
+ // setUserMenu(vm, lastLoginMgrId, next);
+ dispatch('setUserMenu', { vm, lastLoginMgrId, next })
+ } else {
+ if (next) {
+ next('/mine/toggle-identity');
+ } else {
+ vm.$router.push('/mine/toggle-identity');
+ }
+ }
+ });
+ },
+ // 根据不同的权限设置用户拥有的菜单
+ setUserMenu({ commit }, { vm, lastLoginMgrId, next }) {
+
+ vm.$api.getPowerInfo(lastLoginMgrId).then(data => {
+ let {
+ powerInfoVos,
+ orgType
+ } = data.body;
+ let inviteCode = data.body.inviteCode;
+ commit(SET_INVITE_CODE, inviteCode);
+
+ let footerMenu = [
+ {
+ powerId: 100001,
+ icon: 'iconshuju_h',
+ Aicon: 'iconshuju',
+ label: '数据',
+ path: '/main/home'
+ },
+ {
+ powerId: 100003,
+ icon: 'iconshenpi_h',
+ Aicon: 'iconshenpi',
+ label: '审批',
+ path: '/main/approve'
+ },
+
+ {
+ powerId: 100006,
+ icon: 'icondingdan',
+ Aicon: 'icondingdan1',
+ label: '办单',
+ path: '/main/product'
+ },
+
+ ]
+ let userMenu = [
+ {
+ powerId: 100004,
+ icon: 'iconshanghuguanli',
+ label: '门店管理',
+ path: '/mine/stores'
+ },
+ {
+ powerId: 100002,
+ icon: 'iconqudaoguanli',
+ label: '渠道管理',
+ path: '/mine/channel'
+ }
+ ]
+ if(!window.localStorage.hjToken && sessionStorage.isLoginByOpenId != 1){
+ userMenu.push({
+ powerId: 100005,
+ icon: 'iconzhanghaoguanli',
+ label: '账号管理',
+ path: '/mine/account'
+ })
+ }
+
+ let footernav = []
+ let userPage = []
+ let path = ''
+
+ powerInfoVos.map(item => {
+ footerMenu.map(child => {
+ if (item.powerId === child.powerId) {
+ if (child.powerId === 100001 || child.powerId === 100006) {
+ footernav.unshift(child);
+ } else {
+ footernav.push(child);
+ }
+ }
+ });
+ userMenu.map(child => {
+ if (item.powerId === child.powerId) {
+ userPage.push(child);
+ }
+ });
+ });
+
+ console.log(userPage)
+
+ //增加消息tabbar
+ if (orgType != 1 && orgType != 2)
+ footernav.push({
+ powerId: 300000,
+ icon: 'iconxiaoxi_h',
+ Aicon: 'iconxiaoxi',
+ label: '消息',
+ path: '/main/message'
+ })
+ if (orgType == 1 || orgType == 3 || orgType == 2) {
+ footernav.unshift({
+ powerId: 100006,
+ icon: 'iconchanpin_h',
+ Aicon: 'iconchanpin',
+ label: '首页',
+ path: '/main/product'
+ })
+ }
+ footernav.push({
+ powerId: 200000,
+ icon: 'iconguanli_h',
+ Aicon: 'iconguanli',
+ label: '我的',
+ path: '/main/mine'
+ })
+
+
+
+
+
+ // 代理角色一定有商户管理、商户注册的菜单
+ if (orgType === 1 || orgType === 2) {
+
+ userPage.push({
+ icon: 'iconshanghuguanli',
+ label: '商户管理',
+ path: '/mine/mer-manager'
+ });
+ userPage.push({
+ icon: 'iconshanghuzhuce',
+ label: '商户注册',
+ path: '/user/register'
+ });
+ }
+
+
+
+
+
+ commit(SET_FOOTER_NAV, footernav);
+ commit(SET_USER_PAGE, userPage);
+ commit(SET_USER_INFO, data.body);
+ sessionStorage.sid = lastLoginMgrId;
+ // vm.$setItem('sid', mgrId);
+ if (orgType === 4) {
+ if(sessionStorage.isLoginByOpenId == 1){
+ path = '/main/mine';
+ }
+ else{
+ path = '/main/product';
+ }
+
+ } else {
+ path = '/main/mine';
+ }
+ if (next) {
+ next(path)
+ } else {
+ vm.$router.push(path)
+ }
+ });
+ },
+ // 获取地区列表
+ getArea({ commit }) {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ commit(SET_AREA_LIST, {
+ province_list: obj.province_list,
+ city_list: obj.city_list,
+ county_list: obj.county_list
+ })
+ }).catch((err) => {
+
+ });
+ },
+ //消息count
+ getCount({ commit }) {
+ Vue.prototype.$api.indexInit().then(res => {
+ // let sum = res.body.noticeInfos.some(item => {
+ // return item.needRead === 1
+ // })
+ let notice = {};
+ notice.sum = res.body.hasNotice
+ notice.swiperList = res.body.bannerInfoVos
+ notice.messageList = res.body.noticeInfos.noticeInfos
+ commit(SET_MESSAGE_CONUT, notice)
+ })
+ },
+ // 设置主题色
+ setColor({commit},{backColor,backJbColorF,backJbColorB,defaultBgColor, lastColor}){
+ console.log('defaultBgColor:',defaultBgColor)
+ commit(SET_BCAKCOLOR,backColor)
+ commit(SET_BCJBCOLORF,backJbColorF)
+ commit(SET_BCJBCOLORB,backJbColorB)
+ commit(SET_DEFAULT_BG_COLOR,defaultBgColor)
+ commit(SET_LAST_COLOR,lastColor)
+ }
+ },
+ modules: {
+ test
+ }
+})
+
diff --git a/src/store/module/test.js b/src/store/module/test.js
new file mode 100644
index 0000000..87bdc57
--- /dev/null
+++ b/src/store/module/test.js
@@ -0,0 +1,11 @@
+export default {
+ namespaced:true,
+ state:{
+ text:"1232"
+ },
+ mutations:{
+ add(state,{value}){
+ state.text = value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/store/mutations-types.js b/src/store/mutations-types.js
new file mode 100644
index 0000000..bc393a3
--- /dev/null
+++ b/src/store/mutations-types.js
@@ -0,0 +1,30 @@
+/*
+ * @Descripttion: 使用常量替代 mutation 事件类型,把这些常量放在单独的文件中可以让整个 app 包含的 mutation 一目了然
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-06 21:41:06
+ * @LastEditTime: 2020-11-17 10:14:01
+ */
+
+export const SET_APP_LOADING = "SET_APP_LOADING";
+
+export const SET_SESSION_ID = "SET_SESSION_ID";
+export const SET_USER_INFO = "SET_USER_INFO";
+
+// 设置地区列表
+export const SET_AREA_LIST = "SET_AREA_LIST";
+
+//消息
+export const SET_MESSAGE_CONUT = "SET_MESSAGE_CONUT";
+// 设置用户的底部导航菜单
+export const SET_FOOTER_NAV = "SET_FOOTER_NAV";
+
+// 设置用户的权限页面
+export const SET_USER_PAGE = "SET_USER_PAGE";
+export const SET_INVITE_CODE = "SET_INVITE_CODE";
+
+export const SET_BCAKCOLOR = "SET_BCAKCOLOR";
+export const SET_BCJBCOLORF = "SET_BCJBCOLORF";
+export const SET_BCJBCOLORB = "SET_BCJBCOLORB";
+export const SET_DEFAULT_BG_COLOR = "SET_DEFAULT_BG_COLOR";
+export const SET_LAST_COLOR = "SET_LAST_COLOR";
\ No newline at end of file
diff --git a/src/store/mutations.js b/src/store/mutations.js
new file mode 100644
index 0000000..eff7d55
--- /dev/null
+++ b/src/store/mutations.js
@@ -0,0 +1,75 @@
+/*
+ * @Descripttion: 项目的mutations
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-06 21:40:25
+ * @LastEditTime: 2020-11-17 09:15:09
+ */
+import {
+ SET_APP_LOADING,
+ SET_USER_PAGE,
+ SET_FOOTER_NAV,
+ SET_SESSION_ID,
+ SET_USER_INFO,
+ SET_AREA_LIST,
+ SET_MESSAGE_CONUT,
+ SET_INVITE_CODE,
+ SET_BCAKCOLOR,
+ SET_BCJBCOLORF,
+ SET_BCJBCOLORB,
+ SET_DEFAULT_BG_COLOR,
+ SET_LAST_COLOR
+} from "./mutations-types";
+
+//使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名
+export default {
+ //设置loading状态
+ [SET_APP_LOADING](state, val) {
+ state.AppLoading = val;
+ },
+ //获取邀请码
+ [SET_INVITE_CODE](state, val) {
+ state.inviteCode = val;
+ },
+ [SET_AREA_LIST](state, val) {
+ state.areaList = val;
+ },
+ [SET_MESSAGE_CONUT](state, val) {
+ state.msgCount = val;
+ },
+ [SET_SESSION_ID](state, val) {
+ state.sessionId = val;
+ },
+ [SET_USER_INFO](state, val) {
+ state.userinfo = val;
+ },
+ [SET_USER_PAGE](state, val) {
+ if (Array.isArray(val)) {
+ state.userPage = val;
+ }
+ },
+ [SET_FOOTER_NAV](state, val) {
+ if (Array.isArray(val)) {
+ state.footerNav = val;
+ }
+ },
+ [SET_BCAKCOLOR](state, val) {
+ state.backColor = val;
+ },
+ [SET_BCJBCOLORF](state, val) {
+ state.backJbColorF = val;
+ },
+ [SET_BCJBCOLORB](state, val) {
+ state.backJbColorB = val;
+ },
+ [SET_DEFAULT_BG_COLOR](state, val) {
+ state.defaultBgColor = val;
+ },
+ [SET_LAST_COLOR](state, val) {
+ state.lastColor = val;
+ },
+ // 设置消息列表
+ // [SET_MESSAGE_LIST](state, val) {
+ // state.messageList = val;
+ // },
+}
\ No newline at end of file
diff --git a/src/style/common.less b/src/style/common.less
new file mode 100644
index 0000000..da3063a
--- /dev/null
+++ b/src/style/common.less
@@ -0,0 +1,191 @@
+/*
+ * @Descripttion: 基础css 类,全局类名以 -g 结尾来区分
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2020-04-24 15:56:39
+ */
+
+ html,body{
+ height: 100%;
+ }
+
+ body {
+ font-size: @font-14;
+ color: @c-333;
+ scroll-behavior: smooth;
+}
+
+p,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+ul {
+ margin: 0;
+}
+
+
+
+.font-11-g{
+ font-size: @font-11;
+}
+
+.font-12-g{
+ font-size: @font-12;
+}
+
+.font-14-g{
+ font-size: @font-14;
+}
+
+
+.font-16-g{
+ font-size: @font-16;
+}
+
+
+
+.height-44-g{
+ height: 44px;
+ width: 100%;
+}
+.height-20-g{
+ height: 20px;
+ width: 100%;
+}
+
+
+
+.c-text-999-g{
+ color: @c-text-999;
+}
+
+.c-text-666-g{
+ color: @c-text-666;
+}
+
+hr{
+ border: none;
+}
+
+.h-100-g{
+ min-height: 100%;
+}
+
+.w-100-g{
+ width: 100%;
+}
+
+.fl-g {
+ float: left;
+}
+
+.fr-g {
+ float: right;
+}
+
+
+.clearfix-g {
+ zoom: 1;
+
+ &:after {
+ content: "";
+ display: block;
+ clear: both;
+ }
+}
+
+.text-center-g{
+ text-align: center;
+}
+
+.img-fluid-g {
+ max-width: 100%;
+ height: auto;
+}
+
+.p-center-g{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%,-50%);
+}
+
+.hidden-g {
+ display: none;
+}
+
+.flex-start-g {
+ .flex(flex-start);
+}
+
+.flex-center-g {
+ .flex(center);
+}
+
+.flex-between-g {
+ .flex(space-between);
+}
+
+.flex-around-g {
+ .flex(space-around);
+}
+
+.flex-end-g {
+ .flex(flex-end);
+}
+
+.flex-1-g{
+ flex:1;
+}
+
+/*单行溢出*/
+.text-clip-g {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+// 滚动条样式
+::-webkit-scrollbar {
+ max-width: 5px;
+ max-height: 8px;
+}
+
+
+::-webkit-scrollbar-thumb {
+ background-color: #C9CAD3;
+ border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+}
+
+// placeholder样式控制
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+ color: @c-999;
+ font-size: @font-14;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+ color: @c-999;
+ font-size: @font-14;
+}
+
+input::-moz-placeholder,
+textarea::-moz-placeholder {
+ color: @c-999;
+ font-size: @font-14;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+ color: @c-999;
+ font-size: @font-14;
+}
diff --git a/src/style/mixin.less b/src/style/mixin.less
new file mode 100644
index 0000000..b5eb120
--- /dev/null
+++ b/src/style/mixin.less
@@ -0,0 +1,98 @@
+/**
+ * Created by c.y on 2018-3-1
+ * 文件说明: 这个是定义项目全局的mixin
+ */
+
+// flex布局
+.flexLayout(@justify:flex-start,@align:center,@direction:row) {
+ display: flex;
+ justify-content: @justify;
+ align-items: @align;
+ flex-direction: @direction;
+}
+
+// 清除浮动
+.clearfix() {
+ zoom: 1;
+ &:before,
+ &:after {
+ content: '';
+ display: table;
+ }
+ &:after {
+ clear: both;
+ visibility: hidden;
+ font-size: 0;
+ height: 0;
+ }
+}
+
+// 单行文本超出显示省略号
+.ellipsis(@w:auto) {
+ width: @w;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: normal;
+}
+
+// 多行文本超出显示省略号
+.ellipsisLn(@line) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: @line;
+ word-break: break-all;
+}
+
+// 单词换行
+.text_wrap() {
+ word-wrap: break-word;
+ word-break: break-all;
+}
+
+// 设置箭头 arrowSize--箭头的大小, borderColor---箭头的颜色,@borderWidth箭头的粗细
+._setArrow(@arrowsize, @borderColor, @borderWidth) {
+ display: inline-block;
+ height: @arrowsize;
+ width: @arrowsize;
+ border-width: @borderWidth @borderWidth 0 0;
+ border-color: @borderColor;
+ border-style: solid;
+}
+
+// 示例调用 .setArrow(top, 10px, red, 2px);向上箭头
+.setArrow(@direction, @arrowsize, @borderColor, @borderWidth)
+ when
+ (@direction = top) {
+ ._setArrow(@arrowsize, @borderColor, @borderWidth);
+ transform: matrix(0.71, -0.71, 0.71, 0.71, 0, 0); // rotate(-45deg)
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+ when
+ (@direction = right) {
+ ._setArrow(@arrowsize, @borderColor, @borderWidth);
+ transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); // rotate(45deg);
+ position: relative;
+ top: -1px;
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+ when
+ (@direction = down) {
+ ._setArrow(@arrowsize, @borderColor, @borderWidth);
+ transform: matrix(-0.71, 0.71, -0.71, -0.71, 0, 0); // rotate(135deg);
+ position: relative;
+ top: -1.5px;
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+ when
+ (@direction = left) {
+ ._setArrow(@arrowsize, @borderColor, @borderWidth);
+ transform: matrix(-0.71, -0.71, 0.71, -0.71, 0, 0); // rotate(-135deg);
+ position: relative;
+ top: -1px;
+}
diff --git a/src/style/mixins.less b/src/style/mixins.less
new file mode 100644
index 0000000..6d04221
--- /dev/null
+++ b/src/style/mixins.less
@@ -0,0 +1,139 @@
+/*
+ * @Descripttion: 全局mixins变量
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2019-08-30 10:42:05
+ */
+ @import "./themes.less";
+
+ /* 字体 大小*/
+ @font-10: 10px;
+ @font-11: 11px;
+ @font-12: 12px;
+ @font-13: 13px;
+ @font-14: 14px;
+ @font-15: 15px;
+ @font-16: 16px;
+ @font-17: 17px;
+ @font-18: 18px;
+ @font-20: 20px;
+ @font-24: 24px;
+ @font-28: 28px;
+
+
+ /* z-index*/
+ @zIndex-10:10;
+ @zIndex-20:20;
+ @zIndex-30:30;
+ @zIndex-40:40;
+ @zIndex-50:50;
+ @zIndex-100:100;
+ @zIndex-200:200;
+ @zIndex-300:300;
+ @zIndex-400:400;
+ @zIndex-500:500;
+ @zIndex-999:999;
+ @zIndex-9999:9999;
+
+// 新主题色
+ @c-main: #896EDB;
+ @c-success: #19BE6B;
+ @c-lose:#ED4014;
+ // flex布局
+ .flex(@x:flex-start,@y:center,@wrap:nowrap,@dir:row) {
+ display: flex;
+ justify-content: @x;
+ align-items: @y;
+ flex-wrap: @wrap;
+ flex-direction: @dir;
+ }
+
+// 老项目复制过来的 兼任!
+ .flexLayout(@justify:flex-start,@align:center,@direction:row) {
+ display: flex;
+ justify-content: @justify;
+ align-items: @align;
+ flex-direction: @direction;
+}
+
+
+ .lh(@val){
+ height: @val;
+ line-height: @val;
+ }
+
+
+ /*多行溢出 手机端使用*/
+ .text-clip-double(@num:2) {
+ display: -webkit-box;
+ overflow: hidden;
+ word-break: break-all;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: @num;
+ }
+
+ // 定位到html
+// .p-fixed(@bg:#fff) {
+// position: fixed;
+// top: 0;
+// right: 0;
+// bottom: 0;
+// left: 0;
+// overflow-y: scroll;
+// background-color: @bg;
+// }
+
+
+
+
+
+
+// 老项目的变量
+@fontEN: -apple-system-font, "Helvetica Neue";
+@fontCN: "PingFang SC", "Microsoft YaHei", "sans-serif", "Helvetica Neue";
+@fontDefault: @fontEN, @fontCN;
+
+@font-size-tiny: 10Px;
+@font-size-small: 12Px;
+@font-size-medium: 14Px;
+@font-size-base: 15Px;
+@font-size-primary: 16Px;
+@font-size-large: 18Px;
+
+@font-line-height-base: 1;
+@font-line-height-medium: 1.3;
+@font-line-height-large: 1.5;
+
+@font-weight-normal: normal;
+@font-weight-bold: bold;
+@font-weight-base: 400;
+@font-weight-thin: 200;
+
+@border-radius-normal-size: 7.5px;
+
+@color-white: #fff;
+@backgroundColor: #f1f1f1;
+
+@color-text-main: #3a3a3a; //场景分期文字主要颜色
+@color-text-second: #666; //场景分期文字第二颜色
+@color-text-three: #bfa073; //场景分期文字第三颜色
+@color-text-three-light: rgba(191, 160, 115, 0.05); //场景分期文字第三颜色-淡色
+@color-text-placeholder: #a3a3a3; // 场景分期输入框placeholder暗提示颜色
+@color-line: #d9d9d9; // 边框颜色
+@color-border-theme: #bfa073; // 边框主题颜色
+
+@color-button-default: #3a3a3a;
+@color-button-normal: #bfa073;
+
+@tabbar-text-active-color: #bfa073;
+
+@switch-checked-bg-color: #bfa073;
+@switch-checked-border-color: #bfa073;
+
+@calendar-arrow-color: #444;
+@calendar-today-font-color: #bfa073;
+@calendar-selected-bg-color: #bfa073;
+
+
diff --git a/src/style/myVant.less b/src/style/myVant.less
new file mode 100644
index 0000000..8936816
--- /dev/null
+++ b/src/style/myVant.less
@@ -0,0 +1,12 @@
+.ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid #e0e1e6;
+ color: #333;
+ font-size: 16px;
+ .van-field__control{
+ color: #999 !important;
+ font-size: 14px !important;
+ }
+ }
+ }
\ No newline at end of file
diff --git a/src/style/myVideo.less b/src/style/myVideo.less
new file mode 100644
index 0000000..26cb77e
--- /dev/null
+++ b/src/style/myVideo.less
@@ -0,0 +1,8 @@
+/*
+*只用于video组件的样式调整
+*/
+.vjs-big-play-button{
+ // position: absolute;
+ top: 35% !important;
+ left: 35% !important;
+}
\ No newline at end of file
diff --git a/src/style/normalize.less b/src/style/normalize.less
new file mode 100644
index 0000000..b7fefd2
--- /dev/null
+++ b/src/style/normalize.less
@@ -0,0 +1,219 @@
+html {
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+}
+
+
+body {
+ margin: 0;
+}
+
+main {
+ display: block;
+}
+
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible;
+}
+
+
+pre {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+
+
+a {
+ background-color: transparent;
+}
+
+
+
+abbr[title] {
+ border-bottom: none;
+ text-decoration: underline;
+ text-decoration: underline dotted;
+}
+
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+
+small {
+ font-size: 80%;
+}
+
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+
+
+img {
+ border-style: none;
+}
+
+
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ font-size: 100%;
+ margin: 0;
+}
+
+
+
+button,
+input {
+ overflow: visible;
+}
+
+
+
+button,
+select {
+ text-transform: none;
+}
+
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+
+legend {
+ box-sizing: border-box;
+ color: inherit;
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ white-space: normal;
+}
+
+
+progress {
+ vertical-align: baseline;
+}
+
+
+
+textarea {
+ overflow: auto;
+}
+
+
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+
+details {
+ display: block;
+}
+
+
+summary {
+ display: list-item;
+}
+
+
+
+template {
+ display: none;
+}
+
+
+[hidden] {
+ display: none;
+}
\ No newline at end of file
diff --git a/src/style/themes.less b/src/style/themes.less
new file mode 100644
index 0000000..476716e
--- /dev/null
+++ b/src/style/themes.less
@@ -0,0 +1,51 @@
+/*
+ * @Descripttion: 项目色彩相关配置
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2019-08-15 16:12:25
+ */
+
+/*color*/
+@c-default:#896EDB;
+
+@c-fff:#ffffff;
+@c-f5:#F5F5F7;
+@c-eee:#eeeeee;
+@c-333:#333333;
+@c-666:#666666;
+@c-999:#999999;
+@c-green:#19BE6B;
+@c-red:#ED4014;
+@c-blue:#FF9900;
+@c-black:#423D5D;
+@c-555:#55516e;
+@c-fe:#FEFEFF;
+
+/* 边框 颜色*/
+// @color-border-default:@c-gray-default;
+
+/* 文字 颜色*/
+@c-text-default:@c-default;
+@c-text-333:@c-333;
+@c-text-666:@c-666;
+@c-text-999:@c-999;
+@c-text-fff:@c-fff;
+@c-text-black:@c-black;
+@c-text-fe:@c-fe;
+@c-text-f5:@c-f5;
+
+/* 背景 颜色*/
+@c-bg-default:@c-default;
+@c-bg-f5:@c-f5;
+@c-bg-eee:@c-eee;
+@c-bg-fff:@c-fff;
+@c-bg-black:@c-black;
+@c-bg-555:@c-555;
+
+/* 边框 */
+// @border-default:0.5Px solid @c-gray-e6;
+
+/* boxshadow */
+@shadow-default:0 2px 10px 0 rgba(0,39,125,0.1);
+
diff --git a/src/style/vant_reset.less b/src/style/vant_reset.less
new file mode 100644
index 0000000..503bc98
--- /dev/null
+++ b/src/style/vant_reset.less
@@ -0,0 +1,199 @@
+/*
+vant 的样式重置文件
+*/
+.van-cell-group{
+ border-radius: 3px;
+}
+.van-cell{
+ padding: 11px 0.32rem;
+ .van-cell__title{
+ font-size: @font-16;
+ }
+ &:not(:last-child)::after{
+ left: 0;
+ }
+ &:first-child{
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ }
+ &:last-child{
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ }
+}
+
+.van-collapse{
+ &:after{
+ display: none;
+ }
+ // 折叠面板样式重置
+ .van-collapse-item{
+ margin-bottom: 10px;
+ &::after{
+ display: none;
+ }
+ .van-cell::after{
+ display: none;
+ }
+ .van-cell__title{
+ font-size: @font-14;
+ font-weight: bold;
+ }
+ }
+
+}
+
+
+.van-popup{
+ overflow: initial;
+}
+
+
+// radio 边框颜色
+// .van-radio{
+// .van-icon-success{
+// // border: 0.02rem solid @c-bg-default;
+// }
+// }
+
+
+
+
+////退出登录 弹框
+.setting-box-dialog{
+ .van-dialog__message{
+ padding: 45px 60px!important;
+ }
+}
+
+
+
+
+.home-tabbar{
+ .van-tabbar-item__text{
+ font-size: 11px;
+ }
+ .van-tabbar-item__icon{
+ margin-bottom: 3px;
+ }
+}
+
+
+.icons-ser{
+ //.flex(center,center);
+ .van-cell{
+ //.flex(center,center);
+ }
+}
+
+
+//添加账号 复选框 样式修改
+.account-add{
+ .van-checkbox__icon{
+ font-size: @font-16;
+ }
+
+ .van-check-box{
+ .label{
+ font-size:@font-14;
+ font-weight:500;
+ color:#666666;
+ }
+ }
+}
+
+
+
+//登录页
+.login-page{
+
+
+
+
+ .van-cell{
+ margin-top: 15px;
+ padding-left: 0;
+ padding-right: 0;
+ height: 44px;
+ max-height: 44px;
+ }
+
+ .van-icon{
+ margin-right: 5px;
+ //color: @c-default;
+ }
+
+
+
+ .van-button{
+ .lh(44px);
+ margin-top: 35px;
+ display: block;
+ width:100%;
+ font-size: @font-18;
+ color: @c-fff;
+ text-align: center;
+ border: none;
+ // background-color: @c-default;
+ -webkit-appearance: none;
+ }
+
+}
+
+
+.forgetpassword,.register-home{
+
+
+ .van-field__right-icon{
+ margin: 0 0.16rem ;
+ padding:0;
+ }
+
+ .van-field__right-icon::after{
+ display: none;
+ }
+
+ .van-cell::after{
+ position: absolute;
+ box-sizing: border-box;
+ content: ' ';
+ pointer-events: none;
+ right: 0;
+ bottom: 0;
+ left: 0.32rem;
+ border-bottom: 0.02rem solid #ebedf0;
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ }
+
+
+}
+
+
+.filter-box{
+ .van-popup--bottom{
+ z-index: 3500 !important;
+ }
+}
+
+.weui-dialog{
+ width: 80%;
+}
+.vux-header{
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ // height: 3.66667rem;
+ height: 44px;
+
+ padding: 0;
+ z-index: 99;
+ background-color: #fff;
+ .vux-header-title{
+ color: #3a3a3a;
+ }
+}
+.weui-cells{
+ margin-top: 0;
+}
diff --git a/src/text.vue b/src/text.vue
new file mode 100644
index 0000000..59880c5
--- /dev/null
+++ b/src/text.vue
@@ -0,0 +1,27 @@
+<template>
+ <div>
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html">
+
+ </div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" />
+ </div>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+ export default {
+ data () {
+ return {
+ ShowAgreen:true
+ }
+ }
+ }
+
+</script>
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/utils/IDValidator.js b/src/utils/IDValidator.js
new file mode 100644
index 0000000..8dd1881
--- /dev/null
+++ b/src/utils/IDValidator.js
@@ -0,0 +1,3844 @@
+/**
+ * Created by 陈伟
+ * 2017/11/21.
+ * 身份证检查
+ */
+let GB2260 = {
+ '110000': '北京市',
+ '110100': '北京市市辖区',
+ '110101': '北京市东城区',
+ '110102': '北京市西城区',
+ '110103': '北京市崇文区',
+ '110104': '北京市宣武区',
+ '110105': '北京市朝阳区',
+ '110106': '北京市丰台区',
+ '110107': '北京市石景山区',
+ '110108': '北京市海淀区',
+ '110109': '北京市门头沟区',
+ '110111': '北京市房山区',
+ '110112': '北京市通州区',
+ '110113': '北京市顺义区',
+ '110200': '北京市县',
+ '110221': '北京市昌平县',
+ '110224': '北京市大兴县',
+ '110226': '北京市平谷县',
+ '110227': '北京市怀柔县',
+ '110228': '北京市密云县',
+ '110229': '北京市延庆县',
+ '120000': '天津市',
+ '120100': '天津市市辖区',
+ '120101': '天津市和平区',
+ '120102': '天津市河东区',
+ '120103': '天津市河西区',
+ '120104': '天津市南开区',
+ '120105': '天津市河北区',
+ '120106': '天津市红桥区',
+ '120107': '天津市塘沽区',
+ '120108': '天津市汉沽区',
+ '120109': '天津市大港区',
+ '120110': '天津市东丽区',
+ '120111': '天津市西青区',
+ '120112': '天津市津南区',
+ '120113': '天津市北辰区',
+ '120200': '天津市县',
+ '120221': '天津市宁河县',
+ '120222': '天津市武清县',
+ '120223': '天津市静海县',
+ '120224': '天津市宝坻县',
+ '120225': '天津市蓟县',
+ '130000': '河北省',
+ '130100': '河北省石家庄市',
+ '130101': '河北省石家庄市市辖区',
+ '130102': '河北省石家庄市长安区',
+ '130103': '河北省石家庄市桥东区',
+ '130104': '河北省石家庄市桥西区',
+ '130105': '河北省石家庄市新华区',
+ '130106': '河北省石家庄市郊区',
+ '130107': '河北省石家庄市井陉矿区',
+ '130121': '河北省石家庄市井陉县',
+ '130123': '河北省石家庄市正定县',
+ '130124': '河北省石家庄市栾城县',
+ '130125': '河北省石家庄市行唐县',
+ '130126': '河北省石家庄市灵寿县',
+ '130127': '河北省石家庄市高邑县',
+ '130128': '河北省石家庄市深泽县',
+ '130129': '河北省石家庄市赞皇县',
+ '130130': '河北省石家庄市无极县',
+ '130131': '河北省石家庄市平山县',
+ '130132': '河北省石家庄市元氏县',
+ '130133': '河北省石家庄市赵县',
+ '130181': '河北省石家庄市辛集市',
+ '130182': '河北省石家庄市藁城市',
+ '130183': '河北省石家庄市晋州市',
+ '130184': '河北省石家庄市新乐市',
+ '130185': '河北省石家庄市鹿泉市',
+ '130200': '河北省唐山市',
+ '130201': '河北省唐山市市辖区',
+ '130202': '河北省唐山市路南区',
+ '130203': '河北省唐山市路北区',
+ '130204': '河北省唐山市古冶区',
+ '130205': '河北省唐山市开平区',
+ '130206': '河北省唐山市新区',
+ '130221': '河北省唐山市丰润县',
+ '130223': '河北省唐山市滦县',
+ '130224': '河北省唐山市滦南县',
+ '130225': '河北省唐山市乐亭县',
+ '130227': '河北省唐山市迁西县',
+ '130229': '河北省唐山市玉田县',
+ '130230': '河北省唐山市唐海县',
+ '130281': '河北省唐山市遵化市',
+ '130282': '河北省唐山市丰南市',
+ '130283': '河北省唐山市迁安市',
+ '130300': '河北省秦皇岛市秦皇岛市',
+ '130301': '河北省秦皇岛市市辖区',
+ '130302': '河北省秦皇岛市海港区',
+ '130303': '河北省秦皇岛市山海关区',
+ '130304': '河北省秦皇岛市北戴河区',
+ '130321': '河北省秦皇岛市青龙满族自治县',
+ '130322': '河北省秦皇岛市昌黎县',
+ '130323': '河北省秦皇岛市抚宁县',
+ '130324': '河北省秦皇岛市卢龙县',
+ '130400': '河北省邯郸市邯郸市',
+ '130401': '河北省邯郸市市辖区',
+ '130402': '河北省邯郸市邯山区',
+ '130403': '河北省邯郸市丛台区',
+ '130404': '河北省邯郸市复兴区',
+ '130406': '河北省邯郸市峰峰矿区',
+ '130421': '河北省邯郸市邯郸县',
+ '130423': '河北省邯郸市临漳县',
+ '130424': '河北省邯郸市成安县',
+ '130425': '河北省邯郸市大名县',
+ '130426': '河北省邯郸市涉县',
+ '130427': '河北省邯郸市磁县',
+ '130428': '河北省邯郸市肥乡县',
+ '130429': '河北省邯郸市永年县',
+ '130430': '河北省邯郸市邱县',
+ '130431': '河北省邯郸市鸡泽县',
+ '130432': '河北省邯郸市广平县',
+ '130433': '河北省邯郸市馆陶县',
+ '130434': '河北省邯郸市魏县',
+ '130435': '河北省邯郸市曲周县',
+ '130481': '河北省邯郸市武安市',
+ '130500': '河北省邢台市',
+ '130501': '河北省邢台市市辖区',
+ '130502': '河北省邢台市桥东区',
+ '130503': '河北省邢台市桥西区',
+ '130521': '河北省邢台市邢台县',
+ '130522': '河北省邢台市临城县',
+ '130523': '河北省邢台市内丘县',
+ '130524': '河北省邢台市柏乡县',
+ '130525': '河北省邢台市隆尧县',
+ '130526': '河北省邢台市任县',
+ '130527': '河北省邢台市南和县',
+ '130528': '河北省邢台市宁晋县',
+ '130529': '河北省邢台市巨鹿县',
+ '130530': '河北省邢台市新河县',
+ '130531': '河北省邢台市广宗县',
+ '130532': '河北省邢台市平乡县',
+ '130533': '河北省邢台市威县',
+ '130534': '河北省邢台市清河县',
+ '130535': '河北省邢台市临西县',
+ '130581': '河北省邢台市南宫市',
+ '130582': '河北省邢台市沙河市',
+ '130600': '河北省保定市',
+ '130601': '河北省保定市市辖区',
+ '130602': '河北省保定市新市区',
+ '130603': '河北省保定市北市区',
+ '130604': '河北省保定市南市区',
+ '130621': '河北省保定市满城县',
+ '130622': '河北省保定市清苑县',
+ '130623': '河北省保定市涞水县',
+ '130624': '河北省保定市阜平县',
+ '130625': '河北省保定市徐水县',
+ '130626': '河北省保定市定兴县',
+ '130627': '河北省保定市唐县',
+ '130628': '河北省保定市高阳县',
+ '130629': '河北省保定市容城县',
+ '130630': '河北省保定市涞源县',
+ '130631': '河北省保定市望都县',
+ '130632': '河北省保定市安新县',
+ '130633': '河北省保定市易县',
+ '130634': '河北省保定市曲阳县',
+ '130635': '河北省保定市蠡县',
+ '130636': '河北省保定市顺平县',
+ '130637': '河北省保定市博野县',
+ '130638': '河北省保定市雄县',
+ '130681': '河北省保定市涿州市',
+ '130682': '河北省保定市定州市',
+ '130683': '河北省保定市安国市',
+ '130684': '河北省保定市高碑店市',
+ '130700': '河北省张家口市',
+ '130701': '河北省张家口市市辖区',
+ '130702': '河北省张家口市桥东区',
+ '130703': '河北省张家口市桥西区',
+ '130705': '河北省张家口市宣化区',
+ '130706': '河北省张家口市下花园区',
+ '130721': '河北省张家口市宣化县',
+ '130722': '河北省张家口市张北县',
+ '130723': '河北省张家口市康保县',
+ '130724': '河北省张家口市沽源县',
+ '130725': '河北省张家口市尚义县',
+ '130726': '河北省张家口市蔚县',
+ '130727': '河北省张家口市阳原县',
+ '130728': '河北省张家口市怀安县',
+ '130729': '河北省张家口市万全县',
+ '130730': '河北省张家口市怀来县',
+ '130731': '河北省张家口市涿鹿县',
+ '130732': '河北省张家口市赤城县',
+ '130733': '河北省张家口市崇礼县',
+ '130800': '河北省承德市',
+ '130801': '河北省承德市市辖区',
+ '130802': '河北省承德市双桥区',
+ '130803': '河北省承德市双滦区',
+ '130804': '河北省承德市鹰手营子矿区',
+ '130821': '河北省承德市承德县',
+ '130822': '河北省承德市兴隆县',
+ '130823': '河北省承德市平泉县',
+ '130824': '河北省承德市滦平县',
+ '130825': '河北省承德市隆化县',
+ '130826': '河北省承德市丰宁满族自治县',
+ '130827': '河北省承德市宽城满族自治县',
+ '130828': '河北省承德市围场满族蒙古族自治县',
+ '130900': '河北省沧州市',
+ '130901': '河北省沧州市市辖区',
+ '130902': '河北省沧州市新华区',
+ '130903': '河北省沧州市运河区',
+ '130921': '河北省沧州市沧县',
+ '130922': '河北省沧州市青县',
+ '130923': '河北省沧州市东光县',
+ '130924': '河北省沧州市海兴县',
+ '130925': '河北省沧州市盐山县',
+ '130926': '河北省沧州市肃宁县',
+ '130927': '河北省沧州市南皮县',
+ '130928': '河北省沧州市吴桥县',
+ '130929': '河北省沧州市献县',
+ '130930': '河北省沧州市孟村回族自治县',
+ '130981': '河北省沧州市泊头市',
+ '130982': '河北省沧州市任丘市',
+ '130983': '河北省沧州市黄骅市',
+ '130984': '河北省沧州市河间市',
+ '131000': '河北省廊坊市',
+ '131001': '河北省廊坊市市辖区',
+ '131002': '河北省廊坊市安次区',
+ '131022': '河北省廊坊市固安县',
+ '131023': '河北省廊坊市永清县',
+ '131024': '河北省廊坊市香河县',
+ '131025': '河北省廊坊市大城县',
+ '131026': '河北省廊坊市文安县',
+ '131028': '河北省廊坊市大厂回族自治县',
+ '131081': '河北省廊坊市霸州市',
+ '131082': '河北省廊坊市三河市',
+ '131100': '河北省衡水市',
+ '131101': '河北省衡水市市辖区',
+ '131102': '河北省衡水市桃城区',
+ '131121': '河北省衡水市枣强县',
+ '131122': '河北省衡水市武邑县',
+ '131123': '河北省衡水市武强县',
+ '131124': '河北省衡水市饶阳县',
+ '131125': '河北省衡水市安平县',
+ '131126': '河北省衡水市故城县',
+ '131127': '河北省衡水市景县',
+ '131128': '河北省衡水市阜城县',
+ '131181': '河北省衡水市冀州市',
+ '131182': '河北省衡水市深州市',
+ '140000': '山西省',
+ '140100': '山西省太原市',
+ '140101': '山西省太原市市辖区',
+ '140105': '山西省太原市小店区',
+ '140106': '山西省太原市迎泽区',
+ '140107': '山西省太原市杏花岭区',
+ '140108': '山西省太原市尖草坪区',
+ '140109': '山西省太原市万柏林区',
+ '140110': '山西省太原市晋源区',
+ '140121': '山西省太原市清徐县',
+ '140122': '山西省太原市阳曲县',
+ '140123': '山西省太原市娄烦县',
+ '140181': '山西省太原市古交市',
+ '140200': '山西省大同市',
+ '140201': '山西省大同市市辖区',
+ '140202': '山西省大同市城区',
+ '140203': '山西省大同市矿区',
+ '140211': '山西省大同市南郊区',
+ '140212': '山西省大同市新荣区',
+ '140221': '山西省大同市阳高县',
+ '140222': '山西省大同市天镇县',
+ '140223': '山西省大同市广灵县',
+ '140224': '山西省大同市灵丘县',
+ '140225': '山西省大同市浑源县',
+ '140226': '山西省大同市左云县',
+ '140227': '山西省大同市大同县',
+ '140300': '山西省阳泉市',
+ '140301': '山西省阳泉市市辖区',
+ '140302': '山西省阳泉市城区',
+ '140303': '山西省阳泉市矿区',
+ '140311': '山西省阳泉市郊区',
+ '140321': '山西省阳泉市平定县',
+ '140322': '山西省阳泉市盂县',
+ '140400': '山西省长治市',
+ '140401': '山西省长治市市辖区',
+ '140402': '山西省长治市城区',
+ '140411': '山西省长治市郊区',
+ '140421': '山西省长治市长治县',
+ '140423': '山西省长治市襄垣县',
+ '140424': '山西省长治市屯留县',
+ '140425': '山西省长治市平顺县',
+ '140426': '山西省长治市黎城县',
+ '140427': '山西省长治市壶关县',
+ '140428': '山西省长治市长子县',
+ '140429': '山西省长治市武乡县',
+ '140430': '山西省长治市沁县',
+ '140431': '山西省长治市沁源县',
+ '140481': '山西省长治市潞城市',
+ '140500': '山西省晋城市',
+ '140501': '山西省晋城市市辖区',
+ '140502': '山西省晋城市城区',
+ '140521': '山西省晋城市沁水县',
+ '140522': '山西省晋城市阳城县',
+ '140524': '山西省晋城市陵川县',
+ '140525': '山西省晋城市泽州县',
+ '140581': '山西省晋城市高平市',
+ '140600': '山西省晋城市朔州市',
+ '140601': '山西省晋城市市辖区',
+ '140602': '山西省晋城市朔城区',
+ '140603': '山西省晋城市平鲁区',
+ '140621': '山西省晋城市山阴县',
+ '140622': '山西省晋城市应县',
+ '140623': '山西省晋城市右玉县',
+ '140624': '山西省晋城市怀仁县',
+ '142200': '山西省忻州地区',
+ '142201': '山西省忻州地区忻州市',
+ '142202': '山西省忻州地区原平市',
+ '142222': '山西省忻州地区定襄县',
+ '142223': '山西省忻州地区五台县',
+ '142225': '山西省忻州地区代县',
+ '142226': '山西省忻州地区繁峙县',
+ '142227': '山西省忻州地区宁武县',
+ '142228': '山西省忻州地区静乐县',
+ '142229': '山西省忻州地区神池县',
+ '142230': '山西省忻州地区五寨县',
+ '142231': '山西省忻州地区岢岚县',
+ '142232': '山西省忻州地区河曲县',
+ '142233': '山西省忻州地区保德县',
+ '142234': '山西省忻州地区偏关县',
+ '142300': '山西省忻州地区吕梁地区',
+ '142301': '山西省忻州地区孝义市',
+ '142302': '山西省忻州地区离石市',
+ '142303': '山西省忻州地区汾阳市',
+ '142322': '山西省忻州地区文水县',
+ '142323': '山西省忻州地区交城县',
+ '142325': '山西省忻州地区兴县',
+ '142326': '山西省忻州地区临县',
+ '142327': '山西省忻州地区柳林县',
+ '142328': '山西省忻州地区石楼县',
+ '142329': '山西省忻州地区岚县',
+ '142330': '山西省忻州地区方山县',
+ '142332': '山西省忻州地区中阳县',
+ '142333': '山西省忻州地区交口县',
+ '142400': '山西省晋中地区',
+ '142401': '山西省晋中地区榆次市',
+ '142402': '山西省晋中地区介休市',
+ '142421': '山西省晋中地区榆社县',
+ '142422': '山西省晋中地区左权县',
+ '142423': '山西省晋中地区和顺县',
+ '142424': '山西省晋中地区昔阳县',
+ '142427': '山西省晋中地区寿阳县',
+ '142429': '山西省晋中地区太谷县',
+ '142430': '山西省晋中地区祁县',
+ '142431': '山西省晋中地区平遥县',
+ '142433': '山西省晋中地区灵石县',
+ '142600': '山西省临汾地区',
+ '142601': '山西省临汾地区临汾市',
+ '142602': '山西省临汾地区侯马市',
+ '142603': '山西省临汾地区霍州市',
+ '142621': '山西省临汾地区曲沃县',
+ '142622': '山西省临汾地区翼城县',
+ '142623': '山西省临汾地区襄汾县',
+ '142625': '山西省临汾地区洪洞县',
+ '142627': '山西省临汾地区古县',
+ '142628': '山西省临汾地区安泽县',
+ '142629': '山西省临汾地区浮山县',
+ '142630': '山西省临汾地区吉县',
+ '142631': '山西省临汾地区乡宁县',
+ '142632': '山西省临汾地区蒲县',
+ '142633': '山西省临汾地区大宁县',
+ '142634': '山西省临汾地区永和县',
+ '142635': '山西省临汾地区隰县',
+ '142636': '山西省临汾地区汾西县',
+ '142700': '山西省运城地区',
+ '142701': '山西省运城地区运城市',
+ '142702': '山西省运城地区永济市',
+ '142703': '山西省运城地区河津市',
+ '142723': '山西省运城地区芮城县',
+ '142724': '山西省运城地区临猗县',
+ '142725': '山西省运城地区万荣县',
+ '142726': '山西省运城地区新绛县',
+ '142727': '山西省运城地区稷山县',
+ '142729': '山西省运城地区闻喜县',
+ '142730': '山西省运城地区夏县',
+ '142731': '山西省运城地区绛县',
+ '142732': '山西省运城地区平陆县',
+ '142733': '山西省运城地区垣曲县',
+ '150000': '内蒙古自治区',
+ '150100': '内蒙古自治区呼和浩特市',
+ '150101': '内蒙古自治区呼和浩特市市辖区',
+ '150102': '内蒙古自治区呼和浩特市新城区',
+ '150103': '内蒙古自治区呼和浩特市回民区',
+ '150104': '内蒙古自治区呼和浩特市玉泉区',
+ '150105': '内蒙古自治区呼和浩特市郊区',
+ '150121': '内蒙古自治区呼和浩特市土默特左旗',
+ '150122': '内蒙古自治区呼和浩特市托克托县',
+ '150123': '内蒙古自治区呼和浩特市和林格尔县',
+ '150124': '内蒙古自治区呼和浩特市清水河县',
+ '150125': '内蒙古自治区呼和浩特市武川县',
+ '150200': '内蒙古自治区包头市',
+ '150201': '内蒙古自治区包头市市辖区',
+ '150202': '内蒙古自治区包头市东河区',
+ '150203': '内蒙古自治区包头市昆都伦区',
+ '150204': '内蒙古自治区包头市青山区',
+ '150205': '内蒙古自治区包头市石拐矿区',
+ '150206': '内蒙古自治区包头市白云矿区',
+ '150207': '内蒙古自治区包头市郊区',
+ '150221': '内蒙古自治区包头市土默特右旗',
+ '150222': '内蒙古自治区包头市固阳县',
+ '150223': '内蒙古自治区包头市达尔罕茂明安联合旗',
+ '150300': '内蒙古自治区乌海市',
+ '150301': '内蒙古自治区乌海市市辖区',
+ '150302': '内蒙古自治区乌海市海勃湾区',
+ '150303': '内蒙古自治区乌海市海南区',
+ '150304': '内蒙古自治区乌海市乌达区',
+ '150400': '内蒙古自治区赤峰市',
+ '150401': '内蒙古自治区赤峰市市辖区',
+ '150402': '内蒙古自治区赤峰市红山区',
+ '150403': '内蒙古自治区赤峰市元宝山区',
+ '150404': '内蒙古自治区赤峰市松山区',
+ '150421': '内蒙古自治区赤峰市阿鲁科尔沁旗',
+ '150422': '内蒙古自治区赤峰市巴林左旗',
+ '150423': '内蒙古自治区赤峰市巴林右旗',
+ '150424': '内蒙古自治区赤峰市林西县',
+ '150425': '内蒙古自治区赤峰市克什克腾旗',
+ '150426': '内蒙古自治区赤峰市翁牛特旗',
+ '150428': '内蒙古自治区赤峰市喀喇沁旗',
+ '150429': '内蒙古自治区赤峰市宁城县',
+ '150430': '内蒙古自治区赤峰市敖汉旗',
+ '152100': '内蒙古自治区呼伦贝尔盟',
+ '152101': '内蒙古自治区呼伦贝尔盟海拉尔市',
+ '152102': '内蒙古自治区呼伦贝尔盟满洲里市',
+ '152103': '内蒙古自治区呼伦贝尔盟扎兰屯市',
+ '152104': '内蒙古自治区呼伦贝尔盟牙克石市',
+ '152105': '内蒙古自治区呼伦贝尔盟根河市',
+ '152106': '内蒙古自治区呼伦贝尔盟额尔古纳市',
+ '152122': '内蒙古自治区呼伦贝尔盟阿荣旗',
+ '152123': '内蒙古自治区呼伦贝尔盟莫力达瓦达斡尔族自治旗',
+ '152127': '内蒙古自治区呼伦贝尔盟鄂伦春自治旗',
+ '152128': '内蒙古自治区呼伦贝尔盟鄂温克族自治旗',
+ '152129': '内蒙古自治区呼伦贝尔盟新巴尔虎右旗',
+ '152130': '内蒙古自治区呼伦贝尔盟新巴尔虎左旗',
+ '152131': '内蒙古自治区呼伦贝尔盟陈巴尔虎旗',
+ '152200': '内蒙古自治区兴安盟',
+ '152201': '内蒙古自治区兴安盟乌兰浩特市',
+ '152202': '内蒙古自治区兴安盟阿尔山市',
+ '152221': '内蒙古自治区兴安盟科尔沁右翼前旗',
+ '152222': '内蒙古自治区兴安盟科尔沁右翼中旗',
+ '152223': '内蒙古自治区兴安盟扎赉特旗',
+ '152224': '内蒙古自治区兴安盟突泉县',
+ '152300': '内蒙古自治区哲里木盟',
+ '152301': '内蒙古自治区哲里木盟通辽市',
+ '152302': '内蒙古自治区哲里木盟霍林郭勒市',
+ '152322': '内蒙古自治区哲里木盟科尔沁左翼中旗',
+ '152323': '内蒙古自治区哲里木盟科尔沁左翼后旗',
+ '152324': '内蒙古自治区哲里木盟开鲁县',
+ '152325': '内蒙古自治区哲里木盟库伦旗',
+ '152326': '内蒙古自治区哲里木盟奈曼旗',
+ '152327': '内蒙古自治区哲里木盟扎鲁特旗',
+ '152500': '内蒙古自治区锡林郭勒盟',
+ '152501': '内蒙古自治区锡林郭勒盟二连浩特市',
+ '152502': '内蒙古自治区锡林郭勒盟锡林浩特市',
+ '152522': '内蒙古自治区锡林郭勒盟阿巴嘎旗',
+ '152523': '内蒙古自治区锡林郭勒盟苏尼特左旗',
+ '152524': '内蒙古自治区锡林郭勒盟苏尼特右旗',
+ '152525': '内蒙古自治区锡林郭勒盟东乌珠穆沁旗',
+ '152526': '内蒙古自治区锡林郭勒盟西乌珠穆沁旗',
+ '152527': '内蒙古自治区锡林郭勒盟太仆寺旗',
+ '152528': '内蒙古自治区锡林郭勒盟镶黄旗',
+ '152529': '内蒙古自治区锡林郭勒盟正镶白旗',
+ '152530': '内蒙古自治区锡林郭勒盟正蓝旗',
+ '152531': '内蒙古自治区锡林郭勒盟多伦县',
+ '152600': '内蒙古自治区乌兰察布盟',
+ '152601': '内蒙古自治区乌兰察布盟集宁市',
+ '152602': '内蒙古自治区乌兰察布盟丰镇市',
+ '152624': '内蒙古自治区乌兰察布盟卓资县',
+ '152625': '内蒙古自治区乌兰察布盟化德县',
+ '152626': '内蒙古自治区乌兰察布盟商都县',
+ '152627': '内蒙古自治区乌兰察布盟兴和县',
+ '152629': '内蒙古自治区乌兰察布盟凉城县',
+ '152630': '内蒙古自治区乌兰察布盟察哈尔右翼前旗',
+ '152631': '内蒙古自治区乌兰察布盟察哈尔右翼中旗',
+ '152632': '内蒙古自治区乌兰察布盟察哈尔右翼后旗',
+ '152634': '内蒙古自治区乌兰察布盟四子王旗',
+ '152700': '内蒙古自治区伊克昭盟',
+ '152701': '内蒙古自治区伊克昭盟东胜市',
+ '152722': '内蒙古自治区伊克昭盟达拉特旗',
+ '152723': '内蒙古自治区伊克昭盟准格尔旗',
+ '152724': '内蒙古自治区伊克昭盟鄂托克前旗',
+ '152725': '内蒙古自治区伊克昭盟鄂托克旗',
+ '152726': '内蒙古自治区伊克昭盟杭锦旗',
+ '152727': '内蒙古自治区伊克昭盟乌审旗',
+ '152728': '内蒙古自治区伊克昭盟伊金霍洛旗',
+ '152800': '内蒙古自治区巴彦淖尔盟',
+ '152801': '内蒙古自治区巴彦淖尔盟临河市',
+ '152822': '内蒙古自治区巴彦淖尔盟五原县',
+ '152823': '内蒙古自治区巴彦淖尔盟磴口县',
+ '152824': '内蒙古自治区巴彦淖尔盟乌拉特前旗',
+ '152825': '内蒙古自治区巴彦淖尔盟乌拉特中旗',
+ '152826': '内蒙古自治区巴彦淖尔盟乌拉特后旗',
+ '152827': '内蒙古自治区巴彦淖尔盟杭锦后旗',
+ '152900': '内蒙古自治区阿拉善盟',
+ '152921': '内蒙古自治区阿拉善盟阿拉善左旗',
+ '152922': '内蒙古自治区阿拉善盟阿拉善右旗',
+ '152923': '内蒙古自治区阿拉善盟额济纳旗',
+ '210000': '辽宁省',
+ '210100': '辽宁省沈阳市',
+ '210101': '辽宁省沈阳市市辖区',
+ '210102': '辽宁省沈阳市和平区',
+ '210103': '辽宁省沈阳市沈河区',
+ '210104': '辽宁省沈阳市大东区',
+ '210105': '辽宁省沈阳市皇姑区',
+ '210106': '辽宁省沈阳市铁西区',
+ '210111': '辽宁省沈阳市苏家屯区',
+ '210112': '辽宁省沈阳市东陵区',
+ '210113': '辽宁省沈阳市新城子区',
+ '210114': '辽宁省沈阳市于洪区',
+ '210122': '辽宁省沈阳市辽中县',
+ '210123': '辽宁省沈阳市康平县',
+ '210124': '辽宁省沈阳市法库县',
+ '210181': '辽宁省沈阳市新民市',
+ '210200': '辽宁省大连市',
+ '210201': '辽宁省大连市市辖区',
+ '210202': '辽宁省大连市中山区',
+ '210203': '辽宁省大连市西岗区',
+ '210204': '辽宁省大连市沙河口区',
+ '210211': '辽宁省大连市甘井子区',
+ '210212': '辽宁省大连市旅顺口区',
+ '210213': '辽宁省大连市金州区',
+ '210224': '辽宁省大连市长海县',
+ '210281': '辽宁省大连市瓦房店市',
+ '210282': '辽宁省大连市普兰店市',
+ '210283': '辽宁省大连市庄河市',
+ '210300': '辽宁省鞍山市',
+ '210301': '辽宁省鞍山市市辖区',
+ '210302': '辽宁省鞍山市铁东区',
+ '210303': '辽宁省鞍山市铁西区',
+ '210304': '辽宁省鞍山市立山区',
+ '210311': '辽宁省鞍山市千山区',
+ '210321': '辽宁省鞍山市台安县',
+ '210323': '辽宁省鞍山市岫岩满族自治县',
+ '210381': '辽宁省鞍山市海城市',
+ '210400': '辽宁省抚顺市',
+ '210401': '辽宁省抚顺市市辖区',
+ '210402': '辽宁省抚顺市新抚区',
+ '210403': '辽宁省抚顺市露天区',
+ '210404': '辽宁省抚顺市望花区',
+ '210411': '辽宁省抚顺市顺城区',
+ '210421': '辽宁省抚顺市抚顺县',
+ '210422': '辽宁省抚顺市新宾满族自治县',
+ '210423': '辽宁省抚顺市清原满族自治县',
+ '210500': '辽宁省本溪市',
+ '210501': '辽宁省本溪市市辖区',
+ '210502': '辽宁省本溪市平山区',
+ '210503': '辽宁省本溪市溪湖区',
+ '210504': '辽宁省本溪市明山区',
+ '210505': '辽宁省本溪市南芬区',
+ '210521': '辽宁省本溪市本溪满族自治县',
+ '210522': '辽宁省本溪市桓仁满族自治县',
+ '210600': '辽宁省丹东市',
+ '210601': '辽宁省丹东市市辖区',
+ '210602': '辽宁省丹东市元宝区',
+ '210603': '辽宁省丹东市振兴区',
+ '210604': '辽宁省丹东市振安区',
+ '210624': '辽宁省丹东市宽甸满族自治县',
+ '210681': '辽宁省丹东市东港市',
+ '210682': '辽宁省丹东市凤城市',
+ '210700': '辽宁省锦州市',
+ '210701': '辽宁省锦州市市辖区',
+ '210702': '辽宁省锦州市古塔区',
+ '210703': '辽宁省锦州市凌河区',
+ '210711': '辽宁省锦州市太和区',
+ '210726': '辽宁省锦州市黑山县',
+ '210727': '辽宁省锦州市义县',
+ '210781': '辽宁省锦州市凌海市',
+ '210782': '辽宁省锦州市北宁市',
+ '210800': '辽宁省营口市',
+ '210801': '辽宁省营口市市辖区',
+ '210802': '辽宁省营口市站前区',
+ '210803': '辽宁省营口市西市区',
+ '210804': '辽宁省营口市鲅鱼圈区',
+ '210811': '辽宁省营口市老边区',
+ '210881': '辽宁省营口市盖州市',
+ '210882': '辽宁省营口市大石桥市',
+ '210900': '辽宁省阜新市',
+ '210901': '辽宁省阜新市市辖区',
+ '210902': '辽宁省阜新市海州区',
+ '210903': '辽宁省阜新市新邱区',
+ '210904': '辽宁省阜新市太平区',
+ '210905': '辽宁省阜新市清河门区',
+ '210911': '辽宁省阜新市细河区',
+ '210921': '辽宁省阜新市阜新蒙古族自治县',
+ '210922': '辽宁省阜新市彰武县',
+ '211000': '辽宁省辽阳市',
+ '211001': '辽宁省辽阳市市辖区',
+ '211002': '辽宁省辽阳市白塔区',
+ '211003': '辽宁省辽阳市文圣区',
+ '211004': '辽宁省辽阳市宏伟区',
+ '211005': '辽宁省辽阳市弓长岭区',
+ '211011': '辽宁省辽阳市太子河区',
+ '211021': '辽宁省辽阳市辽阳县',
+ '211081': '辽宁省辽阳市灯塔市',
+ '211100': '辽宁省盘锦市',
+ '211101': '辽宁省盘锦市市辖区',
+ '211102': '辽宁省盘锦市双台子区',
+ '211103': '辽宁省盘锦市兴隆台区',
+ '211121': '辽宁省盘锦市大洼县',
+ '211122': '辽宁省盘锦市盘山县',
+ '211200': '辽宁省铁岭市',
+ '211201': '辽宁省铁岭市市辖区',
+ '211202': '辽宁省铁岭市银州区',
+ '211204': '辽宁省铁岭市清河区',
+ '211221': '辽宁省铁岭市铁岭县',
+ '211223': '辽宁省铁岭市西丰县',
+ '211224': '辽宁省铁岭市昌图县',
+ '211281': '辽宁省铁岭市铁法市',
+ '211282': '辽宁省铁岭市开原市',
+ '211300': '辽宁省朝阳市',
+ '211301': '辽宁省朝阳市市辖区',
+ '211302': '辽宁省朝阳市双塔区',
+ '211303': '辽宁省朝阳市龙城区',
+ '211321': '辽宁省朝阳市朝阳县',
+ '211322': '辽宁省朝阳市建平县',
+ '211324': '辽宁省朝阳市喀喇沁左翼蒙古族自治县',
+ '211381': '辽宁省朝阳市北票市',
+ '211382': '辽宁省朝阳市凌源市',
+ '211400': '辽宁省葫芦岛市',
+ '211401': '辽宁省葫芦岛市市辖区',
+ '211402': '辽宁省葫芦岛市连山区',
+ '211403': '辽宁省葫芦岛市龙港区',
+ '211404': '辽宁省葫芦岛市南票区',
+ '211421': '辽宁省葫芦岛市绥中县',
+ '211422': '辽宁省葫芦岛市建昌县',
+ '211481': '辽宁省葫芦岛市兴城市',
+ '220000': '吉林省',
+ '220100': '吉林省长春市',
+ '220101': '吉林省长春市市辖区',
+ '220102': '吉林省长春市南关区',
+ '220103': '吉林省长春市宽城区',
+ '220104': '吉林省长春市朝阳区',
+ '220105': '吉林省长春市二道区',
+ '220106': '吉林省长春市绿园区',
+ '220112': '吉林省长春市双阳区',
+ '220122': '吉林省长春市农安县',
+ '220181': '吉林省长春市九台市',
+ '220182': '吉林省长春市榆树市',
+ '220183': '吉林省长春市德惠市',
+ '220200': '吉林省吉林市',
+ '220201': '吉林省吉林市市辖区',
+ '220202': '吉林省吉林市昌邑区',
+ '220203': '吉林省吉林市龙潭区',
+ '220204': '吉林省吉林市船营区',
+ '220211': '吉林省吉林市丰满区',
+ '220221': '吉林省吉林市永吉县',
+ '220281': '吉林省吉林市蛟河市',
+ '220282': '吉林省吉林市桦甸市',
+ '220283': '吉林省吉林市舒兰市',
+ '220284': '吉林省吉林市磐石市',
+ '220300': '吉林省四平市',
+ '220301': '吉林省四平市市辖区',
+ '220302': '吉林省四平市铁西区',
+ '220303': '吉林省四平市铁东区',
+ '220322': '吉林省四平市梨树县',
+ '220323': '吉林省四平市伊通满族自治县',
+ '220381': '吉林省四平市公主岭市',
+ '220382': '吉林省四平市双辽市',
+ '220400': '吉林省辽源市',
+ '220401': '吉林省辽源市市辖区',
+ '220402': '吉林省辽源市龙山区',
+ '220403': '吉林省辽源市西安区',
+ '220421': '吉林省辽源市东丰县',
+ '220422': '吉林省辽源市东辽县',
+ '220500': '吉林省通化市',
+ '220501': '吉林省通化市市辖区',
+ '220502': '吉林省通化市东昌区',
+ '220503': '吉林省通化市二道江区',
+ '220521': '吉林省通化市通化县',
+ '220523': '吉林省通化市辉南县',
+ '220524': '吉林省通化市柳河县',
+ '220581': '吉林省通化市梅河口市',
+ '220582': '吉林省通化市集安市',
+ '220600': '吉林省白山市',
+ '220601': '吉林省白山市市辖区',
+ '220602': '吉林省白山市八道江区',
+ '220621': '吉林省白山市抚松县',
+ '220622': '吉林省白山市靖宇县',
+ '220623': '吉林省白山市长白朝鲜族自治县',
+ '220625': '吉林省白山市江源县',
+ '220681': '吉林省白山市临江市',
+ '220700': '吉林省松原市',
+ '220701': '吉林省松原市市辖区',
+ '220702': '吉林省松原市宁江区',
+ '220721': '吉林省松原市前郭尔罗斯蒙古族自治县',
+ '220722': '吉林省松原市长岭县',
+ '220723': '吉林省松原市乾安县',
+ '220724': '吉林省松原市扶余县',
+ '220800': '吉林省白城市',
+ '220801': '吉林省白城市市辖区',
+ '220802': '吉林省白城市洮北区',
+ '220821': '吉林省白城市镇赉县',
+ '220822': '吉林省白城市通榆县',
+ '220881': '吉林省白城市洮南市',
+ '220882': '吉林省白城市大安市',
+ '222400': '吉林省延边朝鲜族自治州',
+ '222401': '吉林省延边朝鲜族自治州延吉市',
+ '222402': '吉林省延边朝鲜族自治州图们市',
+ '222403': '吉林省延边朝鲜族自治州敦化市',
+ '222404': '吉林省延边朝鲜族自治州珲春市',
+ '222405': '吉林省延边朝鲜族自治州龙井市',
+ '222406': '吉林省延边朝鲜族自治州和龙市',
+ '222424': '吉林省延边朝鲜族自治州汪清县',
+ '222426': '吉林省延边朝鲜族自治州安图县',
+ '230000': '黑龙江省',
+ '230100': '黑龙江省哈尔滨市',
+ '230101': '黑龙江省哈尔滨市市辖区',
+ '230102': '黑龙江省哈尔滨市道里区',
+ '230103': '黑龙江省哈尔滨市南岗区',
+ '230104': '黑龙江省哈尔滨市道外区',
+ '230105': '黑龙江省哈尔滨市太平区',
+ '230106': '黑龙江省哈尔滨市香坊区',
+ '230107': '黑龙江省哈尔滨市动力区',
+ '230108': '黑龙江省哈尔滨市平房区',
+ '230121': '黑龙江省哈尔滨市呼兰县',
+ '230123': '黑龙江省哈尔滨市依兰县',
+ '230124': '黑龙江省哈尔滨市方正县',
+ '230125': '黑龙江省哈尔滨市宾县',
+ '230126': '黑龙江省哈尔滨市巴彦县',
+ '230127': '黑龙江省哈尔滨市木兰县',
+ '230128': '黑龙江省哈尔滨市通河县',
+ '230129': '黑龙江省哈尔滨市延寿县',
+ '230181': '黑龙江省哈尔滨市阿城市',
+ '230182': '黑龙江省哈尔滨市双城市',
+ '230183': '黑龙江省哈尔滨市尚志市',
+ '230184': '黑龙江省哈尔滨市五常市',
+ '230200': '黑龙江省齐齐哈尔市',
+ '230201': '黑龙江省齐齐哈尔市市辖区',
+ '230202': '黑龙江省齐齐哈尔市龙沙区',
+ '230203': '黑龙江省齐齐哈尔市建华区',
+ '230204': '黑龙江省齐齐哈尔市铁锋区',
+ '230205': '黑龙江省齐齐哈尔市昂昂溪区',
+ '230206': '黑龙江省齐齐哈尔市富拉尔基区',
+ '230207': '黑龙江省齐齐哈尔市碾子山区',
+ '230208': '黑龙江省齐齐哈尔市梅里斯达斡尔族区',
+ '230221': '黑龙江省齐齐哈尔市龙江县',
+ '230223': '黑龙江省齐齐哈尔市依安县',
+ '230224': '黑龙江省齐齐哈尔市泰来县',
+ '230225': '黑龙江省齐齐哈尔市甘南县',
+ '230227': '黑龙江省齐齐哈尔市富裕县',
+ '230229': '黑龙江省齐齐哈尔市克山县',
+ '230230': '黑龙江省齐齐哈尔市克东县',
+ '230231': '黑龙江省齐齐哈尔市拜泉县',
+ '230281': '黑龙江省齐齐哈尔市讷河市',
+ '230300': '黑龙江省鸡西市',
+ '230301': '黑龙江省鸡西市市辖区',
+ '230302': '黑龙江省鸡西市鸡冠区',
+ '230303': '黑龙江省鸡西市恒山区',
+ '230304': '黑龙江省鸡西市滴道区',
+ '230305': '黑龙江省鸡西市梨树区',
+ '230306': '黑龙江省鸡西市城子河区',
+ '230307': '黑龙江省鸡西市麻山区',
+ '230321': '黑龙江省鸡西市鸡东县',
+ '230381': '黑龙江省鸡西市虎林市',
+ '230382': '黑龙江省鸡西市密山市',
+ '230400': '黑龙江省鹤岗市',
+ '230401': '黑龙江省鹤岗市市辖区',
+ '230402': '黑龙江省鹤岗市向阳区',
+ '230403': '黑龙江省鹤岗市工农区',
+ '230404': '黑龙江省鹤岗市南山区',
+ '230405': '黑龙江省鹤岗市兴安区',
+ '230406': '黑龙江省鹤岗市东山区',
+ '230407': '黑龙江省鹤岗市兴山区',
+ '230421': '黑龙江省鹤岗市萝北县',
+ '230422': '黑龙江省鹤岗市绥滨县',
+ '230500': '黑龙江省双鸭山市',
+ '230501': '黑龙江省双鸭山市市辖区',
+ '230502': '黑龙江省双鸭山市尖山区',
+ '230503': '黑龙江省双鸭山市岭东区',
+ '230505': '黑龙江省双鸭山市四方台区',
+ '230506': '黑龙江省双鸭山市宝山区',
+ '230521': '黑龙江省双鸭山市集贤县',
+ '230522': '黑龙江省双鸭山市友谊县',
+ '230523': '黑龙江省双鸭山市宝清县',
+ '230524': '黑龙江省双鸭山市饶河县',
+ '230600': '黑龙江省大庆市',
+ '230601': '黑龙江省大庆市市辖区',
+ '230602': '黑龙江省大庆市萨尔图区',
+ '230603': '黑龙江省大庆市龙凤区',
+ '230604': '黑龙江省大庆市让胡路区',
+ '230605': '黑龙江省大庆市红岗区',
+ '230606': '黑龙江省大庆市大同区',
+ '230621': '黑龙江省大庆市肇州县',
+ '230622': '黑龙江省大庆市肇源县',
+ '230623': '黑龙江省大庆市林甸县',
+ '230624': '黑龙江省大庆市杜尔伯特蒙古族自治县',
+ '230700': '黑龙江省伊春市',
+ '230701': '黑龙江省伊春市市辖区',
+ '230702': '黑龙江省伊春市伊春区',
+ '230703': '黑龙江省伊春市南岔区',
+ '230704': '黑龙江省伊春市友好区',
+ '230705': '黑龙江省伊春市西林区',
+ '230706': '黑龙江省伊春市翠峦区',
+ '230707': '黑龙江省伊春市新青区',
+ '230708': '黑龙江省伊春市美溪区',
+ '230709': '黑龙江省伊春市金山屯区',
+ '230710': '黑龙江省伊春市五营区',
+ '230711': '黑龙江省伊春市乌马河区',
+ '230712': '黑龙江省伊春市汤旺河区',
+ '230713': '黑龙江省伊春市带岭区',
+ '230714': '黑龙江省伊春市乌伊岭区',
+ '230715': '黑龙江省伊春市红星区',
+ '230716': '黑龙江省伊春市上甘岭区',
+ '230722': '黑龙江省伊春市嘉荫县',
+ '230781': '黑龙江省伊春市铁力市',
+ '230800': '黑龙江省佳木斯市',
+ '230801': '黑龙江省佳木斯市市辖区',
+ '230802': '黑龙江省佳木斯市永红区',
+ '230803': '黑龙江省佳木斯市向阳区',
+ '230804': '黑龙江省佳木斯市前进区',
+ '230805': '黑龙江省佳木斯市东风区',
+ '230811': '黑龙江省佳木斯市郊区',
+ '230822': '黑龙江省佳木斯市桦南县',
+ '230826': '黑龙江省佳木斯市桦川县',
+ '230828': '黑龙江省佳木斯市汤原县',
+ '230833': '黑龙江省佳木斯市抚远县',
+ '230881': '黑龙江省佳木斯市同江市',
+ '230882': '黑龙江省佳木斯市富锦市',
+ '230900': '黑龙江省七台河市',
+ '230901': '黑龙江省七台河市市辖区',
+ '230902': '黑龙江省七台河市新兴区',
+ '230903': '黑龙江省七台河市桃山区',
+ '230904': '黑龙江省七台河市茄子河区',
+ '230921': '黑龙江省七台河市勃利县',
+ '231000': '黑龙江省牡丹江市',
+ '231001': '黑龙江省牡丹江市市辖区',
+ '231002': '黑龙江省牡丹江市东安区',
+ '231003': '黑龙江省牡丹江市阳明区',
+ '231004': '黑龙江省牡丹江市爱民区',
+ '231005': '黑龙江省牡丹江市西安区',
+ '231024': '黑龙江省牡丹江市东宁县',
+ '231025': '黑龙江省牡丹江市林口县',
+ '231081': '黑龙江省牡丹江市绥芬河市',
+ '231083': '黑龙江省牡丹江市海林市',
+ '231084': '黑龙江省牡丹江市宁安市',
+ '231085': '黑龙江省牡丹江市穆棱市',
+ '231100': '黑龙江省黑河市',
+ '231101': '黑龙江省黑河市市辖区',
+ '231102': '黑龙江省黑河市爱辉区',
+ '231121': '黑龙江省黑河市嫩江县',
+ '231123': '黑龙江省黑河市逊克县',
+ '231124': '黑龙江省黑河市孙吴县',
+ '231181': '黑龙江省黑河市北安市',
+ '231182': '黑龙江省黑河市五大连池市',
+ '232300': '黑龙江省绥化地区',
+ '232301': '黑龙江省绥化地区绥化市',
+ '232302': '黑龙江省绥化地区安达市',
+ '232303': '黑龙江省绥化地区肇东市',
+ '232304': '黑龙江省绥化地区海伦市',
+ '232324': '黑龙江省绥化地区望奎县',
+ '232325': '黑龙江省绥化地区兰西县',
+ '232326': '黑龙江省绥化地区青冈县',
+ '232330': '黑龙江省绥化地区庆安县',
+ '232331': '黑龙江省绥化地区明水县',
+ '232332': '黑龙江省绥化地区绥棱县',
+ '232700': '黑龙江省大兴安岭地区',
+ '232721': '黑龙江省大兴安岭地区呼玛县',
+ '232722': '黑龙江省大兴安岭地区塔河县',
+ '232723': '黑龙江省大兴安岭地区漠河县',
+ '310000': '上海市',
+ '310100': '上海市市辖区',
+ '310101': '上海市黄浦区',
+ '310102': '上海市南市区',
+ '310103': '上海市卢湾区',
+ '310104': '上海市徐汇区',
+ '310105': '上海市长宁区',
+ '310106': '上海市静安区',
+ '310107': '上海市普陀区',
+ '310108': '上海市闸北区',
+ '310109': '上海市虹口区',
+ '310110': '上海市杨浦区',
+ '310112': '上海市闵行区',
+ '310113': '上海市宝山区',
+ '310114': '上海市嘉定区',
+ '310115': '上海市浦东新区',
+ '310116': '上海市金山区',
+ '310117': '上海市松江区',
+ '310200': '上海市县',
+ '310225': '上海市南汇县',
+ '310226': '上海市奉贤县',
+ '310229': '上海市青浦县',
+ '310230': '上海市崇明县',
+ '320000': '江苏省',
+ '320100': '江苏省南京市',
+ '320101': '江苏省南京市市辖区',
+ '320102': '江苏省南京市玄武区',
+ '320103': '江苏省南京市白下区',
+ '320104': '江苏省南京市秦淮区',
+ '320105': '江苏省南京市建邺区',
+ '320106': '江苏省南京市鼓楼区',
+ '320107': '江苏省南京市下关区',
+ '320111': '江苏省南京市浦口区',
+ '320112': '江苏省南京市大厂区',
+ '320113': '江苏省南京市栖霞区',
+ '320114': '江苏省南京市雨花台区',
+ '320121': '江苏省南京市江宁县',
+ '320122': '江苏省南京市江浦县',
+ '320123': '江苏省南京市六合县',
+ '320124': '江苏省南京市溧水县',
+ '320125': '江苏省南京市高淳县',
+ '320200': '江苏省无锡市',
+ '320201': '江苏省无锡市市辖区',
+ '320202': '江苏省无锡市崇安区',
+ '320203': '江苏省无锡市南长区',
+ '320204': '江苏省无锡市北塘区',
+ '320211': '江苏省无锡市郊区',
+ '320281': '江苏省无锡市江阴市',
+ '320282': '江苏省无锡市宜兴市',
+ '320283': '江苏省无锡市锡山市',
+ '320300': '江苏省徐州市',
+ '320301': '江苏省徐州市市辖区',
+ '320302': '江苏省徐州市鼓楼区',
+ '320303': '江苏省徐州市云龙区',
+ '320304': '江苏省徐州市九里区',
+ '320305': '江苏省徐州市贾汪区',
+ '320311': '江苏省徐州市泉山区',
+ '320321': '江苏省徐州市丰县',
+ '320322': '江苏省徐州市沛县',
+ '320323': '江苏省徐州市铜山县',
+ '320324': '江苏省徐州市睢宁县',
+ '320381': '江苏省徐州市新沂市',
+ '320382': '江苏省徐州市邳州市',
+ '320400': '江苏省常州市',
+ '320401': '江苏省常州市市辖区',
+ '320402': '江苏省常州市天宁区',
+ '320404': '江苏省常州市钟楼区',
+ '320405': '江苏省常州市戚墅堰区',
+ '320411': '江苏省常州市郊区',
+ '320481': '江苏省常州市溧阳市',
+ '320482': '江苏省常州市金坛市',
+ '320483': '江苏省常州市武进市',
+ '320500': '江苏省苏州市',
+ '320501': '江苏省苏州市市辖区',
+ '320502': '江苏省苏州市沧浪区',
+ '320503': '江苏省苏州市平江区',
+ '320504': '江苏省苏州市金阊区',
+ '320511': '江苏省苏州市郊区',
+ '320581': '江苏省苏州市常熟市',
+ '320582': '江苏省苏州市张家港市',
+ '320583': '江苏省苏州市昆山市',
+ '320584': '江苏省苏州市吴江市',
+ '320585': '江苏省苏州市太仓市',
+ '320586': '江苏省苏州市吴县市',
+ '320600': '江苏省南通市',
+ '320601': '江苏省南通市市辖区',
+ '320602': '江苏省南通市崇川区',
+ '320611': '江苏省南通市港闸区',
+ '320621': '江苏省南通市海安县',
+ '320623': '江苏省南通市如东县',
+ '320681': '江苏省南通市启东市',
+ '320682': '江苏省南通市如皋市',
+ '320683': '江苏省南通市通州市',
+ '320684': '江苏省南通市海门市',
+ '320700': '江苏省连云港市',
+ '320701': '江苏省连云港市市辖区',
+ '320703': '江苏省连云港市连云区',
+ '320704': '江苏省连云港市云台区',
+ '320705': '江苏省连云港市新浦区',
+ '320706': '江苏省连云港市海州区',
+ '320721': '江苏省连云港市赣榆县',
+ '320722': '江苏省连云港市东海县',
+ '320723': '江苏省连云港市灌云县',
+ '320724': '江苏省连云港市灌南县',
+ '320800': '江苏省淮阴市',
+ '320801': '江苏省淮阴市市辖区',
+ '320802': '江苏省淮阴市清河区',
+ '320811': '江苏省淮阴市清浦区',
+ '320821': '江苏省淮阴市淮阴县',
+ '320826': '江苏省淮阴市涟水县',
+ '320829': '江苏省淮阴市洪泽县',
+ '320830': '江苏省淮阴市盱眙县',
+ '320831': '江苏省淮阴市金湖县',
+ '320882': '江苏省淮阴市淮安市',
+ '320900': '江苏省盐城市',
+ '320901': '江苏省盐城市市辖区',
+ '320902': '江苏省盐城市城区',
+ '320921': '江苏省盐城市响水县',
+ '320922': '江苏省盐城市滨海县',
+ '320923': '江苏省盐城市阜宁县',
+ '320924': '江苏省盐城市射阳县',
+ '320925': '江苏省盐城市建湖县',
+ '320928': '江苏省盐城市盐都县',
+ '320981': '江苏省盐城市东台市',
+ '320982': '江苏省盐城市大丰市',
+ '321000': '江苏省扬州市',
+ '321001': '江苏省扬州市市辖区',
+ '321002': '江苏省扬州市广陵区',
+ '321011': '江苏省扬州市郊区',
+ '321023': '江苏省扬州市宝应县',
+ '321027': '江苏省扬州市邗江县',
+ '321081': '江苏省扬州市仪征市',
+ '321084': '江苏省扬州市高邮市',
+ '321088': '江苏省扬州市江都市',
+ '321100': '江苏省镇江市',
+ '321101': '江苏省镇江市市辖区',
+ '321102': '江苏省镇江市京口区',
+ '321111': '江苏省镇江市润州区',
+ '321121': '江苏省镇江市丹徒县',
+ '321181': '江苏省镇江市丹阳市',
+ '321182': '江苏省镇江市扬中市',
+ '321183': '江苏省镇江市句容市',
+ '321200': '江苏省泰州市',
+ '321201': '江苏省泰州市市辖区',
+ '321202': '江苏省泰州市海陵区',
+ '321203': '江苏省泰州市高港区',
+ '321281': '江苏省泰州市兴化市',
+ '321282': '江苏省泰州市靖江市',
+ '321283': '江苏省泰州市泰兴市',
+ '321284': '江苏省泰州市姜堰市',
+ '321300': '江苏省宿迁市',
+ '321301': '江苏省宿迁市市辖区',
+ '321302': '江苏省宿迁市宿城区',
+ '321321': '江苏省宿迁市宿豫县',
+ '321322': '江苏省宿迁市沭阳县',
+ '321323': '江苏省宿迁市泗阳县',
+ '321324': '江苏省宿迁市泗洪县',
+ '330000': '浙江省',
+ '330100': '浙江省杭州市',
+ '330101': '浙江省杭州市市辖区',
+ '330102': '浙江省杭州市上城区',
+ '330103': '浙江省杭州市下城区',
+ '330104': '浙江省杭州市江干区',
+ '330105': '浙江省杭州市拱墅区',
+ '330106': '浙江省杭州市西湖区',
+ '330108': '浙江省杭州市滨江区',
+ '330122': '浙江省杭州市桐庐县',
+ '330127': '浙江省杭州市淳安县',
+ '330181': '浙江省杭州市萧山市',
+ '330182': '浙江省杭州市建德市',
+ '330183': '浙江省杭州市富阳市',
+ '330184': '浙江省杭州市余杭市',
+ '330185': '浙江省杭州市临安市',
+ '330200': '浙江省宁波市',
+ '330201': '浙江省宁波市市辖区',
+ '330203': '浙江省宁波市海曙区',
+ '330204': '浙江省宁波市江东区',
+ '330205': '浙江省宁波市江北区',
+ '330206': '浙江省宁波市北仑区',
+ '330211': '浙江省宁波市镇海区',
+ '330225': '浙江省宁波市象山县',
+ '330226': '浙江省宁波市宁海县',
+ '330227': '浙江省宁波市鄞县',
+ '330281': '浙江省宁波市余姚市',
+ '330282': '浙江省宁波市慈溪市',
+ '330283': '浙江省宁波市奉化市',
+ '330300': '浙江省温州市',
+ '330301': '浙江省温州市市辖区',
+ '330302': '浙江省温州市鹿城区',
+ '330303': '浙江省温州市龙湾区',
+ '330304': '浙江省温州市瓯海区',
+ '330322': '浙江省温州市洞头县',
+ '330324': '浙江省温州市永嘉县',
+ '330326': '浙江省温州市平阳县',
+ '330327': '浙江省温州市苍南县',
+ '330328': '浙江省温州市文成县',
+ '330329': '浙江省温州市泰顺县',
+ '330381': '浙江省温州市瑞安市',
+ '330382': '浙江省温州市乐清市',
+ '330400': '浙江省嘉兴市',
+ '330401': '浙江省嘉兴市市辖区',
+ '330402': '浙江省嘉兴市秀城区',
+ '330411': '浙江省嘉兴市郊区',
+ '330421': '浙江省嘉兴市嘉善县',
+ '330424': '浙江省嘉兴市海盐县',
+ '330481': '浙江省嘉兴市海宁市',
+ '330482': '浙江省嘉兴市平湖市',
+ '330483': '浙江省嘉兴市桐乡市',
+ '330500': '浙江省湖州市',
+ '330501': '浙江省湖州市市辖区',
+ '330521': '浙江省湖州市德清县',
+ '330522': '浙江省湖州市长兴县',
+ '330523': '浙江省湖州市安吉县',
+ '330600': '浙江省绍兴市',
+ '330601': '浙江省绍兴市市辖区',
+ '330602': '浙江省绍兴市越城区',
+ '330621': '浙江省绍兴市绍兴县',
+ '330624': '浙江省绍兴市新昌县',
+ '330681': '浙江省绍兴市诸暨市',
+ '330682': '浙江省绍兴市上虞市',
+ '330683': '浙江省绍兴市嵊州市',
+ '330700': '浙江省金华市',
+ '330701': '浙江省金华市市辖区',
+ '330702': '浙江省金华市婺城区',
+ '330721': '浙江省金华市金华县',
+ '330723': '浙江省金华市武义县',
+ '330726': '浙江省金华市浦江县',
+ '330727': '浙江省金华市磐安县',
+ '330781': '浙江省金华市兰溪市',
+ '330782': '浙江省金华市义乌市',
+ '330783': '浙江省金华市东阳市',
+ '330784': '浙江省金华市永康市',
+ '330800': '浙江省衢州市',
+ '330801': '浙江省衢州市市辖区',
+ '330802': '浙江省衢州市柯城区',
+ '330821': '浙江省衢州市衢县',
+ '330822': '浙江省衢州市常山县',
+ '330824': '浙江省衢州市开化县',
+ '330825': '浙江省衢州市龙游县',
+ '330881': '浙江省衢州市江山市',
+ '330900': '浙江省舟山市',
+ '330901': '浙江省舟山市市辖区',
+ '330902': '浙江省舟山市定海区',
+ '330903': '浙江省舟山市普陀区',
+ '330921': '浙江省舟山市岱山县',
+ '330922': '浙江省舟山市嵊泗县',
+ '331000': '浙江省台州市',
+ '331001': '浙江省台州市市辖区',
+ '331002': '浙江省台州市椒江区',
+ '331003': '浙江省台州市黄岩区',
+ '331004': '浙江省台州市路桥区',
+ '331021': '浙江省台州市玉环县',
+ '331022': '浙江省台州市三门县',
+ '331023': '浙江省台州市天台县',
+ '331024': '浙江省台州市仙居县',
+ '331081': '浙江省台州市温岭市',
+ '331082': '浙江省台州市临海市',
+ '332500': '浙江省丽水地区',
+ '332501': '浙江省丽水地区丽水市',
+ '332502': '浙江省丽水地区龙泉市',
+ '332522': '浙江省丽水地区青田县',
+ '332523': '浙江省丽水地区云和县',
+ '332525': '浙江省丽水地区庆元县',
+ '332526': '浙江省丽水地区缙云县',
+ '332527': '浙江省丽水地区遂昌县',
+ '332528': '浙江省丽水地区松阳县',
+ '332529': '浙江省丽水地区景宁畲族自治县',
+ '340000': '安徽省',
+ '340100': '安徽省合肥市',
+ '340101': '安徽省合肥市市辖区',
+ '340102': '安徽省合肥市东市区',
+ '340103': '安徽省合肥市中市区',
+ '340104': '安徽省合肥市西市区',
+ '340111': '安徽省合肥市郊区',
+ '340121': '安徽省合肥市长丰县',
+ '340122': '安徽省合肥市肥东县',
+ '340123': '安徽省合肥市肥西县',
+ '340200': '安徽省芜湖市',
+ '340201': '安徽省芜湖市市辖区',
+ '340202': '安徽省芜湖市镜湖区',
+ '340203': '安徽省芜湖市马塘区',
+ '340204': '安徽省芜湖市新芜区',
+ '340207': '安徽省芜湖市鸠江区',
+ '340221': '安徽省芜湖市芜湖县',
+ '340222': '安徽省芜湖市繁昌县',
+ '340223': '安徽省芜湖市南陵县',
+ '340300': '安徽省蚌埠市',
+ '340301': '安徽省蚌埠市市辖区',
+ '340302': '安徽省蚌埠市东市区',
+ '340303': '安徽省蚌埠市中市区',
+ '340304': '安徽省蚌埠市西市区',
+ '340311': '安徽省蚌埠市郊区',
+ '340321': '安徽省蚌埠市怀远县',
+ '340322': '安徽省蚌埠市五河县',
+ '340323': '安徽省蚌埠市固镇县',
+ '340400': '安徽省淮南市',
+ '340401': '安徽省淮南市市辖区',
+ '340402': '安徽省淮南市大通区',
+ '340403': '安徽省淮南市田家庵区',
+ '340404': '安徽省淮南市谢家集区',
+ '340405': '安徽省淮南市八公山区',
+ '340406': '安徽省淮南市潘集区',
+ '340421': '安徽省淮南市凤台县',
+ '340500': '安徽省马鞍山市',
+ '340501': '安徽省马鞍山市市辖区',
+ '340502': '安徽省马鞍山市金家庄区',
+ '340503': '安徽省马鞍山市花山区',
+ '340504': '安徽省马鞍山市雨山区',
+ '340505': '安徽省马鞍山市向山区',
+ '340521': '安徽省马鞍山市当涂县',
+ '340600': '安徽省淮北市',
+ '340601': '安徽省淮北市市辖区',
+ '340602': '安徽省淮北市杜集区',
+ '340603': '安徽省淮北市相山区',
+ '340604': '安徽省淮北市烈山区',
+ '340621': '安徽省淮北市濉溪县',
+ '340700': '安徽省铜陵市',
+ '340701': '安徽省铜陵市市辖区',
+ '340702': '安徽省铜陵市铜官山区',
+ '340703': '安徽省铜陵市狮子山区',
+ '340711': '安徽省铜陵市郊区',
+ '340721': '安徽省铜陵市铜陵县',
+ '340800': '安徽省安庆市',
+ '340801': '安徽省安庆市市辖区',
+ '340802': '安徽省安庆市迎江区',
+ '340803': '安徽省安庆市大观区',
+ '340811': '安徽省安庆市郊区',
+ '340822': '安徽省安庆市怀宁县',
+ '340823': '安徽省安庆市枞阳县',
+ '340824': '安徽省安庆市潜山县',
+ '340825': '安徽省安庆市太湖县',
+ '340826': '安徽省安庆市宿松县',
+ '340827': '安徽省安庆市望江县',
+ '340828': '安徽省安庆市岳西县',
+ '340881': '安徽省安庆市桐城市',
+ '341000': '安徽省黄山市',
+ '341001': '安徽省黄山市市辖区',
+ '341002': '安徽省黄山市屯溪区',
+ '341003': '安徽省黄山市黄山区',
+ '341004': '安徽省黄山市徽州区',
+ '341021': '安徽省黄山市歙县',
+ '341022': '安徽省黄山市休宁县',
+ '341023': '安徽省黄山市黟县',
+ '341024': '安徽省黄山市祁门县',
+ '341100': '安徽省滁州市',
+ '341101': '安徽省滁州市市辖区',
+ '341102': '安徽省滁州市琅琊区',
+ '341103': '安徽省滁州市南谯区',
+ '341122': '安徽省滁州市来安县',
+ '341124': '安徽省滁州市全椒县',
+ '341125': '安徽省滁州市定远县',
+ '341126': '安徽省滁州市凤阳县',
+ '341181': '安徽省滁州市天长市',
+ '341182': '安徽省滁州市明光市',
+ '341200': '安徽省阜阳市',
+ '341201': '安徽省阜阳市市辖区',
+ '341202': '安徽省阜阳市颍州区',
+ '341203': '安徽省阜阳市颍东区',
+ '341204': '安徽省阜阳市颍泉区',
+ '341221': '安徽省阜阳市临泉县',
+ '341222': '安徽省阜阳市太和县',
+ '341223': '安徽省阜阳市涡阳县',
+ '341224': '安徽省阜阳市蒙城县',
+ '341225': '安徽省阜阳市阜南县',
+ '341226': '安徽省阜阳市颍上县',
+ '341227': '安徽省阜阳市利辛县',
+ '341281': '安徽省阜阳市亳州市',
+ '341282': '安徽省阜阳市界首市',
+ '341300': '安徽省宿州市',
+ '341301': '安徽省宿州市市辖区',
+ '341302': '安徽省宿州市甬桥区',
+ '341321': '安徽省宿州市砀山县',
+ '341322': '安徽省宿州市萧县',
+ '341323': '安徽省宿州市灵璧县',
+ '341324': '安徽省宿州市泗县',
+ '342400': '安徽省六安地区',
+ '342401': '安徽省六安地区六安市',
+ '342422': '安徽省六安地区寿县',
+ '342423': '安徽省六安地区霍邱县',
+ '342425': '安徽省六安地区舒城县',
+ '342426': '安徽省六安地区金寨县',
+ '342427': '安徽省六安地区霍山县',
+ '342500': '安徽省宣城地区',
+ '342501': '安徽省宣城地区宣州市',
+ '342502': '安徽省宣城地区宁国市',
+ '342522': '安徽省宣城地区郎溪县',
+ '342523': '安徽省宣城地区广德县',
+ '342529': '安徽省宣城地区泾县',
+ '342530': '安徽省宣城地区旌德县',
+ '342531': '安徽省宣城地区绩溪县',
+ '342600': '安徽省巢湖地区',
+ '342601': '安徽省巢湖地区巢湖市',
+ '342622': '安徽省巢湖地区庐江县',
+ '342623': '安徽省巢湖地区无为县',
+ '342625': '安徽省巢湖地区含山县',
+ '342626': '安徽省巢湖地区和县',
+ '342900': '安徽省池州地区',
+ '342901': '安徽省池州地区贵池市',
+ '342921': '安徽省池州地区东至县',
+ '342922': '安徽省池州地区石台县',
+ '342923': '安徽省池州地区青阳县',
+ '350000': '福建省',
+ '350100': '福建省福州市',
+ '350101': '福建省福州市市辖区',
+ '350102': '福建省福州市鼓楼区',
+ '350103': '福建省福州市台江区',
+ '350104': '福建省福州市仓山区',
+ '350105': '福建省福州市马尾区',
+ '350111': '福建省福州市晋安区',
+ '350121': '福建省福州市闽侯县',
+ '350122': '福建省福州市连江县',
+ '350123': '福建省福州市罗源县',
+ '350124': '福建省福州市闽清县',
+ '350125': '福建省福州市永泰县',
+ '350128': '福建省福州市平潭县',
+ '350181': '福建省福州市福清市',
+ '350182': '福建省福州市长乐市',
+ '350200': '福建省厦门市',
+ '350201': '福建省厦门市市辖区',
+ '350202': '福建省厦门市鼓浪屿区',
+ '350203': '福建省厦门市思明区',
+ '350204': '福建省厦门市开元区',
+ '350205': '福建省厦门市杏林区',
+ '350206': '福建省厦门市湖里区',
+ '350211': '福建省厦门市集美区',
+ '350212': '福建省厦门市同安区',
+ '350300': '福建省莆田市',
+ '350301': '福建省莆田市市辖区',
+ '350302': '福建省莆田市城厢区',
+ '350303': '福建省莆田市涵江区',
+ '350321': '福建省莆田市莆田县',
+ '350322': '福建省莆田市仙游县',
+ '350400': '福建省三明市',
+ '350401': '福建省三明市市辖区',
+ '350402': '福建省三明市梅列区',
+ '350403': '福建省三明市三元区',
+ '350421': '福建省三明市明溪县',
+ '350423': '福建省三明市清流县',
+ '350424': '福建省三明市宁化县',
+ '350425': '福建省三明市大田县',
+ '350426': '福建省三明市尤溪县',
+ '350427': '福建省三明市沙县',
+ '350428': '福建省三明市将乐县',
+ '350429': '福建省三明市泰宁县',
+ '350430': '福建省三明市建宁县',
+ '350481': '福建省三明市永安市',
+ '350500': '福建省泉州市',
+ '350501': '福建省泉州市市辖区',
+ '350502': '福建省泉州市鲤城区',
+ '350503': '福建省泉州市丰泽区',
+ '350504': '福建省泉州市洛江区',
+ '350521': '福建省泉州市惠安县',
+ '350524': '福建省泉州市安溪县',
+ '350525': '福建省泉州市永春县',
+ '350526': '福建省泉州市德化县',
+ '350527': '福建省泉州市金门县',
+ '350581': '福建省泉州市石狮市',
+ '350582': '福建省泉州市晋江市',
+ '350583': '福建省泉州市南安市',
+ '350600': '福建省漳州市',
+ '350601': '福建省漳州市市辖区',
+ '350602': '福建省漳州市芗城区',
+ '350603': '福建省漳州市龙文区',
+ '350622': '福建省漳州市云霄县',
+ '350623': '福建省漳州市漳浦县',
+ '350624': '福建省漳州市诏安县',
+ '350625': '福建省漳州市长泰县',
+ '350626': '福建省漳州市东山县',
+ '350627': '福建省漳州市南靖县',
+ '350628': '福建省漳州市平和县',
+ '350629': '福建省漳州市华安县',
+ '350681': '福建省漳州市龙海市',
+ '350700': '福建省南平市',
+ '350701': '福建省南平市市辖区',
+ '350702': '福建省南平市延平区',
+ '350721': '福建省南平市顺昌县',
+ '350722': '福建省南平市浦城县',
+ '350723': '福建省南平市光泽县',
+ '350724': '福建省南平市松溪县',
+ '350725': '福建省南平市政和县',
+ '350781': '福建省南平市邵武市',
+ '350782': '福建省南平市武夷山市',
+ '350783': '福建省南平市建瓯市',
+ '350784': '福建省南平市建阳市',
+ '350800': '福建省龙岩市',
+ '350801': '福建省龙岩市市辖区',
+ '350802': '福建省龙岩市新罗区',
+ '350821': '福建省龙岩市长汀县',
+ '350822': '福建省龙岩市永定县',
+ '350823': '福建省龙岩市上杭县',
+ '350824': '福建省龙岩市武平县',
+ '350825': '福建省龙岩市连城县',
+ '350881': '福建省龙岩市漳平市',
+ '352200': '福建省宁德地区',
+ '352201': '福建省宁德地区宁德市',
+ '352202': '福建省宁德地区福安市',
+ '352203': '福建省宁德地区福鼎市',
+ '352225': '福建省宁德地区霞浦县',
+ '352227': '福建省宁德地区古田县',
+ '352228': '福建省宁德地区屏南县',
+ '352229': '福建省宁德地区寿宁县',
+ '352230': '福建省宁德地区周宁县',
+ '352231': '福建省宁德地区柘荣县',
+ '360000': '江西省',
+ '360100': '江西省南昌市',
+ '360101': '江西省南昌市市辖区',
+ '360102': '江西省南昌市东湖区',
+ '360103': '江西省南昌市西湖区',
+ '360104': '江西省南昌市青云谱区',
+ '360105': '江西省南昌市湾里区',
+ '360111': '江西省南昌市郊区',
+ '360121': '江西省南昌市南昌县',
+ '360122': '江西省南昌市新建县',
+ '360123': '江西省南昌市安义县',
+ '360124': '江西省南昌市进贤县',
+ '360200': '江西省景德镇市',
+ '360201': '江西省景德镇市市辖区',
+ '360202': '江西省景德镇市昌江区',
+ '360203': '江西省景德镇市珠山区',
+ '360222': '江西省景德镇市浮梁县',
+ '360281': '江西省景德镇市乐平市',
+ '360300': '江西省萍乡市',
+ '360301': '江西省萍乡市市辖区',
+ '360302': '江西省萍乡市安源区',
+ '360313': '江西省萍乡市湘东区',
+ '360321': '江西省萍乡市莲花县',
+ '360322': '江西省萍乡市上栗县',
+ '360323': '江西省萍乡市芦溪县',
+ '360400': '江西省九江市',
+ '360401': '江西省九江市市辖区',
+ '360402': '江西省九江市庐山区',
+ '360403': '江西省九江市浔阳区',
+ '360421': '江西省九江市九江县',
+ '360423': '江西省九江市武宁县',
+ '360424': '江西省九江市修水县',
+ '360425': '江西省九江市永修县',
+ '360426': '江西省九江市德安县',
+ '360427': '江西省九江市星子县',
+ '360428': '江西省九江市都昌县',
+ '360429': '江西省九江市湖口县',
+ '360430': '江西省九江市彭泽县',
+ '360481': '江西省九江市瑞昌市',
+ '360500': '江西省新余市',
+ '360501': '江西省新余市市辖区',
+ '360502': '江西省新余市渝水区',
+ '360521': '江西省新余市分宜县',
+ '360600': '江西省鹰潭市',
+ '360601': '江西省鹰潭市市辖区',
+ '360602': '江西省鹰潭市月湖区',
+ '360622': '江西省鹰潭市余江县',
+ '360681': '江西省鹰潭市贵溪市',
+ '360700': '江西省赣州市',
+ '360701': '江西省赣州市市辖区',
+ '360702': '江西省赣州市章贡区',
+ '360721': '江西省赣州市赣县',
+ '360722': '江西省赣州市信丰县',
+ '360723': '江西省赣州市大余县',
+ '360724': '江西省赣州市上犹县',
+ '360725': '江西省赣州市崇义县',
+ '360726': '江西省赣州市安远县',
+ '360727': '江西省赣州市龙南县',
+ '360728': '江西省赣州市定南县',
+ '360729': '江西省赣州市全南县',
+ '360730': '江西省赣州市宁都县',
+ '360731': '江西省赣州市于都县',
+ '360732': '江西省赣州市兴国县',
+ '360733': '江西省赣州市会昌县',
+ '360734': '江西省赣州市寻乌县',
+ '360735': '江西省赣州市石城县',
+ '360781': '江西省赣州市瑞金市',
+ '360782': '江西省赣州市南康市',
+ '362200': '江西省宜春地区',
+ '362201': '江西省宜春地区宜春市',
+ '362202': '江西省宜春地区丰城市',
+ '362203': '江西省宜春地区樟树市',
+ '362204': '江西省宜春地区高安市',
+ '362226': '江西省宜春地区奉新县',
+ '362227': '江西省宜春地区万载县',
+ '362228': '江西省宜春地区上高县',
+ '362229': '江西省宜春地区宜丰县',
+ '362232': '江西省宜春地区靖安县',
+ '362233': '江西省宜春地区铜鼓县',
+ '362300': '江西省上饶地区',
+ '362301': '江西省上饶地区上饶市',
+ '362302': '江西省上饶地区德兴市',
+ '362321': '江西省上饶地区上饶县',
+ '362322': '江西省上饶地区广丰县',
+ '362323': '江西省上饶地区玉山县',
+ '362324': '江西省上饶地区铅山县',
+ '362325': '江西省上饶地区横峰县',
+ '362326': '江西省上饶地区弋阳县',
+ '362329': '江西省上饶地区余干县',
+ '362330': '江西省上饶地区波阳县',
+ '362331': '江西省上饶地区万年县',
+ '362334': '江西省上饶地区婺源县',
+ '362400': '江西省吉安地区',
+ '362401': '江西省吉安地区吉安市',
+ '362402': '江西省吉安地区井冈山市',
+ '362421': '江西省吉安地区吉安县',
+ '362422': '江西省吉安地区吉水县',
+ '362423': '江西省吉安地区峡江县',
+ '362424': '江西省吉安地区新干县',
+ '362425': '江西省吉安地区永丰县',
+ '362426': '江西省吉安地区泰和县',
+ '362427': '江西省吉安地区遂川县',
+ '362428': '江西省吉安地区万安县',
+ '362429': '江西省吉安地区安福县',
+ '362430': '江西省吉安地区永新县',
+ '362432': '江西省吉安地区宁冈县',
+ '362500': '江西省抚州地区',
+ '362502': '江西省抚州地区临川市',
+ '362522': '江西省抚州地区南城县',
+ '362523': '江西省抚州地区黎川县',
+ '362524': '江西省抚州地区南丰县',
+ '362525': '江西省抚州地区崇仁县',
+ '362526': '江西省抚州地区乐安县',
+ '362527': '江西省抚州地区宜黄县',
+ '362528': '江西省抚州地区金溪县',
+ '362529': '江西省抚州地区资溪县',
+ '362531': '江西省抚州地区东乡县',
+ '362532': '江西省抚州地区广昌县',
+ '370000': '山东省',
+ '370100': '山东省济南市',
+ '370101': '山东省济南市市辖区',
+ '370102': '山东省济南市历下区',
+ '370103': '山东省济南市市中区',
+ '370104': '山东省济南市槐荫区',
+ '370105': '山东省济南市天桥区',
+ '370112': '山东省济南市历城区',
+ '370123': '山东省济南市长清县',
+ '370124': '山东省济南市平阴县',
+ '370125': '山东省济南市济阳县',
+ '370126': '山东省济南市商河县',
+ '370181': '山东省济南市章丘市',
+ '370200': '山东省青岛市',
+ '370201': '山东省青岛市市辖区',
+ '370202': '山东省青岛市市南区',
+ '370203': '山东省青岛市市北区',
+ '370205': '山东省青岛市四方区',
+ '370211': '山东省青岛市黄岛区',
+ '370212': '山东省青岛市崂山区',
+ '370213': '山东省青岛市李沧区',
+ '370214': '山东省青岛市城阳区',
+ '370281': '山东省青岛市胶州市',
+ '370282': '山东省青岛市即墨市',
+ '370283': '山东省青岛市平度市',
+ '370284': '山东省青岛市胶南市',
+ '370285': '山东省青岛市莱西市',
+ '370300': '山东省淄博市',
+ '370301': '山东省淄博市市辖区',
+ '370302': '山东省淄博市淄川区',
+ '370303': '山东省淄博市张店区',
+ '370304': '山东省淄博市博山区',
+ '370305': '山东省淄博市临淄区',
+ '370306': '山东省淄博市周村区',
+ '370321': '山东省淄博市桓台县',
+ '370322': '山东省淄博市高青县',
+ '370323': '山东省淄博市沂源县',
+ '370400': '山东省枣庄市',
+ '370401': '山东省枣庄市市辖区',
+ '370402': '山东省枣庄市市中区',
+ '370403': '山东省枣庄市薛城区',
+ '370404': '山东省枣庄市峄城区',
+ '370405': '山东省枣庄市台儿庄区',
+ '370406': '山东省枣庄市山亭区',
+ '370481': '山东省枣庄市滕州市',
+ '370500': '山东省东营市',
+ '370501': '山东省东营市市辖区',
+ '370502': '山东省东营市东营区',
+ '370503': '山东省东营市河口区',
+ '370521': '山东省东营市垦利县',
+ '370522': '山东省东营市利津县',
+ '370523': '山东省东营市广饶县',
+ '370600': '山东省烟台市',
+ '370601': '山东省烟台市市辖区',
+ '370602': '山东省烟台市芝罘区',
+ '370611': '山东省烟台市福山区',
+ '370612': '山东省烟台市牟平区',
+ '370613': '山东省烟台市莱山区',
+ '370634': '山东省烟台市长岛县',
+ '370681': '山东省烟台市龙口市',
+ '370682': '山东省烟台市莱阳市',
+ '370683': '山东省烟台市莱州市',
+ '370684': '山东省烟台市蓬莱市',
+ '370685': '山东省烟台市招远市',
+ '370686': '山东省烟台市栖霞市',
+ '370687': '山东省烟台市海阳市',
+ '370700': '山东省潍坊市',
+ '370701': '山东省潍坊市市辖区',
+ '370702': '山东省潍坊市潍城区',
+ '370703': '山东省潍坊市寒亭区',
+ '370704': '山东省潍坊市坊子区',
+ '370705': '山东省潍坊市奎文区',
+ '370724': '山东省潍坊市临朐县',
+ '370725': '山东省潍坊市昌乐县',
+ '370781': '山东省潍坊市青州市',
+ '370782': '山东省潍坊市诸城市',
+ '370783': '山东省潍坊市寿光市',
+ '370784': '山东省潍坊市安丘市',
+ '370785': '山东省潍坊市高密市',
+ '370786': '山东省潍坊市昌邑市',
+ '370800': '山东省济宁市',
+ '370801': '山东省济宁市市辖区',
+ '370802': '山东省济宁市市中区',
+ '370811': '山东省济宁市任城区',
+ '370826': '山东省济宁市微山县',
+ '370827': '山东省济宁市鱼台县',
+ '370828': '山东省济宁市金乡县',
+ '370829': '山东省济宁市嘉祥县',
+ '370830': '山东省济宁市汶上县',
+ '370831': '山东省济宁市泗水县',
+ '370832': '山东省济宁市梁山县',
+ '370881': '山东省济宁市曲阜市',
+ '370882': '山东省济宁市兖州市',
+ '370883': '山东省济宁市邹城市',
+ '370900': '山东省泰安市',
+ '370901': '山东省泰安市市辖区',
+ '370902': '山东省泰安市泰山区',
+ '370911': '山东省泰安市郊区',
+ '370921': '山东省泰安市宁阳县',
+ '370923': '山东省泰安市东平县',
+ '370982': '山东省泰安市新泰市',
+ '370983': '山东省泰安市肥城市',
+ '371000': '山东省威海市',
+ '371001': '山东省威海市市辖区',
+ '371002': '山东省威海市环翠区',
+ '371081': '山东省威海市文登市',
+ '371082': '山东省威海市荣成市',
+ '371083': '山东省威海市乳山市',
+ '371100': '山东省日照市',
+ '371101': '山东省日照市市辖区',
+ '371102': '山东省日照市东港区',
+ '371121': '山东省日照市五莲县',
+ '371122': '山东省日照市莒县',
+ '371200': '山东省莱芜市',
+ '371201': '山东省莱芜市市辖区',
+ '371202': '山东省莱芜市莱城区',
+ '371203': '山东省莱芜市钢城区',
+ '371300': '山东省临沂市',
+ '371301': '山东省临沂市市辖区',
+ '371302': '山东省临沂市兰山区',
+ '371311': '山东省临沂市罗庄区',
+ '371312': '山东省临沂市河东区',
+ '371321': '山东省临沂市沂南县',
+ '371322': '山东省临沂市郯城县',
+ '371323': '山东省临沂市沂水县',
+ '371324': '山东省临沂市苍山县',
+ '371325': '山东省临沂市费县',
+ '371326': '山东省临沂市平邑县',
+ '371327': '山东省临沂市莒南县',
+ '371328': '山东省临沂市蒙阴县',
+ '371329': '山东省临沂市临沭县',
+ '371400': '山东省德州市',
+ '371401': '山东省德州市市辖区',
+ '371402': '山东省德州市德城区',
+ '371421': '山东省德州市陵县',
+ '371422': '山东省德州市宁津县',
+ '371423': '山东省德州市庆云县',
+ '371424': '山东省德州市临邑县',
+ '371425': '山东省德州市齐河县',
+ '371426': '山东省德州市平原县',
+ '371427': '山东省德州市夏津县',
+ '371428': '山东省德州市武城县',
+ '371481': '山东省德州市乐陵市',
+ '371482': '山东省德州市禹城市',
+ '371500': '山东省聊城市',
+ '371501': '山东省聊城市市辖区',
+ '371502': '山东省聊城市东昌府区',
+ '371521': '山东省聊城市阳谷县',
+ '371522': '山东省聊城市莘县',
+ '371523': '山东省聊城市茌平县',
+ '371524': '山东省聊城市东阿县',
+ '371525': '山东省聊城市冠县',
+ '371526': '山东省聊城市高唐县',
+ '371581': '山东省聊城市临清市',
+ '372300': '山东省滨州地区',
+ '372301': '山东省滨州地区滨州市',
+ '372321': '山东省滨州地区惠民县',
+ '372323': '山东省滨州地区阳信县',
+ '372324': '山东省滨州地区无棣县',
+ '372325': '山东省滨州地区沾化县',
+ '372328': '山东省滨州地区博兴县',
+ '372330': '山东省滨州地区邹平县',
+ '372900': '山东省菏泽地区',
+ '372901': '山东省菏泽地区菏泽市',
+ '372922': '山东省菏泽地区曹县',
+ '372923': '山东省菏泽地区定陶县',
+ '372924': '山东省菏泽地区成武县',
+ '372925': '山东省菏泽地区单县',
+ '372926': '山东省菏泽地区巨野县',
+ '372928': '山东省菏泽地区郓城县',
+ '372929': '山东省菏泽地区鄄城县',
+ '372930': '山东省菏泽地区东明县',
+ '410000': '河南省',
+ '410100': '河南省郑州市',
+ '410101': '河南省郑州市市辖区',
+ '410102': '河南省郑州市中原区',
+ '410103': '河南省郑州市二七区',
+ '410104': '河南省郑州市管城回族区',
+ '410105': '河南省郑州市金水区',
+ '410106': '河南省郑州市上街区',
+ '410108': '河南省郑州市邙山区',
+ '410122': '河南省郑州市中牟县',
+ '410181': '河南省郑州市巩义市',
+ '410182': '河南省郑州市荥阳市',
+ '410183': '河南省郑州市新密市',
+ '410184': '河南省郑州市新郑市',
+ '410185': '河南省郑州市登封市',
+ '410200': '河南省开封市',
+ '410201': '河南省开封市市辖区',
+ '410202': '河南省开封市龙亭区',
+ '410203': '河南省开封市顺河回族区',
+ '410204': '河南省开封市鼓楼区',
+ '410205': '河南省开封市南关区',
+ '410211': '河南省开封市郊区',
+ '410221': '河南省开封市杞县',
+ '410222': '河南省开封市通许县',
+ '410223': '河南省开封市尉氏县',
+ '410224': '河南省开封市开封县',
+ '410225': '河南省开封市兰考县',
+ '410300': '河南省洛阳市',
+ '410301': '河南省洛阳市市辖区',
+ '410302': '河南省洛阳市老城区',
+ '410303': '河南省洛阳市西工区',
+ '410304': '河南省洛阳市廛河回族区',
+ '410305': '河南省洛阳市涧西区',
+ '410306': '河南省洛阳市吉利区',
+ '410311': '河南省洛阳市郊区',
+ '410322': '河南省洛阳市孟津县',
+ '410323': '河南省洛阳市新安县',
+ '410324': '河南省洛阳市栾川县',
+ '410325': '河南省洛阳市嵩县',
+ '410326': '河南省洛阳市汝阳县',
+ '410327': '河南省洛阳市宜阳县',
+ '410328': '河南省洛阳市洛宁县',
+ '410329': '河南省洛阳市伊川县',
+ '410381': '河南省洛阳市偃师市',
+ '410400': '河南省平顶山市',
+ '410401': '河南省平顶山市市辖区',
+ '410402': '河南省平顶山市新华区',
+ '410403': '河南省平顶山市卫东区',
+ '410404': '河南省平顶山市石龙区',
+ '410411': '河南省平顶山市湛河区',
+ '410421': '河南省平顶山市宝丰县',
+ '410422': '河南省平顶山市叶县',
+ '410423': '河南省平顶山市鲁山县',
+ '410425': '河南省平顶山市郏县',
+ '410481': '河南省平顶山市舞钢市',
+ '410482': '河南省平顶山市汝州市',
+ '410500': '河南省安阳市',
+ '410501': '河南省安阳市市辖区',
+ '410502': '河南省安阳市文峰区',
+ '410503': '河南省安阳市北关区',
+ '410504': '河南省安阳市铁西区',
+ '410511': '河南省安阳市郊区',
+ '410522': '河南省安阳市安阳县',
+ '410523': '河南省安阳市汤阴县',
+ '410526': '河南省安阳市滑县',
+ '410527': '河南省安阳市内黄县',
+ '410581': '河南省安阳市林州市',
+ '410600': '河南省鹤壁市',
+ '410601': '河南省鹤壁市市辖区',
+ '410602': '河南省鹤壁市鹤山区',
+ '410603': '河南省鹤壁市山城区',
+ '410611': '河南省鹤壁市郊区',
+ '410621': '河南省鹤壁市浚县',
+ '410622': '河南省鹤壁市淇县',
+ '410700': '河南省新乡市',
+ '410701': '河南省新乡市市辖区',
+ '410702': '河南省新乡市红旗区',
+ '410703': '河南省新乡市新华区',
+ '410704': '河南省新乡市北站区',
+ '410711': '河南省新乡市郊区',
+ '410721': '河南省新乡市新乡县',
+ '410724': '河南省新乡市获嘉县',
+ '410725': '河南省新乡市原阳县',
+ '410726': '河南省新乡市延津县',
+ '410727': '河南省新乡市封丘县',
+ '410728': '河南省新乡市长垣县',
+ '410781': '河南省新乡市卫辉市',
+ '410782': '河南省新乡市辉县市',
+ '410800': '河南省焦作市',
+ '410801': '河南省焦作市市辖区',
+ '410802': '河南省焦作市解放区',
+ '410803': '河南省焦作市中站区',
+ '410804': '河南省焦作市马村区',
+ '410811': '河南省焦作市山阳区',
+ '410821': '河南省焦作市修武县',
+ '410822': '河南省焦作市博爱县',
+ '410823': '河南省焦作市武陟县',
+ '410825': '河南省焦作市温县',
+ '410881': '河南省焦作市济源市',
+ '410882': '河南省焦作市沁阳市',
+ '410883': '河南省焦作市孟州市',
+ '410900': '河南省濮阳市',
+ '410901': '河南省濮阳市市辖区',
+ '410902': '河南省濮阳市市区',
+ '410922': '河南省濮阳市清丰县',
+ '410923': '河南省濮阳市南乐县',
+ '410926': '河南省濮阳市范县',
+ '410927': '河南省濮阳市台前县',
+ '410928': '河南省濮阳市濮阳县',
+ '411000': '河南省许昌市',
+ '411001': '河南省许昌市市辖区',
+ '411002': '河南省许昌市魏都区',
+ '411023': '河南省许昌市许昌县',
+ '411024': '河南省许昌市鄢陵县',
+ '411025': '河南省许昌市襄城县',
+ '411081': '河南省许昌市禹州市',
+ '411082': '河南省许昌市长葛市',
+ '411100': '河南省漯河市',
+ '411101': '河南省漯河市市辖区',
+ '411102': '河南省漯河市源汇区',
+ '411121': '河南省漯河市舞阳县',
+ '411122': '河南省漯河市临颍县',
+ '411123': '河南省漯河市郾城县',
+ '411200': '河南省三门峡市',
+ '411201': '河南省三门峡市市辖区',
+ '411202': '河南省三门峡市湖滨区',
+ '411221': '河南省三门峡市渑池县',
+ '411222': '河南省三门峡市陕县',
+ '411224': '河南省三门峡市卢氏县',
+ '411281': '河南省三门峡市义马市',
+ '411282': '河南省三门峡市灵宝市',
+ '411300': '河南省南阳市',
+ '411301': '河南省南阳市市辖区',
+ '411302': '河南省南阳市宛城区',
+ '411303': '河南省南阳市卧龙区',
+ '411321': '河南省南阳市南召县',
+ '411322': '河南省南阳市方城县',
+ '411323': '河南省南阳市西峡县',
+ '411324': '河南省南阳市镇平县',
+ '411325': '河南省南阳市内乡县',
+ '411326': '河南省南阳市淅川县',
+ '411327': '河南省南阳市社旗县',
+ '411328': '河南省南阳市唐河县',
+ '411329': '河南省南阳市新野县',
+ '411330': '河南省南阳市桐柏县',
+ '411381': '河南省南阳市邓州市',
+ '411400': '河南省商丘市',
+ '411401': '河南省商丘市市辖区',
+ '411402': '河南省商丘市梁园区',
+ '411403': '河南省商丘市睢阳区',
+ '411421': '河南省商丘市民权县',
+ '411422': '河南省商丘市睢县',
+ '411423': '河南省商丘市宁陵县',
+ '411424': '河南省商丘市柘城县',
+ '411425': '河南省商丘市虞城县',
+ '411426': '河南省商丘市夏邑县',
+ '411481': '河南省商丘市永城市',
+ '411500': '河南省信阳市',
+ '411501': '河南省信阳市市辖区',
+ '411502': '河南省信阳市师河区',
+ '411503': '河南省信阳市平桥区',
+ '411521': '河南省信阳市罗山县',
+ '411522': '河南省信阳市光山县',
+ '411523': '河南省信阳市新县',
+ '411524': '河南省信阳市商城县',
+ '411525': '河南省信阳市固始县',
+ '411526': '河南省信阳市潢川县',
+ '411527': '河南省信阳市淮滨县',
+ '411528': '河南省信阳市息县',
+ '412700': '河南省周口地区',
+ '412701': '河南省周口地区周口市',
+ '412702': '河南省周口地区项城市',
+ '412721': '河南省周口地区扶沟县',
+ '412722': '河南省周口地区西华县',
+ '412723': '河南省周口地区商水县',
+ '412724': '河南省周口地区太康县',
+ '412725': '河南省周口地区鹿邑县',
+ '412726': '河南省周口地区郸城县',
+ '412727': '河南省周口地区淮阳县',
+ '412728': '河南省周口地区沈丘县',
+ '412800': '河南省驻马店地区',
+ '412801': '河南省驻马店地区驻马店市',
+ '412821': '河南省驻马店地区确山县',
+ '412822': '河南省驻马店地区泌阳县',
+ '412823': '河南省驻马店地区遂平县',
+ '412824': '河南省驻马店地区西平县',
+ '412825': '河南省驻马店地区上蔡县',
+ '412826': '河南省驻马店地区汝南县',
+ '412827': '河南省驻马店地区平舆县',
+ '412828': '河南省驻马店地区新蔡县',
+ '412829': '河南省驻马店地区正阳县',
+ '420000': '湖北省',
+ '420100': '湖北省武汉市',
+ '420101': '湖北省武汉市市辖区',
+ '420102': '湖北省武汉市江岸区',
+ '420103': '湖北省武汉市江汉区',
+ '420104': '湖北省武汉市乔口区',
+ '420105': '湖北省武汉市汉阳区',
+ '420106': '湖北省武汉市武昌区',
+ '420107': '湖北省武汉市青山区',
+ '420111': '湖北省武汉市洪山区',
+ '420112': '湖北省武汉市东西湖区',
+ '420113': '湖北省武汉市汉南区',
+ '420114': '湖北省武汉市蔡甸区',
+ '420115': '湖北省武汉市江夏区',
+ '420116': '湖北省武汉市黄陂区',
+ '420117': '湖北省武汉市新洲区',
+ '420200': '湖北省黄石市',
+ '420201': '湖北省黄石市市辖区',
+ '420202': '湖北省黄石市黄石港区',
+ '420203': '湖北省黄石市石灰窑区',
+ '420204': '湖北省黄石市下陆区',
+ '420205': '湖北省黄石市铁山区',
+ '420222': '湖北省黄石市阳新县',
+ '420281': '湖北省黄石市大冶市',
+ '420300': '湖北省十堰市',
+ '420301': '湖北省十堰市市辖区',
+ '420302': '湖北省十堰市茅箭区',
+ '420303': '湖北省十堰市张湾区',
+ '420321': '湖北省十堰市郧县',
+ '420322': '湖北省十堰市郧西县',
+ '420323': '湖北省十堰市竹山县',
+ '420324': '湖北省十堰市竹溪县',
+ '420325': '湖北省十堰市房县',
+ '420381': '湖北省十堰市丹江口市',
+ '420500': '湖北省宜昌市',
+ '420501': '湖北省宜昌市市辖区',
+ '420502': '湖北省宜昌市西陵区',
+ '420503': '湖北省宜昌市伍家岗区',
+ '420504': '湖北省宜昌市点军区',
+ '420505': '湖北省宜昌市虎亭区',
+ '420521': '湖北省宜昌市宜昌县',
+ '420525': '湖北省宜昌市远安县',
+ '420526': '湖北省宜昌市兴山县',
+ '420527': '湖北省宜昌市秭归县',
+ '420528': '湖北省宜昌市长阳土家族自治县',
+ '420529': '湖北省宜昌市五峰土家族自治县',
+ '420581': '湖北省宜昌市宜都市',
+ '420582': '湖北省宜昌市当阳市',
+ '420583': '湖北省宜昌市枝江市',
+ '420600': '湖北省襄樊市',
+ '420601': '湖北省襄樊市市辖区',
+ '420602': '湖北省襄樊市襄城区',
+ '420606': '湖北省襄樊市樊城区',
+ '420621': '湖北省襄樊市襄阳县',
+ '420624': '湖北省襄樊市南漳县',
+ '420625': '湖北省襄樊市谷城县',
+ '420626': '湖北省襄樊市保康县',
+ '420682': '湖北省襄樊市老河口市',
+ '420683': '湖北省襄樊市枣阳市',
+ '420684': '湖北省襄樊市宜城市',
+ '420700': '湖北省鄂州市',
+ '420701': '湖北省鄂州市市辖区',
+ '420702': '湖北省鄂州市梁子湖区',
+ '420703': '湖北省鄂州市华容区',
+ '420704': '湖北省鄂州市鄂城区',
+ '420800': '湖北省荆门市',
+ '420801': '湖北省荆门市市辖区',
+ '420802': '湖北省荆门市东宝区',
+ '420821': '湖北省荆门市京山县',
+ '420822': '湖北省荆门市沙洋县',
+ '420881': '湖北省荆门市钟祥市',
+ '420900': '湖北省孝感市',
+ '420901': '湖北省孝感市市辖区',
+ '420902': '湖北省孝感市孝南区',
+ '420921': '湖北省孝感市孝昌县',
+ '420922': '湖北省孝感市大悟县',
+ '420923': '湖北省孝感市云梦县',
+ '420981': '湖北省孝感市应城市',
+ '420982': '湖北省孝感市安陆市',
+ '420983': '湖北省孝感市广水市',
+ '420984': '湖北省孝感市汉川市',
+ '421000': '湖北省荆州市',
+ '421001': '湖北省荆州市市辖区',
+ '421002': '湖北省荆州市沙市区',
+ '421003': '湖北省荆州市荆州区',
+ '421022': '湖北省荆州市公安县',
+ '421023': '湖北省荆州市监利县',
+ '421024': '湖北省荆州市江陵县',
+ '421081': '湖北省荆州市石首市',
+ '421083': '湖北省荆州市洪湖市',
+ '421087': '湖北省荆州市松滋市',
+ '421100': '湖北省黄冈市',
+ '421101': '湖北省黄冈市市辖区',
+ '421102': '湖北省黄冈市黄州区',
+ '421121': '湖北省黄冈市团风县',
+ '421122': '湖北省黄冈市红安县',
+ '421123': '湖北省黄冈市罗田县',
+ '421124': '湖北省黄冈市英山县',
+ '421125': '湖北省黄冈市浠水县',
+ '421126': '湖北省黄冈市蕲春县',
+ '421127': '湖北省黄冈市黄梅县',
+ '421181': '湖北省黄冈市麻城市',
+ '421182': '湖北省黄冈市武穴市',
+ '421200': '湖北省咸宁市',
+ '421201': '湖北省咸宁市市辖区',
+ '421202': '湖北省咸宁市咸安区',
+ '421221': '湖北省咸宁市嘉鱼县',
+ '421222': '湖北省咸宁市通城县',
+ '421223': '湖北省咸宁市崇阳县',
+ '421224': '湖北省咸宁市通山县',
+ '422800': '湖北省施土家族苗族自治州',
+ '422801': '湖北省恩施土家族苗族自治州恩施县',
+ '422802': '湖北省恩施土家族苗族自治州利川市',
+ '422822': '湖北省恩施土家族苗族自治州建始县',
+ '422823': '湖北省恩施土家族苗族自治州巴东县',
+ '422825': '湖北省恩施土家族苗族自治州宣恩县',
+ '422826': '湖北省恩施土家族苗族自治州咸丰县',
+ '422827': '湖北省恩施土家族苗族自治州来凤县',
+ '422828': '湖北省恩施土家族苗族自治州鹤峰县',
+ '429000': '湖北省省直辖县级行政单位',
+ '429001': '湖北省随州市',
+ '429004': '湖北省仙桃市',
+ '429005': '湖北省潜江市',
+ '429006': '湖北省天门市',
+ '429021': '湖北省神农架林区',
+ '430000': '湖南省',
+ '430100': '湖南省长沙市',
+ '430101': '湖南省长沙市市辖区',
+ '430102': '湖南省长沙市芙蓉区',
+ '430103': '湖南省长沙市天心区',
+ '430104': '湖南省长沙市岳麓区',
+ '430105': '湖南省长沙市开福区',
+ '430111': '湖南省长沙市雨花区',
+ '430121': '湖南省长沙市长沙县',
+ '430122': '湖南省长沙市望城县',
+ '430124': '湖南省长沙市宁乡县',
+ '430181': '湖南省长沙市浏阳市',
+ '430200': '湖南省株洲市',
+ '430201': '湖南省株洲市市辖区',
+ '430202': '湖南省株洲市荷塘区',
+ '430203': '湖南省株洲市芦淞区',
+ '430204': '湖南省株洲市石峰区',
+ '430211': '湖南省株洲市天元区',
+ '430221': '湖南省株洲市株洲县',
+ '430223': '湖南省株洲市攸县',
+ '430224': '湖南省株洲市茶陵县',
+ '430225': '湖南省株洲市炎陵县',
+ '430281': '湖南省株洲市醴陵市',
+ '430300': '湖南省湘潭市',
+ '430301': '湖南省湘潭市市辖区',
+ '430302': '湖南省湘潭市雨湖区',
+ '430304': '湖南省湘潭市岳塘区',
+ '430321': '湖南省湘潭市湘潭县',
+ '430381': '湖南省湘潭市湘乡市',
+ '430382': '湖南省湘潭市韶山市',
+ '430400': '湖南省衡阳市',
+ '430401': '湖南省衡阳市市辖区',
+ '430402': '湖南省衡阳市江东区',
+ '430403': '湖南省衡阳市城南区',
+ '430404': '湖南省衡阳市城北区',
+ '430411': '湖南省衡阳市郊区',
+ '430412': '湖南省衡阳市南岳区',
+ '430421': '湖南省衡阳市衡阳县',
+ '430422': '湖南省衡阳市衡南县',
+ '430423': '湖南省衡阳市衡山县',
+ '430424': '湖南省衡阳市衡东县',
+ '430426': '湖南省衡阳市祁东县',
+ '430481': '湖南省衡阳市耒阳市',
+ '430482': '湖南省衡阳市常宁市',
+ '430500': '湖南省邵阳市',
+ '430501': '湖南省邵阳市市辖区',
+ '430502': '湖南省邵阳市双清区',
+ '430503': '湖南省邵阳市大祥区',
+ '430511': '湖南省邵阳市北塔区',
+ '430521': '湖南省邵阳市邵东县',
+ '430522': '湖南省邵阳市新邵县',
+ '430523': '湖南省邵阳市邵阳县',
+ '430524': '湖南省邵阳市隆回县',
+ '430525': '湖南省邵阳市洞口县',
+ '430527': '湖南省邵阳市绥宁县',
+ '430528': '湖南省邵阳市新宁县',
+ '430529': '湖南省邵阳市城步苗族自治县',
+ '430581': '湖南省邵阳市武冈市',
+ '430600': '湖南省岳阳市',
+ '430601': '湖南省岳阳市市辖区',
+ '430602': '湖南省岳阳市岳阳楼区',
+ '430603': '湖南省岳阳市云溪区',
+ '430611': '湖南省岳阳市君山区',
+ '430621': '湖南省岳阳市岳阳县',
+ '430623': '湖南省岳阳市华容县',
+ '430624': '湖南省岳阳市湘阴县',
+ '430626': '湖南省岳阳市平江县',
+ '430681': '湖南省岳阳市汨罗市',
+ '430682': '湖南省岳阳市临湘市',
+ '430700': '湖南省常德市',
+ '430701': '湖南省常德市市辖区',
+ '430702': '湖南省常德市武陵区',
+ '430703': '湖南省常德市鼎城区',
+ '430721': '湖南省常德市安乡县',
+ '430722': '湖南省常德市汉寿县',
+ '430723': '湖南省常德市澧县',
+ '430724': '湖南省常德市临澧县',
+ '430725': '湖南省常德市桃源县',
+ '430726': '湖南省常德市石门县',
+ '430781': '湖南省常德市津市市',
+ '430800': '湖南省张家界市',
+ '430801': '湖南省张家界市市辖区',
+ '430802': '湖南省张家界市永定区',
+ '430811': '湖南省张家界市武陵源区',
+ '430821': '湖南省张家界市慈利县',
+ '430822': '湖南省张家界市桑植县',
+ '430900': '湖南省益阳市',
+ '430901': '湖南省益阳市市辖区',
+ '430902': '湖南省益阳市资阳区',
+ '430903': '湖南省益阳市赫山区',
+ '430921': '湖南省益阳市南县',
+ '430922': '湖南省益阳市桃江县',
+ '430923': '湖南省益阳市安化县',
+ '430981': '湖南省益阳市沅江市',
+ '431000': '湖南省郴州市',
+ '431001': '湖南省郴州市市辖区',
+ '431002': '湖南省郴州市北湖区',
+ '431003': '湖南省郴州市苏仙区',
+ '431021': '湖南省郴州市桂阳县',
+ '431022': '湖南省郴州市宜章县',
+ '431023': '湖南省郴州市永兴县',
+ '431024': '湖南省郴州市嘉禾县',
+ '431025': '湖南省郴州市临武县',
+ '431026': '湖南省郴州市汝城县',
+ '431027': '湖南省郴州市桂东县',
+ '431028': '湖南省郴州市安仁县',
+ '431081': '湖南省郴州市资兴市',
+ '431100': '湖南省永州市',
+ '431101': '湖南省永州市市辖区',
+ '431102': '湖南省永州市芝山区',
+ '431103': '湖南省永州市冷水滩区',
+ '431121': '湖南省永州市祁阳县',
+ '431122': '湖南省永州市东安县',
+ '431123': '湖南省永州市双牌县',
+ '431124': '湖南省永州市道县',
+ '431125': '湖南省永州市江永县',
+ '431126': '湖南省永州市宁远县',
+ '431127': '湖南省永州市蓝山县',
+ '431128': '湖南省永州市新田县',
+ '431129': '湖南省永州市江华瑶族自治县',
+ '431200': '湖南省怀化市',
+ '431201': '湖南省怀化市市辖区',
+ '431202': '湖南省怀化市鹤城区',
+ '431221': '湖南省怀化市中方县',
+ '431222': '湖南省怀化市沅陵县',
+ '431223': '湖南省怀化市辰溪县',
+ '431224': '湖南省怀化市溆浦县',
+ '431225': '湖南省怀化市会同县',
+ '431226': '湖南省怀化市麻阳苗族自治县',
+ '431227': '湖南省怀化市新晃侗族自治县',
+ '431228': '湖南省怀化市芷江侗族自治县',
+ '431229': '湖南省怀化市靖州苗族侗族自治县',
+ '431230': '湖南省怀化市通道侗族自治县',
+ '431281': '湖南省怀化市洪江市',
+ '432500': '湖南省娄底地区',
+ '432501': '湖南省娄底地区娄底市',
+ '432502': '湖南省娄底地区冷水江市',
+ '432503': '湖南省娄底地区涟源市',
+ '432522': '湖南省娄底地区双峰县',
+ '432524': '湖南省娄底地区新化县',
+ '433000': '湖南省怀化市',
+ '433001': '湖南省怀化市',
+ '433100': '湖南省湘西土家族苗族自治州',
+ '433101': '湖南省湘西土家族苗族自治州吉首市',
+ '433122': '湖南省湘西土家族苗族自治州泸溪县',
+ '433123': '湖南省湘西土家族苗族自治州凤凰县',
+ '433124': '湖南省湘西土家族苗族自治州花垣县',
+ '433125': '湖南省湘西土家族苗族自治州保靖县',
+ '433126': '湖南省湘西土家族苗族自治州古丈县',
+ '433127': '湖南省湘西土家族苗族自治州永顺县',
+ '433130': '湖南省湘西土家族苗族自治州龙山县',
+ '440000': '广东省',
+ '440100': '广东省广州市',
+ '440101': '广东省广州市市辖区',
+ '440102': '广东省广州市东山区',
+ '440103': '广东省广州市荔湾区',
+ '440104': '广东省广州市越秀区',
+ '440105': '广东省广州市海珠区',
+ '440106': '广东省广州市天河区',
+ '440107': '广东省广州市芳村区',
+ '440111': '广东省广州市白云区',
+ '440112': '广东省广州市黄埔区',
+ '440181': '广东省广州市番禺市',
+ '440182': '广东省广州市花都市',
+ '440183': '广东省广州市增城市',
+ '440184': '广东省广州市从化市',
+ '440200': '广东省韶关市',
+ '440201': '广东省韶关市市辖区',
+ '440202': '广东省韶关市北江区',
+ '440203': '广东省韶关市武江区',
+ '440204': '广东省韶关市浈江区',
+ '440221': '广东省韶关市曲江县',
+ '440222': '广东省韶关市始兴县',
+ '440224': '广东省韶关市仁化县',
+ '440229': '广东省韶关市翁源县',
+ '440232': '广东省韶关市乳源瑶族自治县',
+ '440233': '广东省韶关市新丰县',
+ '440281': '广东省韶关市乐昌市',
+ '440282': '广东省韶关市南雄市',
+ '440300': '广东省深圳市',
+ '440301': '广东省深圳市市辖区',
+ '440303': '广东省深圳市罗湖区',
+ '440304': '广东省深圳市福田区',
+ '440305': '广东省深圳市南山区',
+ '440306': '广东省深圳市宝安区',
+ '440307': '广东省深圳市龙岗区',
+ '440308': '广东省深圳市盐田区',
+ '440400': '广东省珠海市',
+ '440401': '广东省珠海市市辖区',
+ '440402': '广东省珠海市香洲区',
+ '440421': '广东省珠海市斗门县',
+ '440500': '广东省汕头市',
+ '440501': '广东省汕头市市辖区',
+ '440506': '广东省汕头市达濠区',
+ '440507': '广东省汕头市龙湖区',
+ '440508': '广东省汕头市金园区',
+ '440509': '广东省汕头市升平区',
+ '440510': '广东省汕头市河浦区',
+ '440523': '广东省汕头市南澳县',
+ '440582': '广东省汕头市潮阳市',
+ '440583': '广东省汕头市澄海市',
+ '440600': '广东省佛山市',
+ '440601': '广东省佛山市市辖区',
+ '440602': '广东省佛山市城区',
+ '440603': '广东省佛山市石湾区',
+ '440681': '广东省佛山市顺德市',
+ '440682': '广东省佛山市南海市',
+ '440683': '广东省佛山市三水市',
+ '440684': '广东省佛山市高明市',
+ '440700': '广东省江门市',
+ '440701': '广东省江门市市辖区',
+ '440703': '广东省江门市蓬江区',
+ '440704': '广东省江门市江海区',
+ '440781': '广东省江门市台山市',
+ '440782': '广东省江门市新会市',
+ '440783': '广东省江门市开平市',
+ '440784': '广东省江门市鹤山市',
+ '440785': '广东省江门市恩平市',
+ '440800': '广东省湛江市',
+ '440801': '广东省湛江市市辖区',
+ '440802': '广东省湛江市赤坎区',
+ '440803': '广东省湛江市霞山区',
+ '440804': '广东省湛江市坡头区',
+ '440811': '广东省湛江市麻章区',
+ '440823': '广东省湛江市遂溪县',
+ '440825': '广东省湛江市徐闻县',
+ '440881': '广东省湛江市廉江市',
+ '440882': '广东省湛江市雷州市',
+ '440883': '广东省湛江市吴川市',
+ '440900': '广东省茂名市',
+ '440901': '广东省茂名市市辖区',
+ '440902': '广东省茂名市茂南区',
+ '440923': '广东省茂名市电白县',
+ '440981': '广东省茂名市高州市',
+ '440982': '广东省茂名市化州市',
+ '440983': '广东省茂名市信宜市',
+ '441200': '广东省肇庆市',
+ '441201': '广东省肇庆市市辖区',
+ '441202': '广东省肇庆市端州区',
+ '441203': '广东省肇庆市鼎湖区',
+ '441223': '广东省肇庆市广宁县',
+ '441224': '广东省肇庆市怀集县',
+ '441225': '广东省肇庆市封开县',
+ '441226': '广东省肇庆市德庆县',
+ '441283': '广东省肇庆市高要市',
+ '441284': '广东省肇庆市四会市',
+ '441300': '广东省惠州市',
+ '441301': '广东省惠州市市辖区',
+ '441302': '广东省惠州市惠城区',
+ '441322': '广东省惠州市博罗县',
+ '441323': '广东省惠州市惠东县',
+ '441324': '广东省惠州市龙门县',
+ '441381': '广东省惠州市惠阳市',
+ '441400': '广东省梅州市',
+ '441401': '广东省梅州市市辖区',
+ '441402': '广东省梅州市梅江区',
+ '441421': '广东省梅州市梅县',
+ '441422': '广东省梅州市大埔县',
+ '441423': '广东省梅州市丰顺县',
+ '441424': '广东省梅州市五华县',
+ '441426': '广东省梅州市平远县',
+ '441427': '广东省梅州市蕉岭县',
+ '441481': '广东省梅州市兴宁市',
+ '441500': '广东省汕尾市',
+ '441501': '广东省汕尾市市辖区',
+ '441502': '广东省汕尾市城区',
+ '441521': '广东省汕尾市海丰县',
+ '441523': '广东省汕尾市陆河县',
+ '441581': '广东省汕尾市陆丰市',
+ '441600': '广东省河源市',
+ '441601': '广东省河源市市辖区',
+ '441602': '广东省河源市源城区',
+ '441621': '广东省河源市紫金县',
+ '441622': '广东省河源市龙川县',
+ '441623': '广东省河源市连平县',
+ '441624': '广东省河源市和平县',
+ '441625': '广东省河源市东源县',
+ '441700': '广东省阳江市',
+ '441701': '广东省阳江市市辖区',
+ '441702': '广东省阳江市江城区',
+ '441721': '广东省阳江市阳西县',
+ '441723': '广东省阳江市阳东县',
+ '441781': '广东省阳江市阳春市',
+ '441800': '广东省清远市',
+ '441801': '广东省清远市市辖区',
+ '441802': '广东省清远市清城区',
+ '441821': '广东省清远市佛冈县',
+ '441823': '广东省清远市阳山县',
+ '441825': '广东省清远市连山壮族瑶族自治县',
+ '441826': '广东省清远市连南瑶族自治县',
+ '441827': '广东省清远市清新县',
+ '441881': '广东省清远市英德市',
+ '441882': '广东省清远市连州市',
+ '441900': '广东省东莞市',
+ '441901': '广东省东莞市市辖区',
+ '442000': '广东省中山市',
+ '442001': '广东省中山市市辖区',
+ '445100': '广东省潮州市',
+ '445101': '广东省潮州市市辖区',
+ '445102': '广东省潮州市湘桥区',
+ '445121': '广东省潮州市潮安县',
+ '445122': '广东省潮州市饶平县',
+ '445200': '广东省揭阳市',
+ '445201': '广东省揭阳市市辖区',
+ '445202': '广东省揭阳市榕城区',
+ '445221': '广东省揭阳市揭东县',
+ '445222': '广东省揭阳市揭西县',
+ '445224': '广东省揭阳市惠来县',
+ '445281': '广东省揭阳市普宁市',
+ '445300': '广东省云浮市',
+ '445301': '广东省云浮市市辖区',
+ '445302': '广东省云浮市云城区',
+ '445321': '广东省云浮市新兴县',
+ '445322': '广东省云浮市郁南县',
+ '445323': '广东省云浮市云安县',
+ '445381': '广东省云浮市罗定市',
+ '450000': '广西壮族自治区',
+ '450100': '广西壮族自治区南宁市',
+ '450101': '广西壮族自治区南宁市市辖区',
+ '450102': '广西壮族自治区南宁市兴宁区',
+ '450103': '广西壮族自治区南宁市新城区',
+ '450104': '广西壮族自治区南宁市城北区',
+ '450105': '广西壮族自治区南宁市江南区',
+ '450106': '广西壮族自治区南宁市永新区',
+ '450111': '广西壮族自治区南宁市市郊区',
+ '450121': '广西壮族自治区南宁市邕宁县',
+ '450122': '广西壮族自治区南宁市武鸣县',
+ '450200': '广西壮族自治区柳州市',
+ '450201': '广西壮族自治区柳州市市辖区',
+ '450202': '广西壮族自治区柳州市城中区',
+ '450203': '广西壮族自治区柳州市鱼峰区',
+ '450204': '广西壮族自治区柳州市柳南区',
+ '450205': '广西壮族自治区柳州市柳北区',
+ '450211': '广西壮族自治区柳州市市郊区',
+ '450221': '广西壮族自治区柳州市柳江县',
+ '450222': '广西壮族自治区柳州市柳城县',
+ '450300': '广西壮族自治区桂林市',
+ '450301': '广西壮族自治区桂林市市辖区',
+ '450302': '广西壮族自治区桂林市秀峰区',
+ '450303': '广西壮族自治区桂林市叠彩区',
+ '450304': '广西壮族自治区桂林市象山区',
+ '450305': '广西壮族自治区桂林市七星区',
+ '450311': '广西壮族自治区桂林市雁山区',
+ '450321': '广西壮族自治区桂林市阳朔县',
+ '450322': '广西壮族自治区桂林市临桂县',
+ '450323': '广西壮族自治区桂林市灵川县',
+ '450324': '广西壮族自治区桂林市全州县',
+ '450325': '广西壮族自治区桂林市兴安县',
+ '450326': '广西壮族自治区桂林市永福县',
+ '450327': '广西壮族自治区桂林市灌阳县',
+ '450328': '广西壮族自治区桂林市龙胜各族自治县',
+ '450329': '广西壮族自治区桂林市资源县',
+ '450330': '广西壮族自治区桂林市平乐县',
+ '450331': '广西壮族自治区桂林市荔浦县',
+ '450332': '广西壮族自治区桂林市恭城瑶族自治县',
+ '450400': '广西壮族自治区梧州市',
+ '450401': '广西壮族自治区梧州市市辖区',
+ '450403': '广西壮族自治区梧州市万秀区',
+ '450404': '广西壮族自治区梧州市蝶山区',
+ '450411': '广西壮族自治区梧州市市郊区',
+ '450421': '广西壮族自治区梧州市苍梧县',
+ '450422': '广西壮族自治区梧州市藤县',
+ '450423': '广西壮族自治区梧州市蒙山县',
+ '450481': '广西壮族自治区梧州市岑溪市',
+ '450500': '广西壮族自治区北海市',
+ '450501': '广西壮族自治区北海市市辖区',
+ '450502': '广西壮族自治区北海市海城区',
+ '450503': '广西壮族自治区北海市银海区',
+ '450512': '广西壮族自治区北海市铁山港区',
+ '450521': '广西壮族自治区北海市合浦县',
+ '450600': '广西壮族自治区防城港市',
+ '450601': '广西壮族自治区防城港市市辖区',
+ '450602': '广西壮族自治区防城港市港口区',
+ '450603': '广西壮族自治区防城港市防城区',
+ '450621': '广西壮族自治区防城港市上思县',
+ '450681': '广西壮族自治区防城港市东兴市',
+ '450700': '广西壮族自治区钦州市',
+ '450701': '广西壮族自治区钦州市市辖区',
+ '450702': '广西壮族自治区钦州市钦南区',
+ '450703': '广西壮族自治区钦州市钦北区',
+ '450721': '广西壮族自治区钦州市灵山县',
+ '450722': '广西壮族自治区钦州市浦北县',
+ '450800': '广西壮族自治区贵港市',
+ '450801': '广西壮族自治区贵港市市辖区',
+ '450802': '广西壮族自治区贵港市港北区',
+ '450803': '广西壮族自治区贵港市港南区',
+ '450821': '广西壮族自治区贵港市平南县',
+ '450881': '广西壮族自治区贵港市桂平市',
+ '450900': '广西壮族自治区玉林市',
+ '450901': '广西壮族自治区玉林市市辖区',
+ '450902': '广西壮族自治区玉林市玉州区',
+ '450921': '广西壮族自治区玉林市容县',
+ '450922': '广西壮族自治区玉林市陆川县',
+ '450923': '广西壮族自治区玉林市博白县',
+ '450924': '广西壮族自治区玉林市兴业县',
+ '450981': '广西壮族自治区玉林市北流市',
+ '452100': '广西壮族自治区南宁地区',
+ '452101': '广西壮族自治区南宁地区凭祥市',
+ '452122': '广西壮族自治区南宁地区横县',
+ '452123': '广西壮族自治区南宁地区宾阳县',
+ '452124': '广西壮族自治区南宁地区上林县',
+ '452126': '广西壮族自治区南宁地区隆安县',
+ '452127': '广西壮族自治区南宁地区马山县',
+ '452128': '广西壮族自治区南宁地区扶绥县',
+ '452129': '广西壮族自治区南宁地区崇左县',
+ '452130': '广西壮族自治区南宁地区大新县',
+ '452131': '广西壮族自治区南宁地区天等县',
+ '452132': '广西壮族自治区南宁地区宁明县',
+ '452133': '广西壮族自治区南宁地区龙州县',
+ '452200': '广西壮族自治区柳州地区',
+ '452201': '广西壮族自治区柳州地区合山市',
+ '452223': '广西壮族自治区柳州地区鹿寨县',
+ '452224': '广西壮族自治区柳州地区象州县',
+ '452225': '广西壮族自治区柳州地区武宣县',
+ '452226': '广西壮族自治区柳州地区来宾县',
+ '452227': '广西壮族自治区柳州地区融安县',
+ '452228': '广西壮族自治区柳州地区三江侗族自治县',
+ '452229': '广西壮族自治区柳州地区融水苗族自治县',
+ '452230': '广西壮族自治区柳州地区金秀瑶族自治县',
+ '452231': '广西壮族自治区柳州地区忻城县',
+ '452400': '广西壮族自治区贺州地区',
+ '452402': '广西壮族自治区贺州地区贺州市',
+ '452424': '广西壮族自治区贺州地区昭平县',
+ '452427': '广西壮族自治区贺州地区钟山县',
+ '452428': '广西壮族自治区贺州地区富川瑶族自治县',
+ '452600': '广西壮族自治区百色地区',
+ '452601': '广西壮族自治区百色地区百色市',
+ '452622': '广西壮族自治区百色地区田阳县',
+ '452623': '广西壮族自治区百色地区田东县',
+ '452624': '广西壮族自治区百色地区平果县',
+ '452625': '广西壮族自治区百色地区德保县',
+ '452626': '广西壮族自治区百色地区靖西县',
+ '452627': '广西壮族自治区百色地区那坡县',
+ '452628': '广西壮族自治区百色地区凌云县',
+ '452629': '广西壮族自治区百色地区乐业县',
+ '452630': '广西壮族自治区百色地区田林县',
+ '452631': '广西壮族自治区百色地区隆林各族自治县',
+ '452632': '广西壮族自治区百色地区西林县',
+ '452700': '广西壮族自治区河池地区',
+ '452701': '广西壮族自治区河池地区河池市',
+ '452702': '广西壮族自治区河池地区宜州市',
+ '452723': '广西壮族自治区河池地区罗城仫佬族自治县',
+ '452724': '广西壮族自治区河池地区环江毛南族自治县',
+ '452725': '广西壮族自治区河池地区南丹县',
+ '452726': '广西壮族自治区河池地区天峨县',
+ '452727': '广西壮族自治区河池地区凤山县',
+ '452728': '广西壮族自治区河池地区东兰县',
+ '452729': '广西壮族自治区河池地区巴马瑶族自治县',
+ '452730': '广西壮族自治区河池地区都安瑶族自治县',
+ '452731': '广西壮族自治区河池地区大化瑶族自治县',
+ '460000': '海南省',
+ '460001': '海南省三亚市通什市',
+ '460002': '海南省三亚市琼海市',
+ '460003': '海南省三亚市儋州市',
+ '460004': '海南省三亚市琼山市',
+ '460005': '海南省三亚市文昌市',
+ '460006': '海南省三亚市万宁市',
+ '460007': '海南省三亚市东方市',
+ '460025': '海南省三亚市定安县',
+ '460026': '海南省三亚市屯昌县',
+ '460027': '海南省三亚市澄迈县',
+ '460028': '海南省三亚市临高县',
+ '460030': '海南省三亚市白沙黎族自治县',
+ '460031': '海南省三亚市昌江黎族自治县',
+ '460033': '海南省三亚市乐东黎族自治县',
+ '460034': '海南省三亚市陵水黎族自治县',
+ '460035': '海南省三亚市保亭黎族苗族自治县',
+ '460036': '海南省三亚市琼中黎族苗族自治县',
+ '460037': '海南省西沙群岛',
+ '460038': '海南省南沙群岛',
+ '460039': '海南省中沙群岛的岛礁及其海域',
+ '460100': '海南省海口市',
+ '460101': '海南省海口市市辖区',
+ '460102': '海南省海口市振东区',
+ '460103': '海南省海口市新华区',
+ '460104': '海南省海口市秀英区',
+ '460200': '海南省三亚市',
+ '460201': '海南省三亚市市辖区',
+ '500000': '重庆市',
+ '500100': '重庆市市辖区',
+ '500101': '重庆市万州区',
+ '500102': '重庆市涪陵区',
+ '500103': '重庆市渝中区',
+ '500104': '重庆市大渡口区',
+ '500105': '重庆市江北区',
+ '500106': '重庆市沙坪坝区',
+ '500107': '重庆市九龙坡区',
+ '500108': '重庆市南岸区',
+ '500109': '重庆市北碚区',
+ '500110': '重庆市万盛区',
+ '500111': '重庆市双桥区',
+ '500112': '重庆市渝北区',
+ '500113': '重庆市巴南区',
+ '500200': '重庆市县',
+ '500221': '重庆市长寿县',
+ '500222': '重庆市綦江县',
+ '500223': '重庆市潼南县',
+ '500224': '重庆市铜梁县',
+ '500225': '重庆市大足县',
+ '500226': '重庆市荣昌县',
+ '500227': '重庆市璧山县',
+ '500228': '重庆市梁平县',
+ '500229': '重庆市城口县',
+ '500230': '重庆市丰都县',
+ '500231': '重庆市垫江县',
+ '500232': '重庆市武隆县',
+ '500233': '重庆市忠县',
+ '500234': '重庆市开县',
+ '500235': '重庆市云阳县',
+ '500236': '重庆市奉节县',
+ '500237': '重庆市巫山县',
+ '500238': '重庆市巫溪县',
+ '500239': '重庆市黔江土家族苗族自治县',
+ '500240': '重庆市石柱土家族自治县',
+ '500241': '重庆市秀山土家族苗族自治县',
+ '500242': '重庆市酉阳土家族苗族自治县',
+ '500243': '重庆市彭水苗族土家族自治县',
+ '500300': '重庆市(市)',
+ '500381': '重庆市江津市',
+ '500382': '重庆市合川市',
+ '500383': '重庆市永川市',
+ '500384': '重庆市南川市',
+ '510000': '四川省',
+ '510100': '四川省成都市',
+ '510101': '四川省成都市市辖区',
+ '510104': '四川省成都市锦江区',
+ '510105': '四川省成都市青羊区',
+ '510106': '四川省成都市金牛区',
+ '510107': '四川省成都市武侯区',
+ '510108': '四川省成都市成华区',
+ '510112': '四川省成都市龙泉驿区',
+ '510113': '四川省成都市青白江区',
+ '510121': '四川省成都市金堂县',
+ '510122': '四川省成都市双流县',
+ '510123': '四川省成都市温江县',
+ '510124': '四川省成都市郫县',
+ '510125': '四川省成都市新都县',
+ '510129': '四川省成都市大邑县',
+ '510131': '四川省成都市蒲江县',
+ '510132': '四川省成都市新津县',
+ '510181': '四川省成都市都江堰市',
+ '510182': '四川省成都市彭州市',
+ '510183': '四川省成都市邛崃市',
+ '510184': '四川省成都市崇州市',
+ '510300': '四川省自贡市',
+ '510301': '四川省自贡市市辖区',
+ '510302': '四川省自贡市自流井区',
+ '510303': '四川省自贡市贡井区',
+ '510304': '四川省自贡市大安区',
+ '510311': '四川省自贡市沿滩区',
+ '510321': '四川省自贡市荣县',
+ '510322': '四川省自贡市富顺县',
+ '510400': '四川省攀枝花市',
+ '510401': '四川省攀枝花市市辖区',
+ '510402': '四川省攀枝花市东区',
+ '510403': '四川省攀枝花市西区',
+ '510411': '四川省攀枝花市仁和区',
+ '510421': '四川省攀枝花市米易县',
+ '510422': '四川省攀枝花市盐边县',
+ '510500': '四川省泸州市',
+ '510501': '四川省泸州市市辖区',
+ '510502': '四川省泸州市江阳区',
+ '510503': '四川省泸州市纳溪区',
+ '510504': '四川省泸州市龙马潭区',
+ '510521': '四川省泸州市泸县',
+ '510522': '四川省泸州市合江县',
+ '510524': '四川省泸州市叙永县',
+ '510525': '四川省泸州市古蔺县',
+ '510600': '四川省德阳市',
+ '510601': '四川省德阳市市辖区',
+ '510603': '四川省德阳市旌阳区',
+ '510623': '四川省德阳市中江县',
+ '510626': '四川省德阳市罗江县',
+ '510681': '四川省德阳市广汉市',
+ '510682': '四川省德阳市什邡市',
+ '510683': '四川省德阳市绵竹市',
+ '510700': '四川省绵阳市',
+ '510701': '四川省绵阳市市辖区',
+ '510703': '四川省绵阳市涪城区',
+ '510704': '四川省绵阳市游仙区',
+ '510722': '四川省绵阳市三台县',
+ '510723': '四川省绵阳市盐亭县',
+ '510724': '四川省绵阳市安县',
+ '510725': '四川省绵阳市梓潼县',
+ '510726': '四川省绵阳市北川县',
+ '510727': '四川省绵阳市平武县',
+ '510781': '四川省绵阳市江油市',
+ '510800': '四川省广元市',
+ '510801': '四川省广元市市辖区',
+ '510802': '四川省广元市市中区',
+ '510811': '四川省广元市元坝区',
+ '510812': '四川省广元市朝天区',
+ '510821': '四川省广元市旺苍县',
+ '510822': '四川省广元市青川县',
+ '510823': '四川省广元市剑阁县',
+ '510824': '四川省广元市苍溪县',
+ '510900': '四川省遂宁市',
+ '510901': '四川省遂宁市市辖区',
+ '510902': '四川省遂宁市市中区',
+ '510921': '四川省遂宁市蓬溪县',
+ '510922': '四川省遂宁市射洪县',
+ '510923': '四川省遂宁市大英县',
+ '511000': '四川省内江市',
+ '511001': '四川省内江市市辖区',
+ '511002': '四川省内江市市中区',
+ '511011': '四川省内江市东兴区',
+ '511024': '四川省内江市威远县',
+ '511025': '四川省内江市资中县',
+ '511028': '四川省内江市隆昌县',
+ '511100': '四川省乐山市',
+ '511101': '四川省乐山市市辖区',
+ '511102': '四川省乐山市市中区',
+ '511111': '四川省乐山市沙湾区',
+ '511112': '四川省乐山市五通桥区',
+ '511113': '四川省乐山市金口河区',
+ '511123': '四川省乐山市犍为县',
+ '511124': '四川省乐山市井研县',
+ '511126': '四川省乐山市夹江县',
+ '511129': '四川省乐山市沐川县',
+ '511132': '四川省乐山市峨边彝族自治县',
+ '511133': '四川省乐山市马边彝族自治县',
+ '511181': '四川省乐山市峨眉山市',
+ '511300': '四川省南充市',
+ '511301': '四川省南充市市辖区',
+ '511302': '四川省南充市顺庆区',
+ '511303': '四川省南充市高坪区',
+ '511304': '四川省南充市嘉陵区',
+ '511321': '四川省南充市南部县',
+ '511322': '四川省南充市营山县',
+ '511323': '四川省南充市蓬安县',
+ '511324': '四川省南充市仪陇县',
+ '511325': '四川省南充市西充县',
+ '511381': '四川省南充市阆中市',
+ '511500': '四川省宜宾市',
+ '511501': '四川省宜宾市市辖区',
+ '511502': '四川省宜宾市翠屏区',
+ '511521': '四川省宜宾市宜宾县',
+ '511522': '四川省宜宾市南溪县',
+ '511523': '四川省宜宾市江安县',
+ '511524': '四川省宜宾市长宁县',
+ '511525': '四川省宜宾市高县',
+ '511526': '四川省宜宾市珙县',
+ '511527': '四川省宜宾市筠连县',
+ '511528': '四川省宜宾市兴文县',
+ '511529': '四川省宜宾市屏山县',
+ '511600': '四川省广安市',
+ '511601': '四川省广安市市辖区',
+ '511602': '四川省广安市广安区',
+ '511621': '四川省广安市岳池县',
+ '511622': '四川省广安市武胜县',
+ '511623': '四川省广安市邻水县',
+ '511681': '四川省广安市华蓥市',
+ '513000': '四川省达川地区',
+ '513001': '四川省达川地区达川市',
+ '513002': '四川省达川地区万源市',
+ '513021': '四川省达川地区达县',
+ '513022': '四川省达川地区宣汉县',
+ '513023': '四川省达川地区开江县',
+ '513029': '四川省达川地区大竹县',
+ '513030': '四川省达川地区渠县',
+ '513100': '四川省雅安地区',
+ '513101': '四川省雅安地区雅安市',
+ '513122': '四川省雅安地区名山县',
+ '513123': '四川省雅安地区荥经县',
+ '513124': '四川省雅安地区汉源县',
+ '513125': '四川省雅安地区石棉县',
+ '513126': '四川省雅安地区天全县',
+ '513127': '四川省雅安地区芦山县',
+ '513128': '四川省雅安地区宝兴县',
+ '513200': '四川省阿坝藏族羌族自治州',
+ '513221': '四川省阿坝藏族羌族自治州汶川县',
+ '513222': '四川省阿坝藏族羌族自治州理县',
+ '513223': '四川省阿坝藏族羌族自治州茂县',
+ '513224': '四川省阿坝藏族羌族自治州松潘县',
+ '513225': '四川省阿坝藏族羌族自治州九寨沟县',
+ '513226': '四川省阿坝藏族羌族自治州金川县',
+ '513227': '四川省阿坝藏族羌族自治州小金县',
+ '513228': '四川省阿坝藏族羌族自治州黑水县',
+ '513229': '四川省阿坝藏族羌族自治州马尔康县',
+ '513230': '四川省阿坝藏族羌族自治州壤塘县',
+ '513231': '四川省阿坝藏族羌族自治州阿坝县',
+ '513232': '四川省阿坝藏族羌族自治州若尔盖县',
+ '513233': '四川省阿坝藏族羌族自治州红原县',
+ '513300': '四川省甘孜藏族自治州',
+ '513321': '四川省甘孜藏族自治州康定县',
+ '513322': '四川省甘孜藏族自治州泸定县',
+ '513323': '四川省甘孜藏族自治州丹巴县',
+ '513324': '四川省甘孜藏族自治州九龙县',
+ '513325': '四川省甘孜藏族自治州雅江县',
+ '513326': '四川省甘孜藏族自治州道孚县',
+ '513327': '四川省甘孜藏族自治州炉霍县',
+ '513328': '四川省甘孜藏族自治州甘孜县',
+ '513329': '四川省甘孜藏族自治州新龙县',
+ '513330': '四川省甘孜藏族自治州德格县',
+ '513331': '四川省甘孜藏族自治州白玉县',
+ '513332': '四川省甘孜藏族自治州石渠县',
+ '513333': '四川省甘孜藏族自治州色达县',
+ '513334': '四川省甘孜藏族自治州理塘县',
+ '513335': '四川省甘孜藏族自治州巴塘县',
+ '513336': '四川省甘孜藏族自治州乡城县',
+ '513337': '四川省甘孜藏族自治州稻城县',
+ '513338': '四川省甘孜藏族自治州得荣县',
+ '513400': '四川省凉山彝族自治州',
+ '513401': '四川省凉山彝族自治州西昌市',
+ '513422': '四川省凉山彝族自治州木里藏族自治县',
+ '513423': '四川省凉山彝族自治州盐源县',
+ '513424': '四川省凉山彝族自治州德昌县',
+ '513425': '四川省凉山彝族自治州会理县',
+ '513426': '四川省凉山彝族自治州会东县',
+ '513427': '四川省凉山彝族自治州宁南县',
+ '513428': '四川省凉山彝族自治州普格县',
+ '513429': '四川省凉山彝族自治州布拖县',
+ '513430': '四川省凉山彝族自治州金阳县',
+ '513431': '四川省凉山彝族自治州昭觉县',
+ '513432': '四川省凉山彝族自治州喜德县',
+ '513433': '四川省凉山彝族自治州冕宁县',
+ '513434': '四川省凉山彝族自治州越西县',
+ '513435': '四川省凉山彝族自治州甘洛县',
+ '513436': '四川省凉山彝族自治州美姑县',
+ '513437': '四川省凉山彝族自治州雷波县',
+ '513700': '四川省巴中地区',
+ '513701': '四川省巴中地区巴中市',
+ '513721': '四川省巴中地区通江县',
+ '513722': '四川省巴中地区南江县',
+ '513723': '四川省巴中地区平昌县',
+ '513800': '四川省眉山地区',
+ '513821': '四川省眉山地区眉山县',
+ '513822': '四川省眉山地区仁寿县',
+ '513823': '四川省眉山地区彭山县',
+ '513824': '四川省眉山地区洪雅县',
+ '513825': '四川省眉山地区丹棱县',
+ '513826': '四川省眉山地区青神县',
+ '513900': '四川省眉山地区资阳地区',
+ '513901': '四川省眉山地区资阳市',
+ '513902': '四川省眉山地区简阳市',
+ '513921': '四川省眉山地区安岳县',
+ '513922': '四川省眉山地区乐至县',
+ '520000': '贵州省',
+ '520100': '贵州省贵阳市',
+ '520101': '贵州省贵阳市市辖区',
+ '520102': '贵州省贵阳市南明区',
+ '520103': '贵州省贵阳市云岩区',
+ '520111': '贵州省贵阳市花溪区',
+ '520112': '贵州省贵阳市乌当区',
+ '520113': '贵州省贵阳市白云区',
+ '520121': '贵州省贵阳市开阳县',
+ '520122': '贵州省贵阳市息烽县',
+ '520123': '贵州省贵阳市修文县',
+ '520181': '贵州省贵阳市清镇市',
+ '520200': '贵州省六盘水市',
+ '520201': '贵州省六盘水市钟山区',
+ '520202': '贵州省六盘水市盘县特区',
+ '520203': '贵州省六盘水市六枝特区',
+ '520221': '贵州省六盘水市水城县',
+ '520300': '贵州省遵义市',
+ '520301': '贵州省遵义市市辖区',
+ '520302': '贵州省遵义市红花岗区',
+ '520321': '贵州省遵义市遵义县',
+ '520322': '贵州省遵义市桐梓县',
+ '520323': '贵州省遵义市绥阳县',
+ '520324': '贵州省遵义市正安县',
+ '520325': '贵州省遵义市道真仡佬族苗族自治县',
+ '520326': '贵州省遵义市务川仡佬族苗族自治县',
+ '520327': '贵州省遵义市凤冈县',
+ '520328': '贵州省遵义市湄潭县',
+ '520329': '贵州省遵义市余庆县',
+ '520330': '贵州省遵义市习水县',
+ '520381': '贵州省遵义市赤水市',
+ '520382': '贵州省遵义市仁怀市',
+ '522200': '贵州省铜仁地区',
+ '522201': '贵州省铜仁地区铜仁市',
+ '522222': '贵州省铜仁地区江口县',
+ '522223': '贵州省铜仁地区玉屏侗族自治县',
+ '522224': '贵州省铜仁地区石阡县',
+ '522225': '贵州省铜仁地区思南县',
+ '522226': '贵州省铜仁地区印江土家族苗族自治县',
+ '522227': '贵州省铜仁地区德江县',
+ '522228': '贵州省铜仁地区沿河土家族自治县',
+ '522229': '贵州省铜仁地区松桃苗族自治县',
+ '522230': '贵州省铜仁地区万山特区',
+ '522300': '贵州省黔西南布依族苗族自治州',
+ '522301': '贵州省黔西南布依族苗族自治州兴义市',
+ '522322': '贵州省黔西南布依族苗族自治州兴仁县',
+ '522323': '贵州省黔西南布依族苗族自治州普安县',
+ '522324': '贵州省黔西南布依族苗族自治州晴隆县',
+ '522325': '贵州省黔西南布依族苗族自治州贞丰县',
+ '522326': '贵州省黔西南布依族苗族自治州望谟县',
+ '522327': '贵州省黔西南布依族苗族自治州册亨县',
+ '522328': '贵州省黔西南布依族苗族自治州安龙县',
+ '522400': '贵州省毕节地区',
+ '522401': '贵州省毕节地区毕节市',
+ '522422': '贵州省毕节地区大方县',
+ '522423': '贵州省毕节地区黔西县',
+ '522424': '贵州省毕节地区金沙县',
+ '522425': '贵州省毕节地区织金县',
+ '522426': '贵州省毕节地区纳雍县',
+ '522427': '贵州省毕节地区威宁彝族回族苗族自治县',
+ '522428': '贵州省毕节地区赫章县',
+ '522500': '贵州省安顺地区',
+ '522501': '贵州省安顺地区安顺市',
+ '522526': '贵州省安顺地区平坝县',
+ '522527': '贵州省安顺地区普定县',
+ '522528': '贵州省安顺地区关岭布依族苗族自治县',
+ '522529': '贵州省安顺地区镇宁布依族苗族自治县',
+ '522530': '贵州省安顺地区紫云苗族布依族自治县',
+ '522600': '贵州省黔东南苗族侗族自治州',
+ '522601': '贵州省黔东南苗族侗族自治州凯里市',
+ '522622': '贵州省黔东南苗族侗族自治州黄平县',
+ '522623': '贵州省黔东南苗族侗族自治州施秉县',
+ '522624': '贵州省黔东南苗族侗族自治州三穗县',
+ '522625': '贵州省黔东南苗族侗族自治州镇远县',
+ '522626': '贵州省黔东南苗族侗族自治州岑巩县',
+ '522627': '贵州省黔东南苗族侗族自治州天柱县',
+ '522628': '贵州省黔东南苗族侗族自治州锦屏县',
+ '522629': '贵州省黔东南苗族侗族自治州剑河县',
+ '522630': '贵州省黔东南苗族侗族自治州台江县',
+ '522631': '贵州省黔东南苗族侗族自治州黎平县',
+ '522632': '贵州省黔东南苗族侗族自治州榕江县',
+ '522633': '贵州省黔东南苗族侗族自治州从江县',
+ '522634': '贵州省黔东南苗族侗族自治州雷山县',
+ '522635': '贵州省黔东南苗族侗族自治州麻江县',
+ '522636': '贵州省黔东南苗族侗族自治州丹寨县',
+ '522700': '贵州省黔南布依族苗族自治州',
+ '522701': '贵州省黔南布依族苗族自治州都匀市',
+ '522702': '贵州省黔南布依族苗族自治州福泉市',
+ '522722': '贵州省黔南布依族苗族自治州荔波县',
+ '522723': '贵州省黔南布依族苗族自治州贵定县',
+ '522725': '贵州省黔南布依族苗族自治州瓮安县',
+ '522726': '贵州省黔南布依族苗族自治州独山县',
+ '522727': '贵州省黔南布依族苗族自治州平塘县',
+ '522728': '贵州省黔南布依族苗族自治州罗甸县',
+ '522729': '贵州省黔南布依族苗族自治州长顺县',
+ '522730': '贵州省黔南布依族苗族自治州龙里县',
+ '522731': '贵州省黔南布依族苗族自治州惠水县',
+ '522732': '贵州省黔南布依族苗族自治州三都水族自治县',
+ '530000': '云南省',
+ '530100': '云南省昆明市',
+ '530101': '云南省昆明市市辖区',
+ '530102': '云南省昆明市五华区',
+ '530103': '云南省昆明市盘龙区',
+ '530111': '云南省昆明市官渡区',
+ '530112': '云南省昆明市西山区',
+ '530113': '云南省昆明市东川区',
+ '530121': '云南省昆明市呈贡县',
+ '530122': '云南省昆明市晋宁县',
+ '530124': '云南省昆明市富民县',
+ '530125': '云南省昆明市宜良县',
+ '530126': '云南省昆明市石林彝族自治县',
+ '530127': '云南省昆明市嵩明县',
+ '530128': '云南省昆明市禄劝彝族苗族自治县',
+ '530129': '云南省昆明市寻甸回族彝族自治县',
+ '530181': '云南省昆明市安宁市',
+ '530300': '云南省曲靖市',
+ '530301': '云南省曲靖市市辖区',
+ '530302': '云南省曲靖市麒麟区',
+ '530321': '云南省曲靖市马龙县',
+ '530322': '云南省曲靖市陆良县',
+ '530323': '云南省曲靖市师宗县',
+ '530324': '云南省曲靖市罗平县',
+ '530325': '云南省曲靖市富源县',
+ '530326': '云南省曲靖市会泽县',
+ '530328': '云南省曲靖市沾益县',
+ '530381': '云南省曲靖市宣威市',
+ '530400': '云南省玉溪市',
+ '530401': '云南省玉溪市市辖区',
+ '530402': '云南省玉溪市红塔区',
+ '530421': '云南省玉溪市江川县',
+ '530422': '云南省玉溪市澄江县',
+ '530423': '云南省玉溪市通海县',
+ '530424': '云南省玉溪市华宁县',
+ '530425': '云南省玉溪市易门县',
+ '530426': '云南省玉溪市峨山彝族自治县',
+ '530427': '云南省玉溪市新平彝族傣族自治县',
+ '530428': '云南省玉溪市元江哈尼族彝族傣族自治县',
+ '532100': '云南省昭通地区',
+ '532101': '云南省昭通地区昭通市',
+ '532122': '云南省昭通地区鲁甸县',
+ '532123': '云南省昭通地区巧家县',
+ '532124': '云南省昭通地区盐津县',
+ '532125': '云南省昭通地区大关县',
+ '532126': '云南省昭通地区永善县',
+ '532127': '云南省昭通地区绥江县',
+ '532128': '云南省昭通地区镇雄县',
+ '532129': '云南省昭通地区彝良县',
+ '532130': '云南省昭通地区威信县',
+ '532131': '云南省昭通地区水富县',
+ '532300': '云南省楚雄彝族自治州',
+ '532301': '云南省楚雄彝族自治州楚雄市',
+ '532322': '云南省楚雄彝族自治州双柏县',
+ '532323': '云南省楚雄彝族自治州牟定县',
+ '532324': '云南省楚雄彝族自治州南华县',
+ '532325': '云南省楚雄彝族自治州姚安县',
+ '532326': '云南省楚雄彝族自治州大姚县',
+ '532327': '云南省楚雄彝族自治州永仁县',
+ '532328': '云南省楚雄彝族自治州元谋县',
+ '532329': '云南省楚雄彝族自治州武定县',
+ '532331': '云南省楚雄彝族自治州禄丰县',
+ '532500': '云南省红河哈尼族彝族自治州',
+ '532501': '云南省红河哈尼族彝族自治州个旧市',
+ '532502': '云南省红河哈尼族彝族自治州开远市',
+ '532522': '云南省红河哈尼族彝族自治州蒙自县',
+ '532523': '云南省红河哈尼族彝族自治州屏边苗族自治县',
+ '532524': '云南省红河哈尼族彝族自治州建水县',
+ '532525': '云南省红河哈尼族彝族自治州石屏县',
+ '532526': '云南省红河哈尼族彝族自治州弥勒县',
+ '532527': '云南省红河哈尼族彝族自治州泸西县',
+ '532528': '云南省红河哈尼族彝族自治州元阳县',
+ '532529': '云南省红河哈尼族彝族自治州红河县',
+ '532530': '云南省红河哈尼族彝族自治州金平苗族瑶族傣族自治县',
+ '532531': '云南省红河哈尼族彝族自治州绿春县',
+ '532532': '云南省红河哈尼族彝族自治州河口瑶族自治县',
+ '532600': '云南省文山壮族苗族自治州',
+ '532621': '云南省文山壮族苗族自治州文山县',
+ '532622': '云南省文山壮族苗族自治州砚山县',
+ '532623': '云南省文山壮族苗族自治州西畴县',
+ '532624': '云南省文山壮族苗族自治州麻栗坡县',
+ '532625': '云南省文山壮族苗族自治州马关县',
+ '532626': '云南省文山壮族苗族自治州丘北县',
+ '532627': '云南省文山壮族苗族自治州广南县',
+ '532628': '云南省文山壮族苗族自治州富宁县',
+ '532700': '云南省思茅地区',
+ '532701': '云南省思茅地区思茅市',
+ '532722': '云南省思茅地区普洱哈尼族彝族自治县',
+ '532723': '云南省思茅地区墨江哈尼族自治县',
+ '532724': '云南省思茅地区景东彝族自治县',
+ '532725': '云南省思茅地区景谷傣族彝族自治县',
+ '532726': '云南省思茅地区镇沅彝族哈尼族拉祜族自治县',
+ '532727': '云南省思茅地区江城哈尼族彝族自治县',
+ '532728': '云南省思茅地区孟连傣族拉祜族佤族自治县',
+ '532729': '云南省思茅地区澜沧拉祜族自治县',
+ '532730': '云南省思茅地区西盟佤族自治县',
+ '532800': '云南省西双版纳傣族自治州',
+ '532801': '云南省西双版纳傣族自治州景洪市',
+ '532822': '云南省西双版纳傣族自治州勐海县',
+ '532823': '云南省西双版纳傣族自治州勐腊县',
+ '532900': '云南省大理白族自治州',
+ '532901': '云南省大理白族自治州大理市',
+ '532922': '云南省大理白族自治州漾濞彝族自治县',
+ '532923': '云南省大理白族自治州祥云县',
+ '532924': '云南省大理白族自治州宾川县',
+ '532925': '云南省大理白族自治州弥渡县',
+ '532926': '云南省大理白族自治州南涧彝族自治县',
+ '532927': '云南省大理白族自治州巍山彝族回族自治县',
+ '532928': '云南省大理白族自治州永平县',
+ '532929': '云南省大理白族自治州云龙县',
+ '532930': '云南省大理白族自治州洱源县',
+ '532931': '云南省大理白族自治州剑川县',
+ '532932': '云南省大理白族自治州鹤庆县',
+ '533000': '云南省保山地区',
+ '533001': '云南省保山地区保山市',
+ '533022': '云南省保山地区施甸县',
+ '533023': '云南省保山地区腾冲县',
+ '533024': '云南省保山地区龙陵县',
+ '533025': '云南省保山地区昌宁县',
+ '533100': '云南省德宏傣族景颇族自治州',
+ '533101': '云南省德宏傣族景颇族自治州畹町市',
+ '533102': '云南省德宏傣族景颇族自治州瑞丽市',
+ '533103': '云南省德宏傣族景颇族自治州潞西市',
+ '533122': '云南省德宏傣族景颇族自治州梁河县',
+ '533123': '云南省德宏傣族景颇族自治州盈江县',
+ '533124': '云南省德宏傣族景颇族自治州陇川县',
+ '533200': '云南省丽江地区',
+ '533221': '云南省丽江地区丽江纳西族自治县',
+ '533222': '云南省丽江地区永胜县',
+ '533223': '云南省丽江地区华坪县',
+ '533224': '云南省丽江地区宁蒗彝族自治县',
+ '533300': '云南省怒江傈僳族自治州',
+ '533321': '云南省怒江傈僳族自治州泸水县',
+ '533323': '云南省怒江傈僳族自治州福贡县',
+ '533324': '云南省怒江傈僳族自治州贡山独龙族怒族自治县',
+ '533325': '云南省怒江傈僳族自治州兰坪白族普米族自治县',
+ '533400': '云南省迪庆藏族自治州',
+ '533421': '云南省迪庆藏族自治州中甸县',
+ '533422': '云南省迪庆藏族自治州德钦县',
+ '533423': '云南省迪庆藏族自治州维西傈僳族自治县',
+ '533500': '云南省临沧地区',
+ '533521': '云南省临沧地区临沧县',
+ '533522': '云南省临沧地区凤庆县',
+ '533523': '云南省临沧地区云县',
+ '533524': '云南省临沧地区永德县',
+ '533525': '云南省临沧地区镇康县',
+ '533526': '云南省临沧地区双江拉祜族佤族布朗族傣族自治县',
+ '533527': '云南省临沧地区耿马傣族佤族自治县',
+ '533528': '云南省临沧地区沧源佤族自治县',
+ '540000': '西藏自治区',
+ '540100': '西藏自治区拉萨市',
+ '540101': '西藏自治区拉萨市市辖区',
+ '540102': '西藏自治区拉萨市城关区',
+ '540121': '西藏自治区拉萨市林周县',
+ '540122': '西藏自治区拉萨市当雄县',
+ '540123': '西藏自治区拉萨市尼木县',
+ '540124': '西藏自治区拉萨市曲水县',
+ '540125': '西藏自治区拉萨市堆龙德庆县',
+ '540126': '西藏自治区拉萨市达孜县',
+ '540127': '西藏自治区拉萨市墨竹工卡县',
+ '542100': '西藏自治区昌都地区',
+ '542121': '西藏自治区昌都地区昌都县',
+ '542122': '西藏自治区昌都地区江达县',
+ '542123': '西藏自治区昌都地区贡觉县',
+ '542124': '西藏自治区昌都地区类乌齐县',
+ '542125': '西藏自治区昌都地区丁青县',
+ '542126': '西藏自治区昌都地区察雅县',
+ '542127': '西藏自治区昌都地区八宿县',
+ '542128': '西藏自治区昌都地区左贡县',
+ '542129': '西藏自治区昌都地区芒康县',
+ '542132': '西藏自治区昌都地区洛隆县',
+ '542133': '西藏自治区昌都地区边坝县',
+ '542134': '西藏自治区昌都地区盐井县',
+ '542135': '西藏自治区昌都地区碧土县',
+ '542136': '西藏自治区昌都地区妥坝县',
+ '542137': '西藏自治区昌都地区生达县',
+ '542200': '西藏自治区山南地区',
+ '542221': '西藏自治区山南地区乃东县',
+ '542222': '西藏自治区山南地区扎囊县',
+ '542223': '西藏自治区山南地区贡嘎县',
+ '542224': '西藏自治区山南地区桑日县',
+ '542225': '西藏自治区山南地区琼结县',
+ '542226': '西藏自治区山南地区曲松县',
+ '542227': '西藏自治区山南地区措美县',
+ '542228': '西藏自治区山南地区洛扎县',
+ '542229': '西藏自治区山南地区加查县',
+ '542231': '西藏自治区山南地区隆子县',
+ '542232': '西藏自治区山南地区错那县',
+ '542233': '西藏自治区山南地区浪卡子县',
+ '542300': '西藏自治区日喀则地区',
+ '542301': '西藏自治区日喀则地区日喀则市',
+ '542322': '西藏自治区日喀则地区南木林县',
+ '542323': '西藏自治区日喀则地区江孜县',
+ '542324': '西藏自治区日喀则地区定日县',
+ '542325': '西藏自治区日喀则地区萨迦县',
+ '542326': '西藏自治区日喀则地区拉孜县',
+ '542327': '西藏自治区日喀则地区昂仁县',
+ '542328': '西藏自治区日喀则地区谢通门县',
+ '542329': '西藏自治区日喀则地区白朗县',
+ '542330': '西藏自治区日喀则地区仁布县',
+ '542331': '西藏自治区日喀则地区康马县',
+ '542332': '西藏自治区日喀则地区定结县',
+ '542333': '西藏自治区日喀则地区仲巴县',
+ '542334': '西藏自治区日喀则地区亚东县',
+ '542335': '西藏自治区日喀则地区吉隆县',
+ '542336': '西藏自治区日喀则地区聂拉木县',
+ '542337': '西藏自治区日喀则地区萨嘎县',
+ '542338': '西藏自治区日喀则地区岗巴县',
+ '542400': '西藏自治区那曲地区',
+ '542421': '西藏自治区那曲地区那曲县',
+ '542422': '西藏自治区那曲地区嘉黎县',
+ '542423': '西藏自治区那曲地区比如县',
+ '542424': '西藏自治区那曲地区聂荣县',
+ '542425': '西藏自治区那曲地区安多县',
+ '542426': '西藏自治区那曲地区申扎县',
+ '542427': '西藏自治区那曲地区索县',
+ '542428': '西藏自治区那曲地区班戈县',
+ '542429': '西藏自治区那曲地区巴青县',
+ '542430': '西藏自治区那曲地区尼玛县',
+ '542500': '西藏自治区阿里地区',
+ '542521': '西藏自治区阿里地区普兰县',
+ '542522': '西藏自治区阿里地区札达县',
+ '542523': '西藏自治区阿里地区噶尔县',
+ '542524': '西藏自治区阿里地区日土县',
+ '542525': '西藏自治区阿里地区革吉县',
+ '542526': '西藏自治区阿里地区改则县',
+ '542527': '西藏自治区阿里地区措勤县',
+ '542528': '西藏自治区阿里地区隆格尔县',
+ '542600': '西藏自治区林芝地区',
+ '542621': '西藏自治区林芝地区林芝县',
+ '542622': '西藏自治区林芝地区工布江达县',
+ '542623': '西藏自治区林芝地区米林县',
+ '542624': '西藏自治区林芝地区墨脱县',
+ '542625': '西藏自治区林芝地区波密县',
+ '542626': '西藏自治区林芝地区察隅县',
+ '542627': '西藏自治区林芝地区朗县',
+ '610000': '陕西省',
+ '610100': '陕西省西安市',
+ '610101': '陕西省西安市市辖区',
+ '610102': '陕西省西安市新城区',
+ '610103': '陕西省西安市碑林区',
+ '610104': '陕西省西安市莲湖区',
+ '610111': '陕西省西安市灞桥区',
+ '610112': '陕西省西安市未央区',
+ '610113': '陕西省西安市雁塔区',
+ '610114': '陕西省西安市阎良区',
+ '610115': '陕西省西安市临潼区',
+ '610121': '陕西省西安市长安县',
+ '610122': '陕西省西安市蓝田县',
+ '610124': '陕西省西安市周至县',
+ '610125': '陕西省西安市户县',
+ '610126': '陕西省西安市高陵县',
+ '610200': '陕西省铜川市',
+ '610201': '陕西省铜川市市辖区',
+ '610202': '陕西省铜川市城区',
+ '610203': '陕西省铜川市郊区',
+ '610221': '陕西省铜川市耀县',
+ '610222': '陕西省铜川市宜君县',
+ '610300': '陕西省宝鸡市',
+ '610301': '陕西省宝鸡市市辖区',
+ '610302': '陕西省宝鸡市渭滨区',
+ '610303': '陕西省宝鸡市金台区',
+ '610321': '陕西省宝鸡市宝鸡县',
+ '610322': '陕西省宝鸡市凤翔县',
+ '610323': '陕西省宝鸡市岐山县',
+ '610324': '陕西省宝鸡市扶风县',
+ '610326': '陕西省宝鸡市眉县',
+ '610327': '陕西省宝鸡市陇县',
+ '610328': '陕西省宝鸡市千阳县',
+ '610329': '陕西省宝鸡市麟游县',
+ '610330': '陕西省宝鸡市凤县',
+ '610331': '陕西省宝鸡市太白县',
+ '610400': '陕西省咸阳市',
+ '610401': '陕西省咸阳市市辖区',
+ '610402': '陕西省咸阳市秦都区',
+ '610403': '陕西省咸阳市杨陵区',
+ '610404': '陕西省咸阳市渭城区',
+ '610422': '陕西省咸阳市三原县',
+ '610423': '陕西省咸阳市泾阳县',
+ '610424': '陕西省咸阳市乾县',
+ '610425': '陕西省咸阳市礼泉县',
+ '610426': '陕西省咸阳市永寿县',
+ '610427': '陕西省咸阳市彬县',
+ '610428': '陕西省咸阳市长武县',
+ '610429': '陕西省咸阳市旬邑县',
+ '610430': '陕西省咸阳市淳化县',
+ '610431': '陕西省咸阳市武功县',
+ '610481': '陕西省咸阳市兴平市',
+ '610500': '陕西省渭南市',
+ '610501': '陕西省渭南市市辖区',
+ '610502': '陕西省渭南市临渭区',
+ '610521': '陕西省渭南市华县',
+ '610522': '陕西省渭南市潼关县',
+ '610523': '陕西省渭南市大荔县',
+ '610524': '陕西省渭南市合阳县',
+ '610525': '陕西省渭南市澄城县',
+ '610526': '陕西省渭南市蒲城县',
+ '610527': '陕西省渭南市白水县',
+ '610528': '陕西省渭南市富平县',
+ '610581': '陕西省渭南市韩城市',
+ '610582': '陕西省渭南市华阴市',
+ '610600': '陕西省延安市',
+ '610601': '陕西省延安市市辖区',
+ '610602': '陕西省延安市宝塔区',
+ '610621': '陕西省延安市延长县',
+ '610622': '陕西省延安市延川县',
+ '610623': '陕西省延安市子长县',
+ '610624': '陕西省延安市安塞县',
+ '610625': '陕西省延安市志丹县',
+ '610626': '陕西省延安市吴旗县',
+ '610627': '陕西省延安市甘泉县',
+ '610628': '陕西省延安市富县',
+ '610629': '陕西省延安市洛川县',
+ '610630': '陕西省延安市宜川县',
+ '610631': '陕西省延安市黄龙县',
+ '610632': '陕西省延安市黄陵县',
+ '610700': '陕西省汉中市',
+ '610701': '陕西省汉中市市辖区',
+ '610702': '陕西省汉中市汉台区',
+ '610721': '陕西省汉中市南郑县',
+ '610722': '陕西省汉中市城固县',
+ '610723': '陕西省汉中市洋县',
+ '610724': '陕西省汉中市西乡县',
+ '610725': '陕西省汉中市勉县',
+ '610726': '陕西省汉中市宁强县',
+ '610727': '陕西省汉中市略阳县',
+ '610728': '陕西省汉中市镇巴县',
+ '610729': '陕西省汉中市留坝县',
+ '610730': '陕西省汉中市佛坪县',
+ '612400': '陕西省安康地区',
+ '612401': '陕西省安康地区安康市',
+ '612422': '陕西省安康地区汉阴县',
+ '612423': '陕西省安康地区石泉县',
+ '612424': '陕西省安康地区宁陕县',
+ '612425': '陕西省安康地区紫阳县',
+ '612426': '陕西省安康地区岚皋县',
+ '612427': '陕西省安康地区平利县',
+ '612428': '陕西省安康地区镇坪县',
+ '612429': '陕西省安康地区旬阳县',
+ '612430': '陕西省安康地区白河县',
+ '612500': '陕西省商洛地区',
+ '612501': '陕西省商洛地区商州市',
+ '612522': '陕西省商洛地区洛南县',
+ '612523': '陕西省商洛地区丹凤县',
+ '612524': '陕西省商洛地区商南县',
+ '612525': '陕西省商洛地区山阳县',
+ '612526': '陕西省商洛地区镇安县',
+ '612527': '陕西省商洛地区柞水县',
+ '612700': '陕西省榆林地区',
+ '612701': '陕西省榆林地区榆林市',
+ '612722': '陕西省榆林地区神木县',
+ '612723': '陕西省榆林地区府谷县',
+ '612724': '陕西省榆林地区横山县',
+ '612725': '陕西省榆林地区靖边县',
+ '612726': '陕西省榆林地区定边县',
+ '612727': '陕西省榆林地区绥德县',
+ '612728': '陕西省榆林地区米脂县',
+ '612729': '陕西省榆林地区佳县',
+ '612730': '陕西省榆林地区吴堡县',
+ '612731': '陕西省榆林地区清涧县',
+ '612732': '陕西省榆林地区子洲县',
+ '620000': '甘肃省',
+ '620100': '甘肃省兰州市',
+ '620101': '甘肃省兰州市市辖区',
+ '620102': '甘肃省兰州市城关区',
+ '620103': '甘肃省兰州市七里河区',
+ '620104': '甘肃省兰州市西固区',
+ '620105': '甘肃省兰州市安宁区',
+ '620111': '甘肃省兰州市红古区',
+ '620121': '甘肃省兰州市永登县',
+ '620122': '甘肃省兰州市皋兰县',
+ '620123': '甘肃省兰州市榆中县',
+ '620200': '甘肃省嘉峪关市',
+ '620201': '甘肃省嘉峪关市市辖区',
+ '620300': '甘肃省嘉峪关市金昌市',
+ '620301': '甘肃省嘉峪关市市辖区',
+ '620302': '甘肃省嘉峪关市金川区',
+ '620321': '甘肃省嘉峪关市永昌县',
+ '620400': '甘肃省白银市',
+ '620401': '甘肃省白银市市辖区',
+ '620402': '甘肃省白银市白银区',
+ '620403': '甘肃省白银市平川区',
+ '620421': '甘肃省白银市靖远县',
+ '620422': '甘肃省白银市会宁县',
+ '620423': '甘肃省白银市景泰县',
+ '620500': '甘肃省天水市',
+ '620501': '甘肃省天水市市辖区',
+ '620502': '甘肃省天水市秦城区',
+ '620503': '甘肃省天水市北道区',
+ '620521': '甘肃省天水市清水县',
+ '620522': '甘肃省天水市秦安县',
+ '620523': '甘肃省天水市甘谷县',
+ '620524': '甘肃省天水市武山县',
+ '620525': '甘肃省天水市张家川回族自治县',
+ '622100': '甘肃省酒泉地区',
+ '622101': '甘肃省酒泉地区玉门市',
+ '622102': '甘肃省酒泉地区酒泉市',
+ '622103': '甘肃省酒泉地区敦煌市',
+ '622123': '甘肃省酒泉地区金塔县',
+ '622124': '甘肃省酒泉地区肃北蒙古族自治县',
+ '622125': '甘肃省酒泉地区阿克塞哈萨克族自治县',
+ '622126': '甘肃省酒泉地区安西县',
+ '622200': '甘肃省张掖地区',
+ '622201': '甘肃省张掖地区张掖市',
+ '622222': '甘肃省张掖地区肃南裕固族自治县',
+ '622223': '甘肃省张掖地区民乐县',
+ '622224': '甘肃省张掖地区临泽县',
+ '622225': '甘肃省张掖地区高台县',
+ '622226': '甘肃省张掖地区山丹县',
+ '622300': '甘肃省武威地区',
+ '622301': '甘肃省武威地区武威市',
+ '622322': '甘肃省武威地区民勤县',
+ '622323': '甘肃省武威地区古浪县',
+ '622326': '甘肃省武威地区天祝藏族自治县',
+ '622400': '甘肃省定西地区',
+ '622421': '甘肃省定西地区定西县',
+ '622424': '甘肃省定西地区通渭县',
+ '622425': '甘肃省定西地区陇西县',
+ '622426': '甘肃省定西地区渭源县',
+ '622427': '甘肃省定西地区临洮县',
+ '622428': '甘肃省定西地区漳县',
+ '622429': '甘肃省定西地区岷县',
+ '622600': '甘肃省陇南地区',
+ '622621': '甘肃省陇南地区武都县',
+ '622623': '甘肃省陇南地区宕昌县',
+ '622624': '甘肃省陇南地区成县',
+ '622625': '甘肃省陇南地区康县',
+ '622626': '甘肃省陇南地区文县',
+ '622627': '甘肃省陇南地区西和县',
+ '622628': '甘肃省陇南地区礼县',
+ '622629': '甘肃省陇南地区两当县',
+ '622630': '甘肃省陇南地区徽县',
+ '622700': '甘肃省平凉地区',
+ '622701': '甘肃省平凉地区平凉市',
+ '622722': '甘肃省平凉地区泾川县',
+ '622723': '甘肃省平凉地区灵台县',
+ '622724': '甘肃省平凉地区崇信县',
+ '622725': '甘肃省平凉地区华亭县',
+ '622726': '甘肃省平凉地区庄浪县',
+ '622727': '甘肃省平凉地区静宁县',
+ '622800': '甘肃省庆阳地区',
+ '622801': '甘肃省庆阳地区西峰市',
+ '622821': '甘肃省庆阳地区庆阳县',
+ '622822': '甘肃省庆阳地区环县',
+ '622823': '甘肃省庆阳地区华池县',
+ '622824': '甘肃省庆阳地区合水县',
+ '622825': '甘肃省庆阳地区正宁县',
+ '622826': '甘肃省庆阳地区宁县',
+ '622827': '甘肃省庆阳地区镇原县',
+ '622900': '甘肃省临夏回族自治州',
+ '622901': '甘肃省临夏回族自治州临夏市',
+ '622921': '甘肃省临夏回族自治州临夏县',
+ '622922': '甘肃省临夏回族自治州康乐县',
+ '622923': '甘肃省临夏回族自治州永靖县',
+ '622924': '甘肃省临夏回族自治州广河县',
+ '622925': '甘肃省临夏回族自治州和政县',
+ '622926': '甘肃省临夏回族自治州东乡族自治县',
+ '622927': '甘肃省临夏回族自治州积石山保安族东乡族撒拉族自治县',
+ '623000': '甘肃省甘南藏族自治州',
+ '623001': '甘肃省甘南藏族自治州合作市',
+ '623021': '甘肃省甘南藏族自治州临潭县',
+ '623022': '甘肃省甘南藏族自治州卓尼县',
+ '623023': '甘肃省甘南藏族自治州舟曲县',
+ '623024': '甘肃省甘南藏族自治州迭部县',
+ '623025': '甘肃省甘南藏族自治州玛曲县',
+ '623026': '甘肃省甘南藏族自治州碌曲县',
+ '623027': '甘肃省甘南藏族自治州夏河县',
+ '630000': '青海省',
+ '630100': '青海省西宁市',
+ '630101': '青海省西宁市市辖区',
+ '630102': '青海省西宁市城东区',
+ '630103': '青海省西宁市城中区',
+ '630104': '青海省西宁市城西区',
+ '630105': '青海省西宁市城北区',
+ '630121': '青海省西宁市大通回族土族自治县',
+ '632100': '青海省海东地区',
+ '632121': '青海省海东地区平安县',
+ '632122': '青海省海东地区民和回族土族自治县',
+ '632123': '青海省海东地区乐都县',
+ '632124': '青海省海东地区湟中县',
+ '632125': '青海省海东地区湟源县',
+ '632126': '青海省海东地区互助土族自治县',
+ '632127': '青海省海东地区化隆回族自治县',
+ '632128': '青海省海东地区循化撒拉族自治县',
+ '632200': '青海省海北藏族自治州',
+ '632221': '青海省海北藏族自治州门源回族自治县',
+ '632222': '青海省海北藏族自治州祁连县',
+ '632223': '青海省海北藏族自治州海晏县',
+ '632224': '青海省海北藏族自治州刚察县',
+ '632300': '青海省黄南藏族自治州',
+ '632321': '青海省黄南藏族自治州同仁县',
+ '632322': '青海省黄南藏族自治州尖扎县',
+ '632323': '青海省黄南藏族自治州泽库县',
+ '632324': '青海省黄南藏族自治州河南蒙古族自治县',
+ '632500': '青海省海南藏族自治州',
+ '632521': '青海省海南藏族自治州共和县',
+ '632522': '青海省海南藏族自治州同德县',
+ '632523': '青海省海南藏族自治州贵德县',
+ '632524': '青海省海南藏族自治州兴海县',
+ '632525': '青海省海南藏族自治州贵南县',
+ '632600': '青海省果洛藏族自治州',
+ '632621': '青海省果洛藏族自治州玛沁县',
+ '632622': '青海省果洛藏族自治州班玛县',
+ '632623': '青海省果洛藏族自治州甘德县',
+ '632624': '青海省果洛藏族自治州达日县',
+ '632625': '青海省果洛藏族自治州久治县',
+ '632626': '青海省果洛藏族自治州玛多县',
+ '632700': '青海省玉树藏族自治州',
+ '632721': '青海省玉树藏族自治州玉树县',
+ '632722': '青海省玉树藏族自治州杂多县',
+ '632723': '青海省玉树藏族自治州称多县',
+ '632724': '青海省玉树藏族自治州治多县',
+ '632725': '青海省玉树藏族自治州囊谦县',
+ '632726': '青海省玉树藏族自治州曲麻莱县',
+ '632800': '青海省海西蒙古族藏族自治州',
+ '632801': '青海省海西蒙古族藏族自治州格尔木市',
+ '632802': '青海省海西蒙古族藏族自治州德令哈市',
+ '632821': '青海省海西蒙古族藏族自治州乌兰县',
+ '632822': '青海省海西蒙古族藏族自治州都兰县',
+ '632823': '青海省海西蒙古族藏族自治州天峻县',
+ '640000': '宁夏回族自治区',
+ '640100': '宁夏回族自治区银川市',
+ '640101': '宁夏回族自治区银川市市辖区',
+ '640102': '宁夏回族自治区银川市城区',
+ '640103': '宁夏回族自治区银川市新城区',
+ '640111': '宁夏回族自治区银川市郊区',
+ '640121': '宁夏回族自治区银川市永宁县',
+ '640122': '宁夏回族自治区银川市贺兰县',
+ '640200': '宁夏回族自治区石嘴山市',
+ '640201': '宁夏回族自治区石嘴山市市辖区',
+ '640202': '宁夏回族自治区石嘴山市大武口区',
+ '640203': '宁夏回族自治区石嘴山市石嘴山区',
+ '640204': '宁夏回族自治区石嘴山市石炭井区',
+ '640221': '宁夏回族自治区石嘴山市平罗县',
+ '640222': '宁夏回族自治区石嘴山市陶乐县',
+ '640223': '宁夏回族自治区石嘴山市惠农县',
+ '640300': '宁夏回族自治区吴忠市',
+ '640301': '宁夏回族自治区吴忠市市辖区',
+ '640302': '宁夏回族自治区吴忠市利通区',
+ '640321': '宁夏回族自治区吴忠市中卫县',
+ '640322': '宁夏回族自治区吴忠市中宁县',
+ '640323': '宁夏回族自治区吴忠市盐池县',
+ '640324': '宁夏回族自治区吴忠市同心县',
+ '640381': '宁夏回族自治区吴忠市青铜峡市',
+ '640382': '宁夏回族自治区吴忠市灵武市',
+ '642200': '宁夏回族自治区固原地区',
+ '642221': '宁夏回族自治区固原地区固原县',
+ '642222': '宁夏回族自治区固原地区海原县',
+ '642223': '宁夏回族自治区固原地区西吉县',
+ '642224': '宁夏回族自治区固原地区隆德县',
+ '642225': '宁夏回族自治区固原地区泾源县',
+ '642226': '宁夏回族自治区固原地区彭阳县',
+ '650000': '新疆维吾尔自治区',
+ '650100': '新疆维吾尔族自治区乌鲁木齐市',
+ '650101': '新疆维吾尔族自治区乌鲁木齐市市辖区',
+ '650102': '新疆维吾尔族自治区乌鲁木齐市天山区',
+ '650103': '新疆维吾尔族自治区乌鲁木齐市沙依巴克区',
+ '650104': '新疆维吾尔族自治区乌鲁木齐市新市区',
+ '650105': '新疆维吾尔族自治区乌鲁木齐市水磨沟区',
+ '650106': '新疆维吾尔族自治区乌鲁木齐市头屯河区',
+ '650107': '新疆维吾尔族自治区乌鲁木齐市南山矿区',
+ '650108': '新疆维吾尔族自治区乌鲁木齐市东山区',
+ '650121': '新疆维吾尔族自治区乌鲁木齐市乌鲁木齐县',
+ '650200': '新疆维吾尔族自治区克拉玛依市',
+ '650201': '新疆维吾尔族自治区克拉玛依市市辖区',
+ '650202': '新疆维吾尔族自治区克拉玛依市独山子区',
+ '650203': '新疆维吾尔族自治区克拉玛依市克拉玛依区',
+ '650204': '新疆维吾尔族自治区克拉玛依市白碱滩区',
+ '650205': '新疆维吾尔族自治区克拉玛依市乌尔禾区',
+ '652100': '新疆维吾尔族自治区吐鲁番地区',
+ '652101': '新疆维吾尔族自治区吐鲁番地区吐鲁番市',
+ '652122': '新疆维吾尔族自治区吐鲁番地区鄯善县',
+ '652123': '新疆维吾尔族自治区吐鲁番地区托克逊县',
+ '652200': '新疆维吾尔族自治区哈密地区',
+ '652201': '新疆维吾尔族自治区哈密地区哈密市',
+ '652222': '新疆维吾尔族自治区哈密地区巴里坤哈萨克自治县',
+ '652223': '新疆维吾尔族自治区哈密地区伊吾县',
+ '652300': '新疆维吾尔族自治区昌吉回族自治州',
+ '652301': '新疆维吾尔族自治区昌吉回族自治州昌吉市',
+ '652302': '新疆维吾尔族自治区昌吉回族自治州阜康市',
+ '652303': '新疆维吾尔族自治区昌吉回族自治州米泉市',
+ '652323': '新疆维吾尔族自治区昌吉回族自治州呼图壁县',
+ '652324': '新疆维吾尔族自治区昌吉回族自治州玛纳斯县',
+ '652325': '新疆维吾尔族自治区昌吉回族自治州奇台县',
+ '652327': '新疆维吾尔族自治区昌吉回族自治州吉木萨尔县',
+ '652328': '新疆维吾尔族自治区昌吉回族自治州木垒哈萨克自治县',
+ '652700': '新疆维吾尔族自治区博尔塔拉蒙古自治州',
+ '652701': '新疆维吾尔族自治区博尔塔拉蒙古自治州博乐市',
+ '652722': '新疆维吾尔族自治区博尔塔拉蒙古自治州精河县',
+ '652723': '新疆维吾尔族自治区博尔塔拉蒙古自治州温泉县',
+ '652800': '新疆维吾尔族自治区巴音郭楞蒙古自治州',
+ '652801': '新疆维吾尔族自治区巴音郭楞蒙古自治州库尔勒市',
+ '652822': '新疆维吾尔族自治区巴音郭楞蒙古自治州轮台县',
+ '652823': '新疆维吾尔族自治区巴音郭楞蒙古自治州尉犁县',
+ '652824': '新疆维吾尔族自治区巴音郭楞蒙古自治州若羌县',
+ '652825': '新疆维吾尔族自治区巴音郭楞蒙古自治州且末县',
+ '652826': '新疆维吾尔族自治区巴音郭楞蒙古自治州焉耆回族自治县',
+ '652827': '新疆维吾尔族自治区巴音郭楞蒙古自治州和静县',
+ '652828': '新疆维吾尔族自治区巴音郭楞蒙古自治州和硕县',
+ '652829': '新疆维吾尔族自治区巴音郭楞蒙古自治州博湖县',
+ '652900': '新疆维吾尔族自治区阿克苏地区',
+ '652901': '新疆维吾尔族自治区阿克苏地区阿克苏市',
+ '652922': '新疆维吾尔族自治区阿克苏地区温宿县',
+ '652923': '新疆维吾尔族自治区阿克苏地区库车县',
+ '652924': '新疆维吾尔族自治区阿克苏地区沙雅县',
+ '652925': '新疆维吾尔族自治区阿克苏地区新和县',
+ '652926': '新疆维吾尔族自治区阿克苏地区拜城县',
+ '652927': '新疆维吾尔族自治区阿克苏地区乌什县',
+ '652928': '新疆维吾尔族自治区阿克苏地区阿瓦提县',
+ '652929': '新疆维吾尔族自治区阿克苏地区柯坪县',
+ '653000': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州',
+ '653001': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿图什市',
+ '653022': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿克陶县',
+ '653023': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿合奇县',
+ '653024': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州乌恰县',
+ '653100': '新疆维吾尔族自治区喀什地区',
+ '653101': '新疆维吾尔族自治区喀什地区喀什市',
+ '653121': '新疆维吾尔族自治区喀什地区疏附县',
+ '653122': '新疆维吾尔族自治区喀什地区疏勒县',
+ '653123': '新疆维吾尔族自治区喀什地区英吉沙县',
+ '653124': '新疆维吾尔族自治区喀什地区泽普县',
+ '653125': '新疆维吾尔族自治区喀什地区莎车县',
+ '653126': '新疆维吾尔族自治区喀什地区叶城县',
+ '653127': '新疆维吾尔族自治区喀什地区麦盖提县',
+ '653128': '新疆维吾尔族自治区喀什地区岳普湖县',
+ '653129': '新疆维吾尔族自治区喀什地区伽师县',
+ '653130': '新疆维吾尔族自治区喀什地区巴楚县',
+ '653131': '新疆维吾尔族自治区喀什地区塔什库尔干塔吉克自治县',
+ '653200': '新疆维吾尔族自治区和田地区',
+ '653201': '新疆维吾尔族自治区和田地区和田市',
+ '653221': '新疆维吾尔族自治区和田地区和田县',
+ '653222': '新疆维吾尔族自治区和田地区墨玉县',
+ '653223': '新疆维吾尔族自治区和田地区皮山县',
+ '653224': '新疆维吾尔族自治区和田地区洛浦县',
+ '653225': '新疆维吾尔族自治区和田地区策勒县',
+ '653226': '新疆维吾尔族自治区和田地区于田县',
+ '653227': '新疆维吾尔族自治区和田地区民丰县',
+ '654000': '新疆维吾尔族自治区伊犁哈萨克自治州',
+ '654001': '新疆维吾尔族自治区伊犁哈萨克自治州奎屯市',
+ '654100': '新疆维吾尔族自治区伊犁哈萨克自治州伊犁地区',
+ '654101': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁市',
+ '654121': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁县',
+ '654122': '新疆自治区伊犁哈萨克自治州察布查尔锡伯自治县',
+ '654123': '新疆维吾尔族自治区伊犁哈萨克自治州霍城县',
+ '654124': '新疆维吾尔族自治区伊犁哈萨克自治州巩留县',
+ '654125': '新疆维吾尔族自治区伊犁哈萨克自治州新源县',
+ '654126': '新疆维吾尔族自治区伊犁哈萨克自治州昭苏县',
+ '654127': '新疆维吾尔族自治区伊犁哈萨克自治州特克斯县',
+ '654128': '新疆维吾尔族自治区伊犁哈萨克自治州尼勒克县',
+ '654200': '新疆维吾尔族自治区塔城地区',
+ '654201': '新疆维吾尔族自治区塔城地区塔城市',
+ '654202': '新疆维吾尔族自治区塔城地区乌苏市',
+ '654221': '新疆维吾尔族自治区塔城地区额敏县',
+ '654223': '新疆维吾尔族自治区塔城地区沙湾县',
+ '654224': '新疆维吾尔族自治区塔城地区托里县',
+ '654225': '新疆维吾尔族自治区塔城地区裕民县',
+ '654226': '新疆维吾尔族自治区塔城地区和布克赛尔蒙古自治县',
+ '654300': '新疆维吾尔族自治区阿勒泰地区',
+ '654301': '新疆维吾尔族自治区阿勒泰地区阿勒泰市',
+ '654321': '新疆维吾尔族自治区阿勒泰地区布尔津县',
+ '654322': '新疆维吾尔族自治区阿勒泰地区富蕴县',
+ '654323': '新疆维吾尔族自治区阿勒泰地区福海县',
+ '654324': '新疆维吾尔族自治区阿勒泰地区哈巴河县',
+ '654325': '新疆维吾尔族自治区阿勒泰地区青河县',
+ '654326': '新疆维吾尔族自治区阿勒泰地区吉木乃县',
+ '659000': '新疆维吾尔族自治区直辖县级行政单位',
+ '659001': '新疆维吾尔族自治区石河子市'
+}
+
+function IDValidator() {
+ let param = {
+ error: {
+ longNumber: '长数字存在精度问题,请使用字符串传值! Long number is not allowed, because the precision of the Number In JavaScript.'
+ }
+ }
+ let util = {
+ checkArg: function (id) {
+ let argType = (typeof id)
+
+ switch (argType) {
+ case 'number':
+ // long number not allowed
+ id = id.toString()
+ if (id.length > 15) {
+ this.error(param.error.longNumber)
+ return false
+ }
+ break
+ case 'string':
+ break
+ default:
+ return false
+ }
+ id = id.toUpperCase()
+ let code = null
+ if (id.length === 18) {
+ // 18位
+ code = {
+ body: id.slice(0, 17),
+ checkBit: id.slice(-1),
+ type: 18
+ }
+ } else if (id.length === 15) {
+ // 15位
+ code = {
+ body: id,
+ type: 15
+ }
+ } else {
+ return false
+ }
+ return code
+ },
+ // 地址码检查
+ checkAddr: function (addr, GB2260) {
+ let addrInfo = this.getAddrInfo(addr, GB2260)
+ return addrInfo !== false
+ },
+ // 取得地址码信息
+ getAddrInfo: function (addr, GB2260) {
+ GB2260 = GB2260 || null
+ // 查询GB/T2260,没有引入GB2260时略过
+ if (GB2260 === null) {
+ return addr
+ }
+ if (!GB2260.hasOwnProperty(addr)) {
+ // 考虑标准不全的情况,搜索不到时向上搜索
+ let tmpAddr
+ tmpAddr = addr.slice(0, 4) + '00'
+ if (!GB2260.hasOwnProperty(tmpAddr)) {
+ tmpAddr = addr.slice(0, 2) + '0000'
+ if (!GB2260.hasOwnProperty(tmpAddr)) {
+ return false
+ } else {
+ return GB2260[tmpAddr] + '未知地区'
+ }
+ } else {
+ return GB2260[tmpAddr] + '未知地区'
+ }
+ } else {
+ return GB2260[addr]
+ }
+ },
+ // 生日码检查
+ checkBirth: function (birth) {
+ let year, month, day
+ if (birth.length === 8) {
+ year = parseInt(birth.slice(0, 4), 10)
+ month = parseInt(birth.slice(4, 6), 10)
+ day = parseInt(birth.slice(-2), 10)
+ } else if (birth.length === 6) {
+ year = parseInt('19' + birth.slice(0, 2), 10)
+ month = parseInt(birth.slice(2, 4), 10)
+ day = parseInt(birth.slice(-2), 10)
+ } else {
+ return false
+ }
+ // TODO 是否需要判断年份
+ /*
+ * if( year<1800 ){ return false; }
+ */
+ // TODO 按月份检测
+ if (month > 12 || month === 0 || day > 31 || day === 0) {
+ return false
+ }
+
+ return true
+ },
+ // 顺序码检查
+ checkOrder: function (order) {
+ // 暂无需检测
+
+ return true
+ },
+ // 加权
+ weight: function (t) {
+ return Math.pow(2, t - 1) % 11
+ },
+ // 随机整数
+ rand: function (max, min) {
+ min = min || 1
+ return Math.round(Math.random() * (max - min)) + min
+ },
+ // 数字补位
+ str_pad: function (str, len, chr, right) {
+ str = str.toString()
+ len = len || 2
+ chr = chr || '0'
+ right = right || false
+ if (str.length >= len) {
+ return str
+ } else {
+ for (let i = 0, j = len - str.length; i < j; i++) {
+ if (right) {
+ str = str + chr
+ } else {
+ str = chr + str
+ }
+ }
+ return str
+ }
+ },
+ // 抛错
+ error: function (msg) {
+ let e = new Error()
+ e.message = 'IDValidator: ' + msg
+ throw e
+ }
+ }
+ let _IDValidator = function (GB2260) {
+ if (typeof GB2260 !== 'undefined') {
+ this.GB2260 = GB2260
+ }
+ // 建立cache
+ this.cache = {}
+ }
+ _IDValidator.prototype = {
+ isValid: function (id) {
+ let GB2260 = this.GB2260 || null
+ let code = util.checkArg(id)
+ if (code === false) {
+ return false
+ }
+ // 查询cache
+ if (this.cache.hasOwnProperty(id) && typeof (this.cache[id].valid) !== 'undefined') {
+ return this.cache[id].valid
+ } else {
+ if (!this.cache.hasOwnProperty(id)) {
+ this.cache[id] = {}
+ }
+ }
+
+ let addr = code.body.slice(0, 6)
+ let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body.slice(6, 12))
+ let order = code.body.slice(-3)
+
+ if (!(util.checkAddr(addr, GB2260) && util.checkBirth(birth) && util
+ .checkOrder(order))) {
+ this.cache[id].valid = false
+ return false
+ }
+
+ // 15位不含校验码,到此已结束
+ if (code.type === 15) {
+ this.cache[id].valid = true
+ return true
+ }
+
+ /* 校验位部分 */
+
+ // 位置加权
+ let posWeight = []
+ for (let i = 18; i > 1; i--) {
+ let wei = util.weight(i)
+ posWeight[i] = wei
+ }
+
+ // 累加body部分与位置加权的积
+ let bodySum = 0
+ let bodyArr = code.body.split('')
+ for (let j = 0; j < bodyArr.length; j++) {
+ bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j])
+ }
+
+ // 得出校验码
+ let checkBit = 12 - (bodySum % 11)
+ if (checkBit === 10) {
+ checkBit = 'X'
+ } else if (checkBit > 10) {
+ checkBit = checkBit % 11
+ }
+ checkBit = (typeof checkBit === 'number' ? checkBit.toString()
+ : checkBit)
+
+ // 检查校验码
+ if (checkBit !== code.checkBit) {
+ this.cache[id].valid = false
+ return false
+ } else {
+ this.cache[id].valid = true
+ return true
+ }
+ },
+ // 获取年龄
+ getAgeForIdCard: function (idStr) {
+ let len = idStr.length // 身份证编码长度
+ if (len < 15) {
+ return -1
+ } else { // 身份证编码大于15位
+ if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18
+ return -1
+ } else {
+ let date1 = new Date() // 取得当前日期
+ let year1 = date1.getFullYear() // 取得当前年份
+ let month1 = date1.getMonth() // 取得当前月份
+ if (len === 15) { // 15位身份证
+ if (month1 > parseInt(idStr.substr(8, 2))) { // 判断当前月分与编码中的月份大小
+ return year1 - ('19' + idStr.substr(6, 2))
+ } else {
+ return year1 - ('19' + idStr.substr(6, 2)) - 1
+ }
+ } else if (len === 18) { // 18位身份证
+ if (month1 > parseInt(idStr.substr(10, 2))) { // 判断当前月分与编码中的月份大小
+ return year1 - idStr.substr(6, 4)
+ } else {
+ return year1 - idStr.substr(6, 4) - 1
+ }
+ }
+ }
+ }
+ },
+ // 获取性别
+ getSexForIdCard: function (idStr) {
+ let len = idStr.length // 身份证编码长度
+ if (len < 15) {
+ return -1
+ } else { // 身份证编码大于15位
+ if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18
+ return -1
+ } else {
+ if (len === 15) { // 15位身份证
+ return (parseInt(idStr.substring(13, 14)) % 2 === 0) ? 0 : 1
+ } else if (len === 18) { // 18位身份证
+ return (parseInt(idStr.substring(16, 17)) % 2 === 0) ? 0 : 1
+ }
+ }
+ }
+ },
+ // 分析详细信息
+ getInfo: function (id) {
+ let GB2260 = this.GB2260 || null
+ // 号码必须有效
+ if (this.isValid(id) === false) {
+ return false
+ }
+ // TODO 复用此部分
+ let code = util.checkArg(id)
+
+ // 查询cache
+ // 到此时通过isValid已经有了cache记录
+ if (typeof this.cache[id].info !== 'undefined') {
+ return this.cache[id].info
+ }
+
+ let addr = code.body.slice(0, 6)
+ let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body
+ .slice(6, 12))
+ let order = code.body.slice(-3)
+
+ let info = {}
+ info.addrCode = addr
+ if (GB2260 !== null) {
+ info.addr = util.getAddrInfo(addr, GB2260)
+ }
+ info.birth = (code.type === 18 ? (([birth.slice(0, 4),
+ birth.slice(4, 6), birth.slice(-2)]).join('-')) : ((
+ '19' + birth.slice(0, 2), birth.slice(2, 4),
+ birth.slice(-2))).join('-'))
+ info.sex = (order % 2 === 0 ? 0 : 1)
+ info.length = code.type
+ if (code.type === 18) {
+ info.checkBit = code.checkBit
+ }
+
+ // 记录cache
+ this.cache[id].info = info
+
+ return info
+ },
+ // 仿造一个号
+ makeID: function (isFifteen) {
+ let GB2260 = this.GB2260 || null
+
+ // 地址码
+ let addr = null
+ if (GB2260 !== null) {
+ let loopCnt = 0
+ while (addr === null) {
+ // 防止死循环
+ if (loopCnt > 10) {
+ addr = 110101
+ break
+ }
+ let prov = util.str_pad(util.rand(50), 2, '0')
+ let city = util.str_pad(util.rand(20), 2, '0')
+ let area = util.str_pad(util.rand(20), 2, '0')
+ let addrTest = [prov, city, area].join('')
+ if (GB2260[addrTest]) {
+ addr = addrTest
+ break
+ }
+ }
+ } else {
+ addr = 110101
+ }
+
+ // 出生年
+ let yr = util.str_pad(util.rand(99, 50), 2, '0')
+ let mo = util.str_pad(util.rand(12, 1), 2, '0')
+ let da = util.str_pad(util.rand(28, 1), 2, '0')
+ if (isFifteen) {
+ return addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1')
+ }
+
+ yr = '19' + yr
+ let body = addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1')
+
+ // 位置加权
+ let posWeight = []
+ for (let i = 18; i > 1; i--) {
+ let wei = util.weight(i)
+ posWeight[i] = wei
+ }
+
+ // 累加body部分与位置加权的积
+ let bodySum = 0
+ let bodyArr = body.split('')
+ for (let j = 0; j < bodyArr.length; j++) {
+ bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j])
+ }
+
+ // 得出校验码
+ let checkBit = 12 - (bodySum % 11)
+ if (checkBit === 10) {
+ checkBit = 'X'
+ } else if (checkBit > 10) {
+ checkBit = checkBit % 11
+ }
+ checkBit = (typeof checkBit === 'number' ? checkBit.toString()
+ : checkBit)
+
+ return (body + checkBit)
+ }
+
+ }// _IDValidator
+ GB2260 = GB2260 === null ? '' : GB2260
+ return new _IDValidator(GB2260)
+}
+
+export default new IDValidator();
diff --git a/src/utils/agreement1.js b/src/utils/agreement1.js
new file mode 100644
index 0000000..35b3cc1
--- /dev/null
+++ b/src/utils/agreement1.js
@@ -0,0 +1,3 @@
+const agreement1='<div><p style="line-height:19pt; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:DengXian; font-size:20pt">智享收银台</span><span style="font-family:DengXian; font-size:20pt">用户服务协议</span></p><p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0"><span style="font-family:DengXian; font-size:13pt">为使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当阅读并遵守《</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">服务协议》</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">本协议</span><span style=" font-size:13pt">”)</span><span style="font-family:DengXian; font-size:13pt">。请您务必审慎阅读、充分理解各条款内容</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">特别是免除或者限制责任的条款、管辖与法律适用条款</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以及开通或使用某项服务的单独协议。限制、免责条款可能以黑体加粗或加下划线的形式提示您重点注意。除非您已阅读并接受本协议所有条款</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则您无权使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">提供的服务。您使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务即视为您已阅读并同意上述协议的约束。如果您未满</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请在法定监护人的陪同下阅读本协议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并特别注意未成年人使用条款。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">一、</span><span style="font-family:DengXian; font-size:13pt">【</span><span style="font-family:DengXian; font-size:13pt">协议的范围】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1.1</span><span style="font-family:DengXian; font-size:13pt">本协议是您与</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">之间关于用户使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">相关服务所订立的协议。</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">是指</span><span style="font-family:DengXian; font-size:13pt">唯知科技</span><span style="font-family:DengXian; font-size:13pt">公司的产品。</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">用户</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">是指使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">相关服务的使用人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在本协议中更多地称为</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">您</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1.2</span><span style="font-family:DengXian; font-size:13pt">本协议项下的服务是指</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">向用户提供的包括但不限于</span><span style="font-family:DengXian; font-size:13pt">零售金融服务、</span><span style="font-family:DengXian; font-size:13pt">移动服务</span><span style="font-family:DengXian; font-size:13pt">、</span><span style="font-family:DengXian; font-size:13pt">电子商务和广告等产品及服务</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">本服务</span><span style=" font-size:13pt">”</span><span style=" font-size:13pt">)</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">二、</span><span style="font-family:DengXian; font-size:13pt">【帐号与密码安全</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">2.1</span><span style="font-family:DengXian; font-size:13pt">您在使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务时需要注册一个帐号。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">2.2</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">特别提醒您应妥善保管您的帐号和密码。当您使用完毕后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应安全退出。因您保管不善可能导致遭受盗号或密码失窃</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">责任由您自行承担。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">三、【用户</span><span style="font-family:DengXian; font-size:13pt">信息保护】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.1</span><span style="font-family:DengXian; font-size:13pt">保护用户</span><span style="font-family:DengXian; font-size:13pt">信息是</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的一项基本原则</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">将按照本协议的规定收集、使用、储存和分享您的</span><span style="font-family:DengXian; font-size:13pt">信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.2</span><span style="font-family:DengXian; font-size:13pt">您在注册帐号或使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能需要填写一些必要的信息。若国家法律法规有特殊规定的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您需要填写真实的身份信息。若您填写的信息不完整</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">无法使用本服务或在使用过程中受到限制。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.3</span><span style="font-family:DengXian; font-size:13pt">一般情况下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您可随时浏览、修改自己提交的信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但出于安全性和身份识别的考虑</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您可能无法修改注册时提供的初始注册信息及其他验证信息。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.4</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">将运用各种安全</span><span style="font-family:DengXian; font-size:13pt">技术和程序建立完善的管理制度来保护您的</span><span style="font-family:DengXian; font-size:13pt">信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免遭受未经授权的访问、使用或披露</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.</span><span style=" font-size:13pt">5</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不会将您的</span><span style="font-family:DengXian; font-size:13pt">信息转移或披露给任何非关联的第三方</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除非</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">相关法律法规或法院、政府机关要求</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">为完成合并、分立、收购或资产转让而转移</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">为提供您要求的服务所必需。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.</span><span style=" font-size:13pt">6</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">非常重视对未成年人</span><span style="font-family:DengXian; font-size:13pt">信息的保护。若您是</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁以下的未</span><span style="font-family:DengXian; font-size:13pt">成年人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务前</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应事先取得您家长或法定监护人</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">"</span><span style="font-family:DengXian; font-size:13pt">监护人</span><span style=" font-size:13pt">")</span><span style="font-family:DengXian; font-size:13pt">的书面同意。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">四、【使用本服务的方式】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.1</span><span style="font-family:DengXian; font-size:13pt">除非您与</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">另有约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意本服务为商业性质的使用。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.2</span><span style="font-family:DengXian; font-size:13pt">您应当通过</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">提供或认可的方式使用本服务。您依本协议条款所取得的权利不可转让。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.3</span><span style="font-family:DengXian; font-size:13pt">您不得使用未经</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">授权的插件、外挂或第三方工具对本协议项下的服务进行干扰、破坏、修改或施加其他影响。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">五、【按现状提供服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务是按照现有技术和条件所能达到的现状提供的。</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">会尽最大努力向您提供服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">确保服务的连贯性和安全性</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">但</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不能随时预见和防范法律、技术以及其他风险</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于不可抗力、病毒、木马、黑客攻击、系统不稳定、第三方服务瑕疵、政府行为等原因可能导致的服务中断、数据丢失以及其他的损失和风险。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">六、【自备设备】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">6.</span><span style=" font-size:13pt">1</span><span style="font-family:DengXian; font-size:13pt">您应当理解</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务需自行准备与相关服务有关的终端设备</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">如手机</span><span style=" font-size:13pt">),</span><span style="font-family:DengXian; font-size:13pt">并承担所需的费用</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">如电话费、上网费等费用</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">6.2</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您使用本服务时会耗用您的终端设备和带宽等资源。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">七、【广告】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.1</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可以在提供服务的过程中自行或由第三方广告商向您发送广告、推广或宣传信息</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">包括商业与非商业信息</span><span style=" font-size:13pt">),</span><span style="font-family:DengXian; font-size:13pt">其方式和范围可不经向您特别通知而变更</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可能为您提供选择关闭广告信息的功能</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但任何时候您都不得以本协议未明确约定或</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">未书面许可的方式屏蔽、过滤广告信息</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.3</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">依照法律的规定对广告商履行相关义务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当自行判断广告信息的真实性并为自己的判断行为负责</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除法律明确规定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您因依该广告信息进行的交易或前述广告商提供的内容而遭受的损失或损害</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不承担责任</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.4</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">服务中出现的广告信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应审慎判断其真实性和可靠性</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除法律明确规定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应对依该广告信息进行的交易负责。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">八、【收费服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">8.1</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的部分服务是以收费方式提供的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如您使用收费服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请遵守相关的协议</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">8.2</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可能根据实际需要对收费服务的收费标准、方式进行修改</span><span style="font-family:DengXian; font-size:13pt">和变更</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">也可能会对部分免费服务开始收费。前述修改、变更或开始收费前</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">将在相应服务页面进行通知或公告。如果您不同意上述修改、变更或付费内容</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">则应停止使用该服务</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">九、【第三方提供的产品或服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">您在</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">平台上使用第三方提供的产品或服务时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除遵守本协议约定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">还应遵守第三方的用户协议。</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">和第三方对可能岀现的纠纷在法律规定和约定的范围内各自承担责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十、【基于软件提供服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">若</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">依托</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">软件</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">向您提供服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您还应遵守以</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">下约定</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务的过程中可能需要下载软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对于这些软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">给予您一项个人</span><span style="font-family:DengXian; font-size:13pt">或工商主体</span><span style="font-family:DengXian; font-size:13pt">的、不可转让及非排他性的许可。您仅可为访问或使用本服务的目的而使用这些软件</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.2</span><span style="font-family:DengXian; font-size:13pt">为了改善用户体验、保证服务的安全性及产品功能的一致性</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可能会对软件进行更新。您应该将相关软件更新到最新版本</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">并不保证其能正常使用。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.3</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可能为不同的终端设备开发不同的软件版本</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当根据实际情况选择下载合适的版本进行安装。您可以直接从</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的网站上获取软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也可以从得到</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">授权的第三方获取。如果您从未经</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">授权的第三方获取软件或与软件名称相同的安装程序</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">无法保证该软件能够正常使用</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并对因此给您造成的损失不予负责。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.4</span><span style="font-family:DengXian; font-size:13pt">除非</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">书面许可</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您不得从事下列任一行为</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">删除软件及其副本上关于著作权的信息</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">2)</span><span style="font-family:DengXian; font-size:13pt">对软件进行反向工程、反向汇编、反向编译</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">或者以其他方式尝试发现软件的源代码</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">3</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">对</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">拥有知识产权的内容进行使用、出租、岀借、复制、修改、链接、转载、汇编、发表、出版、建立镜像站点等</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">对软件或者软件运行过程中释放到任何终端内存中的数据、软件运行过程中客户端与服务器端的交互数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以及软件运行所必需的系统数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">进行复制、修改、增加、删除、挂接运行或创作任何衍生作品</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">形式包括但不限于使用插件、外挂或非经</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">授权的第三方工具</span><span style=" font-size:13pt">/</span><span style="font-family:DengXian; font-size:13pt">服务接入软件和相关系统</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(5)</span><span style="font-family:DengXian; font-size:13pt">通过修改或伪造软件运行中的指令、数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">增加、删减、变动软件的功能或运行效果</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">或者将用于上述用途的软件、方法进行运营或向公众传播</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">无论这些行为是否为商业目的</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(6)</span><span style="font-family:DengXian; font-size:13pt">通过非</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">开发、授权的第三方软件、插件、外挂、系统</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">登录或使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">软件及服务或制作、发布、传播非掌上客如去开发、授权的第三方软件、插件、外挂、系统</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十一、【知识产权声明】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务时须遵守法律法规</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">不得利用本服务从事违法违规行为</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播、储存危害国家安全统一、破坏社会稳定、违反公序良俗、侮辱、诽谤、淫秽、暴力以及任何违反国家法律法规的内容</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播、储存侵害他人知识产权、商业秘密等合法权利的内容</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">恶意虚构事实、隐瞒真相以误导、欺骗他人</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播广告信息及垃圾信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">5)</span><span style="font-family:DengXian; font-size:13pt">其他法律法规禁止的行为。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.2</span><span style="font-family:DengXian; font-size:13pt">如果您违反了本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">相关国家机关或机构可能会对您提起诉讼、罚款或采取其他制裁措施</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并要求</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">给予协助。造成损害的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应依法予以赔偿</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不承担任何责任</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.3</span><span style="font-family:DengXian; font-size:13pt">如果</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">发现或收到他人举报您发布的信息违反本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权进行独立判断并采取技术手段予以删除、屏蔽或断开链接。同时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权视用户的行为性质</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">采取包括但不限于暂停或终止服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">限制、冻结或终止用户账号的使用</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">追究法律责任等措施。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.4</span><span style="font-family:DengXian; font-size:13pt">您违反本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">导致任何第三方损害的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当独立承担责任</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">因此遭受损失的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您也应当并赔偿。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十三、【遵守当地法律监管】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">13.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务过程中应当遵守当地相关的法律法规</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并尊重当地的道德和风俗习惯。如果您的行为违反了当地法律法规或道德风俗</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当为此独立承担责任</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">13.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">您应避免因使用本服务而使</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">卷入政治和公共事件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权暂停或终止对您的服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十四、【用户发送、传播的內容与第三方投诉处理】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.</span><span style=" font-size:13pt">1</span><span style="font-family:DengXian; font-size:13pt">您通过本服务发送或传播的内容</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">包括但不限于网页、文字、图片、音频、视频、图表等</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">均由您自行承担责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">4.2</span><span style="font-family:DengXian; font-size:13pt">您发送或传播的内容应有合法来源</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">相关内容为您所有或您已获得权利人的授权。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.3</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可为履行本协议或提供本服务的目的而使用您发送或传播的内容。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.4</span><span style="font-family:DengXian; font-size:13pt">如果</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">收到权利人通知</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">主张您发送或传播的内容侵犯其相</span><span style="font-family:DengXian; font-size:13pt">关权利的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权进行独立判断并采取删除、屏蔽或断开链接等措施</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.</span><span style=" font-size:13pt">5</span><span style="font-family:DengXian; font-size:13pt">您使用本服务时不得违反国家法律法规、侵害他人合法权益。您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如您被他人投诉侵权或您投诉他人侵权</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权将争议中相关方的主体联系方式、投诉相关内容等必要信息提供给其他争议方或相关部门</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以便及时解决投诉纠纷</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">保护他人合法权</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十五、【不可抗力及其他免责事由】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.1</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能会遇到不可抗力等风险因素</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">使本服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于自然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为等。岀现上述情况时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">将努力在第一时间与相关单位配合</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">及时进行修复</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但是由此给您造成的损失</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">在法律允许的范围内免责</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.2</span><span style="font-family:DengXian; font-size:13pt">在法律允许的范围内</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">对以下情形导致的服务中断或受阻不承担责任</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">1)</span><span style="font-family:DengXian; font-size:13pt">受到手机病毒、木马或其他恶意程序、黑客攻击的破坏</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">用户或</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的电脑软件、系统、硬件和通信线路出现故障</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">用户操作不当</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">4)</span><span style="font-family:DengXian; font-size:13pt">用户通过非</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">授权的方式使用本服务</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(5)</span><span style="font-family:DengXian; font-size:13pt">其他</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">无法控制或合理预见的情形</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.3</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能会遇到网络信息或其他用户行为带来的风险</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不对任何信息的真实性、适用性、合法性承担责任</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也不对因侵权行为给您造成的损害负责。这些风险包括但不限于</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">来自他人匿名或冒名的含有威胁、诽谤、令人反感或非法内容的信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">因使用本协议项下的服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">遭受他人误导、欺骗或其他导致或可能导致的任何心理、生理上的伤害以及经济上的损失</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">3)</span><span style="font-family:DengXian; font-size:13pt">其他因网络信息或用户行为引起的风险</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.4</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">本服务并非为某些特定目的而设计</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于核设施、军事用途、医疗设施、交通通讯等重要领域。如果因为软件或服务的原因导致上述操作失败而带来的人员伤亡、财产损失和环境破坏等</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不承担法律责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.5</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">依据本协议约定获得处理违法违规内容的权利</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">该权利不构成</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的义务或承诺</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">不能保证及时发现违法行为或进行相应处理。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.6</span><span style="font-family:DengXian; font-size:13pt">在任何情况下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您不应轻信借款、索要密码或其他涉及财产的网络信</span><span style="font-family:DengXian; font-size:13pt">息。涉及财产操作的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请一定先核实对方身份</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并请经常留意</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有关防范诈骗犯罪的提示。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十六、【协议的生效与变更】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.1</span><span style="font-family:DengXian; font-size:13pt">您使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">的服务即视为您已阅读本协议并接受本协议的约束</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.2</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权在必要时修改本协议条款。您可以在相关服务页面查阅最新版本的协议条款</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.3</span><span style="font-family:DengXian; font-size:13pt">本协议条款变更后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如果您继续使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">提供的软件或服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">即视为您已接受修改后的协议。如果您不接受修改后的协议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应当停止使用</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">提供的软件或服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十七、【服务的变更、中断、终止</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.1</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可能会对服务内容进行变更</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也可能会中断、中止或终止服务。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权自主决定经营策略。在</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">发生合并、分立、收购、资产转让时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可向第三方转让本服务下相关资产</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">也可在单方通知您后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">将本协议下部分或全部服务转交由第三方运营或履行。具体受让主体以</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">通知的为准</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">3</span><span style="font-family:DengXian; font-size:13pt">如发生下列任何一种情形</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权不经通知而中断或终止向您提供的服务</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">根据法律规定您应提交真实信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">而您提供的个人资料不真实、或与注册时信息不一致又未能提供合理证明</span><span style="font-family:DengXian; font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">您违反相关法律法规或本协议的约定</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">按照法律规定或主管部门的要求</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">出于安全的原因或其他必要的情形。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">4</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权按本协议</span><span style=" font-size:13pt">8.2</span><span style="font-family:DengXian; font-size:13pt">条的约定进行收费。若您未按时足额付费</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">有权中断、中止或终止提供服务。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.5</span><span style="font-family:DengXian; font-size:13pt">您有责任自行备份存储在本服务中的数据。如果您的服务被终止</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">可以从服务器上永久地删除您的数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但法律法规另有规定的除外。服务终止后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">没有义务向您返还数据。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十八、【管辖与法律适用】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.1</span><span style="font-family:DengXian; font-size:13pt">本协议的成立、生效、履行、解释及纠纷解决</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">适用中华人民共和国大陆地区法律</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">不包括冲突法</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">本协议签订地为中华人民共和国四川省成都市。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.3</span><span style="font-family:DengXian; font-size:13pt">若您和</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">之间发生任何纠纷或争议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">首先应友好协商解决</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">协商不成的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.</span><span style=" font-size:13pt">4</span><span style="font-family:DengXian; font-size:13pt">本协议所有条款的标题仅为阅读方便</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">本身并无实际涵义</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">不能作为本协议涵义解释的依据。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.5</span><span style="font-family:DengXian; font-size:13pt">本协议条款无论因何种原因部分无效或不可执行</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">其余条款仍有效</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对双方具有约束力。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十九、【未成年人使用条款</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">19.1</span><span style="font-family:DengXian; font-size:13pt">若用户未满</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">则为未成年人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应在监护人监护、指导下阅读本协议和使用本服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">19.2</span><span style="font-family:DengXian; font-size:13pt">未成年人用户涉世未深</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">容易被网络虚象迷惑</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">且好奇心强</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">遇事缺乏随机应变的处理能力</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">很容易被别有用心的人利用而又缺乏自我保护能力。因此</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">未成年人用户在使用本服务时应注意以下事项</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">提高安全意识</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">加强自我保护</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">认清网络世界与现实世界的区别</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">避免沉迷于网络</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">影响日常的学习生活</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">填写个人资料时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">加强个人保护意识</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免不良分子对个人生活造成骚扰</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">在监护人或老师的指导下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">学习正确使用网络</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">避免陌生网友随意会面或参与联谊活动</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免不法分子有机可乘</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">危及自身安全。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">9.3</span><span style="font-family:DengXian; font-size:13pt">监护人、学校均应对未成年人使用本服务时多做引导。特别是家长应关心子女的成长</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">注意与子女的沟通</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">指导子女上网应该注意的安全问题</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">防患于未然。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">二十、【其他】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">如果您对本协议或本服务有意见或建议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可与</span><span style="font-family:DengXian; font-size:13pt">智享收银台</span><span style="font-family:DengXian; font-size:13pt">客户服务部门联系</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">我们会给予您必要的帮助。</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">正文完</span><span style=" font-size:13pt">)</span></p></div>'
+
+// export default agreement;
diff --git a/src/utils/agreement2.js b/src/utils/agreement2.js
new file mode 100644
index 0000000..2506e90
--- /dev/null
+++ b/src/utils/agreement2.js
@@ -0,0 +1 @@
+const agreement2='<div><p style="font-size:16pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:16pt; font-weight:bold">智分期业务合作协议(普通商户版)</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:125%; margin:0pt 0pt 0pt 271.45pt; orphans:0; padding-left:61.3pt; text-align:right; text-indent:-61.3pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">协议</span><span style="font-family:仿宋; font-size:12pt">编号:</span><span style="font-family:仿宋; font-size:12pt">ZFQ-SY-QC</span><span style="font-family:仿宋; font-size:12pt">-</span><span style="font-family:仿宋; font-size:12pt">2018-</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">0001</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:125%; margin:0pt 0pt 0pt 271.45pt; orphans:0; padding-left:61.3pt; text-align:right; text-indent:-61.3pt; widows:0"><span style="font-family:仿宋; font-size:12pt">协议</span><span style="font-family:仿宋; font-size:12pt">签订地:</span><span style="font-family:仿宋; font-size:12pt">成都市高新区</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 63pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0.5pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲 方:</span><span style="font-family:仿宋; font-size:12pt">深圳前海彩蜂商业保理有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">91440300MA5F1HWU0L</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">余梦颖</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18828020724</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0.5pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙 方:</span><span style="font-family:仿宋; font-size:12pt">本次注册商户</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的营业执照号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人姓名</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人手机号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 63pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙 方</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">成都唯知信息科技有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">91510100MA6C9H4L1L</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">易轩弘</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18108214026</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">鉴于</span><span style="font-family:仿宋; font-size:12pt">:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方是一家依法设立并有效存续的商业保理公司。主要受让乙方拥有或控制的基于消费场景下产生的应收账款,为乙方用户提供分期付款服务(即“智分期”服务),进而提升乙方平台交易量。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 0.85pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方是一家依法成立并有效存续的独立公司法人企业,主营</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">汽车</span><span style="font-family:仿宋; font-size:12pt">类</span><span style="font-family:仿宋; font-size:12pt">相关产品</span><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">商品或服务</span><span style="font-family:仿宋; font-size:12pt">)的销售</span><span style="font-family:仿宋; font-size:12pt">并</span><span style="font-family:仿宋; font-size:12pt">提供相关服务</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方是一家专业的</span><span style="font-family:仿宋; font-size:12pt">系统开发服务商</span><span style="font-family:仿宋; font-size:12pt">,受甲方委托提供消费分期技术服务,致力于为商户及消费者提供基于互联网的更加便捷、安全、高效的一体化解决方案(分期服务),专注于消费品交易为主的在线分期购物商城及消费金融服务平台,是国内领先的消费品分期服务公司。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">为合理利用甲乙丙三方的有利资源,实现互利共赢,三方将合作运营并推广智分期业务,共同促进在消费业务领域的深度合作,在自愿、平等、诚信的基础上,交易各方经友好协商就智分期服务合作相关事宜达成共识,并就已经</span><span style="font-family:仿宋; font-size:12pt">确定</span><span style="font-family:仿宋; font-size:12pt">智分期交易规则、各方权利义务等内容达成如下协议,以资共同遵守。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第一条 定义</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议中,除非文义另有所指,下列名词具有如下特定含义:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、用户:指基于甲方提供的智分期服务基础上在乙方处进行消费的个人。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、商户:指为用户提供商品或服务(本协议统称“产品”)的供应商,即本协议中的乙方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、交易规则:指标示在乙方店面或网站之上的,与用户使用乙方所提供的平台服务有关的任何规范性文件,包括但不限于购物流程、售后政策、退款说明等,同时包括智分期服务交易规则,以下统称</span><span style="font-family:仿宋; font-size:12pt">“</span><span style="font-family:仿宋; font-size:12pt">交易规则</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、智分期服务:指甲方作为商业保理公司,受让乙方平台拥有或者控制的基于消费场景产生的应收账款,并通过乙方向用户提供的一种先消费后付款的购物体验的信用</span><span style="font-family:仿宋; font-size:12pt">分期</span><span style="font-family:仿宋; font-size:12pt">付款</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">(以下</span><span style="font-family:仿宋; font-size:12pt">简称“</span><span style="font-family:仿宋; font-size:12pt">智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务)</span><span style="font-family:仿宋; font-size:12pt">。</span><span style="font-family:仿宋; font-size:12pt">甲方可根据法律、法规和规范性文件的规定和营销推广的实际情况对相关技术服务的名称进行调整。甲方委托丙方为“智分期”服务提供技术支持,“智分期”服务包括但不限于以下特点:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)用户可延期支付或者分期支付;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)以用户的真实交易为背景;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)依赖丙方优质的信用分期付款技术服务;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)浮动费率。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、信用分期服务:指商户基于智分期服务为符合条件的用户提供 “先购物、后付款”的信用赊购方式付款的平台服务。“赊购方式付款”指用户在乙方消费时,可依据乙方交易规则及相应申请流程,享受由甲方在商业保理业务基础上提供的相应的延后付款或分期付款的付款方式。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、</span><span style="font-family:仿宋; font-size:12pt">商业保理:是指销售商(债权人)将其与买方(债务人)订立的货物销售(服务)协议所产生的应收账款转让给商业保理公司,由商业保理公司为其提供贸易融资、应收账款管理与催收等综合性商贸服务。在本协议项下,由甲方受让乙方基于消费场景产生的应收账款,提供商业保理服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7、资金服务机构:指为智分期中受让合作商户信用分期应收账款的资金机构和个人,包括且不限于银行、商业保理、融资租赁、消费金融公司、小贷公司、信托、私募基金等机构。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">8、分期服务费:指用户使用甲方提供的智分期服务需承担的服务费用,具体标准以甲方及乙方页面显示为准。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">9</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">保理</span><span style="font-family:仿宋; font-size:12pt">服务费:</span><span style="font-family:仿宋; font-size:12pt">指用户</span><span style="font-family:仿宋; font-size:12pt">使用“</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">时,</span><span style="font-family:仿宋; font-size:12pt">乙方</span><span style="font-family:仿宋; font-size:12pt">按照交易账款的</span><span style="font-family:仿宋; font-size:12pt">约</span><span style="font-family:仿宋; font-size:12pt">定比例</span><span style="font-family:仿宋; font-size:12pt">向甲</span><span style="font-family:仿宋; font-size:12pt">方支付的服务费用</span><span style="font-family:仿宋; font-size:12pt">即甲方在受让乙方拥有或控制的应收账款时,乙方应向甲方支付的费用,本协议项下保理服务费费率详见附表一(甲方有权根据业务发展情况调整该项费率,经相关各方书面确认后生效)。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">10</span><span style="font-family:仿宋; font-size:12pt">、交易</span><span style="font-family:仿宋; font-size:12pt">账款</span><span style="font-family:仿宋; font-size:12pt">:指用户在乙方使用“智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务的</span><span style="font-family:仿宋; font-size:12pt">消费</span><span style="font-family:仿宋; font-size:12pt">订单(根据</span><span style="font-family:仿宋; font-size:12pt">甲方后台确认</span><span style="font-family:仿宋; font-size:12pt">的订单确定</span><span style="font-family:仿宋; font-size:12pt">)</span><span style="font-family:仿宋; font-size:12pt">对应价款的金额(即乙方与用户基于商品销售及服务并符合《合同法》相关政策法规的基础交易约定,由乙方向用户提供服务或货物产生的应收账款金额),其中不包括用户已经另行向乙方支付的款项。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">11</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">应收账款</span><span style="font-family:仿宋; font-size:12pt">受让款</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">指甲方在受让乙方拥有或控制的应收账款后,在</span><span style="font-family:仿宋; font-size:12pt">交易账款中</span><span style="font-family:仿宋; font-size:12pt">扣除保理</span><span style="font-family:仿宋; font-size:12pt">服务费</span><span style="font-family:仿宋; font-size:12pt">后应向乙方支付</span><span style="font-family:仿宋; font-size:12pt">的账款余额</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">12</span><span style="font-family:仿宋; font-size:12pt">、清算服务机构:指甲乙丙三方基于智分期相关协议约定基础上,甲方或丙方委托其负责交易账款及相关业务中交易结算资金清分服务的机构。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">13</span><span style="font-family:仿宋; font-size:12pt">、用户个人信息:指用户依据智分期服务相关各方要求所提供的个人身份信息及历史消费情况,包括但不限于姓名、证件号、联系地址、手机号码等。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">14</span><span style="font-family:仿宋; font-size:12pt">、关联公司:本协议所称“关联公司”是指由一方直接控制或间接控制;或直接或间接控制一方;或与一方共同控制同一家公司或能对其施加重大影响;或与一方受同一家公司直接或间接控制的公司。包括但不限于一方的母公司、子公司;与一方受同一母公司控制的子公司;一方的合营企业、联营企业等。这里的“公司”指任何一人公司、有限责任公司或股份有限公司;“控制”是指直接或间接地拥有影响所提及公司管理的能力,无论是通过所有权、有投票权的股份、协议或其他被人民法院认定的方式。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议未作定义或约定的词语,按相关法律、法规及行业惯例解释。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第二条 分期业务合作约定与业务流程</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、甲方为乙方用户提供“智分期”服务。乙方向用户提供所需要的产品或服务后,甲方受让基于前述消费场景产生的应收账款。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、丙方接受甲乙二方的委托,为“智分期”服务提供技术服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、乙方放置“智分期”业务的链接、端口或分期二维码,引导用户使用“智分期”服务完成订单支付,并协助用户在申请“智分期”服务过程中完成授权及其他资料的提供。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、甲方对用户进行实名认证,用户资质审核通过后,同意用户使用智分期信用分期付款,乙方认可用户通过“智分期”业务支付的订单,乙方应根据订单向用户提供相应商品交付或服务。订单交易完成确认后,甲方受让该等应收账款并向乙方支付应收账款转让对价款项。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、</span><span style="font-family:仿宋; font-size:12pt">乙方基于“</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期”服务形成的对用户的分期应收账款债权及其附属权益,包括但不限于对该等分期应收账款等款项以及请求、起诉、收回、接受与该等分期应收账款相关的全部应偿付款项的权利、与该等分期应收账款相关的承诺的利益、强制执行该等分期应收账款的全部权利和申请法律救济的权利。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、乙方在此不可撤销地确认, 将以其自身名义向用户告知应收账款转让事宜,乙方应在签署</span><span style="font-family:仿宋; font-size:12pt">本</span><span style="font-family:仿宋; font-size:12pt">协议的同时一并签署《分期应收账款转让通知书》交甲方保存,在债务人(即用户)违约或出现本协议约定的风险事件情形下,乙方授权甲方向债务人发送其已签署的《分期应收账款转让通知书》,以行使该资产转让后在甲方和用户之间的相关权利。同时甲方如需在中国人民银行的债权转让相关登记或公示系统进行转让登记的,乙方应积极配合协助,根据甲方要求及时提供必要的转让登记资料,不得以任何理由拒绝。</span><br /><span style="font-family:仿宋; font-size:12pt"> 7</span><span style="font-family:仿宋; font-size:12pt">、甲乙丙</span><span style="font-family:仿宋; font-size:12pt">三</span><span style="font-family:仿宋; font-size:12pt">方共同约定,自甲方支付应收账款受让款之日起,该等应收账款即转让给甲方,该应收账款包括但不限于截止转让日债务人尚未支付的全部款项(无论是否已满足支付条件)及其自转让日起产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等。同时,乙方基于前述债权享有的任何从权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现债权而享有的任何实体性权利及程序性权利等也于转让日一并转让给甲方。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">8、自甲方支付应收账款受让款之日起,该应收账款回收款由用户直接支付至甲方指定的账户,若用户未按约定进行还款,甲方有权对用户进行催收,并对该应收账款债权资产处置。</span><br /><span style="font-family:仿宋; font-size:12pt"> 9</span><span style="font-family:仿宋; font-size:12pt">、根据本协议执行情况及乙方所属行业,甲、乙双方后续可根据业务开展情况通过签署书面补充协议的形式调整具体的业务规则及业务流程等产品信息。在任何</span><span style="font-family:仿宋; font-size:12pt">情形下</span><span style="font-family:仿宋; font-size:12pt">,如本协议项下智分期业务终止,协议各方</span><span style="font-family:仿宋; font-size:12pt">仍应按照</span><span style="font-family:仿宋; font-size:12pt">本</span><span style="font-family:仿宋; font-size:12pt">协议约定</span><span style="font-family:仿宋; font-size:12pt">,承担其在业务开展期间所产生的上述风险及法律责任。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第三条 商品服务承诺</span><br /><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span><span style="font-family:仿宋; font-size:12pt">1、乙方应保证所销售的商品或服务与其对外承诺保持一致且符合国家、地区及行业标准;乙方应按照法律、法规和规范性文件的规定对其出售给用户的商品或服务承担产品质量责任,并按照法律规定向用户履行“三包”义务。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">2、</span><a name="OLE_LINK2"><span style="font-family:仿宋; font-size:12pt">乙方应保证乙方具备所销售商品和服务的经营资质,并确认其拥有开具对应发票的资格</span></a><span style="font-family:仿宋; font-size:12pt">。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">3、甲方、丙方无须因乙方产品及服务问题承担任何责任。如因应归责于乙方原因(如产品质量有瑕疵、未实现服务承诺等)而产生的纠纷或争议,从而导致用户逾期付款或拒绝履行付款义务的,甲方有权就其所遭受的一切损失及不利后果向乙方进行追偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 24pt; orphans:0; padding-left:12pt; text-align:justify; text-indent:-12pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第四条 甲方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、乙方基于向用户提供产品或服务形成对用户(或者基础债务人)的分期应收账款债权及其附属权益,甲方按照本协议从乙方处受让全部分期应收账款债权及其附属权益, 包括但不限于对该等分期应收账款等款项以及请求、起诉、收回、接受与该等分期应收账款相关的全部应偿付款项的权利、与该等分期应收账款相关的承诺的利益、强制执行该等分期应收账款的全部权利和申请法律救济的权利。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、自甲方支付乙方分期应收账款受让款之日起,对应的智分期交易应收账款即转让给甲方,该应收账款包括但不限于截止甲方付款日用户尚未支付的全部款项(无论是否已满足支付条件)及其自甲方付款日起产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等。同时,乙方基于前述债权享有的任何权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现债权而享有的任何实体性权利及程序性权利等也于转让日一并转让给甲方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、甲方应按照本协议第7.1款将相应分期应收账款受让款按时支付至乙方指定账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、本协议项下的分期应收账款转让后,相关分期应收账款回收款由用户支付至甲方指定账户,若甲方在用户还款期未能按期足额收到应收账款回收款时,由甲方根据风险控制措施处理,与乙方无关。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、当发生下列情形之一时,甲方在书面通知后即可暂停、终止、中止向乙方提供服务而无需承担任何违约责任:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1)乙方提供的资料不真实、且未能提供合理说明及证明;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2)乙方违反法律、法规、规章及政府规范性文件或本协议约定;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3)中国人民银行、公安机关、政府机关或司法机关等国家机关向甲方发出要求的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、如乙方发生退货次数超过成功交易次数的</span><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">%,甲方有权向乙方提出警示或终止合作。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 24pt; orphans:0; padding-left:12pt; text-align:justify; text-indent:-12pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第五条 乙方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、乙方应向甲方提供的基本信息、营业执照复印件、税务登记证复印件和法定代表人或负责人身份证复印件等均真实、合法、有效。乙方应在安全的场所提供符合国家法律法规或相关质量标准或管理标准规定的商品和服务,乙方的经营应符合国家法律法规对其经营的要求。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、乙方承诺其拥有合法有效的经营资质在其乙方经营场所向用户销售相关产品或服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、由于乙方原因造成乙方所提供的服务引起的一切客户投诉、质疑、纠纷或引起的法律上的责任,由乙方负责;如因前述情况导致甲方被裁定承担法律责任的,乙方应依法赔偿甲方损失。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、乙方在使用“智分期”业务过程中,有义务遵守包括国家法律、金融政策、中国银联规章制度在内的所有政策法规。乙方违法违规所造成的全部法律责任由乙方承担,造成甲方损失或承担责任的,甲方可随时向乙方追偿,并有权立即解除协议。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、乙方应及时有效地处理用户、客户或合作伙伴的各种投诉以及由乙方提供的产品和服务引发的质量、价格、售后服务等纠纷。由于乙方原因造成其客户投诉或引起其他法律纠纷和责任的,均与甲方无关,由此造成甲方损失的,应由乙方承担赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、当用户至乙方使用“智分期”服务过程中,若用户采取银行信用卡作为风险信用担保的,乙方务必保证用户所用信用卡持卡人信息真实有效,并和分期交易确认单上所填信息一致,否则由此造成的损失由乙方自行承担。同时乙方有义务确保分期交易的真实性及有效性,乙方有义务向甲方提供真实有效的用户订单信息和配送物流信息,乙方如发现用户有欺诈、非法套现、提供虚假资料、恶意刷单等情况,应及时采取包括且不限于通知甲方、协助甲方进行调查、处理,暂停对该用户提供服务等措施。如给甲方造成任何损失的,乙方还应该负责赔偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7</span><span style="font-family:仿宋; font-size:12pt">、乙方应该在分期交易后及时通知用户应收账款转让事宜,并协助甲方对用户进行还款提醒,若用户未能在还款日还款,乙方应协助甲方开展催收工作及惩罚。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">8</span><span style="font-family:仿宋; font-size:12pt">、乙方保证其有权获得通过乙方使用智分期的用户的充分授权,可以合理使用并授权丙方使用用户的相关信息,包括但不限于用户在乙方平台的注册信息、交易关系、浏览行为记录、相关消费记录和支付结算结果等。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">9</span><span style="font-family:仿宋; font-size:12pt">、乙方有权设定智分期的使用范围,但该设定范围应取得甲方的同意且不得歧视智分期的用户。但依据商品的属性(如话费充值卡、游戏点卡、游戏币等虚拟商品和黄金、珠宝、钻石等投资性贵金属等)不宜采用“智分期”服务的,乙方不得支持用户使用。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">10</span><span style="font-family:仿宋; font-size:12pt">、乙方保证具备开具所销售商品发票的资格且应按乙方与用户约定的价格向用户开具相应法定足额发票。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">11</span><span style="font-family:仿宋; font-size:12pt">、如甲方通过技术手段判定或有证据证明乙方联合用户进行套利套现交易,甲方有权要求乙方对甲方造成的损失进行全额赔偿。如套利套现情况严重的,甲方有权立即停止与乙方的合作及结算,并保留追究乙方违约责任的权利。如出现乙方用户进行套利套现交易,乙方承担同样的连带赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">六</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">条 丙方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、丙方有义务向甲方提供智分期业务运营所需的技术支持,维护智分期正常运行,并努力提升和改进技术能力,但不对因通信故障等非甲方原因引起的用户与甲方的交易中断、交易错误等承担责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、丙方受甲方的委托,有权要求乙方提供使用智分期服务付款的用户在其交易平台上的相关消费记录和支付结算结果,丙方有权依据本协议从甲方及</span><span style="font-family:仿宋; font-size:12pt">/或乙方处获得并合理使用本协议</span><span style="font-family:仿宋; font-size:12pt">约定的用户相关信息,乙方应负责取得对于上述事项的合法授权。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、丙方有义务按照本协议约定就</span><span style="font-family:仿宋; font-size:12pt">本协议约定的服务流程</span><span style="font-family:仿宋; font-size:12pt">提供技术服务支持</span><span style="font-family:仿宋; font-size:12pt">并保证系统安全稳定</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第七条 费用结算及支付</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲乙丙三方同意并确认,本协议项下涉及的付款、还款、退款等操作处理均以以下方式处理:</span><br /><span style="font-family:仿宋; font-size:12pt"> 1</span><span style="font-family:仿宋; font-size:12pt">、账款结算约定,用户通过</span><span style="font-family:仿宋; font-size:12pt">“</span><span style="font-family:仿宋; font-size:12pt">智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">支付成功</span><span style="font-family:仿宋; font-size:12pt">时,甲方</span><span style="font-family:仿宋; font-size:12pt">于交易成功后</span><span style="font-family:仿宋; font-size:12pt">T+</span><span style="font-family:仿宋; font-size:12pt">0</span><span style="font-family:仿宋; font-size:12pt">个工作日内由清算服务机构在扣除依照附表一约定的费率扣除保理服务费后,将应收账款受让款结算至乙方指定账户。</span><br /><span style="font-family:仿宋; font-size:12pt"> 2</span><span style="font-family:仿宋; font-size:12pt">、在甲方开展营销活动时,涉及的促销费率双方另行以补充协议形式约定。</span><br /><span style="font-family:仿宋; font-size:12pt"> 3</span><span style="font-family:仿宋; font-size:12pt">、技术服务费约定,甲方基于丙方提供的技术服务一次性向丙方支付技术服务费人民币</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> 零 </span><span style="font-family:仿宋; font-size:12pt">元。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、本协议项下,</span><span style="font-family:仿宋; font-size:12pt">双</span><span style="font-family:仿宋; font-size:12pt">方指定收款账户信息</span><span style="font-family:仿宋; font-size:12pt">:</span></p><table cellspacing="0" cellpadding="0" style="border-collapse:collapse; margin-left:26.55pt; width:498.45pt"><tr style="height:16.95pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账户信息</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方</span></p></td></tr><tr style="height:13.6pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账户名称</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户名称或法人姓名</span></p></td></tr><tr style="height:27.4pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账 号</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的银行卡号</span></p></td></tr><tr style="height:15.9pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">开 户 行</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时选择的银行</span></p></td></tr></table><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">任何一方如需改变账户信息,应提前</span><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">个工作日书面通知另一方,否则协议其他方仍然有权视原账户为有效账户,因变更方未及时通知账户变更信息导致协议其他方将支付款项汇入变更方原账户的,视为变更方已经足额收到协议其他方应付的款项,因此产生的一切费用由变更方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、在甲乙丙三方协商一致的情况下,可在协议期内根据合作的业务量、交易成功率等因素,对相关费用标准进行调整。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、除甲方依照本协议约定收取的保理服务费及分期服务费外,用户、乙方及/或资金服务机构之间的任何资金款项往来涉及的相关责任均由该等主体之间通过资金提供协议或其他协议自行约定承担方式,该等主体之间的资金款项往来是否按时足额支付给相关方、是否发生逾期或资金提供协议或其他协议项下的违约等与甲方无关。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7、甲乙双方在前期非系统(单指结算系统)状态下,按照以下流程进行应收账款受让款结算。乙方按照附件四</span><span style="font-family:仿宋; font-size:12pt">—</span><span style="font-family:仿宋; font-size:12pt">商户交易确认单填写订单信息,填写完成,经过核对,待确认无误后,连同用户办理“智分期”业务所填写贷记卡原件,用户确认办理“智分期”业务的确认短信三者一起拍照留存,将所拍照片发送到甲方指定邮箱。甲方按照收到照片所呈现的信息进行核对付款。信息核对无误按照7.1执行。如存在信息差异的,由甲乙双方协商处理,甲乙双方协商后无法达成一致意见的,以甲方所持有信息</span><span style="font-family:仿宋; font-size:12pt">为准。</span><span style="font-family:仿宋; font-size:12pt">乙方应保证所提供资料信息的正确性。甲乙双方在系统状态下,按照系统定义结算流程结算。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第八条 退货退款的处理</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、如用户提出退货申请且乙方已受理的,同时甲方针对该笔订单对应应收账款已向乙方完成受让支付的,乙方应在退货申请受理后的第二个工作日将甲方支付的应收</span><span style="font-family:仿宋; font-size:12pt">账款</span><span style="font-family:仿宋; font-size:12pt">及应收账款的退还至甲方指定收款账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、当乙方为用户办理退货时,应按照以下规定和退货流程办理:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)用户不得直接向甲方申请退款,只得向乙方发出申请。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)乙方同意用户退货退款申请后,需通过“智分期”后台提交退款申请,同时将已清算应收账款退回至甲方指定账户。上述应收账款确认退回后,甲方将用户已发生分期金额原路径返还并对剩余期数平账。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)自交易日起30日内用户可向乙方申请退款,该笔交易所产生的保理服务费由甲方部分承担,超过上述期限甲方不再受理退款申请。其中0.2%的支付通道费用由乙方承担。甲方承担其余保理服务费用。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)乙方</span><span style="font-family:仿宋; font-size:12pt">若</span><span style="font-family:仿宋; font-size:12pt">以现金方式退款给用户</span><span style="font-family:仿宋; font-size:12pt">,</span><span style="font-family:仿宋; font-size:12pt">因此产生的一切法律及经济责任由乙方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第九条 违约事件与违约责任</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、甲乙丙三方应当严格遵守本合作协议之规定,保障合作顺利进行。协议的任何一方违反其于本协议项下的陈述、承诺、保证或义务,则视为违约。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、出现下列情况之一的,视为已发生违约事件:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">)</span><span style="font-family:仿宋; font-size:12pt">任何一方提供的资料不真实或隐瞒重大事项、且未能提供合理说明及证明;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)</span><span style="font-family:仿宋; font-size:12pt">任何一方违反法律、法规、规章及政府规范性文件或本协议约定</span><span style="font-family:仿宋; font-size:12pt">或侵害第三人包括知识产权在内的一切权利的</span><span style="font-family:仿宋; font-size:12pt">;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)乙方</span><span style="font-family:仿宋; font-size:12pt">或其员工,故意构造虚假订单或虚假资料</span><span style="font-family:仿宋; font-size:12pt">或冒充</span><span style="font-family:仿宋; font-size:12pt">他人或联合他人不以真实消费为目的的申请</span><span style="font-family:仿宋; font-size:12pt">“智分期”服务;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)用户提交分期申请后,乙方无法向用户提供相应产品或服务;或因</span><span style="font-family:仿宋; font-size:12pt">乙方商品、发布的信息或提供的售后服务问题引发</span><span style="font-family:仿宋; font-size:12pt">用户大量投诉并影响三方合作的;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(5)乙方故意销售假冒伪劣、有毒有害商品或构造虚假订单或虚假资料或冒充他人或联合他人不以真实消费为目的申请“智分期”服务或利用甲方提供的服务进行不正当交易的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、违约方发生违约事项时,守约方有权视具体情况分别或同时采取以下措施:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)要求违约方在一定时限内停止违约行为,消除相关影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)要求违约方就违约事项的背景、原因、过程进行详细说明,并对后续按约定履行义务进行承诺和保证。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)要求违约方就违约行为所导致的守约方实际经济损失、产生的额外费用进行赔偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)要求违约方妥善解决其违约行为而给守约方带来的诉讼、纠纷、索赔、处罚或其他不利影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(5)守约方认为有必要的其他合理措施。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">任何一方发生前述违约事件或因中国人民银行、公安机关、政府机关或司法机关等国家机关向守约方发出要求的,守约方有权要求违约方限期整改其违约行为,给守约方造成损失的,有权要求违约方承担赔偿责任,同时守约方有权采取暂停、中止或终止合作或其他违约救济措施而无需承担任何违约责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、除非发生不可抗力之情形,否则违约方须在违约事项发生后承担违约责任。违约方经催告后拒不纠正违约行为或拒绝承担违约责任的,守约方有权中止或终止协议。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、任何一方未行使其权利或未就违约方的违约行为采取任何行动,不应被视为对权利的放弃或对追究违约责任或义务的放弃。任何一方放弃针对违约方的任何权利或放弃追究违约方的任何责任,不应被视为放弃对违约方的任何其他权利或任何其他任何责任的追究,所有放弃均应以书面形式做出。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">条 </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">知识产权及保密条款</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、因本协议约定事项进行的合作如涉及甲乙丙三方知识产权研发、归属的,原则上相关知识产权归属于研发主体。涉及合作开发的,由</span><span style="font-family:仿宋; font-size:12pt">双方</span><span style="font-family:仿宋; font-size:12pt">另行签署协议约定,并以该协议的约定为准。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、甲乙丙三方确认,“智分期”所</span><span style="font-family:仿宋; font-size:12pt">涉及</span><span style="font-family:仿宋; font-size:12pt">相关的知识产权归甲方所有,包括 “</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期”著作权、商标权以及甲方受乙方委托为其设计的产品页面等</span><span style="font-family:仿宋; font-size:12pt">均</span><span style="font-family:仿宋; font-size:12pt">由</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">和/或甲方关联方享有,</span><span style="font-family:仿宋; font-size:12pt">未经甲方书面同意,乙方不得将其用于本次合作以外的目的或授权他人使用</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、在履行本协议期间,本协议项下各方在使用其他方授权的企业名称、商标、商号、品牌、域名和网站时,应当仅限于为各方在本协议中约定的内容服务,不得用于与“智分期”业务无关的其他业务内容或经营目的。各方在其自身宣传材料、名片、市场宣传、网站建设以及其他任何方面使用其他方授权的名称、域名和网站,都必须事先书面通知其他方,并获得其他方的许可后方可进行,否则一方有权要求违约方承担由此而产生的一切法律责任,并赔偿因此造成的直接损失。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、甲乙丙三方应对其在履行本协议过程中获悉的任何有关其他方及其他客户的非公开信息和资料给予保密,未经其他方事先书面同意,不得用于本协议之外的目的,不得向任何第三方披露或以其他方式予以公开,但相关法律法规及规范性文件另有规定或监管部门另有要求的,以及第三方专业服务机构(法律、财务、审计等)和资金服务机构的合理要求除外。如因任何一方原因造成前述信息揭露且无法消除影响的,过错方应承担一切违约责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、甲乙丙三方承认在合作过程中获得的信息的敏感性及保密性,并承诺对该等信息进行保密。保密信息包括但不限于:①本合作本身,包括合作各方的名称及本协议的条款和内容;②一方因本协议协商和履行而获得的另一方的任何信息,包括但不限于交易数据、信用卡持卡人或乙方用户的信息和资料、另一方的财务状况、商业活动计划和安排、市场调查结果、数据模型、数据分析报告、所有关于履行本合作项目所产生的相关数据;③任何其它因本协议而获悉的另一方的任何信息。一方同意在未取得另一方事先书面同意前不得以口头或书面的方式向任何第三方披露任何该等保密信息,除非该等披露是法律或法定程序所强制要求的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、甲乙丙三方应保证其所有雇员、佣工、代理人和承包商对上述保密信息保密。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十一条 协议的生效、解除与终止</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、本协议自甲乙丙三方法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人签字并</span><span style="font-family:仿宋; font-size:12pt">加盖各自公章或协议章后生效,有效期为自本协议生效之日起</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> </span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">壹</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> </span><span style="font-family:仿宋; font-size:12pt">年,</span><span style="font-family:仿宋; font-size:12pt">有效期届满,</span><span style="font-family:仿宋; font-size:12pt">双</span><span style="font-family:仿宋; font-size:12pt">方如需继续开展合作的,应另行</span><span style="font-family:仿宋; font-size:12pt">签署</span><span style="font-family:仿宋; font-size:12pt">书面协议</span><span style="font-family:仿宋; font-size:12pt">,</span><span style="font-family:仿宋; font-size:12pt">本协议</span><span style="font-family:仿宋; font-size:12pt">的</span><span style="font-family:仿宋; font-size:12pt">有效期满/终止/</span><span style="font-family:仿宋; font-size:12pt">中止</span><span style="font-family:仿宋; font-size:12pt">均不影响</span><span style="font-family:仿宋; font-size:12pt">甲乙双</span><span style="font-family:仿宋; font-size:12pt">方</span><span style="font-family:仿宋; font-size:12pt">在本协议有效期间</span><span style="font-family:仿宋; font-size:12pt">对</span><span style="font-family:仿宋; font-size:12pt">用</span><span style="font-family:仿宋; font-size:12pt">户所承诺服务的履行,</span><span style="font-family:仿宋; font-size:12pt">同时本协议有效期间双方已产生的权利义务</span><span style="font-family:仿宋; font-size:12pt">也不受影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、本协议对本协议各方的承继人或受让人具有同等约束力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、除本协议另有约定外,如发生以下情形之一的,甲方有权单方面解除本协议,本协议自甲方发出的解除通知到达本协议其他方之日起解除:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)因不可抗力,或因法律、法规或国家政策调整或监管机关、司法部门等国家机关要求终止本协议,从而导致本协议无法继续履行;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)因甲方发生重组、股权调整、经营决策调整导致甲方无法继续履行本协议;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)因乙方严重违约导致本协议无法继续履行;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议因前款第(1)、(2)项情形解除的,本协议双方互不负任何违约责任;本协议因前款第(3)项情形解除的,</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">有权要求乙方承担违约责任,如造成损失或其他不利影响的,</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">有权要求乙方承担赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十二条 通知与送达</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、本协议项下任一方做出或者发出的任何通知、要求或者信函应以书面形式(包含电子邮件等方式)交付或者发送至另一方,相关方联系方式如下:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">)甲方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">yumengying@finlean.com</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18828020724</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方接收通知地址</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">四川省</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">成都市高新区香年广场T3-4301</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">)乙方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人邮箱</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">负责人手机号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方接收通知地址:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时选择及填写的地址</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">)丙方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">yixuanhong@finlean.com</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18108214026</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方接收通知地址:四川省</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">成都市高新区香年广场T3-4301</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲乙丙三方合作期内,如联系方式发生变更的,变更方应当提前十个工作日以电子邮件或邮寄等书面方式通知对方。未及时书面通知而造成的任何损失,由违约方承担相应责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、任何通知、要求或其它文件都应当以书面形式做出,如通过传真或邮件等有线传输方式发送的,发出方传送系统确认传送成功之时,视为送达。如通过邮资预付的挂号邮递或快递的方式发送,在发出后的第三日视为已经送达。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、任何一方没有向对方预留或补留通讯地址、或预留的通讯地址有误的、或在邮寄途中发生延误或丢失的,对方不承担任何延误或未送达的责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本协议有效期间,如乙方发生重大产权转让、体制变更、申请停业整顿、申请解散、申请破产等足以影响甲方权利实现的行为时,乙方保证提前30个工作日通知甲方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十三条</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">争议的解决</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">甲乙丙三方确认,本协议的签署、生效和履行以不违反中国的法律法规为前提。如本协议中任一条款违反适用的法律法规,则该条款将被视为无效,但该无效条款并不影响本协议其他条款的效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">因本协议引发的或与本协议有关的争议,由双</span><span style="font-family:仿宋; font-size:12pt">方</span><span style="font-family:仿宋; font-size:12pt">协商解决,也可由有关部门调解;协商或调解不成的,任何一方可以将争议提交北京仲裁委员会申请仲裁,甲乙丙三方同意根据申请仲裁时北京仲裁委员会现行有效的仲裁规则进行仲裁。仲裁裁决是终局的,对甲乙丙三方具有约束力,双方特此不可撤销地放弃向可能对争议事项有管辖权的任何法院提起诉讼的权利。仲裁费用和胜诉方因办理案件所支出的合理费用由败诉方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十四条 其他条款</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、除前述第五条相关条款约定以外,乙方承诺在本协议签署之日起的一年内,乙方不会就信用卡分期以及类似智分期业务模式的任何其他机构开展基于信用卡分期合作。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、甲乙丙三方均系合法成立并有效存续的公司,其拥有充分的权力和权利签署并履行本协议;各方均已经充分知悉、理解本协议的全部条款内容,并且已采取一切适当和必要的公司行为,授权签署和履行本协议,签署和履行本协议是各方真实意思表示,该等签署是真实、合法、有效的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、本协议附件为本协议不可分割的组成部分,与本协议具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本协议的任何一方不得就本协议的内容做出单方面修改,本协议中未尽事宜由甲乙丙三方协商,需采用书面形式签订补充协议,补充协议与本协议具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、本协议正文、本协议附件和本协议之补充协议(如有)共同组成本协议之完整内容。甲乙丙三方认可并同意在就“智分期”业务进行合作时,除遵守本协议正文的相关约定外,还应遵守本协议附件和本协议之补充协议(如有)的约定。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、本协议一式叁份,甲乙丙三方</span><span style="font-family:仿宋; font-size:12pt">各</span><span style="font-family:仿宋; font-size:12pt">执壹份,具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件列表</span><span style="font-family:仿宋; font-size:12pt">:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件一:智分期服务费费率标准</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件二:分期交易确认单模板</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件</span><span style="font-family:仿宋; font-size:12pt">三:</span><span style="font-family:仿宋; font-size:12pt">《分期应收账款转让通知书》</span></p><p style="margin:0pt"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt; font-style:italic"> </span><span style="font-family:仿宋; font-size:12pt; font-style:italic">---------------------</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">以下无正文,</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">签</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">字页</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">随附</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-------------------</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方(盖章):</span><span style="font-family:仿宋; font-size:12pt">深圳前海彩蜂商业保理有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><a name="Text41"><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">余雁南</span><span style="font-family:仿宋; font-size:12pt"> </span></a></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:300pt; widows:0"><span style="-aw-bookmark-end:Text41"></span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方(盖章):</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">法人姓名</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:288pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方(盖章):</span><span style="font-family:仿宋; font-size:12pt">成都唯知信息科技有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">赵育梓</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">附件</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">: 分期</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">应收账款转让通知书</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">分期应收账款转让通知书</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">(致用户声明)</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">【此处填写用户名称】(下称“贵方”):</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方通过智分期服务</span><span style="font-family:仿宋; font-size:12pt">向</span><span style="font-family:仿宋; font-size:12pt">乙方购买商品而与乙方形成了买卖关系及保理公司自【乙方】处受让【乙方】在该买卖约定项下对贵方享有的应收账款而与贵方形成了交易关系及在此基础上形成了应收账款,现就应收账款项下我方对贵方享有的应收账款转让的事宜我方向贵方通知如下:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、我方与保理公司签署了智分期业务合作协议,我方将我方对贵方在商务协议项下享有的应收账款(截至保理公司支付转让对价之日)及自该日起(含该日)产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等及任何从权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现应收账款而享有的任何实体性权利及程序性权利等,全部转让给保理公司。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、自本通知书签署之日起,保理公司作为新债权人有权要求贵方根据上述商务协议向保理公司清偿本通知书列明的应收账款及履行商务协议项下的其他义务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方应自收到本通知书之日起,将上述商务协议项下的全部应付款项于其到期之日支付至保理公司与贵方约定的指定账户或自本通知书签署之日起保理公司另行通知的其他账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方仅得通过上述收款账户以电汇货币方式偿付本通知书列明的应收账款,除非保理公司另行书面同意或通知,我方无权通知贵方更改上述还款账户信息,贵方亦不得向保理公司指定账户外的其他任何账户或以其他方式偿付应收账款,否则视为贵方未能偿付相应债务,贵方仍应按保理公司的要求再行偿付。由此产生的一切损失、责任</span><span style="font-family:仿宋; font-size:12pt">等,由贵方自行承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、为避免歧义,我方在此确认:我方在商品服务项下的任何义务和责任均不转让给保理公司,仍由我方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本通知书一式三份,贵我双方各执一份,另一份由我方提交保理公司备存。</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">乙方</span><span style="font-family:仿宋; font-size:12pt">法人签字</span><span style="font-family:仿宋; font-size:12pt">(公章):</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">法人姓名</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 36pt 0pt 0pt; orphans:0; text-align:center; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span></p></div>'
\ No newline at end of file
diff --git a/src/utils/config.js b/src/utils/config.js
new file mode 100644
index 0000000..31fba99
--- /dev/null
+++ b/src/utils/config.js
@@ -0,0 +1,29 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-09-02 14:03:59
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 14:04:19
+ * @Description:
+ */
+/**
+ * c.k 2017/11/15 创建
+ * c.y 2018/3/16 修改 (把增加了获取项目的动态配置的方法)
+ * 获取设备的信息以及渠道号
+ * 获取项目的名称,logo,协议等等动态配置
+ */
+
+import jsBridge from './jsBridge'; // 安卓/iOS获取设备的信息已经cn值
+import systemApi from '@/api/oldapi';
+
+// 设置客户端的信息
+function setClientInfo() {
+ // 如果设置是安卓/iOS的话,就通过jsBridge来获取设备信息,以及cn值
+ jsBridge.fetchDeviceInfo();
+}
+
+// 获取项目的配置信息,项目的标题,logo,协议
+function fetchProductConfig() {
+ return systemApi.getJson();
+}
+
+export default {setClientInfo, fetchProductConfig};
diff --git a/src/utils/console.js b/src/utils/console.js
new file mode 100644
index 0000000..162fa2a
--- /dev/null
+++ b/src/utils/console.js
@@ -0,0 +1,19 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-09-03 10:32:28
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-09-03 10:53:59
+ * @Description: 是否显示控制台打印值,用this.$log()打印到控制台 DEBUG=true为调试模式输出到控制台,DEBUG=false不输出到控制台
+ */
+const DEBUG = true
+var log = function(...araguments){
+ if(DEBUG){
+ var arr = Array.prototype.slice.call(araguments)
+ console.log.apply(console,arr)
+ }
+}
+export default {
+ install(Vue,options){
+ Vue.prototype.$log = log;
+ }
+}
\ No newline at end of file
diff --git a/src/utils/createUserProtocol.js b/src/utils/createUserProtocol.js
new file mode 100644
index 0000000..9e849b9
--- /dev/null
+++ b/src/utils/createUserProtocol.js
@@ -0,0 +1,27 @@
+// import agreement from '../../static/agreement2';
+
+
+export default function(info) {
+ //不用引入areement2,因为在index.html里面已经导入了
+ let agreement = agreement2;
+ agreement = agreement.replace('商户注册时填写的营业执照号', info.licenseNo);
+ agreement = agreement.replace('商户注册时填写的负责人姓名', info.priName);
+ agreement = agreement.replace(
+ '商户注册时填写的负责人手机号',
+ info.priMblNo
+ );
+ agreement = agreement.replace('商户名称或法人姓名', '');
+ agreement = agreement.replace('商户注册时填写的银行卡号', '');
+ agreement = agreement.replace('商户注册时选择的银行', '');
+ agreement = agreement.replace('商户注册时填写的负责人邮箱', info.priEmail);
+ agreement = agreement.replace('负责人手机号', info.priMblNo);
+ agreement = agreement.replace('商户注册时选择及填写的地址', info.dtlAddr);
+ agreement = agreement.replace(/当天日期年/g, `${new Date().getFullYear()}`);
+ agreement = agreement.replace(
+ /当天日期月/g,
+ `${new Date().getMonth() + 1}`
+ );
+ agreement = agreement.replace(/当天日期日/g, `${new Date().getDate()}`);
+ agreement = agreement.replace(/法人姓名/g, info.legalName);
+ return agreement;
+}
diff --git a/src/utils/date.js b/src/utils/date.js
new file mode 100644
index 0000000..4ec3b2d
--- /dev/null
+++ b/src/utils/date.js
@@ -0,0 +1,73 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-10-25 10:17:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-10-29 11:11:29
+ * @Description:
+ */
+/**
+ * 时间格式化函数,如果没有传递格式就返回时间戳
+ * @param date Date 对象
+ * @param fmt 格式规范
+ * @returns {*}
+ */
+
+export default function(date, fmt) {
+ if (!date) {
+ return null;
+ }
+ if (typeof date === 'string') {
+ date = new Date(date.replace(/-/g, '/'));
+ }
+ if (typeof date === 'number') {
+ date = new Date(date);
+ }
+ if (fmt === undefined) {
+ return Number(date);
+ } else {
+ var o = {
+ 'M+': date.getMonth() + 1,
+ 'D+': date.getDate(),
+ 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
+ 'H+': date.getHours(),
+ 'm+': date.getMinutes(),
+ 's+': date.getSeconds(),
+ 'q+': Math.floor((date.getMonth() + 3) / 3),
+ S: date.getMilliseconds()
+ };
+ var week = {
+ '0': '\u65e5',
+ '1': '\u4e00',
+ '2': '\u4e8c',
+ '3': '\u4e09',
+ '4': '\u56db',
+ '5': '\u4e94',
+ '6': '\u516d'
+ };
+ if (/(Y+)/.test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+ );
+ }
+ if (/(E+)/.test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ (RegExp.$1.length > 1
+ ? RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468'
+ : '') + week[date.getDay() + '']
+ );
+ }
+ for (var k in o) {
+ if (new RegExp('(' + k + ')').test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ RegExp.$1.length === 1
+ ? o[k]
+ : ('00' + o[k]).substr(('' + o[k]).length)
+ );
+ }
+ }
+ return fmt;
+ }
+}
diff --git a/src/utils/dateformat.js b/src/utils/dateformat.js
new file mode 100644
index 0000000..d812901
--- /dev/null
+++ b/src/utils/dateformat.js
@@ -0,0 +1,282 @@
+/*
+ * @Descripttion: 时间格式化函数
+ * @Author:
+ * @LastEditors : 小明丶
+ * @Date: 2019-03-30 09:24:27
+ * @LastEditTime : 2019-12-26 16:14:07
+ */
+(function (main) {
+ 'use strict';
+ var fecha = {};
+ var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
+ var twoDigits = /\d\d?/;
+ var threeDigits = /\d{3}/;
+ var fourDigits = /\d{4}/;
+ var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+ var noop = function () {
+ };
+
+
+ function monthUpdate(arrName) {
+ return function (d, v, i18n) {
+ var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
+ if (~index) {
+ d.month = index;
+ }
+ };
+ }
+
+ function pad(val, len) {
+ val = String(val);
+ len = len || 2;
+ while (val.length < len) {
+ val = '0' + val;
+ }
+ return val;
+ }
+
+ var formatFlags = {
+ D: function(dateObj) {
+ return dateObj.getDay();
+ },
+ DD: function(dateObj) {
+ return pad(dateObj.getDay());
+ },
+ Do: function(dateObj, i18n) {
+ return i18n.DoFn(dateObj.getDate());
+ },
+ d: function(dateObj) {
+ return dateObj.getDate();
+ },
+ dd: function(dateObj) {
+ return pad(dateObj.getDate());
+ },
+ ddd: function(dateObj, i18n) {
+ return i18n.dayNamesShort[dateObj.getDay()];
+ },
+ dddd: function(dateObj, i18n) {
+ return i18n.dayNames[dateObj.getDay()];
+ },
+ M: function(dateObj) {
+ return dateObj.getMonth() + 1;
+ },
+ MM: function(dateObj) {
+ return pad(dateObj.getMonth() + 1);
+ },
+ MMM: function(dateObj, i18n) {
+ return i18n.monthNamesShort[dateObj.getMonth()];
+ },
+ MMMM: function(dateObj, i18n) {
+ return i18n.monthNames[dateObj.getMonth()];
+ },
+ yy: function(dateObj) {
+ return String(dateObj.getFullYear()).substr(2);
+ },
+ yyyy: function(dateObj) {
+ return dateObj.getFullYear();
+ },
+ h: function(dateObj) {
+ return dateObj.getHours() % 12 || 12;
+ },
+ hh: function(dateObj) {
+ return pad(dateObj.getHours() % 12 || 12);
+ },
+ H: function(dateObj) {
+ return dateObj.getHours();
+ },
+ HH: function(dateObj) {
+ return pad(dateObj.getHours());
+ },
+ m: function(dateObj) {
+ return dateObj.getMinutes();
+ },
+ mm: function(dateObj) {
+ return pad(dateObj.getMinutes());
+ },
+ s: function(dateObj) {
+ return dateObj.getSeconds();
+ },
+ ss: function(dateObj) {
+ return pad(dateObj.getSeconds());
+ },
+ S: function(dateObj) {
+ return Math.round(dateObj.getMilliseconds() / 100);
+ },
+ SS: function(dateObj) {
+ return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
+ },
+ SSS: function(dateObj) {
+ return pad(dateObj.getMilliseconds(), 3);
+ },
+ a: function(dateObj, i18n) {
+ return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
+ },
+ A: function(dateObj, i18n) {
+ return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
+ },
+ ZZ: function(dateObj) {
+ var o = dateObj.getTimezoneOffset();
+ return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
+ }
+ };
+
+ var parseFlags = {
+ d: [twoDigits, function (d, v) {
+ d.day = v;
+ }],
+ M: [twoDigits, function (d, v) {
+ d.month = v - 1;
+ }],
+ yy: [twoDigits, function (d, v) {
+ var da = new Date(), cent = +('' + da.getFullYear()).substr(0, 2);
+ d.year = '' + (v > 68 ? cent - 1 : cent) + v;
+ }],
+ h: [twoDigits, function (d, v) {
+ d.hour = v;
+ }],
+ m: [twoDigits, function (d, v) {
+ d.minute = v;
+ }],
+ s: [twoDigits, function (d, v) {
+ d.second = v;
+ }],
+ yyyy: [fourDigits, function (d, v) {
+ d.year = v;
+ }],
+ S: [/\d/, function (d, v) {
+ d.millisecond = v * 100;
+ }],
+ SS: [/\d{2}/, function (d, v) {
+ d.millisecond = v * 10;
+ }],
+ SSS: [threeDigits, function (d, v) {
+ d.millisecond = v;
+ }],
+ D: [twoDigits, noop],
+ ddd: [word, noop],
+ MMM: [word, monthUpdate('monthNamesShort')],
+ MMMM: [word, monthUpdate('monthNames')],
+ a: [word, function (d, v, i18n) {
+ var val = v.toLowerCase();
+ if (val === i18n.amPm[0]) {
+ d.isPm = false;
+ } else if (val === i18n.amPm[1]) {
+ d.isPm = true;
+ }
+ }],
+ ZZ: [/[\+\-]\d\d:?\d\d/, function (d, v) {
+ var parts = (v + '').match(/([\+\-]|\d\d)/gi), minutes;
+
+ if (parts) {
+ minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
+ d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
+ }
+ }]
+ };
+ parseFlags.DD = parseFlags.D;
+ parseFlags.dddd = parseFlags.ddd;
+ parseFlags.Do = parseFlags.dd = parseFlags.d;
+ parseFlags.mm = parseFlags.m;
+ parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
+ parseFlags.MM = parseFlags.M;
+ parseFlags.ss = parseFlags.s;
+ parseFlags.A = parseFlags.a;
+
+
+ fecha.masks = {
+ 'default': 'ddd MMM dd yyyy HH:mm:ss',
+ shortDate: 'M/D/yy',
+ mediumDate: 'MMM d, yyyy',
+ longDate: 'MMMM d, yyyy',
+ fullDate: 'dddd, MMMM d, yyyy',
+ shortTime: 'HH:mm',
+ mediumTime: 'HH:mm:ss',
+ longTime: 'HH:mm:ss.SSS'
+ };
+
+
+ fecha.format = function (dateObj, mask, i18nSettings) {
+ var i18n = i18nSettings || fecha.i18n;
+
+ if (typeof dateObj === 'number') {
+ dateObj = new Date(dateObj);
+ }
+
+ if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
+ //throw new Error('Invalid Date in fecha.format');
+ }
+
+ mask = fecha.masks[mask] || mask || fecha.masks['default'];
+
+ return mask.replace(token, function ($0) {
+ return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
+ });
+ };
+
+
+ fecha.parse = function (dateStr, format, i18nSettings) {
+ var i18n = i18nSettings || fecha.i18n;
+
+ if (typeof format !== 'string') {
+ throw new Error('Invalid format in fecha.parse');
+ }
+
+ format = fecha.masks[format] || format;
+
+ if (dateStr.length > 1000) {
+ return false;
+ }
+
+ var isValid = true;
+ var dateInfo = {};
+ format.replace(token, function ($0) {
+ if (parseFlags[$0]) {
+ var info = parseFlags[$0];
+ var index = dateStr.search(info[0]);
+ if (!~index) {
+ isValid = false;
+ } else {
+ dateStr.replace(info[0], function (result) {
+ info[1](dateInfo, result, i18n);
+ dateStr = dateStr.substr(index + result.length);
+ return result;
+ });
+ }
+ }
+
+ return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);
+ });
+
+ if (!isValid) {
+ return false;
+ }
+
+ var today = new Date();
+ if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
+ dateInfo.hour = +dateInfo.hour + 12;
+ } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
+ dateInfo.hour = 0;
+ }
+
+ var date;
+ if (dateInfo.timezoneOffset != null) {
+ dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
+ date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+ dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
+ } else {
+ date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+ dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
+ }
+ return date;
+ };
+
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = fecha;
+ } else if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return fecha;
+ });
+ } else {
+ main.fecha = fecha;
+ }
+})(this);
diff --git a/src/utils/deviceInfo.js b/src/utils/deviceInfo.js
new file mode 100644
index 0000000..6638cae
--- /dev/null
+++ b/src/utils/deviceInfo.js
@@ -0,0 +1,88 @@
+/**
+ * Created by c.k on 2017/11/10.
+ * 获取客户端本地设备信息和渠道编号
+ */
+
+export default {
+ saveDeviceInfo(deviceInfo) {
+ // 外链默认解析地址里面的chanNo,app时解析原生回传的chanNo
+ // alert(deviceInfo);
+ deviceInfo = JSON.parse(deviceInfo);
+ if (deviceInfo && deviceInfo.childChan) {
+ deviceInfo.isApp = '1';
+ }
+ let configInfo = window.localStorage.getItem('newClientInfo');
+ if (configInfo) {
+ configInfo = JSON.parse(configInfo);
+ for (let key in deviceInfo) {
+ configInfo[key] = deviceInfo[key];
+ }
+ configInfo.ostype = '03';
+
+ window.localStorage.setItem(
+ 'newClientInfo',
+ JSON.stringify(configInfo)
+ );
+ }
+ deviceInfo = JSON.stringify(deviceInfo);
+ window.localStorage.setItem('deviceInfo', deviceInfo);
+ },
+ // 获取本地存储的设备信息
+ fetchDeviceInfo() {
+ return window.localStorage.getItem('deviceInfo');
+ },
+ // 获取设备类型
+ getDeviceType() {
+ let browser = {
+ versions() {
+ let u = navigator.userAgent;
+ return {
+ trident: u.indexOf('Trident') > -1, // IE内核
+ presto: u.indexOf('Presto') > -1, // opera内核
+ webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
+ gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, // 火狐内核
+ mobile: !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端
+ ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
+ android:
+ u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或者uc浏览器
+ iPhone: u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器
+ iPad: u.indexOf('iPad') > -1, // 是否iPad
+ webApp: u.indexOf('Safari') === -1, // 是否web应该程序,没有头部与底部
+ weixin: u.indexOf('MicroMessenger') > -1, // 是否微信 (2015-01-22新增)
+ qq: u.match(/\sQQ/i) === 'qq' // 是否QQ
+ };
+ },
+ language: (
+ navigator.browserLanguage || navigator.language
+ ).toLowerCase()
+ };
+ var u = navigator.userAgent;
+ var device = ''; //当前设备信息
+ if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {
+ //安卓手机
+ device = 'Android';
+ return 'Android';
+ } else if (u.indexOf('iPhone') > -1) {
+ //苹果手机
+ device = 'IOS';
+ return 'IOS';
+ } else if (u.indexOf('Windows Phone') > -1) {
+ //winphone手机
+ device = 'WindowsPhone';
+ return 'WindowsPhone';
+ } else if (u.indexOf('MicroMessenger') > -1) {
+ device = 'weixin';
+ return 'weixin';
+ }
+ // let type = browser.versions();
+ // if (type.android) {
+ // return 'Android'
+ // } else if (type.ios || type.iPhone || type.iPad) {
+ // return 'IOS'
+ // } else if (type.weixin) {
+ // return 'weixin'
+ // } else {
+ // return 'other'
+ // }
+ }
+};
diff --git a/src/utils/filters.js b/src/utils/filters.js
new file mode 100644
index 0000000..1d7ca24
--- /dev/null
+++ b/src/utils/filters.js
@@ -0,0 +1,31 @@
+/*
+ * @Descripttion: Vue过滤器
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-05 11:32:33
+ * @LastEditTime: 2020-10-10 14:52:54
+ */
+import dataformat from "./dateformat";
+
+/**
+ * @Descripttion: 格式化电话号码
+ * @param {tel} 电话号码
+ * @return: 13388327924 >>> 133****7924
+ */
+export function formatPhone(tel) {
+ return tel.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
+}
+
+
+let list = [
+ {name:'timeformat',fn:dataformat.format},
+ // {name:'phoneformat',fn:formatPhone},
+];
+
+export default {
+ install(Vue,opt){
+ list.forEach(item=>{
+ Vue.filter(item.name,item.fn);
+ })
+ }
+}
\ No newline at end of file
diff --git a/src/utils/formCheckAndComb.js b/src/utils/formCheckAndComb.js
new file mode 100644
index 0000000..4b1a35b
--- /dev/null
+++ b/src/utils/formCheckAndComb.js
@@ -0,0 +1,194 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-09-02 09:12:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:18:52
+ * @Description:
+ */
+/**
+ * Created by c.y
+ * 2018/4/12
+ * form--提交数据组合--例如房抵贷
+ */
+import Vue from 'vue';
+import validate from './validator';
+import IDValidator from './IDValidator';
+
+
+// 把后台返回的null,转换为空字符串, infoObj需要检查
+function changeNullToString (infoObj) {
+ for (let i in infoObj) {
+ infoObj[i] === null ? infoObj[i] = '' : infoObj[i] = infoObj[i];
+ }
+ return infoObj;
+}
+
+// 组合后台返回省,市,区---来满足vux的地址选择插件需要的格式
+// province省 city市 country区
+function getAddressFormat (province, city, country) {
+ let addressList = [];
+ if (!validate.checkValEmpty(province)) {
+ addressList.push(province);
+ }
+ if (!validate.checkValEmpty(city)) {
+ addressList.push(city);
+ }
+ if (!validate.checkValEmpty(country)) {
+ addressList.push(country);
+ }
+ return addressList;
+}
+
+// 判断地址类型的值,是否必填,并进行提示
+// addressList, 代表需要校验的地址数组
+function checkAddressRequired (addressList) {
+ return validate.checkValEmpty(addressList[0]);
+}
+
+// 得到selector的列表
+function getOptionsList (optionList) {
+ let tmpList = [];
+ if (optionList instanceof Array) {
+ optionList.forEach(function (item) {
+ tmpList.push({
+ key: item.code,
+ value: item.name
+ });
+ });
+ }
+ return tmpList;
+}
+
+// 检查必填的字段以及错误提示, requiredList是检查规则, checkInfo要检查的对象
+// context为this对象
+function checkRequiredField (requiredList, checkInfo, context) {
+ let allPassLabel = true;
+ for (let i = 0; i < requiredList.length; i++) {
+ // 如果配置了validator,那么就以validator进行验证,忽略其他验证(validator需要是函数)
+ if (requiredList[i].validator && Object.prototype.toString.call(requiredList[i].validator) === '[object Function]') {
+ if (!requiredList[i].validator(requiredList[i], checkInfo, context)) {
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是地址的话
+ } else if (requiredList[i].type === 'address') {
+ // 对于地址检查,是否为空,为空的话,返回true
+ if (checkAddressRequired(context[requiredList[i].checkKey])) {
+ checkValidateTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是非地址的话,那么第一步检查是否为空
+ } else {
+ // 第一步,先检查是否填写
+ if (validate.checkValEmpty(checkInfo[requiredList[i].key])) {
+ checkValidateTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果有patter的话,直接使用pattern,即正则判断(pattern需要正则)
+ if (requiredList[i].pattern && Object.prototype.toString.call(requiredList[i].pattern) === '[object RegExp]') {
+ if(!requiredList[i].pattern.test(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ }
+ // 对于特定类型,进行判断是否添加正确的类型
+ // 如果是名字类型
+ if (requiredList[i].type === 'name') {
+ if (!validate.checkName(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是手机号
+ } else if (requiredList[i].type === 'tel') {
+ if (!validate.checkPhone(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是身份证
+ } else if (requiredList[i].type === 'idCard') {
+ if (!IDValidator.isValid(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是座机
+ } else if (requiredList[i].type === 'lineTel') {
+ if (!validate.checkLandline(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是房屋楼层
+ } else if (requiredList[i].type === 'floor') {
+ if (!validate.checkFloor(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ // 如果是银行卡
+ }else if (requiredList[i].type === 'bankCardNo') {
+ if (!validate.bankCard(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ }else if (requiredList[i].type === 'isEmail') {
+ if (!validate.checkEmail(checkInfo[requiredList[i].key])) {
+ checkRegularExpreTip(requiredList[i], context);
+ allPassLabel = false;
+ return false;
+ }
+ }
+ }
+ }
+ return allPassLabel;
+}
+
+// 错误提示, requiredItem为检查的对象,context为this对象
+function checkValidateTip (requiredItem, context) {
+ let _this = context;
+ // tipType值为1为输入框,为2的话是下拉选择
+ if (requiredItem.tipType === 1) {
+ // 如果进行正则验证的话,那么提示内容是正确,而一般的提示没有正确的这个提示字
+ // 如果没有type属性的话,那么就是默认的
+ Vue.prototype.$notify('请输入' + requiredItem.message, 'middle');
+ return false;
+ } else if (requiredItem.tipType === 2) {
+ Vue.prototype.$notify('请选择' + requiredItem.message, 'middle');
+ return false;
+ }
+}
+
+// 错题提示,requiredItem为检查的对象,context为this对象
+// 这个是正则匹配的检测或者其他特殊检测的提示
+function checkRegularExpreTip (requiredItem, context) {
+ Vue.prototype.$notify('请输入正确的' + requiredItem.message, 'middle');
+ return false;
+}
+
+// 封装提交数据 submitVal需要提交的val对象
+function packageSubmitInfo (submitVal) {
+ let submitInfo = {};
+ if (submitVal instanceof Object && submitVal !== null) {
+ for (let i in submitVal) {
+ // 对于非必填的话,其值为空的话,那么不传递给后台
+ if (!validate.checkValEmpty(submitVal[i])) {
+ submitInfo[i] = submitVal[i];
+ }
+ }
+ }
+ return submitInfo;
+}
+
+export default {
+ getAddressFormat,
+ getOptionsList,
+ checkRequiredField,
+ packageSubmitInfo,
+ changeNullToString
+};
diff --git a/src/utils/formValidator.js b/src/utils/formValidator.js
new file mode 100644
index 0000000..0663627
--- /dev/null
+++ b/src/utils/formValidator.js
@@ -0,0 +1,101 @@
+/*
+ * @Descripttion: 表单验证工具函数
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-01 19:54:53
+ * @LastEditTime: 2020-11-09 14:26:43
+ */
+import IDValidator from './IDValidator';
+
+let fns = {
+ // 参数是否为真
+ isEmpty(value) {
+ return value !== "" && typeof value !== "undefined" && value !== null;
+ },
+ //密码验证
+ isPassword(value) {
+ // 验证密码格式
+ return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(value);
+ },
+ // 验证码验证
+ isCode(value) {
+ return /^\d{4}$/.test(value);
+ },
+ isEmail(value){
+ return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value);
+ },
+ // 验证电话
+ isTel(value) {
+ return /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/.test(value);
+ },
+ //验证身份证
+ isIdCard(value){
+ return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)
+ },
+ // idCard check
+ checkIDCard(idCard) {
+ // 验证身份证格式
+ return IDValidator.isValid(idCard);
+ },
+ //验证银行卡号
+ isBankCode(iccid){
+ let initCard = iccid,
+ s1 = 0,
+ s2 = 0;
+ iccid = iccid.substring(0, iccid.length - 1);
+ let reverse = '';
+ for (let i = iccid.length; i > 0; i--) {
+ reverse += iccid.charAt(i - 1);
+ }
+ for (let i = 0; i < reverse.length; i++) {
+ let digit = parseInt(reverse.charAt(i), 10);
+ if (i % 2 != 0) {
+ s1 += digit;
+ } else {
+ s2 += 2 * digit;
+ if (digit >= 5) {
+ s2 -= 9;
+ }
+ }
+ }
+ let sum = 10 - ((s1 + s2) % 10);
+ if (sum === 10) {
+ sum = 0;
+ }
+ return iccid + sum == initCard;
+ }
+};
+
+let Validator = function (form, rules) {
+ return {
+ // rule demo
+ //rules:>>> [{key:"formkey",message:"",type:"isEmpty",rule:/\d/}]
+ check(callback) {
+ if (!Array.isArray(rules) && rules.length === 0) throw "rules must be instance of Array";
+ let len = rules.length;
+ for (let index = 0; index < len; index++) {
+ const ruleItem = rules[index];
+ let fnName = fns[ruleItem.type];
+ if (fnName && !fnName(form[ruleItem.key])) {
+ callback(ruleItem);
+ return false;
+ }
+ // 如果有自定义验证规则
+ let rule = ruleItem.rule;
+ if(typeof rule !=='undefined' && !rule.test(form[ruleItem.key])){
+ callback(ruleItem);
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+};
+
+
+// export default Validator;
+export default {
+ install(Vue,opt){
+ Vue.prototype.$validator = Validator;
+ }
+}
diff --git a/src/utils/index.js b/src/utils/index.js
new file mode 100644
index 0000000..8ebb489
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,361 @@
+/*
+ * @Descripttion: 工具函数 以 _ 符号作为函数前缀
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-10 22:05:50
+ * @LastEditTime: 2020-03-27 14:17:45
+ */
+
+/**
+ * @Descripttion: 函数节流
+ * @param {method} 执行的方法
+ * @param {delay} 延迟时间
+ * @param {context} 绑定的this值
+ * @return: Function
+ */
+export function _throller(method, delay, context) {
+ var begin = new Date();
+ return function () {
+ var args = arguments,
+ current = new Date();
+ if (current - begin >= delay) {
+ method.apply(context, args);
+ begin = current;
+ }
+ }
+}
+
+/**
+ * @Descripttion: 函数防抖
+ * @param {method} 执行的方法
+ * @param {delay} 延迟时间
+ * @return: Function
+ */
+export function _debounce(method, delay) {
+ let timer = null;
+ return function () {
+ let context = this,
+ args = arguments;
+
+ clearTimeout(timer);
+ timer = setTimeout(function () {
+ method.apply(context, args);
+ }, delay);
+ }
+}
+
+/**
+ * @Descripttion: 字符串参数解析
+ * @demo '?demo=123&test=test'
+ * @return: {demo:123,test:'test'}
+ */
+export function _getQueryArgs(str) {
+ if (str.indexOf('?') === -1) {
+ throw Error('参数错误')
+ }
+ let args = new URLSearchParams(str);
+ return args;
+}
+
+/**
+ * @Descripttion: 将base64转换为文件
+ * @param {dataurl} base64
+ * @param {filename} 要创建的文件名
+ * @return: file
+ */
+export function _dataURLtoFile(dataurl, filename) {
+ var arr = dataurl.split(','),
+ mime = arr[0].match(/:(.*?);/)[1],
+ bstr = atob(arr[1]),
+ n = bstr.length,
+ u8arr = new Uint8Array(n);
+ while (n--) {
+ u8arr[n] = bstr.charCodeAt(n);
+ }
+ return new File([u8arr], filename, {
+ type: mime
+ });
+}
+
+
+/**
+ * @Descripttion: 文字复制到设备的剪切板
+ * @param {text} 要复制的文字
+ * @return: Boolean
+ */
+export function _copyToClipboard(text) {
+ var textArea = document.createElement('textarea');
+ textArea.style.position = 'fixed';
+ textArea.style.top = 0;
+ textArea.style.left = 0;
+ textArea.style.width = '2em';
+ textArea.style.height = '2em';
+ textArea.style.padding = 0;
+ textArea.style.border = 'none';
+ textArea.style.outline = 'none';
+ textArea.style.boxShadow = 'none';
+ textArea.style.background = 'transparent';
+ textArea.value = text ? text : "";
+ document.body.appendChild(textArea);
+ if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {//区分iPhone设备
+ window.getSelection().removeAllRanges();//这段代码必须放在前面否则无效
+ // var Url2=document.getElementById("biaoios");//要复制文字的节点
+ var range = document.createRange();
+ // 选中需要复制的节点
+ range.selectNode(textArea);
+ // 执行选中元素
+ window.getSelection().addRange(range);
+ // 执行 copy 操作
+ var successful = document.execCommand('copy');
+ // 移除选中的元素
+ window.getSelection().removeAllRanges();
+ } else {
+ textArea.select();
+ var msg = document.execCommand("Copy");
+ }
+ document.body.removeChild(textArea);
+}
+
+
+/**文件转换base64
+ * @param { 文件对象 } file
+ * @return { Promise }
+ */
+export function _fileToBase64(file) {
+ if (Object.prototype.toString.call(file) !== "[object File]") {
+ console.warn(`file 必须是 文件! >>>${file}`);
+ return
+ }
+ let reader = new FileReader();
+ reader.readAsDataURL(file);
+ return new Promise((resolve, reject) => {
+ reader.onload = function () {
+ resolve(this.result);
+ }
+ })
+}
+
+
+/**
+ * @Descripttion: 图片压缩
+ * @param {path} 图片路径 || base64
+ * @param {options} {quality:图片质量0-1,width,height}
+ * @return: base64
+ */
+export function _imgCompress(path, options = {}) {
+ return new Promise((resolve, reject) => {
+ let img = new Image();
+ img.src = path;
+ img.onload = function () {
+ let that = this,
+ w = that.width,
+ h = that.height,
+ scale = w / h, // 默认按比例压缩
+ quality = options.quality || 0.3,
+ canvas = document.createElement('canvas'),
+ ctx = canvas.getContext('2d');
+
+ w = options.width || w;
+ h = options.height || (w / scale);
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(that, 0, 0, w, h);
+ if (options.quality && options.quality <= 1 && options.quality > 0) {
+ quality = options.quality;
+ }
+ let base64 = canvas.toDataURL('image/jpeg', quality);
+ resolve(base64);
+ }
+ })
+}
+
+// 使input=number的maxlength有效
+export function disabledInputStr() {
+ window.addEventListener('input', (event) => {
+ let el = event.target,
+ val = el.value,
+ tagName = el.tagName.toUpperCase();
+ if (tagName === 'INPUT' && el.getAttribute('type') === 'number') {
+ let maxlength = el.getAttribute('maxlength');
+ if (val.length >= maxlength) {
+ el.value = val.slice(0, maxlength);
+ event.preventDefault();
+ }
+ }
+ })
+}
+
+//移动端判断设备类型:安卓 或 ios
+export function judegeDevice() {
+ let type = {
+ isIos: false,
+ isAndroid: false,
+ }
+ var u = navigator.userAgent;
+ if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
+ type.isAndroid = true;
+ } else if (u.indexOf('iPhone') > -1) { //苹果手机
+ type.isIos = true;
+ }
+ return type;
+}
+
+//解决安卓中键盘弹起时顶起页面,导致元素不在可视区内的问题
+export function scrollElement() {
+ if (judegeDevice.isAndroid) {
+ window.addEventListener("resize", function () {
+ let el = document.activeElement;
+ if (el.tagName == "INPUT" || el.tagName == "TEXTAREA") {
+ setTimeout(function () {
+ // el.scrollIntoViewIfNeeded();
+ el.scrollIntoView({
+ behavior: 'smooth',
+ });
+ }, 16.7);
+ }
+ })
+ }
+}
+
+
+
+/**
+ * @description: 禁止右键、选择、复制
+ */
+export function a() {
+ ['contextmenu', 'selectstart', 'copy'].forEach(function (ev) {
+ document.addEventListener(ev, function (event) {
+ return event.returnValue = false
+ })
+ });
+}
+
+// 根据 用户的机构类型 获取参数
+export function getParams(orgType, id) {
+ if(!id) return {};
+ let obj = {}
+ switch (orgType) {
+ case 1:
+ case 2:
+ // 代理、渠道
+ obj.merList = [id]
+ break;
+ case 3:
+ //商户
+ obj.storeList = [id]
+ break;
+ }
+ return obj
+}
+
+// 解析地区
+export function calcArea(arr){
+ let province_list =[],
+ city_list = [],
+ county_list = [];
+
+ function parseArea(arr) {
+ let obj = {}
+ arr.forEach(item => {
+ obj[item.value] = item.name;
+ })
+ return obj;
+ }
+
+ arr.forEach(item => {
+ item.value = +item.value;
+ let value = item.value;
+ if (!item.parent) {
+ province_list.push(item)
+ } else if (item.parent % 10000 === 0) {
+ city_list.push(item)
+ } else {
+ county_list.push(item)
+ }
+ })
+ return {
+ province_list:parseArea(province_list),
+ city_list:parseArea(city_list),
+ county_list:parseArea(county_list)
+ }
+}
+// 解析地区
+export function calcAreaTwo(arr){
+ let province_list =[],
+ city_list = [],
+ county_list = [];
+
+ function parseArea(arr) {
+ let obj = {}
+ arr.forEach(item => {
+ obj[item.value] = item.name;
+ })
+ return obj;
+ }
+
+ arr.forEach(item => {
+ item.value = +item.value;
+ let value = item.value;
+ if (item.value%10000 ===0 ) {
+ province_list.push(item)
+ } else if (item.value % 100 === 0) {
+ city_list.push(item)
+ } else {
+ county_list.push(item)
+ }
+ })
+ return {
+ province_list:parseArea(province_list),
+ city_list:parseArea(city_list),
+ county_list:parseArea(county_list)
+ }
+}
+
+export function compress(img){
+ // 用于压缩图片的canvas
+ let canvas = document.createElement('canvas');
+ let ctx = canvas.getContext('2d');
+
+ // 瓦片canvas
+ var tCanvas = document.createElement('canvas');
+ var tctx = tCanvas.getContext('2d');
+
+ let width = img.width;
+ let height = img.height;
+
+ // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下
+ var ratio;
+ if ((ratio = width * height / 4000000) > 1) {
+ ratio = Math.sqrt(ratio);
+ width /= ratio;
+ height /= ratio;
+ } else {
+ ratio = 1;
+ }
+ canvas.width = width * 2;
+ canvas.height = height * 2;
+ // 铺底色
+ ctx.fillStyle = '#fff';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ // 如果图片像素大于100万则使用瓦片绘制
+ var count;
+ if ((count = width * height / 1000000) > 1) {
+ count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片
+ // 计算每块瓦片的宽和高
+ var nw = ~~(width / count);
+ var nh = ~~(height / count);
+ tCanvas.width = nw;
+ tCanvas.height = nh;
+ for (var i = 0; i < count; i++) {
+ for (var j = 0; j < count; j++) {
+ tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio * 2, nh * ratio * 2, 0, 0, nw, nh);
+ ctx.drawImage(tCanvas, i * nw, j * nh, nw * 2, nh * 2);
+ }
+ }
+ } else {
+ ctx.drawImage(img, 0, 0, width * 2, height * 2);
+ }
+ // 进行最小压缩
+ let ndata = canvas.toDataURL('image/jpeg', 0.8);
+ return ndata;
+}
\ No newline at end of file
diff --git a/src/utils/jsBridge.js b/src/utils/jsBridge.js
new file mode 100644
index 0000000..ccda68d
--- /dev/null
+++ b/src/utils/jsBridge.js
@@ -0,0 +1,265 @@
+/**
+ * Created by c.k on 2017/11/20.
+ * global WebViewJavascriptBridge
+ * */
+import deviceInfo from './deviceInfo';
+// import store from '../store'
+// import statisticHelper from './statisticalHelper'
+// import channelHelper from './channel'
+const setupWebViewJavascriptBridge = callback => {
+ // 注册事件监听
+ if (window.WebViewJavascriptBridge) {
+ return callback(WebViewJavascriptBridge);
+ } else {
+ document.addEventListener(
+ 'WebViewJavascriptBridgeReady',
+ () => {
+ callback(WebViewJavascriptBridge);
+ },
+ false
+ );
+ }
+
+ // if (window.WVJBCallbacks) {
+ // return window.WVJBCallbacks.push(callback);
+ // }
+ // window.WVJBCallbacks = [callback];
+ // let WVJBIframe = document.createElement('iframe');
+ // WVJBIframe.style.display = 'none';
+ // WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
+ // document.documentElement.appendChild(WVJBIframe);
+ // setTimeout(function() {
+ // document.documentElement.removeChild(WVJBIframe);
+ // }, 0);
+};
+
+export default {
+ showLog(log) {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('showLog', log, function responseCallback(
+ responseData
+ ) {});
+ });
+ },
+ closeApp() {
+ if (window.android && window.android.closeActivity) {
+ window.android.closeActivity();
+ }
+ },
+ // 获取原生设备信息
+ fetchDeviceInfo() {
+ if (deviceInfo.getDeviceType() === 'Android') {
+ if (window.android && window.android.fetchDeviceInfo) {
+ let responseData = window.android.fetchDeviceInfo();
+ deviceInfo.saveDeviceInfo(responseData);
+ }
+ } else {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('kJSFetchDeviceInfo', function(
+ responseData
+ ) {
+ deviceInfo.saveDeviceInfo(responseData);
+ });
+ });
+ }
+ },
+ // 回传页面链接至原生
+ sendApplyPageUrlToNative() {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler(
+ 'kJSFetchApplyURL',
+ window.location.href,
+ function responseCallback(responseData) {}
+ );
+ });
+ },
+ // 回传页面信息至原生
+ sendApplyPageInfoToNative(info) {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler(
+ 'kJSFetchProductInfo',
+ info,
+ function responseCallback(responseData) {}
+ );
+ });
+ },
+ // 每次启动app时清除之前的登录状态
+ logoutWhenAppLaunch() {
+ // for android
+ // window.forceLogoutWhenAppLaunch = function () {
+ // store.dispatch('logout')
+ // // 首次进入app,默认统计第一个按钮点击事件
+ // statisticHelper.tabbarEventStatistical('loansupermarket');
+ // }
+ // for iOS
+ // setupWebViewJavascriptBridge(function (bridge) {
+ // bridge.registerHandler('kJSAppLaunch', function (data) {
+ // store.dispatch('logout')
+ // // 首次进入app,默认统计第一个按钮点击事件
+ // statisticHelper.tabbarEventStatistical('loansupermarket');
+ // })
+ // })
+ // if (!channelHelper.isApp()) {
+ // statisticHelper.tabbarEventStatistical('loansupermarket');
+ // }
+ },
+ // 隐藏原生启动页
+ hideNativeLaunchImage() {
+ // for android
+ if (window.appNative && window.appNative.hideLaunchView) {
+ window.appNative.hideLaunchView();
+ }
+ // for iOS
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('kJSHideLaunchImage', function responseCallback(
+ responseData
+ ) {});
+ });
+ },
+ // 隐藏显示原生header
+ showAndHideNativeHeader(show) {
+ // for android
+ if (window.native && window.native.showHeader) {
+ window.native.showHeader(show);
+ }
+ // for iOS
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler(
+ 'kJSShowAndHideNativeHeader',
+ show,
+ function responseCallback(responseData) {}
+ );
+ });
+ },
+ // 打开微信
+ openWX() {
+ // for android
+ if (window.android && window.android.openWX) {
+ window.android.openWX();
+ }
+ // for iOS
+ // setupWebViewJavascriptBridge(function (bridge) {
+ // bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) {
+ // })
+ // })
+ },
+ // 打开相册
+ openQrCode() {
+ // for android
+ if (window.android && window.android.fetchQrCode) {
+ window.android.fetchQrCode();
+ } else {
+ }
+ // for iOS
+ },
+
+ // 打开QQ
+ openQQ() {
+ // for android
+ if (window.android && window.android.openQQApplication) {
+ window.android.openQQApplication();
+ }
+ // for iOS
+ // setupWebViewJavascriptBridge(function (bridge) {
+ // bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) {
+ // })
+ // })
+ },
+ //打开通讯录
+ openConect(callback) {
+ console.log('js打开通讯录');
+ //for iOS
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('kJSOpenConect', function responseCallback(
+ responseData
+ ) {});
+
+ bridge.registerHandler('sendContectInfo', function(
+ data,
+ responseData
+ ) {
+ if (callback) {
+ callback(data);
+ }
+ });
+ });
+ },
+ //获取高德地图定位位置信息
+ getAMMapLoactionMsg(callback) {
+ console.log('js获取位置信息');
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler(
+ 'kJSGetAMMapLoactionInfo',
+ function responseCallback(responseData) {
+ // alert(responseData.detail);
+
+ if (callback) {
+ callback(responseData);
+ }
+ }
+ );
+
+ // bridge.registerHandler('sendAMMapLoactionInfo',function (data,responseData) {
+
+ // // alert(data.address);
+
+ // if(callback){
+ // callback(data);
+ // }
+
+ // })
+ });
+ },
+
+ //调用ios相机
+ openCamera(callback) {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('kJSGetCameraInfo', function responseCallback(
+ responseData
+ ) {
+ if (callback) {
+ callback(responseData);
+ }
+ });
+ });
+ },
+
+ openAlbum(callback) {
+ setupWebViewJavascriptBridge(function(bridge) {
+ bridge.callHandler('kJSGetAlbumInfo', function responseCallback(
+ responseData
+ ) {
+ if (callback) {
+ callback(responseData);
+ }
+ });
+ });
+ }
+
+ // 检查定位权限是否打开
+ // checkUserAuthorization(callback) {
+ // // for android
+ // if (deviceInfo.isAndroidDevice()) {
+ // if (window.native && window.native.checkUserAuthorization) {
+ // let isOpen = window.native.checkUserAuthorization();
+ // if (isOpen && isOpen === 'true') {
+ // callback(true);
+ // } else {
+ // callback(false);
+ // }
+ // } else {
+ // callback(true);
+ // }
+ // }
+ // // for iOS
+ // setupWebViewJavascriptBridge(function (bridge) {
+ // bridge.callHandler('kJSCheckUserAuthorization', function responseCallback(responseData) {
+ // if (responseData && responseData === 'true') {
+ // callback(true);
+ // } else {
+ // callback(false);
+ // }
+ // })
+ // })
+ // }
+};
diff --git a/src/utils/pageBackByAndroid.js b/src/utils/pageBackByAndroid.js
new file mode 100644
index 0000000..e8768bb
--- /dev/null
+++ b/src/utils/pageBackByAndroid.js
@@ -0,0 +1,36 @@
+/**
+ * android 返回按钮统一调度的方法,
+ * 项目中有两个地方需要修改一个是这个地方,还有有个地方是 index.html 文件
+ */
+import jsBri from './jsBridge';
+import store from '@/store/index';
+
+
+export default {
+ androidBackBtn() {
+ window.backPageByAndroid = function(obj) {
+ let hash = window.sessionStorage.getItem("gotoPagetemp");
+ let footerList = store.state.footerNav || [];
+ if(footerList && footerList.length){
+ let result = footerList.find(val => {
+ return val.path === hash;
+ });
+ if (result) {
+ jsBri.closeApp();
+ } else {
+ window.history.back();
+ }
+ }else{
+
+ if(hash==='/login'||hash==='/'){
+ jsBri.closeApp();
+ }else {
+ window.history.go(-1);
+ }
+ }
+ };
+ window.showOrgIdAndOrgType = function(obj) {
+ window.sessionStorage.setItem('scene_regInfos', obj);
+ };
+ }
+};
diff --git a/src/utils/validator.js b/src/utils/validator.js
new file mode 100644
index 0000000..37af773
--- /dev/null
+++ b/src/utils/validator.js
@@ -0,0 +1,213 @@
+/**
+ * TANGIMING 2018-3-9
+ * 这是一个用于存放正则表达式和一些验证方法的插件
+ * 除了存放了目前常用的正则之外,还根据这些正则封装了对应的验证方法
+ */
+import IDValidator from './IDValidator';
+
+export default {
+ // 金额格式化
+ formatMoney(str = 0) {
+ str = str + '';
+ let newStr = '';
+ let count = 0;
+ if (str.indexOf('.') === -1) {
+ for (let i = str.length - 1; i >= 0; i--) {
+ if (count % 3 === 0 && count !== 0) {
+ newStr = str.charAt(i) + ',' + newStr;
+ } else {
+ newStr = str.charAt(i) + newStr;
+ }
+ count++;
+ }
+ str = newStr + '.00'; // 自动补小数点后两位
+ return str;
+ } else {
+ for (let i = str.indexOf('.') - 1; i >= 0; i--) {
+ if (count % 3 === 0 && count !== 0) {
+ newStr = str.charAt(i) + ',' + newStr;
+ } else {
+ newStr = str.charAt(i) + newStr; // 逐个字符相接起来
+ }
+ count++;
+ }
+ str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3);
+ return str;
+ }
+ },
+ // 身份证 中间用* 显示
+ cardIDHide(cardid) {
+ if (cardid) {
+ return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2');
+ } else {
+ return '';
+ }
+ },
+ //手机号,中间四位*显示
+ formatPhone(phone) {
+ return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
+ },
+ // 电话号码格式
+ checkPhone(phone) {
+ let reg = /^1([35789][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/;
+ return reg.test(phone);
+ },
+ checkEmail(email) {
+ // 验证邮箱格式
+ let reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
+ // let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;
+ return reg.test(email);
+ },
+ checkVerifyCode(code) {
+ // 验证验证码格式
+ let reg = /^\d{6}$/;
+ return reg.test(code);
+ },
+ checkDynamicCode(code) {
+ // 验证邀请码格式
+ let reg = /^[A-Za-z0-9]{4}$/;
+ return reg.test(code);
+ },
+ // password check
+ checkPassword(password) {
+ // 验证密码格式
+ let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
+ return reg.test(password);
+ },
+ // name check
+ checkName(name) {
+ // 验证用户名格式
+ let reg = /^[\u4E00-\u9FA5]{2,10}$/;
+ return reg.test(name);
+ },
+ // 账户名称的正则表达式
+ checkUsername(name) {
+ let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/;
+ return reg.test(name);
+ },
+ // 统一验证
+ checkCommonField(name) {
+ let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/;
+ return reg.test(name);
+ },
+ // idCard check
+ checkIDCard(idCard) {
+ // 验证身份证格式
+ return IDValidator.isValid(idCard);
+ },
+ isIdcard(val) {
+ let result = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val);
+ return result;
+ },
+ checkValEmpty(str) {
+ // 验证是否为空
+ if (
+ str === undefined ||
+ str === null ||
+ str.length <= 0 ||
+ str === 'undefined'
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ // 验证佣金输入金额
+ checkCommission(commission) {
+ // 小于100且后面可以带4个小数点
+ let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/;
+ //一亿以内,保留四位小数
+ // /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/
+ // 如果通过的话,那么判断小数点的前几位数字
+ return reg.test(commission);
+ },
+ // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写
+ checkChannelNo(channelNo) {
+ let reg = /^[\w\d]{4,8}$/;
+ return reg.test(channelNo);
+ },
+ //验证是否包含空格
+ checkSpace(val) {
+ let reg = /^\s+$/;
+ if (reg.test(val)) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ //将发送请求中的参数格式化,如果为空则转为null
+ formatReq(obj) {
+ for (let i in obj) {
+ let item = obj[i];
+ if (item === null) continue;
+ if (
+ item === undefined ||
+ item === '' ||
+ item === 'undefined' ||
+ item.length <= 0 ||
+ JSON.stringify(item) == '{}'
+ ) {
+ obj[i] = null;
+ }
+ }
+ return obj;
+ },
+ // 只能输入数字与小数点正则判断
+ checkIntegerAndDot(checkVal) {
+ let dotReg = /\./g;
+ let IntegerReg = /^[1-9]{1}\d{0,5}$/;
+ // 如果输入了多个点,直接不符合要求
+ if (checkVal.match(dotReg) && checkVal.match(dotReg).length > 1) {
+ return false;
+ // 输入了一个点
+ } else if (
+ checkVal.match(dotReg) &&
+ checkVal.match(dotReg).length === 1
+ ) {
+ // 开头与结尾都不能出现点,点的前面与后面必须是数字
+ let strLen = checkVal.length;
+ if (
+ checkVal.indexOf('.') === 0 ||
+ checkVal.indexOf('.') === strLen - 1
+ ) {
+ return false;
+ // 超过个数的限制的话
+ } else {
+ return strLen <= 6;
+ }
+ // 没有小数点的话,那么就是全部数字进行匹配
+ } else if (!checkVal.match(dotReg)) {
+ return IntegerReg.test(checkVal);
+ }
+ },
+ //银行卡验证
+ bankCard(iccid) {
+ let initCard = iccid;
+ var s1 = 0,
+ s2 = 0;
+ iccid = iccid.substring(0, iccid.length - 1);
+ var reverse = '';
+ for (var i = iccid.length; i > 0; i--) {
+ reverse += iccid.charAt(i - 1);
+ }
+ for (i = 0; i < reverse.length; i++) {
+ var digit = parseInt(reverse.charAt(i), 10);
+ if (i % 2 != 0) {
+ // this is for odd digits, they are 1-indexed in the
+ // algorithm
+ s1 += digit;
+ } else {
+ // add 2 * digit for 0-4, add 2 * digit - 9 for 5-9
+ s2 += 2 * digit;
+ if (digit >= 5) {
+ s2 -= 9;
+ }
+ }
+ }
+ var sum = 10 - ((s1 + s2) % 10);
+ if (sum === 10) {
+ sum = 0;
+ }
+ return iccid + sum == initCard;
+ }
+};
diff --git a/src/utils/wechat.js b/src/utils/wechat.js
new file mode 100644
index 0000000..2f76029
--- /dev/null
+++ b/src/utils/wechat.js
@@ -0,0 +1,30 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-07 18:35:25
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-10 11:38:44
+ * @Description: 微信授权
+ */
+
+/**
+ * 微信授权
+ * @param appid 公众号的唯一标识
+ * @param redirect_uri 授权后重定向的回调链接地址(登录后授权了最好返回到登录跳转的主页面), 请使用 urlEncode 对链接进行处理,用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
+ * @param scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
+ * @param state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
+ */
+ export class GoWeChat {
+ constructor(appid,redirect_uri){
+ this.appid = appid
+ this.redirect_uri = redirect_uri
+ }
+ gocontract(){
+ // 拼接微信授权页面链接
+ var url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${this.redirect_uri}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`
+ // 判断用户是否已经授权
+ if(window.localStorage.sib_wx_openId == 'undefined' || !localStorage.sib_wx_openId){
+ window.location.href = url
+ // 在回调页面去获取到授权返回的code,并且传递给后端
+ }
+ }
+ }
diff --git a/src/views/JSX_Demo.vue b/src/views/JSX_Demo.vue
new file mode 100644
index 0000000..f5699af
--- /dev/null
+++ b/src/views/JSX_Demo.vue
@@ -0,0 +1,67 @@
+<script>
+import {mapState} from 'vuex';
+import Test from '@/components/Test';
+export default {
+ data() {
+ return {
+ com:'Test',
+ isShow:false,
+ arrs:[
+ <Test a='aaa'></Test>,
+ <Test a='bbb'></Test>
+ ],
+ dom:<h1 onClick={this.click}>点我 改变test dom</h1>
+ }
+ },
+ computed:{
+ ...mapState(["message"])
+ },
+ components:{
+ Test
+ },
+ methods:{
+ click(){
+ this.dom = <h3>我变成了 h3~</h3>
+ },
+ test(){
+ return new Promise((resolve,reject)=>{
+ setTimeout(() => {
+ resolve('test');
+ }, 2000);
+ })
+ },
+ chengeArrs(){
+ setTimeout(() => {
+ this.isShow = true;
+ this.arrs.reverse();
+ console.log(11)
+ // [].reverse()
+ }, 500);
+ }
+ },
+ created(){
+ this.chengeArrs();
+ },
+ render(){
+ if(this.isShow){
+ return (
+ <div>
+ {this.arrs}
+ {this.dom}
+ <h2 class="test1">{this.message}</h2>
+ </div>
+ )
+ }else{
+ return
+ }
+ }
+}
+</script>
+
+<style lang="less" scoped>
+.test1{
+ color: @c-white;
+ padding: 15px;
+ background-color: @c-pink;
+}
+</style>
diff --git a/src/views/appLiandeng/changeMer.vue b/src/views/appLiandeng/changeMer.vue
new file mode 100644
index 0000000..4d940d8
--- /dev/null
+++ b/src/views/appLiandeng/changeMer.vue
@@ -0,0 +1,118 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:53:52
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 17:53:43
+ * @Description: App切换商户
+-->
+<template>
+ <div class="change-mer">
+ <van-nav-bar
+ left-arrow
+ left-text="返回"
+ @click-left="onClickLeft"
+ >
+ <div slot="title">
+ <h4>切换商户</h4>
+ </div>
+ </van-nav-bar>
+ <div class="mer-list">
+ <ul class="list">
+ <van-radio-group v-model="radio">
+ <li class="item" v-for="item in merList" :key="item.id">
+ <div class="left">
+ <p>{{ item.orgName }}</p>
+ <p>创建时间:{{ item.creTime | timeformat('yyyy-MM-dd')}}</p>
+ </div>
+ <div class="right">
+ <van-radio :name="item.id"></van-radio>
+ </div>
+ </li>
+ </van-radio-group>
+ </ul>
+ </div>
+ <div class="btn-box">
+ <button class="btn" @click="changeMer">确认切换</button>
+ </div>
+ </div>
+</template>
+<script>
+import { mapMutations } from 'vuex';
+export default {
+ data() {
+ return {
+ merList: [],
+ radio: "",
+ };
+ },
+ created() {
+ this.radio = this.$store.state.userinfo.id
+ this.$api.getAgencyMerList().then(res=>{
+ this.merList = res.body.merchantList
+ })
+ },
+ methods: {
+ ...mapMutations(['SET_USER_INFO']),
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ changeMer(){
+ this.$api.getPowerInfo(this.radio).then(res=>{
+ this.SET_USER_INFO(res.body);
+ this.$router.push('/app/home')
+ })
+ }
+ },
+};
+</script>
+<style lang="less" scoped>
+.change-mer {
+ & {
+ min-height: 100vh;
+ background: #fafafa;
+ }
+ .mer-list {
+ width: 100%;
+ height: 80vh;
+ box-sizing: border-box;
+ padding: 10px 15px;
+ overflow: scroll;
+ }
+ .mer-list::-webkit-scrollbar {display:none}
+ .item {
+ height: 60px;
+ background: #fff;
+ width: 100%;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ }
+ .left > p:nth-of-type(1) {
+ font-size: 16px;
+ font-weight: 550;
+ margin-bottom: 8px;
+ }
+ .left > p:nth-of-type(2) {
+ font-size: 12px;
+ color: #999;
+ }
+ .btn-box{
+ position: fixed;
+ bottom: 20px;
+ text-align: center;
+ width: 100%;
+ .btn{
+ width: 320px;
+ height: 44px;
+ background: #896EDB;
+ border-radius: 22px;
+ outline: none;
+ border: 0;
+ color:#fff;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/appLiandeng/choseVersion.vue b/src/views/appLiandeng/choseVersion.vue
new file mode 100644
index 0000000..454e88b
--- /dev/null
+++ b/src/views/appLiandeng/choseVersion.vue
@@ -0,0 +1,147 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 11:35:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 17:49:40
+ * @Description:
+-->
+<template>
+ <div class="chose-mer">
+ <van-nav-bar
+ left-arrow
+ left-text="返回"
+ @click-left="onClickLeft"
+ >
+ <div slot="title">
+ <h4>选择通道</h4>
+ </div>
+ </van-nav-bar>
+ <div class="proudct-box">
+ <div class="list-box" v-for="(e,i) in list" :key="i" @click="goNext(e)" v-show="e.zfbVersion !== 5"> <!-- v-show="e.zfbVersion !== 1 && e.zfbVersion !== 4" -->
+ <img :src="e.icon" alt="">
+ <p>{{e.typeName}}</p>
+ <div class="tip-box" :style="e.openStatus==0?{background:'#F2F2F2'}:e.openStatus==1?{background:'#FFF5D9'}:e.openStatus==2?{background:'#E3FAEF'}:e.openStatus==3?{background:'#FCF0F0'}:''">
+ <p v-if="e.openStatus==2" style="color:#19BE6B;">已开通</p>
+ <p v-if="e.openStatus==1" style="color:#FFC421;">开通中</p>
+ <p v-if="e.openStatus==3" style="color:#FF6666;">未通过</p>
+ <p v-if="e.openStatus==0" style="color:#999999;">未开通</p>
+ </div>
+
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ list:[],
+ }
+ },
+ computed:{
+ prodId(){
+ return Number(this.$route.query.prodId)
+ }
+ },
+ mounted(){
+ this.$api.prodZfbVersion({prodId:this.prodId}).then(res=>{
+ this.list = res.body
+ })
+ },
+ methods:{
+ onClickLeft(){
+ this.$router.go(-1)
+ },
+ goNext(e){
+ let path,obj={};
+ obj.title = e.typeName;
+ obj.zfbVersion = e.zfbVersion;
+ obj.isApp = 1;
+ if(e.zfbVersion == 5){
+ switch(e.openStatus){
+ case 0:
+ path='/tonglian/startOpen';
+ break;
+ case 1:
+ path="/tonglian/open-result";
+ break;
+ case 2:
+ this.$route.query.prodId == 30000003?path="/app/zfbVersionDetail":path="/app/shskVersionDetail";
+ break;
+ }
+ }else{
+ switch(e.openStatus){
+ case 0:
+ path='/huabei/open';
+ break;
+ case 1:
+ path="/huabei/open-result";
+ break;
+ case 2:
+ this.$route.query.prodId == 30000003?path="/app/zfbVersionDetail":path="/app/shskVersionDetail";
+ break;
+ }
+ }
+
+
+ this.$router.push({
+ path:path,
+ query:{
+ ...obj,
+ ...this.$route.query
+ }
+ })
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.chose-mer{
+ &{
+ min-height: 100vh;
+ background: #fafafa;
+ }
+ .proudct-box{
+ width: 359px;
+ margin: auto;
+ margin-top: 10px;
+ box-sizing: border-box;
+ padding:16px 0;
+ // display: flex;
+ // justify-items: space-between;
+ background: #fff;
+ .list-box{
+ display: inline-block;
+ position: relative;
+ width: 115px;
+ height: 90px;
+ box-shadow:0px 0px 15px 0px rgba(66,61,93,0.08);
+ border-radius:8px;
+ margin: 16px 31px 16px 31px;
+ text-align: center;
+ box-sizing: border-box;
+ padding: 14px 0 18px 0;
+ img{
+ width: 42px;
+ height: 42px;
+ }
+ p{
+ font-size: 13px;
+ color: #333;
+ }
+ .tip-box{
+ position: absolute;
+ width:45px;
+ height:16px;
+ line-height: 16px;
+ border-radius:8px 0px 0px 8px;
+ top: 7px;
+ right: 0;
+ p{
+ font-size: 10px;
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/appLiandeng/home.vue b/src/views/appLiandeng/home.vue
new file mode 100644
index 0000000..055e01d
--- /dev/null
+++ b/src/views/appLiandeng/home.vue
@@ -0,0 +1,208 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:42:04
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-08 11:17:00
+ * @Description:APP联登主页
+-->
+<template>
+ <div class="APP-home">
+ <van-nav-bar
+ right-text="切换商户"
+ @click-right="onClickRight"
+ >
+ <div slot="title">
+ <h4 class="title-span">{{$store.state.userinfo.orgName}}</h4>
+ </div>
+ </van-nav-bar>
+ <div class="producat">
+ <ul class="list">
+ <li
+ class="item"
+ v-for="item in list"
+ :key="item.prodId"
+ @click="goNext(item)"
+ >
+ <img :src="item.icon" alt="商品图" v-if="item.prodId === 30000008"/>
+ <i v-else class="iconfont iconhuabei"></i>
+ <p>{{ item.typeName }}</p>
+ </li>
+ </ul>
+ <div class="no-data" v-if="list.length === 0">
+ <div>
+ <img class="no-data-pic" src="../../assets/imgs/nodata.png" alt="暂无产品">
+ <p>暂无产品</p>
+ </div>
+ </div>
+ </div>
+ <button class="btn" @click="goBack" v-show="hasurl">返回首页</button>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ proList: [],
+ shskHasOpen:false,
+ url:''
+ };
+ },
+ computed:{
+ list(){
+ return this.proList.map(item=>{
+ if(item.prodId == 30000003){
+ item.typeName = '花呗分期'
+ }
+ return item
+ })
+ },
+ hasurl(){
+ console.log(typeof this.url)
+ // if(this.url != 'undefined' && this.url){
+ if(typeof this.url == 'string' && this.url != 'null'){
+
+ return true;
+ }else{
+ return false;
+ }
+ }
+ },
+ created(){
+ this.url = sessionStorage.backUrl;
+ },
+ mounted(){
+ this.$api.prodManagerInit().then(res=>{
+ res.body.prodTypeRespVoList2.forEach(item=>{
+ if (item.prodId == 30000003 || item.prodId == 30000008 ){
+ this.proList.push(item)
+ }
+ })
+ })
+ },
+ methods: {
+ onClickRight() {
+ this.$router.push({
+ path: "/app/changeMer"
+ });
+ },
+ goNext(item) {
+ if(item.prodId == 30000003){
+ this.$router.push({
+ path: "/app/choseVersion",
+ query: {
+ prodId: item.prodId,
+ typeId: item.typeId
+ },
+ });
+ }else{
+ this.$api.prodZfbVersion({prodId:item.prodId}).then(res=>{
+ let list = res.body;
+ for(let i = 0; i < list.length; i++){
+ if(list[i].zfbVersion == 3 && list[i].openStatus == 2){
+ this.$router.push({
+ path:'/app/shskVersionDetail',
+ query:{
+ prodId: item.prodId,
+ typeId: item.typeId,
+ isApp: 1,
+ zfbVersion: 3,
+ title: '商户收款'
+ }
+ })
+ }else if(list[i].zfbVersion == 3 && list[i].openStatus == 0){
+ this.$router.push({
+ path:'/huabei/open',
+ query:{
+ prodId: item.prodId,
+ typeId: item.typeId,
+ isApp: 1,
+ zfbVersion: 3,
+ title: '商户收款'
+ }
+ })
+ }else if(list[i].zfbVersion == 3 && list[i].openStatus == 1){
+ this.$router.push({
+ path:'/huabei/open-result',
+ query:{
+ prodId: item.prodId,
+ typeId: item.typeId,
+ isApp: 1,
+ zfbVersion: 3,
+ title: '商户收款'
+ }
+ })
+ }
+ }
+ })
+ }
+ },
+ goBack(){
+ location.href = sessionStorage.backUrl
+ }
+ },
+};
+</script>
+<style lang="less" scoped>
+.APP-home {
+ & {
+ min-height: 100vh;
+ background: #fafafa;
+ }
+ .title-span{
+ display: inline-block;
+ width: 200px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .producat {
+ width: 340px;
+ margin: auto;
+ margin-top: 10px;
+ border-radius: 15px;
+ background: #fff;
+ padding: 20px 0;
+ }
+ .list {
+ display: flex;
+ justify-content: space-between;
+ }
+ .item {
+ text-align: center;
+ width: 49%;
+ img {
+ width: 60px;
+ height: 60px;
+ }
+ }
+ .btn {
+ width: 320px;
+ height: 44px;
+ background: #896edb;
+ border-radius: 22px;
+ outline: none;
+ border: 0;
+ position: fixed;
+ bottom: 30px;
+ left: 50%;
+ transform: translateX(-50%);
+ color: #fff;
+ }
+ .no-data{
+ display: flex;
+ justify-content: center;
+ div{
+ text-align: center;
+ }
+ }
+ .no-data-pic{
+ width: 80px;
+ height: 80px;
+ margin-bottom: 10px;
+ }
+ .iconhuabei{
+ font-size: 55px;
+ color: rgb(16, 143, 234);
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/appLiandeng/login.vue b/src/views/appLiandeng/login.vue
new file mode 100644
index 0000000..33aeafd
--- /dev/null
+++ b/src/views/appLiandeng/login.vue
@@ -0,0 +1,7 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2021-01-04 09:45:06
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 09:45:06
+ * @Description:
+-->
diff --git a/src/views/appLiandeng/opening/fillingInfo.vue b/src/views/appLiandeng/opening/fillingInfo.vue
new file mode 100644
index 0000000..2d9ac02
--- /dev/null
+++ b/src/views/appLiandeng/opening/fillingInfo.vue
@@ -0,0 +1,7 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:57:20
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 09:57:21
+ * @Description:
+-->
diff --git a/src/views/appLiandeng/opening/openResult.vue b/src/views/appLiandeng/opening/openResult.vue
new file mode 100644
index 0000000..2196ebc
--- /dev/null
+++ b/src/views/appLiandeng/opening/openResult.vue
@@ -0,0 +1,7 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:58:21
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 09:58:22
+ * @Description:
+-->
diff --git a/src/views/appLiandeng/opening/pictureUpload.vue b/src/views/appLiandeng/opening/pictureUpload.vue
new file mode 100644
index 0000000..f2a6b05
--- /dev/null
+++ b/src/views/appLiandeng/opening/pictureUpload.vue
@@ -0,0 +1,7 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:58:08
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 09:58:09
+ * @Description:
+-->
diff --git a/src/views/appLiandeng/opening/startOpen.vue b/src/views/appLiandeng/opening/startOpen.vue
new file mode 100644
index 0000000..8a7fa98
--- /dev/null
+++ b/src/views/appLiandeng/opening/startOpen.vue
@@ -0,0 +1,7 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:57:09
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 09:57:09
+ * @Description:
+-->
diff --git a/src/views/appLiandeng/shskVersionDetail.vue b/src/views/appLiandeng/shskVersionDetail.vue
new file mode 100644
index 0000000..127b550
--- /dev/null
+++ b/src/views/appLiandeng/shskVersionDetail.vue
@@ -0,0 +1,64 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:55:28
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 17:50:09
+ * @Description:
+-->
+<template>
+ <div class="shsk-detail">
+ <van-nav-bar
+ left-arrow
+ fixed
+ left-text="返回"
+ @click-left="onClickLeft"
+ >
+ <div slot="title">
+ <h4>{{$route.query.title}}</h4>
+ </div>
+ </van-nav-bar>
+ <van-cell-group>
+ <van-cell v-for="item in list" :key="item.payMethodName" title="支付费率" :value="item.fee+'%'" />
+ </van-cell-group>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ list:[],
+ }
+ },
+ mounted(){
+ this.$api.merPayInfo({
+ zfbVersion:this.zfbVersion,
+ prodId:this.prodId
+ }).then(res=>{
+ this.list = res.body.payMethods || []
+ })
+ },
+ computed:{
+ typeName(){
+ return this.$route.query.name
+ },
+ zfbVersion(){
+ return Number(this.$route.query.zfbVersion)
+ },
+ prodId(){
+ return Number(this.$route.query.prodId)
+ }
+ },
+ methods:{
+ onClickLeft(){
+ this.$router.go(-1)
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.shsk-detail{
+ min-height: 100vh;
+ background: #fafafa;
+ padding-top: 54px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/appLiandeng/zfbVersionDetail.vue b/src/views/appLiandeng/zfbVersionDetail.vue
new file mode 100644
index 0000000..8a17d2e
--- /dev/null
+++ b/src/views/appLiandeng/zfbVersionDetail.vue
@@ -0,0 +1,152 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-12-29 09:54:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-05 14:28:29
+ * @Description:
+-->
+<template>
+ <div class="zfb-detail">
+ <van-nav-bar
+ left-arrow
+ left-text="返回"
+ @click-left="onClickLeft"
+ >
+ <div slot="title">
+ <h4>{{$route.query.title}}</h4>
+ </div>
+ </van-nav-bar>
+ <div class="info-box-bottom">
+ <div class="rate-title">用户付息</div>
+ <div class="item">
+ <span>期数</span>
+ <span>支付费率</span>
+ <span>分期利率</span>
+ </div>
+ <div class="item" v-for="item in list" :key="item.trem">
+ <span>{{item.termName}}</span>
+ <span>{{$route.query.zfbVersion == 6?'0.38%':'0%'}}</span>
+ <span>{{item.rate}}%</span>
+ </div>
+ </div>
+ <div class="info-box-bottom">
+ <div class="rate-title">商户贴息</div>
+ <div class="item">
+ <span>期数</span>
+ <span>支付费率</span>
+ <span>分期利率</span>
+ </div>
+ <div class="item" v-for="item in list2" :key="item.trem">
+ <span>{{item.termName}}</span>
+ <span>{{$route.query.zfbVersion == 6?'0.38%':'0%'}}</span>
+ <span>{{item.rate}}%</span>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ list:[],
+ list2:[]
+ };
+ },
+ computed:{
+ typeName(){
+ return this.$route.query.typeName
+ },
+ zfbVersion(){
+ return Number(this.$route.query.zfbVersion)
+ },
+ prodId(){
+ return Number(this.$route.query.prodId)
+ }
+ },
+ created() {
+ this.$api.merPayInfo({
+ zfbVersion:this.zfbVersion,
+ prodId:this.prodId
+ }).then(res=>{
+ this.list = res.body.prodBaseTermInfVo || []
+ })
+ this.$api.merPayInfo({
+ zfbVersion:this.zfbVersion,
+ prodId:30000010
+ }).then(res=>{
+ this.list2 = res.body.prodBaseTermInfVo || []
+ })
+ },
+ methods:{
+ onClickLeft(){
+ this.$router.go(-1)
+ },
+ }
+};
+</script>
+<style lang="less" scoped>
+.zfb-detail {
+ & {
+ min-height: 100vh;
+ background: #fafafa;
+ }
+ .info-box-bottom {
+ margin-top: 20px;
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ }
+ }
+
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ display: inline-block;
+ }
+ span:nth-child(1) {
+ width: 15%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+ span:nth-child(3) {
+ width: 45%;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/main/approve.vue b/src/views/main/approve.vue
new file mode 100644
index 0000000..b24596c
--- /dev/null
+++ b/src/views/main/approve.vue
@@ -0,0 +1,323 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:57:51
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 16:03:20
+ * @Description: 代理 审批页面
+ -->
+<template>
+ <div class="approve-box">
+ <div class="fixed-top">
+ <nav class="nav text-center-g flex-center-g" :style="{background:$store.state.lastColor}">
+ <div class="child flex-start-g">
+ <div class="flex-1-g" :class="navIndex===0?'active':''" @click="setNavIndex(0)">待审批</div>
+ <div class="flex-1-g" :class="navIndex===1?'active':''" @click="setNavIndex(1)">已通过</div>
+ <div class="flex-1-g" :class="navIndex===2?'active':''" @click="setNavIndex(2)">已拒绝</div>
+ </div>
+ </nav>
+ <van-search class="search icons-ser" placeholder="请输入商户名称/负责人电话" v-model="searchKey" shape='round' @search="init">
+ <!--<template slot="left-icon">-->
+ <!--<div class="">-->
+ <!--<svg class="icon" aria-hidden="true" style="width:20px;height:20px;">-->
+ <!--<use xlink:href="#iconsousuo"></use>-->
+ <!--</svg>-->
+ <!--</div>-->
+ <!--</template>-->
+ </van-search>
+ </div>
+
+
+ <hList @scroll="saleOrderLoad" :defScroll='10' :finished='finished' :loading="loading" height="74vh">
+ <div class="list-box">
+ <div class="mer-item flex-between-g" v-for="(item, index) in calcList" :key="index" @click="goMerDetail(item.merId)">
+ <div class="flex-start-g">
+ <div class="icon-box flex-center-g" :style="{background:$store.state.lastColor}">
+ <svg class="icon" aria-hidden="true" style="width:22px;height:22px;fill:#fff;">
+ <use xlink:href="#iconshanghuguanliliebiao"></use>
+ </svg>
+ </div>
+ <div >
+ <p class="name text-clip-g" style="max-width:170px;">{{item.merName}}</p>
+ <p class="tel">{{ navIndex ===1 ?item.tempName : item.priMblNo}}</p>
+ </div>
+ </div>
+ <!-- v-if="item.hidden!==0" -->
+ <van-button class="btn" :style="{background:$store.state.backColor}" @click.stop="openModal(item)">{{navIndex ===1 ? '产品管理' :'审批'}}</van-button>
+ </div>
+ </div>
+ </hList>
+ <van-popup v-model="isShow">
+ <div class="modal">
+ <div class="top flex-center-g" :style="{background:$store.state.lastColor}">
+ <van-icon class="cross" name="cross" color='#fff' size='25px' @click="isShow = false;" />
+ <svg class="icon" aria-hidden="true" style="width:85px;height:95px;">
+ <use xlink:href="#iconshenpidanchuang"></use>
+ </svg>
+ </div>
+ <footer class="footer text-center-g">
+ <p class="name text-clip-g ">{{merName}}</p>
+ <p class="c-text-999-g">请确认商户审批结果</p>
+ <div>
+ <van-button :style="{background:$store.state.backColor}" class="btn" @click="submit(3)">拒绝</van-button>
+ <van-button :style="{background:$store.state.backColor}" class="btn btn-default" @click="submit(1)">同意</van-button>
+ </div>
+ </footer>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import Template_detail from "../template/detail";
+ import hList from '../../components/common/h-list';
+ export default {
+ components: {Template_detail,hList},
+ data() {
+ return {
+ isShow: false,
+ navIndex: 0,
+ finished:false,
+ loading:false,
+ searchKey: '',
+ list:[
+ {
+ arr:[],
+ },
+ {
+ arr:[],
+ },
+ {
+ arr:[],
+ },
+ ],
+ merId:'',
+ merName:''
+ }
+ },
+ computed:{
+ calcList(){
+ return this.list[this.navIndex].arr;
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods: {
+ saleOrderLoad(){
+ let merId = ''
+ var myArr = this.list[this.navIndex].arr
+
+ if(this.list[this.navIndex].arr.length >= 10){
+ merId = myArr[myArr.length-1].merId
+ }
+ console.log(this.finished)
+ this.$api.getAuditList({
+ auditStatus:this.navIndex,
+ searchKey:this.searchKey,
+ merId:merId
+ }).then((res) => {
+ let {merList} = res.body;
+ if(this.navIndex===0){
+ merList = merList.map(item=>{
+ if(item.canAudit ===0){
+ item.hidden = 0;
+ }
+ return item
+ })
+ }
+ if(merList.length < 10){
+ this.list[this.navIndex].arr = [...myArr,...merList]
+ this.loading = false
+ this.finished = true
+ }else{
+ this.list[this.navIndex].arr = [...myArr,...merList]
+ this.loading = false
+ this.finished = false
+ }
+ console.log(this.finished)
+ }).catch((err) => {
+
+ });
+ },
+ //跳转到商户详情
+ goMerDetail(merId){
+ this.$router.push(`/mine/mer-info?merId=${merId}`)
+ },
+ //打开审批弹窗 已通过的产品跳转到 产品管理页面
+ openModal(item){
+ if(this.navIndex!==1){
+ this.merId = item.merId;
+ this.merName = item.merName;
+ this.isShow=true;
+ }else{
+ this.$router.push(`/template/detail?merId=${item.merId}`)
+ }
+ },
+ //审批
+ submit(status){
+ this.$api.merAudit({
+ merId: this.merId,
+ status
+ }).then(res => {
+ this.$notify('审批完成!')
+ this.isShow = false;
+ });
+ },
+ // 获取列表数据
+ init(){
+ this.$api.getAuditList({
+ auditStatus:this.navIndex,
+ searchKey:this.searchKey
+ }).then((res) => {
+ let {merList} = res.body;
+ if(merList.length < 10){
+ this.finished = true
+ }
+ if(this.navIndex===0){
+ merList = merList.map(item=>{
+ if(item.canAudit ===0){
+ item.hidden = 0;
+ }
+ return item
+ })
+ }
+ this.list[this.navIndex].arr = merList;
+ }).catch((err) => {
+
+ });
+ },
+ setNavIndex(index) {
+ this.finished = false;
+ this.loading = false;
+ this.navIndex = index;
+ this.init()
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .approve-box {
+ //padding-bottom: 40px;
+ padding-top: 105px;
+ }
+
+ .list-box{
+ background-color: @c-bg-fff;
+ //padding-bottom: 10px;
+ padding-top: 5px;
+ }
+
+
+ .fixed-top {
+ position: fixed;
+ top: 0;
+ width: 100%;
+ z-index: @zIndex-10;
+ }
+
+ .search {
+ padding: 15px 8px;
+ }
+
+ .nav {
+ height: 44px;
+ background-color: @c-bg-black;
+ font-weight: bold;
+
+ .child {
+ width: 360px;
+ margin: 0 auto;
+ background-color: @c-bg-555;
+ border-radius: 16px;
+ }
+
+ .flex-1-g {
+ .lh(32px);
+ color: @c-text-fff;
+ opacity: 0.4;
+
+ &.active {
+ opacity: 1;
+ border-radius: 16px;
+ background-color: @c-bg-fff;
+ color: @c-text-black;
+ }
+ }
+ }
+
+ .mer-item {
+ margin: 0 8px 10px;
+ box-shadow: 0px 0px 5px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 3px;
+ background: @c-bg-fff;
+ padding: 0 12px;
+ height: 67px;
+
+ .icon-box {
+ height: 32px;
+ width: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background: @c-bg-black;
+ }
+
+ .name {
+ font-weight: bold;
+ }
+
+ .tel {
+ font-size: @font-12;
+ color: @c-text-666;
+ margin-top: 5px;
+ }
+
+ .btn {
+ .lh(28px);
+ padding: 0 13px;
+ background: @c-bg-default;
+ border-radius: 13px;
+ color: @c-text-fff;
+ }
+ }
+
+ .modal {
+ width: 280px;
+
+ .top {
+ position: relative;
+ height: 115px;
+ background-color: @c-bg-black;
+ align-items: flex-end;
+
+ .cross {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+
+ }
+ }
+
+ .footer {
+ height: 125px;
+
+ .name {
+ .lh(17px);
+ margin: 23px 13px 13px;
+ }
+
+ .btn {
+ .lh(36px);
+ margin: 25px 10px 0;
+ width: 110px;
+ border-radius: 18px;
+ background-color: @c-bg-eee;
+ color: @c-text-666;
+
+ &.btn-default {
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/views/main/home.vue b/src/views/main/home.vue
new file mode 100644
index 0000000..2dd1567
--- /dev/null
+++ b/src/views/main/home.vue
@@ -0,0 +1,919 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 15:53:43
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-19 10:06:23
+ * @Description:
+ -->
+<template>
+ <div class="home-box">
+ <v-scroll-x class="head" :style="{background:$store.state.backColor}">
+ <p class="product-item" :class="[navIndex===index?'active':'']" v-for="(item, index) in productList"
+ :key="index" @click="toggleProduct(item, index, false)">{{item.typeName}}</p>
+ </v-scroll-x>
+
+ <!-- 折线图 -->
+ <div class="chart-box">
+ <div class="flex-between-g title-top">
+ <p class="text under-text" @click="$router.push(jumpParams)">全部订单</p>
+ <p class="flex-start-g" @click="openTimeModal(false)">
+ <span class="font-12-g c-text-999-g">{{startDay}}至{{endDay}}</span>
+ <svg class="icon" aria-hidden="true" style="width:15px;height:15px;" :style="{fill:$store.state.backColor}">
+ <use xlink:href="#iconrili"></use>
+ </svg>
+ </p>
+
+ </div>
+ <section class="data-box flex-around-g text-center-g">
+ <div>
+ <h4 class="title">{{orderData.amtNum}}</h4>
+ <p class="label">{{zfblxLabel? '待确认' : '交易额'}}</p>
+ </div>
+ <div>
+ <h4 class="title" :style="{color: zfblxLabel ?'#19be6b':'#333333'}">{{orderData.orderNum}}</h4>
+ <p class="label">{{zfblxLabel? '拉新' : '交易单数'}}</p>
+ </div>
+ <div>
+ <h4 class="title" :style="{color: zfblxLabel ?'#ed4014':'#333333'}">{{calcMerNum(orderData.merNum)}}</h4>
+ <p class="label">{{dataLabel}} </p>
+ </div>
+ </section>
+ </div>
+
+ <van-popup v-model="isShoTime" position="bottom">
+ <div class="text-center-g flex-around-g time-label">
+ <p class="flex-1-g" :class="[timeIndex===0 ? 'active':'']" @click="setTimeIndex(0)">开始:{{ isMerTime ? merStartDay : startDay}}</p>
+ <p class="flex-1-g" :class="[timeIndex===1 ? 'active':'']" @click="setTimeIndex(1)">结束:{{ isMerTime ? merEndDay : endDay}}</p>
+ </div>
+ <van-datetime-picker ref='timepicker' :max-date="maxDate" :min-date="minDate" :show-toolbar="false" v-model="currentDate" @change="setTime" type="date" />
+ <van-button :color="$store.state.backColor" class="btn-time" @click="refreshData">确定</van-button>
+ </van-popup>
+
+
+ <div class="h-44"></div>
+
+ </div>
+</template>
+<script>
+import { mapState, mapGetters } from 'vuex';
+ export default {
+ data() {
+ return {
+ isMerTime: false, //判断打开的是 商户统计的时间弹窗还是订单统计的
+ startDay: '', // 开始时间
+ endDay: '', //结束时间
+ merStartDay: '', // 商户统计开始时间
+ merEndDay: '', //商户统计结束时间
+ zfblxLabel: '', //拉新统计数据判断条件
+ lxWait: [], //拉新待开通
+ lxValue: [], //拉新
+ lxAdd: [], //拉新+绑卡
+ orderData:{ //订单统计数据
+ amtNum: 0,
+ merNum: 0,
+ orderNum: 0
+ },
+ merData:{ //商户统计数据
+ passNum: 0,
+ refuNum: 0,
+ sumNum: 0,
+ waitNum: 0
+ },
+ time: 0,
+ timeIndex: 0,
+ isShoTime: false,
+ currentDate: new Date(),
+ navIndex: 0,
+ productList: [], //产品列表
+ jumpParams: {}, //跳转参数
+ opt: {
+ grid: {
+ top: 30,
+ right: 0,
+ bottom: 30,
+ left: 40,
+ },
+ tooltip: {
+ trigger: 'axis',
+ formatter:function (params) {
+ if(params[0].color == '#855CFE'){
+ return String(params[0].value) + '万'
+ }else{
+ return params[0].value
+ }
+ },
+ axisPointer: {
+ type: 'cross',
+ label: {
+ backgroundColor: '#896EDB',
+ formatter:'{value}'
+ }
+ }
+ },
+ xAxis: {
+ type: 'category',
+ axisLine: {
+ show: false,
+ lineStyle: {
+ color: '#666'
+ }
+ }, //轴线不显示
+ axisTick: {
+ show: false
+ },
+ data: ['10日', '11日', '12日', '13日', '14日', '15日', '16日']
+ },
+ yAxis: {
+ type: 'value',
+ axisLine: {
+ show: false,
+ lineStyle: {
+ color: '#666'
+ }
+ }, //轴线不显示
+ axisTick: {
+ show: false
+ },
+ splitLine: {
+ show: false
+ },
+ //纵坐标内容格式化
+ axisLabel:{
+ formatter: function (value) {
+ if (value > 10000) {
+ val = (value/10000).toFixed(2);
+ return val;
+ }
+ return value
+ }
+ }
+ },
+ series: [
+ //支付宝拉新时为待确认数据
+ {
+ data: [0, 0, 0, 0, 0, 0, 0],
+ type: 'line',
+ smooth: true,
+ symbol: 'circle', //设定为实心点
+ symbolSize: 8, //设定实心点的大小
+ itemStyle: {
+ normal: {
+ color: '#8760ff',
+ label: {
+ show: true,
+ }
+ }
+ },
+ lineStyle: {
+ normal: {
+ // color: '#333333',
+ }
+ },
+ label: {
+ formatter:function (params) {
+ // if (params[0].data > 1000) {
+ // // let data = (params[0].data/1000).toFixed(2)
+ // let value = (params[0].data/1000).toFixed(2)
+ // return String(value) + '万'
+ // } else {
+ // return value
+ // }
+ },
+ },
+ areaStyle: {
+ normal: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+ offset: 0,
+ color: '#e7e0fd'
+ }, {
+ offset: 1,
+ color: '#fff'
+ }])
+ }
+ },
+ },
+ //拉新
+ {
+ data: [0, 0, 0, 0, 0, 0, 0],
+ type: 'line',
+ smooth: true,
+ symbol: 'circle', //设定为实心点
+ symbolSize: 8, //设定实心点的大小
+ itemStyle: {
+ normal: {
+ color: '#8760ff',
+ label: {
+ show: true,
+ }
+ }
+ },
+ lineStyle: {
+ normal: {
+ color: '#19be6b',
+ }
+ },
+ label: {
+ formatter:function (params) {
+ // if (params[0].data > 1000) {
+ // // let data = (params[0].data/1000).toFixed(2)
+ // let value = (params[0].data/1000).toFixed(2)
+ // return String(value) + '万'
+ // } else {
+ // return value
+ // }
+ },
+ },
+ areaStyle: {
+ normal: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+ offset: 0,
+ color: '#e7e0fd'
+ }, {
+ offset: 1,
+ color: '#fff'
+ }])
+ }
+ },
+ },
+ //拉新+绑卡
+ {
+ data: [0, 0, 0, 0, 0, 0, 0],
+ type: 'line',
+ smooth: true,
+ symbol: 'circle', //设定为实心点
+ symbolSize: 8, //设定实心点的大小
+ itemStyle: {
+ normal: {
+ color: '#8760ff',
+ label: {
+ show: true,
+ }
+ }
+ },
+ lineStyle: {
+ normal: {
+ color: '#ed4014',
+ }
+ },
+ label: {
+ formatter:function (params) {
+ // if (params[0].data > 1000) {
+ // // let data = (params[0].data/1000).toFixed(2)
+ // let value = (params[0].data/1000).toFixed(2)
+ // return String(value) + '万'
+ // } else {
+ // return value
+ // }
+ },
+ },
+ areaStyle: {
+ normal: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+ offset: 0,
+ color: '#e7e0fd'
+ }, {
+ offset: 1,
+ color: '#fff'
+ }])
+ }
+ },
+ }
+ ]
+ },
+ opt2: {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: { // 坐标轴指示器,坐标轴触发有效
+ type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
+ }
+ },
+ grid: {
+ top: 30,
+ right: 0,
+ bottom: 30,
+ left: 40,
+ },
+ xAxis: [{
+ type: 'category',
+ axisTick: {
+ show: false
+ },
+ axisLine: {
+ show: false,
+ lineStyle: {
+ color: '#666'
+ }
+ }, //轴线不显示
+ data: ['10日', '11日', '12日', '13日', '14日', '15日', '16日']
+ }],
+ yAxis: [{
+ type: 'value',
+ axisLine: {
+ show: false,
+ lineStyle: {
+ color: '#666'
+ }
+ }, //轴线不显示
+ axisTick: {
+ show: false
+ },
+ splitLine: {
+ show: false
+ },
+ }],
+ series: [{
+ name: '通过',
+ type: 'bar',
+ stack: '广告',
+ data: [0, 0, 0, 0, 0, 0, 0],
+ barWidth: 10, //柱图宽度
+ itemStyle: {
+ normal: {
+ color: '#D5C7FF',
+ }
+ },
+ },
+ {
+ name: '拒绝',
+ type: 'bar',
+ stack: '广告',
+ data: [0, 0, 0, 0, 0, 0, 0],
+ itemStyle: {
+ normal: {
+ color: '#FFB5D0',
+ }
+ },
+ },
+ {
+ name: '待审批',
+ type: 'bar',
+ stack: '广告',
+ data: [0, 0, 0, 0, 0, 0, 0],
+ itemStyle: {
+ normal: {
+ barBorderRadius: [7, 7, 0, 0],
+ color: '#FFE0C2',
+ }
+ },
+ },
+ ]
+ },
+ timePicker:null,
+ }
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId(){
+ return this.productList[this.navIndex].prodId || ''
+ },
+ // 是否是代理 或 渠道角色,只有这两个角色才显示 商户统计的数据
+ isAgent(){
+ let orgType= this.userinfo.orgType
+ return orgType ===1 || orgType ===2;
+ },
+ minDate(){
+ if(this.timeIndex===1){
+ if(this.isMerTime){
+ return new Date(this.merStartDay)
+ }else{
+ return new Date(this.startDay)
+ }
+ }
+ return new Date('2010-01-01');
+ },
+ maxDate(){
+ return new Date()
+ },
+ dataLabel(){
+ if(this.zfblxLabel == 'zfblx') {
+ return "拉新+绑卡"
+ } else {
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ }
+ },
+ created() {
+ if(this.$route.query){
+ this.navIndex = this.$route.query.navIndex
+ this.jumpParams = {
+ path:'/order/xyg-hb',
+ query:{
+ typeId:200011,
+ prodId:30000012
+ }
+ }
+ }
+ this.initTime()
+ },
+ mounted() {
+ this.init()
+ },
+ methods: {
+ calcMerNum(v){
+ if(this.orgType==4 && this.zfblxLabel !='zfblx'){
+ return "—";
+ }
+ return v
+ },
+ // 初始化 统计数据
+ init() {
+ this.$api.prodListTitle().then((res) => {
+ this.productList = res.body || [];
+ // this.productList.push({
+ // icon: "https://t.finlean.com/czjc/img/prod_icon/spfx.png",
+ // mgrIsOpen: null,
+ // openStatus: "",
+ // prodId: "",
+ // statusType: "",
+ // typeId: "210000",
+ // typeName: "支付宝拉新"
+ // })
+ console.log(this.productList)
+ if (this.productList.length) {
+ let prodId = this.productList[0].prodId;
+ this.toggleProduct(this.productList[0],0,true)
+ }else{
+ let myChart = echarts.init(this.$refs.lineChart);
+ myChart.setOption(this.opt);
+ }
+ }).catch((err) => {
+
+ });
+ },
+ setTimeIndex(index){
+ this.timeIndex = index;
+ this.setPickerValue()
+ },
+ // 设置日期的值
+ setPickerValue(){
+ if(this.timePicker){
+ let timeArr = [];
+ if(this.isMerTime){
+ if(this.timeIndex===0){
+ timeArr = this.merStartDay
+ }else{
+ timeArr = this.merEndDay
+ }
+ }else{
+ if(this.timeIndex===0){
+ timeArr = this.startDay
+ }else{
+ timeArr = this.endDay
+ }
+ }
+ this.currentDate = new Date(timeArr)
+ }
+ },
+ // 初始化时间
+ initTime() {
+ let d = new Date();
+ if (d.getHours() >= 10) {
+ this.time = d.getTime()
+ } else {
+ this.time = d.getTime() - 24 * 60 * 60 * 1000
+ }
+ let h = d.getHours(),
+ day =d.getDate();
+ if(h<10){
+ day = day-1;
+ }
+ let m = d.getMonth() + 1;
+ if(m<10){
+ m ='0'+m;
+ }
+ if(day<10){
+ day ='0'+day;
+ }
+ let time = d.getFullYear() + '-' + m + '-' + day;
+ this.endDay = time;
+ this.startDay = time;
+ this.merStartDay = time;
+ this.merEndDay = time;
+ this.currentDate = new Date(time);
+ },
+ // 显示时间选择组件
+ openTimeModal(isB) {
+ console.log(111)
+ this.setPickerValue()
+ this.$nextTick(()=>{
+ this.isShoTime = true;
+ this.isMerTime = isB;
+ })
+ },
+ //设置时间
+ setTime(picker,arr) {
+ if(!this.timepicker && picker){
+ this.timePicker = picker;
+ }
+ let v =arr ? arr : picker.getValues(),
+ start = '',
+ end = '',
+ time = v[0] + '-' + v[1] + '-' + v[2];
+ if (this.isMerTime) {
+ start = 'merStartDay';
+ end = 'merEndDay';
+
+ } else {
+ start = 'startDay';
+ end = 'endDay';
+ }
+ if (this.timeIndex === 0) {
+ this[start] = time;
+ } else {
+ this[end] = time;
+ }
+ },
+ // 获取折线图统计数据
+ getAmtReport(id, lx) {
+ // console.log(lx == 'zfblx')
+ if(lx == 210000) {
+ this.$api.zfbLxWeekReport().then(res => {
+ console.log('zfbLxWeekReport')
+ this.opt.series[0].data = []
+ this.opt.series[1].data = []
+ this.opt.series[2].data = []
+ this.opt.xAxis.data = []
+ res.body.map( item => {
+ this.lxWait.push(item.dqrNum || 0)
+ this.lxValue.push(item.lxNum || 0)
+ this.lxAdd.push(item.lxAndBkNum || 0)
+ this.opt.xAxis.data.push(item.reportDate + '日')
+ })
+ this.opt.series[0].data = this.lxWait
+ this.opt.series[1].data = this.lxValue
+ this.opt.series[2].data = this.lxAdd
+ this.opt.series[0].lineStyle.normal.color = '#333333'
+ this.$forceUpdate();
+ let myChart = echarts.init(this.$refs.lineChart);
+ myChart.setOption(this.opt);
+ console.log(this.opt.series[0].data)
+ console.log(this.opt.series[1].data)
+ console.log(this.opt.series[2].data)
+ })
+ } else {
+ this.$api.getAmtReport(id).then((res) => {
+ let list = res.body || [];
+ // let list = [
+ // {timeStr: 1, amtNum: 10001},
+ // {timeStr: 2, amtNum: 10055},
+ // {timeStr: 3, amtNum: 33333},
+ // {timeStr: 4, amtNum: 4441},
+ // ]
+ this.opt.xAxis.data = [];
+ this.opt.series[0].data = [];
+ let result = list.some(function (item) {
+ return item.amtNum > 10000
+ })
+ if(result){
+ this.opt.series[0].itemStyle.normal.color = '#855CFE';
+ }else{
+ this.opt.series[0].itemStyle.normal.color = '#8760FF';
+ }
+ list.forEach(item => {
+
+ this.opt.xAxis.data.push(item.timeStr + '日')
+ // this.opt.series[0].data.push(item.amtNum)
+ // this.opt.series[0].data.push(item.amtNum)
+ if (result) {
+ this.opt.series[0].data.push((item.amtNum/10000).toFixed(2))
+ // this.opt.series[0].data.push(item.amtNum)
+ } else {
+ this.opt.series[0].data.push(item.amtNum)
+ }
+ })
+ let myChart = echarts.init(this.$refs.lineChart);
+ myChart.setOption(this.opt);
+ }).catch((err) => {
+
+ });
+ }
+ },
+ // 获取 柱状图数据
+ getMerWeeksReport() {
+ this.$api.getMerWeeksReport().then((res) => {
+ let list = res.body || [];
+ this.opt2.xAxis[0].data = [];
+ this.opt2.series[0].data = [];
+ this.opt2.series[1].data = [];
+ this.opt2.series[2].data = [];
+ list.forEach(item => {
+ this.opt2.xAxis[0].data.push(item.dd + '日')
+ this.opt2.series[0].data.push(item.merReport.passNum || 0)
+ this.opt2.series[1].data.push(item.merReport.refuNum || 0)
+ this.opt2.series[2].data.push(item.merReport.waitNum || 0)
+ })
+ var barChart = echarts.init(this.$refs.barChart);
+ barChart.setOption(this.opt2);
+ }).catch((err) => {
+
+ });
+ },
+ // 时间切换刷新统计数据
+ refreshData(){
+ if(this.timePicker){
+ let arr = this.timePicker.getValues()
+ this.setTime(null,arr)
+ }
+ if(this.isMerTime){
+ this.getMerReport(this.merStartDay,this.merEndDay)
+ }else{
+ this.getOrderReport(this.prodId,this.startDay,this.endDay)
+ }
+ },
+ // 获取订单统计
+ getOrderReport(prodId,startDay,endDay, lx){
+ if(this.zfblxLabel == 'zfblx') {
+ this.$api.zfbLxReport({
+ endTime: endDay,
+ staTime: startDay
+ }).then(({body}) => {
+ this.orderData = {
+ amtNum: body.dqrNum || 0,
+ merNum: body.lxAndBkNum || 0,
+ orderNum: body.lxNum || 0
+ }
+ this.isShoTime = false;
+ })
+ } else {
+ this.$api.getOrderReport({
+ startDay,
+ endDay,
+ prodId,
+ pageType:1,
+ }).then(({body}) => {
+ this.orderData = {
+ amtNum: body.amtNum || 0,
+ merNum: body.merNum || 0,
+ orderNum: body.orderNum || 0
+ }
+ this.isShoTime = false;
+ }).catch((err) => {
+
+ })
+ }
+ },
+ // 商户统计
+ getMerReport(staTime,endTime){
+
+ this.$api.getMerReport({
+ staTime,
+ endTime,
+ }).then(({body}) => {
+ this.merData = {
+ passNum: body.passNum || 0,
+ refuNum: body.refuNum || 0,
+ sumNum: body.sumNum || 0,
+ waitNum: body.waitNum || 0
+ }
+ this.isShoTime = false;
+ }).catch((err) => {
+
+ });
+
+ },
+ //切换产品
+ toggleProduct(item, index,isGetChartData) {
+ console.log(item)
+ this.zfblxLabel = ''
+ this.opt.series[0].data = []
+ this.opt.series[1].data = []
+ this.opt.series[2].data = []
+ if (item.typeId == 200015) {
+ this.$router.push({
+ path: "/order/order-lthyj",
+ query: {
+ typeId: item.typeId,
+ id:this.$route.query.id,
+ prodId:item.prodId
+ }
+ })
+ }
+ if(item.typeId == 210000) {
+ this.zfblxLabel = 'zfblx'
+ // console.log(this.zfblxLabel)
+ }
+ this.navIndex = index;
+ // return
+ let path = "";
+ // 200000- 支付宝拉新 200001-信用卡分期 200002-花呗分期 200003-裸机分期 200004-购机直降 200005-智享花 200008-商户收款 200009-花呗合约机 200010-商户贴息,200011信用购
+ switch (item.typeId * 1) {
+ case 210000:
+ path = "/order/lxOredr";
+ break;
+ case 200001:
+ path = "/order/credit";
+ break;
+ case 200002:
+ path = "/order/hb";
+ break;
+ case 200003:
+ path = "/order/phone";
+ break;
+ case 200004:
+ path = "/order/gjzj";
+ break;
+ case 200005:
+ path = "/order/zxh";
+ break;
+ case 200008:
+ path = "/order/dmf";
+ break;
+ case 200009:
+ path = "/order/hb";
+ break;
+ case 200010:
+ path = "/order/shtx";
+ break;
+ case 200014:
+ path = "/order/hbjl";
+ break;
+ case 200016:
+ path = "/order/wxScore";
+ break;
+ case 200017:
+ path = "/order/gzzj";
+ break;
+ }
+ switch (item.prodId * 1) {
+ case 30000011:
+ path='/order/xyg';
+ break;
+ case 30000012:
+ path='/order/xyg-hb';
+ break;
+ }
+ this.jumpParams = {
+ path,
+ query: {
+ typeId: item.typeId,
+ id:this.$route.query.id,
+ prodId:item.prodId
+ }
+ }
+ // console.log(this.jumpParams)
+ this.getAmtReport(item.prodId, item.typeId)
+ this.getOrderReport(this.prodId,this.startDay,this.endDay, item.typeId)
+ if(this.isAgent && isGetChartData){
+ this.getMerReport(this.merStartDay,this.merEndDay)
+ this.getMerWeeksReport()
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .home-box {
+ padding-bottom: 15px;
+ }
+
+ .h-44{
+ /*height: 44px;*/
+ background-color: transparent;
+ }
+
+
+ .head {
+ background: @c-bg-black;
+ padding-left: 20px;
+ height: 45px;
+
+ .product-item {
+ .lh(25px);
+ border-radius: 4px;
+ padding: 0 15px;
+ margin: 10px 0;
+ margin-right: 10px;
+ background-color: rgba(255, 255, 255, 0.2);
+ color: rgba(255, 255, 255, 0.4);
+
+ &.active {
+ background-color: @c-bg-fff;
+ color: @c-text-333;
+ }
+ }
+ }
+
+
+
+
+ .chart-box {
+ padding: 0 20px 10px;
+ background-color: @c-bg-fff;
+
+ .title-top {
+ .lh(44px);
+
+ .icon-left {
+ margin-right: 5px;
+ }
+
+ .icon {
+ margin-left: 5px;
+ }
+
+ .text {
+ font-weight: bold;
+ }
+ .under-text{
+ line-height: 15px;
+ /*text-decoration: underline;*/
+ border-bottom: 1px solid #000;
+ }
+ }
+
+ .data-box {
+ height: 80px;
+
+ .title {
+ font-size: @font-20;
+ margin-bottom: 10px;
+ }
+
+ .label {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+ }
+
+ .foot {
+ font-size: @font-12;
+ color: @c-text-999;
+ line-height: 40px;
+
+ .status {
+ margin-left: 12px;
+
+ &::before {
+ content: '';
+ display: inline-block;
+ height: 12px;
+ width: 12px;
+ border-radius: 50%;
+ margin-right: 4px;
+ }
+
+ &.success {
+ &::before {
+ background-color: #D5C7FF;
+ }
+ }
+
+ &.error {
+ &::before {
+ background-color: #FFB5D0;
+ }
+ }
+
+ &.warning {
+ &::before {
+ background-color: #FFE0C2;
+ }
+ }
+ }
+ }
+ }
+
+
+ .chart-b2{
+ padding: 10px 8px;
+ background-color: #F5F5F7;
+ }
+
+ .chart-box-bg{
+ padding: 5px 12px;
+ border-radius: 4px;
+ background-color: @c-bg-fff;
+ }
+
+
+ .lineChart {
+ height: 250px;
+ margin: 0 auto;
+ }
+
+ .btn-time {
+ display: block;
+ width: 320px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius: 22px;
+ margin: 15px auto;
+
+ }
+
+ .time-label {
+ .lh(65px);
+ color: @c-text-999;
+
+ .active {
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/main/index.vue b/src/views/main/index.vue
new file mode 100644
index 0000000..860ea70
--- /dev/null
+++ b/src/views/main/index.vue
@@ -0,0 +1,90 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 15:58:08
+ * @Description:
+ -->
+<template>
+ <div class="box home-tabbar ">
+ <router-view></router-view>
+ <van-tabbar route :active-color='$store.state.backColor' inactive-color='#CCCCCC'>
+ <van-tabbar-item :to="item.path" v-for="(item, index) in footerNav" :key="index" :info="item.powerId ===100003 ? count : ''" @click="resetCount(item.powerId)">
+ <span class="msgInfo" v-if="item.powerId ===300000 && msgCount.sum "></span>
+ <template :active="index" class="van-tabbar-item__icon flex-center-g" v-slot:icon>
+ <svg class="icon" aria-hidden="true" style="width:24px;height:24px;" :style="{fill:$store.state.backColor}">
+ <use v-if="active === item.powerId" :xlink:href="'#' + item.icon"></use>
+ <!--<use v-else xlink:href="#iconchanpin"></use>-->
+ <use v-else :xlink:href="'#' + item.Aicon"></use>
+ </svg>
+ </template>
+ {{item.label}}
+ </van-tabbar-item>
+ </van-tabbar>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState, mapGetters, mapActions
+ } from 'vuex';
+ export default {
+ data() {
+ return {
+ count: '',
+ active:this.$route.meta.powerId || ''
+ }
+ },
+ computed: {
+ ...mapState(['footerNav','msgCount']),
+ ...mapGetters(['orgType']),
+
+ },
+ created() {
+ this.init()
+ this.getCount()
+ },
+ methods: {
+ ...mapActions(['getCount']),
+ resetCount(id){
+ this.active = id;
+ // if(id===100003){
+ // this.count = '';
+ // }
+ },
+
+ init() {
+ // 代理和渠道角色才会调用
+ if(this.orgType===1 || this.orgType ===2){
+ this.$api.getUnAuditNb().then((res) => {
+ this.count = res.body.unAuditNb || '';
+ }).catch((err) => {
+
+ });
+ }
+ },
+ },
+
+ }
+</script>
+
+<style lang="less" scoped>
+ .box {
+ background-color: @c-f5;
+ min-height: 100vh;
+ //padding-bottom: 44px;
+ }
+ .msgInfo{
+ width:7px;
+ height:7px;
+ background:rgba(255,102,102,1);
+ color: #fff;
+ border-radius:50%;
+ position: absolute;
+ right: 34%;
+ top: 3px;
+ }
+
+
+
+</style>
diff --git a/src/views/main/message.vue b/src/views/main/message.vue
new file mode 100644
index 0000000..cb2e2e3
--- /dev/null
+++ b/src/views/main/message.vue
@@ -0,0 +1,121 @@
+
+<template>
+ <div class="message-table">
+ <div v-if="!messageList" class="notice-tips">
+ <div class="no-notice">
+ <img src="../../assets/imgs/pic.png" alt="暂无消息">
+ </div>
+ <p class="tips">暂无消息</p>
+ </div>
+ </div>
+</template>
+<script>
+import { dateFormat } from 'vux';
+import { mapActions } from 'vuex';
+ export default {
+ name: 'message',
+ data() {
+ return {
+ messageList: [],
+ }
+ },
+ created() {
+ this.msgListInit()
+ this.getCount()
+ },
+ methods: {
+ ...mapActions(['getCount']),
+ //跳转到消息详情
+ toMessageDetail(e, id) {
+ this.$router.push(`/message?messageId=${id}`);
+ },
+ msgListInit() {
+ this.$api.noticeList().then(res => {
+ this.messageList = res.body.noticeInfos;
+ console.log(this.messageList)
+ // console.log(this.messageList.some(item => {
+ // item.needRead === 1
+ // }))
+ })
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.notice-tips{
+ margin-top: 100px;
+}
+.no-notice{
+ width: 186px;
+ height: 186px;
+ margin-left: 43px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+}
+.tips{
+ color: #333333;
+ margin-top: 10px;
+ width: 100%;
+ text-align: center;
+ font-size: 14px;
+}
+.message-table{
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ padding-bottom: 50px;
+}
+.message-table-item{
+ width: 90%;
+ margin: 0 2%;
+ background: #fff;
+ margin-top: 10px;
+ padding: 10px 3%;
+ &-top{
+ margin-bottom: 10px;
+ .flexLayout(space-between, center, row);
+ :nth-child(1){
+ font-size: 16px;
+ color: #333333;
+ font-weight: bold;
+ width: 60%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: normal;
+ i{
+ font-size: 20px;
+ color: #3D86FA;
+ }
+ }
+ :nth-child(2){
+ font-size: 12px;
+ color: #999999;
+ }
+ }
+ &-content{
+ .flexLayout(space-between, center, row);
+ p{
+ // .ellipsisLn(290px);
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: normal;
+ color: #666666;
+ font-size: 13px;
+ }
+ span{
+ width:7px;
+ height:7px;
+ background:rgba(255,102,102,1);
+ border-radius:50%;
+ }
+ }
+}
+.notice-title{
+// color: #423D5D !important;
+}
+</style>
diff --git a/src/views/main/mine.vue b/src/views/main/mine.vue
new file mode 100644
index 0000000..9633e91
--- /dev/null
+++ b/src/views/main/mine.vue
@@ -0,0 +1,236 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 11:04:12
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 16:00:40
+ * @Description: 用户管理页面
+ -->
+<template>
+ <div class="mine-box">
+ <header class="header flex-between-g" :style="{background: $store.state.lastColor}">
+ <img
+ v-if="hasPic"
+ src="../../../static/img/left.png"
+ style="
+ position: absolute;
+ left: 0px;
+ top: 0;
+ height: 144px;
+ width: 166px;
+ "
+ />
+ <img
+ v-if="hasPic"
+ src="../../../static/img/right.png"
+ style="position: absolute; right: 0; top: 0; height: 47px; width: 62px"
+ />
+ <div class="flex-start-g" style="z-index: 99">
+ <p class="icon-box flex-center-g">
+ <svg
+ class="icon"
+ aria-hidden="true"
+ style="width: 40px; height: 40px"
+ >
+ <use xlink:href="#icongerenzhongxintouxiang"></use>
+ </svg>
+ </p>
+ <div class="userinfo">
+ <p class="name text-clip-g font-16-g">{{ userinfo.name }}</p>
+ <p>{{ userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, "$1****$2") }}</p>
+ <p class="copy" v-if="orgType == 1 || orgType == 2">
+ 邀请码:{{ inviteCode }} <span @click="copy">复制</span>
+ </p>
+ </div>
+ </div>
+ <div>
+ <p class="text-center-g font-16-g">{{ userLabel }}</p>
+ <van-button
+ class="btn-toggle"
+ @click="$router.push('/mine/toggle-identity?title=切换身份')"
+ >切换身份</van-button
+ >
+ </div>
+ </header>
+
+ <div class="grid">
+ <router-link
+ :to="item.path || ''"
+ class="item flex-center-g"
+ v-for="(item, index) in menu"
+ :key="index"
+ >
+ <div class="text-center-g">
+ <svg
+ class="icon"
+ aria-hidden="true"
+ style="width: 35px; height: 35px"
+ :style="{'fill':$store.state.backColor}"
+ >
+ <use :xlink:href="'#' + item.icon"></use>
+ </svg>
+ <p class="label">{{ item.label }}</p>
+ </div>
+ </router-link>
+ <!-- <router-link :to="item.path || ''" class="item flex-center-g" v-for="(item, index) in menu" :key="index">
+ <div class="text-center-g">
+ <svg class="icon" aria-hidden="true" style="width:35px;height:35px;">
+ <use :xlink:href="'#' +item.icon"></use>
+ </svg>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </router-link> -->
+ </div>
+ </div>
+</template>
+
+<script>
+import { mapState, mapGetters } from "vuex";
+import { _copyToClipboard } from "@/utils/index";
+export default {
+ data() {
+ return {
+ copyText: "",
+ walletOpenStatus: "",
+ };
+ },
+ created() {
+
+ },
+ computed: {
+ ...mapState(["userinfo", "userPage", "inviteCode"]),
+ ...mapGetters(["orgType"]),
+ hasPic(){
+ if(sessionStorage.isddxt != 1){
+ return true
+ }else{
+ return false
+ }
+ },
+ userLabel() {
+ switch (this.orgType) {
+ case 1:
+ return "代理";
+ case 2:
+ return "渠道";
+ case 3:
+ return "商户";
+ case 4:
+ return "门店";
+ }
+ },
+ menu() {
+ let arr = [];
+ if (this.orgType == 1) {
+ arr.push(
+ {
+ icon: "iconmobanguanli",
+ label: "模板管理",
+ path: "/template/list",
+ }
+ );
+ }
+ let usrArr = [
+ ...arr,
+ ...this.userPage,
+ {
+ icon: "iconshezhizhongxin",
+ label: "设置中心",
+ path: "/mine/setting",
+ },
+ ];
+ usrArr.forEach(item => {
+ if(item.powerId == '100005' && this.orgType == 3){
+ usrArr.splice(usrArr.length-2,usrArr.length-2);
+ }
+ })
+ return usrArr;
+ },
+ },
+ methods: {
+ copy() {
+ _copyToClipboard(this.inviteCode);
+ this.$notify_success("复制成功");
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.mine-box {
+ background-color: @c-bg-f5;
+ padding-bottom: 100px;
+}
+
+.header {
+ height: 144px;
+ background-color: @c-bg-black;
+ color: @c-text-fe;
+ padding: 0 20px;
+
+ .icon-box {
+ width: 60px;
+ height: 60px;
+ background-color: @c-bg-fff;
+ border-radius: 50%;
+ margin-right: 15px;
+ }
+
+ .userinfo {
+ max-width: 155px;
+
+ .name {
+ margin-bottom: 5px;
+ }
+ }
+
+ .btn-toggle {
+ .lh(24px);
+ padding: 0 10px;
+ background: #55516e;
+ border: 0.02rem solid #55516e;
+ margin-top: 8px;
+ color: @c-text-fe;
+ border-radius: 12px;
+ font-size: @font-11;
+ }
+}
+
+.grid {
+ margin: 0 auto;
+ width: 360px;
+ background-color: @c-bg-fff;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+ z-index: @zIndex-20;
+ transform: translateY(-15px);
+ box-shadow: 0px 8px 20px 0px rgba(66, 61, 93, 0.05);
+ border-radius: 3px;
+
+ .item {
+ width: 120px;
+ height: 122px;
+ }
+
+ .label {
+ margin-top: 15px;
+ color: @c-text-666;
+ }
+}
+.copy {
+ color: #fefeff;
+ font-size: 12px;
+ margin-top: 10px;
+ span {
+ width: 40px;
+ height: 16px;
+ background: #55516e;
+ padding: 0 10px;
+ // opacity:0.1;
+ border-radius: 16px;
+ color: #fefeff;
+ font-size: 11px;
+ line-height: 16px;
+ }
+}
+</style>
diff --git a/src/views/main/product.vue b/src/views/main/product.vue
new file mode 100644
index 0000000..fc8297d
--- /dev/null
+++ b/src/views/main/product.vue
@@ -0,0 +1,234 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 18:10:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-26 13:53:40
+ * @Description:
+ -->
+<template>
+ <div class="product-box h-100-g">
+
+ <nav class="product-title">
+ 产品管理
+ </nav>
+
+ <div class="alipay" @click="$router.push('/product/facepay')">
+ <van-icon name="scan" />
+ <p>支付宝扫码收款</p>
+ </div>
+
+
+ <div class="product-list grid">
+ <div class="list-title">办理分期</div>
+ <div class="item flex-center-g" @click="handlerClick(item)" v-for="(item, index) in menu" :key="index" :class="item.icon.replace('#','')">
+ <div class="text-center-g" >
+ <svg class="icon" aria-hidden="true" :style="{fill:item.color}">
+ <use :xlink:href="item.icon"></use>
+ </svg>
+ <p class="label">{{item.label}}</p>
+ </div>
+ </div>
+ </div>
+
+ </div>
+</template>
+
+<script>
+ export default {
+ name: "product",
+ data() {
+ return {
+ // 菜单栏
+ menu: [
+ {
+ icon: '#iconxinyongkafenqi',
+ label: '信用卡分期',
+ path: '',
+ color:'#896EDB'
+ },
+ {
+ icon: '#iconhuabeifenqi',
+ label: '花呗分期',
+ color:'#896EDB'
+ },
+ {
+ icon: '#iconshoujifenqi',
+ label: '手机分期',
+ color:'#896EDB'
+ },
+ {
+ icon: '#icongoujizhijiang',
+ label: '购机直降',
+ color:'#ccc'
+ },
+ {
+ icon: '#iconzhixianghua',
+ label: '智享花',
+ color:'#896EDB'
+ },
+ {
+ icon: '#iconzhixianghua',
+ label: '信用购',
+ color:'#896EDB'
+ },
+ {
+ icon: '#icondangmianfu',
+ label: '商户收款',
+ color:'#ccc'
+ },
+ {
+ icon: '#iconhuabeiheyueji',
+ label: '花呗合约机',
+ color:'#896EDB'
+ },
+ {
+ icon: '#iconhuabeitie',
+ label: '花呗提额',
+ color:'#896EDB'
+ },
+
+ ]
+ }
+ },
+ created() {
+ // this.openAuto();
+ },
+ methods: {
+ openAuto(){
+ let openId = window.localStorage.getItem("pOpenId");
+ let codeId = window.localStorage.getItem("pCodeId");
+ alert("openId:"+openId);
+ alert("codeId:"+codeId);
+ if(codeId == undefined) {
+ var strUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + "wx594ab33e0466eccf" +
+ "&redirect_uri=" + "https%3a%2f%2fsie.jycash.cn%2fsib_wx_score%2f%23%2f" + "&response_type=code&scope=snsapi_userinfo" + "#wechat_redirect";
+ window.location.href = strUrl;
+ }else if(openId == undefined){
+ this.$api.getWeChatUserInfo({"code":codeId}).then(
+ res => {
+ let openId = res.body;
+ window.localStorage.setItem("pOpenId",openId);
+ this.$api.setUserOpenId({"openId":openId}).then(
+ res => {
+ alert("updateOpenId:"+ openId);
+ },
+ error => {
+ statusCodeManage.showTipOfStatusCode(error, this);
+ }
+ );
+ },
+ error => {
+ statusCodeManage.showTipOfStatusCode(error, this);
+ }
+ );
+ }
+ },
+ handlerClick(item) {
+ if (item.path) {
+ this.$router.push(item.path);
+ return false;
+ }
+
+ switch (item.label) {
+ case '信用卡分期':
+ this.Click_XYK();
+ break;
+ case '花呗分期':
+ this.Click_HBFQ();
+ break;
+ }
+ },
+
+
+ //信用卡分期点击
+ Click_XYK() {
+ console.log('信用卡分期点击');
+ },
+
+ //花呗分期
+ Click_HBFQ() {
+ console.log('花呗分期');
+ },
+
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .product-box {
+ padding-bottom: 100px;
+
+ //产品标题
+ .product-title {
+ .lh(44px);
+ background: @c-black;
+ font-size: @font-16;
+ color: @c-fff;
+ font-weight: bold;
+ text-align: center;
+ }
+
+
+ .alipay{
+ width: 360px;
+ margin: 0 auto;
+ .flex(center,center,warp,column);
+ margin-top: 20px;
+ min-height: 130px;
+ background-color: @c-fff;
+ .van-icon{
+ font-size: 55px;
+ margin-bottom: 15px;
+ color: @c-default;
+ }
+ p{
+ font-size: @font-12;
+ color: @c-default;
+ }
+ }
+
+
+ //产品列表
+ .grid {
+ margin: 15px auto 0 auto;
+ width: 360px;
+ background-color: @c-bg-fff;
+ .flex(flex-start, center, wrap);
+ z-index: @zIndex-20;
+ box-shadow: 0 8px 20px 0 rgba(66, 61, 93, 0.05);
+ border-radius: 3px;
+ .item {
+ width: 120px;
+ height: 122px;
+ }
+ .icon{
+ width:35px;
+ height:35px;
+ /* fill:@c-default;*/
+ }
+ .label {
+ margin-top: 15px;
+ color: @c-text-666;
+ }
+ }
+
+
+
+ .list-title{
+ width: 100%;
+ .lh(44px);
+ padding-left: 25px;
+ border-bottom: 1px solid #c7c7c7;
+ }
+
+
+ //单独修改某一单元格样式
+ .iconshoujifenqi{
+
+ }
+
+
+
+ }
+</style>
diff --git a/src/views/mdyh/bdjc/bdCourse.vue b/src/views/mdyh/bdjc/bdCourse.vue
new file mode 100644
index 0000000..77fd7be
--- /dev/null
+++ b/src/views/mdyh/bdjc/bdCourse.vue
@@ -0,0 +1,290 @@
+
+<template>
+ <div class="getQRCode">
+ <!-- <x-header class="message-head" :title="courseName" :left-options="{backText:''}"></x-header> -->
+ <v-navbar :title="courseName" fixed ></v-navbar>
+ <!-- 视频窗口 v-if="playerOptions.sources[0].src"-->
+ <div style="margin-top: 40px" >
+ <video-player class="video-player vjs-custom-skin"
+ ref="videoPlayer"
+ :playsinline="true"
+ :options="playerOptions"
+ v-if="playerOptions.sources[0].src"
+ ></video-player>
+ </div>
+ <!-- 选项卡 -->
+ <div class="table-active">
+ <van-tabs v-model="active" color="#896EDB" title-active-color="#896EDB" line-width="24px">
+ <van-tab title="操作教程">
+ <div class="course-text-c">
+ <div v-for="item in sum" class="course-text-c-img">
+ <img :src="`${imgUrl}${fileName}${item}.png`" alt="">
+ </div>
+ </div>
+ </van-tab>
+ <van-tab title="常见问题">
+ <van-collapse v-model="activeNames">
+ <div v-if="sum != 9">
+ <van-collapse-item v-for="(item, index) in questionList">
+ <div class="question-title" slot="title">{{item.title}}</div>
+ <div class="course-text" v-if="index == 1" slot="default">
+ <p class="course-text-item" v-for="it in specialQueList">{{it.course}}</p>
+ </div>
+ <div class="course-text" v-if="index == 11" slot="default">
+ <p class="course-text-item" v-for="el in specialQueList">{{el.course2}}</p>
+ </div>
+ <div class="course-text" v-if="index != 1 && index != 11" slot="default">
+ <p class="course-text-item">{{item.course}}</p>
+ </div>
+ </van-collapse-item>
+ </div>
+ <div v-if="sum == 9">
+ <van-collapse-item v-for="(item, index) in questionList">
+ <div class="question-title" slot="title">{{item.title}}</div>
+ <div class="course-text" v-if="index == 6" slot="default">
+ <p class="course-text-item" v-for="it in specialQueList">{{it.course}}</p>
+ </div>
+ <div class="course-text" v-if="index != 6" slot="default">
+ <p class="course-text-item">{{item.course}}</p>
+ </div>
+ </van-collapse-item>
+ </div>
+ </van-collapse>
+ </van-tab>
+ </van-tabs>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import {dateFormat} from 'vux';
+import Vue from 'vue';
+import {
+ Tab,
+ Tabs,
+ Collapse,
+ CollapseItem
+} from 'vant';
+import { videoPlayer } from 'vue-video-player'
+import 'video.js/dist/video-js.css'
+import '../../../style/myVideo'
+import { NavBar } from "vant";
+
+Vue.use(NavBar);
+Vue.use(Tab).use(Tabs);
+Vue.use(Collapse).use(CollapseItem);
+ export default {
+ name: 'message',
+ components: {
+ XHeader,
+ videoPlayer
+ },
+ data() {
+ return {
+ sum: Number(this.$route.query.sum),
+ fileName: this.$route.query.fileName,
+ imgUrl: 'https://t.finlean.com/czjc/img/sib_merao/',
+ specialQueList:[], //特殊格式的常见问题
+ active: 2,
+ activeNames: ['1'],
+ questionList: [],
+ courseName: this.$route.query.courseName,
+ // 视频播放初始化
+ playerOptions : {
+ playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
+ autoplay: false, //如果true,浏览器准备好时开始回放。
+ muted: false, // 默认情况下将会消除任何音频。
+ loop: false, // 导致视频一结束就重新开始。
+ preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
+ language: 'zh-CN',
+ aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
+ fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
+ sources: [{
+ src: '', // 路径
+ type: 'video/mp4' // 类型
+ },
+ // {
+ // src: '//path/to/video.webm',
+ // type: 'video/webm'
+ // }
+ ],
+ // poster: "../../static/images/test.jpg", //你的封面地址
+ width: document.documentElement.clientWidth,
+ notSupportedMessage: '此视频暂无法播放,请稍后再试', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
+ controlBar: {
+ timeDivider: true,
+ durationDisplay: true,
+ remainingTimeDisplay: false,
+ fullscreenToggle: true //全屏按钮
+ }
+ }
+ }
+ },
+ created() {
+ this. bdCourseInit()
+ },
+ methods: {
+ bdCourseInit() {
+ this.$nextTick(() => {
+ // this.playerOptions.sources[0].src = "http://vjs.zencdn.net/v/oceans.mp4";
+ })
+ this.questionList = [
+ {
+ title: "名称不匹配(支付宝账号和商户名不一致",course: "检查支付宝账号与支付宝名称是否与法人信息一致,个体户的支付宝账号的支付宝名称应为法人姓名。企业支付宝名称应为营业执照名称。"
+ },{
+ title: "未能通过工商校验,请检查身份信息正确性",course: "1.确认收款账号和收款名称是不是对的(企业商户只能填写企业支付宝账号,个体工商户填写法人的) 2.确认营业执照编码和营业执照名称是否与营业执照一致。3.确认法人身份证号码是否是正确的 4.确认商户类型是否选择正确。 5.检查填写的法人身份证号和法人姓名是否与法人真实信息一致。"
+ },{
+ title: "支付宝账号不存在",course: "检查支付宝账号是否填写错误,重新填写资料提交。"
+ },{
+ title: "区码非法",course: "商户录入的省市区和支付宝那边的区码不一致,提供商户名称给技术处理。"
+ },{
+ title: "签约失败(存在风险)",course: "出现此提示的原因是该商户未能通过支付宝的风控系统核查,暂无解决办法。"
+ },{
+ title: "唯一键被占用",course: "商户已经用同一个营业执照注册过账号,不需要重新注册。上报代理查询已通过账号切换到第一次注册的账号。"
+ },{
+ title: "交易结算异常、二级商户支付宝账号不存在",course: "https://docs.open.alipay.com/58/103544根据网址的教程使用(花呗分期收款支付宝账号)登录查询pid,将商户名称和Pid提交处理。"
+ },{
+ title: "ALIN39446 ALIN43812 ALIN43791 ALIN43798 ALIN39423 ALIN39425 ALI39448",course: "为了确保资金安全,系统会综合评估用户的使用场景,如果当下无法使用花呗支付,建议您更换其他付款方式,如果用户表示就一定要用花呗,可以建议用户更换商家尝试或者第二天再尝试使用花呗支付。"
+ },{
+ title: "花呗分期交易时的资金流是如何变动的",course: "创建并支付时,花呗分期账户一次性将订单全额结算至商户收款账户。如果商户贴息,花呗一次性将商户承担的手续费全部从商户收费账户扣除。用户每期还款时,资金(本金+用户承担手续费)由用户账户结算至花呗账户。"
+ },{
+ title: "花呗分期退手续费遵循什么原则",course: "商户承担手续费,自交易发生后15天内发生退款,花呗全额退手续费,15天后不退手续费。 用户已经支付的手续费一概不退,未支付的手续费,如果已经出了账单则不能退,未出账单的,根据退款金额按比例减免。。"
+ },{
+ title: "报错“花呗分期暂不可用,你可以使用其他付款方式继续支付或稍后重试” 怎么办",course: "导致该报错的原因可能是:用户没有花呗额度;用户花呗额度不足;该笔交易被判定为高风险交易。用户此时可以选择其它付款方式唤起支付宝收银台继续支付。"
+ },{
+ title: "花呗分期如何还款?",course: "花呗分期的账单与花呗账单在一起,每个月出账日计算当月应还金额,用户需在当月还款日之前将应还金额还清;还款方式支持系统自动扣款与用户主动还款两种:系统自动扣款:在还款日当天,系统发起自动扣款,会从用户余额、支付宝绑定借记卡、余额宝依次进行扣款,请保证支付宝金额充足;用户主动还款:用户可以登录支付宝-蚂蚁花呗,进行账单主动还款。"
+ }
+ ]
+ this.specialQueList = [
+ {
+ course:'1.确认收款账号和收款名称是不是对的(企业商户只能填写企业支付宝账号,个体工商户填写法人的)',
+ },
+ {
+ course:'2.确认营业执照编码和营业执照名称是否与营业执照一致。'
+ },
+ {
+ course:'3.确认法人身份证号码是否是正确的。'
+ },
+ {
+ course:'4.确认商户类型是否选择正确。'
+ },
+ {
+ course:'5.检查填写的法人身份证号和法人姓名是否与法人真实信息一致。'
+ },
+ {
+ course2:'花呗分期的账单与花呗账单在一起,每个月出账日计算当月应还金额,用户需在当月还款日之前将应还金额还清;'
+ },
+ {
+ course2:'还款方式支持系统自动扣款与用户主动还款两种'
+ },
+ {
+ course2:'系统自动扣款:在还款日当天,系统发起自动扣款,会从用户余额、支付宝绑定借记卡、余额宝依次进行扣款,请保证支付宝金额充足;'
+ },
+ {
+ course2:'用户主动还款:用户可以登录支付宝-蚂蚁花呗,进行账单主动还款。'
+ },
+ ]
+ if(this.sum == 9) {
+ this.questionList = [
+ {
+ title: '资方审核需要多长时间?',
+ course: '30秒左右;',
+ },
+ {
+ title: '用户办单过程中资料填写错误或合约选择错误能否重新办单?',
+ course: '在商户上传合约凭证及合约手机号之前,用户可重新扫码办理订单,之前的订单系统会自动取消;',
+ },
+ {
+ title: '若用户想要退货,是否有条件限制?',
+ course: '只要用户在放款成功7个自然日之前与商户协商达成一致,商户可在商户后台发起退货申请,发起后需当天把结算款结算至资方指定银行账户,资方确认收到结算款后受理退货;若商户当天未把结算款结算至资方指定银行账户,资方会拒绝退货申请;',
+ },
+ {
+ title: '用户办单完成后后续如何还款?',
+ course: '用户每月20号以前需根据合约资费充值话费,若用户当月未充值话费,资方会从每月27日开始向用户银行卡代扣当月应还本金及利息;',
+ },
+ {
+ title: '用户不还款是否会影响征信?',
+ course: '若用户当月未缴话费,资方会从当月27号开始对用户银行卡进行代扣,若连续5个工作日均代扣失败,资方会上报人行征信;',
+ },
+ {
+ title: '智享花对用户年龄是否有限制?',
+ course: '需要用户年龄在 22-55 岁之间;',
+ },
+
+ ]
+ this.specialQueList = [
+ {
+ course:'1. 每个用户在花呗有自己的额度,只能在可用额度内办单,智享花是针对用户所选择合约、商品及个人情况综合评估判断能否办单;',
+ },
+
+ ]
+ }
+ },
+ //返回上一级按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+
+ }
+ }
+</script>
+<style lang="less" scoped>
+.vjs-big-play-button{
+ // position: absolute;
+ top: 35% !important;
+ left: 35% !important;
+}
+.getQRCode{
+ background: #F5F5F7;
+ width: 96%;
+ padding: 0 2%;
+ height: 100%;
+}
+.course-text{
+ color: #999999;
+ font-size: 12px;
+ line-height: 18px;
+ background-color: #fff;
+ // padding: 19px 15px 22px 12px;
+}
+.course-text-c{
+ // color: #666666;
+ // font-size: 12px;
+ // line-height: 18px;
+ // background-color: #fff;
+ // padding: 19px 15px 22px 12px;
+ &-img{
+ width: 100%;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+}
+/deep/.van-collapse-item__content{
+ border-bottom: 1px solid #EEEEEE;
+}
+.message-head{
+ position: relative;
+}
+.table-active{
+ overflow: hidden;
+ margin-top: 40px;
+}
+.van-collapse-item{
+ margin: 0;
+}
+.question-title{
+ font-size: 12px;
+ color: #333;
+}
+/deep/.question-title{
+ font-weight: normal;
+}
+/deep/.van-collapse-item{
+ border-bottom: 1px solid #EEEEEE;
+}
+.course-text-item{
+ line-height: 25px;
+}
+</style>
diff --git a/src/views/mdyh/overdue/ovderdueDetail.vue b/src/views/mdyh/overdue/ovderdueDetail.vue
new file mode 100644
index 0000000..9202eea
--- /dev/null
+++ b/src/views/mdyh/overdue/ovderdueDetail.vue
@@ -0,0 +1,422 @@
+
+<template>
+ <div class="getQRCode">
+ <!-- <x-header class="message-head" title="逾期用户" :left-options="{backText:''}"></x-header> -->
+ <van-nav-bar title="逾期详情" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="overdue-body">
+ <div class="overdue-body-header">
+ <div class="overdue-body-header-left">
+ <span>{{ overdueList.prodName }}</span>
+ <p>{{ overdueList.usrName }}</p>
+ </div>
+ <div class="overdue-body-header-right">
+ <span>{{ overdueList.usrMbl }}</span>
+ <a :href="'tel:' + overdueList.usrMbl"><van-icon class="phone-icon" name="phone"/></a>
+ </div>
+ </div>
+ <div class="border"></div>
+ <div class="overdue-body-content">
+ <div>
+ <p class="overdue-body-content-day">
+ 逾期天数:
+ <span :style="{color:(overdueList.status==0? '#FF6666' : '#666666')}">{{ overdueList.oveDay }}</span>
+ </p>
+ <p>
+ 应还日期:{{ overdueList.shoDate | timeformat('yyyy-MM-dd')}}
+ </p>
+ </div>
+ <div class="overdue-body-content-total">
+ <p >{{overdueList.status==0? "应还总额(元)" : "已还总额(元)"}}</p>
+ <span :style="{color:(overdueList.status==0? '#FF6666' : '#666666')}">{{ overdueList.oveAmt }}</span>
+ </div>
+ </div>
+ <div class="border"></div>
+ <div class="overdue-body-store">
+ <p>渠道:<span>{{ overdueList.chanName == 9999? '无' : overdueList.chanName }}</span></p>
+ <p>办理商户:<span>{{ overdueList.merName }}</span></p>
+ <p>办理门店:<span>{{ overdueList.storeName }}</span></p>
+ </div>
+ </div>
+ <div class="gj-body">
+ <div class="gj-body-header">
+ <p class="gj-body-header-title">跟进记录</p>
+ <div class="gj-body-header-add" @click="showAddModel">
+ 新增+
+ </div>
+ </div>
+ <div class="gj-body-content">
+ <div class="gj-body-content-item">
+ <!-- <div class="gj-body-content-item-label">
+ <span></span>
+ <div></div>
+ </div> -->
+ <div class="step" v-for="(item, index) in msgList" :key="index">
+ <span class="spot"></span>
+ <div class="step-content" v-if="msgList.length == index+1" style="border: none;padding-bottom: 0px;">
+ <p class="gj-body-content-item-msg">{{ item.folCont }} </p>
+ <span>{{ item.creTime | timeformat('yyyy-MM-dd HH:mm')}}</span>
+ <span>{{ item.mgrName }}</span>
+ <span v-if="item.isOpr == 1" style="color: #4A75FF; margin-left:15px;" @click="showAddModel(this, 'edit', item.folCont, item.folId)">编辑</span>
+ </div>
+ <div class="step-content" v-else>
+ <p class="gj-body-content-item-msg">{{ item.folCont }} </p>
+ <span>{{ item.creTime | timeformat('yyyy-MM-dd HH:mm')}}</span>
+ <span>{{ item.mgrName }}</span>
+ <span v-if="item.isOpr == 1" style="color: #4A75FF; margin-left:15px;" @click="showAddModel(this, 'edit', item.folCont, item.folId)">编辑</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- 新增记录模态窗 -->
+ <van-popup v-model="showAdd" class="addModel">
+ <div class="addModel-title">{{ modelTitle }}</div>
+ <div class="addModel-textarea">
+ <textarea name="" id="" cols="30" rows="10" placeholder="请输入跟进记录" maxlength="100" v-model="val" @keydown="textareaChange" @keyup="textareaChange"></textarea>
+ <span><i>{{ textSum }}</i>/100</span>
+ </div>
+ <div class="addModel-btn">
+ <van-button class="btnNo" type="default" round @click='showAdd = false'>取消</van-button>
+ <van-button class="btnYes" type="default" round @click='AddRec'>提交</van-button>
+ </div>
+ </van-popup>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import { dateFormat} from 'vux';
+import Vue from 'vue';
+import { Notify } from 'vant';
+
+Vue.use(Notify);
+ export default {
+ name: 'message',
+ components: {
+ XHeader,
+ },
+ data() {
+ return {
+ id: this.$route.query.overdueId,
+ val: '',
+ textSum: 0,
+ msgList:[],
+ showAdd: false,
+ overdueList: {},
+ modelTitle: '新增跟进记录', //模态窗标题
+ folCount: '',
+ folId: '',
+ }
+ },
+ created() {
+ this. overdueInt();
+ },
+ methods: {
+ //新增跟进记录模态窗textarea键盘事件
+ textareaChange() {
+ // this.val = this.val.slice(0,100)
+ // console.log(this.val.length)
+ this.textSum = this.val.length;
+ },
+ //显示新增跟进记录模态窗
+ showAddModel(e, val, folCount, folId) {
+ this.modelTitle = '新增跟进记录'
+ this.val = '';
+ if(val == 'edit') {
+ console.log(folCount);
+ console.log(folId);
+ this.modelTitle = '编辑跟进记录';
+ // this. folCount = folCount;
+ this.folId = folId;
+ this.val = folCount;
+ }
+ this.showAdd = true;
+
+ },
+ //新增跟进记录模态窗确认事件
+ AddRec() {
+ console.log(this.val == null || this.val =='')
+ if(this.val == null || this.val =='') {
+ Notify({ type: 'danger', message: '请输入跟进记录'});
+ } else {
+ let date = {}
+ date.oveId = this.id;
+ date.folCont = this.val;
+ if(this.modelTitle == '编辑跟进记录') {
+ date.folId = this.folId;
+ }
+ console.log(date)
+ this.$api.overdueSaveOveFol(date).then(res => {
+ this.showAdd = false;
+ this.folId = '';
+ this.folCount = '';
+ this.$router.go(0);
+ })
+ }
+ },
+ overdueInt() {
+ // this.$api.overdueList().then(res => {
+ // console.log(res.body)
+ // // this.id = 1111;
+ // this.overdueList = res.body.map(item => {
+ // if(item.id == this.id) {
+ // return item
+ // }
+ // });
+ // this.overdueList = this.overdueList[0]
+ // console.log( this.overdueList)
+ // })
+ this.$api.overdueDetail({oveId: this.id}).then(res => {
+ // console.log(res.body);
+ this.overdueList = res.body;
+ this.msgList = res.body.overFolInfList
+ })
+
+ },
+ //返回上一级按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ }
+ }
+</script>
+<style lang="less" scoped>
+// src='../../../../style/mixins.less'
+// @import'@/style/mixins.less';
+.step{
+ .flexLayout(flex-start, center);
+ position: relative;
+ margin-bottom: 5px;
+ // padding-left: 28px;
+ &-content{
+ // padding-left: 28px;
+ margin-left: 15px;
+ padding-left: 17px;
+ border-left: 1px solid #E6E6E6;
+ padding-bottom: 30px;
+ span{
+ color: #999999;
+ }
+ }
+}
+.phone-icon{
+ width: 20px;
+ height: 20px;
+ background: rgba(137,110,219,1);
+ border-radius: 20px;
+ color: #fff;
+ line-height: 20px;
+ text-align: center;
+ transform: translateY(1px);
+}
+.spot{
+ width: 7px;
+ height: 7px;
+ background: rgba(255,255,255,1);
+ border: 2px solid rgba(204,204,204,1);
+ border-radius: 50%;
+ position: absolute;
+ top: 0;
+ left: 10px;
+ margin-right: 10px;
+}
+.getQRCode{
+ background: #F5F5F7;
+ width: 100%;
+ height: 100%;
+}
+.message-head{
+ position: relative;
+}
+.addModel{
+ width: 280px;
+ border-radius: 6px;
+ // height: 275px;
+ background-color: #fff;
+ &-title{
+ color: #000;
+ font-size: 14px;
+ height: 58px;
+ line-height: 58px;
+ text-align: center;
+ }
+ &-textarea{
+ textarea{
+ width: 227px;
+ height: 130px;
+ margin-left: 18px;
+ // margin: 0 auto;
+ position: relative;
+ border:1px solid rgba(230,230,230,1);
+ color: #999999;
+ padding: 0 8px;
+ padding-top: 15px;
+ }
+ span{
+ font-size: 12px;
+ color: #999999;
+ position: absolute;
+ right: 20px;
+ bottom: 83px;
+ }
+ }
+ &-btn{
+ height: 77px;
+ .flexLayout(center, center);
+ .van-button{
+ width:110px;
+ height:36px;
+ background:rgba(238,238,238,1);
+ background:rgba(0,0,0,0.72);
+ border-radius:36px;
+ color: #FFFFFF;
+ font-size: 16px;
+ line-height: 36px;
+ }
+ .btnNo{
+ background: #EEEEEE;
+ color: #666666;
+ margin-right: 10px;
+ font-size: 16px;
+ }
+ .btnYes{
+ background: #896EDB;
+ font-size: 16px;
+ }
+ }
+}
+.overdue-body{
+ overflow: hidden;
+ width: 92%;
+ margin: 10px 2%;
+ padding: 0 2%;
+ background-color: #fff;
+ font-weight:500;
+ color:rgba(102,102,102,1);
+ &-header{
+ height: 50px;
+ .flex(space-between, center);
+ &-left{
+ .flex(flex-start, center);
+ span{
+ width: 68px;
+ height: 20px;
+ line-height: 20px;
+ font-size: @font-12;
+ text-align: center;
+ background: rgba(66,61,93,1);
+ border-radius: 10px;
+ font-weight:500;
+ color:rgba(255,255,255,1);
+ margin-right: 12px;
+ }
+ p{
+ font-weight:bold;
+ color:rgba(51,51,51,1);
+ font-size: 16px;
+ }
+ }
+ &-right{
+ span{
+ font-weight:500;
+ color:rgba(102,102,102,1);
+ font-size: 13px;
+ }
+ }
+ }
+ .border{
+ height:1px;
+ background:rgba(238,238,238,1);
+ width: 100%;
+ }
+ &-content{
+ height: 48px;
+ padding: 10px 0;
+ font-size: @font-14;
+ .flex(space-between, center);
+ p{
+ margin-bottom: 5px;
+ }
+ span{
+ color: #FF6666;
+ font-family: "微软雅黑";
+ }
+ &-day{
+ margin-top: 12px;
+ }
+ &-total{
+ span{
+ font-size: 24px;
+ font-weight: bold;
+ font-family: "微软雅黑";
+ }
+ }
+ }
+ &-store{
+ // height: 153px;
+ // line-height: 51px;
+ padding: 18px 0;
+ p{
+ margin-top: 10px;
+ }
+ :first-child{
+ margin-top: 0;
+ }
+ }
+ &-channel{
+ height: 30px;
+ line-height: 30px;
+ }
+}
+.gj-body{
+ overflow: hidden;
+ width: 92%;
+ margin: 10px 2%;
+ padding: 0 2%;
+ background-color: #fff;
+ font-weight:500;
+ color:rgba(102,102,102,1);
+ &-header{
+ .flex(space-between, center);
+ padding-top: 14px;
+ &-title{
+ font-weight: bold;
+ color: #333;
+ }
+ &-add{
+ text-decoration:underline;
+ color:rgba(137,110,219,1);
+ font-size: 14px;
+ }
+ }
+ &-content{
+ margin-top: 25px;
+ color: #666;
+ font-size: 13px;
+ &-item{
+ // margin-left: 18px;
+ // .flex(space-between, center);
+ &-msg{
+ margin-bottom: 10px;
+ }
+ &-label{
+ height: 100%;
+ span{
+ width:9px;
+ height:9px;
+ background:rgba(255,255,255,1);
+ border:2px solid rgba(204,204,204,1);
+ border-radius:50%;
+ }
+ div{
+ width:2px;
+ // height:60px;
+ height: 96%;
+ background:rgba(230,230,230,1);
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mdyh/overdue/overdue.vue b/src/views/mdyh/overdue/overdue.vue
new file mode 100644
index 0000000..2f41be6
--- /dev/null
+++ b/src/views/mdyh/overdue/overdue.vue
@@ -0,0 +1,446 @@
+
+<template>
+ <div class="overdue">
+ <div class="top" :style="{background:$store.state.defaultBgColor}">
+ <van-nav-bar title="风控订单" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;" class="navBar">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ <span slot="right" @click="isShow = true;">筛选</span>
+ </van-nav-bar>
+ <div class="tabBar">
+ <div class="tabBar_item" @click="changeOrderType(1)">
+ <p>投诉订单</p>
+ <p class="line" v-show="orderTypeNum == 1"></p>
+ </div>
+ <div class="tabBar_item" @click="changeOrderType(2)">
+ <p>风险订单</p>
+ <p class="line" v-show="orderTypeNum == 2"></p>
+ </div>
+ </div>
+ </div>
+ <div class="type">
+ <div class="type_item" v-show="orderTypeNum == 1">
+ <p class="type_num">{{unHandleNum}}笔</p>
+ <p class="complaint">投诉中</p>
+ </div>
+ <div class="type_item" v-show="orderTypeNum == 1" >
+ <p class="type_num">{{handleNum}}笔</p>
+ <p class="deal">已处理</p>
+ </div>
+ <div class="type_item" v-show="orderTypeNum != 1">
+ <p class="type_num">{{unHandleNum + handleNum}}笔</p>
+ <p>风险订单</p>
+ </div>
+ </div>
+ <!-- 订单列表-->
+ <div class="list">
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" :immediate-check="false" offset="10" class="loadMore">
+ <div class="list_item" v-for="(item, index) in list" :key="index" @click="go(item)">
+ <div class="list_item_left">
+ <p class="leftTop">{{item.userName}} <span>{{item.userMblNo}}</span></p>
+ <p>订单状态:{{item.orderStatus}}</p>
+ <p>订单号:{{item.orderId}}</p>
+ <p>办单日期:{{item.creTime | dealCreTime}}</p>
+ <p v-show="orderTypeNum == 1">投诉日期:{{item.noticeTime | dealNoticeTime}}</p>
+ <p v-show="orderTypeNum != 1">风险识别日期:{{item.noticeTime | dealNoticeTime}}</p>
+ </div>
+ <div class="list_item_right">
+ <div class="list_item_right_top" v-if="orderTypeNum == 1">
+ <p class="typeText" :class="item.status == 1 ? 'activetypeText' : ''" v-if="orderTypeNum == 1">{{item.status | dealStatus}}</p>
+ <p class="typebtn" v-if="orderTypeNum == 1">({{item.type}})</p>
+ </div>
+ <p class="typeTextFx" v-show="orderTypeNum != 1">{{item.type}}风险</p>
+ <p class="btn" :style="{background:$store.state.defaultBgColor}" @click.stop="dealOrderStatus(item.orderId)" v-if="orderTypeNum == 1 && item.status == 0">已处理</p>
+ <p class="btn" :style="{background:$store.state.defaultBgColor}" @click.stop="haveRead(item.orderId)" v-if="orderTypeNum != 1 && item.status == 0">已读</p>
+ </div>
+ </div>
+ </van-list>
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <!-- 筛选弹出层-->
+ <v-filter v-model="isShow"
+ :belongArr="belongArr"
+ :periodsArr="periodsArr"
+ :riskLevelArr="riskLevelArr"
+ :riskTypeArr="riskTypeArr"
+ customTitle="分期本金"
+ :hasSearch="true"
+ @search="(v)=>search(v,true)">
+ </v-filter>
+ <!-- 无订单展示-->
+ <div class="overdue-pic" v-if="noOrder">
+ <div class="overdue-pic-img">
+ <img src="../../../assets/imgs/yqpic.png" alt="暂无逾期">
+ </div>
+ <p class="overdue-pic-text">您目前无风控订单,请继续保持~</p>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import {dateFormat} from 'vux';
+export default {
+ name: 'message',
+ components: {
+ XHeader
+ },
+ data() {
+ return {
+ orderTypeNum: 1, //控制订单类型切换
+ list: [],// 订单列表
+ isShow: false, //控制筛选弹出层
+ belongArr: [], // 所属代理、渠道、商户、门店
+ periodsArr: [],// 期数
+ riskLevelArr: [],// 风险级别
+ riskTypeArr: [],// 风险种类
+ loading: false, // 上拉加载状态
+ finished: false,// 上拉加载无更多数据
+ id: '', // 上拉加载时最后一条数据orderId
+ unHandleNum: '', // 未处理订单
+ handleNum: '',// 已处理订单
+ obj: '',
+ noOrder: false
+ }
+ },
+ computed: {
+ },
+ created() {
+ this.init()
+ this.getList()
+ this.loading = true
+ },
+ filters: {
+ dealStatus(val) {
+ return val == 0 ? '投诉中' : '已处理'
+ },
+ dealCreTime(val) {
+ return dateFormat(val)
+ },
+ dealNoticeTime(val) {
+ return dateFormat(val)
+ }
+ },
+ methods: {
+ // 筛选条件数据初始化
+ init() {
+ this.$api.riskInit().then(res => {
+ this.periodsArr = res.body.insTermVoList
+ this.belongArr = res.body.orgBaseInfVoList
+ this.riskLevelArr = res.body.riskTypeList
+ this.riskTypeArr = res.body.typeList
+ })
+ },
+ // 获取风控订单列表
+ getList(type, obj) {
+ let data = {
+ chanList: [],
+ endAmt: '',
+ startDay: "",
+ endDay: "",
+ insTerm: '',
+ merList: [],
+ mgrList: [],
+ orderId: this.id || '', // 如果有最后一条数据orderId,执行为上拉加载,如不存在该字段为空。
+ orderType: type || 1,
+ queryStr: "",
+ riskType: '',
+ startAmt: '',
+ storeList: [],
+ type: ""
+ }
+ // 筛选条件下data对象值变化
+ if (this.obj) {
+ data.chanList = this.obj.chanList
+ data.merList = this.obj.merList
+ data.mgrList = this.obj.mgrList
+ data.storeList = this.obj.storeList
+ data.startDay = this.obj.startDay
+ data.endDay = this.obj.endDay
+ data.insTerm = this.obj.insTerm
+ data.startAmt = this.obj.startAmt
+ data.endAmt = this.obj.endAmt
+ data.queryStr = this.obj.queryStr
+ data.riskType = this.obj.riskLevelArrCode
+ data.type = this.obj.riskTypeArrCode
+ }
+ this.$api.riskList(data).then(res => {
+ this.unHandleNum = res.body.unHandleNum
+ this.handleNum = res.body.handleNum
+ if (this.id) {
+ this.list = [...this.list, ...res.body.items]
+ this.loading = false
+ if (!res.body.items.length) {
+ this.finished = true
+ this.id = ''
+ }
+ } else {
+ this.list = res.body.items
+ if (!res.body.items.length) {
+ this.loading = false
+ this.noOrder = true
+ }
+ }
+ this.loading = false
+ })
+ },
+ // 返回上一级
+ onClickLeft() {
+ this.$router.go(-1)
+ },
+ // 切换风控订单类型
+ changeOrderType(num) {
+ this.finished = false
+ this.id = ''
+ if (num == 1) {
+ this.orderTypeNum = 1
+ this.getList(1)
+ } else {
+ this.orderTypeNum = 2
+ this.getList(2)
+ }
+
+ },
+ // 上拉加载获取最后一条数据id再查询
+ onLoad() {
+ this.id = this.list[this.list.length - 1].orderId
+ this.getList(this.orderTypeNum)
+ },
+ // 处理投诉订单
+ dealOrderStatus(id) {
+ this.$api.riskHandle({orderId: id}).then(res => {
+ this.getList(this.orderTypeNum)
+ this.$notify({type: 'success', message: '处理成功'})
+ this.finished = false
+ })
+ },
+ // 已读风险订单
+ haveRead(id) {
+ this.$api.riskHandle({orderId: id}).then(res => {
+ this.getList(this.orderTypeNum)
+ this.$notify({type: 'success', message: '处理成功'})
+ this.finished = false
+ })
+ },
+ // 筛选
+ search(v,isClear){
+ this.obj = v
+ this.getList(this.orderTypeNum)
+ this.isShow = false
+ },
+ // 导出订单列表
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return
+ }
+ this.$api.riskExport({orderType: this.orderTypeNum}).then((res) => {
+ this.$notify({type: 'success', message: '导出成功'})
+ }).catch((err) => {})
+ },
+ // 根据不同的typeId进入详情页
+ go(item) {
+ let path = ''
+ if (item.prodId == '30000003') {// 用户贴息
+ path = `product/hb-detail?id=${item.orderId}`
+ } else if (item.prodId == '30000009') { // 商品消费
+ path = `product/hb-detail?id=${item.orderId}`
+ } else if (item.prodId == '30000010') { // 商户贴息
+ path = `product/shtx-detail?id=${item.orderId}`
+ } else if (item.prodId == '30000012') { // 运营商消费花呗分期
+ path = `product/xyg-hb-detail?id=${item.orderId}`
+ } else if (item.prodId == '30000008') { // 商户收款
+ path = `product/dmf-detail?id=${item.orderId}`
+ }
+ this.$router.push(path)
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.overdue{
+ background: #F5F5F7;
+ width: 100vw;
+ height: 100vh;
+ font-family: PingFang SC;
+ .top {
+ width: 100vw;
+ height: 124px;
+ background: linear-gradient(180deg, #9072EB, #6F61D7);
+ /deep/ .van-nav-bar {
+ color: #fff;
+ background:rgba(255,0,0,0);
+ border: none;
+ }
+ /deep/ .van-nav-bar__title {
+ color: #fff;
+ }
+ /deep/ .van-hairline--bottom::after {
+ border-bottom-width: 0;
+ }
+ .tabBar {
+ width: 100vw;
+ height: 36px;
+ display: flex;
+ justify-content: space-around;
+ .tabBar_item {
+ height: 15px;
+ font-size: 15px;
+ font-weight: bold;
+ color: #FFFFFF;
+ .line {
+ width: 32px;
+ height: 2px;
+ display: block;
+ background: #FFFFFF;
+ border-radius: 1px;
+ margin: 0 auto;
+ margin-top: 10px;
+ }
+ }
+ }
+ }
+ .type {
+ width: 95%;
+ height: 72px;
+ background: #FFFFFF;
+ box-shadow: 0px 3px 8px 0px rgba(217, 208, 231, 0.3);
+ border-radius: 3px;
+ margin: 0 auto;
+ margin-top: -30px;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ .type_item {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #999;
+ .type_num {
+ font-size: 18px;
+ color: #333333;
+ font-weight: bold;
+ margin-bottom: 8px;
+ }
+ .complaint {
+ font-size: 14px;
+ color: #FF7A7A;
+ }
+ .deal {
+ font-size: 14px;
+ color: #71CD9F;
+ }
+ }
+ }
+ .list {
+ width: 100%;
+ margin-top: 20px;
+ .loadMore {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-content: center;
+ align-items: center;
+ }
+ .list_item {
+ width: 95%;
+ height: 121px;
+ margin-right: calc(100% - 100vw);
+ background: #FFFFFF;
+ box-shadow: 0px 0px 7px 0px rgba(217, 208, 231, 0.28);
+ border-radius: 3px;
+ margin-bottom: 10px;
+ padding: 16px 16px 12px 19px;
+ box-sizing: border-box;
+ display: flex;
+ flex-shrink: 0;
+ .list_item_left {
+ width: 75%;
+ height: 12px;
+ font-size: 12px;
+ font-weight: 500;
+ color: #999999;
+ display: flex;
+ flex-direction: column;
+ .leftTop {
+ font-size: 14px;
+ font-weight: 500;
+ color: #333333;
+ margin-top: 0px;
+ span {
+ margin-left: 13px;
+ }
+ }
+ p {
+ margin-top: 6px;
+ }
+ }
+ .list_item_right {
+ width: 25%;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ .list_item_right_top {
+ // width: 100%;
+ .typeText {
+ height: 16px;
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: bold;
+ color: #FF7A7A;
+ text-align: center;
+ }
+ }
+ .typeTextFx {
+ height: 16px;
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: bold;
+ color: #FF7A7A;
+ text-align: center;
+ }
+ .activetypeText {
+ color: #71CD9F;
+ }
+ .typebtn {
+ font-size: 12px;
+ font-family: PingFang SC;
+ color: #999999;
+ margin-top: 5px;
+ text-align: center;
+ }
+ .btn {
+ width: 77px;
+ height: 28px;
+ background: linear-gradient(90deg, #8F6AFF, #9459EC);
+ box-shadow: 0px 4px 7px 0px rgba(99, 19, 232, 0.25);
+ border-radius: 14px;
+ font-size: 14px;
+ font-weight: 500;
+ color: #FFFFFF;
+ text-align: center;
+ line-height: 28px;
+ }
+ }
+ }
+ }
+ .overdue-pic{
+ margin-top: 117px;
+ text-align: center;
+ &-img{
+ width: 100%;
+ img{
+ width: 164px;
+ height: 112px;
+ display: inline-block;
+ }
+ }
+ &-text{
+ font-size: 14px;
+ color: #333333;
+ margin-top: 24px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mdyh/product/productMent.vue b/src/views/mdyh/product/productMent.vue
new file mode 100644
index 0000000..ed5aa3d
--- /dev/null
+++ b/src/views/mdyh/product/productMent.vue
@@ -0,0 +1,761 @@
+<!--
+ * @Descripttion:
+ * @Author: WD丶
+ * @Date: 2019-08-19 09:20:27
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 20:30:28
+ -->
+<template>
+ <div class="business-center">
+ <!-- <x-header class="head-title" title="产品管理" :left-options="{backText:'',showBack:false}"></x-header> -->
+ <van-nav-bar title="产品管理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <!-- 顶部轮播 -->
+ <!-- <div class="content" v-if="installmentList.length">
+ <div class="content-title">
+ 办理分期
+ </div>
+ <div class="nav-code" v-if="hasDmf" @click="goDmf">
+ <i class="icon iconfont scene_Staging-scan" style="font-size:45px"></i>
+ <p>支付宝扫码收款</p>
+ </div>
+ <div class="installment-box ">
+ <div class="item " v-for="(i,index) in installmentList" :key="index" @click="go(i)">
+ <i v-if="i.prodId == 33000001" class="iconfont" :class="i.icon" :style="{color:i.active?'#B036F6':'#a3a3a3'}"></i>
+ <i v-else class="iconfont" :class="i.icon" :style="{color:i.active?'#bfa073':'#a3a3a3'}"></i>
+ <p v-text="i.typeName"></p>
+ </div>
+ <div class="item " @click="shsClick">
+ <i class="iconfont scene_Staging-shanhuishou" :style="{color:'#bfa073'}"></i>
+ <p>闪回收</p>
+ </div>
+ </div>
+ </div> -->
+ <div class="content">
+ <!-- <div class="content-title">
+ 办理分期
+ </div> -->
+ <div class="installment-box ">
+
+ <div class="item " v-for="(i,index) in installmentList" :key="index" @click="go(i)">
+ <!-- <i v-if="i.prodId == 33000001" class="iconfont" :class="i.icon" :style="{color:i.active?'#B036F6':'#a3a3a3'}"></i>
+ <i v-else class="iconfont" :class="i.icon" :style="{color:i.active?'#bfa073':'#a3a3a3'}"></i> -->
+ <i v-if="i.prodId == 33000001" class="iconfont" :class="i.icon" style="color:#B036F6"></i>
+ <i v-else class="iconfont" :class="i.icon" style="color:#bfa073"></i>
+ <p v-text="i.typeName"></p>
+ </div>
+ <div class="item " @click="shsClick">
+ <img class="item-logo" src="../../../assets/img/shs.png" alt="闪回收">
+ <p>闪回收</p>
+ </div>
+ <div class="nav-code" v-if="hasDmf" @click="goDmf">
+ <div class="nav-code-logo">
+ <img src="../../../assets/img/shsk.png" alt="商户收款">
+ </div>
+ <p>商户收款</p>
+ </div>
+ </div>
+
+ </div>
+ <f-confirm v-model="showModal" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff'
+ :showCancelBtn='false'>
+ <div>{{ tipText }}</div>
+ </f-confirm>
+
+
+ <div class="dialog">
+ <x-dialog v-model="showDialogStyle" @on-hide='clearTel'
+ :dialog-style="{'max-width': '100%', width: '100%', height: '50%', 'background-color': 'transparent'}">
+ <img class="logo" src="@/assets/imgs/img_details.png" alt="">
+ <div class="dialog-content" >
+ <p class="text" @click="copyLink">
+ 将发送花呗提额链接
+ <span class="blue">http://t.cn/AiTDRMMO</span>
+ 至以下手机号
+ </p>
+ <div class="input-box">
+ <i class="icon iconfont scene_Staging-shoujihao"></i>
+ <input v-model="mblNo" class="input" :class="[errorMsg ? 'error':'']" type="tel" maxlength="11"
+ placeholder="请输入接收短信的手机号码" @focus="errorMsg = '';" @blur="changeBlur">
+ </div>
+ <p class="errmsg">{{errorMsg}}</p>
+ <button class="btn" @click.stop="hbLinesSMS">发送短信</button>
+ </div>
+ <van-icon name="cross" size='36' color="#fff" class="close" @click.stop="showDialogStyle =false;"></van-icon>
+ </x-dialog>
+ </div>
+
+ </div>
+</template>
+<script>
+ import {
+ XHeader,
+ XDialog,
+ } from 'vux';
+ import FBlock from '@/components/old/FBlock';
+ import FConfirm from '@/components/old/FConfirm';
+ import {
+ _copyToClipboard
+ } from '@/utils/index';
+ import { mapState, mapGetters } from 'vuex';
+ import { async } from 'q';
+ import Vue from 'vue';
+ import { Toast } from 'vant';
+
+ Vue.use(Toast);
+// import { mapState } from 'vuex';
+ export default {
+ name: 'business-center',
+ components: {
+ XHeader,
+ FBlock,
+ FConfirm,
+ XDialog
+ },
+ data() {
+ return {
+ errorMsg: '',
+ mblNo: '',
+ showDialogStyle: false,
+ showModal: false,
+ tipText: '敬请期待...',
+ installmentList: [],
+ dmfprod_list: [],
+ shsUrl:'',
+ // swiperList: [],
+ // messageList: [],
+ messageId: '',
+ oveNum: '',
+ };
+ },
+ computed:{
+ ...mapState(['userinfo', 'msgCount']),
+ ...mapGetters(['orgType']),
+ hasDmf(){
+ return this.dmfprod_list.length && this.dmfprod_list[0].openStatus!=0;
+ }
+ },
+ created() {
+ // this.indexInit()
+ this.getShsUrl();
+ this.$api.prodList({
+ pageType: 2
+ }).then(res => {
+ let list = res.body.prodTypeRespVoList2 || [];
+ this.dmfprod_list = res.body.prodTypeRespVoList1 || [];
+ list.forEach(item => {
+ item.active = item.openStatus === 2;
+ });
+
+ this.installmentList.push(...list);
+ });
+ this.$api.overdueNum().then(res => {
+ // console.log(res.body)
+ this.oveNum = res.body;
+ // this.$nextTick(() => {
+ // })
+ console.log(this.oveNum)
+ })
+ },
+ methods: {
+ //初始化banner,notice
+ // indexInit() {
+ // this.$api.indexInit().then(res => {
+ // console.log(res.body)
+ // this.swiperList = res.body.bannerInfoVos
+ // this.messageList = res.body.noticeInfos.noticeInfos
+ // // if(res.body.bannerInfoVos == null){
+ // // this.showSwiper = false;
+ // // }
+ // // if(res.body.noticeInfos.noticeInfos == null){
+ // // this.showNotice = false;
+ // // }
+ // })
+ // },
+ //点击banner跳转到主要内容
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ toBdCourse(e, name) {
+ console.log(name)
+ // if(name == '合约分期') {
+ // Toast('商品分期教程功能暂未开通,敬请期待')
+ // } else {
+ let sum = '';
+ let fileName = '';
+ if(name == '商品分期') {
+ sum = 7
+ fileName = 'hbfq/'
+ }
+ if(name == '智享花') {
+ sum = 9;
+ fileName = 'zxh/'
+ }
+ if(name == '合约分期') {
+ sum = 3;
+ fileName = 'hyfq/'
+ }
+ console.log(sum)
+ this.$router.push(`/bdCourse?courseName=${name}&&sum=${sum}&&fileName=${fileName}`)
+ // }
+ },
+ jump(id) {
+ this.$router.push(`/bannerContent?bannerId=${id}`)
+ },
+ //跳转到逾期界面..
+ toOverdue() {
+ this.$router.push('/overdue')
+ },
+ shsClick(){
+ location.href = this.shsUrl;
+ },
+ toMessage(e,id) {
+ this.$router.push(`/message?messageId=${id}`)
+ },
+ getShsUrl(){
+ this.$api.getShsUrl().then((res) => {
+ this.shsUrl = res.body.url;
+ }).catch((err) => {
+
+ });
+ },
+ goDmf(){
+ let item = this.dmfprod_list[0];
+ this.$router.push(`/facepay/calcmoney?typeId=${item.typeId}&prodId=${item.prodId}`)
+ // this.$router.push(`/order/dmf?typeId=${item.typeId}&prodId=${item.prodId}`)
+ },
+ changeBlur() {
+ let u = navigator.userAgent,
+ app = navigator.appVersion;
+ let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
+ if (isIOS) {
+ setTimeout(() => {
+ const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
+ window.scrollTo(0, Math.max(scrollHeight - 1, 0))
+ }, 200)
+ }
+ },
+
+
+
+
+ clearTel() {
+ this.mblNo = '';
+ this.errorMsg = '';
+ },
+ // 复制链接
+ copyLink() {
+ let isCopy = _copyToClipboard('http://t.cn/AiTDRMMO')
+ this.$tool.toast('链接已复制');
+ },
+ // 花呗提额功能
+ hbLinesSMS() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.mblNo)) {
+ this.errorMsg = '*请输入手机号';
+ return;
+ }
+ if (!v.checkPhone(this.mblNo)) {
+ this.errorMsg = '*请输入正确的手机号';
+ return;
+ }
+ this.$api.hbLinesSMS({
+ mblNo: this.mblNo,
+ content: 'http://t.cn/AiTDRMMO'
+ }).then((res) => {
+ this.showDialogStyle = false;
+ setTimeout(() => {
+ this.$tool.toast('短信发送成功');
+ }, 500);
+ }).catch((err) => {
+
+ });
+ },
+ // flag 代表是产品 还是收款的标志(flag为true代表收款)
+ go(item, flag = false) {
+ if (item.active) {
+ let path = '';
+ item.typeId = Number(item.typeId);
+ switch (item.typeId) {
+ case 200001:
+ path = '/credit-installment';
+ break;
+ case 200002:
+ path = '/hb-credit-installment';
+
+ break;
+ case 200003:
+ path = '/mobile-installment';
+
+ break;
+ case 200004:
+ path = '/contract-installment';
+
+ break;
+ case 200005:
+ path = '/hryd/createcode';
+ break;
+ case 200009:
+ path = '/hbhy-installment';
+ break;
+ case 200010:
+ path = '/hb-merchant-installment';
+ break;
+ }
+ // 花呗提额弹窗显示
+ if (item.prodId == 33000001) {
+ this.showDialogStyle = true;
+ return
+ }
+ this.$router.push({
+ path,
+ query: {
+ typeId: item.typeId,
+ prodId: item.prodId,
+ }
+ });
+ } else {
+ if(item.typeId == 200005) {
+ if (item.statusType == 3) {
+ this.tipText = '商户未开通该产品';
+ } else if (item.statusType == 4 ) {
+ this.tipText = '门店未开通该产品';
+ } else if (item.statusType == 5) {
+ this.tipText = '营业员未开通该产品';
+ } else {
+ this.tipText = '敬请期待...';
+ }
+ } else{
+ this.tipText = flag ? '敬请期待...' : '商户未开通该产品';
+ }
+ this.showModal = true;
+ }
+ },
+ },
+
+ };
+</script>
+<style lang='less' scoped>
+ // @import '../../style/mixin';
+ .cus-service{
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ z-index: 1;
+ width: 24px;
+ height: 24px;
+ background: rgba(0,0,0,1);
+ opacity: 0.3;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 24px;
+ i{
+ color: #fff !important;
+ font-size: 16px;
+ }
+ }
+ .head-title{
+ z-index: 10;
+ }
+ // 顶部轮播
+ .swiper-banner {
+ width: 100%;
+ height: 150px;
+ margin: 0 auto;
+ overflow: hidden;
+ position: relative;
+ margin-top:-10px;
+ padding: 0;
+ .vipBg {
+ width: 100%;
+ height: 160px;
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+ // background-image: url("../../../assets/img/bg-qr-code.png");
+ }
+
+ .my-swiper-banner {
+ height: 150px;
+ width: 100%;
+ }
+ }
+ //播报 部分
+ .category {
+ height: 30px;
+ position: relative;
+ width: 94%;
+ padding: 0 3%;
+ background: #fff;
+ .bobao {
+ background: rgba(255, 255, 255, 1);
+ border-radius: 5px;
+ width: 100%;
+
+ }
+ .notice-log{
+ position: absolute;
+ top: 0;
+ left: 15px;
+ font-size: 20px;
+ line-height: 30px;
+ }
+ }
+ .my-swiper-notice{
+ width: 100%;
+ margin: 0 auto;
+ overflow: hidden;
+ // .flexLayout(flex-start, center, row);
+ // flex-wrap: nowrap;
+ }
+ .swipe-item-box{
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ width: 100% !important;
+ }
+ .notice-item-title{
+ height: 30px;
+ line-height: 30px;
+ font-size: 12px;
+ margin-left: 20px;
+ white-space: nowrap;
+ color: @c-text-999;
+ }
+ .notice-item {
+ line-height: 30px;
+ width: 230px;
+ word-wrap: normal;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 12px;
+ // padding-right: 20px;
+ color: @c-text-999;
+ }
+ .notice-item-f{
+ color: @c-text-999;
+ }
+ .business-center {
+ // padding-top: 54px;
+ .installment-box {
+ .flexLayout(flex-start, center, row);
+ flex-wrap: wrap;
+ background: #fff;
+ padding: 15px 0;
+ .item {
+ margin-bottom: 15px;
+ // width: 33.33%;
+ width: 25%;
+ text-align: center;
+ i {
+ font-size: 36px;
+ }
+
+ p {
+ font-size: 12px;
+ color: #3a3a3a;
+ }
+ .item-logo{
+ display: block-line;
+ vertical-align: middle;
+ width: 45px;
+ height: 45px;
+ margin-left: auto;
+ }
+ }
+ }
+ }
+ .nav-code {
+ // display: flex;
+ // flex-direction: column;
+ // justify-content: center;
+ // align-items: center;
+ // text-align: center;
+ // height: 120px;
+ // background-color: #fff;
+ // color: #bb8b52;
+ // margin-top: 15px;
+ .flexLayout(center, center, row);
+ width: 335px;
+ height: 50px;
+ margin: 12px;
+ margin-bottom: 0;
+ border: 1px solid rgba(217,217,217,1);
+ border-radius: 6px;
+ &-logo{
+ width: 36px;
+ height: 36px;
+ margin-right: 12px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ }
+ }
+ .merCollection{
+ width: 94%;
+ margin: 0 3%;
+ height: 50px;
+ border: 1px dashed #D9D9D9;
+ .flexLayout(center, center, row);
+ i{
+ font-size: 36px;
+ margin-right: 10px;
+ }
+ }
+
+ .dialog {
+ position: relative;
+
+ .dialog-content {
+ background-color: #fff;
+ width: 300px;
+ height: 270px;
+ margin: 0 auto;
+ padding: 40px 15px 0;
+ box-sizing: border-box;
+ border-radius: 5px;
+ }
+
+ .text {
+ width: 150px;
+ font-size: 14px;
+ margin: 0 auto;
+ color: #666666;
+
+ .blue {
+ color: #4074F8;
+ text-decoration: underline;
+ }
+ }
+
+ .input-box {
+ height: 44px;
+ .flexLayout(flex-start, center);
+ padding-left: 10px;
+ border: 1px solid rgba(230, 230, 230, 1);
+ width: 250px;
+ margin: 20px auto 0;
+ box-sizing: border-box;
+
+ .icon {
+ position: relative;
+ padding-right: 10px;
+
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 15px;
+ background-color: #3A3A3A;
+
+ }
+ }
+
+ .input {
+ margin-left: 10px;
+ padding: 10px 0;
+ flex: 1;
+ font-size: 12px;
+ border: none;
+ outline: none;
+
+ &.error {
+ color: #FE2A2A;
+ }
+ }
+ }
+
+ .errmsg {
+ text-align: left;
+ margin-left: 10px;
+ margin-bottom: 20px;
+ height: 15px;
+ color: #FE2A2A;
+ font-size: 10px;
+ }
+
+ .btn {
+
+ width: 250px;
+ height: 44px;
+ text-align: center;
+ outline: none;
+ border: none;
+ background-color: #3A3A3A;
+ color: #fff;
+ }
+
+ .logo {
+ width: 64px;
+ height: 64px;
+ transform: translateY(32px);
+ }
+
+ .close {
+ margin-top: 20px;
+ }
+
+ }
+ //逾期
+ .overdue-box{
+ width: 96%;
+ margin: 12px 2%;
+ background: #fff;
+ border-radius:6px;
+ .flexLayout(space-between, center);
+ height: 80px;
+ &-text{
+ padding: 0 10px;
+ font-size: 16px;
+ color: #333;
+ :nth-child(1){
+ span{
+ font-size: 20px;
+ }
+ margin-bottom: 5px;
+ }
+ :nth-child(2){
+ font-size: 12px;
+ color: #999999;
+ span{
+ margin-left: 15px;
+ padding: 3px 10px;
+ padding-right: 20px;
+ width: 40px;
+ height: 14px;
+ line-height: 23px;
+ border-radius: 20px;
+ background: #896EDB;
+ color: #fff;
+ position: relative;
+ i{
+ font-size: 20px;
+ position: absolute;
+ right: 2px;
+ top: 1px;
+ }
+ }
+ }
+ }
+ &-log{
+ width: 94px;
+ height: 65px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ .content{
+ // width: 100%;
+ width: 96%;
+ margin: 12px 2%;
+ border-radius: 6px;
+ }
+// .content-title{
+// width: 96%;
+// height: 45px;
+// background-color: #fff;
+// line-height: 45px;
+// margin-top: 20px;
+// padding-left: 4%;
+// margin-bottom: 5px;
+// }
+//办单教程
+.course{
+ width: 96%;
+ height: 140px;
+ margin: 12px 2%;
+ margin-bottom: 20px;
+ padding-bottom: 27px;
+ background: #fff;
+ box-sizing: border-box;
+ border-radius: 6px;
+ &-title{
+ // padding: 10px;
+ padding-top: 15px;
+ padding-left: 12px;
+ padding-bottom: 15px;
+ font-size: 16px;
+ font-weight:bold;
+ color:rgba(51,51,51,1)
+ }
+ &-content{
+ margin-top: 10px;
+ .flexLayout(space-between, center);
+ &-item{
+ width: 25%;
+ text-align: center;
+ i{
+ font-size: 36px;
+ }
+ p{
+ color: #666666;
+ margin-top: 5px;
+ font-size: 14px;
+ }
+ }
+ }
+}
+.courseDl{
+ width: 96%;
+ height: 165px;
+ margin: 12px 2% 0 2%;
+ // margin-bottom: 20px;
+ // padding-bottom: 27px;
+ background: #fff;
+ box-sizing: border-box;
+ border-radius: 6px;
+ &-title{
+ // padding: 10px;
+ padding-top: 15px;
+ padding-left: 12px;
+ padding-bottom: 15px;
+ font-size: 16px;
+ font-weight:bold;
+ color:rgba(51,51,51,1)
+ }
+ &-content{
+ // margin-top: 10px;
+ width: 100%;
+ .flexLayout(space-between, center);
+ flex-wrap: wrap;
+ &-item{
+ width: 50%;
+ height: 50px;
+ text-align: center;
+ .flexLayout(flex-start, center);
+ i{
+ margin-left: 40px;
+ font-size: 30px;
+ margin-right: 13px;
+ }
+ p{
+ width: 60px;
+ color: #666666;
+ text-align: left;
+ // margin-top: 5px;
+ font-size: 14px;
+ line-height: 50px;
+ }
+ }
+ }
+}
+.notice-continer{
+ width: 95%;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ padding-left: 5%;
+}
+</style>
diff --git a/src/views/mdyh/shtx/mer-date.vue b/src/views/mdyh/shtx/mer-date.vue
new file mode 100644
index 0000000..e00e4ec
--- /dev/null
+++ b/src/views/mdyh/shtx/mer-date.vue
@@ -0,0 +1,463 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-24 18:22:58
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-26 14:41:46
+ * @Description:
+ -->
+<template>
+ <div class="hb-merchant-installment">
+ <!-- <van-nav-bar title="商户贴息" left-arrow @click-left="onClickLeft" /> -->
+ <van-nav-bar title="商户资料" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <!-- <van-icon name="iconzuojiantou" slot="left" /> -->
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="form-content">
+ <van-field
+ class="ipt"
+ v-model="contractGoodsName"
+ label="商户名称"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ required
+ />
+ <van-field
+ class="ipt"
+ label="营业执照号"
+ placeholder="请输入"
+ input-align="right"
+ border="false"
+ :maxlength="20"
+ v-model="businesslicenseNo"
+ required
+ />
+ <van-field
+ class="ipt"
+ label="法人姓名"
+ placeholder="请输入"
+ input-align="right"
+ border="false"
+ :maxlength="10"
+ v-model="contractUserName"
+ />
+ <van-field
+ class="ipt"
+ label-width='100'
+ label="法人身份证号"
+ placeholder="请输入"
+ input-align="right"
+ border="false"
+ :maxlength="18"
+ v-model="contractUserNo"
+ />
+ <!-- <v-cell :value="areaText" label='所在地区' isLink disabled placeholder='请选择' @click.native="isShowArea = true;"></v-cell> -->
+ <van-field
+ class="fenqi"
+ readonly
+ clickable
+ label="商户地址"
+ :value="areaLists"
+ placeholder="请选择"
+ @click="ShowArea"
+ input-align="right"
+ border="true"
+ required
+ />
+ <van-field
+ class="ipt"
+ label="详细地址"
+ placeholder="请输入"
+ input-align="right"
+ border="false"
+ :maxlength="10"
+ v-model="dtlAddress"
+ />
+ <van-cell-group v-if="merZfbInfos.length > 0">
+ <van-field
+ v-for="(item,i) in merZfbInfos"
+ v-show="item.hbStatus == 2"
+ :key="i"
+ class="ipt"
+ label-width="150px"
+ :label='item.zfbVersionName+"-PID"'
+ placeholder="请输入"
+ input-align="right"
+ border="false"
+ :maxlength="20"
+ v-model="item.pid"
+ />
+ </van-cell-group>
+
+ </div>
+ <!-- <van-popup v-model="showPicker" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ title="选择地址"
+ show-toolbar
+ item-height="30"
+ :columns="columns"
+ @cancel="showPicker = false"
+ @confirm="onConfirm"
+ />
+ </van-popup> -->
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ <van-button
+ round
+ type="info"
+ class="btn"
+ block="true"
+ :color="$store.state.backColor"
+ @click="createdQRCode"
+ >保存</van-button>
+ <!--点击创建订单展示 弹窗 -->
+ <!-- <FConfirmSimple
+ v-model="showConfirm"
+ ref="FConfirmQRCode"
+ @on-hide="handleHide"
+ iconClass="scene_Staging-dingdan"
+ class="hb-order-confirm"
+ :showIcon="true"
+ >
+ <div class="trial-list">
+ <div>还款总额:{{trial.totalAmount}}元</div>
+ <div>每月还款额:{{trial.repayPerMonth}}元</div>
+ <div>费率:{{trial.feeRate}}%</div>
+ </div>
+ <f-button @on-click="createdQRCode">生成二维码</f-button>
+ </FConfirmSimple> -->
+ </div>
+</template>
+<script>
+import {mapState, mapMutations} from 'vuex';
+import QRCode from "qrcode";
+import FConfirmSimple from "@/components/old/FConfirmSimple.vue";
+import axios from "axios";
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Grid, GridItem } from "vant";
+import { Field } from "vant";
+import { DropdownMenu, DropdownItem } from "vant";
+import { Popup } from "vant";
+import { Picker } from "vant";
+import { Toast } from "vant";
+import { async } from "q";
+
+Vue.use(Toast);
+Vue.use(Picker);
+Vue.use(Popup);
+Vue.use(DropdownMenu).use(DropdownItem);
+Vue.use(Field);
+Vue.use(Grid).use(GridItem);
+Vue.use(NavBar);
+export default {
+ components: {
+ FConfirmSimple
+ },
+ data() {
+ return {
+ merId:'',
+ isShowArea: false,
+ capitalAmt: "0.00", //商家到账金额
+ monthMoney: "0.00", //客户月还款总额
+ merId: this.$route.query.merId || [], //商户id
+ contractGoodsBrand: "", //商品品牌
+ contractGoodsName: "", //商品名称
+ contractUserMblNo: "", //用户手机号
+ contractUserName: "", //用户名称
+ businesslicenseNo: '', //营业执照号
+ contractUserNo: '', //法人身份证
+ dtlAddress: '', //详细地址
+ contractUserPID: '', //商户PID
+ merZfbInfos:[],//商户PID列表
+ totalAmount: "0.00",
+ orderNo: "", //未知参数
+ term: null, //分期期数
+ userMblNo: "", //用户手机号
+ userName: "", //用户名称
+ trial: {}, // 利率相关信息
+ orderId: "", //订单id
+ typeId: "",
+ payQrCodeUrl: "", // 二维码
+ termList: [], //分期期数列表
+ showConfirm: false,
+ howMouch: "", //商品金额
+ value: "", //期数选择值
+ showPicker: false, //期数选择弹出层控制
+ columns: [], //分期期数列表
+
+
+ form: {
+ areaLists: '',
+ provCode: '',
+ cityCode: '',
+ areaCode: '',
+ },
+ arrDress:'',
+ };
+ },
+ computed: {
+ ...mapState(['areaList']),
+ },
+ created() {
+ this.merInit();
+ },
+ methods: {
+ ShowArea(){
+ this.isShowArea=true
+ console.log(this.form.areaLists)
+ },
+ handleHide() {
+ this.showConfirm = false;
+ },
+ setAreaValue(arr){
+ console.log(arr);
+ this.areaLists = arr[0].name +arr[1].name + arr[2].name + '';
+ // this.form.provCode= arr[0].code;
+ // this.form.cityCode= arr[1].code;
+ // this.form.areaCode= arr[2].code;
+ this.form.provCode= arr[0];
+ this.form.cityCode= arr[1];
+ this.form.areaCode= arr[2];
+ this.isShowArea = false;
+ // this.$refs.Area.reset()
+ this.$forceUpdate();
+ console.log(this.areaLists)
+ },
+ //返回上一级按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //关闭地区弹窗
+ closeAreaModal(){
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //弹出层显示
+ showPopup() {
+ this.show = true;
+ },
+ // 弹出层地址选择
+ onConfirm(arr) {
+ this.arrDress = arr
+ this.areaTexts = arr[0].name + '-' +arr[1].name +'-'+ arr[2].name;
+ // this.form.provCode= arr[0].code;
+ // this.form.cityCode= arr[1].code;
+ // this.form.areaCode= arr[2].code;
+ this.form.provCode= arr[0];
+ this.form.cityCode= arr[1];
+ this.form.areaCode= arr[2];
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //商户资料初始化
+ merInit() {
+ this.$api.merchantDetail({merId: this.merId}).then(
+ res => {
+ console.log(res.body);
+ this.contractGoodsName = res.body.merName;
+ this.businesslicenseNo = res.body.licenseNo;
+ this.contractUserName = res.body.legalName;
+ this.contractUserNo = res.body.legalIdNo;
+ this.dtlAddress = res.body.addr.dtlAddr;
+ this.contractUserPID = res.body.pid;
+ this.merId = res.body.merId;
+ this.arrDress = res.body.addr
+ let list = res.body.merZfbInfos.filter((item, index) => {
+ if(sessionStorage.isddxt == 1){
+ return item.zfbVersion == 6 || item.zfbVersion == 7
+ }else{
+ return item.zfbVersion != 6 && item.zfbVersion != 7
+ }
+ })
+ this.merZfbInfos = list
+ console.log(this.merZfbInfos)
+ let arr = [];
+ if(res.body.addr.area) {
+ arr.push(res.body.addr.province)
+ arr.push(res.body.addr.city)
+ arr.push(res.body.addr.area)
+ this.setAreaValue(arr);
+ }
+ },
+ err => err
+ );
+ },
+ //保存
+ createdQRCode() {
+ let v = this.$tool;
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.contractGoodsName)) {
+ v.toast("请输入商户名称");
+ return ;
+ }
+ if (!res.test(this.contractGoodsName)) {
+ v.toast("请输入文字/字母/数字且不包含特殊字符的商品名称");
+ return false;
+ }
+ // res = /^[0-9a-zA-Z]{1,20}$/;
+ if (v.checkValEmpty(this.businesslicenseNo)) {
+ v.toast("请输入营业执照号");
+ return;
+ }
+ // if (!res.test(this.businesslicenseNo)) {
+ // v.toast("请输入正确的营业执照号");
+ // return false;
+ // }
+ if (v.checkValEmpty(this.contractUserName)) {
+ v.toast("请输入法人姓名");
+ return;
+ }
+ res = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
+ if (v.checkValEmpty(this.contractUserNo)) {
+ v.toast("请输入身份证号");
+ return ;
+ }
+ if (!res.test(this.contractUserNo)) {
+ v.toast("请输入正确的身份证号");
+ return false;
+ }
+ if (v.checkValEmpty(this.areaLists)) {
+ v.toast("请选择商户地址");
+ return;
+ }
+ if (v.checkValEmpty(this.dtlAddress)) {
+ v.toast("请输入详细地址");
+ return;
+ }
+ if(this.contractUserPID) {
+ if (v.checkValEmpty(this.contractUserPID)) {
+ v.toast("请输入商户PID");
+ return;
+ }
+ }
+ let date = {}
+ if(this.contractUserPID) {
+ date.pid = this.contractUserPID;
+ }
+
+ this.arrDress.dtlAddr = this.dtlAddress
+ this.arrDress.area = this.form.areaCode
+ this.arrDress.city = this.form.cityCode
+ this.arrDress.province = this.form.provCode
+
+ date.dtlAddress = this.dtlAddress;
+ date.legalIdNo = this.contractUserNo;
+ date.addr = this.arrDress;
+ date.legalName = this.contractUserName;
+ date.merName = this.contractGoodsName;
+ date.licenseNo = this.businesslicenseNo;
+ date.merId = this.merId;
+ date.merZfbInfos = this.merZfbInfos;
+ console.log(date)
+ this.$api.merchantEdit(date).then(() => {
+ // console.log('保存商戶資料')
+ this.$router.push('/mine/setting')
+ })
+ this.showConfirm = false;
+ var queryObj = {
+ term: this.value.slice(0, -1), //分期期数
+ payQrCodeUrl: this.payQrCodeUrl, //二维码
+ totalAmount: this.totalAmount //还款总额,本金
+ };
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+// @import '../../../style/myVant.less';
+/deep/.van-field__control{
+ color: #999 !important;
+ font-size: 14px !important;
+}
+.van-button--info{
+ background: #896EDB;
+}
+.hb-merchant-installment{
+ background-color: #F3F4F5;
+ height: 100vh;
+}
+ .form-content{
+ width: 359px;
+ // height: 300px;
+ margin: 10px 8px;
+ // transform: translateY(-30px);
+ // position: absolute;
+ // top: 165px;
+ border-radius: 6px;
+ }
+ .ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid #e0e1e6;
+ color: #333;
+ font-size: 16px;
+ // .van-field__control--right{
+ // color: #999 !important;
+ // font-size: 14px !important;
+ // }
+ }
+ }
+ .btn {
+ width: 80vw;
+ height: 6vh;
+ line-height: 6vh;
+ margin: auto;
+ position: fixed;
+ bottom: 3vh;
+ right: 10vw;
+ }
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/mdyh/shtx/shtx.vue b/src/views/mdyh/shtx/shtx.vue
new file mode 100644
index 0000000..cc07b0d
--- /dev/null
+++ b/src/views/mdyh/shtx/shtx.vue
@@ -0,0 +1,750 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-24 18:22:58
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-08 13:49:02
+ * @Description:
+ -->
+<template>
+ <div class="hb-merchant-installment">
+ <!-- <van-nav-bar title="商户贴息" left-arrow @click-left="onClickLeft" /> -->
+ <van-nav-bar title="商户贴息" left-text="返回" left-arrow @click-left="onClickLeft">
+ <!-- <van-icon name="iconzuojiantou" slot="left" /> -->
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="money-box">
+ <div class="item-content">
+ <div v-if="hasHjToken()" class="item-box">
+ <p class="money">{{ trial.capitalAmt ? trial.capitalAmt : '0.00 '}}</p>
+ <p class="tit">商家到账金额</p>
+ </div>
+ <span class="line"></span>
+ <div class="item-box">
+ <p class="money">{{ trial.totalAmount ? trial.totalAmount : '0.00' }}</p>
+ <p class="tit">客户总还款金额</p>
+ </div>
+ <span class="line"></span>
+ <div class="item-box">
+ <p class="money">{{ trial.repayPerMonth ? trial.repayPerMonth : '0.00' }}</p>
+ <p class="tit">客户月还款金额</p>
+ </div>
+ </div>
+ </div>
+ <div class="form-content">
+ <van-field
+ class="ipt"
+ v-model="howMouch"
+ type="number"
+ label="商品金额"
+ placeholder="请输入商品金额"
+ input-align="right"
+ border="true"
+ @input="changeMoney"
+ :maxlength="5"
+ />
+ <van-field
+ class="fenqi"
+ readonly
+ clickable
+ label="分期期数"
+ :value="value"
+ placeholder="请选择"
+ @click="showPicker = true"
+ input-align="right"
+ border="true"
+ is-link="true"
+ />
+ <van-field
+ class="ipt"
+ label="商品名称"
+ placeholder="请输入商品名称"
+ input-align="right"
+ border="false"
+ :maxlength="20"
+ v-model="contractGoodsName"
+ />
+ <van-field
+ class="ipt"
+ label="商品品牌"
+ placeholder="请输入商品品牌"
+ input-align="right"
+ border="false"
+ :maxlength="10"
+ v-model="contractGoodsBrand"
+ />
+ <van-field
+ class="ipt"
+ label="用户姓名"
+ placeholder="请输入用户姓名"
+ input-align="right"
+ border="false"
+ :maxlength="10"
+ v-model="contractUserName"
+ />
+ <van-field
+ class="ipt"
+ type="tel"
+ label="用户手机号"
+ placeholder="请输入用户手机号"
+ input-align="right"
+ border="false"
+ :maxlength="11"
+ v-model="contractUserMblNo"
+ />
+ <van-field
+ disabled
+ class="ipt"
+ type="tel"
+ label="智享服务费率"
+ placeholder="请输入智享服务费率"
+ label-width="150px"
+ input-align="right"
+ border="false"
+ :maxlength="11"
+ v-model="platRatePr"
+ />
+ <van-field
+ disabled
+ class="ipt"
+ type="tel"
+ label-width="150px"
+ label="花呗分期手续费率"
+ placeholder="请输入花呗分期手续费率"
+ input-align="right"
+ border="false"
+ :maxlength="11"
+ v-model="zfbRatePr"
+ />
+ </div>
+ <div class="btn-box">
+ <van-button
+ round
+ type="info"
+ class="btn"
+ block="true"
+ color="#896EDB"
+ @click="goodInstallmentOrder"
+ :class="sysPlat == 2 ? 'active' : ''"
+ >生成二维码</van-button>
+ <van-button
+ round
+ type="info"
+ class="btn"
+ block="true"
+ color="#896EDB"
+ @click="WeChatSanCode"
+ v-if="sysPlat != 2"
+ >扫描付款码</van-button>
+ </div>
+
+ <van-popup v-model="showPicker" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ title="选择期数"
+ show-toolbar
+ item-height="30"
+ :columns="columns"
+ @cancel="showPicker = false"
+ @confirm="onConfirm"
+ />
+ </van-popup>
+ <Vdialog @cancel="cancel" :show="showDia"></Vdialog>
+ </div>
+</template>
+<script>
+import QRCode from "qrcode";
+import FConfirmSimple from "@/components/old/FConfirmSimple.vue";
+import axios from "axios";
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Grid, GridItem } from "vant";
+import { Field } from "vant";
+import { DropdownMenu, DropdownItem } from "vant";
+import { Popup } from "vant";
+import { Picker } from "vant";
+import { Toast } from "vant";
+import { async } from "q";
+import Vdialog from "@/components/common/v-dialog.vue";
+
+Vue.use(Toast);
+Vue.use(Picker);
+Vue.use(Popup);
+Vue.use(DropdownMenu).use(DropdownItem);
+Vue.use(Field);
+Vue.use(Grid).use(GridItem);
+Vue.use(NavBar);
+export default {
+ components: {
+ FConfirmSimple,Vdialog
+ },
+ data() {
+ return {
+ backUrl: "", //回调地址
+ zfbRate: "",
+ platRate: "",
+ showConfirm: false,
+ showDia:false,
+ contractGoodsBrand: "", //商品品牌
+ contractGoodsName: "", //商品名称
+ contractUserMblNo: "", //用户手机号
+ contractUserName: "", //用户名称
+ orderNo: "", //未知参数
+ term: null, //分期期数
+ userMblNo: "", //用户手机号
+ userName: "", //用户名称
+ trial: {
+ capitalAmt: "",
+ repayPerMonth: "",
+ totalAmount: ""
+ }, // 利率相关信息
+ orderId: "", //订单id
+ typeId: "",
+ payQrCodeUrl: "", // 二维码
+ termList: [], //分期期数列表
+ showConfirm: false,
+ howMouch: "", //商品金额
+ value: "", //期数选择值
+ showPicker: false, //期数选择弹出层控制
+ columns: [], //分期期数列表
+ sysPlat: null,
+ isGoBack:'',//用于重新扫码后判断值
+ };
+ },
+ computed: {
+ zfbRatePr() {
+ if (this.zfbRate || this.zfbRate==0) {
+ return this.zfbRate + "%";
+ } else {
+ return "";
+ }
+ },
+ platRatePr() {
+ if (this.platRate || this.platRate==0) {
+ return this.platRate + "%";
+ } else {
+ return "";
+ }
+ }
+ },
+ created() {
+ if(sessionStorage.hb_session_info&&this.$route.query.isCreateOrderPush){
+ this.isGoBack = 1
+ let hb_session_info = JSON.parse(sessionStorage.hb_session_info)
+ this.contractGoodsBrand=hb_session_info.goodsBrand //商品品牌
+ this.contractGoodsName=hb_session_info.goodsName //商品名称
+ this.value = hb_session_info.term
+ this.term = hb_session_info.term.slice(0, -1)
+ this.howMouch=hb_session_info.totalAmount //商品总价
+ this.contractUserMblNo=hb_session_info.userMblNo//用户电话号
+ this.contractUserName=hb_session_info.userName // 用户名称
+ this.sysPlat=hb_session_info.sysPlat
+ this.changeMoney()
+ }
+ let sysPlat = localStorage.sib_mer_sysPlat
+ if (sysPlat === 'undefined' || sysPlat === '1') {
+ sysPlat = 1
+ }
+ if (sysPlat === '2') {
+ sysPlat = 2
+ }
+ this.sysPlat = sysPlat
+ this.$api.shtxOrderInit().then(
+ res => {
+ var arr = res.body.terms;
+ arr.forEach((ele, i) => {
+ this.columns.push(`${ele.code}期`);
+ });
+ },
+ err => err
+ );
+ this.getWeChatConfig()
+ },
+ methods: {
+ cancel(val){
+ this.showDia = val
+ },
+ // 调用微信摄像头,扫一扫
+ WeChatSanCode() {
+ let _this = this;
+ this.totalAmount = this.howMouch;
+ let sysPlat = localStorage.sib_mer_sysPlat
+ if (sysPlat === 'undefined' || sysPlat === '1') {
+ sysPlat = 1
+ }
+ if (sysPlat === '2') {
+ sysPlat = 2
+ }
+ if (this.totalAmount != "") {
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: this.value.slice(0, -1)
+ })
+ .then(res => {
+ this.trial.capitalAmt = res.body.capitalAmt;
+ this.trial.monthMoney = res.body.repayPerMonth;
+ this.trial.totalAmount = res.body.totalAmount;
+ });
+ }
+ let v = this.$tool;
+ if (v.checkValEmpty(this.totalAmount)) {
+ v.toast("请输入商品金额");
+ return;
+ }
+ //临时调整价格
+ if (Number(this.totalAmount) <= 0) {
+ v.toast("商品金额不能为0");
+ return false;
+ }
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.contractGoodsName)) {
+ v.toast("请输入商品名称");
+ return;
+ }
+ if (!res.test(this.contractGoodsName)) {
+ v.toast("请输入文字/字母/数字且不包含特殊字符的商品名称");
+ return;
+ }
+ if (v.checkValEmpty(this.term)) {
+ v.toast("请输入分期期数");
+ return;
+ }
+ if (v.checkValEmpty(this.contractGoodsBrand)) {
+ v.toast("请输入商品品牌");
+ return;
+ }
+ if (v.checkValEmpty(this.contractUserName)) {
+ v.toast("请输入用户姓名");
+ return;
+ }
+ if (v.checkValEmpty(this.contractUserMblNo)) {
+ v.toast("请输入用户手机号");
+ return;
+ }
+ if (sysPlat == 1) {
+ this.checkIsReady().then(() => {
+ wx.scanQRCode({
+ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+ scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
+ success: function(res) { // 当needResult 为 1 时,扫码返回的结果
+ // 扫码成功后调用接口
+ let queryObj = {
+ goodsBrand: _this.contractGoodsBrand, //商品品牌
+ goodsName: _this.contractGoodsName, //商品名称
+ prodId: 30000010, //产品id
+ term: _this.value.slice(0, -1), //分期期数
+ totalAmount: _this.totalAmount, //商品总价
+ userMblNo: _this.contractUserMblNo, //用户电话号
+ userName: _this.contractUserName, // 用户名称
+ zfbVersion: Number(_this.$route.query.zfbVersion),
+ payType: 2,//正扫
+ authCode: res.resultStr,
+ sysPlat: sysPlat
+ };
+ _this.$api.shtxOrderCreate(queryObj).then(res=>{
+ _this.orderId = res.body.orderId;
+ _this.$router.push({
+ path:'/pay-result',
+ query:{
+ orderId: _this.orderId,
+ mode:'shtx'
+ }
+ })
+ })
+ }
+ });
+ });
+ }
+ if (sysPlat == 2) {
+ my.postMessage({'sendToMiniProgram': '0'})
+ my.onMessage = function(e) {
+ let queryObj = {
+ goodsBrand: _this.contractGoodsBrand, //商品品牌
+ goodsName: _this.contractGoodsName, //商品名称
+ prodId: 30000010, //产品id
+ term: _this.value.slice(0, -1), //分期期数
+ totalAmount: _this.totalAmount, //商品总价
+ userMblNo: _this.contractUserMblNo, //用户电话号
+ userName: _this.contractUserName, // 用户名称
+ zfbVersion: Number(_this.$route.query.zfbVersion),
+ payType: 2,//正扫
+ authCode: e,
+ sysPlat: sysPlat
+ };
+ _this.$api.shtxOrderCreate(queryObj).then(res=>{
+ _this.orderId = res.body.orderId;
+ _this.$router.push({
+ path:'/pay-result',
+ query:{
+ orderId: _this.orderId,
+ mode:'shtx'
+ }
+ })
+ })
+ }
+ }
+ },
+ // 异步准备微信环境
+ checkIsReady() {
+ return new Promise((resolve, reject) => {
+ wx.ready(() => resolve());
+ wx.error(err => reject(console.log(res + "wx.error")));
+ });
+ },
+ // 获取微信配置
+ getWeChatConfig() {
+ let url = location.href.split("#")[0];
+ this.$api
+ .getTokenInfo({
+ url: url
+ })
+ .then(res => {
+ // 获取微信配置
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
+ appId: res.body.appId, // 必填,公众号的唯一标识
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature, // 必填,签名
+ jsApiList: ["checkJsApi", "scanQRCode"], // 必填,需要使用的JS接口列表
+ openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
+ });
+ });
+ },
+ hasHjToken() {
+ if (localStorage.hjToken) {
+ return false;
+ } else {
+ return true;
+ }
+ },
+ handleHide() {
+ this.showConfirm = false;
+ },
+ //返回上一级按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //弹出层显示
+ showPopup() {
+ this.show = true;
+ },
+ // 弹出层期数选项控制
+ onConfirm(value) {
+ this.value = value;
+ //console.log(value.slice(0, -1));
+ this.showPicker = false;
+ this.term = value.slice(0, -1);
+ //得到月还款额
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: value.slice(0, -1)
+ })
+ .then(res => {
+ // console.log(1111);
+ this.trial.capitalAmt = res.body.capitalAmt;
+ this.trial.repayPerMonth = res.body.repayPerMonth;
+ this.trial.totalAmount = res.body.totalAmount;
+ this.platRate = res.body.platRate;
+ this.zfbRate = res.body.zfbRate;
+ });
+ },
+ changeMoney() {
+ if (
+ this.howMouch != this.totalAmount &&
+ this.term != null &&
+ this.howMouch != ""
+ ) {
+ //得到月还款额
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: this.value.slice(0, -1)
+ })
+ .then(res => {
+ this.trial.capitalAmt = res.body.capitalAmt;
+ this.trial.repayPerMonth = res.body.repayPerMonth;
+ this.trial.totalAmount = res.body.totalAmount;
+ this.platRate = res.body.platRate;
+ this.zfbRate = res.body.zfbRate;
+ });
+ } else if (this.howMouch == "") {
+ this.trial.capitalAmt = 0.0;
+ this.trial.repayPerMonth = 0.0;
+ this.trial.totalAmount = 0.0;
+ }
+ },
+ //订单生成
+ goodInstallmentOrder() {
+ this.totalAmount = this.howMouch;
+ if (this.totalAmount != "") {
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: this.value.slice(0, -1)
+ })
+ .then(res => {
+ console.log(res);
+ this.trial.capitalAmt = res.body.capitalAmt;
+ this.trial.monthMoney = res.body.repayPerMonth;
+ this.trial.totalAmount = res.body.totalAmount;
+ });
+ }
+ let v = this.$tool;
+ if (v.checkValEmpty(this.totalAmount)) {
+ v.toast("请输入商品金额");
+ return;
+ }
+ // if (!Number(this.totalAmount)) {
+ // v.toast("请输入正确的结算金额");
+ // return false;
+ // }
+ //临时调整价格
+ if (Number(this.totalAmount) <= 0) {
+ v.toast("商品金额不能为0");
+ return false;
+ }
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.contractGoodsName)) {
+ v.toast("请输入商品名称");
+ return;
+ }
+ if (!res.test(this.contractGoodsName)) {
+ v.toast("请输入文字/字母/数字且不包含特殊字符的商品名称");
+ return;
+ }
+ if (v.checkValEmpty(this.term)) {
+ v.toast("请输入分期期数");
+ return;
+ }
+ if (v.checkValEmpty(this.contractGoodsBrand)) {
+ v.toast("请输入商品品牌");
+ return;
+ }
+ if (v.checkValEmpty(this.contractUserName)) {
+ v.toast("请输入用户姓名");
+ return;
+ }
+ if (v.checkValEmpty(this.contractUserMblNo)) {
+ v.toast("请输入用户手机号");
+ return;
+ }
+
+ // 用来整体存储缓存数据
+ let hb_session_info = {
+ goodsBrand: this.contractGoodsBrand, //商品品牌
+ goodsName: this.contractGoodsName, //商品名称
+ prodId: 30000010, //产品id
+ term: this.value, //分期期数
+ totalAmount: this.totalAmount, //商品总价
+ userMblNo: this.contractUserMblNo, //用户电话号
+ userName: this.contractUserName, // 用户名称
+ zfbVersion: Number(this.$route.query.zfbVersion),
+ payType: 1,//正扫
+ sysPlat: this.sysPlat
+ }
+ sessionStorage.hb_session_info = JSON.stringify(hb_session_info)
+
+ let queryObj = {
+ goodsBrand: this.contractGoodsBrand, //商品品牌
+ goodsName: this.contractGoodsName, //商品名称
+ prodId: 30000010, //产品id
+ term: this.value.slice(0, -1), //分期期数
+ totalAmount: this.totalAmount, //商品总价
+ userMblNo: this.contractUserMblNo, //用户电话号
+ userName: this.contractUserName, // 用户名称
+ zfbVersion: Number(this.$route.query.zfbVersion),
+ payType: 1,//正扫
+ sysPlat: this.sysPlat
+ };
+ this.$api.shtxOrderCreate(queryObj).then(res => {
+ this.orderId = res.body.orderId;
+ this.payQrCodeUrl = res.body.payQrCodeUrl;
+ this.trial.totalAmount = res.body.totalAmount;
+ this.trial.repayPerMonth = res.body.repayPerMonth;
+ this.trial.feeRate = res.body.feeRate;
+ this.showConfirm = true;
+ this.backUrl = res.body.backUrl;
+ sessionStorage.hjBackUrl = res.body.backUrl;
+ this.createdQRCode();
+ },err=>{
+ if(err.errorCode===30006007){
+ this.showDia = true
+ }
+ });
+ },
+ //生成二维码
+ createdQRCode() {
+ this.showConfirm = false;
+
+ var queryObj = {
+ term: this.value.slice(0, -1), //分期期数
+ payQrCodeUrl: this.payQrCodeUrl, //二维码
+ totalAmount: this.totalAmount, //还款总额,本金
+ platRate: this.platRate,
+ zfbRate: this.zfbRate,
+ capitalAmt: this.capitalAmt,
+ backUrl: this.backUrl
+ };
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: "/shtx-getShtxQRCode",
+ query: {
+ orderId: this.orderId,
+ ...queryObj
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hb-merchant-installment {
+ & {
+ background-color: #f3f4f5;
+ width: 100%;
+ min-height: 100vh;
+ }
+ /deep/.van-field__control:disabled {
+ color: #666;
+ -webkit-text-fill-color: #666;
+ }
+ .money-box {
+ & {
+ width: 100%;
+ height: 150px;
+ background: linear-gradient(
+ -45deg,
+ rgba(104, 98, 133, 1),
+ rgba(76, 69, 113, 1)
+ );
+ display: flex;
+ justify-content: space-between;
+ text-align: center;
+ }
+ .item-content {
+ width: 359px;
+ height: 72px;
+ margin: 28px 8px 0 8px;
+ background: #716d8e;
+ border-radius: 72px;
+ .flexLayout(flex-start, center, row);
+ }
+ .line {
+ width: 1px;
+ height: 20px;
+ opacity: 0.1;
+ background: rgba(255, 255, 255, 1);
+ }
+ .item-box {
+ & {
+ display: flex;
+ flex-wrap: wrap;
+ align-content: center;
+ width: 33%;
+ color: #fff;
+ }
+ .tit {
+ font-size: 12px;
+ // font-weight: 700;
+ display: inline-block;
+ vertical-align: middle;
+ width: 100%;
+ }
+ .money {
+ margin: 0px 0 11px 0;
+ width: 100%;
+ font-size: 20px;
+ font-weight: bold;
+ }
+ }
+ }
+ .form-content {
+ width: 359px;
+ // height: 300px;
+ margin: 0 8px;
+ transform: translateY(-30px);
+ // position: absolute;
+ // top: 165px;
+ border-radius: 6px;
+ }
+ .ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid rgba(238, 238, 238, 1);
+ color: #333;
+ font-size: 16px;
+ height: 50px;
+ }
+ }
+ .btn-box {
+ margin-top: 90px;
+ margin-bottom: 20px;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ .btn {
+ width: 40vw;
+ height: 44px;
+ line-height: 44px;
+ background-color: #896edb;
+ border: none;
+ }
+ .active {
+ width: 80vw;
+ }
+ }
+
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/mine/account/account-add.vue b/src/views/mine/account/account-add.vue
new file mode 100644
index 0000000..f788336
--- /dev/null
+++ b/src/views/mine/account/account-add.vue
@@ -0,0 +1,199 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 18:12:00
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 09:39:52
+ * @Description:
+ -->
+<template>
+ <div class="account-add h-100-g">
+ <v-navbar title="新增账户" fixed>
+ <div slot="right" v-if="!isAdd" @click="update">保存</div>
+ </v-navbar>
+
+ <div class="cell-group">
+ <v-cell v-model="form.name" max='6' label="负责人姓名" placeholder="请输入姓名"></v-cell>
+ <v-cell v-model="form.mblNo" max='11' type='tel' label="负责人手机号" placeholder="请输入手机号" :readonly="!isAdd"></v-cell>
+ </div>
+ <p class="tip">*该手机号将作为登录用户名,密码将通过短信发至手机</p>
+
+ <div class="cell-group">
+ <v-cell v-model="form.email" max="50" label="联系邮箱" placeholder="请输入邮箱地址"></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell label="权限分配" :readonly="true"></v-cell>
+ <van-checkbox-group class="van-check-box" v-model="form.menuPower">
+ <div v-for="(item, index) in powerInfo" :key="index">
+ <v-cell :label="item.powerName" v-if="item.powerId !==100005">
+ <van-checkbox
+ slot="v-cell-right"
+ :key="item.powerId"
+ :name="item.powerId"
+ :checked-color="$store.state.backColor"
+ />
+ </v-cell>
+ </div>
+ <!-- <v-cell label='商户管理'>
+ <van-checkbox slot="v-cell-right" key="商户管理" name="商户管理" checked-color="#896EDB"/>
+ </v-cell>
+ <v-cell label='渠道管理'>
+ <van-checkbox slot="v-cell-right" key="渠道管理" name="渠道管理" checked-color="#896EDB"/>
+ </v-cell>-->
+ </van-checkbox-group>
+ </div>
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn" :color="$store.state.backColor" v-if="isAdd" @click="add">新增账户</van-button>
+ <van-button class="btn" :color="$store.state.backColor" v-else @click="freeze">{{isFreeze?'冻结':'启用'}}</van-button>
+ </footer>
+ </div>
+</template>
+
+<script>
+import { mapState } from "vuex";
+export default {
+ name: "account-add",
+ data() {
+ return {
+ form: {
+ name: "",
+ mblNo: "",
+ email: "",
+ name: "",
+ menuPower: [],
+ powerInfoVos: [] //权限列表
+ },
+ rule:[
+ {key:"name",message:"请输入账户名称",type:"isEmpty"},
+ {key:"name",message:"请输入正确的账户名称",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,6}$/},
+ {key:"mblNo",message:"请输入手机号",type:"isEmpty"},
+ {key:"mblNo",message:"请输入正确的手机号",type:"isTel"},
+ {key:"email",message:"请输入联系邮箱",type:"isEmpty"},
+ {key:"email",message:"请输入正确的联系邮箱",type:"isEmail"},
+ ],
+ isFreeze: false
+ };
+ },
+ computed: {
+ ...mapState(["userinfo"]),
+ // 判断是新增 还是 详情
+ isAdd() {
+ return this.$route.query.isAdd == "1";
+ },
+ //权限列表
+ powerInfo() {
+ return this.form.powerInfoVos || [];
+ },
+ id() {
+ return this.$route.query.id || "";
+ }
+ },
+ created() {
+ this.form.powerInfoVos = this.userinfo.powerInfoVos;
+ if (!this.isAdd) {
+ this.init();
+ }
+ },
+ methods: {
+ //获取用户详情
+ init() {
+ this.$api.getUserDetail(this.id).then(({ body }) => {
+ let {powerInfoVos} = body;
+ if (body.supStatus && body.status) {
+ this.isFreeze = true;
+ } else {
+ this.isFreeze = false;
+ }
+ let powerInfo = this.userinfo.powerInfoVos;
+ if (powerInfoVos.length) {
+ powerInfo.forEach(item => {
+ let index = powerInfoVos.findIndex(child => {
+ return item.powerId === child.powerId;
+ });
+ if(index!==-1){
+ this.form.menuPower.push(item.powerId)
+ }
+ });
+ }
+
+ this.form = {
+ ...this.form,
+ ...body
+ };
+ this.form.powerInfoVos = this.userinfo.powerInfoVos;;
+ })
+ .catch(err => {});
+ },
+ // 验证form参数
+ validatorForm(){
+ return this.$validator(this.form,this.rule).check(item=>{
+ this.$notify(item.message)
+ })
+ },
+ // 新增
+ add() {
+ if(!this.validatorForm()) return
+ this.$api.userAdd(this.form).then(res => {
+ this.$notify("添加成功");
+ setTimeout(() => this.$router.go(-1), 1000);
+ }).catch(err => {});
+ },
+ //更新
+ update() {
+ if(!this.validatorForm()) return
+ this.$api.userUpdate(this.form).then(res => {
+ this.$notify("保存成功");
+ })
+ .catch(err => {});
+ },
+ //冻结账号
+ freeze() {
+ this.$dialog.confirm({
+ message: `请问是否确认${this.isFreeze ? "冻结" : "启用"}该账户?`
+ }).then(() => {
+ this.$api.userFreezeMgr(this.id).then(() => {
+ let text = this.isFreeze ? "冻结成功" : "启用成功";
+ this.$notify(text);
+ this.isFreeze = !this.isFreeze;
+ });
+ })
+ .catch(() => {
+ // on cancel
+ });
+ }
+ }
+};
+</script>
+
+<style scoped lang="less">
+.account-add {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+
+ .tip {
+ margin: 10px 0 15px 21px;
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+}
+
+.cell-group {
+ margin: 10px 8px 0;
+}
+
+.btn {
+ width: 340px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+}
+
+.footer {
+ margin-top: 60px;
+ padding-bottom: 30px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mine/account/account.vue b/src/views/mine/account/account.vue
new file mode 100644
index 0000000..1fbad7a
--- /dev/null
+++ b/src/views/mine/account/account.vue
@@ -0,0 +1,143 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 18:12:00
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 09:41:11
+ * @Description: 账号管理列表页面
+ -->
+<template>
+ <div class="account ">
+ <v-navbar title="账号管理" fixed></v-navbar>
+ <van-search v-model="value" class="search" placeholder="请输入姓名/手机号" shape='round'/>
+
+ <div class="item-box">
+ <div class="account-item flex-start-g" v-for="(item, index) in calcList" :key="index" @click="go(item.id)">
+ <p class="icon-box flex-center-g" :style="{background:$store.state.backColor}">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:25px;fill:#fff" >
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ </p>
+
+ <div>
+ <p class="name">{{item.name}}</p>
+ <p class="c-text-666-g font-12-g">{{item.mblNo}}</p>
+ </div>
+ </div>
+ </div>
+
+ <van-button class="btn" @click="$router.push('/mine/account-add?isAdd=1')" :style="{background:$store.state.backColor}">
+ <div class="inner" >
+ <van-icon name="plus"/>
+ <span class="text">新增</span>
+ </div>
+ </van-button>
+ </div>
+</template>
+
+<script>
+import hList from '../../../components/common/h-list';
+ export default {
+ name: "account",
+ components:{
+ hList
+ },
+ data() {
+ return {
+ value:'',
+ list:[],
+ finished: false,
+ loading: false
+ }
+ },
+ computed:{
+ // 根据搜索关键字获取 对应的数据
+ calcList(){
+ let v = this.value;
+ let arr = this.list.filter(item=>{
+ return item.name.indexOf(v) > -1 || item.mblNo.indexOf(v) > -1;
+ })
+ if(arr){
+ return arr
+ }
+ return this.list;
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods: {
+ saleOrderLoad(){
+ console.log(6767)
+ this.finished = true
+ },
+ go(id){
+ this.$router.push(`/mine/account-add?id=${id}`)
+ },
+ init(){
+ this.$api.getMgrList().then((res) => {
+ console.log(res);
+ this.list = res.body ||[];
+ }).catch((err) => {
+
+ });
+ }
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .account {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+
+ .btn {
+ position: fixed;
+ width: 50px;
+ height: 50px;
+ padding: 0;
+ right: 8px;
+ bottom: 68px;
+ border-radius: 50%;
+ color: @c-text-f5;
+ z-index: @zIndex-50;
+ box-shadow: 0px 5px 9px 0px rgba(80, 47, 183, 0.2);
+ background: linear-gradient(0deg, rgba(106, 79, 188, 1), rgba(137, 110, 219, 1));
+
+ .inner {
+ display: flex;
+ flex-direction: column;
+ }
+
+ .text {
+ .lh(15px);
+ }
+ }
+
+ }
+ .search{
+ margin-top: 10px;
+ padding: 15px 8px;
+ }
+ .item-box{
+ background-color: @c-bg-fff;
+ padding-bottom: 25px;
+ }
+ .account-item{
+ height: 67px;
+ margin: 0 8px 10px;
+ padding-left: 12px;
+ box-shadow:0px 0px 5px 0px rgba(66,61,93,0.08);
+ border-radius:3px;
+ .icon-box{
+ width: 32px;
+ height: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background-color: @c-bg-black;
+ }
+ .name{
+ margin-bottom: 5px;
+ font-weight: bold;
+ }
+ }
+</style>
diff --git a/src/views/mine/channel/channel-add.vue b/src/views/mine/channel/channel-add.vue
new file mode 100644
index 0000000..e38f2f4
--- /dev/null
+++ b/src/views/mine/channel/channel-add.vue
@@ -0,0 +1,223 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 16:25:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 09:38:26
+ * @Description: 新增渠道页面
+ -->
+<template>
+ <div class="channel-detail-box h-100-g">
+ <v-navbar :title="isAdd ? '新增渠道':'渠道详情'" fixed>
+ <div slot='right' v-if="!isAdd" @click="updateChannel">
+ 保存
+ </div>
+ </v-navbar>
+ <div class="cell-group">
+ <v-cell :readonly="!isAdd" v-model.trim="form.chanName" max='20' label='渠道名称' icon='iconyonghu' placeholder='请输入渠道名称'></v-cell>
+ <v-cell :readonly="!isAdd" v-model.trim="form.licenseNo" max='20' label='营业执照号' icon='iconmobanguanliliebiao' placeholder='请输入营业执照号'></v-cell>
+ <v-cell :readonly="!isAdd" v-model.trim="form.priIdNo" max='18' label='身份证号' icon='iconyinhangka' placeholder='请输入身份证号'></v-cell>
+ <v-cell :value="form.areaText" label='所在地区' icon='icondingwei' isLink readonly placeholder='请选择' @click.native="isShowArea = true;"></v-cell>
+ <v-cell v-model.trim="form.dtlAddr" max='30' label='详细地址' icon='icontishi' placeholder='请输入详细地址'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell :readonly="!isAdd" v-model.trim="form.priName" max='6' label='负责人姓名' placeholder='请输入姓名'></v-cell>
+ <v-cell :readonly="!isAdd" v-model.trim="form.priMblNo" type='tel' max='11' label='负责人手机号' placeholder='请输入手机号'></v-cell>
+ </div>
+ <p class="tip" v-if="isAdd">*该手机号将作为登录用户名,密码将通过短信发至手机</p>
+
+ <div class="cell-group" v-if="isAdd">
+ <v-cell v-model.trim="form.priEmail" max='50' label='联系邮箱' placeholder='请输入邮箱地址'></v-cell>
+ </div>
+
+ <footer class="flex-center-g footer" v-if="isAdd">
+ <van-button class="btn-submit" :color="$store.state.backColor" @click="addChannel">新增渠道</van-button>
+ </footer>
+
+ <footer class="flex-center-g footer" v-else>
+ <van-button class="btn left" @click="openDialog">{{form.freezeStatus?'冻结':'启用'}}渠道</van-button>
+ <van-button class="btn right" :color="$store.state.backColor" @click="go">商户查询</van-button>
+ </footer>
+
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+
+ </div>
+</template>
+
+<script>
+ import {mapState, mapMutations} from 'vuex';
+ export default {
+ data() {
+ return {
+ isShowArea:false,
+ form:{
+ areaText:'',//地区文字展示
+ chanName:'',
+ licenseNo:'',
+ priIdNo:'',
+ dtlAddr:'',
+ priName:'',
+ priMblNo:'',
+ priEmail:'',
+ provCode: '',
+ cityCode: '',
+ areaCode: '',
+ },
+ rule:[
+ {key:"chanName",message:"请输入渠道名称",type:"isEmpty"},
+ {key:"chanName",message:"请输入正确的渠道名称",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,20}$/},
+ {key:"licenseNo",message:"请输入营业执照号",type:"isEmpty"},
+ {key:"licenseNo",message:"请输入正确的营业执照号",rule:/^[0-9a-zA-Z]{1,20}$/},
+ {key:"priIdNo",message:"请输入身份证号",type:"isEmpty"},
+ // {key:"priIdNo",message:"请输入正确的身份证号",type:"isIdCard"},
+ {key:"areaText",message:"请选择地址",type:"isEmpty"},
+ {key:"dtlAddr",message:"请输入详细地址",type:"isEmpty"},
+ {key:"dtlAddr",message:"请输入正确的详细地址",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,30}$/},
+ {key:"priName",message:"请输入负责人姓名",type:"isEmpty"},
+ {key:"priName",message:"请输入正确的负责人姓名",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,6}$/},
+ {key:"priMblNo",message:"请输入负责人手机号",type:"isEmpty"},
+ {key:"priMblNo",message:"请输入正确的手机号",type:"isTel"},
+ {key:"priEmail",message:"请输入联系邮箱",type:"isEmpty"},
+ {key:"priEmail",message:"请输入正确的联系邮箱",type:"isEmail"},
+ ]
+ }
+ },
+ computed:{
+ ...mapState(['areaList']),
+ // 判断是 添加 还是 详情
+ isAdd(){
+ return this.$route.query.isAdd =='1';
+ }
+ },
+ created(){
+ if(!this.isAdd){
+ this.getChannelInfo()
+ }
+ },
+ methods:{
+ go(){
+ this.$router.push({
+ path: '/mine/mer-manager',
+ query: {
+ chanId: this.form.chanId
+ }
+ });
+ },
+ //关闭地区弹窗
+ closeAreaModal(){
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ setAreaValue(arr){
+ this.form.areaText = arr[0].name + '-' +arr[1].name +'-'+ arr[2].name;
+ this.form.provCode= arr[0].code;
+ this.form.cityCode= arr[1].code;
+ this.form.areaCode= arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ // 冻结启用 渠道
+ openDialog(){
+ let {chanId,freezeStatus} = this.form;
+ this.$dialog.confirm({
+ message: `请问是否确认${freezeStatus ? '冻结' : '启用'}该渠道?`
+ }).then(() => {
+ let statusType = freezeStatus ? 0 : 1;
+ this.$api.channSwitchStatus({
+ orgId: chanId,
+ orgType: 2,
+ statusType
+ }).then((res) => {
+ let text = statusType ? '启用成功' : '冻结成功';
+ this.form.freezeStatus = statusType;
+ this.$notify_success(text)
+ }).catch((err) => {
+
+ });
+ }).catch(() => {
+ // on cancel
+ });
+ },
+ // 获取渠道详情
+ getChannelInfo(){
+ this.$api.getChannelInfo(this.$route.query.chanId).then(({body}) => {
+ this.form = {...body}
+ this.form.areaText = body.provName + '-' +body.cityName +'-'+ body.areaName;
+ }).catch((err) => {
+
+ });
+ },
+ //更新渠道信息
+ updateChannel(){
+ if(!this.validatorForm()) return
+ this.$api.updateChan(this.form).then((res) => {
+ this.$notify('保存成功')
+ }).catch((err) => {
+ });
+ },
+ // 验证form参数
+ validatorForm(){
+ return this.$validator(this.form,this.rule).check(item=>{
+ this.$notify(item.message)
+ })
+ },
+ // 新增渠道
+ addChannel() {
+ if(!this.validatorForm()) return
+ this.$api.addChan(this.form).then(() => {
+ this.$notify('新增成功')
+ setTimeout(() => this.$router.go(-1), 1000);
+ });
+ },
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .channel-detail-box {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ .tip {
+ margin: 10px 0 15px 21px;
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+ }
+
+ .cell-group {
+ margin: 10px 8px 0;
+ }
+
+ .btn-submit {
+ width: 340px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+
+ }
+
+ .footer {
+ margin-top: 20px;
+ padding-bottom: 30px;
+ .btn{
+ width: 170px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ &.left{
+ background-color: @c-bg-eee;
+ color: @c-text-666;
+ border-radius:22px 0px 0px 22px;
+ }
+ &.right{
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius:0px 22px 22px 0px;
+ }
+ }
+ }
+</style>
diff --git a/src/views/mine/channel/channel-detail.vue b/src/views/mine/channel/channel-detail.vue
new file mode 100644
index 0000000..a0e88b3
--- /dev/null
+++ b/src/views/mine/channel/channel-detail.vue
@@ -0,0 +1,74 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 16:25:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-22 15:58:16
+ * @Description: !!!
+ -->
+<template>
+ <div class="channel-detail-box h-100-g">
+ <v-navbar title="渠道信息" fixed rightText='保存'></v-navbar>
+ <div class="cell-group">
+ <v-cell v-model="aa" label='渠道名称' icon='iconyonghu'></v-cell>
+ <v-cell label='营业执照号' icon='iconmobanguanliliebiao'></v-cell>
+ <v-cell label='身份证号' icon='iconyinhangka'></v-cell>
+ <v-cell label='所在地区' icon='icondingwei' isLink></v-cell>
+ <v-cell label='详细地址' icon='icontishi'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell label='负责人姓名'></v-cell>
+ <v-cell label='负责人手机号'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell label='产品配置' isLink></v-cell>
+ </div>
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn left">冻结渠道</van-button>
+ <van-button class="btn right">商户查询</van-button>
+ </footer>
+ </div>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ aa: '阿里巴巴'
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .channel-detail-box {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ }
+
+ .cell-group {
+ margin: 10px 8px 0;
+ }
+
+ .footer{
+ margin-top: 60px;
+ padding-bottom: 30px;
+ .btn{
+ width: 170px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ &.left{
+ background-color: @c-bg-eee;
+ color: @c-text-666;
+ border-radius:22px 0px 0px 22px;
+ }
+ &.right{
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius:0px 22px 22px 0px;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/mine/channel/channel.vue b/src/views/mine/channel/channel.vue
new file mode 100644
index 0000000..745aa6a
--- /dev/null
+++ b/src/views/mine/channel/channel.vue
@@ -0,0 +1,153 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 15:40:14
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-19 18:28:39
+ * @Description:
+ -->
+<template>
+ <div class="channel-box ">
+ <v-navbar title="渠道管理" fixed></v-navbar>
+ <van-search class="search" placeholder="请输入商户名称/负责人电话" v-model="value" shape='round' />
+ <!-- <div class="list-box-div"> -->
+
+ <div class="item-box">
+ <router-link class="channel-item flex-start-g" v-for="(item, index) in calcChanList" :key="index" :to="{path:'/mine/channel-add',query:{chanId:item.chanId}}">
+ <p class="icon-box flex-center-g" :style="{background:$store.state.backColor}">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:25px;fill:#fff" @click="$router.back()">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ </p>
+ <div>
+ <p class="name">{{item.priName}}</p>
+ <p class="c-text-666-g font-12-g">{{item.priMblNo}}</p>
+ </div>
+ </router-link>
+ </div>
+ <!-- <van-button class="btn" @click="$router.push('/mine/channel-add')">
+ <div class="inner">
+ <van-icon name="plus" />
+ <span class="text">新增</span>
+ </div>
+ </!-->
+ <v-button-circle icon='iconjia' title='新增' @click="$router.push('/mine/channel-add?isAdd=1')"></v-button-circle>
+
+ <!-- </div> -->
+ </div>
+</template>
+
+<script>
+import hList from '../../../components/common/h-list';
+export default {
+ components:{
+ hList
+ },
+ data() {
+ return {
+ finished:false,
+ loading:false,
+ value:'',
+ chanList:[]
+ }
+ },
+ computed:{
+ // 根据搜索关键字获取 对应的数据
+ calcChanList(){
+ let v = this.value;
+ let arr = this.chanList.filter(item=>{
+ return item.priName.indexOf(v) > -1 || item.priMblNo.indexOf(v) > -1;
+ })
+ if(arr){
+ return arr
+ }
+ return this.chanList;
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods: {
+ saleOrderLoad(){
+ console.log(343434)
+ this.finished = true
+ },
+ init(){
+ this.$api.getChannel().then((res) => {
+ let {chanList} = res.body;
+ let arr = [];
+ for(let key in chanList){
+ arr.push(...chanList[key])
+ }
+ this.chanList = arr;
+ //this.chanList = [...arr,...arr,...arr,...arr,...arr,...arr,...arr,...arr,...arr];//调试用
+ }).catch((err) => {
+
+ });
+ },
+ go(){
+ this.$router.push('/mine/channel-detail')
+ }
+ },
+}
+</script>
+<style lang="less" scoped>
+.channel-box{
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ //padding-bottom: 50px;
+ // .list-box-div{
+ // overflow: scroll;
+ // height: 80vh;
+ // }
+ // .list-box-div::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ // display: none;
+ // }
+ .btn{
+ position: fixed;
+ width:50px;
+ height:50px;
+ padding: 0;
+ right: 8px;
+ bottom: 68px;
+ border-radius:50%;
+ color: @c-text-f5;
+ z-index: @zIndex-50;
+ box-shadow:0px 5px 9px 0px rgba(80,47,183,0.2);
+ background:linear-gradient(0deg,rgba(106,79,188,1),rgba(137,110,219,1));
+ .inner{
+ display: flex;
+ flex-direction: column;
+ }
+ .text{
+ .lh(15px);
+ }
+ }
+}
+.search{
+ margin-top: 10px;
+ padding: 15px 8px;
+}
+.item-box{
+ background-color: @c-bg-fff;
+ padding-bottom: 25px;
+}
+.channel-item{
+ height: 67px;
+ margin: 0 8px 10px;
+ padding-left: 12px;
+ box-shadow:0px 0px 5px 0px rgba(66,61,93,0.08);
+ border-radius:3px;
+ color: @c-text-333;
+ .icon-box{
+ width: 32px;
+ height: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background-color: @c-bg-black;
+ }
+ .name{
+ margin-bottom: 5px;
+ font-weight: bold;
+ }
+}
+</style>
diff --git a/src/views/mine/mer/mer-info.vue b/src/views/mine/mer/mer-info.vue
new file mode 100644
index 0000000..29d1a90
--- /dev/null
+++ b/src/views/mine/mer/mer-info.vue
@@ -0,0 +1,182 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:50:40
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-19 16:36:23
+ * @Description: 商户详情页面
+ -->
+<template>
+ <div class="mer-info-box h-100-g">
+ <v-navbar title="商户信息" fixed></v-navbar>
+
+ <div class="content">
+ <div class="cell-group">
+ <v-cell v-model="info.merId" :Show_input="false" label='商户ID' icon='iconyonghu' readonly placeholder='请输入渠道名称'></v-cell>
+ <v-cell v-model="info.merName" :Show_input="false" label='商户名称' icon='iconmobanguanliliebiao' readonly placeholder='请输入营业执照号' @click.native="copyText"></v-cell>
+ <v-cell v-model="info.licenseNo" :Show_input="false" label='营业执照号' icon='iconyinhangka' readonly placeholder='请输入身份证号'></v-cell>
+ <v-cell v-model="Addrs" :Show_input="false" label='所在地区' icon='icondingwei' readonly placeholder='请选择'></v-cell>
+ <v-cell v-model="info.addr.dtlAddr" :Show_input="false" label='详细地址' icon='icontishi' readonly placeholder='请输入详细地址'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell v-model="info.legalName" :Show_input="true" label='法人姓名' readonly placeholder='请输入姓名'></v-cell>
+ <v-cell v-model="info.legalIdNo" :Show_input="false" label='法人身份证号' readonly placeholder='请输入手机号'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell v-model="info.priName" :Show_input="false" label='负责人姓名' readonly placeholder='请输入姓名'></v-cell>
+ <v-cell v-model="info.priMblNo" :Show_input="false" label='负责人手机号' readonly placeholder='请输入手机号'></v-cell>
+ </div>
+
+ <div class="cell-group" v-if="info.merZfbInfos.length > 0">
+ <v-cell v-for="(item,i) in info.merZfbInfos" :key="i" v-model="item.hbStatusName" :Show_input="false" :label='item.zfbVersionName' readonly></v-cell>
+
+ </div>
+
+ <div class="cell-group">
+ <v-cell v-if="info.cardNo" :Show_input="false" v-model="info.cardNo" label='银行账户' readonly placeholder='请输入姓名'></v-cell>
+ <v-cell v-if="info.cardName" :Show_input="false" v-model="info.cardName" label='户名' readonly placeholder='请输入手机号'></v-cell>
+ <v-cell v-if="info.cardType" :Show_input="false" v-model="info.cardType" label='账户类型' readonly placeholder='请输入手机号'></v-cell>
+ <v-cell v-if="info.bankName" :Show_input="false" v-model="info.bankName" label='银行名称' readonly placeholder='请输入手机号'></v-cell>
+ <v-cell v-if="info.bankDtlName" :Show_input="false" v-model="info.bankDtlName" label='开户行地址' readonly placeholder='请输入手机号'></v-cell>
+ </div>
+
+ <div class="cell-group" v-if="info.hasPhotos">
+ <!-- $router.push({path:'/relatedpictures',query:{merId:info.merId}}) -->
+ <v-cell :Show_input="false" label='相关照片' @click.native="goNext" isLink readonly placeholder=''></v-cell>
+ </div>
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn left" @click="openDialog">{{info.freezeStatus?'冻结':'启用'}}商户</van-button>
+ <van-button class="btn right" :color="$store.state.backColor" @click="$router.push(`/main/home?id=${info.merId}`)">订单查询</van-button>
+ </footer>
+ </div>
+ </div>
+</template>
+<script>
+ import {_copyToClipboard} from '@/utils/index';
+ export default {
+ data() {
+ return {
+ Addrs:'',
+ info:{
+ addr:{
+ dtlAddr:'',
+ province:{name:''},
+ city:{name:''},
+ area:{name:''},
+ },
+
+ }
+ }
+ },
+ created(){
+ this.init();
+ },
+ methods:{
+ goNext(){
+ console.log(this.info.merZfbInfos)
+
+ sessionStorage.setItem('td-mer-photo', JSON.stringify(this.info.merZfbInfos))
+ this.$router.push({
+ path:'/mine/mer-photo-chose',
+ query:{
+ merId:this.info.merId
+ }
+ })
+ },
+ copyText(){
+ _copyToClipboard(this.info.merName)
+ this.$notify('复制成功!')
+ },
+ init(){
+ let obj = {
+ merId:this.$route.query.merId
+ };
+ this.$api.merDetail(obj).then(res => {
+ this.info = res.body;
+ let list = []
+ res.body.merZfbInfos.forEach((item, index) => {
+ if(sessionStorage.isddxt == 1){
+ if(item.zfbVersion == 6 || item.zfbVersion == 7) {
+ list.push(item)
+ }
+ }else{
+ if(item.zfbVersion != 6 && item.zfbVersion != 7){
+ list.push(item)
+ }
+ }
+ })
+ this.info.merZfbInfos = list
+ let province = this.info.addr.province ||'',
+ city = this.info.addr.city ||'',
+ merZfbInfos = this.info.merZfbInfos,
+ area = this.info.addr.area ||'';
+ this.Addrs = (province.name || '') + (city.name || '') + (area.name || '');
+ console.log(list)
+ });
+ },
+
+ // 冻结启用 商户
+ openDialog(){
+ let {merId,freezeStatus} = this.info;
+ this.$dialog.confirm({
+ message: `请问是否确认${freezeStatus ? '冻结' : '启用'}该商户?`
+ }).then(() => {
+ let statusType = freezeStatus ? 0 : 1;
+ this.$api.channSwitchStatus({
+ orgId: merId,
+ orgType: 3,
+ statusType
+ }).then((res) => {
+ let text = statusType ? '启用成功' : '冻结成功';
+ this.info.freezeStatus = statusType;
+ this.$notify_success(text)
+ }).catch((err) => {
+
+ });
+ }).catch(() => {
+ // on cancel
+ });
+ },
+
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .mer-info-box {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ margin-top: 30px;
+ padding-bottom: 30px;
+
+ .btn {
+ width: 170px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+
+ &.left {
+ background-color: @c-bg-eee;
+ color: @c-text-666;
+ border-radius: 22px 0px 0px 22px;
+ }
+
+ &.right {
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius: 0px 22px 22px 0px;
+ }
+ }
+ }
+</style>
diff --git a/src/views/mine/mer/mer-manager.vue b/src/views/mine/mer/mer-manager.vue
new file mode 100644
index 0000000..ecb29ca
--- /dev/null
+++ b/src/views/mine/mer/mer-manager.vue
@@ -0,0 +1,333 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 13:55:57
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-07 11:17:23
+ * @Description:
+ -->
+<template>
+ <div class="mer-manager-box">
+ <v-navbar title="商户管理" fixed >
+ <template v-slot:right >
+ <div class="flex-center-g" @click="isShowFilter = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <van-search class="search" placeholder="请输入商户名称/负责人电话" @blur="onBlur" v-model="value" shape='round' />
+ <!-- <div class="list-box-div"> -->
+ <hList :defScroll='10' :finished='finished' :loading="loading" @scroll="saleOrderLoad">
+ <div class="item-group">
+ <div class="mer-item flex-between-g" v-for="(item, index) in list" :key="index" @click="goMerDetail(item.merId)">
+ <div class="flex-start-g">
+ <div class="icon-box flex-center-g" :style="{background:$store.state.backColor}">
+ <svg class="icon" aria-hidden="true" style="width:22px;height:22px;fill:#fff;">
+ <use xlink:href="#iconshanghuguanliliebiao"></use>
+ </svg>
+ </div>
+ <div>
+ <p class="name" v-text="item.merName">商户名称</p>
+ <p class="tel" v-text="item.priMblNo">未配置产品</p>
+ <p class="tel" v-text="item.hbStatusName"></p>
+ </div>
+ </div>
+ <van-button :style="{background:$store.state.backColor}" class="btn" @click.stop="goTempDetail(item.merId)" v-if="orgType != 2">产品管理</van-button>
+ </div>
+ </div>
+ </hList>
+ <!-- </div> -->
+ <v-button-circle icon='icondaochu' @click="exportExcel" title='导出'></v-button-circle>
+
+ <van-popup v-model="isShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g" :style="{background:$store.state.backColor, opacity: 0.8}">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" :style="{color:$store.state.backColor}" @click="isShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+
+ <v-filter v-model="isShowFilter" :areaList="areaList" :hasTime="false" :hasMoney="false" hasCity :belongArr="belongArr" :templateArr="templateArr" @search="init"></v-filter>
+ </div>
+</template>
+
+<script>
+import { mapState,mapGetters } from 'vuex';
+import {calcAreaTwo} from '@/utils/index';
+import hList from '@/components/common/h-list.vue'
+ export default {
+ components:{
+ hList,
+ },
+ data() {
+ return {
+ isShow:false,
+ isShowFilter:false,
+ finished:false,
+ loading:false,
+ value:'',
+ list:[],
+ belongArr:[],
+ templateArr:[],
+
+ querys: {
+ orderField: null,
+ order: null,
+ searchKey: null,
+ },
+ areaList:{},
+ Area:[],
+ }
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ // 根据搜索关键字获取 对应的数据
+ calcList(){
+ let v = this.value;
+ let arr = this.list.filter(item=>{
+ return item.merName.indexOf(v) > -1 || item.priMblNo.indexOf(v) > -1;
+ })
+ if(arr){
+ return arr
+ }
+ return this.list;
+ },
+ chanId(){
+ return this.$route.query.chanId || '';
+ }
+ },
+ created(){
+ this.saleOrderLoad()
+ //this.init()
+ this.merInit()
+ this.getArea()
+ },
+ methods: {
+ onBlur(){
+ this.$api.merList({
+ searchKey:this.value
+ }).then(res=>{
+ this.list = res.body
+ })
+ },
+ saleOrderLoad(params={}){
+ if(this.chanId){
+ params.chanList = [this.chanId]
+ }
+ if(this.list.length >= 10){
+ params.merId = this.list[this.list.length-1].merId
+ }
+ this.$api.merList(params).then((res) => {
+ if(res.body.length < 10){
+ this.list = [...this.list,...res.body]
+ this.loading = false
+ this.finished = true
+ }else{
+ this.list = [...this.list,...res.body]
+ this.loading = false
+ this.finished = false
+ }
+ this.isShowFilter = false;
+ }).catch((err) => {
+
+ });
+ },
+ //跳转到商户详情
+ goMerDetail(merId){
+ this.$router.push({
+ path:'/mine/mer-info',
+ query:{
+ merId
+ }
+ })
+ },
+ //跳转到模板详情
+ goTempDetail(merId){
+ this.$router.push({
+ path:'/template/detail',
+ query:{
+ merId
+ }
+ })
+ },
+ parseArea(list,){
+ list.forEach(item=>{
+ let childList = item.childList;
+ this.Area.push({
+ name:item.name,
+ value:item.code
+ })
+ if(Array.isArray(childList)){
+ this.parseArea(childList)
+ }
+ })
+ },
+ getArea(){
+ this.$api.getOrgAreaInfo(2).then(res => {
+ let arr = [];
+ let list = res.body || [];
+ this.parseArea(list)
+ this.areaList = calcAreaTwo(this.Area)
+ console.log(this.areaList)
+ });
+ },
+ merInit(){
+ this.$api.merInitFilter().then(({body}) => {
+ let chanList = body.chanList || [];
+ let templateArr = body.tempList || [];
+ chanList = chanList.map(val => {
+ val.name = val.chanName;
+ val.code = val.chanId;
+ return val;
+ });
+ templateArr = templateArr.map(val => {
+ val.name = val.tempName;
+ val.code = val.id;
+ return val;
+ });
+ this.templateArr = templateArr;
+ if (this.orgType !== 2) {
+ this.belongArr = chanList;
+ }
+ });
+ },
+ init(params={}){
+ if(this.chanId){
+ params.chanList = [this.chanId]
+ }
+ this.$api.merList(params).then((res) => {
+ this.list = res.body || [];
+ this.isShowFilter = false;
+ if(res.body.length < 10){
+ this.finished = true
+ }
+ }).catch((err) => {
+
+ });
+ },
+ exportExcel(){
+ if (!this.list.length) {
+ this.$notify('暂无数据导出');
+ return;
+ }
+ let obj = {
+ ...this.querys
+ };
+ this.$api.merExport(obj).then(res => {
+ this.isShow = true;
+ });
+
+ },
+ }
+ }
+</script>
+<style lang="less" scoped>
+ // .list-box-div{
+ // overflow: scroll;
+ // height: 80vh;
+ // }
+ // .list-box-div::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ // display: none;
+ // }
+ .mer-manager-box {
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ }
+
+ .item-group {
+ background-color: @c-bg-fff;
+ padding-bottom: 25px;
+ }
+
+ .search {
+ padding: 15px 8px;
+ margin-top: 10px;
+ }
+
+ .mer-item {
+ margin: 0 8px 10px;
+ box-shadow: 0px 0px 5px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 3px;
+ background: @c-bg-fff;
+ padding: 0 12px;
+ height: 80px;
+
+ .icon-box {
+ height: 32px;
+ width: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background: @c-bg-black;
+ }
+
+ .name {
+ font-weight: bold;
+ max-width: 170px;
+ }
+
+ .tel {
+ font-size: @font-12;
+ color: @c-text-666;
+ margin-top: 5px;
+ }
+
+ .btn {
+ .lh(25px);
+ padding: 0 12px;
+ background: @c-bg-default;
+ border-radius: 13px;
+ color: @c-text-fff;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/mine/mer/mer-photo-chose.vue b/src/views/mine/mer/mer-photo-chose.vue
new file mode 100644
index 0000000..82940e6
--- /dev/null
+++ b/src/views/mine/mer/mer-photo-chose.vue
@@ -0,0 +1,166 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-04-09 16:11:01
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-09 16:45:30
+ * @Description:
+ -->
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-04-03 14:58:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-08 11:28:40
+ * @Description: 选择通道
+ -->
+<template>
+ <div class="tdxz-div">
+ <van-nav-bar title="选择通道" left-text="返回" left-arrow @click-left="onClickLeft" fixed style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="proudct-box">
+ <div v-for="(e,i) in list" :key="i" @click="goNext(e)">
+ <img :src="e.icon" alt="">
+ <p>{{e.zfbVersionName}}</p>
+ </div>
+ </div>
+ <van-popup v-model="noOpenShow" class="no-open">
+ <div class="no-open-img">
+ <img src="../../../assets/imgs/openpic.png" alt="">
+ </div>
+ <p>{{ noOpenText }}</p>
+ <van-button type="default" class="no-open-btn" @click="noOpenShow = false" round>确定</van-button>
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import { NavBar } from 'vant';
+
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ noOpenText: '门店暂未开通此通道', //产品未开通文本内容
+ noOpenShow: false, //产品未开通弹窗控制
+ list:[],//通道列表
+ }
+ },
+ created(){
+ // this.$api.prodZfbVersion().then(res=>{
+ // this.list = res.body
+ // })
+ this.list = JSON.parse(sessionStorage.getItem('td-mer-photo'))
+ console.log(this.list)
+ },
+ methods:{
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 跳转
+ goNext(item){
+
+ // var id = this.$route.query.typeId,
+ // path = '';
+ // if(item.openStatus == 2){
+ // switch (Number(id)) {
+ // case 200008:
+ // path = '/facepay/calcmoney';
+ // break
+ // case 200002:
+ // path = '/hb-credit-installment';
+ // break
+ // case 200009:
+ // path = '/hbhy-installment';
+ // break
+ // case 200010:
+ // path = '/shtx';
+ // break
+ // }
+ // }else{
+ // this.noOpenShow = true
+ // return
+ // }
+ if(item.hbStatus != 0){
+ this.$router.push({
+ path:'/relatedpictures',
+ query:{
+ // typeId: this.$route.query.typeId,
+ // prodId: this.$route.query.prodId,
+ merId:this.$route.query.merId,
+ zfbVersion:item.zfbVersion
+ }
+ })
+ }
+ else{
+ this.noOpenShow = true
+ return
+ }
+
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+ .tdxz-div{
+ min-height: 100vh;
+ background: #F5F5F7;
+ padding-top: 56px;
+ .proudct-box{
+ width: 359px;
+ margin: auto;
+ box-sizing: border-box;
+ padding:16px 0;
+ // display: flex;
+ // justify-items: space-between;
+ background: #fff;
+ div{
+ display: inline-block;
+ width: 115px;
+ height: 90px;
+ box-shadow:0px 0px 15px 0px rgba(66,61,93,0.08);
+ border-radius:8px;
+ margin: 16px 31px 16px 31px;
+ text-align: center;
+ box-sizing: border-box;
+ padding: 14px 0 18px 0;
+ img{
+ width: 42px;
+ height: 42px;
+ }
+ p{
+ font-size: 13px;
+ color: #333;
+ }
+ }
+ }
+ .no-open{
+ width: 280px;
+ height: 190px;
+ text-align: center;
+ border-radius: 6px;
+ &-img{
+ width: 100%;
+ margin-top: 13px;
+ img{
+ width: 75px;
+ height: 75px;
+ }
+ }
+ p{
+ font-size: 14px;
+ color: #666666;
+ margin-top: 7px;
+ }
+ &-btn{
+ height: 36px;
+ width: 60%;
+ margin: 0 20%;
+ background: #896EDB;
+ color: #fff;
+ margin-top: 28px;
+ line-height: 36px;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/mine/redEnvelopes/red-envelopes.vue b/src/views/mine/redEnvelopes/red-envelopes.vue
new file mode 100644
index 0000000..ee71e2e
--- /dev/null
+++ b/src/views/mine/redEnvelopes/red-envelopes.vue
@@ -0,0 +1,430 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-23 17:26:01
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-24 15:06:29
+ * @Description:
+ -->
+<template>
+ <div class="hb-box">
+ <!-- <van-nav-bar title="红包账户" left-arrow @click-left="onClickLeft" /> -->
+ <v-navbar title="红包账户"></v-navbar>
+ <div class="color-squre">
+ <img src="../../../../static/img/bg.png" style="width:100%;height:100%">
+ </div>
+ <div class="balance-box">
+ <div class="left">
+ <p class="tit">
+ <img src="../../../../static/img/hongbaoxiao.png" />红包余额(元)
+ <!-- <img src="../static/img/hongbaoxiao.png" />红包余额(元) -->
+ </p>
+ <p class="balance">{{this.balance}}</p>
+ </div>
+ <div class="right">
+ <van-button
+ round
+ type="info"
+ size="small"
+ color="#896EDB"
+ style="width:75px;
+ background:rgba(137,110,219,1);
+ box-shadow:0px 5px 7px 0px rgba(137,98,255,0.32);
+ border-radius:14px;
+ margin-top:44px;box-shadow:0px 10px 14px 0px rgba(137,98,255,0.32);border: .02rem solid rgb(137, 110, 219);"
+ @click="goNext"
+ >提现</van-button>
+ </div>
+ </div>
+ <div class="tab">
+ <div class="packet-records" @click="checkPacket" :class="col.clOne">
+ <p>红包记录</p>
+ </div>
+ <div class="withdrawals-record" @click="checkWithdrawals" :class="col.clTwo">
+ <p>提现记录</p>
+ </div>
+ <div class="packet-box" v-if="tabValue=='packet'">
+ <van-list
+ v-model="loading"
+ :finished="finished"
+ finished-text="没有更多了"
+ @load="onLoad"
+ >
+ <div class="content-box" v-for="(item,index) in packet" :key="index">
+ <p>{{item.redPacketTitle}}</p>
+ <p>
+ <span>{{item.redPacketDtl}}</span>
+ <span>{{item.amount}}</span>
+ </p>
+ <p>{{item.creTimeStr}}</p>
+ </div>
+ </van-list>
+ </div>
+ <div class="withdrawals-box" v-if="tabValue=='withdrawals'">
+ <van-list
+ v-model="loadingTwo"
+ :finished="finishedTwo"
+ finished-text="没有更多了"
+ @load="onLoadTwo"
+ >
+ <div class="content-box-two" v-for="(item,index) in withdrawals" :key="index">
+ <div class="left">
+ <p>{{item.expendDesc}}</p>
+ <p>{{item.creTimeStr}}</p>
+ </div>
+ <div class="right">
+ <p>{{item.amount}}</p>
+ </div>
+ </div>
+ </van-list>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+import myApi from "../../../api/index"
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ list: [],
+ loading: false,
+ loadingTwo:false,
+ finished: false,
+ finishedTwo:false,
+ balance: "", //红包余额
+ tabValue: "packet", //tab切换控制
+ packet: [
+ ], //红包记录数据
+ withdrawals: [
+ ], //提现记录数据
+ col: {
+ clOne: {
+ checked: true
+ },
+ clTwo: {
+ checked: false
+ }
+ }, //样式控制
+ phoneNumber: "", //账号绑定的支付宝账号
+ state: 2, //是否绑定支付宝
+ };
+ },
+ created(){
+ this.$api.redPacketInit().then((res)=>{
+ //console.log(res)
+ this.balance = res.body.balanceAmount
+ if(res.body.aliAccount!=null){
+ this.phoneNumber = res.body.aliAccount
+ this.state = 1
+ }
+ })
+ },
+ mounted(){
+ // this.$api.redPacketIncomeList().then((res)=>{
+ // //console.log(res)
+ // this.packet = res.body.items
+ // })
+
+ },
+ updated(){
+ window.onresize
+ },
+ methods: {
+ onLoadTwo(){
+ if(!this.finishedTwo){
+ // 异步更新数据
+ if(this.withdrawals.length<=0){
+ this.$api.redPacketExpendList().then((res)=>{
+ //console.log(res)
+ if(res.body.items.length>0){
+ this.withdrawals = [...res.body.items]
+ // 加载状态结束
+ this.loadingTwo = false;
+ }
+ if(res.body.items.length==0){
+ //console.log(1)
+ this.loadingTwo = false;
+ this.finishedTwo = true;
+ }
+ })
+ }else{
+ this.$api.redPacketExpendList({
+ incomeId: this.withdrawals[this.withdrawals.length-1].id,
+ }).then((res)=>{
+ //console.log(res)
+ if(res.body.items.length>0){
+ this.withdrawals = [...this.withdrawals,...res.body.items]
+ // 加载状态结束
+
+ this.loadingTwo = false;
+ }
+ if(res.body.items.length==0){
+ //console.log(1)
+ this.loadingTwo = false;
+ this.finishedTwo = true;
+ }
+ })
+ }
+
+ }
+
+
+ },
+ onLoad() {
+ console.log(1)
+ if(!this.finished){
+ // 异步更新数据
+ if(this.packet.length<=0){
+ this.$api.redPacketIncomeList({}).then((res)=>{
+ //console.log(res)
+ if(res.body.items.length>0){
+ this.packet = [...res.body.items]
+ // 加载状态结束
+ this.loading = false;
+ }
+ if(res.body.items.length==0){
+ //console.log(1)
+ this.loading = false;
+ this.finished = true;
+ }
+ })
+ }else{
+ this.$api.redPacketIncomeList({
+ incomeId: this.packet[this.packet.length-1].id,
+ }).then((res)=>{
+ //console.log(res)
+ if(res.body.items.length>0){
+ this.packet = [...this.packet,...res.body.items]
+ // 加载状态结束
+ this.loading = false;
+ }
+ if(res.body.items.length==0){
+ //console.log(1)
+ this.loading = false;
+ this.finished = true;
+ }
+ })
+ }
+
+ }
+
+
+ },//滑动加载
+ onClickLeft() {
+ this.$router.go(-1);
+ }, //返回
+ checkPacket() {
+ this.tabValue = "packet";
+ this.col.clOne.checked = true;
+ this.col.clTwo.checked = false;
+ }, //切换红包记录
+ checkWithdrawals() {
+ //console.log('checkWithdrawals')
+ this.$api.redPacketExpendList().then((res)=>{
+ //console.log(res)
+ this.withdrawals = res.body.items
+ })
+ this.tabValue = "withdrawals";
+ this.col.clOne.checked = false;
+ this.col.clTwo.checked = true;
+ }, //切换提现记录
+ goNext() {
+ this.$router.push({
+ name: "withdrawals",
+ params: {
+ phoneNumber: this.phoneNumber,
+ balance: this.balance,
+ state: this.state,
+ }
+ });
+ } //跳转提现
+ }
+};
+</script>
+<style lang="less" scoped>
+.hb-box {
+ & {
+ position: relative;
+ background-color: #f0f1f3;
+ height: 100vh;
+ }
+ .color-squre {
+ width: 100%;
+ height: 130px;
+ // background-image: url("../static/img/bg.png");
+ // background-size: cover;
+ }
+ .balance-box {
+ & {
+ width: 94%;
+ height: 115px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 8px 20px 0px rgba(66, 61, 93, 0.05);
+ border-radius: 10px;
+ position: absolute;
+ top: 1.8rem;
+ left: 3%;
+ display: flex;
+ }
+ .left {
+ & {
+ width: 50%;
+ }
+ .tit {
+ color: #333333;
+ font-size: 14px;
+ font-weight: Medium;
+ text-align: center;
+ margin-top: 9px;
+ img {
+ width: 27px;
+ height: 32px;
+ position: relative;
+ top: 15px;
+ }
+ }
+ .balance {
+ color: #333333;
+ font-size: 36px;
+ font-weight: Bold;
+ text-align: center;
+ margin-top: 10px;
+ margin-bottom: 14px;
+ }
+ }
+ .right {
+ & {
+ width: 50%;
+ margin-right: 10px;
+ text-align: center;
+ }
+ }
+ }
+ .tab {
+ & {
+ width: 94%;
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: 1.06rem;
+ margin-left: 3%;
+ }
+ .checked {
+ background-color: white !important;
+ color: #896edb !important;
+ }
+ .packet-box::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ display: none;
+ }
+ .packet-records {
+ width: 50%;
+ height: 44px;
+ font-weight: Bold;
+ font-size: 16px;
+ color: #666666;
+ background-color: #fafafa;
+ border-radius: 10px 10px 0px 0px;
+ p {
+ text-align: center;
+ line-height: 44px;
+ }
+ }
+ .withdrawals-record {
+ font-weight: Bold;
+ width: 50%;
+ height: 44px;
+ font-size: 16px;
+ color: #666666;
+ background-color: #fafafa;
+ border-radius: 10px 10px 0px 0px;
+ p {
+ text-align: center;
+ line-height: 44px;
+ }
+ }
+ .packet-box {
+ & {
+ width: 100%;
+ height: 325px;
+ overflow: scroll;
+ background-color: #ffffff;
+ box-sizing: border-box;
+ padding: 8px 24px 24px 24px;
+ }
+ .content-box {
+ border-bottom: 1px solid #eeeeee;
+ box-sizing: border-box;
+ padding: 16px 0 16px 0;
+ p:nth-of-type(1) {
+ font-size: 14px;
+ font-weight: bold;
+ margin-bottom: 5px;
+ }
+ p:nth-of-type(2) {
+ margin-bottom: 10px;
+ span:nth-of-type(1) {
+ display: inline-block;
+ font-size: 12px;
+ color: #666666;
+ width: 50%;
+ text-align: left;
+ }
+ span:nth-of-type(2) {
+ font-size: 18px;
+ color: #ff6666;
+ display: inline-block;
+ text-align: right;
+ width: 48%;
+ }
+ }
+ p:nth-of-type(3) {
+ margin-bottom: 10px;
+ font-size: 12px;
+ color: #666666;
+ }
+ }
+ }
+ .withdrawals-box {
+ & {
+ width: 100%;
+ height: 300px;
+ overflow: scroll;
+ background-color: #ffffff;
+ box-sizing: border-box;
+ padding: 8px 24px 24px 24px;
+ }
+ .content-box-two {
+ border-bottom: 1px solid #eeeeee;
+ box-sizing: border-box;
+ padding: 16px 0 16px 0;
+ display: flex;
+ .left,
+ .right {
+ width: 50%;
+ }
+ .left {
+ p:nth-of-type(1) {
+ margin-bottom: 10px;
+ color: #666666;
+ font-size: 12px;
+ }
+ p:nth-of-type(2) {
+ color: #666666;
+ font-size: 12px;
+ }
+ }
+ .right {
+ box-sizing: border-box;
+ padding-top: 10px;
+ p {
+ color: #666666;
+ font-size: 18px;
+ text-align: right;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mine/redEnvelopes/withdrawals.vue b/src/views/mine/redEnvelopes/withdrawals.vue
new file mode 100644
index 0000000..b83d3b2
--- /dev/null
+++ b/src/views/mine/redEnvelopes/withdrawals.vue
@@ -0,0 +1,404 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-24 15:13:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-11-08 15:43:18
+ * @Description:
+ -->
+<template>
+ <div class="withdrawals-box">
+ <v-navbar title="提现"></v-navbar>
+ <div class="zfb-box">
+ <div class="left">
+ <p>提现到</p>
+ </div>
+ <div class="middle">
+ <i class="iconfont iconzhifubao"></i>
+ </div>
+ <div class="right">
+ <p v-if="sta == 1" style="color:#333333;font-size:14px;margin-bottom:5px;">支付宝账号</p>
+ <p
+ v-if="sta == 1"
+ style="color:#999999;font-size:14px;"
+ >{{this.userNumber}}</p>
+ <p
+ v-if="sta == 2"
+ style="color:#999999;font-size:14px;margin-top:10px"
+ @click="showPopup"
+ >请绑定支付宝账号</p>
+ </div>
+ </div>
+ <van-popup
+ v-model="show"
+ @close="aferClose"
+ class="clearfix"
+ style="width:280px;height:280px;"
+ >
+ <div class="payCode" style="width: 280px;height: 170px;position: relative;">
+ <van-icon name="cross" size="20px" style="position: absolute;right:10px;top:10px;color:#cccccc" @click="close" color="#CCCCCC"/>
+ <img src="../../../../static/img/back.png" style="width:280px;height:170px">
+ <img class="myimg" :src="qrCode" style="width: 110px;height: 110px; position: absolute;
+ top: 45px;
+ left: 85px;
+ z-index: 1000;"/>
+ </div>
+ <div class="prod" style="width: 280px;height: 110px;text-align: center;background-color: white;z-index: 1000;">
+ <p>0.01元</p>
+ <p>请使用支付宝扫描并进行支付</p>
+ <p>红包金额将提现至该支付宝账户</p>
+ </div>
+ </van-popup>
+ <van-popup
+ v-model="showTwo"
+ @close="aferClose"
+ style="width:200px;height:200px;"
+ >
+ <van-icon name="cross" size="20px" style="position: absolute;right:10px;top:10px;color:#cccccc" @click="closeTwo" color="#CCCCCC"/>
+ <p style="text-align:center;margin-top:55px;"><van-icon name="checked" size="56px" color="#896edb"/></p>
+ <p style="font-size:18px;font-weight:550;margin-top:10px;text-align:center">提现成功</p>
+ </van-popup>
+ <div class="money-box">
+ <div class="tit">
+ <p>提现金额</p>
+ </div>
+ <div class="input-box">
+ <span>¥</span>
+ <van-field
+ v-model="value"
+ placeholder="请输入提现金额"
+ style="width:70%;display:inline-block;margin-left:30px;font-size:16px;"
+ :border="false"
+ maxlength="10"
+ />
+ <span @click="allWithd">全部提现</span>
+ </div>
+ <div class="yue">
+ <p>
+ <span>账户余额</span>
+ <span>¥{{this.balanceAmount}}</span>
+ <span>(余额不足10元无法提现)</span>
+ </p>
+ </div>
+ </div>
+ <van-button
+ v-if="balanceAmount>10"
+ round
+ type="info"
+ color="#896EDB"
+ style="width:86%;margin-top:60px;margin-left:7%;background:#896EDB;color:#fff;border: .02rem solid rgb(137, 110, 219);"
+ @click="getWidthrawals"
+ >立即提现</van-button>
+ <van-button
+ v-else
+ disabled
+ round
+ type="info"
+ color="#896EDB"
+ style="width:86%;margin-top:60px;margin-left:7%;background:#896EDB;color:#fff;border: .02rem solid rgb(137, 110, 219);"
+ @click="getWidthrawals"
+ >立即提现</van-button>
+ <p class="notes">注:提现单笔限额为1000元,每日最多可提现3次。</p>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import QRCode from "qrcode";
+//import { setInterval } from 'timer';
+import { Notify } from 'vant';
+import { Icon } from 'vant';
+
+Vue.use(Icon);
+Vue.use(Notify);
+export default {
+ data() {
+ return {
+ qrCode: "",
+ params: {}, //路由接收的参数
+ show: false, //弹出层控制
+ showTwo:false,
+ payQrCodeUrl: "",
+ value: "",
+ aliAccount:'',
+ timerTwo:'',//轮训定时器
+ balanceAmount:'',
+ sta:0,
+ userNumber:'',
+ };
+ },
+ created() {
+ this.$api.redPacketInit().then((res)=>{
+ console.log(res)
+ this.balanceAmount = res.body.balanceAmount
+ this.userNumber = res.body.aliAccount
+ if(res.body.aliAccount){
+ this.sta = 1
+ }else{
+ this.sta = 2
+ }
+ })
+ // this.$api.redPacketBindAliInfo().then(res => {
+ // console.log(1);
+ // this.payQrCodeUrl = res.body.payQrCodeUrl;
+ // let url = res.body.payQrCodeUrl;
+ // console.log(url);
+ // QRCode.toDataURL(
+ // url,
+ // {
+ // margin: 1,
+ // width: 100
+ // },
+ // (err, url) => {
+ // //if (err) console.error(err);
+ // this.qrCode = url;
+ // console.log(this.qrCode);
+
+ // }
+ // );
+ // });
+ },
+ mounted() {
+ //console.log(this.$route.params)
+ this.params = this.$route.params;
+ },
+ updated(){
+ window.onresize
+ },
+ beforeDestroy() {
+ clearInterval(this.timerTwo);
+ this.timerTwo = null;
+ },
+ methods: {
+ close(){
+ clearInterval(this.timerTwo)
+ this.timerTwo = ''
+ this.show = false;
+ },//绑定支付宝弹出层关闭按钮
+ closeTwo(){
+ this.showTwo = false
+ },//提现成功关闭按钮
+ aferClose(){
+ clearInterval(this.timerTwo)
+ this.timerTwo = ''
+ this.show = false;
+ },//支付宝绑定弹出层关闭后执行的事件
+ getWidthrawals() {
+ if (this.value <= 10) {
+ Notify({ type: "primary", message: "提现金额需大于10元" });
+ } else if(this.value >= 1000){
+ Notify({ type: "primary", message: "提现金额需小于1000元" });
+ }else {
+ this.$api
+ .redPacketExpend({
+ amount: this.value
+ })
+ .then(res => {
+ console.log(res);
+ if(res.errMsg=='操作成功'){
+ this.showTwo = true
+ this.$api.redPacketInit().then((res)=>{
+ this.balanceAmount = res.body.balanceAmount
+ })
+ }
+ });
+ }
+ }, //提现
+ allWithd() {
+ this.value = this.balanceAmount;
+ }, //全部提现
+ onClickLeft() {
+ this.$router.go(-1);
+ }, //返回按钮
+ showPopup() {
+ this.$api.redPacketBindAliInfo().then(res => {
+ console.log(1);
+ this.payQrCodeUrl = res.body.payQrCodeUrl;
+ let url = res.body.payQrCodeUrl;
+ console.log(url);
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 100
+ },
+ (err, url) => {
+ //if (err) console.error(err);
+ this.qrCode = url;
+ console.log(this.qrCode);
+
+ }
+ );
+ });
+ this.show = true;
+ this.timerFun();
+ }, //弹出层控制
+ timerFun(){
+ var _this = this
+ this.timerTwo = setInterval(()=>{
+ _this.$api.redPacketInit().then((res)=>{
+ if(res.body.aliAccount){
+ clearInterval(_this.timerTwo);
+ _this.timerTwo = ''
+ _this.show = false
+ Notify({ type: "primary", message: "绑定成功" });
+ _this.userNumber = res.body.aliAccount
+ _this.sta = 1
+ return
+ }else{
+ console.log('未清除')
+ //clearInterval(this.timerTwo);
+ //this.show = false
+ //Notify({ type: "primary", message: "绑定失败,请稍后再试" });
+ //window.location.reload()
+ }
+ },
+ err=>{
+ err,clearInterval(_this.timerTwo);
+ })
+ },10000)
+ },
+ }
+};
+</script>
+<style lang="less" scoped>
+.withdrawals-box {
+ & {
+
+ background-color: #f0f1f3;
+ height: 100vh;
+ }
+ .clearfix{
+ *zoom: 1;
+}
+.clearfix:after {
+ clear: both;
+ display: block;
+ visibility: hidden;
+ height: 0;
+ content: ".";
+}
+ .zfb-box {
+ height: 60px;
+ width: 94%;
+ background-color: white;
+ border-radius: 3px;
+ margin-left: 3%;
+ margin-top: 20px;
+ display: flex;
+ .left {
+ width: 30%;
+ box-sizing: border-box;
+ padding: 21px 0 23px 13px;
+
+ p {
+ color: #333333;
+ font-size: 18px;
+ font-weight: Bold;
+ text-align: left;
+ }
+ }
+ .middle {
+ width: 10%;
+ box-sizing: border-box;
+ padding: 12px 0 12px 0;
+ i {
+ font-size: 36px;
+ color: #00a9f2;
+ }
+ }
+ .right {
+ width: 60%;
+ box-sizing: border-box;
+ padding: 15px 0 0 10px;
+ }
+ }
+ .money-box {
+ width: 94%;
+ background-color: white;
+ margin-left: 3%;
+ height: 145px;
+ margin-top: 20px;
+ border-radius: 3px;
+ .tit {
+ height: 50px;
+ box-sizing: border-box;
+ padding: 18px 0 17px 13px;
+ p {
+ color: #333333;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ }
+ .input-box {
+ border-bottom: 1px solid #eeeeee;
+ box-sizing: border-box;
+ padding-left: 13px;
+ padding-right: 12px;
+ vertical-align: middle;
+ position: relative;
+ span:nth-of-type(1) {
+ font-size: 18px;
+ display: inline-block;
+ position: absolute;
+ bottom: 15px;
+ z-index: 1000;
+ }
+ span:nth-of-type(2) {
+ font-size: 14px;
+ color: #896edb;
+ text-decoration: underline;
+ position: absolute;
+ bottom: 15px;
+ z-index: 1000;
+ }
+ }
+ .yue {
+ box-sizing: border-box;
+ padding-left: 13px;
+ padding-top: 16px;
+ p {
+ span:nth-of-type(1),
+ span:nth-of-type(3) {
+ font-size: 12px;
+ color: #999999;
+ }
+ span:nth-of-type(2) {
+ font-size: 12px;
+ }
+ }
+ }
+ }
+ .notes {
+ font-size: 12px;
+ color: #999999;
+ text-align: center;
+ margin-top: 12px;
+ }
+ .payCode {
+
+
+
+ .myimg {
+ position: absolute;
+ top: 45px;
+ left: 85px;
+ z-index: 1000;
+ }
+ }
+ .prod {
+
+
+ p:nth-of-type(1) {
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ margin-top: 25px;
+ }
+ p:nth-of-type(2),
+ p:nth-of-type(3) {
+ font-size: 12px;
+ color: #999999;
+ margin-bottom: 5px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mine/setting/merchants-approval.vue b/src/views/mine/setting/merchants-approval.vue
new file mode 100644
index 0000000..fba77aa
--- /dev/null
+++ b/src/views/mine/setting/merchants-approval.vue
@@ -0,0 +1,61 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 15:25:24
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 10:02:27
+ * @Description: 设置 —— 商户审批
+ -->
+<template>
+ <div class="merchants-approval h-100-g">
+ <v-navbar title="商户审批" fixed></v-navbar>
+
+ <van-radio-group class="cell-group" @change="Changed" v-model="radio">
+ <v-cell :label="item.name" v-for="(item, index) in list" :key="index">
+ <van-radio slot="v-cell-right" :name="item.code" :checked-color="$store.state.backColor"></van-radio>
+ </v-cell>
+ </van-radio-group>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "merchants-approval",
+ data() {
+ return {
+ radio: "",
+ list: []
+ };
+ },
+ created() {
+ this.$api.getAuditType().then(({ body }) => {
+ this.radio = body.currAuditType + "";
+ this.list = body.auditTypeList || [];
+ }).catch(err => {});
+ },
+ methods: {
+ Changed(v) {
+ this.$api.setAuditType({auditType: v}).then(({ body }) => {
+ this.radio = body.currAuditType + "";
+ this.list = body.auditTypeList || [];
+ }).catch(err => {});
+ }
+ }
+};
+</script>
+
+<style scoped lang="less">
+.merchants-approval {
+ padding-top: 44px;
+ background-color: @c-f5;
+
+ .cell-group {
+ margin: 10px auto 0 auto;
+ width: 360px;
+ }
+
+ .svg-icon {
+ width: 1.25em;
+ height: 1.25em;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mine/setting/setting.vue b/src/views/mine/setting/setting.vue
new file mode 100644
index 0000000..f37e3bc
--- /dev/null
+++ b/src/views/mine/setting/setting.vue
@@ -0,0 +1,109 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 13:57:53
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-19 16:42:13
+ * @Description:
+ -->
+
+<template>
+ <div class="setting-box h-100-g">
+ <v-navbar title="设置中心" fixed></v-navbar>
+
+ <div class="cell-group" v-if="orgType===1 || orgType===2">
+ <v-cell label='商户审批' :readonly="true" isLink :placeholder="placeText"
+ @click.native="$router.push('/mine/setting/merchants-approval')">
+ </v-cell>
+ </div>
+
+ <div class="cell-group" v-if="orgType == 3">
+ <v-cell label='商户资料' :readonly="true" isLink @click.native="$router.push(`/setting/mer-date?merId=${orgId}`)"></v-cell>
+ </div>
+ <div class="cell-group">
+ <v-cell label='修改密码' v-if="hasTokenLoc && isLoginByOpenId" :readonly="true" isLink @click.native="$router.push('/user/reset-pwd')"></v-cell>
+ <v-cell label='退出登录' v-if="hasTokenLoc" :readonly="true" isLink :Show_input="false" @click.native="dialogShow = !dialogShow">
+ </v-cell>
+ </div>
+
+
+
+ <van-dialog class="setting-box-dialog" v-model="dialogShow" :confirmButtonColor="$store.state.backColor" show-cancel-button message="确定退出当前账号?"
+ @confirm="LoginOut">
+ </van-dialog>
+ </div>
+</template>
+
+<script>
+ import {
+ SET_SESSION_ID,
+ SET_USER_INFO
+ } from '@/store/mutations-types';
+ import {
+ mapMutations, mapGetters
+ } from 'vuex';
+ export default {
+ name: "setting",
+ data() {
+ return {
+ placeText: '',
+ dialogShow: false,
+ }
+ },
+ computed:{
+ ...mapGetters(['orgType', 'orgId']),
+ hasTokenLoc(){
+ if(localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ },
+ isLoginByOpenId(){
+ if(sessionStorage.isLoginByOpenId == 1){
+ return false
+ }else{
+ return true
+ }
+ }
+ },
+ created(){
+ console.log(this.orgId)
+ console.log(this.orgType)
+ this.$api.getAuditType().then((res) => {
+ this.placeText = res.body.currAuditTypeName;
+ }).catch((err) => {
+
+ });
+ },
+ methods: {
+ ...mapMutations([SET_USER_INFO, SET_SESSION_ID]),
+ LoginOut() {
+ localStorage.removeItem('user_account')
+ localStorage.removeItem('user_pwd')
+ localStorage.removeItem('sib_wx_openId')
+ this.SET_USER_INFO({});
+ this.SET_SESSION_ID('');
+ if(sessionStorage.isddxt==1){
+ this.$router.push('/?platNo=ddxt');
+ }else if(sessionStorage.wxScore==1){
+ this.$router.push('/?wxScore=1');
+ }else{
+ this.$router.push('/');
+ }
+
+ },
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .setting-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .cell-group {
+ margin: 10px auto 0 auto;
+ width: 360px;
+ }
+ }
+</style>
diff --git a/src/views/mine/stores/stores-add.vue b/src/views/mine/stores/stores-add.vue
new file mode 100644
index 0000000..701c517
--- /dev/null
+++ b/src/views/mine/stores/stores-add.vue
@@ -0,0 +1,200 @@
+
+<!--
+ 新增门店
+-->
+
+<template>
+ <div class="stores-add-box h-100-g">
+
+ <v-navbar title="新增门店" fixed></v-navbar>
+ <div class="cell-group">
+ <v-cell v-model="form.storeName" :max="20" label='门店名称' icon='iconyonghu' placeholder='请输入门店名称'></v-cell>
+ <v-cell label='所在地区' icon='icondingwei' @click.native="isShowArea = true;" placeholder='请选择'>
+ <div slot="v-cell-right" class="flex-center-g">
+ <div v-if="form.areaText">{{form.areaText}}</div>
+ <div v-else style="color: #a2a2a2">请选择 </div>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;fill:#999;">
+ <use xlink:href="#iconyou"></use>
+ </svg>
+ </div>
+ </v-cell>
+ <v-cell v-model="form.dtlAddr" :max="30" label='详细地址' icon='icontishi' placeholder='请输入详细地址'></v-cell>
+ </div>
+
+ <div class="cell-group">
+ <v-cell v-model="form.priName" :max="6" label='负责人姓名' placeholder='请输入姓名'></v-cell>
+ <v-cell v-model="form.priMblNo" :max="11" type="tel" label='负责人手机号' placeholder='请输入手机号'></v-cell>
+ <v-cell v-model="form.priIdNo" :max="18" label='负责人身份证号' placeholder='请输入身份证号'></v-cell>
+ <v-cell v-model="form.outChanNo" :max="20" label='渠道编码' placeholder='请输入渠道编码'></v-cell>
+ </div>
+ <p class="tip">*该手机号将作为登录用户名,密码将通过短信发至手机</p>
+
+ <div class="cell-group">
+ <v-cell v-model="form.priEmail" :max="50" label='联系邮箱' placeholder='请输入邮箱地址'></v-cell>
+ </div>
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn" @click="addStore">新增门店</van-button>
+ </footer>
+
+
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+
+ </div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+ export default {
+ name: "stores-add",
+ data(){
+ return {
+ isShowArea:false,
+ Btn:false,
+
+ form:{
+ areaText:'', //地区文字展示
+ storeName:'', //门店名称
+ dtlAddr:'', //详细地址
+ priName:'', //负责人姓名
+ priEmail:'', //联系邮箱
+ priMblNo:'', //负责人手机
+ priIdNo: '', //身份证号
+ provCode: '',
+ cityCode: '',
+ areaCode: '',
+ outChanNo: '',
+ },
+
+ rule:[
+ {key:"storeName",message:"请输入门店名称",type:"isEmpty"},
+ {key:"areaText",message:"请选择地址",type:"isEmpty"},
+ {key:"dtlAddr",message:"请输入详细地址",type:"isEmpty"},
+ {key:"priName",message:"请输入负责人姓名",type:"isEmpty"},
+ {key:"priName",message:"请输入正确的负责人姓名",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,6}$/},
+ {key:"priMblNo",message:"请输入负责人手机号",type:"isEmpty"},
+ {key:"priMblNo",message:"请输入正确的手机号",type:"isTel"},
+ {key:"priIdNo",message:"请输入负责人身份证号",type:"isEmpty"},
+ {key:"priIdNo",message:"请输入正确的身份证号",type:"checkIDCard"},
+ {key:"priEmail",message:"请输入联系邮箱",type:"isEmpty"},
+ {key:"priEmail",message:"请输入正确的联系邮箱",type:"isEmail"},
+ ]
+
+ }
+ },
+ computed:{
+ ...mapState(['areaList'])
+ },
+ created() {
+ },
+ methods:{
+ // 验证form参数
+ validatorForm(){
+ let v = this.$tool;
+ if(v.checkValEmpty(this.form.outChanNo)){
+ v.toast('请输入渠道编码');
+ return false;
+ }
+ return this.$validator(this.form,this.rule).check(item=>{
+ this.$notify(item.message)
+ })
+ },
+
+ //关闭地区弹窗
+ closeAreaModal(){
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+ //保存 地区选择
+ setAreaValue(arr){
+ this.form.areaText = arr[0].name + '-' +arr[1].name +'-'+ arr[2].name;
+ this.form.provCode= arr[0].code;
+ this.form.cityCode= arr[1].code;
+ this.form.areaCode= arr[2].code;
+ this.form.provName= arr[0].name;
+ this.form.cityName= arr[1].name;
+ this.form.areaName= arr[2].name;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+
+ // 新增门店
+ addStore(){
+ if(!this.validatorForm()) return
+ if(this.Btn)return
+ let list = {
+ storeName: this.form.storeName,
+ addr:{
+ province:{
+ code:this.form.provCode,
+ name:this.form.provName
+ },
+ city:{
+ code:this.form.cityCode,
+ name:this.form.cityName
+ },
+ area:{
+ code:this.form.areaCode,
+ name:this.form.areaName
+ },
+ dtlAddr:this.form.dtlAddr
+ },
+ priName: this.form.priName,
+ priMblNo: this.form.priMblNo,
+ priEmail: this.form.priEmail,
+ priIdNo: this.form.priIdNo,
+ outChanNo: this.form.outChanNo,
+ };
+
+ this.$api.storeAdd(list).then(() => {
+ this.$notify('新增成功');
+ this.Btn = true;
+ setTimeout(() => this.$router.go(-1), 1000);
+ });
+ }
+
+
+
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.stores-add-box{
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+ .tip {
+ margin: 10px 0 15px 21px;
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+}
+
+
+.cell-group {
+ margin: 10px 8px 0;
+}
+
+.btn {
+ width: 340px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+
+}
+
+.footer {
+ margin-top: 60px;
+ padding-bottom: 30px;
+}
+
+
+</style>
diff --git a/src/views/mine/stores/stores-detail.vue b/src/views/mine/stores/stores-detail.vue
new file mode 100644
index 0000000..79e80a3
--- /dev/null
+++ b/src/views/mine/stores/stores-detail.vue
@@ -0,0 +1,236 @@
+<template>
+<div class="stores-detail h-100-g">
+
+ <v-navbar title="门店详情" fixed rightText='保存' @right-click="Save"></v-navbar>
+
+ <div class="cell-group">
+ <v-cell v-model="form.storeName" :max="20" label='门店名称' :readonly="true" icon='iconyonghu' placeholder='门店名称'></v-cell>
+ <v-cell label='所在地区' icon='icondingwei' placeholder='所在地区' @click.native="isShowArea = true;">
+ <div slot="v-cell-right" class="flex-center-g">
+ <div>{{form.areaText}}</div>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;fill:#999;">
+ <use xlink:href="#iconyou"></use>
+ </svg>
+ </div>
+ </v-cell>
+ <v-cell v-model="form.dtlAddr" :max="30" label='详细地址' icon='icontishi' placeholder='详细地址'></v-cell>
+ </div>
+
+
+ <div class="cell-group">
+ <v-cell v-model="form.priName" :max="6" label='负责人姓名' :readonly="true" placeholder='负责人姓名'></v-cell>
+ <v-cell v-model="form.priMblNo" :max="11" type="tel" label='负责人手机号' :readonly="true" placeholder='负责人手机号'></v-cell>
+ <v-cell v-model="form.priEmail" :max="50" label='联系邮箱' :readonly="true" placeholder='联系邮箱'></v-cell>
+ <v-cell v-model="form.priIdNo" :max="18" label='负责人身份证号' :readonly="true" placeholder='负责人身份证号'></v-cell>
+ <v-cell v-model="form.outChanNo" :max="18" label='渠道编码' :readonly="true" placeholder='渠道编码'></v-cell>
+ </div>
+
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn left" @click="freeze">{{ menText }}</van-button>
+ <van-button class="btn right" @click="$router.push('/main/home')">订单查询</van-button>
+ </footer>
+
+
+ <van-dialog
+ class="setting-box-dialog"
+ v-model="dialogShow"
+ show-cancel-button
+ :message='Msg'
+ @confirm="onConfirm"
+ >
+ </van-dialog>
+
+
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+
+</div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+ export default {
+ name: "stores-detail",
+ data(){
+ return {
+ isShowArea:false,
+ dialogShow:false,
+ menText:'',
+ Status:null,
+ Msg:'',
+ Btn:false,
+
+ form:{
+ areaText:'',//地区文字展示
+ storeName:'', //门店名称
+ dtlAddr:'', //详细地址
+ priName:'', //负责人姓名
+ priEmail:'', //联系邮箱
+ priMblNo:'', //负责人手机
+ priIdNo:'', //负责人身份证号
+ provCode: '',
+ cityCode: '',
+ areaCode: '',
+ outChanNo:'',
+ },
+
+ rule:[
+ {key:"dtlAddr",message:"请输入详细地址",type:"isEmpty"},
+ ]
+ }
+ },
+ computed:{
+ ...mapState(['areaList'])
+ },
+ created(){
+ this.init();
+ },
+ methods:{
+ init(){
+ this.$api.storeDtl({storeId: this.$route.query.storeId}).then((res) => {
+ let data = res.body,
+ addr = data.addr;
+ this.Status = data.freezeStatus;
+ data.freezeStatus ? this.menText = '冻结门店':this.menText = '启用门店';
+ this.form = {
+ areaText:addr.province.name + '-' + addr.city.name + '-' + addr.area.name, //地区文字展示
+ storeName:data.storeName, //门店名称
+ dtlAddr:addr.dtlAddr, //详细地址
+ priName:data.priName, //负责人姓名
+ priEmail:data.priEmail, //联系邮箱
+ priMblNo:data.priMblNo, //负责人手机
+ priIdNo:data.priIdNo, //负责人身份证号
+ provCode: addr.province.code,
+ cityCode: addr.city.code,
+ areaCode: addr.area.code,
+ provName:addr.province.name,
+ cityName:addr.city.name,
+ areaName:addr.area.name,
+ outChanNo:data.outChanNo
+ }
+ })
+ },
+
+
+ freeze(){
+ this.dialogShow = !this.dialogShow;
+ this.Msg = `请问是否确认${this.Status ? '冻结' : '启用'}该门店?`;
+ },
+
+
+ //冻结/启用 门店
+ onConfirm() {
+ if(this.Btn2){return}
+ this.Btn2 = true;
+ this.$api.channSwitchStatus({
+ orgId: this.$route.query.storeId,
+ orgType: 4,
+ statusType: this.Status ? 0 : 1
+ })
+ .then((res) => {
+ this.Btn2 = false;
+ this.$notify_success(`${ this.Status ? '冻结' : '启用'}门店成功`)
+ this.Status = this.Status ? 0 : 1;
+ this.menText = this.Status ? '冻结门店' :'启用门店';
+ });
+ },
+
+
+ // 保存门店
+ Save(){
+ if(this.Btn){return}
+ this.Btn = true;
+ let list = {
+ addr:{
+ province:{
+ code:this.form.provCode,
+ name:this.form.provName
+ },
+ city:{
+ code:this.form.cityCode,
+ name:this.form.cityName
+ },
+ area:{
+ code:this.form.areaCode,
+ name:this.form.areaName
+ },
+ dtlAddr:this.form.dtlAddr
+ },
+ storeId:this.$route.query.storeId
+ };
+
+ if(this.$validator(list.addr,this.rule).check(item=>{
+ this.$notify(item.message);
+ })){
+ this.$api.storeEdit(list).then((res) => {
+ this.Btn = false;
+ this.$notify_success('保存成功!');
+ });
+ }
+ },
+
+
+
+ //关闭地区弹窗
+ closeAreaModal(){
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+ //保存 地区选择
+ setAreaValue(arr){
+ this.form.areaText = arr[0].name + '-' +arr[1].name +'-'+ arr[2].name;
+ this.form.provCode= arr[0].code;
+ this.form.cityCode= arr[1].code;
+ this.form.areaCode= arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.stores-detail{
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+
+ .cell-group {
+ margin: 10px 8px 0;
+ }
+
+
+
+
+
+
+ .footer{
+ margin-top: 60px;
+ padding-bottom: 30px;
+ .btn{
+ width: 170px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ &.left{
+ background-color: @c-bg-eee;
+ color: @c-text-666;
+ border-radius:22px 0px 0px 22px;
+ }
+ &.right{
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius:0px 22px 22px 0px;
+ }
+ }
+ }
+
+
+
+}
+</style>
diff --git a/src/views/mine/stores/stores.vue b/src/views/mine/stores/stores.vue
new file mode 100644
index 0000000..66fb061
--- /dev/null
+++ b/src/views/mine/stores/stores.vue
@@ -0,0 +1,180 @@
+<!--
+
+ 门店管理-主页
+
+-->
+<template>
+ <div class="stores-box h-100-g">
+
+ <v-navbar title="门店管理" fixed></v-navbar>
+ <van-search class="search" placeholder="请输入门店名称/负责人姓名/负责人手机号" v-model="value" shape='round' @search="onSearch"/>
+ <div class="item-box">
+ <van-list
+ v-model="loading"
+ :finished="finished"
+ immediate-check='false'
+ offset="50"
+ finished-text="没有更多了"
+ @load="onLoad"
+ >
+ <div class="stores-item flex-start-g" v-for="(item, index) in list" :key="index" @click="go(item.storeId)">
+ <p class="icon-box flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:25px;fill:#fff" >
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ </p>
+ <div>
+ <p class="name" v-text="item.storeName || ''">门店名称</p>
+ <p class="c-text-666-g font-12-g" v-text="item.priMblNo || ''">13586695442</p>
+ </div>
+ </div>
+ </van-list>
+ </div>
+
+ <van-button class="btn" @click="$router.push('/mine/stores-add')">
+ <div class="inner">
+ <van-icon name="plus"/>
+ <span class="text">新增</span>
+ </div>
+ </van-button>
+
+
+ </div>
+</template>
+
+<script>
+ export default {
+ name: "stores",
+ data() {
+ return {
+ value: '',
+ list:[],
+ loading:false,
+ finished:false,
+ storeId:''
+ }
+ },
+
+ created(){
+ this.init();
+ },
+ methods: {
+ init(){
+ this.loading = true
+ this.$api.storeStoreList({
+ searchKey:this.value,
+ storeId:this.storeId,
+ }).then((res) => {
+ if(res.body.storeList.length < 10){
+ this.list = [...this.list,...res.body.storeList]
+ this.storeId = ''
+ this.finished = true
+ this.loading = false
+ }else{
+ this.list = [...this.list,...res.body.storeList]
+ this.storeId = this.list[this.list.length-1].storeId
+ this.finished = false
+ this.loading = false
+ }
+ })
+ },
+
+
+ go(id) {
+ this.$router.push({path:'/mine/stores-detail',query:{storeId:id}});
+ },
+
+ onLoad(){
+ this.init()
+ },
+ onSearch(val){
+ this.list = []
+ this.loading = true
+ this.$api.storeStoreList({
+ searchKey:this.value,
+ }).then(res=>{
+ if(res.body.storeList.length < 10){
+ this.list = [...this.list,...res.body.storeList]
+ this.storeId = ''
+ this.finished = true
+ this.loading = false
+ }else{
+ this.list = [...this.list,...res.body.storeList]
+ this.storeId = this.list[this.list.length-1].storeId
+ this.finished = false
+ this.loading = false
+ }
+ })
+ }
+
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.stores-box {
+
+ background-color: @c-bg-f5;
+ padding-top: 44px;
+
+ .btn {
+ position: fixed;
+ width: 50px;
+ height: 50px;
+ padding: 0;
+ right: 8px;
+ bottom: 68px;
+ border-radius: 50%;
+ color: @c-text-f5;
+ z-index: @zIndex-50;
+ box-shadow: 0px 5px 9px 0px rgba(80, 47, 183, 0.2);
+ background: linear-gradient(0deg, rgba(106, 79, 188, 1), rgba(137, 110, 219, 1));
+
+ .inner {
+ display: flex;
+ flex-direction: column;
+ }
+
+ .text {
+ .lh(15px);
+ }
+ }
+
+ //搜索框
+ .search {
+ margin-top: 10px;
+ padding: 15px 8px;
+ }
+
+
+ .item-box {
+ background-color: @c-bg-fff;
+ padding-bottom: 25px;
+ }
+
+
+ .stores-item {
+ height: 67px;
+ margin: 0 8px 10px;
+ padding-left: 12px;
+ box-shadow: 0px 0px 5px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 3px;
+
+ .icon-box {
+ width: 32px;
+ height: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background-color: @c-bg-black;
+ }
+
+ .name {
+ margin-bottom: 5px;
+ font-weight: bold;
+ }
+ }
+
+
+}
+</style>
diff --git a/src/views/mine/toggle-identity.vue b/src/views/mine/toggle-identity.vue
new file mode 100644
index 0000000..326eea0
--- /dev/null
+++ b/src/views/mine/toggle-identity.vue
@@ -0,0 +1,186 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 09:30:14
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 10:02:59
+ * @Description: 切换身份页面
+ -->
+<template>
+ <div class="identity-box">
+ <v-navbar :title="$route.query.title" fixed></v-navbar>
+ <section class="role-box" v-for="(item, index) in roleList" :key="index">
+ <van-radio-group v-if="item.arr.length" v-model="roleId">
+ <h4 class="title">{{item.title}}</h4>
+ <div class="flex-between-g role-item" v-for="(role, k) in item.arr" :key="k">
+ <div class="left">
+ <p class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:15px;height:15px;">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ <span class="name">{{role.orgName}}</span>
+ </p>
+ <p class="flex-start-g">
+ <svg class="icon" aria-hidden="true" style="width:15px;height:15px;">
+ <use xlink:href="#iconshijian"></use>
+ </svg>
+ <time class='time'>创建时间:{{role.creTime | timeformat('yyyy-MM-dd HH:mm:ss')}}</time>
+ </p>
+ </div>
+ <div @click="setRole(role)" v-if="role.status == 1 && role.supStatus == 1" >
+ <van-radio :name="role.id" :checked-color="$store.state.backColor" />
+ </div>
+ </div>
+ </van-radio-group>
+ </section>
+ <van-button class="btn-login" :color="$store.state.backColor" @click="getRoleInfo">登录</van-button>
+ </div>
+</template>
+
+<script>
+import { mapActions, mapState } from 'vuex';
+ export default {
+ data() {
+ return {
+ roleList: [],//角色列表
+ roleId: '',//radio的value
+ role:null //当前选中的角色
+ }
+ },
+ computed:{
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.roleId = this.userinfo.id;
+ if(sessionStorage.isLoginByOpenId == 1){
+ this.roleList = [{
+ title:'门店',
+ arr:JSON.parse(localStorage.storeList)
+ }]
+ }else{
+ this.getRole();
+ }
+
+ },
+ methods: {
+ ...mapActions(['setUserMenu']),
+ // 设置当前选中的角色
+ setRole(role){
+ this.role = role;
+ },
+ // 获取角色
+ getRole() {
+ this.$api.getRole().then((res) => {
+ let {
+ agencyList,
+ chanList,
+ merchantList,
+ storeList
+ } = res.body;
+ this.roleList.push({
+ title:'代理',
+ arr:agencyList || []
+ });
+ this.roleList.push({
+ title:'渠道',
+ arr:chanList || []
+ });
+ this.roleList.push({
+ title:'商户',
+ arr:merchantList || []
+ });
+ this.roleList.push({
+ title:'门店',
+ arr:storeList || []
+ });
+
+ }).catch((err) => {
+
+ });
+ },
+ // 获取用户信息
+ getRoleInfo(){
+ if(!this.roleId){
+ this.$notify('请选择登录角色');
+ return
+ }
+ this.setUserMenu({
+ vm:this,
+ lastLoginMgrId:this.roleId,
+ })
+ // this.$api.getPowerInfo(this.roleId).then((res) => {
+
+ // }).catch((err) => {
+
+ // });
+ }
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .identity-box {
+ background-color: @c-bg-f5;
+ min-height: 100%;
+ padding-top: 44px;
+ padding-bottom: 30px;
+ }
+
+ .role-box {
+ .title {
+ .lh(30px);
+ margin-left: 20px;
+ margin-top: 15px;
+ color: @c-text-999;
+ font-size: @font-14;
+ }
+
+ .role-item {
+ padding: 0 12px;
+ background-color: @c-bg-fff;
+ margin: 0 8px 1px;
+ border-radius: 3px;
+ }
+
+ .left {
+ height: 75px;
+ .flex(center, flex-start, wrap, column);
+
+ p:first-child {
+ margin-bottom: 10px;
+ }
+
+ .icon {
+ margin-right: 8px;
+ }
+ }
+
+ .name {
+ font-size: @font-16;
+ font-weight: bold;
+ }
+
+ .time {
+ font-size: @font-12;
+ color: @c-text-999;
+ }
+
+ .circle {
+ height: 18px;
+ width: 18px;
+ margin-right: 2px;
+ border-radius: 50%;
+ background-color: #fff;
+ border: 2px solid @c-default;
+ }
+ }
+
+ .btn-login {
+ display: block;
+ .lh(44px);
+ width: 320px;
+ margin: 25px auto 0;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius: 22px;
+ }
+</style>
diff --git a/src/views/old/README.md b/src/views/old/README.md
new file mode 100644
index 0000000..3c158a2
--- /dev/null
+++ b/src/views/old/README.md
@@ -0,0 +1,8 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-29 17:35:38
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-29 17:36:04
+ * @Description:
+ -->
+# 该文件夹下的所有文件都是存老项目拷贝过来的
diff --git a/src/views/old/facepay/README.md b/src/views/old/facepay/README.md
new file mode 100644
index 0000000..2e2de73
--- /dev/null
+++ b/src/views/old/facepay/README.md
@@ -0,0 +1,3 @@
+# 商户收款产品路由页面
+## Author:TM
+## createTime:2019-5-27
\ No newline at end of file
diff --git a/src/views/old/facepay/calcmoney.vue b/src/views/old/facepay/calcmoney.vue
new file mode 100644
index 0000000..2efcadb
--- /dev/null
+++ b/src/views/old/facepay/calcmoney.vue
@@ -0,0 +1,246 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 15:34:12
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-07 17:26:01
+ * @Description:
+ -->
+<template>
+<!-- 商户收款:生成二维码页面 -->
+ <div class="calcmoney-box h-100-g">
+ <van-nav-bar title="商户收款" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ <div slot="right" class="slot-right font-style" @click="goList">明细</div>
+ </van-nav-bar>
+ <div class="pay-box">
+ <p>收款金额</p>
+ <span class="tag">¥</span>
+ <input v-model="price" autofocus readonly type="text" class="input-money" placeholder="请输入收款金额" >
+ <p class="icon-box">
+ <span>支持方式:</span>
+ <i class="icon iconfont scene_Staging-zhifubao" style="font-size:25px;color:#06b4fd;"></i>
+ </p>
+ </div>
+ <div class="calc">
+ <ul class="number-box">
+ <li class="number-item" v-for="(item, index) in 9" :key="index" @click="numberClick(item)">{{item}}</li>
+ <li class="number-item" @click="numberClick('.')">.</li>
+ <li class="number-item" @click="numberClick(0)">0</li>
+ <li class="number-item"></li>
+ </ul>
+ <div class="handler-box">
+ <div class="icon-delete" @click="deleteNumber">
+ <i class="icon iconfont scene_Staging-shanchu" style="font-size:35px;"></i>
+ </div>
+ <div class="icon-submit" @click="submit">
+ 收款
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'facepay_calc',
+ data() {
+ return {
+ price: ''
+ }
+ },
+ methods: {
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ goList(){
+ let {typeId,prodId} = this.$route.query;
+ this.$router.push(`/order/dmf?typeId=${typeId}&prodId=${prodId}`)
+ },
+ // 删除price最后一位
+ deleteNumber() {
+ this.price = this.price.slice(0, this.price.length - 1)
+ },
+ //提交生成二维码
+ submit() {
+ if(this.price=='0' || this.price=='0.'){
+ this.$notify_success('收款金额不能为0!')
+ return
+ }
+ if (!this.price.length) {
+ this.$notify_success('请输入收款金额!')
+ return
+ }else{
+ this.$api.facepay_create({payAmt:+this.price,term:0,zfbVersion:this.$route.query.zfbVersion}).then(res=>{
+ let url = res.body.payQrCodeUrl;
+ let id = res.body.orderId;
+ this.$router.push(`/facepay/code?url=${url}&id=${id}`)
+ })
+ }
+ },
+ //数字的逻辑输入判断
+ numberClick(v) {
+ let index = this.price.indexOf('.');
+ if (v !== '.') {
+ if (this.price.length === 8) {
+ return
+ }
+ if (index > -1 && this.price.slice(index + 1, this.price.length).length == 2) {
+ // 最多输入两位小数
+ this.$notify_success('最多输入两位小数!')
+ return
+ }
+ if(this.price.length===1 && this.price ==='0'){
+ return
+ }
+ } else {
+ if (!this.price.length) {
+ return
+ }
+ // if (this.price.slice(0, 1) !== '0') {
+ // return
+ // }
+ if (index > -1) {
+ return
+ }
+ }
+ this.price += v;
+ }
+ }
+ }
+
+</script>
+
+<style lang="less" scoped>
+
+
+ .calcmoney-box{
+ //padding-top: 45px;
+ background-color: #f1f1f1;
+ .font-style{
+ color: #333;
+ font-size:16px;
+ }
+ .pay-box{
+ &{
+ background-color: #fff;
+ width: 96%;
+ height: 210px;
+ margin: auto;
+ margin-top: 15px;
+ box-sizing: border-box;
+ padding: 30px 15px;
+ position: relative;
+ border-radius: 5px;
+ }
+ p:nth-of-type(1){
+ font-size: 14px;
+ color: #333;
+ font-weight: 550;
+ }
+ .tag {
+ position: absolute;
+ left: 4%;
+ top: 66px;
+ font-size: 27px;
+ }
+ }
+ input::-webkit-input-placeholder { /* WebKit browsers 适配谷歌 */
+ font-size: 20px;
+ color:#AFAFAF;
+ }
+ input:-moz-placeholder { /* Mozilla Firefox 4 to 18 适配火狐 */
+ font-size: 20px;
+ color:#AFAFAF;
+ }
+ input::-moz-placeholder { /* Mozilla Firefox 19+ 适配火狐 */
+ font-size: 20px;
+ color:#AFAFAF;
+ }
+ }
+
+ .input-box {
+ padding: 0 15px;
+ color: #bb8b52;
+ padding: 30px 25px;
+ position: relative;
+
+ .tag {
+ position: absolute;
+ left: 40px;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 24px;
+ }
+ }
+
+ .icon-box {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ color: #AFAFAF;
+ margin-top:20px;
+ }
+
+ .input-money {
+ //color: #bfa073;
+ height: 55px;
+ line-height: 55px;
+ width: 100%;
+ text-align: left;
+ padding-left: 35px;
+ padding-top:14px;
+ box-sizing: border-box;
+ border: 0;
+ border-bottom: 1px solid #f1f1f1;
+ outline: none;
+ font-size: 22px;
+ }
+
+ .calc {
+ position: fixed;
+ bottom:0;
+ width: 100%;
+ font-size: 24px;
+ text-align: center;
+ background-color: #fff;
+ .icon-delete {
+ height: 140px;
+ line-height: 140px;
+ }
+
+ .icon-submit {
+ height: 140px;
+ line-height: 140px;
+ color: #fff;
+ font-size: 16px;
+ font-weight: 500;
+ background-color: #896FDA;
+ }
+
+ &::after {
+ content: "";
+ clear: both;
+ display: block;
+ }
+ }
+
+ .handler-box {
+ width: 25%;
+ float: left;
+ }
+
+ .number-box {
+ width: 75%;
+ float: left;
+
+ .number-item {
+ width: 33.3333%;
+ float: left;
+ height: 70px;
+ line-height: 70px;
+ box-sizing: border-box;
+ border:1px solid #f1f1f1;
+ }
+ }
+
+</style>
diff --git a/src/views/old/facepay/code.vue b/src/views/old/facepay/code.vue
new file mode 100644
index 0000000..39d1536
--- /dev/null
+++ b/src/views/old/facepay/code.vue
@@ -0,0 +1,135 @@
+<template>
+ <!-- 商户收款:扫描二维码页面 -->
+ <div class="contract-qrcode-page">
+ <x-header title="扫码收款" :left-options="{backText:''}"></x-header>
+ <div class="order-info">
+ <div v-if="qrCodeBase64Url" class='canvasImg'>
+ <img :src="qrCodeBase64Url" alt="qrcode">
+ </div>
+ <div id="QRCode" v-else class='qr-code'>
+ <div class='qeimg'>
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+ import html2canvas from 'html2canvas';
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'facepay_code',
+ data() {
+ return {
+ dataUrl: '',
+ qrCodeBase64Url: '',
+ params: '',
+ timeId: null
+ }
+ },
+ computed: {
+ orderId() {
+ let id = this.$route.query.id;
+ return id;
+ }
+ },
+ beforeRouteLeave(to, from, next) {
+ clearInterval(this.timeId);
+ next()
+ },
+ methods: {
+ // 轮询 支付状态
+ search_status() {
+ this.$api.facepay_getStatus(this.orderId).then(res => {
+ let orderStatus = res.body.orderStatus;
+ if (orderStatus !== 0) {
+ if (orderStatus === 1) {
+ // 成功
+ this.$router.replace(
+ `/facepay/details?orderStatus=1&page=facepay_code&orderId=${this.orderId}`)
+ } else if (orderStatus === 2) {
+ // 失败
+ this.$router.replace(
+ `/facepay/details?orderStatus=2&page=facepay_code&orderId=${this.orderId}`)
+ }
+ }
+ })
+ }
+ },
+ created() {
+ QRCode.toDataURL(this.$route.query.url, {
+ margin: 0,
+ width: 400
+ },
+ (err, url) => {
+ this.dataUrl = url;
+ setTimeout(() => {
+ html2canvas(document.getElementById('QRCode')).then(
+ canvas => {
+ this.qrCodeBase64Url = canvas.toDataURL(
+ 'image/jpeg'
+ );
+ this.timeId = setInterval(() => {
+ this.search_status();
+ }, 2000);
+ }
+ );
+ }, 100);
+ }
+ );
+ }
+ }
+
+</script>
+<style lang="less" scoped>
+
+
+
+ .contract-qrcode-page {
+ .order-info {
+ padding-top: 46px;
+
+ .canvasImg {
+ margin: 0 auto;
+ width: 220px;
+ height: 220px;
+
+ img {
+ width: 100%;
+ }
+ }
+
+ .notice {
+ padding-top: 40px;
+ text-align: center;
+ color: #666;
+ }
+
+ .qr-code {
+ background: #fff;
+ width: 220px;
+ height: 220px;
+ margin: 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ border: 4px solid @color-text-three;
+ color: @color-text-three;
+
+ .qeimg {
+ width: 200px;
+ height: 200px;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/facepay/orderDetails.vue b/src/views/old/facepay/orderDetails.vue
new file mode 100644
index 0000000..dd84d46
--- /dev/null
+++ b/src/views/old/facepay/orderDetails.vue
@@ -0,0 +1,175 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 15:34:12
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-11-21 16:19:14
+ * @Description:
+ -->
+<template>
+ <!-- 商户收款:订单详情页面 -->
+ <div class="orderdetails h-100-g">
+ <x-header title="订单详情" :left-options="{backText:''}">
+ <div v-if="isShowListBtn" slot="right" class="slot-right" @click="$router.push('/facepay/list')">明细</div>
+ </x-header>
+
+ <div class="status" v-if="isShowStatus">
+ <div v-if="isSuccess">
+ <icon type="success" is-msg></icon>
+ <p class="info">交易成功</p>
+ <h3 class="price">¥{{orderInfo.payAmt}}</h3>
+ </div>
+ <div v-else>
+ <icon type="warn" is-msg></icon>
+ <p class="info">订单超时</p>
+ </div>
+ </div>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 订单详情
+ </div>
+ <x-input title="消费金额" readonly :value="(orderInfo.payAmt || '0')+'元'" text-align="right"></x-input>
+ <x-input title="消费时间" readonly :value="$tool.date(orderInfo.creTime, 'YYYY-MM-DD HH:mm:ss')"
+ text-align="right"></x-input>
+ <x-input title="订单号" readonly :value="orderInfo.orderId" text-align="right"></x-input>
+ <x-input title="订单状态" readonly :value="status" text-align="right"></x-input>
+ <x-input title="收银员" readonly :value="orderInfo.mgrName" text-align="right"></x-input>
+ <!-- <cell style="padding: 0.2rem 0.3rem;" v-if="status === '交易成功'">
+ <button class="btn-submit" @click="isShow = true;">退款</button>
+ </cell> -->
+ <cell style="padding: 0.2rem 0.3rem;" v-if="status === '待支付'">
+ <button class="btn-submit"
+ @click="$router.replace(`/facepay/code?url=${orderInfo.payCode}&id=${orderInfo.orderId}`)">展示二维码</button>
+ </cell>
+ </group>
+
+ <div >
+ <f-confirm v-model="isShow" @on-confirm="refund">
+ <p>是否确认退款</p>
+ </f-confirm>
+ <f-confirm v-model="isShow_success" :show-cancel-button="false">
+ <p>退款成功</p>
+ </f-confirm>
+ </div>
+ </div>
+</template>
+
+<script>
+ import {
+ Confirm,
+ Icon,
+ Cell
+ } from 'vux';
+ export default {
+ name: 'facepay_details',
+ components: {
+ Confirm,
+ Icon,
+ Cell
+ },
+ data() {
+ return {
+ isShow: false,
+ isShow_success: false,
+ isSuccess: false,
+ isShowStatus: false,
+ isShowListBtn: false,
+ orderInfo: {}
+ }
+ },
+ computed: {
+ status() {
+ let v = this.orderInfo.status;
+ switch (v) {
+ case 0:
+ return '待支付';
+ case 1:
+ return '交易成功';
+ case 2:
+ return '订单超时';
+ case 3:
+ return '退款成功';
+ }
+ }
+ },
+ created() {
+ let query = this.$route.query,
+ orderStatus = query.orderStatus,
+ page = query.page;
+ if (orderStatus == '1') {
+ this.isSuccess = true;
+ }
+ if (page == 'facepay_code') {
+ this.isShowStatus = true;
+ this.isShowListBtn = true;
+ }
+ this.init();
+ },
+ methods: {
+ init() {
+ this.$api.facepay_orderDetails(this.$route.query.orderId).then(res => {
+ this.orderInfo = res.body;
+ })
+ },
+ // 退款
+ refund() {
+ this.isShow = false;
+ this.$api.facepay_refund(this.orderInfo.orderId).then(() => {
+ this.$router.replace('/facepay/details?orderId=' + this.orderInfo.orderId)
+ location.reload()
+ })
+ }
+ }
+ }
+
+</script>
+
+<style lang="less" scoped>
+ .orderdetails{
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ }
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .status {
+ text-align: center;
+ padding: 15px 0;
+
+ .info {
+ margin-top: 10px;
+ }
+
+ .price {
+ font-size: 26px;
+ color: #bb8b52;
+ }
+ }
+
+ .btn-submit {
+ height: 26px;
+ line-height: 26px;
+ background-color: #fff;
+ padding: 0 15px;
+ outline: none;
+ border: none;
+ color: #e59a99;
+ border: 1px solid #e59a99;
+ }
+
+</style>
diff --git a/src/views/old/facepay/orderList.vue b/src/views/old/facepay/orderList.vue
new file mode 100644
index 0000000..1c0a551
--- /dev/null
+++ b/src/views/old/facepay/orderList.vue
@@ -0,0 +1,160 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 15:34:12
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-05 11:32:13
+ * @Description:
+ -->
+<template>
+ <!-- 商户收款:订单列表页面 -->
+ <div class="box h-100-g">
+ <x-header title="订单明细" :left-options="{backText:''}">
+ <!-- <div slot="right" class="slot-right">筛选</div> -->
+ </x-header>
+ <section v-if="orderList.length">
+ <h3 class="count">今日成功交易金额:<span class="number">{{countPrice}}</span> 元</h3>
+ <div class="order-item" v-for="(item, index) in orderList" :key="index"
+ @click="$router.push(`/product/dmf-detail?id=${item.orderId}`)">
+ <!-- /product/dmf-detail?id=1251909050004223 -->
+ <group>
+ <h4 class="title">商户名称:{{item.merName}}</h4>
+ <div class="price">
+ <p>支付宝扫码收款</p>
+ <div>
+ <p class="num">{{item.payAmt}}</p>
+ <p v-if="item.status==2" class="fail">{{item.status | getStatus}}</p>
+ <p v-else-if="item.status==3" class="success">{{item.status | getStatus}}</p>
+ <p v-else>{{item.status | getStatus}}</p>
+ </div>
+ </div>
+ <footer class="foot flex-44">
+ <p>{{$tool.date(item.creTime, 'YYYY-MM-DD HH:mm:ss')}}</p>
+ <p>渠道名称:{{item.chanName}}</p>
+ </footer>
+ </group>
+ </div>
+ </section>
+ <f-no-data v-else></f-no-data>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'facepay_list',
+ data() {
+ return {
+ orderList: [],
+ countPrice: 0
+ }
+ },
+ created() {
+ this.init()
+ },
+ filters: {
+ getStatus(v) {
+ switch (v) {
+ case 0:
+ return '待支付';
+ case 1:
+ return '交易成功';
+ case 2:
+ return '订单超时';
+ case 3:
+ return '退款成功';
+ }
+ }
+ },
+ methods: {
+ getTime(v) {
+ return this.$tool.date(v, 'YYYY-MM-DD hh:ss:mm');
+ },
+ init() {
+ // 查询参数,后期做
+ // "endTime": "2019-05-27T08:31:59.603Z",
+ // "mgrId": 0,
+ // "orderId": 0,
+ // "prodId": 0,
+ // "staTime": "2019-05-27T08:31:59.603Z",
+ // "status": 0
+ // merId
+ this.$api.facepay_orderList({merId:this.$route.query.merId}).then(res => {
+ let body = res.body;
+ this.countPrice = body.sumAmt || 0;
+ this.orderList = body.dmfOrderVoList || [];
+ })
+ }
+ }
+ }
+
+</script>
+
+
+
+<style lang="less" scoped>
+ .box{
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ }
+ .order-item {
+ margin-bottom: 15px;
+
+ .number {
+ color: #bd8e55;
+ }
+ }
+
+ .count {
+ height: 44px;
+ line-height: 44px;
+ padding-left: 15px;
+ }
+
+ .flex-44 {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 44px;
+ line-height: 44px;
+ }
+
+ .title {
+ color: #c6c6c6;
+ font-weight: normal;
+ text-align: right;
+ border-bottom: 1px solid #D9D9D9;
+ padding-right: 15px;
+ height: 44px;
+ line-height: 44px;
+ font-size: 14px;
+ }
+
+ .price {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 90px;
+ padding: 0 15px;
+ text-align: center;
+ color: #5a5a5a;
+ font-weight: 600;
+ font-size: 16px;
+
+ .num {
+ color: #bd8e55;
+ font-size: 20px;
+ }
+ .success{
+ color: #ff7a45;
+ }
+ .fail{
+ color: #f5222d;
+ }
+ }
+
+ .foot {
+ background-color: #f8f5f1;
+ padding: 0 15px;
+ font-size: 14px;
+ }
+
+</style>
diff --git a/src/views/old/merchant/creditStaging.vue b/src/views/old/merchant/creditStaging.vue
new file mode 100644
index 0000000..b04539d
--- /dev/null
+++ b/src/views/old/merchant/creditStaging.vue
@@ -0,0 +1,92 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 15:59:31
+ * @Description:
+ -->
+<template>
+ <div class="creditStaging-page h-100-g">
+ <x-header title="信用卡分期" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-input title="状态" v-model="typeIdName" text-align='right' readonly></x-input>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <x-input v-for="i in prodRef.prodSkDtlInfoList" :key="i.term" :title="i.term+'期'" v-model="i.fee" readonly text-align="right">
+ <div slot="right" class="unit">%</div>
+ </x-input>
+ </group>
+ <f-space></f-space>
+ </div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+ export default {
+ name: 'creditStaging',
+ data() {
+ return {
+ typeIdName:'',
+ prodRef: {
+ status:'',
+ prodSkDtlInfoList: [],
+ typeIdName:''
+ }
+ };
+ },
+ computed:{
+ ...mapState(['userinfo'])
+ },
+ methods: {
+ init() {
+ let parObj = this.$route.query;
+ parObj.orgId = this.userinfo.orgId;
+ this.$api.prodRefInit(this.$route.query).then(res => {
+ this.prodRef = res.body;
+ if(this.$route.query.typeId==200001){
+ if(res.body.status){
+ this.typeIdName = '已分配'
+ }else{
+ this.typeIdName = '未分配'
+ }
+ }
+ });
+ }
+ },
+ created() {
+ this.init();
+ }
+ };
+</script>
+
+<style lang="less">
+.creditStaging-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+
+
+ & /deep/ .weui-switch {
+ width: 44px;
+ height: 24px;
+ &::before {
+ width: 42px;
+ height: 22px;
+ }
+ &::after {
+ width: 22px;
+ height: 22px;
+ }
+ }
+ .unit {
+ margin-left: 5px;
+ color: @color-text-main;
+ font-size: @font-size-medium;
+ }
+ .tips {
+ padding: 12px;
+ font-size: @font-size-small;
+ color: @color-text-three;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/gjzj/baseInfo.vue b/src/views/old/merchant/gjzj/baseInfo.vue
new file mode 100644
index 0000000..a0d5b18
--- /dev/null
+++ b/src/views/old/merchant/gjzj/baseInfo.vue
@@ -0,0 +1,183 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-gjzj-page">
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 基本信息
+ </div>
+ <x-input title='商户名称' v-model.trim="storeInfo.merName" readonly text-align='right'></x-input>
+ <x-input title='营业执照号' v-model.trim="storeInfo.licenseNo" readonly text-align='right'></x-input>
+ <x-input title='地址' v-model.trim="storeInfo.merAddr" readonly text-align='right'></x-input>
+ <x-input title='详细地址' v-model.trim="storeInfo.merDtlAddr" readonly text-align='right'></x-input>
+ <x-input title='营业面积' v-model.trim="storeInfo.merArea" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <datetime title="成立日期" v-model.trim="storeInfo.foundDate" placeholder='请选择'></datetime>
+ <datetime v-if="isHeyd" v-model="storeInfo.agreeStartTime" format="YYYY-MM-DD" title="协议开始时间"></datetime>
+ <datetime v-if="isHeyd" v-model="storeInfo.agreeEndTime" format="YYYY-MM-DD" title="协议结束时间"></datetime>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 法人信息
+ </div>
+ <x-input title='法人姓名' v-model.trim="storeInfo.legalName" readonly text-align='right'></x-input>
+ <x-input title='法人身份证号' v-model.trim="storeInfo.legalIdNo" readonly text-align='right'></x-input>
+ <x-input title='法人电话' v-model.trim="storeInfo.legalMblNo" placeholder='请输入' :max='11' text-align='right'>
+ </x-input>
+ <x-input title='法人家庭住址' v-model.trim="storeInfo.legalHomeAddr" placeholder='请输入' :max='20'
+ text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 联系人信息
+ </div>
+ <x-input title='联系人姓名' v-model.trim="storeInfo.contactName" placeholder='请输入' :max='8' text-align='right'>
+ </x-input>
+ <x-input title='联系人电话' v-model.trim="storeInfo.contactMblNo" placeholder='请输入' :max='11' text-align='right'>
+ </x-input>
+ <x-input title='联系人职务' v-model.trim="storeInfo.contactDuty" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 银行信息
+ </div>
+ <selector title='银行名称' placeholder='请选择' @on-change='handleBankChange' v-model="storeInfo.bankCode"
+ :options='bankList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='开户行' v-model.trim="storeInfo.bankDtlName" placeholder='请输入' :max='20' text-align='right'>
+ </x-input>
+
+ <x-address v-model="calcAddress" title="地址" v-if="isHeyd" :list="addressList" hide-district placeholder="请选择" ></x-address>
+
+ <x-input title='户名' v-model.trim="storeInfo.cardName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='银行账号' v-model.trim="storeInfo.cardNo" placeholder='请输入' :max='30' text-align='right'>
+ </x-input>
+ <selector title='账号类型' placeholder='请选择' @on-change='handleCardTypeChange' v-model="storeInfo.cardType"
+ :options='cardTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input v-show="storeInfo.cardType==='pu'" v-if="isHeyd" title='开户行行号' v-model.trim="storeInfo.bankNo" :max='20' type="number" placeholder='请输入'
+ text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'huaGjzjOpen',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ storeInfo: {
+ type: Object
+ },
+ // 银行列表
+ bankList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ cardTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ isHeyd: {
+ type: Boolean,
+ default: false
+ }
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+ },
+ methods: {
+ // 处理银行名称的改变
+ handleBankChange(val) {
+ let currentEle = this.bankList.find(item => {
+ return item.code === val;
+ })
+ // 银行卡姓名
+ this.storeInfo.bankName = currentEle.name;
+ },
+ // 账号类型
+ handleCardTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.cardTypeList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.cardTypeName = currentEle.name;
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-gjzj-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/gjzj/open.vue b/src/views/old/merchant/gjzj/open.vue
new file mode 100644
index 0000000..a86a527
--- /dev/null
+++ b/src/views/old/merchant/gjzj/open.vue
@@ -0,0 +1,359 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-gjzj-index">
+ <x-header :title="isHeyd ? '开通智享花':'开通购机直降'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :cardTypeList="cardTypeList"
+ :bankList="bankList"
+ :isHeyd="isHeyd"
+ :address="address"
+ :addressList="addressList"
+ :storeInfo="storeInfo"
+ @addr-change="setCitycode"
+ >
+ </base-info>
+ <store-pictures v-show="step === 2 && !isHeyd" :storeInfo="storeInfo"></store-pictures>
+ <!-- 海尔云贷的文件上传type + 6 -->
+ <store-pictures v-show="step === 2 && isHeyd" :storeInfo="storeInfo" :filetype="6" ></store-pictures>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <f-button @on-click="handleNextStep" fixed>{{ step === 1 ? '下一步' : '提交开通' }}</f-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './baseInfo.vue';
+ import StorePictures from './storePictures.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'gjzjOpen_2',
+ components: {
+ BaseInfo,
+ StorePictures
+ },
+ data() {
+ return {
+ step: 1,
+ stepText: '下一步',
+ bankList: [],
+ cardTypeList: [],
+ addressList:[],
+ address:[],
+ storeInfo: {
+ //协议开始时间,结束时间(智享花才有)
+ agreeStartTime:'',
+ agreeEndTime:'',
+ provCode:'',//省code
+ cityCode:'',//市code
+ bankNo:'',//开户行行号
+
+ merName: '',
+ licenseNo: '',
+ merAddr: '',
+ merDtlAddr: '',
+ merArea: '',
+ foundDate: '',
+ legalName: '',
+ legalIdNo: '',
+ legalMblNo: '',
+ legalHomeAddr: '',
+ contactName: '',
+ contactMblNo: '',
+ contactDuty: '',
+ bankCode: '', // 银行code
+ bankName: '', // 银行名称
+ bankDtlName: '', // 开户行
+ cardName: '', // 户名
+ cardNo: '', // 银行卡号
+ cardType: '', // 账号类型code
+ cardTypeName: '', // 账号类型name
+ licencePhotos: [], // 营业执照
+ legalCardPhotos: [], // 法人身份证
+ houseContractPhotos: [], // 房产证和租赁合同
+ storePhotos: [], // 门店照
+ mealBillPhotos: [], // 终端商品的定价单
+ accreditFilePhotos: [], // 授权文件
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [{
+ key: 'merArea',
+ tipType: 1,
+ message: '营业面积'
+ },
+ {
+ key: 'foundDate',
+ tipType: 2,
+ message: '成立日期'
+ },
+
+ {
+ key: 'legalMblNo',
+ tipType: 1,
+ type: 'tel',
+ message: '法人电话'
+ },
+ {
+ key: 'legalHomeAddr',
+ tipType: 1,
+ message: '法人家庭住址'
+ },
+ {
+ key: 'contactName',
+ tipType: 1,
+ type: 'name',
+ message: '联系人姓名'
+ },
+ {
+ key: 'contactMblNo',
+ tipType: 1,
+ type: 'tel',
+ message: '联系人电话'
+ },
+ {
+ key: 'contactDuty',
+ tipType: 1,
+ message: '联系人职务'
+ },
+ {
+ key: 'bankCode',
+ tipType: 2,
+ message: '银行名称'
+ },
+ {
+ key: 'bankDtlName',
+ tipType: 1,
+ message: '开户行'
+ },
+ {
+ key: 'cardName',
+ tipType: 1,
+ message: '户名'
+ },
+ {
+ key: 'cardNo',
+ tipType: 1,
+ type:"bankCardNo",
+ message: '银行账号'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ isHeyd(){
+ return this.$route.query.icon=='scene_Staging-zxh';
+ }
+ },
+ created(){
+ if(this.isHeyd){
+ this.$api.getArea().then(res => {
+ this.addressList = res.body.provList;
+ });
+ }
+ this.init();
+ },
+ methods: {
+ // 设置地区code
+ setCitycode(val){
+ this.storeInfo.provCode = val[0];
+ this.storeInfo.cityCode = val[1];
+ this.address = val;
+ },
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn;
+ if(this.isHeyd){
+ fn = this.$api.heydInitOpen;
+ }else{
+ fn = this.$api.gjzjOpenInit;
+ }
+ fn().then(res => {
+ let body = res.body;
+ this.bankList = body.bankList;
+ this.cardTypeList = body.cardTypeList;
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(this.isHeyd && body.cityCode){
+ this.address.push(body.provCode+'')
+ this.address.push(body.cityCode+'')
+ }
+ this.storeInfo.foundDate = dateFormat(this.storeInfo.foundDate, 'YYYY-MM-DD');
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 智享花增加这两个字段验证
+ if(this.isHeyd){
+ let rules = [
+ {
+ key: 'agreeStartTime',
+ tipType: 1,
+ message: '协议开始时间'
+ },
+ {
+ key: 'agreeEndTime',
+ tipType: 1,
+ message: '协议结束时间'
+ },
+ {
+ key: 'cityCode',
+ tipType: 2,
+ message: '地区'
+ }
+ ]
+ // 对公时验证开户行行号
+ if(this.storeInfo.cardType ==='pu'){
+ rules.push({
+ key: 'bankNo',
+ tipType: 1,
+ message: '开户行行号'
+ })
+ }
+ this.storeCheckInfo.push(...rules)
+ }
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)) {
+ return false;
+ }
+ this.step += 1;
+ } else {
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+
+ // 需要判断图片的字段
+ let checkPicList = [{
+ checkField: 'licencePhotos',
+ msg: '营业执照照片'
+ },
+ {
+ checkField: 'legalCardPhotos',
+ msg: '法人身份证正反面照片'
+ },
+ {
+ checkField: 'houseContractPhotos',
+ msg: '房产证或租赁合同'
+ },
+ {
+ checkField: 'storePhotos',
+ msg: '外景照、门头照片、前台照、内景照'
+ },
+ {
+ checkField: 'mealBillPhotos',
+ msg: '套餐活动清单、终端商品定价清单'
+ },
+ {
+ checkField: 'accreditFilePhotos',
+ msg: '运营商授权文件'
+ },
+ ];
+ // 判断图片是否上传
+ for (let item of checkPicList) {
+ if (!(this.storeInfo[item.checkField] instanceof Array &&
+ this.storeInfo[item.checkField].length)) {
+ this.$notify('请上传' + item.msg);
+
+ return false;
+ }
+ }
+
+ // 由于后端初始化返回的图片字段{url: xx, id: 121}, 而此时在提交的时候,我们
+ // 提交图片字段为[id1, id2], 为id的列表
+ let picIdList = {
+ licencePhotos: [],
+ legalCardPhotos: [],
+ houseContractPhotos: [],
+ storePhotos: [],
+ mealBillPhotos: [],
+ accreditFilePhotos: []
+ };
+ for (let i in picIdList) {
+ if (this.storeInfo[i] instanceof Array &&
+ this.storeInfo[i].length) {
+ // 后端图片初始文件id为id.而控件上传id为fieldId,这里需要兼容处理一下
+ this.storeInfo[i].forEach((item) => {
+ item.fileId ? picIdList[i].push(item.fileId) :
+ picIdList[i].push(item.id)
+ });
+ }
+ }
+
+
+ // 覆盖submitInfo中的 (agreeStartTime 、agreeEndTime)
+ let time = {
+ agreeStartTime:this.storeInfo.agreeStartTime.split('-').join(''),
+ agreeEndTime:this.storeInfo.agreeEndTime.split('-').join('')
+ }
+ let submitInfo = {
+ ...this.storeInfo,
+ ...time,
+ ...picIdList
+ };
+
+
+ let fn;
+ if(this.isHeyd){
+ // 对私时开户行行号不传值
+ if(this.storeInfo.cardType ==='pr'){
+ submitInfo.bankNo = '';
+ }
+ fn = this.$api.heydOpen; //海尔云贷接口
+ }else{
+ fn = this.$api.gjzjOpenOpen;
+ }
+
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/gjzj/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+.open-gjzj-index{
+ padding-top: 54px;
+ background-color: #f1f1f1;
+}
+</style>
+
diff --git a/src/views/old/merchant/gjzj/openResult.vue b/src/views/old/merchant/gjzj/openResult.vue
new file mode 100644
index 0000000..5f09f6a
--- /dev/null
+++ b/src/views/old/merchant/gjzj/openResult.vue
@@ -0,0 +1,100 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 10:50:04
+ * @Description:
+ -->
+
+<template>
+ <div class="gjzj-result-page">
+ <x-header :title="isHeyd ? '开通智享花' : '开通购机直降'" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="status-icon">
+ <i v-if="openStatus === 1"
+ class="iconfont scene_Staging-shenhezhong1"></i>
+ <i v-if="openStatus === 2"
+ class="iconfont scene_Staging-danxuan"></i>
+ <i v-if="openStatus === 3"
+ class="iconfont scene_Staging-shibai1"></i>
+ </div>
+ <div class="tips">
+ <p v-if="openStatus === 1">您的资料已提交成功,请耐心等待审核。</p>
+ <p v-if="openStatus === 2">您已通过审核。</p>
+ <p v-if="openStatus === 3">产品被停用,请联系管理员</p>
+ </div>
+ <f-button @on-click="handleBack">{{ buttonText }}</f-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'add-account',
+ data() {
+ return {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ openStatus: 0, // 开通状态
+ buttonText: '返回', // 底部按钮文字
+ };
+ },
+ computed:{
+ isHeyd(){
+ let icon = this.$route.query.icon;
+ if(icon ==='scene_Staging-zxh'){
+ return true
+ }else{
+ return false
+ }
+ }
+ },
+ methods: {
+ pageGoBack(){
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ },
+ handleBack () {
+ // 如果是在开通中的话,那么底部有重新提交按钮
+ // 点击重新提交,那么用户可以重新填写资料
+ if (this.openStatus === 1) {
+ this.$router.push({
+ path: `/gjzj/open?icon=${this.$route.query.icon}`
+ });
+ } else {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }
+
+ },
+ },
+ created() {
+ this.openStatus = Number(this.$route.query.openStatus);
+ this.buttonText = this.openStatus === 1 ? '重新提交' : '返回';
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .gjzj-result-page {
+ height: 100%;
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .status-icon {
+ padding-top: 20px;
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #BFA073;
+ }
+ .scene_Staging-shibai1 {
+ color: #F76260;
+ }
+ .tips {
+ color: #999;
+ font-size: 14px;
+ line-height: 1.6;
+ text-align: center;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/gjzj/storePictures.vue b/src/views/old/merchant/gjzj/storePictures.vue
new file mode 100644
index 0000000..58d94b7
--- /dev/null
+++ b/src/views/old/merchant/gjzj/storePictures.vue
@@ -0,0 +1,71 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="gjzj-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="9+filetype"
+ :title="'营业执照照片'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <UploadFile
+ :fileType="10+filetype"
+ :title="'法人身份证正反面照片'"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ <UploadFile
+ :fileType="11+filetype"
+ :title="'房产证或租赁合同'"
+ :picList="storeInfo.houseContractPhotos"></UploadFile>
+ <UploadFile
+ :fileType="12+filetype"
+ :title="'外景照、门头照片、前台照、内景照'"
+ :picList="storeInfo.storePhotos"></UploadFile>
+ <UploadFile
+ :fileType="13+filetype"
+ :title="'套餐活动清单、终端商品定价清单'"
+ :picList="storeInfo.mealBillPhotos"></UploadFile>
+ <UploadFile
+ :fileType="14+filetype"
+ :title="'运营商授权文件'"
+ :picList="storeInfo.accreditFilePhotos"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImg.vue';
+
+ export default {
+ name: 'gjzjStorePicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ // + 6的是海尔云贷的上传
+ filetype:{
+ type:Number,
+ default:0
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .gjzj-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 0 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/gzzj/merBaseInfo.vue b/src/views/old/merchant/gzzj/merBaseInfo.vue
new file mode 100644
index 0000000..8427205
--- /dev/null
+++ b/src/views/old/merchant/gzzj/merBaseInfo.vue
@@ -0,0 +1,168 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='运营商内部名称' v-model.trim="merInfo.merchantName" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='营业执照号' v-model.trim="merInfo.licenseNo" :max='30' text-align='right'></x-input>
+ <x-input title='营业执照名称' v-model.trim="merInfo.orgName" placeholder='请输入' :max='50' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='法人名称' v-model.trim="merInfo.legalName" :max='30' placeholder='请输入' text-align='right'></x-input>
+ <x-input title='实控人身份证号' v-model.trim="merInfo.actualCtlIdCardNo" :max='18' placeholder='请输入' text-align='right'></x-input>
+ <x-input title='实控人身份证地址' v-model.trim="merInfo.actualCtl" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='实控人手机号' v-model.trim="merInfo.actualCtlPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <van-field v-model.trim="merInfo.addrText" clearable :readonly="true" right-icon="arrow" label="省市区" placeholder=" 请选择"
+ @click="isShowArea = !isShowArea" text-align='right'/>
+ <x-input title='详细地址' v-model.trim="merInfo.regDetailAddr" placeholder='请输入' :max='100' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='商户账户名称' v-model.trim="merInfo.acctName" placeholder='请输入' text-align='right' />
+ <selector title='商户银行名称' placeholder='请选择' @on-change='handleBankChange' v-model="merInfo.acctBankname"
+ :options='bankList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='开户支行名称' v-model.trim="merInfo.acctOpenBankname" placeholder='请输入' :max='50' text-align='right'/>
+ <x-input title='开户银行卡号' v-model.trim="merInfo.acctNo" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input title='开户行联行号' v-model.trim="merInfo.acctCnaps" :max='20' placeholder='请输入'
+ text-align='right'></x-input>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ </div>
+
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress,
+ } from 'vux';
+ export default {
+ name: 'heydMerBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ },
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ merInfo: {
+ type: Object,
+ },
+ // 银行列表
+ bankList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.merInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.merInfo.regProvinceCode = arr[0].code;
+ this.merInfo.regCityCode = arr[1].code;
+ this.merInfo.regDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ // 处理银行名称的改变
+ handleBankChange(val) {
+ let currentEle = this.bankList.find(item => {
+ return item.code === val;
+ })
+ },
+ },
+ created() {
+ this.getArea();
+ },
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/gzzj/merOpen.vue b/src/views/old/merchant/gzzj/merOpen.vue
new file mode 100644
index 0000000..41fa191
--- /dev/null
+++ b/src/views/old/merchant/gzzj/merOpen.vue
@@ -0,0 +1,416 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通公众租机'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <mer-info
+ v-show="step === 1"
+ :merRefList="merRefList"
+ :bankList="bankList"
+ :address="address"
+ :addressList="addressList"
+ :merInfo="merInfo"
+ @addr-change="setCitycode"
+ >
+ </mer-info>
+ <store-info
+ v-show="step === 2"
+ :bizLicenseTypeList="bizLicenseTypeList"
+ :storeInfo="storeInfo"
+ >
+ </store-info>
+ <mgr-info
+ v-show="step === 3"
+ :mgrReqVo="mgrReqVo"
+ >
+ </mgr-info>
+ <f-space type="large"></f-space>
+ <f-button @on-click="handleNextStep" fixed>{{ (step!== 3) ? '下一步' : '提交开通' }}</f-button>
+ </div>
+</template>
+
+<script>
+ import MerInfo from './merBaseInfo.vue';
+ import StoreInfo from './storeBaseInfo.vue';
+ import MgrInfo from './storeBaseMgrInfo.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+ import {calcArea} from '@/utils/index';
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'gzzjMerOpen',
+ components: {
+ MerInfo,
+ StoreInfo,
+ MgrInfo
+ },
+ data() {
+ return {
+ orgType: 0,
+ step: 1,
+ stepText: '下一步',
+ bankList: [],
+ cardTypeList: [],
+ merRefList:[],
+ addressList:[],
+ address:[],
+ bizLicenseTypeList: [{
+ code: 1,
+ name: "无",
+ },
+ {
+ code: 2,
+ name: "有",
+ }],
+ merInfo: {
+ acctOpenBankname:'',
+ merchantName: '',
+ licenseNo: '',
+ orgName:'',
+ actualCtl:'',
+ actualCtlIdCardNo:'',
+ actualCtlPhone:'',
+ addrText:'',
+ regDetailAddr:'',
+ acctName:'',
+ acctBankname:'',
+ acctNo:'',
+ acctCnaps:'',
+ addressList:'',
+ address:'',
+ regProvinceCode:'',
+ regCityCode:'',
+ regDistrictCode:'',
+ bankList:'',
+ },
+ storeInfo: {
+ bizLicenseType:'',
+ storeName:'',
+ licenseNo:'',
+ orgName:'',
+ storeDetailAddr:'',
+ legalName:'',
+ actualCtl:'',
+ actualCtlPhone:'',
+ actualCtlIdCardNo:'',
+ addrText:'',
+ storeProvinceCode:'',
+ storeCityCode:'',
+ storeDistrictCode:'',
+ },
+ mgrReqVo: {
+ staffName:'',
+ staffPhone:'',
+ staffIdcardNo:'',
+ },
+ // 商户开户信息字段
+ merCheckInfo: [
+ {
+ key: 'merchantName',
+ tipType: 1,
+ message: '运营商内部名称'
+ },
+ {
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ },
+ {
+ key: 'licenseNo',
+ tipType: 1,
+ message: '营业执照编号'
+ },
+ {
+ key: 'legalName',
+ tipType: 1,
+ message: '法人名称'
+ },
+ {
+ key: 'actualCtl',
+ tipType: 1,
+ message: '实控人身份证地址'
+ },
+ {
+ key: 'actualCtlIdCardNo',
+ tipType: 1,
+ message: '实控人身份证号'
+ },
+ {
+ key: 'actualCtlPhone',
+ tipType: 1,
+ message: '实控人手机号'
+ },
+ {
+ key: 'regDetailAddr',
+ tipType: 1,
+ message: '详细地址'
+ },
+ {
+ key: 'acctName',
+ tipType: 1,
+ message: '商户账户名称'
+ },
+ {
+ key: 'acctBankname',
+ tipType: 2,
+ message: '商户银行名称'
+ },
+ {
+ key: 'acctNo',
+ tipType: 1,
+ message: '开户银行卡号'
+ },
+ {
+ key: 'acctOpenBankname',
+ tipType: 1,
+ message: '开户支行名称'
+ },
+ {
+ key: 'acctCnaps',
+ tipType: 1,
+ message: '开户行联行号'
+ },
+ {
+ key: 'regProvinceCode',
+ tipType: 1,
+ message: '省'
+ },
+ {
+ key: 'regCityCode',
+ tipType: 1,
+ message: '市'
+ },
+ {
+ key: 'regDistrictCode',
+ tipType: 1,
+ message: '区'
+ },
+ ],
+ // 门店验证信息
+ storeCheckInfo: [
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '商户是否有独立营业执照'
+ },
+ {
+ key: 'storeName',
+ tipType: 1,
+ message: '门店名称'
+ },
+ {
+ key: 'actualCtl',
+ tipType: 1,
+ message: '门店管理员姓名'
+ },
+ {
+ key: 'actualCtlPhone',
+ tipType: 1,
+ message: '门店管理员手机号'
+ },
+ {
+ key: 'actualCtlIdCardNo',
+ tipType: 1,
+ message: '门店管理员身份证号'
+ },
+ ],
+ // 门店验证信息
+ mgrCheckInfo: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'staffIdcardNo',
+ tipType: 1,
+ message: '营业员身份证号'
+ },
+ ],
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.$api.getArea().then(res => {
+ this.addressList = res.body.provList;
+ });
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 获取地区列表
+ getArea({commit}) {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ commit(SET_AREA_LIST,{
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ })
+ }).catch((err) => {
+
+ });
+ },
+ // 设置地区code
+ setCitycode(val){
+ this.merInfo.provCode = val[0];
+ this.merInfo.cityCode = val[1];
+ },
+ goBackPage() {
+ if (this.step === 2 || this.step === 3) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.heydInitOpen;
+ fn().then(res => {
+ let body = res.body;
+ this.bankList = body.bankList;
+ this.cardTypeList = body.acctTypeList;
+ this.merRefList = body.acctEnpRelList;
+ for (let i in this.merInfo) {
+ if(Array.isArray(this.merInfo[i])){
+ this.merInfo[i] = body[i] ? body[i] : [];
+ console.log(i+":"+this.merInfo[i]);
+ }else{
+ this.merInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(body.cityCode){
+ this.address.push(body.provCode+'')
+ this.address.push(body.cityCode+'')
+ }
+ this.merInfo.merAddrText = this.merInfo.bizProvinceName +'-'+ this.merInfo.bizCityName +'-'+ this.merInfo.bizDistrictName;
+ if(this.merInfo.regProvinceName) {
+ this.merInfo.addrText = this.merInfo.regProvinceName + '-' + this.merInfo.regCityName + '-' + this.merInfo.regDistrictName;
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ console.log("step:"+this.step);
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ if(!formCheckAndComt.checkRequiredField(this.merCheckInfo,this.merInfo,this)){
+ return false;
+ }
+ this.step += 1;
+ }else if (this.step === 2) {
+ let rules = [
+ ]
+ // 对公时验证开户行行号
+ if(this.storeInfo.bizLicenseType ===2){
+ rules.push({
+ key: 'licenseNo',
+ tipType: 1,
+ message: '营业执照号'
+ });
+ rules.push({
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ });
+ rules.push({
+ key: 'storeProvinceCode',
+ tipType: 1,
+ message: '省份'
+ });
+ rules.push({
+ key: 'storeCityCode',
+ tipType: 1,
+ message: '市区'
+ });
+ rules.push({
+ key: 'storeDistrictCode',
+ tipType: 1,
+ message: '区域'
+ });
+ rules.push({
+ key: 'storeDetailAddr',
+ tipType: 1,
+ message: '门店详细地址'
+ });
+ rules.push({
+ key: 'legalName',
+ tipType: 1,
+ message: '法人姓名'
+ });
+ rules.push({
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区选择'
+ });
+ }
+ this.storeCheckInfo.push(...rules)
+ if(!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)){
+ return false;
+ }
+ this.step += 1;
+ }else if (this.step === 3) {
+ if(!formCheckAndComt.checkRequiredField(this.mgrCheckInfo,this.mgrReqVo,this)){
+ return false;
+ }
+ // 判断表单是否必填
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+
+ let submitInfo = {
+ ...this.merInfo,
+ openStoreInfo:{
+ ...this.storeInfo,
+ mgrReqVo:{...this.mgrReqVo}
+ },
+
+ };
+
+ let fn;
+ fn = this.$api.gzzjOpen; //海尔云贷接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/gzzj/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+.open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+}
+</style>
+
diff --git a/src/views/old/merchant/gzzj/merPictures.vue b/src/views/old/merchant/gzzj/merPictures.vue
new file mode 100644
index 0000000..cd14bde
--- /dev/null
+++ b/src/views/old/merchant/gzzj/merPictures.vue
@@ -0,0 +1,55 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="heyd-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'heydMerPicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .heyd-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 0 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/gzzj/mgrBaseInfo.vue b/src/views/old/merchant/gzzj/mgrBaseInfo.vue
new file mode 100644
index 0000000..f3455e7
--- /dev/null
+++ b/src/views/old/merchant/gzzj/mgrBaseInfo.vue
@@ -0,0 +1,79 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="mgrInfo.staffName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员身份证号' v-model.trim="mgrInfo.staffIdcardNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="mgrInfo.staffPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'gzzjMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ mgrInfo: {
+ type: Object
+ },
+ },
+ computed:{
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/gzzj/mgrOpen.vue b/src/views/old/merchant/gzzj/mgrOpen.vue
new file mode 100644
index 0000000..28d3379
--- /dev/null
+++ b/src/views/old/merchant/gzzj/mgrOpen.vue
@@ -0,0 +1,147 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通公众租机'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <mgr-info
+ v-show="step === 1"
+ :mgrInfo="mgrInfo"
+ >
+ </mgr-info>
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{'提交开通'}}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" >{{'提交开通'}}</van-button>
+ </div>
+</template>
+
+<script>
+ import MgrInfo from './mgrBaseInfo.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'gzzjMgrOpen',
+ components: {
+ MgrInfo,
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ mgrInfo: {
+ staffName: '',
+ staffPhone: '',
+ staffIdcardNo:'',
+ },
+ // 验证开户信息字段
+ mgrCheckInfo: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'staffIdcardNo',
+ tipType: 1,
+ message: '门店管理员身份证号'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 设置地区code
+
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 智享花增加这两个字段验证
+
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.mgrCheckInfo,this.mgrInfo,this)) {
+ return false;
+ }
+ } else {
+ this.handleSubmitOpen();
+ }
+ this.handleSubmitOpen();
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ let submitInfo = {
+ ...this.mgrInfo
+ };
+
+
+ let fn;
+ fn = this.$api.gzzjOpenMgr; //营业员开通接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/gzzj/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/gzzj/openResult.vue b/src/views/old/merchant/gzzj/openResult.vue
new file mode 100644
index 0000000..bad6df9
--- /dev/null
+++ b/src/views/old/merchant/gzzj/openResult.vue
@@ -0,0 +1,168 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 10:50:04
+ * @Description:
+ -->
+
+<template>
+ <div class="gjzj-result-page">
+ <x-header :title="'开通公众租机'" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="status-icon">
+ <i v-if="openStatus === 1"
+ class="iconfont scene_Staging-shenhezhong1"
+ style="color: #896EDB;"
+ ></i>
+ <i v-if="openStatus === 2"
+ class="iconfont scene_Staging-tijiaochenggong"
+ style="color: #19BE6B;"
+ ></i>
+ <i v-if="openStatus === 3"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ <i v-if="openStatus === 4"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ </div>
+ <div class="tips">
+ <p v-if="openStatus === 1">{{ statusType }}审批中</p>
+ <p v-if="openStatus === 2"> {{ statusType }}审批通过</p>
+ <p v-if="openStatus === 3"> {{ statusType}}审批失败</p>
+ <p v-if="openStatus === 4">冻结</p>
+ </div>
+ <van-button round @click="handleBack">{{ buttonText }}</van-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'add-account',
+ data() {
+ return {
+ // 0-待开通,1-审批中,2-审批通过,3-审批失败,4-冻结
+ openStatus: 0, // 开通状态
+ orgType:0,
+ buttonText: '返回', // 底部按钮文字
+ statusType: this.$route.query.statusType,
+ };
+ },
+ computed:{
+ },
+ methods: {
+ pageGoBack(){
+ if(this.orgType==3) {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }else if(this.orgType==4){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }else if(this.orgType==5){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ handleBack () {
+ // 如果是在开通中的话,那么底部有重新提交按钮
+ // 点击重新提交,那么用户可以重新填写资料
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ if (this.orgType == 3) {
+ this.$router.replace({
+ path: '/main/productManagement'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 4) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 5) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ } else if(this.openStatus == 3 || this.openStatus == 4){
+ if (this.orgType == 3) {
+ let query = {
+ typeId:'200017',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/gzzj/merOpen',
+ query
+ });
+ } else if (this.orgType == 4) {
+ let query = {
+ typeId:'200017',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/gzzj/storeOpen',
+ query
+ });
+ } else if (this.orgType == 5) {
+ let query = {
+ typeId:'200017',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/gzzj/mgrOpen',
+ query
+ });
+ }
+ }
+ },
+ },
+ created() {
+ console.log(this.statusType)
+ this.openStatus = Number(this.$route.query.openStatus);
+ this.orgType = Number(this.$route.query.orgType);
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ this.buttonText = '返回';
+ }else if(this.openStatus == 3 || this.openStatus == 4){
+ this.buttonText = '再次提交';
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .gjzj-result-page {
+ height: 100%;
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .status-icon {
+ padding-top: 20px;
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #BFA073;
+ }
+ .scene_Staging-shibai1 {
+ color: #F76260;
+ }
+ .tips {
+ color: #999;
+ font-size: 14px;
+ line-height: 1.6;
+ text-align: center;
+ }
+ }
+ .van-button {
+ width: 90%;
+ margin: 0 5%;
+ margin-top: 60px;
+ color: white !important;
+ background: #896edb;
+ }
+</style>
diff --git a/src/views/old/merchant/gzzj/storeBaseInfo.vue b/src/views/old/merchant/gzzj/storeBaseInfo.vue
new file mode 100644
index 0000000..24e124c
--- /dev/null
+++ b/src/views/old/merchant/gzzj/storeBaseInfo.vue
@@ -0,0 +1,176 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <selector title='商户是否有独立营业执照' placeholder='请选择' @on-change='handleLicenseTypeChange' v-model="storeInfo.bizLicenseType"
+ :options='bizLicenseTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='门店名称' v-model.trim="storeInfo.storeName" :max='50' placeholder='请输入' text-align='right'></x-input>
+ <x-input v-if="storeInfo.bizLicenseType===2" title='营业执照号' v-model.trim="storeInfo.licenseNo" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input v-if="storeInfo.bizLicenseType===2" title='营业执照名称' v-model.trim="storeInfo.orgName" :max='50' placeholder='请输入'
+ text-align='right'></x-input>
+ <van-field v-if="storeInfo.bizLicenseType===2" v-model.trim="storeInfo.addrText" clearable :readonly="true" right-icon="arrow" label="省市区"
+ @click="isShowArea = !isShowArea" text-align='right'/>
+ <x-input v-if="storeInfo.bizLicenseType===2" title='详细地址' v-model.trim="storeInfo.storeDetailAddr" placeholder='请输入' text-align='right'></x-input>
+ <x-input v-if="storeInfo.bizLicenseType===2" title='法人姓名' v-model.trim="storeInfo.legalName" :max='20' placeholder='请输入'
+ text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='门店管理员姓名' v-model.trim="storeInfo.actualCtl" :max='30' placeholder='请输入' text-align='right'></x-input>
+ <x-input title='门店管理员手机号' v-model.trim="storeInfo.actualCtlPhone" :max='11' placeholder='请输入' text-align='right'></x-input>
+ <x-input title='门店管理员身份证号' v-model.trim="storeInfo.actualCtlIdCardNo" :max='18' placeholder='请输入' text-align='right'></x-input>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'heydStoreBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ }
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ storeInfo: {
+ type: Object
+ },
+ bizLicenseTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ created() {
+ this.getArea();
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList);
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ console.log(this.areaList);
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.storeInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.storeProvinceCode = arr[0].code;
+ this.storeInfo.storeCityCode = arr[1].code;
+ this.storeInfo.storeDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ // 账号类型
+ handleLicenseTypeChange(val) {
+ let currentEle=JSON.parse(JSON.stringify(this.bizLicenseTypeList)).find(item=>item.code===val)
+ this.storeInfo.bizLicenseType = currentEle.code;
+ },
+ // 账号类型
+ handleLiChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.cardTypeList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.acctTypeName = currentEle.name;
+ },
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/gzzj/storeBaseMgrInfo.vue b/src/views/old/merchant/gzzj/storeBaseMgrInfo.vue
new file mode 100644
index 0000000..c29566b
--- /dev/null
+++ b/src/views/old/merchant/gzzj/storeBaseMgrInfo.vue
@@ -0,0 +1,87 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="mgrReqVo.staffName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员身份证号' v-model.trim="mgrReqVo.staffIdcardNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="mgrReqVo.staffPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'gzzjStoreMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ mgrReqVo: {
+ type: Object
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/gzzj/storeOpen.vue b/src/views/old/merchant/gzzj/storeOpen.vue
new file mode 100644
index 0000000..992fb0d
--- /dev/null
+++ b/src/views/old/merchant/gzzj/storeOpen.vue
@@ -0,0 +1,278 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通公众租机门店'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <store-info
+ v-show="step === 1"
+ :bizLicenseTypeList="bizLicenseTypeList"
+ :storeInfo="storeInfo"
+ >
+ </store-info>
+ <mgr-info
+ v-show="step === 2"
+ :mgrReqVo="mgrReqVo"
+ >
+ </mgr-info>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</van-button>
+ </div>
+</template>
+
+<script>
+ import StoreInfo from './storeBaseInfo.vue';
+ import MgrInfo from './storeBaseMgrInfo.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'gzzjStoreOpen',
+ components: {
+ StoreInfo,
+ MgrInfo
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ bizLicenseTypeList: [{
+ code: 1,
+ name: "无",
+ },
+ {
+ code: 2,
+ name: "有",
+ }
+ ],
+ storeInfo: {
+ bizLicenseType:'',
+ storeName:'',
+ licenseNo:'',
+ orgName:'',
+ storeDetailAddr:'',
+ legalName:'',
+ actualCtl:'',
+ actualCtlPhone:'',
+ actualCtlIdCardNo:'',
+ addrText:'',
+ storeProvinceCode:'',
+ storeCityCode:'',
+ storeDistrictCode:'',
+ },
+ mgrReqVo: {
+ staffName:'',
+ staffPhone:'',
+ staffIdcardNo:'',
+ },
+ // 门店验证信息
+ storeCheckInfo: [
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '商户是否有独立营业执照'
+ },
+ {
+ key: 'storeName',
+ tipType: 1,
+ message: '门店名称'
+ },
+ {
+ key: 'actualCtl',
+ tipType: 1,
+ message: '门店管理员姓名'
+ },
+ {
+ key: 'actualCtlPhone',
+ tipType: 1,
+ message: '门店管理员手机号'
+ },
+ {
+ key: 'actualCtlIdCardNo',
+ tipType: 1,
+ message: '门店管理员身份证号'
+ },
+ ],
+ // 门店验证信息
+ mgrCheckInfo: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'staffIdcardNo',
+ tipType: 1,
+ message: '营业员身份证号'
+ },
+ ],
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ goBackPage() {
+ if (this.step === 3 || this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.gzzjInitStore;
+ fn().then(res => {
+ let body = res.body;
+ if(body.mgrReqVo && body.mgrReqVo.staffName){
+ this.mgrReqVo = body.mgrReqVo;
+ }
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(this.storeInfo.storeProvinceCode) {
+ if(this.storeInfo.regProvinceName && this.storeInfo.regCityName && this.storeInfo.regDistrictName){
+ this.storeInfo.addrText = this.storeInfo.regProvinceName + '-' + this.storeInfo.regCityName + '-' + this.storeInfo.regDistrictName;
+ }
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ let rules = [
+ ]
+ // 对公时验证开户行行号
+ if(this.storeInfo.bizLicenseType ===2){
+ rules.push({
+ key: 'licenseNo',
+ tipType: 1,
+ message: '营业执照号'
+ });
+ rules.push({
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ });
+ rules.push({
+ key: 'storeProvinceCode',
+ tipType: 1,
+ message: '省份'
+ });
+ rules.push({
+ key: 'storeCityCode',
+ tipType: 1,
+ message: '市区'
+ });
+ rules.push({
+ key: 'storeDistrictCode',
+ tipType: 1,
+ message: '区域'
+ });
+ rules.push({
+ key: 'storeDetailAddr',
+ tipType: 1,
+ message: '门店详细地址'
+ });
+ rules.push({
+ key: 'legalName',
+ tipType: 1,
+ message: '法人姓名'
+ });
+ rules.push({
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区选择'
+ });
+ }
+ this.storeCheckInfo.push(...rules)
+ if(!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)){
+ return false;
+ }
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo, this.storeInfo, this)) {
+ return false;
+ }
+
+ this.step += 1;
+ } else if(this.step === 2){
+ if (!formCheckAndComt.checkRequiredField(this.mgrCheckInfo, this.mgrReqVo, this)) {
+ return false;
+ }
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ // 处理提交
+ let submitInfo = {
+ ...this.merInfo,
+ ...this.storeInfo,
+ mgrReqVo:{...this.mgrReqVo}
+ };
+
+ let fn;
+ fn = this.$api.gzzjOpenStore; //海尔云贷接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/gzzj/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/gzzj/storePictures.vue b/src/views/old/merchant/gzzj/storePictures.vue
new file mode 100644
index 0000000..2158f79
--- /dev/null
+++ b/src/views/old/merchant/gzzj/storePictures.vue
@@ -0,0 +1,114 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="heyd-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div v-if="storeInfo.bizLicenseType == 2">
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :showNum="2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传门头照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(需要体现运营商logo、门店名称、门牌号)</p>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :showNum="1"
+ :title="''"
+ :picList="storeInfo.storeHeadPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传店内照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(至少从4个角度拍摄全景体现店铺面积和主要业务区域,至少包括合约分期业务受理区(若有运营商logo背景,则包含在内)手机终端柜台))</p>
+ </div>
+ <UploadFile
+ :fileType="4"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="4"
+ :picList="storeInfo.storeInPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传周边照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(门店外部街景、左右各一张,展示左右至少各一间门店)</p>
+ </div>
+ <UploadFile
+ :fileType="3"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="3"
+ :picList="storeInfo.storeAroundPhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">授权牌</span><span style="font-size: 13px;color: #FF6666"></span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.authorizedBrand"></UploadFile>
+ <div>
+ <span style="font-size: 15px">联通系统截图</span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.sysScreenShot"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'heydStorePicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ // + 6的是海尔云贷的上传
+ filetype:{
+ type:Number,
+ default:0
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .legal-card-title {
+ padding: 10px 0;
+ font-size: 13px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+ .heyd-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 10px 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/hb-product.vue b/src/views/old/merchant/hb-product.vue
new file mode 100644
index 0000000..dacc2bc
--- /dev/null
+++ b/src/views/old/merchant/hb-product.vue
@@ -0,0 +1,154 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-04-07 09:40:03
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-28 11:21:56
+ * @Description: 产品管理花呗业务页面
+ -->
+<template>
+ <div class="hb-product-box">
+ <van-nav-bar title="产品管理" left-text="返回" left-arrow @click-left="onClickLeft" fixed style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="info-box">
+ <div class="info" v-for="(item,i) in productList" :key="i" @click="goNext(item)">
+ <img :src="item.icon" alt="">
+ <p>{{item.typeName}}</p>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import { NavBar } from 'vant';
+
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ productList:[],
+ openStatus:'',
+ }
+ },
+ created(){
+
+ if(this.$route.query.openStatus || this.$route.query.openStatus==0){
+ window.sessionStorage.openStatus = this.$route.query.openStatus
+ }
+
+ this.$api.prodHbProd().then(res=>{
+ this.productList = res.body
+ })
+ },
+ methods:{
+ onClickLeft() {
+ this.$router.push('/main/productManagement');
+ },
+ goNext(item){
+ var path = '',
+ title = '';
+
+ var {typeId,prodId} = item
+ var query = {
+ typeId,
+ prodId,
+ zfbVersion:this.$route.query.zfbVersion,
+ };
+
+ if(typeId==='200010'){
+ switch(Number(window.sessionStorage.openStatus)){
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ path = '/shtx/staging';
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ title = '商户贴息'
+ }
+ if(typeId==='200009'){
+ switch (Number(window.sessionStorage.openStatus)) {
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ path = '/huabei/staging';
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ title = '商品消费'
+ }
+ if (typeId === '200002' || typeId === '200008') {
+ switch (Number(window.sessionStorage.openStatus)) {
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ if(typeId=='200008'){
+ path = '/huabei/staging_dmf';
+ }else{
+ path = '/huabei/staging';
+ }
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ if(typeId==='200002'){
+ title = '用户付息';
+ }else{
+ title = '商户收款';
+ }
+ }
+ this.$router.push({
+ path:path,
+ query:{
+ title:title,
+ ...query
+ }
+ })
+ }
+ },
+}
+</script>
+<style lang="less" scoped>
+ .hb-product-box{
+ background: #F5F5F7;
+ min-height: 100vh;
+ padding-top: 56px;
+ .info-box{
+ background: #fff;
+ width: 96%;
+ margin-left: 2%;
+ padding-bottom: 23px;
+ border-radius:3px;
+ .info{
+ text-align: center;
+ width: 49%;
+ display: inline-block;
+ margin-top: 23px;
+ img{
+ width: 36px;
+ height: 36px;
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/heyd/merBaseInfo.vue b/src/views/old/merchant/heyd/merBaseInfo.vue
new file mode 100644
index 0000000..8ae33cf
--- /dev/null
+++ b/src/views/old/merchant/heyd/merBaseInfo.vue
@@ -0,0 +1,267 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='营业执照号' v-model.trim="storeInfo.licenseNo" readonly text-align='right'></x-input>
+ <x-input title='营业执照名称' v-model.trim="storeInfo.orgName" placeholder='请输入' :max='50' text-align='right'></x-input>
+ <datetime v-model="storeInfo.issueDate" format="YYYY-MM-DD" title="注册日期" placeholder="请选择"></datetime>
+ </group>
+ <group>
+ <van-field v-model.trim="storeInfo.addrText" clearable :readonly="true" right-icon="arrow" label="注册省市区" placeholder=" 请选择"
+ @click="isShowArea = !isShowArea" text-align='right'/>
+ <x-input title='注册详细地址' v-model.trim="storeInfo.regDetailAddr" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='渠道编码' v-model.trim="storeInfo.outMerchantNo" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='渠道名称' v-model.trim="storeInfo.merchantName" placeholder='请输入' :max='100' text-align='right'></x-input>
+ </group>
+
+ <f-space></f-space>
+ <group>
+ <x-input title='法人名称' v-model.trim="storeInfo.legalName" readonly text-align='right'></x-input>
+ <x-input title='法人身份证号' v-model.trim="storeInfo.legalIdCardNo" readonly text-align='right'></x-input>
+ <x-input title='法人身份证地址' v-model.trim="storeInfo.legalIdCardAddress" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人手机号' v-model.trim="storeInfo.legalPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='联系人姓名' v-model.trim="storeInfo.contactName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='联系人手机号' v-model.trim="storeInfo.contactPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ <x-input title='联系人邮箱' v-model="storeInfo.contactEmail" text-align='right' max="50" placeholder="请输入"></x-input>
+ <selector title='与企业关系' placeholder='请选择' @on-change='handleCusRefChange' v-model="storeInfo.objContactReal"
+ :options='merRefList' :value-map="['code','name']" direction='rtl'></selector>
+ </group>
+ <f-space></f-space>
+ <group>
+ <van-field v-model.trim="storeInfo.merAddrText" clearable :readonly="true" right-icon="arrow" label="经营省市区"
+ @click="isShowMerArea = !isShowMerArea" text-align='right'/>
+ <x-input title='经营详细地址' v-model.trim="storeInfo.bizDetailAddr" placeholder='请输入' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <selector title='商户账号类型' placeholder='请选择' @on-change='handleCardTypeChange' v-model="storeInfo.acctType"
+ :options='cardTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='商户账户名称' v-model.trim="storeInfo.acctName" placeholder='请输入' text-align='right' />
+ <selector title='商户银行名称' placeholder='请选择' @on-change='handleBankChange' v-model="storeInfo.acctBankname"
+ :options='bankList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='商户银行账号' v-model.trim="storeInfo.acctNo" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input v-if="storeInfo.acctType===1" title='商户开户支行名称' v-model.trim="storeInfo.acctOpenBankname" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input v-if="storeInfo.acctType===1" title='开户行行号' v-model.trim="storeInfo.acctCnaps" :max='20' placeholder='请输入'
+ text-align='right'></x-input>
+ <selector v-if="storeInfo.acctType===2" title='账户企业关系' placeholder='请选择' @on-change='handleMerRefChange' v-model="storeInfo.acctEnpRel"
+ :options='merRefList' :value-map="['code','name']" direction='rtl'></selector>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ <van-popup v-model="isShowMerArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeMerAreaModal" @confirm="setMerAreaValue"></van-area>
+ </van-popup>
+ </div>
+
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress,
+ } from 'vux';
+ export default {
+ name: 'heydMerBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ merValue:'',
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ },
+ merAreaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ }
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ isShowMerArea: {
+ type: Boolean,
+ default: false
+ },
+ storeInfo: {
+ type: Object,
+ },
+ // 银行列表
+ bankList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ cardTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ merRefList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ getMerArea() {
+ this.merAreaList = this.areaList;
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //关闭地区弹窗
+ closeMerAreaModal() {
+ this.isShowMerArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.storeInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.regProvinceCode = arr[0].code;
+ this.storeInfo.regCityCode = arr[1].code;
+ this.storeInfo.regDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //经营地保存地区选择
+ setMerAreaValue(arr) {
+ this.storeInfo.merAddrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.bizProvinceCode = arr[0].code;
+ this.storeInfo.bizProvinceName = arr[0].name;
+ this.storeInfo.bizCityCode = arr[1].code;
+ this.storeInfo.bizCityName = arr[1].name;
+ this.storeInfo.bizDistrictCode = arr[2].code;
+ this.storeInfo.bizDistrictName = arr[2].name;
+ this.isShowMerArea = false;
+ this.$refs.Area.reset()
+ },
+ // 处理银行名称的改变
+ handleBankChange(val) {
+ let currentEle = this.bankList.find(item => {
+ return item.code === val;
+ })
+ },
+ // 账号类型
+ handleCardTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.cardTypeList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.acctTypeName = currentEle.name;
+ },
+ // 商户与账户关系
+ handleMerRefChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.merRefList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.acctEnpRelName = currentEle.name;
+ },
+ // 商户与账户关系
+ handleCusRefChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.merRefList)).find((item) => {
+ return item.code = val;
+ });
+ }
+ },
+ created() {
+ this.getArea();
+ this.getMerArea();
+ this.merAddrValue = this.merAddrText;
+ },
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/heyd/merOpen.vue b/src/views/old/merchant/heyd/merOpen.vue
new file mode 100644
index 0000000..d66efff
--- /dev/null
+++ b/src/views/old/merchant/heyd/merOpen.vue
@@ -0,0 +1,413 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通智享花'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :cardTypeList="cardTypeList"
+ :merRefList="merRefList"
+ :bankList="bankList"
+ :address="address"
+ :addressList="addressList"
+ :storeInfo="storeInfo"
+ @addr-change="setCitycode"
+ >
+ </base-info>
+ <!-- 海尔云贷的文件上传type + 6 -->
+ <mer-pictures v-show="step === 2" :storeInfo="storeInfo" :filetype="9" ></mer-pictures>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <f-button @on-click="handleNextStep" fixed>{{ step === 1 ? '下一步' : '提交开通' }}</f-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './merBaseInfo.vue';
+ import MerPictures from './merPictures.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+ import {calcArea} from '@/utils/index';
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'heydMerOpen',
+ components: {
+ BaseInfo,
+ MerPictures
+ },
+ data() {
+ return {
+ orgType: 0,
+ step: 1,
+ stepText: '下一步',
+ bankList: [],
+ cardTypeList: [],
+ merRefList:[],
+ addressList:[],
+ address:[],
+ storeInfo: {
+ merName: '',
+ legalPhone:'',
+ merAddrText:'',
+ contactPhone:'',
+ contactName:'',
+ acctBankname:'',
+ orgName:'',
+ legalIdCardAddress:'',
+ issueDate:'',
+ regDetailAddr:'',
+ addr:{},
+ isShowArea:false,
+ regCityCode:'',
+ regCityName:'',
+ regDistrictCode:'',
+ regDistrictName:'',
+ regProvinceCode:'',
+ regProvinceName:'',
+ contactEmail:'',
+ addrText:'',
+ bizProvinceCode:'',
+ bizProvinceName:'',
+ bizCityCode:'',
+ bizCityName:'',
+ bizDistrictCode:'',
+ bizDistrictName:'',
+ acctOpenBankname:'',
+ provCode:'',//省code
+ cityCode:'',//市code
+ bankNo:'',//开户行行号
+ legalIdCardNo:'',
+ bizDetailAddr:'',
+ licenseNo: '',
+ acctCnaps: '',
+ merAddr: '',
+ merDtlAddr: '',
+ merArea: '',
+ foundDate: '',
+ legalName: '',
+ legalIdNo: '',
+ legalMblNo: '',
+ legalHomeAddr: '',
+ outMerchantNo: '',
+ merchantName: '',
+ acctName: '', // 户名
+ acctNo: '', // 银行卡号
+ acctType: '', // 账号类型code
+ acctEnpRel:'',//账户企业关系
+ acctEnpRelName:'',//账户企业关系
+ acctTypeName: '', // 账号类型name
+ objContactReal: '',//联系人与企业关系
+ licencePhotos: [], // 营业执照
+ legalCardPhotos: [], // 法人身份证
+ legalCardPhotosF: [], //法人身份证反面
+ legalCardPhotosZ: [], //法人身份证正面
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ },
+ {
+ key: 'legalPhone',
+ tipType: 1,
+ message: '法人手机号'
+ },
+ {
+ key: 'acctBankname',
+ tipType: 2,
+ message: '银行名称'
+ },
+ {
+ key: 'acctName',
+ tipType: 1,
+ message: '账户名称'
+ },
+ {
+ key: 'acctType',
+ tipType: 2,
+ message: '账号类型'
+ },
+ {
+ key: 'contactEmail',
+ tipType: 1,
+ type:"isEmail",
+ message: '联系人邮箱'
+ },
+ {
+ key: 'contactName',
+ tipType: 1,
+ message: '联系人手机号'
+ },
+ {
+ key: 'contactPhone',
+ tipType: 1,
+ message: '联系人姓名'
+ },
+ {
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区'
+ },
+ {
+ key: 'legalIdCardAddress',
+ tipType: 1,
+ message: '法人身份证地址'
+ },
+ {
+ key: 'regDetailAddr',
+ tipType: 1,
+ message: '注册详细地址'
+ },
+ {
+ key: 'issueDate',
+ tipType: 2,
+ message: '注册日期'
+ },
+ {
+ key: 'merchantName',
+ tipType: 1,
+ message: '渠道名称'
+ },
+ {
+ key: 'outMerchantNo',
+ tipType: 1,
+ message: '渠道编码'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.$api.getArea().then(res => {
+ this.addressList = res.body.provList;
+ });
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 获取地区列表
+ getArea({commit}) {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ commit(SET_AREA_LIST,{
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ })
+ }).catch((err) => {
+
+ });
+ },
+ // 设置地区code
+ setCitycode(val){
+ this.storeInfo.provCode = val[0];
+ this.storeInfo.cityCode = val[1];
+ this.address = val;
+ },
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.heydInitOpen;
+ fn().then(res => {
+ let body = res.body;
+ this.bankList = body.bankList;
+ this.cardTypeList = body.acctTypeList;
+ this.merRefList = body.acctEnpRelList;
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ console.log(i+":"+this.storeInfo[i]);
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(body.cityCode){
+ this.address.push(body.provCode+'')
+ this.address.push(body.cityCode+'')
+ }
+ this.storeInfo.merAddrText = this.storeInfo.bizProvinceName +'-'+ this.storeInfo.bizCityName +'-'+ this.storeInfo.bizDistrictName;
+ if(this.storeInfo.regProvinceName) {
+ this.storeInfo.addrText = this.storeInfo.regProvinceName + '-' + this.storeInfo.regCityName + '-' + this.storeInfo.regDistrictName;
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos.length) {
+ let fileId = this.storeInfo.licencePhotos[0];
+ this.storeInfo.licencePhotos = [];
+ this.storeInfo.licencePhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.legalCardPhotosZ && this.storeInfo.legalCardPhotosZ.length) {
+ let fileIdZ = this.storeInfo.legalCardPhotosZ[0];
+ let fileIdF = this.storeInfo.legalCardPhotosF[0];
+ this.storeInfo.legalCardPhotos = [];
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdZ,
+ fileUrl: '/'+fileIdZ
+ });
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdF,
+ fileUrl: '/'+fileIdF
+ });
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 智享花增加这两个字段验证
+ let rules = [
+ ]
+ // 对公时验证开户行行号
+ if(this.storeInfo.acctType ===1){
+ rules.push({
+ key: 'acctOpenBankname',
+ tipType: 1,
+ message: '开户支行名称'
+ });
+ rules.push({
+ key: 'acctCnaps',
+ tipType: 1,
+ message: '开户行行号'
+ });
+ rules.push({
+ key: 'acctNo',
+ tipType: 1,
+ message: '银行账号'
+ });
+ }
+ // 对私时验证账户企业关系
+ if(this.storeInfo.acctType ===2){
+ rules.push({
+ key: 'acctEnpRel',
+ tipType: 2,
+ message: '账户企业关系'
+ });
+ rules.push({
+ key: 'acctNo',
+ tipType: 1,
+ type:"bankCardNo",
+ message: '银行账号'
+ });
+ }
+ this.storeCheckInfo.push(...rules)
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)) {
+ return false;
+ }
+ this.step += 1;
+ } else {
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+
+ // 需要判断图片的字段
+ let checkPicList = [{
+ checkField: 'licencePhotos',
+ msg: '营业执照照片'
+ },
+ {
+ checkField: 'legalCardPhotos',
+ msg: '法人身份证正反面照片'
+ },
+ ];
+ // 判断图片是否上传
+ for (let item of checkPicList) {
+ if (!(this.storeInfo[item.checkField] instanceof Array &&
+ this.storeInfo[item.checkField].length)) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if (item.checkField == 'legalCardPhotos' && this.storeInfo[item.checkField].length < 2){
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+
+ // 由于后端初始化返回的图片字段{url: xx, id: 121}, 而此时在提交的时候,我们
+ // 提交图片字段为[id1, id2], 为id的列表
+ this.storeInfo.legalCardPhotosF = [];
+ this.storeInfo.legalCardPhotosZ = [];
+ let picIdList = {
+ licencePhotos: [],
+ legalCardPhotosF: [],
+ legalCardPhotosZ: [],
+ };
+ picIdList.legalCardPhotosF.push(this.storeInfo.legalCardPhotos[0].fileId);
+ picIdList.legalCardPhotosZ.push(this.storeInfo.legalCardPhotos[1].fileId);
+ for (let i in picIdList) {
+ if (this.storeInfo[i] instanceof Array &&
+ this.storeInfo[i].length) {
+ // 后端图片初始文件id为id.而控件上传id为fieldId,这里需要兼容处理一下
+ this.storeInfo[i].forEach((item) => {
+ item.fileId ? picIdList[i].push(item.fileId) :
+ picIdList[i].push(item.id)
+ });
+ }
+ }
+
+ let submitInfo = {
+ ...this.storeInfo,
+ ...picIdList
+ };
+
+ let fn;
+ // 对私时开户行行号不传值
+ if(this.storeInfo.acctType === 2){
+ submitInfo.acctOpenBankname = '';
+ submitInfo.acctCnaps = '';
+ }
+ if(this.storeInfo.acctType === 1){
+ submitInfo.acctEnpRel = '';
+ }
+ fn = this.$api.heydOpen; //海尔云贷接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/heyd/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+.open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+}
+</style>
+
diff --git a/src/views/old/merchant/heyd/merPictures.vue b/src/views/old/merchant/heyd/merPictures.vue
new file mode 100644
index 0000000..cd14bde
--- /dev/null
+++ b/src/views/old/merchant/heyd/merPictures.vue
@@ -0,0 +1,55 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="heyd-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'heydMerPicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .heyd-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 0 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/heyd/mgrBaseInfo.vue b/src/views/old/merchant/heyd/mgrBaseInfo.vue
new file mode 100644
index 0000000..73b8332
--- /dev/null
+++ b/src/views/old/merchant/heyd/mgrBaseInfo.vue
@@ -0,0 +1,79 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="storeInfo.staffName" placeholder='请输入营业员姓名' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="storeInfo.staffPhone" placeholder='请输入营业员电话' :max='11' text-align='right'></x-input>
+ <x-input title='营业员职务' v-model.trim="storeInfo.post" placeholder='请输入营业员职务' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'heydMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object
+ },
+ },
+ computed:{
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/heyd/mgrOpen.vue b/src/views/old/merchant/heyd/mgrOpen.vue
new file mode 100644
index 0000000..bbfd1fd
--- /dev/null
+++ b/src/views/old/merchant/heyd/mgrOpen.vue
@@ -0,0 +1,154 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通智享花'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :storeInfo="storeInfo"
+ >
+ </base-info>
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{'提交开通'}}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" >{{'提交开通'}}</van-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './mgrBaseInfo.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'heydMgrOpen',
+ components: {
+ BaseInfo,
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ storeInfo: {
+ staffName: '',
+ staffPhone: '',
+ post:'',
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'post',
+ tipType: 1,
+ message: '营业员岗位'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 设置地区code
+
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.heydInitMgr;
+ fn().then(res => {
+ let body = res.body;
+ for (let i in this.storeInfo) {
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 智享花增加这两个字段验证
+
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)) {
+ return false;
+ }
+ } else {
+ this.handleSubmitOpen();
+ }
+ this.handleSubmitOpen();
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ let submitInfo = {
+ ...this.storeInfo
+ };
+
+
+ let fn;
+ fn = this.$api.heydOpenMgr; //营业员开通接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/heyd/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/heyd/openResult.vue b/src/views/old/merchant/heyd/openResult.vue
new file mode 100644
index 0000000..4adfc0b
--- /dev/null
+++ b/src/views/old/merchant/heyd/openResult.vue
@@ -0,0 +1,168 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 10:50:04
+ * @Description:
+ -->
+
+<template>
+ <div class="gjzj-result-page">
+ <x-header :title="'开通智享花'" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="status-icon">
+ <i v-if="openStatus === 1"
+ class="iconfont scene_Staging-shenhezhong1"
+ style="color: #896EDB;"
+ ></i>
+ <i v-if="openStatus === 2"
+ class="iconfont scene_Staging-tijiaochenggong"
+ style="color: #19BE6B;"
+ ></i>
+ <i v-if="openStatus === 3"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ <i v-if="openStatus === 4"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ </div>
+ <div class="tips">
+ <p v-if="openStatus === 1">{{ statusType }}审批中</p>
+ <p v-if="openStatus === 2"> {{ statusType }}审批通过</p>
+ <p v-if="openStatus === 3"> {{ statusType}}审批失败</p>
+ <p v-if="openStatus === 4">冻结</p>
+ </div>
+ <van-button round @click="handleBack">{{ buttonText }}</van-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'add-account',
+ data() {
+ return {
+ // 0-待开通,1-审批中,2-审批通过,3-审批失败,4-冻结
+ openStatus: 0, // 开通状态
+ orgType:0,
+ buttonText: '返回', // 底部按钮文字
+ statusType: this.$route.query.statusType,
+ };
+ },
+ computed:{
+ },
+ methods: {
+ pageGoBack(){
+ if(this.orgType==3) {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }else if(this.orgType==4){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }else if(this.orgType==5){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ handleBack () {
+ // 如果是在开通中的话,那么底部有重新提交按钮
+ // 点击重新提交,那么用户可以重新填写资料
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ if (this.orgType == 3) {
+ this.$router.replace({
+ path: '/main/productManagement'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 4) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 5) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ } else if(this.openStatus == 3 || this.openStatus == 4){
+ if (this.orgType == 3) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/heyd/merOpen',
+ query
+ });
+ } else if (this.orgType == 4) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/heyd/storeOpen',
+ query
+ });
+ } else if (this.orgType == 5) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/heyd/mgrOpen',
+ query
+ });
+ }
+ }
+ },
+ },
+ created() {
+ console.log(this.statusType)
+ this.openStatus = Number(this.$route.query.openStatus);
+ this.orgType = Number(this.$route.query.orgType);
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ this.buttonText = '返回';
+ }else if(this.openStatus == 3 || this.openStatus == 4){
+ this.buttonText = '再次提交';
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .gjzj-result-page {
+ height: 100%;
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .status-icon {
+ padding-top: 20px;
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #BFA073;
+ }
+ .scene_Staging-shibai1 {
+ color: #F76260;
+ }
+ .tips {
+ color: #999;
+ font-size: 14px;
+ line-height: 1.6;
+ text-align: center;
+ }
+ }
+ .van-button {
+ width: 90%;
+ margin: 0 5%;
+ margin-top: 60px;
+ color: white !important;
+ background: #896edb;
+ }
+</style>
diff --git a/src/views/old/merchant/heyd/storeBaseInfo.vue b/src/views/old/merchant/heyd/storeBaseInfo.vue
new file mode 100644
index 0000000..b9f44a9
--- /dev/null
+++ b/src/views/old/merchant/heyd/storeBaseInfo.vue
@@ -0,0 +1,179 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='门店名称' v-model.trim="storeInfo.storeName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在省' v-model.trim="storeInfo.storeProvinceName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在市' v-model.trim="storeInfo.storeCityName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在区' v-model.trim="storeInfo.storeDistrictName" readonly text-align='right'></x-input>
+ <x-input title='经营详细地址' v-model.trim="storeInfo.storeDetailAddr" readonly placeholder='请输入' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <selector title='营业执照类型' placeholder='请选择' @on-change='handleLicenseTypeChange' v-model="storeInfo.bizLicenseType"
+ :options='bizLicenseTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='营业执照号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.licenseNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业执照名称' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.orgName" placeholder='请输入' :max='50' text-align='right'></x-input>
+ <datetime v-if="storeInfo.bizLicenseType ===2" v-model="storeInfo.issueDate" format="YYYY-MM-DD" title="注册日期" placeholder="请选择"></datetime>
+ </group>
+ <group>
+ <van-field v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.addrText" clearable :readonly="true" right-icon="arrow" label="注册省市区"
+ @click="isShowArea = !isShowArea" placeholder=" 请选择" text-align='right'/>
+ <x-input title='注册详细地址' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.regDetailAddr" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='营业厅编码' v-model.trim="storeInfo.outStoreNo" placeholder='请输入' :max='100' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='法人名称' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人身份证号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalIdCardNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人身份证地址' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalIdCardAddress" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人手机号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'heydStoreBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ }
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ storeInfo: {
+ type: Object
+ },
+ bizLicenseTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ created() {
+ this.getArea();
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList);
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ console.log(this.areaList);
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.storeInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.regProvinceCode = arr[0].code;
+ this.storeInfo.regCityCode = arr[1].code;
+ this.storeInfo.regDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ // 账号类型
+ handleLicenseTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.bizLicenseTypeList)).find((item) => {
+ return item.code = val;
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/heyd/storeBaseMgrInfo.vue b/src/views/old/merchant/heyd/storeBaseMgrInfo.vue
new file mode 100644
index 0000000..d661e5e
--- /dev/null
+++ b/src/views/old/merchant/heyd/storeBaseMgrInfo.vue
@@ -0,0 +1,87 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="mgrReqVo.staffName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="mgrReqVo.staffPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ <x-input title='营业员职务' v-model.trim="mgrReqVo.post" placeholder='请输入' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'heydStoreMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ mgrReqVo: {
+ type: Object
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/heyd/storeOpen.vue b/src/views/old/merchant/heyd/storeOpen.vue
new file mode 100644
index 0000000..a766639
--- /dev/null
+++ b/src/views/old/merchant/heyd/storeOpen.vue
@@ -0,0 +1,459 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-heyd-index">
+ <x-header :title="'开通智享花'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :bizLicenseTypeList="bizLicenseTypeList"
+ :storeInfo="storeInfo"
+ >
+ </base-info>
+ <mgr-info
+ v-show="step === 2"
+ :mgrReqVo="mgrReqVo"
+ >
+ </mgr-info>
+ <!-- 海尔云贷的文件上传type + 6 -->
+ <store-pictures v-show="step === 3" :storeInfo="storeInfo" :filetype="9" ></store-pictures>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</van-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './storeBaseInfo.vue';
+ import MgrInfo from './storeBaseMgrInfo.vue';
+ import StorePictures from './storePictures.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'heydStoreOpen',
+ components: {
+ BaseInfo,
+ StorePictures,
+ MgrInfo
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ bizLicenseTypeList: [],
+ mgrReqVo: {
+ staffName:'',
+ staffPhone:'',
+ post:'',
+ },
+ storeInfo: {
+ legalIdCardAddress:'',
+ issueDate:'',
+ regDetailAddr:'',
+ addr:{},
+ isShowArea:false,
+ regCityCode:'',
+ regDistrictCode:'',
+ regProvinceCode:'',
+ storeName: '',
+ outStoreNo:'',
+ storeProvinceCode:'',
+ storeProvinceName:'',
+ storeCityCode:'',
+ storeCityName:'',
+ storeDistrictCode:'',
+ storeDistrictName:'',
+ storeDetailAddr:'',
+ bizLicenseType:'',
+ licenseNo:'',
+ orgName:'',
+ addrText:'',
+ legalCardPhotosF: [], //法人身份证反面
+ legalCardPhotosZ: [], //法人身份证正面
+ legalIdCardNo:'',//省code
+ legalPhone:'',//市code
+ legalName:'',
+ licencePhotos:[], // 营业执照照片
+ legalCardPhotos: [], // 法人身份证
+ storeHeadPhotos: [], // 门店图片
+ storeInPhotos: [], // 店内图片
+ storeAroundPhotos: [], // 门店周边图片
+ authorizedBrand: [], // 授权牌
+ sysScreenShot: [], //联通系统截图
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'legalPhone',
+ tipType: 1,
+ message: '法人手机号'
+ },
+ {
+ key: 'legalIdCardNo',
+ tipType: 1,
+ message: '法人身份证'
+ },
+ {
+ key: 'legalName',
+ tipType: 2,
+ message: '法人名称'
+ },
+ {
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ },
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '营业执照类型'
+ },
+ {
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区'
+ },
+ {
+ key: 'legalIdCardAddress',
+ tipType: 1,
+ message: '法人身份证地址'
+ },
+ {
+ key: 'regDetailAddr',
+ tipType: 1,
+ message: '注册详细地址'
+ },
+ {
+ key: 'issueDate',
+ tipType: 2,
+ message: '注册日期'
+ },
+ {
+ key: 'outStoreNo',
+ tipType: 1,
+ message: '营业厅编码'
+ },
+ ],// 验证开户信息字段
+ storeCheckInfoForBizType: [
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '营业执照类型'
+ },
+ ],
+ storeCheckInfoForStaff: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'post',
+ tipType: 1,
+ message: '营业员职务'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ goBackPage() {
+ if (this.step === 3 || this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.heydInitStore;
+ fn().then(res => {
+ let body = res.body;
+ this.bizLicenseTypeList = body.bizLicenseTypeList;
+ if(body.mgrReqVo && body.mgrReqVo.staffName){
+ this.mgrReqVo = body.mgrReqVo;
+ }
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(this.storeInfo.storeProvinceCode) {
+ if(this.storeInfo.regProvinceName && this.storeInfo.regCityName && this.storeInfo.regDistrictName){
+ this.storeInfo.addrText = this.storeInfo.regProvinceName + '-' + this.storeInfo.regCityName + '-' + this.storeInfo.regDistrictName;
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos !== []) {
+ this.storeInfo.bizLicenseType = 2;
+ } else {
+ this.storeInfo.bizLicenseType = 3;
+ }
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos.length) {
+ let fileId = this.storeInfo.licencePhotos[0];
+ this.storeInfo.licencePhotos = [];
+ this.storeInfo.licencePhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.legalCardPhotosZ && this.storeInfo.legalCardPhotosZ.length) {
+ let fileIdZ = this.storeInfo.legalCardPhotosZ[0];
+ let fileIdF = this.storeInfo.legalCardPhotosF[0];
+ this.storeInfo.legalCardPhotos = [];
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdZ,
+ fileUrl: '/'+fileIdZ
+ });
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdF,
+ fileUrl: '/'+fileIdF
+ });
+ }
+ if (this.storeInfo.storeAroundPhotos && this.storeInfo.storeAroundPhotos.length) {
+ let storeAroundPhotosNew = [];
+ for (let i in this.storeInfo.storeAroundPhotos) {
+ let fileId = this.storeInfo.storeAroundPhotos[i];
+ storeAroundPhotosNew.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ this.storeInfo.storeAroundPhotos = storeAroundPhotosNew;
+ }
+ if (this.storeInfo.storeHeadPhotos && this.storeInfo.storeHeadPhotos.length) {
+ let fileId = this.storeInfo.storeHeadPhotos[0];
+ this.storeInfo.storeHeadPhotos = [];
+ this.storeInfo.storeHeadPhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.storeInPhotos && this.storeInfo.storeInPhotos.length) {
+ let storeInPhotosNew = [];
+ for (let i in this.storeInfo.storeInPhotos) {
+ let fileId = this.storeInfo.storeInPhotos[i];
+ storeInPhotosNew.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ this.storeInfo.storeInPhotos = storeInPhotosNew;
+ }
+ if (this.storeInfo.authorizedBrand && this.storeInfo.authorizedBrand.length) {
+ let fileId = this.storeInfo.authorizedBrand[0];
+ this.storeInfo.authorizedBrand = [];
+ this.storeInfo.authorizedBrand.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.sysScreenShot && this.storeInfo.sysScreenShot.length) {
+ let fileId = this.storeInfo.sysScreenShot[0];
+ this.storeInfo.sysScreenShot = [];
+ this.storeInfo.sysScreenShot.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 判断表单是否必填
+ if(this.storeInfo.bizLicenseType === 2) {
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo, this.storeInfo, this)) {
+ return false;
+ }
+ }else{
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfoForBizType, this.storeInfo, this)) {
+ return false;
+ }
+ }
+ this.step += 1;
+ } else if(this.step === 2){
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfoForStaff, this.mgrReqVo, this)) {
+ return false;
+ }
+ this.step += 1;
+ } else {
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ let checkPicList = [];
+ if(this.storeInfo.bizLicenseType === 2) {
+ // 需要判断图片的字段
+ checkPicList = [{
+ checkField: 'licencePhotos',
+ msg: '营业执照照片'
+ },
+ {
+ checkField: 'legalCardPhotos',
+ msg: '法人身份证正反面照片'
+ },
+ {
+ checkField: 'storeHeadPhotos',
+ msg: '门头照片'
+ },
+ {
+ checkField: 'storeInPhotos',
+ msg: '店内照片'
+ },
+ {
+ checkField: 'storeAroundPhotos',
+ msg: '周边照片'
+ },
+ ];
+ }else{
+ checkPicList = [
+ {
+ checkField: 'storeHeadPhotos',
+ msg: '门头照片'
+ },
+ {
+ checkField: 'storeInPhotos',
+ msg: '店内照片'
+ },
+ {
+ checkField: 'storeAroundPhotos',
+ msg: '周边照片'
+ },
+ ];
+ }
+ // 判断图片是否上传
+ for (let item of checkPicList) {
+ if (!(this.storeInfo[item.checkField] instanceof Array &&
+ this.storeInfo[item.checkField].length)) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if(this.storeInfo.bizLicenseType === 2) {
+ if (item.checkField == 'legalCardPhotos' && this.storeInfo[item.checkField].length < 2) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+ if (item.checkField == 'storeInPhotos' && this.storeInfo[item.checkField].length < 4){
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if (item.checkField == 'storeAroundPhotos' && this.storeInfo[item.checkField].length < 3){
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+
+ // 由于后端初始化返回的图片字段{url: xx, id: 121}, 而此时在提交的时候,我们
+ // 提交图片字段为[id1, id2], 为id的列表
+ let picIdList = {};
+ this.storeInfo.legalCardPhotosF = [];
+ this.storeInfo.legalCardPhotosZ = [];
+ if(this.storeInfo.bizLicenseType === 2) {
+ picIdList = {
+ licencePhotos: [],
+ legalCardPhotosF: [],
+ legalCardPhotosZ: [],
+ storeHeadPhotos: [],
+ storeInPhotos:[],
+ storeAroundPhotos:[],
+ authorizedBrand: [],
+ sysScreenShot: [],
+ };
+ picIdList.legalCardPhotosF.push(this.storeInfo.legalCardPhotos[0].fileId);
+ picIdList.legalCardPhotosZ.push(this.storeInfo.legalCardPhotos[1].fileId);
+ }else{
+ picIdList = {
+ storeHeadPhotos: [],
+ storeInPhotos:[],
+ storeAroundPhotos:[],
+ authorizedBrand: [],
+ sysScreenShot: [],
+ };
+ }
+ for (let i in picIdList) {
+ if (this.storeInfo[i] instanceof Array &&
+ this.storeInfo[i].length) {
+ // 后端图片初始文件id为id.而控件上传id为fieldId,这里需要兼容处理一下
+ this.storeInfo[i].forEach((item) => {
+ item.fileId ? picIdList[i].push(item.fileId) :
+ picIdList[i].push(item.id)
+ });
+ }
+ }
+ if(this.storeInfo.bizLicenseType !== 2) {
+ this.storeInfo.licencePhotos = [];
+ }
+ let submitInfo = {
+ ...this.storeInfo,
+ ...picIdList,
+ mgrReqVo:this.mgrReqVo
+ };
+
+ let fn;
+ fn = this.$api.heydOpenStore; //海尔云贷接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/heyd/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType:this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-heyd-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/heyd/storePictures.vue b/src/views/old/merchant/heyd/storePictures.vue
new file mode 100644
index 0000000..2158f79
--- /dev/null
+++ b/src/views/old/merchant/heyd/storePictures.vue
@@ -0,0 +1,114 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="heyd-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div v-if="storeInfo.bizLicenseType == 2">
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :showNum="2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传门头照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(需要体现运营商logo、门店名称、门牌号)</p>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :showNum="1"
+ :title="''"
+ :picList="storeInfo.storeHeadPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传店内照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(至少从4个角度拍摄全景体现店铺面积和主要业务区域,至少包括合约分期业务受理区(若有运营商logo背景,则包含在内)手机终端柜台))</p>
+ </div>
+ <UploadFile
+ :fileType="4"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="4"
+ :picList="storeInfo.storeInPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传周边照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(门店外部街景、左右各一张,展示左右至少各一间门店)</p>
+ </div>
+ <UploadFile
+ :fileType="3"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="3"
+ :picList="storeInfo.storeAroundPhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">授权牌</span><span style="font-size: 13px;color: #FF6666"></span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.authorizedBrand"></UploadFile>
+ <div>
+ <span style="font-size: 15px">联通系统截图</span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.sysScreenShot"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'heydStorePicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ // + 6的是海尔云贷的上传
+ filetype:{
+ type:Number,
+ default:0
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .legal-card-title {
+ padding: 10px 0;
+ font-size: 13px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+ .heyd-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 10px 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/huabei/alipay.vue b/src/views/old/merchant/huabei/alipay.vue
new file mode 100644
index 0000000..82a77a4
--- /dev/null
+++ b/src/views/old/merchant/huabei/alipay.vue
@@ -0,0 +1,298 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 15:28:08
+ * @Description:
+ -->
+/*
+ * @Author: c.y
+ * @Date: 2018-12-24 15:28:12
+ * @Last Modified by: mikey.zhaopeng
+ * @Last Modified time: 2019-11-20 09:52:07
+ * @文件说明:花呗分期--开通花呗--选择个人或者启企业支付宝类型
+ */
+<template>
+ <div class="huabei-alipay-page h-100-g">
+ <x-header
+ :title="'开通' + this.$route.query.title"
+ :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack()"
+ ></x-header>
+ <group>
+ <popup-picker
+ placeholder="请选择省市区"
+ ref="Area"
+ :title="tit"
+ :data="areaList"
+ :columns="3"
+ v-model="areValue"
+ show-name
+ cancel-text="取消"
+ confirm-text="确定"
+ @on-hide="setAreaValue(true)"
+ ></popup-picker>
+ <x-input
+ title="支付宝账号"
+ :max="40"
+ placeholder="请输入支付宝账号"
+ text-align="right"
+ v-model.trim="alipayInfo.accountNumber"
+ ></x-input>
+ <x-input
+ title="支付宝名称"
+ :max="40"
+ placeholder="请输入支付名称"
+ text-align="right"
+ v-model.trim="alipayInfo.accountName"
+ ></x-input>
+ <x-input
+ title="客服电话"
+ :max="12"
+ placeholder="请输入客服电话"
+ text-align="right"
+ v-model.trim="alipayInfo.servicePhone"
+ ></x-input>
+ <!-- <van-cell @click="showPop=true" title="请选择经营类目:" v-show="isddxt" is-link :value="categoryStr" /> -->
+ <!-- <popup-picker title="请选择经营类目:" v-show="isddxt" :columns="1" :data="mccList" v-model="category" :placeholder="$t('please select')"></popup-picker> -->
+ </group>
+ <f-space></f-space>
+ <f-button @on-click="handleNextStep">下一步</f-button>
+ <!-- <van-popup v-model="showPop" position="bottom" :style="{ height: '30%' }" >
+ <van-picker
+ title="经营类目"
+ value-key="name"
+ show-toolbar
+ :columns="mccList"
+ @confirm="onConfirm"
+ @cancel="onCancel"
+ />
+ </van-popup> -->
+ </div>
+</template>
+
+<script>
+import { mapState } from "vuex";
+import { PopupPicker } from "vux";
+import sysApi from "../../../../api/oldapi";
+import { calcArea } from "@/utils/index";
+export default {
+ components: {
+ PopupPicker
+ },
+ name: "add-account",
+ data() {
+ return {
+ showPop:false,
+ tit: "请选择省市区",
+ areValue: [],
+ category:'',
+ categoryStr:'',
+ areaList: [],
+ // mccList:[],//类目数组
+ showArea: false, // 省市区选择器显示控制
+ addrText: "", //省市区
+ addr: {
+ province: {
+ code: "",
+ name: ""
+ },
+ city: {
+ code: "",
+ name: ""
+ },
+ area: {
+ code: "",
+ name: ""
+ }
+ },
+ alipayInfo: {
+ // addr: '', //省市区
+ accountNumber: "", // 账号
+ accountName: "", // 账号名称
+ servicePhone: "" // 客服电话
+ },
+ aliAreaList: {
+ city_list: {},
+ county_list: {},
+ province_list: {}
+ }
+ };
+ },
+ computed: {
+ ...mapState(["areaList"]),
+ isddxt(){
+ if(sessionStorage.isddxt == 1){
+ return true
+ }else{
+ return false
+ }
+ }
+ },
+ created() {
+
+ // this.mccList = JSON.parse(sessionStorage.getItem('huabei_mccList'))
+ // console.log(this.mccList)
+ this.$nextTick(() => {
+ console.log(this.areaList);
+ });
+ this.getMyMation()
+ this.$api.getAliAreaList().then(res => {
+ this.areaList = res.body.provList;
+ });
+ },
+ methods: {
+ onConfirm(val){
+ console.log(val)
+ this.categoryStr = val.name
+ this.category = val.code
+ this.showPop = false
+ },
+ onCancel(){
+ this.showPop = false
+ },
+ // 获取返显资料
+ getMyMation(){
+ if(sessionStorage.getItem('huabei_detailInfo')){
+ console.log(JSON.parse(sessionStorage.getItem('huabei_detailInfo')))
+ var obj = JSON.parse(sessionStorage.getItem('huabei_detailInfo'))
+ if(obj.addr){
+ this.areValue[0] = obj.addr.province.code
+ this.areValue[1] = obj.addr.city.code
+ this.areValue[2] = obj.addr.area.code
+ this.addr = obj.addr
+ }
+ if(obj.aliAccount){
+ this.alipayInfo.accountNumber = obj.aliAccount
+ }
+ if(obj.aliAccountName){
+ this.alipayInfo.accountName = obj.aliAccountName
+ }
+ if(obj.servicePhone){
+ this.alipayInfo.servicePhone = obj.servicePhone
+ }
+ }
+ },
+ //地区选择确认事件
+ setAreaValue() {
+ this.addrText = this.$refs.Area.getNameValues();
+ this.alipayInfo.addr = this.addr = {
+ province: {
+ code: this.areValue[0],
+ name: this.addrText.split(" ")[0]
+ },
+ city: {
+ code: this.areValue[1],
+ name: this.addrText.split(" ")[1]
+ },
+ area: {
+ code: this.areValue[2],
+ name: this.addrText.split(" ")[2]
+ }
+ };
+ console.log(this.areValue)
+ },
+ // 点击下一步
+ handleNextStep() {
+ console.log(this.addr);
+ if (this.$tool.checkValEmpty(this.addr.area.code)) {
+ this.$notify_success("请选择省市区");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.alipayInfo.accountNumber)) {
+ this.$notify_success("请输入支付宝账号");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.alipayInfo.accountName)) {
+ this.$notify_success("请输入支付宝名称");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.alipayInfo.servicePhone)) {
+ this.$notify_success("请输入客服电话");
+ return false;
+ }
+ var req = / ^[\-]?\d+(\.\d+)?$/
+ if (req.test(this.alipayInfo.servicePhone)) {
+ this.$notify_success("请输入正确客服电话");
+ return false;
+ }
+ // if (this.$tool.checkValEmpty(this.category)&&sessionStorage.isddxt == 1) {
+ // this.$notify_success("请选择经营类目");
+ // return false;
+ // }
+ // if (
+ // !(
+ // this.$tool.checkPhone(this.alipayInfo.accountNumber) ||
+ // this.$tool.checkEmail(this.alipayInfo.accountNumber)
+ // )
+ // ) {
+ // this.$notify_success("请输入正确的支付宝账号");
+ // return false;
+ // }
+ // 由于支付宝名称,可以有个人账号或者企业账号,并不知道其具体的规则,所以
+ // 不进行具体规则的效验,只进行必填的验证。
+ // 存在在本地,统一提交开通花呗分期
+
+ sessionStorage.setItem(
+ "huabei_accountNumber",
+ this.alipayInfo.accountNumber
+ );
+ sessionStorage.setItem("huabei_accountName", this.alipayInfo.accountName);
+ sessionStorage.setItem(
+ "huabei_servicePhone",
+ this.alipayInfo.servicePhone
+ );
+ sessionStorage.setItem("huabei_addr", JSON.stringify(this.addr));
+ if(sessionStorage.isddxt == 1){
+ sessionStorage.setItem("huabei_category", JSON.stringify(this.category));
+ }
+
+
+ this.$router.push({
+ path: "/huabei/store-pictures",
+ query: {
+ ...this.$route.query
+ }
+ });
+ },
+ pageGoBack() {
+ if(this.$route.query.isApp == 1){
+ this.$router.go(-1)
+ }else{
+ if (this.$route.query.typeId) {
+ this.$router.push({
+ path: "/huabei/open",
+ query: { ...this.$route.query }
+ });
+ } else {
+ this.$router.push({ path: "/huabei/open" });
+ }
+ }
+
+ }
+ }
+};
+</script>
+
+<style lang="less" scoped>
+.huabei-alipay-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+}
+/deep/.vux-cell-value {
+ color: #333;
+ font-size: 16px;
+}
+.choose {
+ font-size: 14px;
+}
+/deep/.van-cell__value {
+ position: relative;
+ overflow: hidden;
+ color: #333;
+ font-size: 16px;
+ text-align: right;
+ vertical-align: middle;
+ word-wrap: break-word;
+}
+</style>
diff --git a/src/views/old/merchant/huabei/open.vue b/src/views/old/merchant/huabei/open.vue
new file mode 100644
index 0000000..bcd34c5
--- /dev/null
+++ b/src/views/old/merchant/huabei/open.vue
@@ -0,0 +1,178 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 15:23:51
+ * @Description:
+ -->
+<template>
+ <div class="open-huabei-page h-100-g">
+ <x-header :title="'开通' + this.$route.query.title" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="tip">请用支付宝客户端,扫一扫</div>
+ <div class="qrcode-url" v-if="qrCodeUrl">
+ <img :src="qrCodeUrl" alt="">
+ </div>
+ <f-space></f-space>
+ <f-button @on-click="handleNextStep"
+ :disabled="buttonText === '等待授权'">{{ buttonText }}</f-button>
+
+ <p class="tip">企业类型商户请使用企业支付宝账号扫码授权,个体工商户请使用经营者支付宝账号扫码授权</p>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode'
+
+ export default {
+ name: 'huaBeiOpen',
+ data() {
+ return {
+ tit:'',
+ isClickNextBtn: false, // 是否点击下一步btn的状态
+ alAccountTypeList: [],
+ qrCodeUrl: '', // 二维码图片地址
+ timeId: '', // 轮询时间id
+ buttonText: '等待授权' // 按钮文字
+ };
+ },
+ created() {
+ console.log(this.$route.query.path)
+ this.qrCodeUrl = '';
+ this.timeId = '';
+ this.buttonText = '等待授权';
+ this.isClickNextBtn = false;
+ this.init();
+ },
+ mounted(){
+
+ },
+ methods: {
+ // 点击返回
+ pageGoBack () {
+ if(this.$route.query.isCreateOrderPush || this.$route.query.isApp==1){
+ this.$router.go(-1)
+ }else{
+ this.$router.push({
+ path:'/channel-selection_sh',
+ query:{
+ ...this.$route.query
+ }
+ })
+ }
+ },
+ // 检查授权
+ checkAuth (isNext) {
+ // authStatus: 0 未授权 1授权---用户授权后才能执行下一步
+ this.$api.checkAuth({
+ zfbVersion:this.$route.query.zfbVersion
+ }).then((res) => {
+ if (res.body.authStatus === 1) {
+ this.buttonText = '下一步';
+ clearTimeout(this.timeId);
+ if (isNext && !this.$route.query.isCreateOrderPush) {
+ this.$router.push({
+ path: '/huabei/alipay',
+ query: {
+ ...this.$route.query
+ }
+ });
+ }
+ if(isNext && this.$route.query.isCreateOrderPush){
+ this.$router.push({
+ path:this.$route.query.path,
+ query:{
+ ...this.$route.query
+ }
+ })
+ }
+ } else if(res.body.authStatus === 2){
+ // 3秒钟,轮询一次
+ this.$notify_success('请重新进入此页面');
+ }else {
+ // 3秒钟,轮询一次
+ this.timeId = setTimeout(() => {
+ this.checkAuth();
+ }, 3000);
+ }
+ }, (error) => {
+ clearTimeout(this.timeId);
+ });
+ // }
+
+ },
+ // 获取列表
+ init () {
+ this.$api.hbOpenInit({
+ zfbVersion:this.$route.query.zfbVersion
+ }).then((res) => {
+ // 这个类型列表(缓存在初始化列表, 等待上传图片的是,支付宝类型)
+ let alAccountTypeList = res.body.alAccountTypeList || [];
+ // let mccList = res.body.mccList || []
+ sessionStorage.setItem('huabei_accountTypeList', JSON.stringify(alAccountTypeList));
+ sessionStorage.setItem('huabei_mccList',JSON.stringify(res.body.mccList));
+ // sessionStorage.setItem('huabei_mccList', JSON.stringify(mccList));
+ // 如果已有开通记录 取值存起来 后面返显
+ if(res.body.detailInfo){
+ sessionStorage.setItem('huabei_detailInfo',JSON.stringify(res.body.detailInfo))
+ }
+ // 1-图片,2-路径
+ if (res.body.urlType === 1) {
+ this.qrCodeUrl = res.body.qrCodeUrl;
+ } else if (res.body.urlType === 2) {
+ // 生成图片
+ QRCode.toDataURL(res.body.qrCodeUrl)
+ .then(url => {
+ this.qrCodeUrl = url;
+ })
+ .catch(err => {
+ console.error(err)
+ });
+ }
+ // 进入这个页面,就进行授权
+ this.checkAuth(false);
+ });
+ // }
+
+
+
+ },
+ // 点击下一步
+ handleNextStep () {
+ this.checkAuth(true);
+ }
+ },
+ beforeRouteLeave(to,form,next){
+ clearTimeout(this.timeId);
+ this.qrCodeUrl = null;
+ next();
+ },
+ // destroyed() {
+ // clearTimeout(this.timeId);
+ // this.qrCodeUrl = null;
+ // },
+
+ };
+</script>
+
+<style lang="less">
+ .open-huabei-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+
+ .tip {
+ color: #999;
+ text-align: center;
+ font-size: 14px;
+ line-height: 1.6;
+ padding: 14px 8%;
+ }
+ .qrcode-url {
+ text-align: center;
+ img {
+ width: 60%;
+ height: auto;
+ border: 5px solid @color-border-theme;;
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/huabei/openResult.vue b/src/views/old/merchant/huabei/openResult.vue
new file mode 100644
index 0000000..323c683
--- /dev/null
+++ b/src/views/old/merchant/huabei/openResult.vue
@@ -0,0 +1,237 @@
+/*
+ * @Author: c.y
+ * @Date: 2018-12-24 15:25:57
+ * @Last Modified by: c.y
+ * @Last Modified time: 2019-06-06 15:22:27
+ * @文件说明:开通花呗--审核结果
+ */
+<template>
+ <div class="huabei-result-page">
+ <x-header
+ :title="'开通' + this.$route.query.title"
+ :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack()"
+ ></x-header>
+ <div class="status-icon">
+ <i v-if="openStatus == 1" class="iconfont scene_Staging-shenhezhong1"></i>
+ <i v-if="openStatus == 2" class="iconfont scene_Staging-danxuan"></i>
+ <i v-if="openStatus == 3" class="iconfont scene_Staging-shibai1"></i>
+ <i v-if="openStatus == 4" class="iconfont scene_Staging-shenhezhong1"></i>
+ </div>
+ <div class="tips">
+ <p v-if="openStatus == 1">审核中</p>
+ <p v-if="openStatus == 2">审核通过</p>
+ <p v-if="openStatus == 3">审核未通过</p>
+ <p v-if="openStatus == 4">人工审核中,请联系客服</p>
+ </div>
+ <div style="padding:0 15px;margin-top:20px;color:#999;" v-if="openStatus != 4">
+ <x-input title="花呗审核备注" v-model="hbAuditRemark" :readonly="true" text-align="right"></x-input>
+ </div>
+ <f-button @on-click="handleBack">{{ buttonText }}</f-button>
+ <f-button v-if="signUrl" @on-click="goSign">去签约</f-button>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "add-account",
+ data() {
+ return {
+ openStatus: 0, // 开通状态
+ buttonText: "", // 底部按钮文字
+ signUrl: null, //签约地址
+ hbAuditRemark: "无", //花呗审核备注
+ timer:"",//定时器
+ };
+ },
+ computed:{
+ isApp(){
+ return Number(this.$route.query.isApp)
+ }
+ },
+ methods: {
+ goSign() {
+ window.location.href = this.signUrl;
+ },
+ pageGoBack() {
+ if(this.isApp==1){
+ this.$router.push({
+ path: "/app/home"
+ });
+ }else{
+ this.$router.push({
+ path: "/main/productManagement"
+ });
+ }
+
+ },
+ // 1.商户提交开通花呗分期申请后状态:审核中,审核不通过,开通成功。
+ // 2.如果是审核中,点击返回按钮回到“我”的界面;
+ // 3.如果审核失败,底部按钮改为“重新开通”,点击进入产品管理页并可以重新开通花呗分期;
+ // 4.如果开通成功,按钮改为“查看详情”,点击进入花呗详情页面;
+ // 5.如果是审核中,点击返回按钮回到“我”的界面;
+ handleBack() {
+ let jumpUrl = "";
+ switch (this.openStatus) {
+ case 1:
+ if(this.isApp==1){
+ jumpUrl = "/app/home";
+ }else{
+ jumpUrl = "/main/mine";
+ }
+ break;
+ case 2:
+ if(this.isApp==1){
+ if(this.$route.query.prodId == 30000003){
+ jumpUrl = "/app/zfbVersionDetail";
+ }else{
+ jumpUrl = "/app/shskVersionDetail";
+ }
+ }else{
+ if (this.$route.query.title == "花呗分期") {
+ jumpUrl = "/huabei/staging";
+ } else {
+ jumpUrl = "/huabei/staging_dmf";
+ }
+ }
+ break;
+ case 3:
+ if(this.isApp==1){
+ jumpUrl = "/app/home";
+ }else{
+ jumpUrl = "/main/productManagement";
+ }
+ break;
+ case 4:
+ if(this.isApp==1){
+ jumpUrl = "/app/home";
+ }else{
+ jumpUrl = "/main/mine";
+ }
+ }
+ // 审核未通过3---需要调用--重新开通接口
+ if (this.openStatus === 3) {
+ this.$api.hbOpenReOpen({}).then(res => {
+ this.$router.push({
+ path: jumpUrl,
+ query:{
+ ...this.$route.query
+ }
+ });
+ });
+ } else {
+ this.$router.push({
+ path: jumpUrl,
+ query:{
+ ...this.$route.query
+ }
+ });
+ }
+ },
+ // * 开通状态 mOpenStatus 0-待开户,1-审核中,2-审核通过,3-审核未通过 4-人工审核
+ init() {
+ if (this.$route.query.prodId == "30000011") {
+ this.$api.findXygOpenSts().then(res => {
+ console.log(res);
+ try {
+ this.signUrl = res.body.signUrl || null;
+ this.hbAuditRemark = res.body.hbAuditRemark || "无";
+ } catch (err) {}
+ this.openStatus = res.body.openStatus;
+ console.log("aaa" + this.openStatus);
+ switch (res.body.openStatus) {
+ case 1:
+ this.buttonText = "返回";
+
+ break;
+ case 2:
+ this.buttonText = "查看详情";
+ clearInterval(this.timer)
+ break;
+ case 3:
+ this.buttonText = "重新开通";
+ clearInterval(this.timer)
+ break;
+ case 4:
+ this.buttonText = "返回";
+ clearInterval(this.timer)
+ }
+ console.log("bbb" + this.buttonText);
+ });
+ } else {
+ this.$api
+ .findOpenSts({
+ zfbVersion: this.$route.query.zfbVersion
+ })
+ .then(res => {
+ console.log(res);
+ try {
+ this.signUrl = res.body.signUrl || null;
+ this.hbAuditRemark = res.body.hbAuditRemark || "无";
+ } catch (err) {}
+ this.openStatus = res.body.openStatus;
+ console.log("aaa" + this.openStatus);
+ switch (res.body.openStatus) {
+ case 1:
+ this.buttonText = "返回";
+
+ break;
+ case 2:
+ this.buttonText = "查看详情";
+ clearInterval(this.timer)
+ break;
+ case 3:
+ this.buttonText = "重新开通";
+ clearInterval(this.timer)
+ break;
+ case 4:
+ this.buttonText = "返回";
+ clearInterval(this.timer)
+ }
+ console.log("bbb" + this.buttonText);
+ });
+ }
+ }
+ },
+ created() {
+ console.log(this.$route.query.title);
+ this.buttonText = "";
+ this.openStatus = 0;
+ this.init();
+ },
+ mounted(){
+ let _this = this
+ this.timer = setInterval(()=>{
+ _this.init();
+ },5000)
+ },
+ beforeRouteLeave (to, from, next) {
+ // 清除定时器
+ clearInterval(this.timer)
+ next()
+ }
+};
+</script>
+
+<style lang="less">
+.huabei-result-page {
+ padding-top: 45px;
+ .status-icon {
+ padding-top: 20px;
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #bfa073;
+ }
+ .scene_Staging-shibai1 {
+ color: #f76260;
+ }
+ .tips {
+ color: #999;
+ font-size: 14px;
+ line-height: 1.6;
+ text-align: center;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/huabei/staging.vue b/src/views/old/merchant/huabei/staging.vue
new file mode 100644
index 0000000..883c1eb
--- /dev/null
+++ b/src/views/old/merchant/huabei/staging.vue
@@ -0,0 +1,259 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 14:16:38
+ * @Description:
+ -->
+<template>
+ <div class="huabei-detail-page">
+ <van-nav-bar
+ :title="this.$route.query.title"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px;"
+ >
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="top-back"></div>
+ <HstagingDetail :infoList="alipayInfo" :rateList="prodRef" :rateListRule="rateListRule" :hasTitle="true"></HstagingDetail>
+
+ <!-- <div class="info-box">
+ <div class="info-box-top">
+ <van-cell
+ :title="alipayInfo.accountType === 1 ? '姓名' : '企业名称'"
+ :value="alipayInfo.accountName"
+ title-class="tit-class"
+ value-class="val-class"
+
+ />
+ <van-cell
+ title="支付宝账号"
+ :value="alipayInfo.accountNumber"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="支付宝类型"
+ :value="alipayInfo.accountTypeName"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="商户编号"
+ :value="alipayInfo.merNo"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="开通日期"
+ :value="alipayInfo.authTime"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ </div>
+ <div class="info-box-bottom" v-if="prodRef.length > 1">
+ <div class="left-cr"></div>
+ <div class="right-cr"></div>
+ <div class="rate-title">费率</div>
+ <div class="item" v-for="i in prodRef" :key="i.termName">
+ <span>{{i.termName}}</span>
+ <span>{{i.platRate}} <span v-show="i.termName !== '期数'">%</span></span>
+ <span>{{i.zfbRate}} <span v-show="i.termName !== '期数'">%</span></span>
+ </div>
+ </div>
+ </div> -->
+
+ </div>
+</template>
+
+<script>
+import HstagingDetail from "@/components/common/h-staging-detail.vue";
+import Vue from "vue";
+import { NavBar } from "vant";
+import { dateFormat } from "vux";
+Vue.use(NavBar);
+export default {
+ name: "add-account",
+ components:{
+ HstagingDetail
+ },
+ data() {
+ return {
+ prodRef: [{termName: '期数', platRate: '智享服务费率', zfbRate: '花呗分期手续费率'}],
+ alipayInfo:[],
+ rateListRule:[{keyName:'termName'},{keyName:'platRate',type:'isRate'},{keyName:'zfbRate',type:'isRate'}]
+ };
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 初始化页面
+ init() {
+ if (this.$route.query.prodId == 30000011) {
+ this.$api
+ .merXygPayInfo({
+ prodId: this.$route.query.prodId
+ })
+ .then(res => {
+ this.prodRef = res.body.prodBaseTermInfVo;
+ this.alipayInfo = {
+ accountNumber: res.body.payCode,
+ merNo: res.body.merNo,
+ accountName: res.body.payName,
+ accountType: Number(res.body.payType),
+ authTime: res.body.authTimeStr,
+ accountTypeName: res.body.payType === 1 ? "个人" : "企业"
+ };
+ });
+ } else {
+ this.$api
+ .merPayInfo({
+ zfbVersion: this.$route.query.zfbVersion,
+ prodId: this.$route.query.prodId
+ })
+ .then(res => {
+ this.prodRef = [...this.prodRef, ...res.body.prodBaseTermInfVo]
+
+ this.alipayInfo = [
+ {
+ title:Number(res.body.payType) === 1 ? '姓名' : '企业名称',
+ value:res.body.payName
+ },
+ {
+ title:'支付宝账号',
+ value:res.body.payCode
+ },
+ {
+ title:'支付宝类型',
+ value:res.body.payType === 1 ? "个人" : "企业"
+ },
+ {
+ title:'商户编号',
+ value:res.body.merNo
+ },
+ {
+ title:'开通日期',
+ value:res.body.authTimeStr
+ },
+ ]
+ });
+ }
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less" scoped>
+.huabei-detail-page {
+ padding-top: 45px;
+ background: #f5f5f7;
+ min-height: 100vh;
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .top-back {
+ width: 100%;
+ height: 140px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 122, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .info-box {
+ width: 92%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ .info-box-bottom {
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ }
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ }
+ span:nth-child(1) {
+ width: 15%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+ span:nth-child(3) {
+ width: 45%;
+ }
+ }
+ }
+ .tit-class {
+ min-width: 30%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 69%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ border-top: 1px dashed #e6e6e6;
+ }
+ .unit {
+ font-size: 14px;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/huabei/staging_dmf.vue b/src/views/old/merchant/huabei/staging_dmf.vue
new file mode 100644
index 0000000..b0c0970
--- /dev/null
+++ b/src/views/old/merchant/huabei/staging_dmf.vue
@@ -0,0 +1,225 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-08 14:08:09
+ * @Description:
+ -->
+<template>
+ <div class="huabei-detail-page">
+ <van-nav-bar
+ title="商户收款"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px;"
+ >
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="top-back"></div>
+
+ <div class="info-box">
+ <van-cell
+ :title="alipayInfo.accountType === 1 ? '姓名' : '企业名称'"
+ :value="alipayInfo.accountName"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="支付宝账号"
+ :value="alipayInfo.accountNumber"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="支付宝类型"
+ :value="alipayInfo.accountTypeName"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="商户编号"
+ :value="alipayInfo.merNo"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="开通日期"
+ :value="alipayInfo.authTime"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <div class="info-box-bottom" >
+ <div class="left-cr"></div>
+ <div class="right-cr"></div>
+ <div class="rate-title">费率</div>
+ <div class="item" v-for="i in payMethods" :key="i.payMethodName">
+ <span>{{i.payMethodName}}</span>
+ <span>{{i.fee}}%</span>
+ </div>
+ </div>
+ </div>
+ <!-- v-if="prodRef.length > 1" -->
+
+ </div>
+</template>
+
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+
+Vue.use(NavBar);
+export default {
+ name: "add-account",
+ data() {
+ return {
+ payMethods:[],
+ alipayInfo: {
+ accountNumber: "", // 账号
+ accountName: "", // 账号名称
+ accountType: "", // 账户类型 1为个人 2为企业
+ accountTypeName: "",
+ merNo: "",
+ authTime: ""
+ }
+ };
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 初始化页面
+ init() {
+ this.$api
+ .merPayInfo({
+ zfbVersion: this.$route.query.zfbVersion,
+ prodId: this.$route.query.prodId
+ })
+ .then(res => {
+ this.alipayInfo = {
+ accountNumber: res.body.payCode,
+ merNo: res.body.merNo,
+ accountName: res.body.payName,
+ authTime: res.body.authTimeStr,
+ accountType: Number(res.body.payType),
+ accountTypeName: res.body.payType === 1 ? "个人" : "企业"
+ };
+ this.payMethods = res.body.payMethods
+ });
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less">
+.huabei-detail-page {
+ padding-top: 45px;
+ position: relative;
+ min-height: 100vh;
+ background: #fafafa;
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .top-back {
+ width: 100%;
+ height: 140px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 122, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .info-box {
+ width: 92%;
+ height: 227px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ }
+ .tit-class {
+ min-width: 30%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 69%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+ .rate-title {
+ padding: 20px 15px 10px;
+ font-size: 16px;
+ color: #333;
+ font-weight: normal;
+ line-height: 1.6;
+ }
+ .unit {
+ font-size: 14px;
+ }
+ .info-box-bottom {
+ border-top: 1px dashed #eee;
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ }
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ }
+ span:nth-child(1) {
+ width: 45%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+
+ }
+}
+</style>
diff --git a/src/views/old/merchant/huabei/staging_hbjl.vue b/src/views/old/merchant/huabei/staging_hbjl.vue
new file mode 100644
index 0000000..390ee9d
--- /dev/null
+++ b/src/views/old/merchant/huabei/staging_hbjl.vue
@@ -0,0 +1,213 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-12 17:27:17
+ * @Description:
+ -->
+<template>
+ <div class="hbjl-detail-page">
+ <van-nav-bar
+ title="花呗间联"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px;"
+ >
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="top-back"></div>
+ <div class="info-box">
+ <div class="info-box-top" v-if="alipayInfo.inviteCode">
+ <p>{{alipayInfo.inviteCode}}</p>
+ <p>推广码</p>
+ </div>
+ <div class="info-box-bottom" v-if="prodRef">
+ <!-- <div class="left-cr"></div>
+ <div class="right-cr"></div> -->
+ <!-- <div v-if="prodRef instanceof Array && prodRef.length" class="rate-title">费率</div> -->
+ <div class="trem-box">
+ <div v-for="i in prodRef" :key="i.termName">
+ <template v-if="prodRef instanceof Array && prodRef.length">
+ <span>{{i.term}}期</span>
+ <span>费率:{{i.fee}}%</span>
+ <span>固定收益:{{i.amt}}</span>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+import { dateFormat } from "vux";
+Vue.use(NavBar);
+export default {
+ name: "add-account",
+ data() {
+ return {
+ prodRef: [],
+ alipayInfo: {
+ inviteCode:'',
+ }
+ };
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 初始化页面
+ init() {
+ this.$api.prodRefInit({
+ orgId:this.$route.query.orgId,
+ orgType:this.$route.query.orgType,
+ typeId:this.$route.query.typeId
+ }).then(res=>{
+ this.alipayInfo = res.body
+ this.prodRef = res.body.prodSkDtlInfoList
+ })
+
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less" scoped>
+.hbjl-detail-page {
+ padding-top: 45px;
+ background: #f5f5f7;
+ min-height: 100vh;
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .top-back {
+ width: 100%;
+ height: 140px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 122, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .info-box {
+ width: 92%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ .info-box-top{
+ text-align: center;
+ height: 128px;
+ box-sizing: border-box;
+ padding-top: 47px;
+ p:nth-of-type(1){
+ font-size:18px;
+ font-family:PingFang SC;
+ font-weight:bold;
+ color:rgba(51,51,51,1);
+ margin-bottom: 10px;
+ }
+ p:nth-of-type(2){
+ font-size:14px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(153,153,153,1);
+ }
+ }
+ .info-box-bottom {
+ box-sizing: border-box;
+ padding: 24px 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ border-top:1px dashed #E6E6E6;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: linear-gradient(180deg,#423D5D 50%,#F5F5F7 50%);
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: linear-gradient(180deg,#423D5D 50%,#F5F5F7 50%);
+ top: -7px;
+ right: -7px;
+ }
+ }
+
+ .trem-box {
+ width: 100%;
+ color: #271D5E;
+ box-sizing: border-box;
+ //padding: 0 15px;
+ div{
+ width: 100%;
+ height: 40px;
+ border:1px solid rgba(249,247,252,1);
+ display: flex;
+ line-height: 40px;
+ margin-bottom: 5px;
+ span{
+ display: inline-block;
+ text-align: center;
+ }
+ span:nth-of-type(1){
+ background:rgba(249,247,252,1);
+ width: 20%;
+ }
+ span:nth-of-type(2){
+ width: 40%;
+ }
+ span:nth-of-type(3){
+ width: 40%;
+ }
+ }
+ }
+ }
+ .tit-class {
+ min-width: 30%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 69%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ border-top: 1px dashed #e6e6e6;
+ }
+ .unit {
+ font-size: 14px;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/huabei/storePictures.vue b/src/views/old/merchant/huabei/storePictures.vue
new file mode 100644
index 0000000..80f5dbf
--- /dev/null
+++ b/src/views/old/merchant/huabei/storePictures.vue
@@ -0,0 +1,278 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 15:30:29
+ * @Description:
+ -->
+/*
+ * @Author: c.y
+ * @Date: 2018-12-24 15:04:57
+ * @Last Modified by: mikey.zhaopeng
+ * @Last Modified time: 2019-11-15 09:02:18
+ * @文件说明:花呗分期--开通花呗--上传门店相关照片
+ */
+<template>
+ <div class="huabei-picture-page">
+ <x-header
+ :title="'开通' + this.$route.query.title"
+ :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack()"
+ ></x-header>
+ <group v-if="alAccountTypeList instanceof Array && alAccountTypeList.length">
+ <selector
+ :title="isddxt?'商户类型':'支付宝类型'"
+ ref="insTerm"
+ placeholder="请选择"
+ v-model="accountType"
+ :options="alAccountTypeList"
+ :value-map="['code', 'name']"
+ direction="rtl"
+ ></selector>
+ </group>
+ <div class="pic-content">
+ <UploadFile
+ :fileType="0"
+ :title="isddxt && accountType == 3?'民办非企业登记证书':'营业执照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.licencePhotos"
+ ></UploadFile>
+ <UploadFile
+ v-if="isddxt && accountType == 3"
+ :fileType="24"
+ :title="'办学许可证'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.schoolPermit"
+ ></UploadFile>
+ <UploadFile
+ :fileType="2"
+ :title="'身份证正面照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.cardFrontPhotos"
+ ></UploadFile>
+ <UploadFile
+ :fileType="3"
+ :title="'身份证反面照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.cardBackPhotos"
+ ></UploadFile>
+ <UploadFile
+ :fileType="6"
+ :title="'门店店内照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.storeInnerPhotos"
+ ></UploadFile>
+ <UploadFile
+ :fileType="7"
+ :title="'门店招牌照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.storeSignPhotos"
+ ></UploadFile>
+ </div>
+ <f-space></f-space>
+ <f-button @on-click="handleOpenHuaBei">提交开通</f-button>
+ </div>
+</template>
+
+<script>
+import UploadFile from "@/components/old/upload/uploadImg";
+
+export default {
+ name: "add-account",
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ alAccountTypeList: [],
+ accountType: "", // 选择的账号类型
+ uploadObj: {
+ licencePhotos: [], // 营业执照
+ schoolPermit:[],//办学许可证
+ cardFrontPhotos: [], // 身份证正面照
+ cardBackPhotos: [], // 身份证反面照
+ storeSignPhotos: [], // 门店招牌照
+ storeInnerPhotos: [] // 门店店内照
+ }
+ };
+ },
+ computed:{
+ isddxt(){
+ if(sessionStorage.isddxt == 1 || this.$route.query.zfbVersion == 6){
+ return true
+ }else{
+ return false
+ }
+ }
+ },
+ methods: {
+ pageGoBack() {
+ if(this.$route.query.isApp == 1){
+ this.$router.go(-1)
+ }else{
+ if (this.$route.query.accountType) {
+ this.$router.push({
+ path: "/huabei/alipay",
+ query: { accountType: this.$route.query.accountType,...this.$route.query }
+ });
+ } else {
+ this.$router.push({
+ path: "/huabei/alipay",
+ query: { ...this.$route.query }
+ });
+ }
+ }
+
+ },
+ // 开通花呗
+ handleOpenHuaBei() {
+ if (this.$tool.checkValEmpty(this.accountType)) {
+ this.$tool.toast("请选择支付宝类型");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.licencePhotos)) {
+ let str ;
+ if(this.isddxt){
+ str="请上传营业执照"
+ }else{
+ str="民办非企业登记证书"
+ }
+ this.$tool.toast(str);
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.schoolPermit)&&this.isddxt && this.accountType == 3) {
+ this.$tool.toast("请上传办学许可证");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.cardFrontPhotos)) {
+ this.$tool.toast("请上传身份证正面照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.cardBackPhotos)) {
+ this.$tool.toast("请上传身份证反面照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.storeSignPhotos)) {
+ this.$tool.toast("请上传门店招牌照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.storeInnerPhotos)) {
+ this.$tool.toast("请上传门店店内照");
+ return false;
+ }
+ console.log(this.uploadObj)
+ let picIdList = {
+ licencePhotos: [],
+ schoolPermit:[],
+ cardFrontPhotos: [],
+ cardBackPhotos: [],
+ storeSignPhotos: [],
+ storeInnerPhotos: []
+ };
+
+ for (let i in this.uploadObj) {
+ this.uploadObj[i].forEach(item => {
+ picIdList[i].push(item.id + "");
+ });
+ }
+ console.log(JSON.parse(sessionStorage.getItem("huabei_addr")));
+ let submitInfo = {
+ aliAccount: sessionStorage.getItem("huabei_accountNumber"),
+ aliAccountName: sessionStorage.getItem("huabei_accountName"),
+ servicePhone: sessionStorage.getItem("huabei_servicePhone"),
+ addr: JSON.parse(sessionStorage.getItem("huabei_addr")),
+ aliAccountType: this.accountType,
+ zfbVersion: this.$route.query.zfbVersion,
+ ...picIdList
+ };
+ // if(sessionStorage.isddxt==1){
+ // submitInfo.mcc = Number(JSON.parse(sessionStorage.getItem('huabei_category')))
+ // }
+ console.log(submitInfo);
+ // if (this.$route.query.typeId == "200011") {
+ // this.$api.hbOpenXygOpen(submitInfo).then(res => {
+ // this.$router.push({
+ // path: "/huabei/open-result",
+ // query: {
+ // title: "信用购-花呗分期",
+ // ...this.$route.query
+ // }
+ // });
+ // });
+ // } else {
+ this.$api.hbOpenOpen(submitInfo).then(res => {
+ this.$router.push({
+ path: "/huabei/open-result",
+ query: {
+ title: "花呗分期",
+ ...this.$route.query
+ }
+ });
+ });
+ // }
+ },
+ // 获取返显资料
+ getMyMation() {
+ if (sessionStorage.getItem("huabei_detailInfo")) {
+ console.log(JSON.parse(sessionStorage.getItem("huabei_detailInfo")));
+ var obj = JSON.parse(sessionStorage.getItem("huabei_detailInfo"));
+ if(obj.aliAccountType){
+ this.accountType = obj.aliAccountType
+ }
+ if(obj.licencePhotos && obj.licencePhotos.length > 0){
+ this.uploadObj.licencePhotos = obj.licencePhotos
+ }
+ if(obj.schoolPermit && obj.schoolPermit.length > 0){
+ this.uploadObj.schoolPermit = obj.schoolPermit
+ }
+ if(obj.cardFrontPhotos && obj.cardFrontPhotos.length > 0){
+ this.uploadObj.cardFrontPhotos = obj.cardFrontPhotos
+ }
+ if(obj.cardBackPhotos && obj.cardBackPhotos.length > 0){
+ this.uploadObj.cardBackPhotos = obj.cardBackPhotos
+ }
+ if(obj.storeSignPhotos && obj.storeSignPhotos.length > 0){
+ this.uploadObj.storeSignPhotos = obj.storeSignPhotos
+ }
+ if(obj.storeInnerPhotos && obj.storeInnerPhotos.length > 0){
+ this.uploadObj.storeInnerPhotos = obj.storeInnerPhotos
+ }
+ }
+ }
+ },
+ created() {
+ if (typeof sessionStorage.huabei_accountTypeList !== "undefined") {
+ this.alAccountTypeList = JSON.parse(
+ sessionStorage.getItem("huabei_accountTypeList")
+ );
+ }
+ //this.getMyMation();
+ this.accountType = "";
+ this.uploadObj = {
+ licencePhotos: [], // 营业执照
+ schoolPermit:[],
+ cardFrontPhotos: [], // 身份证正面照
+ cardBackPhotos: [], // 身份证反面照
+ storeSignPhotos: [], // 门店招牌照
+ storeInnerPhotos: [] // 门店店内照
+ };
+ this.getMyMation();
+ }
+};
+</script>
+
+<style lang="less">
+.huabei-picture-page {
+ padding-top: 45px;
+ background: @color-white;
+ .pic-content {
+ padding: 0 24px;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/lj/ljcreditStaging.vue b/src/views/old/merchant/lj/ljcreditStaging.vue
new file mode 100644
index 0000000..c7eb9fb
--- /dev/null
+++ b/src/views/old/merchant/lj/ljcreditStaging.vue
@@ -0,0 +1,81 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 10:11:37
+ * @Description:
+ -->
+<template>
+ <div class="creditStaging-page">
+ <x-header title="手机分期" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-input title="状态" v-model="prodRef.typeIdName" text-align='right' readonly></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+export default {
+ name: 'creditStaging',
+ data() {
+ return {
+ prodRef: {
+ status: '',
+ prodSkDtlInfoList: [],
+ typeIdName: ''
+ }
+ };
+ },
+ computed:{
+ ...mapState(['userinfo'])
+ },
+ methods: {
+ init() {
+ let parObj = this.$route.query;
+ parObj.orgId = this.userinfo.orgId;
+ this.$api.prodRefInit(this.$route.query).then(res => {
+ this.prodRef = res.body;
+ if (this.$route.query.typeId == 200003) {
+ if (res.body.status) {
+ this.prodRef.typeIdName = '已分配';
+ } else {
+ this.prodRef.typeIdName = '未分配';
+ }
+ }
+ });
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less" scoped>
+ .creditStaging-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ & /deep/ .weui-switch {
+ width: 44px;
+ height: 24px;
+ &::before {
+ width: 42px;
+ height: 22px;
+ }
+ &::after {
+ width: 22px;
+ height: 22px;
+ }
+ }
+ .unit {
+ margin-left: 5px;
+ color: @color-text-main;
+ font-size: @font-size-medium;
+ }
+ .tips {
+ padding: 12px;
+ font-size: @font-size-small;
+ color: @color-text-three;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/productManagement.vue b/src/views/old/merchant/productManagement.vue
new file mode 100644
index 0000000..7dd8ff7
--- /dev/null
+++ b/src/views/old/merchant/productManagement.vue
@@ -0,0 +1,407 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-04 14:17:25
+ * @Description:
+ -->
+<template>
+ <div class="productManagement-page">
+ <!-- <x-header title="产品管理" :left-options="{backText:'',showBack:false}"></x-header> -->
+ <van-nav-bar title="产品管理" left-text="返回" left-arrow @click-left="onClickLeft" fixed style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <!--<x-header slot="header" title="产品管理" :left-options="{backText:'',preventGoBack:true}"-->
+ <!--@on-click-back="pageGoBack()"></x-header>-->
+ <div class="productManagement-header">
+ <ul class="productManagement-list">
+ <!-- v-if="productList1.length" -->
+ <li class="item" @click="handleJump(item)" v-for="(item,index) in productList1" :key="index">
+ <img :src="item.icon" style="width:40px;height:40px"></img>
+ <p style="margin-top:5px">商户收款</p>
+ </li>
+ <li class="item" @click="goHbCp" v-if="productList2.length">
+ <i class="iconfont iconhuabei" style="color:#108FEA;width:20px;height:20px"></i>
+ <p style="margin-top:5px">花呗分期</p>
+ </li>
+ <li class="item" @click="handleJump(i)" v-for="(i,index) in productList3" :key="index" v-show="productList3.length">
+ <img class="item-logo" :src="i.icon" :alt="i.typeName">
+ <p>{{i.typeName}}</p>
+ <div class="tip-box" :style="i.openStatus==0?{background:'#F2F2F2'}:i.openStatus==1?{background:'#FFF5D9'}:i.openStatus==2?{background:'#E3FAEF'}:i.openStatus==3?{background:'#FCF0F0'}:''">
+ <p v-if="i.openStatus==2" style="color:#19BE6B;">已开通</p>
+ <p v-if="i.openStatus==1" style="color:#FFC421;">开通中</p>
+ <p v-if="i.openStatus==3" style="color:#FF6666;">未通过</p>
+ <p v-if="i.openStatus==0" style="color:#999999;">未开通</p>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <f-no-data v-if="(productList2.length == 0) && (productList3.length == 0)"></f-no-data>
+ </div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+ import Vue from 'vue';
+ import { NavBar } from 'vant';
+
+ Vue.use(NavBar);
+ export default {
+ name: 'productManagement',
+ data() {
+ return {
+ productList3: [],
+ productList2: [],
+ productList1: []
+ };
+ },
+ created(){
+ this.init();
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ },
+ methods: {
+ goShsk(){
+
+ },
+ goHbCp() {
+ this.$router.push('/hbcp_sh')
+ },
+ onClickLeft() {
+ this.$router.push({
+ path: '/main/mine'
+ });
+ },
+ handleJump(productItem) {
+ console.log('test', productItem)
+ let {
+ typeId,
+ prodId,
+ openStatus,
+ zfbVersion
+ } = productItem,
+ path = '',
+ title = '',
+ query = {
+ typeId,
+ prodId,
+ zfbVersion,
+ openStatus
+ };
+ if(zfbVersion){
+ path = '/main/hb-product'
+ }
+ if(typeId==='200014'){
+ switch(openStatus){
+ case 2 :
+ path = "/huabei/staging_hbjl";
+ break;
+ }
+ query={
+ typeId,
+ orgType: this.userinfo.orgType,
+ orgId: this.userinfo.orgId
+ }
+ }
+ if(typeId==='200010'){
+ switch(openStatus){
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ path = '/shtx/staging';
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ }
+ if(typeId === '200008'){
+ path = '/channel-selection_sh';
+ }
+ if(typeId==='200009'){
+ typeId = '200002'
+ }
+ // openStatus 1-开通中,2-已开通, 3-未开通
+ // openStatus 0-待开通 1-开通中,2-已开通, 3-开通失败
+ // typeId 200001 信用卡分期
+
+ if (typeId === '200001') {
+ path = '/creditStaging';
+ query = {
+ typeId,
+ orgType: this.userinfo.orgType,
+ orgId: this.userinfo.id
+ }
+ } else if (typeId === '200002') {
+ switch (openStatus) {
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ if(typeId=='200008'){
+ path = '/huabei/staging_dmf';
+ }else{
+ path = '/huabei/staging';
+ }
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ if(typeId==='200002'){
+ title = '花呗分期';
+ }else{
+ title = '商户收款';
+ }
+ } else if (typeId === '200003') {
+ path = '/ljcreditStaging';
+ query = {
+ typeId,
+ orgType: this.userinfo.orgType,
+ orgId: this.userinfo.id
+ }
+ // 购机直降
+ } else if (typeId === '200004') {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/gjzj/open';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/gjzj/open-result';
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ query = {
+ typeId,
+ openStatus: openStatus,
+ icon: productItem.icon,
+ }
+ }else if (typeId === '200005') {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/heyd/merOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/heyd/open-result';
+ break;
+ case 4:
+ path = '/heyd/open-result';
+ break;
+ default:
+ path = '/heyd/merOpen';
+ break;
+ }
+ query = {
+ typeId,
+ openStatus: openStatus,
+ orgType: this.userinfo.orgType,
+ icon: productItem.icon,
+ }
+ }else if (typeId === '200011') {
+ if(productItem.prodId=='30000012'){
+ switch (openStatus) {
+ case 0:
+ path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ path = '/huabei/open-result';
+ break;
+ case 2:
+ path = '/huabei/staging';
+ break;
+ default:
+ path = '/huabei/open';
+ break;
+ }
+ title = '信用购-花呗分期';
+ query = {
+ typeId,
+ openStatus: openStatus,
+ orgType: this.userinfo.orgType,
+ icon: productItem.icon,
+ prodId:productItem.prodId
+ }
+ }else{
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/xyg/merOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/xyg/open-result';
+ break;
+ case 4:
+ path = '/xyg/open-result';
+ break;
+ default:
+ path = '/xyg/merOpen';
+ break;
+ }
+ title = '信用购-储蓄卡';
+ query = {
+ typeId,
+ openStatus: openStatus,
+ orgType: this.userinfo.orgType,
+ icon: productItem.icon,
+ prodId:productItem.prodId
+ }
+ }
+
+ }else if (typeId === '200017') {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/gzzj/merOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/gzzj/open-result';
+ break;
+ case 4:
+ path = '/gzzj/open-result';
+ break;
+ default:
+ path = '/gzzj/merOpen';
+ break;
+ }
+ query = {
+ typeId,
+ openStatus: openStatus,
+ orgType: this.userinfo.orgType,
+ icon: productItem.icon,
+ }
+ }
+ query.title = title;
+ this.$router.push({
+ path,
+ query
+ });
+ },
+ //初始化
+ init() {
+ this.$api.prodManagerInit().then(res => {
+ this.productList3 = [...res.body.prodTypeRespVoList3];
+ this.productList2 = [...res.body.prodTypeRespVoList2];
+ this.productList1 = []
+ this.productList2.forEach(item=>{
+ if(item.prodId == 30000008){
+ this.productList1.push(item)
+ }
+ })
+ console.log(this.productList1)
+ localStorage.setItem('hbcp_sh', JSON.stringify(res.body.prodTypeRespVoList2))
+ });
+ }
+ },
+ };
+
+</script>
+
+<style lang="less">
+
+ .item-logo{
+ display: block-line;
+ vertical-align: middle;
+ width: 45px;
+ height: 45px;
+ margin-left: auto;
+ }
+ .productManagement-page {
+ // padding-top: 54px;
+ background-color: #F5F5F7;
+ min-height: 100vh;
+ // padding-top: 44px;
+
+ .productManagement-header {
+ height: 100%;
+ background: #F5F5F7;
+ //margin-top: 50px;
+ padding-top: 50px;
+ .productManagement-list {
+ box-sizing: border-box;
+ padding:0 25px 50px;
+ border-radius:3px;
+ overflow: hidden;
+ height: 100%;
+ width: 359px;
+ margin: auto;
+ background: #fff;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ .item{
+ position: relative;
+ margin-top: 28px;
+ width:35vw;
+ height:80px;
+ background:rgba(255,255,255,1);
+ box-shadow:0px 0px 15px 0px rgba(66,61,93,0.08);
+ border-radius:8px;
+ .tip-box{
+ position: absolute;
+ width:45px;
+ height:16px;
+ line-height: 16px;
+ border-radius:8px 0px 0px 8px;
+ top: 7px;
+ right: 0;
+ p{
+ font-size: 10px;
+ }
+ }
+ }
+ .open{
+ color:#19BE6B;
+ margin-top: 8px;
+ }
+ .notOpen{
+ color:#ED4014;
+ margin-top: 8px;
+ }
+ .iconfont {
+ font-size: 36px;
+ color: @color-text-placeholder;
+ }
+
+ .usable {
+ color: @color-text-three !important;
+ }
+
+ li {
+ list-style: none;
+ float: left;
+ width: 49%;
+ text-align: center;
+ padding-top: 20px;
+
+ p {
+ font-size: @font-size-small;
+ }
+ }
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/shtx/open.vue b/src/views/old/merchant/shtx/open.vue
new file mode 100644
index 0000000..d39141b
--- /dev/null
+++ b/src/views/old/merchant/shtx/open.vue
@@ -0,0 +1,140 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-26 15:50:59
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-26 15:50:59
+ * @Description:
+ -->
+<template>
+ <div class="open-huabei-page h-100-g">
+ <x-header :title="'开通' + this.$route.query.title" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="tip">请用支付宝客户端,扫一扫</div>
+ <div class="qrcode-url" v-if="qrCodeUrl">
+ <img :src="qrCodeUrl" alt="">
+ </div>
+ <f-space></f-space>
+ <f-button @on-click="handleNextStep"
+ :disabled="buttonText === '等待授权'">{{ buttonText }}</f-button>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode'
+
+ export default {
+ name: 'huaBeiOpen',
+ data() {
+ return {
+ isClickNextBtn: false, // 是否点击下一步btn的状态
+ alAccountTypeList: [],
+ qrCodeUrl: '', // 二维码图片地址
+ timeId: '', // 轮询时间id
+ buttonText: '等待授权' // 按钮文字
+ };
+ },
+ methods: {
+ // 点击返回
+ pageGoBack () {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ },
+ // 检查授权
+ checkAuth (isNext) {
+ // authStatus: 0 未授权 1授权---用户授权后才能执行下一步
+ this.$api.checkAuth({}).then((res) => {
+ if (res.body.authStatus === 1) {
+ this.buttonText = '下一步';
+ clearTimeout(this.timeId);
+ if (isNext) {
+ this.$router.push({
+ path: '/huabei/alipay',
+ query: {
+ typeId: this.$route.query.typeId, // 产品typeId
+ }
+ });
+ }
+ } else if(res.body.authStatus === 2){
+ // 3秒钟,轮询一次
+ this.$notify_success('请重新进入此页面');
+ }else {
+ // 3秒钟,轮询一次
+ this.timeId = setTimeout(() => {
+ this.checkAuth();
+ }, 3000);
+ }
+ }, (error) => {
+ clearTimeout(this.timeId);
+ });
+ },
+ // 获取列表
+ init () {
+ this.$api.hbOpenInit({}).then((res) => {
+ // 这个类型列表(缓存在初始化列表, 等待上传图片的是,支付宝类型)
+ let alAccountTypeList = res.body.alAccountTypeList || [];
+ sessionStorage.setItem('huabei_accountTypeList', JSON.stringify(alAccountTypeList));
+ // 1-图片,2-路径
+ if (res.body.urlType === 1) {
+ this.qrCodeUrl = res.body.qrCodeUrl;
+ } else if (res.body.urlType === 2) {
+ // 生成图片
+ QRCode.toDataURL(res.body.qrCodeUrl)
+ .then(url => {
+ this.qrCodeUrl = url;
+ })
+ .catch(err => {
+ console.error(err)
+ });
+ }
+
+ });
+ // 进入这个页面,就进行授权
+ this.checkAuth(false);
+ },
+ // 点击下一步
+ handleNextStep () {
+ this.checkAuth(true);
+ }
+ },
+ beforeRouteLeave(to,form,next){
+ clearTimeout(this.timeId);
+ this.qrCodeUrl = null;
+ next();
+ },
+ // destroyed() {
+ // clearTimeout(this.timeId);
+ // this.qrCodeUrl = null;
+ // },
+ created() {
+ this.qrCodeUrl = '';
+ this.timeId = '';
+ this.buttonText = '等待授权';
+ this.isClickNextBtn = false;
+ this.init();
+ }
+ };
+</script>
+
+<style lang="less">
+ .open-huabei-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+
+ .tip {
+ color: #999;
+ text-align: center;
+ font-size: 14px;
+ line-height: 1.6;
+ padding: 14px 0;
+ }
+ .qrcode-url {
+ text-align: center;
+ img {
+ width: 60%;
+ height: auto;
+ border: 5px solid @color-border-theme;;
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/shtx/staging.vue b/src/views/old/merchant/shtx/staging.vue
new file mode 100644
index 0000000..f9158ad
--- /dev/null
+++ b/src/views/old/merchant/shtx/staging.vue
@@ -0,0 +1,268 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-26 15:29:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-28 11:17:36
+ * @Description:
+ -->
+<template>
+ <div class="huabei-detail-page">
+ <van-nav-bar
+ :title="this.$route.query.title"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px;"
+ >
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="top-back"></div>
+ <div class="info-box">
+ <div class="info-box-top">
+ <van-cell
+ :title="alipayInfo.accountType === 1 ? '姓名' : '企业名称'"
+ :value="alipayInfo.accountName"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="支付宝账号"
+ :value="alipayInfo.accountNumber"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="支付宝类型"
+ :value="alipayInfo.accountTypeName"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="商户编号"
+ :value="alipayInfo.merNo"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ <van-cell
+ title="开通日期"
+ :value="alipayInfo.authTime"
+ title-class="tit-class"
+ value-class="val-class"
+ />
+ </div>
+ <div class="info-box-bottom" v-if="prodRef.length > 1">
+ <div class="left-cr"></div>
+ <div class="right-cr"></div>
+ <div class="rate-title">费率</div>
+ <div class="item" v-for="i in prodRef" :key="i.termName">
+ <span>{{i.termName}}</span>
+ <span>{{i.platRate}} <span v-show="i.termName !== '期数'">%</span></span>
+ <span>{{i.zfbRate}} <span v-show="i.termName !== '期数'">%</span></span>
+ </div>
+ </div>
+ </div>
+ <!-- <x-header title="商户贴息" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-input title="支付宝类型"
+ :max="20"
+ text-align="right"
+ readonly
+ v-model.trim="alipayInfo.accountTypeName"></x-input>
+ <x-input title="支付宝账号"
+ readonly
+ text-align="right"
+ v-model.trim="alipayInfo.accountNumber"></x-input>
+ <x-input :title="alipayInfo.accountType === 1 ? '姓名' : '企业名称'"
+ :max="20"
+ readonly
+ text-align="right"
+ v-model.trim="alipayInfo.accountName"></x-input>
+ <x-input :title="'商户编号'"
+ :max="20"
+ readonly
+ text-align="right"
+ v-model.trim="alipayInfo.merNo"></x-input>
+ </group>
+ <div v-if="prodRef instanceof Array && prodRef.length" class="rate-title">费率</div>
+ <group v-if="prodRef instanceof Array && prodRef.length">
+ <x-input v-for="i in prodRef"
+ :key="i.termName"
+ :title="i.termName"
+ v-model="i.rate"
+ readonly
+ text-align="right">
+ <div slot="right" class="unit"> %</div>
+ </x-input>
+ </group>-->
+ </div>
+</template>
+
+<script>
+export default {
+ name: "add-account",
+ data() {
+ return {
+ prodRef: [{termName: '期数', platRate: '智享服务费率', zfbRate: '花呗分期手续费率'}],
+ alipayInfo: {
+ accountNumber: "", // 账号
+ accountName: "", // 账号名称
+ accountType: "", // 账户类型 1为个人 2为企业
+ accountTypeName: "",
+ merNo: "",
+ authTime: ""
+ }
+ };
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 初始化页面
+ init() {
+ this.$api
+ .merPayInfo({
+ zfbVersion: this.$route.query.zfbVersion,
+ prodId: this.$route.query.prodId
+ })
+ .then(res => {
+ this.prodRef = [...this.prodRef, ...res.body.prodBaseTermInfVo]
+ this.alipayInfo = {
+ accountNumber: res.body.payCode,
+ merNo: res.body.merNo,
+ accountName: res.body.payName,
+ authTime: res.body.authTimeStr,
+ accountType: Number(res.body.payType),
+ accountTypeName: res.body.payType === 1 ? "个人" : "企业"
+ };
+ });
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less">
+.huabei-detail-page {
+ padding-top: 45px;
+ background: #f5f5f7;
+ min-height: 100vh;
+ /deep/.van-cell__value {
+ position: relative;
+ overflow: visible;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .top-back {
+ width: 100%;
+ height: 140px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 122, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .info-box {
+ width: 92%;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 18px 15px 0px rgba(40, 23, 92, 0.04);
+ border-radius: 3px;
+ position: absolute;
+ top: 96px;
+ left: 4%;
+ .info-box-bottom {
+ box-sizing: border-box;
+ padding: 0 17px 20px 17px;
+ position: relative;
+ background-color: #fff;
+ .left-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ left: -7px;
+ }
+ .right-cr {
+ position: absolute;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background: #f5f5f7;
+ top: -7px;
+ right: -7px;
+ }
+ }
+
+ .item {
+ width: 100%;
+ margin-top: 5px;
+ padding: 0 10px;
+ box-sizing: border-box;
+ display: inline-block;
+ background: rgba(249, 247, 252, 1);
+ height: 40px;
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ span {
+ text-align: center;
+ }
+ span:nth-child(1) {
+ width: 15%;
+ }
+ span:nth-child(2) {
+ width: 40%;
+ }
+ span:nth-child(3) {
+ width: 45%;
+ }
+ }
+ }
+ .tit-class {
+ min-width: 30%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ .val-class {
+ min-width: 69%;
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .van-cell:not(:last-child)::after {
+ border-bottom: 0;
+ }
+ .rate-title {
+ padding: 20px 0 0 0;
+ font-size: 14px;
+ color: #999999;
+ font-weight: normal;
+ line-height: 1.6;
+ border-top: 1px dashed #e6e6e6;
+ }
+ .unit {
+ font-size: 14px;
+ }
+}
+// .huabei-detail-page {
+// padding-top: 45px;
+// .rate-title {
+// padding: 20px 15px 10px;
+// font-size: 16px;
+// color: #333;
+// font-weight: normal;
+// line-height: 1.6;
+// }
+// .unit {
+// font-size: 14px;
+// }
+// }
+</style>
diff --git a/src/views/old/merchant/tonglian/open.vue b/src/views/old/merchant/tonglian/open.vue
new file mode 100644
index 0000000..4296ca0
--- /dev/null
+++ b/src/views/old/merchant/tonglian/open.vue
@@ -0,0 +1,215 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-10 14:02:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-23 09:47:15
+ * @Description: 通联通道开通
+-->
+<template>
+ <div class="tonglian-open-page">
+ <v-navbar title="开通通联通道"></v-navbar>
+ <div class="info-box">
+ <van-cell-group>
+ <van-field
+ label-class="label-class"
+ label-width="200px"
+ input-align="right"
+ maxlength="11"
+ disabled
+ v-model="legalMblNo"
+ label="法人手机号"
+ />
+ <van-field
+ v-model="authCode"
+ input-align="right"
+ center
+ clearable
+ maxlength="6"
+ label="验证码"
+ placeholder="请输入短信验证码"
+ >
+ <template #button>
+ <button class="code-btn" :disabled="btnDis" @click="getCode">{{btnText}}</button>
+ </template>
+ </van-field>
+ </van-cell-group>
+ </div>
+ <p style="font-size:12px;color:#666;padding:20px 1vw">您正在开通网商银行订单账款服务,开通后可使用智享收银台钱包服务。请点击合同查看并确认后勾选以提交申请。</p>
+
+ <van-checkbox v-model="checked" icon-size="16px" checked-color="#896EDB" style="padding:0 2vw">
+ <span style="font-size:12px;color:#896EDB" @click.stop="ShowAgreen = true">《网商银行订单账款合同》</span>
+ </van-checkbox>
+
+
+
+
+ <van-button
+ round
+ size="large"
+ @click="goNext"
+ color="#896EDB"
+ style="width:86vw;margin-left:7vw;margin-top:60px"
+ >提交申请</van-button>
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html" v-html="Agreend"></div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" />
+ </div>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { Field, Toast } from "vant";
+import { mapState } from "vuex";
+Vue.use(Toast);
+Vue.use(Field);
+export default {
+ data() {
+ return {
+ btnDis: false,
+ btnText: "发送验证码",
+ authCode: "",
+ timer: "",
+ hasGetCode:1,
+ ShowAgreen:true,
+ checked:'',
+ };
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ legalMblNo() {
+ return JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)).detailInfo
+ .legalMblNo;
+ },
+ },
+ created(){
+ this.Agreend = agreement4
+ },
+ methods: {
+ /**
+ * @description:下一步跳转
+ * @return void
+ * **/
+ goNext() {
+ if(this.authCode==''){
+ Toast.fail('请输入验证码');
+ return false
+ }
+ if(!this.checked){
+ Toast.fail('请阅读并勾选《网商银行订单账款合同》');
+ return false
+ }
+ let obj = JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`));
+
+ let picIdList = {
+ licencePhotos: obj.detailInfo.licencePhotos,
+ cardFrontPhotos: obj.detailInfo.cardFrontPhotos,
+ cardBackPhotos: obj.detailInfo.cardBackPhotos,
+ handCardPhotos: obj.detailInfo.handCardPhotos,
+ storeInnerPhotos: obj.detailInfo.storeInnerPhotos,
+ storeSignPhotos: obj.detailInfo.storeSignPhotos,
+ industryLicensePhotos: obj.detailInfo.industryLicensePhotos
+ };
+ // for (let i in this.uploadObj) {
+ // this.uploadObj[i].forEach(item => {
+ // picIdList[i].push(item.id + "");
+ // });
+ // }
+ if(this.hasGetCode==2){
+ this.$api
+ .tltMerOpenOpen({
+ ...obj.detailInfo,
+ authCode:this.authCode
+ })
+ .then((res) => {
+ sessionStorage.removeItem(`sib_tl_openInfo_${this.userinfo.orgId}`)
+ sessionStorage.removeItem(`sib_tl_pic_${this.userinfo.orgId}`)
+ this.$router.push({
+ path: "/tonglian/open-result",
+ query: {
+ ...this.$route.query,
+ nck:true
+ },
+ });
+ });
+ }else{
+ Toast.fail('请获取验证码');
+ }
+
+ },
+ /**
+ * @description:获取验证码
+ * @return void
+ * **/
+ getCode() {
+ this.$api
+ .tltMerOpenSendSmsCode({
+ mblNo: this.legalMblNo,
+ })
+ .then((res) => {
+ this.hasGetCode = 2
+ this.btnDis = true;
+ this.btnText = 60;
+ this.timer = setInterval(() => {
+ if (this.btnText == 1) {
+ this.btnText = "重新获取";
+ this.btnDis = false;
+ clearInterval(this.timer);
+ } else {
+ this.btnText = --this.btnText;
+ }
+ }, 1000);
+ });
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.tonglian-open-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ }
+ /deep/.label-class{
+ font-size: 16px;
+ color: #333;
+ }
+ .info-box {
+ margin-top: 10px;
+ width: 98vw;
+ margin-left: 1vw;
+ }
+ .code-btn {
+ border: 0;
+ border-left: 1px solid #e6e6e6;
+ background: #fff;
+ outline: none;
+ color: #896edb;
+ padding-right: 0;
+ text-align: right;
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/openResult.vue b/src/views/old/merchant/tonglian/openResult.vue
new file mode 100644
index 0000000..848a400
--- /dev/null
+++ b/src/views/old/merchant/tonglian/openResult.vue
@@ -0,0 +1,327 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-10 15:48:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 15:45:07
+ * @Description:
+-->
+<template>
+ <div class="tonglian-open-res-page">
+ <!-- <v-navbar title="开通通联通道"></v-navbar> -->
+ <van-nav-bar
+ title="开通通联通道"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div class="res-box" v-show="showContent || $route.query.nck">
+ <img
+ v-if="status == 0"
+ src="../../../../../static/img/post_agree.png"
+ alt="提交成功"
+ />
+ <img
+ v-if="status == 1 || status == 4"
+ src="../../../../../static/img/img_refuse.png"
+ alt="审核失败或签约失败"
+ />
+ <img
+ v-if="status == 2 || status == 6"
+ src="../../../../../static/img/img_auditing.png"
+ alt="审核中"
+ />
+ <img
+ v-if="status == 3 || status == 7"
+ src="../../../../../static/img/img_agree.png"
+ alt="审核通过"
+ />
+ <img
+ v-if="status == 5"
+ src="../../../../../static/img/img_reupload.png"
+ alt="图片不清晰"
+ />
+ <img
+ v-if="status == 8"
+ src="../../../../../static/img/paying.png"
+ alt="打款中"
+ />
+ <p>{{ openResText }}</p>
+ <p v-if="status == 8" style="padding: 0 15%;line-height:20px">我们将向您的对公结算银行卡进行一笔小额转账以确保银行卡信息准确无误</p>
+ <p v-if="status == 0 || status == 5">{{ tipText }}</p>
+ <!-- || status != 7 && verificationDone == 'done' -->
+ <button @click="getRefresh" v-if="status != 7 && status != 8">
+ {{ btnTextOfFunction }}
+ </button>
+ <button v-if="status == 0 || status == 7" @click="goNext">
+ {{ btnTextOfRouter }}
+ </button>
+ <div class="dk-bankNo" v-if="status==8">
+ <p>打款银行卡号:{{bankCard}}</p>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import { Dialog,Toast } from 'vant';
+
+// 全局注册
+Vue.use(Toast);
+Vue.use(Dialog);
+export default {
+ data() {
+ return {
+ uploadFileTypes:[],//动态显示数组
+ timer:'',//跳转定时器
+ timer2:"",
+ show:false,
+ showContent: false,
+ openResText: "",//状态文字解释
+ btnTextOfRouter: "",
+ btnTextOfFunction: "",
+ tipText: "",
+ status: '', //开通状态0-提交成功,1-审核失败,2-初审中,3-初审通过 4-签约失败 5-图片不清晰 6-终审中 7-审核成功 打款中-8 9-打款验证
+ merType:"",//商户类型
+ canGoverification:1, //是否可以前往打款验证 0-不是 1-是
+ verificationDone:'',
+ bankCard:'',//打款银行卡号
+ };
+ },
+ created() {
+ this.verificationDone = this.$route.query.verificationDone
+ this.getStatus();
+ },
+ methods: {
+ /**
+ * @description 打款验证失败弹窗确认
+ * @returns void
+ * **/
+ onconfirm(){
+ this.$router.push({
+ path:'/tonglian/verification'
+ })
+ },
+ onClickLeft(){
+ if(this.$route.query.isApp == 1){
+ this.$router.push({
+ path:'/app/home'
+ });
+ }else{
+ this.$router.push({
+ path:'/main/mine'
+ });
+ }
+
+ },
+ /**
+ * @description:去首页
+ * @returns void
+ * **/
+ goNext() {
+ if(this.$route.query.isApp == 1){
+ this.$router.push("/app/home");
+ }else{
+ this.$router.push("/main/mine");
+ }
+ },
+ /**
+ * @description:刷新按钮
+ * @return void
+ * **/
+ getRefresh() {
+ if (this.status == 0 || this.status == 2) {
+ this.getStatus();
+ } else if (this.status == 3) {
+ // 跳转签约页面
+ this.$api.tltMerOpenQueryElectUrl().then(res=>{
+ window.location.href = res.body
+ })
+ } else if (this.status == 1) {
+ this.$api.tltMerOpenReOpenMer().then(res=>{
+ this.$router.push("/tonglian/startOpen");
+ })
+ } else if (this.status == 5) {
+ this.$router.push({
+ path:"/tonglian/store-pictures",
+ query:{
+ merType:this.merType,
+ isUploadAgain:1,
+ zfbVersion: 5,
+ uploadFileTypes:JSON.stringify(this.uploadFileTypes)
+ }
+ });
+ } else if (this.status == 4) {
+ // 跳转签约页面重新签约
+ this.$api.tltMerOpenQueryElectUrl().then(res=>{
+ window.location.href = res.body
+ })
+ }else if (this.status == 6) {
+ this.getStatus();
+ } else if (this.status == 7) {
+ // 跳转办单页面
+ if(this.$route.query.isApp == 1){
+ this.$router.push("/app/home");
+ }else{
+ this.$router.push("/main/mine");
+ }
+
+ }
+ },
+ /**
+ * @description:获取状态
+ * @return void
+ * **/
+ getStatus() {
+ clearInterval(this.timer)
+ this.$api
+ .tltMerOpenFindOpenSts()
+ .then((res) => {
+ this.merType = res.body.merType
+ this.status = res.body.pageNum
+ this.uploadFileTypes = res.body.uploadFileTypes
+ this.canGoverification = res.body.payStatus
+
+ switch (this.status) {
+ case 0:
+ this.openResText = "提交成功";
+ this.tipText = "申请已提交请耐心等待";
+ this.btnTextOfFunction = "刷新";
+ this.btnTextOfRouter = "返回首页";
+ break;
+ case 1:
+ this.openResText = "审核失败";
+ this.btnTextOfFunction = "重新开通";
+ break;
+ case 2:
+ this.openResText = "初审中";
+ this.btnTextOfFunction = "刷新";
+ break;
+ case 3:
+ this.openResText = "审核通过";
+ this.btnTextOfFunction = "去签约";
+ break;
+ case 4:
+ this.openResText = "签约失败";
+ this.btnTextOfFunction = "重新签约";
+ break;
+ case 5:
+ this.openResText = "图片不清晰";
+ this.tipText = "请重新上传图片";
+ this.btnTextOfFunction = "上传图片";
+ break;
+ case 6:
+ this.openResText = "终审中";
+ this.btnTextOfFunction = "刷新";
+ break;
+ case 7:
+ this.openResText = "审核通过";
+ this.btnTextOfRouter = "返回首页";
+ break;
+ case 8:
+ this.bankCard = res.body.bankCard
+ this.openResText = "打款中,请稍后"
+ this.timer = setInterval(()=>{
+ this.getStatus()
+ },5000)
+ break;
+ case 9:
+ this.$router.push({
+ path:'/tonglian/verification',
+ query:{
+ ...this.$route.query
+ }
+ })
+ break;
+ }
+ this.showContent = true;
+ })
+ .catch((err) => {});
+ },
+ },
+ beforeRouteLeave (to, from, next) {
+ // ...
+ Toast.clear()
+ clearInterval(this.timer)
+ clearInterval(this.timer2)
+ next()
+ }
+};
+</script>
+<style lang="less" scoped>
+.tonglian-open-res-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ padding-top: 54px;
+ }
+ .res-box {
+ width: 96vw;
+ height: 365px;
+ //margin-top: 56px;
+ margin-left: 2vw;
+ background: #fff;
+ text-align: center;
+ padding-top: 35px;
+ img {
+ width: 115px;
+ height: 106px;
+ }
+ p:nth-of-type(1) {
+ margin-top: 20px;
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(58, 58, 58, 1);
+ }
+ p:nth-of-type(2) {
+ margin-top: 8px;
+ font-size: 12px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ button:nth-of-type(1) {
+ width: 320px;
+ height: 44px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ outline: none;
+ border: 0;
+ color: #fff;
+ margin-top: 50px;
+ margin-bottom: 20px;
+ }
+ button:nth-of-type(2) {
+ width: 320px;
+ height: 44px;
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ color: rgba(137, 110, 219, 1);
+ }
+ .dk-bankNo{
+ margin-top: 13px;
+ display: inline-block;
+ width: 262px;
+ height: 28px;
+ background: #FFFFFF;
+ border: 1px solid #EEEEEE;
+ border-radius: 14px;
+ text-align: center;
+ p{
+ color: #666666;
+ font-size: 12px;
+ margin-top: 0;
+ line-height: 30px;
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/staging.vue b/src/views/old/merchant/tonglian/staging.vue
new file mode 100644
index 0000000..694a217
--- /dev/null
+++ b/src/views/old/merchant/tonglian/staging.vue
@@ -0,0 +1,199 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-26 15:29:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-08 14:42:58
+ * @Description: 通联开通详情
+ -->
+<template>
+ <div class="huabei-detail-page">
+ <van-nav-bar
+ :title="this.$route.query.title"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px;"
+ >
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="top-back"></div>
+ <div v-show="this.$route.query.typeId == 200008">
+ <HstagingDetailDmf :infoList="infoList" :rateList="prodRef" :rateListRule="rateListRule" :hasTitle="false"></HstagingDetailDmf>
+ </div>
+ <div v-show="this.$route.query.typeId != 200008">
+ <HstagingDetail :infoList="infoList" :rateList="prodRef" :rateListRule="rateListRule" :hasTitle="true"></HstagingDetail>
+ </div>
+ </div>
+</template>
+
+<script>
+import HstagingDetailDmf from "@/components/common/h-staging-detail-dmf.vue";
+import HstagingDetail from "@/components/common/h-staging-detail.vue";
+export default {
+ name: "add-account",
+ components:{
+ HstagingDetail,HstagingDetailDmf
+ },
+ data() {
+ return {
+ prodRef: [{termName: '期数', platRate: '智享服务费率', zfbRate: '花呗分期手续费率'}],
+ detailInfo:{},
+ alipayInfo: {},
+ infoList:[],
+ rateListRule:''
+ };
+ },
+ computed:{
+ addrss(){
+ if(this.detailInfo.bankAddr){
+ return this.detailInfo.bankAddr.province.name + '-' + this.detailInfo.bankAddr.city.name
+ }else{
+ return ''
+ }
+ },
+ userAddrss(){
+ if(this.detailInfo.addr){
+ return this.detailInfo.addr.province.name + '-' + this.detailInfo.addr.city.name
+ }else{
+ return ''
+ }
+ },
+ merTypeStr(){
+ if(this.detailInfo.merType == '02'){
+ return '个体工商户'
+ }
+ if(this.detailInfo.merType == '03'){
+ return '企业商户'
+ }
+ },
+ settTypeStr(){
+ if(this.detailInfo.settType == '01'){
+ return '银行卡'
+ }
+ if(this.detailInfo.settType == '02'){
+ return '支付宝'
+ }
+ }
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 初始化页面
+ init() {
+ this.$api
+ .merPayInfo({
+ zfbVersion: this.$route.query.zfbVersion,
+ prodId: this.$route.query.prodId
+ })
+ .then(res => {
+ if(this.$route.query.typeId != 200008){
+ this.prodRef = [ ...this.prodRef,...res.body.prodBaseTermInfVo]
+ this.rateListRule = [{keyName:'termName'},{keyName:'platRate',type:'isRate'},{keyName:'zfbRate',type:'isRate'}]
+ }else{
+ this.prodRef = [...res.body.payMethods]
+ this.rateListRule = [{keyName:'payMethodName'},{keyName:'fee',type:'isRate'}]
+ }
+ this.detailInfo = res.body.detailInfo
+ this.alipayInfo = res.body
+
+ // 组装展示数组
+ this.infoList = [
+ {
+ title:'企业名称',
+ value:this.detailInfo.merName
+ },
+ {
+ title:'网商商户号',
+ value:this.detailInfo.mybankMerNo
+ },
+ {
+ title:'开通日期',
+ value:this.alipayInfo.authTimeStr
+ },
+ {
+ title:'所在地址',
+ value:this.userAddrss
+ },
+ {
+ title:'详细地址',
+ value:this.detailInfo.addr?this.detailInfo.addr.dtlAddr:''
+ },
+ {
+ title:'法人手机号',
+ value:this.detailInfo.legalMblNo
+ },
+ {
+ title:'结算方式',
+ value:this.settTypeStr
+ },
+ {
+ title:this.detailInfo.settType=='01'?this.detailInfo.merType=='02'?'经营者银行卡号':'企业对公银行账户账号':'支付宝账号',
+ value:this.detailInfo.settType=='01'?this.detailInfo.bankCardNo:this.detailInfo.aliLogonId
+ }
+ ]
+ if(this.detailInfo.settType=='01' && this.detailInfo.merType=='02'){
+ this.infoList.push({
+ title:'经营者银行卡户名',
+ value:this.detailInfo.legalName
+ })
+ }
+ if(this.detailInfo.settType=='01' && this.detailInfo.merType=='03'){
+ this.infoList.push({
+ title:'企业对公银行账户名称',
+ value:this.detailInfo.merName
+ })
+ }
+ this.infoList.push({
+ title:'账号类型',
+ value:this.detailInfo.merType=='02'?'个体工商户':'企业用户'
+ })
+ if(this.detailInfo.settType=='01' && this.detailInfo.merType=='03'){
+ this.infoList.push({
+ title:'开户支行联行号',
+ value:this.detailInfo.contactLine
+ })
+ }
+ if(this.detailInfo.settType=='01' && this.detailInfo.merType=='02'){
+ this.infoList.push({
+ title:'开户支行名称',
+ value:this.detailInfo.bankAddr?this.detailInfo.bankAddr.dtlAddr:''
+ },{
+ title:'开户支行所在地',
+ value:this.addrss
+ }
+ )
+ }
+
+ });
+ }
+ },
+ created() {
+ this.init();
+ }
+};
+</script>
+
+<style lang="less">
+.huabei-detail-page {
+ padding-top: 45px;
+ background: #f5f5f7;
+ min-height: 100vh;
+
+ .top-back {
+ width: 100%;
+ height: 140px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 122, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+
+ .unit {
+ font-size: 14px;
+ }
+}
+</style>
diff --git a/src/views/old/merchant/tonglian/startOpen.vue b/src/views/old/merchant/tonglian/startOpen.vue
new file mode 100644
index 0000000..7a017d9
--- /dev/null
+++ b/src/views/old/merchant/tonglian/startOpen.vue
@@ -0,0 +1,985 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-18 10:39:57
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-25 11:41:23
+ * @Description: 通联通道开通信息录入页面
+-->
+<template>
+ <div class="startOpen-page">
+ <v-navbar title="开通通联通道"></v-navbar>
+ <div class="info-box">
+ <van-cell-group>
+ <van-cell title-class="title-class" title="所在省市" :value="addr" is-link @click="show=true" />
+ <van-field
+ label-class="label-class"
+ label-width="100px"
+ input-align="right"
+ v-model="detailInfo.addr.dtlAddr"
+ label="详细地址"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ label-width="150px"
+ input-align="right"
+ maxlength="11"
+ v-model="detailInfo.legalMblNo"
+ label="法人手机号"
+ placeholder="请输入"
+ />
+ <van-cell
+ title-class="title-class"
+ title="商户类型"
+ :value="storeTypeStr"
+ is-link
+ @click="showStore=true"
+ />
+ <van-cell
+ title-class="title-class"
+ title="经营类目"
+ :value="categoryStr"
+ is-link
+ @click="showCategory=true"
+ />
+ <van-field
+ label-class="label-class"
+ :disabled="isdisabledlegalName"
+ v-if="storeType=='02'"
+ label-width="130px"
+ input-align="right"
+ maxlength="8"
+ v-model="legalName"
+ label="经营者身份证姓名"
+ placeholder="请输入"
+ />
+ <van-field
+ v-else
+ label-class="label-class"
+ :disabled="isdisabledlegalName"
+ label-width="130px"
+ input-align="right"
+ maxlength="8"
+ v-model="legalName"
+ label="法人身份证姓名"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ :disabled="isdisabledlegalIdNo"
+ v-if="storeType=='02'"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="legalIdNo"
+ label="经营者身份证号"
+ placeholder="请输入"
+ />
+ <van-field
+ v-else
+ label-class="label-class"
+ :disabled="isdisabledlegalIdNo"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="legalIdNo"
+ label="法人身份证号"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ label-width="120px"
+ disabled
+ center
+ clearable
+ label="身份证期限类型"
+ >
+ <template #button>
+ <van-button
+ size="mini"
+ color="#896edb"
+ :plain="idType==1?false:true"
+ style="border-radius: 3px;width:50px"
+ type="primary"
+ @click="btnClick(1)"
+ >有效期</van-button>
+ <van-button
+ size="mini"
+ color="#896edb"
+ :plain="idType==2?false:true"
+ style="border-radius: 3px;width:50px"
+ type="primary"
+ @click="btnClick(2)"
+ >长期</van-button>
+ </template>
+ </van-field>
+ <van-cell
+ v-show="idType==1"
+ title-class="title-class"
+ title="身份证有效期"
+ :value="detailInfo.legalIdVld"
+ is-link
+ @click="showIdDate=true"
+ />
+ <!-- 新增字段 -->
+ <van-cell
+ title-class="title-class"
+ :title="storeType=='02'?'经营者职业':'法人职业'"
+ :value="legalOccupStr"
+ is-link
+ @click="showOccupation=true"
+ />
+ <van-field
+ label-class="label-class"
+ label-width="160px"
+ input-align="right"
+ maxlength="18"
+ v-model="detailInfo.busDtl"
+ label="经营内容"
+ placeholder="请输入"
+ />
+
+ <van-field
+ label-class="label-class"
+ :disabled="isdisabledlicenseNo"
+ v-if="storeType=='02'"
+ label-width="160px"
+ input-align="right"
+ maxlength="18"
+ v-model="licenseNo"
+ label="营业执照工商注册号"
+ placeholder="请输入"
+ />
+ <van-field
+ v-else
+ label-class="label-class"
+ :disabled="isdisabledlicenseNo"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="licenseNo"
+ label="统一社会信用代码"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ label-width="120px"
+ disabled
+ center
+ clearable
+ label="营业执照期限类型"
+ >
+ <template #button>
+ <van-button
+ size="mini"
+ color="#896edb"
+ :plain="yyType==1?false:true"
+ style="border-radius: 3px;width:50px"
+ type="primary"
+ @click="btnClickyy(1)"
+ >有效期</van-button>
+ <van-button
+ size="mini"
+ color="#896edb"
+ :plain="yyType==2?false:true"
+ style="border-radius: 3px;width:50px"
+ type="primary"
+ @click="btnClickyy(2)"
+ >长期</van-button>
+ </template>
+ </van-field>
+ <van-cell
+ title-class="title-class"
+ v-show="yyType==1"
+ title="营业执照有效期"
+ :value="detailInfo.licenseVld"
+ is-link
+ @click="showDate=true"
+ />
+ <van-cell
+ title-class="title-class"
+ title="结算方式"
+ :value="endTypeStr"
+ is-link
+ @click="showType=true"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='02'&&endType=='02'"
+ label-width="160px"
+ input-align="right"
+ maxlength="18"
+ v-model="detailInfo.aliLogonId"
+ label="支付宝账号"
+ placeholder="请输入经营者支付宝账号"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='03'&&endType=='02'"
+ label-width="160px"
+ input-align="right"
+ maxlength="18"
+ v-model="detailInfo.aliLogonId"
+ label="支付宝账号"
+ placeholder="请输入公司支付宝账号"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='02'&&endType!='02'"
+ label-width="160px"
+ input-align="right"
+ maxlength="19"
+ v-model="detailInfo.bankCardNo"
+ label="经营者银行卡号"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='03'&&endType!='02'"
+ label-width="160px"
+ input-align="right"
+ maxlength="30"
+ v-model="detailInfo.bankCardNo"
+ label="企业对公银行账户号"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='02'&&endType!='02'"
+ :disabled="isdisabledlegalName"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="legalName"
+ label="经营者银行卡户名"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='03'&&endType!='02'"
+ :disabled="isdisabledmerName"
+ label-width="160px"
+ input-align="right"
+ maxlength="18"
+ v-model="merName"
+ label="企业对公银行账户名称"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ :disabled="accountType?true:false"
+ v-if="endType!='02'"
+ label-width="140px"
+ input-align="right"
+ maxlength="18"
+ v-model="accountType"
+ label="账户类型"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType=='03'&&endType!='02'"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="detailInfo.contactLine"
+ label="开户行联行号"
+ placeholder="请输入"
+ />
+ <van-field
+ label-class="label-class"
+ v-if="storeType!='03'&&endType!='02'"
+ label-width="130px"
+ input-align="right"
+ maxlength="18"
+ v-model="detailInfo.bankAddr.dtlAddr"
+ label="开户支行名称"
+ placeholder="请输入"
+ />
+ <van-cell
+ title-class="title-class"
+ v-if="endType!='02'&&storeType!='03'"
+ title="开户支行所在地"
+ :value="bankAddr"
+ is-link
+ @click="showAddress=true"
+ />
+ </van-cell-group>
+ <button class="btn-y" :style="{background:$store.state.defaultColor}" @click="goNext">下一步</button>
+ <!-- 省市弹窗 -->
+ <van-popup v-model="show" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="省市选择"
+ :columns="areaInfos"
+ @cancel="show=false"
+ @confirm="onConfirmArea"
+ />
+ </van-popup>
+ <!-- 商户类型弹窗 -->
+ <van-popup v-model="showStore" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="商户类型选择"
+ :columns="merTypes"
+ @cancel="showStore=false"
+ @confirm="onConfirmmerTypes"
+ />
+ </van-popup>
+ <!-- 经营类目弹窗 -->
+ <van-popup v-model="showCategory" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="商户类型选择"
+ :columns="categorys"
+ @cancel="showCategory=false"
+ @confirm="onConfirmmerCategory"
+ />
+ </van-popup>
+ <!-- 营业执照有效期弹窗 -->
+ <van-popup v-model="showIdDate" position="bottom" :style="{ height: '40%' }">
+ <van-datetime-picker
+ v-model="currentIdDate"
+ type="date"
+ title="选择身份证时间"
+ :min-date="minDate"
+ :max-date="maxDate"
+ @cancel="showIdDate=false"
+ @confirm="onConfirmIdDate"
+ />
+ </van-popup>
+ <!-- 营业执照有效期弹窗 -->
+ <van-popup v-model="showDate" position="bottom" :style="{ height: '40%' }">
+ <van-datetime-picker
+ v-model="currentDate"
+ type="date"
+ title="选择年月日"
+ :min-date="minDate"
+ :max-date="maxDate"
+ @cancel="showDate=false"
+ @confirm="onConfirmDate"
+ />
+ </van-popup>
+ <!-- 结算方式弹窗 -->
+ <van-popup v-model="showType" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="结算方式选择"
+ :columns="storeType=='02'?settTypes:settTypes2"
+ @cancel="showType=false"
+ @confirm="onConfirmsettTypes"
+ />
+ </van-popup>
+ <!-- 开户支行所在地弹窗 -->
+ <van-popup v-model="showAddress" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="开户支行所在地选择"
+ :columns="bankAreaInfos"
+ @cancel="showAddress=false"
+ @confirm="onConfirmbankArea"
+ />
+ </van-popup>
+ <!-- 经营者职业弹窗 -->
+ <van-popup v-model="showOccupation" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ value-key="name"
+ show-toolbar
+ title="职业选择"
+ :columns="legalOccups"
+ @cancel="showOccupation=false"
+ @confirm="onConfirmOccupation"
+ />
+ </van-popup>
+ </div>
+ </div>
+</template>
+<script>
+import { mapState, mapGetters } from 'vuex';
+export default {
+ data() {
+ return {
+ minDate: new Date(),
+ maxDate: new Date(2099, 11, 31),
+ currentDate: new Date(),
+ currentIdDate: new Date(),
+
+ isdisabledlegalName: false, //法人及户名是否禁用
+ isdisabledlegalIdNo: false, //身份证号是否禁用
+ isdisabledmerName: false, //企业对公银行账户名称是否禁用
+ isdisabledlicenseNo: false, //营业执照号是否禁用
+
+ show: false, //省市弹出层展示
+ showStore: false, //商户类型弹出层
+ showCategory:false,//经营类目弹窗层
+ showDate: false, //营业执照有效期弹出层
+ showIdDate: false, //身份证有效期弹出层
+ showType: false, //结算方式弹出层
+ showAddress: false, //开户支行所在地弹窗
+ showUserSex:false,//经营者性别弹窗
+ showOccupation:false,//经营者职业弹窗
+ merTypes: [], //商户类型数组
+ categorys:[], //经营类目数组
+ settTypes: [], //结算类型数组-个体
+ settTypes2:[],//结算类型数组-企业
+ areaInfos: [], //地址数组
+ bankAreaInfos: [], //银行地址数组
+ legalOccups:[],//经营者-法人职业数组
+ endType: "", //结算状态-用于判断输入框
+ endTypeStr: "", //结算状态字符串
+ storeType: "", //商户状态-用于判断输入框
+ storeTypeStr: "", //商户状态字符串
+ category:'',//经营类目-用于判断输入框
+ categoryStr:'',//经营类目字符串
+ legalOccupStr:'',//经营者-法人职业字符串
+ idType: 1, //身份证有效期类型
+ yyType: 1, //营业执照有效期类型
+ detailInfo: {
+ addr: {
+ dtlAddr: "", //省市详细地址
+ province: {
+ code: "",
+ name: "",
+ }, //省
+ city: {
+ code: "",
+ name: "",
+ }, //市
+ area: "", //区
+ },
+ bankAddr: {
+ dtlAddr: "",
+ province: {
+ code: "",
+ name: "",
+ },
+ city: {
+ code: "",
+ name: "",
+ },
+ area: "",
+ },
+ legalMblNo: "", //法人电话号码
+ merType: "", //商户类型
+ settType: "", //结算类型
+ legalOccup:'',//经营者-法人职业
+ busDtl:"",//经营内容
+ bankCardNo: "", //银行卡号
+ aliLogonId: "", //支付宝账号
+ licenseVld: "", //社会信用代码证有效期
+ legalIdVld: "", //法人身份证有效期
+ },
+ legalIdNo: "", //法人身份证号
+ legalName: "", //法人姓名
+ licenseNo: "", //商户营业执照号
+ merName: "", //商户名称
+ };
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ accountType() {
+ if (this.detailInfo.merType == "02") {
+ return "对私";
+ }
+ if (this.detailInfo.merType == "03") {
+ return "对公";
+ }
+ },
+ addr() {
+ let str = "";
+ let _this = this;
+ if (_this.detailInfo.addr.province.code) {
+ _this.areaInfos.forEach((e) => {
+ if (e.code == _this.detailInfo.addr.province.code) {
+ e.children.forEach((i) => {
+ if (i.code == _this.detailInfo.addr.city.code) {
+ str = e.name + "/" + i.name;
+ }
+ });
+ }
+ });
+ return str;
+ }
+ },
+ bankAddr() {
+ let str = "";
+ let _this = this;
+ if (_this.detailInfo.bankAddr.province.code) {
+ _this.bankAreaInfos.forEach((e) => {
+ if (e.code == _this.detailInfo.bankAddr.province.code) {
+ e.children.forEach((i) => {
+ if (i.code == _this.detailInfo.bankAddr.city.code) {
+ str = e.name + "/" + i.name;
+ }
+ });
+ }
+ });
+ return str;
+ }
+ },
+ },
+ created() {
+ this.init();
+ },
+ methods: {
+ /**
+ * @description:获取页面初始化信息
+ * @return void
+ * **/
+ init() {
+ this.$api.tltMerOpenInit().then((res) => {
+ // 附值弹出层选择项
+ this.merTypes = res.body.merTypes;
+ this.categorys = res.body.merMccs;
+ this.settTypes = res.body.settTypes;//个体工商户结算类型
+ this.settTypes2 = [res.body.settTypes[0]];//企业商户只能选银行卡
+ this.areaInfos = res.body.areaInfos;
+ this.bankAreaInfos = res.body.bankAreaInfos;
+ this.legalOccups = res.body.legalOccups;
+ // 如果初始化接口拿到信息并且本地没有保存信息,显示取初始化信息
+ if (res.body.detailInfo && !sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)) {
+ this.detailInfo = res.body.detailInfo;
+ // 处理两个地址
+ if (!res.body.detailInfo.addr) {
+ this.detailInfo.addr = {
+ dtlAddr: "", //省市详细地址
+ province: {
+ code: "",
+ name: "",
+ }, //省
+ city: {
+ code: "",
+ name: "",
+ }, //市
+ area: "", //区
+ };
+ }
+ if (!res.body.detailInfo.bankAddr) {
+ this.detailInfo.bankAddr = {
+ dtlAddr: "",
+ province: {
+ code: "",
+ name: "",
+ },
+ city: {
+ code: "",
+ name: "",
+ },
+ area: "",
+ };
+ }
+ // 获取选择框值
+ this.storeType = res.body.detailInfo.merType;
+ this.category = res.body.detailInfo.merMcc;
+ this.endType = res.body.detailInfo.settType;
+ // 循环取出对应名字
+ // 商户类型
+ this.merTypes.forEach((e) => {
+ if (e.code == this.detailInfo.merType) {
+ this.storeTypeStr = e.name;
+ }
+ });
+ // 经营类目
+ this.categorys.forEach((e) => {
+ if (e.code == this.detailInfo.merMcc) {
+ this.categoryStr = e.name;
+ }
+ });
+ // 结算类型
+ this.settTypes.forEach((e) => {
+ if (e.code == this.detailInfo.settType) {
+ this.endTypeStr = e.name;
+ }
+ });
+ this.legalOccups.forEach(item=>{
+ if(item.code == this.detailInfo.legalOccup){
+ this.legalOccupStr = item.name
+ }
+ })
+ // 处理图片
+ let picIdList = {
+ licencePhotos: this.detailInfo.licencePhotos,
+ cardFrontPhotos: this.detailInfo.cardFrontPhotos,
+ cardBackPhotos: this.detailInfo.cardBackPhotos,
+ handCardPhotos: this.detailInfo.handCardPhotos,
+ storeInnerPhotos: this.detailInfo.storeInnerPhotos,
+ storeSignPhotos: this.detailInfo.storeSignPhotos,
+ industryLicensePhotos: this.detailInfo.industryLicensePhotos,
+ };
+ // 进行本地存储图片列表
+ sessionStorage.setItem(`sib_tl_pic_${this.userinfo.orgId}`, JSON.stringify(picIdList));
+ }
+ // 本地有存储则返显存储信息,显示存储信息的情况仅限输入跳转下一页又返回这种情况,一旦开通成功则清除了本地存储
+ if(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)) {
+ this.idType = JSON.parse(
+ sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)
+ ).idType;
+ this.yyType = JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)).yyType
+ this.detailInfo = JSON.parse(
+ sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)
+ ).detailInfo;
+ this.storeType = this.detailInfo.merType;
+ this.merTypes.forEach((e) => {
+ if (e.code == this.detailInfo.merType) {
+ this.storeTypeStr = e.name;
+ }
+ });
+ this.category = this.detailInfo.merMcc;
+ this.categorys.forEach((e) => {
+ if (e.code == this.detailInfo.merMcc) {
+ this.categoryStr = e.name;
+ }
+ });
+ this.endType = this.detailInfo.settType;
+ this.settTypes.forEach((e) => {
+ if (e.code == this.detailInfo.settType) {
+ this.endTypeStr = e.name;
+ }
+ });
+ this.legalOccups.forEach(item=>{
+ if(item.code == this.detailInfo.legalOccup){
+ this.legalOccupStr = item.name
+ }
+ })
+ }
+ // 下列字段有则返显不可编辑,无则可输入
+ if (res.body.legalIdNo) {
+ this.isdisabledlegalIdNo = true;
+ }
+ if (res.body.legalName) {
+ this.isdisabledlegalName = true;
+ }
+ if (res.body.merName) {
+ this.isdisabledmerName = true;
+ }
+ if (res.body.licenseNo) {
+ this.isdisabledlicenseNo = true;
+ }
+ this.legalIdNo = res.body.legalIdNo;
+ this.legalName = res.body.legalName;
+ this.licenseNo = res.body.licenseNo;
+ this.merName = res.body.merName;
+ });
+ },
+ /**
+ * @description:省份选择
+ * @return void
+ * **/
+ onConfirmArea(indexText, indexList) {
+ /**
+ * 根据索引获取对应的省市code值
+ * **/
+ this.detailInfo.addr.province.code = this.areaInfos[indexList[0]].code;
+ this.detailInfo.addr.city.code = this.areaInfos[indexList[0]].children[
+ indexList[1]
+ ].code;
+ this.detailInfo.addr.province.name = this.areaInfos[indexList[0]].name;
+ this.detailInfo.addr.city.name = this.areaInfos[indexList[0]].children[
+ indexList[1]
+ ].name;
+ this.show = false;
+ },
+ /**
+ * @description:开户行地址选择
+ * @return void
+ * **/
+ onConfirmbankArea(indexText, indexList) {
+ /**
+ * 根据索引获取对应的省市code值
+ * **/
+ this.detailInfo.bankAddr.province.code = this.bankAreaInfos[
+ indexList[0]
+ ].code;
+ this.detailInfo.bankAddr.city.code = this.bankAreaInfos[
+ indexList[0]
+ ].children[indexList[1]].code;
+ this.detailInfo.bankAddr.province.name = this.bankAreaInfos[
+ indexList[0]
+ ].name;
+ this.detailInfo.bankAddr.city.name = this.bankAreaInfos[
+ indexList[0]
+ ].children[indexList[1]].name;
+ this.showAddress = false;
+ },
+ /**
+ * @description:身份证时间选择
+ * @return void
+ * **/
+ onConfirmIdDate() {
+ console.log(this.currentIdDate.getDate());
+ let timeStr =
+ this.currentIdDate.getFullYear() +
+ "-" +
+ (this.currentIdDate.getMonth() + 1) +
+ "-" +
+ this.currentIdDate.getDate();
+ this.detailInfo.legalIdVld = timeStr;
+ this.showIdDate = false;
+ },
+ /**
+ * @description:商户类型选择成功
+ * @param {Object} 选择的信息
+ * @return void
+ * **/
+ onConfirmmerTypes(value) {
+ this.detailInfo.merType = value.code;
+ this.storeType = value.code;
+ this.storeTypeStr = value.name;
+ // 企业商户只能使用银行卡,故此在选择企业03时 对下面结算框手动更改
+ if(this.storeType == '03'){
+ this.detailInfo.settType = '01';
+ this.endType = '01';
+ this.endTypeStr = '银行卡';
+ }
+ this.showStore = false;
+ },
+ /**
+ * @description:经营类目选择成功
+ * @param {Object} 选择的信息
+ * @return void
+ * **/
+ onConfirmmerCategory(value){
+ this.detailInfo.merMcc = value.code;
+ this.category = value.code;
+ this.categoryStr = value.name;
+ this.showCategory = false;
+ },
+ /**
+ * @description:结算类型选择成功
+ * @param {Object} 选择的信息
+ * @return void
+ * **/
+ onConfirmsettTypes(value) {
+ this.detailInfo.settType = value.code;
+ this.endType = value.code;
+ this.endTypeStr = value.name;
+ this.showType = false;
+ },
+ /**
+ * @description:营业执照有效期选择
+ * @return void
+ * **/
+ onConfirmDate() {
+ let timeStr =
+ this.currentDate.getFullYear() +
+ "-" +
+ (this.currentDate.getMonth() + 1) +
+ "-" +
+ this.currentDate.getDate();
+ this.detailInfo.licenseVld = timeStr;
+ this.showDate = false;
+ },
+ /**
+ * @description:法人-经营者职业选择
+ * @return void
+ * **/
+ onConfirmOccupation(val){
+ this.legalOccupStr = val.name
+ this.detailInfo.legalOccup = val.code
+ this.showOccupation = false
+ },
+ /**
+ * @description:身份证有效期类型选择
+ * @param {Number} 类型
+ * @return void
+ * **/
+ btnClick(id) {
+ console.log(this.addr);
+ this.detailInfo.legalIdVld = "";
+ if (id == 1) {
+ this.idType = 1;
+ } else {
+ this.idType = 2;
+ this.detailInfo.legalIdVld = "2099-12-31";
+ }
+ },
+ /**
+ * @description:营业执照有效期类型选择
+ * @param {Number} 类型
+ * @return void
+ * **/
+ btnClickyy(id) {
+ this.detailInfo.licenseVld = "";
+ if (id == 1) {
+ this.yyType = 1;
+ } else {
+ this.yyType = 2;
+ this.detailInfo.licenseVld = "2099-12-31";
+ }
+ },
+ /**
+ * @description:下一步
+ * @return void
+ * **/
+ goNext() {
+ let obj = {},
+ openObj = {};
+ /**
+ * 校验
+ * **/
+ if (this.$tool.checkValEmpty(this.detailInfo.addr.province.code)) {
+ this.$notify_success("请选择省市");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.addr.dtlAddr)) {
+ this.$notify_success("请填写具体地址");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.legalMblNo)) {
+ this.$notify_success("请填写法人手机号");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.merType)) {
+ this.$notify_success("请选择商户类型");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.merMcc)) {
+ this.$notify_success("请选择经营类目");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.legalName)) {
+ if (this.storeType == "02") {
+ this.$notify_success("请填写经营者身份证姓名");
+ } else {
+ this.$notify_success("请填写法人身份证姓名");
+ }
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.legalIdNo)) {
+ if (this.storeType == "02") {
+ this.$notify_success("请填写经营者身份证号");
+ } else {
+ this.$notify_success("请填写法人身份证号");
+ }
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.legalIdVld)) {
+ this.$notify_success("请选择身份证有效期");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.legalOccup)) {
+ if (this.storeType == "02") {
+ this.$notify_success("请选择经营者职业");
+ } else {
+ this.$notify_success("请选择法人职业");
+ }
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.busDtl)) {
+ this.$notify_success("请输入经营内容");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.licenseNo)) {
+ if (this.storeType == "02") {
+ this.$notify_success("营业执照工商注册号");
+ } else {
+ this.$notify_success("请填写统一社会信用代码");
+ }
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.licenseVld)) {
+ this.$notify_success("请选择营业执照有效期");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.settType)) {
+ this.$notify_success("请选择结算类型");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.detailInfo.bankCardNo) && this.endType == "01") {
+ if (this.storeType == "02" && this.endType == "01") {
+ this.$notify_success("请填写经营者银行卡号");
+ }
+ if(this.storeType == "03" && this.endType == "01") {
+ this.$notify_success("请填写企业对公银行账户号");
+ }
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.accountType) && this.endType == "01") {
+ this.$notify_success("请填写账户类型(对公/对私)");
+ return false;
+ }
+ if (
+ this.$tool.checkValEmpty(this.detailInfo.contactLine) &&
+ this.storeType=='03' && this.endType!='02'
+ ) {
+ this.$notify_success("请填写开户行联行号");
+ return false;
+ }
+ if (
+ this.$tool.checkValEmpty(this.detailInfo.bankAddr.dtlAddr) &&
+ this.endType == "01"&&this.storeType!='03'
+ ) {
+ this.$notify_success("请输入开户行名称");
+ return false;
+ }
+ if (
+ this.$tool.checkValEmpty(this.detailInfo.bankAddr.province.code) &&
+ this.endType == "01"&&this.storeType!='03'
+ ) {
+ this.$notify_success("请选择开户支行所在地");
+ return false;
+ }
+ if (
+ this.$tool.checkValEmpty(this.detailInfo.aliLogonId) &&
+ this.endType == "02"
+ ) {
+ this.$notify_success("请填写支付宝账号");
+ return false;
+ }
+
+ obj.legalIdNo = this.legalIdNo //法人身份证号
+ obj.legalName = this.legalName //法人姓名
+ obj.licenseNo = this.licenseNo //商户营业执照号
+ obj.merName = this.merName //商户名称
+ obj.idType = this.idType
+ obj.yyType = this.yyType
+ openObj = { ...obj, detailInfo: this.detailInfo };
+ sessionStorage.setItem(`sib_tl_openInfo_${this.userinfo.orgId}`, JSON.stringify(openObj));
+ this.$router.push({
+ path: "/tonglian/store-pictures",
+ query: {
+ ...this.$route.query,
+ },
+ });
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.startOpen-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ }
+ /deep/.label-class {
+ font-size: 14px;
+ color: #333;
+ }
+ /deep/.title-class {
+ font-size: 14px;
+ }
+ .info-box {
+ margin-top: 10px;
+ width: 96vw;
+ margin-left: 2vw;
+ }
+ .btn-y {
+ width: 78%;
+ margin-left: 11%;
+ margin-top: 40px;
+ height: 44px;
+ background: #896edb;
+ border-radius: 22px;
+ color: #fff;
+ outline: none;
+ border: 0;
+ margin-bottom: 30px;
+
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/storePictures.vue b/src/views/old/merchant/tonglian/storePictures.vue
new file mode 100644
index 0000000..0696fd8
--- /dev/null
+++ b/src/views/old/merchant/tonglian/storePictures.vue
@@ -0,0 +1,350 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-10 14:52:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-25 11:37:35
+ * @Description: 通联通道图片上传页面
+-->
+<template>
+ <div class="tonglian-store-pictures-page">
+ <v-navbar title="开通通联通道"></v-navbar>
+ <div class="pic-content">
+ <p class="tip" v-if="uploadFileTypes.indexOf(0)!= -1">
+ <span>上传营业执照</span>
+ <span>(请上传实拍原件或上传实拍加盖公章复印件)</span>
+ </p>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(0)!= -1"
+ :fileType="0"
+ :isCard="0"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.licencePhotos"
+ ></UploadFile>
+ <p class="tip" v-if="uploadFileTypes.indexOf(2)!= -1||uploadFileTypes.indexOf(3)!= -1">
+ <span>上传法人身份证正反面</span>
+ <span>(第一张人像面,第二张国徽面)(请上传实拍原件或上传实拍加盖公章复印件)</span>
+ </p>
+ <div class="idcard-box">
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(2)!= -1"
+ :fileType="2"
+ :isCard="1"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.cardFrontPhotos"
+ ></UploadFile>
+ <!-- :title="'2、上传法人身份证正反面'"
+ :tips="'(第一张人像面,第二张国徽面)'" -->
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(3)!= -1"
+ :fileType="3"
+ :isCard="2"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.cardBackPhotos"
+ ></UploadFile>
+ </div>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(21)!= -1"
+ :fileType="21"
+ :isCard="0"
+ :title="'上传手持身份证照片'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.handCardPhotos"
+ ></UploadFile>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(6)!= -1"
+ :fileType="6"
+ :isCard="0"
+ :title="'上传经营内景照片'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.storeInnerPhotos"
+ ></UploadFile>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(7)!= -1"
+ :fileType="7"
+ :isCard="0"
+ :title="'上传门头照'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.storeSignPhotos"
+ ></UploadFile>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(22)!= -1"
+ :fileType="22"
+ :isCard="0"
+ :title="merType=='03'?'上传开户许可证照片':'上传银行卡正面照片'"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.industryLicensePhotos"
+ ></UploadFile>
+ <!-- 新增补录图片 -->
+ <p class="tip" v-if="uploadFileTypes.indexOf(25)!= -1">
+ <span>签字授权委托书</span>
+ <span>检测到手机号非法人手机号,请下载签字授权委托书模板并按照指导完成填写后拍照上传</span>
+ <span @click="getModal">下载模板</span>
+ </p>
+ <UploadFile
+ v-if="uploadFileTypes.indexOf(25)!= -1"
+ :fileType="25"
+ :isCard="0"
+ :typeId="this.$route.query.typeId"
+ :sourceType="this.$route.query.zfbVersion"
+ :picList="uploadObj.authorPhotos"
+ ></UploadFile>
+ </div>
+ <f-space></f-space>
+ <button
+ class="btn-y"
+ :style="{background:$store.state.defaultColor}"
+ @click="handleOpenHuaBei"
+ >{{btnText}}</button>
+
+ </div>
+</template>
+<script>
+import UploadFile from "@/components/old/upload/uploadImgTl";
+import { mapState, mapGetters } from 'vuex';
+export default {
+ name: "add-account",
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ btnText:'下一步',
+ uploadObj: {
+ licencePhotos: [], // 营业执照
+ cardFrontPhotos: [], // 身份证正面照
+ cardBackPhotos: [], // 身份证反面照
+ handCardPhotos:[],//手持身份证照片
+ storeSignPhotos: [], // 门店招牌照
+ storeInnerPhotos: [], // 门店店内照
+ industryLicensePhotos:[],//开户许可证照片
+ authorPhotos:[]
+ }
+ };
+ },
+ created() {
+ this.uploadObj = {
+ licencePhotos: [], // 营业执照
+ cardFrontPhotos: [], // 身份证正面照
+ cardBackPhotos: [], // 身份证反面照
+ handCardPhotos:[],//手持身份证照
+ storeSignPhotos: [], // 门店招牌照
+ storeInnerPhotos: [], // 门店店内照
+ industryLicensePhotos:[],
+ authorPhotos:[],
+ };
+ this.getMyMation();
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ merType(){
+ if(this.$route.query.merType && this.$route.query.merType != undefined){
+ this.btnText = '提交开通'
+ return this.$route.query.merType
+ }else{
+ return JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)).detailInfo.merType
+ }
+ },
+ uploadFileTypes(){
+ if(this.$route.query.uploadFileTypes != undefined){
+ console.log(this.$route.query.uploadFileTypes)
+ return JSON.parse(this.$route.query.uploadFileTypes)
+ }else{
+ return [0,2,3,21,6,7,22]
+ }
+ }
+ },
+ methods: {
+ getModal(){
+ this.$api.tltMerOpenSendAuthFile().then(res=>{
+ this.$tool.toast("模板已下发至注册邮箱,请查收");
+ })
+ },
+ // 开通花呗
+ handleOpenHuaBei() {
+ if (this.$tool.checkValEmpty(this.uploadObj.licencePhotos)&&this.uploadFileTypes.indexOf(0) != -1) {
+ this.$tool.toast("请上传营业执照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.cardFrontPhotos)&&this.uploadFileTypes.indexOf(2) != -1) {
+ this.$tool.toast("请上传身份证正面照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.cardBackPhotos)&&this.uploadFileTypes.indexOf(3) != -1) {
+ this.$tool.toast("请上传身份证反面照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.handCardPhotos)&&this.uploadFileTypes.indexOf(21) != -1) {
+ this.$tool.toast("请上传手持身份证照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.storeInnerPhotos)&&this.uploadFileTypes.indexOf(6) != -1) {
+ this.$tool.toast("请上传经营内景照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.storeSignPhotos)&&this.uploadFileTypes.indexOf(7) != -1) {
+ this.$tool.toast("请上传门头照");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.industryLicensePhotos)&&this.uploadFileTypes.indexOf(22) != -1) {
+ this.$tool.toast(this.merType=='03'?"请上传开户许可证照":"请上传银行卡正面照片");
+ return false;
+ }
+ if (this.$tool.checkValEmpty(this.uploadObj.authorPhotos)&&this.uploadFileTypes.indexOf(25) != -1) {
+ this.$tool.toast("请上传签字授权委托书");
+ return false;
+ }
+
+ let picIdList = {
+ licencePhotos: [],
+ cardFrontPhotos: [],
+ cardBackPhotos: [],
+ handCardPhotos:[],
+ storeInnerPhotos: [],
+ storeSignPhotos: [],
+ industryLicensePhotos:[],
+ authorPhotos:[]
+ };
+
+ for (let i in this.uploadObj) {
+ this.uploadObj[i].forEach(item => {
+ picIdList[i].push(item.id + "");
+ });
+ }
+
+
+ if(!this.$route.query.merType && this.$route.query.merType == undefined){
+ sessionStorage.setItem(`sib_tl_pic_${this.userinfo.orgId}`,JSON.stringify(this.uploadObj))
+ let obj = JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`))
+ obj.detailInfo = {...JSON.parse(sessionStorage.getItem(`sib_tl_openInfo_${this.userinfo.orgId}`)).detailInfo,...picIdList}
+ sessionStorage.setItem(`sib_tl_openInfo_${this.userinfo.orgId}`,JSON.stringify(obj))
+ this.$router.push({
+ path: "/tonglian/open",
+ query: {
+ title: "开通通联通道",
+ ...this.$route.query
+ }
+ });
+ }else{
+ this.$api.tltMerOpenRepair({...picIdList}).then(res=>{
+ this.$router.push({
+ path: "/tonglian/open-result",
+ query: {
+ title: "开通通联通道"
+ }
+ });
+ })
+ }
+
+
+
+ },
+ // 获取返显资料
+ getMyMation() {
+ if (sessionStorage.getItem(`sib_tl_pic_${this.userinfo.orgId}`)) {
+ // if(sessionStorage.getItem("sib_tl_openInfo")){
+ // var obj = JSON.parse(sessionStorage.getItem("sib_tl_openInfo")).detailInfo;
+ // }
+ if(sessionStorage.getItem(`sib_tl_pic_${this.userinfo.orgId}`)){
+ var obj = JSON.parse(sessionStorage.getItem(`sib_tl_pic_${this.userinfo.orgId}`));
+ }
+ if (obj.licencePhotos && obj.licencePhotos.length > 0) {
+ this.uploadObj.licencePhotos = obj.licencePhotos;
+ }
+ if (obj.cardFrontPhotos && obj.cardFrontPhotos.length > 0) {
+ this.uploadObj.cardFrontPhotos = obj.cardFrontPhotos;
+ }
+ if (obj.cardBackPhotos && obj.cardBackPhotos.length > 0) {
+ this.uploadObj.cardBackPhotos = obj.cardBackPhotos;
+ }
+ if (obj.handCardPhotos && obj.handCardPhotos.length > 0) {
+ this.uploadObj.handCardPhotos = obj.handCardPhotos;
+ }
+ if (obj.storeSignPhotos && obj.storeSignPhotos.length > 0) {
+ this.uploadObj.storeSignPhotos = obj.storeSignPhotos;
+ }
+ if (obj.storeInnerPhotos && obj.storeInnerPhotos.length > 0) {
+ this.uploadObj.storeInnerPhotos = obj.storeInnerPhotos;
+ }
+ if (obj.industryLicensePhotos && obj.industryLicensePhotos.length > 0) {
+ this.uploadObj.industryLicensePhotos = obj.industryLicensePhotos;
+ }
+ if (obj.authorPhotos && obj.authorPhotos.length > 0) {
+ this.uploadObj.authorPhotos = obj.authorPhotos;
+ }
+ }
+ }
+ },
+
+};
+</script>
+
+<style lang="less" scoped>
+.tonglian-store-pictures-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ }
+ .info-box {
+ margin-top: 10px;
+ width: 96vw;
+ margin-left: 2vw;
+ }
+ .pic-content {
+ padding: 20px 0px 20px 10px;
+ box-sizing: border-box;
+ background: #fff;
+ width: 96vw;
+ margin-left: 2vw;
+ margin-top: 10px;
+ .tip{
+ span:nth-of-type(2){
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(255,102,102,1);
+ }
+ span:nth-of-type(3){
+ margin-top: 10px;
+ display: block;
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:#1890FF;
+ }
+ }
+ }
+
+ .idcard-box {
+ &{
+ display: flex;
+ //justify-content: space-around;
+ }
+ div {
+ display: inline-block;
+ width: 40%;
+ }
+ div:nth-of-type(2) {
+ //margin-left: -240px;
+ }
+ }
+ .btn-y {
+ width: 78%;
+ margin-left: 11%;
+ //margin-top: 40px;
+ height: 44px;
+ background: #896EDB;
+ border-radius: 22px;
+ color: #fff;
+ outline: none;
+ border: 0;
+ margin-bottom: 30px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/verification.vue b/src/views/old/merchant/tonglian/verification.vue
new file mode 100644
index 0000000..6ce84aa
--- /dev/null
+++ b/src/views/old/merchant/tonglian/verification.vue
@@ -0,0 +1,204 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-10-21 19:42:42
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-04 15:47:59
+ * @Description:
+-->
+!<template>
+ <div class="verification-page">
+ <van-nav-bar
+ title="打款验证"
+ left-arrow
+ @click-left="onClickLeft"
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div class="ipt-box">
+ <p class="ipt-p">收款金额验证</p>
+ <span class="ipt-tip">¥</span>
+ <input type="text" v-model="payAmt" class="ipt" placeholder="请输入验证金额" maxlength="4">
+ </div>
+ <div class="tip-box">
+ <p class="tip-p">我们将向您的对公结算银行卡进行一笔小额转账以确保银行卡信息准确无误,请将我们的打款金额输入至输入框后点击确认完成验证</p>
+ </div>
+ <button class="confirm-btn" @click="hanldClick">确认</button>
+ <van-dialog v-model="show" title="打款提示" confirm-button-color="#896EDB">
+ <div style="text-align:center;box-size:border-box;padding:20px 10px;font-size:14px">
+ <p>打款金额输入错误,请重新输入</p>
+ </div>
+ </van-dialog>
+ <van-dialog v-model="show2" title="打款提示" @confirm="handConfirm" confirm-button-color="#896EDB">
+ <div style="text-align:center;box-size:border-box;padding:20px 10px;font-size:14px">
+ <p>打款金额输入错误,两次验证错误,我们将重新打款进行验证,请稍后</p>
+ </div>
+ </van-dialog>
+ </div>
+</template>
+
+<script>
+import Vue from "vue";
+import { Toast, Dialog } from "vant";
+
+Vue.use(Toast);
+Vue.use(Dialog);
+export default {
+ data(){
+ return {
+ show:false,
+ show2:false,
+ payAmt:'',//验证金额
+ timer:'',
+ isValid:'',//验证金额结果
+ cont:1 // 计数器
+ }
+ },
+ created(){},
+ mounted(){},
+ methods:{
+ handConfirm(){
+ this.$router.push({
+ path:'/tonglian/open-result',
+ query:{
+ verificationDone:'done',
+ ...this.$route.query
+ }
+ })
+ },
+ /**
+ * @description 返回至个人中心首页
+ * @returns void
+ * **/
+ onClickLeft(){
+ if(this.$route.query.isApp == 1){
+ this.$router.push({
+ path:'/app/home'
+ });
+ }else{
+ this.$router.push({
+ path:'/main/mine'
+ });
+ }
+
+ },
+ /**
+ * @description 提交验证
+ * @returns void
+ * **/
+ hanldClick(){
+ /**
+ * 1.发起验证请求
+ * 2.验证成功后返回状态页面
+ *
+ * **/
+ this.cont = this.cont + 1
+ this.$api.tltMerOpenPayAuth({
+ payAmt: Number(this.payAmt)
+ }).then(res=>{
+ this.isValid = res.body.isValid
+ this.cont = res.body.matchNum
+ if(this.isValid){
+ this.$router.push({
+ path:'/tonglian/open-result',
+ query:{
+ verificationDone:'done',
+ ...this.$route.query
+ }
+ })
+ }else{
+ if(this.cont == 2){
+ this.show2 = true
+
+ }else{
+ this.show = true
+ }
+ }
+ })
+ },
+ },
+ beforeRouteLeave (to, from, next) {
+ // ...
+ Toast.clear()
+ clearInterval(this.timer)
+ next()
+ }
+}
+</script>
+<style lang="less">
+ .verification-page{
+ &{
+ min-height: 100vh;
+ background-color: #f5f5f7;
+ }
+ .ipt-box{
+ &{
+ padding: 15px 20px;
+ box-sizing: border-box;
+ background: #fff;
+ width: 100%;
+ margin-top: 15px;
+ }
+ .ipt-p{
+ margin-bottom: 10px;
+ }
+ .ipt-tip{
+ font-size: 30px;
+ font-weight: 550;
+ margin-right: 10px;
+ }
+ .ipt{
+ border: 0;
+ outline: none;
+ font-size:20px;
+ height: 30px;
+ line-height: 30px;
+ width: 80%;
+ }
+ input::-webkit-input-placeholder { /* WebKit browsers */
+ font-size: 20px;
+ color: #999999;
+ }
+
+ input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
+ font-size: 20px;
+ color: #999999;
+ }
+
+ input::-moz-placeholder { /* Mozilla Firefox 19+ */
+ font-size: 20px;
+ color: #999999;
+ }
+
+ input:-ms-input-placeholder { /* Internet Explorer 10+ */
+ font-size: 20px;
+ color: #999999;
+ }
+ }
+ .tip-box{
+ &{
+ box-sizing: border-box;
+ width: 100%;
+ padding: 15px 20px;
+ }
+ .tip-p{
+ color: #999999;
+ }
+ }
+ .confirm-btn{
+ width: 94%;
+ height: 44px;
+ background: #896EDB;
+ border-radius: 22px;
+ margin-left: 3%;
+ margin-top: 100px;
+ outline: none;
+ border: 0;
+ color: #fff;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/withdrawal-history.vue b/src/views/old/merchant/tonglian/withdrawal-history.vue
new file mode 100644
index 0000000..d1ef851
--- /dev/null
+++ b/src/views/old/merchant/tonglian/withdrawal-history.vue
@@ -0,0 +1,139 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-17 15:34:17
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-12 20:30:01
+ * @Description:
+-->
+<template>
+ <div class="withdrawal-history-page">
+ <v-navbar title="提现记录"></v-navbar>
+ <div class="history-box">
+ <van-list
+ offset="50"
+ :immediate-check="false"
+ v-model="loading"
+ :finished="finished"
+ :error.sync="error"
+ finished-text="没有更多了"
+ error-text="加载失败,请稍后再试"
+ @load="onLoad"
+ >
+ <div class="list-item" v-for="(item,index) in list" :key="index">
+ <div class="left">
+ <p>{{item.statusName}}</p>
+ <p>{{item.withdTime | dateFmt(item.withdTime)}}</p>
+ </div>
+ <div class="right">
+ <p>{{item.status==0?'':item.status==1?'':item.status==2?'+':''}}{{item.amount}}</p>
+ <p>{{item.settType=='01'?'银行卡':'支付宝'}} {{item.withdAccount}}</p>
+ </div>
+ </div>
+ </van-list>
+ </div>
+ </div>
+</template>
+<script>
+import dateFmt from "../../../../utils/date";
+export default {
+ data() {
+ return {
+ list:[],
+ error:false,//加载错误
+ loading: false,//加载中
+ finished: false,//全部加载完成
+ lastId:'',//最后一条Id
+ }
+ },
+ filters: {
+ dateFmt(val) {
+ return dateFmt(val, "YYYY-MM-DD HH:mm");
+ },
+ },
+ created(){
+ this.onLoad()
+ },
+ methods:{
+ onLoad(){
+ this.loading = true
+ this.$api.tltWalletWithdrawDetails({
+ withdrawId:this.lastId
+ }).then(res=>{
+ if(res.body.items){
+ if(res.body.items.length < 10){
+ this.list = [...this.list,...res.body.items]
+ this.lastId = this.list[this.list.length-1].withdrawId
+ this.loading = false
+ this.finished = true
+ }else{
+ this.list = [...this.list,...res.body.items]
+ this.lastId = this.list[this.list.length-1].withdrawId
+ this.loading = false
+ }
+ }else{
+ this.loading = false
+ this.finished = true
+ }
+ }).catch(err=>{
+ this.error = true
+ })
+ }
+ },
+
+}
+</script>
+<style lang="less">
+ .withdrawal-history-page{
+ &{
+ background: #F5F5F7;
+ min-height: 100vh;
+ }
+ .history-box{
+ margin-top: 10px;
+ box-sizing: border-box;
+ padding: 0 17px;
+ background: #fff;
+ .list-item{
+ display: flex;
+ border-bottom:1px solid #F1F1F1;
+ padding: 16px 0;
+ .left{
+ width: 40%;
+ p:nth-of-type(1){
+ margin-bottom: 10px;
+ font-size:14px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(51,51,51,1);
+ }
+ p:nth-of-type(2){
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(153,153,153,1);
+ }
+ }
+ .right{
+ width: 59%;
+ text-align: right;
+ p:nth-of-type(1){
+ margin-bottom: 10px;
+ font-size:16px;
+ font-family:PingFang SC;
+ font-weight:bold;
+ color:rgba(51,51,51,1);
+ }
+ p:nth-of-type(2){
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(153,153,153,1);
+ }
+ }
+ }
+ .list-item:last-child{
+ border-bottom:0;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/withdrawal-result.vue b/src/views/old/merchant/tonglian/withdrawal-result.vue
new file mode 100644
index 0000000..f744388
--- /dev/null
+++ b/src/views/old/merchant/tonglian/withdrawal-result.vue
@@ -0,0 +1,115 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-08-17 15:34:00
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-12 17:22:28
+ * @Description: 通联提现结果页面
+-->
+<template>
+ <div class="withdrawal-result-page">
+ <v-navbar title="提现结果"></v-navbar>
+ <div class="res-box">
+ <img
+ v-if="status == 2"
+ src="../../../../../static/img/cg.png"
+ alt="提现成功"
+ />
+ <img
+ v-if="status == 0"
+ src="../../../../../static/img/ing.png"
+ alt="初始化"
+ />
+ <img
+ v-if="status == 1"
+ src="../../../../../static/img/ing.png"
+ alt="提现中"
+ />
+ <img
+ v-if="status == 3"
+ src="../../../../../static/img/cs.png"
+ alt="提现失败"
+ />
+ <p>{{ resultText }}</p>
+ </div>
+ <button class="btn-y" v-show="status != 0 && status != 1" @click="$router.go(-1)">返回</button>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ status: 0, //0 初始化 1提现中 2成功 3失败
+ resultText: "提现中,请稍后",
+ timer:"",
+ };
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ clearInterval(this.timer)
+ this.$api
+ .tltWalletWithdrawStatus({
+ withdrawId: this.$route.query.withdrawId,
+ })
+ .then((res) => {
+
+ this.status = res.body.status;
+ if (res.body.status == 3) {
+ this.resultText = "提现失败,请重试";
+ } else if (res.body.status == 2) {
+ this.resultText = "提现成功";
+ } else {
+ this.resultText = "提现中,请稍后";
+ this.timer = setInterval(()=>{
+ this.init()
+ },5000)
+ }
+ });
+ },
+ },
+ beforeRouteLeave (to, from, next) {
+ clearInterval(this.timer)
+ next()
+ }
+};
+</script>
+<style lang="less">
+.withdrawal-result-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ }
+ .res-box {
+ width: 96vw;
+ margin-left: 2vw;
+ box-sizing: border-box;
+ padding: 33px;
+ margin-top: 10px;
+ background: #fff;
+ text-align: center;
+ img {
+ width: 95px;
+ height: 95px;
+ }
+ p {
+ margin-top: 17px;
+ font-size: 14px;
+ color: #333;
+ font-weight: 500;
+ }
+ }
+ .btn-y{
+ width: 94%;
+ margin-left: 3%;
+ margin-top: 20px;
+ color:#fff ;
+ height: 44px;
+ background: #896edb;
+ border: 0;
+ outline: none;
+ border-radius: 22px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/tonglian/withdrawal.vue b/src/views/old/merchant/tonglian/withdrawal.vue
new file mode 100644
index 0000000..53b6e14
--- /dev/null
+++ b/src/views/old/merchant/tonglian/withdrawal.vue
@@ -0,0 +1,408 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-24 15:13:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-20 17:26:19
+ * @Description:
+ -->
+<template>
+ <div class="tonglian-withdrawals-page">
+ <v-navbar title="提现">
+ <div slot="right" @click="goHistory">提现纪录</div>
+ </v-navbar>
+ <!-- 账号 -->
+ <div class="zfb-box">
+ <div class="left">
+ <p>提现至</p>
+ </div>
+ <div class="right">
+ <span
+ v-if="sta == '02'"
+ style="color: #333333; font-size: 14px; margin-bottom: 5px"
+ >支付宝账号</span
+ >
+ <span
+ v-if="sta == '01'"
+ style="color: #333333; font-size: 14px; margin-top: 9px"
+ >银行卡账号</span
+ >
+ <span style="color: #333333; font-size: 14px">{{
+ withdAccount.replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
+ }}</span>
+ </div>
+ </div>
+ <!-- 金额 -->
+ <div class="money-box">
+ <div class="tit">
+ <p>提现金额</p>
+ </div>
+ <div class="input-box">
+ <span>¥</span>
+ <van-field
+ v-model="amount"
+ placeholder="请输入提现金额"
+ style="
+ width: 70%;
+ display: inline-block;
+ margin-left: 30px;
+ font-size: 18px;
+ "
+ :border="false"
+ maxlength="10"
+ />
+ <span @click="allWithd">全部提现</span>
+ </div>
+ <div class="yue">
+ <p>
+ <span>可提现金额:</span>
+ <span>¥{{ this.balanceAmt }}</span>
+ </p>
+ </div>
+ </div>
+ <van-button
+ round
+ type="info"
+ color="#896EDB"
+ style="
+ width: 86%;
+ margin-top: 60px;
+ margin-left: 7%;
+ background: #896edb;
+ color: #fff;
+ border: 0.02rem solid rgb(137, 110, 219);
+ "
+ @click="getWidthrawals"
+ >下一步</van-button
+ >
+ <!-- 短信弹窗 -->
+ <van-popup
+ v-model="showSendCode"
+ style="width: 75%; text-align: center; padding: 34px 18px 20px 18px"
+ >
+ <van-icon
+ name="cross"
+ size="20px"
+ style="position: absolute; right: 10px; top: 10px; color: #cccccc"
+ @click="closePop"
+ color="#CCCCCC"
+ />
+ <p style="font-size: 16px; font-weight: 500; color: rgba(0, 0, 0, 1)">
+ 请确认提现金额
+ </p>
+ <p
+ style="
+ font-size: 14px;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ margin: 12px 0 20px 0;
+ "
+ >
+ 您当前发起提现金额为:
+ </p>
+ <p style="font-size: 18px;">{{amount}}元</p>
+ <!-- <div class="withdrawal-code-box">
+ <input
+ type="text"
+ v-model="authCode"
+ placeholder="请输入验证码"
+ maxlength="6"
+ />
+ <van-button size="small" color="#896EDB" plain type="info" @click="getCode">{{
+ btnText
+ }}</van-button>
+ </div> -->
+ <button class="withdrawal-btn" @click="goResrult">发起提现</button>
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import QRCode from "qrcode";
+//import { setInterval } from 'timer';
+import { Notify,Toast } from "vant";
+import { Icon } from "vant";
+
+Vue.use(Toast);
+Vue.use(Icon);
+Vue.use(Notify);
+export default {
+ data() {
+ return {
+ btnDis: false, //获取验证码按钮是否禁用
+ btnText: "发送验证码",
+ params: {}, //路由接收的参数
+ showSendCode: false, //短信验证码弹窗
+ showTip: false, //提示弹窗
+ amount: "", //提现金额
+ timer: "", //轮训定时器
+ balanceAmt: "", //可提现余额
+ branchName: "", //开户支行名称
+ withdAccount: "", //提现账户
+ legalMblNo: "", //提现手机号
+ authCode: "", //验证码
+ withdrawId: "", //提现id
+ sta: 1,
+ hasGetCode:true,
+ };
+ },
+ created() {
+ this.$api.tltWalletInit().then((res) => {
+ this.balanceAmt = res.body.balanceAmt;
+ this.sta = res.body.settType;
+ this.branchName = res.body.branchName;
+ this.withdAccount = res.body.withdAccount;
+ this.legalMblNo = res.body.legalMblNo;
+ });
+ },
+ mounted() {
+ this.params = this.$route.params;
+ },
+ updated() {
+ window.onresize;
+ },
+ beforeDestroy() {
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+ methods: {
+ /**
+ * @description:获取验证码
+ * @return void
+ * **/
+ getCode() {
+ let _this = this;
+ this.$api
+ .tltWalletSendSmsCode({
+ amount: this.amount,
+ })
+ .then((res) => {
+ this.hasGetCode = true
+ this.withdrawId = res.body.withdrawId;
+ this.btnText = 60;
+ this.btnDis = true;
+ this.timer = setInterval(function () {
+ if (_this.btnText == 1) {
+ _this.btnText = "重新获取";
+ _this.btnDis = false;
+ clearInterval(_this.timer);
+ } else {
+ _this.btnText = --_this.btnText;
+ }
+ }, 1000);
+ });
+ },
+ /**
+ * @description:弹出层关闭
+ * @return void
+ * **/
+ closePop() {
+ this.showSendCode = false;
+ },
+ /**
+ * @description:提现函数
+ * @return void
+ * **/
+ getWidthrawals() {
+ if (this.amount <= 0) {
+ Notify({ type: "primary", message: "提现金额需大于0元" });
+ }else if (this.amount > this.balanceAmt) {
+ Notify({ type: "primary", message: "提现金额不得大于余额" });
+ } else {
+ this.showSendCode = true;
+ this.getCode()
+ }
+ },
+ /**
+ * @description:全部提现
+ * @return void
+ * **/
+ allWithd() {
+ this.amount = this.balanceAmt;
+ },
+ /**
+ * @description:提交提现,跳转提现结果
+ * @return void
+ * **/
+ goResrult() {
+ if(!this.hasGetCode){
+ Toast.fail('请先获取验证码');
+ return false
+ }
+ this.$api
+ .tltWalletWithdraw({
+ withdrawId: this.withdrawId,
+ authCode: '888888',
+ amount: this.amount,
+ })
+ .then((res) => {
+ this.$router.push({
+ path: "/tonglian/Withdrawal-result",
+ query: {
+ withdrawId: this.withdrawId,
+ },
+ });
+ });
+ },
+ /**
+ * @description:跳转提现记录
+ * @return void
+ * **/
+
+ goHistory() {
+ this.$router.push({
+ path: "/tonglian/withdrawal-history",
+ });
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.tonglian-withdrawals-page {
+ & {
+ background-color: #f0f1f3;
+ height: 100vh;
+ }
+ .clearfix {
+ *zoom: 1;
+ }
+ .clearfix:after {
+ clear: both;
+ display: block;
+ visibility: hidden;
+ height: 0;
+ content: ".";
+ }
+ .zfb-box {
+ height: 60px;
+ width: 94%;
+ background-color: white;
+ border-radius: 3px;
+ margin-left: 3%;
+ margin-top: 20px;
+ display: flex;
+ .left {
+ width: 20%;
+ box-sizing: border-box;
+ padding-left: 13px;
+ line-height: 60px;
+ p {
+ color: #333333;
+ font-size: 18px;
+ font-weight: Bold;
+ text-align: left;
+ }
+ }
+ .right {
+ width: 84%;
+ box-sizing: border-box;
+ padding-left: 10px;
+ line-height: 60px;
+ }
+ }
+ .money-box {
+ width: 94%;
+ background-color: white;
+ margin-left: 3%;
+ height: 145px;
+ margin-top: 20px;
+ border-radius: 3px;
+ .tit {
+ height: 50px;
+ box-sizing: border-box;
+ padding: 18px 0 17px 13px;
+ p {
+ color: #333333;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ }
+ .input-box {
+ border-bottom: 1px solid #eeeeee;
+ box-sizing: border-box;
+ padding-left: 13px;
+ padding-right: 12px;
+ vertical-align: middle;
+ position: relative;
+ span:nth-of-type(1) {
+ font-size: 18px;
+ display: inline-block;
+ position: absolute;
+ bottom: 15px;
+ z-index: 1000;
+ }
+ span:nth-of-type(2) {
+ font-size: 14px;
+ color: #896edb;
+ text-decoration: underline;
+ position: absolute;
+ bottom: 15px;
+ z-index: 1000;
+ }
+ }
+ .yue {
+ box-sizing: border-box;
+ padding-left: 13px;
+ padding-top: 16px;
+ p {
+ span:nth-of-type(1),
+ span:nth-of-type(3) {
+ font-size: 12px;
+ color: #999999;
+ }
+ span:nth-of-type(2) {
+ font-size: 12px;
+ }
+ }
+ }
+ }
+ .notes {
+ font-size: 12px;
+ color: #999999;
+ text-align: center;
+ margin-top: 12px;
+ }
+ .payCode {
+ .myimg {
+ position: absolute;
+ top: 45px;
+ left: 85px;
+ z-index: 1000;
+ }
+ }
+ .prod {
+ p:nth-of-type(1) {
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ margin-top: 25px;
+ }
+ p:nth-of-type(2),
+ p:nth-of-type(3) {
+ font-size: 12px;
+ color: #999999;
+ margin-bottom: 5px;
+ }
+ }
+ .withdrawal-btn {
+ width: 70%;
+ height: 36px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 18px;
+ border: 0;
+ outline: none;
+ margin-top: 28px;
+ color: #fff;
+ }
+ .withdrawal-code-box {
+ text-align: center;
+ border-bottom: 1px solid #eeeeee;
+ padding-bottom: 5px;
+ display: flex;
+ input {
+ border: 0;
+ width: 66%;
+ text-align: center;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/merchant/xyg/merBaseInfo.vue b/src/views/old/merchant/xyg/merBaseInfo.vue
new file mode 100644
index 0000000..d4d7a6b
--- /dev/null
+++ b/src/views/old/merchant/xyg/merBaseInfo.vue
@@ -0,0 +1,267 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-page">
+ <group>
+ <x-input title='营业执照号' v-model.trim="storeInfo.licenseNo" readonly text-align='right'></x-input>
+ <x-input title='营业执照名称' v-model.trim="storeInfo.orgName" placeholder='请输入' :max='50' text-align='right'></x-input>
+ <datetime v-model="storeInfo.issueDate" format="YYYY-MM-DD" title="注册日期" placeholder="请选择"></datetime>
+ </group>
+ <group>
+ <van-field v-model.trim="storeInfo.addrText" clearable :readonly="true" right-icon="arrow" label="注册省市区" placeholder=" 请选择"
+ @click="isShowArea = !isShowArea" text-align='right'/>
+ <x-input title='注册详细地址' v-model.trim="storeInfo.regDetailAddr" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='渠道编码' v-model.trim="storeInfo.outMerchantNo" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='渠道名称' v-model.trim="storeInfo.merchantName" placeholder='请输入' :max='100' text-align='right'></x-input>
+ </group>
+
+ <f-space></f-space>
+ <group>
+ <x-input title='法人名称' v-model.trim="storeInfo.legalName" readonly text-align='right'></x-input>
+ <x-input title='法人身份证号' v-model.trim="storeInfo.legalIdCardNo" readonly text-align='right'></x-input>
+ <x-input title='法人身份证地址' v-model.trim="storeInfo.legalIdCardAddress" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人手机号' v-model.trim="storeInfo.legalPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='联系人姓名' v-model.trim="storeInfo.contactName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='联系人手机号' v-model.trim="storeInfo.contactPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ <x-input title='联系人邮箱' v-model="storeInfo.contactEmail" text-align='right' max="50" placeholder="请输入"></x-input>
+ <selector title='与企业关系' placeholder='请选择' @on-change='handleCusRefChange' v-model="storeInfo.objContactReal"
+ :options='merRefList' :value-map="['code','name']" direction='rtl'></selector>
+ </group>
+ <f-space></f-space>
+ <group>
+ <van-field v-model.trim="storeInfo.merAddrText" clearable :readonly="true" right-icon="arrow" label="经营省市区"
+ @click="isShowMerArea = !isShowMerArea" text-align='right'/>
+ <x-input title='经营详细地址' v-model.trim="storeInfo.bizDetailAddr" placeholder='请输入' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <selector title='商户账号类型' placeholder='请选择' @on-change='handleCardTypeChange' v-model="storeInfo.acctType"
+ :options='cardTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='商户账户名称' v-model.trim="storeInfo.acctName" placeholder='请输入' text-align='right' />
+ <selector title='商户银行名称' placeholder='请选择' @on-change='handleBankChange' v-model="storeInfo.acctBankname"
+ :options='bankList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='商户银行账号' v-model.trim="storeInfo.acctNo" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input v-if="storeInfo.acctType===1" title='商户开户支行名称' v-model.trim="storeInfo.acctOpenBankname" placeholder='请输入' :max='30' text-align='right'/>
+ <x-input v-if="storeInfo.acctType===1" title='开户行行号' v-model.trim="storeInfo.acctCnaps" :max='20' placeholder='请输入'
+ text-align='right'></x-input>
+ <selector v-if="storeInfo.acctType===2" title='账户企业关系' placeholder='请选择' @on-change='handleMerRefChange' v-model="storeInfo.acctEnpRel"
+ :options='merRefList' :value-map="['code','name']" direction='rtl'></selector>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ <van-popup v-model="isShowMerArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeMerAreaModal" @confirm="setMerAreaValue"></van-area>
+ </van-popup>
+ </div>
+
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress,
+ } from 'vux';
+ export default {
+ name: 'xygMerBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ merValue:'',
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ },
+ merAreaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ }
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ isShowMerArea: {
+ type: Boolean,
+ default: false
+ },
+ storeInfo: {
+ type: Object,
+ },
+ // 银行列表
+ bankList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ cardTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ merRefList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ getMerArea() {
+ this.merAreaList = this.areaList;
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //关闭地区弹窗
+ closeMerAreaModal() {
+ this.isShowMerArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.storeInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.regProvinceCode = arr[0].code;
+ this.storeInfo.regCityCode = arr[1].code;
+ this.storeInfo.regDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //经营地保存地区选择
+ setMerAreaValue(arr) {
+ this.storeInfo.merAddrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.bizProvinceCode = arr[0].code;
+ this.storeInfo.bizProvinceName = arr[0].name;
+ this.storeInfo.bizCityCode = arr[1].code;
+ this.storeInfo.bizCityName = arr[1].name;
+ this.storeInfo.bizDistrictCode = arr[2].code;
+ this.storeInfo.bizDistrictName = arr[2].name;
+ this.isShowMerArea = false;
+ this.$refs.Area.reset()
+ },
+ // 处理银行名称的改变
+ handleBankChange(val) {
+ let currentEle = this.bankList.find(item => {
+ return item.code === val;
+ })
+ },
+ // 账号类型
+ handleCardTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.cardTypeList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.acctTypeName = currentEle.name;
+ },
+ // 商户与账户关系
+ handleMerRefChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.merRefList)).find((item) => {
+ return item.code = val;
+ });
+ this.storeInfo.acctEnpRelName = currentEle.name;
+ },
+ // 商户与账户关系
+ handleCusRefChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.merRefList)).find((item) => {
+ return item.code = val;
+ });
+ }
+ },
+ created() {
+ this.getArea();
+ this.getMerArea();
+ this.merAddrValue = this.merAddrText;
+ },
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/xyg/merOpen.vue b/src/views/old/merchant/xyg/merOpen.vue
new file mode 100644
index 0000000..cca2beb
--- /dev/null
+++ b/src/views/old/merchant/xyg/merOpen.vue
@@ -0,0 +1,413 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:20:18
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-index">
+ <x-header :title="'开通信用购'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :cardTypeList="cardTypeList"
+ :merRefList="merRefList"
+ :bankList="bankList"
+ :address="address"
+ :addressList="addressList"
+ :storeInfo="storeInfo"
+ @addr-change="setCitycode"
+ >
+ </base-info>
+ <!-- 信用购的文件上传type + 6 -->
+ <mer-pictures v-show="step === 2" :storeInfo="storeInfo" :filetype="9" ></mer-pictures>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <f-button @on-click="handleNextStep" fixed>{{ step === 1 ? '下一步' : '提交开通' }}</f-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './merBaseInfo.vue';
+ import MerPictures from './merPictures.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+ import {calcArea} from '@/utils/index';
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'xygMerOpen',
+ components: {
+ BaseInfo,
+ MerPictures
+ },
+ data() {
+ return {
+ orgType: 0,
+ step: 1,
+ stepText: '下一步',
+ bankList: [],
+ cardTypeList: [],
+ merRefList:[],
+ addressList:[],
+ address:[],
+ storeInfo: {
+ merName: '',
+ legalPhone:'',
+ merAddrText:'',
+ contactPhone:'',
+ contactName:'',
+ acctBankname:'',
+ orgName:'',
+ legalIdCardAddress:'',
+ issueDate:'',
+ regDetailAddr:'',
+ addr:{},
+ isShowArea:false,
+ regCityCode:'',
+ regCityName:'',
+ regDistrictCode:'',
+ regDistrictName:'',
+ regProvinceCode:'',
+ regProvinceName:'',
+ contactEmail:'',
+ addrText:'',
+ bizProvinceCode:'',
+ bizProvinceName:'',
+ bizCityCode:'',
+ bizCityName:'',
+ bizDistrictCode:'',
+ bizDistrictName:'',
+ acctOpenBankname:'',
+ provCode:'',//省code
+ cityCode:'',//市code
+ bankNo:'',//开户行行号
+ legalIdCardNo:'',
+ bizDetailAddr:'',
+ licenseNo: '',
+ acctCnaps: '',
+ merAddr: '',
+ merDtlAddr: '',
+ merArea: '',
+ foundDate: '',
+ legalName: '',
+ legalIdNo: '',
+ legalMblNo: '',
+ legalHomeAddr: '',
+ outMerchantNo: '',
+ merchantName: '',
+ acctName: '', // 户名
+ acctNo: '', // 银行卡号
+ acctType: '', // 账号类型code
+ acctEnpRel:'',//账户企业关系
+ acctEnpRelName:'',//账户企业关系
+ acctTypeName: '', // 账号类型name
+ objContactReal: '',//联系人与企业关系
+ licencePhotos: [], // 营业执照
+ legalCardPhotos: [], // 法人身份证
+ legalCardPhotosF: [], //法人身份证反面
+ legalCardPhotosZ: [], //法人身份证正面
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ },
+ {
+ key: 'legalPhone',
+ tipType: 1,
+ message: '法人手机号'
+ },
+ {
+ key: 'acctBankname',
+ tipType: 2,
+ message: '银行名称'
+ },
+ {
+ key: 'acctName',
+ tipType: 1,
+ message: '账户名称'
+ },
+ {
+ key: 'acctType',
+ tipType: 2,
+ message: '账号类型'
+ },
+ {
+ key: 'contactEmail',
+ tipType: 1,
+ type:"isEmail",
+ message: '联系人邮箱'
+ },
+ {
+ key: 'contactName',
+ tipType: 1,
+ message: '联系人手机号'
+ },
+ {
+ key: 'contactPhone',
+ tipType: 1,
+ message: '联系人姓名'
+ },
+ {
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区'
+ },
+ {
+ key: 'legalIdCardAddress',
+ tipType: 1,
+ message: '法人身份证地址'
+ },
+ {
+ key: 'regDetailAddr',
+ tipType: 1,
+ message: '注册详细地址'
+ },
+ {
+ key: 'issueDate',
+ tipType: 2,
+ message: '注册日期'
+ },
+ {
+ key: 'merchantName',
+ tipType: 1,
+ message: '渠道名称'
+ },
+ {
+ key: 'outMerchantNo',
+ tipType: 1,
+ message: '渠道编码'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.$api.getArea().then(res => {
+ this.addressList = res.body.provList;
+ });
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 获取地区列表
+ getArea({commit}) {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList)
+ commit(SET_AREA_LIST,{
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ })
+ }).catch((err) => {
+
+ });
+ },
+ // 设置地区code
+ setCitycode(val){
+ this.storeInfo.provCode = val[0];
+ this.storeInfo.cityCode = val[1];
+ this.address = val;
+ },
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.xygInitOpen;
+ fn().then(res => {
+ let body = res.body;
+ this.bankList = body.bankList;
+ this.cardTypeList = body.acctTypeList;
+ this.merRefList = body.acctEnpRelList;
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ console.log(i+":"+this.storeInfo[i]);
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(body.cityCode){
+ this.address.push(body.provCode+'')
+ this.address.push(body.cityCode+'')
+ }
+ this.storeInfo.merAddrText = this.storeInfo.bizProvinceName +'-'+ this.storeInfo.bizCityName +'-'+ this.storeInfo.bizDistrictName;
+ if(this.storeInfo.regProvinceName) {
+ this.storeInfo.addrText = this.storeInfo.regProvinceName + '-' + this.storeInfo.regCityName + '-' + this.storeInfo.regDistrictName;
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos.length) {
+ let fileId = this.storeInfo.licencePhotos[0];
+ this.storeInfo.licencePhotos = [];
+ this.storeInfo.licencePhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.legalCardPhotosZ && this.storeInfo.legalCardPhotosZ.length) {
+ let fileIdZ = this.storeInfo.legalCardPhotosZ[0];
+ let fileIdF = this.storeInfo.legalCardPhotosF[0];
+ this.storeInfo.legalCardPhotos = [];
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdZ,
+ fileUrl: '/'+fileIdZ
+ });
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdF,
+ fileUrl: '/'+fileIdF
+ });
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 信用购增加这两个字段验证
+ let rules = [
+ ]
+ // 对公时验证开户行行号
+ if(this.storeInfo.acctType ===1){
+ rules.push({
+ key: 'acctOpenBankname',
+ tipType: 1,
+ message: '开户支行名称'
+ });
+ rules.push({
+ key: 'acctCnaps',
+ tipType: 1,
+ message: '开户行行号'
+ });
+ rules.push({
+ key: 'acctNo',
+ tipType: 1,
+ message: '银行账号'
+ });
+ }
+ // 对私时验证账户企业关系
+ if(this.storeInfo.acctType ===2){
+ rules.push({
+ key: 'acctEnpRel',
+ tipType: 2,
+ message: '账户企业关系'
+ });
+ rules.push({
+ key: 'acctNo',
+ tipType: 1,
+ type:"bankCardNo",
+ message: '银行账号'
+ });
+ }
+ this.storeCheckInfo.push(...rules)
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)) {
+ return false;
+ }
+ this.step += 1;
+ } else {
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+
+ // 需要判断图片的字段
+ let checkPicList = [{
+ checkField: 'licencePhotos',
+ msg: '营业执照照片'
+ },
+ {
+ checkField: 'legalCardPhotos',
+ msg: '法人身份证正反面照片'
+ },
+ ];
+ // 判断图片是否上传
+ for (let item of checkPicList) {
+ if (!(this.storeInfo[item.checkField] instanceof Array &&
+ this.storeInfo[item.checkField].length)) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if (item.checkField == 'legalCardPhotos' && this.storeInfo[item.checkField].length < 2){
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+
+ // 由于后端初始化返回的图片字段{url: xx, id: 121}, 而此时在提交的时候,我们
+ // 提交图片字段为[id1, id2], 为id的列表
+ this.storeInfo.legalCardPhotosF = [];
+ this.storeInfo.legalCardPhotosZ = [];
+ let picIdList = {
+ licencePhotos: [],
+ legalCardPhotosF: [],
+ legalCardPhotosZ: [],
+ };
+ picIdList.legalCardPhotosF.push(this.storeInfo.legalCardPhotos[0].fileId);
+ picIdList.legalCardPhotosZ.push(this.storeInfo.legalCardPhotos[1].fileId);
+ for (let i in picIdList) {
+ if (this.storeInfo[i] instanceof Array &&
+ this.storeInfo[i].length) {
+ // 后端图片初始文件id为id.而控件上传id为fieldId,这里需要兼容处理一下
+ this.storeInfo[i].forEach((item) => {
+ item.fileId ? picIdList[i].push(item.fileId) :
+ picIdList[i].push(item.id)
+ });
+ }
+ }
+
+ let submitInfo = {
+ ...this.storeInfo,
+ ...picIdList
+ };
+
+ let fn;
+ // 对私时开户行行号不传值
+ if(this.storeInfo.acctType === 2){
+ submitInfo.acctOpenBankname = '';
+ submitInfo.acctCnaps = '';
+ }
+ if(this.storeInfo.acctType === 1){
+ submitInfo.acctEnpRel = '';
+ }
+ fn = this.$api.xygOpen; //信用购接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/xyg/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+.open-xyg-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+}
+</style>
+
diff --git a/src/views/old/merchant/xyg/merPictures.vue b/src/views/old/merchant/xyg/merPictures.vue
new file mode 100644
index 0000000..1181d5d
--- /dev/null
+++ b/src/views/old/merchant/xyg/merPictures.vue
@@ -0,0 +1,55 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="xyg-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'xygMerPicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .xyg-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 0 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/merchant/xyg/mgrBaseInfo.vue b/src/views/old/merchant/xyg/mgrBaseInfo.vue
new file mode 100644
index 0000000..4c0d74f
--- /dev/null
+++ b/src/views/old/merchant/xyg/mgrBaseInfo.vue
@@ -0,0 +1,80 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2019-12-27 10:50:14
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="storeInfo.staffName" placeholder='请输入营业员姓名' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="storeInfo.staffPhone" placeholder='请输入营业员电话' :max='11' text-align='right'></x-input>
+ <x-input title='营业员职务' v-model.trim="storeInfo.post" placeholder='请输入营业员职务' text-align='right'></x-input>
+ <x-input title='营业员编号' v-model.trim="storeInfo.oprId" placeholder='请输入营业员编号' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'xygMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object
+ },
+ },
+ computed:{
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/xyg/mgrOpen.vue b/src/views/old/merchant/xyg/mgrOpen.vue
new file mode 100644
index 0000000..421660a
--- /dev/null
+++ b/src/views/old/merchant/xyg/mgrOpen.vue
@@ -0,0 +1,155 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2019-12-27 10:50:39
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-index">
+ <x-header :title="'开通信用购'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :storeInfo="storeInfo"
+ >
+ </base-info>
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{'提交开通'}}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" >{{'提交开通'}}</van-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './mgrBaseInfo.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'xygMgrOpen',
+ components: {
+ BaseInfo,
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ storeInfo: {
+ staffName: '',
+ staffPhone: '',
+ post:'',
+ oprId:''//营业员编号
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'post',
+ tipType: 1,
+ message: '营业员岗位'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ // 设置地区code
+
+ goBackPage() {
+ if (this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.xygInitMgr;
+ fn().then(res => {
+ let body = res.body;
+ for (let i in this.storeInfo) {
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 信用购增加这两个字段验证
+
+ // 判断表单是否必填
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo,this.storeInfo,this)) {
+ return false;
+ }
+ } else {
+ this.handleSubmitOpen();
+ }
+ this.handleSubmitOpen();
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ let submitInfo = {
+ ...this.storeInfo
+ };
+
+
+ let fn;
+ fn = this.$api.xygOpenMgr; //营业员开通接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/xyg/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType: this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/xyg/openResult.vue b/src/views/old/merchant/xyg/openResult.vue
new file mode 100644
index 0000000..b922485
--- /dev/null
+++ b/src/views/old/merchant/xyg/openResult.vue
@@ -0,0 +1,168 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 10:50:04
+ * @Description:
+ -->
+
+<template>
+ <div class="gjzj-result-page">
+ <x-header :title="'开通信用购'" :left-options="{backText:'',preventGoBack:true}"
+ @on-click-back="pageGoBack"></x-header>
+ <div class="status-icon">
+ <i v-if="openStatus === 1"
+ class="iconfont scene_Staging-shenhezhong1"
+ style="color: #896EDB;"
+ ></i>
+ <i v-if="openStatus === 2"
+ class="iconfont scene_Staging-tijiaochenggong"
+ style="color: #19BE6B;"
+ ></i>
+ <i v-if="openStatus === 3"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ <i v-if="openStatus === 4"
+ class="iconfont scene_Staging-tijiaoshibai"
+ style="color: #F76260;"
+ ></i>
+ </div>
+ <div class="tips">
+ <p v-if="openStatus === 1">{{ statusType }}审批中</p>
+ <p v-if="openStatus === 2"> {{ statusType }}审批通过</p>
+ <p v-if="openStatus === 3"> {{ statusType}}审批失败</p>
+ <p v-if="openStatus === 4">冻结</p>
+ </div>
+ <van-button round @click="handleBack">{{ buttonText }}</van-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'add-account',
+ data() {
+ return {
+ // 0-待开通,1-审批中,2-审批通过,3-审批失败,4-冻结
+ openStatus: 0, // 开通状态
+ orgType:0,
+ buttonText: '返回', // 底部按钮文字
+ statusType: this.$route.query.statusType,
+ };
+ },
+ computed:{
+ },
+ methods: {
+ pageGoBack(){
+ if(this.orgType==3) {
+ this.$router.push({
+ path: '/main/productManagement'
+ });
+ }else if(this.orgType==4){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }else if(this.orgType==5){
+ this.$router.push({
+ path: '/store/productManage'
+ });
+ }
+ },
+ handleBack () {
+ // 如果是在开通中的话,那么底部有重新提交按钮
+ // 点击重新提交,那么用户可以重新填写资料
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ if (this.orgType == 3) {
+ this.$router.replace({
+ path: '/main/productManagement'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 4) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ } else if (this.orgType == 5) {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ } else if(this.openStatus == 3 || this.openStatus == 4){
+ if (this.orgType == 3) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/xyg/merOpen',
+ query
+ });
+ } else if (this.orgType == 4) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/xyg/storeOpen',
+ query
+ });
+ } else if (this.orgType == 5) {
+ let query = {
+ typeId:'200005',
+ openStatus: this.openStatus,
+ orgType: this.orgType
+ }
+ this.$router.push({
+ path:'/xyg/mgrOpen',
+ query
+ });
+ }
+ }
+ },
+ },
+ created() {
+ console.log(this.statusType)
+ this.openStatus = Number(this.$route.query.openStatus);
+ this.orgType = Number(this.$route.query.orgType);
+ if(this.openStatus == 1 || this.openStatus == 2) {
+ this.buttonText = '返回';
+ }else if(this.openStatus == 3 || this.openStatus == 4){
+ this.buttonText = '再次提交';
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .gjzj-result-page {
+ height: 100%;
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .status-icon {
+ padding-top: 20px;
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #BFA073;
+ }
+ .scene_Staging-shibai1 {
+ color: #F76260;
+ }
+ .tips {
+ color: #999;
+ font-size: 14px;
+ line-height: 1.6;
+ text-align: center;
+ }
+ }
+ .van-button {
+ width: 90%;
+ margin: 0 5%;
+ margin-top: 60px;
+ color: white !important;
+ background: #896edb;
+ }
+</style>
diff --git a/src/views/old/merchant/xyg/storeBaseInfo.vue b/src/views/old/merchant/xyg/storeBaseInfo.vue
new file mode 100644
index 0000000..00ed64e
--- /dev/null
+++ b/src/views/old/merchant/xyg/storeBaseInfo.vue
@@ -0,0 +1,179 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:15:03
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-page">
+ <group>
+ <x-input title='门店名称' v-model.trim="storeInfo.storeName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在省' v-model.trim="storeInfo.storeProvinceName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在市' v-model.trim="storeInfo.storeCityName" readonly text-align='right'></x-input>
+ <x-input title='经营地所在区' v-model.trim="storeInfo.storeDistrictName" readonly text-align='right'></x-input>
+ <x-input title='经营详细地址' v-model.trim="storeInfo.storeDetailAddr" readonly placeholder='请输入' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <selector title='营业执照类型' placeholder='请选择' @on-change='handleLicenseTypeChange' v-model="storeInfo.bizLicenseType"
+ :options='bizLicenseTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='营业执照号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.licenseNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业执照名称' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.orgName" placeholder='请输入' :max='50' text-align='right'></x-input>
+ <datetime v-if="storeInfo.bizLicenseType ===2" v-model="storeInfo.issueDate" format="YYYY-MM-DD" title="注册日期" placeholder="请选择"></datetime>
+ </group>
+ <group>
+ <van-field v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.addrText" clearable :readonly="true" right-icon="arrow" label="注册省市区"
+ @click="isShowArea = !isShowArea" placeholder=" 请选择" text-align='right'/>
+ <x-input title='注册详细地址' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.regDetailAddr" placeholder='请输入' :max='100' text-align='right'></x-input>
+ <x-input title='营业厅编码' v-model.trim="storeInfo.outStoreNo" placeholder='请输入' :max='100' text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='法人名称' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人身份证号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalIdCardNo" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人身份证地址' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalIdCardAddress" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='法人手机号' v-if="storeInfo.bizLicenseType ===2" v-model.trim="storeInfo.legalPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ </group>
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {calcArea} from '@/utils/index';
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'xygStoreBase',
+ components: {
+ Datetime,
+ XAddress,
+ ...mapState(['areaList'])
+ },
+ data() {
+ return {
+ areaList:{//地区列表
+ province_list:{}, //省
+ city_list:{}, //市
+ county_list:{}, //地区、县
+ }
+ };
+ },
+ props: {
+ addressList: {
+ type: Array,
+ default: []
+ },
+ address: {
+ type: Array,
+ default: []
+ },
+ isShowArea: {
+ type: Boolean,
+ default: false
+ },
+ storeInfo: {
+ type: Object
+ },
+ bizLicenseTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ created() {
+ this.getArea();
+ },
+ methods: {
+ ...mapActions(['getArea']),
+ // 获取地区列表
+ getArea() {
+ Vue.prototype.$api.getArea().then((res) => {
+ let { provList } = res.body;
+ let obj = calcArea(provList);
+ this.areaList = {
+ province_list:obj.province_list,
+ city_list:obj.city_list,
+ county_list:obj.county_list
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //关闭地区弹窗
+ closeAreaModal() {
+ console.log(this.areaList);
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.storeInfo.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.storeInfo.regProvinceCode = arr[0].code;
+ this.storeInfo.regCityCode = arr[1].code;
+ this.storeInfo.regDistrictCode = arr[2].code;
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+ // 账号类型
+ handleLicenseTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.bizLicenseTypeList)).find((item) => {
+ return item.code = val;
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/xyg/storeBaseMgrInfo.vue b/src/views/old/merchant/xyg/storeBaseMgrInfo.vue
new file mode 100644
index 0000000..29987fe
--- /dev/null
+++ b/src/views/old/merchant/xyg/storeBaseMgrInfo.vue
@@ -0,0 +1,88 @@
+<!--
+* @Author: c.y
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2019-12-26 17:28:46
+ * @Description:
+ -->
+<template>
+ <div class="open-xyg-page">
+ <group>
+ <x-input title='营业员姓名' v-model.trim="mgrReqVo.staffName" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员电话' v-model.trim="mgrReqVo.staffPhone" placeholder='请输入' :max='11' text-align='right'></x-input>
+ <x-input title='营业员职务' v-model.trim="mgrReqVo.post" placeholder='请输入' text-align='right'></x-input>
+ <x-input title='营业员编号' v-model.trim="mgrReqVo.oprId" placeholder='请输入' text-align='right'></x-input>
+ </group>
+ </div>
+</template>
+
+<script>
+ import {
+ Datetime,
+ XAddress
+ } from 'vux';
+ export default {
+ name: 'xygStoreMgrBase',
+ components: {
+ Datetime,
+ XAddress
+ },
+ data() {
+ return {
+
+ };
+ },
+ props: {
+ mgrReqVo: {
+ type: Object
+ },
+ },
+ computed:{
+ calcAddress:{
+ get(){
+ return this.address || [];
+ },
+ set(newV){
+ this.$emit('addr-change', newV);
+ }
+ }
+
+ },
+ methods: {
+
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-page {
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .vux-datetime {
+ font-size: 15Px;
+ }
+
+ .vux-datetime-value {
+ span {
+ width: 100%;
+ text-align: right;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/merchant/xyg/storeOpen.vue b/src/views/old/merchant/xyg/storeOpen.vue
new file mode 100644
index 0000000..a161635
--- /dev/null
+++ b/src/views/old/merchant/xyg/storeOpen.vue
@@ -0,0 +1,460 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2019-12-26 17:28:15
+ * @Description:门店开通信用购
+ -->
+<template>
+ <div class="open-xyg-index">
+ <x-header :title="'开通信用购'" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!-- v-show="step === 1" -->
+ <base-info
+ v-show="step === 1"
+ :bizLicenseTypeList="bizLicenseTypeList"
+ :storeInfo="storeInfo"
+ >
+ </base-info>
+ <mgr-info
+ v-show="step === 2"
+ :mgrReqVo="mgrReqVo"
+ >
+ </mgr-info>
+ <!-- 信用购的文件上传type + 6 -->
+ <store-pictures v-show="step === 3" :storeInfo="storeInfo" :filetype="9" ></store-pictures>
+ <!-- <store-pictures :storeInfo="storeInfo" :filetype="6" ></store-pictures> -->
+ <f-space type="large"></f-space>
+ <!-- <f-button @on-click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</f-button> -->
+ <van-button class="btn" round @click="handleNextStep" fixed>{{ step !== 3 ? '下一步' : '提交开通' }}</van-button>
+ </div>
+</template>
+
+<script>
+ import BaseInfo from './storeBaseInfo.vue';
+ import MgrInfo from './storeBaseMgrInfo.vue';
+ import StorePictures from './storePictures.vue';
+ import formCheckAndComt from '@/utils/formCheckAndComb';
+
+ import {
+ dateFormat
+ } from 'vux'
+
+ export default {
+ name: 'xygStoreOpen',
+ components: {
+ BaseInfo,
+ StorePictures,
+ MgrInfo
+ },
+ data() {
+ return {
+ orgType:0,
+ step: 1,
+ stepText: '下一步',
+ bizLicenseTypeList: [],
+ mgrReqVo: {
+ staffName:'',
+ staffPhone:'',
+ post:'',
+ oprId:''//营业员编号
+ },
+ storeInfo: {
+ legalIdCardAddress:'',
+ issueDate:'',
+ regDetailAddr:'',
+ addr:{},
+ isShowArea:false,
+ regCityCode:'',
+ regDistrictCode:'',
+ regProvinceCode:'',
+ storeName: '',
+ outStoreNo:'',
+ storeProvinceCode:'',
+ storeProvinceName:'',
+ storeCityCode:'',
+ storeCityName:'',
+ storeDistrictCode:'',
+ storeDistrictName:'',
+ storeDetailAddr:'',
+ bizLicenseType:'',
+ licenseNo:'',
+ orgName:'',
+ addrText:'',
+ legalCardPhotosF: [], //法人身份证反面
+ legalCardPhotosZ: [], //法人身份证正面
+ legalIdCardNo:'',//省code
+ legalPhone:'',//市code
+ legalName:'',
+ licencePhotos:[], // 营业执照照片
+ legalCardPhotos: [], // 法人身份证
+ storeHeadPhotos: [], // 门店图片
+ storeInPhotos: [], // 店内图片
+ storeAroundPhotos: [], // 门店周边图片
+ authorizedBrand: [], // 授权牌
+ sysScreenShot: [], //联通系统截图
+ },
+ // 验证开户信息字段
+ storeCheckInfo: [
+ {
+ key: 'legalPhone',
+ tipType: 1,
+ message: '法人手机号'
+ },
+ {
+ key: 'legalIdCardNo',
+ tipType: 1,
+ message: '法人身份证'
+ },
+ {
+ key: 'legalName',
+ tipType: 2,
+ message: '法人名称'
+ },
+ {
+ key: 'orgName',
+ tipType: 1,
+ message: '营业执照名称'
+ },
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '营业执照类型'
+ },
+ {
+ key: 'addrText',
+ tipType: 2,
+ message: '省市区'
+ },
+ {
+ key: 'legalIdCardAddress',
+ tipType: 1,
+ message: '法人身份证地址'
+ },
+ {
+ key: 'regDetailAddr',
+ tipType: 1,
+ message: '注册详细地址'
+ },
+ {
+ key: 'issueDate',
+ tipType: 2,
+ message: '注册日期'
+ },
+ {
+ key: 'outStoreNo',
+ tipType: 1,
+ message: '营业厅编码'
+ },
+ ],// 验证开户信息字段
+ storeCheckInfoForBizType: [
+ {
+ key: 'bizLicenseType',
+ tipType: 2,
+ message: '营业执照类型'
+ },
+ ],
+ storeCheckInfoForStaff: [
+ {
+ key: 'staffName',
+ tipType: 1,
+ message: '营业员姓名'
+ },
+ {
+ key: 'staffPhone',
+ tipType: 1,
+ message: '营业员电话'
+ },
+ {
+ key: 'post',
+ tipType: 1,
+ message: '营业员职务'
+ },
+ ],
+ bankNo:''
+ };
+ },
+ computed:{
+ // 通过icon字段判断是智享云还是购机直降
+ },
+ created(){
+ this.init();
+ this.orgType = Number(this.$route.query.orgType);
+ },
+ methods: {
+ goBackPage() {
+ if (this.step === 3 || this.step === 2) {
+ this.step -= 1;
+ } else {
+ this.$router.replace({
+ path: '/store/productManage'
+ });
+ this.$router.go(-1)
+ }
+ },
+ // 初始化页面
+ init() {
+ let fn = this.$api.xygInitStore;
+ fn().then(res => {
+ let body = res.body;
+ this.bizLicenseTypeList = body.bizLicenseTypeList;
+ if(body.mgrReqVo && body.mgrReqVo.staffName){
+ this.mgrReqVo = body.mgrReqVo;
+ }
+ for (let i in this.storeInfo) {
+ if(Array.isArray(this.storeInfo[i])){
+ this.storeInfo[i] = body[i] ? body[i] : [];
+ }else{
+ this.storeInfo[i] = body[i] ? body[i] : '';
+ }
+ }
+ if(this.storeInfo.storeProvinceCode) {
+ if(this.storeInfo.regProvinceName && this.storeInfo.regCityName && this.storeInfo.regDistrictName){
+ this.storeInfo.addrText = this.storeInfo.regProvinceName + '-' + this.storeInfo.regCityName + '-' + this.storeInfo.regDistrictName;
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos !== []) {
+ this.storeInfo.bizLicenseType = 2;
+ } else {
+ this.storeInfo.bizLicenseType = 3;
+ }
+ }
+ if (this.storeInfo.licencePhotos && this.storeInfo.licencePhotos.length) {
+ let fileId = this.storeInfo.licencePhotos[0];
+ this.storeInfo.licencePhotos = [];
+ this.storeInfo.licencePhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.legalCardPhotosZ && this.storeInfo.legalCardPhotosZ.length) {
+ let fileIdZ = this.storeInfo.legalCardPhotosZ[0];
+ let fileIdF = this.storeInfo.legalCardPhotosF[0];
+ this.storeInfo.legalCardPhotos = [];
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdZ,
+ fileUrl: '/'+fileIdZ
+ });
+ this.storeInfo.legalCardPhotos.push({
+ fileId: fileIdF,
+ fileUrl: '/'+fileIdF
+ });
+ }
+ if (this.storeInfo.storeAroundPhotos && this.storeInfo.storeAroundPhotos.length) {
+ let storeAroundPhotosNew = [];
+ for (let i in this.storeInfo.storeAroundPhotos) {
+ let fileId = this.storeInfo.storeAroundPhotos[i];
+ storeAroundPhotosNew.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ this.storeInfo.storeAroundPhotos = storeAroundPhotosNew;
+ }
+ if (this.storeInfo.storeHeadPhotos && this.storeInfo.storeHeadPhotos.length) {
+ let fileId = this.storeInfo.storeHeadPhotos[0];
+ this.storeInfo.storeHeadPhotos = [];
+ this.storeInfo.storeHeadPhotos.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.storeInPhotos && this.storeInfo.storeInPhotos.length) {
+ let storeInPhotosNew = [];
+ for (let i in this.storeInfo.storeInPhotos) {
+ let fileId = this.storeInfo.storeInPhotos[i];
+ storeInPhotosNew.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ this.storeInfo.storeInPhotos = storeInPhotosNew;
+ }
+ if (this.storeInfo.authorizedBrand && this.storeInfo.authorizedBrand.length) {
+ let fileId = this.storeInfo.authorizedBrand[0];
+ this.storeInfo.authorizedBrand = [];
+ this.storeInfo.authorizedBrand.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ if (this.storeInfo.sysScreenShot && this.storeInfo.sysScreenShot.length) {
+ let fileId = this.storeInfo.sysScreenShot[0];
+ this.storeInfo.sysScreenShot = [];
+ this.storeInfo.sysScreenShot.push({
+ fileId: fileId,
+ fileUrl: '/'+fileId
+ });
+ }
+ });
+ },
+ // 处理点击下一步跳转处理
+ handleNextStep() {
+ // 判断表单字段必填性
+ if (this.step === 1) {
+ // 判断表单是否必填
+ if(this.storeInfo.bizLicenseType === 2) {
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfo, this.storeInfo, this)) {
+ return false;
+ }
+ }else{
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfoForBizType, this.storeInfo, this)) {
+ return false;
+ }
+ }
+ this.step += 1;
+ } else if(this.step === 2){
+ if (!formCheckAndComt.checkRequiredField(this.storeCheckInfoForStaff, this.mgrReqVo, this)) {
+ return false;
+ }
+ this.step += 1;
+ } else {
+ this.handleSubmitOpen();
+ }
+ },
+ // 处理提交
+ handleSubmitOpen() {
+ let checkPicList = [];
+ if(this.storeInfo.bizLicenseType === 2) {
+ // 需要判断图片的字段
+ checkPicList = [{
+ checkField: 'licencePhotos',
+ msg: '营业执照照片'
+ },
+ {
+ checkField: 'legalCardPhotos',
+ msg: '法人身份证正反面照片'
+ },
+ {
+ checkField: 'storeHeadPhotos',
+ msg: '门店店头照片'
+ },
+ {
+ checkField: 'storeInPhotos',
+ msg: '门店店内照片'
+ },
+ {
+ checkField: 'storeAroundPhotos',
+ msg: '门店周边照片'
+ },
+ ];
+ }else{
+ checkPicList = [
+ {
+ checkField: 'storeHeadPhotos',
+ msg: '门店店头照片'
+ },
+ {
+ checkField: 'storeInPhotos',
+ msg: '门店店内照片'
+ },
+ {
+ checkField: 'storeAroundPhotos',
+ msg: '门店周边照片'
+ },
+ ];
+ }
+ // 判断图片是否上传
+ for (let item of checkPicList) {
+ if (!(this.storeInfo[item.checkField] instanceof Array &&
+ this.storeInfo[item.checkField].length)) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if(this.storeInfo.bizLicenseType === 2) {
+ if (item.checkField == 'legalCardPhotos' && this.storeInfo[item.checkField].length < 2) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+ if (item.checkField == 'storeInPhotos' && this.storeInfo[item.checkField].length < 4) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ if (item.checkField == 'storeAroundPhotos' && this.storeInfo[item.checkField].length < 3) {
+ this.$notify('请上传' + item.msg);
+ return false;
+ }
+ }
+
+ // 由于后端初始化返回的图片字段{url: xx, id: 121}, 而此时在提交的时候,我们
+ // 提交图片字段为[id1, id2], 为id的列表
+ let picIdList = {};
+ this.storeInfo.legalCardPhotosF = [];
+ this.storeInfo.legalCardPhotosZ = [];
+ if(this.storeInfo.bizLicenseType === 2) {
+ picIdList = {
+ licencePhotos: [],
+ legalCardPhotosF: [],
+ legalCardPhotosZ: [],
+ storeHeadPhotos: [],
+ storeInPhotos:[],
+ storeAroundPhotos:[],
+ authorizedBrand: [],
+ sysScreenShot: [],
+ };
+ picIdList.legalCardPhotosF.push(this.storeInfo.legalCardPhotos[0].fileId);
+ picIdList.legalCardPhotosZ.push(this.storeInfo.legalCardPhotos[1].fileId);
+ }else{
+ picIdList = {
+ storeHeadPhotos: [],
+ storeInPhotos:[],
+ storeAroundPhotos:[],
+ authorizedBrand: [],
+ sysScreenShot: [],
+ };
+ }
+ for (let i in picIdList) {
+ if (this.storeInfo[i] instanceof Array &&
+ this.storeInfo[i].length) {
+ // 后端图片初始文件id为id.而控件上传id为fieldId,这里需要兼容处理一下
+ this.storeInfo[i].forEach((item) => {
+ item.fileId ? picIdList[i].push(item.fileId) :
+ picIdList[i].push(item.id)
+ });
+ }
+ }
+ if(this.storeInfo.bizLicenseType !== 2) {
+ this.storeInfo.licencePhotos = [];
+ }
+ let submitInfo = {
+ ...this.storeInfo,
+ ...picIdList,
+ mgrReqVo:this.mgrReqVo
+ };
+
+ let fn;
+ fn = this.$api.xygOpenStore; //信用购接口
+ fn(submitInfo).then((res) => {
+ this.$router.push({
+ path: '/xyg/open-result',
+ // 提交后,默认跳转审核结果页面,状态为开通中
+ query: {
+ orgType:this.orgType,
+ openStatus: 1,
+ icon:this.$route.query.icon
+ }
+ })
+ });
+ }
+ }
+ };
+
+</script>
+
+<style lang="less" scoped>
+ .open-xyg-index{
+ padding-top: 54px;
+ height:100%;
+ background-color: #f1f1f1;
+ }
+ .btn {
+ position: fixed;
+ bottom: 15px;
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
+
diff --git a/src/views/old/merchant/xyg/storePictures.vue b/src/views/old/merchant/xyg/storePictures.vue
new file mode 100644
index 0000000..129b8fc
--- /dev/null
+++ b/src/views/old/merchant/xyg/storePictures.vue
@@ -0,0 +1,114 @@
+<!--
+ * @Date: 2019-09-02 09:01:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:14:44
+ * @Description:
+ -->
+<template>
+ <div class="xyg-picture-page">
+ <div class="pic-content">
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :title="'上传营业执照'"
+ :picList="storeInfo.licencePhotos"></UploadFile>
+ <div v-if="storeInfo.bizLicenseType == 2">
+ <span style="font-size: 15px">上传法人身份证正反面照</span><span style="font-size: 13px;color: #FF6666">(第一张正面,第二张反面)</span>
+ </div>
+ <UploadFile
+ :fileType="2"
+ :bizLicenseType="storeInfo.bizLicenseType"
+ :showNum="2"
+ :title="''"
+ :picList="storeInfo.legalCardPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传门头照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(需要体现运营商logo、门店名称、门牌号)</p>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :showNum="1"
+ :title="''"
+ :picList="storeInfo.storeHeadPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传店内照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(至少从4个角度拍摄全景体现店铺面积和主要业务区域,至少包括合约分期业务受理区(若有运营商logo背景,则包含在内)手机终端柜台))</p>
+ </div>
+ <UploadFile
+ :fileType="4"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="4"
+ :picList="storeInfo.storeInPhotos"></UploadFile>
+ <div>
+ <p style="font-size: 15px">上传周边照片</p>
+ <p style="font-size: 13px;color: #999999;margin: 10px 0 0 0">(门店外部街景、左右各一张,展示左右至少各一间门店)</p>
+ </div>
+ <UploadFile
+ :fileType="3"
+ :bizLicenseType= "2"
+ :title="''"
+ :showNum="3"
+ :picList="storeInfo.storeAroundPhotos"></UploadFile>
+ <div>
+ <span style="font-size: 15px">授权牌</span><span style="font-size: 13px;color: #FF6666"></span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.authorizedBrand"></UploadFile>
+ <div>
+ <span style="font-size: 15px">联通系统截图</span>
+ </div>
+ <UploadFile
+ :fileType="1"
+ :bizLicenseType= "2"
+ :title="''"
+ :picList="storeInfo.sysScreenShot"></UploadFile>
+ </div>
+ </div>
+</template>
+
+<script>
+ import UploadFile from '@/components/old/upload/uploadImgStore.vue';
+
+ export default {
+ name: 'xygStorePicture',
+ components: {
+ UploadFile
+ },
+ data() {
+ return {
+ };
+ },
+ props: {
+ storeInfo: {
+ type: Object,
+ required: true,
+ },
+ // + 6的是信用购的上传
+ filetype:{
+ type:Number,
+ default:0
+ }
+ }
+ };
+</script>
+
+<style lang="less" scoped>
+ .legal-card-title {
+ padding: 10px 0;
+ font-size: 13px;
+ line-height: 1;
+ color: #333;
+ font-weight: normal;
+ }
+ .xyg-picture-page {
+ background: @color-white;
+ .pic-content {
+ padding: 10px 15px;
+ }
+ }
+</style>
diff --git a/src/views/old/store/bannerContent/bannerContent.vue b/src/views/old/store/bannerContent/bannerContent.vue
new file mode 100644
index 0000000..16ce00c
--- /dev/null
+++ b/src/views/old/store/bannerContent/bannerContent.vue
@@ -0,0 +1,58 @@
+
+<template>
+ <div class="getQRCode">
+ <x-header class="message-head" title="内容详情" :left-options="{backText:''}"></x-header>
+ <div class="overdue-body" v-html="bannerContent">
+ <!-- {{ bannerContent }} -->
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+ export default {
+ name: 'bannerContent',
+ components: {
+ XHeader,
+ },
+ data() {
+ return {
+ bannerId: this.$route.query.bannerId,
+ bannerContent: '',
+ }
+ },
+ created() {
+ this. bannerContentInit();
+ },
+ methods: {
+ bannerContentInit() {
+ this.$api.indexDetail({id: this.bannerId}).then(res => {
+ // this.bannerContent = res.body.bannerInfoVos.filter(item => {
+ // if(item.id == this.bannerId) {
+ // return item.bannerContent;
+ // }
+ // })
+ console.log(res.body)
+ this.bannerContent = res.body.bannerContent
+ })
+
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.getQRCode{
+ background: #F5F5F7;
+ width: 100%;
+ height: 100%;
+}
+.message-head{
+ position: relative;
+}
+.overdue-body{
+ width: 96%;
+ margin: 0 2%;
+ padding-top: 15px;
+ padding-bottom: 50px;
+ word-wrap: break-word;
+}
+</style>
diff --git a/src/views/old/store/business-center.vue b/src/views/old/store/business-center.vue
new file mode 100644
index 0000000..27458fd
--- /dev/null
+++ b/src/views/old/store/business-center.vue
@@ -0,0 +1,758 @@
+<!--
+ * @Descripttion:
+ * @Author: WD丶
+ * @Date: 2019-08-19 09:20:27
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-19 09:58:28
+ -->
+<template>
+ <div class="business-center">
+ <div class="content" v-if="orgType == 4">
+ <!-- <div class="content-title">
+ 办理分期
+ </div> -->
+ <div class="installment-box ">
+
+ <div class="item " v-for="(i,index) in installmentList" :key="index" @click="go(i)">
+ <img class="item-logo" :src="i.icon" :alt="i.typeName">
+ <p v-text="i.typeName"></p>
+ </div>
+ </div>
+
+ </div>
+ <!-- 产品未开通弹窗 -->
+ <van-popup v-model="noOpenShow" class="no-open">
+ <div class="no-open-img">
+ <img src="../../../assets/imgs/openpic.png" alt="">
+ </div>
+ <p>{{ noOpenText }}</p>
+ <van-button type="default" class="no-open-btn" @click="noOpenShow = false" round>确定</van-button>
+ </van-popup>
+ </div>
+</template>
+<script>
+ import {
+ XHeader,
+ XDialog,
+ } from 'vux';
+ import FBlock from '@/components/old/FBlock';
+ import FConfirm from '@/components/old/FConfirm';
+ import {
+ _copyToClipboard
+ } from '@/utils/index';
+ import { mapState, mapGetters } from 'vuex';
+ import { async } from 'q';
+ import Vue from 'vue';
+ import { Toast } from 'vant';
+ import QRCode from "qrcode";
+
+ Vue.use(Toast);
+// import { mapState } from 'vuex';
+ export default {
+ name: 'business-center',
+ components: {
+ XHeader,
+ FBlock,
+ FConfirm,
+ XDialog
+ },
+ data() {
+ return {
+ qrCode:'',
+ errorMsg: '',
+ mblNo: '',
+ showDialogStyle: false,
+ showModal: false,
+ tipText: '敬请期待...',
+ installmentList: [],
+ dmfprod_list: [],
+ shsUrl:'',
+ // swiperList: [],
+ // messageList: [],
+ messageId: '',
+ riskNum: '', //风险订单数
+ complaintNum: '', //投诉订单数
+ noOpenShow: false, //产品未开通弹窗控制
+ noOpenText: '', //产品未开通文本内容
+ info: {},
+ prodTypeRespVoList2: []
+ };
+ },
+ computed:{
+ ...mapState(['userinfo', 'msgCount']),
+ ...mapGetters(['orgType']),
+ hasDmf(){
+ return this.dmfprod_list.length && this.dmfprod_list[0].openStatus!=0;
+ }
+ },
+ created() {
+ this.info = this.userinfo
+ this.getShsUrl();
+ if(this.orgType == 4){
+ this.$api.prodIndexTypeList().then(res => {
+ let list = res.body.prodTypeRespVoList3 || [];
+ this.prodTypeRespVoList2 = res.body.prodTypeRespVoList2 || [];
+ localStorage.hbcp = JSON.stringify(res.body.prodTypeRespVoList2)
+ this.dmfprod_list = res.body.prodTypeRespVoList1 || [];
+ list.forEach(item => {
+ item.active = item.openStatus === 2;
+ });
+
+ this.installmentList.push(...list,...res.body.prodTypeRespVoList1);
+ });
+ }
+ // 获取风控订单数
+ this.$api.riskNum().then(res => {
+ this.complaintNum = res.body.complaintNum;
+ this.riskNum = res.body.riskNum;
+ })
+ },
+ methods: {
+ hasHjToken(){
+ if(localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ },
+ // 前往选择花呗产品
+ goHbCp(){
+ this.$router.push('/hbcp')
+ },
+ goLthyj() {
+ this.$router.push('/lthyj')
+ },
+ toBdCourse(e, name) {
+ // if(name == '合约分期') {
+ // Toast('花呗分期教程功能暂未开通,敬请期待')
+ // } else {
+ let sum = '';
+ let fileName = '';
+ if(name == '花呗分期') {
+ sum = 7
+ fileName = 'hbfq/'
+ }
+ if(name == '智享花' || name == '信用购') {
+ sum = 9;
+ fileName = 'zxh/'
+ }
+ if(name == '花呗合约机') {
+ sum = 3;
+ fileName = 'hyfq/'
+ }
+ this.$router.push(`/bdCourse?courseName=${name}&&sum=${sum}&&fileName=${fileName}`)
+ // }
+ },
+ jump(id) {
+ this.$router.push(`/bannerContent?bannerId=${id}`)
+ },
+ //跳转到逾期界面..
+ toOverdue() {
+ this.$router.push('/overdue')
+ },
+ shsClick(val){
+ if(val == 'zfblx') {
+ this.$router.push("/product/zfblx");
+ }
+ if(val != 'zfblx' && val != 'hbjl') {
+ location.href = this.shsUrl;
+ }
+ // if(val == 'hbjl'){
+ // this.$router.push('/creat-hbjl')
+ // }
+ },
+ toMessage(e,id) {
+ this.$router.push(`/message?messageId=${id}`)
+ },
+ getShsUrl(){
+ this.$api.getShsUrl().then((res) => {
+ this.shsUrl = res.body.url;
+ }).catch((err) => {
+
+ });
+ },
+ goDmf(){
+ let item = this.dmfprod_list[0];
+ if(item.openStatus == 2){
+ //this.$router.push(`/facepay/calcmoney?typeId=${item.typeId}&prodId=${item.prodId}`)
+ this.$router.push(`/channel-selection?typeId=${item.typeId}&prodId=${item.prodId}&text=商户收款通道`)
+ }else{
+ this.noOpenShow = true
+ }
+ // this.$router.push(`/order/dmf?typeId=${item.typeId}&prodId=${item.prodId}`)
+ },
+ changeBlur() {
+ let u = navigator.userAgent,
+ app = navigator.appVersion;
+ let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
+ if (isIOS) {
+ setTimeout(() => {
+ const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
+ window.scrollTo(0, Math.max(scrollHeight - 1, 0))
+ }, 200)
+ }
+ },
+ clearTel() {
+ this.mblNo = '';
+ this.errorMsg = '';
+ },
+ // 复制链接
+ copyLink() {
+
+ let isCopy = _copyToClipboard('http://t.cn/AiTDRMMO')
+ this.$tool.toast('链接已复制');
+ },
+ // 花呗提额功能
+ hbLinesSMS() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.mblNo)) {
+ this.errorMsg = '*请输入手机号';
+ return;
+ }
+ if (!v.checkPhone(this.mblNo)) {
+ this.errorMsg = '*请输入正确的手机号';
+ return;
+ }
+ this.$api.hbLinesSMS({
+ mblNo: this.mblNo,
+ content: 'http://t.cn/AiTDRMMO'
+ }).then((res) => {
+ this.showDialogStyle = false;
+ setTimeout(() => {
+ this.$tool.toast('短信发送成功');
+ }, 500);
+ }).catch((err) => {
+
+ });
+ },
+ // flag 代表是产品 还是收款的标志(flag为true代表收款)
+ go(item, flag = false) {
+ //alert('item.active:',item.active)
+ if (item.active) {
+ let path = '';
+ let text = '';
+ item.typeId = Number(item.typeId);
+ if(item.isHbProd == 1){
+ path = "/channel-selection"
+ switch (item.typeId) {
+ case 200002:
+ text = '花呗通道';
+ break;
+ case 200009:
+ text = '花呗合约机通道';
+ break;
+ case 200010:
+ text = '商户贴息通道';
+ break;
+ }
+ }else{
+ if(item.typeId) {
+ path = '/wx-pay-score';
+ }
+ }
+ this.$router.push({
+ path,
+ query: {
+ typeId: item.typeId,
+ prodId: item.prodId,
+ text: text
+ }
+ });
+ } else {
+ this.noOpenText = flag ? '敬请期待...' : '商户未开通该产品';
+ this.noOpenShow = true;
+ }
+ },
+ },
+
+ };
+</script>
+<style lang='less' scoped>
+ // @import '../../style/mixin';
+ @font-face {
+ font-family: 'iconfont'; /* project id 1351259 */
+ src: url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.eot');
+ src: url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.eot?#iefix') format('embedded-opentype'),
+ url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.woff2') format('woff2'),
+ url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.woff') format('woff'),
+ url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.ttf') format('truetype'),
+ url('//at.alicdn.com/t/font_1351259_bg2i5vlti7u.svg#iconfont') format('svg');
+ }
+ .no-open{
+ width: 280px;
+ height: 190px;
+ text-align: center;
+ border-radius: 6px;
+ &-img{
+ width: 100%;
+ margin-top: 13px;
+ img{
+ width: 75px;
+ height: 75px;
+ }
+ }
+ p{
+ font-size: 14px;
+ color: #666666;
+ margin-top: 7px;
+ }
+ &-btn{
+ height: 36px;
+ width: 60%;
+ margin: 0 20%;
+ background: #896EDB;
+ color: #fff;
+ margin-top: 28px;
+ line-height: 36px;
+ }
+ }
+ .cus-service{
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ z-index: 1;
+ width: 24px;
+ height: 24px;
+ background: rgba(0,0,0,1);
+ background:rgba(0,0,0,0.3);
+ border-radius: 50%;
+ text-align: center;
+ line-height: 24px;
+ i{
+ color: #fff;
+ font-size: 16px;
+ // opacity: 1;
+ }
+ }
+
+ .head-title{
+ z-index: 10;
+ }
+ // 顶部轮播
+ .swiper-banner {
+ width: 100%;
+ height: 150px;
+ margin: 0 auto;
+ overflow: hidden;
+ position: relative;
+ // margin-top:-10px;
+ padding: 0;
+ .vipBg {
+ width: 100%;
+ height: 150px;
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+ // background-image: url("../../../assets/img/bg-qr-code.png");
+ }
+
+ .my-swiper-banner {
+ height: 150px;
+ width: 100%;
+ }
+ }
+ //播报 部分
+ .category {
+ height: 30px;
+ position: relative;
+ width: 94%;
+ padding: 0 3%;
+ background: #fff;
+ .bobao {
+ background: rgba(255, 255, 255, 1);
+ border-radius: 6px;
+ width: 100%;
+
+ }
+ .notice-log{
+ position: absolute;
+ top: 0;
+ left: 15px;
+ font-size: 20px;
+ line-height: 30px;
+ }
+ }
+ .my-swiper-notice{
+ width: 100%;
+ margin: 0 auto;
+ overflow: hidden;
+ // .flexLayout(flex-start, center, row);
+ // flex-wrap: nowrap;
+ }
+ .swipe-item-box{
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ width: 100% !important;
+ }
+ .notice-item-title{
+ height: 30px;
+ line-height: 30px;
+ font-size: 12px;
+ margin-left: 10px;
+ white-space: nowrap;
+ color: #333;
+ }
+ .notice-item {
+ line-height: 30px;
+ width: 230px;
+ word-wrap: normal;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 12px;
+ // padding-right: 20px;
+ color: #333;
+ }
+ .notice-item-f{
+ color: @c-text-999;
+ }
+ .business-center {
+ padding-bottom: 50px;
+ // padding-top: 54px;
+ // padding-top: 9px;
+ .installment-box {
+ border-radius: 6px;
+ .flexLayout(flex-start, center, row);
+ flex-wrap: wrap;
+ background: #fff;
+ padding: 15px 0;
+ .item {
+ margin-bottom: 15px;
+ width: 33.33%;
+ //width: 25%;
+ text-align: center;
+ i {
+ font-size: 36px;
+ }
+
+ p {
+ font-size: 12px;
+ color: #3a3a3a;
+ }
+ .item-logo{
+ display: block-line;
+ vertical-align: middle;
+ width: 45px;
+ height: 45px;
+ margin-left: auto;
+ }
+ }
+ }
+ }
+ .nav-code {
+ // display: flex;
+ // flex-direction: column;
+ // justify-content: center;
+ // align-items: center;
+ // text-align: center;
+ // height: 120px;
+ // background-color: #fff;
+ // color: #bb8b52;
+ // margin-top: 15px;
+ .flexLayout(center, center, row);
+ width: 335px;
+ height: 50px;
+ margin: 12px;
+ margin-bottom: 0;
+ margin-top: 0;
+ border: 1px solid rgba(217,217,217,1);
+ border-radius: 6px;
+ &-logo{
+ width: 36px;
+ height: 36px;
+ margin-right: 12px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ }
+ }
+ .merCollection{
+ width: 94%;
+ margin: 0 3%;
+ height: 50px;
+ border: 1px dashed #D9D9D9;
+ .flexLayout(center, center, row);
+ i{
+ font-size: 36px;
+ margin-right: 10px;
+ }
+ }
+
+ .dialog {
+ position: relative;
+
+ .dialog-content {
+ background-color: #fff;
+ width: 280px;
+ height: 270px;
+ margin: 0 auto;
+ padding: 40px 15px 0;
+ box-sizing: border-box;
+ border-radius: 6px;
+ }
+
+ .text {
+ width: 150px;
+ font-size: 14px;
+ margin: 0 auto;
+ color: #666666;
+
+ .blue {
+ color: #4074F8;
+ text-decoration: underline;
+ }
+ }
+
+ .input-box {
+ height: 44px;
+ .flexLayout(flex-start, center);
+ padding-left: 10px;
+ border: 1px solid rgba(230, 230, 230, 1);
+ width: 250px;
+ margin: 20px auto 0;
+ box-sizing: border-box;
+
+ .icon {
+ position: relative;
+ padding-right: 10px;
+
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 15px;
+ background-color: #3A3A3A;
+
+ }
+ }
+
+ .input {
+ margin-left: 10px;
+ padding: 10px 0;
+ flex: 1;
+ font-size: 12px;
+ border: none;
+ outline: none;
+
+ &.error {
+ color: #FE2A2A;
+ }
+ }
+ }
+
+ .errmsg {
+ text-align: left;
+ margin-left: 10px;
+ margin-bottom: 20px;
+ height: 15px;
+ color: #FE2A2A;
+ font-size: 10px;
+ }
+
+ .btn {
+
+ width: 250px;
+ height: 44px;
+ text-align: center;
+ outline: none;
+ border: none;
+ background-color: #3A3A3A;
+ color: #fff;
+ }
+
+ .logo {
+ width: 64px;
+ height: 64px;
+ transform: translateY(32px);
+ }
+
+ .close {
+ margin-top: 20px;
+ }
+
+ }
+ //逾期
+ .overdue-box{
+ width: 96%;
+ margin: 12px 2%;
+ background: #fff;
+ border-radius:6px;
+ height: 92px;
+ display: flex;
+ padding: 10px;
+ box-sizing: border-box;
+ font-family: PingFang SC;
+ color: #666666;
+ .overdue-box-left {
+ width: 74%;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ .title {
+ font-size: 12px;
+ font-weight: 500;
+ }
+ .title:before {
+ content: "";
+ width: 3px;
+ height: 12px;
+ background: #9459EC;
+ border-radius: 2px;
+ display: inline-block;
+ margin-right: 6px;
+ }
+ .order {
+ margin-top: 5px;
+ font-size: 12px;
+ color: #666;
+ .orderItem {
+ margin-right: 10px;
+ }
+ .ordernum {
+ font-size: 18px;
+ font-weight: bold;
+ color: #333;
+ margin-right: 5px;
+ }
+ }
+ .tip {
+ height: 12px;
+ font-size: 12px;
+ font-weight: 500;
+ color: #999999;
+ margin-top: 5px;
+ }
+ }
+ .overdue-box-right {
+ width: 26%;
+ display: flex;
+ flex-direction: column;
+ justify-items: center;
+ justify-content: center;
+ .view {
+ width: 80px;
+ height: 28px;
+ background: linear-gradient(90deg, #8F6AFF, #9459EC);
+ box-shadow: 0px 4px 7px 0px rgba(99, 19, 232, 0.25);
+ border-radius: 14px;
+ font-size: 12px;
+ font-weight: 500;
+ color: #FFFFFF;
+ text-align: center;
+ line-height: 28px;
+ }
+ }
+ }
+ .content{
+ // width: 100%;
+ width: 96%;
+ margin: 12px 2%;
+ border-radius: 6px;
+ }
+// .content-title{
+// width: 96%;
+// height: 45px;
+// background-color: #fff;
+// line-height: 45px;
+// margin-top: 20px;
+// padding-left: 4%;
+// margin-bottom: 5px;
+// }
+//办单教程
+.course{
+ width: 96%;
+ height: 140px;
+ margin: 12px 2%;
+ margin-bottom: 20px;
+ padding-bottom: 27px;
+ background: #fff;
+ box-sizing: border-box;
+ border-radius: 6px;
+ &-title{
+ // padding: 10px;
+ padding-top: 15px;
+ padding-left: 12px;
+ padding-bottom: 15px;
+ font-size: 16px;
+ font-weight:bold;
+ color:rgba(51,51,51,1)
+ }
+ &-content{
+ margin-top: 10px;
+ .flexLayout(space-between, center);
+ &-item{
+ width: 33.33%;
+ text-align: center;
+ i{
+ font-size: 36px;
+ }
+ p{
+ color: #666666;
+ margin-top: 5px;
+ font-size: 14px;
+ }
+ }
+ }
+}
+.courseDl{
+ width: 96%;
+ height: 165px;
+ margin: 12px 2% 0 2%;
+ // margin-bottom: 20px;
+ // padding-bottom: 27px;
+ background: #fff;
+ box-sizing: border-box;
+ border-radius: 6px;
+ &-title{
+ // padding: 10px;
+ padding-top: 15px;
+ padding-left: 12px;
+ padding-bottom: 15px;
+ font-size: 16px;
+ font-weight:bold;
+ color:rgba(51,51,51,1)
+ }
+ &-content{
+ // margin-top: 10px;
+ border-radius: 6px;
+ width: 100%;
+ .flexLayout(space-between, center);
+ flex-wrap: wrap;
+ &-item{
+ width: 50%;
+ height: 50px;
+ text-align: center;
+ .flexLayout(flex-start, center);
+ i{
+ margin-left: 40px;
+ font-size: 30px;
+ margin-right: 13px;
+ }
+ p{
+ width: 60px;
+ color: #666666;
+ text-align: left;
+ // margin-top: 5px;
+ font-size: 14px;
+ line-height: 50px;
+ }
+ }
+ }
+}
+.notice-continer{
+ width: 95%;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ padding-left: 5%;
+}
+</style>
diff --git a/src/views/old/store/channel-selection.vue b/src/views/old/store/channel-selection.vue
new file mode 100644
index 0000000..0481cea
--- /dev/null
+++ b/src/views/old/store/channel-selection.vue
@@ -0,0 +1,206 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-04-03 14:58:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-04 16:56:16
+ * @Description: 选择通道
+ -->
+<template>
+ <div class="tdxz-div">
+ <van-nav-bar
+ title="选择通道"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ fixed
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div class="proudct-box">
+ <div v-for="(e, i) in list" :key="i" @click="goNext(e)">
+ <img :src="e.icon" alt="" />
+ <p>{{ e.typeName }}</p>
+ <p v-if="e.openStatus == 2" style="color: #19be6b; margin-top: 4px">
+ 已开通
+ </p>
+ <p v-if="e.openStatus == 1" style="color: #ed4014; margin-top: 4px">
+ 开通中
+ </p>
+ <p v-if="e.openStatus == 3" style="color: #ed4014; margin-top: 4px">
+ 未通过
+ </p>
+ <p v-if="e.openStatus == 0" style="color: #b3b3b3; margin-top: 4px">
+ 未开通
+ </p>
+ </div>
+ </div>
+ <van-popup v-model="noOpenShow" class="no-open">
+ <div class="no-open-img">
+ <img src="../../../assets/imgs/openpic.png" alt="" />
+ </div>
+ <p>{{ noOpenText }}</p>
+ <van-button
+ :color="$store.state.backColor"
+ type="default"
+ class="no-open-btn"
+ @click="noOpenShow = false"
+ round
+ >确定</van-button
+ >
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ noOpenText: "门店暂未开通此通道", //产品未开通文本内容
+ noOpenShow: false, //产品未开通弹窗控制
+ list: [], //通道列表
+ showId: "",
+ };
+ },
+ computed: {
+ isddxt() {
+ if (sessionStorage.isddxt == 1) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ },
+ created() {
+ let typeId = this.$route.query.typeId;
+ this.$api
+ .prodZfbVersion({
+ prodId: this.$route.query.prodId * 1,
+ })
+ .then((res) => {
+ this.list = res.body.filter((item, index) => {
+ if (sessionStorage.isddxt == 1) {
+ return item.zfbVersion == 6 || item.zfbVersion == 7;
+ } else {
+ return item.zfbVersion != 6 && item.zfbVersion != 7;
+ }
+ });
+ });
+ },
+ methods: {
+ // 返回上一页
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 跳转
+ goNext(item) {
+ console.log(item);
+ var id = this.$route.query.typeId,
+ path = "",
+ obj = {};
+ if (item.openStatus == 2) {
+ switch (Number(id)) {
+ case 200008:
+ path = "/store-shsk";
+ obj.payMethod = this.$route.query.payMethod;
+ break;
+ case 200002:
+ path = "/hb-credit-installment";
+ break;
+ case 200009:
+ path = "/hbhy-installment";
+ break;
+ case 200010:
+ path = "/shtx";
+ break;
+ case 200011:
+ path = "/xyg/list";
+ break;
+ }
+ } else {
+ this.noOpenShow = true;
+ return;
+ }
+ this.$router.push({
+ path: path,
+ query: {
+ ...obj,
+ typeId: this.$route.query.typeId,
+ prodId: this.$route.query.prodId,
+ zfbVersion: item.zfbVersion,
+ },
+ });
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.tdxz-div {
+ min-height: 100vh;
+ background: #f5f5f7;
+ padding-top: 56px;
+ .proudct-box {
+ width: 359px;
+ margin: auto;
+ box-sizing: border-box;
+ padding: 16px 0;
+ // display: flex;
+ // justify-items: space-between;
+ background: #fff;
+ div {
+ display: inline-block;
+ width: 115px;
+ height: 90px;
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ margin: 16px 31px 16px 31px;
+ text-align: center;
+ box-sizing: border-box;
+ padding: 14px 0 18px 0;
+ img {
+ width: 42px;
+ height: 42px;
+ }
+ p {
+ font-size: 13px;
+ color: #333;
+ }
+ }
+ }
+ .no-open {
+ width: 280px;
+ height: 190px;
+ text-align: center;
+ border-radius: 6px;
+ &-img {
+ width: 100%;
+ margin-top: 13px;
+ img {
+ width: 75px;
+ height: 75px;
+ }
+ }
+ p {
+ font-size: 14px;
+ color: #666666;
+ margin-top: 7px;
+ }
+ &-btn {
+ height: 36px;
+ width: 60%;
+ margin: 0 20%;
+ background: #896edb;
+ color: #fff;
+ margin-top: 28px;
+ line-height: 36px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/channel-selection_sh.vue b/src/views/old/store/channel-selection_sh.vue
new file mode 100644
index 0000000..4c3c66f
--- /dev/null
+++ b/src/views/old/store/channel-selection_sh.vue
@@ -0,0 +1,250 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-04-03 14:58:33
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 13:54:19
+ * @Description: 选择通道
+ -->
+<template>
+ <div class="tdxz-div">
+ <van-nav-bar title="选择通道" left-text="返回" left-arrow @click-left="onClickLeft" fixed style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="proudct-box">
+ <div class="list-box" v-for="(e,i) in list" :key="i" @click="goNext(e)"> <!-- v-show="e.zfbVersion !== 1 && e.zfbVersion !== 4" -->
+ <img :src="e.icon" alt="">
+ <p>{{e.typeName}}</p>
+ <div class="tip-box" :style="e.openStatus==0?{background:'#F2F2F2'}:e.openStatus==1?{background:'#FFF5D9'}:e.openStatus==2?{background:'#E3FAEF'}:e.openStatus==3?{background:'#FCF0F0'}:''">
+ <p v-if="e.openStatus==2" style="color:#19BE6B;">已开通</p>
+ <p v-if="e.openStatus==1" style="color:#FFC421;">开通中</p>
+ <p v-if="e.openStatus==3" style="color:#FF6666;">未通过</p>
+ <p v-if="e.openStatus==0" style="color:#999999;">未开通</p>
+ </div>
+
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import { NavBar } from 'vant';
+import { mapState } from 'vuex';
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ noOpenText: '门店暂未开通此通道', //产品未开通文本内容
+ noOpenShow: false, //产品未开通弹窗控制
+ list:[],//通道列表
+ showId: '',
+ path: ''
+ }
+ },
+ created(){
+
+ let typeId = this.$route.query.typeId
+ this.$api.prodZfbVersion({
+ prodId:this.$route.query.prodId*1
+ }).then(res=>{
+ console.log(sessionStorage.isddxt)
+ // this.list = res.body
+ this.list = res.body.filter((item, index) => {
+ if(sessionStorage.isddxt == 1){
+ return item.zfbVersion == 6 || item.zfbVersion == 7
+ }
+ else{
+ return item.zfbVersion != 6 && item.zfbVersion != 7
+ }
+ })
+ })
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ isddxt(){
+ if(sessionStorage.isddxt == 1){
+ return true
+ }else{
+ return false
+ }
+ }
+ },
+ methods:{
+ // 返回上一页
+ onClickLeft() {
+ this.$router.push('/main/productManagement');
+ },
+ // 跳转
+ goNext(item){
+ var typeId, openStatus, zfbVersion, prodId, icon, title, query
+ typeId = this.$route.query.typeId
+ openStatus = item.openStatus
+ prodId = this.$route.query.prodId
+ icon = this.$route.query.icon
+ zfbVersion = item.zfbVersion
+ if(typeId =='200010'){
+ title = '商户贴息'
+ if(item.zfbVersion==5){
+ title = '开通通联通道'
+ switch(openStatus){
+ case 0:
+ this.path = '/tonglian/startOpen'
+ break;
+ case 1:
+ case 3:
+ this.path = '/tonglian/open-result';
+ break;
+ case 2:
+ this.path = '/tonglian/staging';
+ break;
+ default:
+ this.path = '/tonglian/startOpen';
+ break;
+ }
+ }else{
+ switch(openStatus){
+ case 0:
+ this.path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ this.path = '/huabei/open-result';
+ break;
+ case 2:
+ this.path = '/shtx/staging';
+ break;
+ default:
+ this.path = '/huabei/open';
+ break;
+ }
+ }
+ }
+ if (typeId == '200002' || typeId == '200008' || typeId=='200009') {
+ if(item.zfbVersion==5){
+ title = '开通通联通道'
+ switch (openStatus) {
+ case 0:
+ this.path = '/tonglian/startOpen';
+ break;
+ case 1:
+ case 3:
+ this.path = '/tonglian/open-result';
+ break;
+ case 2:
+ this.path = '/tonglian/staging';
+ break;
+ default:
+ this.path = '/tonglian/startOpen';
+ break;
+ }
+ }else{
+ switch (openStatus) {
+ case 0:
+ this.path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ this.path = '/huabei/open-result';
+ break;
+ case 2:
+ if(typeId=='200008'){
+ this.path = '/huabei/staging_dmf';
+ // this.path = '/huabei/staging';
+ }else{
+ this.path = '/huabei/staging';
+ }
+ break;
+ default:
+ this.path = '/huabei/open';
+ break;
+ }
+ }
+
+ if(typeId=='200002'&&item.zfbVersion!=5){
+ title = '用户付息';
+ }else if(typeId=='200008'){
+ title = '商户收款';
+ }else {
+ title = '商品消费';
+ }
+ }
+ if (typeId == '200011') {
+ switch (openStatus) {
+ case 0:
+ this.path = '/huabei/open';
+ break;
+ case 1:
+ case 3:
+ this.path = '/huabei/open-result';
+ break;
+ case 2:
+ this.path = '/huabei/staging';
+ break;
+ default:
+ this.path = '/huabei/open';
+ break;
+ }
+ title = '信用购-花呗分期';
+ }
+ query = {
+ typeId,
+ openStatus,
+ zfbVersion,
+ prodId,
+ title,
+ }
+ this.$router.push({
+ path: this.path,
+ query
+ });
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+ .tdxz-div{
+ min-height: 100vh;
+ background: #F5F5F7;
+ padding-top: 56px;
+ .proudct-box{
+ width: 359px;
+ margin: auto;
+ box-sizing: border-box;
+ padding:16px 0;
+ // display: flex;
+ // justify-items: space-between;
+ background: #fff;
+ .list-box{
+ display: inline-block;
+ position: relative;
+ width: 115px;
+ height: 90px;
+ box-shadow:0px 0px 15px 0px rgba(66,61,93,0.08);
+ border-radius:8px;
+ margin: 16px 31px 16px 31px;
+ text-align: center;
+ box-sizing: border-box;
+ padding: 14px 0 18px 0;
+ img{
+ width: 42px;
+ height: 42px;
+ }
+ p{
+ font-size: 13px;
+ color: #333;
+ }
+ .tip-box{
+ position: absolute;
+ width:45px;
+ height:16px;
+ line-height: 16px;
+ border-radius:8px 0px 0px 8px;
+ top: 7px;
+ right: 0;
+ p{
+ font-size: 10px;
+ }
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/choose-payment-method.vue b/src/views/old/store/choose-payment-method.vue
new file mode 100644
index 0000000..88d741b
--- /dev/null
+++ b/src/views/old/store/choose-payment-method.vue
@@ -0,0 +1,152 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-23 16:35:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-07 14:14:49
+ * @Description: 支付方式选择页面
+-->
+<template>
+ <div class="choose-payment-method-page">
+ <van-nav-bar title="付款方式" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="content">
+ <div class="cp-box" @click="goNext(item)" v-for="(item,index) in list" :key="index">
+ <img :src="item.icon" alt="">
+ <p>{{item.typeName}}</p>
+ <p v-if="item.openStatus == 2 && item.payMethod != 1" style="color: #19be6b; margin-top: 4px">
+ 已开通
+ </p>
+ <p v-if="item.openStatus == 1 && item.payMethod != 1" style="color: #ed4014; margin-top: 4px">
+ 开通中
+ </p>
+ <p v-if="item.openStatus == 3 && item.payMethod != 1" style="color: #ed4014; margin-top: 4px">
+ 未通过
+ </p>
+ <p v-if="item.openStatus == 0 && item.payMethod != 1" style="color: #b3b3b3; margin-top: 4px">
+ 未开通
+ </p>
+ </div>
+ </div>
+ <van-popup v-model="noOpenShow" class="no-open">
+ <div class="no-open-img">
+ <img src="../../../assets/imgs/openpic.png" alt="">
+ </div>
+ <p>{{ noOpenText }}</p>
+ <van-button :color="$store.state.backColor" type="default" class="no-open-btn" @click="noOpenShow = false" round>确定</van-button>
+ </van-popup>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ noOpenText: '门店暂未开通此方式', //产品未开通文本内容
+ noOpenShow: false, //产品未开通弹窗控制
+ list:[]
+ }
+ },
+ mounted(){
+ this.init()
+ },
+ methods:{
+ init(){
+ this.$api.shskTypeList().then(res=>{
+ this.list = res.body
+ })
+ },
+ onClickLeft(){
+ this.$router.go(-1)
+ },
+ goNext(item){
+ if(item.payMethod===1){
+ this.$router.push({
+ path:'/channel-selection',
+ query:{
+ ...this.$route.query,
+ payMethod:item.payMethod,
+ zfbVersion:item.zfbVersion
+ }
+ })
+ }else{
+ if(item.openStatus !== 2){
+ this.noOpenShow = true
+ }else{
+ this.$router.push({
+ path:'/store-shsk',
+ query:{
+ ...this.$route.query,
+ payMethod:item.payMethod,
+ zfbVersion:item.zfbVersion
+ }
+ })
+ }
+
+ }
+ }
+ }
+}
+</script>
+<style lang="less" scoped>
+.choose-payment-method-page{
+ &{
+ background-color: #F5F5F7;
+ min-height: 100vh;
+ }
+ .content{
+ width: 359px;
+ margin: auto;
+ box-sizing: border-box;
+ padding:32px;
+ background: #fff;
+ margin-top: 10px;
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ .cp-box{
+ width: 115px;
+ height: 100px;
+ background: #FFFFFF;
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ text-align: center;
+ align-content: center;
+ margin-bottom: 28px;
+ padding: 14px;
+ box-sizing: border-box;
+ img{
+ width: 42px;
+ height: 42px;
+ }
+ }
+ }
+ .no-open {
+ width: 280px;
+ height: 190px;
+ text-align: center;
+ border-radius: 6px;
+ &-img {
+ width: 100%;
+ margin-top: 13px;
+ img {
+ width: 75px;
+ height: 75px;
+ }
+ }
+ p {
+ font-size: 14px;
+ color: #666666;
+ margin-top: 7px;
+ }
+ &-btn {
+ height: 36px;
+ width: 60%;
+ margin: 0 20%;
+ background: #896edb;
+ color: #fff;
+ margin-top: 28px;
+ line-height: 36px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/contract/contractInstallment.vue b/src/views/old/store/contract/contractInstallment.vue
new file mode 100644
index 0000000..2c69c26
--- /dev/null
+++ b/src/views/old/store/contract/contractInstallment.vue
@@ -0,0 +1,178 @@
+<!--
+ * @Descripttion:
+ * @Author: CY
+ * @LastEditors: 小明丶
+ * @Date: 2019-3-1 15:00:00
+ * @LastEditTime: 2019-09-02 11:07:15
+ -->
+<template>
+ <div class="contract-installment h-100-g">
+ <x-header title="购机直降" :left-options="{backText:''}"></x-header>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 合约信息
+ </div>
+ <selector title='合约套餐' placeholder='请选择' v-model="selectContract" :options='contractList'
+ :value-map="['contId','contName']" @on-change='handleChangeContract' direction='rtl'></selector>
+ <x-input title='结算金额' v-model.trim="selectConInfo.capitalAmt" readonly text-align='right'><span slot="right"
+ style="font-size: 14px;">元</span></x-input>
+ <x-input title='月缴话费' v-model.trim="selectConInfo.monthlyFees" readonly text-align='right'><span
+ slot="right" style="font-size: 14px;">元</span></x-input>
+ <x-input title='月还款额' v-model.trim="selectConInfo.monthlyPayments" readonly text-align='right'><span
+ slot="right" style="font-size: 14px;">元</span></x-input>
+ <x-input title='期数' v-model.trim="selectConInfo.term" readonly text-align='right'><span slot="right"
+ style="font-size: 14px;">期</span></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 商品信息
+ </div>
+ <x-input title='品牌' v-model.trim="goodsInfo.goodsBrand" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='名称' v-model.trim="goodsInfo.goodsName" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='型号' v-model.trim="goodsInfo.goodsModel" placeholder='请输入' :max='15' text-align='right'>
+ </x-input>
+ <x-input title='价格' v-model.trim="goodsInfo.goodsPrice" placeholder='请输入' :max='5' text-align='right'>
+ </x-input>
+ </group>
+ <f-button fixed @on-click='createdQRCode'>生成二维码</f-button>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'contract-installment',
+ data() {
+ return {
+ selectContract: '', // 选中的合约
+ // 合约信息
+ selectConInfo: {
+ capitalAmt: '', // 结算金额
+ monthlyFees: '', // 月缴话费
+ monthlyPayments: '', // 月还款额
+ term: '', // 期数
+ },
+ // 商品信息
+ goodsInfo: {
+ goodsBrand: '', //商品品牌
+ goodsName: '', //商品名称
+ goodsModel: '', // 商品型号
+ goodsPrice: '', // 价格
+ // goodsImei: '', // IMEI
+ },
+ // 营业厅联系人信息
+ contactInfo: {
+ hallName: "", //营业厅名称
+ hallAddr: "", //营业厅地址
+ sellName: "", //联系人名称
+ sellNum: "", //联系人手机
+ sellCardNo: "", //联系人身份证
+ },
+ contractList: [], // 合约列表
+ };
+ },
+ methods: {
+ // 处理合约的修改
+ handleChangeContract(val) {
+ if (!val) {
+ return;
+ }
+ this.selectConInfo = this.contractList.find((item) => {
+ return item.contId === val;
+ })
+ },
+ // 生成二维码
+ createdQRCode() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.selectContract)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品品牌');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsName)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsModel)) {
+ v.toast('请输入商品型号');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品价格');
+ return false;
+ }
+ if (!/^[1-9]\d{0,4}/.test(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品正确的价格');
+ return false;
+ }
+
+ let queryObj = {
+ ...this.selectConInfo,
+ ...this.goodsInfo,
+ mgrId: sessionStorage.sid, // 办单员id
+ contId: this.selectContract, // 合约id
+ typeId: this.$route.query.typeId
+ };
+
+
+ this.$router.push({
+ path: "/contract-qrcode",
+ query: queryObj
+ })
+ },
+ },
+ created() {
+ // 初始化合约列表
+ this.$api.contractList({
+ typeId:+this.$route.query.typeId
+ }).then(res => {
+ this.contractList = res.body;
+ }, err => err);
+ },
+ };
+
+</script>
+
+
+<style lang='less' scoped>
+ .contract-installment {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ padding-bottom: 80px;
+ overflow-y: scroll;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/contract/contractQrcode.vue b/src/views/old/store/contract/contractQrcode.vue
new file mode 100644
index 0000000..48d1f03
--- /dev/null
+++ b/src/views/old/store/contract/contractQrcode.vue
@@ -0,0 +1,113 @@
+<!--
+ * @Date: 2019-08-30 14:37:51
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 11:07:46
+ * @Description:
+ -->
+<template>
+ <div class="contract-qrcode-page h-100-g">
+ <x-header title="扫码办理" :left-options="{backText:''}"></x-header>
+ <div class="order-info">
+ <div v-if="qrCodeBase64Url" class='canvasImg'>
+ <img :src="qrCodeBase64Url" alt="qrcode">
+ </div>
+ <div id="QRCode" v-else class='qr-code'>
+ <div class='qeimg'>
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+ <p class="notice">请向用户展示二维码,扫码后开始办理分期。</p>
+ </div>
+ </div>
+</template>
+<script>
+ import html2canvas from 'html2canvas';
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'contract-qrcode',
+ data() {
+ return {
+ dataUrl: '',
+ qrCodeBase64Url: '',
+ params: ''
+ }
+ },
+ created(){
+ this.params = {
+ ...this.$route.query
+ };
+ QRCode.toDataURL(
+ JSON.stringify(this.params), {
+ margin: 0,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.dataUrl = url;
+ setTimeout(() => {
+ html2canvas(document.getElementById('QRCode')).then(
+ canvas => {
+ this.qrCodeBase64Url = canvas.toDataURL(
+ 'image/jpeg'
+ );
+ }
+ );
+ }, 100);
+ }
+ );
+ }
+ }
+
+</script>
+<style lang="less" scoped>
+ .contract-qrcode-page {
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ .order-info {
+ padding-top: 46px;
+
+ .canvasImg {
+ margin: 0 auto;
+ width: 220px;
+ height: 220px;
+
+ img {
+ width: 100%;
+ }
+ }
+
+ .notice {
+ padding-top: 40px;
+ text-align: center;
+ color: #666;
+ }
+
+ .qr-code {
+ background: #fff;
+ width: 220px;
+ height: 220px;
+ margin: 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ border: 4px solid @color-text-three;
+ color: @color-text-three;
+
+ .qeimg {
+ width: 200px;
+ height: 200px;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/contract/upload.vue b/src/views/old/store/contract/upload.vue
new file mode 100644
index 0000000..59f5c0d
--- /dev/null
+++ b/src/views/old/store/contract/upload.vue
@@ -0,0 +1,218 @@
+<!--
+ * @Descripttion: 上传合约凭证
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-08 09:16:44
+ * @LastEditTime: 2019-09-05 17:41:40
+ -->
+<template>
+ <div class="box h-100-g">
+ <x-header :left-options="{'backText': ''}" title="上传合约凭证" class="gradient-color"></x-header>
+ <div class="content">
+ <h4 class="title">
+ <span>合约凭证</span>
+ <div @click="showSelect = true;">
+ <i class="iconfont scene_Staging-xiangji"></i>
+ <input ref="photo" type="file" accept="image/*" @change="getFile($event.currentTarget)">
+ <input ref="picture" type="file" accept="image/*" capture="camera" @change="getFile($event.currentTarget)">
+ </div>
+ </h4>
+ <ul class="upload">
+ <li class="upload-item" v-for="(item, index) in form.fileIds" :key="index" :style="{'background-image':`url(${item.fileUrl})`}">
+ <i class="iconfont scene_Staging-shibai1" @click="deleteImgItem(index)"></i>
+ </li>
+ </ul>
+ </div>
+ <group>
+ <x-input title="手机号" v-model="form.contMblNo" placeholder="请输入" text-align="right" :max="11"></x-input>
+ </group>
+ <f-button @on-click="submit()" >提交</f-button>
+
+ <van-action-sheet v-model="showSelect" :close-on-click-overlay="false" cancel-text="取消" :actions="nav" @select="handleSelect">
+ </van-action-sheet>
+ </div>
+</template>
+
+<script>
+import {compress} from "@/utils/index";
+
+export default {
+ name:"order_upload",
+ data() {
+ return {
+ showSelect:false,
+ nav:[
+ {name:'拍照'},
+ {name:'从手机相册选择'},
+ ],
+ form:{
+ orderId:'',
+ contMblNo:'',
+ fileIds:[]
+ }
+ }
+ },
+ props:["orderId"],
+ created(){
+ this.form.orderId = this.orderId;
+ },
+ methods:{
+ imgCompress(path, options={}) {
+ return new Promise((resolve,reject)=>{
+ let img = new Image();
+ img.src = path;
+ img.onload = function () {
+ let that = this,
+ w = that.width,
+ h = that.height,
+ scale = w / h,// 默认按比例压缩
+ quality = options.quality || 0.92,
+ canvas = document.createElement('canvas'),
+ ctx = canvas.getContext('2d');
+
+ w = options.width || w;
+ h = options.height || (w / scale);
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(that, 0, 0, w, h);
+ if (options.quality && options.quality <= 1 && options.quality > 0) {
+ quality = options.quality;
+ }
+ let base64 = canvas.toDataURL('image/jpeg', quality);
+ resolve(base64);
+ }
+ })
+ },
+ handleSelect(item, index) {
+ if(index===0){
+ this.$refs['picture'].click();
+ }else{
+ this.$refs['photo'].click();
+ }
+ this.showSelect = false;
+ },
+ // 删除图片
+ deleteImgItem(index){
+ this.form.fileIds.splice(index,1);
+ },
+ // 获取base64
+ getFile(el){
+ let file = el.files[0];
+ if(typeof file === 'undefined') return;
+ let reader = new FileReader(),
+ that = this;
+ reader.readAsDataURL(file);
+ reader.onload = function(){
+ that.imgCompress(this.result).then(base64=>{
+ that.upload(base64.split(',')[1],file.type.split('/')[1]);
+ })
+ }
+ },
+ //上传文件
+ upload(base64,suffix){
+ let params ={
+ fileType:1,
+ suffix,
+ base64Data:base64
+ }
+ this.$api.uploadFile(params).then(res=>{
+ this.form.fileIds.push(res.body);
+ })
+ },
+ // 提交保存
+ submit(){
+ let form = this.form,
+ tel = form.contMblNo;
+
+ if(form.fileIds.length===0){
+ this.$tool.toast("请上传合约凭证")
+ return;
+ }
+
+ if(tel.length===0){
+ this.$tool.toast("请输入电话号码")
+ return;
+ }
+
+ if(!this.$tool.checkPhone(tel)){
+ this.$tool.toast("请输入正确的电话号码")
+ return
+ }
+ let params = {
+ orderId:form.orderId,
+ contMblNo:tel,
+ fileIds:[]
+ };
+ let fileIds = form.fileIds.map(item=>{
+ return item.id;
+ })
+ params.fileIds = fileIds;
+ this.$api.saveProtocol(params).then(res=>{
+ this.$tool.toast("提交成功")
+ this.$router.go(-1)
+ })
+ }
+ }
+}
+</script>
+
+<style lang="less" scoped>
+.box{
+ background-color: #f1f1f1;
+ padding-top: 54px;
+}
+.content{
+ margin-bottom: 10px;
+ padding-bottom: 12px;
+ background-color: @color-white;
+ .title{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 12px;
+ height: 49px;
+ line-height: 49px;
+ font-size: @font-size-base;
+ font-weight: @font-weight-base;
+ input{
+ display: none;
+ }
+ }
+}
+
+.upload{
+ margin: 5px 12px 0;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+ .upload-item{
+ margin-right: 12px;
+ width: 109px;
+ height: 109px;
+ position: relative;
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ margin-bottom: 12px;
+ &:nth-child(3n){
+ margin-right: 0;
+ }
+ .iconfont{
+ position: absolute;
+ right: 3Px;
+ top: 0;
+ }
+ }
+}
+
+#file{
+ display: none;
+}
+.scene_Staging-xiangji{
+ fill: @color-border-theme;
+ color: @color-border-theme;
+ font-size: 20px;
+}
+</style>
+
diff --git a/src/views/old/store/credit-installment.vue b/src/views/old/store/credit-installment.vue
new file mode 100644
index 0000000..acc645d
--- /dev/null
+++ b/src/views/old/store/credit-installment.vue
@@ -0,0 +1,221 @@
+<!--
+ * @Date: 2019-08-30 11:07:43
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-10-22 09:53:09
+ * @Description:
+ -->
+<template>
+ <div class="credit-installment h-100-g">
+ <x-header title="办理分期" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-input title='商品金额' v-model="settAmt" @on-change='changeSettAmt' @on-blur='blurToCalc' :show-clear='false' :max='5' :placeholder="settLock?'选择期数后系统自动计算':'请输入商品金额'" :disabled='settLock' text-align='right'></x-input>
+ <x-input title='还款总额' v-model="insAmt" @on-change='changeInsAmt' @on-blur='blurToCalc' :show-clear='false' :max='5' :placeholder="insLock?'选择期数后系统自动计算':'请输入还款总额'" :disabled='insLock' text-align='right'></x-input>
+ <selector title='分期期数' ref="insTerm" placeholder='请选择分期期数' v-model="insTerm" :options='termList' :value-map="['termCode','termName']" @on-change='selectTerms' direction='rtl'></selector>
+ <x-input title='商品名称' v-model="prodName" placeholder='请输入商品名称' :max='20' text-align='right'></x-input>
+ <!-- <selector title='银行名称' ref='bankName' placeholder='请选择银行名称' v-model="bankName" :options='bankList' :value-map="['bankCode','bankName']" direction='rtl'></selector> -->
+ <x-input title='费率' v-model="feeRate" @on-change='changeInsAmt' @on-blur='blurToCalc' :show-clear='false' :placeholder="insLock?'选择期数后系统自动计算':'请输入费率'" :disabled='insLock' text-align='right'></x-input>
+ </group>
+
+ <div class="qrCode-box" v-if="dataURL">
+ <div class="qrCode">
+ <!-- <canvas id="canvas"></canvas> -->
+
+ <img :src="dataURL" alt="qrcode">
+ </div>
+ </div>
+ <f-button fixed @on-click='createdQRCode'>生成二维码</f-button>
+ </div>
+</template>
+
+<script>
+import QRCode from 'qrcode';
+import { mapState } from 'vuex';
+export default {
+ name: 'credit-installment',
+ data() {
+ return {
+ //分期期数opt
+ settAmt: '',
+ insAmt: '',
+ insLock: false,
+ settLock: false,
+ needCalcInputName: '',
+ feeRate: '',
+ insTerm: null,
+ termList: [],
+ bankList: [],
+ dataURL: '',
+ prodName: '',
+ bankName: ''
+ };
+ },
+ computed:{
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.$api.findTerms({ typeId: this.$route.query.typeId }).then(res => {
+ this.termList = res.body;
+ }, err => err);
+ },
+ methods: {
+ //计算商品金额或者还款金额的方法,因为下拉框change和input的blur都是统一方法,所以抽出来
+ calcFunc() {
+ if (!this.insTerm || !this.needCalcInputName) return;
+ let obj = {
+ term: this.insTerm
+ };
+ //如果填入的是商品金额,则计算还款总额,反之计算商品金额
+ let v = this.$tool;
+ if (this.needCalcInputName === 'insAmt') {
+ if (!Number(this.settAmt)) {
+ v.toast('请输入正确的商品金额');
+ return false;
+ }
+ if (
+ Number(this.settAmt) < 600 ||
+ Number(this.settAmt) > 50000
+ ) {
+ v.toast('商品金额必须在600-50000之间');
+ return false;
+ }
+ obj.settAmt = this.settAmt;
+ } else if (this.needCalcInputName === 'settAmt') {
+ if (!Number(this.insAmt)) {
+ v.toast('请输入正确的还款总额');
+ return false;
+ }
+ if (Number(this.insAmt) < 600 || Number(this.insAmt) > 50000) {
+ v.toast('还款总额必须在600-50000之间');
+ return false;
+ }
+ obj.insAmt = this.insAmt;
+ }
+ obj.resultFiled = this.needCalcInputName;
+ this.$api.calAmt(obj).then(res => {
+ //赋值运算结果
+ this[this.needCalcInputName] = res.body.terAmt;
+ this.feeRate = res.body.feeRate;
+ }, err => err);
+ },
+ //选择期数后会自动计算商品金额和还款总额,并且渲染对应的银行列表
+ selectTerms(val) {
+ this.calcFunc();
+ },
+ createdQRCode() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.settAmt)) {
+ v.toast('请输入商品金额');
+ return false;
+ }
+ if (v.checkValEmpty(this.insAmt)) {
+ v.toast('请输入还款总额');
+ return false;
+ }
+ if (v.checkValEmpty(this.feeRate)) {
+ v.toast('请输入费率');
+ return false;
+ }
+ if (!Number(this.settAmt)) {
+ v.toast('请输入正确的商品金额');
+ return false;
+ }
+ if (!Number(this.insAmt)) {
+ v.toast('请输入正确的还款总额');
+ return false;
+ }
+ if (Number(this.settAmt) < 600 || Number(this.settAmt) > 50000) {
+ v.toast('商品金额必须在600-50000之间');
+ return false;
+ }
+ if (Number(this.insAmt) < 600 || Number(this.insAmt) > 50000) {
+ v.toast('还款总额必须在600-50000之间');
+ return false;
+ }
+ if (v.checkValEmpty(this.insTerm)) {
+ v.toast('请选择分期期数');
+ return false;
+ }
+ if (v.checkValEmpty(this.prodName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+
+ let itemObj = this.termList[0].bankList[0].prodId;
+ let url = `${sessionStorage.getItem('jumpUrl')}/#/?insTerm=${this.insTerm}&prodName=${this.prodName}&prodId=${itemObj}&settAmt=${this.settAmt}&insAmt=${this.insAmt}&mgrId=${this.userinfo.id}`;
+ this.$router.push({
+ path: '/getQRCode',
+ query: {
+ insTerm: this.insTerm,
+ prodName: this.prodName,
+ prodId: itemObj,
+ settAmt: this.settAmt,
+ insAmt: this.insAmt,
+ mgrId: this.userinfo.id
+ }
+ });
+ },
+ //输入商品金额或者还款总额都会触发这个方法
+ changeSettAmt(settAmt) {
+ //如果等于settAmt,则说明当前正在填写商品金额或者已经计算了还款总额,就要阻止change事件继续触发
+ //当needCalcInputName为空的时候,说明两个输入框的值都应该清空,这时都变成可以填写的状态
+ if (this.needCalcInputName === 'settAmt') return;
+ //代表正在输入商品金额,需要计算还款总额,还款总额将不可填写
+ if (settAmt) {
+ this.needCalcInputName = 'insAmt';
+ this.insLock = true;
+ } else {
+ //如果输入框为空,则还原最初的状态
+ this.needCalcInputName = '';
+ this.insAmt = '';
+ this.insLock = false;
+ }
+ },
+ changeInsAmt(insAmt) {
+ //如果等于settAmt,则说明当前正在填写商品金额或者已经计算了还款总额,就要阻止change事件继续触发
+ //当needCalcInputName为空的时候,说明两个输入框的值都应该清空,这时都变成可以填写的状态
+ if (this.needCalcInputName === 'insAmt') return;
+ //代表正在输入还款总额,需要计算商品金额,商品金额将不可填写
+ if (insAmt) {
+ this.needCalcInputName = 'settAmt';
+ this.settLock = true;
+ } else {
+ //如果输入框为空,则还原最初的状态
+ this.needCalcInputName = '';
+ this.settAmt = '';
+ this.feeRate = '';
+ this.settLock = false;
+ }
+ },
+ //失去焦点时计算金额
+ blurToCalc(val) {
+ if (val) {
+ this.calcFunc();
+ }
+ }
+ }
+
+};
+</script>
+<style lang='less' scoped>
+ .credit-installment {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .qrCode-box {
+ padding-top: 60px;
+ .flexLayout(center, center, row);
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/getHBQRCode.vue b/src/views/old/store/getHBQRCode.vue
new file mode 100644
index 0000000..b3e05c9
--- /dev/null
+++ b/src/views/old/store/getHBQRCode.vue
@@ -0,0 +1,273 @@
+<!--
+ * @Date: 2019-08-30 14:08:02
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:44:00
+ * @Description:
+ -->
+<template>
+ <div class="getQRCode">
+ <!-- <x-header title="扫码办理" :left-options="{backText:''}" style="background-color:#3A3A3A;"></x-header> -->
+ <van-nav-bar title="扫码办理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="black-block" :style="{background:$store.state.backColor}"></div>
+ <div class="order-info">
+ <img class="qrcodeImg" :src="qrCode" alt="qrcode">
+ <!-- <p class="notice">扫一扫,办理分期业务</p> -->
+ <div class="cell-item-style">
+ <span class="title">分期金额</span>
+ <span class="value">{{params.capitalAmt}}元</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">花呗分期手续费率</span>
+ <span class="value">{{params.zfbRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">智享服务费率</span>
+ <span class="value">{{params.platRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">分期期数</span>
+ <span class="value">{{params.term}}期</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">客户还款总额</span>
+ <span class="value">{{params.totalAmount}}元</span>
+ </div>
+ <p style="width:94%;margin-left:3%;text-align:left;padding-top:14px">
+ <span style="color:#999999;font-size:12px">请主动向用户展示</span>
+ <span style="color:#896EDB;font-size:12px" @click="ShowAgreen=true">《用户协议》</span>
+ <span style="color:#999999;font-size:12px">,扫描二维码则视为用户同意此协议。</span>
+ </p>
+ </div>
+ <f-confirm v-model="showModal" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' @on-confirm='onSubmit' :showCancelBtn='false'>
+ <div>支付完成</div>
+ </f-confirm>
+ <f-confirm v-model="Invalid" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' :showCancelBtn='false'>
+ <div>当前二维码已经失效,请点击重新生成二维码</div>
+ </f-confirm>
+ <div class="btn-box" v-if="$route.query.backUrl">
+ <button @click="goHj">返回红茄</button>
+ </div>
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html" v-html="Agreend"></div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" />
+ </div>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'getQRCode',
+ data() {
+ return {
+ ShowAgreen:false,
+ Agreend:'',
+ qrCode: '',
+ orderId:"",
+ timer: '', //轮询定时器
+ showModal: false, //模态窗提示
+ Invalid: false, //模态窗提示
+ params: {
+ totalAmount: 0,
+ term: 0,
+
+ }
+ }
+ },
+ methods:{
+ // 跳转红茄
+ goHj(){
+ console.log(this.$route.query.backUrl.split('https:'))
+ location.href=this.$route.query.backUrl
+ },
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.hbOrderFindOrderSts({ orderId: this.orderId }).then(
+ res => {
+ if (res.body.orderStatus == 1) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ } else if (res.body.orderStatus == 2) {
+ clearInterval(this.timer);
+ this.Invalid = true;
+ } else if (res.body.orderStatus == 3) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 10000);
+ },
+ // 支付成功确定
+ onSubmit() {
+ let queryObj = { id: this.orderId,backUrl:this.$route.query.backUrl};
+ if(this.$route.query.typeId){
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: '/product/hb-detail',
+ query: queryObj
+ });
+ }
+ },
+ created() {
+ this.Agreend = agreement3
+ console.log(this.$route.query)
+ this.params = { ...this.$route.query };
+ this.orderId = this.$route.query.orderId;
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ let url = window.sessionStorage.getItem('hbpayQrCodeUrl');
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCode = url;
+ this.orderSts();
+ }
+ );
+ },
+ beforeRouteLeave (to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next()
+ },
+ }
+</script>
+<style lang="less" scoped>
+@import '../../../style/mixin';
+
+.getQRCode {
+ position: relative;
+ background: #F3F4F5;
+ min-height: 100%;
+ padding-bottom: 40px;
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 150px;
+ background:linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ }
+ .order-info {
+ height:587px;
+ width: 351px;
+ text-align: center;
+ box-sizing: border-box;
+ border-radius: 6px;
+ background-color: #ffffff;
+ padding-top: 28px;
+ position: absolute;
+
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 7%;
+ height: 50px;
+ line-height: 50px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ color: #666666;
+ }
+ .value {
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ background:rgba(255,255,255,1);
+ border:6px solid rgba(223,212,255,1);
+ border-radius:8px;
+ margin-bottom: 37px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+ .btn-box{
+ &{
+ margin-top: 520px;
+ text-align: center;
+ }
+ button{
+ width: 90vw;
+ height:44px;
+ background:rgba(137,110,219,1);
+ border-radius:22px;
+ color: #fff;
+ border: 0;
+ outline: none;
+ }
+ }
+}
+</style>
+
+
diff --git a/src/views/old/store/getQRCode.vue b/src/views/old/store/getQRCode.vue
new file mode 100644
index 0000000..b6d3704
--- /dev/null
+++ b/src/views/old/store/getQRCode.vue
@@ -0,0 +1,124 @@
+<!--
+ * @Date: 2019-08-30 11:29:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-10-28 15:10:38
+ * @Description:
+ -->
+<template>
+ <div class="getQRCode">
+ <x-header title="扫码办理" :left-options="{backText:''}" style="background-color:#3A3A3A;"></x-header>
+ <div class="black-block"></div>
+ <div class="order-info">
+ <div class="cell-item-style">
+ <span class="title">还款总额</span>
+ <span class="value">{{params.insAmt}}元</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">分期期数</span>
+ <span class="value">{{params.insTerm}}期</span>
+ </div>
+ <img class="qrcodeImg" :src="qrCode" alt="qrcode">
+ <p class="notice">扫一扫,办理分期业务</p>
+ </div>
+ </div>
+</template>
+<script>
+ import QRCode from 'qrcode';
+ import {mapGetters} from 'vuex';
+ export default {
+ name: 'getQRCode',
+ data() {
+ return {
+ qrCode: '',
+ params: {
+ insAmt: 0,
+ insTerm: 0,
+ },
+ }
+ },
+ computed:{
+ ...mapGetters(['orgType'])
+ },
+ created() {
+ this.params = { ...this.$route.query };
+ let url = `${sessionStorage.getItem('jumpUrl')}/#/?insTerm=${this.params.insTerm}&prodName=${this.params.prodName}&prodId=${this.params.prodId}&storeId=${this.orgType}&settAmt=${this.params.settAmt}&insAmt=${this.params.insAmt}&mgrId=${this.params.mgrId}`;
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCode = url;
+ }
+ );
+ }
+ }
+</script>
+<style lang="less" scoped>
+.getQRCode {
+ padding-top: 44px;
+ position: relative;
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 116px;
+ background-color: #3a3a3a;
+ }
+ .order-info {
+ height: 480px;
+ width: 351px;
+ text-align: center;
+ box-sizing: border-box;
+ background-color: #ffffff;
+ padding-top: 50px;
+ position: absolute;
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-item-style {
+ box-sizing: border-box;
+ padding-bottom: 10px;
+ margin: 0 35px;
+ margin-bottom: 40px;
+ border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ color: #a3a3a3;
+ font-size: 14px;
+ }
+ .value {
+ color: #3a3a3a;
+ font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+}
+</style>
diff --git a/src/views/old/store/getShskQRCode.vue b/src/views/old/store/getShskQRCode.vue
new file mode 100644
index 0000000..9bbeadd
--- /dev/null
+++ b/src/views/old/store/getShskQRCode.vue
@@ -0,0 +1,127 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-26 16:45:20
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-10 09:35:07
+ * @Description: 商户收款二维码页面
+-->
+<template>
+ <div class="getShskQRCode-page">
+ <van-nav-bar
+ title="生成二维码"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div
+ class="bc-box"
+ :style="{ background: $store.state.defaultBgColor }"
+ ></div>
+ <div class="qr-box">
+ <div class="border-box">
+ <img :src="qrCodeBase64Url" alt="" />
+ </div>
+ <p>二维码失效时间为半小时</p>
+ <p>请尽快提供给用户进行扫码</p>
+ </div>
+ </div>
+</template>
+<script>
+import html2canvas from "html2canvas";
+import QRCode from "qrcode";
+
+export default {
+ data() {
+ return {
+ qrCodeBase64Url: "",
+ timeId:'',
+ };
+ },
+ created() {
+ console.log(this.$route.query.orderId)
+ QRCode.toDataURL(
+ this.$route.query.url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCodeBase64Url = url;
+ // this.search_status();
+ this.timeId = setInterval(() => {
+ this.search_status();
+ }, 2000);
+ }
+ );
+ },
+ methods: {
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 轮询 支付状态
+ search_status() {
+ this.$api.facepay_getStatus(
+ this.$route.query.orderId
+ ).then((res) => {
+ let orderStatus = res.body.orderStatus;
+ if(orderStatus !== 0){
+ clearInterval(this.timeId);
+ this.$router.push(
+ `/shsk-payResult?orderStatus=${orderStatus}`
+ );
+ }
+ });
+ },
+ },
+ beforeRouteLeave(to, from, next) {
+ clearInterval(this.timeId);
+ next();
+ },
+};
+</script>
+<style lang="less" scoped>
+.getShskQRCode-page {
+ & {
+ background: #f5f5f5;
+ min-height: 100vh;
+ }
+ .bc-box {
+ width: 100%;
+ height: 150px;
+ }
+ .qr-box {
+ width: 335px;
+ height: 300px;
+ background: #fff;
+ position: absolute;
+ top: 86px;
+ left: 5.5%;
+ box-sizing: border-box;
+ padding: 29px 73px;
+ .border-box {
+ padding: 5px;
+ border: 3px solid #dfd4ff;
+ border-radius: 4px;
+ margin-bottom: 22px;
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p {
+ text-align: center;
+ font-weight: 500;
+ color: #999999;
+ line-height: 17px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/getShtxQRCode.vue b/src/views/old/store/getShtxQRCode.vue
new file mode 100644
index 0000000..8565a5c
--- /dev/null
+++ b/src/views/old/store/getShtxQRCode.vue
@@ -0,0 +1,293 @@
+<!--
+ * @Date: 2019-08-30 14:08:02
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-27 10:15:57
+ * @Description:
+ -->
+<template>
+ <div class="getQRCode">
+ <!-- <x-header title="扫码办理" :left-options="{backText:''}" style="background-color:#3A3A3A;"></x-header> -->
+ <van-nav-bar title="扫码办理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="black-block"></div>
+ <div class="order-info">
+ <img class="qrcodeImg" :src="qrCode" alt="qrcode">
+ <!-- <p class="notice">扫一扫,办理分期业务</p> -->
+ <div v-if="hasHjToken()" class="cell-item-style">
+ <span class="title">分期金额</span>
+ <!-- <span class="value">{{params.capitalAmt}}元</span> -->
+ <span class="value">{{params.totalAmount}}元</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">花呗分期手续费率</span>
+ <span class="value">{{params.zfbRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">智享服务费率</span>
+ <span class="value">{{params.platRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">分期期数</span>
+ <span class="value">{{params.term}}期</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">客户还款总额</span>
+ <span class="value">{{params.totalAmount}}元</span>
+ </div>
+ <p style="width:94%;margin-left:3%;text-align:left;padding-top:14px">
+ <span style="color:#999999;font-size:12px">请主动向用户展示</span>
+ <span style="color:#896EDB;font-size:12px" @click="ShowAgreen=true">《用户协议》</span>
+ <span style="color:#999999;font-size:12px">,扫描二维码则视为用户同意此协议。</span>
+ </p>
+ </div>
+ <f-confirm v-model="showModal" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' @on-confirm='onSubmit' :showCancelBtn='false'>
+ <div>支付完成</div>
+ </f-confirm>
+ <f-confirm v-model="Invalid" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' :showCancelBtn='false'>
+ <div>当前二维码已经失效,请点击重新生成二维码</div>
+ </f-confirm>
+ <div class="btn-box" v-if="$route.query.backUrl">
+ <button @click="goHj">返回红茄</button>
+ </div>
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html" v-html="Agreend"></div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" />
+ </div>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+import QRCode from "qrcode";
+import {mapMutations} from 'vuex'
+
+export default {
+ name: "getQRCode",
+ data() {
+ return {
+ ShowAgreen:false,
+ Agreend:'',
+ qrCode: "",
+ orderId: "",
+ timer: "", //轮询定时器
+ showModal: false, //模态窗提示
+ Invalid: false, //模态窗提示
+ params: {
+ totalAmount: 0,
+ term: 0
+ }
+ };
+ },
+
+ methods: {
+ ...mapMutations(['setShtxInfo']),
+ hasHjToken(){
+ if(localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ },
+ // 跳转红茄
+ goHj(){
+ console.log(this.$route.query.backUrl.split('https:'))
+ location.href=this.$route.query.backUrl
+ },
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.shtxOrderFindOrderSts({ orderId: this.orderId }).then(
+ res => {
+ if (res.body.orderStatus == 1) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ } else if (res.body.orderStatus == 2) {
+ clearInterval(this.timer);
+ this.Invalid = true;
+ } else if (res.body.orderStatus == 3) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 10000);
+ },
+ // 支付成功确定
+ onSubmit() {
+ let queryObj = {
+ id: this.params.orderId,
+ // term: this.params.value, //分期期数
+ // totalAmount: this.params.totalAmount, //商品总价
+ // payQrCodeUrl: this.params.payQrCodeUrl, //二维码
+ // userName: this.params.contractUserName, //用户名
+ // userMblNo: this.params.contractUserMblNo, //用户电话号
+ // totalAmount: this.params.totalAmount, //还款总额,本金
+ // goodsBrand: this.params.contractGoodsBrand, //商品品牌
+ // goodsName: this.params.contractGoodsName, //商品名称
+ feeRate:this.params.feeRate //费率
+ };
+ // this.$store.commit('setShtxInfo',queryObj)
+
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: "/product/shtx-detail",
+ query:queryObj
+ });
+ }
+ },
+ created() {
+ this.Agreend = agreement3
+ this.params = { ...this.$route.query };
+ this.orderId = this.$route.query.orderId;
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ let url = this.params.payQrCodeUrl;
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCode = url;
+ this.orderSts();
+ }
+ );
+ },
+ beforeRouteLeave(to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next();
+ }
+};
+</script>
+<style lang="less" scoped>
+@import "../../../style/mixin";
+
+.getQRCode {
+ position: relative;
+ background: #F3F4F5;
+ min-height: 100%;
+ .btn-box{
+ &{
+ margin-top: 520px;
+ text-align: center;
+ }
+ button{
+ width: 90vw;
+ height:44px;
+ background:rgba(137,110,219,1);
+ border-radius:22px;
+ color: #fff;
+ border: 0;
+ outline: none;
+ }
+ }
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 150px;
+ background:linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ }
+ .order-info {
+ height: 587px;
+ width: 351px;
+ text-align: center;
+ box-sizing: border-box;
+ border-radius: 6px;
+ background-color: #ffffff;
+ padding-top: 28px;
+ position: absolute;
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 7%;
+ height: 50px;
+ line-height: 50px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ color: #666666;
+ }
+ .value {
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ background:rgba(255,255,255,1);
+ border:6px solid rgba(223,212,255,1);
+ border-radius:8px;
+ margin-bottom: 37px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+}
+</style>
+
+
diff --git a/src/views/old/store/getWxQRCode.vue b/src/views/old/store/getWxQRCode.vue
new file mode 100644
index 0000000..3c227bb
--- /dev/null
+++ b/src/views/old/store/getWxQRCode.vue
@@ -0,0 +1,267 @@
+<!--
+ * @Date: 2019-08-30 14:08:02
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:44:00
+ * @Description:
+ -->
+<template>
+ <div class="getQRCode">
+ <!-- <x-header title="扫码办理" :left-options="{backText:''}" style="background-color:#3A3A3A;"></x-header> -->
+ <van-nav-bar title="扫码办理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="black-block" :style="{background:$store.state.backColor}"></div>
+ <div class="order-info">
+ <div style="text-align: center;">
+ <img class="qrcodeImg" :src="qrCode" alt="qrCode">
+ </div>
+ <!-- <p class="notice">扫一扫,办理分期业务</p> -->
+ <div class="cell-cont-item-style">
+ <span class="title">活动名称</span>
+ <span class="value">{{params.contName}}</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">合约期</span>
+ <span class="value">{{params.term}}</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">担保金额</span>
+ <span class="value">{{params.guaranteedAmt}}</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">月赠费金额</span>
+ <span class="value">{{params.monGiftAmt}}</span>
+ </div>
+ </div>
+ <f-confirm v-model="showModal" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' @on-confirm='onSubmit' :showCancelBtn='false'>
+ <div>支付完成</div>
+ </f-confirm>
+ <f-confirm v-model="Invalid" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' :showCancelBtn='false'>
+ <div>当前二维码已经失效,请重新下单</div>
+ </f-confirm>
+ </div>
+</template>
+<script>
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'getQRCode',
+ data() {
+ return {
+ qrCode: '',
+ orderId:"",
+ timer: '', //轮询定时器
+ showModal: false, //模态窗提示
+ Invalid: false, //模态窗提示
+ params: {
+ contName: '',
+ guaranteedAmt:0,
+ term: 0,
+ monGiftAmt:0
+ }
+ }
+ },
+ methods:{
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.wxScoreOrderStatus({ id: this.orderId }).then(
+ res => {
+ let orderStatus = res.body.orderStatus;
+ if (orderStatus != 2&& orderStatus != 0) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ } else if (orderStatus == 2) {
+ clearInterval(this.timer);
+ this.Invalid = true;
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 3000);
+ },
+ // 支付成功确定
+ onSubmit() {
+ let queryObj = { orderId: this.orderId};
+ this.$router.push({
+ path: '/product/wxScore-detail',
+ query: queryObj
+ });
+ }
+ },
+ created() {
+ this.params = { ...this.$route.query };
+ this.orderId = this.$route.query.orderId;
+ let url = this.$route.query.qrCode;
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ this.qrCode = url;
+ this.orderSts();
+ }
+ );
+ },
+ beforeRouteLeave (to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next()
+ },
+ }
+</script>
+<style lang="less" scoped>
+@import '../../../style/mixin';
+
+.getQRCode {
+ position: relative;
+ background: #F3F4F5;
+ min-height: 100%;
+ padding-bottom: 40px;
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 150px;
+ background:linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ }
+ .order-info {
+ height:587px;
+ width: 351px;
+
+ box-sizing: border-box;
+ border-radius: 6px;
+ background-color: #ffffff;
+ padding-top: 28px;
+ position: absolute;
+
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-cont-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 5%;
+ height: 50px;
+ line-height: 20px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ text-align: left;
+ color: #666666;
+ }
+ .value {
+ text-align: right;
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .cell-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 5%;
+ height: 50px;
+ line-height: 50px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ text-align: left;
+ color: #666666;
+ }
+ .value {
+ text-align: right;
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ height:100px;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ background:rgba(255,255,255,1);
+ border:6px solid rgba(223,212,255,1);
+ border-radius:8px;
+ margin-bottom: 37px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+ .btn-box{
+ &{
+ margin-top: 520px;
+ text-align: center;
+ }
+ button{
+ width: 90vw;
+ height:44px;
+ background:rgba(137,110,219,1);
+ border-radius:22px;
+ color: #fff;
+ border: 0;
+ outline: none;
+ }
+ }
+}
+</style>
+
+
diff --git a/src/views/old/store/getXygHbQRCode.vue b/src/views/old/store/getXygHbQRCode.vue
new file mode 100644
index 0000000..8cfbba0
--- /dev/null
+++ b/src/views/old/store/getXygHbQRCode.vue
@@ -0,0 +1,248 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 13:48:16
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-03-23 10:15:36
+ * @Description: 信用购花呗二维码页面
+ -->
+<template>
+ <div class="getQRCode">
+ <van-nav-bar title="扫码办理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="black-block"></div>
+ <div class="order-info">
+ <img class="qrcodeImg" :src="qrCode" alt="qrcode">
+ <!-- <p class="notice">扫一扫,办理分期业务</p> -->
+ <div class="cell-item-style">
+ <span class="title">分期金额</span>
+ <span class="value">{{params.capitalAmt}}元</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">花呗分期手续费率</span>
+ <span class="value">{{params.zfbRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">智享服务费率</span>
+ <span class="value">{{params.platRate}}%</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">分期期数</span>
+ <span class="value">{{params.term}}期</span>
+ </div>
+ <div class="cell-item-style">
+ <span class="title">客户还款总额</span>
+ <span class="value">{{params.totalAmount}}元</span>
+ </div>
+ <p style="width:94%;margin-left:3%;text-align:left;padding-top:14px">
+ <span style="color:#999999;font-size:12px">请主动向用户展示</span>
+ <span style="color:#896EDB;font-size:12px" @click="ShowAgreen=true">《用户协议》</span>
+ <span style="color:#999999;font-size:12px">,扫描二维码则视为用户同意此协议。</span>
+ </p>
+ </div>
+ <f-confirm v-model="showModal" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' @on-confirm='onSubmit' :showCancelBtn='false'>
+ <div>支付完成</div>
+ </f-confirm>
+ <f-confirm v-model="Invalid" showIcon iconClass='scene_Staging-shenhezhong' iconColor='#fff' :showCancelBtn='false'>
+ <div>当前二维码已经失效,请点击重新生成二维码</div>
+ </f-confirm>
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html" v-html="Agreend"></div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" />
+ </div>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'getQRCode',
+ data() {
+ return {
+ ShowAgreen:false,
+ Agreend:'',
+ qrCode: '',
+ orderId:"",
+ timer: '', //轮询定时器
+ showModal: false, //模态窗提示
+ Invalid: false, //模态窗提示
+ params: {
+ totalAmount: 0,
+ term: 0,
+
+ }
+ }
+ },
+ methods:{
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.hbOrderFindOrderSts({ orderId: this.orderId }).then(
+ res => {
+ if (res.body.orderStatus == 1) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ } else if (res.body.orderStatus == 2) {
+ clearInterval(this.timer);
+ this.Invalid = true;
+ } else if (res.body.orderStatus == 3) {
+ clearInterval(this.timer);
+ this.showModal = true;
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 10000);
+ },
+ // 支付成功确定
+ onSubmit() {
+ let queryObj = { id: this.orderId,whereGo:1};
+ if(this.$route.query.typeId){
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: '/product/xyg-hb-detail',
+ query: queryObj
+ });
+ }
+ },
+ created() {
+ this.Agreend = agreement3
+ this.params = { ...this.$route.query };
+ this.orderId = this.$route.query.orderId;
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ let url = window.sessionStorage.getItem('xygHbpayQrCodeUrl');
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCode = url;
+ this.orderSts();
+ }
+ );
+ },
+ beforeRouteLeave (to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next()
+ },
+ }
+</script>
+<style lang="less" scoped>
+@import '../../../style/mixin';
+
+.getQRCode {
+ position: relative;
+ background: #F3F4F5;
+ min-height: 100%;
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 150px;
+ background:linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ }
+ .order-info {
+ height: 587px;
+ width: 351px;
+ text-align: center;
+ box-sizing: border-box;
+ border-radius: 6px;
+ background-color: #ffffff;
+ padding-top: 28px;
+ position: absolute;
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 7%;
+ height: 50px;
+ line-height: 50px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ color: #666666;
+ }
+ .value {
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ background:rgba(255,255,255,1);
+ border:6px solid rgba(223,212,255,1);
+ border-radius:8px;
+ margin-bottom: 37px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+}
+</style>
+
+
+
diff --git a/src/views/old/store/gzzj/createcode.vue b/src/views/old/store/gzzj/createcode.vue
new file mode 100644
index 0000000..d7a6f95
--- /dev/null
+++ b/src/views/old/store/gzzj/createcode.vue
@@ -0,0 +1,280 @@
+<!--
+ * @Descripttion: 智享云生成二维码
+ * @Author:TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-3-1 15:00:00
+ * @LastEditTime: 2019-09-02 11:13:02
+ -->
+<template>
+ <div class="contract-installment-zxh">
+ <x-header title="公众租机" :left-options="{backText:''}"></x-header>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 合约信息
+ </div>
+ <selector title='合约套餐' placeholder='请选择' v-model="contId" :options='contList'
+ :value-map="['contCode','contName']" @on-change='contractChange' direction='rtl'></selector>
+ <x-input title='直降金额' v-model.trim="capitalAmt" readonly text-align='right'><span slot="right" style="font-size: 14px;"></span></x-input>
+ <x-input title='电子券金额' v-model.trim="ticketAmt" readonly text-align='right'><span slot="right" style="font-size: 14px;"></span></x-input>
+ <x-input title='月缴话费' v-model.trim="monthlyFees" readonly text-align='right'><span slot="right" style="font-size: 14px;"></span></x-input>
+ <x-input title='期数' v-model.trim="term" readonly text-align='right'><span slot="right" style="font-size: 14px;"></span></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 商品信息
+ </div>
+ <selector title='设备类型' placeholder='请选择' v-model="goodsType" :options='deviceTypeList'
+ :value-map="['code','name']" @on-change='goodsTypeChange' direction='rtl'></selector>
+ <selector v-if="goodsType==1" title='品牌' placeholder='请选择' v-model="goodsBrand" :options='goodsBrandList'
+ :value-map="['skuName','skuName']" @on-change='goodsBrandChange' direction='rtl'></selector>
+ <selector v-if="goodsType==1" title='名称' placeholder='请选择' v-model="goodsModel" :options='goodsModelList'
+ :value-map="['size','size']" @on-change='goodsModelChange' direction='rtl'></selector>
+ <x-input title='价格' v-model.trim="goodsPrice" readonly placeholder='请输入' :max='5' text-align='right'>
+ </x-input>
+ <x-input title='IMEI' v-model.trim="goodsImei" placeholder='请输入' :max='20' text-align='right' v-if="goodsType==1">
+ </x-input>
+ <x-input title='SN' v-model.trim="goodsSn" placeholder='请输入SN' :max='20' text-align='right' v-else>
+ </x-input>
+
+ </group>
+
+ <van-button class="btn" round @click="gzzjOrderCreate">生成二维码</van-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XAddress
+ } from 'vux';
+ import QRCode from 'qrcode';
+ import IDValidator from '@/utils/IDValidator';
+
+ export default {
+ name: 'gzzj_createcode',
+ components: {
+ XAddress
+ },
+ data() {
+ return {
+ contList: [],
+ deviceTypeList: [{
+ code: 1,
+ name: "手机",
+ },
+ {
+ code: 2,
+ name: "电子商品",
+ },
+ {
+ code: 3,
+ name: "智能家电",
+ },
+ {
+ code: 4,
+ name: "其他",
+ }],
+ goodsBrandList: [],
+ goodsModelList: [],
+ goodsDescList: [],
+ sibSkuRespVoList: [],
+ contId: '', // 选中的合约
+ contName: '', // 选中的合约
+ capitalAmt:'', //直降金额
+ ticketAmt:'', //电子券金额
+ monthlyFees: '', // 月缴话费
+ term: '', // 期数
+ goodsType: '', // 选中的类型
+ goodsBrand: '', //商品品牌
+ goodsModel: '', //商品名称
+ goodsDesc: '', // 商品描述
+ goodsPrice: '', // 价格
+ goodsImei: '', // IMEI
+ goodsSn: '', //SN
+ }
+ },
+ created() {
+ this.$api.gzzjOrderInit().then(res => {
+ this.contList = res.body.contList;
+ this.sibSkuRespVoList =res.body.sibSkuRespVoList;
+ }, err => err);
+ },
+ watch: {
+ },
+ methods: {
+ // 处理合约的修改
+ contractChange(val) {
+ if (!val) {
+ return;
+ }
+ let currentEle=JSON.parse(JSON.stringify(this.contList)).find(item=>item.contCode===val)
+ this.contId = currentEle.contCode;
+ this.contName = currentEle.contName;
+ this.term = currentEle.term;
+ this.capitalAmt = currentEle.strDownAmt;
+ this.monthlyFees = currentEle.monthConsAmt;
+ this.ticketAmt = currentEle.eleBondAmt;
+ },
+ // 处理合约的修改
+ goodsTypeChange(val) {
+ if (!val) {
+ return;
+ }
+ let indexNum = -1;
+ let currentEle = JSON.parse(JSON.stringify(this.deviceTypeList)).find(item => {
+ //定义一个index,index接收我们找到的全部数据
+ indexNum++;
+ return item.code == val
+ //当我们里面循环的值和我们要找的值相等的时候返回
+ })
+ this.goodsType = currentEle.code;
+ if(this.goodsType== 1) {
+ this.goodsBrandList = this.sibSkuRespVoList[0].phoneSkuReqVoList;
+ }else{
+ this.goodsDescList = this.sibSkuRespVoList[indexNum].ortherSkuReqVoList;
+ }
+ },
+ // 处理合约的修改
+ goodsBrandChange(val) {
+ if (!val) {
+ return;
+ }
+ let indexNum = -1;
+ let currentEle = JSON.parse(JSON.stringify(this.goodsBrandList)).find(item => {
+ //定义一个index,index接收我们找到的全部数据
+ indexNum++;
+ return item.skuName == val
+ //当我们里面循环的值和我们要找的值相等的时候返回
+ })
+ this.goodsBrand = currentEle.skuName;
+ this.goodsModelList = this.goodsBrandList[indexNum].skuSize;
+ },
+ // 处理合约的修改
+ goodsModelChange(val) {
+ if (!val) {
+ return;
+ }
+ let indexNum = -1;
+ let currentEle = JSON.parse(JSON.stringify(this.goodsModelList)).find(item => {
+ //定义一个index,index接收我们找到的全部数据
+ indexNum++;
+ return item.size == val
+ //当我们里面循环的值和我们要找的值相等的时候返回
+ })
+ this.goodsModel = currentEle.size;
+ this.goodsPrice = currentEle.price;
+ },
+ // 处理合约的修改
+ goodsDescChange(val) {
+ if (!val) {
+ return;
+ }
+ let indexNum = -1;
+ let currentEle = JSON.parse(JSON.stringify(this.goodsDescList)).find(item => {
+ //定义一个index,index接收我们找到的全部数据
+ indexNum++;
+ return item.deviceDepict == val
+ //当我们里面循环的值和我们要找的值相等的时候返回
+ })
+ this.goodsDesc = currentEle.deviceDepict;
+ this.goodsPrice = currentEle.price;
+ },
+ // 生成二维码
+ gzzjOrderCreate() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.contId)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ if (this.goodsType == 1 && v.checkValEmpty(this.goodsType)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (this.goodsType == 1 && !/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsBrand)) {
+ v.toast('请选择商品品牌');
+ return false;
+ }
+ if (this.goodsType == 1 && v.checkValEmpty(this.goodsModel)) {
+ v.toast('请选择商品名称');
+ return false;
+ }
+ if (this.goodsType == 1 && v.checkValEmpty(this.goodsImei)) {
+ v.toast('请输入商品IMEI');
+ return false;
+ }else if (this.goodsType != 1 && v.checkValEmpty(this.goodsSn)) {
+ v.toast('请输入商品SN');
+ return false;
+ }
+ this.$api.gzzjOrderPrecreate({
+ contId:Number(this.contId),
+ deviceDepict: this.goodsType,
+ deviceType: this.goodsType,
+ goodsBrand: this.goodsBrand,
+ goodsPrice: this.goodsPrice,
+ goodsModel: this.goodsModel,
+ imeicode: this.goodsImei,
+ sn: this.goodsSn,
+ }).then(res => {
+ this.qrCode = res.body
+ if (this.qrCode) {
+ this.createdQRCode();
+ }
+ }, err => err);
+ },
+ // 生成二维码
+ createdQRCode() {
+ let queryObj = {
+ qrCode:this.qrCode
+ }
+ this.$router.push({
+ path: "/gzzj/gzzjQrCode",
+ query: queryObj
+ })
+ },
+ // 根据城市code 获取拼接的字符串
+ getAddrText(arr) {
+ let str = '';
+ this.cityList.forEach(item => {
+ if (arr.indexOf(item.value) > -1) {
+ str += item.name
+ }
+ })
+ return str;
+ }
+ }
+ };
+</script>
+<style lang='less' >
+ .contract-installment-zxh {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ padding-bottom: 80px;
+ overflow-y: scroll;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+ }
+ .btn {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
diff --git a/src/views/old/store/gzzj/gzzjQrCode.vue b/src/views/old/store/gzzj/gzzjQrCode.vue
new file mode 100644
index 0000000..087c3a0
--- /dev/null
+++ b/src/views/old/store/gzzj/gzzjQrCode.vue
@@ -0,0 +1,198 @@
+<!--
+ * @Date: 2019-08-30 14:08:02
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:44:00
+ * @Description:
+ -->
+<template>
+ <div class="getQRCode">
+ <!-- <x-header title="扫码办理" :left-options="{backText:''}" style="background-color:#3A3A3A;"></x-header> -->
+ <van-nav-bar title="扫码办理" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="black-block" :style="{background:$store.state.backColor}"></div>
+ <div class="order-info">
+ <div style="text-align: center;">
+ <img class="qrcodeImg" :src="qrCode" alt="qrCode">
+ </div>
+ <div class="cell-cont-item-style">
+ <span class="title">二维码失效时间为半小时,请尽快提供给用户进行扫码</span>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'getQRCode',
+ data() {
+ return {
+ qrCode: '',
+ }
+ },
+ methods:{
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ },
+ created() {
+ this.params = { ...this.$route.query };
+ let url = this.$route.query.qrCode;
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ this.qrCode = url;
+ }
+ );
+ }
+ }
+</script>
+<style lang="less" scoped>
+@import '../../../../style/mixin';
+
+.getQRCode {
+ position: relative;
+ background: #F3F4F5;
+ min-height: 100%;
+ padding-bottom: 40px;
+ .vux-header {
+ &:after {
+ border-bottom: none !important;
+ }
+ }
+ .vux-header-title {
+ span {
+ color: #ffffff;
+ }
+ }
+ .left-arrow {
+ &:before {
+ border-color: #ffffff !important;
+ }
+ }
+ .black-block {
+ margin-top: -11px;
+ width: 100%;
+ height: 150px;
+ background:linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ }
+ .order-info {
+ height:587px;
+ width: 351px;
+
+ box-sizing: border-box;
+ border-radius: 6px;
+ background-color: #ffffff;
+ padding-top: 28px;
+ position: absolute;
+
+ top: 85px;
+ left: 50%;
+ transform: translateX(-50%);
+ .cell-cont-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 5%;
+ height: 50px;
+ line-height: 20px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ text-align: center;
+ color: #FF0000;
+ }
+ .value {
+ text-align: right;
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .cell-item-style {
+ width: 80%;
+ margin: 0 3%;
+ padding: 0 5%;
+ height: 50px;
+ line-height: 50px;
+ background: #FAFAFA;
+ font-size: 16px;
+ // box-sizing: border-box;
+ // padding-bottom: 10px;
+ // margin-bottom: 40px;
+ // border-bottom: 1px solid #dddddd;
+ .flexLayout(space-between, center, row);
+ .title {
+ text-align: left;
+ color: #666666;
+ }
+ .value {
+ text-align: right;
+ color: #333333;
+ // font-size: 14px;
+ }
+ }
+ .last-cell {
+ margin-bottom: 25px !important;
+ height:100px;
+ }
+ .qrcodeImg {
+ width: 190px;
+ height: 190px;
+ background:rgba(255,255,255,1);
+ border:6px solid rgba(223,212,255,1);
+ border-radius:8px;
+ margin-bottom: 37px;
+ }
+ .notice {
+ color: #3a3a3a;
+ font-size: 12px;
+ }
+ }
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+ .btn-box{
+ &{
+ margin-top: 520px;
+ text-align: center;
+ }
+ button{
+ width: 90vw;
+ height:44px;
+ background:rgba(137,110,219,1);
+ border-radius:22px;
+ color: #fff;
+ border: 0;
+ outline: none;
+ }
+ }
+}
+</style>
+
+
diff --git a/src/views/old/store/gzzj/message.vue b/src/views/old/store/gzzj/message.vue
new file mode 100644
index 0000000..3ef6437
--- /dev/null
+++ b/src/views/old/store/gzzj/message.vue
@@ -0,0 +1,105 @@
+
+<template>
+ <div class="getQRCode">
+ <!-- <x-header class="message-head" title="消息详情" :left-options="{backText:''}"></x-header> -->
+ <van-nav-bar title="消息详情" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="message-body">
+ <div class="notice">
+ <p class="notice-title">{{ message.msgTitle }}</p>
+ <p>{{ message.msgTime }}</p>
+ </div>
+ <span class="line"></span>
+ <div class="notice-continue" v-html=" message.msgCon">
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import {
+ dateFormat
+ } from 'vux'
+import { mapActions } from 'vuex';
+ export default {
+ name: 'message',
+ components: {
+ XHeader,
+ },
+ data() {
+ return {
+ messageId: this.$route.query.messageId,
+ message:{
+ msgCon: '',
+ msgTitle: '',
+ msgTime: '',
+ }
+ }
+ },
+ computed:{
+
+ },
+ created() {
+ this.msgInt()
+ this.getCount()
+ },
+ methods: {
+ ...mapActions(['getCount']),
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ msgInt() {
+ this.$api.noticeDetail({id: this.messageId}).then(res => {
+ console.log(res.body)
+ this.message.msgCon = res.body.noticeContent;
+ this.message.msgTitle = res.body.title;
+ this.message.msgTime = dateFormat(res.body.pubTime);
+ })
+
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.getQRCode{
+ background: #F5F5F7;
+ width: 100%;
+ height: 100%;
+}
+.message-head{
+ position: relative;
+}
+.message-body{
+ width: 96%;
+ margin: 12px 2%;
+ margin-top: 10px;
+ background: #fff;
+ .notice{
+ padding: 15px 12px;
+ border-bottom: 1px solid #EEEEEE;
+ p{
+ color: #999999;
+ }
+ &-title{
+ font-size: 16px;
+ font-weight: bold;
+ color: #333333 !important;
+ margin-bottom: 10px;
+ }
+ }
+ .notice-continue{
+ width: 94%;
+ margin: 0px 2%;
+ padding: 15px 0;
+ white-space: wrap;
+ font-size: 14px;
+ word-wrap: break-word;
+ height: auto;
+ padding-left: 2%;
+ background: #fff;
+ color: #666666;
+ line-height: 22px;
+ }
+}
+</style>
diff --git a/src/views/old/store/gzzj/set.vue b/src/views/old/store/gzzj/set.vue
new file mode 100644
index 0000000..e051e6c
--- /dev/null
+++ b/src/views/old/store/gzzj/set.vue
@@ -0,0 +1,197 @@
+<!--
+ * @Descripttion: 智享云状态切换 + 数据资料的反显,无复杂逻辑
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-21 18:06:00
+ * @LastEditTime: 2019-09-02 11:15:49
+ -->
+<template>
+ <div class="zxh-set-box">
+ <x-header title="公众租机" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-switch title="状态" v-model="status"></x-switch>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 基本信息
+ </div>
+ <cell title="商户名称" :value="info.merName"></cell>
+ <cell title="营业执照号" :value="info.licenseNo"></cell>
+ <cell title="地址" :value="info.merAddr"></cell>
+ <cell title="详细地址" :value="info.merDtlAddr"></cell>
+ <cell title="营业面积" :value="info.merArea"></cell>
+ <cell title="成立日期" :value="info.foundDate | timeformat('yyyy-MM-dd')"></cell>
+ <cell title="协议开始时间" :value="(info.agreeStartTime || '') | parseDate"></cell>
+ <cell title="协议结束时间" :value="(info.agreeEndTime || '') | parseDate"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 法人信息
+ </div>
+ <cell title="法人姓名" :value="info.legalName"></cell>
+ <cell title="法人身份证号" :value="info.legalIdNo"></cell>
+ <cell title="法人电话" :value="info.legalMblNo"></cell>
+ <cell title="法人家庭住址" :value="info.legalHomeAddr"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 银行信息
+ </div>
+ <cell title="银行名称" :value="info.bankName"></cell>
+ <cell title="开户行" :value="info.bankDtlName"></cell>
+ <cell title="地址" :value="info.bankAddr"></cell>
+ <cell title="户名" :value="info.cardName"></cell>
+ <cell title="银行账号" :value="info.cardNo"></cell>
+ <cell title="账号类型" :value="info.cardTypeName"></cell>
+ <cell title="开户行行号" v-if="info.cardType ==='pu'" :value="info.bankNo"></cell>
+ </group>
+
+ <f-space></f-space>
+
+ <!-- 图片反显 -->
+ <section class="img-box">
+ <h4>营业执照照片</h4>
+ <div class="img-item" v-for="(item, index) in info.licencePhotos" :key="index"
+ :style="item.fileUrl | generate">
+ </div>
+ </section>
+ <section class="img-box">
+ <h4>法人身份证正反面照片</h4>
+ <div class="img-item" v-for="(item, index) in info.legalCardPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>房产证或租赁合同</h4>
+ <div class="img-item" v-for="(item, index) in info.houseContractPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>外景照、门头照片、前台照、内景照</h4>
+ <div class="img-item" v-for="(item, index) in info.storePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>套餐活动清单、终端商品定价清单</h4>
+ <div class="img-item" v-for="(item, index) in info.mealBillPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>运营商授权文件</h4>
+ <div class="img-item" v-for="(item, index) in info.accreditFilePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <f-button fixed @on-click="submit">保存</f-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XSwitch
+ } from 'vux';
+
+ export default {
+ name: "heyd_info",
+ components: {
+ XSwitch
+ },
+ data() {
+ return {
+ status: true,
+ info: {},
+ productInfo: {}
+ }
+ },
+ filters: {
+ generate(path) {
+ return {
+ 'background-image': `url(${path})`
+ }
+ },
+ parseDate(v = '') {
+ if (v) {
+ return v.slice(0, 4) + '-' + v.slice(4, 6) + '-' + v.slice(-2);
+ } else {
+ return '暂无';
+ }
+ }
+ },
+ created() {
+ this.init();
+ },
+ methods: {
+ init() {
+ this.$api.prodRefInit(this.$route.query).then(res => {
+ this.productInfo = res.body;
+ this.status = !!this.productInfo.status;
+ });
+ // 获取商户信息反显
+ this.$api.getMerInfo(this.$route.query.orgId).then(res => {
+ this.info = res.body;
+ })
+ },
+ // 保存
+ submit() {
+ this.$api.prodSaveRef({
+ ...this.$route.query,
+ prodSkDtlInfoList: this.productInfo.prodSkDtlInfoList,
+ status: this.status ? 1 : 0
+ }).then(() => {
+ this.$notify('保存成功');
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less">
+ .zxh-set-box {
+ padding-bottom: 60px;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .img-box {
+ padding: 0 12px;
+ background-color: #fff;
+ margin-bottom: 20px;
+
+ h4 {
+ font-weight: normal;
+ font-size: 15px;
+ line-height: 40px;
+ }
+
+ .img-item {
+ display: inline-block;
+ height: 100px;
+ width: 100px;
+ margin: 0 10px 10px 0;
+ border: 1Px dashed #d9d9d9;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/gzzj/upload.vue b/src/views/old/store/gzzj/upload.vue
new file mode 100644
index 0000000..459e24c
--- /dev/null
+++ b/src/views/old/store/gzzj/upload.vue
@@ -0,0 +1,273 @@
+<!--
+ * @Descripttion: 上传合约凭证
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-08 09:16:44
+ * @LastEditTime: 2019-09-03 09:25:14
+ -->
+<template>
+ <div class="zxh-upload-box h-100-g">
+ <x-header :left-options="{'backText': ''}" title="上传合约凭证" class="gradient-color"></x-header>
+ <div class="content" v-for="(item, index) in fileTypeArr" :key="index">
+ <h4 class="title">
+ <span>{{item.name}}</span>
+ <div @click="changeShowselect(item)">
+ <i class="iconfont scene_Staging-xiangji"></i>
+ <input ref="photo" type="file" accept="image/*" @change="getFile($event.currentTarget,item.code)">
+ <input ref="picture" type="file" accept="image/*" capture="camera"
+ @change="getFile($event.currentTarget,item.code)">
+ </div>
+ </h4>
+ <ul class="upload">
+ <li class="upload-item" v-for="(item, index) in item.fileIds" :key="index"
+ :style="{'background-image':`url(${item.fileUrl})`}">
+ <i class="iconfont scene_Staging-shibai1" @click="deleteImgItem(index)"></i>
+ </li>
+ </ul>
+ </div>
+ <group>
+ <x-input title="手机号" v-model="form.contMblNo" placeholder="请输入" text-align="right" :max="11"></x-input>
+ </group>
+ <f-button @on-click="submit()">提交</f-button>
+
+
+ <van-action-sheet v-model="showSelect" :close-on-click-overlay="false" cancel-text="取消" :actions="nav"
+ @select="handleSelect">
+ </van-action-sheet>
+ </div>
+</template>
+
+<script>
+ import {
+ compress
+ } from "@/utils/index";
+ import {
+ Actionsheet
+ } from "vux";
+
+ export default {
+ name: "heyd_upload",
+ data() {
+ return {
+ showSelect: false,
+ nav: [{
+ name: '拍照'
+ },
+ {
+ name: '从手机相册选择'
+ },
+ ],
+ form: {
+ orderId: '',
+ contMblNo: '',
+ fileIds: []
+ },
+ fileTypeArr: [],
+ currentItem: {}
+ }
+ },
+ components: {
+ Actionsheet
+ },
+ props: ["orderId"],
+ created() {
+ this.form.orderId = this.orderId;
+ this.$api.h_getFileType().then(res => {
+ let list = res.body || [];
+ this.fileTypeArr = list.map(item => {
+ return {
+ ...item,
+ fileIds: []
+ }
+ })
+ })
+ },
+ methods: {
+ changeShowselect(item) {
+ if (item.fileIds.length) {
+ this.$tool.toast(`最多上传一张照片~`)
+ return
+ }
+ this.showSelect = true;
+ this.currentItem = item;
+ },
+ imgCompress(path, options = {}) {
+ return new Promise((resolve, reject) => {
+ let img = new Image();
+ img.src = path;
+ img.onload = function () {
+ let that = this,
+ w = that.width,
+ h = that.height,
+ scale = w / h, // 默认按比例压缩
+ quality = options.quality || 0.92,
+ canvas = document.createElement('canvas'),
+ ctx = canvas.getContext('2d');
+
+ w = options.width || w;
+ h = options.height || (w / scale);
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(that, 0, 0, w, h);
+ if (options.quality && options.quality <= 1 && options.quality > 0) {
+ quality = options.quality;
+ }
+ let base64 = canvas.toDataURL('image/jpeg', quality);
+ resolve(base64);
+ }
+ })
+ },
+ handleSelect(item, index) {
+ if (index === 0) {
+ this.$refs['picture'][0].click();
+ } else {
+ this.$refs['photo'][0].click();
+ }
+ this.showSelect = false;
+ },
+ // 删除图片
+ deleteImgItem(index) {
+ this.currentItem.fileIds.splice(index, 1);
+ },
+ // 获取base64
+ getFile(el, fileType) {
+ let file = el.files[0];
+ if (typeof file === 'undefined') return;
+ let reader = new FileReader(),
+ that = this;
+ reader.readAsDataURL(file);
+ reader.onload = function () {
+ that.imgCompress(this.result).then(base64 => {
+ that.upload(base64.split(',')[1], file.type.split('/')[1], fileType);
+ })
+ }
+ },
+ //上传文件
+ upload(base64, suffix, fileType) {
+ let params = {
+ fileType,
+ suffix,
+ base64Data: base64
+ }
+ this.$api.uploadFile(params).then(res => {
+ this.currentItem.fileIds.push(res.body);
+ })
+ },
+ // 提交保存
+ submit() {
+ let form = this.form,
+ tel = form.contMblNo;
+
+ let len = this.fileTypeArr.length;
+ for (let index = 0; index < len; index++) {
+ const item = this.fileTypeArr[index];
+ if (item.fileIds.length === 0) {
+ this.$tool.toast(`请上传${item.name}`)
+ return
+ }
+ }
+
+
+ if (tel.length === 0) {
+ this.$tool.toast("请输入电话号码")
+ return;
+ }
+
+ if (!this.$tool.checkPhone(tel)) {
+ this.$tool.toast("请输入正确的电话号码")
+ return
+ }
+ let params = {
+ orderId: form.orderId,
+ contMblNo: tel,
+ fileIds: []
+ };
+
+
+ let fileIds = [];
+
+ for (let k = 0; k < len; k++) {
+ const item = this.fileTypeArr[k];
+ let arr = item.fileIds;
+ arr.forEach(child => {
+ fileIds.push(child.id)
+ })
+ // fileIds.push(...item.fileIds);
+ }
+
+ params.fileIds = fileIds;
+ this.$api.h_uploadProtocol(params).then(res => {
+ this.$tool.toast("提交成功")
+ this.$router.go(-1)
+ })
+ }
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+ .zxh-upload-box {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ }
+
+ .content {
+ margin-bottom: 10px;
+ padding-bottom: 12px;
+ background-color: @color-white;
+
+ .title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 12px;
+ height: 49px;
+ line-height: 49px;
+ font-size: @font-size-base;
+ font-weight: @font-weight-base;
+
+ input {
+ display: none;
+ }
+ }
+ }
+
+ .upload {
+ margin: 5px 12px 0;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+
+ .upload-item {
+ margin-right: 12px;
+ width: 109px;
+ height: 109px;
+ position: relative;
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ margin-bottom: 12px;
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+
+ .iconfont {
+ position: absolute;
+ right: 3Px;
+ top: 0;
+ }
+ }
+ }
+
+ #file {
+ display: none;
+ }
+
+ .scene_Staging-xiangji {
+ fill: @color-border-theme;
+ color: @color-border-theme;
+ font-size: 20px;
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/hb-contract.vue b/src/views/old/store/hb-contract.vue
new file mode 100644
index 0000000..5f0277a
--- /dev/null
+++ b/src/views/old/store/hb-contract.vue
@@ -0,0 +1,264 @@
+<!--
+ * @Date: 2019-08-30 13:38:35
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-10-28 15:24:08
+ * @Description:
+ -->
+
+<template>
+ <div class="hb-credit-installment h-100-g">
+ <x-header title="办理分期" :left-options="{backText:''}"></x-header>
+ <!--合约机分期-->
+ <group v-show="activeTab === 0">
+ <div class="title">
+ <span class="line"></span>
+ 合约信息
+ </div>
+ <selector title='合约套餐' placeholder='请选择' v-model="selectContract" :options='contractList'
+ :value-map="['contId','contName']" @on-change='handleChangeContract' direction='rtl'></selector>
+ <x-input title='结算金额' v-model.trim="selectContractInfo.capitalAmt" readonly text-align='right'></x-input>
+ <x-input title='月缴话费' v-model.trim="selectContractInfo.monthlyFees" readonly text-align='right'></x-input>
+ <x-input title='月还款额' v-model.trim="selectContractInfo.monthlyPayments" readonly text-align='right'>
+ </x-input>
+ <x-input title='期数' v-model.trim="selectContractInfo.term" readonly text-align='right'></x-input>
+ </x-input>
+ <div style="height: 10px; background: #f5f5f5;"></div>
+ <div class="title">
+ <span class="line"></span>
+ 商品信息
+ </div>
+
+ <x-input title='商品品牌' v-model.trim="contractGoodsBrand" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='商品名称' v-model.trim="contractGoodsName" placeholder='请输入' :max='20' text-align='right'>
+ </x-input>
+ <div style="height: 10px; background: #f5f5f5;"></div>
+ <div class="title">
+ <span class="line"></span>
+ 用户信息
+ </div>
+ <x-input title='用户姓名' v-model.trim="contractUserName" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='用户手机号' v-model.trim="contractUserMblNo" placeholder='请输入' :max='11' text-align='right'>
+ </x-input>
+ </group>
+
+
+ <div class="qrCode-box" v-if="dataURL">
+ <div class="qrCode">
+ <img :src="dataURL" alt="qrcode">
+ </div>
+ </div>
+
+ <!--点击创建订单展示 弹窗 -->
+ <FConfirmSimple v-model="showConfirm" ref="FConfirmQRCode" @on-hide="handleHide"
+ iconClass="scene_Staging-dingdan" class="hb-order-confirm" :showIcon="true" >
+ <div class="trial-list">
+ <div>还款总额:{{trial.totalAmount}}元</div>
+ <div>每月还款额:{{trial.repayPerMonth}}元</div>
+ <div>费率:{{trial.feeRate}}%</div>
+ </div>
+ <f-button @on-click='createdQRCode'>生成二维码</f-button>
+ </FConfirmSimple>
+ <!--此次修改为 生成订单-->
+ <f-space type="large"></f-space>
+ <f-button fixed @on-click='contractInstallmentOrder'>生成订单</f-button>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+ import FConfirmSimple from '@/components/old/FConfirmSimple.vue';
+
+ export default {
+ name: 'hb-credit-installment',
+ components: {
+ FConfirmSimple,
+ },
+ data() {
+ return {
+ monthMoney: '', //月还款总额
+ activeTab: 0, // 处于激活状态下的tab, 最开始为合约机分期
+ tabList: ['合约机分期', '商品分期'],
+ selectContract: '', // 选中的合约
+ contractList: [], // 合约列表
+ selectContractInfo: {// 当前选中合约元素
+ capitalAmt:"",
+ monthlyFees:"",
+ monthlyPayments:"",
+ term:""
+ },
+ contractGoodsBrand: '', //商品品牌
+ contractGoodsName: '', //商品名称
+ contractUserMblNo: '', //用户手机号
+ contractUserName: '', //用户名称
+ // hb
+ capitalAmt: '', //分期本金
+ goodsBrand: '', //商品品牌
+ goodsName: '', //商品名称
+ orderNo: '', //未知参数
+ term: null, //分期期数
+ userMblNo: '', //用户手机号
+ userName: '', //用户名称
+ trial: {}, // 利率相关信息
+ orderId: '', //订单id
+ payQrCodeUrl: '', // 二维码
+ termList: [], //分期期数列表
+ dataURL: '', // QRcode
+ showConfirm: false,
+ };
+ },
+ created() {
+ this.getContractList();
+ },
+ methods: {
+ // 处理合约的修改
+ handleChangeContract(val) {
+ this.selectContractInfo = this.contractList.find((item) => {
+ return item.contId === val;
+ })
+ },
+ handleHide() {
+ this.showConfirm = false;
+ },
+ // 生成二维码
+ createdQRCode() {
+ this.showConfirm = false;
+ let queryObj = {
+ orderId: this.orderId,
+ totalAmount: this.trial.totalAmount,
+ term: this.term,
+ typeId: this.$route.query.typeId
+ }
+ if(this.activeTab===0){
+ queryObj.term = this.selectContractInfo.term;
+ }
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: queryObj
+ })
+ },
+ // 合约分期生成订单
+ contractInstallmentOrder() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.selectContract)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ let reg = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.contractGoodsBrand)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (!reg.test(this.contractGoodsBrand)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品品牌');
+ return false;
+ }
+ if (v.checkValEmpty(this.contractGoodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!reg.test(this.contractGoodsName)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.contractUserName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.contractUserMblNo)) {
+ v.toast('请输入用户手机号');
+ return false;
+ }
+ if (!v.checkPhone(this.contractUserMblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ let params = {
+ contId: this.selectContract,
+ goodsName: this.contractGoodsName,
+ goodsBrand: this.contractGoodsBrand,
+ userName: this.contractUserName,
+ userMblNo: this.contractUserMblNo,
+ }
+ this.$api.hbhyjCreate(params).then(res => {
+ let body = res.body;
+ this.orderId = body.orderId;
+ this.payQrCodeUrl = body.payQrCodeUrl;
+ this.trial.totalAmount = body.totalAmount;
+ this.trial.repayPerMonth = body.repayPerMonth;
+ this.trial.feeRate = body.feeRate;
+ this.showConfirm = true;
+ if (body.payQrCodeUrl) {
+ sessionStorage.setItem("hbpayQrCodeUrl", body.payQrCodeUrl);
+ }
+ })
+ // todo 数据组装,接口的调取
+ },
+ // 获取当前的合约列表
+ getContractList() {
+ this.$api.contractList({
+ typeId: +this.$route.query.typeId
+ }).then(res => {
+ this.contractList = res.body;
+ }, err => err);
+ }
+ },
+ };
+
+</script>
+<style lang='less' scoped >
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/hb-credit-installment.vue b/src/views/old/store/hb-credit-installment.vue
new file mode 100644
index 0000000..4efa5eb
--- /dev/null
+++ b/src/views/old/store/hb-credit-installment.vue
@@ -0,0 +1,714 @@
+<!--
+ * @Date: 2019-08-30 13:38:35
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 15:17:58
+ * @Description:
+ -->
+
+<template>
+ <div class="hb-credit-installment h-100-g">
+ <!-- <x-header title="办理分期" :left-options="{backText:''}"></x-header> -->
+ <!-- <tab :line-width=1 active-color='#bfa073'>
+ <tab-item v-for="(item, index) in tabList" :key="index" :selected="activeTab === index"
+ @on-item-click="handleTabChange(index)">{{ item }}</tab-item>
+ </tab> -->
+ <van-nav-bar title="用户付息" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <!--商品分期-->
+ <div class="mer" :style="{background:$store.state.defaultBgColor}">
+ <div class="mer-head">
+ <div class="mer-head-item">
+ <p>{{ capitalAmt? capitalAmt : '0.00' }}</p>
+ <p>商家到账金额</p>
+ </div>
+ <div class="mer-head-line"></div>
+ <div class="mer-head-item">
+ <p>{{ trial.totalAmount ? trial.totalAmount : '0.00' }}</p>
+ <p>客户总还款额</p>
+ </div>
+ <div class="mer-head-line"></div>
+ <div class="mer-head-item">
+ <p>{{ trial.repayPerMonth ? trial.repayPerMonth : '0.00'}}</p>
+ <p>客户月还款额</p>
+ </div>
+ </div>
+ </div>
+ <group class="group-content">
+ <div class="title">
+ <span class="line" :style="{background:$store.state.defaultBgColor}"></span>
+ 分期信息
+ </div>
+ <div class="form-content">
+ <van-field
+ class="ipt"
+ v-model="capitalAmt"
+ type="number"
+ label="商品金额"
+ placeholder="请输入商品金额"
+ input-align="right"
+ border="true"
+ :maxlength="5"
+ />
+ <!-- @input="changeMoney" -->
+ <van-field
+ class="fenqi"
+ readonly
+ clickable
+ label="分期期数"
+ :value="value"
+ placeholder="请选择"
+ @click="showPickerModel"
+ input-align="right"
+ border="true"
+ is-link='true'
+ />
+ <van-field
+ class="ipt"
+ label="商品名称"
+ placeholder="请输入商品名称"
+ input-align="right"
+ border="false"
+ :maxlength="20"
+ v-model="goodsName"
+ />
+ <van-field
+ class="ipt myDisableIpt"
+ label="月还款额"
+ placeholder="请输入月还款额"
+ input-align="right"
+ border="false"
+ :maxlength="20"
+ v-model="monthMoney"
+ disabled="true"
+ />
+ <van-field
+ label-width="150px"
+ class="ipt myDisableIpt"
+ label="智享服务费率"
+ placeholder="请输入智享服务费率"
+ input-align="right"
+ border="false"
+ :maxlength="3"
+ v-model="platRatePr"
+ disabled="true"
+ />
+ <van-field
+ label-width="150px"
+ class="ipt myDisableIpt"
+ label="花呗分期手续费率"
+ placeholder="请输入花呗分期手续费率"
+ input-align="right"
+ border="false"
+ :maxlength="3"
+ v-model="zfbRatePr"
+ disabled="true"
+ />
+
+ </div>
+ <div style="height: 10px; background: #f5f5f5;"></div>
+ <div class="title" style="border-radius:6px;">
+ <span class="line" :style="{background:$store.state.defaultBgColor}"></span>
+ 用户信息
+ </div>
+ <div class="form-content">
+ <van-field
+ class="ipt"
+ label="用户姓名"
+ placeholder="请输入用户姓名"
+ input-align="right"
+ border="false"
+ :maxlength="10"
+ v-model="userName"
+ />
+ <van-field
+ class="ipt"
+ type="tel"
+ label="用户手机号"
+ placeholder="请输入用户手机号"
+ input-align="right"
+ border="false"
+ :maxlength="11"
+ v-model="userMblNo"
+ />
+ </div>
+ </group>
+
+ <van-popup v-model="showPicker" position="bottom" :style="{ height: '30%'}">
+ <van-picker
+ title="选择期数"
+ show-toolbar
+ item-height="30"
+ :columns="termList"
+ value-key="name"
+ @cancel="showPicker = false"
+ @confirm="selectTerms"
+ />
+ </van-popup>
+ <van-popup
+ v-model="showTwo"
+ @close="aferClose"
+ style="width:280px;height:150px;"
+ >
+ <van-icon name="cross" size="20px" style="position: absolute;right:10px;top:10px;color:#cccccc" @click="closeTwo" color="#CCCCCC"/>
+ <img src="../../../../static/img/img.png" style="width:60px;height:67px;margin-left: 110px;margin-top: 30px;">
+ <p style="font-size:14px;font-family:PingFang SC;font-weight:500;color:rgba(102,102,102,1);margin-top:10px;text-align:center">因{{this.showQi}}期业务调整,暂停{{this.showQi}}期办单通道。</p>
+ </van-popup>
+ <div class="btn-box">
+ <van-button round :color="$store.state.backColor" class="btn2" :class="sysPlat == 2 ? 'active' : ''" @click="goodInstallmentOrder">生成二维码</van-button>
+ <van-button round :color="$store.state.backColor" class="btn2" @click="WeChatSanCode" v-if="sysPlat != 2 && $route.query.zfbVersion != 5">扫描付款码</van-button>
+ </div>
+ <Vdialog @cancel="cancel" :show="showDia"></Vdialog>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+ import FConfirmSimple from '@/components/old/FConfirmSimple.vue';
+ import Vdialog from "@/components/common/v-dialog.vue";
+
+ export default {
+ name: 'hb-credit-installment',
+ components: {
+ FConfirmSimple,Vdialog
+ },
+ data() {
+ return {
+ zfbRate:'',//花呗分期手续费率
+ platRate:'',//智享服务费率
+ showTwo:false,
+ showQi:'',
+ showDia:false,
+ monthMoney: '', //月还款总额
+ contractGoodsBrand: '', //商品品牌
+ contractGoodsName: '', //商品名称
+ contractUserMblNo: '', //用户手机号
+ contractUserName: '', //用户名称
+ // hb
+ capitalAmt: '', //分期本金
+ goodsBrand: '', //商品品牌
+ goodsName: '', //商品名称
+ orderNo: '', //未知参数
+ term: null, //分期期数
+ userMblNo: '', //用户手机号
+ userName: '', //用户名称
+ trial: {}, // 利率相关信息
+ orderId: '', //订单id
+ payQrCodeUrl: '', // 二维码
+ termList: [], //分期期数列表
+ showConfirm: false,
+ value: "", //期数选择值
+ showPicker: false, //期数选择弹出层控制
+ backUrl:'',//红茄跳转链接
+ sysPlat: null,
+ isGoBack:'',//用于重新扫码后判断值
+ };
+ },
+ computed:{
+ zfbRatePr(){
+ if(this.zfbRate || this.zfbRate==0){
+ return this.zfbRate + '%'
+ }else{
+ return ''
+ }
+
+ },
+ platRatePr(){
+ if(this.platRate || this.platRate==0){
+ return this.platRate + '%'
+ }else{
+ return ''
+ }
+
+ }
+ },
+ watch: {
+ capitalAmt(newV) {
+ if (+newV > 0 && Number(this.term) > 0) {
+ this.selectTerms(this.term);
+ }
+ }
+ },
+ created() {
+ if(sessionStorage.hb_session_info&&this.$route.query.isCreateOrderPush){
+ this.isGoBack = 1
+ let hb_session_info = JSON.parse(sessionStorage.hb_session_info)
+ this.value = hb_session_info.term,
+ this.capitalAmt=hb_session_info.capitalAmt,
+ this.term=hb_session_info.term,
+ this.goodsName=hb_session_info.goodsName,
+ this.userName=hb_session_info.userName,
+ this.userMblNo=hb_session_info.userMblNo
+ }
+ //初始化
+ let sysPlat = localStorage.sib_mer_sysPlat
+ if (sysPlat === 'undefined' || sysPlat === '1') {
+ sysPlat = 1
+ }
+ if (sysPlat === '2') {
+ sysPlat = 2
+ }
+ this.sysPlat = sysPlat
+ this.$api.hbOrderInit({
+ prodId:this.$route.query.prodId*1,
+ zfbVersion:this.$route.query.zfbVersion
+ }).then(res => {
+ this.termList = [];
+ var arr = res.body.terms;
+ arr.forEach((ele, i) => {
+ ele.name = ele.name + '期'
+ });
+ this.termList = arr
+
+ }, err => err);
+ //获取微信配置
+ this.getWeChatConfig()
+ },
+ methods: {
+ cancel(val){
+ this.showDia = val
+ },
+ showPickerModel(){
+ this.isGoBack = 2
+ this.showPicker = true
+ },
+ // 调用微信摄像头,扫一扫
+ WeChatSanCode(){
+ let sysPlat = localStorage.sib_mer_sysPlat
+ if (sysPlat === 'undefined' || sysPlat === '1') {
+ sysPlat = 1
+ }
+ if (sysPlat === '2') {
+ sysPlat = 2
+ }
+ let _this = this
+ let v = this.$tool;
+ if (v.checkValEmpty(this.capitalAmt)) {
+ v.toast('请输入商品金额');
+ return false;
+ }
+ if (!Number(this.capitalAmt)) {
+ v.toast('请输入正确的商品金额');
+ return false;
+ }
+ // 临时调整价格
+ if (
+ Number(this.capitalAmt) < 0 ||
+ Number(this.capitalAmt) > 50000
+ ) {
+ v.toast('商品金额必须在100-50000元之间');
+ return false;
+ }
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.goodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!res.test(this.goodsName)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.term)) {
+ v.toast('请输入分期期数');
+ return false;
+ }
+ if (v.checkValEmpty(this.userName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.userMblNo)) {
+ v.toast('请输入用户手机号');
+ return false;
+ }
+ if (!v.checkPhone(this.userMblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ //判断是不是微信
+ if (sysPlat == 1) {
+ this.checkIsReady().then(()=>{
+ wx.scanQRCode({
+ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+ scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
+ success: function (res) {
+ // 当needResult 为 1 时,扫码返回的结果
+ // 扫码成功后调用接口
+ let obj = {
+ capitalAmt: _this.capitalAmt,
+ // goodsBrand: this.goodsBrand,
+ goodsName: _this.goodsName,
+ orderNo: _this.orderNo,
+ term: _this.term,
+ userMblNo: _this.userMblNo,
+ userName: _this.userName,
+ zfbVersion: _this.$route.query.zfbVersion,
+ payType: 2 ,//反扫
+ authCode: res.resultStr,
+ sysPlat: sysPlat
+ };
+ _this.$api.hbOrderCreate(obj).then(res=>{
+ _this.orderId = res.body.orderId;
+ _this.$router.push({
+ path:'/pay-result',
+ query:{
+ orderId: _this.orderId,
+ mode: 'hb'
+ }
+ })
+ })
+ }
+ });
+ })
+ }
+ //判断是不是支付宝
+ if (sysPlat == 2) {
+ my.postMessage({'sendToMiniProgram': '0'})
+ my.onMessage = function(e) {
+ console.log(e);
+ let obj = {
+ capitalAmt: _this.capitalAmt,
+ // goodsBrand: this.goodsBrand,
+ goodsName: _this.goodsName,
+ orderNo: _this.orderNo,
+ term: _this.term,
+ userMblNo: _this.userMblNo,
+ userName: _this.userName,
+ zfbVersion: _this.$route.query.zfbVersion,
+ payType: 2 ,//反扫
+ authCode: e,
+ sysPlat: sysPlat
+ };
+ _this.$api.hbOrderCreate(obj).then(res=>{
+ _this.orderId = res.body.orderId;
+ _this.$router.push({
+ path:'/pay-result',
+ query:{
+ orderId: _this.orderId,
+ mode: 'hb'
+ }
+ })
+ })
+ }
+ }
+ },
+ // 异步准备微信环境
+ checkIsReady() {
+ return new Promise((resolve, reject) => {
+ wx.ready(() => resolve());
+ wx.error(err => reject(console.log(res + "wx.error")));
+ });
+ },
+ // 获取微信配置
+ getWeChatConfig(){
+ let url = location.href.split('#')[0]
+ this.$api.getTokenInfo({
+ url: url
+ }).then(res=>{
+ // 获取微信配置
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
+ appId: res.body.appId, // 必填,公众号的唯一标识
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature,// 必填,签名
+ jsApiList: ['checkJsApi','scanQRCode'], // 必填,需要使用的JS接口列表
+ openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
+ });
+ })
+ },
+ closeTwo(){
+ this.showTwo=false
+ this.showPicker = false
+ },
+ //顶部tabbar返回按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ selectTerms(val) {
+ console.log(val)
+ if (!this.capitalAmt) {
+ this.$tool.toast('请输入商品金额');
+ return;
+ }
+ if(val.serverStatus==0){
+ this.showTwo = true
+ this.showQi = val.code
+ return
+ }
+ if(this.isGoBack!=1){
+ //console.log(val.slice(0,-1))
+ this.value = val.code;
+ //let valNum = val.slice(0,-1)
+ this.term = val.code;
+ }
+
+
+ this.$api.calcMonthMoney({
+ capitalAmt: this.capitalAmt,
+ term: this.value
+ }).then(res => {
+ console.log(res.body)
+ this.zfbRate = res.body.zfbRate
+ this.platRate = res.body.platRate
+ this.trial.totalAmount = res.body.totalAmount;
+ this.trial.repayPerMonth = res.body.repayPerMonth;
+ this.trial.feeRate = res.body.feeRate + '%';
+ this.monthMoney = res.body.repayPerMonth
+ })
+ this.showPicker = false;
+ },
+ handleHide() {
+ this.showConfirm = false;
+ },
+ // 生成二维码
+ createdQRCode() {
+ this.showConfirm = false;
+ let queryObj = {
+ orderId: this.orderId,
+ totalAmount: this.trial.totalAmount,
+ term: this.term,
+ typeId: this.$route.query.typeId,
+ zfbRate: this.zfbRate,
+ platRate: this.platRate,
+ capitalAmt: this.capitalAmt,
+ backUrl: this.backUrl,
+ }
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: queryObj
+ })
+ },
+ // 商品分期生成订单
+ goodInstallmentOrder() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.capitalAmt)) {
+ v.toast('请输入商品金额');
+ return false;
+ }
+ if (!Number(this.capitalAmt)) {
+ v.toast('请输入正确的商品金额');
+ return false;
+ }
+ // 临时调整价格
+ if (
+ Number(this.capitalAmt) < 100 ||
+ Number(this.capitalAmt) > 50000
+ ) {
+ v.toast('商品金额必须在100-50000元之间');
+ return false;
+ }
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.goodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!res.test(this.goodsName)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.term)) {
+ v.toast('请输入分期期数');
+ return false;
+ }
+ if (v.checkValEmpty(this.userName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.userMblNo)) {
+ v.toast('请输入用户手机号');
+ return false;
+ }
+ if (!v.checkPhone(this.userMblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ // 用来整体存储缓存数据
+ let hb_session_info = {
+ capitalAmt:this.capitalAmt,
+ term:this.term,
+ goodsName:this.goodsName,
+ userName:this.userName,
+ userMblNo:this.userMblNo
+ }
+ sessionStorage.hb_session_info = JSON.stringify(hb_session_info)
+
+ let obj = {
+ capitalAmt: this.capitalAmt,
+ // goodsBrand: this.goodsBrand,
+ goodsName: this.goodsName,
+ orderNo: this.orderNo,
+ term: this.term,
+ userMblNo: this.userMblNo,
+ userName: this.userName,
+ zfbVersion: this.$route.query.zfbVersion,
+ payType:1, //正扫
+ sysPlat: this.sysPlat
+ };
+ this.$api.hbOrderCreate(obj).then(res => {
+ let body = res.body;
+ this.orderId = body.orderId;
+ this.payQrCodeUrl = body.payQrCodeUrl;
+ this.trial.totalAmount = body.totalAmount;
+ this.trial.repayPerMonth = body.repayPerMonth;
+ this.trial.feeRate = body.feeRate;
+ this.showConfirm = true;
+ this.zfbRate = res.body.zfbRate
+ this.platRate = res.body.platRate
+
+ this.backUrl = res.body.backUrl
+ sessionStorage.hjBackUrl = res.body.backUrl
+ //this.capitalAmt = res.body.capitalAmt
+
+ if (body.payQrCodeUrl) {
+ window.sessionStorage.setItem("hbpayQrCodeUrl", body.payQrCodeUrl);
+ this.createdQRCode();
+ }
+ }, err => {
+ if(err.errorCode===30006007){
+ this.showDia = true
+ }
+ });
+ },
+ },
+ };
+
+</script>
+<style lang='less' scoped >
+ // /deep/.myDisableIpt{
+ // color: #999999;
+ // }
+ /deep/.van-field__control:disabled {
+ color: #666;
+ -webkit-text-fill-color: #666;
+ background-color: transparent;
+ opacity: 1;
+ }
+
+ .ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid rgba(238,238,238,1);
+ color: #333;
+ font-size: 16px;
+ height: 50px;
+ }
+ }
+ .mer{
+ width: 100%;
+ height: 150px;
+ background: linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ overflow: hidden;
+ &-head{
+ width: 96%;
+ margin: 28px 2% 0 2%;
+ height: 72px;
+ background:rgba(255,255,255,0.1);
+ // background: (0,0,0, 0.1);
+ border-radius: 36px;
+ .flex();
+ &-item{
+ width: 33%;
+ color: #fff;
+ text-align: center;
+ :first-child{
+ margin-bottom: 11px;
+ font-size: 20px;
+ font-weight: bold;
+ }
+ :last-child{
+ font-size: 12px;
+ }
+ }
+ &-line{
+ width: 1px;
+ height: 20px;
+ background: #fff;
+ }
+ }
+ }
+ .group-content{
+ transform: translateY(-25px);
+ width: 96%;
+ margin: 0 2%;
+ }
+ /deep/.weui-cells{
+ border-radius: 6px;
+ font-size: 16px;
+ input{
+ font-size: 14px;
+ }
+ }
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #F5F5F7;
+ // padding-top: 54px;
+ min-height: 100%;
+ .title {
+ padding: 14px 0px 14px 12px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+ border-bottom: 1px solid rgba(238,238,238,1);
+ .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ // margin-right: 8px;
+ background:rgba(137,110,219,1);
+ border-radius:0px 6px 0px 6px;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+ .btn-box{
+ margin-top: 40px;
+ margin-bottom: 22px;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ .btn2{
+ width: 40%;
+ height: 44px;
+ background:rgba(137,110,219,1);
+ color: white;
+ }
+ .active {
+ width: 80%;
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/hb-merchant-installment.vue b/src/views/old/store/hb-merchant-installment.vue
new file mode 100644
index 0000000..3012297
--- /dev/null
+++ b/src/views/old/store/hb-merchant-installment.vue
@@ -0,0 +1,439 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-24 18:22:58
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-27 15:10:45
+ * @Description:
+ -->
+<template>
+ <div class="hb-merchant-installment">
+ <van-nav-bar title="办理分期" left-arrow @click-left="onClickLeft" />
+ <div class="money-box">
+ <div class="item-box">
+ <p class="tit">商家到账金额</p>
+ <p v-if="this.capitalAmt == ''" class="money">0.00</p>
+ <p v-else class="money">{{this.capitalAmt}}</p>
+ </div>
+ <div class="item-box">
+ <p class="tit">客户总还款金额</p>
+ <p v-if="this.totalAmount == ''" class="money">0.00</p>
+ <p v-else class="money">{{this.totalAmount}}</p>
+ </div>
+ <div class="item-box">
+ <p class="tit">客户月还款金额</p>
+ <p v-if="this.monthMoney == ''" class="money">0.00</p>
+ <p v-else class="money">{{this.monthMoney}}</p>
+ </div>
+ </div>
+ <van-field
+ class="ipt"
+ v-model="howMouch"
+ type="number"
+ label="商品金额"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ @input="changeMoney"
+ :maxlength="5"
+ required
+ />
+ <van-field
+ class="fenqi"
+ readonly
+ clickable
+ label="分期期数"
+ :value="value"
+ placeholder="请选择"
+ @click="showPicker = true"
+ input-align="right"
+ border="true"
+ required
+ />
+
+ <van-popup v-model="showPicker" position="bottom" :style="{ height: '30%' }">
+ <van-picker
+ title="选择期数"
+ show-toolbar
+ item-height="30"
+ :columns="columns"
+ @cancel="showPicker = false"
+ @confirm="onConfirm"
+ />
+ </van-popup>
+ <van-field
+ class="ipt"
+ label="商品名称"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ :maxlength="20"
+ v-model="contractGoodsName"
+ required
+ />
+ <van-field
+ class="ipt"
+ label="商品品牌"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ :maxlength="10"
+ v-model="contractGoodsBrand"
+ />
+ <van-field
+ class="ipt"
+ label="用户姓名"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ :maxlength="10"
+ v-model="contractUserName"
+ required
+ />
+ <van-field
+ class="ipt"
+ type="tel"
+ label="用户手机号"
+ placeholder="请输入"
+ input-align="right"
+ border="true"
+ :maxlength="11"
+ v-model="contractUserMblNo"
+ required
+ />
+ <van-button
+ round
+ type="info"
+ class="btn"
+ block="true"
+ color="linear-gradient(to right, #4bb0ff, #6149f6)"
+ @click="goodInstallmentOrder"
+ >创建订单</van-button>
+ <!--点击创建订单展示 弹窗 -->
+ <FConfirmSimple
+ v-model="showConfirm"
+ ref="FConfirmQRCode"
+ @on-hide="handleHide"
+ iconClass="scene_Staging-dingdan"
+ class="hb-order-confirm"
+ :showIcon="true"
+ >
+ <div class="trial-list">
+ <div>还款总额:{{trial.totalAmount}}元</div>
+ <div>每月还款额:{{trial.repayPerMonth}}元</div>
+ <div>费率:{{trial.feeRate}}%</div>
+ </div>
+ <f-button @on-click="createdQRCode">生成二维码</f-button>
+ </FConfirmSimple>
+ </div>
+</template>
+<script>
+import QRCode from "qrcode";
+import FConfirmSimple from "@/components/old/FConfirmSimple.vue";
+import axios from "axios";
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Grid, GridItem } from "vant";
+import { Field } from "vant";
+import { DropdownMenu, DropdownItem } from "vant";
+import { Popup } from "vant";
+import { Picker } from "vant";
+import { Toast } from "vant";
+import { async } from "q";
+
+Vue.use(Toast);
+Vue.use(Picker);
+Vue.use(Popup);
+Vue.use(DropdownMenu).use(DropdownItem);
+Vue.use(Field);
+Vue.use(Grid).use(GridItem);
+Vue.use(NavBar);
+export default {
+ components: {
+ FConfirmSimple
+ },
+ data() {
+ return {
+ showConfirm: false,
+ capitalAmt: "0.00", //商家到账金额
+ monthMoney: "0.00", //客户月还款总额
+ contractGoodsBrand: "", //商品品牌
+ contractGoodsName: "", //商品名称
+ contractUserMblNo: "", //用户手机号
+ contractUserName: "", //用户名称
+ totalAmount: "0.00",
+ orderNo: "", //未知参数
+ term: null, //分期期数
+ userMblNo: "", //用户手机号
+ userName: "", //用户名称
+ trial: {}, // 利率相关信息
+ orderId: "", //订单id
+ typeId: "",
+ payQrCodeUrl: "", // 二维码
+ termList: [], //分期期数列表
+ showConfirm: false,
+ howMouch: "", //商品金额
+ value: "", //期数选择值
+ showPicker: false, //期数选择弹出层控制
+ columns: [] //分期期数列表
+ };
+ },
+ created() {
+ this.$api.shtxOrderInit().then(
+ res => {
+ console.log(res);
+ var arr = res.body.terms;
+ arr.forEach((ele, i) => {
+ this.columns.push(`${ele.code}期`);
+ });
+ console.log(this.columns);
+ },
+ err => err
+ );
+ },
+ methods: {
+ handleHide() {
+ this.showConfirm = false;
+ },
+ //返回上一级按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //弹出层显示
+ showPopup() {
+ this.show = true;
+ },
+ // 弹出层期数选项控制
+ onConfirm(value) {
+ this.value = value;
+ //console.log(value.slice(0, -1));
+ this.showPicker = false;
+ this.term = value.slice(0, -1)
+ //得到月还款额
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: value.slice(0, -1)
+ })
+ .then(res => {
+ console.log(res);
+ this.capitalAmt = res.body.capitalAmt;
+ this.monthMoney = res.body.repayPerMonth;
+ this.totalAmount = res.body.totalAmount;
+ });
+ },
+ changeMoney(){
+ if(this.howMouch != this.totalAmount && this.term!= null && this.howMouch !=''){
+ //得到月还款额
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: this.value.slice(0, -1)
+ })
+ .then(res => {
+ this.capitalAmt = res.body.capitalAmt;
+ this.monthMoney = res.body.repayPerMonth;
+ this.totalAmount = res.body.totalAmount;
+ });
+ } else if(this.howMouch == ''){
+ this.capitalAmt = 0.00;
+ this.monthMoney = 0.00
+ this.totalAmount = 0.00
+ }
+ },
+ //订单生成
+ goodInstallmentOrder() {
+ this.totalAmount = this.howMouch
+ if(this.totalAmount != ''){
+ this.$api
+ .getMonthMoney({
+ totalAmount: this.howMouch,
+ term: this.value.slice(0, -1)
+ })
+ .then(res => {
+ console.log(res);
+ this.capitalAmt = res.body.capitalAmt;
+ this.monthMoney = res.body.repayPerMonth;
+ this.totalAmount = res.body.totalAmount;
+ });
+ }
+ let v = this.$tool;
+ if (v.checkValEmpty(this.totalAmount)) {
+ v.toast("请输入商品金额");
+ return ;
+ }
+ // if (!Number(this.totalAmount)) {
+ // v.toast("请输入正确的结算金额");
+ // return false;
+ // }
+ //临时调整价格
+ if (Number(this.totalAmount) <= 0 ) {
+ v.toast("商品金额不能为0");
+ return false;
+ }
+ let res = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
+ if (v.checkValEmpty(this.contractGoodsName)) {
+ v.toast("请输入商品名称");
+ return ;
+ }
+ if (!res.test(this.contractGoodsName)) {
+ v.toast("请输入文字/字母/数字且不包含特殊字符的商品名称");
+ return ;
+ }
+ if (v.checkValEmpty(this.term)) {
+ v.toast("请输入分期期数");
+ return ;
+ }
+ if (v.checkValEmpty(this.contractUserName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.contractUserMblNo)) {
+ v.toast('请输入用户手机号');
+ return false;
+ }
+ if (!v.checkPhone(this.contractUserMblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ let queryObj = {
+ goodsBrand: this.contractGoodsBrand, //商品品牌
+ goodsName: this.contractGoodsName, //商品名称
+ prodId: 30000010, //产品id
+ term: this.value.slice(0, -1), //分期期数
+ totalAmount: this.totalAmount, //商品总价
+ userMblNo: this.contractUserMblNo, //用户电话号
+ userName: this.contractUserName // 用户名称
+ };
+ this.$api.shtxOrderCreate(queryObj).then(res => {
+ console.log(res);
+ this.orderId = res.body.orderId;
+ this.payQrCodeUrl = res.body.payQrCodeUrl;
+ this.trial.totalAmount = res.body.totalAmount;
+ this.trial.repayPerMonth = res.body.repayPerMonth;
+ this.trial.feeRate = res.body.feeRate;
+ this.showConfirm = true;
+ });
+ },
+ //生成二维码
+ createdQRCode() {
+ this.showConfirm = false;
+ var queryObj = {
+ term: this.value.slice(0, -1), //分期期数
+ payQrCodeUrl: this.payQrCodeUrl, //二维码
+ totalAmount: this.totalAmount //还款总额,本金
+ };
+ if (this.$route.query.typeId) {
+ queryObj.typeId = this.$route.query.typeId;
+ }
+ this.$router.push({
+ path: "/shtx-getShtxQRCode",
+ query: {
+ orderId: this.orderId,
+ ...queryObj
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hb-merchant-installment {
+ & {
+ background-color: #e0e1e6;
+ width: 100%;
+ height: 100vh;
+ }
+ .money-box {
+ & {
+ width: 100%;
+ height: 13vh;
+ background-color: #e0e1e6;
+ display: flex;
+ justify-content: space-between;
+ text-align: center;
+ }
+ .item-box {
+ & {
+ display: flex;
+ flex-wrap: wrap;
+ align-content: center;
+ }
+ .tit {
+ font-size: 14px;
+ font-weight: 700;
+ display: inline-block;
+ vertical-align: middle;
+ width: 100%;
+ }
+ .money {
+ margin: 15px 0 0 0;
+ width: 100%;
+ }
+ }
+ }
+ .ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid #e0e1e6;
+ }
+ }
+ .btn {
+ width: 80vw;
+ height: 6vh;
+ line-height: 6vh;
+ margin: auto;
+ position: fixed;
+ bottom: 3vh;
+ right: 10vw;
+ }
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #f1f1f1;
+ padding-top: 54px;
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/old/store/hbcp.vue b/src/views/old/store/hbcp.vue
new file mode 100644
index 0000000..73be15c
--- /dev/null
+++ b/src/views/old/store/hbcp.vue
@@ -0,0 +1,147 @@
+<template>
+ <div class="hbcp-page">
+ <v-navbar title="花呗分期"></v-navbar>
+ <div class="list-box">
+ <p v-if="list.length > 0">请选择产品</p>
+ <div class="cp-box">
+ <div style="margin-top:16px" v-for="(item,i) in list" :key="i" >
+ <div class="box" @click="go(item)">
+ <img :src="item.icon" alt />
+ <p>{{item.typeName}}</p>
+ </div>
+ </div>
+ </div>
+ <p style="margin-top:40px" v-if="list2.length > 0">请选择消费场景</p>
+ <div class="cp-box-2">
+ <div style="margin-top:16px" v-for="(item,i) in list2" :key="i" >
+ <div class="box" @click="go(item)">
+ <img :src="item.icon" alt />
+ <p>{{item.typeName}}</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ list: [],
+ list2:[],
+ };
+ },
+ created() {
+ JSON.parse(localStorage.hbcp).forEach(e=>{
+ if(e.lineType==1){
+ this.list.push(e)
+ }else{
+ this.list2.push(e)
+ }
+ })
+
+ },
+ methods: {
+ go(item) {
+ console.log(item)
+ // return
+ var path = "",
+ text = "";
+ item.typeId = Number(item.typeId);
+ if (item.isHbProd == 1) {
+ path = "/channel-selection";
+ switch (item.typeId) {
+ case 200002:
+ text = "用户付息通道";
+ break;
+ case 200009:
+ text = "商品消费通道";
+ break;
+ case 200010:
+ text = "商户贴息通道";
+ break;
+ case 200011:
+ text = "运营商消费通道";
+ break;
+ }
+ } else {
+ // switch (item.typeId) {
+ // case 200011:
+ // path = "/xyg/list";
+ // break;
+ // }
+ }
+ this.$router.push({
+ path,
+ query: {
+ typeId: item.typeId,
+ prodId: item.prodId,
+ text: text
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbcp-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f7;
+ }
+ .list-box {
+ width: 94%;
+ min-height: 335px;
+ background: rgba(255, 255, 255, 1);
+ border-radius: 3px;
+ margin-top: 10px;
+ margin-left: 3%;
+ box-sizing: border-box;
+ padding: 24px 13px;
+ & > p {
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ & > .cp-box {
+ display: flex;
+ justify-content: space-around;
+ flex-wrap: wrap;
+ .box {
+ text-align: center;
+ width: 115px;
+ height: 90px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ padding-top: 15px;
+ box-sizing: border-box;
+ }
+ img {
+ width: 46px;
+ height: 46px;
+ }
+ }
+ & > .cp-box-2 {
+ display: flex;
+ justify-content: space-around;
+ flex-wrap: wrap;
+ .box {
+ text-align: center;
+ width: 115px;
+ height: 90px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ padding-top: 15px;
+ box-sizing: border-box;
+ }
+ img {
+ width: 46px;
+ height: 46px;
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/hbcp_sh.vue b/src/views/old/store/hbcp_sh.vue
new file mode 100644
index 0000000..d93a504
--- /dev/null
+++ b/src/views/old/store/hbcp_sh.vue
@@ -0,0 +1,180 @@
+<template>
+ <div class="hbcp-page">
+ <van-nav-bar title="选择通道" left-text="返回" left-arrow @click-left="onClickLeft" fixed style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="list-box">
+ <p v-if="list.length > 0">请选择产品</p>
+ <div class="cp-box">
+ <div style="margin-top:16px" v-for="(item,i) in list" :key="i" >
+ <div class="box" @click="go(item)">
+ <img :src="item.icon" alt />
+ <p>{{item.typeName}}</p>
+ <!-- <p v-if="item.openStatus==2" class="open">已开通</p>
+ <p v-if="item.openStatus==1" class="notOpen">开通中</p>
+ <p v-if="item.openStatus==3" style="color:#ED4014;margin-top: 8px;">未通过</p>
+ <p v-if="item.openStatus==0" style="color:#B3B3B3;margin-top: 8px;">未开通</p> -->
+ </div>
+ </div>
+ </div>
+ <p style="margin-top:40px" v-if="list2.length > 0">请选择消费场景</p>
+ <div class="cp-box-2">
+ <div style="margin-top:16px" v-for="(item,i) in list2" :key="i">
+ <div class="box" @click="go(item)">
+ <img :src="item.icon" alt />
+ <p>{{item.typeName}}</p>
+ <!-- <p v-if="item.openStatus==2 && item.typeId == 200011" class="open">已开通</p>
+ <p v-if="item.openStatus==1 && item.typeId == 200011" class="notOpen">开通中</p>
+ <p v-if="item.openStatus==3 && item.typeId == 200011" style="color:#ED4014;margin-top: 8px;">未通过</p>
+ <p v-if="item.openStatus==0 && item.typeId == 200011" style="color:#B3B3B3;margin-top: 8px;">未开通</p> -->
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ list: [],
+ list2:[],
+ };
+ },
+ created() {
+ let list = JSON.parse(localStorage.getItem('hbcp_sh'))
+ list.forEach(e=>{
+ if(e.lineType==1){
+ this.list.push(e)
+ }else{
+ if(e.prodId != 30000008){
+ this.list2.push(e)
+ }
+ }
+ })
+
+ },
+ methods: {
+ onClickLeft(){
+ this.$router.push('/main/productManagement');
+ },
+ go(item) {
+ console.log(item)
+ // return
+ var path = "",
+ text = "";
+ item.typeId = Number(item.typeId);
+ if (item.isHbProd == 1) {
+ path = "/channel-selection_sh";
+ switch (item.typeId) {
+ case 200002:
+ text = "用户付息通道";
+ break;
+ case 200009:
+ text = "商品消费通道";
+ break;
+ case 200010:
+ text = "商户贴息通道";
+ break;
+ case 200011:
+ text = "运营商消费通道";
+ break;
+ }
+ } else {
+ // switch (item.typeId) {
+ // case 200011:
+ // path = "/xyg/list";
+ // break;
+ // }
+ }
+ this.$router.push({
+ path,
+ query: {
+ typeId: item.typeId,
+ prodId: item.prodId,
+ openStatus: item.openStatus
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbcp-page {
+ & {
+ min-height: 100vh;
+ padding-top: 56px;
+ background: #f5f5f7;
+ }
+ .list-box {
+ width: 94%;
+ min-height: 335px;
+ background: rgba(255, 255, 255, 1);
+ border-radius: 3px;
+ margin-top: 10px;
+ margin-left: 3%;
+ box-sizing: border-box;
+ padding: 24px 23px;
+ & > p {
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ & > .cp-box {
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ .box {
+ text-align: center;
+ width: 140px;
+ height: 100px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ padding-top: 15px;
+ box-sizing: border-box;
+ .open{
+ color:#19BE6B;
+ margin-top: 8px;
+ }
+ .notOpen{
+ color:#ED4014;
+ margin-top: 8px;
+ }
+ }
+ img {
+ width: 46px;
+ height: 46px;
+ }
+ }
+ & > .cp-box-2 {
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ .box {
+ text-align: center;
+ width: 140px;
+ height: 100px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 0px 15px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 8px;
+ padding-top: 15px;
+ box-sizing: border-box;
+ .open{
+ color:#19BE6B;
+ margin-top: 8px;
+ }
+ .notOpen{
+ color:#ED4014;
+ margin-top: 8px;
+ }
+ }
+ img {
+ width: 46px;
+ height: 46px;
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/hbhy-installment.vue b/src/views/old/store/hbhy-installment.vue
new file mode 100644
index 0000000..a59e764
--- /dev/null
+++ b/src/views/old/store/hbhy-installment.vue
@@ -0,0 +1,448 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-18 16:12:03
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:50:51
+ * @Description:
+ -->
+<template>
+ <div class="hbhy-box">
+ <!-- <van-nav-bar title="办理套餐" left-arrow @click-left="onClickLeft" fixed /> -->
+ <!-- <x-header title="办理套餐" :left-options="{backText:''}"></x-header> -->
+ <v-navbar title="办理套餐" fixed>
+
+ </v-navbar>
+ <div class="mine-box">
+ <div class="left-box" ref="boxLeft" >
+ <!-- <div class="top-tit">
+ <p>常用套餐</p>
+ </div>-->
+ <div
+ class="list-tit"
+ v-for="(item,i) in myList"
+ :key="i"
+ @click="check(item,i)"
+ :class="item.baColor"
+ >
+ <div class="text-box" :class="item.checkColor" :style="{'border-left':`4px solid ${$store.state.backColor}`}">
+ <p v-if="i==0" style="line-height:30px;" :style="{color:$store.state.backColor}">常用套餐</p>
+ <p v-if="i!=0" :style="{color:$store.state.backColor}">{{item.categoryName}}</p>
+ </div>
+ </div>
+ </div>
+ <div class="right-box" ref="boxRight">
+ <div class="right-top" v-if="myContent[0].tit==2">
+ <p>{{this.myContent[0].categoryName}}</p>
+ </div>
+ <div class="right-top" v-if="myContent[0].tit==1">
+ <p>常用套餐</p>
+ </div>
+ <div v-for="(v,i) in myContent" :key="i" style="margin-top:20px;width:94%;margin-left:3%" v-if="v.tit==1">
+ <p>{{v.categoryName}}</p>
+ <div
+ class="right-text-box"
+ v-for="(ele,index) in v.contracts"
+ :key="index"
+ @click="goNext(ele,index)"
+ >
+ <div class="yuan" style="width:5%"></div>
+ <div class="taocan">
+ <p>
+ <span class="one">{{ele.packagePrices}}</span>
+ <span class="two">元套餐</span>
+ </p>
+ </div>
+ <div class="bus">
+ <p style="font-size:14px">{{ele.capitalAmt}}</p>
+ <p style="margin-top:5px;color:#999999">商户到账</p>
+ </div>
+ <div class="huankuan" style="margin-right:5px;margin-left:5px;">
+ <p style="font-size:14px">{{ele.monthlyPayments}}</p>
+ <p style="margin-top:5px;color:#999999">每月还款</p>
+ </div>
+ <div class="zong">
+ <p style="font-size:14px">{{ele.insAmt}}</p>
+ <p style="margin-top:5px;color:#999999">总还款额</p>
+ </div>
+ <div class="yuan" style="width:5%"></div>
+ </div>
+ </div>
+
+ <div v-for="(ele,i) in myContent" :key="i" style="margin-top:20px;width:94%;margin-left:3%" v-if="ele.tit==2">
+ <div
+ class="right-text-box"
+ :key="index"
+ @click="goNext(ele,index)"
+ >
+ <div class="yuan" style="width:5%"></div>
+ <div class="taocan">
+ <p>
+ <span class="one">{{ele.packagePrices}}</span>
+ <span class="two">元套餐</span>
+ </p>
+ </div>
+ <div class="bus">
+ <p style="font-size:14px">{{ele.capitalAmt}}</p>
+ <p style="margin-top:5px;color:#999999">商户到账</p>
+ </div>
+ <div class="huankuan" style="margin-right:5px;margin-left:5px;">
+ <p style="font-size:14px">{{ele.monthlyPayments}}</p>
+ <p style="margin-top:5px;color:#999999">每月还款</p>
+ </div>
+ <div class="zong">
+ <p style="font-size:14px">{{ele.insAmt}}</p>
+ <p style="margin-top:5px;color:#999999">总还款额</p>
+ </div>
+ <div class="yuan" style="width:5%"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ myList: [
+ {
+ tit: "常用套餐",
+ checkColor: { checkColor: true },
+ baColor: { baColor: true }
+ }
+ ], //左侧导航显示内容
+ myContent: [
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "98",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "198",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "298",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ },
+ {
+ taocan: "398",
+ bus: "785",
+ huankuan: "64",
+ zong: "1264"
+ }
+ ], //右侧显示套餐内容
+ content: [], //暂存数据
+ typeId:'',
+ };
+ },
+ mounted() {
+ //console.log(this.$route.query)
+ //获取设备高度减去头部高度,防止高度溢出
+ this.$refs.boxLeft.style.height = `${document.body.clientHeight - 46}px`;
+ this.$refs.boxRight.style.height = `${document.body.clientHeight - 46}px`;
+ this.typeId = this.$route.query.typeId
+ this.$api
+ .categoryList({
+ typeId: this.$route.query.typeId
+ })
+ .then(res => {
+ console.log(res);
+ res.body.categoryList.forEach((ele, i) => {
+ ele.checkColor = { checkColor: false };
+ ele.baColor = { baColor: false };
+ });
+ //console.log(res.body.categoryList)
+ if(res.body.commonUse.length > 0){
+ res.body.commonUse.forEach((ele, i) => {
+ ele.checkColor = { checkColor: true };
+ ele.baColor = { baColor: true };
+ ele.tit = 1;
+ });
+ this.myList = [res.body.commonUse[0], ...res.body.categoryList];
+ }
+ if(res.body.commonUse.length <= 0){
+ var arr = res.body.commonUse.push({
+ checkColor : { checkColor: true },
+ baColor : { baColor: true },
+ tit : 1
+ })
+ console.log('arr',arr)
+ this.myList = [...res.body.commonUse, ...res.body.categoryList];
+ }
+
+ this.myContent = [...res.body.commonUse];
+ this.content = res.body.commonUse;
+ console.log(this.myContent)
+ });
+ },
+ computed: {
+ getContent(){
+
+ },
+ },
+ updated() {
+ console.log("修改了");
+ window.onresize;
+ },
+ methods: {
+ //路由回退
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //左侧点击选中样式改变
+ check(item, i) {
+ console.log('item',item)
+ this.myList.forEach((ele, i) => {
+ ele.checkColor.checkColor = false;
+ ele.baColor.baColor = false;
+ });
+ item.checkColor.checkColor = true;
+ item.baColor.baColor = true;
+
+ if (i > 0) {
+ //console.log(1);
+ item.contracts.forEach((ele)=>{
+ ele.tit = 2
+ })
+ this.myContent = item.contracts;
+ } else {
+ //console.log(2);
+ item.tit = 1
+ this.myContent = this.content;
+ }
+ console.log("content", this.myContent);
+ },
+ //跳转办单页面
+ goNext(ele, index) {
+ console.log(ele)
+ this.$router.push({
+ path: "/hbhy-detail",
+ query: {
+ packageTariff:ele.packagePrices,
+ totalRepayment:ele.insAmt,
+ monthlyRepayment:ele.monthlyPayments,
+ trim:ele.term,
+ merchantArrival:ele.capitalAmt,
+ contId:ele.contId,
+ contName:ele.contName,
+ typeId:this.$route.query.typeId,
+ zfbVersion:this.$route.query.zfbVersion,
+ zfbRate:ele.zfbRate,
+ platRate:ele.platRate
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbhy-box {
+ & {
+ height: 100vh;
+ background-color: #f5f5f5;
+ }
+ .mine-box {
+ display: flex;
+ width: 100%;
+ .left-box::-webkit-scrollbar {
+ display: none;
+ }
+ .left-box {
+ margin-top: 46px;
+ overflow-y: scroll;
+ width: 23%;
+ background-color: white;
+ .top-tit,
+ .list-tit {
+ border-bottom: 1px rgb(226, 226, 226) solid;
+ height: 60px;
+ box-sizing: border-box;
+ }
+ .top-tit {
+ padding: 25px 12px 24px 12px;
+ p {
+ color: #666666;
+ width: 100%;
+ text-align: center;
+ }
+ }
+ .baColor {
+ background-color: #f5f5f7;
+ }
+ .list-tit {
+ padding-top: 14px;
+ .checkColor {
+ border-left: 4px solid #896edb;
+ color: #896edb !important;
+ }
+
+ .text-box {
+ height: 30px;
+ color: #666666;
+ font-weight: Medium;
+ p {
+ display: block;
+ height: 30px;
+ width: 70%;
+ margin: auto auto;
+ word-break: break-all;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ }
+ }
+ }
+ }
+ .right-box::-webkit-scrollbar {
+ display: none;
+ }
+ .right-box {
+ margin-top: 46px;
+ box-sizing: border-box;
+ padding-top: 15px;
+ width: 77%;
+ overflow-y: scroll;
+ background-color: #f5f5f7;
+ .right-top {
+ background-color: rgba(237, 237, 247, 1);
+ border: 1px dashed rgba(174, 172, 187, 1);
+ border-radius: 4px;
+ text-align: center;
+ width: 94%;
+ height: 36px;
+ margin: auto;
+ p {
+ font-size: 14px;
+ color: #423d5d;
+ line-height: 36px;
+ }
+ }
+ .right-text-box::after {
+ width: 16px;
+ height: 16px;
+ content: "";
+ right: -12px;
+ top: 24px;
+ position: absolute;
+ display: block;
+ background: #f5f5f5;
+ border-radius: 20px;
+ border-left: 1px solid #c3b5ec;
+ }
+ .right-text-box::before {
+ width: 16px;
+ height: 16px;
+ content: "";
+ left: -12px;
+ top: 24px;
+ position: absolute;
+ display: block;
+ background: #f5f5f5;
+ border-radius: 20px;
+ border-right: 1px solid #c3b5ec;
+ }
+ .right-text-box {
+ & {
+ display: flex;
+ width: 100%;
+ height: 62px;
+ margin: auto;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(195, 181, 236, 1);
+ border-radius: 5px;
+ position: relative;
+ }
+ .taocan {
+ width: 38%;
+ .one {
+ font-size: 14px;
+ color: #ff6666;
+ font-weight: bold;
+ }
+ .two {
+ font-size: 14px;
+ }
+ p {
+ display: inline-block;
+ height: 20px;
+ width: 92%;
+ margin-top: 24px;
+ border-right: 1px solid black;
+ box-sizing: border-box;
+ }
+ }
+ .bus,
+ .huankuan,
+ .zong {
+ width: 25%;
+ font-size: 12px;
+ text-align: center;
+ margin-top: 16px;
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/hbjl/creat-hbjl.vue b/src/views/old/store/hbjl/creat-hbjl.vue
new file mode 100644
index 0000000..1157d3a
--- /dev/null
+++ b/src/views/old/store/hbjl/creat-hbjl.vue
@@ -0,0 +1,191 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-08 10:25:54
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-13 19:04:28
+ * @Description: 花呗间联办单
+-->
+<template>
+ <div class="creat-hbjl-page">
+ <v-navbar title="创建订单"></v-navbar>
+ <div class="order-info-box">
+ <van-field center clearable label="还款期数">
+ <template #button>
+ <div>
+ <button
+ v-for="(item,index) in btnList"
+ :key="index"
+ style="margin:0 5px"
+ :class="isAct==index?'act':'noAct'"
+ @click="getTerm(item,index)"
+ >{{item.name}}期</button>
+ </div>
+ </template>
+ </van-field>
+ <van-field v-model="form.userAmt" label="到账金额" placeholder="请输入到账金额" @input="getTrial(1)" input-align="right" />
+ <van-field v-model="form.insAmt" label="还款金额" placeholder="请输入还款金额" @input="getTrial(2)" input-align="right" />
+ </div>
+ <div class="btn-box">
+ <button class="btn" @click="goNext">生成二维码</button>
+ <p>
+ <span>推广码:{{inviteCode}}</span>
+ <button class="small-btn" @click="copy">复制</button>
+ </p>
+ </div>
+ <van-dialog v-model="show" title="提示" confirmButtonColor="#423D5D" @confirm="onConfirm" show-cancel-button>
+ <div class="tip-box">
+ <p>由于相关政策及对应计算</p>
+ <p>还款金额发送变动</p>
+ <p>当前还款金额为:{{form.insAmt}}元</p>
+ </div>
+ </van-dialog>
+ </div>
+</template>
+<script>
+import {_copyToClipboard} from '@/utils/index';
+import Vue from "vue";
+import { Field } from "vant";
+import { Dialog } from "vant";
+
+Vue.use(Dialog);
+Vue.use(Field);
+export default {
+ data() {
+ return {
+ form: {
+ insAmt: "",
+ userAmt: "",
+ term: ''
+ },
+ show:false,
+ isAct: 0,
+ btnList: [],
+ inviteCode:'',
+ mgrId:''
+ };
+ },
+ created() {
+ this.$api.hbjlOrderInit().then(res => {
+ this.btnList = res.body.terms;
+ this.inviteCode = res.body.inviteCode
+ this.mgrId = res.body.mgrId
+ this.form.term = res.body.terms[0].code
+ });
+ },
+ methods: {
+ getTrial(i) {
+ if(i==1){
+ this.$api.hbjlOrderTrial({
+ insAmt:'',
+ userAmt:this.form.userAmt,
+ term:this.form.term
+ }).then(res=>{
+ this.form.insAmt = res.body.insAmt
+ this.form.userAmt = res.body.userAmt
+ })
+ }
+ if(i==2){
+ this.$api.hbjlOrderTrial({
+ insAmt:this.form.insAmt,
+ userAmt:'',
+ term:this.form.term
+ }).then(res=>{
+ this.form.insAmt = res.body.insAmt
+ this.form.userAmt = res.body.userAmt
+ })
+ }
+ },
+ // 期数选择
+ getTerm(item, index) {
+ this.isAct = index;
+ this.form.term = item.code;
+ },
+ goNext() {
+ this.show = true
+
+ },
+ onConfirm(){
+ this.$router.push({
+ path:'/hbjl-qr',
+ query:{
+ ...this.form,
+ inviteCode:this.inviteCode,
+ mgrId:this.mgrId,
+ }
+ })
+ },
+ copy() {
+ _copyToClipboard(this.inviteCode);
+ this.$notify_success('复制成功');
+ },
+ }
+};
+</script>
+<style lang="less" scoped>
+.creat-hbjl-page {
+ & {
+ min-height: 100vh;
+ background: #efefef;
+ }
+ .order-info-box {
+ & {
+ background: #fff;
+ border-radius: 3px;
+ width: 359px;
+ min-height: 150px;
+ margin: 10px auto;
+ }
+ button {
+ width: 50px;
+ height: 28px;
+ outline: none;
+ border-radius: 3px;
+ }
+ .act {
+ background: rgba(244, 241, 255, 1);
+ border: 1px solid rgba(137, 110, 219, 1);
+ color: #896edb;
+ }
+ .noAct {
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(230, 230, 230, 1);
+ }
+ }
+ .btn-box {
+ & {
+ text-align: center;
+ margin-top: 60px;
+ }
+ .btn {
+ width: 320px;
+ height: 44px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ border: 0;
+ outline: none;
+ color: #fff;
+ }
+ p{
+ margin-top: 24px;
+ .small-btn{
+ width:60px;
+ height:20px;
+ background:rgba(244,241,255,1);
+ border:1px solid rgba(137,110,219,1);
+ border-radius:3px;
+ font-size: 12px;
+ color: #896EDB;
+ }
+ }
+ }
+ .tip-box{
+ font-size:14px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(102,102,102,1);
+ line-height:20px;
+ text-align: center;
+ padding: 24px 0;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/hbjl/hbjl-qr.vue b/src/views/old/store/hbjl/hbjl-qr.vue
new file mode 100644
index 0000000..ecfd5f3
--- /dev/null
+++ b/src/views/old/store/hbjl/hbjl-qr.vue
@@ -0,0 +1,117 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-08 11:13:16
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-13 19:15:35
+ * @Description: 花呗间联二维码页面
+-->
+<template>
+ <div class="hbjl-qr-vue">
+ <v-navbar title="生成订单"></v-navbar>
+ <div class="top-back-box">
+ <div class="back-line-box"></div>
+ <div class="qr-box">
+ <div class="code-box">
+ <img :src="qrCode" alt />
+ </div>
+ <div class="tip-box">
+ <p>二维码失效时间为半小时</p>
+ <p>请尽快提供给用户完成扫码</p>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import QRCode from 'qrcode';
+export default {
+ data() {
+ return {
+ qrCode:'',
+ params:{}
+ }
+ },
+ created(){
+ //创建二维码
+ this.params = { ...this.$route.query };
+ let url = JSON.stringify(this.params)
+ //let url = `{'insAmt':'${this.params.insAmt}','userAmt':'${this.params.userAmt}','term':'${this.params.term}','inviteCode':'${this.params.inviteCode}','mgrId':'${this.params.mgrId}'}`;
+ QRCode.toDataURL(
+ url,
+ {
+ margin: 1,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.qrCode = url;
+ }
+ );
+ },
+};
+</script>
+<style lang="less" scoped>
+.hbjl-qr-vue {
+ & {
+ min-height: 100vh;
+ background: #efefef;
+ position: relative;
+ }
+ .top-back-box {
+ width: 100%;
+ height: 117px;
+ background: url("../../../../assets/img/bg_top.png");
+ background-size: cover;
+ display: flex;
+ justify-content: center;
+ flex-wrap: wrap;
+ // align-items: center;
+ .back-line-box {
+ width: 335px;
+ height: 14px;
+ background: rgba(56, 50, 87, 1);
+ border-radius: 7px;
+ margin-top: 49px;
+ }
+ .qr-box {
+ & {
+ width: 300px;
+ height: 300px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 0px 12px 15px 0px rgba(63, 58, 80, 0.05);
+ border-radius: 0px 0px 5px 5px;
+ margin-top: -7px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ }
+ .code-box {
+ & {
+ width: 200px;
+ height: 200px;
+ background: url("../../../../assets/img/bg_code.png");
+ margin-top: 36px;
+ box-sizing: border-box;
+ padding: 8px;
+ }
+ img {
+ width: 184px;
+ height: 184px;
+ }
+ }
+ .tip-box {
+ & {
+ text-align: center;
+ width: 100%;
+ }
+ p {
+ font-size: 12px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/lthyj.vue b/src/views/old/store/lthyj.vue
new file mode 100644
index 0000000..bc9c972
--- /dev/null
+++ b/src/views/old/store/lthyj.vue
@@ -0,0 +1,188 @@
+
+<template>
+ <div class="lthyj">
+ <v-navbar title="办理合约"></v-navbar>
+ <div class="info">
+ <div class="hyInfo">
+ <div class="title">合约信息</div>
+ <van-field readonly clickable
+ label="合约套餐"
+ :value="selectConInfo.contName"
+ placeholder="选择合约套餐"
+ @click="showPicker = true"
+ />
+ <van-cell title="月缴话费" :value="selectConInfo.monthConsAmt | dealMoney" />
+ <van-cell title="期数" :value="selectConInfo.term | dealTerm" />
+ <van-cell title="电子券金额" :value="selectConInfo.eleBondAmt | dealMoney" />
+ <van-cell title="直降金额" :value="selectConInfo.strDownAmt | dealMoney" />
+ </div>
+ <div class="spInfo">
+ <div class="title">商品信息</div>
+ <van-cell-group>
+ <van-field v-model.trim="goodsInfo.goodsBrand" label="品牌" placeholder="请输入品牌" />
+ <van-field v-model.trim="goodsInfo.goodsModel" label="规格" placeholder="请输入规格" />
+ <van-field v-model.trim="goodsInfo.goodsPrice" label="价格" placeholder="请输入价格" />
+ </van-cell-group>
+ </div>
+ </div>
+ <van-button round type="info" color="#896EDB" class="btn" @click='createdQRCode'>生成二维码</van-button>
+ <van-popup v-model="showPicker" round position="bottom">
+ <van-picker
+ show-toolbar
+ :columns="columns"
+ @cancel="showPicker = false"
+ @confirm="onConfirm"
+ />
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+ export default {
+ name: 'lthyj',
+ data() {
+ return {
+ columns: [],
+ tcInfoList: [],
+ showPicker: false,
+ // 合约信息
+ selectConInfo: {
+ contId: '',
+ eleBondAmt: '',
+ monthConsAmt: '',
+ strDownAmt: '',
+ contName: '',
+ term: ''
+ },
+ // 商品信息
+ goodsInfo: {
+ goodsBrand: '', //商品品牌
+ goodsModel: '', // 商品型号
+ goodsPrice: '' // 价格
+ },
+ };
+ },
+ filters: {
+ dealMoney(val) {
+ return val ? `${val}元` : ''
+ },
+ dealTerm(val) {
+ return val ? `${val}期` : ''
+ }
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ this.$api.cuccOrderInit().then(res => {
+ this.tcInfoList = res.body
+ this.columns = res.body.map(it => {
+ return it.contName
+ })
+ });
+ },
+ onConfirm(picker, value) {
+ console.log(picker, value)
+ this.selectConInfo.contId = this.tcInfoList[value].contId
+ this.selectConInfo.eleBondAmt = this.tcInfoList[value].eleBondAmt
+ this.selectConInfo.monthConsAmt = this.tcInfoList[value].monthConsAmt
+ this.selectConInfo.strDownAmt = this.tcInfoList[value].strDownAmt
+ this.selectConInfo.contName = this.tcInfoList[value].contName
+ this.selectConInfo.term = this.tcInfoList[value].term
+
+ this.showPicker = false;
+ },
+ // 生成二维码
+ createdQRCode() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.selectConInfo.contName)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品品牌');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsModel)) {
+ v.toast('请输入商品规格');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品价格');
+ return false;
+ }
+ if (!/^[1-9]\d{0,4}/.test(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品正确的价格');
+ return false;
+ }
+ let queryObj = {
+ ...this.goodsInfo,
+ contId: this.selectConInfo.contId, // 合约id
+ };
+ this.$api.cuccOrderPreCreate(queryObj).then(res => {
+ console.log(res)
+ this.$router.push({
+ path: "/lthyj-qrcode",
+ query: {
+ str: res.body
+ }
+ })
+ });
+
+ },
+ }
+ };
+
+</script>
+
+
+<style lang='less' scoped>
+ .lthyj {
+ width: 100%;
+ height: 100%;
+ background: #F3F4F5;
+ .van-cell {
+ height: 50px;
+ }
+ .info {
+ padding: 0 16px;
+ .hyInfo, .spInfo {
+ width: 100%;
+ background: #fff;
+ border-radius: 6px;
+ // padding: 0 12px;
+ margin-top: 10px;
+ box-sizing: border-box;
+ .title {
+ padding-left: 12px;
+ height: 50px;
+ line-height: 50px;
+ font-size: 16px;
+ font-family: PingFang SC;
+ font-weight: bold;
+ color: #423D5D;
+ border-bottom: 1px solid #E9E9E9;
+ }
+ }
+ }
+ .btn {
+ margin: 40px 0 20px 10% ;
+ width: 80%;
+ }
+ }
+
+</style>
+<style scoped>
+ .spInfo >>> .van-field__control {
+ text-align: right;
+ }
+ .hyInfo >>> .van-field__control {
+ text-align: right;
+ }
+</style>
diff --git a/src/views/old/store/lthyjQrcode.vue b/src/views/old/store/lthyjQrcode.vue
new file mode 100644
index 0000000..51ac7f8
--- /dev/null
+++ b/src/views/old/store/lthyjQrcode.vue
@@ -0,0 +1,105 @@
+
+<template>
+ <div class="lthyjQrcode">
+ <v-navbar title="扫码办理"></v-navbar>
+ <div class="bj">
+ <div class="qrcodeBox">
+ <div class="qrcode">
+ <img :src="qrCodeBase64Url" alt="qrcode" v-if="qrCodeBase64Url">
+ <img :src="dataUrl" alt="" v-else >
+ </div>
+ <p class="notice">二维码失效时间为半小时请尽快提供给用户进行扫码</p>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+ import html2canvas from 'html2canvas';
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'contract-qrcode',
+ data() {
+ return {
+ dataUrl: '',
+ qrCodeBase64Url: '',
+ params: ''
+ }
+ },
+ methods: {
+ clickLeft() {
+ this.$router.go(-1)
+ }
+ },
+ created(){
+ QRCode.toDataURL(
+ JSON.stringify(this.$route.query.str), {
+ margin: 0,
+ width: 400
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ this.dataUrl = url;
+ setTimeout(() => {
+ html2canvas(document.getElementById('QRCode')).then(
+ canvas => {
+ this.qrCodeBase64Url = canvas.toDataURL(
+ 'image/jpeg'
+ );
+ }
+ );
+ }, 100);
+ }
+ );
+ }
+ }
+
+</script>
+<style lang="less" scoped>
+ .lthyjQrcode {
+ width: 100%;
+ height: 100%;
+ background: #F3F4F5;
+ .bj {
+ width: 100%;
+ height: 150px;
+ background: linear-gradient(-45deg, #686285, #4C4571);
+ position: relative;
+ .qrcodeBox {
+ position: absolute;
+ top: 40px;
+ left: 5.5%;
+ width: 89%;
+ height: 287px;
+ background: #FFFFFF;
+ border-radius: 3px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ .qrcode {
+ width: 190px;
+ height: 190px;
+ border: 1px solid #514B75;
+ margin-top: 28px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ img {
+ width: 182px;
+ height: 182px;
+ }
+ }
+ .notice {
+ font-size: 12px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: #333333;
+ line-height: 18px;
+ text-align: center;
+ margin-top: 16px;
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/mobile/mobileInstallment.vue b/src/views/old/store/mobile/mobileInstallment.vue
new file mode 100644
index 0000000..4d691f4
--- /dev/null
+++ b/src/views/old/store/mobile/mobileInstallment.vue
@@ -0,0 +1,279 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 14:24:40
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-05 11:22:31
+ * @Description:
+ -->
+/*
+* @Author: c.y
+* @Date: 2019-1-14 16:02:10
+ * @Last Modified by: CL
+ * @Last Modified time: 2019-01-30 11:53:21
+* @文件说明: 手机分期创建订单
+*/
+<template>
+ <div class="mobile-installment h-100-g">
+ <x-header title="办理分期" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-input title='客户手机号' v-model.trim="mobileInfo.userMblNo"
+ type="tel"
+ :max='11'
+ placeholder="请输入" text-align='right'></x-input>
+ <x-input title='客户姓名' v-model.trim="mobileInfo.userName" placeholder='请输入' :max='6'
+ text-align='right'></x-input>
+ <x-input title='身份证' v-model.trim="mobileInfo.idNo" placeholder='请输入' :max='18'
+ text-align='right'></x-input>
+ <selector title='手机品牌' placeholder='请选择' @on-change='other' v-model="mobileInfo.mblBrand" :options='mobileBrandList'
+ :value-map="['code','name']"
+ direction='rtl'></selector>
+ <x-input v-if="others" title='品牌名称' v-model.trim="mobileInfo.mblBrand1" placeholder='请输入' :max='10' text-align='right'></x-input>
+
+ <selector title='分期期数' placeholder='请选择' v-model="mobileInfo.term" :options='termList'
+ :value-map="['code','name']"
+ direction='rtl'></selector>
+ <x-input title='手机型号' v-model.trim="mobileInfo.mblModel" placeholder='请输入' :max='15'
+ text-align='right'></x-input>
+ <x-input title='IMEI' v-model.trim="mobileInfo.mblImei" placeholder='请输入' :max='20'
+ text-align='right'></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <x-input title='手机价格(元)' @input.native='blurToCalc'
+ v-model.trim.number="mobileInfo.mblAmt"
+ placeholder='最高12000元' :max='5'
+ text-align='right'></x-input>
+ <div class="vux-1px-t" v-if="mobileInfo.mblAmt">
+ <p><span>首付比例:</span>{{ firstRate }}%</p>
+ <p><span>门店收取首付:</span>{{ firstAmt }}元</p>
+ <p><span>客户分期金额:</span>{{insAmt }}元</p>
+ <p><span>每期还款金额:</span>{{ termAmt }}元</p>
+ </div>
+ </group>
+ <f-button fixed @on-click='handleCreateOrder'>提交订单</f-button>
+ </div>
+</template>
+
+<script>
+ import { Cell} from 'vux';
+ export default {
+ name: 'mobile-installment',
+ components: {
+ Cell
+ },
+ data() {
+ return {
+ mobileInfo: {
+ mblBrand: '', // 手机牌子
+ mblModel: '', // 型号
+ userMblNo: '', // 客户手机号
+ userName: '', // 客户姓名
+ idNo: '', // 客户身份证号---暂时添加
+ mblImei: '', // imei
+ mblAmt: '', // 手机价格
+ term:'',// 分期期数
+ mblBrand1:''
+ },
+ firstRate: '-', // 首付比例
+ firstAmt: '-', // 首付
+ insAmt: '-', // 分期金额
+ termAmt: '-', // 每期还款金额
+ mobileBrandList: [], // 手机品牌列表
+ termList: [], // 分期期数
+ others:false
+ };
+ },
+ methods: {
+ other(val){
+ if(this.mobileInfo.mblBrand == '其它'){
+ this.others = true
+ }else{
+ this.others = false;
+ }
+ },
+ //失去焦点时计算金额
+ blurToCalc(ele) {
+ let v = this.$tool;
+ if (!/^[1-9]\d{0,4}$/.test(ele.target.value)) {
+ this.firstRate = '';
+ this.firstAmt = '';
+ this.insAmt = '';
+ this.termAmt = '';
+ this.mobileInfo.mblAmt = '';
+ v.toast('请输入正确的手机价格');
+ return false;
+ } else if (Number(ele.target.value) > 12000) {
+ this.firstRate = '';
+ this.firstAmt = '';
+ this.insAmt = '';
+ this.termAmt = '';
+ this.mobileInfo.mblAmt = '';
+ v.toast('请输入12000以下价格');
+ return false;
+ }
+ if(ele.target.value){
+ this.firstRate = '-'; // 首付比例
+ this.firstAmt = '-'; // 首付
+ this.insAmt = '-'; // 分期金额
+ this.termAmt= '-'; // 每期还款金额
+ this.$api.ljOrderTrial({mblAmt: ele.target.value}).then(
+ res=>{
+ this.firstRate = res.body.firstRate;
+ this.firstAmt = this.$tool.formatMoney(res.body.firstAmt);
+ this.insAmt = this.$tool.formatMoney(res.body.insAmt);
+ this.termAmt = this.$tool.formatMoney(res.body.termAmt);
+ }, err => {
+ this.firstRate = '-'; // 首付比例
+ this.firstAmt = '-'; // 首付
+ this.insAmt = '-'; // 分期金额
+ this.termAmt= '-'; // 每期还款金额
+ }
+ )
+ }
+ },
+ // 生成订单
+ handleCreateOrder() {
+ let v = this.$tool;
+ let fieldList = [{
+ field: 'userMblNo',
+ msg: '客户手机号'
+ },
+ {
+ field: 'userName',
+ msg: '客户姓名'
+ },
+ {
+ field: 'idNo',
+ msg: '身份证'
+ },
+ {
+ field: 'mblBrand',
+ msg: '手机品牌'
+ },
+ {
+ field: 'term',
+ msg: '分期期数'
+ },
+ {
+ field: 'mblModel',
+ msg: '手机型号'
+ },
+ {
+ field: 'mblImei',
+ msg: '手机IMEI'
+ },
+ {
+ field: 'mblAmt',
+ msg: '手机价格'
+ }];
+ for (let i of fieldList) {
+ if (v.checkValEmpty(this.mobileInfo[i.field])) {
+ v.toast(`请输入${i.msg}`);
+ return false;
+ }
+ }
+ // 添加身份证号的验证 客户年龄需要20-25岁
+ let reg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
+ if (!reg.test(this.mobileInfo.idNo)) {
+ v.toast('请输入正确的身份证号');
+ return false;
+ }
+ if(!this.checkAgeRange(this.mobileInfo.idNo)) {
+ v.toast('客户年龄需在20-55周岁之间');
+ return false;
+ }
+
+ if(this.mobileInfo.mblBrand=='其它'){
+ if (v.checkValEmpty(this.mobileInfo.mblBrand1)) {
+ v.toast(`请输入品牌名称`);
+ return false;
+ }
+ }
+ if (!v.checkPhone(this.mobileInfo.userMblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ if (!/^[1-9]\d{0,4}$/.test(this.mobileInfo.mblAmt)) {
+ v.toast('请输入正确的手机价格');
+ return false;
+ }
+ let obj = {...this.mobileInfo};
+ if(obj.mblBrand =='其它'){
+ obj.mblBrand = obj.mblBrand1
+ }
+ this.$api.ljOrderCreate(obj).then(
+ res => {
+ obj.crt = res.body.creTime;
+ obj.firstAmt = res.body.firstAmt;
+ obj.surplusAmt = res.body.surplusAmt;
+ this.$router.push({
+ path: "/mobile-submit-result",
+ query:{...obj}
+ })
+ },
+ err => err
+ );
+ },
+ // 判断客户年龄是否在20-50周岁
+ checkAgeRange (idNumber) {
+ if (idNumber.length !== 18) {
+ this.$tool.toast('请输入正确的身份证号');
+ return false;
+ }
+ // 获取当前系统时间
+ const curDate = new Date();
+ const curYear = curDate.getFullYear();
+ const curMonth = curDate.getMonth() + 1;
+ const curDay = curDate.getDate();
+ // 获取客户出生年月
+ const cusYear = Number(idNumber.substring(6, 10));
+ const cusMonth = Number(idNumber.substring(10, 12));
+ const cusDay = Number(idNumber.substring(12, 14));
+ // 周岁=今年-出生年(已过生日)(未过生日还要-1),判断当前是否在20-55周岁之间
+ // 判断是否过生日, 先判断月,当前月小于用户生日月,那么就未过生日
+ if (curMonth < cusMonth) {
+ return curYear - cusYear - 1 >= 20 && curYear - cusYear - 1 <= 55;
+ // 如果月份相同,那么需要判断日期
+ } else if (curMonth === cusMonth) {
+ // 当前日期小于客户生日日期,还未过生日
+ if (curDay < cusDay) {
+ return curYear - cusYear - 1 >= 20 && curYear - cusYear - 1 <= 55;
+ } else {
+ // 当前日期大于等于生日日期,以过生日
+ return curYear - cusYear >= 20 && curYear - cusYear <= 55;
+ }
+ // 已过生日
+ } else {
+ return curYear - cusYear >= 20 && curYear - cusYear <= 55;
+ }
+ }
+ },
+ created() {
+ this.$api.ljOrderCreateInit().then(res => {
+ this.mobileBrandList = res.body.mblBrandList;
+ this.termList = res.body.termList;
+ this.mobileInfo.term =res.body.termList[0].code
+ }, err => err);
+ },
+ };
+</script>
+<style lang='less'>
+ .mobile-installment {
+ padding-bottom: 46px;
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .vux-1px-t {
+ padding-left: 15px;
+ padding-bottom: 16px;
+ color: #3a3a3a;
+ span {
+ color: #666666;
+ }
+ font-size: 12px;
+ line-height: 1.2;
+ p {
+ padding-top: 16px;
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/mobile/submitResult.vue b/src/views/old/store/mobile/submitResult.vue
new file mode 100644
index 0000000..8e4b5e8
--- /dev/null
+++ b/src/views/old/store/mobile/submitResult.vue
@@ -0,0 +1,98 @@
+<!--
+ * @Date: 2019-08-30 14:24:41
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 11:04:01
+ * @Description:
+ -->
+<template>
+ <div class="mobile-result-page h-100-g">
+ <x-header title="提交结果" :left-options="{backText:''}"></x-header>
+ <div class="status-icon">
+ <i class="iconfont scene_Staging-danxuan"></i>
+ </div>
+ <div class="result">提交成功</div>
+ <div class="tips">客户订单已生成,有效期2小时,请指导客户通过以下手机号登录APP补充资料进行审核</div>
+ <div class="detail">
+ <p><span>品牌:</span>{{info.mblBrand}}</p>
+ <p><span>型号:</span>{{info.mblModel}}</p>
+ <p><span>姓名:</span>{{info.userName}}</p>
+ <p><span>手机号码:</span>{{info.userMblNo}}</p>
+ <p><span>手机价格:</span>{{info.mblAmt}}元</p>
+ <p><span>分期金额:</span>{{info.surplusAmt}}元</p>
+ <p><span>分期期数:</span>{{info.term}}</p>
+ <p><span>订单时间:</span>{{$tool.date(info.crt,'YYYY-MM-DD HH:mm')}}</p>
+ </div>
+ <f-button type="normal" @on-click="handleBack">返回首页</f-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'add-account',
+ data() {
+ return {
+ info:{}
+ };
+ },
+ methods: {
+ // 处理返回首页
+ handleBack () {
+ this.$router.push({
+ path:'/business-center'
+ })
+ },
+ // 根据orderId获取详情
+ init () {
+
+ }
+ },
+ computed:{
+ info(){
+ let obj ={
+ ...this.$route.query
+ }
+ return obj;
+ }
+ }
+ };
+</script>
+
+<style lang="less">
+ .mobile-result-page {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ .status-icon {
+ text-align: center;
+ }
+ .iconfont {
+ font-size: 64px;
+ color: #BFA073;
+ }
+ .result {
+ font-size: 16px;
+ color: #BFA073;
+ text-align: center;
+ }
+ .tips {
+ padding: 10px 25px 25px;
+ color: #999;
+ font-size: 12px;
+ line-height: 1.6;
+ text-align: center;
+ }
+ .detail {
+ margin: 0 25px;
+ padding: 30px 0 20px 25px;
+ font-size: 14px;
+ line-height: 1.6;
+ color: #3A3A3A;
+ span {
+ color: #A3A3A3;
+ }
+ p {
+ padding-bottom: 10px;
+ }
+ background: #fff;
+ }
+ }
+</style>
diff --git a/src/views/old/store/pay-result.vue b/src/views/old/store/pay-result.vue
new file mode 100644
index 0000000..ec8a86e
--- /dev/null
+++ b/src/views/old/store/pay-result.vue
@@ -0,0 +1,154 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-07-08 16:47:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-09 13:59:25
+ * @Description:
+-->
+<template>
+ <div class="pay-result-page">
+ <v-navbar title="交易结果"></v-navbar>
+ <div class="res-box">
+ <div class="img-box">
+ <img v-if="orderStatus==0" src="../../../../static/img/ing.png" alt />
+ <img v-if="orderStatus==1" src="../../../../static/img/cg.png" alt />
+ <img v-if="orderStatus==2" src="../../../../static/img/cs.png" alt />
+ <img v-if="orderStatus==3" src="../../../../static/img/cs.png" alt />
+ <p>{{text}}</p>
+ </div>
+ </div>
+ <div class="btn-box">
+ <button class="btn-1" @click="goHome">返回首页</button>
+ <button class="btn-2" v-if="orderStatus==0" @click="goDetail">查看订单详情</button>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ timer: "", //定时器
+ text: "支付中,请稍候",
+ orderStatus: 0
+ };
+ },
+ computed: {
+ orderId() {
+ return this.$route.query.orderId;
+ }
+ },
+ created() {
+ this.orderSts();
+ },
+ methods: {
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.hbOrderFindOrderSts({ orderId: this.orderId }).then(
+ res => {
+ this.orderStatus = res.body.orderStatus;
+ if (res.body.orderStatus == 1) {
+ clearInterval(this.timer);
+ this.text = "支付成功";
+ } else if (res.body.orderStatus == 2) {
+ clearInterval(this.timer);
+ this.text = "支付超时";
+ } else if (res.body.orderStatus == 3) {
+ clearInterval(this.timer);
+ this.text = "支付失败";
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 10000);
+ },
+ goHome(){
+ this.$router.push('/main/product')
+ },
+ goDetail(){
+ if(this.$route.query.mode == 'hb'){
+ this.$router.push({
+ path:'/product/hb-detail',
+ query:{
+ id:this.$route.query.orderId,
+ mode:this.$route.query.mode
+ }
+ })
+ }
+ if(this.$route.query.mode == 'shtx'){
+ this.$router.push({
+ path:'/product/shtx-detail',
+ query:{
+ id:this.$route.query.orderId,
+ mode:this.$route.query.mode
+ }
+ })
+ }
+
+ }
+ },
+ beforeRouteLeave(to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next();
+ }
+};
+</script>
+<style lang="less" scoped>
+.pay-result-page {
+ & {
+ min-height: 100vh;
+ background-color: #f5f5f7;
+ }
+ .res-box {
+ width: 96vw;
+ height: 190px;
+ background: rgba(255, 255, 255, 1);
+ border-radius: 3px;
+ margin-left: 2vw;
+ margin-top: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ p {
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .img-box {
+ text-align: center;
+ img {
+ width: 95px;
+ height: 95px;
+ }
+ }
+ }
+ .btn-box {
+ padding-top: 44px;
+ text-align: center;
+ .btn-1 {
+ width: 86vw;
+ height: 44px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ border: 0;
+ outline: none;
+ color: #fff;
+ margin-bottom: 12px;
+ }
+ .btn-2 {
+ width: 86vw;
+ height: 44px;
+ background: rgba(247, 245, 255, 1);
+ border: 1px solid rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ outline: none;
+ color: #896edb;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/productManagement.vue b/src/views/old/store/productManagement.vue
new file mode 100644
index 0000000..cd3a919
--- /dev/null
+++ b/src/views/old/store/productManagement.vue
@@ -0,0 +1,296 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-29 10:17:39
+ * @Description:
+ -->
+<template>
+ <div class="productManagement-page">
+ <x-header title="产品管理" :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">
+ </x-header>
+ <!--<x-header slot="header" title="产品管理" :left-options="{backText:'',preventGoBack:true}"-->
+ <!--@on-click-back="pageGoBack()"></x-header>-->
+ <div class="productManagement-header" v-if="productList.length">
+ <ul class="productManagement-list">
+ <li @click="handleJump(i)" v-for="(i,index) in productList" :key="index">
+ <!-- <i class="iconfont usable" :class="i.icon"></i> -->
+ <img class="item-logo" :src="i.icon" :alt="i.typeName">
+ <p>{{i.typeName}}</p>
+ </li>
+ </ul>
+ </div>
+ <f-no-data v-else></f-no-data>
+ </div>
+</template>
+
+<script>
+ import { mapState } from 'vuex';
+ export default {
+ name: 'productManagement',
+ data() {
+ return {
+ productList: [],
+ statusType: '',
+ orgType:'',
+ };
+ },
+ created(){
+ this.init();
+ },
+ computed:{
+ ...mapState(['userinfo']),
+
+
+
+ },
+ methods: {
+ goBackPage() {
+ this.$router.push({
+ path: '/main/mine'
+ });
+ },
+ handleJump(productItem) {
+ let {
+ typeId,
+ openStatus
+ } = productItem,
+ path = '',
+ title = '',
+ query = {
+ typeId
+ };
+ if(typeId == '200014'){
+ if(openStatus == 2){
+ path = '/huabei/staging_hbjl'
+ }
+ query={
+ typeId,
+ orgType: this.orgType,
+ orgId: this.userinfo.orgId
+ }
+ }
+ if (typeId === '200005') {
+ if (this.orgType === 5) {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/heyd/mgrOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/heyd/open-result';
+ break;
+ case 4:
+ path = '/heyd/open-result';
+ break;
+ default:
+ path = '/heyd/mgrOpen';
+ break;
+ }
+ if(this.statusType == 4 && openStatus == 1 && this.mgrIsOpen == 0){
+ path = '/heyd/mgrOpen';
+ }
+
+ }else{
+ switch (openStatus) {
+ case 0:
+ path = '/heyd/storeOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/heyd/open-result';
+ break;
+ case 4:
+ path = '/heyd/open-result';
+ break;
+ default:
+ path = '/heyd/storeOpen';
+ break;
+ }
+ }
+ query = {
+ typeId,
+ orgType: this.orgType,
+ openStatus: openStatus,
+ icon: productItem.icon,
+ }
+ }else if(typeId === '200011') {
+ if (this.orgType === 5) {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/xyg/mgrOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/xyg/open-result';
+ break;
+ case 4:
+ path = '/xyg/open-result';
+ break;
+ default:
+ path = '/xyg/mgrOpen';
+ break;
+ }
+ if(this.statusType == 4 && openStatus == 1 && this.mgrIsOpen == 0){
+ path = '/xyg/mgrOpen';
+ }
+
+ }else{
+ switch (openStatus) {
+ case 0:
+ path = '/xyg/storeOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/xyg/open-result';
+ break;
+ case 4:
+ path = '/xyg/open-result';
+ break;
+ default:
+ path = '/xyg/storeOpen';
+ break;
+ }
+ }
+ query = {
+ typeId,
+ orgType: this.orgType,
+ openStatus: openStatus,
+ icon: productItem.icon,
+ }
+ }else if (typeId === '200017') {
+ if (this.orgType === 5) {
+ // 0-待开通,1-开通中,2-已开通,3-开通失败
+ switch (openStatus) {
+ case 0:
+ path = '/gzzj/mgrOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/gzzj/open-result';
+ break;
+ case 4:
+ path = '/gzzj/open-result';
+ break;
+ default:
+ path = '/gzzj/mgrOpen';
+ break;
+ }
+ if(this.statusType == 4 && openStatus == 1 && this.mgrIsOpen == 0){
+ path = '/gzzj/mgrOpen';
+ }
+
+ }else{
+ switch (openStatus) {
+ case 0:
+ path = '/gzzj/storeOpen';
+ break;
+ case 1:
+ case 2:
+ case 3:
+ path = '/gzzj/open-result';
+ break;
+ case 4:
+ path = '/gzzj/open-result';
+ break;
+ default:
+ path = '/gzzj/storeOpen';
+ break;
+ }
+ }
+ query = {
+ typeId,
+ orgType: this.orgType,
+ openStatus: openStatus,
+ icon: productItem.icon,
+ }
+ }
+ let val='';
+ if (this.statusType === 5) {
+ val = '营业员'
+ } else if (this.statusType === 3) {
+ val = '商户'
+ } else if (this.statusType === 4) {
+ val = '门店'
+ } else {
+ val = this.productList[0].statusType;
+ }
+ query.title = title;
+ query.statusType = val;
+ this.$router.push({
+ path,
+ query
+ });
+ },
+ //初始化
+ init() {
+ this.$api.storeProdList({
+ }).then(res => {
+ // console.log(res.body)
+ // this.prodTypeList=[]
+ this.mgrIsOpen = res.body.mgrIsOpen;
+ this.orgType = res.body.orgType;
+ this.statusType = res.body.prodTypeList[0].statusType || '';
+ this.productList = res.body.prodTypeList;
+ });
+ }
+ },
+ };
+
+</script>
+
+<style lang="less">
+ .item-logo{
+ display: block-line;
+ vertical-align: middle;
+ width: 45px;
+ height: 45px;
+ margin-left: auto;
+ }
+ .productManagement-page {
+ padding-top: 54px;
+
+ height: 100%;
+ padding-top: 44px;
+
+ .productManagement-header {
+ height: 100%;
+ background: @color-white;
+ margin-top: 15px;
+
+ .productManagement-list {
+ overflow: hidden;
+ height: 100%;
+
+ .iconfont {
+ font-size: 36px;
+ color: @color-text-placeholder;
+ }
+
+ .usable {
+ color: @color-text-three !important;
+ }
+
+ li {
+ list-style: none;
+ float: left;
+ width: 33%;
+ text-align: center;
+ padding: 20px 0;
+
+ p {
+ font-size: @font-size-small;
+ }
+ }
+ }
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/shsk/payResult.vue b/src/views/old/store/shsk/payResult.vue
new file mode 100644
index 0000000..92ad313
--- /dev/null
+++ b/src/views/old/store/shsk/payResult.vue
@@ -0,0 +1,144 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-27 09:14:20
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-10 09:36:40
+ * @Description: 商户收款支付结果页面
+-->
+<template>
+ <div class="payResult-page">
+ <van-nav-bar
+ title="支付结果"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div class="result">
+ <img
+ src="../../../../assets/img/支付成功.png"
+ alt=""
+ v-show="status == 1"
+ />
+ <img
+ src="../../../../assets/img/支付中.png"
+ alt=""
+ v-show="status == 0"
+ />
+ <img src="../../../../assets/img/超时.png" alt="" v-show="status == 2" />
+ <p>{{ text }}</p>
+ </div>
+ <div class="btn-box" v-show="status != 0">
+ <button
+ class="getQrCode"
+ @click="goback"
+ :style="{ background: $store.state.backColor, color: '#fff' }"
+ >
+ 返回
+ </button>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ timeId:'',
+ status: 0,
+ text: "用户支付中,请稍后",
+ };
+ },
+ created() {
+ if(this.$route.query.needSearch == 1){
+ this.timeId = setInterval(() => {
+ this.search()
+ }, 2000);
+ }else{
+ this.search_status()
+ }
+
+ },
+ methods: {
+ // 轮询 支付状态
+ search_status() {
+ let status = this.$route.query.orderStatus
+ this.status = status
+ console.log(this.status,status)
+ if(status==0){
+ this.text = '用户支付中,请稍后'
+ }else if(status==1){
+ this.text = '用户支付成功'
+ }else{
+ this.text = '用户支付失败,请重试'
+ }
+ },
+ search(){
+ this.$api.facepay_getStatus(
+ this.$route.query.orderId
+ ).then((res) => {
+ let orderStatus = res.body.orderStatus;
+ this.status = orderStatus
+ if(orderStatus == 0){
+ this.text = '用户支付中,请稍后'
+ }else if(orderStatus == 1){
+ this.text = '用户支付成功'
+ clearInterval(this.timeId);
+ }else{
+ this.text = '用户支付失败,请重试'
+ clearInterval(this.timeId);
+ }
+ });
+ },
+ goback(){
+ this.$router.push('/main/product')
+ }
+ },
+ beforeRouteLeave(to, from, next) {
+ clearInterval(this.timeId);
+ next();
+ },
+};
+</script>
+<style lang="less" scoped>
+.payResult-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f5;
+ }
+ .result {
+ & {
+ width: 359px;
+ height: 190px;
+ background: #ffffff;
+ border-radius: 3px;
+ margin: auto;
+ margin-top: 10px;
+ text-align: center;
+ box-sizing: border-box;
+ padding: 32px 0;
+ }
+ img {
+ width: 95px;
+ height: 95px;
+ margin-bottom: 16px;
+ }
+ }
+ .btn-box{
+ text-align: center;
+ }
+ .getQrCode {
+ width: 320px;
+ height: 44px;
+ outline: none;
+ border-radius: 22px;
+ border: 0;
+ margin-top: 42px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/shsk/shsk.vue b/src/views/old/store/shsk/shsk.vue
new file mode 100644
index 0000000..8fea33b
--- /dev/null
+++ b/src/views/old/store/shsk/shsk.vue
@@ -0,0 +1,231 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-26 15:12:47
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-16 10:01:32
+ * @Description: 商户收款页面
+-->
+<template>
+ <div class="store-shsk-page">
+ <van-nav-bar
+ title="商户收款"
+ left-text="返回"
+ left-arrow
+ @click-left="onClickLeft"
+ style="line-height: 43px"
+ >
+ <i
+ class="iconfont iconzuojiantou"
+ slot="left"
+ style="font-size: 25px"
+ ></i>
+ </van-nav-bar>
+ <div class="content">
+ <p class="title">收款金额</p>
+ <div class="input-box">
+ <span>¥</span>
+ <input type="text" v-model="price" placeholder="请输入收款金额" />
+ </div>
+ <p class="tip">本次收款渠道手续费:{{rate}}%</p>
+ </div>
+ <button
+ class="getQrCode"
+ @click="getQrCode"
+ :style="{ background: $store.state.backColor, color: '#fff' }"
+ >
+ 生成收款二维码
+ </button>
+ <button
+ v-if="$route.query.zfbVersion != 5"
+ class="toQrCode"
+ @click="toQrCode"
+ :style="{
+ background: '#fff',
+ border: `solid 1px ${$store.state.backColor}`,
+ color: $store.state.backColor,
+ }"
+ >
+ 扫描用户付款码
+ </button>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ rate:'0.38',
+ price:'',//金额
+ };
+ },
+ created() {
+ this.getWeChatConfig();
+ },
+ mounted(){
+ this.$api.shskProdFee({
+ payMethod:this.$route.query.payMethod,
+ zfbVersion:this.$route.query.zfbVersion
+ }).then(res=>{
+ this.rate = res.body.fee
+ })
+ },
+ methods: {
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ getQrCode(){
+ if(!this.price){
+ this.$tool.toast('交易金额不能为空');
+ return
+ }
+ this.$api.facepay_create({
+ payAmt:this.price,
+ term:0,
+ payType: 1,//反扫
+ zfbVersion:this.$route.query.zfbVersion,
+ payMethod:this.$route.query.payMethod
+ }).then(res=>{
+ let url = res.body.payQrCodeUrl;
+ let id = res.body.orderId;
+ this.$router.push({
+ path:'/getShskQRCode',
+ query:{
+ url:res.body.payQrCodeUrl,
+ orderId:res.body.orderId
+ }
+ })
+ })
+ },
+ toQrCode() {
+ let that = this
+ if(!this.price){
+ this.$tool.toast('交易金额不能为空');
+ return
+ }
+ this.checkIsReady().then(() => {
+ wx.scanQRCode({
+ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+ scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
+ success: function (res) {
+ // 当needResult 为 1 时,扫码返回的结果
+ // 扫码成功后调用接口
+ console.log(res)
+ that.$api.facepay_create({
+ payAmt:that.price,
+ term:0,
+ payType: 2,//正扫
+ zfbVersion:that.$route.query.zfbVersion,
+ payMethod:that.$route.query.payMethod,
+ authCode: res.resultStr,
+ }).then(res=>{
+ let id = res.body.orderId;
+ that.$router.push({
+ path:'/shsk-payResult',
+ query:{
+ orderId:id,
+ needSearch:1
+ }
+ })
+ })
+ },
+ });
+ });
+ },
+ // 异步准备微信环境
+ checkIsReady() {
+ return new Promise((resolve, reject) => {
+ wx.ready(() => resolve());
+ wx.error(err => reject(console.log(res + "wx.error")));
+ });
+ },
+ // 获取微信配置
+ getWeChatConfig() {
+ let url = location.href.split("#")[0];
+ // let url = 'http://t.finlean.com/'
+ this.$api
+ .getTokenInfo({
+ url: url,
+ })
+ .then((res) => {
+ // 获取微信配置
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
+ appId: res.body.appId, // 必填,公众号的唯一标识
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature, // 必填,签名
+ jsApiList: ["checkJsApi", "scanQRCode"], // 必填,需要使用的JS接口列表
+ openTagList: [], // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
+ });
+ });
+ },
+ },
+};
+</script>
+<style lang="less" scoped>
+.store-shsk-page {
+ & {
+ min-height: 100vh;
+ background: #f5f5f5;
+ text-align: center;
+ }
+ .content {
+ & {
+ text-align: left;
+ background: #fff;
+ width: 359px;
+ // height: 154px;
+ margin: auto;
+ margin-top: 10px;
+ box-sizing: border-box;
+ padding: 32px 12px;
+ }
+ .title {
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: #333333;
+ }
+ .input-box {
+ border-bottom: 1px solid #e6e6e6;
+ padding: 24px 0 7px 0;
+ span {
+ font-size: 20px;
+ font-family: PingFang SC;
+ font-weight: bold;
+ color: #333333;
+ }
+ input {
+ border: 0;
+ outline: none;
+ height: 30px;
+ font-size: 20px;
+ }
+ input::placeholder {
+ font-size: 20px;
+ }
+ }
+ .tip {
+ font-size: 12px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: #999999;
+ margin-top: 16px;
+ }
+ }
+ .getQrCode {
+ width: 320px;
+ height: 44px;
+ outline: none;
+ border-radius: 22px;
+ border: 0;
+ margin-top: 42px;
+ }
+ .toQrCode {
+ width: 320px;
+ height: 44px;
+ outline: none;
+ border-radius: 22px;
+ margin-top: 16px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/wx-pay-score.vue b/src/views/old/store/wx-pay-score.vue
new file mode 100644
index 0000000..5f82dc5
--- /dev/null
+++ b/src/views/old/store/wx-pay-score.vue
@@ -0,0 +1,409 @@
+<!--
+ * @Date: 2019-08-30 13:38:35
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 15:17:58
+ * @Description:
+ -->
+
+<template>
+ <div class="hb-credit-installment h-100-g">
+ <!-- <x-header title="办理分期" :left-options="{backText:''}"></x-header> -->
+ <!-- <tab :line-width=1 active-color='#bfa073'>
+ <tab-item v-for="(item, index) in tabList" :key="index" :selected="activeTab === index"
+ @on-item-click="handleTabChange(index)">{{ item }}</tab-item>
+ </tab> -->
+ <van-nav-bar title="和微分" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="search">
+ <selector title='活动编码' placeholder='请选择' @on-change='handleContIdChange' v-model="contSendCode"
+ :options='form.cmccWxpayContList' :value-map="['contCode','contName']" direction='rtl'></selector>
+ </div>
+ <group class="group-content">
+ <div class="title">
+ <span class="line" :style="{background:$store.state.defaultBgColor}"></span>
+ 活动信息
+ </div>
+ <div class="form-content">
+ <x-input title='活动ID' v-model.trim="contSendCode" readonly text-align='right'></x-input>
+ <x-input title='活动名称' v-model.trim="contName" readonly text-align='right'></x-input>
+ <x-input title='合约期' v-model.trim="term" readonly text-align='right'></x-input>
+ <x-input title='担保金额' v-model.trim="guaranteedAmt" readonly text-align='right'></x-input>
+ <x-input title='月赠费金额' v-model.trim="monGiftAmt" readonly text-align='right'></x-input>
+ </div>
+ <div style="height: 10px; background: #f5f5f5;"></div>
+ <div class="title" style="border-radius:6px;">
+ <span class="line" :style="{background:$store.state.defaultBgColor}"></span>
+ 用户信息
+ </div>
+ <div class="form-content">
+ <selector title='手机号类型' placeholder='请选择' @on-change='handleMblTypeChange' v-model="mblNoType"
+ :options='form.mblNoTypeList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='用户姓名' v-model.trim="userName" placeholder='请输入' text-align='right' />
+ <selector title='归属地' placeholder='请选择' @on-change='handleRegionChange' v-model="regionCode"
+ :options='form.regionList' :value-map="['code','name']" direction='rtl'></selector>
+ <x-input title='身份证号码' v-model.trim="idCardNo" placeholder='请输入' text-align='right' />
+ <van-field
+ v-model="mblNo"
+ clearable
+ maxlength='11'
+ type="number"
+ placeholder="手机号码"
+ >
+ <van-button class="mgs-btn" slot="button" size="small" @click="mblVertify" >可用查询</van-button>
+ </van-field>
+ </div>
+ </group>
+
+
+ <div class="btn-box">
+ <van-button round :color="$store.state.backColor" class="btn2" @click="wxScoreOrderCreate">生成二维码</van-button>
+ </div>
+ <Vdialog @cancel="cancel" :show="showDia"></Vdialog>
+ </div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+ import FConfirmSimple from '@/components/old/FConfirmSimple.vue';
+ import Vdialog from "@/components/common/v-dialog.vue";
+ import {
+ mapState,
+ mapActions
+ } from 'vuex';
+ import {
+ Datetime,
+ XAddress,
+ } from 'vux';
+ export default {
+ name: 'wx-pay-score',
+ components: {
+ FConfirmSimple,Vdialog
+ },
+ data() {
+ return {
+ creditId: '',
+ contId: '',//合约id
+ contSendCode: '',//合约code
+ mblType:'',
+ regionCode:'',
+ mblNoType:'',
+ vertifyStatus:'',
+ userName: '',
+ idCardNo: '',
+ mblNo: '',
+ term: '',//合约期数
+ contName: '',//合约名称
+ guaranteedAmt: '',//担保金额
+ monGiftAmt: '',//月赠费金额
+ qrCode:'',
+ form: {
+ cmccWxpayContList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ mblNoTypeList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ regionList: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ }
+ }
+ };
+ },
+ computed:{
+
+ },
+ created(){
+ this.$api.wxScoreInit().then(res => {
+ this.form = res.body || {};
+ var arr = res.body.terms;
+ }, err => err);
+ },
+ methods: {
+ //顶部tabbar返回按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ // 套餐类型
+ handleContIdChange(val) {
+ let currentEle=JSON.parse(JSON.stringify(this.form.cmccWxpayContList)).find(item=>item.contCode===val)
+ this.contId = currentEle.contId;
+ this.contSendCode = currentEle.contCode;
+ this.contName = currentEle.contName;
+ this.term = currentEle.term;
+ this.guaranteedAmt = currentEle.guaranteedAmt;
+ this.monGiftAmt = currentEle.monGiftAmt;
+ },
+ // 账号类型
+ handleMblTypeChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.form.mblNoTypeList)).find((item) => {
+ return item.code = val;
+ });
+ },
+ // 市区
+ handleRegionChange(val) {
+ let currentEle = JSON.parse(JSON.stringify(this.form.regionList)).find((item) => {
+ return item.code = val;
+ });
+ },
+ // 账号类型
+ mblVertify(val) {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.mblNoType)) {
+ v.toast('请选择手机号类型');
+ return false;
+ }
+ if (v.checkValEmpty(this.contSendCode)) {
+ v.toast('请选择活动套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.userName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.regionCode)) {
+ v.toast('请选择归属地');
+ return false;
+ }
+ if (v.checkValEmpty(this.idCardNo)) {
+ v.toast('请输入用户身份证号');
+ return false;
+ }
+ if (!v.checkPhone(this.mblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ this.$api.wxScoreVertify({
+ cardNo: this.idCardNo,
+ contCode:this.contSendCode,
+ mblNo: this.mblNo,
+ mblNoType: this.mblNoType,
+ regionCode: this.regionCode
+ }).then(res => {
+ this.creditId = res.body.creditId
+ this.vertifyStatus = res.body.status
+ if(this.vertifyStatus == 0){
+ v.toast('号码不可用');
+ return false;
+ }else if(this.vertifyStatus == 1){
+ v.toast('号码可用');
+ return false;
+ }
+ }, err => err);
+ },
+ // 提交订单
+ wxScoreOrderCreate(val) {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.contSendCode)) {
+ v.toast('请选择活动套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.mblNoType)) {
+ v.toast('请选择手机号类型');
+ return false;
+ }
+ if (v.checkValEmpty(this.userName)) {
+ v.toast('请输入用户姓名');
+ return false;
+ }
+ if (v.checkValEmpty(this.regionCode)) {
+ v.toast('请选择归属地');
+ return false;
+ }
+ if (v.checkValEmpty(this.idCardNo)) {
+ v.toast('请输入用户身份证号');
+ return false;
+ }
+ if (!v.checkPhone(this.mblNo)) {
+ v.toast('请输入正确的用户手机号');
+ return false;
+ }
+ if(this.vertifyStatus == 0){
+ v.toast('号码不可用');
+ return false;
+ }
+ this.$api.wxScoreCreate({
+ creditId: this.creditId,
+ contId: this.contId,
+ cardNo: this.idCardNo,
+ mblNo: this.mblNo,
+ contCode: this.contSendCode,
+ regionCode: this.regionCode,
+ userName: this.userName
+ }).then(res => {
+ this.qrCode = res.body.qrCode
+ this.orderId = res.body.orderId
+ if (this.qrCode) {
+ this.createdQRCode();
+ }
+ }, err => err);
+ },
+ // 生成二维码
+ createdQRCode() {
+ let queryObj = {
+ qrCode:this.qrCode,
+ orderId: this.orderId,
+ contName: this.contName,
+ term: this.term,
+ guaranteedAmt: this.guaranteedAmt,
+ monGiftAmt: this.monGiftAmt,
+ }
+ this.$router.push({
+ path: "/wx-getWxQRCode",
+ query: queryObj
+ })
+ },
+ },
+ };
+
+</script>
+<style lang='less' scoped >
+ // /deep/.myDisableIpt{
+ // color: #999999;
+ // }
+ /deep/.van-field__control:disabled {
+ color: #666;
+ -webkit-text-fill-color: #666;
+ background-color: transparent;
+ opacity: 1;
+ }
+
+ .ipt,
+ .fenqi {
+ & {
+ border-bottom: 1px solid rgba(238,238,238,1);
+ color: #333;
+ font-size: 16px;
+ height: 50px;
+ }
+ }
+ //搜索框
+ .search {
+ margin-bottom: 20px;
+ padding: 5px 10px;
+ }
+ .mer{
+ width: 100%;
+ height: 150px;
+ background: linear-gradient(-45deg,rgba(104,98,133,1),rgba(76,69,113,1));
+ overflow: hidden;
+ &-head{
+ width: 96%;
+ margin: 28px 2% 0 2%;
+ height: 72px;
+ background:rgba(255,255,255,0.1);
+ // background: (0,0,0, 0.1);
+ border-radius: 36px;
+ .flex();
+ &-item{
+ width: 33%;
+ color: #fff;
+ text-align: center;
+ :first-child{
+ margin-bottom: 11px;
+ font-size: 20px;
+ font-weight: bold;
+ }
+ :last-child{
+ font-size: 12px;
+ }
+ }
+ &-line{
+ width: 1px;
+ height: 20px;
+ background: #fff;
+ }
+ }
+ }
+ .group-content{
+ transform: translateY(-25px);
+ width: 96%;
+ margin: 0 2%;
+ }
+ /deep/.weui-cells{
+ border-radius: 6px;
+ font-size: 16px;
+ input{
+ font-size: 14px;
+ }
+ }
+ .hb-order-confirm {
+ .trial-list {
+ padding-left: 20px;
+ }
+
+ .f-button-component .f-button {
+ margin-top: 12px;
+ }
+ }
+
+ .hb-credit-installment {
+ background-color: #F5F5F7;
+ // padding-top: 54px;
+ min-height: 100%;
+ .title {
+ padding: 14px 0px 14px 12px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+ border-bottom: 1px solid rgba(238,238,238,1);
+ .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ // margin-right: 8px;
+ background:rgba(137,110,219,1);
+ border-radius:0px 6px 0px 6px;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .qrCode-box {
+ padding-top: 0;
+ .flexLayout(center, center, row);
+
+ .qrCode {
+ width: 200px;
+ height: 200px;
+ box-sizing: border-box;
+ background-color: #fff;
+ border: 5px solid @color-border-theme;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ vertical-align: middle;
+ display: block;
+ }
+ }
+ }
+ }
+ .btn-box{
+ margin-top: 40px;
+ margin-bottom: 22px;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ .btn2{
+ width: 40%;
+ height: 44px;
+ background:rgba(137,110,219,1);
+ color: white;
+ }
+ .active {
+ width: 80%;
+ }
+ }
+
+</style>
diff --git a/src/views/old/store/wx-score-result.vue b/src/views/old/store/wx-score-result.vue
new file mode 100644
index 0000000..ec8a86e
--- /dev/null
+++ b/src/views/old/store/wx-score-result.vue
@@ -0,0 +1,154 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-07-08 16:47:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-09 13:59:25
+ * @Description:
+-->
+<template>
+ <div class="pay-result-page">
+ <v-navbar title="交易结果"></v-navbar>
+ <div class="res-box">
+ <div class="img-box">
+ <img v-if="orderStatus==0" src="../../../../static/img/ing.png" alt />
+ <img v-if="orderStatus==1" src="../../../../static/img/cg.png" alt />
+ <img v-if="orderStatus==2" src="../../../../static/img/cs.png" alt />
+ <img v-if="orderStatus==3" src="../../../../static/img/cs.png" alt />
+ <p>{{text}}</p>
+ </div>
+ </div>
+ <div class="btn-box">
+ <button class="btn-1" @click="goHome">返回首页</button>
+ <button class="btn-2" v-if="orderStatus==0" @click="goDetail">查看订单详情</button>
+ </div>
+ </div>
+</template>
+<script>
+export default {
+ data() {
+ return {
+ timer: "", //定时器
+ text: "支付中,请稍候",
+ orderStatus: 0
+ };
+ },
+ computed: {
+ orderId() {
+ return this.$route.query.orderId;
+ }
+ },
+ created() {
+ this.orderSts();
+ },
+ methods: {
+ //轮询查询订单状态
+ orderSts() {
+ this.timer = setInterval(() => {
+ this.$api.hbOrderFindOrderSts({ orderId: this.orderId }).then(
+ res => {
+ this.orderStatus = res.body.orderStatus;
+ if (res.body.orderStatus == 1) {
+ clearInterval(this.timer);
+ this.text = "支付成功";
+ } else if (res.body.orderStatus == 2) {
+ clearInterval(this.timer);
+ this.text = "支付超时";
+ } else if (res.body.orderStatus == 3) {
+ clearInterval(this.timer);
+ this.text = "支付失败";
+ }
+ },
+ err => {
+ err, clearInterval(this.timer);
+ }
+ );
+ }, 10000);
+ },
+ goHome(){
+ this.$router.push('/main/product')
+ },
+ goDetail(){
+ if(this.$route.query.mode == 'hb'){
+ this.$router.push({
+ path:'/product/hb-detail',
+ query:{
+ id:this.$route.query.orderId,
+ mode:this.$route.query.mode
+ }
+ })
+ }
+ if(this.$route.query.mode == 'shtx'){
+ this.$router.push({
+ path:'/product/shtx-detail',
+ query:{
+ id:this.$route.query.orderId,
+ mode:this.$route.query.mode
+ }
+ })
+ }
+
+ }
+ },
+ beforeRouteLeave(to, from, next) {
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ next();
+ }
+};
+</script>
+<style lang="less" scoped>
+.pay-result-page {
+ & {
+ min-height: 100vh;
+ background-color: #f5f5f7;
+ }
+ .res-box {
+ width: 96vw;
+ height: 190px;
+ background: rgba(255, 255, 255, 1);
+ border-radius: 3px;
+ margin-left: 2vw;
+ margin-top: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ p {
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .img-box {
+ text-align: center;
+ img {
+ width: 95px;
+ height: 95px;
+ }
+ }
+ }
+ .btn-box {
+ padding-top: 44px;
+ text-align: center;
+ .btn-1 {
+ width: 86vw;
+ height: 44px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ border: 0;
+ outline: none;
+ color: #fff;
+ margin-bottom: 12px;
+ }
+ .btn-2 {
+ width: 86vw;
+ height: 44px;
+ background: rgba(247, 245, 255, 1);
+ border: 1px solid rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ outline: none;
+ color: #896edb;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/xyg/createcode.vue b/src/views/old/store/xyg/createcode.vue
new file mode 100644
index 0000000..a971f43
--- /dev/null
+++ b/src/views/old/store/xyg/createcode.vue
@@ -0,0 +1,420 @@
+<!--
+ * @Descripttion: 智享云生成二维码
+ * @Author:TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-3-1 15:00:00
+ * @LastEditTime: 2020-11-13 17:25:14
+ -->
+<template>
+ <div class="contract-installment-zxh">
+ <van-nav-bar title="信用购">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size:20px;color:#333;font-weight:blod" @click="goFrom"></i>
+ </van-nav-bar>
+ <div class="heyue-info">
+ <p class="tit">
+ <span>合约信息</span>
+ <span></span>
+ </p>
+ <!-- <div style="margin-bottom:16px">
+ <p style="margin-bottom:10px">
+ <span style="color:#999999;font-size:13px">合约套餐</span>
+ <span style="color:#FF6666;font-size:13px">*</span>
+ </p>
+ <el-select v-model="selectContract" placeholder="请选择">
+ <el-option
+ v-for="item in contractList"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </div> -->
+ <Ipt :type="'text'" :mustFill="true" :tit="'合约套餐'" :readonly="true" v-model="contName"></Ipt>
+ <Ipt :type="'text'" :mustFill="true" :tit="'结算金额'" :readonly="true" v-model="selectConInfo.capitalAmt"></Ipt>
+ <Ipt :type="'text'" :mustFill="true" :tit="'月缴话费'" :readonly="true" v-model="selectConInfo.monthlyFees"></Ipt>
+ <Ipt :type="'text'" :mustFill="true" :tit="'期数'" :readonly="true" v-model="selectConInfo.term"></Ipt>
+ </div>
+ <div class="sp-info">
+ <p class="tit">
+ <span>商品信息</span>
+ <span></span>
+ </p>
+ <div style="margin-bottom:16px">
+ <p style="margin-bottom:10px">
+ <span style="color:#999999;font-size:13px">商品类型</span>
+ </p>
+ <el-select v-model="goodsInfo.goodsType" placeholder="请选择">
+ <el-option
+ v-for="item in columns"
+ :key="item.code"
+ :label="item.name"
+ :value="item.code"
+ @change="onConfirm">
+ </el-option>
+ </el-select>
+ </div>
+ <Ipt :type="'text'" :tit="'品牌'" :placeholder="'请输入品牌'" :readonly="false" v-model="goodsInfo.goodsBrand"></Ipt>
+ <Ipt :type="'text'" :tit="'名称'" :placeholder="'请输入名称'" :readonly="false" v-model="goodsInfo.goodsName"></Ipt>
+ <Ipt :type="'text'" :tit="'型号'" :placeholder="'请输入型号'" :readonly="false" v-model="goodsInfo.goodsModel"></Ipt>
+ <Ipt :type="'text'" :tit="'价格'" :placeholder="'请输入价格'" :readonly="false" v-model="goodsInfo.goodsPrice"></Ipt>
+ <Ipt :type="'text'" :tit="'IMEI'" :placeholder="'请输入IMEI'" :readonly="false" v-model.trim="goodsInfo.goodsImei" v-if="goodsInfo.goodsType==1"></Ipt>
+ <Ipt :type="'text'" :tit="'SN'" v-model.trim="goodsInfo.goodsSn" placeholder='请输入SN' :max='20' v-else></Ipt>
+ </div>
+ <van-button class="btn" round @click="submit">生成二维码</van-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XAddress
+ } from 'vux';
+ import QRCode from 'qrcode';
+ import IDValidator from '@/utils/IDValidator';
+ import Vue from 'vue';
+ import { Picker } from 'vant';
+ import Ipt from '../../../../components/common/h-ipt'
+ Vue.use(Picker);
+ export default {
+ name: 'xyg_createcode',
+ components: {
+ XAddress,Ipt
+ },
+ data() {
+ return {
+ value:'',
+ showPicker: false,//弹出层
+
+ cityList: [],
+ selectContract: '', // 选中的合约
+ contName:'',//合约名称
+ // 合约信息
+ selectConInfo: {
+ capitalAmt: '', // 结算金额
+ monthlyFees: '', // 月缴话费
+ term: '', // 期数
+ },
+ // 商品信息
+ goodsInfo: {
+ //selectContract: '', // 选中的合约
+ goodsBrand: '', //商品品牌
+ goodsName: '', //商品名称
+ goodsModel: '', // 商品型号
+ goodsPrice: '', // 价格
+ goodsImei: '', // IMEI
+ goodsSn: '', // SN
+ goodsType:'',//设备类型,1-手机(IMEI)2-电子商品、3-智能家电、4-其他(SN)
+ },
+ contractList: [], // 合约列表
+ columns: [],//设备下拉表
+ }
+ },
+ created() {
+ if(sessionStorage.hb_session_info){
+ this.goodsInfo = JSON.parse(sessionStorage.hb_session_info)
+ }
+ this.contName = this.$route.query.prodName;
+ this.selectContract = this.$route.query.prodId
+ this.selectConInfo.capitalAmt = this.$route.query.prodAmt
+ this.selectConInfo.monthlyFees = this.$route.query.monthlyFees //月缴话费
+ this.selectConInfo.term = this.$route.query.term
+
+ this.initWXToken(location.origin + location.pathname);
+ this.$api.getGoodsTypeList().then(res=>{
+ this.columns = res.body.prodTypes
+ })
+ this.$api.getArea().then(res => {
+ this.cityList = res.body.provList;
+ });
+ },
+ watch: {
+ },
+ methods: {
+ // 返回上一页
+ goFrom(){
+ this.$router.go(-1)
+ },
+ onConfirm() {
+ console.log(this.goodsInfo.goodsType)
+ // this.value = value
+ // this.goodsInfo.goodsType = index+1;
+ //this.showPicker = false;
+ if(this.goodsInfo.goodsType==1||this.goodsInfo.goodsType==''){
+ this.goodsInfo.goodsSn = ''
+ }else{
+ this.goodsInfo.goodsImei = ''
+ }
+ },
+ initWXToken(parUrl) {
+ this.$api.getTokenInfo({
+ url: parUrl
+ }).then(
+ function (res) {
+ if (res.errorCode === 0) {
+ // 第二步骤 只需要首页地址分享 ,需要在每次变化时调用
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+ appId: res.body.appId,
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature, // 必填,签名,见附录1
+ jsApiList: [
+ 'checkJsApi',
+ 'scanQRCode',
+ 'getLocation'
+ ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+ });
+ }
+ },
+ function (error) {
+ if (error.response) {
+ console.log(error.response);
+ }
+ }
+ );
+ },
+ getLocation(){
+ console.log('getLocation');
+ let _this = this;
+ wx.getLocation({
+ type: 'wgs84',
+ success: function (res) {
+ console.log(JSON.stringify(res));
+ let longitude = res.longitude
+ let latitude = res.latitude
+ _this.$api.gpsAddr({
+ gpsAddrLongitude: longitude,
+ gpsAddrLatitude: latitude
+ }).then(res => {
+ console.log('gpsSucess');
+ }, err => err);
+ },
+ cancel: function (res) {
+ console.log('用户拒绝授权获取地理位置');
+ _this.$api.gpsAddr({
+ gpsAddrLongitude: '',
+ gpsAddrLatitude: ''
+ }).then(res => {
+ console.log('gpsfail');
+ }, err => err);
+ }
+ })
+ },
+ // 处理合约的修改
+ contractChange(val) {
+ if (!val) {
+ return;
+ }
+ this.selectConInfo = this.contractList.find((item) => {
+ return item.contId === val;
+ })
+ },
+ // 生成二维码
+ submit() {
+ this.getLocation();
+ let v = this.$tool;
+ if (v.checkValEmpty(this.selectContract)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品品牌');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsName)) {
+
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsModel)) {
+ v.toast('请输入商品型号');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品价格');
+ return false;
+ }
+ if (!/^[1-9]\d{0,4}/.test(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品正确的价格');
+ return false;
+ }
+ if(this.goodsInfo.goodsType == 1){
+ if (v.checkValEmpty(this.goodsInfo.goodsImei)) {
+ v.toast('请输入商品IMEI');
+ return false;
+ }
+ }else{
+ if (v.checkValEmpty(this.goodsInfo.goodsSn)) {
+ v.toast('请输入商品SN');
+ return false;
+ }
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsType)) {
+ v.toast('请选择设备类型');
+ return false;
+ }
+ // 用来整体存储缓存数据
+ let hb_session_info = {
+ ...this.goodsInfo
+ }
+ sessionStorage.hb_session_info = JSON.stringify(hb_session_info)
+
+ let queryObj = {
+ ...this.selectConInfo,
+ ...this.goodsInfo,
+ mgrId: sessionStorage.sid, // 办单员id
+ contId: this.selectContract, // 合约id
+ contName: this.contName,
+ typeId: this.$route.query.typeId,
+ seq:this.$route.query.seq
+ };
+
+ this.$router.push({
+ path: "/contract-qrcode",
+ query: queryObj
+ })
+ },
+ // 根据城市code 获取拼接的字符串
+ getAddrText(arr) {
+ let str = '';
+ this.cityList.forEach(item => {
+ if (arr.indexOf(item.value) > -1) {
+ str += item.name
+ }
+ })
+ return str;
+ }
+ }
+ };
+</script>
+<style lang='less' >
+ .contract-installment-zxh {
+ min-height: 100vh;
+ background-color: #f1f1f1;
+ padding-bottom: 80px;
+ //overflow-y: scroll;
+ input::-webkit-input-placeholder{color:#333333;}
+ .van-cell {
+ padding: 0.22rem 0.32rem 0.22rem 8px;
+ border: 1px solid #CDD3F6;
+ border-radius: 4px;
+ background-color: #F9FAFF;
+ margin-bottom: 16px;
+ }
+ .van-cell:after {
+ content: " ";
+ position: absolute;
+ left: 0.3rem;
+ top: 0;
+ right: 0;
+ height: 0.02rem;
+ width: 98%;
+ border-top: 0.02rem solid #D9D9D9;
+ color: #D9D9D9;
+ transform-origin: 0 100%;
+ transform: scaleY(0.5);
+ }
+ .van-nav-bar__title {
+ max-width: 60%;
+ margin: 0 auto;
+ color: #333;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ .el-input__inner{
+ background-color: #F9FAFF;
+ padding-left: 8px;
+ }
+ .el-select{
+ width: 100%;
+ height: 40px;
+ }
+ .heyue-info{
+ width:100%;
+ height:385px;
+ background:rgba(255,255,255,1);
+ box-shadow:1px 5px 13px 0px rgba(0, 0, 0, 0.08);
+ margin-top: 12px;
+ box-sizing: border-box;
+ padding: 17px 20px 0 20px;
+ .tit{
+ margin-bottom: 19px;
+ color: #6C4AD5;
+ font-size: 16px;
+ position: relative;
+ span:nth-of-type(1){
+ display: inline-block;
+ font-weight: bold;
+ }
+ span:nth-of-type(2){
+ display: inline-block;
+ width:64px;
+ height:7px;
+ background:rgba(255,236,190,0.5);
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ }
+ }
+ }
+ .sp-info{
+ width:375px;
+ height:560px;
+ background:rgba(255,255,255,1);
+ box-shadow:1px 5px 13px 0px rgba(0, 0, 0, 0.08);
+ border-radius:3px;
+ margin-top: 15px;
+ box-sizing: border-box;
+ padding: 17px 20px 0 20px;
+ .tit{
+ margin-bottom: 19px;
+ color: #6C4AD5;
+ font-size: 16px;
+ position: relative;
+ span:nth-of-type(1){
+ display: inline-block;
+ font-weight: bold;
+ }
+ span:nth-of-type(2){
+ display: inline-block;
+ width:64px;
+ height:7px;
+ background:rgba(255,236,190,0.5);
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ }
+ }
+ }
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+ }
+ .btn {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 24px;
+ }
+</style>
diff --git a/src/views/old/store/xyg/message.vue b/src/views/old/store/xyg/message.vue
new file mode 100644
index 0000000..3ef6437
--- /dev/null
+++ b/src/views/old/store/xyg/message.vue
@@ -0,0 +1,105 @@
+
+<template>
+ <div class="getQRCode">
+ <!-- <x-header class="message-head" title="消息详情" :left-options="{backText:''}"></x-header> -->
+ <van-nav-bar title="消息详情" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="message-body">
+ <div class="notice">
+ <p class="notice-title">{{ message.msgTitle }}</p>
+ <p>{{ message.msgTime }}</p>
+ </div>
+ <span class="line"></span>
+ <div class="notice-continue" v-html=" message.msgCon">
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import {
+ dateFormat
+ } from 'vux'
+import { mapActions } from 'vuex';
+ export default {
+ name: 'message',
+ components: {
+ XHeader,
+ },
+ data() {
+ return {
+ messageId: this.$route.query.messageId,
+ message:{
+ msgCon: '',
+ msgTitle: '',
+ msgTime: '',
+ }
+ }
+ },
+ computed:{
+
+ },
+ created() {
+ this.msgInt()
+ this.getCount()
+ },
+ methods: {
+ ...mapActions(['getCount']),
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ msgInt() {
+ this.$api.noticeDetail({id: this.messageId}).then(res => {
+ console.log(res.body)
+ this.message.msgCon = res.body.noticeContent;
+ this.message.msgTitle = res.body.title;
+ this.message.msgTime = dateFormat(res.body.pubTime);
+ })
+
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.getQRCode{
+ background: #F5F5F7;
+ width: 100%;
+ height: 100%;
+}
+.message-head{
+ position: relative;
+}
+.message-body{
+ width: 96%;
+ margin: 12px 2%;
+ margin-top: 10px;
+ background: #fff;
+ .notice{
+ padding: 15px 12px;
+ border-bottom: 1px solid #EEEEEE;
+ p{
+ color: #999999;
+ }
+ &-title{
+ font-size: 16px;
+ font-weight: bold;
+ color: #333333 !important;
+ margin-bottom: 10px;
+ }
+ }
+ .notice-continue{
+ width: 94%;
+ margin: 0px 2%;
+ padding: 15px 0;
+ white-space: wrap;
+ font-size: 14px;
+ word-wrap: break-word;
+ height: auto;
+ padding-left: 2%;
+ background: #fff;
+ color: #666666;
+ line-height: 22px;
+ }
+}
+</style>
diff --git a/src/views/old/store/xyg/set.vue b/src/views/old/store/xyg/set.vue
new file mode 100644
index 0000000..d73868d
--- /dev/null
+++ b/src/views/old/store/xyg/set.vue
@@ -0,0 +1,197 @@
+<!--
+ * @Descripttion: 智享云状态切换 + 数据资料的反显,无复杂逻辑
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-21 18:06:00
+ * @LastEditTime: 2019-09-02 11:15:49
+ -->
+<template>
+ <div class="zxh-set-box">
+ <x-header title="智享花" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-switch title="状态" v-model="status"></x-switch>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 基本信息
+ </div>
+ <cell title="商户名称" :value="info.merName"></cell>
+ <cell title="营业执照号" :value="info.licenseNo"></cell>
+ <cell title="地址" :value="info.merAddr"></cell>
+ <cell title="详细地址" :value="info.merDtlAddr"></cell>
+ <cell title="营业面积" :value="info.merArea"></cell>
+ <cell title="成立日期" :value="info.foundDate | timeformat('yyyy-MM-dd')"></cell>
+ <cell title="协议开始时间" :value="(info.agreeStartTime || '') | parseDate"></cell>
+ <cell title="协议结束时间" :value="(info.agreeEndTime || '') | parseDate"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 法人信息
+ </div>
+ <cell title="法人姓名" :value="info.legalName"></cell>
+ <cell title="法人身份证号" :value="info.legalIdNo"></cell>
+ <cell title="法人电话" :value="info.legalMblNo"></cell>
+ <cell title="法人家庭住址" :value="info.legalHomeAddr"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 银行信息
+ </div>
+ <cell title="银行名称" :value="info.bankName"></cell>
+ <cell title="开户行" :value="info.bankDtlName"></cell>
+ <cell title="地址" :value="info.bankAddr"></cell>
+ <cell title="户名" :value="info.cardName"></cell>
+ <cell title="银行账号" :value="info.cardNo"></cell>
+ <cell title="账号类型" :value="info.cardTypeName"></cell>
+ <cell title="开户行行号" v-if="info.cardType ==='pu'" :value="info.bankNo"></cell>
+ </group>
+
+ <f-space></f-space>
+
+ <!-- 图片反显 -->
+ <section class="img-box">
+ <h4>营业执照照片</h4>
+ <div class="img-item" v-for="(item, index) in info.licencePhotos" :key="index"
+ :style="item.fileUrl | generate">
+ </div>
+ </section>
+ <section class="img-box">
+ <h4>法人身份证正反面照片</h4>
+ <div class="img-item" v-for="(item, index) in info.legalCardPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>房产证或租赁合同</h4>
+ <div class="img-item" v-for="(item, index) in info.houseContractPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>外景照、门头照片、前台照、内景照</h4>
+ <div class="img-item" v-for="(item, index) in info.storePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>套餐活动清单、终端商品定价清单</h4>
+ <div class="img-item" v-for="(item, index) in info.mealBillPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>运营商授权文件</h4>
+ <div class="img-item" v-for="(item, index) in info.accreditFilePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <f-button fixed @on-click="submit">保存</f-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XSwitch
+ } from 'vux';
+
+ export default {
+ name: "xyg_info",
+ components: {
+ XSwitch
+ },
+ data() {
+ return {
+ status: true,
+ info: {},
+ productInfo: {}
+ }
+ },
+ filters: {
+ generate(path) {
+ return {
+ 'background-image': `url(${path})`
+ }
+ },
+ parseDate(v = '') {
+ if (v) {
+ return v.slice(0, 4) + '-' + v.slice(4, 6) + '-' + v.slice(-2);
+ } else {
+ return '暂无';
+ }
+ }
+ },
+ created() {
+ this.init();
+ },
+ methods: {
+ init() {
+ this.$api.prodRefInit(this.$route.query).then(res => {
+ this.productInfo = res.body;
+ this.status = !!this.productInfo.status;
+ });
+ // 获取商户信息反显
+ this.$api.getXygMerInfo(this.$route.query.orgId).then(res => {
+ this.info = res.body;
+ })
+ },
+ // 保存
+ submit() {
+ this.$api.prodSaveRef({
+ ...this.$route.query,
+ prodSkDtlInfoList: this.productInfo.prodSkDtlInfoList,
+ status: this.status ? 1 : 0
+ }).then(() => {
+ this.$notify('保存成功');
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less">
+ .zxh-set-box {
+ padding-bottom: 60px;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .img-box {
+ padding: 0 12px;
+ background-color: #fff;
+ margin-bottom: 20px;
+
+ h4 {
+ font-weight: normal;
+ font-size: 15px;
+ line-height: 40px;
+ }
+
+ .img-item {
+ display: inline-block;
+ height: 100px;
+ width: 100px;
+ margin: 0 10px 10px 0;
+ border: 1Px dashed #d9d9d9;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ }
+ }
+ }
+</style>
diff --git a/src/views/old/store/xyg/upload.vue b/src/views/old/store/xyg/upload.vue
new file mode 100644
index 0000000..4563382
--- /dev/null
+++ b/src/views/old/store/xyg/upload.vue
@@ -0,0 +1,498 @@
+<!--
+ * @Descripttion: 上传合约凭证
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-08 09:16:44
+ * @LastEditTime: 2019-09-03 09:25:14
+ -->
+<template>
+ <div class="zxh-upload-box h-100-g">
+ <x-header :left-options="{'backText': ''}" title="上传合约凭证" class="gradient-color"></x-header>
+ <div class="up-div">
+ <p>合约办理凭证截图</p>
+ <van-uploader :after-read="afterRead">
+ <div class="upload-div">
+ <img :src="pic" alt v-if="pic" />
+ <i class="iconfont iconzhaoxiang" v-else></i>
+ </div>
+ </van-uploader>
+ <p>合约手机号</p>
+ <Ipt v-model="form.contMblNo" :max="11" :placeholder="'请输入手机号'" :type="'text'"></Ipt>
+ </div>
+ <button class="btn" @click="submit">提交</button>
+ <!-- <div class="content" v-for="(item, index) in fileTypeArr" :key="index">
+ <h4 class="title">
+ <span>{{item.name}}</span>
+ <div @click="changeShowselect(item)">
+ <i class="iconfont scene_Staging-xiangji"></i>
+ <input ref="photo" type="file" accept="image/*" @change="getFile($event.currentTarget,item.code)">
+ <input ref="picture" type="file" accept="image/*" capture="camera"
+ @change="getFile($event.currentTarget,item.code)">
+ </div>
+ </h4>
+ <ul class="upload">
+ <li class="upload-item" v-for="(item, index) in item.fileIds" :key="index"
+ :style="{'background-image':`url(${item.fileUrl})`}">
+ <i class="iconfont scene_Staging-shibai1" @click="deleteImgItem(index)"></i>
+ </li>
+ </ul>
+ </div>
+ <group>
+ <x-input title="手机号" v-model="form.contMblNo" placeholder="请输入" text-align="right" :max="11"></x-input>
+ </group>
+ <f-button @on-click="submit()">提交</f-button>
+
+
+ <van-action-sheet v-model="showSelect" :close-on-click-overlay="false" cancel-text="取消" :actions="nav"
+ @select="handleSelect">
+ </van-action-sheet> -->
+ </div>
+</template>
+
+<script>
+import { compress } from "@/utils/index";
+import { Actionsheet } from "vux";
+import Vue from "vue";
+import { Uploader } from "vant";
+import Ipt from "../../../../components/common/h-ipt";
+Vue.use(Uploader);
+export default {
+ name: "xyg_upload",
+ data() {
+ return {
+ pic: "",
+ showSelect: false,
+ nav: [
+ {
+ name: "拍照"
+ },
+ {
+ name: "从手机相册选择"
+ }
+ ],
+ form: {
+ orderId: "",
+ contMblNo: "",
+ fileIds: []
+ },
+ fileTypeArr: [],
+ currentItem: {}
+ };
+ },
+ components: {
+ Actionsheet,
+ Ipt
+ },
+ props: ["orderId"],
+ created() {
+ this.form.orderId = this.orderId;
+ this.$api.h_getXygFileType().then(res => {
+ let list = res.body || [];
+ this.fileTypeArr = list.map(item => {
+ return {
+ ...item,
+ fileIds: []
+ };
+ });
+ console.log(this.fileTypeArr)
+ });
+ },
+ methods: {
+ uploadSectionFile(f, t) {
+ // 图片上传
+ let self = this;
+ let Orientation;
+ let ndata;
+ let pic;
+ if (t.size <= 1 * 1024 * 1024) {
+ console.log("未压缩");
+ //判断图片是否小于1M,是就直接上传
+ ndata = f;
+ self.postImg(ndata);
+ } else {
+ //反之压缩图片
+ //BASE64转图片
+ var arr = f.split(","),
+ mime = arr[0].match(/:(.*?);/)[1],
+ bstr = atob(arr[1]),
+ n = bstr.length,
+ u8arr = new Uint8Array(n);
+ while (n--) {
+ u8arr[n] = bstr.charCodeAt(n);
+ }
+ pic = new File([u8arr], t.name, { type: mime });
+ let reader = new FileReader();
+ // 将图片将转成 base64 格式
+ reader.readAsDataURL(pic);
+ // 读取成功后的回调
+ reader.onloadend = function() {
+ let result = this.result;
+ //let result = f;
+ let img = new Image();
+ img.src = result;
+ img.onload = function() {
+ let data = self.compress(img, Orientation);
+ self.headerImage = data;
+ ndata = self.compress(img, Orientation);
+ //console.log('111',self.headerImage)
+ self.postImg(ndata);
+ };
+ };
+ }
+ },
+
+ async postImg(ndata) {
+ let self = this;
+ var FileUpload = function(ndata) {
+ //console.log(index)
+ self.$api
+ .uploadFile({
+ fileType:6304,
+ base64Data: ndata.split(",")[1], // 文件base64
+ suffix: ndata
+ .split(",")[0]
+ .split(";")
+ ["0"].split("/")[1]
+ })
+ .then(res => {
+ console.log("res", res.body);
+ console.log("self.fileTypeAr", self.fileTypeAr);
+ self.pic = ndata
+ //self.currentItem.fileIds.push(res.body)
+ //self.fileTypeArr.fileIds.push(res.body)
+ if(self.form.fileIds.length<1){
+ self.form.fileIds.push(res.body.id)
+ }else{
+ self.form.fileIds.shift()
+ self.form.fileIds.push(res.body.id)
+ }
+ });
+ };
+ await FileUpload(ndata);
+ },
+ compress(img, Orientation) {
+ let canvas = document.createElement("canvas");
+ let ctx = canvas.getContext("2d");
+ //瓦片canvas
+ let tCanvas = document.createElement("canvas");
+ let tctx = tCanvas.getContext("2d");
+ let initSize = img.src.length;
+ let width = img.width;
+ let height = img.height;
+ //如果图片大于四百万像素,计算压缩比并将大小压至400万以下
+ let ratio;
+ if ((ratio = (width * height) / 4000000) > 1) {
+ console.log("大于400万像素");
+ ratio = Math.sqrt(ratio);
+ width /= ratio;
+ height /= ratio;
+ } else {
+ ratio = 1;
+ }
+ canvas.width = width;
+ canvas.height = height;
+ // 铺底色
+ ctx.fillStyle = "#fff";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ //如果图片像素大于100万则使用瓦片绘制
+ let count;
+ if ((count = (width * height) / 1000000) > 1) {
+ console.log("超过100W像素");
+ count = ~~(Math.sqrt(count) + 1); //计算要分成多少块瓦片
+ // 计算每块瓦片的宽和高
+ let nw = ~~(width / count);
+ let nh = ~~(height / count);
+ tCanvas.width = nw;
+ tCanvas.height = nh;
+ for (let i = 0; i < count; i++) {
+ for (let j = 0; j < count; j++) {
+ tctx.drawImage(
+ img,
+ i * nw * ratio,
+ j * nh * ratio,
+ nw * ratio,
+ nh * ratio,
+ 0,
+ 0,
+ nw,
+ nh
+ );
+ ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);
+ }
+ }
+ } else {
+ ctx.drawImage(img, 0, 0, width, height);
+ }
+ //修复ios上传图片的时候 被旋转的问题
+ if (Orientation != "" && Orientation != 1) {
+ switch (Orientation) {
+ case 6: //需要顺时针(向左)90度旋转
+ this.rotateImg(img, "left", canvas);
+ break;
+ case 8: //需要逆时针(向右)90度旋转
+ this.rotateImg(img, "right", canvas);
+ break;
+ case 3: //需要180度旋转
+ this.rotateImg(img, "right", canvas); //转两次
+ this.rotateImg(img, "right", canvas);
+ break;
+ }
+ }
+ //进行最小压缩
+ let ndata = canvas.toDataURL("image/jpeg", 0.1);
+
+ //console.log("压缩前:" + initSize);
+ //console.log("压缩后:" + ndata.length);
+ //console.log("ndata:" + ndata);
+
+ console.log(
+ "压缩率:" + ~~((100 * (initSize - ndata.length)) / initSize) + "%"
+ );
+ tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;
+
+ return ndata;
+ },
+ afterRead(file) {
+ this.uploadSectionFile(file.content, file.file)
+ },
+ changeShowselect(item) {
+ if (item.fileIds.length) {
+ this.$tool.toast(`最多上传一张照片~`);
+ return;
+ }
+ this.showSelect = true;
+ this.currentItem = item;
+ },
+ imgCompress(path, options = {}) {
+ return new Promise((resolve, reject) => {
+ let img = new Image();
+ img.src = path;
+ img.onload = function() {
+ let that = this,
+ w = that.width,
+ h = that.height,
+ scale = w / h, // 默认按比例压缩
+ quality = options.quality || 0.92,
+ canvas = document.createElement("canvas"),
+ ctx = canvas.getContext("2d");
+
+ w = options.width || w;
+ h = options.height || w / scale;
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(that, 0, 0, w, h);
+ if (options.quality && options.quality <= 1 && options.quality > 0) {
+ quality = options.quality;
+ }
+ let base64 = canvas.toDataURL("image/jpeg", quality);
+ resolve(base64);
+ };
+ });
+ },
+ handleSelect(item, index) {
+ if (index === 0) {
+ this.$refs["picture"][0].click();
+ } else {
+ this.$refs["photo"][0].click();
+ }
+ this.showSelect = false;
+ },
+ // 删除图片
+ deleteImgItem(index) {
+ this.currentItem.fileIds.splice(index, 1);
+ },
+ // 获取base64
+ getFile(el, fileType) {
+ let file = el.files[0];
+ if (typeof file === "undefined") return;
+ let reader = new FileReader(),
+ that = this;
+ reader.readAsDataURL(file);
+ reader.onload = function() {
+ that.imgCompress(this.result).then(base64 => {
+ that.upload(base64.split(",")[1], file.type.split("/")[1], fileType);
+ });
+ };
+ },
+ //上传文件
+ upload(base64, suffix, fileType) {
+ let params = {
+ fileType,
+ suffix,
+ base64Data: base64
+ };
+ console.log(fileType)
+ this.$api.uploadFile(params).then(res => {
+ this.currentItem.fileIds.push(res.body);
+ });
+ },
+ // 提交保存
+ submit() {
+ let form = this.form,
+ tel = form.contMblNo;
+
+ let len = this.fileTypeArr.length;
+ console.log(this.fileTypeArr)
+ // for (let index = 0; index < len; index++) {
+ // const item = this.fileTypeArr[index];
+ // if (item.fileIds.length === 0) {
+ // this.$tool.toast(`请上传${item.name}`);
+ // return;
+ // }
+ // }
+ if(form.fileIds.length<1){
+ this.$tool.toast(`请上传合约凭证截图`)
+ return
+ }
+ if (tel.length === 0) {
+ this.$tool.toast("请输入电话号码");
+ return;
+ }
+
+ if (!this.$tool.checkPhone(tel)) {
+ this.$tool.toast("请输入正确的电话号码");
+ return;
+ }
+ let params = {
+ orderId: form.orderId,
+ contMblNo: tel,
+ fileIds: this.form.fileIds
+ };
+
+ // let fileIds = [];
+
+ // for (let k = 0; k < len; k++) {
+ // const item = this.fileTypeArr[k];
+ // let arr = item.fileIds;
+ // arr.forEach(child => {
+ // fileIds.push(child.id);
+ // });
+ // // fileIds.push(...item.fileIds);
+ // }
+
+ //params.fileIds = fileIds;
+ this.$api.h_uploadXygProtocol(params).then(res => {
+ this.$tool.toast("提交成功");
+ this.$router.go(-1);
+ });
+ }
+ }
+};
+</script>
+
+<style lang="less" scoped>
+.zxh-upload-box {
+ padding-top: 56px;
+ background-color: #f1f1f1;
+ .up-div {
+ width: 100%;
+ height: 250px;
+ background: rgba(255, 255, 255, 1);
+ box-shadow: 1px 5px 13px 0px rgba(0, 0, 0, 0.08);
+ padding: 20px;
+ box-sizing: border-box;
+ p:nth-of-type(1) {
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ margin-bottom: 10px;
+ }
+ .upload-div {
+ width: 100px;
+ height: 100px;
+ background: rgba(249, 250, 255, 1);
+ border: 1px dashed rgba(205, 211, 246, 1);
+ border-radius: 4px;
+ text-align: center;
+ line-height: 100px;
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ i {
+ font-size: 30px;
+ color: #8365e1;
+ }
+ }
+ p:nth-of-type(2) {
+ margin: 16px 0 10px 0;
+ font-size: 13px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
+ }
+ }
+ .btn {
+ width: 88%;
+ height: 44px;
+ background: rgba(137, 110, 219, 1);
+ border-radius: 22px;
+ color: white;
+ outline: none;
+ border: 0;
+ margin-left: 6%;
+ margin-top: 37px;
+ }
+}
+
+.content {
+ margin-bottom: 10px;
+ padding-bottom: 12px;
+ background-color: @color-white;
+
+ .title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 12px;
+ height: 49px;
+ line-height: 49px;
+ font-size: @font-size-base;
+ font-weight: @font-weight-base;
+
+ input {
+ display: none;
+ }
+ }
+}
+
+.upload {
+ margin: 5px 12px 0;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+
+ .upload-item {
+ margin-right: 12px;
+ width: 109px;
+ height: 109px;
+ position: relative;
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ margin-bottom: 12px;
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+
+ .iconfont {
+ position: absolute;
+ right: 3px;
+ top: 0;
+ }
+ }
+}
+
+#file {
+ display: none;
+}
+
+.scene_Staging-xiangji {
+ fill: @color-border-theme;
+ color: @color-border-theme;
+ font-size: 20px;
+}
+</style>
diff --git a/src/views/old/store/xyg/xyg-mation.vue b/src/views/old/store/xyg/xyg-mation.vue
new file mode 100644
index 0000000..d3dd58d
--- /dev/null
+++ b/src/views/old/store/xyg/xyg-mation.vue
@@ -0,0 +1,318 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 10:25:57
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-28 10:28:58
+ * @Description:
+ -->
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-21 17:19:32
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-11-04 17:28:32
+ * @Description:
+ -->
+<template>
+ <div class="hbhy-big-box">
+ <!-- <van-nav-bar title="办理套餐" left-arrow @click-left="onClickLeft" /> -->
+ <!-- <x-header title="办理套餐" :left-options="{backText:''}"></x-header> -->
+ <v-navbar title="办理套餐" fixed></v-navbar>
+ <div class="color-box"></div>
+ <div class="package-information">
+ <div class="tit">
+ <p>套餐信息</p>
+ </div>
+ <div class="package-tariff">
+ <van-field
+ class="myStyle"
+ disabled
+ custom-style="color:#333333"
+ v-model="query.packageTariff"
+ label="套餐资费"
+ placeholder="请输入套餐资费"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="total-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.totalRepayment"
+ label="总还款额"
+ placeholder="请输入总还款额"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="monthly-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.monthlyRepayment"
+ label="每月还款"
+ placeholder="请输入每月还款"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="trim">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.trim"
+ label="还款期数"
+ placeholder="请输入还款期数"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="merchant-arrival">
+ <van-field
+ disabled
+ v-model="query.merchantArrival"
+ label="商户到账"
+ placeholder="请输入商户到账"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ </div>
+ <div class="btn-grounp">
+ <button @click="goHbPage">花呗分期</button>
+ <button @click="goCxPage">储蓄卡分期</button>
+ </div>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Field } from "vant";
+import { Button } from "vant";
+import { Notify } from "vant";
+
+Vue.use(Notify);
+Vue.use(Button);
+Vue.use(Field);
+Vue.use(NavBar);
+export default {
+ data() {
+ return {
+ query: {
+ merchantArrival: "", //商户到账
+ trim: "", //分期期数
+ monthlyRepayment: "", //每月还款
+ totalRepayment: "", //总还款额
+ packageTariff: "", //套餐资费
+ contId: "", //套餐id
+ contName: "" //套餐名称
+ },
+ userName: "", //用户名
+ userNumber: "", //用户手机号
+ tradeName: "", //商品名称
+ contMblNo:"",//合约手机号
+ idNo:""//身份证号
+ };
+ },
+ mounted() {
+ this.query = this.$route.query;
+ console.log(this.query);
+ },
+ methods: {
+ goCxPage(){
+ this.$route.push({
+ path:"/xyg/list",
+ query:this.query
+ })
+ },
+ goHbPage(){
+ this.$route.push({
+ path:"/xyg/list",
+ query:this.query
+ })
+ },
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ createdQRCode() {
+ if (
+ this.userName == "" ||
+ this.userNumber == "" ||
+ this.tradeName == "" ||
+ this.contMblNo == "" ||
+ this.idNo == ""
+ ) {
+ Notify({ type: "primary", message: "姓名、入网号码、合约号码、身份证号、商品名称不能为空" });
+ return;
+ }
+ let params = {
+ contId: this.query.contId,
+ goodsName: this.tradeName,
+ userName: this.userName,
+ userMblNo: this.userNumber,
+ contMblNo:this.contMblNo,
+ idNo:this.idNo
+ };
+ this.$api.hbhyjCreate(params).then(res => {
+ let body = res.body;
+ this.orderId = body.orderId;
+ this.payQrCodeUrl = body.payQrCodeUrl;
+ this.totalAmount = body.totalAmount;
+ // this.trial.repayPerMonth = body.repayPerMonth;
+ // this.trial.feeRate = body.feeRate;
+ this.showConfirm = true;
+ if (body.payQrCodeUrl) {
+ sessionStorage.setItem("hbpayQrCodeUrl", body.payQrCodeUrl);
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: {
+ orderId: body.orderId,
+ payQrCodeUrl: body.payQrCodeUrl,
+ totalAmount: body.totalAmount,
+ term: this.query.trim,
+ typeId: this.query.typeId || ""
+ }
+ });
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbhy-big-box {
+ & {
+ position: relative;
+ background-color: #f5f5f5;
+ height: auto;
+ padding-bottom: 20px;
+ min-height: 100vh;
+ }
+ .color-box {
+ width: 100%;
+ height: 260px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 128, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .user-information {
+ & {
+ position: absolute;
+ width: 90%;
+ height: 220px;
+ background-color: white;
+ left: 5%;
+ top: 98px;
+ border-radius: 6px;
+ }
+ div {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+ .package-information {
+ & {
+ width: 94%;
+ height: 302px;
+ background-color: white;
+ margin: auto;
+ margin-top: -150px;
+ border-radius:6px;
+ }
+ div:not(:last-child) {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ /deep/ .van-field__control:disabled {
+ //color: #333333;
+ -webkit-text-fill-color: #333333!important;
+ background-color: transparent;
+ opacity: 1;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+ .btn-grounp{
+ margin-top: 40px;
+ color: #fff;
+ text-align: center;
+ button:nth-of-type(1){
+ width:160px;
+ height:44px;
+ background:rgba(137,110,219,1);
+ border-radius:22px;
+ outline: none;
+ border: 0;
+ margin-right: 12px;
+ }
+ button:nth-of-type(2){
+ width:160px;
+ height:44px;
+ background:rgba(81,74,120,1);
+ border-radius:22px;
+ outline: none;
+ border: 0;
+ }
+ }
+}
+
+</style>
diff --git a/src/views/old/store/xyg/xygHb.vue b/src/views/old/store/xyg/xygHb.vue
new file mode 100644
index 0000000..8f7e597
--- /dev/null
+++ b/src/views/old/store/xyg/xygHb.vue
@@ -0,0 +1,419 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 12:38:43
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 10:54:46
+ * @Description: 信用购花呗办理套餐页面
+ -->
+<template>
+ <div class="hbhy-big-box">
+ <!-- <van-nav-bar title="办理套餐" left-arrow @click-left="onClickLeft" /> -->
+ <!-- <x-header title="办理套餐" :left-options="{backText:''}"></x-header> -->
+ <v-navbar title="办理套餐" fixed></v-navbar>
+ <div class="color-box"></div>
+ <div class="user-information">
+ <div class="tit">
+ <p>用户信息</p>
+ </div>
+ <div class="user-cont">
+ <van-field
+ v-model="contMblNo"
+ maxlength="11"
+ label="合约号码"
+ placeholder="请输入用户合约号码"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="user-name">
+ <van-field
+ v-model="userName"
+ label="用户姓名"
+ placeholder="请输入用户姓名"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="user-idno">
+ <van-field
+ v-model="idNo"
+ maxlength="18"
+ label="身份证号"
+ placeholder="请输入用户身份证号"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="user-number">
+ <van-field
+ v-model="tradeName"
+ label="商品名称"
+ placeholder="请输入商品名称"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ </div>
+ <div class="package-information">
+ <div class="tit">
+ <p>套餐信息</p>
+ </div>
+ <div class="package-tariff">
+ <van-field
+ class="myStyle"
+ disabled
+ custom-style="color:#333333"
+ v-model="query.packagePrices"
+ label="套餐资费"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="total-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.totalPayments"
+ label="总还款额"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="monthly-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.retFee"
+ label="每月还款"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="trim">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.term"
+ label="还款期数"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="merchant-arrival">
+ <van-field
+ disabled
+ v-model="query.prodAmt"
+ label="结算金额"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ <van-field
+ disabled
+ v-model="platRatePr"
+ label="智享服务费率"
+ label-width="150px"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ <van-field
+ disabled
+ v-model="zfbRatePr"
+ label="花呗分期手续费率"
+ label-width="150px"
+ placeholder="请输入"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ </div>
+ <van-button
+ round
+ type="default"
+ color="#896EDB"
+ style="margin-left:10%;margin-top:125px;width:80%;background:#896EDB;color:#fff"
+ @click="createdQRCode"
+ >生成二维码</van-button>
+ <Vdialog @cancel="cancel" :show="showDia"></Vdialog>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Field } from "vant";
+import { Button } from "vant";
+import { Notify } from "vant";
+import Vdialog from "@/components/common/v-dialog.vue";
+
+Vue.use(Notify);
+Vue.use(Button);
+Vue.use(Field);
+Vue.use(NavBar);
+export default {
+ components:{
+ Vdialog
+ },
+ data() {
+ return {
+ showDia:false,
+ query: {
+ platRate:'',
+ zfbRate:'',
+ prodAmt: "", //结算金额
+ term: "", //分期期数
+ retFee: "", //月还款
+ totalPayments: "", //总还款额
+ packagePrices: "", //套餐资费
+ // contId: "", //套餐id
+ // contName: "" //套餐名称
+ },
+ mblNo:'',//
+ userName: "", //用户名
+ //userNumber: "", //用户入网号码
+ tradeName: "", //商品名称
+ contMblNo:"",//合约手机号
+ idNo:"",//身份证号
+ //prodName:'',//商品名称
+ };
+ },
+ computed:{
+ zfbRatePr(){
+ if(this.query.zfbRate){
+ return this.query.zfbRate + '%'
+ }else{
+ return ''
+ }
+
+ },
+ platRatePr(){
+ if(this.query.platRate){
+ return this.query.platRate + '%'
+ }else{
+ return ''
+ }
+
+ }
+ },
+ created(){
+ if(sessionStorage.hb_session_info&&this.$route.query.isCreateOrderPush){
+ let hb_session_info = JSON.parse(sessionStorage.hb_session_info)
+ this.tradeName=hb_session_info.goodsName
+ this.userName=hb_session_info.userName
+ this.contMblNo=hb_session_info.contMblNo
+ this.idNo=hb_session_info.idNo
+ }
+ },
+ mounted() {
+ this.query = this.$route.query;
+ this.contMblNo = this.$route.query.mblNo
+ console.log(this.query);
+ },
+ methods: {
+ cancel(val){
+ this.showDia = val
+ },
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ createdQRCode() {
+ if (
+ this.userName == "" ||
+ this.tradeName == "" ||
+ this.contMblNo == "" ||
+ this.idNo == ""
+ ) {
+ Notify({ type: "primary", message: "姓名、合约号码、身份证号、商品名称不能为空" });
+ return;
+ }
+ // 用来整体存储缓存数据
+ let hb_session_info = {
+ goodsName: this.tradeName,
+ userName: this.userName,
+ contMblNo:this.contMblNo,
+ idNo:this.idNo,
+ }
+ sessionStorage.hb_session_info = JSON.stringify(hb_session_info)
+
+ let params = {
+ //contId:this.query.contId,
+ goodsName: this.tradeName,
+ userName: this.userName,
+ contMblNo:this.contMblNo,
+ idNo:this.idNo,
+ seq:this.query.seq,
+ term:this.query.term,
+ capitalAmt:this.query.prodAmt,
+ zfbVersion: this.$route.query.zfbVersion
+ };
+ this.$api.xygOrderCreateHbOrder(params).then(res => {
+ let body = res.body;
+ this.orderId = body.orderId;
+ this.payQrCodeUrl = body.payQrCodeUrl;
+ this.totalAmount = body.totalAmount;
+ this.capitalAmt = body.capitalAmt
+ // this.trial.repayPerMonth = body.repayPerMonth;
+ // this.trial.feeRate = body.feeRate;
+ this.showConfirm = true;
+ if (body.payQrCodeUrl) {
+ sessionStorage.setItem("xygHbpayQrCodeUrl", body.payQrCodeUrl);
+ }
+ this.$router.push({
+ path: "/xyg-getXygHbQRCode",
+ query: {
+ orderId: body.orderId,
+ payQrCodeUrl: body.payQrCodeUrl,
+ totalAmount: body.totalAmount,
+ term: this.query.term,
+ typeId: this.query.typeId || "",
+ platRate: this.query.platRate,
+ zfbRate: this.query.zfbRate,
+ capitalAmt:this.capitalAmt
+ }
+ });
+ },err=>{
+ if(err.errorCode===30006007){
+ this.showDia = true
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbhy-big-box {
+ & {
+ position: relative;
+ background-color: #f5f5f5;
+ height: auto;
+ padding-bottom: 60px;
+ min-height: 100vh;
+ }
+ .color-box {
+ width: 100%;
+ height: 260px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 128, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .user-information {
+ & {
+ position: absolute;
+ width: 94%;
+ height: 220px;
+ background-color: white;
+ left: 3%;
+ top: 98px;
+ border-radius: 6px;
+ }
+ div {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+ .package-information {
+ & {
+ width: 94%;
+ height: 302px;
+ background-color: white;
+ margin: auto;
+ margin-top: 100px;
+ border-radius:6px;
+ }
+ div:not(:last-child) {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ /deep/ .van-field__control:disabled {
+ //color: #333333;
+ -webkit-text-fill-color: #333333!important;
+ background-color: transparent;
+ opacity: 1;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+}
+</style>
+
diff --git a/src/views/old/store/xyg/xygList.vue b/src/views/old/store/xyg/xygList.vue
new file mode 100644
index 0000000..3e556bf
--- /dev/null
+++ b/src/views/old/store/xyg/xygList.vue
@@ -0,0 +1,557 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-12-26 10:37:53
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-13 17:07:22
+ * @Description:
+ -->
+<template>
+ <div class="order-hb-box h-100-g">
+ <van-nav-bar title="运营商消费">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size:18px;color:#fff;font-weight:blod" @click="goFrom"></i>
+ </van-nav-bar>
+ <div class="top-back">
+ <div class="big-cri">
+
+ </div>
+ <div class="small-cri">
+
+ </div>
+ <!-- <div class="btn-grounp">
+ <span class="btn-hb" ref="hb" @click="showHb">花呗分期</span>
+ <span class="btn-cx" ref="cx" @click="showCx">储蓄卡分期</span>
+ <span class="squer" ref="sqe"></span>
+ </div> -->
+ </div>
+ <div v-if="list.length > 0" class="list-box">
+ <MyList :defScroll="10" :finished="finished" :loading="loading" @scroll="init">
+ <div class="list-div" v-for="(item,i) in list" :key="i" @click="goHandle(item)">
+ <p class="list-top">
+ <i class="iconfont iconshanghuzhuce"></i>
+ <span>{{item.mblNo}}</span>
+ <span v-if="item.creTime">{{item.creTime | timeformat('yyyy-MM-dd HH:mm:ss')}}</span>
+ </p>
+ <div class="list-left">
+ <p>{{item.prodAmt}}</p>
+ <p>结算金额(元)</p>
+ </div>
+ <div class="list-right">
+ <p>{{item.term}}</p>
+ <p>分期期数(月)</p>
+ </div>
+ </div>
+ </MyList>
+ </div>
+ <div v-else class="nothing-div">
+ <img class="nothing-pic" src="../../../../assets/img/xygpic.png" alt="暂无信用购数据">
+ <p class="nothing-text">暂无订单</p>
+ </div>
+ <van-popup v-model="show" closeable :style="{ width: '280px' }">
+ <template>
+ <div class="pro-div">
+ <p>录入营业员编码</p>
+ <p>该编号为营业员的移动工号,请确保准确无误,否则将无法为用户办理信用购业务。</p>
+ <input type="text" placeholder="请输入营业员编码" v-model="iptObj.empCode">
+ <input type="text" placeholder="请输入营业厅编码" v-model="iptObj.orgBizCode">
+ <button @click="bindInfo">确定</button>
+ </div>
+ </template>
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import MyList from "../../../../components/common/h-list"
+import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+import {
+ getParams
+ } from '@/utils/index';
+import { Popup } from 'vant';
+import { Toast } from 'vant';
+
+Vue.use(Toast);
+Vue.use(Popup);
+export default {
+ components:{
+ MyList
+ },
+ data() {
+ return {
+ iptObj:{
+ empCode: "",
+ orgBizCode: ""
+ },//弹出层输入框值
+ getWhichList:30000012,//判断获取花呗还是储蓄卡列表
+ show:false,//弹出层控制
+ goIdList:[],//判断跳转页面
+ lastId:'',//分页最后一笔订单ID
+ loading: false,
+ finished: false,
+ list: [],
+ typeId:'',
+ prodId:'',
+ mblNo:'',
+ prodAmt:"",
+ seq:"",
+ prodName:'',
+ monthlyFees:'',
+ }
+ },
+ created(){
+ this.typeId = this.$route.query.typeId
+ this.getCkeck()
+ //this.init()
+ },
+ methods:{
+ bindInfo(){
+ this.$api.xygOrderBindInfo(this.iptObj).then(res=>{
+ this.show = false
+ this.init()
+ })
+ },//绑定信息
+
+ getCkeck(){
+ this.$api.xygOrderCheckInfo().then(res=>{
+ if(res.body.isbind == 1){
+ this.init()
+ }else{
+ this.show = true
+ }
+ })
+ },//初始化获取 是否有绑定信息 有显示列表,没有显示绑定信息的弹出层
+
+ showCx(){
+ this.$refs.sqe.style["transform"] = `translateX(100%)`
+ this.$refs.sqe.style["transition"] = `0.5s`
+ this.$refs.hb.style['color'] = `#fff`
+ this.$refs.cx.style['color'] = `#5C4CD0`
+ this.getWhichList = 30000011
+ this.list=[]
+ this.init()
+ },//tab切换储蓄卡
+
+ showHb(){
+ this.$refs.sqe.style["transform"] = `translateX(0%)`
+ this.$refs.sqe.style["transition"] = `0.5s`
+ this.$refs.hb.style['color'] = `#5C4CD0`
+ this.$refs.cx.style['color'] = `#fff`
+ this.getWhichList = 30000012
+ this.list=[]
+ this.init()
+ },//tab切换花呗分期
+
+ // 返回上一页
+ goFrom(){
+ this.$router.go(-1)
+ },
+ // 跳转办单
+ goHandle(item){
+ this.prodId = item.prodId
+ this.mblNo = item.mblNo
+ this.prodAmt = item.prodAmt
+ this.seq = item.seq
+ this.prodName = item.prodName
+ if(item.hasCont == 0){
+ Toast('您暂不具有该合约,请分配以后重试');
+ return
+ }
+
+ var path
+ if(this.getWhichList==30000011 && item.isUse == 1){
+ path = '/xyg/createcode'
+ }else if(this.getWhichList==30000011 && item.isUse == 0){
+ Toast('暂未开通');
+ return
+ }
+
+ if(this.getWhichList==30000012 && item.isUse == 1){
+ path = '/xyg/xygHb'
+ }else if(this.getWhichList==30000012 && item.isUse == 0){
+ Toast('暂未开通');
+ return
+ }
+
+ console.log(path)
+ this.$router.push({
+ path:path,
+ query:{
+ // contId:item.contId,
+ prodId:this.prodId,
+ mblNo:this.mblNo,
+ prodAmt:this.prodAmt,
+ seq: this.seq,
+ prodName:this.prodName,
+ term:item.term,
+ typeId:this.typeId,
+ monthlyFees:item.monthlyFees,
+ totalPayments:item.totalPayments,
+ retFee:item.retFee,
+ packagePrices:item.packagePrices,
+ platRate:item.platRate,
+ zfbRate:item.zfbRate,
+ zfbVersion: this.$route.query.zfbVersion
+ }
+ })
+ },
+ //获取订单列表
+ init() {
+ if(this.list.length>0){
+ this.lastId = this.list[this.list.length-1].id
+ }
+ this.$api.getunhandingList({
+ prodId:this.getWhichList,
+ id:this.lastId
+ }).then(res=>{
+ this.goIdList = res.body.prodIds
+ if(res.body.orderItemInfos.length<10){
+ this.loading = false
+ this.finished = true
+ this.list = [...this.list,...res.body.orderItemInfos]
+ }else{
+ this.loading = false
+ this.finished = false
+ this.list = [...this.list,...res.body.orderItemInfos]
+ }
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ }
+}
+</script>
+<style lang="less" scoped>
+
+.order-hb-box {
+ background-color:#fff;
+ position: relative;
+ }
+ .van-hairline--bottom::after {
+ border: 0;
+ }
+ .van-nav-bar {
+ background-color: rgba(255,255,255,0);
+ }
+ .van-nav-bar__title {
+ max-width: 60%;
+ margin: 0 auto;
+ color: #fff;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ .pro-div{
+ &{
+ padding: 30px 20px 16px 20px;
+ text-align: center;
+ }
+ p:nth-of-type(1){
+ font-size:16px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(0,0,0,1);
+ text-align: center;
+ margin-bottom: 12px;
+ }
+ p:nth-of-type(2){
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(153,153,153,1);
+ margin-bottom: 23px;
+ }
+ input{
+ width:244px;
+ height:36px;
+ background:rgba(255,255,255,1);
+ border:1px solid rgba(230,230,230,1);
+ border-radius:18px;
+ padding-left: 21px;
+ box-sizing: border-box;
+ margin-bottom: 31px;
+ }
+ button{
+ width:175px;
+ height:36px;
+ background:rgba(137,110,219,1);
+ border-radius:18px;
+ color:#fff;
+ border: 0;
+ outline: none;
+ }
+ }
+ .top-back{
+ width:100%;
+ height:130px;
+ background:linear-gradient(180deg,rgba(137,110,219,1),rgba(90,74,207,1));
+ position: relative;
+ overflow: hidden;
+ top: -46px;
+ .big-cri{
+ width:92px;
+ height:92px;
+ background:rgba(255,255,255,1);
+ opacity:0.1;
+ border-radius:50%;
+ position: absolute;
+ top: -13px;
+ right: -46px;
+ }
+ .small-cri{
+ width:55px;
+ height:55px;
+ background:rgba(255,255,255,1);
+ opacity:0.05;
+ border-radius:50%;
+ position: absolute;
+ top: 49px;
+ left: 7px;
+ }
+ .btn-grounp{
+ width:94%;
+ margin-left: 3%;
+ margin-top: 55px;
+ height:36px;
+ background:rgba(138,117,220,1);
+ border-radius:18px;
+ position: relative;
+ text-align: center;
+ line-height: 36px;
+ .squer{
+ display: inline-block;
+ width:50%;
+ height:36px;
+ background:rgba(255,255,255,1);
+ border-radius:18px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ }
+ .btn-hb{
+ position: relative;
+ z-index: 100;
+ display: inline-block;
+ outline: none;
+ border: 0;
+ color:#5C4CD0;
+ width:49%;
+ height:36px;
+ border-radius:18px;
+ }
+ .btn-cx{
+ position: relative;
+ z-index: 100;
+ display: inline-block;
+ outline: none;
+ border: 0;
+ color:#fff;
+ width:49%;
+ height:36px;
+ border-radius:18px;
+ }
+ }
+ }
+ .list-box{
+ height: 83vh;
+ width: 100%;
+ overflow: scroll;
+ position: absolute;
+ top: 105px;
+ .list-div{
+ width:94%;
+ height:130px;
+ background:rgba(255,255,255,1);
+ box-shadow:0px 1px 19px 0px rgba(91,55,201,0.16);
+ border-radius:3px;
+ margin-left: 3%;
+ margin-bottom: 15px;
+ box-sizing: border-box;
+ padding: 18px 8px 0 8px;
+ position: relative;
+ .list-top{
+ border-bottom:1px solid #E5E5E5;
+ padding-bottom: 13px;
+ i{
+ font-size: 18px;
+ color: #8365E1;
+ display: inline-block;
+ vertical-align: middle;
+ }
+ span:nth-of-type(1){
+ font-size:16px;
+ font-weight:bold;
+ color:rgba(51,51,51,1);
+ display: inline-block;
+ vertical-align: middle;
+ width: 40%;
+ }
+ span:nth-of-type(2){
+ font-size: 12px;
+ color: #666666;
+ display: inline-block;
+ vertical-align: middle;
+ width: 50%;
+ text-align: right;
+ }
+ }
+ .list-left::after{
+ content: '';
+ width:1px;
+ height:32px;
+ background:rgba(230,230,230,1);
+ position: absolute;
+ top: 73px;
+ left: 49%;
+ }
+ .list-left,.list-right{
+ display: inline-block;
+ width: 49%;
+ padding-top: 19px;
+ text-align: center;
+ p:nth-of-type(1){
+ font-size:18px;
+ font-family:PingFang SC;
+ font-weight:bold;
+ margin-bottom: 7px;
+ color:rgba(51,51,51,1);
+ }
+ p:nth-of-type(2){
+ font-size:12px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(153,153,153,1);
+ }
+ }
+ }
+ }
+ .nothing-div{
+ text-align: center;
+ margin-top: 15vh;
+ .nothing-pic{
+ width: 165px;
+ height: 94px;
+ }
+ .nothing-text{
+ font-size:14px;
+ font-family:PingFang SC;
+ font-weight:500;
+ color:rgba(51,51,51,1);
+ margin-top: 16px;
+ }
+ }
+ .list-box::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ display: none;
+ }
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+ // .xyg-list-box{
+ // min-height: 100vh;
+ // background-color: #F5F5F7;
+ // .order-list {
+ // padding: 0 8px 30px;
+ // .list-item {
+ // width: 98%;
+ // background: #fff;
+ // padding:20px 8px 10px 8px;
+ // box-sizing: border-box;
+ // margin: 10px 1%;
+ // }
+ // .amt-term{
+ // position: relative;
+ // .box::after{
+ // content: "";
+ // position: absolute;
+ // height: 36px;
+ // color: #EBEBEB;
+ // top: 0;
+ // right: 50%;
+ // border-right:1px solid #EBEBEB;
+ // }
+ // div{
+ // display: inline-block;
+ // width: 49%;
+ // text-align: center;
+ // p{
+ // margin-bottom:7px;
+ // }
+ // p:nth-of-type(1){
+ // color: #2B2B2B;
+ // font-size: 18px;
+ // font-weight: bold;
+ // }
+ // p:nth-of-type(2){
+ // color: #989898;
+ // font-size: 12px;
+ // }
+ // }
+ // }
+ // .tel-time{
+ // background-color: #F7F5FB;
+ // height: 40px;
+ // box-sizing: border-box;
+ // padding: 0 5px;
+ // margin-top:10px;
+ // span{
+ // display: inline-block;
+ // line-height: 40px;
+ // width: 49%;
+ // }
+ // span:nth-of-type(1){
+ // font-size: 14px;
+ // color: #848485;
+ // }
+ // span:nth-of-type(2){
+ // text-align: right;
+ // font-size: 12px;
+ // color: #979796;
+ // }
+ // }
+ // }
+ // }
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/zxh/createcode.vue b/src/views/old/store/zxh/createcode.vue
new file mode 100644
index 0000000..e21561d
--- /dev/null
+++ b/src/views/old/store/zxh/createcode.vue
@@ -0,0 +1,258 @@
+<!--
+ * @Descripttion: 智享云生成二维码
+ * @Author:TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-3-1 15:00:00
+ * @LastEditTime: 2019-09-02 11:13:02
+ -->
+<template>
+ <div class="contract-installment-zxh">
+ <x-header title="智享花" :left-options="{backText:''}"></x-header>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 合约信息
+ </div>
+ <selector title='合约套餐' placeholder='请选择' v-model="selectContract" :options='contractList'
+ :value-map="['contId','contName']" @on-change='contractChange' direction='rtl'></selector>
+ <x-input title='结算金额' v-model.trim="selectConInfo.capitalAmt" readonly text-align='right'><span slot="right"
+ style="font-size: 14px;">元</span></x-input>
+ <x-input title='月缴话费' v-model.trim="selectConInfo.monthlyFees" readonly text-align='right'><span
+ slot="right" style="font-size: 14px;">元</span></x-input>
+ <x-input title='期数' v-model.trim="selectConInfo.term" readonly text-align='right'><span slot="right"
+ style="font-size: 14px;">期</span></x-input>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 商品信息
+ </div>
+ <x-input title='品牌' v-model.trim="goodsInfo.goodsBrand" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='名称' v-model.trim="goodsInfo.goodsName" placeholder='请输入' :max='10' text-align='right'>
+ </x-input>
+ <x-input title='型号' v-model.trim="goodsInfo.goodsModel" placeholder='请输入' :max='15' text-align='right'>
+ </x-input>
+ <x-input title='价格' v-model.trim="goodsInfo.goodsPrice" placeholder='请输入' :max='5' text-align='right'>
+ </x-input>
+ <x-input title='IMEI' v-model.trim="goodsInfo.goodsImei" placeholder='请输入' :max='20' text-align='right'>
+ </x-input>
+
+ </group>
+
+ <van-button class="btn" round @click="submit">生成二维码</van-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XAddress
+ } from 'vux';
+ import QRCode from 'qrcode';
+ import IDValidator from '@/utils/IDValidator';
+
+ export default {
+ name: 'heyd_createcode',
+ components: {
+ XAddress
+ },
+ data() {
+ return {
+ cityList: [],
+ selectContract: '', // 选中的合约
+ // 合约信息
+ selectConInfo: {
+ capitalAmt: '', // 结算金额
+ monthlyFees: '', // 月缴话费
+ term: '', // 期数
+ },
+ // 商品信息
+ goodsInfo: {
+ goodsBrand: '', //商品品牌
+ goodsName: '', //商品名称
+ goodsModel: '', // 商品型号
+ goodsPrice: '', // 价格
+ goodsImei: '', // IMEI
+ },
+ contractList: [], // 合约列表
+ }
+ },
+ created() {
+ this.initWXToken(location.origin + location.pathname);
+ this.$api.h_contractList({
+ typeId: this.$route.query.typeId
+ }).then(res => {
+ this.contractList = res.body;
+ }, err => err);
+ this.$api.getArea().then(res => {
+ this.cityList = res.body.provList;
+ });
+ },
+ watch: {
+ },
+ methods: {
+ initWXToken(parUrl) {
+ this.$api.getTokenInfo({
+ url: parUrl
+ }).then(
+ function (res) {
+ if (res.errorCode === 0) {
+ // 第二步骤 只需要首页地址分享 ,需要在每次变化时调用
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+ appId: res.body.appId,
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature, // 必填,签名,见附录1
+ jsApiList: [
+ 'checkJsApi',
+ 'scanQRCode',
+ 'getLocation'
+ ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+ });
+ }
+ },
+ function (error) {
+ if (error.response) {
+ console.log(error.response);
+ }
+ }
+ );
+ },
+ getLocation(){
+ console.log('getLocation');
+ let _this = this;
+ wx.getLocation({
+ type: 'wgs84',
+ success: function (res) {
+ console.log(JSON.stringify(res));
+ let longitude = res.longitude
+ let latitude = res.latitude
+ _this.$api.gpsAddr({
+ gpsAddrLongitude: longitude,
+ gpsAddrLatitude: latitude
+ }).then(res => {
+ console.log('gpsSucess');
+ }, err => err);
+ },
+ cancel: function (res) {
+ console.log('用户拒绝授权获取地理位置');
+ _this.$api.gpsAddr({
+ gpsAddrLongitude: '',
+ gpsAddrLatitude: ''
+ }).then(res => {
+ console.log('gpsfail');
+ }, err => err);
+ }
+ })
+ },
+ // 处理合约的修改
+ contractChange(val) {
+ if (!val) {
+ return;
+ }
+ this.selectConInfo = this.contractList.find((item) => {
+ return item.contId === val;
+ })
+ },
+ // 生成二维码
+ submit() {
+ this.getLocation();
+ let v = this.$tool;
+ if (v.checkValEmpty(this.selectContract)) {
+ v.toast('请选择合约套餐');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入商品品牌');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsBrand)) {
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品品牌');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsName)) {
+ v.toast('请输入商品名称');
+ return false;
+ }
+ if (!/^[A-Za-z0-9\u4e00-\u9fa5]+$/.test(this.goodsInfo.goodsName)) {
+
+ v.toast('请输入文字/字母/数字且不包含特殊字符的商品名称');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsModel)) {
+ v.toast('请输入商品型号');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品价格');
+ return false;
+ }
+ if (!/^[1-9]\d{0,4}/.test(this.goodsInfo.goodsPrice)) {
+ v.toast('请输入商品正确的价格');
+ return false;
+ }
+ if (v.checkValEmpty(this.goodsInfo.goodsImei)) {
+ v.toast('请输入商品IMEI');
+ return false;
+ }
+
+ let queryObj = {
+ ...this.selectConInfo,
+ ...this.goodsInfo,
+ mgrId: sessionStorage.sid, // 办单员id
+ contId: this.selectContract, // 合约id
+ typeId: this.$route.query.typeId
+ };
+
+ this.$router.push({
+ path: "/contract-qrcode",
+ query: queryObj
+ })
+ },
+ // 根据城市code 获取拼接的字符串
+ getAddrText(arr) {
+ let str = '';
+ this.cityList.forEach(item => {
+ if (arr.indexOf(item.value) > -1) {
+ str += item.name
+ }
+ })
+ return str;
+ }
+ }
+ };
+</script>
+<style lang='less' >
+ .contract-installment-zxh {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ padding-bottom: 80px;
+ overflow-y: scroll;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+ }
+ .btn {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
diff --git a/src/views/old/store/zxh/message.vue b/src/views/old/store/zxh/message.vue
new file mode 100644
index 0000000..3ef6437
--- /dev/null
+++ b/src/views/old/store/zxh/message.vue
@@ -0,0 +1,105 @@
+
+<template>
+ <div class="getQRCode">
+ <!-- <x-header class="message-head" title="消息详情" :left-options="{backText:''}"></x-header> -->
+ <van-nav-bar title="消息详情" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="message-body">
+ <div class="notice">
+ <p class="notice-title">{{ message.msgTitle }}</p>
+ <p>{{ message.msgTime }}</p>
+ </div>
+ <span class="line"></span>
+ <div class="notice-continue" v-html=" message.msgCon">
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+import { XHeader } from 'vux';
+import {
+ dateFormat
+ } from 'vux'
+import { mapActions } from 'vuex';
+ export default {
+ name: 'message',
+ components: {
+ XHeader,
+ },
+ data() {
+ return {
+ messageId: this.$route.query.messageId,
+ message:{
+ msgCon: '',
+ msgTitle: '',
+ msgTime: '',
+ }
+ }
+ },
+ computed:{
+
+ },
+ created() {
+ this.msgInt()
+ this.getCount()
+ },
+ methods: {
+ ...mapActions(['getCount']),
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ msgInt() {
+ this.$api.noticeDetail({id: this.messageId}).then(res => {
+ console.log(res.body)
+ this.message.msgCon = res.body.noticeContent;
+ this.message.msgTitle = res.body.title;
+ this.message.msgTime = dateFormat(res.body.pubTime);
+ })
+
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+.getQRCode{
+ background: #F5F5F7;
+ width: 100%;
+ height: 100%;
+}
+.message-head{
+ position: relative;
+}
+.message-body{
+ width: 96%;
+ margin: 12px 2%;
+ margin-top: 10px;
+ background: #fff;
+ .notice{
+ padding: 15px 12px;
+ border-bottom: 1px solid #EEEEEE;
+ p{
+ color: #999999;
+ }
+ &-title{
+ font-size: 16px;
+ font-weight: bold;
+ color: #333333 !important;
+ margin-bottom: 10px;
+ }
+ }
+ .notice-continue{
+ width: 94%;
+ margin: 0px 2%;
+ padding: 15px 0;
+ white-space: wrap;
+ font-size: 14px;
+ word-wrap: break-word;
+ height: auto;
+ padding-left: 2%;
+ background: #fff;
+ color: #666666;
+ line-height: 22px;
+ }
+}
+</style>
diff --git a/src/views/old/store/zxh/set.vue b/src/views/old/store/zxh/set.vue
new file mode 100644
index 0000000..6935865
--- /dev/null
+++ b/src/views/old/store/zxh/set.vue
@@ -0,0 +1,197 @@
+<!--
+ * @Descripttion: 智享云状态切换 + 数据资料的反显,无复杂逻辑
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-21 18:06:00
+ * @LastEditTime: 2019-09-02 11:15:49
+ -->
+<template>
+ <div class="zxh-set-box">
+ <x-header title="智享花" :left-options="{backText:''}"></x-header>
+ <group>
+ <x-switch title="状态" v-model="status"></x-switch>
+ </group>
+ <f-space></f-space>
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 基本信息
+ </div>
+ <cell title="商户名称" :value="info.merName"></cell>
+ <cell title="营业执照号" :value="info.licenseNo"></cell>
+ <cell title="地址" :value="info.merAddr"></cell>
+ <cell title="详细地址" :value="info.merDtlAddr"></cell>
+ <cell title="营业面积" :value="info.merArea"></cell>
+ <cell title="成立日期" :value="info.foundDate | timeformat('yyyy-MM-dd')"></cell>
+ <cell title="协议开始时间" :value="(info.agreeStartTime || '') | parseDate"></cell>
+ <cell title="协议结束时间" :value="(info.agreeEndTime || '') | parseDate"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 法人信息
+ </div>
+ <cell title="法人姓名" :value="info.legalName"></cell>
+ <cell title="法人身份证号" :value="info.legalIdNo"></cell>
+ <cell title="法人电话" :value="info.legalMblNo"></cell>
+ <cell title="法人家庭住址" :value="info.legalHomeAddr"></cell>
+ </group>
+ <f-space></f-space>
+
+ <group>
+ <div class="title">
+ <span class="line"></span>
+ 银行信息
+ </div>
+ <cell title="银行名称" :value="info.bankName"></cell>
+ <cell title="开户行" :value="info.bankDtlName"></cell>
+ <cell title="地址" :value="info.bankAddr"></cell>
+ <cell title="户名" :value="info.cardName"></cell>
+ <cell title="银行账号" :value="info.cardNo"></cell>
+ <cell title="账号类型" :value="info.cardTypeName"></cell>
+ <cell title="开户行行号" v-if="info.cardType ==='pu'" :value="info.bankNo"></cell>
+ </group>
+
+ <f-space></f-space>
+
+ <!-- 图片反显 -->
+ <section class="img-box">
+ <h4>营业执照照片</h4>
+ <div class="img-item" v-for="(item, index) in info.licencePhotos" :key="index"
+ :style="item.fileUrl | generate">
+ </div>
+ </section>
+ <section class="img-box">
+ <h4>法人身份证正反面照片</h4>
+ <div class="img-item" v-for="(item, index) in info.legalCardPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>房产证或租赁合同</h4>
+ <div class="img-item" v-for="(item, index) in info.houseContractPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>外景照、门头照片、前台照、内景照</h4>
+ <div class="img-item" v-for="(item, index) in info.storePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>套餐活动清单、终端商品定价清单</h4>
+ <div class="img-item" v-for="(item, index) in info.mealBillPhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <section class="img-box">
+ <h4>运营商授权文件</h4>
+ <div class="img-item" v-for="(item, index) in info.accreditFilePhotos" :key="index"
+ :style="item.fileUrl | generate"></div>
+ </section>
+ <f-button fixed @on-click="submit">保存</f-button>
+ </div>
+</template>
+
+<script>
+ import {
+ XSwitch
+ } from 'vux';
+
+ export default {
+ name: "heyd_info",
+ components: {
+ XSwitch
+ },
+ data() {
+ return {
+ status: true,
+ info: {},
+ productInfo: {}
+ }
+ },
+ filters: {
+ generate(path) {
+ return {
+ 'background-image': `url(${path})`
+ }
+ },
+ parseDate(v = '') {
+ if (v) {
+ return v.slice(0, 4) + '-' + v.slice(4, 6) + '-' + v.slice(-2);
+ } else {
+ return '暂无';
+ }
+ }
+ },
+ created() {
+ this.init();
+ },
+ methods: {
+ init() {
+ this.$api.prodRefInit(this.$route.query).then(res => {
+ this.productInfo = res.body;
+ this.status = !!this.productInfo.status;
+ });
+ // 获取商户信息反显
+ this.$api.getMerInfo(this.$route.query.orgId).then(res => {
+ this.info = res.body;
+ })
+ },
+ // 保存
+ submit() {
+ this.$api.prodSaveRef({
+ ...this.$route.query,
+ prodSkDtlInfoList: this.productInfo.prodSkDtlInfoList,
+ status: this.status ? 1 : 0
+ }).then(() => {
+ this.$notify('保存成功');
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less">
+ .zxh-set-box {
+ padding-bottom: 60px;
+
+ .title {
+ padding: 14px 12px;
+ font-size: 15px;
+ color: #333;
+
+ .line {
+ display: inline-block;
+ width: 2px;
+ height: 16px;
+ margin-right: 8px;
+ background: @color-text-three;
+ vertical-align: middle;
+ margin-top: -1px;
+ }
+ }
+
+ .img-box {
+ padding: 0 12px;
+ background-color: #fff;
+ margin-bottom: 20px;
+
+ h4 {
+ font-weight: normal;
+ font-size: 15px;
+ line-height: 40px;
+ }
+
+ .img-item {
+ display: inline-block;
+ height: 100px;
+ width: 100px;
+ margin: 0 10px 10px 0;
+ border: 1Px dashed #d9d9d9;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/old/store/zxh/upload.vue b/src/views/old/store/zxh/upload.vue
new file mode 100644
index 0000000..459e24c
--- /dev/null
+++ b/src/views/old/store/zxh/upload.vue
@@ -0,0 +1,273 @@
+<!--
+ * @Descripttion: 上传合约凭证
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-08 09:16:44
+ * @LastEditTime: 2019-09-03 09:25:14
+ -->
+<template>
+ <div class="zxh-upload-box h-100-g">
+ <x-header :left-options="{'backText': ''}" title="上传合约凭证" class="gradient-color"></x-header>
+ <div class="content" v-for="(item, index) in fileTypeArr" :key="index">
+ <h4 class="title">
+ <span>{{item.name}}</span>
+ <div @click="changeShowselect(item)">
+ <i class="iconfont scene_Staging-xiangji"></i>
+ <input ref="photo" type="file" accept="image/*" @change="getFile($event.currentTarget,item.code)">
+ <input ref="picture" type="file" accept="image/*" capture="camera"
+ @change="getFile($event.currentTarget,item.code)">
+ </div>
+ </h4>
+ <ul class="upload">
+ <li class="upload-item" v-for="(item, index) in item.fileIds" :key="index"
+ :style="{'background-image':`url(${item.fileUrl})`}">
+ <i class="iconfont scene_Staging-shibai1" @click="deleteImgItem(index)"></i>
+ </li>
+ </ul>
+ </div>
+ <group>
+ <x-input title="手机号" v-model="form.contMblNo" placeholder="请输入" text-align="right" :max="11"></x-input>
+ </group>
+ <f-button @on-click="submit()">提交</f-button>
+
+
+ <van-action-sheet v-model="showSelect" :close-on-click-overlay="false" cancel-text="取消" :actions="nav"
+ @select="handleSelect">
+ </van-action-sheet>
+ </div>
+</template>
+
+<script>
+ import {
+ compress
+ } from "@/utils/index";
+ import {
+ Actionsheet
+ } from "vux";
+
+ export default {
+ name: "heyd_upload",
+ data() {
+ return {
+ showSelect: false,
+ nav: [{
+ name: '拍照'
+ },
+ {
+ name: '从手机相册选择'
+ },
+ ],
+ form: {
+ orderId: '',
+ contMblNo: '',
+ fileIds: []
+ },
+ fileTypeArr: [],
+ currentItem: {}
+ }
+ },
+ components: {
+ Actionsheet
+ },
+ props: ["orderId"],
+ created() {
+ this.form.orderId = this.orderId;
+ this.$api.h_getFileType().then(res => {
+ let list = res.body || [];
+ this.fileTypeArr = list.map(item => {
+ return {
+ ...item,
+ fileIds: []
+ }
+ })
+ })
+ },
+ methods: {
+ changeShowselect(item) {
+ if (item.fileIds.length) {
+ this.$tool.toast(`最多上传一张照片~`)
+ return
+ }
+ this.showSelect = true;
+ this.currentItem = item;
+ },
+ imgCompress(path, options = {}) {
+ return new Promise((resolve, reject) => {
+ let img = new Image();
+ img.src = path;
+ img.onload = function () {
+ let that = this,
+ w = that.width,
+ h = that.height,
+ scale = w / h, // 默认按比例压缩
+ quality = options.quality || 0.92,
+ canvas = document.createElement('canvas'),
+ ctx = canvas.getContext('2d');
+
+ w = options.width || w;
+ h = options.height || (w / scale);
+ canvas.width = w;
+ canvas.height = h;
+ ctx.drawImage(that, 0, 0, w, h);
+ if (options.quality && options.quality <= 1 && options.quality > 0) {
+ quality = options.quality;
+ }
+ let base64 = canvas.toDataURL('image/jpeg', quality);
+ resolve(base64);
+ }
+ })
+ },
+ handleSelect(item, index) {
+ if (index === 0) {
+ this.$refs['picture'][0].click();
+ } else {
+ this.$refs['photo'][0].click();
+ }
+ this.showSelect = false;
+ },
+ // 删除图片
+ deleteImgItem(index) {
+ this.currentItem.fileIds.splice(index, 1);
+ },
+ // 获取base64
+ getFile(el, fileType) {
+ let file = el.files[0];
+ if (typeof file === 'undefined') return;
+ let reader = new FileReader(),
+ that = this;
+ reader.readAsDataURL(file);
+ reader.onload = function () {
+ that.imgCompress(this.result).then(base64 => {
+ that.upload(base64.split(',')[1], file.type.split('/')[1], fileType);
+ })
+ }
+ },
+ //上传文件
+ upload(base64, suffix, fileType) {
+ let params = {
+ fileType,
+ suffix,
+ base64Data: base64
+ }
+ this.$api.uploadFile(params).then(res => {
+ this.currentItem.fileIds.push(res.body);
+ })
+ },
+ // 提交保存
+ submit() {
+ let form = this.form,
+ tel = form.contMblNo;
+
+ let len = this.fileTypeArr.length;
+ for (let index = 0; index < len; index++) {
+ const item = this.fileTypeArr[index];
+ if (item.fileIds.length === 0) {
+ this.$tool.toast(`请上传${item.name}`)
+ return
+ }
+ }
+
+
+ if (tel.length === 0) {
+ this.$tool.toast("请输入电话号码")
+ return;
+ }
+
+ if (!this.$tool.checkPhone(tel)) {
+ this.$tool.toast("请输入正确的电话号码")
+ return
+ }
+ let params = {
+ orderId: form.orderId,
+ contMblNo: tel,
+ fileIds: []
+ };
+
+
+ let fileIds = [];
+
+ for (let k = 0; k < len; k++) {
+ const item = this.fileTypeArr[k];
+ let arr = item.fileIds;
+ arr.forEach(child => {
+ fileIds.push(child.id)
+ })
+ // fileIds.push(...item.fileIds);
+ }
+
+ params.fileIds = fileIds;
+ this.$api.h_uploadProtocol(params).then(res => {
+ this.$tool.toast("提交成功")
+ this.$router.go(-1)
+ })
+ }
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+ .zxh-upload-box {
+ padding-top: 54px;
+ background-color: #f1f1f1;
+ }
+
+ .content {
+ margin-bottom: 10px;
+ padding-bottom: 12px;
+ background-color: @color-white;
+
+ .title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 12px;
+ height: 49px;
+ line-height: 49px;
+ font-size: @font-size-base;
+ font-weight: @font-weight-base;
+
+ input {
+ display: none;
+ }
+ }
+ }
+
+ .upload {
+ margin: 5px 12px 0;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ flex-wrap: wrap;
+
+ .upload-item {
+ margin-right: 12px;
+ width: 109px;
+ height: 109px;
+ position: relative;
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ margin-bottom: 12px;
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+
+ .iconfont {
+ position: absolute;
+ right: 3Px;
+ top: 0;
+ }
+ }
+ }
+
+ #file {
+ display: none;
+ }
+
+ .scene_Staging-xiangji {
+ fill: @color-border-theme;
+ color: @color-border-theme;
+ font-size: 20px;
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/order/credit.vue b/src/views/order/credit.vue
new file mode 100644
index 0000000..e66f597
--- /dev/null
+++ b/src/views/order/credit.vue
@@ -0,0 +1,299 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 18:49:04
+ * @Description: 信用卡分期——订单
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar title="信用卡分期订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/credit-detail?id=${id}`)
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getCreditOrderList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '商品金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ }
+ ]
+ })
+ })
+ // this.msgList.push(...list);
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.creditExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+ //
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/dmf.vue b/src/views/order/dmf.vue
new file mode 100644
index 0000000..81d5ff3
--- /dev/null
+++ b/src/views/order/dmf.vue
@@ -0,0 +1,337 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-23 16:29:56
+ * @Description: 商户收款订单
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar title="商户收款订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <v-order-item :user='item.merName' :orderId='item.orderId' :time='item.creTime' :list='item.list'
+ v-for="(item,index) in list" :key="index" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" :zfbVersionArr="zfbVersionArr"
+ customTitle="分期本金" :hasMoney="false" @search="(v)=>search(v,true)"></v-filter>
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;"
+ @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+
+ exporShow: false,
+
+ loading: false,
+ finished: false,
+ isShow: false,
+ list: [],
+ filter: {},
+ statusArr: [],
+ belongArr: [],
+ zfbVersionArr:[],
+ countPrice: 0, //今日交易金额
+ orderData: []
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ typeId() {
+ return this.$route.query.typeId
+ },
+ prodId() {
+ return this.$route.query.prodId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ methods: {
+
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.facepayOrderExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>exportFile
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+
+
+
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [],
+ zfbVersionList = body.zfbVersions || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ this.zfbVersionArr = zfbVersionList;
+ }).catch((err) => {
+
+ });
+
+ },
+ go(id) {
+ this.$router.push(`/product/dmf-detail?id=${id}`)
+ },
+ // 计算产品状态
+ getStatus(v) {
+ if(v==2){
+ return {
+ text: '订单超时',
+ color: 'error'
+ }
+ }else if(v==3){
+ return {
+ text: '退款成功',
+ color: 'warning'
+ }
+ }else if(v==0){
+ return {
+ text: '待支付',
+ color: 'warning'
+ }
+ }
+ return {
+ text: '交易成功',
+ color: 'success'
+ }
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.mgrName
+ break;
+ }
+ },
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getDmfOrderList(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body.dmfOrderVoList || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ let info = this.getStatus(item.status)
+ this.calcLabel(item)
+ this.list.push({
+ ...item,
+ list:[
+ {
+ value: item.payAmt,
+ label: '支付金额',
+ },{
+ value: info.text,
+ label: '订单状态',
+ color: info.color
+ }]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ this.isShow = false;
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 55px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+
+ .popup-content {
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+
+ .icon-box {
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background: rgba(66, 61, 93, 0.1);
+ border-radius: 50%;
+ transform: translate(-50%, -50%);
+
+ .child {
+ height: 55px;
+ width: 55px;
+ background: rgba(66, 61, 93, 0.8);
+ border-radius: 50%;
+ }
+ }
+
+ .text {
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+
+ .top {
+ color: @c-text-666;
+ }
+ }
+
+ .btn-submit {
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/gjzj.vue b/src/views/order/gjzj.vue
new file mode 100644
index 0000000..57f0bd5
--- /dev/null
+++ b/src/views/order/gjzj.vue
@@ -0,0 +1,318 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 18:50:21
+ * @Description: 购机直降订单
+ -->
+<template>
+ <div class="order-hb-box">
+
+ <v-navbar title="购机直降订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='item.creTime' :list='item.list'
+ v-for="(item,index) in list" :key="index"
+ @click="$router.push(`/product/gjzj-detail?id=${item.orderId}`)">
+ </v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" customTitle="手机价格" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading: false,
+ finished: false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ filter: {},
+ statusArr: [],
+ belongArr: [],
+ orderData: [],
+
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+
+
+ },
+ methods: {
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ //获取购机直降列表
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getGjzjList(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = '';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ case 6:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.insAmt,
+ label: '商品金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)'
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ // 获取订单统计数据
+
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ // 导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.gjzjExport(this.filter).then((res) => {
+
+
+ this.exporShow = true;
+
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/gzzj.vue b/src/views/order/gzzj.vue
new file mode 100644
index 0000000..d8ba569
--- /dev/null
+++ b/src/views/order/gzzj.vue
@@ -0,0 +1,271 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 18:49:56
+ * @Description: 智享花订单 该页面跟购机直降相差无几
+ -->
+<template>
+ <div class="order-hb-box h-100-g">
+ <v-navbar title="公众租机订单" fixed>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <v-gzzj-order-item :userName="item.userName || '无'" :storeName="item.label" :mblNo="item.mblNo" :orderTime='item.creTime' :signTime='item.signTime' :list='item.list' :orderId='item.orderId'
+ v-for="(item,index) in list" :key="index"
+ @click="$router.push(`/product/gzzj-detail?id=${item.orderId}`)">
+ </v-gzzj-order-item>
+ </van-list>
+
+ </div>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading: false,
+ finished: false,
+ storeOrgType:"",
+ exporShow:false,
+ isShow: false,
+ list: [],
+ filter: {},
+ statusArr: [],
+ belongArr: [],
+ orderData: [],
+
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+ },
+ methods: {
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.storeName
+ if(this.storeOrgType == 5){
+ item.label = ''
+ break;
+ }
+ }
+ },
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+ if(this.orgType == 4) {
+ this.$api.storeProdList({}).then(res => {
+ this.storeOrgType = res.body.orgType;
+ });
+ }
+ },
+ //获取订单列表
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getGzzjOrder(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = '';
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.insAmt,
+ label: '分期本金(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)'
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ // 导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.gzzjExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ }).catch((err) => {
+
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/hb.vue b/src/views/order/hb.vue
new file mode 100644
index 0000000..c74283f
--- /dev/null
+++ b/src/views/order/hb.vue
@@ -0,0 +1,334 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:54:51
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar :title="typeId ==200002? '用户付息' : '商品消费'" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' v-if="hasExport" title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="分期本金" :hasSearch="true" :zfbVersionArr="zfbVersionArr"
+ @search="(v)=>search(v,true)"></v-filter>
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g" >
+ <div class="child flex-center-g" :style="{background:$store.state.backColor, opacity: 0.8}">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;" :style="{color:$store.state.backColor}">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ zfbVersionArr:[],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ },
+ hasExport(){
+ if(localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ }
+ },
+ created() {
+ // this.init()
+ console.log(this.orgType)
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [],
+ zfbVersionList = body.zfbVersions || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ console.log('zfbVersionList:',zfbVersionList)
+ this.zfbVersionArr = zfbVersionList;
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/hb-detail?id=${id}&typeId=${this.typeId}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getHBList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '分期本金(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.hbExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/hbjl.vue b/src/views/order/hbjl.vue
new file mode 100644
index 0000000..80df6a5
--- /dev/null
+++ b/src/views/order/hbjl.vue
@@ -0,0 +1,322 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-09 16:44:45
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="hbjl-box">
+ <v-navbar title="花呗间联" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="分期本金" :hasSearch="false"
+ @search="(v)=>search(v,true)"></v-filter>
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ // this.init()
+ console.log(this.orgType)
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [],
+ zfbVersionList = body.zfbVersions || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/hbjl-detail?id=${id}&typeId=${this.typeId}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.hbjlOrderList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '分期本金(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.hbjlOrderExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ if(this.orgType!= 4){
+ var num = body.merNum || 0;
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }
+
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .hbjl-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/order-lthyj.vue b/src/views/order/order-lthyj.vue
new file mode 100644
index 0000000..cb4d952
--- /dev/null
+++ b/src/views/order/order-lthyj.vue
@@ -0,0 +1,277 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:54:51
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="order-lthyj">
+ <v-navbar title="订单列表">
+ <!-- <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template> -->
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <!-- <v-datacard class='info' :list="orderData"></v-datacard> -->
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <new-v-order-item :name="item.userName || '无'" :time='+item.signTime' :list='item.list' :orderId="item.orderId"
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)">
+ </new-v-order-item>
+ </van-list>
+ </div>
+ <!-- <v-button-circle icon='icondaochu' v-if="hasExport" title='导出' @click="exportFile"></v-button-circle> -->
+ <!-- <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="分期本金" :hasSearch="true" :zfbVersionArr="zfbVersionArr"
+ @search="(v)=>search(v,true)">
+ </v-filter> -->
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g" >
+ <div class="child flex-center-g" :style="{background:$store.state.backColor, opacity: 0.8}">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;" :style="{color:$store.state.backColor}">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ zfbVersionArr:[],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ },
+ hasExport(){
+ if(localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ }
+ },
+ created() {
+ // this.init()
+ // this.getOrderReport()
+ // this.getOrderInit()
+ },
+ methods: {
+ // search(v,isClear){
+ // this.filter.orderId ="";
+ // this.finished = false;
+ // this.init(v,isClear)
+ // this.getOrderReport(v)
+ // },
+ // 获取过滤条件
+ // getOrderInit() {
+ // this.$api.getOrderInit({
+ // orgType: this.userinfo.orgType,
+ // prodTypeId: this.typeId
+ // }).then((res) => {
+ // let body = res.body,
+ // insTermVoList = body.insTermVoList || [],
+ // orderStatusList = body.orderStatusList || [],
+ // orgBaseInfVoList = body.orgBaseInfVoList || [],
+ // zfbVersionList = body.zfbVersions || [];
+ // this.periodsArr = insTermVoList;
+ // this.statusArr = orderStatusList;
+ // this.belongArr = orgBaseInfVoList;
+ // console.log('zfbVersionList:',zfbVersionList)
+ // this.zfbVersionArr = zfbVersionList;
+ // }).catch((err) => {
+
+ // });
+ // },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/lthyj-detail?id=${id}&typeId=${this.typeId}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.cuccOrderList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.strDownAmt,
+ label: '分期本金(元)',
+ },
+ {
+ value: item.term,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.orderStatus,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-lthyj {
+ height: 100%;
+ background-color: @c-bg-f5;
+ }
+ .order-list {
+ margin-top: 10px;
+ padding: 0 8px 30px;
+ background-color: @c-bg-f5;
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/phone.vue b/src/views/order/phone.vue
new file mode 100644
index 0000000..d8bf027
--- /dev/null
+++ b/src/views/order/phone.vue
@@ -0,0 +1,345 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-27 10:24:42
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-03 11:11:55
+ * @Description:
+ -->
+<template>
+ <div class="phone-box h-100-g">
+ <v-navbar title="手机分期订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+
+ <div class="num-box">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ </div>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <div class="mobile-order-list" v-for="(item,index) in list" :key="index">
+ <div class="header vux-1px-b">
+ <span>{{item.mblBrand}} {{item.mblModel}}</span>
+ <span v-if="orgType==1">商户名称:{{item.merName}}</span>
+ </div>
+ <div class="body">
+ <div class="content">
+ <p>姓名:<span>{{item.userName}}</span></p>
+ <p>手机:<span>{{item.mblNo}}</span></p>
+ <p>手机价格:<span class="mony">{{item.settAmt}}元</span></p>
+ <p>门店收取首付:<span class="mony">{{item.firstAmt}}元</span></p>
+ <p>首付比例:<span>{{item.firstRate}}%</span></p>
+ <p>分期金额:<span class="mony">{{item.surplusAmt}}元</span></p>
+ <p>每期还款金额:<span class="mony">{{item.termAmt}}元</span></p>
+ <p>分期期数:<span>{{item.insTerm}}期</span></p>
+ </div>
+ <div class="status">{{item.statusStr}}</div>
+ </div>
+ <div class="footer vux-1px-b">
+ <time>
+ <i class="iconfont scene_Staging-shijian"></i>
+ <span>{{item.creTime | timeformat('yyyy-MM-dd HH:mm')}} </span>
+ </time>
+ <!-- <span>门店名称:{{item.storeName}}</span> -->
+ <span v-if="orgType==3">门店名称:{{item.storeName}}</span>
+ <span v-if="orgType==4">办单员:{{item.recordPerson}}</span>
+ <span v-if="orgType==2">商户名称:{{item.merName}}</span>
+ <span v-if="orgType==1">渠道名称:{{item.chanName}}</span>
+ </div>
+ </div>
+ </van-list>
+
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" customTitle="手机价格" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ finished: false,
+ loading: false,
+
+ isShow: false,
+ list: [],
+ statusArr: [],
+ belongArr: [],
+ filter: {},
+ orderData: [],
+
+ exporShow:false,
+
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ typeId() {
+ return this.$route.query.typeId
+ },
+ prodId() {
+ return this.$route.query.prodId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ methods: {
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+
+ },
+ //获取订单
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.ljOrderList(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ this.list.push(...list)
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ // 订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.ljOrderExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .phone-box {
+ padding-top: 44px;
+ background-color: #f1f1f1;
+
+ }
+
+ .num-box {
+ margin: 0 8px;
+ }
+
+ .mobile-order-list {
+ background: @c-bg-fff;
+ margin-bottom: 10px;
+
+ }
+
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+ .header {
+ display: flex;
+ padding: 0 12px;
+ line-height: 44px;
+ font-size: @font-12;
+
+
+ >span:first-child {
+ font-size: 15px;
+ color: @c-text-default;
+ flex: 1;
+ }
+ }
+
+ .footer {
+ display: flex;
+ padding: 0 12px;
+ line-height: 44px;
+ font-size: @font-12;
+ background: rgba(191, 160, 115, 0.1);
+
+ time {
+ flex: 1;
+ }
+ }
+
+ .body {
+ display: flex;
+ padding: 12px;
+ align-items: center;
+
+ .content {
+ flex: 1;
+ font-size: @font-12;
+ line-height: 2;
+
+ span {
+ padding-left: 5px;
+ }
+
+ .mony {
+ color: @c-text-default;
+
+ }
+ }
+
+ .status {
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/shtx.vue b/src/views/order/shtx.vue
new file mode 100644
index 0000000..fbabea9
--- /dev/null
+++ b/src/views/order/shtx.vue
@@ -0,0 +1,322 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-26 12:33:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-09 11:30:57
+ * @Description:
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar title="商户贴息" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="商家到账金额" :hasSearch="true" :zfbVersionArr="zfbVersionArr"
+ @search="(v)=>search(v,true)"></v-filter>
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+ exporShow:false,
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ zfbVersionArr:[],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ // this.init()
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [],
+ zfbVersionList = body.zfbVersions || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ this.zfbVersionArr = zfbVersionList;
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/shtx-detail?id=${id}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getHBList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '商家到账金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.hbExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/wxScore.vue b/src/views/order/wxScore.vue
new file mode 100644
index 0000000..d99fd37
--- /dev/null
+++ b/src/views/order/wxScore.vue
@@ -0,0 +1,204 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 16:54:51
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="order-lthyj">
+ <v-navbar title="微信分订单列表" fixed >
+ <template v-slot:right >
+ <div class="flex-center-g" @click="isShowFilter = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-wxScore-order-item :userName="item.userName || '无'" :time='+item.creTime' :list='item.list' :contName="item.contName"
+ :term="item.term" v-for="(item,k) in list" :key="k" @click="go(item.id)">
+ </v-wxScore-order-item>
+ </van-list>
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <v-filter v-model="isShowFilter" :hasTime="false" :hasMoney="false" :hasSearch="true" :hasWxScore="true" @search="(v)=>search(v,true)"></v-filter>
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g" >
+ <div class="child flex-center-g" :style="{background:$store.state.backColor, opacity: 0.8}">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;" :style="{color:$store.state.backColor}">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ exporShow:false,
+ loading:false,
+ finished:false,
+ isShow: false,
+ isShowFilter:false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.id ="";
+ this.finished = false;
+ this.init(v,isClear)
+ },
+ go(orderId) {
+ this.$router.push({
+ path:'/product/wxScore-detail',
+ query:{
+ orderId:orderId
+ }
+ })
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.wxScoreExport(this.filter).then((res) => {
+ this.exporShow = true;
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ console.log("111");
+ this.loading = true;
+ this.$api.wxScoreList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.id = list[list.length - 1].id;
+ list.forEach(item => {
+ let color = 'success';
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.guaranteedAmt,
+ label: '担保金额',
+ },
+ {
+ value: item.mblNo,
+ label: '用户手机号',
+ },
+ {
+ value: item.status,
+ label: '订单状态',
+ },
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+
+ .order-lthyj {
+ height: 100%;
+ background-color: @c-bg-f5;
+ }
+ .order-list {
+ margin-top: 60px;
+ padding: 0 8px 30px;
+ background-color: @c-bg-f5;
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/xyg-cx.vue b/src/views/order/xyg-cx.vue
new file mode 100644
index 0000000..7aead06
--- /dev/null
+++ b/src/views/order/xyg-cx.vue
@@ -0,0 +1,329 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 11:02:45
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-03-19 11:20:52
+ * @Description:
+ -->
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 16:11:37
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar :title="typeId ==200012? '信用购-花呗' : '信用购-储蓄'" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="分期本金" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ // this.init()
+ console.log(this.orgType)
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/hb-detail?id=${id}&typeId=${this.typeId}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getHBList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '分期本金(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.hbExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/xyg-hb.vue b/src/views/order/xyg-hb.vue
new file mode 100644
index 0000000..5789c09
--- /dev/null
+++ b/src/views/order/xyg-hb.vue
@@ -0,0 +1,323 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 11:02:28
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-03-23 16:47:35
+ * @Description:
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar title="运营商消费-花呗分期订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="结算金额" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ // this.init()
+ console.log(this.orgType)
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.userinfo.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ insTermVoList = body.insTermVoList || [],
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.periodsArr = insTermVoList;
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/product/xyg-hb-detail?id=${id}&typeId=${this.typeId}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.xygOrderHbList(params).then(res => {
+ this.filter = {...params};
+ if(isClear){
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = 'success';
+ switch (item.status) {
+ case 1:
+ color = 'success';
+ break;
+ case 2:
+ color = 'error';
+ break;
+ case 0:
+ color = 'warning';
+ break;
+ case 3:
+ color = 'warning';
+ break;
+ }
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.settAmt,
+ label: '结算金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)',
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.xygOrderHbExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ min-height: 100vh;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/xyg.vue b/src/views/order/xyg.vue
new file mode 100644
index 0000000..3b975bb
--- /dev/null
+++ b/src/views/order/xyg.vue
@@ -0,0 +1,292 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-03-20 09:55:50
+ * @Description: 信用购订单 该页面跟购机直降相差无几
+ -->
+<template>
+ <div class="order-hb-box h-100-g">
+ <v-navbar title="运营商消费-储蓄卡订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='item.creTime' :list='item.list'
+ v-for="(item,index) in list" :key="index"
+ @click="$router.push(`/product/xyg-detail?id=${item.orderId}`)">
+ </v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" customTitle="手机价格" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading: false,
+ finished: false,
+
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ filter: {},
+ statusArr: [],
+ belongArr: [],
+ orderData: [],
+
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+ },
+ methods: {
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+ },
+ //获取订单列表
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getXygOrder(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = '';
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.insAmt,
+ label: '商品金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)'
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ // 导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.xygExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ }).catch((err) => {
+
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/order/zxh.vue b/src/views/order/zxh.vue
new file mode 100644
index 0000000..2aa6cee
--- /dev/null
+++ b/src/views/order/zxh.vue
@@ -0,0 +1,292 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 18:49:56
+ * @Description: 智享花订单 该页面跟购机直降相差无几
+ -->
+<template>
+ <div class="order-hb-box h-100-g">
+ <v-navbar title="智享花订单" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init">
+ <v-order-item :name="item.userName || '无'" :user='item.label' :time='item.creTime' :list='item.list'
+ v-for="(item,index) in list" :key="index"
+ @click="$router.push(`/product/zxh-detail?id=${item.orderId}`)">
+ </v-order-item>
+ </van-list>
+
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" customTitle="手机价格" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter>
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading: false,
+ finished: false,
+
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ filter: {},
+ statusArr: [],
+ belongArr: [],
+ orderData: [],
+
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ this.getOrderInit()
+ this.getOrderReport()
+ },
+ methods: {
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ search(v, isClear) {
+ this.filter.orderId = "";
+ this.finished = false;
+ this.init(v, isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ this.$api.getOrderInit({
+ orgType: this.orgType,
+ prodTypeId: this.typeId
+ }).then((res) => {
+ let body = res.body,
+ orderStatusList = body.orderStatusList || [],
+ orgBaseInfVoList = body.orgBaseInfVoList || [];
+ this.statusArr = orderStatusList;
+ this.belongArr = orgBaseInfVoList;
+ }).catch((err) => {
+
+ });
+ },
+ //获取订单列表
+ init(params = this.filter, isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ this.$api.getHeydOrder(params).then(res => {
+ this.filter = {
+ ...params
+ };
+ if (isClear) {
+ this.list = [];
+ }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ list.forEach(item => {
+ this.calcLabel(item)
+ let color = '';
+ this.list.push({
+ ...item,
+ list: [{
+ value: item.insAmt,
+ label: '商品金额(元)',
+ },
+ {
+ value: item.insTermStr,
+ label: '分期期数(月)'
+ },
+ {
+ value: item.statusStr,
+ label: '订单状态',
+ color
+ }
+ ]
+ })
+ })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ this.$api.getOrderReport({
+ ...params,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '交易额',
+ num: body.amtNum || 0,
+ })
+ this.orderData.push({
+ title: '交易单数',
+ num: body.orderNum || 0,
+ })
+ let num = body.merNum || 0;
+ if(this.orgType==4){
+ num = "—";
+ }
+ this.orderData.push({
+ title: this.dataLabel,
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ // 导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ this.$api.zxhExport(this.filter).then((res) => {
+
+ this.exporShow = true;
+
+ }).catch((err) => {
+
+ });
+ }
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+</style>
diff --git a/src/views/product/credit-detail.vue b/src/views/product/credit-detail.vue
new file mode 100644
index 0000000..a2085c5
--- /dev/null
+++ b/src/views/product/credit-detail.vue
@@ -0,0 +1,109 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 15:42:01
+ * @Description: 信用卡分期——订单详情
+ -->
+<template>
+ <div class="credit-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.userName" title='用户名称' readonly></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.settAmt" title='商品金额' readonly></van-cell>
+ <van-cell :value="form.insAmt" title='还款总额' readonly></van-cell>
+ <van-cell :value="form.insTermStr" title='分期期数' readonly></van-cell>
+ <van-cell :value="form.dealTime" title='交易时间' readonly></van-cell>
+ <van-cell :value="form.goodsName" title='商品信息' readonly></van-cell>
+ <van-cell :value="form.statusStr" :value-class="statusColor" title='订单状态' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.recordPerson || '无'" title='办单员' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" v-if="form.feeRate != null">
+ <van-cell :value="form.feeRate" title='费率' readonly></van-cell>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ export default {
+ data() {
+ return {
+ form: {},
+ statusColor:''
+ }
+ },
+ computed: {
+ id() {
+ return this.$route.query.id
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ this.$api.getCreditDetail(this.id).then((res) => {
+ this.form = res.body || {};
+ if(this.form && this.form.status) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+ },
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .credit-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+</style>
diff --git a/src/views/product/dmf-code.vue b/src/views/product/dmf-code.vue
new file mode 100644
index 0000000..3ea98d7
--- /dev/null
+++ b/src/views/product/dmf-code.vue
@@ -0,0 +1,139 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-27 11:20:46
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-27 11:25:45
+ * @Description:
+ -->
+<template>
+ <!-- 商户收款:扫描二维码页面 -->
+ <div class="contract-qrcode-page">
+ <v-navbar title="扫码收款" fixed></v-navbar>
+ <div class="order-info">
+ <div v-if="qrCodeBase64Url" class='canvasImg'>
+ <img :src="qrCodeBase64Url" alt="qrcode">
+ </div>
+ <div id="QRCode" v-else class='qr-code'>
+ <div class='qeimg'>
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+ import html2canvas from 'html2canvas';
+ import QRCode from 'qrcode';
+
+ export default {
+ name: 'facepay_code',
+ data() {
+ return {
+ dataUrl: '',
+ qrCodeBase64Url: '',
+ params: '',
+ timeId: null
+ }
+ },
+ computed: {
+ orderId() {
+ let id = this.$route.query.id;
+ return id;
+ }
+ },
+ beforeRouteLeave(to, from, next) {
+ clearInterval(this.timeId);
+ next()
+ },
+ methods: {
+ // 轮询 支付状态
+ search_status() {
+ this.$api.facepay_getStatus(this.orderId).then(res => {
+ let orderStatus = res.body.orderStatus;
+ if (orderStatus !== 0) {
+ if (orderStatus === 1) {
+ // 成功
+ this.$router.replace(
+ `/product/dmf-detail?orderStatus=1&page=facepay_code&id=${this.orderId}`)
+ } else if (orderStatus === 2) {
+ // 失败
+ this.$router.replace(
+ `/product/dmf-detail?orderStatus=2&page=facepay_code&id=${this.orderId}`)
+ }
+ }
+ })
+ }
+ },
+ created() {
+ QRCode.toDataURL(this.$route.query.url, {
+ margin: 0,
+ width: 400
+ },
+ (err, url) => {
+ this.dataUrl = url;
+ setTimeout(() => {
+ html2canvas(document.getElementById('QRCode')).then(
+ canvas => {
+ this.qrCodeBase64Url = canvas.toDataURL(
+ 'image/jpeg'
+ );
+ this.timeId = setInterval(() => {
+ this.search_status();
+ }, 2000);
+ }
+ );
+ }, 100);
+ }
+ );
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .contract-qrcode-page {
+ padding-top: 44px;
+
+ .order-info {
+ padding-top: 46px;
+
+ .canvasImg {
+ margin: 0 auto;
+ width: 220px;
+ height: 220px;
+
+ img {
+ width: 100%;
+ }
+ }
+
+ .notice {
+ padding-top: 40px;
+ text-align: center;
+ color: #666;
+ }
+
+ .qr-code {
+ background: #fff;
+ width: 220px;
+ height: 220px;
+ margin: 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ border: 4px solid @color-text-three;
+ color: @color-text-three;
+
+ .qeimg {
+ width: 200px;
+ height: 200px;
+ padding: 5px;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/product/dmf-detail.vue b/src/views/product/dmf-detail.vue
new file mode 100644
index 0000000..daa01bf
--- /dev/null
+++ b/src/views/product/dmf-detail.vue
@@ -0,0 +1,351 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-11 10:54:57
+ * @Description: 商户收款——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+
+ <div class="status" v-if="isShowStatus">
+ <div v-if="isSuccess">
+ <van-icon name="success" size="45px" color="#19BE6B" />
+ <p class="info">交易成功</p>
+ <h3 class="price">¥{{orderInfo.payAmt}}</h3>
+ </div>
+ <div v-else>
+ <van-icon name="fail" size="45px" color="#FF9900" />
+ <p class="info">订单超时</p>
+ </div>
+ </div>
+
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.creTime | timeformat('yyyy-MM-dd HH:mm:ss')" title='交易时间' readonly ></van-cell>
+ <van-cell :value="form.orderId" title='订单号' readonly ></van-cell>
+ <van-cell :value="(form.payAmt || '0')+'元'" title='支付金额' readonly ></van-cell>
+ <van-cell :value="form.zfbVersionName || '无'" title="办单通道" readonly></van-cell>
+ <van-cell :value="status" title='订单状态' :value-class="statusColor" readonly ></van-cell>
+ <van-cell v-if="form.aliAccount" :value="form.aliAccount" title='用户支付宝账号' readonly></van-cell>
+ </div>
+ <div class="cell-group">
+ <van-cell v-if="userinfo.orgType < 2" :value="form.chanName || '无'" title='渠道名称' readonly></van-cell>
+ <van-cell v-if="userinfo.orgType < 3" :value="form.merName || '无'" title='商户名称' readonly></van-cell>
+ <van-cell v-if="userinfo.orgType < 4" :value="form.storeName || '无'" title='门店名称' readonly></van-cell>
+ <van-cell v-if="userinfo.orgType < 5" :value="form.mgrName || '无'" title='办单员名称' readonly></van-cell>
+
+ </div>
+ <div class="cell-group">
+ <van-cell :value="form.fee || '无'" title='商户收款费率' readonly></van-cell>
+ </div>
+ <div class="cell-group">
+ <van-cell v-if="userinfo.orgType == 3" :value="form.settStatus || '无'" title='到账状态' readonly></van-cell>
+ </div>
+ <!-- <van-button class="btn" v-if="" @click="yzmShow = true">退单</van-button> -->
+ <van-button class="btn" :color="$store.state.backColor" v-if="form.refundStatus==1&&form.zfbVersion != 5 && $store.state.userinfo.orgType != 1 && $store.state.userinfo.orgType != 2" @click="refund">退款</van-button>
+ <van-button class="btn" :color="$store.state.backColor" v-if="status === '待支付'" @click="$router.replace(`/facepay/code?url=${form.payCode}&id=${form.orderId}`)">展示二维码</van-button>
+ </div>
+ <!-- 短信验证码弹窗 -->
+ <van-popup v-model="yzmShow">
+ <div class="yzmbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmShow = false" />
+ <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+ <div class="yzmbox-contnet">
+ <div class="yzmbox-contnet-yzm">
+ <span>将发送到手机号:</span>
+ <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, '$1****$2') }}</span>
+ </div>
+ </div>
+ <div class="yzmbox-contnet-get">
+ <input type="text" v-model="yzmVal" placeholder="请输入验证码">
+ <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+ </div>
+ <van-button class="showbtn" :color="$store.state.backColor" round @click="yzmYes">确认</van-button>
+ </div>
+ </van-popup>
+ <!-- 退单成功弹窗 -->
+ <van-popup v-model="yzmOkShow">
+ <div class="yzmOkbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmOkShow = false" />
+ <div class="yzmOkbox-img">
+ <img src="../../assets/img/tkimg.png" alt="">
+ </div>
+ <p>退款成功</p>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+import { async } from 'q';
+import Vue from 'vue';
+import { Notify } from 'vant';
+import { mapState } from 'vuex';
+
+Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ Open: true, //倒计时开关
+ yzmText:'获取验证码',
+ yzmOkShow: false,
+ yzmVal: '',
+ yzmShow: false, //获取验证码弹窗
+ isSuccess: false,
+ isShowStatus: false,
+ isShowListBtn: false,
+ form:{
+ creTime:new Date()
+ },
+ statusColor:''
+ }
+ },
+ computed:{
+ ...mapState(['userinfo']),
+ orderId(){
+ return this.$route.query.id
+ },
+ status() {
+ let v = this.form.status;
+ switch (v) {
+ case 0:
+ return '待支付';
+ case 1:
+ return '交易成功';
+ case 2:
+ return '订单超时';
+ case 3:
+ return '退款成功';
+ }
+ }
+ },
+ created(){
+ let query = this.$route.query,
+ orderStatus = query.orderStatus,
+ page = query.page;
+ if (orderStatus == '1') {
+ this.isSuccess = true;
+ }
+ if (page == 'facepay_code') {
+ this.isShowStatus = true;
+ this.isShowListBtn = true;
+ }
+ this.init()
+ },
+ methods: {
+ //验证码弹窗确认事件
+ yzmYes() {
+ console.log(this.orderId)
+ if(this.yzmVal == '' || this.yzmVal == null){
+ Notify({ type: 'danger', message: '验证码为空!' });
+ } else {
+ this.$api.facepay_refund({orderId: Number(this.orderId), verCode:this.yzmVal}).then(() => {
+ // this.$router.replace(`/product/dmf-detail?id=${this.orderId}`)
+ this.$notify('退款成功')
+ this.yzmShow = false;
+ this.yzmVal = '',
+ this.yzmOkShow = true;
+ setTimeout(() => {
+ location.reload()
+ }, 700);
+ })
+
+ }
+ },
+ //获取验证码
+ getYzm() {
+ let sendParams = {
+ mblNo: this.userinfo.mblNo,
+ // mblNo: 13980353202,
+ verCodeType: 12,
+ };
+ if(this.Open) {
+ this.$api.userSendMsg(sendParams).then(res => {
+ console.log(res.body)
+ this.Open = false
+ let num = 60;
+ this.yzmText = num + 's重发';
+ let _this = this
+ let timer = setInterval(() => {
+ num--;
+ // _this.$set(_this.yzmText = num + 's重发')
+ if(num === 0) {
+ clearInterval(timer);
+ _this.Open = true;
+ _this.yzmText = '重新发送';
+ } else {
+ _this.yzmText = num + 's重发';
+ }
+ },1000)
+ }).catch(()=>{
+ this.Open = true;
+ })
+ }
+ },
+ // 退款
+ refund(){
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.yzmShow = true
+
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ getStatusClass(){
+ let styleClass = ['.status-val-done'];
+ return styleClass;
+ },
+ // 获取详情
+ init(){
+ this.$api.getDmfOrderDetail(this.orderId).then((res) => {
+ this.form = {
+ ...res.body
+ }
+ if(this.form) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ .content{
+ padding: 10px 8px;
+ }
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+ .status {
+ text-align: center;
+ padding: 15px 0;
+ margin-bottom: 15px;
+ .info {
+ margin-top: 10px;
+ }
+
+ .price {
+ font-size: 26px;
+ color: @c-text-default;
+ }
+ }
+ .btn{
+ width: 320px;
+ background: @c-bg-default;
+ color: @c-text-fff;
+ display: block;
+ margin: 30px auto;
+ }
+</style>
diff --git a/src/views/product/facepay/facepay-qrcode.vue b/src/views/product/facepay/facepay-qrcode.vue
new file mode 100644
index 0000000..6f9315a
--- /dev/null
+++ b/src/views/product/facepay/facepay-qrcode.vue
@@ -0,0 +1,72 @@
+<template>
+<div class="facepay-qrcode ">
+ <v-navbar title="扫码收款" fixed></v-navbar>
+
+
+ <div class="qr-code">
+ <div ref="QRCode1" class="qr-box">
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+
+
+
+</div>
+</template>
+
+<script>
+ import QRCode from 'qrcode';
+ export default {
+ name: "facepay-qrcode",
+ data(){
+ return {
+ dataUrl: '',
+
+
+
+ }
+ },
+ mounted(){
+ let _this = this,
+ Parmar = this.$route.query || {
+ id:122,
+ name:"122",
+ name2:"122",
+ name3:"122"
+ };
+
+ QRCode.toDataURL(
+ JSON.stringify(Parmar), {
+ margin: 0,
+ width: 200
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ _this.dataUrl = url;
+ }
+ );
+
+ },
+ methods:{
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.facepay-qrcode{
+ padding-top: 44px;
+ min-height: calc(100vh - 44px);
+ background-color: @c-f5;
+ .qr-code{
+ margin-top: 50px;
+ .flex(center,center);
+ }
+
+ .qr-box{
+ padding:8px 8px 3px 8px;
+ border: 2px solid @c-default;
+ }
+
+}
+</style>
diff --git a/src/views/product/facepay/facepay.vue b/src/views/product/facepay/facepay.vue
new file mode 100644
index 0000000..adead8c
--- /dev/null
+++ b/src/views/product/facepay/facepay.vue
@@ -0,0 +1,221 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-22 16:55:53
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-27 13:50:17
+ * @Description:
+ -->
+<template>
+ <div class="facepay">
+
+ <v-navbar title="扫码收款" @right-click="$router.push('/order/dmf')" fixed>
+ <div slot="right" style="color: #896EDB">明细</div>
+ </v-navbar>
+
+
+ <div class="input-box">
+ <p class="tag">¥</p>
+ <input v-model="price" autofocus readonly type="text" class="input-money" placeholder="输入收款金额" >
+ </div>
+ <p class="icon-box">
+ <span>支持方式:</span>
+
+ <svg class="icon" aria-hidden="true">
+ <use xlink:href="#iconshoujifenqi"></use>
+ </svg>
+
+ </p>
+ <div class="calc">
+ <ul class="number-box">
+ <li class="number-item" v-for="(item, index) in 9" :key="index" @click="numberClick(item)">{{item}}</li>
+ <li class="number-item"></li>
+ <li class="number-item" @click="numberClick(0)">0</li>
+ <li class="number-item" @click="numberClick('.')">.</li>
+ </ul>
+ <div class="handler-box">
+ <div class="icon-delete" @click="deleteNumber">
+ <svg class="icon" aria-hidden="true">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+ </div>
+ <div class="icon-submit" @click="submit">
+ 收款
+ </div>
+ </div>
+ </div>
+
+ </div>
+</template>
+
+<script>
+ import {Notify} from 'vant';
+ export default {
+ name: "facepay",
+ data() {
+ return {
+ price: ''
+ }
+ },
+ methods: {
+
+ // 删除price最后一位
+ deleteNumber() {
+ this.price = this.price.slice(0, this.price.length - 1)
+ },
+ //提交生成二维码
+ submit() {
+ if(this.price=='0' || this.price=='0.'){
+ Notify({
+ message: '收款金额不能为0!',
+ });
+ return
+ }
+ if (!this.price.length) {
+ Notify({
+ message: '请输入收款金额!',
+ });
+ return
+ }else{
+
+
+ // 点击收款逻辑
+ this.$router.push('/product/facepay-qrcode');
+
+
+ // this.$api.facepay_create({payAmt:+this.price,term:0}).then(res=>{
+ // let url = res.body.payQrCodeUrl;
+ // let id = res.body.orderId;
+ // this.$router.push(`/facepay/code?url=${url}&id=${id}`)
+ // })
+ }
+ },
+ //数字的逻辑输入判断
+ numberClick(v) {
+ let index = this.price.indexOf('.');
+ if (v !== '.') {
+ if (this.price.length === 8) {
+ return
+ }
+ if (index > -1 && this.price.slice(index + 1, this.price.length).length == 2) {
+ // 最多输入两位小数
+ this.$tool.toast('最多输入两位小数!')
+ return
+ }
+ if(this.price.length===1 && this.price ==='0'){
+ return
+ }
+ } else {
+ if (!this.price.length) {
+ return
+ }
+ // if (this.price.slice(0, 1) !== '0') {
+ // return
+ // }
+ if (index > -1) {
+ return
+ }
+ }
+ this.price += v;
+ }
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+.facepay{
+ padding-top: 44px;
+ background-color: @c-f5;
+ min-height: calc(100vh - 44px);
+
+
+ .input-box {
+ color: @c-default;
+ padding: 30px 25px;
+ position: relative;
+ margin-top: 15px;
+
+ .tag {
+ position: absolute;
+ left: 40px;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 24px;
+ }
+ }
+
+ .icon-box {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ padding-left: 30px;
+ color: @c-default;
+ .icon{
+ width: 35px;
+ height: 35px;
+ }
+ }
+
+ .input-money {
+ color: @c-default;
+ height: 55px;
+ line-height: 55px;
+ width: 100%;
+ text-align: right;
+ padding-right: 15px;
+ box-sizing: border-box;
+ border: 2px solid @c-default;
+ outline: none;
+ font-size: 18px;
+ }
+
+ .calc {
+ position: fixed;
+ bottom:0;
+ width: 100%;
+ font-size: 24px;
+ text-align: center;
+ background-color: #fff;
+ .icon-delete {
+ height: 70px;
+ .flex(center,center);
+ .icon{
+ width: 40px;
+ height: 40px;
+ }
+ }
+
+ .icon-submit {
+ height: 210px;
+ line-height: 210px;
+ color: #fff;
+ background-color: @c-default;
+ }
+
+ &::after {
+ content: "";
+ clear: both;
+ display: block;
+ }
+ }
+
+ .handler-box {
+ width: 25%;
+ float: left;
+ }
+
+ .number-box {
+ width: 75%;
+ float: left;
+
+ .number-item {
+ width: 33.3333%;
+ float: left;
+ height: 70px;
+ line-height: 70px;
+ box-sizing: border-box;
+ }
+ }
+
+
+}
+</style>
diff --git a/src/views/product/facepay/orderlist.vue b/src/views/product/facepay/orderlist.vue
new file mode 100644
index 0000000..8535bb9
--- /dev/null
+++ b/src/views/product/facepay/orderlist.vue
@@ -0,0 +1,186 @@
+<template>
+ <div class="orderlist">
+ <v-navbar title="订单明细" fixed></v-navbar>
+
+ <v-datacard class='info' :data="titledata"></v-datacard>
+ <div class="height-20-g"></div>
+
+
+
+
+ <v-order-item time='2019-08-13 11:59:09' v-for="(i,k) in list" :list='i.list'
+ :key="k">
+ <div slot="bottom-status" class="bottom-status">
+ <div class="flex-between-g order-tips">
+ <p class="time">2019-08-21 17:10:05</p>
+ <p class="soures">渠道名称:渠道0</p>
+ </div>
+ </div>
+ </v-order-item>
+
+
+
+
+ </div>
+</template>
+
+<script>
+ export default {
+ name: "orderlist",
+ data(){
+ return {
+ titledata:[
+ {
+ title:'今日成功交易金额(元)',
+ num:6
+ }
+ ],
+
+
+
+ list: [],
+
+ }
+ },
+ created(){
+ let a =[
+ {
+ type:'支付宝扫码收款',
+ value:'订单超时',
+ label:1
+ },
+ {
+ type:'支付宝扫码收款',
+ value:'订单超时',
+ label:2
+ },
+ {
+ type:'支付宝扫码收款',
+ value:'订单超时',
+ label:4
+ },
+ {
+ type:'支付宝扫码收款',
+ value:'订单超时',
+ label:5
+ },
+ {
+ type:'支付宝扫码收款',
+ value:'订单超时',
+ label:6
+ }
+ ];
+
+ this.list = a.map(item=>{
+ return {
+ user:null,
+ list:[
+ {
+ value: item.type,
+ label: '',
+ },
+ {
+ value: item.value,
+ label:item.label,
+ color:'error'
+ }
+ ]
+ }
+ })
+ },
+ methods:{
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.orderlist{
+ padding-top: 44px;
+ min-height: calc(100vh - 44px);
+ background-color: @c-f5;
+ .order-title{
+ margin:10px 0 5px;
+ .lh(44px);
+ padding-left: 15px;
+ font-weight: bold;
+ font-size: @font-14;
+ }
+
+
+
+
+ .bottom-status{
+ width: 100%;
+ margin-top: 15px;
+ }
+
+
+
+
+
+ .label{
+ font-size: @font-16;
+ }
+
+
+
+
+
+
+ .number{
+ color: @c-default;
+ font-size:@font-20;
+ }
+ .status{
+ color: #f5222d;
+ font-size: @font-16;
+ font-weight: 400;
+ margin-top: 5px;
+ }
+
+ .item{
+ margin-bottom: 18px;
+ .store-name{
+ .lh(45px);
+ background-color: @c-fff;
+ margin-bottom: 1px;
+ font-weight: 400;
+ color:#c6c6c6;
+ text-align: right;
+ padding-right: 15px;
+ }
+
+ .order-status{
+ background-color: @c-fff;
+ min-height: 100px;
+ padding: 0 15px;
+ .flex(space-between,center);
+ }
+
+ .pay-type{
+ text-align: center;
+ color: #5a5a5a;
+ font-weight: bold;
+ font-size:@font-18;
+ }
+
+ .order-status-code{
+ .flex(center,center,warp,column);
+ }
+
+ .order-tips{
+ .lh(44px);
+ background-color: #f8f5f1;
+ .flex(space-between,center);
+ padding: 0 15px;
+ border-bottom: 1px solid #d9d9d9;
+ font-size: @font-14;
+ }
+
+
+ }
+
+
+}
+</style>
diff --git a/src/views/product/gjzj-detail.vue b/src/views/product/gjzj-detail.vue
new file mode 100644
index 0000000..ed1848c
--- /dev/null
+++ b/src/views/product/gjzj-detail.vue
@@ -0,0 +1,118 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 15:36:43
+ * @Description: 购机直降——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell title='客户信息' readonly isTitle></van-cell>
+ <van-cell :value="form.userName" title='用户名称' readonly ></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly ></van-cell>
+ <van-cell :value="form.statusStr" :value-class="statusColor" title='订单状态' readonly ></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell title='合约信息' readonly isTitle></van-cell>
+ <van-cell :value="form.contName" title='合约套餐' readonly ></van-cell>
+ <van-cell :value="form.settAmt + '元'" title='结算金额' readonly ></van-cell>
+ <van-cell :value="form.monthlyFees+ '元'" title='月缴话费' readonly ></van-cell>
+ <van-cell :value="form.monthlyPayments+ '元'" title='月还款额' readonly ></van-cell>
+ <van-cell :value="form.insTermStr" title='期数' readonly ></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell title='商品信息' readonly isTitle></van-cell>
+ <van-cell :value="form.goodsBrand" title='品牌' readonly ></van-cell>
+ <van-cell :value="form.goodsName" title='名称' readonly ></van-cell>
+ <van-cell :value="form.goodsModel" title='型号' readonly ></van-cell>
+ <van-cell :value="form.goodsPrice +'元'" title='价格' readonly ></van-cell>
+ <van-cell :value="form.goodsImei" title='IMEI' readonly ></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.recordPerson || '无'" title='办单员' readonly></van-cell>
+ </div>
+ </div>
+
+ <!-- <f-button class="btn-upload" v-if="orderInfo.uploadBtn == 1" @on-click="$router.push(`/contract-order-upload/${orderInfo.orderId}`)" >上传合约凭证</f-button> -->
+ <van-button class="btn" v-if="form.uploadBtn == 1" @click="go">上传合约凭证</van-button>
+ </div>
+</template>
+
+<script>
+ export default {
+ data(){
+
+ return {
+ form:{},
+ statusColor:''
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods:{
+ init() {
+ this.$api.getGjzjDetail(this.$route.query.id).then(res => {
+ this.form = res.body;
+ if(this.form) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 6) {
+ this.statusColor = 'status-val-wait';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ }
+ }
+ })
+ },
+ // 跳转到上传合约凭证页面
+ go(){
+ this.$router.push(`/contract-order-upload/${this.form.orderId}`)
+ },
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+ .btn{
+ width: 320px;
+ background: @c-bg-default;
+ color: @c-text-fff;
+ display: block;
+ margin: 30px auto;
+ }
+</style>
diff --git a/src/views/product/gzzj-detail.vue b/src/views/product/gzzj-detail.vue
new file mode 100644
index 0000000..844ac13
--- /dev/null
+++ b/src/views/product/gzzj-detail.vue
@@ -0,0 +1,146 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 15:38:14
+ * @Description: 购机直降——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <group title="合约信息">
+ <van-cell title="合约套餐" :value="form.contName"></van-cell>
+ <van-cell title="直降金额" :value="form.strDownAmt"></van-cell>
+ <van-cell title="电子券金额" :value="form.eleBondAmt"></van-cell>
+ <van-cell title="月缴话费" :value="form.monthConsAmt"></van-cell>
+ <van-cell title="期数" :value="form.term"></van-cell>
+ </group>
+ <group title="商品信息">
+ <van-cell title="设备类型" :value="form.deviceType"></van-cell>
+ <van-cell title="品牌" :value="form.goodsBrand"></van-cell>
+ <van-cell title="名称" :value="form.goodsName"></van-cell>
+ <van-cell title="价格" :value="form.goodsPrice"></van-cell>
+ <van-cell title="IMEI/SN" :value="form.goodsImei||form.snCode"></van-cell>
+ </group>
+ <group title="订单信息">
+ <van-cell title="订单号" :value="form.orderId"></van-cell>
+ <van-cell title="订单状态" :value="form.status"></van-cell>
+ <van-cell title="用户姓名" :value="form.userName"></van-cell>
+ <van-cell title="合约手机号" :value="form.mblNo"></van-cell>
+ <van-cell v-if="form.applyTime" title="申请日期" :value="form.applyTime | timeformat('yyyy-MM-dd HH:mm:ss')"></van-cell>
+ <van-cell v-if="form.signTime" title="签约日期" :value="form.signTime | timeformat('yyyy-MM-dd HH:mm:ss')"></van-cell>
+ </group>
+ <group title="照片信息">
+ <div class="content_item fl_flex fl_row" @click="enterPics">
+ <div>相关图片</div>
+ <van-icon name="arrow" />
+ </div>
+ </group>
+ </div>
+ </div>
+</template>
+
+<script>
+ import Vue from "vue";
+ import { Dialog } from "vant";
+ import {
+ dateFormat
+ } from 'vux'
+ Vue.use(Dialog);
+ export default {
+ data(){
+ return {
+ form:{},
+ canRefund: 0,
+ orderId: this.$route.query.id,
+ showModal: false
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods:{
+ init() {
+ this.$api.getGzzjDetail(this.$route.query.id).then(res => {
+ this.form = res.body;
+ this.canRefund = res.body.canRefund;
+ });
+ },
+ enterPics() {
+ sessionStorage.pics = JSON.stringify(this.form.gzzjPicUrlVoList)
+ let queryObj = JSON.stringify(this.form.gzzjPicUrlVoList)
+ this.$router.push({
+ path: '/product/gzzj_order_detail_pics',
+ query:queryObj
+ })
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .van-cell-group {
+ margin-bottom: 10px;
+ }
+ }
+ .btn{
+ width: 320px;
+ background: @c-bg-default;
+ color: @c-text-fff;
+ display: block;
+ margin: 30px auto;
+ }
+ .btn-return {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+ .content_item {
+ width: 100%;
+ min-height: 39px;
+ padding-right: 20px;
+ padding-left: 10px;
+ margin: 10px;
+ margin-top: 20px;
+ border-bottom: 1px solid #F1F1F1;
+ justify-content: space-between;
+ box-sizing: border-box;
+ position: relative;
+ display: flex;
+ div:nth-child(1) {
+ width: 35%;
+ }
+ div:nth-child(2) {
+ width: 60%;
+ text-align: right;
+ word-break:break-all;
+ span {
+ display: inline-block;
+ text-align: left;
+ }
+ }
+ }
+</style>
diff --git a/src/views/product/gzzj_order_detail_pics.vue b/src/views/product/gzzj_order_detail_pics.vue
new file mode 100644
index 0000000..0c0a57e
--- /dev/null
+++ b/src/views/product/gzzj_order_detail_pics.vue
@@ -0,0 +1,82 @@
+
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="order_detail_pics fl_flex">
+ <van-nav-bar :fixed="true">
+ <template #left>
+ <i class="iconfont iconzuojiantou" style="font-size: 24px" @click="back"></i>
+ </template>
+ <template #title>
+ <span class="header-title">相关图片</span>
+ </template>
+ </van-nav-bar>
+ <div class="imgs fl_flex fl_row fl_wrap" @click="bigImg">
+ <img :src="item" alt="" v-for="(item,index) in list" :key="index">
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+
+ import { NavBar } from 'vant';
+ Vue.use(NavBar);
+ import { ImagePreview } from 'vant';
+ Vue.use(ImagePreview)
+ export default {
+ name: 'order_detail_pics',
+ data() {
+ return {
+ list: []
+ }
+ },
+ created() {
+ // let src = 'https://t.finlean.com'
+ let src = `https://${window.location.host}`;
+ this.list = JSON.parse(sessionStorage.getItem('pics')).map((item,index) => {
+ return `${src}/${item.path}`
+ })
+ },
+ methods: {
+ back() {
+ this.$router.go(-1)
+ },
+ bigImg() {
+ ImagePreview(this.list);
+ }
+ }
+ }
+</script>
+<style lang="less">
+ .order_detail_pics{
+ width: 100%;
+ height: 100%;
+ background: #F5F5F7;
+ .imgs {
+ width: 100%;
+ margin-top: 40px;
+ padding: 10px 10px;
+ box-sizing: border-box;
+ justify-content: flex-start;
+ img {
+ width: 22vw;
+ height: 22vw;
+ margin-top: 5px;
+ margin-right: 6px;
+ }
+ }
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .van-cell-group {
+ margin-bottom: 10px;
+ }
+ }
+</style>
diff --git a/src/views/product/hb-detail.vue b/src/views/product/hb-detail.vue
new file mode 100644
index 0000000..4c8916f
--- /dev/null
+++ b/src/views/product/hb-detail.vue
@@ -0,0 +1,382 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 20:32:32
+ * @Description: 花呗分期——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.userName" title='用户名称' readonly></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly></van-cell>
+ <!-- <van-cell :value="form.aliAccount.replace(/(\d{3})\d*(\d{2})/,'$1xxxxxx$2')" title='用户支付宝账号' readonly></van-cell> -->
+ <van-cell v-if="form.aliAccount" :value="form.aliAccount" title='用户支付宝账号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.platRate" title='智享服务费率' readonly></van-cell>
+ <van-cell :value="form.zfbRate" title='花呗分期手续费率' readonly></van-cell>
+ <van-cell :value="form.settAmt" title='分期本金' readonly></van-cell>
+ <van-cell :value="form.insTerm" title='分期期数' readonly></van-cell>
+ <van-cell :value="form.insAmt" title='还款总额' readonly></van-cell>
+ <van-cell v-if="form.dealTime" :value="form.dealTime | timeformat('yyyy-MM-dd')" title='交易时间' readonly></van-cell>
+ <van-cell v-else title='交易时间' readonly></van-cell>
+ <van-cell :value="form.goodsBrand" title='商品品牌' readonly></van-cell>
+ <van-cell :value="form.goodsName" title='商品名称' readonly></van-cell>
+ <van-cell :value="form.statusStr" :value-class="statusColor" title='订单状态' readonly></van-cell>
+ <van-cell :value="form.zfbVersionName" title='办单通道' readonly></van-cell>
+ <van-cell :value="form.payTypeName" title='支付方式' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.recordPerson || '无'" title='办单员' readonly></van-cell>
+ </div>
+
+ <!-- <div class="cell-group">
+ <van-cell :value="form.rate + '%'" title='费率' readonly></van-cell>
+ </div> -->
+ </div>
+ <!-- 短信验证码弹窗 -->
+ <van-popup v-model="yzmShow">
+ <div class="yzmbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmShow = false" />
+ <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+ <div class="yzmbox-contnet">
+ <div class="yzmbox-contnet-yzm">
+ <span>将发送到手机号:</span>
+ <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, '$1****$2') }}</span>
+ </div>
+ </div>
+ <div class="yzmbox-contnet-get">
+ <input type="text" v-model="yzmVal" placeholder="请输入验证码">
+ <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+ </div>
+ <van-button class="showbtn" :color="$store.state.backColor" round @click="yzmYes">确认</van-button>
+ </div>
+ </van-popup>
+ <!-- 退单成功弹窗 -->
+ <van-popup v-model="yzmOkShow">
+ <div class="yzmOkbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmOkShow = false" />
+ <div class="yzmOkbox-img">
+ <img src="../../assets/img/tkimg.png" alt="">
+ </div>
+ <p>退款成功</p>
+ </div>
+ </van-popup>
+ <footer class="footer flex-center-g">
+ <van-button class="btn" :color="$store.state.backColor" v-if="hasHjBackUrl" @click="goHj">返回红茄</van-button>
+ <van-button class="btn" :color="$store.state.backColor" v-if="form.refundStatus==1&&hasHjTokenGetRefBtn" @click="refund">退款</van-button>
+ <van-button class="btn" :color="$store.state.backColor" v-if="form.status==0&&form.payTypeName!='反扫'" @click="showCode">显示支付二维码</van-button>
+ </footer>
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Notify } from 'vant';
+
+ Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ // typeId: this.$route.query.typeId,
+ Open: true, //倒计时开关
+ yzmText:'获取验证码',
+ yzmOkShow: false,
+ yzmVal: '',
+ yzmShow: false, //获取验证码弹窗
+ form: {},
+ statusColor:'',
+ hasHjBackUrl:false,
+ backUrl:''
+ }
+ },
+ computed: {
+ payTypeStr(){
+ if(this.form.payType == 1){
+ return '正选'
+ }
+ if(this.form.payType == 2){
+ return '反选'
+ }
+ },
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ // hasHjBackUrl(){
+ // if(sessionStorage.hjBackUrl!='null' && sessionStorage.hjBackUrl){
+ // return true
+ // }else{
+ // return false
+ // }
+ // },
+ hasHjTokenGetRefBtn(){
+ if(typeof localStorage.hjToken !='undefined' && localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ console.log(this.typeId)
+ },
+ methods: {
+ goHj(){
+ //console.log(this.$route.query.backUrl.split('https'))
+ location.href=sessionStorage.hjBackUrl
+ },
+ //验证码弹窗确认事件
+ yzmYes() {
+ // console.log(this.yzmVal)
+ if(this.yzmVal == '' || this.yzmVal == null){
+ Notify({ type: 'danger', message: '验证码为空!' });
+ } else {
+ this.$api.hbOrderRefund({orderId:Number(this.id), verCode:this.yzmVal}).then(() => {
+ // this.$router.replace(`/product/dmf-detail?id=${this.orderId}`)
+ this.$notify('退款成功')
+ this.yzmShow = false;
+ this.yzmVal = '',
+ this.yzmOkShow = true;
+ setTimeout(() => {
+ location.reload()
+ }, 700);
+ })
+
+ }
+ },
+ //获取验证码
+ getYzm() {
+ let sendParams = {
+ // mblNo: this.userinfo.mblNo,
+ mblNo: this.userinfo.mblNo,
+ verCodeType: 11,
+ };
+ if(this.typeId != 200002) {
+ sendParams.verCodeType =11;
+ }
+ if(this.Open) {
+ this.$api.userSendMsg(sendParams).then(res => {
+ console.log(res.body)
+ this.Open = false
+ let num = 60;
+ this.yzmText = num + '秒后重发';
+ let _this = this
+ let timer = setInterval(() => {
+ num--;
+ // _this.$set(_this.yzmText = num + 's重发')
+ if(num === 0) {
+ clearInterval(timer);
+ _this.Open = true;
+ _this.yzmText = '重新发送';
+ } else {
+ _this.yzmText = num + '秒后重发';
+ }
+ },1000)
+ }).catch(()=>{
+ this.Open = true;
+ })
+ }
+ },
+ init() {
+ this.$api.getHBDetail(this.id).then((res) => {
+ this.form = res.body || {};
+
+ if(res.body.backUrl !='null' && res.body.backUrl){
+ this.hasHjBackUrl = true
+ this.backUrl = res.body.backUrl
+ }else{
+ this.hasHjBackUrl = false
+ }
+ if(this.form) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.yzmShow = true
+ // this.$api.hbOrderRefund(this.id).then((res) => {
+ // if (res.errorCode == 0) {
+ // this.$notify('退款成功');
+ // this.$router.back();
+ // }
+ // }).catch((err) => {
+
+ // });
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ window.sessionStorage.setItem("hbpayQrCodeUrl", this.form.payCode);
+ let queryObj = {
+ payQrCodeUrl:this.form.payCode,
+ orderId: this.form.orderId,
+ totalAmount: this.form.insAmt,
+ term: this.form.insTerm,
+ typeId:this.typeId || '',
+ platRate:this.form.platRate,
+ zfbRate:this.form.zfbRate,
+ backUrl:this.backUrl,
+ capitalAmt:this.form.settAmt
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
diff --git a/src/views/product/hbhy-detail.vue b/src/views/product/hbhy-detail.vue
new file mode 100644
index 0000000..bd51d61
--- /dev/null
+++ b/src/views/product/hbhy-detail.vue
@@ -0,0 +1,393 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-10-21 17:19:32
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 10:54:36
+ * @Description:
+ -->
+<template>
+ <div class="hbhy-big-box">
+ <!-- <van-nav-bar title="办理套餐" left-arrow @click-left="onClickLeft" /> -->
+ <!-- <x-header title="办理套餐" :left-options="{backText:''}"></x-header> -->
+ <v-navbar title="办理套餐" fixed></v-navbar>
+ <div class="color-box"></div>
+ <div class="user-information">
+ <div class="tit">
+ <p>用户信息</p>
+ </div>
+ <div class="user-name">
+ <van-field
+ v-model="userName"
+ label="用户姓名"
+ placeholder="请输入用户姓名"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="user-number">
+ <van-field
+ v-model="userNumber"
+ maxlength="11"
+ label="入网号码"
+ placeholder="请输入用户入网号码"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="user-number">
+ <van-field
+ v-model="tradeName"
+ label="商品名称"
+ placeholder="请输入商品名称"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ </div>
+ <div class="package-information">
+ <div class="tit">
+ <p>套餐信息</p>
+ </div>
+ <div class="package-tariff">
+ <van-field
+ class="myStyle"
+ disabled
+ custom-style="color:#333333"
+ v-model="query.packageTariff"
+ label="套餐资费"
+ placeholder="请输入套餐资费"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="total-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.totalRepayment"
+ label="总还款额"
+ placeholder="请输入总还款额"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="monthly-repayment">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.monthlyRepayment"
+ label="每月还款"
+ placeholder="请输入每月还款"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="trim">
+ <van-field
+ class="myStyle"
+ disabled
+ v-model="query.trim"
+ label="还款期数"
+ placeholder="请输入还款期数"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ <div class="merchant-arrival">
+ <van-field
+ disabled
+ v-model="query.merchantArrival"
+ label="商户到账"
+ placeholder="请输入商户到账"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ <van-field
+ disabled
+ v-model="platRatePr"
+ label="智享服务费率"
+ label-width="150px"
+ placeholder="请输入智享服务费率"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ <van-field
+ disabled
+ v-model="zfbRatePr"
+ label="花呗分期手续费率"
+ label-width="150px"
+ placeholder="请输入花呗分期手续费率"
+ input-align="right"
+ label-class="input-text"
+ style="font-size: 14px;
+ color: rgba(102, 102, 102, 1);
+ font-family:PingFang SC;"
+ />
+ </div>
+ </div>
+ <van-button
+ round
+ type="default"
+ color="#896EDB"
+ style="margin-left:10%;margin-top:120px;width:80%;background:#896EDB;color:#fff"
+ @click="createdQRCode"
+ >生成二维码</van-button>
+ <Vdialog @cancel="cancel" :show="showDia"></Vdialog>
+ </div>
+</template>
+<script>
+import Vue from "vue";
+import { NavBar } from "vant";
+import { Field } from "vant";
+import { Button } from "vant";
+import { Notify } from "vant";
+import Vdialog from "@/components/common/v-dialog.vue";
+Vue.use(Notify);
+Vue.use(Button);
+Vue.use(Field);
+Vue.use(NavBar);
+export default {
+ components:{
+ Vdialog
+ },
+ data() {
+ return {
+ showDia:false,
+ query: {
+ zfbRate:'',
+ platRate:'',
+ merchantArrival: "", //商户到账
+ trim: "", //分期期数
+ monthlyRepayment: "", //每月还款
+ totalRepayment: "", //总还款额
+ packageTariff: "", //套餐资费
+ contId: "", //套餐id
+ contName: "" //套餐名称
+ },
+ userName: "", //用户名
+ userNumber: "", //用户手机号
+ tradeName: "" //商品名称
+ };
+ },
+ computed:{
+ zfbRatePr(){
+ if(this.query.zfbRate){
+ return this.query.zfbRate + '%'
+ }else{
+ return ''
+ }
+
+ },
+ platRatePr(){
+ if(this.query.platRate){
+ return this.query.platRate + '%'
+ }else{
+ return ''
+ }
+
+ }
+ },
+ created(){
+ if(sessionStorage.hb_session_info&&this.$route.query.isCreateOrderPush){
+ let hb_session_info = JSON.parse(sessionStorage.hb_session_info)
+ this.tradeName=hb_session_info.tradeName
+ this.userName=hb_session_info.userName
+ this.userNumber=hb_session_info.userNumber
+ }
+ },
+ mounted() {
+ this.query = this.$route.query;
+ console.log(this.query);
+ },
+ methods: {
+ cancel(val){
+ this.showDia = val
+ },
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ createdQRCode() {
+ if (
+ this.userName == "" ||
+ this.userNumber == "" ||
+ this.tradeName == ""
+ ) {
+ Notify({ type: "primary", message: "姓名、入网号码、商品名称不能为空" });
+ return;
+ }
+ let hb_session_info = {
+ userName:this.userName,
+ userNumber:this.userNumber,
+ tradeName:this.tradeName
+ }
+ sessionStorage.hb_session_info=JSON.stringify(hb_session_info)
+
+ let params = {
+ contId: this.query.contId,
+ goodsName: this.tradeName,
+ userName: this.userName,
+ userMblNo: this.userNumber,
+ zfbVersion: this.$route.query.zfbVersion
+ };
+ this.$api.hbhyjCreate(params).then(res => {
+ let body = res.body;
+ this.orderId = body.orderId;
+ this.payQrCodeUrl = body.payQrCodeUrl;
+ this.totalAmount = body.totalAmount;
+ // this.trial.repayPerMonth = body.repayPerMonth;
+ // this.trial.feeRate = body.feeRate;
+ this.zfbRate = body.zfbRate
+ this.platRate = body.platRate
+ this.capitalAmt = body.capitalAmt
+ this.showConfirm = true;
+ if (body.payQrCodeUrl) {
+ sessionStorage.setItem("hbpayQrCodeUrl", body.payQrCodeUrl);
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: {
+ orderId: body.orderId,
+ payQrCodeUrl: body.payQrCodeUrl,
+ totalAmount: body.totalAmount,
+ term: this.query.trim,
+ typeId: this.query.typeId || "",
+ zfbRate: this.zfbRate,
+ platRate: this.platRate,
+ capitalAmt:this.capitalAmt
+ }
+ });
+ },err=>{
+ if(err.errorCode === 30006007){
+ console.log(111)
+ this.showDia = true
+ }
+ });
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.hbhy-big-box {
+ & {
+ position: relative;
+ background-color: #f5f5f5;
+ height: auto;
+ padding-bottom: 70px;
+ }
+ .color-box {
+ width: 100%;
+ height: 260px;
+ background: linear-gradient(
+ 180deg,
+ rgba(85, 78, 128, 1),
+ rgba(66, 61, 93, 1)
+ );
+ }
+ .user-information {
+ & {
+ position: absolute;
+ width: 90%;
+ //height: 220px;
+ background-color: white;
+ left: 5%;
+ top: 98px;
+ border-radius: 6px;
+ }
+ div {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+ .package-information {
+ & {
+ width: 90%;
+ height: 302px;
+ background-color: white;
+ margin: auto;
+ margin-top: 65px;
+ border-radius:6px;
+ }
+ div:not(:last-child) {
+ height: 50px;
+ width: 100%;
+ border-bottom: 1px solid #f5f5f5;
+ }
+ /deep/ .van-field__control:disabled {
+ //color: #333333;
+ -webkit-text-fill-color: #333333!important;
+ background-color: transparent;
+ opacity: 1;
+ }
+ .tit {
+ p {
+ color: #333333;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 50px;
+ margin-left: 5px;
+ }
+ p::before {
+ width: 3px;
+ height: 16px;
+ content: "";
+ background: rgba(137, 110, 219, 1);
+ border-radius: 0px 3px 0px 3px;
+ // left: -8px;
+ // top: 24px;
+ // position: absolute;
+ display: inline-block;
+ margin-right: 5px;
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/product/hbjl-detail.vue b/src/views/product/hbjl-detail.vue
new file mode 100644
index 0000000..24190f4
--- /dev/null
+++ b/src/views/product/hbjl-detail.vue
@@ -0,0 +1,339 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-13 16:44:11
+ * @Description: 花呗间联——订单详情
+ -->
+<template>
+ <div class="hbjl-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.userName" title='用户名称' readonly></van-cell>
+ <van-cell :value="form.mblNo" title='联系方式' readonly></van-cell>
+ <!-- <van-cell :value="form.aliAccount.replace(/(\d{3})\d*(\d{2})/,'$1xxxxxx$2')" title='用户支付宝账号' readonly></van-cell> -->
+ <van-cell v-if="form.aliAccount" :value="form.aliAccount" title='银行卡账户' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.userAmt" title='到账金额' readonly></van-cell>
+ <van-cell :value="form.insAmt" title='还款金额' readonly></van-cell>
+ <!-- <van-cell :value="form.insAmt" title='还款总额' readonly></van-cell> -->
+ <van-cell v-if="form.dealTime" :value="form.dealTime | timeformat('yyyy-MM-dd')" title='交易日期' readonly></van-cell>
+ <van-cell v-else title='交易时间' readonly></van-cell>
+ <van-cell :value="form.insTermStr" title='期数' readonly></van-cell>
+ <van-cell :value="form.statusStr" :value-class="statusColor" title='订单状态' readonly></van-cell>
+ <van-cell :value="form.orderId" title='订单号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.recordPerson || '无'" title='办单员' readonly></van-cell>
+ </div>
+ </div>
+ <!-- 短信验证码弹窗 -->
+ <van-popup v-model="yzmShow">
+ <div class="yzmbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmShow = false" />
+ <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+ <div class="yzmbox-contnet">
+ <div class="yzmbox-contnet-yzm">
+ <span>将发送到手机号:</span>
+ <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, '$1****$2') }}</span>
+ </div>
+ </div>
+ <div class="yzmbox-contnet-get">
+ <input type="text" v-model="yzmVal" placeholder="请输入验证码">
+ <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+ </div>
+ <van-button class="showbtn" round @click="yzmYes">确认</van-button>
+ </div>
+ </van-popup>
+ <!-- 退单成功弹窗 -->
+ <van-popup v-model="yzmOkShow">
+ <div class="yzmOkbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmOkShow = false" />
+ <div class="yzmOkbox-img">
+ <img src="../../assets/img/tkimg.png" alt="">
+ </div>
+ <p>退款成功</p>
+ </div>
+ </van-popup>
+ <!-- <footer class="footer flex-center-g">
+ <van-button class="btn" v-if="form.refundStatus==1" @click="refund">退款</van-button>
+ <van-button class="btn" v-if="form.status==0" @click="showCode">显示支付二维码</van-button>
+ </footer> -->
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Notify } from 'vant';
+
+ Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ // typeId: this.$route.query.typeId,
+ Open: true, //倒计时开关
+ yzmText:'获取验证码',
+ yzmOkShow: false,
+ yzmVal: '',
+ yzmShow: false, //获取验证码弹窗
+ form: {},
+ statusColor:''
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ },
+ created() {
+ this.init()
+ console.log(this.typeId)
+ },
+ methods: {
+ //验证码弹窗确认事件
+ yzmYes() {
+ // console.log(this.yzmVal)
+ if(this.yzmVal == '' || this.yzmVal == null){
+ Notify({ type: 'danger', message: '验证码为空!' });
+ } else {
+ this.$api.hbOrderRefund({orderId:Number(this.id), verCode:this.yzmVal}).then(() => {
+ // this.$router.replace(`/product/dmf-detail?id=${this.orderId}`)
+ this.$notify('退款成功')
+ this.yzmShow = false;
+ this.yzmVal = '',
+ this.yzmOkShow = true;
+ setTimeout(() => {
+ location.reload()
+ }, 700);
+ })
+
+ }
+ },
+ //获取验证码
+ getYzm() {
+ let sendParams = {
+ // mblNo: this.userinfo.mblNo,
+ mblNo: this.userinfo.mblNo,
+ verCodeType: 11,
+ };
+ if(this.typeId != 200002) {
+ sendParams.verCodeType =11;
+ }
+ if(this.Open) {
+ this.$api.userSendMsg(sendParams).then(res => {
+ console.log(res.body)
+ this.Open = false
+ let num = 60;
+ this.yzmText = num + '秒后重发';
+ let _this = this
+ let timer = setInterval(() => {
+ num--;
+ // _this.$set(_this.yzmText = num + 's重发')
+ if(num === 0) {
+ clearInterval(timer);
+ _this.Open = true;
+ _this.yzmText = '重新发送';
+ } else {
+ _this.yzmText = num + '秒后重发';
+ }
+ },1000)
+ }).catch(()=>{
+ this.Open = true;
+ })
+ }
+ },
+ init() {
+ console.log(111)
+ this.$api.hbjlOrderOrderDtl({
+ orderId:this.id
+ }).then((res) => {
+ this.form = res.body || {};
+ if(this.form) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.yzmShow = true
+ // this.$api.hbOrderRefund(this.id).then((res) => {
+ // if (res.errorCode == 0) {
+ // this.$notify('退款成功');
+ // this.$router.back();
+ // }
+ // }).catch((err) => {
+
+ // });
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ window.sessionStorage.setItem("hbpayQrCodeUrl", this.form.payCode);
+ let queryObj = {
+ payQrCodeUrl:this.form.payCode,
+ orderId: this.form.orderId,
+ totalAmount: this.form.insAmt,
+ term: this.form.insTerm,
+ typeId:this.typeId || ''
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hbjl-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
diff --git a/src/views/product/lthyj-detail.vue b/src/views/product/lthyj-detail.vue
new file mode 100644
index 0000000..edc5825
--- /dev/null
+++ b/src/views/product/lthyj-detail.vue
@@ -0,0 +1,120 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 20:32:32
+ * @Description: 花呗分期——订单详情
+ -->
+<template>
+ <div class="lthyj-detail h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell value="" title='合约信息' readonly style="font-weight: bold"></van-cell>
+ <van-cell :value="form.contName" title='合约套餐' readonly></van-cell>
+ <van-cell :value="form.monthConsAmt | dealMoney" title='月缴话费' readonly></van-cell>
+ <van-cell :value="form.term | dealTerm" title='期数' readonly></van-cell>
+ <van-cell :value="form.eleBondAmt | dealMoney" title='电子券金额' readonly></van-cell>
+ <van-cell :value="form.strDownAmt | dealMoney" title='直降金额' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell value="" title='商品信息' readonly style="font-weight: bold"></van-cell>
+ <van-cell :value="form.goodsBrand" title='品牌' readonly></van-cell>
+ <van-cell :value="form.goodsModel" title='规格' readonly></van-cell>
+ <van-cell :value="form.goodsPrice | dealMoney" title='价格' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell value="" title='订单信息' readonly style="font-weight: bold"></van-cell>
+ <van-cell :value="form.orderId || '暂无'" title='订单号' readonly></van-cell>
+ <van-cell :value="form.orderStatus || '暂无'" title='订单状态' readonly></van-cell>
+ <van-cell :value="form.userName || '暂无'" title='用户姓名' readonly></van-cell>
+ <van-cell :value="form.contMblNo || '暂无'" title='合约手机号' readonly></van-cell>
+ <van-cell :value="form.applyTime | dealTime" title='申请时间' readonly></van-cell>
+ <van-cell :value="form.signTime | dealTime" title='签约时间' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell value="" title='收货照片' readonly style="font-weight: bold"></van-cell>
+ <van-image width="100px" height="100px" :src="form.recImage" @click="preview(form.recImage)"/>
+ </div>
+ <van-image-preview v-model="showImg" :images="images">
+ </van-image-preview>
+ </div>
+ </div>
+</template>
+
+<script>
+ import {mapState} from 'vuex';
+ import Vue from 'vue';
+ import { Image as VanImage } from 'vant';
+ import dataformat from "@/utils/dateformat";
+ import { ImagePreview } from 'vant';
+ // 全局注册
+ Vue.use(ImagePreview);
+ Vue.use(VanImage);
+ export default {
+ data() {
+ return {
+ form: {},
+ showImg: false,
+ images: []
+ }
+ },
+ filters: {
+ dealMoney(val) {
+ return val ? `${val}元` : ''
+ },
+ dealTerm(val) {
+ return val ? `${val}期` : ''
+ },
+ dealTime(val) {
+ return val ? dataformat.format(val, 'yyyy-MM-dd HH:mm') : "暂无"
+ },
+ },
+ computed: {
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ this.$api.cuccOrderDetail({orderId: this.$route.query.id}).then((res) => {
+ this.form = res.body || {};
+ }).catch((err) => {});
+ },
+ preview(src) {
+ console.log(src)
+ this.showImg = true
+ this.images = [src]
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .lthyj-detail {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ width: 100%;
+ background: #fff;
+ margin-bottom: 10px;
+ .van-image {
+ margin: 20px
+ }
+ }
+ }
+</style>
diff --git a/src/views/product/shtx-detail.vue b/src/views/product/shtx-detail.vue
new file mode 100644
index 0000000..44d50ed
--- /dev/null
+++ b/src/views/product/shtx-detail.vue
@@ -0,0 +1,363 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-09-26 12:48:29
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-30 16:28:00
+ * @Description:
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <v-cell :value="form.userName" label='用户名称' readonly></v-cell>
+ <v-cell :value="form.mblNo" label='手机号' readonly></v-cell>
+ <van-cell v-if="form.aliAccount" :value="form.aliAccount" title='用户支付宝账号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.platRate" title='智享服务费率' readonly></van-cell>
+ <van-cell :value="form.zfbRate" title='花呗分期手续费率' readonly></van-cell>
+ <v-cell :value="form.settAmt" label='分期本金' readonly></v-cell>
+ <v-cell :value="form.insTerm" label='分期期数' readonly></v-cell>
+ <v-cell :value="form.insAmt" label='还款总额' readonly></v-cell>
+ <v-cell v-if="form.dealTime" :value="form.dealTime | timeformat('yyyy-MM-dd')" label='交易时间' readonly></v-cell>
+ <v-cell v-else label='交易时间' readonly></v-cell>
+ <v-cell :value="form.goodsBrand" label='商品品牌' readonly></v-cell>
+ <v-cell :value="form.goodsName" label='商品名称' readonly></v-cell>
+ <v-cell :value="form.statusStr" label='订单状态' readonly></v-cell>
+ <v-cell :value="form.zfbVersionName" label='办单通道' readonly></v-cell>
+ <v-cell :value="form.payTypeName" label='支付方式' readonly></v-cell>
+ </div>
+
+ <div class="cell-group" >
+ <v-cell :value="form.chanName || '无'" label='办理渠道' readonly></v-cell>
+ <v-cell :value="form.merName || '无'" label='办理商户' readonly></v-cell>
+ <v-cell :value="form.storeName || '无'" label='办理门店' readonly></v-cell>
+ <v-cell :value="form.recordPerson || '无'" label='办单员' readonly></v-cell>
+ </div>
+
+ <!-- <div class="cell-group">
+ <v-cell :value="form.rate + '%'" label='费率' readonly></v-cell>
+ </div> -->
+ </div>
+ <!-- 短信验证码弹窗 -->
+ <van-popup v-model="yzmShow">
+ <div class="yzmbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmShow = false" />
+ <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+ <div class="yzmbox-contnet">
+ <div class="yzmbox-contnet-yzm">
+ <span>将发送到手机号:</span>
+ <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, '$1****$2') }}</span>
+ </div>
+ </div>
+ <div class="yzmbox-contnet-get">
+ <input type="text" v-model="yzmVal" placeholder="请输入验证码">
+ <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+ </div>
+ <van-button class="showbtn" round @click="yzmYes">确认</van-button>
+ </div>
+ </van-popup>
+ <!-- 退单成功弹窗 -->
+ <van-popup v-model="yzmOkShow">
+ <div class="yzmOkbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmOkShow = false" />
+ <div class="yzmOkbox-img">
+ <img src="../../assets/img/tkimg.png" alt="">
+ </div>
+ <p>退款成功</p>
+ </div>
+ </van-popup>
+ <footer class="footer flex-center-g">
+ <van-button class="btn" v-if="hasHjBackUrl" @click="goHj">返回红茄</van-button>
+ <van-button class="btn" v-if="form.refundStatus==1&&hasHjTokenGetRefBtn" @click="refund">退款</van-button>
+ <van-button class="btn" v-if="form.status==0&&form.payTypeName!='反扫'" @click="showCode">显示支付二维码</van-button>
+ </footer>
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Notify } from 'vant';
+
+ Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ Open: true, //倒计时开关
+ yzmText:'获取验证码',
+ yzmOkShow: false,
+ yzmVal: '',
+ noDemo: 13900000000,
+ yzmShow: false, //获取验证码弹窗
+ form: {},
+ statusColor:'',
+ hasHjBackUrl:false,
+ backUrl:'',
+ }
+ },
+ computed: {
+ payTypeStr(){
+ if(this.form.payType == 1){
+ return '正选'
+ }
+ if(this.form.payType == 2){
+ return '反选'
+ }
+ },
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ // hasHjBackUrl(){
+ // if(sessionStorage.hjBackUrl!='null' && sessionStorage.hjBackUrl){
+ // return true
+ // }else{
+ // return false
+ // }
+ // },
+ hasHjTokenGetRefBtn(){
+ if(typeof localStorage.hjToken !='undefined' && localStorage.hjToken){
+ return false
+ }else{
+ return true
+ }
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ goHj(){
+ //console.log(this.$route.query.backUrl.split('https'))
+ location.href=sessionStorage.hjBackUrl
+ },
+ //验证码弹窗确认事件
+ yzmYes() {
+ // console.log(this.yzmVal)
+ if(this.yzmVal == '' || this.yzmVal == null){
+ Notify({ type: 'danger', message: '验证码为空!' });
+ } else {
+ this.$api.hbOrderRefund({orderId:Number(this.id), verCode:this.yzmVal}).then(() => {
+ // this.$router.replace(`/product/dmf-detail?id=${this.orderId}`)
+ this.$notify('退款成功')
+ this.yzmShow = false;
+ this.yzmVal = '',
+ this.yzmOkShow = true;
+ setTimeout(() => {
+ location.reload()
+ }, 700);
+ })
+
+ }
+ },
+ //获取验证码
+ getYzm() {
+ let sendParams = {
+ mblNo: this.userinfo.mblNo,
+ verCodeType: 13,
+ };
+ if(this.Open) {
+ this.$api.userSendMsg(sendParams).then(res => {
+ console.log(res.body)
+ this.Open = false
+ let num = 60;
+ this.yzmText = num + 's重发';
+ let _this = this
+ let timer = setInterval(() => {
+ num--;
+ // _this.$set(_this.yzmText = num + 's重发')
+ if(num === 0) {
+ clearInterval(timer);
+ _this.Open = true;
+ _this.yzmText = '重新发送';
+ } else {
+ _this.yzmText = num + 's重发';
+ }
+ },1000)
+ }).catch(()=>{
+ this.Open = true;
+ })
+ }
+ },
+ init() {
+ // console.log(this.id)
+ this.$api.getHBDetail(this.id).then((res) => {
+ this.form = res.body || {};
+ if(res.body.backUrl !='null' && res.body.backUrl){
+ this.hasHjBackUrl = true
+ this.backUrl = res.body.backUrl
+ }else{
+ this.hasHjBackUrl = false
+ }
+ if(this.form && this.form.status) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.yzmShow = true
+ // this.$api.hbOrderRefund(this.id).then((res) => {
+ // if (res.errorCode == 0) {
+ // this.$notify('退款成功');
+ // this.$router.back();
+ // }
+ // }).catch((err) => {
+
+ // });
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ // window.sessionStorage.setItem("hbpayQrCodeUrl", this.payCode);
+ let queryObj = {
+ orderId: this.form.orderId,
+ totalAmount: this.form.insAmt,
+ term: this.form.insTerm,
+ payQrCodeUrl:this.form.payCode,
+ typeId:this.typeId || '',
+ platRate:this.form.platRate,
+ zfbRate:this.form.zfbRate,
+ backUrl:this.backUrl
+ }
+ this.$router.push({
+ path: "/shtx-getShtxQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
diff --git a/src/views/product/wxScore-detail.vue b/src/views/product/wxScore-detail.vue
new file mode 100644
index 0000000..f4e51e8
--- /dev/null
+++ b/src/views/product/wxScore-detail.vue
@@ -0,0 +1,214 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-09 20:32:32
+ * @Description: 花呗分期——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.chanNo" title='渠道编码' readonly></van-cell>
+ <van-cell :value="form.orderStatusName" title='订单状态' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.contCode" title='活动代码' readonly></van-cell>
+ <van-cell :value="form.contName" title='活动名称' readonly></van-cell>
+ <van-cell :value="form.term" title='合约期' readonly></van-cell>
+ <van-cell :value="form.guaranteedAmt" title='担保金额' readonly></van-cell>
+ <van-cell :value="form.monGiftAmt" title='月赠费金额' readonly></van-cell>
+ </div>
+ <div class="cell-group" >
+ <van-cell :value="form.userName" title='用户姓名' readonly></van-cell>
+ <van-cell :value="form.regionName" title='归属地' readonly></van-cell>
+ <van-cell :value="form.cardNo" title='身份证号码' readonly></van-cell>
+ <van-cell :value="form.mblNo" title='手机号码' readonly></van-cell>
+ <van-cell :value="form.merName" title='商户名称' readonly></van-cell>
+ </div>
+
+ <!-- <div class="cell-group">
+ <van-cell :value="form.rate + '%'" title='费率' readonly></van-cell>
+ </div> -->
+ </div>
+ <footer class="footer flex-center-g">
+ <van-button class="btn" :color="$store.state.backColor" v-if="form.refundBtnStatus==1" @click="refund">返销</van-button>
+ <van-button class="btn" :color="$store.state.backColor" v-if="form.status==0" @click="showCode">显示支付二维码</van-button>
+ </footer>
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Notify } from 'vant';
+
+ Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ form: {},
+ }
+ },
+ computed: {
+
+ },
+ created() {
+ this.$api.wxScoreDetail({
+ id:this.$route.query.orderId
+ }).then(res => {
+ this.form = res.body || {};
+ }, err => err);
+ },
+ methods: {
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认返销'
+ }).then(() => {
+ this.$api.wxScoreRefund({
+ id:this.form.id
+ }).then(res => {
+ this.$tool.toast('返销中');
+ }, err => err);
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ let queryObj = {
+ payQrCodeUrl:this.form.payCode
+ }
+ this.$router.push({
+ path: "/wx-getWxQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
diff --git a/src/views/product/xyg-detail.vue b/src/views/product/xyg-detail.vue
new file mode 100644
index 0000000..221083f
--- /dev/null
+++ b/src/views/product/xyg-detail.vue
@@ -0,0 +1,175 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors : 小明丶
+ * @LastEditTime : 2020-01-16 11:22:19
+ * @Description: 购机直降——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell readonly isTitle>
+ <template slot="title">
+ <img src="../../assets/img/imgti.png" alt="" class="imgti">
+ <span class="custom-title">客户信息</span>
+ </template>
+ </van-cell>
+ <van-cell :value="form.userName" title='用户名称' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.statusStr" title='订单状态' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell readonly isTitle>
+ <template slot="title">
+ <img src="../../assets/img/imgti.png" alt="" class="imgti">
+ <span class="custom-title">合约信息</span>
+ </template>
+ </van-cell>
+ <van-cell :value="form.contName" title='合约套餐' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.settAmt + '元'" title='结算金额' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.monthlyFees+ '元'" title='月缴话费' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <!--<van-cell :value="form.monthlyPayments+ '元'" title='月还款额' readonly ></van-cell>-->
+ <van-cell :value="form.insTermStr" title='期数' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell readonly isTitle>
+ <template slot="title">
+ <img src="../../assets/img/imgti.png" alt="" class="imgti">
+ <span class="custom-title">商品信息</span>
+ </template>
+ </van-cell>
+ <van-cell :value="form.goodsBrand" title='品牌' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.goodsName" title='名称' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.goodsModel" title='型号' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.goodsPrice +'元'" title='价格' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ <van-cell :value="form.goodsImei" title='IMEI' readonly title-class="tot" value-class="val" style="width: 96%;margin-left: 2%;"></van-cell>
+ </div>
+
+ </div>
+
+ <!-- <f-button class="btn-upload" v-if="orderInfo.uploadBtn == 1" @on-click="$router.push(`/contract-order-upload/${orderInfo.orderId}`)" >上传合约凭证</f-button> -->
+ <f-confirm v-model="showModal" @on-confirm='confirmYes' :showCancelBtn='true'>
+ <div>是否确认退货</div>
+ </f-confirm>
+ <van-button class="btn" v-if="form.uploadBtn == 1" @click="go">上传合约凭证</van-button>
+ <van-button class="btn-return" v-if="canRefund == 1" round @click="returnGoods">退货</van-button>
+ </div>
+</template>
+
+<script>
+ import Vue from "vue";
+ import { Dialog } from "vant";
+ Vue.use(Dialog);
+ export default {
+ data(){
+ return {
+ form:{},
+ canRefund: 0,
+ orderId: this.$route.query.id,
+ showModal: false
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods:{
+ init() {
+ this.$api.getXygDetail(this.$route.query.id).then(res => {
+ this.form = res.body;
+ this.canRefund = res.body.canRefund;
+ });
+ },
+ // 跳转到上传合约凭证页面
+ go(){
+ this.$router.push(`/xyg/upload/${this.form.orderId}`)
+ },
+ //退货
+ returnGoods() {
+ this.showModal = true;
+ },
+
+ confirmYes () {
+ this.$api.h_xygRefund({ orderId: this.orderId }).then(res => {
+ this.init();
+ });
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ .imgti{
+ width: 6px;
+ height: 13px;
+ display: inline-block;
+ vertical-align: middle;
+ }
+ .content {
+ padding: 10px 0;
+ }
+
+ .cell-group {
+ margin-bottom: 12px;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 0 16px;
+ background-color: white;
+ .tixing{
+ display:inline-block;
+ border-right:solid 6px rgb(226, 112, 207);
+ border-top:solid 6px transparent;
+ border-bottom:solid 6px transparent;
+ height:6px;
+ vertical-align: middle;
+ background:linear-gradient(180deg,rgba(241,120,220,1),rgba(210,125,249,1));
+ }
+ .tot{
+ font-size: 14px;
+ color: #999999;
+ }
+ .val{
+ font-size: 14px;
+ color: #333333;
+
+ }
+ .custom-title{
+ font-size: 15px;
+ font-weight:bold;
+ color:rgba(51,51,51,1);
+ }
+ }
+ }
+ .btn{
+ width: 320px;
+ background: @c-bg-default;
+ color: @c-text-fff;
+ display: block;
+ margin: 30px auto;
+ }
+ .btn-return {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
diff --git a/src/views/product/xyg-hb-detail.vue b/src/views/product/xyg-hb-detail.vue
new file mode 100644
index 0000000..15f3a05
--- /dev/null
+++ b/src/views/product/xyg-hb-detail.vue
@@ -0,0 +1,336 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-03-19 15:52:24
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-08-11 16:22:06
+ * @Description:
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <van-nav-bar title="订单详情" fixed @click-left="goBack" v-if="this.$route.query.whereGo==1">
+ <template slot='left'>
+ <i class="iconfont iconzuojiantou" style="font-size:25px;color:#333;vertical-align: middle;"></i>
+ </template>
+ </van-nav-bar>
+ <v-navbar title="订单详情" fixed v-else></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.userName" title='用户名称' readonly></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly></van-cell>
+ <van-cell v-if="form.aliAccount" :value="form.aliAccount" title='用户支付宝账号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell :value="form.platRate" title='智享服务费率' readonly></van-cell>
+ <van-cell :value="form.zfbRate" title='花呗分期手续费率' readonly></van-cell>
+ <van-cell :value="form.settAmt" title='结算金额' readonly></van-cell>
+ <van-cell :value="form.insTermStr" title='分期期数' readonly></van-cell>
+ <van-cell :value="form.insAmt" title='还款总额' readonly></van-cell>
+ <van-cell v-if="form.dealTime" :value="form.dealTime | timeformat('yyyy-MM-dd')" title='交易时间' readonly></van-cell>
+ <van-cell v-else title='交易时间' readonly></van-cell>
+ <van-cell :value="form.retFee" title='每月还款' readonly></van-cell>
+ <van-cell :value="form.goodsName" title='商品名称' readonly></van-cell>
+ <van-cell :value="form.statusStr" :value-class="statusColor" title='订单状态' readonly></van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.recordPerson || '无'" title='办单员' readonly></van-cell>
+ </div>
+ </div>
+ <!-- 短信验证码弹窗 -->
+ <van-popup v-model="yzmShow">
+ <div class="yzmbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmShow = false" />
+ <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+ <div class="yzmbox-contnet">
+ <div class="yzmbox-contnet-yzm">
+ <span>将发送到手机号:</span>
+ <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, '$1****$2') }}</span>
+ </div>
+ </div>
+ <div class="yzmbox-contnet-get">
+ <input type="text" v-model="yzmVal" placeholder="请输入验证码">
+ <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+ </div>
+ <van-button class="showbtn" round @click="yzmYes">确认</van-button>
+ </div>
+ </van-popup>
+ <!-- 退单成功弹窗 -->
+ <!-- <van-popup v-model="yzmOkShow">
+ <div class="yzmOkbox">
+ <van-icon name="cross" class="yzmbox-close" @click="yzmOkShow = false" />
+ <div class="yzmOkbox-img">
+ <img src="../../assets/img/tkimg.png" alt="">
+ </div>
+ <p>退款成功</p>
+ </div>
+ </van-popup> -->
+ <footer class="footer flex-center-g">
+ <!-- <van-button class="btn" v-if="form.refundStatus==1" @click="refund">退款</van-button> -->
+ <van-button class="btn" v-if="form.status==0" @click="showCode">显示支付二维码</van-button>
+ </footer>
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Notify } from 'vant';
+ import { NavBar } from 'vant';
+
+ Vue.use(NavBar);
+ Vue.use(Notify);
+ export default {
+ data() {
+ return {
+ // typeId: this.$route.query.typeId,
+ Open: true, //倒计时开关
+ yzmText:'获取验证码',
+ yzmVal: '',
+ yzmShow: false, //获取验证码弹窗
+ form: {},
+ statusColor:''
+ }
+ },
+ computed: {
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ // 返回
+ goBack(){
+ this.$router.push({
+ path:'/main/home',
+ query:{
+ navIndex:6,
+ typeId:200011,
+ prodId:30000012
+ }
+ })
+ },
+ //验证码弹窗确认事件
+ yzmYes() {
+ if(this.yzmVal == '' || this.yzmVal == null){
+ Notify({ type: 'danger', message: '验证码为空!' });
+ } else {
+ this.$api.xygOrderRefundHb({orderId:Number(this.id), verCode:this.yzmVal}).then(() => {
+ this.$notify('退款成功')
+ this.yzmShow = false;
+ this.yzmVal = '',
+ setTimeout(() => {
+ location.reload()
+ }, 700);
+ })
+
+ }
+ },
+ //获取验证码
+ getYzm() {
+ let sendParams = {
+ mblNo: this.userinfo.mblNo,
+ verCodeType: 15,
+ };
+ if(this.Open) {
+ this.$api.userSendMsg(sendParams).then(res => {
+ console.log(res.body)
+ this.Open = false
+ let num = 60;
+ this.yzmText = num + '秒后重发';
+ let _this = this
+ let timer = setInterval(() => {
+ num--;
+ if(num === 0) {
+ clearInterval(timer);
+ _this.Open = true;
+ _this.yzmText = '重新发送';
+ } else {
+ _this.yzmText = num + '秒后重发';
+ }
+ },1000)
+ }).catch(()=>{
+ this.Open = true;
+ })
+ }
+ },
+ init() {
+ this.$api.xygOrderHbOrderDtl({
+ orderId:this.id
+ }).then((res) => {
+ this.form = res.body || {};
+ if(this.form) {
+ if (this.form.status == 1) {
+ this.statusColor = 'status-val-done';
+ } else if (this.form.status == 2) {
+ this.statusColor = 'status-val-error';
+ } else if (this.form.status == 3) {
+ this.statusColor = 'status-val-refund';
+ } else if (this.form.status == 0) {
+ this.statusColor = 'status-val-wait';
+ } else {
+ this.statusColor = 'status-val-done';
+ }
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.yzmShow = true
+ }).catch(() => {
+
+ });
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ window.sessionStorage.setItem("xygHbpayQrCodeUrl", this.form.payCode);
+ let queryObj = {
+ payQrCodeUrl:this.form.payCode,
+ orderId: this.form.orderId,
+ totalAmount: this.form.insAmt,
+ term: this.form.insTerm,
+ typeId:this.typeId || ''
+ }
+ this.$router.push({
+ path: "/xyg-getXygHbQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .showbtn{
+ width: 60%;
+ background: @c-default;
+ color: #fff;
+ position: absolute;
+ bottom: 15px;
+ }
+ .yzmbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ // background: #f5f5f5;
+ .flex('', center, center, column);
+ text-align: center;
+ border-radius: 6px;
+ background: #fff;
+ padding-top: 34px;
+ &-close{
+ color: #999;
+ font-size: 16px;
+ position: absolute;
+ right: 8px;
+ top: 8px;
+ }
+ &-contnet{
+ margin-top: 11px;
+ color: #999;
+ font-size: 14px;
+ &-yzm{
+ .flex(center, center);
+ // font-size: 14px;
+ span{
+ font-size: 14px;
+ // color: #999;
+ }
+
+ }
+ &-get{
+ width: 80%;
+ margin: 0 10%;
+ margin-top: 30px;
+ .flex(space-between, center);
+ input{
+ border: none;
+ width: 45%;
+ background: #fff;
+ height: 30px;
+ }
+ &-yzm{
+ color: @c-default;
+ }
+ }
+ }
+ }
+ .yzmOkbox{
+ box-sizing: border-box;
+ width: 280px;
+ height: 225px;
+ position: relative;
+ overflow: hidden;
+ .flex(center, center,'',column);
+ &-img{
+ width: 90px;
+ height: 90px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ p{
+ font-size: 16px;
+ color: #000;
+ margin-top: 16px;
+ }
+ }
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
+
diff --git a/src/views/product/zxh-detail.vue b/src/views/product/zxh-detail.vue
new file mode 100644
index 0000000..c890eea
--- /dev/null
+++ b/src/views/product/zxh-detail.vue
@@ -0,0 +1,129 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-06 15:38:14
+ * @Description: 购机直降——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell title='客户信息' readonly isTitle></van-cell>
+ <van-cell :value="form.userName" title='用户名称' readonly ></van-cell>
+ <van-cell :value="form.mblNo" title='手机号' readonly ></van-cell>
+ <van-cell :value="form.statusStr" title='订单状态' readonly ></van-cell>
+ <van-cell v-if="form.rejMessage" :value="form.rejMessage" title='拒绝原因 ' readonly ></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell title='合约信息' readonly isTitle></van-cell>
+ <van-cell :value="form.contName" title='合约套餐' readonly ></van-cell>
+ <van-cell :value="form.settAmt + '元'" title='结算金额' readonly ></van-cell>
+ <van-cell :value="form.monthlyFees+ '元'" title='月缴话费' readonly ></van-cell>
+ <!--<van-cell :value="form.monthlyPayments+ '元'" title='月还款额' readonly ></van-cell>-->
+ <van-cell :value="form.insTermStr" title='期数' readonly ></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell title='商品信息' readonly isTitle></van-cell>
+ <van-cell :value="form.goodsBrand" title='品牌' readonly ></van-cell>
+ <van-cell :value="form.goodsName" title='名称' readonly ></van-cell>
+ <van-cell :value="form.goodsModel" title='型号' readonly ></van-cell>
+ <van-cell :value="form.goodsPrice +'元'" title='价格' readonly ></van-cell>
+ <van-cell :value="form.goodsImei" title='IMEI' readonly ></van-cell>
+ </div>
+
+ </div>
+
+ <!-- <f-button class="btn-upload" v-if="orderInfo.uploadBtn == 1" @on-click="$router.push(`/contract-order-upload/${orderInfo.orderId}`)" >上传合约凭证</f-button> -->
+ <f-confirm v-model="showModal" @on-confirm='confirmYes' :showCancelBtn='true'>
+ <div>是否确认退货</div>
+ </f-confirm>
+ <van-button class="btn" v-if="form.uploadBtn == 1" @click="go">上传合约凭证</van-button>
+ <van-button class="btn-return" v-if="canRefund == 1" round @click="returnGoods">退货</van-button>
+ </div>
+</template>
+
+<script>
+ import Vue from "vue";
+ import { Dialog } from "vant";
+ Vue.use(Dialog);
+ export default {
+ data(){
+ return {
+ form:{},
+ canRefund: 0,
+ orderId: this.$route.query.id,
+ showModal: false
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods:{
+ init() {
+ this.$api.getZxhDetail(this.$route.query.id).then(res => {
+ this.form = res.body;
+ this.canRefund = res.body.canRefund;
+ });
+ },
+ // 跳转到上传合约凭证页面
+ go(){
+ this.$router.push(`/hryd/upload/${this.form.orderId}`)
+ },
+ //退货
+ returnGoods() {
+ this.showModal = true;
+ },
+
+ confirmYes () {
+ this.$api.h_refund({ orderId: this.orderId }).then(res => {
+ this.init();
+ });
+ }
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#FF9900;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+ .btn{
+ width: 320px;
+ background: @c-bg-default;
+ color: @c-text-fff;
+ display: block;
+ margin: 30px auto;
+ }
+ .btn-return {
+ width: 84%;
+ margin: 0 8%;
+ background: @c-default;
+ color: @c-text-fff;
+ display: block;
+ margin-top: 15px;
+ }
+</style>
diff --git a/src/views/relatedPictures.vue b/src/views/relatedPictures.vue
new file mode 100644
index 0000000..30890e2
--- /dev/null
+++ b/src/views/relatedPictures.vue
@@ -0,0 +1,174 @@
+<template>
+ <div class="relatedPictures h-100-g">
+ <v-navbar title="相关照片" fixed></v-navbar>
+
+ <div class="imageUpload-header">
+ <div class="imageUpload-title">
+ <h4>营业执照照片</h4>
+ <div class="imageUpload-img" @click="clickImg(businessLicense)">
+ <img :src="businessLicense" alt="">
+ </div>
+ </div>
+ <div class="imageUpload-title" v-if="zfbVersion==6 || zfbVersion==7">
+ <h4>办学许可证照片</h4>
+ <div class="imageUpload-img" @click="clickImg(bxxkPic)">
+ <img :src="bxxkPic" alt="">
+ </div>
+ </div>
+ <div class="imageUpload-title">
+ <h4>法人身份证正反面</h4>
+ <div @click="clickImg(idPositive)" class="imageUpload-img" style="width: 48%;margin-right: 1%;height: 100px; display: inline-block;vertical-align: middle">
+ <img :src="idPositive" alt="">
+ </div>
+ <div @click="clickImg(idBack)" class="imageUpload-img" style="width: 48%;display: inline-block;height: 100px;vertical-align: middle">
+ <img :src="idBack" alt="">
+ </div>
+ </div>
+ <div class="imageUpload-title ">
+ <h4>门店店内照</h4>
+ <div class="image_fix">
+ <div class="imageUpload-img" v-for="(i,index) in storeHouse" :key="index">
+ <img @click="clickImg(i)" :src="i">
+ </div>
+ </div>
+ </div>
+ <div class="imageUpload-title ">
+ <h4>门店招牌照</h4>
+ <div class="image_fix">
+ <div class="imageUpload-img" v-for="(i,index) in storeSign" :key="index">
+ <img @click="clickImg(i)" :src="i">
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ <van-popup v-model="showToast" class="dialog-demo">
+ <div class="img-box" style="font-size: 0">
+ <img :src="curSrc" @click="closeDialog()" style="max-width:100%">
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: "relatedPictures",
+ data(){
+ return {
+ list: [],
+ showToast:false,
+ curSrc:null,
+ businessLicense: '',
+ storeOne: [],
+ bxxkPic:'',
+ idPositive: '',
+ idBack: '',
+ storeSign:[], // 门店招牌照片
+ storeHouse:[] // 门店内照片
+ }
+ },
+ computed:{
+ zfbVersion(){
+ return this.$route.query.zfbVersion
+ }
+ },
+ created(){
+ this.init();
+ },
+ methods:{
+ init() {
+ let _orgId = this.$route.query.merId;
+ this.$api.merFile({merId: _orgId,zfbVersion:this.$route.query.zfbVersion}).then(res => {
+ this.list = res.body;
+ for (let i = 0; i < this.list.length; i++) {
+ if (this.list[i].fileType == 0) {
+ this.businessLicense = this.list[i].fileUrl;
+ } else if (this.list[i].fileType == 1) {
+ this.storeOne.push(this.list[i].fileUrl);
+ } else if (this.list[i].fileType == 2) {
+ this.idPositive = this.list[i].fileUrl;
+ } else if (this.list[i].fileType == 3) {
+ this.idBack = this.list[i].fileUrl;
+ }else if (this.list[i].fileType == 6) {
+ this.storeHouse.push(this.list[i].fileUrl);
+ } else if (this.list[i].fileType == 7) {
+ this.storeSign.push(this.list[i].fileUrl);
+ } else if(this.list[i].fileType == 24){
+ this.bxxkPic = this.list[i].fileUrl
+ }
+ }
+ });
+ },
+ clickImg(item){
+ this.curSrc = null;
+ this.curSrc = item;
+ this.showToast=true;
+ },
+ closeDialog(){
+ this.curSrc = null;
+ this.showToast=false
+ }
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.relatedPictures{
+ padding:60px 25px 100px 25px;
+
+ height: 100%;
+ .imageUpload-header{
+ height: 100%;
+ }
+ .imageUpload-title {
+ padding: 12px 24px;
+ h4 {
+ font-weight: normal;
+ padding-bottom: 0.5rem;
+ }
+ .imageUpload-img {
+ border: 1px dashed ;
+ width: 100%;
+ height: 150px;
+ position: relative;
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .add-center {
+ text-align: center;
+ width: 100%;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ i {
+ font-size: 30px;
+ }
+ p {
+ span {
+ display: inline-block;
+ }
+ }
+ }
+ }
+ .image_fix {
+ display: flex;
+ > div {
+ width: 102px !important;
+ height: 102px !important;
+ margin-right: 7px;
+ }
+ > div:last-child {
+ margin-right: 0 !important;
+ }
+ }
+
+
+
+
+
+}
+</style>
diff --git a/src/views/template/detail.vue b/src/views/template/detail.vue
new file mode 100644
index 0000000..62984b8
--- /dev/null
+++ b/src/views/template/detail.vue
@@ -0,0 +1,1228 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-07-10 16:37:08
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-04 16:28:09
+ * @Description: 模板详情页面 逻辑比较复杂~
+ -->
+<template>
+ <div class="template-detail-box">
+ <header class="header flex-start-g" :style="{background:$store.state.lastColor}">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:44px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconzuojiantou"></use>
+ </svg>
+ <h4 class="title text-center-g">{{tempId || merId ? '产品管理' : '新增模板'}}</h4>
+ </header>
+
+ <div class="temp-name">
+ <v-cell v-if="merId" label="模板" disabled readonly isLink :value="tempIndex ===0 ? '无模板' : currentTemp.tempName"
+ @click.native="openTempModal()"></v-cell>
+ <v-cell v-else label="模板名称" v-model="info.tempName" max="20" placeholder="请输入模板名称"> </v-cell>
+ </div>
+
+ <div class="product-box">
+ <!-- <v-cell v-if="!merId" label="商户匹配规则" :value="areaIndex ===0 ? '无匹配规则' : currentRules.name" max="20"
+ placeholder="请输入模板名称" readonly disabled isLink @click.native="openAreaModal()" class="det-btn"></v-cell> -->
+ <p class="btn-d" v-if="activeVal !== 1 && !merId && detArr.length > 0" @click="showDet">查看详情</p>
+ <v-cell v-if="!merId" label="商户匹配规则" :value="activeVal == 1 ? '无匹配规则' : activeVal == 2 ? '选择省份规则':'选择渠道规则'" max="20"
+ placeholder="请输入模板名称" readonly disabled isLink @click.native="openAreaModal()"> </v-cell>
+ <!-- 产品 -->
+ <div v-for="item in info.prodInfList" :key="item.prodId"
+ :class="merId && tempIndex!==0 ? 'bg-gray' : 'bg-fff'">
+ <div v-if="item.isShow !==0" style="margin-top:10px;">
+ <div class="flex-between-g p-title" :class="merId && tempIndex!==0 ? 'bg-gray' : ''">
+ <p>{{item.prodName}}</p>
+ <p v-if="item.prodId == 30000006 || item.prodId == 30000011">{{item.capitalStatusName}}</p>
+ <van-switch v-model="item.status" :disabled="merId && tempIndex!==0" size="25px"
+ @change="changeChildStatus(item)" :active-color="$store.state.backColor" inactive-color="#eeecf7" />
+ </div>
+ <div class="slider" v-if="item.issueList.length"></div>
+ <div :class="item.status ? '' : 'bg-gray'" v-if="item.prodId != 30000014 && item.prodId != 30000008">
+ <div class="input-box">
+ <div class="item" v-for="(el,k) in item.issueList" :key="k">
+ <div class="left goujiclass">
+ <p class="label">{{el.term}}期</p>
+ <input type="number" v-model.number="el.fee" :class="item.status ? '' : 'bg-gray'"
+ :disabled="!el.status || merId && tempIndex!==0" maxlength="5"
+ :placeholder="`请为商户设置${el.term}期费率,范围(${el.feeMin}-${el.feeMax})%`">
+ </div>
+ <van-icon v-if="el.status" name="passed" :color="$store.state.backColor" size="22"
+ @click="setChildStatus(item.status,el,false)" />
+ <div v-else class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" @click="setChildStatus(item.status,el,true)"></div>
+ </div>
+ </div>
+ <div class="slider" v-if="item.contractList.length"></div>
+ <div class="hb-box">
+ <div class="item" v-for="(contract, j) in item.contractList" :key="j">
+ <div class="left">
+ <p class="label">{{contract.name}}</p>
+ <div class="info">
+ <p>编号:{{contract.contNo}}</p>
+ <p>套餐资费:{{contract.packagePrices}}元</p>
+ <p class="btn" @click="lookDetails(contract)">查看详情</p>
+ </div>
+ </div>
+ <van-icon v-if="contract.status" name="passed" :color="$store.state.backColor" size="22"
+ @click="setChildStatus(item.status,contract,false)" />
+ <div v-else class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" @click="setChildStatus(item.status,contract,true)"></div>
+ </div>
+ </div>
+ </div>
+ <!-- 商户收款 -->
+ <div :class="item.status ? '' : 'bg-gray'" v-if="item.prodId == 30000008">
+ <div class="input-box">
+ <div class="item" v-for="(el,k) in item.payMethods" :key="k">
+ <div class="left goujiclass">
+ <p class="label" style="width:100px">{{el.payMethodName}}费率</p>
+ <input type="number" style="text-algin:right" v-model.number="el.fee" :class="item.status ? '' : 'bg-gray'"
+ disabled maxlength="5"
+ >
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- 花呗间联 -->
+ <div :class="item.status ? '' : 'bg-gray'" v-if="item.prodId == 30000014">
+ <div class="input-box">
+ <div class="item-hbjl-box" v-for="(el,k) in item.issueList" :key="k">
+ <p class="label">{{el.term}}期</p>
+ <div>
+ <div class="item-hbjl">
+ <div class="left goujiclass">
+ <input type="number" v-model.number="el.fee" :class="item.status ? '' : 'bg-gray'"
+ :disabled="!el.status || merId && tempIndex!==0" maxlength="5"
+ :placeholder="`请为商户设置${el.term}期费率,范围(${el.feeMin}-${el.feeMax})%`">
+ </div>
+ <!-- <van-icon v-if="el.status" name="passed" color="#896EDB" size="22"
+ @click="setChildStatus(item.status,el,false)" />
+ <div v-else class="circle" @click="setChildStatus(item.status,el,true)"></div> -->
+ </div>
+ <div class="item-hbjl">
+ <div class="left goujiclass">
+ <input type="number" v-model.number="el.amt" :class="item.status ? '' : 'bg-gray'"
+ :disabled="!el.status || merId && tempIndex!==0" maxlength="5"
+ :placeholder="`请为商户设置固定收益金额,范围(${el.amtMin}-${el.amtMax})`">
+ </div>
+ <!-- <van-icon v-if="el.status" name="passed" color="#896EDB" size="22"
+ @click="setChildStatus(item.status,el,false)" />
+ <div v-else class="circle" @click="setChildStatus(item.status,el,true)"></div> -->
+ </div>
+ </div>
+ <div>
+ <van-icon v-if="el.status" name="passed" :color="$store.state.backColor" size="22"
+ @click="setChildStatus(item.status,el,false)" />
+ <div v-else class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" @click="setChildStatus(item.status,el,true)"></div>
+ </div>
+ </div>
+ </div>
+ <div class="slider" v-if="item.contractList.length"></div>
+ <div class="hb-box">
+ <div class="item" v-for="(contract, j) in item.contractList" :key="j">
+ <div class="left">
+ <p class="label">{{contract.name}}</p>
+ <div class="info">
+ <p>编号:{{contract.contNo}}</p>
+ <p>套餐资费:{{contract.packagePrices}}元</p>
+ <p class="btn" @click="lookDetails(contract)">查看详情</p>
+ </div>
+ </div>
+ <van-icon v-if="contract.status" name="passed" :color="$store.state.backColor" size="22"
+ @click="setChildStatus(item.status,contract,false)" />
+ <div v-else class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" @click="setChildStatus(item.status,contract,true)"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- 选中模板详情 -->
+ <van-popup v-model="showDetail">
+ <div class="dialog-box">
+ <header class="head">
+ <svg class="icon" aria-hidden="true" style="width:97px;height:97px;">
+ <use xlink:href="#iconshenpidanchuang"></use>
+ </svg>
+ <svg class="icon close" aria-hidden="true" style="width:26px;height:26px;fill:#fff;"
+ @click="showDetail =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+
+ </header>
+ <div class="det-box dialog-content" v-if="tempId && detArr.length > 0">
+ <p>
+ <span>当前匹配规则:</span>
+ <span class="det-span" v-for="(e,i) in detArr" :key="i">{{e.name}}</span>
+ </p>
+ </div>
+ <div class="det-box dialog-content" v-if="detArr.length == 0">
+ <p style="text-align:center;line-height:125px">
+ <span>规则匹配:</span>
+ <span class="det-span">暂无,请选择规则</span>
+ </p>
+ </div>
+ </div>
+ </van-popup>
+ <!-- 匹配规则第一步 -->
+ <van-popup v-model="isShowModal" class="modal-box" position="bottom">
+ <h4 class="title">
+ 选择商户匹配规则
+ <svg class="icon close" aria-hidden="true" style="width:24px;height:24px;fill:#999;"
+ @click="isShowModal =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+ </h4>
+ <div class="my-cell" :class="activeVal-1 === index ? 'active':''" v-for="(item, index) in modoulList"
+ :key="item.value" @click="nextStep(item,index)">
+ <p>{{item.name}}</p>
+ <van-icon v-if="activeVal-1 === index" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ </van-popup>
+ <!-- 选择模板第二步省份 -->
+ <van-popup v-model="isShowModalPr" class="modal-box" position="bottom">
+ <div class="title">
+ <div style="position: absolute;top: 5px;">
+ <svg class="icon" aria-hidden="true" style="width:24px;height:24px;fill:#999;" @click="prToGo">
+ <use xlink:href="#iconzuojiantou"></use>
+ </svg>
+ </div>
+
+ <span>选择商户匹配规则</span>
+ <svg class="icon close" aria-hidden="true" style="width:24px;height:24px;fill:#999;"
+ @click="isShowModalPr =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+ </div>
+ <div class="my-cell" :class="allpr ? 'active':''" @click="getAllpr">
+ <p>全选</p>
+ <van-icon v-if="allpr" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ <div class="my-cell" :class="item.selected === 1 ? 'active':''" v-for="(item, index) in areaArr"
+ :key="index" @click="chosePr(index)">
+ <p>{{item.name}}</p>
+ <van-icon v-if="item.selected === 1" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ <!-- <div class="my-cell" :class="areaClassIndex === index ? 'active':''" v-for="(item, index) in areaArr"
+ :key="item.value" @click="areaClassIndex = index;">
+ <p>{{item.name}}</p>
+ <van-icon v-if="areaClassIndex===index" name="passed" color="#896EDB" size="22" />
+ <div class="circle" v-else></div>
+ </div> -->
+ </van-popup>
+ <!-- 选择模板第二步渠道 -->
+ <van-popup v-model="isShowModalChan" class="modal-box" position="bottom">
+ <div class="title">
+ <div style="position: absolute;top: 5px;">
+ <svg class="icon" aria-hidden="true" style="width:24px;height:24px;fill:#999;" @click="chanToGo">
+ <use xlink:href="#iconzuojiantou"></use>
+ </svg>
+ </div>
+ 选择商户匹配规则
+ <svg class="icon close" aria-hidden="true" style="width:24px;height:24px;fill:#999;"
+ @click="isShowModalChan =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+ </div>
+ <div class="my-cell" :class="allchan ? 'active':''" @click="getAllchan">
+ <p>全选</p>
+ <van-icon v-if="allchan" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ <div class="my-cell" :class="item.selected === 1 ? 'active':''" v-for="(item, index) in chanArr"
+ :key="item.value" @click="choseChan(index)">
+ <p>{{item.name}}</p>
+ <van-icon v-if="item.selected === 1" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ </van-popup>
+
+ <van-button v-show="isShowModal" :color="$store.state.backColor" class="btn-submit" style="z-index:3000;" @click="setInfoRules(1)">{{activeVal == 1 ? '确定':'下一步'}}</van-button>
+ <van-button v-show="isShowModalPr" :color="$store.state.backColor" class="btn-submit" style="z-index:3000;" @click="setInfoRules(2)">确定</van-button>
+ <van-button v-show="isShowModalChan" :color="$store.state.backColor" class="btn-submit" style="z-index:3000;" @click="setInfoRules(3)">确定</van-button>
+
+ <!-- 模板列表 -->
+ <van-popup v-model="isShowTempList" class="modal-box" position="bottom">
+ <h4 class="title">
+ 更换模板
+ <svg class="icon close" aria-hidden="true" style="width:24px;height:24px;fill:#999;"
+ @click="isShowTempList =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+ </h4>
+ <div class="my-cell" :class="tempClassIndex===index ? 'active':''" v-for="(item, index) in tempList"
+ :key="item.value" @click="tempClassIndex = index;">
+ <p>{{item.tempName}}</p>
+ <van-icon v-if="tempClassIndex===index" name="passed" :color="$store.state.backColor" size="22" />
+ <div class="circle" :style="{border:`1px solid ${$store.state.backColor}`}" v-else></div>
+ </div>
+ </van-popup>
+
+ <van-button :color="$store.state.backColor" v-show="!isShowModal && !isShowTempList" class="btn-submit save" @click="saveTemp">保存</van-button>
+
+
+
+ <!-- 合约详情 -->
+ <van-popup v-model="showDialogStyle" :close-on-click-overlay="false">
+ <div class="dialog-box">
+ <header class="head">
+ <svg class="icon" aria-hidden="true" style="width:97px;height:97px;">
+ <use xlink:href="#iconmobanxiangqingdanchuang"></use>
+ </svg>
+ <svg class="icon close" aria-hidden="true" style="width:26px;height:26px;fill:#fff;"
+ @click="showDialogStyle =false;">
+ <use xlink:href="#iconcha"></use>
+ </svg>
+
+ </header>
+ <div class="dialog-content">
+ <p class="title text-center-g">{{contractItem.name}}</p>
+ <ul class="message-box">
+ <li class="message-item">合约编号:{{contractItem.contNo}}</li>
+ <li class="message-item">还款期数:{{contractItem.nper}}期</li>
+ <li class="message-item">套餐资费:{{contractItem.packagePrices}}元</li>
+ <li class="message-item">商户结算:{{contractItem.loanAmt}}元</li>
+ <li class="message-item">月缴话费:{{contractItem.monthlyFees}}元</li>
+ <li class="message-item">月还款额:{{contractItem.monthlyPayments}}元</li>
+ </ul>
+ </div>
+ </div>
+ </van-popup>
+
+ <van-button :color="$store.state.backColor" v-show="isShowTempList" class="btn-submit" style="z-index:3001;" @click="setTempId">确定</van-button>
+
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ import Vue from 'vue';
+ import { Tab, Tabs } from 'vant';
+
+ Vue.use(Tab);
+ Vue.use(Tabs);
+ export default {
+ name: 'template_detail',
+ data() {
+ return {
+ detArr:[],//规则详情数组
+ showDetail:false,//详情弹出层
+ allchan:false,//模板渠道全选
+ allpr:false,//模板省份全选
+ activeVal:1,//选择模板第一步,1-无规则,2-省份,3-渠道
+ showDialogStyle: false,
+ isShowModal: false,//模板选择第一步
+ isShowModalChan:false,//模板选择第二步
+ isShowModalPr:false,//模板选择第三步
+ areaArr: [], //地区列表
+ chanArr:[],//渠道列表
+ modoulList:[
+ {
+ value:'999999',
+ name:'无匹配规则'
+ },
+ {
+ value:'1',
+ name:'省份'
+ },
+ {
+ value:'2',
+ name:'渠道'
+ }
+ ],//无模板
+ info: {
+ agencyId: '',
+ id: '',
+ prodInfList: [],
+ tempName: '' ,
+ tempRules: [],
+ tempType:''
+ },
+ contractItem: { //当前点击查看的合约
+
+ },
+ isShowTempList: false,
+ tempIndex: 0,
+ tempClassIndex: 0, //样式控制
+ tempList: [], //模板列表
+ areaIndex: 0,
+ areaClassIndex: false, //样式控制
+ modClassIndex:'',
+ chanClassIndex:false
+ }
+ },
+ watch:{
+ 'info.prodInfList':{
+ handler: function() {
+ this.info.ruleChange = 1
+ },
+ deep: true
+ },
+ 'info.tempRules':{
+ handler: function() {
+ this.info.ruleChange = 1
+ },
+ deep: true
+ },
+ 'info.tempType':{
+ handler: function() {
+ this.info.ruleChange = 1
+ },
+ deep: true
+ }
+ },
+ computed: {
+ ...mapState(['areaList']),
+ // 选中的地区
+ currentRules() {
+ return this.areaArr[this.areaIndex]
+ },
+ // 选中的模板
+ currentTemp() {
+ return this.tempList[this.tempIndex]
+ },
+ tempId() {
+ return this.$route.query.tempId
+ },
+ merId() {
+ return this.$route.query.merId
+ },
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ chanToGo(){
+ this.isShowModalChan = false
+ this.isShowModal = true
+ },
+ prToGo(){
+ this.isShowModalPr = false
+ this.isShowModal = true
+ },
+ // 选择省份
+ chosePr(index){
+ //按下标打钩,并且存储选中项,取消打钩的去掉存储项
+ if(this.areaArr[index].selected == 0){
+ this.areaArr[index].selected = 1
+ console.log(this.info,this.areaArr[index])
+ this.info.tempRules.push(this.areaArr[index])
+ }else{
+ this.areaArr[index].selected = 0
+ let num = this.info.tempRules.findIndex(item=>{
+ return item.code == this.areaArr[index].code
+ })
+ console.log('num:',num)
+ this.info.tempRules.splice(num,1)
+ }
+ // 有一个未打钩,取消全选,全部勾选则选中全选
+ let i = this.areaArr.findIndex(item => {
+ return item.selected == 0
+ })
+ if(i > -1){
+ this.allpr = false
+ }else{
+ this.allpr = true
+ }
+ console.log(this.info)
+ },
+ // 选择渠道
+ choseChan(index){
+ //按下标打钩,并且存储选中项,取消打钩的去掉存储项
+ if(this.chanArr[index].selected == 0){
+ this.chanArr[index].selected = 1
+ this.info.tempRules.push(this.chanArr[index])
+ }else{
+ this.chanArr[index].selected = 0
+ let num = this.info.tempRules.findIndex(item => {
+ return item.code == this.chanArr[index].code
+ })
+ console.log('num:',num)
+ this.info.tempRules.splice(num,1)
+ }
+ // 有一个未打钩,取消全选,全部勾选则选中全选
+ let i = this.chanArr.findIndex(item => {
+ return item.selected == 0
+ })
+ if(i > -1){
+ this.allchan = false
+ }else{
+ this.allchan = true
+ }
+ console.log(this.info)
+ console.log('this.chanArr:',this.chanArr)
+ },
+ // 详情弹出层
+ showDet(){
+ this.showDetail = !this.showDetail
+ },
+ // 模板渠道全选
+ getAllchan(){
+ this.allchan = !this.allchan
+ if(this.allchan){
+ this.chanArr.forEach(e=>{
+ e.selected = 1
+ })
+ this.info.tempRules = JSON.parse(JSON.stringify(this.chanArr))
+ }else{
+ this.chanArr.forEach(e=>{
+ e.selected = 0
+ })
+ this.info.tempRules = []
+ }
+ console.log(this.info)
+ },
+ // 模板省份全选
+ getAllpr(){
+ this.allpr = !this.allpr
+ if(this.allpr){
+ this.areaArr.forEach(e=>{
+ e.selected = 1
+ })
+ this.info.tempRules = JSON.parse(JSON.stringify(this.areaArr))
+ }else{
+ this.areaArr.forEach(e=>{
+ e.selected = 0
+ })
+ this.info.tempRules = []
+ }
+ console.log(this.info)
+ },
+ // 控制模板选择弹出层
+ nextStep(item,index){
+ this.modClassIndex = index;
+ this.info.tempRules = []
+ if(item.value == '999999'){
+ this.activeVal = 1
+ this.info.tempType = 1
+ }else if(item.value == '1'){
+ this.activeVal = 2
+ this.info.tempType = 2
+ this.areaArr.forEach(e=>{
+ if(e.selected == 1){
+ this.info.tempRules.push(e)
+ }
+ })
+ }else{
+ this.activeVal = 3
+ this.info.tempType = 3
+ this.chanArr.forEach(e=>{
+ if(e.selected == 1){
+ this.info.tempRules.push(e)
+ }
+ })
+ }
+ console.log(this.info)
+ },
+ // 打开 模板弹窗
+ openTempModal() {
+ this.tempClassIndex = this.tempIndex;
+ this.isShowTempList = true;
+ },
+ // 打开模板选择弹窗
+ openAreaModal() {
+ this.areaClassIndex = this.areaIndex;
+ this.isShowModal = true;
+ },
+ init() {
+ //获取地址
+ //let list = this.areaList.province_list;
+ // 增加第一个选项,可以选择无匹配规则
+ // this.areaArr.push({
+ // value:'999999',
+ // name:'无匹配规则'
+ // })
+ // for (let key in list) {
+ // this.areaArr.push({
+ // value: key,
+ // name: list[key]
+ // })
+
+ // }
+ // 初始化模板
+ // 有id的:查询详情,没有是新增
+ if (this.tempId) {
+ this.getTempDetail()
+ } else if (this.merId) {
+ this.initMerInfo()
+ } else {
+ this.initTemp()
+ }
+ },
+ // 初始化从商户管理页面进入的页面逻辑
+ initMerInfo() {
+ // 获取模板列表
+ this.$api.getTempList().then((res) => {
+ let tempList = res.body || [];
+ tempList.unshift({
+ tempName: '无匹配规则',
+ value: '999999'
+ })
+ this.tempList = tempList;
+ // 获取商户产品信息
+ this.$api.tempGetMerRef({
+ merId: this.merId,
+ // tempId: 0
+ }).then((res) => {
+ this.parseTempInfo(res.body)
+ this.setTempIndex(res.body.id)
+ }).catch((err) => {
+
+ });
+ }).catch((err) => {
+
+ });
+ },
+ // 设置当前模板
+ setTempIndex(id) {
+ let index = this.tempList.findIndex(item => {
+ return item.id == id
+ })
+ if (index > -1) {
+ this.tempIndex = index;
+ this.tempClassIndex = index;
+ }
+ },
+ //解析模板信息
+ parseTempInfo(info) {
+ let prodInfList = info.prodInfList || [];
+ prodInfList = prodInfList.map(item => {
+ let contractList = item.contractList || [],
+ issueList = item.issueList || [];
+ contractList.forEach(el => {
+ el.status = !!el.status;
+ })
+ issueList.forEach(el => {
+ el.status = !!el.status;
+ })
+ item.status = !!item.status;
+ return {
+ ...item,
+ contractList,
+ issueList
+ }
+ })
+
+ this.chanArr = info.chanIds
+ this.areaArr = info.provCodes
+ this.info.prodInfList = prodInfList
+ this.info.tempName = info.tempName
+ this.activeVal = info.tempType || 1
+ this.modClassIndex = info.tempType//规则选择第一步默认根据返回来确定
+ this.info.id = info.id || ''
+
+ // 访问详情接口时根据规则装载已选项
+ if(info.tempType == 2){
+ info.provCodes.forEach(e=>{
+ if (e.selected == 1){
+ this.info.tempRules.push(e)
+ this.detArr.push(e)
+ }
+ })
+ }
+ if(info.tempType == 3){
+ info.chanIds.forEach(e=>{
+ if (e.selected == 1){
+ this.info.tempRules.push(e)
+ this.detArr.push(e)
+ }
+ })
+ }
+
+
+ // let tempRules = info.tempRules;
+ // let index = this.areaArr.findIndex(item => {
+ // return item.value == tempRules
+ // })
+ // if (index > -1) {
+ // this.areaIndex = index;
+ // this.areaClassIndex = index;
+ // }
+
+ // this.info = {
+ // ...info,
+ // prodInfList
+ // }
+ },
+ // 获取模板详情
+ getTempDetail() {
+ this.$api.getTempDetail(this.tempId).then((res) => {
+ this.parseTempInfo(res.body)
+ }).catch((err) => {
+
+ });
+ },
+ //父开关关闭时 同时关闭所有子开关
+ changeChildStatus(item) {
+ if (!item.status) {
+ item.contractList.forEach(el => {
+ el.status = false;
+ })
+
+ item.issueList.forEach(el => {
+ el.status = false;
+ })
+ }
+ },
+ //设置子开关的状态
+ setChildStatus(parentStatus, item, val) {
+ // 商户进入页面 有模板时只能查看不能点击更改模板的状态
+ if (this.merId && this.tempIndex !== 0) {
+ return
+ }
+ if (!parentStatus) {
+ return
+ }
+ item.status = val;
+ },
+ // 获取初始化数据并重组数据
+ initTemp() {
+ this.$api.getTempInit().then(res => {
+ this.parseTempInfo(res.body)
+ return
+ });
+ },
+ //保存模版
+ saveTemp() {
+ if (!this.info.tempName) {
+ this.$notify(`请输入模板名称`)
+ return
+ }
+ if(this.info.tempRules.length == 0 && this.activeVal != 1){
+ this.$notify(`请选择对应模板规则`)
+ return
+ }
+ // if(this.info.provName=='无匹配规则'){
+ // this.info.provName = '无匹配规则'
+ // this.info.tempRules = '999999'
+ // }
+ // 深拷贝改数据,避免重组数据时ui被更新
+ let prodInfList = JSON.parse(JSON.stringify(this.info.prodInfList))
+
+ //验证被打开的花呗费率是否输入并且在规定范围内
+ for (let index = 0; index < prodInfList.length; index++) {
+ const el = prodInfList[index];
+ if (el.prodId == 30000003) {
+ let issueList = el.issueList;
+ for (let k = 0; k < issueList.length; k++) {
+ const issItem = issueList[k];
+ if ((issItem.fee == null || issItem.fee == '') && issItem.status) {
+ this.$notify(`请输入花呗${issItem.term}期费率!`)
+ return
+ }
+ if (issItem.fee && issItem.fee < issItem.feeMin || issItem.fee > issItem.feeMax) {
+ this.$notify(`请按要求范围输入花呗${issItem.term}期费率!`)
+ return
+ }
+ }
+ }
+ if (el.prodId == 30000010) {
+ let issueList = el.issueList;
+ for (let k = 0; k < issueList.length; k++) {
+ const issItem = issueList[k];
+ if ((issItem.fee == null || issItem.fee == '') && issItem.status) {
+ this.$notify(`请输入商户贴息${issItem.term}期费率!`)
+ return
+ }
+ if (issItem.fee && issItem.fee < issItem.feeMin || issItem.fee > issItem.feeMax) {
+ this.$notify(`请按要求范围输入商户贴息${issItem.term}期费率!`)
+ return
+ }
+ }
+ }
+ }
+ //验证被打开的花呗费率是否输入并且在规定范围内
+ for (let index = 0; index < prodInfList.length; index++) {
+ const el = prodInfList[index];
+ if (el.prodId == 30000014) {
+ let issueList = el.issueList;
+ for (let k = 0; k < issueList.length; k++) {
+ const issItem = issueList[k];
+ if ((issItem.fee ===null || issItem.fee === '') && issItem.status) {
+ this.$notify(`请输入花呗间联${issItem.term}期费率!`)
+ return
+ }
+ if ((issItem.amt === null || issItem.amt === '') && issItem.status) {
+ console.log('000')
+ this.$notify(`请输入花呗间联${issItem.term}期商户固定收益!`)
+ return
+ }
+ if (issItem.fee && issItem.fee < issItem.feeMin || issItem.fee > issItem.feeMax) {
+ this.$notify(`请按要求范围输入花呗间联${issItem.term}期费率!`)
+ return
+ }
+ if (issItem.amt && issItem.amt < issItem.amtMin || issItem.amt > issItem.amtMax) {
+ this.$notify(`请按要求范围输入花呗间联${issItem.term}期商户固定收益!`)
+ return
+ }
+ }
+ }
+ }
+ // return
+
+ //重组状态 boolean转换成number
+ prodInfList = prodInfList.map(item => {
+ let contractList = item.contractList || [],
+ issueList = item.issueList || [];
+ contractList = contractList.map(el => {
+ return {
+ ...el,
+ status: +el.status
+ }
+ })
+ issueList = issueList.map(el => {
+ return {
+ ...el,
+ status: +el.status
+ }
+ })
+ item.status = +item.status;
+ return {
+ ...item,
+ contractList,
+ issueList
+ }
+ })
+ let params = {
+ ...this.info,
+ prodInfList
+ }
+ if (this.merId) {
+ this.saveMerTemp(params)
+ return
+ }
+
+ if(this.tempId){
+ this.$api.tempManagerUpdate(params).then((res)=>{
+ this.$notify('保存成功!')
+ this.$router.back()
+ })
+ }else{
+ this.$api.tempSave(params).then((res) => {
+ this.$notify('保存成功!')
+ this.$router.back()
+ }).catch((err) => {
+
+ });
+ }
+
+ },
+ // 保存商户模板信息
+ saveMerTemp(params) {
+ this.$api.tempSaveMerTemp({
+ ...params,
+ merId:this.merId
+ }).then((res) => {
+ this.$notify('保存成功!')
+ this.$router.back()
+ }).catch((err) => {
+
+ });
+ },
+ //查看合约详情
+ lookDetails(item) {
+ this.showDialogStyle = true;
+ this.contractItem = item;
+ },
+ //设置商户匹配规则
+ setInfoRules(i) {
+ this.isShowModal = false;
+ if(this.activeVal == 1){
+ this.isShowModalChan = false
+ this.isShowModalPr = false
+ }
+ if(this.activeVal == 2){
+ this.areaIndex = this.areaClassIndex;
+ if(this.areaArr.length > 0){
+ this.isShowModalChan = false
+ this.isShowModalPr = true
+ }else{
+ this.isShowModalPr = false
+ this.$notify('暂无此类型规则')
+ return
+ }
+ //this.info.tempRules = this.currentRules.value;
+ //this.info.provName = this.currentRules.name;
+ if(i==2){
+ this.isShowModalPr = false
+ }
+ }
+ if(this.activeVal == 3){
+ if(this.chanArr.length > 0){
+ this.isShowModalChan = true
+ this.isShowModalPr = false
+ }else{
+ this.isShowModalChan = false
+ this.$notify('暂无此类型规则')
+ return
+ }
+ if(i==3){
+ this.isShowModalChan = false
+ }
+ }
+
+
+ },
+ //获取模板的数据,修改模板id
+ setTempId() {
+ this.tempIndex = this.tempClassIndex;
+ if (this.tempIndex === 0) {
+ this.info.id = 999999;
+ this.isShowTempList = false;
+ return
+ }
+ let id = this.tempList[this.tempIndex].id;
+ this.$api.getTempMerRef({
+ merId: this.merId,
+ tempId: id
+ }).then((res) => {
+ this.info.id = id;
+ this.isShowTempList = false;
+ this.parseTempInfo(res.body)
+ }).catch((err) => {
+
+ });
+
+ }
+ }
+ }
+</script>
+
+<style lang="less" scoped>
+ .template-detail-box {
+ position: relative;
+ background-color: @c-bg-f5;
+ padding-bottom: 100px;
+
+ .bg-gray {
+ background-color: #FAFAFA !important;
+ }
+
+ .bg-fff {
+ background-color: #ffffff;
+ }
+ }
+
+
+
+
+
+
+ .header {
+ height: 44px;
+ padding: 0 20px 30px 20px;
+ line-height: 24px;
+ font-weight: bold;
+ color: @c-text-fff;
+ background-color: @c-bg-black;
+ background-image: url('../../../static/img/circle-top.png'), url('../../../static/img/circle-bottom.png');
+ background-position: 0 0, 100% 100%;
+ background-size: 78px 65px, 54px 41px;
+ background-repeat: no-repeat;
+ text-align: center;
+ font-size: @font-16;
+
+ .icon {
+ z-index: @zIndex-20;
+ }
+
+ .title {
+ font-size: @font-16;
+ position: absolute;
+ left: 60px;
+ right: 60px;
+ }
+ }
+
+ .temp-name {
+ position: absolute;
+ top: 54px;
+ // width: 360px;
+ left: 8px;
+ right: 8px;
+ height: 50px;
+ box-shadow: 0px 4px 8px 0px rgba(66, 61, 93, 0.05);
+ border-radius: 3px;
+ }
+
+ .product-box {
+ margin-top: 48px;
+ padding: 0 8px;
+ position: relative;
+ .det-btn{
+ width: 80px;
+ height: 20px;
+ border: 1px solid #896EDB;
+ outline: none;
+ background-color: #fff;
+ color: #896EDB;
+ position: absolute;
+ top: 15px;
+ left: 120px;
+ font-size: 12px;
+ }
+ .btn-d{
+ padding: 2px 5px;
+ width: 50px;
+ height: 15px;
+ line-height: 15px;
+ text-align: center;
+ background: rgba(247, 245, 255, 1);
+ border: 1Px solid @c-text-default;
+ border-radius: 3px;
+ color: @c-text-default;
+ font-size: @font-10;
+ position: absolute;
+ top: 15px;
+ left: 120px;
+ font-size: 12px;
+ }
+ .p-title {
+ .lh(50px);
+ padding: 0 12px;
+ font-size: @font-16;
+ }
+ }
+
+ .circle {
+ border: 1px solid @c-bg-default;
+ height: 16px;
+ width: 16px;
+ border-radius: 50%;
+ margin-right: .2em;
+ }
+
+ .input-box {
+ margin-left: 25px;
+ .item-hbjl-box{
+ .flex(space-between);
+ height: 88px;
+ padding-right: 13px;
+ border-bottom:1px solid #DDDDDD;
+ }
+ .item-hbjl-box:last-child{
+ border-bottom:0;
+ }
+ .item {
+ .flex(space-between);
+ height: 44px;
+ padding-right: 13px;
+ border-bottom:1px solid #DDDDDD;
+
+ &:last-child {
+ border-bottom: none;
+ }
+
+ input[type='number'] {
+ width: 240px;
+ border: none;
+ outline: none;
+ background-color: #fff;
+ font-size: 12px;
+ }
+
+ .left {
+ .flex;
+ flex: 1;
+ }
+
+ .label {
+ font-size: 14px;
+ margin-right: 5px;
+ min-width: 40px;
+ }
+
+ }
+ .item-hbjl {
+ .flex(space-between);
+ height: 44px;
+ padding-right: 13px;
+ border-bottom:1px solid #DDDDDD;
+
+ &:last-child {
+ border-bottom: none;
+ }
+
+ input[type='number'] {
+ width: 240px;
+ border: none;
+ outline: none;
+ background-color: #fff;
+ font-size: 12px;
+ }
+
+ .left {
+ .flex;
+ flex: 1;
+ }
+
+ .label {
+ font-size: 14px;
+ margin-right: 5px;
+ min-width: 40px;
+ }
+
+ }
+ }
+
+ .hb-box {
+ margin-left: 12px;
+
+ .item {
+ height: 75px;
+ padding-right: 13px;
+ border-bottom: 1px solid #DDDDDD;
+ .flex(space-between);
+
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+
+ .left {
+ .flex(flex-start, flex-start, '', column);
+ flex: 1;
+
+ .label {
+ font-size: 14px;
+ }
+ }
+
+ .info {
+ .flex;
+ margin-top: 5px;
+ font-size: 12Px;
+
+ p {
+ margin-right: 15px;
+ color: #999999;
+ }
+
+ .btn {
+ padding: 2px 5px;
+ width: 50px;
+ height: 15px;
+ line-height: 15px;
+ text-align: center;
+ background: rgba(247, 245, 255, 1);
+ border: 1Px solid @c-text-default;
+ border-radius: 3px;
+ color: @c-text-default;
+ font-size: @font-10;
+ }
+ }
+ }
+
+ .dialog-box {
+ .head {
+ .flex(center);
+ height: 135px;
+ background-color: @c-black;
+ .gofront{
+ display: inline-block;
+ position: absolute;
+ right: 355px;
+ top: 10px;
+ }
+ .close {
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ }
+ }
+ .det-box{
+ //width: 200px;
+ //min-height: 200px;
+ box-sizing: border-box;
+ padding: 10px;
+ font-size: 16px;
+
+ .det-span{
+ margin-right: 10px;
+ }
+ }
+ .dialog-content {
+ background-color: #fff;
+ width: 300px;
+ height: 145px;
+ margin: 0 auto;
+ padding: 10px 15px;
+ box-sizing: border-box;
+
+ .title {
+ .lh(50px);
+ }
+
+ .message-box {
+ .flex(space-between);
+ flex-wrap: wrap;
+ color: @c-text-999;
+ text-align: left;
+ }
+
+ .message-item {
+ width: 50%;
+ margin-bottom: 10px;
+ }
+ }
+ }
+
+ .modal-box {
+ overflow-y: scroll;
+ padding-bottom: 54px;
+ font-size: 16px;
+ height: 400px;
+
+ .title {
+ position: relative;
+ .lh(50px);
+ text-align: center;
+ font-weight: normal;
+ color: @c-text-999;
+ border-bottom: 1px solid @c-bg-eee;
+
+ .close {
+ position: absolute;
+ right: 3px;
+ top: 3px;
+ }
+ }
+ }
+
+ .my-cell {
+ .flex(space-between);
+ height: 50px;
+ padding: 0 20px;
+
+ &.active {
+ background-color: #FAFAFA;
+ }
+ }
+
+ .btn-submit {
+ position: fixed;
+ bottom: 0;
+ .lh(50px);
+ width: 100%;
+ border: none;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ font-size: @font-16;
+
+ &.save {
+ position: fixed;
+ width: 320px;
+ left: 28px;
+ right: 28px;
+ bottom: 25px;
+ margin-top: 25px;
+ z-index: 1000;
+ border-radius: 50px;
+ }
+ }
+</style>
diff --git a/src/views/template/distribute.vue b/src/views/template/distribute.vue
new file mode 100644
index 0000000..d11050c
--- /dev/null
+++ b/src/views/template/distribute.vue
@@ -0,0 +1,327 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-29 14:12:11
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-04-30 11:29:43
+ * @Description: 分配-模板
+ -->
+<template>
+ <div class="box ">
+ <v-navbar title="分配模板" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShowFilter = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <van-search
+ v-model="searchKey"
+ shape="round"
+ placeholder="请输入商户名称"
+ @search="onSearch"
+ @clear="onCancel"
+ />
+
+ <section class="section">
+ <div class="flex-between-g title">
+ <p class="left">为以下商户分配【模板】</p>
+ <p class="right flex-start-g">
+ <span>{{isSelectAll ? '取消':'全选'}}</span>
+ <van-checkbox v-model="isSelectAll" class="icon" @change="setCheckResult"></van-checkbox>
+ </p>
+ </div>
+ <van-checkbox-group v-model="checkResult">
+ <hList :defScroll='30' :finished='finished' :loading="loading" @scroll="saleOrderLoad" height="74vh">
+ <div class="list-box">
+ <div class="item flex-between-g" v-for="(item, index) in list" :key="index">
+ <div class="flex-start-g">
+ <div class="icon-box flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:22px;height:22px;fill:#fff;">
+ <use xlink:href="#iconshanghuguanliliebiao"></use>
+ </svg>
+ </div>
+ <div>
+ <p class="name" v-text="item.merName">商户名称</p>
+ <p class="tel" v-text="item.merId">未配置产品</p>
+ </div>
+ </div>
+ <van-checkbox :key="item.merId" :name="item.merId" :disabled="item.status===1"></van-checkbox>
+ </div>
+ </div>
+ </hList>
+ </van-checkbox-group>
+ </section>
+
+ <footer class="footer">
+ <van-button class="btn" @click="save">确认分配</van-button>
+ </footer>
+
+ <v-filter v-model="isShowFilter" :areaList="areaList" :templateArr="templateArr" :hasTime="false" :hasMoney="false" hasCity :belongArr="belongArr" @search="init"></v-filter>
+
+ </div>
+</template>
+
+
+<script>
+import {calcAreaTwo} from '@/utils/index';
+import hList from '../../components/common/h-list';
+ export default {
+ components:{
+ hList
+ },
+ data() {
+ return {
+ searchKey:'',
+ finished:false,
+ loading:false,
+ isShowFilter:false,
+ isSelectAll: false,
+ checkResult: [],
+ list: [],
+ belongArr:[],
+ templateArr:[],
+ areaList:{},
+ Area:[]
+ }
+ },
+ computed:{
+ tempId(){
+ return this.$route.query.id || '';
+ }
+ },
+ created() {
+ this.init()
+ this.merInit()
+ this.getArea()
+ },
+ methods: {
+ // 确认搜索
+ onSearch(){
+ this.$api.getTempMerList({
+ tempId:this.tempId,
+ searchKey:this.searchKey
+ }).then(res=>{
+ this.list = [...res.body]
+ })
+ },
+ // 取消搜索
+ onCancel(){
+ this.$api.getTempMerList({
+ tempId:this.tempId,
+ searchKey:this.searchKey
+ }).then(res=>{
+ this.list = [...res.body]
+ })
+ },
+ // 下滑刷新
+ saleOrderLoad(params={}){
+ //this.checkResult = [];
+ this.isSelectAll = false;
+ params.tempId = this.tempId;
+ if(this.list.length >= 10){
+ params.merId = this.list[this.list.length-1].merId
+ }
+ this.$api.getTempMerList(params).then((res) => {
+ if(res.body.length < 10){
+ this.list = [...this.list,...res.body]
+ this.finished = true
+ this.loading = false
+ }else{
+ this.list = [...this.list,...res.body]
+ this.loading = false
+ this.finished = false
+ }
+ this.list.forEach(item=>{
+ if(item.status!==0){
+ this.checkResult.push(item.merId)
+ }
+ })
+ this.isShowFilter = false;
+ }).catch((err) => {
+
+ });
+ },
+ // 保存分配
+ save(){
+ let arr = this.checkResult.map(item=>item+'')
+ this.$api.saveMerListTemp({
+ merIdList:arr,
+ tempId:this.$route.query.id
+ }).then((res) => {
+ this.$notify('模板分配成功')
+ this.$router.back()
+ }).catch((err) => {
+
+ });
+ },
+ init(params={}){
+ this.checkResult = [];
+ this.isSelectAll = false;
+ params.tempId = this.tempId;
+ this.$api.getTempMerList(params).then((res) => {
+ let list = res.body || [];
+ list.forEach(item=>{
+ if(item.status!==0){
+ this.checkResult.push(item.merId)
+ }
+ })
+ if(res.body.length < 10){
+ this.finished = true
+ }
+ this.list = list;
+ this.isShowFilter = false;
+ }).catch((err) => {
+
+ });
+ },
+ merInit(){
+ this.$api.merInitFilter().then(({body}) => {
+ let chanList =body.chanList || [];
+ let templateArr =body.tempList || [];
+
+ chanList = chanList.map(val => {
+ val.name = val.chanName;
+ val.code = val.chanId;
+ return val;
+ });
+
+ templateArr = templateArr.map(val => {
+ val.name = val.tempName;
+ val.code = val.id;
+ return val;
+ });
+
+
+ if (this.orgType !== 2) {
+ this.belongArr = chanList;
+ this.templateArr = templateArr;
+ }
+ });
+ },
+ // 获取地区
+ getArea(){
+ this.$api.getOrgAreaInfo(2).then(res => {
+ let arr = [];
+ let list = res.body || [];
+ this.parseArea(list)
+ this.areaList = calcAreaTwo(this.Area)
+ //console.log(this.areaList)
+ });
+ },
+ // 全选 取消
+ setCheckResult(v) {
+ if (v) {
+ this.list.forEach(item => {
+
+ this.checkResult.push(item.merId)
+ })
+ } else {
+ this.checkResult = []
+ this.list.forEach(item => {
+ if(item.status===1){
+ this.checkResult.push(item.merId)
+ }
+ })
+ }
+ },
+ parseArea(list,){
+ list.forEach(item=>{
+ let childList = item.childList;
+ this.Area.push({
+ name:item.name,
+ value:item.code
+ })
+ if(Array.isArray(childList)){
+ this.parseArea(childList)
+ }
+ })
+ },
+
+ }
+ }
+</script>
+<style lang="less" scoped>
+ .box {
+ padding-top: 55px;
+ background-color: @c-bg-f5;
+ padding-bottom: 50px;
+ }
+
+ .title {
+ .lh(50px);
+ padding: 0 20px 0 8px;
+ background-color: @c-bg-fff;
+
+ .left {
+ color: @c-text-666;
+ }
+
+ .right {
+ color: @c-text-999;
+
+ .icon {
+ margin-left: 8px;
+ }
+ }
+ }
+
+ .section {
+ background: @c-bg-fff;
+ //padding-bottom: 20px;
+ }
+
+ .item {
+ margin: 0 8px 10px;
+ box-shadow: 0px 0px 5px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 3px;
+ background: @c-bg-fff;
+ padding: 0 12px;
+ height: 67px;
+
+ .icon-box {
+ height: 32px;
+ width: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background: @c-bg-black;
+ }
+
+ .name {
+ font-weight: bold;
+ }
+
+ .tel {
+ font-size: @font-12;
+ color: @c-text-666;
+ margin-top: 5px;
+ }
+
+ .btn {
+ .lh(25px);
+ padding: 0 12p;
+ background: @c-bg-default;
+ border-radius: 13px;
+ color: @c-text-fff;
+ }
+ }
+
+ .footer {
+ .flex(center);
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ height: 50px;
+ background-color: @c-bg-fff;
+
+ .btn {
+ .lh(44px);
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ border-radius: 22px;
+ width: 320px;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/template/list.vue b/src/views/template/list.vue
new file mode 100644
index 0000000..5ed8237
--- /dev/null
+++ b/src/views/template/list.vue
@@ -0,0 +1,141 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-29 09:14:54
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-17 09:35:51
+ * @Description: 模板列表页面
+ -->
+<template>
+ <div class="template-list-box ">
+ <v-navbar title="模板管理" fixed></v-navbar>
+ <van-search
+ v-model="searchKey"
+ shape="round"
+ placeholder="请输入模板名称/规则"
+ @search="onSearch"
+ @clear="onCancel"
+ />
+ <div class="item-group" v-if="list.length">
+ <div class="item flex-between-g" v-for="(item, index) in list" :key="index" @click="go(item.id)">
+ <div class="flex-start-g" >
+ <div class="icon-box flex-center-g" :style="{background:$store.state.backColor}">
+ <svg class="icon" aria-hidden="true" style="width:22px;height:22px;fill:#fff;">
+ <use xlink:href="#iconshanghuguanliliebiao"></use>
+ </svg>
+ </div>
+ <div>
+ <p class="name" >{{item.tempName}}</p>
+ <p class="tel">创建日期:{{item.creTime | timeformat('yyyy-MM-dd')}}</p>
+ </div>
+ </div>
+ <van-button class="btn" :color="$store.state.backColor" @click.stop="$router.push('/template/distribute?id='+item.id)">分配商户</van-button>
+ </div>
+ </div>
+ <v-button-circle icon='iconjia' @click="$router.push('/template/detail')" title='新增'></v-button-circle>
+ </div>
+</template>
+<script>
+import hList from '../../components/common/h-list';
+export default {
+ components:{
+ hList
+ },
+ data() {
+ return {
+ list:[],
+ finished:false,
+ loading:false,
+ searchKey:'',//模板名称
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods: {
+ // 确认搜索
+ onSearch(){
+ this.$api.getTempList({
+ searchKey:this.searchKey
+ }).then(res=>{
+ this.list = res.body || [];
+ })
+ },
+ // 取消搜索
+ onCancel(){
+ this.$api.getTempList({
+ earchKey:this.searchKey
+ }).then(res=>{
+ this.list = res.body || []
+ })
+ },
+ saleOrderLoad(){
+ console.log(5656)
+ this.finished = true
+ },
+ init(){
+ this.$api.getTempList().then((res) => {
+ this.list = res.body || [];
+ }).catch((err) => {
+
+ });
+ },
+ // 跳转到模板详情页面
+ go(id){
+ this.$router.push(`/template/detail?tempId=${id}`)
+ }
+ },
+
+}
+</script>
+<style lang="less" scoped>
+ .template-list-box {
+ padding-top: 55px;
+ background-color: @c-bg-f5;
+ }
+
+ .item-group {
+ background-color: @c-bg-fff;
+ //padding: 20px 0;
+ height: 80vh;
+ overflow: scroll;
+ }
+ .item-group::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+ display: none;
+ }
+ .item {
+ margin: 0 8px 10px;
+ box-shadow: 0px 0px 5px 0px rgba(66, 61, 93, 0.08);
+ border-radius: 3px;
+ background: @c-bg-fff;
+ padding: 0 12px;
+ height: 67px;
+
+ .icon-box {
+ height: 32px;
+ width: 32px;
+ margin-right: 15px;
+ border-radius: 50%;
+ background: @c-bg-black;
+ }
+
+ .name {
+ font-weight: bold;
+ }
+
+ .tel {
+ font-size: @font-12;
+ color: @c-text-666;
+ margin-top: 5px;
+ }
+
+ .btn {
+ .lh(28px);
+ width: 100px;
+ padding: 0 12px;
+ background: @c-bg-default;
+ border-radius: 13px;
+ color: @c-text-fff;
+ font-size: @font-14;
+ }
+ }
+</style>
diff --git a/src/views/user/forgetpassword.vue b/src/views/user/forgetpassword.vue
new file mode 100644
index 0000000..b176082
--- /dev/null
+++ b/src/views/user/forgetpassword.vue
@@ -0,0 +1,244 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-27 08:46:34
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-16 15:47:30
+ * @Description:
+ -->
+<template>
+ <div class="forgetpassword h-100-g">
+ <v-navbar title="忘记密码" fixed></v-navbar>
+
+
+ <div class="re-input-box">
+ <van-field
+ v-model="form.mblNo"
+ type="tel"
+ clearable
+ maxlength='11'
+ placeholder="请输入手机号码"
+ />
+ <van-field
+ v-model="form.password1"
+ clearable
+ maxlength='16'
+ :type="pwdType"
+ placeholder="请输入8-16位数字字母组合密码"
+ @click-right-icon="showPassword"
+ >
+ <van-icon :color="$store.state.backColor" :name="eye" slot="right-icon"/>
+ </van-field>
+
+ <van-field
+ v-model="form.password2"
+ clearable
+ maxlength='16'
+ :type="pwdType2"
+ placeholder="请再次输入新密码"
+ @click-right-icon="showPassword2"
+ >
+ <van-icon :color="$store.state.backColor" :name="eye2" slot="right-icon"/>
+ </van-field>
+
+
+
+ <van-field
+ v-model="form.msgCode"
+ clearable
+ maxlength='4'
+ type="number"
+ placeholder="请输入短信验证码"
+ >
+ <van-button class="mgs-btn" slot="button" size="small" @click="sendMSG" >{{ sendText }}</van-button>
+ </van-field>
+ </div>
+
+
+
+ <div class="btn-box">
+ <van-button class="btn" :color="$store.state.backColor" @click="reSetPwd">重置密码</van-button>
+ </div>
+ </div>
+</template>
+
+<script>
+ import md5 from 'blueimp-md5';
+ export default {
+ name: "forgetpassword",
+ data(){
+ return {
+ form:{
+ mblNo: '',
+ password1: '',
+ password2: '',
+ msgCode: ''
+ },
+
+ pwdType:'password',
+ pwdType2:'password',
+ eye:'closed-eye',
+ eye2:'closed-eye',
+
+
+
+ sendText:'发送验证码',
+ SEND:false,
+ timer:'',
+
+
+ ruler:[
+ {key:"mblNo",message:"请输入手机号",type:"isEmpty"},
+ {key:"mblNo",message:"请输入正确的手机号",type:"isTel"},
+ {key:"password1",message:"请输入密码",type:"isEmpty"},
+ {key:"password1",message:"请输入正确的密码",type:"isPassword"},
+ {key:"password2",message:"请输入确认密码",type:"isEmpty"},
+ {key:"msgCode",message:"请输入验证码",type:"isEmpty"},
+ {key:"msgCode",message:"请输入正确的验证码",type:"isCode"},
+ ],
+
+ ruleCode:[
+ {key:"mblNo",message:"请输入手机号",type:"isEmpty"},
+ {key:"mblNo",message:"请输入正确的手机号",type:"isTel"},
+ ],
+
+
+ }
+ },
+ computed:{
+
+ },
+ methods:{
+ //是否显示明文密码
+ showPassword() {
+ if (this.pwdType === 'password') {
+ this.pwdType = 'text';
+ this.eye = 'eye-o';
+ } else {
+ this.pwdType = 'password';
+ this.eye = 'closed-eye';
+ }
+ },
+ //是否显示明文密码
+ showPassword2() {
+ if (this.pwdType2 === 'password') {
+ this.pwdType2 = 'text';
+ this.eye2 = 'eye-o';
+ } else {
+ this.pwdType2 = 'password';
+ this.eye2 = 'closed-eye';
+ }
+ },
+
+
+ reSetPwd(){
+ if(!this.validatorForm(this.ruler)) return
+ if (this.form.password1 !== this.form.password2) {
+ this.$notify('两次密码不相同');
+ return;
+ }
+ let newPwd = md5(this.form.mblNo + this.form.password1);
+
+
+ this.$api.userForgetPwd({
+ newPwd,
+ verCode: this.form.msgCode,
+ verCodeType: 0,
+ mblNo: this.form.mblNo
+ }).then(res => {
+ this.$notify_success('重置成功!')
+ //这里更新自动登录的密码
+
+
+
+
+
+ //这里更新自动登录的密码
+ if(sessionStorage.isddxt == 1){
+ this.$router.push('/?platNo=ddxt');
+ }else{
+ this.$router.push('/');
+ }
+
+ })
+
+
+ },
+
+ //发送短信验证码
+ sendMSG(){
+ if(this.SEND){return ;}
+ this.SEND = true;
+ if(!this.validatorForm(this.ruleCode)) return
+ let sendParams = {
+ mblNo: this.form.mblNo,
+ verCodeType: 0,
+ anonySign: 'qwre',
+ chanNo: '1212'
+ };
+ this.$api.userSendMsg(sendParams).then(res=>{
+ let countDown = 60;
+ this.sendText = countDown + 's后重发';
+ this.timer = setInterval(() => {
+ countDown--;
+ this.sendText = countDown + 's后重发';
+ if (countDown === 0) {
+ clearInterval(this.timer);
+ this.sendText = '重新发送';
+ this.SEND = false;
+ }
+ }, 1000);
+ }).catch(()=>{
+ this.SEND = false;
+ })
+
+ },
+
+
+ // 验证form参数
+ validatorForm(rule = []){
+ return this.$validator(this.form,rule).check(item=>{
+ this.$notify(item.message)
+ })
+ },
+ }
+ }
+</script>
+
+<style scoped lang="less">
+.forgetpassword{
+ padding-top:50px;
+
+
+ .mgs-btn{
+ border-radius: 22px;
+ background-color: @c-fff;
+ border: none;
+ margin: 0 auto;
+ }
+
+
+
+ .re-input-box{
+ padding: 5px;
+ }
+
+ .btn-box{
+ width: 100%;
+ .flex(center,center);
+ margin-top: 40px;
+ }
+
+ .btn {
+ width: 340px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ margin: 0 auto;
+ }
+
+
+}
+</style>
diff --git a/src/views/user/index.vue b/src/views/user/index.vue
new file mode 100644
index 0000000..3f881e3
--- /dev/null
+++ b/src/views/user/index.vue
@@ -0,0 +1,12 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:31:16
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-15 10:44:09
+ * @Description:
+ -->
+<template>
+ <div>
+ <van-button>hello world</van-button>
+ </div>
+</template>
\ No newline at end of file
diff --git a/src/views/user/login.vue b/src/views/user/login.vue
new file mode 100644
index 0000000..efe6f67
--- /dev/null
+++ b/src/views/user/login.vue
@@ -0,0 +1,246 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-09 09:08:28
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-23 17:36:02
+ * @Description:
+-->
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:20:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-09 16:12:26
+ * @Description: 登录页面
+ -->
+<template>
+ <div class="login-page">
+
+ <form class="pagebody" @submit.prevent="loginBut">
+ <div class="login-input">
+ <div class="height-44">登录</div>
+
+ <div class="logo_img">
+ <img :src="loginImg" alt="">
+ </div>
+
+ <van-field v-model="userNo" type="tel" clearable maxlength='11'
+ placeholder="请输入手机号码" >
+ <template #left-icon>
+ <van-icon name="phone-o" :color="$store.state.backColor" />
+ </template>
+ </van-field>
+ <van-field v-model="password" clearable maxlength='16' :type="pwdType"
+ placeholder="请输入8-16位数字字母组合密码"
+ >
+ <template #left-icon>
+ <van-icon name="contact" :color="$store.state.backColor" />
+ </template>
+ <template #right-icon>
+ <van-icon :name="pwdType== 'text' ? 'closed-eye':'eye-o' " :color="$store.state.backColor" @click="showPassword"/>
+ </template>
+ </van-field>
+
+ <van-button :color="$store.state.backColor" class="log-btn" native-type="submit">登录</van-button>
+
+ </div>
+ <div class="input-other flex-between-g">
+ <span class="forget-pwd" @click="$router.push('/user/forgetpassword')">忘记密码?</span>
+ <span class="register-u" @click="$router.push('/user/register-home')">注册</span>
+ </div>
+ </form>
+ <div style="font-size: 12px; color: #666;text-align: center;width: 100%;margin-top: 150px;">
+ 客服电话:028-64063350
+ </div>
+ </div>
+</template>
+
+<script>
+ import {
+ mapActions,mapState
+ } from 'vuex';
+ import prodConfig from '@/utils/config'
+ export default {
+ data() {
+ return {
+ //数据
+ // 18108048791 1234qwer
+ userNo: '',
+ password: '',
+ //点击显示密码为明文,眼睛的样式也是根据这个来判断的
+ pwdType: 'password',
+ test: false,
+ loginImg: 'static/img/logo.png',
+
+ };
+ },
+
+ methods: {
+ ...mapActions(['login','loginByToken','setColor']),
+ //是否显示明文密码
+ showPassword() {
+ if (this.pwdType === 'password') {
+ this.pwdType = 'text';
+ } else {
+ this.pwdType = 'password';
+ }
+ },
+ //登录验证
+ loginBut() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.userNo)) {
+ v.toast('请输入手机号');
+ return;
+ }
+ if (!v.checkPhone(this.userNo)) {
+ v.toast('请输入正确的手机号');
+ return;
+ }
+ if (v.checkValEmpty(this.password)) {
+ v.toast('请输入密码');
+ return;
+ }
+ if (!v.checkPassword(this.password)) {
+ v.toast('请输入8-16位数字字母组合密码');
+ return;
+ }
+ this.login({
+ vm: this,
+ userNo: this.userNo,
+ password: this.password,
+ sib_mer_sysPlat: localStorage.sib_mer_sysPlat
+ })
+ },
+ },
+ created() {
+ console.log(this.$route.query.platNo)
+ sessionStorage.clear();
+ // location.href.split('?')[1].split('platNo=')[1]
+ if(this.$route.query.wxScore == '1'){
+ window.sessionStorage.setItem("wxScore",1)
+ }
+ if(this.$route.query.platNo == 'ddxt'){
+ console.log(111)
+ window.document.title = '叮咚学堂'
+ window.sessionStorage.setItem("isddxt",1)
+ this.loginImg = "static/img/ddxtlogo.png"
+ this.setColor({
+ backColor:'#ff8e01',
+ backJbColorF:'#ff7b00',
+ backJbColorB:'#ff8e01',
+ defaultBgColor:'linear-gradient(90deg, #ff7b00, #ff8e01)',
+ lastColor:'#ff8e01'
+ })
+ }
+ console.log(this.loginImg)
+ if (this.$route.query.sysPlat !== undefined) {
+ localStorage.sib_mer_sysPlat = this.$route.query.sysPlat // 1 微信 2支付宝
+ }
+ prodConfig.setClientInfo();
+ if (!localStorage.getItem('deviceInfo')) {
+ //H5环境
+ // this.loginImg = 'static/img/logo.png';
+ } else {
+ //APP环境,拉渠道json
+ prodConfig.fetchProductConfig().then(
+ res => {
+ //让该渠道和json里面的渠道列表做匹配,拿到登陆页面的Logo
+ let childChan = JSON.parse(localStorage.getItem('deviceInfo')).childChan;
+ let chanList = res.childChanList;
+ let chanKeys = Object.keys(chanList);
+ if (chanKeys.includes(childChan)) {
+ this.loginImg = chanList[childChan].icon;
+ } else {
+ //如果没有找到该渠道,则显示默认图片
+ this.loginImg = 'https://sie.jycash.cn/scene/img/zlwjr.png';
+ }
+ }
+ )
+ }
+ }
+ };
+</script>
+<style lang="less" scoped>
+ #app .vux-header::after {
+ display: none;
+ }
+
+ .login-page {
+ background-color: @c-fff;
+ min-height: 662px;
+
+ .log-btn {
+ border-radius: 22px;
+ }
+
+ .logo_img {
+ width: 100px;
+ height: 100px;
+ margin: 0 auto;
+ padding: 48px 0;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ .pagebody {
+ padding: 0 24px;
+
+
+ .height-44 {
+ .lh(44px);
+ .flex(center, center);
+ font-size: @font-20;
+ color: @c-333;
+ }
+
+
+ .weui-cell {
+ padding: 0;
+ margin-top: 12px;
+ }
+
+ .weui-select {
+ padding: 0;
+ }
+
+ .vux-cell-value {
+ width: 100%;
+ }
+
+ .weui-cells:before {
+ display: none;
+ }
+
+ .weui-cell:before {
+ display: none;
+ }
+
+ .weui-cells:after {
+ display: none;
+ }
+
+ .f-button {
+ width: 100%;
+ }
+ }
+
+ .login-icon {
+ font-size: 20px;
+ padding-right: 12px;
+ }
+
+ .icon-pd {
+ padding-left: 1rem;
+ }
+
+ .input-other {
+ margin-top: 20px;
+
+ .register {
+ float: right;
+ }
+ }
+ }
+</style>
diff --git a/src/views/user/loginByWx.vue b/src/views/user/loginByWx.vue
new file mode 100644
index 0000000..55fab74
--- /dev/null
+++ b/src/views/user/loginByWx.vue
@@ -0,0 +1,255 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-09 09:43:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-07 10:34:23
+ * @Description: 微信扫码登录页面
+-->
+<template>
+ <div class="login-by-wx">
+ <div class="height-44" v-if="showContent">登录</div>
+ <div class="info-box" v-if="showContent">
+ <van-field
+ v-model="phoneNum"
+ type="tel"
+ clearable
+ maxlength="11"
+ left-icon="phone-o left-icon"
+ placeholder="请输入手机号码"
+ />
+ <van-field
+ v-model="code"
+ type="number"
+ clearable
+ maxlength="4"
+ left-icon="envelop-o left-icon"
+ input-align="left"
+ placeholder="请输入短信验证码"
+ >
+ <template #button>
+ <van-button color="#896EDB" style="width:60px" size="mini" @click="getCode" :disabled="isDisabled" plain type="info">{{btnText}}</van-button>
+ </template>
+ </van-field>
+ <van-button
+ round
+ type="info"
+ color="#896EDB"
+ style="width: 100%; margin-top: 150px"
+ @click="loginhanld"
+ >登录</van-button
+ >
+ </div>
+ <div v-if="!showContent"></div>
+ </div>
+</template>
+<script>
+import LoginBox from "../../components/common/h-login-box.vue";
+import { GoWeChat } from "../../utils/wechat";
+import { mapActions } from 'vuex';
+import Vue from 'vue';
+import { Toast } from 'vant';
+
+Vue.use(Toast);
+export default {
+ components: {
+ LoginBox,
+ },
+ data() {
+ return {
+ btnText: "获取验证码",
+ phoneNum: "", //电话
+ code: "", //验证码
+ openId: "", //微信openID
+ showContent: false, //显示内容或者输入框
+ urlCode: "", //授权后回调链接上截取的code值
+ timer: "", //定时器
+ isDisabled:false,
+ };
+ },
+ created() {
+
+ if(!sessionStorage.sib_wx_merId || typeof sessionStorage.sib_wx_merId == 'undefined'){
+ sessionStorage.sib_wx_merId = location.href.split('?')[1].split('=')[1]
+ }
+ clearTimeout(this.timer);
+ this.urlCode = this.getUrlCode("code");
+ console.log(this.urlCode);
+ this.init();
+ },
+ methods: {
+ ...mapActions(['loginByOpenId']),
+ /**
+ * @description:初始化授权
+ * @returns void
+ * **/
+ init() {
+ this.openId = localStorage.sib_wx_openId;
+ console.log(this.openId)
+ this.showContent = false;
+ // 模拟数据本地调试
+ // this.openId = "oJbj21YwUatdNaYf3iEPwwGtWuUg";
+ //this.urlCode = "021qXn000q9GCK1xU7300xMP1p0qXn0A";
+ if (
+ (!this.openId && !this.urlCode) ||
+ (typeof this.openId == "undefined" && !this.urlCode)
+ ) {
+ console.log(111);
+ let url = location.host;
+ // url = "t.finlean.com";
+ var str = encodeURIComponent(`https://${url}/sib_wx_score/#/loginByWx`);
+ var fn = new GoWeChat("wx594ab33e0466eccf", str);
+ fn.gocontract();
+ } else {
+ if(!this.openId && this.urlCode){
+ this.$api.getWeChatUserInfo({
+ code:this.urlCode
+ }).then(res=>{
+ this.openId = res.body
+
+ this.showContent = true;
+ })
+ }
+ else if(this.openId && !this.urlCode){
+ this.$api.checkOpenIdIsBind({
+ wechatOpenId:this.openId,
+ merId:sessionStorage.sib_wx_merId
+ }).then(res=>{
+ this.showContent = true;
+ if(res.body.isBind === 1){
+ localStorage.sib_wx_mblNo = res.body.mblNo
+ localStorage.sib_wx_userId = res.body.userId
+ this.loginByOpenId({
+ vm: this,
+ loginType:2,
+ verCode:this.code,
+ mblNo:res.body.mblNo,
+ merId:sessionStorage.sib_wx_merId,
+ wechatOpenId:this.openId,
+ userId:res.body.userId
+ })
+ // this.$router.push('/mine/toggle-identity?title=选择门店')
+ }
+ })
+ }
+
+
+ }
+ },
+ /**
+ * @description:截取code值
+ * @returns void
+ * **/
+ getUrlCode(name) {
+ return (
+ decodeURIComponent(
+ (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+ location.href
+ ) || [, ""])[1].replace(/\+/g, "%20")
+ ) || null
+ );
+ },
+ /**
+ * @description:倒计时
+ * @param {number} 秒数
+ * @return void
+ * **/
+ timeOut(time) {
+ time = time - 1;
+ if (time === 0) {
+ clearTimeout(this.timer);
+ this.btnText = '重新获取'
+ this.isDisabled = false
+ } else {
+ this.isDisabled = true
+ this.timer = setTimeout(() => {
+ this.btnText = `${time}S`;
+ this.timeOut(time);
+ }, 1000);
+ }
+ },
+ loginhanld(){
+ let v = this.$tool;
+ if(v.checkValEmpty(this.phoneNum)){
+ Toast.fail('请输入手机号');
+ return;
+ }
+ if(!v.checkPhone(this.phoneNum)){
+ Toast.fail('请输入姓名');
+ return;
+ }
+ if(v.checkValEmpty(this.code)){
+ Toast.fail('请输入验证码');
+ return;
+ }
+ this.loginByOpenId({
+ vm: this,
+ loginType:1,
+ verCode:this.code,
+ mblNo:this.phoneNum,
+ merId:sessionStorage.sib_wx_merId,
+ wechatOpenId:this.openId
+ })
+
+ // this.$api.loginByOpenId({
+ // loginType:1,
+ // verCode:this.code,
+ // mblNo:this.phoneNum,
+ // merId:sessionStorage.sib_wx_merId,
+ // wechatOpenId:this.openId
+ // }).then(res=>{
+ // localStorage.sib_wx_mblNo = res.body.mblNo
+ // localStorage.sib_wx_userId = res.body.userId
+ // commit(SET_SESSION_ID, 'beef1616-fc2a-43a3-8c27-deb7837bde06');
+ // this.$router.push('/mine/toggle-identity?title=选择门店')
+ // })
+ },
+ getCode(){
+ this.$api.userSendMsg({
+ verCodeType:2,
+ mblNo:this.phoneNum
+ }).then(res=>{
+ this.timeOut(60)
+ })
+ }
+ },
+};
+</script>
+<style lang="less" scoped>
+.login-by-wx {
+ & {
+ background-color: #fff;
+ min-height: 100vh;
+ }
+ .height-44 {
+ .lh(44px);
+ .flex(center, center);
+ font-size: @font-20;
+ color: @c-333;
+ }
+ .info-box {
+ & {
+ width: 100%;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ padding: 0 24px;
+ box-sizing: border-box;
+ }
+ .btn {
+ width: 100px;
+ border: 0;
+ outline: none;
+ background: #fff;
+ position: relative;
+ }
+ .btn::before {
+ content: "";
+ position: absolute;
+ height: 15px;
+ border: solid 1px #ebedf0;
+ left: 0px;
+ }
+ }
+}
+</style>
diff --git a/src/views/user/register-home.vue b/src/views/user/register-home.vue
new file mode 100644
index 0000000..68c1f72
--- /dev/null
+++ b/src/views/user/register-home.vue
@@ -0,0 +1,533 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-23 17:52:37
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-12-14 18:10:05
+ * @Description:
+ -->
+<template>
+ <div class="register-home ">
+ <div style="min-height: 570px;">
+ <v-navbar title="注册" fixed back>
+ <div slot="left-back" style="display: flex;">
+ <svg class="icon" aria-hidden="true" style="width:25px;height:44px;" @click="back">
+ <use xlink:href="#iconzuojiantou"></use>
+ </svg>
+ </div>
+ </v-navbar>
+
+
+ <div class="register-home-box">
+
+
+ <!-- 步骤一 -->
+ <div class="step1" v-if="step == 0">
+ <van-field v-model.trim="form.merName" clearable maxlength='80' placeholder="请输入商户名称" />
+ <van-field v-model.trim="form.licenseNo" clearable maxlength='20' placeholder="请输入营业执照号" />
+ <van-field v-model.trim="form.legalName" clearable maxlength='12' placeholder="请输入法人姓名" />
+ <van-field v-model.trim="form.legalIdNo" clearable maxlength='18' placeholder="请输入法人身份证号" />
+ <van-field v-model.trim="form.addrText" clearable :readonly="true" right-icon="arrow"
+ @click="isShowArea = !isShowArea" placeholder="请选择省市区" />
+ <van-field v-model.trim="form.dtlAddr" clearable maxlength='64' placeholder="请输入您的详细地址" />
+ <!-- 扫码进入页面的没有邀请码 -->
+ <van-field v-if="ShowqrCode" v-model.trim="form.inviteCode"
+ :placeholder="getQr ? '已扫描':'邀请码'" />
+ <van-button :color="$store.state.backColor" class="btn" @click="nextStep">下一步</van-button>
+ <!-- <van-cell v-if="ShowqrCode" :readonly="true" :value="form.licenseNo"
+ placeholder="邀请码">
+ </van-cell> -->
+ </div>
+
+
+
+
+
+
+
+
+ <!-- 步骤二 -->
+ <div class="step2" v-if="step == 1">
+ <van-field v-model.trim="form.priName" clearable maxlength='12' placeholder="请输入负责人姓名" />
+ <van-field v-model.trim="form.priMblNo" type="tel" clearable maxlength='11' placeholder="请输入负责人手机号" />
+
+ <div class="tips" :style="{color:$store.state.backColor}">*该手机号将作为登录用户名,密码将通过短信下发至手机</div>
+
+ <van-field style="margin-top: 0.3rem" v-model.trim="form.priEmail" clearable placeholder="请输入联系人邮箱" />
+
+
+ <van-button :color="$store.state.backColor" class="btn" @click="nextStep">下一步</van-button>
+ </div>
+
+
+
+
+
+
+
+
+ <!-- 步骤三 -->
+ <div class="step3" v-if="step == 2">
+
+ <div>
+ <p class="content-box">
+ <b> 【审慎阅读】</b>您的申请注册流程中点击同意前,应当认真阅读以下协议。请您务必审慎阅读、充分理解协议中相关条款内容。阅读协议的过程中,<u>如果您不同意相关协议或其中任何条款规定,您应立即停止注册程序。</u>
+ </p>
+ <div class="agreement-title" :style="{color:$store.state.backColor}" @click="showAgreementFunc(1)">《平台使用协议》</div>
+ <!--<div class="agreement-title" @click="showAgreementFunc(2)">《智分期商户协议》</div>-->
+ </div>
+
+ <van-button :color="$store.state.backColor" class="btn" @click="nextStep">{{ saveText }}</van-button>
+ </div>
+
+
+
+
+
+
+
+
+ </div>
+
+ <van-popup v-model="ShowAgreen">
+ <div class="agreenBox">
+ <div class="agreen-html" v-html="Agreend"></div>
+ <div class="close-agreen" @click="ShowAgreen = false">
+ <van-icon name="close" :color="$store.state.backColor"/>
+ </div>
+ </div>
+ </van-popup>
+
+
+ <van-popup v-model="isShowArea" position="bottom" :close-on-click-overlay="false">
+ <van-area ref='Area' :area-list='areaList' @cancel="closeAreaModal" @confirm="setAreaValue"></van-area>
+ </van-popup>
+ </div>
+ <div style="font-size: 12px; color: #666;text-align: center;width: 100%;margin-top: 20px;">
+ 客服电话:028-60102895
+ </div>
+ </div>
+</template>
+
+<script>
+ import createUserProtocol from '@/utils/createUserProtocol';
+ import {
+ SET_APP_LOADING
+ } from '@/store/mutations-types';
+ import {
+ mapState,
+ mapMutations
+ } from 'vuex';
+ export default {
+ name: "register-home",
+ data() {
+ return {
+ form: {
+ //第一步
+ inviteCode: '', //邀请码
+ merName: '', //商户名称
+ licenseNo: '', //营业执照号
+ legalName: '', //法人姓名
+ legalIdNo: '', //法人身份证号
+ orgId: '',
+ orgType: '',
+ // orgId: '100001',
+ // orgType: '1',
+ dtlAddr: '',
+ addr: {
+ province: {
+ code: '',
+ name: ''
+ },
+ city: {
+ code: '',
+ name: ''
+ },
+ area: {
+ code: '',
+ name: ''
+ },
+ dtlAddr: '' //详细地址
+ },
+ addrText: '',
+
+
+ //第二步
+ priName: '', //负责人姓名
+ priMblNo: '', //请输入负责人手机号
+ priEmail: '', //请输入联系人邮箱
+
+ protocol: ''
+ },
+ isShowArea: false,
+ getQr: false,
+
+ saveText: '下一步',
+ step: 0,
+ ShowAgreen: false,
+ Agreend: '',
+
+
+ ShowqrCode:true,
+
+ //第一步验证
+ ruleOne: [
+ // {key:"merName",message:"请输入商户名称",type:"isEmpty"},
+ // {key:"merName",message:"请输入正确的商户名称",rule:/^[\u4e00-\u9fa50-9a-zA-Z]{1,40}$/},
+ // {key:"licenseNo",message:"请输入营业执照号",type:"isEmpty"},
+ // {key:"licenseNo",message:"请输入正确的营业执照号",rule:/^[0-9a-zA-Z]{1,20}$/},
+ {
+ key: "legalName",
+ message: "请输入法人代表姓名",
+ type: "isEmpty"
+ },
+ // {
+ // key: "legalName",
+ // message: "请输入正确的法人代表姓名",
+ // rule: /^[\u4e00-\u9fa5]{1,12}$/
+ // },
+ {
+ key: "legalIdNo",
+ message: "请输入法人代表身份证号",
+ type: "isEmpty"
+ },
+ {
+ key: "legalIdNo",
+ message: "请输入正确的身份证号",
+ type: "isIdCard"
+ },
+ {
+ key: "addrText",
+ message: "请选择省市区",
+ type: "isEmpty"
+ },
+ {
+ key: "dtlAddr",
+ message: "请输入详细地址",
+ rule: /\S/
+ },
+ ],
+
+
+
+
+ //第二步验证
+ ruleTwo: [{
+ key: "priName",
+ message: "请输入负责人姓名",
+ type: "isEmpty"
+ },
+ // {
+ // key: "priName",
+ // message: "请输入正确的负责人姓名",
+ // rule: /^[\u4e00-\u9fa5]{1,6}$/
+ // },
+ {
+ key: "priMblNo",
+ message: "请输入负责人手机号",
+ type: "isEmpty"
+ },
+ {
+ key: "priMblNo",
+ message: "请输入正确的负责人手机号",
+ type: "isTel"
+ },
+ {
+ key: "priEmail",
+ message: "请输入联系人邮箱",
+ type: "isEmpty"
+ },
+ {
+ key: "priEmail",
+ message: "请输入正确的联系人邮箱",
+ type: "isEmail"
+ },
+ ],
+
+
+
+ }
+ },
+ computed: {
+ ...mapState(['areaList']),
+ orgId() {
+ return this.$route.query.orgId || '';
+ }
+ },
+ created() {
+ console.log(localStorage.sib_mer_sysPlat == 'undefined')
+ if(this.$route.query.orgId){
+ this.form.orgId = this.$route.query.orgId || '';
+ this.form.orgType = this.$route.query.orgType || '';
+ this.ShowqrCode = false;
+ }
+ this.initWXToken(location.origin + location.pathname);
+ },
+ methods: {
+ ...mapMutations([SET_APP_LOADING]),
+ back() {
+ if (this.step === 0) {
+ this.$router.go(-1)
+ }
+ this.step--;
+ },
+
+ //显示协议
+ showAgreementFunc(which) {
+ this.ShowAgreen = true;
+ let protocol = createUserProtocol(this.form); //协议二
+ this.form.protocol = protocol;
+ if(window.sessionStorage.getItem("wxScore") && window.sessionStorage.getItem("wxScore") == '1'){
+ which === 1 ? this.Agreend = agreement5 : this.Agreend = protocol;
+ }else{
+ which === 1 ? this.Agreend = agreement1 : this.Agreend = protocol;
+ }
+ },
+
+ // 验证form参数
+ validatorForm(rule = []) {
+ return this.$validator(this.form, rule).check(item => {
+ this.$notify(item.message)
+ })
+ },
+
+ //关闭地区弹窗
+ closeAreaModal() {
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+
+ //保存 地区选择
+ setAreaValue(arr) {
+ this.form.addrText = arr[0].name + '-' + arr[1].name + '-' + arr[2].name;
+ this.form.addr = {
+ province: {
+ code: arr[0].code,
+ name: arr[0].name
+ },
+ city: {
+ code: arr[1].code,
+ name: arr[1].name
+ },
+ area: {
+ code: arr[2].code,
+ name: arr[2].name
+ },
+ }
+ this.isShowArea = false;
+ this.$refs.Area.reset()
+ },
+
+
+
+ nextStep() {
+
+ /**
+ * 第一步
+ * */
+ if (this.step === 0) {
+ if (!this.validatorForm(this.ruleOne)) return
+ // if(!this.$route.query.orgId){
+ // if (!this.getQr) {
+ // this.$notify('请识别二维码');
+ // return;
+ // }
+ // }
+ }
+
+
+ /**
+ * 第二步
+ * */
+ if (this.step === 1) {
+ if (!this.validatorForm(this.ruleTwo)) return
+ this.saveText = '同意协议';
+ }
+
+
+
+ /**
+ * 第三步
+ * */
+ if (this.step === 2) {
+ this.form.addr.dtlAddr = this.form.dtlAddr
+ this.form.protocol = createUserProtocol(this.form); //协议二
+ let sysPlat = localStorage.sib_mer_sysPlat
+ if (sysPlat === 'undefined' || sysPlat === '1') {
+ sysPlat = 1
+ }
+ if (sysPlat === '2') {
+ sysPlat = 2
+ }
+ this.form.sysPlat = sysPlat
+ console.log(this.form);
+ this.$api.merRegist(this.form).then(res => {
+ this.$toast.success(`注册成功,请耐心等待审核!`);
+ if(sessionStorage.isddxt == 1){
+ this.$router.push('/?platNo=ddxt');
+ }else{
+ this.$router.push('/');
+ }
+
+ }).catch(err=>{
+ this.step -= 1;
+ });
+ }
+ this.step++;
+ },
+
+
+
+ //代理所属渠道
+ getRegIDAndType() {
+ let _this = this;
+ console.log('js 调用原生android 方法=====》');
+ window.sessionStorage.removeItem('scene_regInfos');
+ if (window.android && window.android.fetchQrCode) {
+ _this.SET_APP_LOADING(true);
+ window.android.fetchQrCode();
+ let count = 0;
+ let setInterId = setInterval(function () {
+ let _tempStr = window.sessionStorage.getItem(
+ 'scene_regInfos'
+ );
+ count++;
+ if (_tempStr && _tempStr.length > 0) {
+ // QRGoBack 这个值不能修改这里的只是和android 值同步的
+ if (_tempStr == 'QRGoBack') {
+ // _this.getQr = false;
+ _this.SET_APP_LOADING(false);
+ } else {
+ _tempStr = JSON.parse(_tempStr);
+ _this.form.orgId = _tempStr.orgId;
+ _this.form.orgType = _tempStr.orgType;
+ if(_tempStr.orgId){
+ // _this.ShowqrCode = false;
+ }
+ _this.getQr = true;
+ _this.SET_APP_LOADING(false);
+ }
+ clearInterval(setInterId);
+ }
+ }, 60);
+ } else {
+ wx.scanQRCode({
+ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+ scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
+ success: function (res) {
+ var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
+ if (result && (result + '').indexOf('orgId') > -1) {
+ result = JSON.parse(result);
+ _this.form.orgId = result.orgId;
+ _this.form.orgType = result.orgType;
+ if(result.orgId){
+ // _this.ShowqrCode = false;
+ }
+ _this.getQr = true;
+ } else {
+ _this.$notify('无效的二维码');
+ }
+ }
+ });
+ }
+ },
+
+
+ initWXToken(parUrl) {
+ this.$api.getTokenInfo({
+ url: parUrl
+ }).then(
+ function (res) {
+ if (res.errorCode === 0) {
+ // 第二步骤 只需要首页地址分享 ,需要在每次变化时调用
+ wx.config({
+ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+ appId: res.body.appId,
+ timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+ nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+ signature: res.body.signature, // 必填,签名,见附录1
+ jsApiList: [
+ 'checkJsApi',
+ 'scanQRCode',
+ 'getLocation'
+ ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+ });
+ }
+ },
+ function (error) {
+ if (error.response) {
+ console.log(error.response);
+ }
+ }
+ );
+ }
+
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .agreement-title {
+ margin-top: 25px;
+ color: @c-default;
+ }
+
+
+ .agreenBox {
+ width: 80vw;
+ height: 70vh;
+ padding: 60px 20px 30px 20px;
+ position: relative;
+ }
+
+ .agreen-html {
+ width: 100%;
+ height: 100%;
+ overflow: scroll;
+ box-sizing: border-box;
+ }
+
+
+ .close-agreen {
+ .lh(30px);
+ .flex(center, center);
+
+ .van-icon {
+ font-size: @font-16;
+ }
+ }
+
+
+ .register-home {
+ padding-top: 44px;
+ padding-bottom: 100px;
+
+ .van-cell {
+ margin-top: 10px;
+ }
+
+ .register-home-box {
+ padding: 10px 20px 50px;
+
+
+ }
+
+ .tips {
+ font-size: @font-12;
+ padding-left: 0.32rem;
+ margin-top: 8px;
+ color: @c-default;
+ }
+
+ .btn {
+ width: 340px;
+ height: 44px;
+ border: none;
+ margin: 40px auto;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ }
+ }
+</style>
diff --git a/src/views/user/register.vue b/src/views/user/register.vue
new file mode 100644
index 0000000..4ebae6f
--- /dev/null
+++ b/src/views/user/register.vue
@@ -0,0 +1,186 @@
+<!--
+ * @Author: 陈登伟丶
+ * @Date: 2019-08-21 15:01:00
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-03 17:24:25
+ * @Description:
+ -->
+<template>
+ <div class="register h-100-g">
+ <v-navbar title="商户注册" fixed></v-navbar>
+ <div v-if="!base64" :style="{'height':height+'px'}">
+
+
+
+ <!-- <div class="layout-box" ref="register">
+ <div class="nav-bar-header"></div>
+
+
+
+ <div class="qr-box">
+ <div class="qr-nav"></div>
+ <p class="qr-title">
+ <img :src="IMG1" alt="">
+ </p>
+ <p class="qr-tip">综合分期平台</p>
+ <div class="qr-code" :style="{backgroundImage:'url('+ require('@/assets/img/bg-qr-code.png') +')'}">
+ <div ref="QRCode1">
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+ <p class="qr-tip2"> <img :src="IMG2" alt=""></p>
+ </div>
+
+
+
+ <div class="recommed-box">
+ <div class="recommed-list">
+ <div class="recommed-item" v-for="(item,index) in dataList" :key="index">
+ <svg class="icon" aria-hidden="true">
+ <use :xlink:href="item.icon"></use>
+ </svg>
+ <p class="recommed-title" v-text="item.title">手机分期</p>
+ </div>
+ </div>
+ <p class="t-end">注册完成后请关注“<span style="color: #896EDB">智享收银台</span>”公众号</p>
+ </div>
+ </div>
+
+
+
+
+ <div class="circle c1"></div>
+ <div class="circle c2"></div>
+ <div class="circle c3"></div> -->
+ <div class="layout-box h-100-g" ref="register">
+ <div class="qr-code">
+ <div ref="QRCode1">
+ <img :src="dataUrl" alt="">
+ </div>
+ </div>
+ <img src="static/img/share_pic.png" class="img-fluid-g" alt="">
+ </div>
+ </div>
+
+ <div v-else>
+ <img :src="base64" alt="" class="img-fluid-g">
+ </div>
+ <div class="ser-phone" style="font-size: 12px; color: #666;text-align: center;width: 100%;position: absolute;bottom: 20px;">
+ 客服电话:028-60102895
+ </div>
+ </div>
+
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import QRCode from 'qrcode';
+ import html2canvas from 'html2canvas';
+ import IMG1 from '@/assets/img/zxsyt.png';
+ import IMG2 from '@/assets/img/shsaom.png';
+
+ export default {
+ name: "register",
+ data() {
+ return {
+ base64: '',
+ dataUrl: '',
+ qrCodeBase64Url: '',
+
+ IMG1: IMG1,
+ IMG2: IMG2,
+ height: document.body.clientHeight - 44,
+
+ dataList: [{
+ title: '花呗分期',
+ icon: '#iconhuabeifenqi1'
+ },
+ {
+ title: '手机分期',
+ icon: '#iconshoujifenqi1'
+ },
+ {
+ title: '信用卡分期',
+ icon: '#iconxinyongkafenqi1'
+ },
+ {
+ title: '合约机分期',
+ icon: '#iconheyuejifenqi'
+ }
+ ],
+
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType'])
+ },
+ mounted() {
+ let _this = this;
+ // let url = {
+ // orgId: this.userinfo.orgId,
+ // orgType: this.orgType
+ // };
+ let url = location.origin + location.pathname +
+ `#/user/register-home?orgId=${this.userinfo.orgId}&orgType=${this.orgType}`
+ if(window.sessionStorage.getItem("chanSource")){
+ url = url + '&chanSource='+window.sessionStorage.getItem("chanSource");
+ }
+ QRCode.toDataURL(url, {
+ margin: 0,
+ width: 157
+ },
+ (err, url) => {
+ if (err) console.error(err);
+ _this.dataUrl = url;
+ setTimeout(() => {
+ this.createImg()
+ }, 300);
+ }
+ );
+ },
+ methods: {
+ createImg() {
+ let that = this;
+ html2canvas(this.$refs.register, {
+ backgroundColor: null
+ }).then(canvas => {
+ let base64 = canvas.toDataURL();
+ that.base64 = base64;
+ });
+
+ }
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .register {
+ padding-top: 44px;
+ background-color: #423d5d;
+ position: relative;
+ // overflow: hidden;
+ // padding-bottom: 50px;
+
+ .layout-box {
+ position: relative;
+ background-color: #423d5d;
+
+ }
+
+ .qr-code {
+ position: absolute;
+ width: 170px;
+ height: 170px;
+ top: 110px;
+ left: 102px;
+ .flex(center, center, warp, column);
+ img {
+ max-width: 157px;
+ }
+ }
+ }
+</style>
diff --git a/src/views/user/reset-pwd.vue b/src/views/user/reset-pwd.vue
new file mode 100644
index 0000000..4707963
--- /dev/null
+++ b/src/views/user/reset-pwd.vue
@@ -0,0 +1,142 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 18:12:00
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-19 16:41:42
+ * @Description:
+ -->
+<!--
+ 修改密码
+-->
+<template>
+ <div class="reset-pwd h-100-g">
+ <v-navbar title="修改密码" fixed></v-navbar>
+
+
+ <div class="cell-group">
+ <v-cell v-model="form.oldPwd" label='原密码' placeholder="请输入原密码"></v-cell>
+ <v-cell v-model="form.newPwd" label='新密码' placeholder="请输入8-16位数字字母组合密码"></v-cell>
+ <v-cell v-model="form.rePwd" label='确认新密码' placeholder="请再次输入新密码"></v-cell>
+ </div>
+
+
+ <footer class="flex-center-g footer">
+ <van-button class="btn" :color="$store.state.backColor" @click="reSetPwd">确认修改</van-button>
+ </footer>
+ </div>
+</template>
+
+<script>
+ import md5 from 'blueimp-md5';
+ import {
+ SET_SESSION_ID,
+ SET_USER_INFO
+ } from '@/store/mutations-types';
+ import {
+ mapState,
+ mapMutations
+ } from 'vuex';
+ export default {
+ name: "reset-pwd",
+ data() {
+ return {
+ form: {
+ oldPwd: '',
+ newPwd: '',
+ rePwd: ''
+ },
+
+ rule: [{
+ key: "oldPwd",
+ message: "请输入原密码",
+ type: "isEmpty"
+ },
+ {
+ key: "newPwd",
+ message: "请输入新密码",
+ type: "isEmpty"
+ },
+ {
+ key: "newPwd",
+ message: "请设置8-16位数字+字母组合密码",
+ type: "isPassword"
+ },
+ ]
+ }
+ },
+ computed: {
+ ...mapState(['userinfo'])
+ },
+ methods: {
+ ...mapMutations([SET_USER_INFO, SET_SESSION_ID]),
+ // 验证form参数
+ validatorForm() {
+ return this.$validator(this.form, this.rule).check(item => {
+ this.$notify(item.message)
+ })
+ },
+
+ reSetPwd() {
+ if (!this.validatorForm()) return
+ if (this.form.newPwd === this.form.oldPwd) {
+ this.$notify('新密码不能与旧密码相同');
+ return;
+ }
+ if (this.form.newPwd !== this.form.rePwd) {
+ this.$notify('两次输入新密码不一致');
+ return;
+ }
+
+ let _mblNo = this.userinfo.mblNo;
+ let obj = {
+ newPwd: md5(_mblNo + this.form.newPwd),
+ oldPwd: md5(_mblNo + this.form.oldPwd)
+ };
+ this.$api.userUpdatePwd(obj).then(res => {
+ this.$notify('修改成功!')
+ //删除信息 重新登录
+ this.SET_USER_INFO({});
+ this.SET_SESSION_ID('');
+ localStorage.removeItem('user_account')
+ localStorage.removeItem('user_pwd')
+ if(sessionStorage.isddxt == 1){
+ this.$router.push('/?platNo=ddxt')
+ }else{
+ this.$router.push('/')
+ }
+
+ })
+ },
+ }
+ }
+</script>
+
+<style scoped lang="less">
+ .reset-pwd {
+ padding-top: 44px;
+ background-color: @c-f5;
+
+ .cell-group {
+ margin: 10px auto 0 auto;
+ width: 360px;
+ }
+
+
+ .btn {
+ width: 340px;
+ height: 44px;
+ border: none;
+ font-size: @font-16;
+ border-radius: 22px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+
+ }
+
+ .footer {
+ margin-top: 25px;
+ padding-bottom: 30px;
+ }
+
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/user/supplement.vue b/src/views/user/supplement.vue
new file mode 100644
index 0000000..07bac0b
--- /dev/null
+++ b/src/views/user/supplement.vue
@@ -0,0 +1,163 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-11-09 11:44:43
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-11 16:51:59
+ * @Description: 信息补充页面
+-->
+<template>
+ <div class="information-supplement">
+ <v-navbar title="信息补充"></v-navbar>
+ <div class="content-box">
+ <van-cell-group>
+ <van-field
+ v-model.trim="info.userName"
+ label="姓名"
+ input-align="right"
+ placeholder="请填写真实姓名"
+ clearable
+ />
+ <van-field
+ v-model.trim="info.email"
+ clearable
+ input-align="right"
+ label="邮箱"
+ placeholder="请输入邮箱"
+ />
+ <van-field
+ v-model.trim="info.orgName"
+ is-link
+ disabled
+ label="归属门店"
+ input-align="right"
+ placeholder="请选择归属门店"
+ @click="show=true"
+ />
+ </van-cell-group>
+ <van-button round type="info" color="#896EDB" style="width:100%;margin-top:150px" @click="hanldClick">完成</van-button>
+ </div>
+ <van-popup v-model="show" position="bottom" :style="{ height: '40%' }">
+ <van-picker
+ title="选择归属门店"
+ show-toolbar
+ value-key="orgName"
+ :columns="storeList"
+ @confirm="onConfirm"
+ @cancel="onCancel"
+ />
+ </van-popup>
+ </div>
+</template>
+<script>
+import Vue from 'vue';
+import { Toast } from 'vant';
+import { mapActions } from 'vuex';
+Vue.use(Toast);
+export default {
+ data() {
+ return {
+ info:{
+ orgId:'',
+ orgName:'',
+ email:'',
+ userName:'',
+ },
+ show:false,
+ storeList:[],
+ }
+ },
+ created(){
+ this.init()
+ },
+ methods:{
+ ...mapActions(['loginByOpenId']),
+ /**
+ * @description:初始化
+ * @returns void
+ * **/
+ init(){
+
+ this.storeList = JSON.parse(this.$route.query.storeList)
+
+ },
+ /**
+ * @description:确认归属门店选择
+ * @returns void
+ * **/
+ onConfirm(value){
+ this.info.orgName = value.orgName
+ this.info.orgId = value.orgId
+ this.show = false
+ },
+ /**
+ * @description:取消选择门店
+ * @returns void
+ * **/
+ onCancel(){
+ this.show = false
+ },
+ /**
+ * @description:提交
+ * @returns void
+ * **/
+ hanldClick(){
+ let v = this.$tool;
+ if (v.checkValEmpty(this.info.userName)) {
+ Toast.fail('请输入姓名');
+ return;
+ }
+ if (v.checkValEmpty(this.info.email)) {
+ Toast.fail('请输入邮箱');
+ return;
+ }
+ if (!v.checkEmail(this.info.email)) {
+ Toast.fail('请输入正确的邮箱');
+ return;
+ }
+ if (v.checkValEmpty(this.info.orgId)) {
+ Toast.fail('请选择归属门店');
+ return;
+ }
+ this.$api.userAddStoreManager({
+ email: this.info.email,
+ mblNo: localStorage.sib_wx_mblNo,
+ merId: sessionStorage.sib_wx_merId,
+ storeId: this.info.orgId,
+ username: this.info.userName,
+ wechatOpenId: localStorage.sib_wx_openId
+ }).then(res=>{
+ localStorage.sib_wx_userId = res.body.userId
+ this.loginByOpenId({
+ vm: this,
+ loginType:2,
+ mblNo:localStorage.sib_wx_mblNo,
+ merId:sessionStorage.sib_wx_merId,
+ wechatOpenId:localStorage.sib_wx_openId,
+ userId:localStorage.sib_wx_userId
+ })
+
+
+ // this.$router.push({
+ // path:'/main/mine',
+ // query:{
+ // isLoginByOpenId:1
+ // }
+ // })
+ })
+ }
+ }
+};
+</script>
+<style lang="less" scoped>
+.information-supplement {
+ & {
+ background-color: #f5f5f5;
+ min-height: 100vh;
+ }
+ .content-box{
+ width: 96vw;
+ margin: auto;
+ margin-top: 10px;
+ }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/zfblx/lxCode.vue b/src/views/zfblx/lxCode.vue
new file mode 100644
index 0000000..33f18c2
--- /dev/null
+++ b/src/views/zfblx/lxCode.vue
@@ -0,0 +1,127 @@
+<template>
+ <div class="lxcode">
+ <van-nav-bar title="支付宝拉新" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="lxcoed-bg">
+ <img src="../../assets/zfblx/bg4.png" alt="">
+ </div>
+ <div class="lxcoed-code">
+ <img src="../../assets/zfblx/bg2.png" alt="" style="">
+ <div class="lxcoed-code-content">
+ <img class="ewm-img" src="../../assets/zfblx/bg3.png" alt="">
+ <img class="code-img" src="../../assets/zfblx/code.png" alt="">
+ </div>
+ <div class="lxcoed-code-text">
+ 支付宝拉新二维码
+ </div>
+ </div>
+ <van-button round color="#896EDB" class="btn2" @click="bankHome">返回首页</van-button>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return{
+
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //返回首页
+ bankHome() {
+ this.$router.push("/main/product")
+ }
+ }
+}
+</script>
+
+<style lang='less' scoped>
+ .code-img{
+ width: 86% !important;
+ height: 86% !important;
+ // position: absolute;
+ margin-bottom: 4%;
+ }
+ .ewm-img{
+ position: absolute;
+ left: 0;
+ right: 0;
+ z-index: 2222;
+ }
+ .lxcode{
+ background: #F3F4F5;
+ min-height: 100%;
+ text-align: center;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .lxcoed-bg{
+ width: 100%;
+ height: 225px;
+ // background: url('../../assets/zfblx/bg4.png');
+ background-size: 100% 100%;
+ }
+ .lxcoed-code{
+ width: 94%;
+ height: 360px;
+ margin: 0 3%;
+ position: relative;
+ // background: url("../../assets/zfblx/bg2.png");
+ // background-size: 100% 100%;
+ transform: translateY(-50%);
+ overflow: hidden;
+ // padding: 3px;
+ text-align: center;
+ line-height: 330px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ &-content{
+ // width: 175px;
+ width: 50%;
+ margin: 0 25%;
+ height: 175px;
+ // background: url("../../assets/zfblx/bg3.png");
+ background-size: 100% 100%;
+ margin-top: 50px;
+ // margin-left: 90px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ }
+ &-text{
+ width: 100%;
+ margin-top: 66px;
+ font-size: 14px;
+ color: #333333;
+ text-align: center;
+ line-height: 20px;
+ position: absolute;
+ bottom: 55px;
+ }
+ }
+ .btn2{
+ // width: 280px;
+ width: 86%;
+ margin: 0 7%;
+ height: 44px;
+ margin-top: 20px;
+ background:rgba(137,110,219,1);
+
+ color: white;
+ transform: translateY(-180px);
+ }
+
+</style>
\ No newline at end of file
diff --git a/src/views/zfblx/lxExplain.vue b/src/views/zfblx/lxExplain.vue
new file mode 100644
index 0000000..70a8b77
--- /dev/null
+++ b/src/views/zfblx/lxExplain.vue
@@ -0,0 +1,34 @@
+<template>
+ <div>
+ <van-nav-bar title="核算说明" left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ </van-nav-bar>
+ <div class="img-container" v-for="item in 3">
+ <img :src="`${imgUrl}${item}.png`" :alt="'核算说明'+ item">
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ data() {
+ return{
+ imgUrl: 'https://t.finlean.com/czjc/img/sib_mer/hssm/',
+ }
+ },
+ methods: {
+ onClickLeft() {
+ this.$router.go(-1);
+ }
+ },
+}
+</script>
+
+<style lang='less' scoped>
+ .img-container{
+ width: 100%;
+ img{
+ width: 100%;
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/zfblx/lxLogin.vue b/src/views/zfblx/lxLogin.vue
new file mode 100644
index 0000000..980a980
--- /dev/null
+++ b/src/views/zfblx/lxLogin.vue
@@ -0,0 +1,192 @@
+<template>
+ <div>
+ <van-nav-bar left-text="返回" left-arrow @click-left="onClickLeft" style="line-height: 43px;">
+ <div slot="title">
+ <p style="font-weight: bold;">支付宝拉新</p>
+ </div>
+ <i class="iconfont iconzuojiantou" slot="left" style="font-size: 25px;"></i>
+ <div class="" slot="right" style="font-size: 14px;line-height: 50px;" @click="toExplain">说明</div>
+ </van-nav-bar>
+ <div class="lx-content">
+ <div class="lx-content-head">
+ <img src="../../assets/zfblx/bg.png" alt="">
+ <div class="lx-content-head-text">
+ <p v-for="item in text">
+ {{ item }}
+ </p>
+ </div>
+ <div class="lx-content-head-login">
+ <div>
+ <i class="iconfont" style="font-size: 20px"></i>
+ <input type="text" placeholder="请输入姓名" v-model="username" maxlength="5">
+ </div>
+ <div>
+ <i class="iconfont" style="font-size: 20px"></i>
+ <input type="text" placeholder="请输入手机号" v-model="usephone" maxlength="11">
+ </div>
+ </div>
+ <van-button round color="#896EDB" class="btn" @click="toCode">生成二维码</van-button>
+ </div>
+ <div class="lx-content-course">
+ <div class="lx-content-course-item1">
+ <img :src="`${imgAdd}1.png`" :alt="'图文教程'+ item">
+ </div>
+ <div class="lx-content-course-item" v-for="item in 5">
+ <img :src="`${imgAdd}${item + 1}.png`" :alt="'图文教程'+ item">
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import rule from '../../utils/formValidator';
+export default {
+ data() {
+ return{
+ text: [],
+ usephone: '',
+ username: '',
+ imgAdd: 'https://t.finlean.com/czjc/img/sib_mer/zfblx/', //图片存后台的地址路径
+ }
+ },
+ created() {
+ this.init();
+
+ },
+ methods: {
+ init() {
+ this.text = [
+ " 1、请保证填写信息与客户注册支付宝信息一致,不然无法进行结算。",
+ "2、需要用户关闭WiFi,使用4G网络,同意所有授权。",
+ "3、客户注册支付宝前需提醒客户千万不要领取系统红包。"
+ ]
+ },
+ //回退按钮
+ onClickLeft() {
+ this.$router.go(-1);
+ },
+ //跳转到拉新说明页面
+ toExplain() {
+ this.$router.push("/product/zfblx/lxexplain")
+ },
+ //跳转到拉新二维码页面
+ toCode() {
+ let v = this.$tool;
+ if (v.checkValEmpty(this.username)) {
+ v.toast('请输入用户名');
+ return;
+ }
+ if (v.checkValEmpty(this.usephone)) {
+ v.toast('请输入手机号');
+ return;
+ }
+ if (!v.checkPhone(this.usephone)) {
+ v.toast('请输入正确的手机号');
+ return;
+ }
+ console.log(this.usephone)
+
+ this.$api.zfbLxSave({usrName: this.username, usrNo: this.usephone}).then(res => {
+ this.$router.push("/product/zfblx/lxcode")
+ },err => err)
+ // this.$api.zfbLxList().then(res => {
+ // console.log(res.body)
+ // })
+ },
+ }
+}
+</script>
+
+<style lang='less' scoped>
+@font-face {
+ font-family: 'iconfont'; /* project id 1351259 */
+ src: url('//at.alicdn.com/t/font_1351259_rg7lh167259.eot');
+ src: url('//at.alicdn.com/t/font_1351259_rg7lh167259.eot?#iefix') format('embedded-opentype'),
+ url('//at.alicdn.com/t/font_1351259_rg7lh167259.woff2') format('woff2'),
+ url('//at.alicdn.com/t/font_1351259_rg7lh167259.woff') format('woff'),
+ url('//at.alicdn.com/t/font_1351259_rg7lh167259.ttf') format('truetype'),
+ url('//at.alicdn.com/t/font_1351259_rg7lh167259.svg#iconfont') format('svg');
+}
+.lx-content{
+ width: 100%;
+ margin-top: 16px;
+ img{
+ width: 100%;
+ height: 100%;
+ }
+ &-head{
+ height: 395px;
+ width: 94%;
+ margin: 0 3%;
+ // background: url('../../assets/zfblx/bg.png') no-repeat;
+ background-size: 100% 100%;
+ overflow: hidden;
+ position: relative;
+ &-text{
+ position: absolute;
+ top: 0;
+ margin: 50px 25px 0 30px;
+ p{
+ line-height: 20px;
+ font-size: 13px;
+ color: #705BAF;
+ }
+ }
+ &-login{
+ width: 100%;
+ // margin: 55px 25px 0 35px;
+ position: absolute;
+ // left: 35px;
+ width: 80%;
+ margin: 0 10%;
+ bottom: 78px;
+ input{
+ border: none;
+ height: 38px;
+ width: 85%;
+ border-radius: 20px;
+ padding-left: 15%;
+ box-sizing: content-box;
+ }
+ i{
+ position: absolute;
+ left: 16px;
+ line-height: 40px;
+ }
+ :first-child{
+ margin-bottom: 15px;
+ }
+ }
+ }
+ &-course{
+ width: 100%;
+ text-align: center;
+ &-item{
+ width: 100%;
+ img{
+ width: 100%;
+ }
+ }
+ &-item1{
+ margin-top: 32px;
+ width: 100%;
+ img{
+ display: inline-block;
+ width: 110px;
+ }
+ }
+ }
+}
+.btn{
+ width: 80%;
+ margin: 0 10%;
+ height: 40px;
+ position: absolute;
+ background:rgba(137,110,219,1);
+ // margin: 15px 30px 0 30px;
+ bottom: 23px;
+ // left: 35px;
+ color: white;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/zfblx/lxOrder.vue b/src/views/zfblx/lxOrder.vue
new file mode 100644
index 0000000..a4f4b2c
--- /dev/null
+++ b/src/views/zfblx/lxOrder.vue
@@ -0,0 +1,526 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-20 14:07:56
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-04 16:11:37
+ * @Description: 花呗订单
+ -->
+<template>
+ <div class="order-hb-box">
+ <v-navbar title="支付宝拉新" fixed>
+ <template v-slot:right>
+ <div class="flex-center-g" @click="isShow = true;">
+ <span>筛选</span>
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;">
+ <use xlink:href="#iconshaixuan"></use>
+ </svg>
+ </div>
+ </template>
+ </v-navbar>
+ <!-- 订单列表 -->
+ <div class="order-list">
+ <v-datacard class='info' :list="orderData"></v-datacard>
+ <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="init" >
+ <!-- <v-order-item :name="item.userName || '无'" :user='item.label' :time='+item.creTime' :list='item.list'
+ v-for="(item,k) in list" :key="k" @click="go(item.orderId)"></v-order-item> -->
+ <div class="lx-list fs-14" v-for="(item, index) in list" :key="index" @click="go(item.id)">
+ <div class="lx-list-head">
+ <div class="lx-list-head-item">
+ <p class="fw">{{ item.usrName }}</p>
+ <p>姓名</p>
+ </div>
+ <div class="lx-list-head-item" style="width: 40%;">
+ <p class="fw">{{ item.usrNo }}</p>
+ <p>手机号</p>
+ </div>
+ <div class="lx-list-head-item">
+ <p class="fw" :style="{color:item.status == 3?'#ED4014': item.status == 0 ? '#333' : '#19BE6B'}">{{ item.status == 0 ? '待确认' : item.status == 1? '拉新' : item.status == 2? '拉新+绑卡' : '无效' }}</p>
+ <p>订单状态</p>
+ </div>
+ </div>
+ <div class="lx-list-foot">
+ <div class="lx-list-foot-top">
+ <p class="flex">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;margin-ringt:7px;">
+ <use xlink:href="#iconyonghu"></use>
+ </svg>
+ <span style="margin-left:7px;">{{ }}</span>
+
+ </p>
+ <p class="flex">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;margin-ringt:7px;">
+ <use xlink:href="#iconshijian"></use>
+ </svg>
+ <span style="margin-left:7px;">{{ item.creTime | timeformat('yyyy-MM-dd HH:mm:ss') }}</span>
+
+ </p>
+ </div>
+ <div class="lx-list-foot-bottom flex">
+ <svg class="icon" aria-hidden="true" style="width:18px;height:18px;margin-ringt:7px;">
+ <use xlink:href="#iconshanghumingcheng"></use>
+ </svg>
+ <span style="margin-left:7px;">{{ orgType==4? item.mgrName : orgType==3? item.storeName : item.merName }}</span>
+ </div>
+ </div>
+ </div>
+ </van-list>
+ </div>
+ <v-button-circle icon='icondaochu' title='导出' @click="exportFile"></v-button-circle>
+
+ <v-filter v-model="isShow" :belongArr="belongArr" :statusArr="statusArr" :hasMoney='false'
+ @search="(v)=>search(v,true)"></v-filter>
+ <!-- <v-filter v-model="isShow" :belongArr="belongArr" :periodsArr="periodsArr" :statusArr="statusArr" customTitle="分期本金" :hasSearch="true"
+ @search="(v)=>search(v,true)"></v-filter> -->
+
+
+ <van-popup v-model="exporShow">
+ <div class="popup-content">
+ <div class="icon-box flex-center-g">
+ <div class="child flex-center-g">
+ <svg class="icon" aria-hidden="true" style="width:33px;height:27px;fill:#fff;" @click="$router.back()">
+ <use xlink:href="#iconyoujian"></use>
+ </svg>
+ </div>
+ </div>
+ <p class="text">
+ <span class="top">已将信息发送至邮箱,请注意查收</span>
+ <span v-text="userinfo.email || ''">1244667@163.com</span>
+ </p>
+ <van-button class="btn-submit" @click="exporShow=false;">确定</van-button>
+ </div>
+ </van-popup>
+ </div>
+</template>
+
+<script>
+ import {
+ mapState,
+ mapGetters
+ } from 'vuex';
+ import {
+ getParams
+ } from '@/utils/index';
+ export default {
+ data() {
+ return {
+ loading:false,
+ finished:false,
+
+ exporShow:false,
+
+ isShow: false,
+ list: [],
+ orderData: [],
+ belongArr: [],
+ periodsArr: [],
+ statusArr: [],
+ filter: {}
+ }
+ },
+ computed: {
+ ...mapState(['userinfo']),
+ ...mapGetters(['orgType']),
+ prodId() {
+ return this.$route.query.prodId
+ },
+ typeId(){
+ return this.$route.query.typeId
+ },
+ id() {
+ return this.$route.query.id;
+ },
+ dataLabel(){
+ if(this.orgType===1 || this.orgType===2){
+ return "交易商户数"
+ }else if(this.orgType ===3){
+ return "交易门店数"
+ }else{
+ return "交易门店数"
+ }
+ }
+ },
+ created() {
+ // console.log(null == 0)
+ this.init()
+ // console.log(this.orgType)
+ this.getOrderReport()
+ this.getOrderInit()
+ },
+ methods: {
+ search(v,isClear){
+ console.log(v)
+ v.status = v.orderStatus;
+ v.endTime = v.endDay;
+ v.staTime = v.startDay;
+ // v.orgId = v.mgrList[0] || '';
+ this.filter.orderId ="";
+ this.finished = false;
+ this.init(v,isClear)
+ this.getOrderReport(v)
+ },
+ // 获取过滤条件
+ getOrderInit() {
+ // this.$api.zfbLxReport({
+
+ // }).then((res) => {
+ // let body = res.body,
+ // insTermVoList = body.insTermVoList || [],
+ // orderStatusList = body.orderStatusList || [],
+ // orgBaseInfVoList = body.orgBaseInfVoList || [];
+ // this.periodsArr = insTermVoList;
+ // // this.statusArr = orderStatusList;
+ // // this.belongArr = orgBaseInfVoList;
+
+ // }).catch((err) => {
+
+ // });
+
+ },
+ // 跳转到详情页面
+ go(id) {
+ this.$router.push(`/order/lxOredrDetail?id=${id}`)
+ },
+ calcLabel(item){
+ switch (this.orgType) {
+ case 1:
+ item.label = item.merName
+ break;
+ case 2:
+ item.label = item.merName
+ break;
+ case 3:
+ item.label = item.storeName
+ break;
+ case 4:
+ item.label = item.recordPerson
+ break;
+ }
+ },
+ // 获取订单列表
+ init(params = this.filter,isClear) {
+ let p = getParams(this.orgType, this.id)
+ params.prodTypeId = this.typeId;
+ params = Object.assign(params, p)
+ this.loading = true;
+ // this.list = [
+ // {
+ // userName: '刘肖百',
+ // usrNo: 13688892222,
+ // statusStr: 0,
+ // bdUsr: '马小琴',
+ // time: '2019-08-13 11:59:09',
+ // address: '银川市金凤区鼎诚中国移动通讯服务'
+ // },
+ // {
+ // userName: '刘肖百',
+ // usrNo: 13688892222,
+ // statusStr: 2,
+ // bdUsr: '马小琴',
+ // time: '2019-08-13 11:59:09',
+ // address: '银川市金凤区鼎诚中国移动通讯服务'
+ // },
+ // {
+ // userName: '刘肖百',
+ // usrNo: 13688892222,
+ // statusStr: 1,
+ // bdUsr: '马小琴',
+ // time: '2019-08-13 11:59:09',
+ // address: '银川市金凤区鼎诚中国移动通讯服务'
+ // },
+ // ]
+ // console.log(new Date().valueOf())
+ //拉新列表初始化
+ this.$api.zfbLxInit().then(res => {
+ this.belongArr = res.body.orgInfList;
+ console.log(this.belongArr.length)
+ if(this.belongArr.length == 0){
+ console.log('this.belongArr')
+ this.belongArr.push({code:'code', name:''})
+ }
+ this.statusArr = res.body.statusList;
+ })
+ // this.$api.zfbLxList().then(res => {
+
+ // })
+ console.log(params.merList)
+ let date = {
+ status : params.orderStatus,
+ endTime : params.endDay,
+ staTime : params.startDay,
+ orgId : ''
+ }
+ if(params.merList) {
+ date.orgId = params.merList[0];
+ }
+ if(params.chanList) {
+ date.orgId = params.chanList[0];
+ }
+ if(params.storeList) {
+ date.orgId = params.storeList[0];
+ }
+ this.$api.zfbLxList({...date}).then(res => {
+ // console.log(res.body)
+ this.filter = {...params};
+ this.list = res.body;
+ // console.log(this.list)
+ this.$forceUpdate();
+ // if(isClear){
+ // this.list = [];
+ // console.log('is')
+ // }
+ let list = res.body || [],
+ len = list.length;
+ if (len) {
+ this.filter.orderId = list[list.length - 1].orderId;
+ // list.forEach(item => {
+ // this.calcLabel(item)
+ // let color = 'success';
+ // switch (item.status) {
+ // case 1:
+ // color = 'success';
+ // break;
+ // case 2:
+ // color = 'error';
+ // break;
+ // case 0:
+ // color = 'warning';
+ // break;
+ // case 3:
+ // color = 'warning';
+ // break;
+ // }
+ // this.list.push({
+ // ...item,
+ // list: [{
+ // value: item.settAmt,
+ // label: '分期本金(元)',
+ // },
+ // {
+ // value: item.insTermStr,
+ // label: '分期期数(月)',
+ // },
+ // {
+ // value: item.statusStr,
+ // label: '订单状态',
+ // color
+ // }
+ // ]
+ // })
+ // })
+ }
+ if (len < 10) {
+ this.finished = true;
+ }
+ this.loading = false;
+ this.isShow = false;
+ }).catch((err) => {
+ this.finished = true;
+ this.loading = false;
+ });
+ },
+ //订单导出
+ exportFile() {
+ if (!this.list.length) {
+ this.$notify('暂无数据导出')
+ return;
+ }
+ console.log(this.filter)
+ let date = {
+ status : this.filter.orderStatus,
+ endTime : this.filter.endDay,
+ staTime : this.filter.startDay,
+ orgId : ''
+ }
+ if(params.merList) {
+ date.orgId = params.merList[0];
+ }
+ if(params.chanList) {
+ date.orgId = params.chanList[0];
+ }
+ if(params.storeList) {
+ date.orgId = params.storeList[0];
+ }
+ this.$api.zfbLxExport(date).then((res) => {
+
+ this.exporShow = true;
+
+ // this.$dialog.alert({
+ // showCancelButton: false,
+ // message: `<div>
+ // <p>已将信息发送至邮箱,请注意查收</p>
+ // <p>${this.userinfo.email}</p>
+ // </div>`
+ // }).then(() => {
+ //
+ // });
+ }).catch((err) => {
+
+ });
+ },
+ // 获取订单统计数据
+ getOrderReport(params) {
+ console.log(params)
+ // params.status = params.orderStatus;
+ let date = {
+ status : '',
+ endTime : '',
+ staTime : '',
+ orgId : ''
+ }
+ if(params) {
+ console.log('1')
+ date.endTime = params.endDay;
+ date.staTime = params.startDay;
+ date.status = params.orderStatus;
+ if(params.merList) {
+ date.orgId = params.merList[0];
+ }
+ if(params.chanList) {
+ date.orgId = params.chanList[0];
+ }
+ if(params.storeList) {
+ date.orgId = params.storeList[0];
+ }
+ }
+ this.$api.zfbLxReport({
+ ...date,
+ prodId: this.prodId,
+ pageType: 2,
+ }).then(({
+ body
+ }) => {
+ this.orderData = [];
+ this.orderData.push({
+ title: '待确认',
+ num: body.dqrNum || 0,
+ })
+ this.orderData.push({
+ title: '拉新',
+ num: body.lxNum || 0,
+ })
+ let num = body.lxAndBkNum || 0;
+ // if(this.orgType==4){
+ // num = "—";
+ // }
+ this.orderData.push({
+ title: "拉新+绑卡",
+ num
+ })
+ }).catch((err) => {
+
+ })
+ },
+ },
+ }
+</script>
+
+<style lang="less" scoped>
+ .fs-12{
+ font-size: 12px;
+ color: #999;
+ }
+ .fs-14{
+ font-size: 14px;
+ color: #333333;
+ }
+ .bor-box{
+ box-sizing: border-box;
+ }
+ .flex{
+ .flex();
+ }
+ .fw{
+ font-weight: bold;
+ }
+ .order-hb-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+ }
+ .order-list {
+ padding: 0 8px 30px;
+
+ .info {
+ margin-bottom: 20px;
+ }
+ }
+ .popup-content{
+ height: 150px;
+ width: 280px;
+ border-radius: 3px;
+ .icon-box{
+ z-index: 99999;
+ height: 64px;
+ width: 64px;
+ position: absolute;
+ left: 50%;
+ background:rgba(66,61,93,0.1);
+ border-radius: 50%;
+ transform: translate(-50%,-50%);
+
+ .child{
+ height: 55px;
+ width: 55px;
+ background:rgba(66,61,93,0.8);
+ border-radius: 50%;
+ }
+ }
+ .text{
+ width: 210px;
+ text-align: center;
+ margin: 0 auto;
+ padding-top: 50px;
+ line-height: 18px;
+ .top{
+ color: @c-text-666;
+ }
+ }
+ .btn-submit{
+ .lh(44px);
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ color: @c-text-default;
+ }
+ }
+ .lx-list{
+ width: 96%;
+ height: 135px;
+ margin: 0 2%;
+ background: #FFFFFF;
+ margin-top: 10px;
+ // &:extend(.bor-box);
+ // box-sizing: border-box;
+ &-head{
+ width: 100%;
+ .flex();
+ text-align: center;
+ &-item{
+ width: 30%;
+ height: 77px;
+ :first-child{
+ margin-top: 22px;
+ margin-bottom: 9px;
+ }
+ :last-child{
+ font-size: 12px;
+ color: #999;
+ }
+ }
+ }
+ &-foot{
+ height: 50px;
+ width: 92%;
+ margin: 0 2%;
+ padding: 0 2%;
+ font-size: 12px;
+ color: #999;
+ background: #F7F7FA;
+ &-top{
+ .flex(space-between, center);
+ height: 25px;
+ line-height: 25px;
+ margin-bottom: 3px;
+ }
+ }
+ }
+</style>
diff --git a/src/views/zfblx/lxOrderDetail.vue b/src/views/zfblx/lxOrderDetail.vue
new file mode 100644
index 0000000..19190df
--- /dev/null
+++ b/src/views/zfblx/lxOrderDetail.vue
@@ -0,0 +1,189 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 16:20:48
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-10-22 08:56:10
+ * @Description: 花呗分期——订单详情
+ -->
+<template>
+ <div class="hb-detail-box h-100-g">
+ <v-navbar title="订单详情" fixed></v-navbar>
+ <div class="content">
+ <div class="cell-group">
+ <van-cell :value="form.usrName" title='姓名' readonly></van-cell>
+ <van-cell :value="form.usrNo" title='手机号' readonly></van-cell>
+ </div>
+
+ <div class="cell-group">
+ <van-cell v-if="form.creTime" :value="form.creTime | timeformat('yyyy-MM-dd')" title='交易时间' readonly></van-cell>
+ <van-cell v-else title='交易时间' readonly></van-cell>
+ <van-cell :value="form.status" :value-class="statusColor" title='订单状态' readonly>{{ form.status == 0 ? '待确认' : form.status == 1? '拉新' : form.status == 2? '拉新+绑卡' : '无效' }}</van-cell>
+ </div>
+
+ <div class="cell-group" >
+ <van-cell :value="form.chanName || '无'" title='办理渠道' readonly></van-cell>
+ <van-cell :value="form.merName || '无'" title='办理商户' readonly></van-cell>
+ <van-cell :value="form.storeName || '无'" title='办理门店' readonly></van-cell>
+ <van-cell :value="form.mgrName || '无'" title='办单员' readonly></van-cell>
+ </div>
+
+ <!-- <div class="cell-group">
+ <van-cell :value="form.rate + '%'" title='费率' readonly></van-cell>
+ </div> -->
+ </div>
+
+ <!-- <footer class="footer flex-center-g">
+ <van-button class="btn" v-if="form.refundStatus==1" @click="refund">退款</van-button>
+ <van-button class="btn" v-if="form.status==0" @click="showCode">显示支付二维码</van-button>
+ </footer> -->
+
+ </div>
+</template>
+
+<script>
+ import {
+ mapState
+ } from 'vuex';
+ export default {
+ data() {
+ return {
+ form: {},
+ statusColor:'',
+ id: this.$route.query.id, //lx订单详情id
+ }
+ },
+ computed: {
+ id() {
+ return this.$route.query.id
+ },
+ typeId() {
+ return this.$route.query.typeId
+ },
+ ...mapState(['userinfo'])
+ },
+ created() {
+ this.init()
+ },
+ methods: {
+ init() {
+ // this.$api.getHBDetail(this.id).then((res) => {
+ // this.form = res.body || {};
+ // if(this.form) {
+ // if (this.form.status == 1) {
+ // this.statusColor = 'status-val-done';
+ // } else if (this.form.status == 2) {
+ // this.statusColor = 'status-val-error';
+ // } else if (this.form.status == 3) {
+ // this.statusColor = 'status-val-refund';
+ // } else if (this.form.status == 0) {
+ // this.statusColor = 'status-val-wait';
+ // } else {
+ // this.statusColor = 'status-val-done';
+ // }
+ // }
+ // }).catch((err) => {
+
+ // });
+ //拉新列表初始化
+ this.$api.zfbLxList().then(res => {
+ res.body.filter( item => {
+ if(item.id == this.id) this.form = item
+ })
+ // console.log(this.form)
+ switch (this.form.status) {
+ case 0:
+ this.statusColor = 'status-val-wait'
+ break;
+ case 1:
+ this.statusColor = 'status-val-done'
+ case 2:
+ this.statusColor = 'status-val-done'
+ break;
+ case 2:
+ this.statusColor = 'status-val-error'
+ break;
+
+ default:
+ break;
+ }
+ }).catch((err) => {
+
+ });
+ },
+ //退款
+ refund() {
+ this.$dialog.confirm({
+ message: '是否确认退款'
+ }).then(() => {
+ this.$api.hbOrderRefund(this.id).then((res) => {
+ if (res.errorCode == 0) {
+ this.$notify('退款成功');
+ this.$router.back();
+ }
+ }).catch((err) => {
+
+ });
+ }).catch(() => {
+ // on cancel
+ });
+ // this
+
+ },
+ //展示二维码
+ showCode() {
+ if (this.form.payCode) {
+ // window.sessionStorage.setItem("hbpayQrCodeUrl", this.payCode);
+ let queryObj = {
+ payQrCodeUrl:this.form.payCode,
+ orderId: this.form.orderId,
+ totalAmount: this.form.insAmt,
+ term: this.form.insTerm,
+ typeId:this.typeId || ''
+ }
+ this.$router.push({
+ path: "/hb-getHBQRCode",
+ query: queryObj
+ })
+ }
+ }
+ },
+ }
+</script>
+<style lang="less" scoped>
+ .status-val-done {
+ color:#19BE6B;
+ }
+ .status-val-refund {
+ color:#FF9900;
+ }
+ .status-val-wait {
+ color:#333333;
+ }
+ .status-val-error {
+ color:#ED4014;
+ }
+ .hb-detail-box {
+ padding-top: 44px;
+ background-color: @c-bg-f5;
+
+ .content {
+ padding: 10px 8px;
+ }
+
+ .cell-group {
+ margin-bottom: 10px;
+ }
+ }
+
+ .footer {
+ padding-bottom: 30px;
+ margin: 0 8px;
+ background-color: @c-bg-f5;
+
+ .btn {
+ width: 50%;
+ color: @c-text-fff;
+ background-color: @c-bg-default;
+ }
+ }
+</style>
diff --git a/static/README.md b/static/README.md
new file mode 100644
index 0000000..e938604
--- /dev/null
+++ b/static/README.md
@@ -0,0 +1,8 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-13 18:10:18
+ * @Description:
+ -->
+# 静态文件目录
\ No newline at end of file
diff --git a/static/agreement1.js b/static/agreement1.js
new file mode 100644
index 0000000..b2e6235
--- /dev/null
+++ b/static/agreement1.js
@@ -0,0 +1,3 @@
+const agreement1='<div><p style="line-height:19pt; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:DengXian; font-size:20pt">智享微金融</span><span style="font-family:DengXian; font-size:20pt">用户服务协议</span></p><p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0"><span style="font-family:DengXian; font-size:13pt">为使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当阅读并遵守《</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">服务协议》</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">本协议</span><span style=" font-size:13pt">”)</span><span style="font-family:DengXian; font-size:13pt">。请您务必审慎阅读、充分理解各条款内容</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">特别是免除或者限制责任的条款、管辖与法律适用条款</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以及开通或使用某项服务的单独协议。限制、免责条款可能以黑体加粗或加下划线的形式提示您重点注意。除非您已阅读并接受本协议所有条款</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则您无权使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">提供的服务。您使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务即视为您已阅读并同意上述协议的约束。如果您未满</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请在法定监护人的陪同下阅读本协议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并特别注意未成年人使用条款。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">一、</span><span style="font-family:DengXian; font-size:13pt">【</span><span style="font-family:DengXian; font-size:13pt">协议的范围】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1.1</span><span style="font-family:DengXian; font-size:13pt">本协议是您与</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">之间关于用户使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">相关服务所订立的协议。</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">是指</span><span style="font-family:DengXian; font-size:13pt">唯知科技</span><span style="font-family:DengXian; font-size:13pt">公司的产品。</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">用户</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">是指使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">相关服务的使用人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在本协议中更多地称为</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">您</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1.2</span><span style="font-family:DengXian; font-size:13pt">本协议项下的服务是指</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">向用户提供的包括但不限于</span><span style="font-family:DengXian; font-size:13pt">零售金融服务、</span><span style="font-family:DengXian; font-size:13pt">移动服务</span><span style="font-family:DengXian; font-size:13pt">、</span><span style="font-family:DengXian; font-size:13pt">电子商务和广告等产品及服务</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">本服务</span><span style=" font-size:13pt">”</span><span style=" font-size:13pt">)</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">二、</span><span style="font-family:DengXian; font-size:13pt">【帐号与密码安全</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">2.1</span><span style="font-family:DengXian; font-size:13pt">您在使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务时需要注册一个帐号。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">2.2</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">特别提醒您应妥善保管您的帐号和密码。当您使用完毕后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应安全退出。因您保管不善可能导致遭受盗号或密码失窃</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">责任由您自行承担。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">三、【用户</span><span style="font-family:DengXian; font-size:13pt">信息保护】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.1</span><span style="font-family:DengXian; font-size:13pt">保护用户</span><span style="font-family:DengXian; font-size:13pt">信息是</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的一项基本原则</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">将按照本协议的规定收集、使用、储存和分享您的</span><span style="font-family:DengXian; font-size:13pt">信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.2</span><span style="font-family:DengXian; font-size:13pt">您在注册帐号或使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能需要填写一些必要的信息。若国家法律法规有特殊规定的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您需要填写真实的身份信息。若您填写的信息不完整</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">无法使用本服务或在使用过程中受到限制。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.3</span><span style="font-family:DengXian; font-size:13pt">一般情况下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您可随时浏览、修改自己提交的信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但出于安全性和身份识别的考虑</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您可能无法修改注册时提供的初始注册信息及其他验证信息。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.4</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">将运用各种安全</span><span style="font-family:DengXian; font-size:13pt">技术和程序建立完善的管理制度来保护您的</span><span style="font-family:DengXian; font-size:13pt">信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免遭受未经授权的访问、使用或披露</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.</span><span style=" font-size:13pt">5</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不会将您的</span><span style="font-family:DengXian; font-size:13pt">信息转移或披露给任何非关联的第三方</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除非</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">相关法律法规或法院、政府机关要求</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">为完成合并、分立、收购或资产转让而转移</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">为提供您要求的服务所必需。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">3.</span><span style=" font-size:13pt">6</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">非常重视对未成年人</span><span style="font-family:DengXian; font-size:13pt">信息的保护。若您是</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁以下的未</span><span style="font-family:DengXian; font-size:13pt">成年人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务前</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应事先取得您家长或法定监护人</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">以下简称</span><span style=" font-size:13pt">"</span><span style="font-family:DengXian; font-size:13pt">监护人</span><span style=" font-size:13pt">")</span><span style="font-family:DengXian; font-size:13pt">的书面同意。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">四、【使用本服务的方式】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.1</span><span style="font-family:DengXian; font-size:13pt">除非您与</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">另有约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意本服务为商业性质的使用。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.2</span><span style="font-family:DengXian; font-size:13pt">您应当通过</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">提供或认可的方式使用本服务。您依本协议条款所取得的权利不可转让。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">4.3</span><span style="font-family:DengXian; font-size:13pt">您不得使用未经</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">授权的插件、外挂或第三方工具对本协议项下的服务进行干扰、破坏、修改或施加其他影响。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">五、【按现状提供服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务是按照现有技术和条件所能达到的现状提供的。</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">会尽最大努力向您提供服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">确保服务的连贯性和安全性</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">但</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不能随时预见和防范法律、技术以及其他风险</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于不可抗力、病毒、木马、黑客攻击、系统不稳定、第三方服务瑕疵、政府行为等原因可能导致的服务中断、数据丢失以及其他的损失和风险。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">六、【自备设备】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">6.</span><span style=" font-size:13pt">1</span><span style="font-family:DengXian; font-size:13pt">您应当理解</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务需自行准备与相关服务有关的终端设备</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">如手机</span><span style=" font-size:13pt">),</span><span style="font-family:DengXian; font-size:13pt">并承担所需的费用</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">如电话费、上网费等费用</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">6.2</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您使用本服务时会耗用您的终端设备和带宽等资源。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">七、【广告】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.1</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可以在提供服务的过程中自行或由第三方广告商向您发送广告、推广或宣传信息</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">包括商业与非商业信息</span><span style=" font-size:13pt">),</span><span style="font-family:DengXian; font-size:13pt">其方式和范围可不经向您特别通知而变更</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可能为您提供选择关闭广告信息的功能</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但任何时候您都不得以本协议未明确约定或</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">未书面许可的方式屏蔽、过滤广告信息</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.3</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">依照法律的规定对广告商履行相关义务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当自行判断广告信息的真实性并为自己的判断行为负责</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除法律明确规定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您因依该广告信息进行的交易或前述广告商提供的内容而遭受的损失或损害</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不承担责任</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">7.4</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">服务中出现的广告信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应审慎判断其真实性和可靠性</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除法律明确规定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应对依该广告信息进行的交易负责。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">八、【收费服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">8.1</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的部分服务是以收费方式提供的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如您使用收费服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请遵守相关的协议</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">8.2</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可能根据实际需要对收费服务的收费标准、方式进行修改</span><span style="font-family:DengXian; font-size:13pt">和变更</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">也可能会对部分免费服务开始收费。前述修改、变更或开始收费前</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">将在相应服务页面进行通知或公告。如果您不同意上述修改、变更或付费内容</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">则应停止使用该服务</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">九、【第三方提供的产品或服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">您在</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">平台上使用第三方提供的产品或服务时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">除遵守本协议约定外</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">还应遵守第三方的用户协议。</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">和第三方对可能岀现的纠纷在法律规定和约定的范围内各自承担责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十、【基于软件提供服务】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">若</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">依托</span><span style=" font-size:13pt">“</span><span style="font-family:DengXian; font-size:13pt">软件</span><span style=" font-size:13pt">”</span><span style="font-family:DengXian; font-size:13pt">向您提供服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您还应遵守以</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">下约定</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务的过程中可能需要下载软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对于这些软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">给予您一项个人</span><span style="font-family:DengXian; font-size:13pt">或工商主体</span><span style="font-family:DengXian; font-size:13pt">的、不可转让及非排他性的许可。您仅可为访问或使用本服务的目的而使用这些软件</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.2</span><span style="font-family:DengXian; font-size:13pt">为了改善用户体验、保证服务的安全性及产品功能的一致性</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可能会对软件进行更新。您应该将相关软件更新到最新版本</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">并不保证其能正常使用。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.3</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可能为不同的终端设备开发不同的软件版本</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当根据实际情况选择下载合适的版本进行安装。您可以直接从</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的网站上获取软件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也可以从得到</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">授权的第三方获取。如果您从未经</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">授权的第三方获取软件或与软件名称相同的安装程序</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">无法保证该软件能够正常使用</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并对因此给您造成的损失不予负责。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">0.4</span><span style="font-family:DengXian; font-size:13pt">除非</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">书面许可</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您不得从事下列任一行为</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">删除软件及其副本上关于著作权的信息</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">2)</span><span style="font-family:DengXian; font-size:13pt">对软件进行反向工程、反向汇编、反向编译</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">或者以其他方式尝试发现软件的源代码</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">3</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">对</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">拥有知识产权的内容进行使用、出租、岀借、复制、修改、链接、转载、汇编、发表、出版、建立镜像站点等</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">对软件或者软件运行过程中释放到任何终端内存中的数据、软件运行过程中客户端与服务器端的交互数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以及软件运行所必需的系统数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">进行复制、修改、增加、删除、挂接运行或创作任何衍生作品</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">形式包括但不限于使用插件、外挂或非经</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">授权的第三方工具</span><span style=" font-size:13pt">/</span><span style="font-family:DengXian; font-size:13pt">服务接入软件和相关系统</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(5)</span><span style="font-family:DengXian; font-size:13pt">通过修改或伪造软件运行中的指令、数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">增加、删减、变动软件的功能或运行效果</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">或者将用于上述用途的软件、方法进行运营或向公众传播</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">无论这些行为是否为商业目的</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(6)</span><span style="font-family:DengXian; font-size:13pt">通过非</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">开发、授权的第三方软件、插件、外挂、系统</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">登录或使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">软件及服务或制作、发布、传播非掌上客如去开发、授权的第三方软件、插件、外挂、系统</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十一、【知识产权声明】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务时须遵守法律法规</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">不得利用本服务从事违法违规行为</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播、储存危害国家安全统一、破坏社会稳定、违反公序良俗、侮辱、诽谤、淫秽、暴力以及任何违反国家法律法规的内容</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播、储存侵害他人知识产权、商业秘密等合法权利的内容</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">恶意虚构事实、隐瞒真相以误导、欺骗他人</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">发布、传送、传播广告信息及垃圾信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">5)</span><span style="font-family:DengXian; font-size:13pt">其他法律法规禁止的行为。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.2</span><span style="font-family:DengXian; font-size:13pt">如果您违反了本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">相关国家机关或机构可能会对您提起诉讼、罚款或采取其他制裁措施</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并要求</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">给予协助。造成损害的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应依法予以赔偿</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不承担任何责任</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.3</span><span style="font-family:DengXian; font-size:13pt">如果</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">发现或收到他人举报您发布的信息违反本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权进行独立判断并采取技术手段予以删除、屏蔽或断开链接。同时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权视用户的行为性质</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">采取包括但不限于暂停或终止服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">限制、冻结或终止用户账号的使用</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">追究法律责任等措施。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">12.4</span><span style="font-family:DengXian; font-size:13pt">您违反本条约定</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">导致任何第三方损害的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当独立承担责任</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">因此遭受损失的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您也应当并赔偿。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十三、【遵守当地法律监管】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">13.1</span><span style="font-family:DengXian; font-size:13pt">您在使用本服务过程中应当遵守当地相关的法律法规</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并尊重当地的道德和风俗习惯。如果您的行为违反了当地法律法规或道德风俗</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您应当为此独立承担责任</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">13.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">您应避免因使用本服务而使</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">卷入政治和公共事件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">否则</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权暂停或终止对您的服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十四、【用户发送、传播的內容与第三方投诉处理】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.</span><span style=" font-size:13pt">1</span><span style="font-family:DengXian; font-size:13pt">您通过本服务发送或传播的内容</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">包括但不限于网页、文字、图片、音频、视频、图表等</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">均由您自行承担责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">4.2</span><span style="font-family:DengXian; font-size:13pt">您发送或传播的内容应有合法来源</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">相关内容为您所有或您已获得权利人的授权。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.3</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可为履行本协议或提供本服务的目的而使用您发送或传播的内容。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.4</span><span style="font-family:DengXian; font-size:13pt">如果</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">收到权利人通知</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">主张您发送或传播的内容侵犯其相</span><span style="font-family:DengXian; font-size:13pt">关权利的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权进行独立判断并采取删除、屏蔽或断开链接等措施</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">14.</span><span style=" font-size:13pt">5</span><span style="font-family:DengXian; font-size:13pt">您使用本服务时不得违反国家法律法规、侵害他人合法权益。您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如您被他人投诉侵权或您投诉他人侵权</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权将争议中相关方的主体联系方式、投诉相关内容等必要信息提供给其他争议方或相关部门</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以便及时解决投诉纠纷</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">保护他人合法权</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十五、【不可抗力及其他免责事由】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.1</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能会遇到不可抗力等风险因素</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">使本服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于自然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为等。岀现上述情况时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">将努力在第一时间与相关单位配合</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">及时进行修复</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但是由此给您造成的损失</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">在法律允许的范围内免责</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.2</span><span style="font-family:DengXian; font-size:13pt">在法律允许的范围内</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">对以下情形导致的服务中断或受阻不承担责任</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">1)</span><span style="font-family:DengXian; font-size:13pt">受到手机病毒、木马或其他恶意程序、黑客攻击的破坏</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">用户或</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的电脑软件、系统、硬件和通信线路出现故障</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">用户操作不当</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">4)</span><span style="font-family:DengXian; font-size:13pt">用户通过非</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">授权的方式使用本服务</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(5)</span><span style="font-family:DengXian; font-size:13pt">其他</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">无法控制或合理预见的情形</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.3</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">在使用本服务的过程中</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可能会遇到网络信息或其他用户行为带来的风险</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不对任何信息的真实性、适用性、合法性承担责任</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也不对因侵权行为给您造成的损害负责。这些风险包括但不限于</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">来自他人匿名或冒名的含有威胁、诽谤、令人反感或非法内容的信息</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">因使用本协议项下的服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">遭受他人误导、欺骗或其他导致或可能导致的任何心理、生理上的伤害以及经济上的损失</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(</span><span style=" font-size:13pt">3)</span><span style="font-family:DengXian; font-size:13pt">其他因网络信息或用户行为引起的风险</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.4</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">本服务并非为某些特定目的而设计</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">包括但不限于核设施、军事用途、医疗设施、交通通讯等重要领域。如果因为软件或服务的原因导致上述操作失败而带来的人员伤亡、财产损失和环境破坏等</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不承担法律责任。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.5</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">依据本协议约定获得处理违法违规内容的权利</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">该权利不构成</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的义务或承诺</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">不能保证及时发现违法行为或进行相应处理。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">15.6</span><span style="font-family:DengXian; font-size:13pt">在任何情况下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您不应轻信借款、索要密码或其他涉及财产的网络信</span><span style="font-family:DengXian; font-size:13pt">息。涉及财产操作的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">请一定先核实对方身份</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">并请经常留意</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有关防范诈骗犯罪的提示。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十六、【协议的生效与变更】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.1</span><span style="font-family:DengXian; font-size:13pt">您使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">的服务即视为您已阅读本协议并接受本协议的约束</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.2</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权在必要时修改本协议条款。您可以在相关服务页面查阅最新版本的协议条款</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">16.3</span><span style="font-family:DengXian; font-size:13pt">本协议条款变更后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">如果您继续使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">提供的软件或服务</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">即视为您已接受修改后的协议。如果您不接受修改后的协议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应当停止使用</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">提供的软件或服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十七、【服务的变更、中断、终止</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.1</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可能会对服务内容进行变更</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">也可能会中断、中止或终止服务。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">您理解并同意</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权自主决定经营策略。在</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">发生合并、分立、收购、资产转让时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可向第三方转让本服务下相关资产</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">也可在单方通知您后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">将本协议下部分或全部服务转交由第三方运营或履行。具体受让主体以</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">通知的为准</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">3</span><span style="font-family:DengXian; font-size:13pt">如发生下列任何一种情形</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权不经通知而中断或终止向您提供的服务</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">根据法律规定您应提交真实信息</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">而您提供的个人资料不真实、或与注册时信息不一致又未能提供合理证明</span><span style="font-family:DengXian; font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">您违反相关法律法规或本协议的约定</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">按照法律规定或主管部门的要求</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">出于安全的原因或其他必要的情形。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.</span><span style=" font-size:13pt">4</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权按本协议</span><span style=" font-size:13pt">8.2</span><span style="font-family:DengXian; font-size:13pt">条的约定进行收费。若您未按时足额付费</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">有权中断、中止或终止提供服务。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">17.5</span><span style="font-family:DengXian; font-size:13pt">您有责任自行备份存储在本服务中的数据。如果您的服务被终止</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">可以从服务器上永久地删除您的数据</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">但法律法规另有规定的除外。服务终止后</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">没有义务向您返还数据。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十八、【管辖与法律适用】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.1</span><span style="font-family:DengXian; font-size:13pt">本协议的成立、生效、履行、解释及纠纷解决</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">适用中华人民共和国大陆地区法律</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">不包括冲突法</span><span style=" font-size:13pt">)</span><span style="font-family:DengXian; font-size:13pt">。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.</span><span style=" font-size:13pt">2</span><span style="font-family:DengXian; font-size:13pt">本协议签订地为中华人民共和国四川省成都市。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.3</span><span style="font-family:DengXian; font-size:13pt">若您和</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">之间发生任何纠纷或争议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">首先应友好协商解决</span><span style=" font-size:13pt">;</span><span style="font-family:DengXian; font-size:13pt">协商不成的</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">您同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.</span><span style=" font-size:13pt">4</span><span style="font-family:DengXian; font-size:13pt">本协议所有条款的标题仅为阅读方便</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">本身并无实际涵义</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">不能作为本协议涵义解释的依据。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">18.5</span><span style="font-family:DengXian; font-size:13pt">本协议条款无论因何种原因部分无效或不可执行</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">其余条款仍有效</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">对双方具有约束力。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">十九、【未成年人使用条款</span><span style="font-family:DengXian; font-size:13pt">】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">19.1</span><span style="font-family:DengXian; font-size:13pt">若用户未满</span><span style=" font-size:13pt">18</span><span style="font-family:DengXian; font-size:13pt">周岁</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">则为未成年人</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">应在监护人监护、指导下阅读本协议和使用本服务</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">19.2</span><span style="font-family:DengXian; font-size:13pt">未成年人用户涉世未深</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">容易被网络虚象迷惑</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">且好奇心强</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">遇事缺乏随机应变的处理能力</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">很容易被别有用心的人利用而又缺乏自我保护能力。因此</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">未成年人用户在使用本服务时应注意以下事项</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">提高安全意识</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">加强自我保护</span><span style="font-family:DengXian; font-size:13pt">:</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(1)</span><span style="font-family:DengXian; font-size:13pt">认清网络世界与现实世界的区别</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">避免沉迷于网络</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">影响日常的学习生活</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(2)</span><span style="font-family:DengXian; font-size:13pt">填写个人资料时</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">加强个人保护意识</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免不良分子对个人生活造成骚扰</span><span style=" font-size:13pt">;</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(3)</span><span style="font-family:DengXian; font-size:13pt">在监护人或老师的指导下</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">学习正确使用网络</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">(4)</span><span style="font-family:DengXian; font-size:13pt">避免陌生网友随意会面或参与联谊活动</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">以免不法分子有机可乘</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">危及自身安全。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style=" font-size:13pt">1</span><span style=" font-size:13pt">9.3</span><span style="font-family:DengXian; font-size:13pt">监护人、学校均应对未成年人使用本服务时多做引导。特别是家长应关心子女的成长</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">注意与子女的沟通</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">指导子女上网应该注意的安全问题</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">防患于未然。</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">二十、【其他】</span></p><p style="line-height:19pt; margin:0pt; orphans:0; widows:0"><span style="font-family:DengXian; font-size:13pt">如果您对本协议或本服务有意见或建议</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">可与</span><span style="font-family:DengXian; font-size:13pt">智享微金融</span><span style="font-family:DengXian; font-size:13pt">客户服务部门联系</span><span style=" font-size:13pt">,</span><span style="font-family:DengXian; font-size:13pt">我们会给予您必要的帮助。</span><span style=" font-size:13pt">(</span><span style="font-family:DengXian; font-size:13pt">正文完</span><span style=" font-size:13pt">)</span></p></div>'
+
+// export default agreement;
\ No newline at end of file
diff --git a/static/agreement2.js b/static/agreement2.js
new file mode 100644
index 0000000..2506e90
--- /dev/null
+++ b/static/agreement2.js
@@ -0,0 +1 @@
+const agreement2='<div><p style="font-size:16pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:16pt; font-weight:bold">智分期业务合作协议(普通商户版)</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:125%; margin:0pt 0pt 0pt 271.45pt; orphans:0; padding-left:61.3pt; text-align:right; text-indent:-61.3pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">协议</span><span style="font-family:仿宋; font-size:12pt">编号:</span><span style="font-family:仿宋; font-size:12pt">ZFQ-SY-QC</span><span style="font-family:仿宋; font-size:12pt">-</span><span style="font-family:仿宋; font-size:12pt">2018-</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">0001</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:125%; margin:0pt 0pt 0pt 271.45pt; orphans:0; padding-left:61.3pt; text-align:right; text-indent:-61.3pt; widows:0"><span style="font-family:仿宋; font-size:12pt">协议</span><span style="font-family:仿宋; font-size:12pt">签订地:</span><span style="font-family:仿宋; font-size:12pt">成都市高新区</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 63pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0.5pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲 方:</span><span style="font-family:仿宋; font-size:12pt">深圳前海彩蜂商业保理有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">91440300MA5F1HWU0L</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">余梦颖</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18828020724</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0.5pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙 方:</span><span style="font-family:仿宋; font-size:12pt">本次注册商户</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的营业执照号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人姓名</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人手机号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 63pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙 方</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">成都唯知信息科技有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">统一社会信用代码为:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">91510100MA6C9H4L1L</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">业务联系人:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">易轩弘</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">联系</span><span style="font-family:仿宋; font-size:12pt">方式:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18108214026</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">鉴于</span><span style="font-family:仿宋; font-size:12pt">:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方是一家依法设立并有效存续的商业保理公司。主要受让乙方拥有或控制的基于消费场景下产生的应收账款,为乙方用户提供分期付款服务(即“智分期”服务),进而提升乙方平台交易量。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 0.85pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方是一家依法成立并有效存续的独立公司法人企业,主营</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">汽车</span><span style="font-family:仿宋; font-size:12pt">类</span><span style="font-family:仿宋; font-size:12pt">相关产品</span><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">商品或服务</span><span style="font-family:仿宋; font-size:12pt">)的销售</span><span style="font-family:仿宋; font-size:12pt">并</span><span style="font-family:仿宋; font-size:12pt">提供相关服务</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方是一家专业的</span><span style="font-family:仿宋; font-size:12pt">系统开发服务商</span><span style="font-family:仿宋; font-size:12pt">,受甲方委托提供消费分期技术服务,致力于为商户及消费者提供基于互联网的更加便捷、安全、高效的一体化解决方案(分期服务),专注于消费品交易为主的在线分期购物商城及消费金融服务平台,是国内领先的消费品分期服务公司。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">为合理利用甲乙丙三方的有利资源,实现互利共赢,三方将合作运营并推广智分期业务,共同促进在消费业务领域的深度合作,在自愿、平等、诚信的基础上,交易各方经友好协商就智分期服务合作相关事宜达成共识,并就已经</span><span style="font-family:仿宋; font-size:12pt">确定</span><span style="font-family:仿宋; font-size:12pt">智分期交易规则、各方权利义务等内容达成如下协议,以资共同遵守。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第一条 定义</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议中,除非文义另有所指,下列名词具有如下特定含义:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、用户:指基于甲方提供的智分期服务基础上在乙方处进行消费的个人。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、商户:指为用户提供商品或服务(本协议统称“产品”)的供应商,即本协议中的乙方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、交易规则:指标示在乙方店面或网站之上的,与用户使用乙方所提供的平台服务有关的任何规范性文件,包括但不限于购物流程、售后政策、退款说明等,同时包括智分期服务交易规则,以下统称</span><span style="font-family:仿宋; font-size:12pt">“</span><span style="font-family:仿宋; font-size:12pt">交易规则</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、智分期服务:指甲方作为商业保理公司,受让乙方平台拥有或者控制的基于消费场景产生的应收账款,并通过乙方向用户提供的一种先消费后付款的购物体验的信用</span><span style="font-family:仿宋; font-size:12pt">分期</span><span style="font-family:仿宋; font-size:12pt">付款</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">(以下</span><span style="font-family:仿宋; font-size:12pt">简称“</span><span style="font-family:仿宋; font-size:12pt">智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务)</span><span style="font-family:仿宋; font-size:12pt">。</span><span style="font-family:仿宋; font-size:12pt">甲方可根据法律、法规和规范性文件的规定和营销推广的实际情况对相关技术服务的名称进行调整。甲方委托丙方为“智分期”服务提供技术支持,“智分期”服务包括但不限于以下特点:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)用户可延期支付或者分期支付;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)以用户的真实交易为背景;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)依赖丙方优质的信用分期付款技术服务;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)浮动费率。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、信用分期服务:指商户基于智分期服务为符合条件的用户提供 “先购物、后付款”的信用赊购方式付款的平台服务。“赊购方式付款”指用户在乙方消费时,可依据乙方交易规则及相应申请流程,享受由甲方在商业保理业务基础上提供的相应的延后付款或分期付款的付款方式。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、</span><span style="font-family:仿宋; font-size:12pt">商业保理:是指销售商(债权人)将其与买方(债务人)订立的货物销售(服务)协议所产生的应收账款转让给商业保理公司,由商业保理公司为其提供贸易融资、应收账款管理与催收等综合性商贸服务。在本协议项下,由甲方受让乙方基于消费场景产生的应收账款,提供商业保理服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7、资金服务机构:指为智分期中受让合作商户信用分期应收账款的资金机构和个人,包括且不限于银行、商业保理、融资租赁、消费金融公司、小贷公司、信托、私募基金等机构。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">8、分期服务费:指用户使用甲方提供的智分期服务需承担的服务费用,具体标准以甲方及乙方页面显示为准。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">9</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">保理</span><span style="font-family:仿宋; font-size:12pt">服务费:</span><span style="font-family:仿宋; font-size:12pt">指用户</span><span style="font-family:仿宋; font-size:12pt">使用“</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">时,</span><span style="font-family:仿宋; font-size:12pt">乙方</span><span style="font-family:仿宋; font-size:12pt">按照交易账款的</span><span style="font-family:仿宋; font-size:12pt">约</span><span style="font-family:仿宋; font-size:12pt">定比例</span><span style="font-family:仿宋; font-size:12pt">向甲</span><span style="font-family:仿宋; font-size:12pt">方支付的服务费用</span><span style="font-family:仿宋; font-size:12pt">即甲方在受让乙方拥有或控制的应收账款时,乙方应向甲方支付的费用,本协议项下保理服务费费率详见附表一(甲方有权根据业务发展情况调整该项费率,经相关各方书面确认后生效)。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">10</span><span style="font-family:仿宋; font-size:12pt">、交易</span><span style="font-family:仿宋; font-size:12pt">账款</span><span style="font-family:仿宋; font-size:12pt">:指用户在乙方使用“智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务的</span><span style="font-family:仿宋; font-size:12pt">消费</span><span style="font-family:仿宋; font-size:12pt">订单(根据</span><span style="font-family:仿宋; font-size:12pt">甲方后台确认</span><span style="font-family:仿宋; font-size:12pt">的订单确定</span><span style="font-family:仿宋; font-size:12pt">)</span><span style="font-family:仿宋; font-size:12pt">对应价款的金额(即乙方与用户基于商品销售及服务并符合《合同法》相关政策法规的基础交易约定,由乙方向用户提供服务或货物产生的应收账款金额),其中不包括用户已经另行向乙方支付的款项。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">11</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">应收账款</span><span style="font-family:仿宋; font-size:12pt">受让款</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">指甲方在受让乙方拥有或控制的应收账款后,在</span><span style="font-family:仿宋; font-size:12pt">交易账款中</span><span style="font-family:仿宋; font-size:12pt">扣除保理</span><span style="font-family:仿宋; font-size:12pt">服务费</span><span style="font-family:仿宋; font-size:12pt">后应向乙方支付</span><span style="font-family:仿宋; font-size:12pt">的账款余额</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">12</span><span style="font-family:仿宋; font-size:12pt">、清算服务机构:指甲乙丙三方基于智分期相关协议约定基础上,甲方或丙方委托其负责交易账款及相关业务中交易结算资金清分服务的机构。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">13</span><span style="font-family:仿宋; font-size:12pt">、用户个人信息:指用户依据智分期服务相关各方要求所提供的个人身份信息及历史消费情况,包括但不限于姓名、证件号、联系地址、手机号码等。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">14</span><span style="font-family:仿宋; font-size:12pt">、关联公司:本协议所称“关联公司”是指由一方直接控制或间接控制;或直接或间接控制一方;或与一方共同控制同一家公司或能对其施加重大影响;或与一方受同一家公司直接或间接控制的公司。包括但不限于一方的母公司、子公司;与一方受同一母公司控制的子公司;一方的合营企业、联营企业等。这里的“公司”指任何一人公司、有限责任公司或股份有限公司;“控制”是指直接或间接地拥有影响所提及公司管理的能力,无论是通过所有权、有投票权的股份、协议或其他被人民法院认定的方式。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议未作定义或约定的词语,按相关法律、法规及行业惯例解释。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第二条 分期业务合作约定与业务流程</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、甲方为乙方用户提供“智分期”服务。乙方向用户提供所需要的产品或服务后,甲方受让基于前述消费场景产生的应收账款。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、丙方接受甲乙二方的委托,为“智分期”服务提供技术服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、乙方放置“智分期”业务的链接、端口或分期二维码,引导用户使用“智分期”服务完成订单支付,并协助用户在申请“智分期”服务过程中完成授权及其他资料的提供。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、甲方对用户进行实名认证,用户资质审核通过后,同意用户使用智分期信用分期付款,乙方认可用户通过“智分期”业务支付的订单,乙方应根据订单向用户提供相应商品交付或服务。订单交易完成确认后,甲方受让该等应收账款并向乙方支付应收账款转让对价款项。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、</span><span style="font-family:仿宋; font-size:12pt">乙方基于“</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期”服务形成的对用户的分期应收账款债权及其附属权益,包括但不限于对该等分期应收账款等款项以及请求、起诉、收回、接受与该等分期应收账款相关的全部应偿付款项的权利、与该等分期应收账款相关的承诺的利益、强制执行该等分期应收账款的全部权利和申请法律救济的权利。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、乙方在此不可撤销地确认, 将以其自身名义向用户告知应收账款转让事宜,乙方应在签署</span><span style="font-family:仿宋; font-size:12pt">本</span><span style="font-family:仿宋; font-size:12pt">协议的同时一并签署《分期应收账款转让通知书》交甲方保存,在债务人(即用户)违约或出现本协议约定的风险事件情形下,乙方授权甲方向债务人发送其已签署的《分期应收账款转让通知书》,以行使该资产转让后在甲方和用户之间的相关权利。同时甲方如需在中国人民银行的债权转让相关登记或公示系统进行转让登记的,乙方应积极配合协助,根据甲方要求及时提供必要的转让登记资料,不得以任何理由拒绝。</span><br /><span style="font-family:仿宋; font-size:12pt"> 7</span><span style="font-family:仿宋; font-size:12pt">、甲乙丙</span><span style="font-family:仿宋; font-size:12pt">三</span><span style="font-family:仿宋; font-size:12pt">方共同约定,自甲方支付应收账款受让款之日起,该等应收账款即转让给甲方,该应收账款包括但不限于截止转让日债务人尚未支付的全部款项(无论是否已满足支付条件)及其自转让日起产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等。同时,乙方基于前述债权享有的任何从权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现债权而享有的任何实体性权利及程序性权利等也于转让日一并转让给甲方。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">8、自甲方支付应收账款受让款之日起,该应收账款回收款由用户直接支付至甲方指定的账户,若用户未按约定进行还款,甲方有权对用户进行催收,并对该应收账款债权资产处置。</span><br /><span style="font-family:仿宋; font-size:12pt"> 9</span><span style="font-family:仿宋; font-size:12pt">、根据本协议执行情况及乙方所属行业,甲、乙双方后续可根据业务开展情况通过签署书面补充协议的形式调整具体的业务规则及业务流程等产品信息。在任何</span><span style="font-family:仿宋; font-size:12pt">情形下</span><span style="font-family:仿宋; font-size:12pt">,如本协议项下智分期业务终止,协议各方</span><span style="font-family:仿宋; font-size:12pt">仍应按照</span><span style="font-family:仿宋; font-size:12pt">本</span><span style="font-family:仿宋; font-size:12pt">协议约定</span><span style="font-family:仿宋; font-size:12pt">,承担其在业务开展期间所产生的上述风险及法律责任。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第三条 商品服务承诺</span><br /><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span><span style="font-family:仿宋; font-size:12pt">1、乙方应保证所销售的商品或服务与其对外承诺保持一致且符合国家、地区及行业标准;乙方应按照法律、法规和规范性文件的规定对其出售给用户的商品或服务承担产品质量责任,并按照法律规定向用户履行“三包”义务。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">2、</span><a name="OLE_LINK2"><span style="font-family:仿宋; font-size:12pt">乙方应保证乙方具备所销售商品和服务的经营资质,并确认其拥有开具对应发票的资格</span></a><span style="font-family:仿宋; font-size:12pt">。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">3、甲方、丙方无须因乙方产品及服务问题承担任何责任。如因应归责于乙方原因(如产品质量有瑕疵、未实现服务承诺等)而产生的纠纷或争议,从而导致用户逾期付款或拒绝履行付款义务的,甲方有权就其所遭受的一切损失及不利后果向乙方进行追偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 24pt; orphans:0; padding-left:12pt; text-align:justify; text-indent:-12pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第四条 甲方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、乙方基于向用户提供产品或服务形成对用户(或者基础债务人)的分期应收账款债权及其附属权益,甲方按照本协议从乙方处受让全部分期应收账款债权及其附属权益, 包括但不限于对该等分期应收账款等款项以及请求、起诉、收回、接受与该等分期应收账款相关的全部应偿付款项的权利、与该等分期应收账款相关的承诺的利益、强制执行该等分期应收账款的全部权利和申请法律救济的权利。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、自甲方支付乙方分期应收账款受让款之日起,对应的智分期交易应收账款即转让给甲方,该应收账款包括但不限于截止甲方付款日用户尚未支付的全部款项(无论是否已满足支付条件)及其自甲方付款日起产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等。同时,乙方基于前述债权享有的任何权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现债权而享有的任何实体性权利及程序性权利等也于转让日一并转让给甲方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、甲方应按照本协议第7.1款将相应分期应收账款受让款按时支付至乙方指定账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、本协议项下的分期应收账款转让后,相关分期应收账款回收款由用户支付至甲方指定账户,若甲方在用户还款期未能按期足额收到应收账款回收款时,由甲方根据风险控制措施处理,与乙方无关。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、当发生下列情形之一时,甲方在书面通知后即可暂停、终止、中止向乙方提供服务而无需承担任何违约责任:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1)乙方提供的资料不真实、且未能提供合理说明及证明;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2)乙方违反法律、法规、规章及政府规范性文件或本协议约定;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3)中国人民银行、公安机关、政府机关或司法机关等国家机关向甲方发出要求的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、如乙方发生退货次数超过成功交易次数的</span><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">%,甲方有权向乙方提出警示或终止合作。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 0pt 0pt 24pt; orphans:0; padding-left:12pt; text-align:justify; text-indent:-12pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第五条 乙方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、乙方应向甲方提供的基本信息、营业执照复印件、税务登记证复印件和法定代表人或负责人身份证复印件等均真实、合法、有效。乙方应在安全的场所提供符合国家法律法规或相关质量标准或管理标准规定的商品和服务,乙方的经营应符合国家法律法规对其经营的要求。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、乙方承诺其拥有合法有效的经营资质在其乙方经营场所向用户销售相关产品或服务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、由于乙方原因造成乙方所提供的服务引起的一切客户投诉、质疑、纠纷或引起的法律上的责任,由乙方负责;如因前述情况导致甲方被裁定承担法律责任的,乙方应依法赔偿甲方损失。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、乙方在使用“智分期”业务过程中,有义务遵守包括国家法律、金融政策、中国银联规章制度在内的所有政策法规。乙方违法违规所造成的全部法律责任由乙方承担,造成甲方损失或承担责任的,甲方可随时向乙方追偿,并有权立即解除协议。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、乙方应及时有效地处理用户、客户或合作伙伴的各种投诉以及由乙方提供的产品和服务引发的质量、价格、售后服务等纠纷。由于乙方原因造成其客户投诉或引起其他法律纠纷和责任的,均与甲方无关,由此造成甲方损失的,应由乙方承担赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、当用户至乙方使用“智分期”服务过程中,若用户采取银行信用卡作为风险信用担保的,乙方务必保证用户所用信用卡持卡人信息真实有效,并和分期交易确认单上所填信息一致,否则由此造成的损失由乙方自行承担。同时乙方有义务确保分期交易的真实性及有效性,乙方有义务向甲方提供真实有效的用户订单信息和配送物流信息,乙方如发现用户有欺诈、非法套现、提供虚假资料、恶意刷单等情况,应及时采取包括且不限于通知甲方、协助甲方进行调查、处理,暂停对该用户提供服务等措施。如给甲方造成任何损失的,乙方还应该负责赔偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7</span><span style="font-family:仿宋; font-size:12pt">、乙方应该在分期交易后及时通知用户应收账款转让事宜,并协助甲方对用户进行还款提醒,若用户未能在还款日还款,乙方应协助甲方开展催收工作及惩罚。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">8</span><span style="font-family:仿宋; font-size:12pt">、乙方保证其有权获得通过乙方使用智分期的用户的充分授权,可以合理使用并授权丙方使用用户的相关信息,包括但不限于用户在乙方平台的注册信息、交易关系、浏览行为记录、相关消费记录和支付结算结果等。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">9</span><span style="font-family:仿宋; font-size:12pt">、乙方有权设定智分期的使用范围,但该设定范围应取得甲方的同意且不得歧视智分期的用户。但依据商品的属性(如话费充值卡、游戏点卡、游戏币等虚拟商品和黄金、珠宝、钻石等投资性贵金属等)不宜采用“智分期”服务的,乙方不得支持用户使用。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">10</span><span style="font-family:仿宋; font-size:12pt">、乙方保证具备开具所销售商品发票的资格且应按乙方与用户约定的价格向用户开具相应法定足额发票。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">11</span><span style="font-family:仿宋; font-size:12pt">、如甲方通过技术手段判定或有证据证明乙方联合用户进行套利套现交易,甲方有权要求乙方对甲方造成的损失进行全额赔偿。如套利套现情况严重的,甲方有权立即停止与乙方的合作及结算,并保留追究乙方违约责任的权利。如出现乙方用户进行套利套现交易,乙方承担同样的连带赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">六</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">条 丙方权利与义务</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、丙方有义务向甲方提供智分期业务运营所需的技术支持,维护智分期正常运行,并努力提升和改进技术能力,但不对因通信故障等非甲方原因引起的用户与甲方的交易中断、交易错误等承担责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、丙方受甲方的委托,有权要求乙方提供使用智分期服务付款的用户在其交易平台上的相关消费记录和支付结算结果,丙方有权依据本协议从甲方及</span><span style="font-family:仿宋; font-size:12pt">/或乙方处获得并合理使用本协议</span><span style="font-family:仿宋; font-size:12pt">约定的用户相关信息,乙方应负责取得对于上述事项的合法授权。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">、丙方有义务按照本协议约定就</span><span style="font-family:仿宋; font-size:12pt">本协议约定的服务流程</span><span style="font-family:仿宋; font-size:12pt">提供技术服务支持</span><span style="font-family:仿宋; font-size:12pt">并保证系统安全稳定</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第七条 费用结算及支付</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲乙丙三方同意并确认,本协议项下涉及的付款、还款、退款等操作处理均以以下方式处理:</span><br /><span style="font-family:仿宋; font-size:12pt"> 1</span><span style="font-family:仿宋; font-size:12pt">、账款结算约定,用户通过</span><span style="font-family:仿宋; font-size:12pt">“</span><span style="font-family:仿宋; font-size:12pt">智分期</span><span style="font-family:仿宋; font-size:12pt">”</span><span style="font-family:仿宋; font-size:12pt">服务</span><span style="font-family:仿宋; font-size:12pt">支付成功</span><span style="font-family:仿宋; font-size:12pt">时,甲方</span><span style="font-family:仿宋; font-size:12pt">于交易成功后</span><span style="font-family:仿宋; font-size:12pt">T+</span><span style="font-family:仿宋; font-size:12pt">0</span><span style="font-family:仿宋; font-size:12pt">个工作日内由清算服务机构在扣除依照附表一约定的费率扣除保理服务费后,将应收账款受让款结算至乙方指定账户。</span><br /><span style="font-family:仿宋; font-size:12pt"> 2</span><span style="font-family:仿宋; font-size:12pt">、在甲方开展营销活动时,涉及的促销费率双方另行以补充协议形式约定。</span><br /><span style="font-family:仿宋; font-size:12pt"> 3</span><span style="font-family:仿宋; font-size:12pt">、技术服务费约定,甲方基于丙方提供的技术服务一次性向丙方支付技术服务费人民币</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> 零 </span><span style="font-family:仿宋; font-size:12pt">元。</span><br /><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">4</span><span style="font-family:仿宋; font-size:12pt">、本协议项下,</span><span style="font-family:仿宋; font-size:12pt">双</span><span style="font-family:仿宋; font-size:12pt">方指定收款账户信息</span><span style="font-family:仿宋; font-size:12pt">:</span></p><table cellspacing="0" cellpadding="0" style="border-collapse:collapse; margin-left:26.55pt; width:498.45pt"><tr style="height:16.95pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账户信息</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方</span></p></td></tr><tr style="height:13.6pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账户名称</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户名称或法人姓名</span></p></td></tr><tr style="height:27.4pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">账 号</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的银行卡号</span></p></td></tr><tr style="height:15.9pt"><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:54.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">开 户 行</span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:middle; width:230.2pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p></td><td style="border-bottom-color:#000000; border-bottom-style:solid; border-bottom-width:0.75pt; border-left-color:#000000; border-left-style:solid; border-left-width:0.75pt; border-right-color:#000000; border-right-style:solid; border-right-width:0.75pt; border-top-color:#000000; border-top-style:solid; border-top-width:0.75pt; padding-left:5.03pt; padding-right:5.03pt; vertical-align:top; width:180.55pt"><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时选择的银行</span></p></td></tr></table><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">任何一方如需改变账户信息,应提前</span><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">个工作日书面通知另一方,否则协议其他方仍然有权视原账户为有效账户,因变更方未及时通知账户变更信息导致协议其他方将支付款项汇入变更方原账户的,视为变更方已经足额收到协议其他方应付的款项,因此产生的一切费用由变更方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、在甲乙丙三方协商一致的情况下,可在协议期内根据合作的业务量、交易成功率等因素,对相关费用标准进行调整。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6</span><span style="font-family:仿宋; font-size:12pt">、除甲方依照本协议约定收取的保理服务费及分期服务费外,用户、乙方及/或资金服务机构之间的任何资金款项往来涉及的相关责任均由该等主体之间通过资金提供协议或其他协议自行约定承担方式,该等主体之间的资金款项往来是否按时足额支付给相关方、是否发生逾期或资金提供协议或其他协议项下的违约等与甲方无关。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">7、甲乙双方在前期非系统(单指结算系统)状态下,按照以下流程进行应收账款受让款结算。乙方按照附件四</span><span style="font-family:仿宋; font-size:12pt">—</span><span style="font-family:仿宋; font-size:12pt">商户交易确认单填写订单信息,填写完成,经过核对,待确认无误后,连同用户办理“智分期”业务所填写贷记卡原件,用户确认办理“智分期”业务的确认短信三者一起拍照留存,将所拍照片发送到甲方指定邮箱。甲方按照收到照片所呈现的信息进行核对付款。信息核对无误按照7.1执行。如存在信息差异的,由甲乙双方协商处理,甲乙双方协商后无法达成一致意见的,以甲方所持有信息</span><span style="font-family:仿宋; font-size:12pt">为准。</span><span style="font-family:仿宋; font-size:12pt">乙方应保证所提供资料信息的正确性。甲乙双方在系统状态下,按照系统定义结算流程结算。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第八条 退货退款的处理</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、如用户提出退货申请且乙方已受理的,同时甲方针对该笔订单对应应收账款已向乙方完成受让支付的,乙方应在退货申请受理后的第二个工作日将甲方支付的应收</span><span style="font-family:仿宋; font-size:12pt">账款</span><span style="font-family:仿宋; font-size:12pt">及应收账款的退还至甲方指定收款账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、当乙方为用户办理退货时,应按照以下规定和退货流程办理:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)用户不得直接向甲方申请退款,只得向乙方发出申请。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)乙方同意用户退货退款申请后,需通过“智分期”后台提交退款申请,同时将已清算应收账款退回至甲方指定账户。上述应收账款确认退回后,甲方将用户已发生分期金额原路径返还并对剩余期数平账。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)自交易日起30日内用户可向乙方申请退款,该笔交易所产生的保理服务费由甲方部分承担,超过上述期限甲方不再受理退款申请。其中0.2%的支付通道费用由乙方承担。甲方承担其余保理服务费用。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)乙方</span><span style="font-family:仿宋; font-size:12pt">若</span><span style="font-family:仿宋; font-size:12pt">以现金方式退款给用户</span><span style="font-family:仿宋; font-size:12pt">,</span><span style="font-family:仿宋; font-size:12pt">因此产生的一切法律及经济责任由乙方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第九条 违约事件与违约责任</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、甲乙丙三方应当严格遵守本合作协议之规定,保障合作顺利进行。协议的任何一方违反其于本协议项下的陈述、承诺、保证或义务,则视为违约。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、出现下列情况之一的,视为已发生违约事件:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">)</span><span style="font-family:仿宋; font-size:12pt">任何一方提供的资料不真实或隐瞒重大事项、且未能提供合理说明及证明;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)</span><span style="font-family:仿宋; font-size:12pt">任何一方违反法律、法规、规章及政府规范性文件或本协议约定</span><span style="font-family:仿宋; font-size:12pt">或侵害第三人包括知识产权在内的一切权利的</span><span style="font-family:仿宋; font-size:12pt">;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)乙方</span><span style="font-family:仿宋; font-size:12pt">或其员工,故意构造虚假订单或虚假资料</span><span style="font-family:仿宋; font-size:12pt">或冒充</span><span style="font-family:仿宋; font-size:12pt">他人或联合他人不以真实消费为目的的申请</span><span style="font-family:仿宋; font-size:12pt">“智分期”服务;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)用户提交分期申请后,乙方无法向用户提供相应产品或服务;或因</span><span style="font-family:仿宋; font-size:12pt">乙方商品、发布的信息或提供的售后服务问题引发</span><span style="font-family:仿宋; font-size:12pt">用户大量投诉并影响三方合作的;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(5)乙方故意销售假冒伪劣、有毒有害商品或构造虚假订单或虚假资料或冒充他人或联合他人不以真实消费为目的申请“智分期”服务或利用甲方提供的服务进行不正当交易的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、违约方发生违约事项时,守约方有权视具体情况分别或同时采取以下措施:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)要求违约方在一定时限内停止违约行为,消除相关影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)要求违约方就违约事项的背景、原因、过程进行详细说明,并对后续按约定履行义务进行承诺和保证。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)要求违约方就违约行为所导致的守约方实际经济损失、产生的额外费用进行赔偿。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(4)要求违约方妥善解决其违约行为而给守约方带来的诉讼、纠纷、索赔、处罚或其他不利影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(5)守约方认为有必要的其他合理措施。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">任何一方发生前述违约事件或因中国人民银行、公安机关、政府机关或司法机关等国家机关向守约方发出要求的,守约方有权要求违约方限期整改其违约行为,给守约方造成损失的,有权要求违约方承担赔偿责任,同时守约方有权采取暂停、中止或终止合作或其他违约救济措施而无需承担任何违约责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、除非发生不可抗力之情形,否则违约方须在违约事项发生后承担违约责任。违约方经催告后拒不纠正违约行为或拒绝承担违约责任的,守约方有权中止或终止协议。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5</span><span style="font-family:仿宋; font-size:12pt">、任何一方未行使其权利或未就违约方的违约行为采取任何行动,不应被视为对权利的放弃或对追究违约责任或义务的放弃。任何一方放弃针对违约方的任何权利或放弃追究违约方的任何责任,不应被视为放弃对违约方的任何其他权利或任何其他任何责任的追究,所有放弃均应以书面形式做出。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">条 </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">知识产权及保密条款</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、因本协议约定事项进行的合作如涉及甲乙丙三方知识产权研发、归属的,原则上相关知识产权归属于研发主体。涉及合作开发的,由</span><span style="font-family:仿宋; font-size:12pt">双方</span><span style="font-family:仿宋; font-size:12pt">另行签署协议约定,并以该协议的约定为准。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、甲乙丙三方确认,“智分期”所</span><span style="font-family:仿宋; font-size:12pt">涉及</span><span style="font-family:仿宋; font-size:12pt">相关的知识产权归甲方所有,包括 “</span><span style="font-family:仿宋; font-size:12pt">智</span><span style="font-family:仿宋; font-size:12pt">分期”著作权、商标权以及甲方受乙方委托为其设计的产品页面等</span><span style="font-family:仿宋; font-size:12pt">均</span><span style="font-family:仿宋; font-size:12pt">由</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">和/或甲方关联方享有,</span><span style="font-family:仿宋; font-size:12pt">未经甲方书面同意,乙方不得将其用于本次合作以外的目的或授权他人使用</span><span style="font-family:仿宋; font-size:12pt">。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、在履行本协议期间,本协议项下各方在使用其他方授权的企业名称、商标、商号、品牌、域名和网站时,应当仅限于为各方在本协议中约定的内容服务,不得用于与“智分期”业务无关的其他业务内容或经营目的。各方在其自身宣传材料、名片、市场宣传、网站建设以及其他任何方面使用其他方授权的名称、域名和网站,都必须事先书面通知其他方,并获得其他方的许可后方可进行,否则一方有权要求违约方承担由此而产生的一切法律责任,并赔偿因此造成的直接损失。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、甲乙丙三方应对其在履行本协议过程中获悉的任何有关其他方及其他客户的非公开信息和资料给予保密,未经其他方事先书面同意,不得用于本协议之外的目的,不得向任何第三方披露或以其他方式予以公开,但相关法律法规及规范性文件另有规定或监管部门另有要求的,以及第三方专业服务机构(法律、财务、审计等)和资金服务机构的合理要求除外。如因任何一方原因造成前述信息揭露且无法消除影响的,过错方应承担一切违约责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、甲乙丙三方承认在合作过程中获得的信息的敏感性及保密性,并承诺对该等信息进行保密。保密信息包括但不限于:①本合作本身,包括合作各方的名称及本协议的条款和内容;②一方因本协议协商和履行而获得的另一方的任何信息,包括但不限于交易数据、信用卡持卡人或乙方用户的信息和资料、另一方的财务状况、商业活动计划和安排、市场调查结果、数据模型、数据分析报告、所有关于履行本合作项目所产生的相关数据;③任何其它因本协议而获悉的另一方的任何信息。一方同意在未取得另一方事先书面同意前不得以口头或书面的方式向任何第三方披露任何该等保密信息,除非该等披露是法律或法定程序所强制要求的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、甲乙丙三方应保证其所有雇员、佣工、代理人和承包商对上述保密信息保密。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十一条 协议的生效、解除与终止</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、本协议自甲乙丙三方法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人签字并</span><span style="font-family:仿宋; font-size:12pt">加盖各自公章或协议章后生效,有效期为自本协议生效之日起</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> </span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">壹</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline"> </span><span style="font-family:仿宋; font-size:12pt">年,</span><span style="font-family:仿宋; font-size:12pt">有效期届满,</span><span style="font-family:仿宋; font-size:12pt">双</span><span style="font-family:仿宋; font-size:12pt">方如需继续开展合作的,应另行</span><span style="font-family:仿宋; font-size:12pt">签署</span><span style="font-family:仿宋; font-size:12pt">书面协议</span><span style="font-family:仿宋; font-size:12pt">,</span><span style="font-family:仿宋; font-size:12pt">本协议</span><span style="font-family:仿宋; font-size:12pt">的</span><span style="font-family:仿宋; font-size:12pt">有效期满/终止/</span><span style="font-family:仿宋; font-size:12pt">中止</span><span style="font-family:仿宋; font-size:12pt">均不影响</span><span style="font-family:仿宋; font-size:12pt">甲乙双</span><span style="font-family:仿宋; font-size:12pt">方</span><span style="font-family:仿宋; font-size:12pt">在本协议有效期间</span><span style="font-family:仿宋; font-size:12pt">对</span><span style="font-family:仿宋; font-size:12pt">用</span><span style="font-family:仿宋; font-size:12pt">户所承诺服务的履行,</span><span style="font-family:仿宋; font-size:12pt">同时本协议有效期间双方已产生的权利义务</span><span style="font-family:仿宋; font-size:12pt">也不受影响。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、本协议对本协议各方的承继人或受让人具有同等约束力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、除本协议另有约定外,如发生以下情形之一的,甲方有权单方面解除本协议,本协议自甲方发出的解除通知到达本协议其他方之日起解除:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(1)因不可抗力,或因法律、法规或国家政策调整或监管机关、司法部门等国家机关要求终止本协议,从而导致本协议无法继续履行;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(2)因甲方发生重组、股权调整、经营决策调整导致甲方无法继续履行本协议;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(3)因乙方严重违约导致本协议无法继续履行;</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">本协议因前款第(1)、(2)项情形解除的,本协议双方互不负任何违约责任;本协议因前款第(3)项情形解除的,</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">有权要求乙方承担违约责任,如造成损失或其他不利影响的,</span><span style="font-family:仿宋; font-size:12pt">甲方</span><span style="font-family:仿宋; font-size:12pt">有权要求乙方承担赔偿责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十二条 通知与送达</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、本协议项下任一方做出或者发出的任何通知、要求或者信函应以书面形式(包含电子邮件等方式)交付或者发送至另一方,相关方联系方式如下:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">)甲方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">yumengying@finlean.com</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18828020724</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方接收通知地址</span><span style="font-family:仿宋; font-size:12pt">:</span><span style="font-family:仿宋; font-size:12pt">四川省</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">成都市高新区香年广场T3-4301</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">)乙方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时填写的负责人邮箱</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">负责人手机号</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方接收通知地址:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">商户注册时选择及填写的地址</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">(</span><span style="font-family:仿宋; font-size:12pt">3</span><span style="font-family:仿宋; font-size:12pt">)丙方接收通知方式:邮箱</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">yixuanhong@finlean.com</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">电话</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">18108214026</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方接收通知地址:四川省</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">成都市高新区香年广场T3-4301</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">甲乙丙三方合作期内,如联系方式发生变更的,变更方应当提前十个工作日以电子邮件或邮寄等书面方式通知对方。未及时书面通知而造成的任何损失,由违约方承担相应责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、任何通知、要求或其它文件都应当以书面形式做出,如通过传真或邮件等有线传输方式发送的,发出方传送系统确认传送成功之时,视为送达。如通过邮资预付的挂号邮递或快递的方式发送,在发出后的第三日视为已经送达。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、任何一方没有向对方预留或补留通讯地址、或预留的通讯地址有误的、或在邮寄途中发生延误或丢失的,对方不承担任何延误或未送达的责任。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本协议有效期间,如乙方发生重大产权转让、体制变更、申请停业整顿、申请解散、申请破产等足以影响甲方权利实现的行为时,乙方保证提前30个工作日通知甲方。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十三条</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold"> </span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">争议的解决</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">甲乙丙三方确认,本协议的签署、生效和履行以不违反中国的法律法规为前提。如本协议中任一条款违反适用的法律法规,则该条款将被视为无效,但该无效条款并不影响本协议其他条款的效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2</span><span style="font-family:仿宋; font-size:12pt">、</span><span style="font-family:仿宋; font-size:12pt">因本协议引发的或与本协议有关的争议,由双</span><span style="font-family:仿宋; font-size:12pt">方</span><span style="font-family:仿宋; font-size:12pt">协商解决,也可由有关部门调解;协商或调解不成的,任何一方可以将争议提交北京仲裁委员会申请仲裁,甲乙丙三方同意根据申请仲裁时北京仲裁委员会现行有效的仲裁规则进行仲裁。仲裁裁决是终局的,对甲乙丙三方具有约束力,双方特此不可撤销地放弃向可能对争议事项有管辖权的任何法院提起诉讼的权利。仲裁费用和胜诉方因办理案件所支出的合理费用由败诉方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt 1.3pt 0pt 0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">第十四条 其他条款</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、除前述第五条相关条款约定以外,乙方承诺在本协议签署之日起的一年内,乙方不会就信用卡分期以及类似智分期业务模式的任何其他机构开展基于信用卡分期合作。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、甲乙丙三方均系合法成立并有效存续的公司,其拥有充分的权力和权利签署并履行本协议;各方均已经充分知悉、理解本协议的全部条款内容,并且已采取一切适当和必要的公司行为,授权签署和履行本协议,签署和履行本协议是各方真实意思表示,该等签署是真实、合法、有效的。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、本协议附件为本协议不可分割的组成部分,与本协议具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本协议的任何一方不得就本协议的内容做出单方面修改,本协议中未尽事宜由甲乙丙三方协商,需采用书面形式签订补充协议,补充协议与本协议具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">5、本协议正文、本协议附件和本协议之补充协议(如有)共同组成本协议之完整内容。甲乙丙三方认可并同意在就“智分期”业务进行合作时,除遵守本协议正文的相关约定外,还应遵守本协议附件和本协议之补充协议(如有)的约定。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">6、本协议一式叁份,甲乙丙三方</span><span style="font-family:仿宋; font-size:12pt">各</span><span style="font-family:仿宋; font-size:12pt">执壹份,具有同等法律效力。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件列表</span><span style="font-family:仿宋; font-size:12pt">:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件一:智分期服务费费率标准</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件二:分期交易确认单模板</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">附件</span><span style="font-family:仿宋; font-size:12pt">三:</span><span style="font-family:仿宋; font-size:12pt">《分期应收账款转让通知书》</span></p><p style="margin:0pt"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt; font-style:italic"> </span><span style="font-family:仿宋; font-size:12pt; font-style:italic">---------------------</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">以下无正文,</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">签</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">字页</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">随附</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-------------------</span><span style="font-family:仿宋; font-size:12pt; font-style:italic">-</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">甲方(盖章):</span><span style="font-family:仿宋; font-size:12pt">深圳前海彩蜂商业保理有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><a name="Text41"><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">余雁南</span><span style="font-family:仿宋; font-size:12pt"> </span></a></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:300pt; widows:0"><span style="-aw-bookmark-end:Text41"></span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">乙方(盖章):</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">法人姓名</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:288pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">丙方(盖章):</span><span style="font-family:仿宋; font-size:12pt">成都唯知信息科技有限公司</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">法定</span><span style="font-family:仿宋; font-size:12pt">代表人</span><span style="font-family:仿宋; font-size:12pt">/授权</span><span style="font-family:仿宋; font-size:12pt">签约人</span><span style="font-family:仿宋; font-size:12pt">签字:</span><span style="font-family:仿宋; font-size:12pt; text-decoration:underline">赵育梓</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日 </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">附件</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">: 分期</span><span style="font-family:仿宋; font-size:12pt; font-weight:bold">应收账款转让通知书</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">分期应收账款转让通知书</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:仿宋; font-size:12pt; font-weight:bold">(致用户声明)</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:仿宋; font-size:12pt">【此处填写用户名称】(下称“贵方”):</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方通过智分期服务</span><span style="font-family:仿宋; font-size:12pt">向</span><span style="font-family:仿宋; font-size:12pt">乙方购买商品而与乙方形成了买卖关系及保理公司自【乙方】处受让【乙方】在该买卖约定项下对贵方享有的应收账款而与贵方形成了交易关系及在此基础上形成了应收账款,现就应收账款项下我方对贵方享有的应收账款转让的事宜我方向贵方通知如下:</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">1、我方与保理公司签署了智分期业务合作协议,我方将我方对贵方在商务协议项下享有的应收账款(截至保理公司支付转让对价之日)及自该日起(含该日)产生的全部逾期利息、违约金、赔偿金、补偿金及任何其他应付款项等及任何从权利包括但不限于抵押权、质押权、保证金等担保权利以及为实现应收账款而享有的任何实体性权利及程序性权利等,全部转让给保理公司。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">2、自本通知书签署之日起,保理公司作为新债权人有权要求贵方根据上述商务协议向保理公司清偿本通知书列明的应收账款及履行商务协议项下的其他义务。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方应自收到本通知书之日起,将上述商务协议项下的全部应付款项于其到期之日支付至保理公司与贵方约定的指定账户或自本通知书签署之日起保理公司另行通知的其他账户。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">贵方仅得通过上述收款账户以电汇货币方式偿付本通知书列明的应收账款,除非保理公司另行书面同意或通知,我方无权通知贵方更改上述还款账户信息,贵方亦不得向保理公司指定账户外的其他任何账户或以其他方式偿付应收账款,否则视为贵方未能偿付相应债务,贵方仍应按保理公司的要求再行偿付。由此产生的一切损失、责任</span><span style="font-family:仿宋; font-size:12pt">等,由贵方自行承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">3、为避免歧义,我方在此确认:我方在商品服务项下的任何义务和责任均不转让给保理公司,仍由我方承担。</span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt">4、本通知书一式三份,贵我双方各执一份,另一份由我方提交保理公司备存。</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-align:justify; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt">乙方</span><span style="font-family:仿宋; font-size:12pt">法人签字</span><span style="font-family:仿宋; font-size:12pt">(公章):</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">法人姓名</span><span style="font-family:仿宋; font-size:12pt"> </span></p><p style="font-size:12pt; line-height:150%; margin:0pt 36pt 0pt 0pt; orphans:0; text-align:center; text-indent:24pt; widows:0"><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期年</span><span style="font-family:仿宋; font-size:12pt">年</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期月</span><span style="font-family:仿宋; font-size:12pt">月</span><span style="background-color:#ffff00; font-family:仿宋; font-size:12pt; text-decoration:underline">当天日期日</span><span style="font-family:仿宋; font-size:12pt">日</span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span><span style="font-family:仿宋; font-size:12pt"> </span></p></div>'
\ No newline at end of file
diff --git a/static/agreement3.js b/static/agreement3.js
new file mode 100644
index 0000000..e4d0629
--- /dev/null
+++ b/static/agreement3.js
@@ -0,0 +1,126 @@
+const agreement3= `<p style="line-height:19pt; margin:0pt; orphans:0; text-align:center; widows:0">
+<span style="font-family:DengXian; font-size:14pt">智享收银台扫码支付客户服务协议</span>
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 智享收银台扫码支付客户服务协议(以下简称“本协议”)是作为您(以下简称“客户”)与智享收银台商户办理花呗分期业务(以下简称“商户’)就使用扫码支付服务(以下简称“本服务”)等相关事宜而共同缔结。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+一、声明与承诺
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ (一) 智享收银台提醒客户认真阅读并充分理解本协议各条款。请谨慎阅读并选择是否接受本协议。在阅读本协议的过程中,如果不同意本协议或其中任何条款约定,客户可以立即停止使用本服务。客户一经使用本服务即视为对本协议的理解和接受。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ (二)客户在使用本服务时,应自行判断交易对方是否具有完全民事行为能力并自行决定是否使用本服务与对方进行交易,且客户应自行承担与此相关的所有风险。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ (三)客户在使用本服务时,应完全遵循本协议及智享收银台不时制定的各项规定及相关页面提示内容。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 二、 智享收银台扫码支付业务条款
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 智享收银台扫码支付业务仅限于用户个人消费领域,不得用于生成经营、投资等非消费领域,不得从事套现、洗钱和其他非法活动。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 智享收银台扫码支付业务名称如发生更改,以智享收银台公告为准,本协议的有效期不受业务名称变而影响。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)向商户付款
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+向商户付款:是客户使用支付宝客户端向商户出示付款二维码并经商户扫描(以下简称“被扫业务”),或客户使用支付宝客户端扫描商户出示的二维码(以下简称“主扫业务“)经收单机构受理后完成资金支付的服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+使用本服务付款是基于付款客户对收款客户的充分了解(包括但不限于对方的真实身份及交易背景等),付款客户应当承担自身指示错误(失误)而导致的风险。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)交易撤销及退货
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+向商户付款业务提供交易撤销与退货功能,客户在消费并成功使用扫码支付业务付款后,如需撤销该笔支付交易或退货,可通过商户申请发起交易撤销或退货,智享收银台将根据相关业务规则将交易款项退还至客户原付款账户中。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+三、本服务的其他业务规则
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+1. 智享收银台银行依据客户付款指示,根据本协议的约定向收款客户/商户完成支付后,即完成了当次服务的所有义务。对于收付款双方之间产生的关于当次交易的任何纠纷不承担任何责任,客户应当自行处理相关的纠纷。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+2. 客户使用本协议,即表明同意授权智享收银台在付款客户符合指定条件或状态时,支付款项给收款商户。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+四、信息保密与使用
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+客户授权并同意智享收银台为提供本服务而收集、保留和使用由客户提供并保存在智享收银台的个人信息(包括但不限于客户姓名、手机号码等)以及客户在使用本协议时留存在智享收银台客户端及各类数据信息,(以下合称“客户信息”)。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+对于智享收银台在为客户提供本本地服务过程中获取和知悉的客户信息,智享收银台对相关的使用不得违反法律法规和监管要求,并应当承担保密责任,不向第三方披露该信息,但下列情形除外:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)使用法律法规要求披露的:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)司法部门或监管机构依法要求披露的:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(三)客户另行同意或授权智享收银台进行披露的。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+五、智享收银台的权利与义务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)智享收银台有权对使用本服务进行的交易及交易风险进行监控和评估,并根据相关法律法规、监管要求及本协议约定,根据客户风险状况采取调整、限制客户付款项金额、限制涉嫌违规的交易款项、终止受理业务等风险管理措施。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)智享收银台应向客户提供符合相关法律法规规定、监管要求及支付宝业务规则的支付服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+六、客户的与义务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)客户有权享有智享收银台提供的符合相关法律法规规定、监管要求及支付宝业务规则的扫码支付服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)客户有权知悉本服务的所有功能、使用方法、各类收费项目和标准等信息。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(三)客户应根据本协议相关说明及智享收银台扫码支付交易支付页面中明示的相关规定/提示进行支付。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+七、责任承担及责任限制
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)使用本服务的付款客户和收款商户之间发生的任何交易纠纷应由纠纷各方自行解决,智享收银台不承担任何责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)客户在未受安全保护的手机客户端上使用本服务的,包括但不限于在受到病毒侵害的电脑或手机或其他移动设备终端上、在不安全的wifi环境里使用本服务等情形造成的损失,应由客户本人承担,智享收银台对此不承担任何责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(三)客户未按照本服务相关规则/页面提示内容操作,或未及时进行支付操作等原因造成付款失败所造成的一切损失,应由客户本人承担,智享收银台对此不承担任何责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(四)客户使用本服务时同意并认可,由于不可抗力及/或国家政策变化、IT系统故障、通讯系统故障、电力系统故障、金融危机等非银行所能控制的原因导致的损失,客户须自行承担。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+八、法律使用及争议解决条款
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)本协议的生效、履行、解释及争议的解决均适用中华人民共和国法律。本条款如因与中华人民共和国现行法律相抵触而导致部分无效,不影响其他部分的效力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)如就本协议内容或其他执行发生任何争议,则双方应首先通过友好协商方式解决:协商不成的,任何一方均应向智享收银台所在地的人民法院提起诉讼。双方在补充协议/补充条款中另有约定的除外。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+九、其他
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(一)本协议经客户扫码付款二维码后生效。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)如本协议中的任何条款无论任何原因被视为完全或部分无效或不具有执行力,均不影响本协议的任何其余条款的有效性、约束力及可执行性。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(三)智享收银台修改本协议内容的,应根据适用的法律、法规、规章和监管规定提前在智享收银台门户网站、相关渠道公告。
+</p>`
\ No newline at end of file
diff --git a/static/agreement4.js b/static/agreement4.js
new file mode 100644
index 0000000..fceb005
--- /dev/null
+++ b/static/agreement4.js
@@ -0,0 +1,428 @@
+const agreement4= `<p style="line-height:19pt; margin:0pt; orphans:0; text-align:center; widows:0">
+<span style="font-family:DengXian; font-size:14pt">订单账款管理服务合同</span>
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0;font-size:10pt">
+ 合同签订地及履行地:杭州市西湖区
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 特别提醒:鉴于您(或称“客户”)通过四川纷领信息技术科技有限公司运营的智享收银台(域名为sie.jycash.cn,以下简称“交易平台”)向浙江网商银行股份有限公司(以下简称“网商银行”)申请开通“订单账款管理”服务(以下简称“本服务”),网商银行诚恳地建议您:在网商银行网站或其他与网商银行相关的软件客户端(简称“银行平台”)点击接受本合同之前,应事先了解清楚并充分理解本合同条款的全部内容。一旦您在任何银行平台点击接受本合同,即意味着您愿意向网商银行申请本服务,并已阅读、充分理解和接受本合同所有条款,同意接受本合同约束。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 为充分维护您的合法权益,网商银行特提醒您特别关注本合同条款中的加粗及加下划线部分。如您无法准确理解或不同意本合同任一条款,请勿继续之后的流程;如有疑问,烦请致电网商银行客服电话【95188-3】。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 第一条 了解订单账款安全
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 1.1 考虑到订单账款安全,建议您:(1)妥善保管法定代表人身份证、营业执照、组织机构代码证、税务登记证、开户许可证等身份证明文件;(2)妥善保管手机、电脑等电子终端,并确保前述设备在安全的环境下使用服务;(3)妥善保管银行平台登录名、账号、密码、交易验证码等重要信息,不要轻信他人随意泄露;(4)交易完成后及时核对交易记录;(5)及时通知网商银行任何可疑的事项。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 1.2 对于可能发生或实际已发生的资金安全问题,建议您采取如下措施:(1)即刻自行操作或致电网商银行冻结资金,并及时修改密码;(2)如身份证明文件丢失,即刻向发证机关提出挂失申请;(3)如手机等电子终端丢失,向电信运营商提出号码挂失及换领申请。网商银行将尽力协助您减少可能损失的发生,但不会就您申请冻结资金之前发生的损失承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 1.3 为了保障您的订单账款安全,当网商银行判断存在较高的欺诈,盗用,不当使用,黑客入侵,病毒,恶意的、破坏性的或损坏性的代码、程序或宏指令攻击风险,或者存在疑似洗钱等违反法律法规的操作时,网商银行可以视情况在最长不超过180天的一定期间(简称“锁定期”)内锁定您的服务使用,并且拒绝接收您的任何交易指令。在该等情况下,您可以在锁定期后重新使用服务或者发送交易指令,也可以在锁定期内拨打网商银行客服电话申请解除锁定。该等锁定不应被视为网商银行的义务,网商银行也免于为此承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 第二条 了解服务申请的条件
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 2.1 本服务申请过程中,您须根据监管规定及网商银行要求向网商银行提供相应资料并按照银行平台提示的流程提交申请。网商银行可能会对不同客户增减所需信息、验证步骤及具体要求,请以申请时银行平台的具体提示为准。网商银行将根据监管规定及网商银行要求对您的申请进行审核,并通过银行平台提示告知审核结果,烦请您关注。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 2.2 本服务申请过程中,您须根据银行平台提示的流程关联同名银行账户,并且应根据银行平台的提示完成相关验证。操作及使用关联同名银行账户时应遵循如下约定:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ (a) 为了确保您的合法权益,您应确保同名银行账户为您实名开立并使用。如非本人实名开立的账户请勿进行关联,否则网商银行有权拒绝您的关联申请或单方面解除已关联账户的关联关系。如因您的关联行为造成您自身、网商银行或第三方损失的,您同意就前述损失承担全部责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ (b) 您授权同意,除留存您主动提供的同名银行账户信息外,网商银行亦可通过非银行支付机构、清算机构、合作银行获取并留存您的同名银行账户信息,包括但不限于账号、户名、证件类型、证件号码。并同意网商银行通过非银行支付机构、清算机构、合作银行进行上述账户信息的校验,您亦同意前述非银行支付机构、清算机构、合作银行将校验信息反馈给网商银行。您应确保同名银行账户信息的真实、完整、准确、合法、有效。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 2.3 基于运营及风险考虑,服务开通后,根据您的具体情况,对于以下第三条所述的网商银行的各项服务,网商银行可能会增减具体服务内容和(或)限制条件,请以银行平台的具体提示为准,烦请您关注。
+</p>
+
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 第三条 了解订单账款管理服务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 一  服务内容
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.1订单账款管理服务是指您向交易对手提供商品或服务时,由网商银行为您提供保理服务,即您同意委托网商银行向您在交易平台的交易对手或合作机构(如收单机构、支付机构等)代收订单账款,并将订单账款根据本协议约定的方式进行结算。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.2您在使用订单账款管理服务时应遵守银行平台及交易平台设定的流程、规则,否则网商银行有权拒绝向您提供本服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 二  订单账款结算
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.3您同意并理解,您可以通过以下方式实现订单账款结算:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)网商银行仅为您代收基于交易平台上的订单账款,如前述资金非交易款项,则网商银行保留拒绝接收并退回原汇入账户的权利;此外,网商银行亦会根据交易平台的指令将订单账款退返。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)根据您与交易平台的约定将订单账款结算至您已关联的同名银行账户。网商银行将视情况,在交易当日或之后的工作日尽快处理。您确认并同意,前述交易的完成将受限于网商银行及/或其他机构操作此类交易的工作时间。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.4您在提交指令时,请反复确认指令的准确性及完整性(包括转出金额、转出账户的户名、开户行、账号及其他网商银行要求的信息),网商银行没有义务对上述信息进行核实。一旦网商银行收到您或交易平台的任何结算指令,除非网商银行另行同意,网商银行将不会受理和执行您随后要求取消、撤销或修改该转账指令的任何指令。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.5基于运营及风险考虑,网商银行将对可结算的金额、次数及使用方式进行限制,并单方面决定本服务的服务费用及交易指令的截止时间。除非紧急情况,网商银行将在银行平台公示前述信息。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.6您理解并同意,对于本服务,除非因网商银行欺诈行为或重大过失导致的直接损失,网商银行对资金划转或传输过程中可能产生的任何损失或迟延,信息传输途中可能发生的任何错误、遗漏或毁损,或对收到的信息的错误解释,免于承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 三 订单账款融资
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.7您理解,基于付款机构、交易平台等因素,网商银行将上述订单账款结算给您存在一定的期间。为了保证您的流动性,您可选择向网商银行申请订单账款融资。该申请是一次性的,即在您同意办理订单账款融资至您终止本服务的期间,您无须针对每笔订单账款进行单独申请,网商银行将在确认您确实存在该笔订单账款后的约定时间内将款项支付至您授权的账户。前述约定时间具体以交易平台的规则、页面展示为准。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.8鉴于网商银行向您提供了订单账款融资服务,为此您须向网商银行支付相应的服务费。具体服务费收取标准详以交易平台或银行平台的展示为准。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.9您在申请订单账款融资服务并收到对应的款项后,除网商银行书面同意外,您不得就该笔订单账款向交易对手或合作机构主张债权。网商银行将享有该笔订单账款的权利,包括向交易对手或合作机构请求付款至网商银行指定账户等。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.10如您与交易对手的交易存在瑕疵(如商品瑕疵、货不对版、伪造交易、交易对手拒付等),网商银行有权不向您提供订单账款融资服务。如网商银行已将融资款支付给您指定账户的,则您同意通过第三方(如支付宝(中国)网络技术有限公司等,以下简称“支付宝”)划转相应款项,或从您的其他交易资金中划转相应款项,针对其他交易资金划转的款项,网商银行将不再向您承担本协议项下订单账款结算的义务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(二)智享收银台应向客户提供符合相关法律法规规定、监管要求及支付宝业务规则的支付服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+四 对账查询
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+3.11您可以通过银行平台的指定页面查询您的账户信息及明细。如您对相关服务信息及结算明细存在疑问的,烦请致电网商银行客服电话咨询。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第四条 了解交易指令
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.1网商银行接受并执行通过以下任意一种或者多种方式发送的交易指令:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)根据交易平台的规则或与您的约定,交易平台自行或代您发送的交易指令。前述指令包括但不限于冻结、解冻、划转款项等;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)验证您在网商银行预留的交易密码(如有);
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)网商银行不时认可的其他方式。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.2您确认并同意,依据4.1条约定发送的交易指令,无论是否由您本人亲自做出,均视为您本人做出,对您具有法律上的约束力。您不得因为前述指令存在交易平台转交情况而拒绝认可该交易指令,并就网商银行执行该交易指令提出任何赔偿请求。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.3您可以通过银行平台指定的操作流程变更或者网商银行客服电话予以变更交易密码(如有),或以网商银行不时允许的其他方式予以操作。在网商银行收到上述申请并确认完成该变更操作之后,该变更方生效。交易密码变更的生效不影响变更前使用原交易密码已进行的交易的效力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.4如果您连续多次未通过网商银行认可的验证方式的验证,并达到网商银行认为合理的次数限制,网商银行将视情况在一定期间(简称“锁定期”)内锁定您的访问,或者拒绝接收您的任何交易指令。在该等情况下,您可以在锁定期结束后重新使用本服务,也可以在锁定期内拨打网商银行客服电话,按照银行平台的提示验证您的身份,并申请解除锁定。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第五条 服务状态异常将会影响交易指令执行
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+5.1当服务状态异常(比如订单账款余额不足、被冻结等)时,网商银行将不会执行您的交易指令(包括任何网商银行收费或网商银行应当代收的费用、手续费、佣金)。网商银行亦不就因延迟或未执行该等交易指令所导致的任何后果承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+5.2如网商银行收到数项付款或其他交易指令,并且其涉及的总额超出订单账款余额或任何交易限额时,网商银行有权不考虑相关指令的发出日期以及收到该等指令的时间先后,自行决定选择执行和不执行其中的一项或若干项交易指令。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第六条 了解资金使用限制的情形
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+您不可撤销地授权网商银行,在为了确保您有足够资金执行您的任何交易指令,及根据交易平台自行或代您发送的交易指令,或基于法律法规规定、有权机关要求及其他合理理由的情况下,网商银行有权限制您使用相应资金,或冻结、划转部分或全部资金。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第七条 了解您应承担的债务追讨费用
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+网商银行可采取合理行动,以强制执行本合同,包括在向网商银行所知悉的您的任一联系方式发出通知后,聘请律师及/或第三方催收公司等代理人追讨您所欠网商银行的任何款项。您应当向网商银行赔偿网商银行为行使或实现网商银行在本合同项下任何权利或利益所产生的一切合理的法律及其他合理费用及开支(包括但不限于诉讼费用、律师费用、催收费用、调查费用、公证费用、评估费、鉴定费、拍卖费及差旅费等)。您不可撤销地同意及授权网商银行为上述目的向该等人士披露您的相关资料及信息。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第八条 如何终止服务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.1在您违反本合同约定时,网商银行有权随时经通知您,自通知时起不再为您提供本服务,而免于为此承担责任。网商银行在发出该等通知后,即无任何义务执行与本服务有关的任何交易指令。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.2网商银行有权在出现下列情况时,随时暂停您使用或中止本服务,而无须提供任何通知或理由:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)本服务的维持或操作,因任何法律、法规或监管规定而被禁止或变得不合法/不合规;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)您违反本合同的任何条款或与网商银行达成的其他约定;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)您未按照网商银行的要求更新您的客户资料,包括但不限于身份证明信息、手机号等;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)经网商银行合理判断,本服务被用作任何不合法或不正当的用途,或者存在被用作任何不合法或不正当的用途的嫌疑;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(e)网商银行就有关本服务的操作收到互相抵触的指示;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(f)网商银行收到任何第三方对您的订单账款的权利主张。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.3如您申请终止本服务,应当通过客服电话办理。网商银行将酌情决定接受或拒绝您的服务终止申请。如果存在任何未结清的交易,或者您欠付网商银行的任何款项尚未结清,网商银行将不会接受您的服务终止申请。请您理解,网商银行目前暂不提供服务主动终止服务,如有疑问可咨询网商银行客服电话。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.4服务终止后如有订单账款未处理,网商银行可根据网商银行认为妥当的途径和方式将扣除您欠付网商银行的任何网商银行收费及其他款项后的余额交还您,包括将款项转入您另行指定的您本人在其他银行或机构开立的账户。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.5不论您的部分或全部服务是否已暂停或终止,您仍有责任向网商银行支付手续费、佣金及您应当支付的其他款项,以及截至服务暂停或终止时所累积的欠款,即使本合同之效力终止,您仍应承担该等付款责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.6服务终止后,您将无法继续使用网商银行的本服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第九条 了解反洗钱的相关约定
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+9.1根据法律、法规和该司法管辖区的政府和监管机关的要求,若我们怀疑或认为任何账户的收支款项是恐怖分子/恐怖组织的财产或资金、或是毒品交易、恐怖活动或任何犯罪的收入、或者该等汇款或支付可能另行受到任何司法管辖区的制裁,我们可以决定并采取我们认为适当的任何行动。该等行动包括但不限于:拦截和调查任何付款指示以及通过网商银行的系统发往您或由您发出或代表您发出的其他信息或通讯;就可能涉及被制裁的任何个人或实体的姓名/名称是否确为该受制裁的个人或实体作进一步查询;在一段合理时间内推迟处理该等资金划转或支付以进行我们认为必需的调查和查询;拒绝进行该等资金划转或支付或拒绝接受该等交易指令。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+9.2网商银行对任何一方由于以下任何事项遭受的任何损失(无论是直接损失还是间接损失,包括但不限于利润损失或利息损失)或损害免于承担责任:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)网商银行迟延或未能处理任何该等交易指令或其他信息或通讯,或迟延或未能履行与任何账户或向您提供任何服务相关的任何职责或其他义务,只要该等迟延或未能处理/未能履行是全部或部分由于网商银行根据前述法律、法规和要求而采取的任何行为或措施而导致的;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)网商银行行使本合同下的任何权利。在某些情况下,网商银行采取的行为可能导致不予或迟延处理某些指令或信息。在采取该等行为时,网商银行均不保证网商银行系统中的相关付款指示或其他信息和通讯是准确的、现时的或更新的。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十条 了解网商银行如何行使抵销权
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+在不损害(现有或将来设立的)任何留置权、抵押权、质押权或其他担保权利的情况下,除网商银行可行使的所有其他权利及救济外,网商银行有权(但无义务)在不经事先通知您或取得您事先同意的情况下,抵销或转移本服务项下的订单账款,以偿还您对网商银行在任何账户或任何服务项下或其他任何方式的义务、债务或责任,不论该等义务、债务或责任为连带或单独的、基本或从属的,亦不论是否需要通过您的交易指令执行。您在此同意并授权网商银行执行(或要求执行)任何必要的资金划转。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十一条 了解网商银行如何行使留置权
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+网商银行有权留置您通过任何途径由网商银行持有或控制的任何现有和将来的财产,作为您对网商银行的任何义务、债务或责任的持续性担保,直至该等义务、债务或责任已完全清偿。网商银行有权出售该等财产,并在扣除相关费用、手续费、佣金或您应当支付的其他款项后,将所获款项用作偿还您对网商银行的任何义务、债务及责任(包括诉讼费用、律师费用、评估费、拍卖费及差旅费等)。如该等款项不足以偿付您对网商银行的所欠款项,您应一经网商银行要求立即补足其差额。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十二条 了解网商银行的免责条款
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.1除非由于网商银行或网商银行员工的欺诈行为或重大过失,否则网商银行或网商银行员工就下列事宜向您或第三人均免于承担责任或义务:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)本服务因任何法律、法规或监管要求而被禁止或变得不合法/不合规
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)您没有遵守本合同的约定;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)网商银行按照交易平台之指示行事;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)任何与本服务有关的设备或装置的机械故障、电力故障、失灵、停顿、运作中断或设备或装置的不足,或任何天灾、恐怖活动、战争或延期偿付之宣布或任何其他不在网商银行控制范围内的事宜;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(e)网商银行执行符合本合同的任何指令,或网商银行基于合理理由未能执行或决定不执行该等指令;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(f)网商银行基于合理理由未能或延迟执行您的指令。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.2网商银行相关系统或软件因下列状况无法正常运作,使您无法使用或无法正常使用各项服务或使网商银行无法根据您的指令行事或者履行本合同项下的其他义务时,网商银行不承担损害赔偿责任,该状况包括但不限于:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)在网商银行相关系统或软件或与交易相关的其他系统或软件公告之系统维护期间;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)电信设备出现故障不能正常进行数据传输的;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)因台风、地震、海啸、洪水、停电、战争、恐怖袭击等不可抗力之因素,造成网商银行系统障碍不能正常执行业务的;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)由于黑客攻击、电信部门技术调整或故障、网站升级、第三人方面的问题等原因而造成的服务中断或者延迟。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.3在任何情况下,网商银行对您或任何第三人的责任均仅限于直接及纯粹因上述事宜导致的直接且可合理预计的损失。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.4除非网商银行另行明确书面同意,网商银行不对您承担任何咨询、建议或类似服务的义务。您确认,您已经就任何账户、服务、您与网商银行之间的任何交易或网商银行按您任何指示而进行的交易,在相关的法律、税务、财务和其他方面,取得了必要的独立咨询意见。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.5您使用本服务或进行任何交易或投资的任何决定,均是根据您本身的独立判断和评估而作出的,并不依赖网商银行给予的任何意见、建议或信息;您亦同意,即使决策是根据网商银行给予的任何具有参考性的意见、建议或信息而进行的,网商银行不会就您的决策导致的损失或损害承担责任,您不会就此要求网商银行承担责任,亦不会就此加入或进行针对网商银行的任何行动或诉讼。您了解,进行任何投资前应当寻求独立的专业咨询,并且就与本合同有关的任何事项而言,网商银行并非专业的独立顾问。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十三条 了解网商银行对交易记录及资料保存的方式方法
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+13.1在提供本合同项下服务的过程中,您同意且网商银行有权(但无义务),以各种可行方式记录您的客户资料、交易指令、交流信息(包括但不限于客服电话的录音)及其他相关文件。所有资料均属网商银行所有,并可作为您的交易指令或证明网商银行与您之间沟通情况的决定性证据,对您具有法律上的约束力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+13.2网商银行可自行确定保存客户资料、交易指令、交流信息及其他相关文件的期限,并可能在期限届满后销毁其正本。该正本可能会被复制成数字存储的副本,该等数字存储的副本应被视为与其正本具有相同的真实性及效力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+13.3所有以上客户资料、交易指令、交流信息及其他相关文件,以及相应的数字存储的副本等均具有法律上完全的证据效力,对您具有法律上的约束力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十四条 了解您及时更改客户资料的义务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.1您保证您提供给网商银行的任何资料均为真实、准确、有效。当您的任何客户资料出现任何更改或更新,应立即通过网商银行认可的方式提交更新申请。在网商银行确认上述更新之后,客户资料变更方生效。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.2客户资料包括但不限于身份信息、联系方式等。提交客户资料更新申请后,网商银行可能要求您提交相关补充资料,您应尽协助之义务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.3所有源于您没有向网商银行提供最新客户资料而引致的后果均由您自行承担。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十五条 了解您的建议及投诉渠道
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+如您对网商银行提供的服务有任何建议或投诉,可致电网商银行的客服电话或登录网商银行银行平台。您的所有建议和投诉将按网商银行的内部处理程序予以处理。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十六条 了解网商银行更正错误记录
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+即使有任何明示或默示的相反规定,网商银行有权并且您授权网商银行在发现:(i)任何交易记录错误; (ii)任何交易记录遗漏;或(iii)任何交易存在计算错误时,随时更正交易记录。您同意并授权,如该等错误或遗漏造成网商银行向相关账户支付了超过应付数额的任何款项,则网商银行有权调整任何相关交易记录、要求您退款及/或从您在本网商银行开立的任何账户扣除相关款项。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十七条 了解网商银行承担赔偿的范围
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+如网商银行因为或出于向您提供任何服务、与您进行任何交易、为您维持履行本合同项下义务、您违反本合同或适用的法律而基于合同、侵权或其他方面遭受或产生任何索赔、责任、损失、损害、成本、费用和开支(不论因税款、税费或其他事由产生的,包括但不限于全额赔偿网商银行为维护和实现本条款项下权利而发生的诉讼费用、律师费用、评估费、拍卖费及差旅费等,且不论是实际发生的还是可能发生的),您应向网商银行赔偿该等索赔、责任、损失、损害或费用,并且确保网商银行免受该等索赔、责任、损失、损害、费用或开支的影响,除非该等索赔、责任、损失、损害或费用是由网商银行的欺诈或重大过失造成。网商银行出具的任何您就上述赔偿责任而对网商银行应承担的责任或债务的证明,应对您具有约束力,并且作为最终证据,而无须进一步证明该等索赔、责任、损失、损害、费用或开支。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十八条 了解网商银行如何收集信息
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.1您理解并同意,当您使用网商银行服务时,您会向网商银行主动提供一些信息,网商银行也会通过您授权的渠道收集您的一些信息。网商银行将依据《网商银行隐私权政策》的要求严格保护您的信息。请您仔细阅读该政策,如有任何疑问,请随时联系网商银行。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.2您理解并同意,网商银行在遵循合法、正当、必要原则的前提下,按照如下方式收集您的相关信息:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)为减少可能存在的资金损失风险,网商银行将对您根据本协议2.2条关联的银行账户进行验证,验证的信息应当至少包括:开户申请人姓名、居民身份证号码、手机号码、绑定账户账号(卡号)、绑定账户是否为Ⅰ类银行账户或者信用卡账户。您理解并同意网商银行在监管要求的必要范围内,收集您的前述信息;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)为了遵守法律法规及监管机构的管理的要求,以及向您提供更个性化、更便捷的服务,网商银行需要收集您主动提供的身份信息,或向支付宝等网商银行关联公司及合法留存您信息的其他方(如:I类银行账户或信用卡账户开户银行)收集您的身份信息,并进行交叉验证核对。身份信息包括:您的姓名、身份证件、地址、职业、电话号码和电子邮件地址及相关附加信息(如您所在的省份和城市、邮政编码等);
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)为便于您查询您的交易状态或历史记录,也为了遵守法律法规的规定,网商银行会保存您使用网商银行服务产生的交易信息,并严格按照法律法规及监管的要求对这些信息进行妥善保管;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)为了保护您的账户安全,防止您的资金、个人信息被不法分子获取,当您使用网商银行提供的服务时,您理解并同意网商银行记录您操作的相关信息,如:您的网络信息、设备标识符、硬件型号、操作系统版本、您的位置以及与网商银行服务相关的日志信息。这些信息可帮助网商银行更好地保护您的账户安全。您可以关闭收集位置功能,这样网商银行会停止对您的位置信息的收集,这样做不会影响您使用网商银行服务,但可能会影响网商银行判断您的账户是否安全;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(e)网商银行为了提供服务及改进服务质量的合理需要,您理解并同意网商银行收集其他必要信息,如:您与网商银行的客户服务团队联系时您提供的相关信息,您参与提供的与网商银行服务或产品相关的问卷答复信息。与此同时,为提高您使用网商银行提供的服务的安全性,更准确地预防钓鱼网站、短信欺诈和木马病毒,网商银行可能会通过了解一些您的网络使用习惯、您使用的移动应用(App)或软件信息等手段来判断您账户的风险,并可能会记录一些网商银行认为有风险的URL。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第十九条 了解网商银行如何使用信息
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+19.1收集您的信息是出于遵守国家法律法规的规定或监管要求,以及向您提供服务及提升服务质量的目的。为了实现前述目的,您理解并同意网商银行把您的信息用于下列用途:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)向您提供网商银行的各项服务及客户服务,并维护、改进这些服务;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)比较信息的准确性,并与第三方进行验证。例如,将您向网商银行提交的身份信息与身份验证的服务机构进行验证;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)为使您知晓自己使用网商银行的各项服务的情况或了解网商银行的服务,向您发送服务状态的通知、营销活动及其他商业性电子信息。如您不希望接收该等信息,请您收到营销信息后按照信息提示的方式退订;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)对网商银行用户的身份数据、交易信息等进行综合统计、分析或加工等处理,为您提供理财、信贷等服务;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(e)预防或禁止非法的活动;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(f)行政和司法机关根据法律及行政法规的合法要求。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+19.2为了提升服务效率,降低服务成本,或提高服务质量,网商银行可能需要委托关联公司或专业机构(以下合称“受托机构”)协助完成本协议项下服务或职责,例如:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)委托具备专业技术能力的关联公司按照本协议的约定采集您的信息或对您的信息进行分析、加工和处理,用于网商银行服务的风险控制或维护、改善网商银行服务;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)委托具备专业技术能力的关联公司评估您的履约能力和履约意愿,供网商银行决策参考;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)委托受托机构提供客户服务(如:客服热线接听)。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+为此,网商银行将在与相关服务必要范围内向受托机构提供您的部分信息。网商银行承诺受托机构同样遵守严格的保密义务及采取有效的保密措施,禁止其将这些信息用于未经您同意的用途,网商银行对此承担相应的责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第二十条 了解网商银行如何共享信息
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+网商银行对您的信息承担严格保密义务,您理解并同意,网商银行为了遵守国家法律法规的规定或监管要求,以及向您提供服务并提升服务质量的目的,在下列情况下将您的信息与第三方共享:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(a)若第三方根据其与您的约定可以获取您提供给或留存在网商银行的信息,网商银行将依据您同意的范围向第三方提供该等信息;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(b)某些情况下,只有共享您的信息,才能提供您需要的服务和(或)产品,或处理您与他人的交易纠纷或争议;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(c)某些情况下,只有共享您的信息,才能判断您的账户或交易是否安全;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(d)某些服务和(或)产品由网商银行的合作伙伴提供或由网商银行与合作伙伴、供应商共同提供,网商银行会与其共享提供服务和(或)产品必须的信息;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(e)网商银行与第三方进行联合推广活动,网商银行可能与其共享活动过程中产生的、为完成活动所必要的个人信息,如参加活动的用户数、中奖名单、中奖人联系方式等,以便第三方能及时向您发放奖品;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(f)为促进社会信用体系的建立和完善,您同意将您提供的或履约中产生的相关必要信息(包括不良信息)向征信机构、信用服务机构以及中国互联网金融协会提供;
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(g)行政和司法机关根据法律及行政法规的合法要求。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第二十一条 合同的适用法律及争议解决方式
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+本合同适用中华人民共和国法律。本合同在履行过程中发生争议,可以协商解决,协商不成,向合同签订地及履行地人民法院起诉。在诉讼期间,本合同不涉及争议部分的条款仍须履行。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第二十二条 合同的生效、变更、解除
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+22.1本合同自网商银行向您提供具体服务之日起生效。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+22.2网商银行有权不定期修改本合同,不时增加、减少或变更任何服务(包括其相关范围及使用条件)、网商银行服务收费表。当本合同的相关变更涉及增加网商银行收费及/或影响您的责任及义务时,网商银行将通过银行平台的相应页面,至少提前三十天予以公布。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+22.3除法律法规另有强制性规定外,如您在相关修改生效后继续使用相关服务,即视为同意该等变更或修订。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+22.4本合同生效后,除本合同另有约定外,未与网商银行协商一致的情况下您不得变更或解除本合同。网商银行基于自身经营考虑,可以中断、终止本合同或其任何部分,但网商银行将尽最大可能减少或避免侵害您的合法权益。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+第二十三条 通知及其他
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+23.1通知
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+本合同履行过程中,网商银行可以通过银行平台的内置信息、您留存在网商银行或交易平台的电子邮箱等途径向您发出通知,发送当日即视为送达。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+23.2其他
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+除本合同的相关约定外,您还须遵守国家法律法规、监管规定关于支付结算、银行服务等相关规定。
+</p>
+`
\ No newline at end of file
diff --git a/static/agreement5.js b/static/agreement5.js
new file mode 100644
index 0000000..60219eb
--- /dev/null
+++ b/static/agreement5.js
@@ -0,0 +1,283 @@
+const agreement5= `<p style="line-height:19pt; margin:0pt; orphans:0; text-align:center; widows:0">
+<span style="font-family:DengXian; font-size:14pt"><span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>用户服务协议</span>
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0;font-size:10pt">
+ 为使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务,您应当阅读并遵守《<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>用户服务协议》(以下简称“本协议”)。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款、管辖与法律适用条款,以及开通或使用某项服务的单独协议。限制、免责条款可能以黑体加粗或加下划线的形式提示您重点注意。除非您已阅读并接受本协议所有条款,否则您无权使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>提供的服务。您使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务即视为您已阅读并同意上述协议的约束。如果您未满18周岁,请在法定监护人的陪同下阅读本协议,并特别注意未成年人使用条款。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 一、【协议的范围】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 1.1本协议是您与<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>之间关于用户使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>相关服务所订立的协议。“<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>”是指珠海稻壳信息科技有限公司与四川纷领信息技术有限公司联合开发的产品。“用户”是指使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>相关服务的使用人,在本协议中更多地称为“您”。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 1.2本协议项下的服务是指<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>向用户提供的包括但不限于经营范围项下的信息技术服务、零售金融服务、移动服务等(以下简称“本服务”)
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 二、【帐号与密码安全】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 2.1您在使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务时需要注册一个帐号。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 2.2<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>特别提醒您应妥善保管您的帐号和密码。当您使用完毕后,应安全退出。因您保管不善可能导致遭受盗号或密码失窃,责任由您自行承担。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 三、【用户信息保护】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.1保护用户信息是<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的一项基本原则<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>将按照本协议的规定收集、使用、储存和分享您的信息
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.2您在注册帐号或使用本服务的过程中,可能需要填写一些必要的信息。若国家法律法规有特殊规定的,您需要填写真实的身份信息。若您填写的信息不完整,无法使用本服务或在使用过程中受到限制。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.3一般情况下,您可随时浏览、修改自己提交的信息,但出于安全性和身份识别的考虑,您可能无法修改注册时提供的初始注册信息及其他验证信息。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.4<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>将运用各种安全技术和程序建立完善的管理制度来保护您的信息,以免遭受未经授权的访问、使用或披露
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.5<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不会将您的信息转移或披露给任何非关联的第三方,除非:
+ (1)相关法律法规或法院、政府机关要求;
+ (2)为完成合并、分立、收购或资产转让而转移;
+ (3)为提供您要求的服务所必需。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 3.6<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>非常重视对未成年人信息的保护。若您是18周岁以下的未成年人,在使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务前,应事先取得您家长或法定监护人(以下简称"监护人")的书面同意。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 四、【使用本服务的方式】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 4.1除非您与<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>另有约定,您同意本服务为商业性质的使用。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.2您应当通过<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>提供或认可的方式使用本服务。您依本协议条款所取得的权利不可转让。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+4.3您不得使用未经<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>授权的插件、外挂或第三方工具对本协议项下的服务进行干扰、破坏、修改或施加其他影响。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+五、【按现状提供服务】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+您理解并同意,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务是按照现有技术和条件所能达到的现状提供的。<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>会尽最大努力向您提供服务,确保服务的连贯性和安全性;但<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不能随时预见和防范法律、技术以及其他风险,包括但不限于不可抗力、病毒、木马、黑客攻击、系统不稳定、第三方服务瑕疵、政府行为等原因可能导致的服务中断、数据丢失以及其他的损失和风险。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+六、【自备设备】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+6.1您应当理解,您使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务需自行准备与相关服务有关的终端设备(如手机),并承担所需的费用(如电话费、上网费等费用)。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+6.2您理解并同意,您使用本服务时会耗用您的终端设备和带宽等资源。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+七、【广告】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+ 7.1您同意<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可以在提供服务的过程中自行或由第三方广告商向您发送广告、推广或宣传信息(包括商业与非商业信息),其方式和范围可不经向您特别通知而变更。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+7.2<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可能为您提供选择关闭广告信息的功能,但任何时候您都不得以本协议未明确约定或<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>未书面许可的方式屏蔽、过滤广告信息。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+7.3<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>依照法律的规定对广告商履行相关义务,您应当自行判断广告信息的真实性并为自己的判断行为负责,除法律明确规定外,您因依该广告信息进行的交易或前述广告商提供的内容而遭受的损失或损害<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+7.4您同意,对<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>服务中出现的广告信息,您应审慎判断其真实性和可靠性,除法律明确规定外,您应对依该广告信息进行的交易负责。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+八、【收费服务】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.1<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的部分服务是以收费方式提供的,如您使用收费服务,请遵守相关的协议。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+8.2<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可能根据实际需要对收费服务的收费标准、方式进行修改和变更,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>也可能会对部分免费服务开始收费。前述修改、变更或开始收费前,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>将在相应服务页面进行通知或公告。如果您不同意上述修改、变更或付费内容,则应停止使用该服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+九、【第三方提供的产品或服务】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+您在<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>上使用第三方提供的产品或服务时,除遵守本协议约定外,还应遵守第三方的用户协议。<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>和第三方对可能岀现的纠纷在法律规定和约定的范围内各自承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十、【基于软件提供服务】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+若<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>依托“软件”向您提供服务,您还应遵守以
+下约定:
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+10.1您在使用本服务的过程中可能需要下载软件,对于这些软件,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>给予您一项个人或工商主体的、不可转让及非排他性的许可。您仅可为访问或使用本服务的目的而使用这些软件。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+10.2为了改善用户体验、保证服务的安全性及产品功能的一致性,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可能会对软件进行更新。您应该将相关软件更新到最新版本,否则<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>并不保证其能正常使用。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+10.3<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可能为不同的终端设备开发不同的软件版本,您应当根据实际情况选择下载合适的版本进行安装。您可以直接从<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的网站上获取软件,也可以从得到<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>授权的第三方获取。如果您从未经<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>授权的第三方获取软件或与软件名称相同的安装程序,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>无法保证该软件能够正常使用,并对因此给您造成的损失不予负责。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+10.4除非<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>书面许可,您不得从事下列任一行为:
+(1)删除软件及其副本上关于著作权的信息;
+(2)对软件进行反向工程、反向汇编、反向编译,或者以其他方式尝试发现软件的源代码;
+(3)对<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>拥有知识产权的内容进行使用、出租、岀借、复制、修改、链接、转载、汇编、发表、出版、建立镜像站点等
+(4)对软件或者软件运行过程中释放到任何终端内存中的数据、软件运行过程中客户端与服务器端的交互数据,以及软件运行所必需的系统数据,进行复制、修改、增加、删除、挂接运行或创作任何衍生作品,形式包括但不限于使用插件、外挂或非经<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>授权的第三方工具/服务接入软件和相关系统;
+(5)通过修改或伪造软件运行中的指令、数据,增加、删减、变动软件的功能或运行效果,或者将用于上述用途的软件、方法进行运营或向公众传播,无论这些行为是否为商业目的;
+(6)通过非<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>开发、授权的第三方软件、插件、外挂、系统,登录或使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>软件及服务或制作、发布、传播非掌上客如去开发、授权的第三方软件、插件、外挂、系统
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十一、【知识产权声明】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.1您在使用本服务时须遵守法律法规,不得利用本服务从事违法违规行为,包括但不限于:
+(1)发布、传送、传播、储存危害国家安全统一、破坏社会稳定、违反公序良俗、侮辱、诽谤、淫秽、暴力以及任何违反国家法律法规的内容;
+(2)发布、传送、传播、储存侵害他人知识产权、商业秘密等合法权利的内容;
+(3)恶意虚构事实、隐瞒真相以误导、欺骗他人;
+(4)发布、传送、传播广告信息及垃圾信息
+(5)其他法律法规禁止的行为。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.2如果您违反了本条约定,相关国家机关或机构可能会对您提起诉讼、罚款或采取其他制裁措施,并要求<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>给予协助。造成损害的,您应依法予以赔偿,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不承担任何责任</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.3如果<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>发现或收到他人举报您发布的信息违反本条约定,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权进行独立判断并采取技术手段予以删除、屏蔽或断开链接。同时,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权视用户的行为性质,采取包括但不限于暂停或终止服务,限制、冻结或终止用户账号的使用,追究法律责任等措施。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+12.4您违反本条约定,导致任何第三方损害的,您应当独立承担责任;<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>因此遭受损失的,您也应当并赔偿。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十三、【遵守当地法律监管】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+13.1您在使用本服务过程中应当遵守当地相关的法律法规,并尊重当地的道德和风俗习惯。如果您的行为违反了当地法律法规或道德风俗,您应当为此独立承担责任
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+13.2您应避免因使用本服务而使<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>卷入政治和公共事件,否则<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权暂停或终止对您的服务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十四、【用户发送、传播的內容与第三方投诉处理】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.1您通过本服务发送或传播的内容(包括但不限于网页、文字、图片、音频、视频、图表等)均由您自行承担责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.2您发送或传播的内容应有合法来源,相关内容为您所有或您已获得权利人的授权。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.3您同意<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可为履行本协议或提供本服务的目的而使用您发送或传播的内容。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.4如果<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>收到权利人通知,主张您发送或传播的内容侵犯其相关权利的,您同意<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权进行独立判断并采取删除、屏蔽或断开链接等措施
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+14.5您使用本服务时不得违反国家法律法规、侵害他人合法权益。您理解并同意,如您被他人投诉侵权或您投诉他人侵权,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权将争议中相关方的主体联系方式、投诉相关内容等必要信息提供给其他争议方或相关部门,以便及时解决投诉纠纷,保护他人合法权
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十五、【不可抗力及其他免责事由】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.1您理解并同意,在使用本服务的过程中,可能会遇到不可抗力等风险因素,使本服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为等。岀现上述情况时,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>将努力在第一时间与相关单位配合,及时进行修复,但是由此给您造成的损失<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>在法律允许的范围内免责
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+(f)网商银行收到任何第三方对您的订单账款的权利主张。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.2在法律允许的范围内,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>对以下情形导致的服务中断或受阻不承担责任:
+(1)受到手机病毒、木马或其他恶意程序、黑客攻击的破坏;
+(2)用户或<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的电脑软件、系统、硬件和通信线路出现故障;
+(3)用户操作不当;
+(4)用户通过非<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>授权的方式使用本服务;
+(5)其他<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>无法控制或合理预见的情形
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.3您理解并同意,在使用本服务的过程中,可能会遇到网络信息或其他用户行为带来的风险,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不对任何信息的真实性、适用性、合法性承担责任,也不对因侵权行为给您造成的损害负责。这些风险包括但不限于:
+(1)来自他人匿名或冒名的含有威胁、诽谤、令人反感或非法内容的信息
+(2)因使用本协议项下的服务,遭受他人误导、欺骗或其他导致或可能导致的任何心理、生理上的伤害以及经济上的损失;
+(3)其他因网络信息或用户行为引起的风险
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.4您理解并同意,本服务并非为某些特定目的而设计,包括但不限于核设施、军事用途、医疗设施、交通通讯等重要领域。如果因为软件或服务的原因导致上述操作失败而带来的人员伤亡、财产损失和环境破坏等,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不承担法律责任。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.5<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>依据本协议约定获得处理违法违规内容的权利,该权利不构成<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的义务或承诺,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>不能保证及时发现违法行为或进行相应处理。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+15.6在任何情况下,您不应轻信借款、索要密码或其他涉及财产的网络信息。涉及财产操作的,请一定先核实对方身份,并请经常留意<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有关防范诈骗犯罪的提示。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十六、【协议的生效与变更】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+16.1您使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>的服务即视为您已阅读本协议并接受本协议的约束
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+16.2<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权在必要时修改本协议条款。您可以在相关服务页面查阅最新版本的协议条款
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+16.3本协议条款变更后,如果您继续使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>提供的软件或服务,即视为您已接受修改后的协议。如果您不接受修改后的协议,应当停止使用<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>提供的软件或服务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十七、【服务的变更、中断、终止】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+17.1<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可能会对服务内容进行变更,也可能会中断、中止或终止服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+17.2您理解并同意,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权自主决定经营策略。在<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>发生合并、分立、收购、资产转让时,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可向第三方转让本服务下相关资产;<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>也可在单方通知您后,将本协议下部分或全部服务转交由第三方运营或履行。具体受让主体以<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>通知的为准
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+17.3如发生下列任何一种情形,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权不经通知而中断或终止向您提供的服务:
+(1)根据法律规定您应提交真实信息,而您提供的个人资料不真实、或与注册时信息不一致又未能提供合理证明;
+(2)您违反相关法律法规或本协议的约定;
+(3)按照法律规定或主管部门的要求;
+(4)出于安全的原因或其他必要的情形。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+17.4<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权按本协议8.2条的约定进行收费。若您未按时足额付费,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>有权中断、中止或终止提供服务。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+17.5您有责任自行备份存储在本服务中的数据。如果您的服务被终止,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>可以从服务器上永久地删除您的数据,但法律法规另有规定的除外。服务终止后,<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>没有义务向您返还数据。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十八、【管辖与法律适用】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.1本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法)。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.2本协议签订地为中华人民共和国四川省成都市。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.3若您和<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>之间发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.4本协议所有条款的标题仅为阅读方便,本身并无实际涵义,不能作为本协议涵义解释的依据。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+18.5本协议条款无论因何种原因部分无效或不可执行,其余条款仍有效,对双方具有约束力。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+十九、【未成年人使用条款】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+19.1若用户未满18周岁,则为未成年人,应在监护人监护、指导下阅读本协议和使用本服务
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+19.2未成年人用户涉世未深,容易被网络虚象迷惑,且好奇心强,遇事缺乏随机应变的处理能力,很容易被别有用心的人利用而又缺乏自我保护能力。因此,未成年人用户在使用本服务时应注意以下事项,提高安全意识,加强自我保护:
+(1)认清网络世界与现实世界的区别,避免沉迷于网络,影响日常的学习生活
+(2)填写个人资料时,加强个人保护意识,以免不良分子对个人生活造成骚扰;
+(3)在监护人或老师的指导下,学习正确使用网络
+(4)避免陌生网友随意会面或参与联谊活动,以免不法分子有机可乘,危及自身安全。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+19.3监护人、学校均应对未成年人使用本服务时多做引导。特别是家长应关心子女的成长,注意与子女的沟通,指导子女上网应该注意的安全问题,防患于未然。
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+二十、【其他】
+</p>
+<p style="line-height:19pt; margin:0pt; orphans:0; text-indent:26.25pt; widows:0">
+如果您对本协议或本服务有意见或建议,可与<span style="text-decoration:underline;color:#66CCFF;">和微分平台</span>客户服务部门联系,我们会给予您必要的帮助。(正文完)
+</p>
+`
diff --git a/static/img/1.png b/static/img/1.png
new file mode 100644
index 0000000..7d492d7
--- /dev/null
+++ b/static/img/1.png
Binary files differ
diff --git a/static/img/2.png b/static/img/2.png
new file mode 100644
index 0000000..3197eb8
--- /dev/null
+++ b/static/img/2.png
Binary files differ
diff --git a/static/img/3.png b/static/img/3.png
new file mode 100644
index 0000000..eae2437
--- /dev/null
+++ b/static/img/3.png
Binary files differ
diff --git a/static/img/4.png b/static/img/4.png
new file mode 100644
index 0000000..5a8d054
--- /dev/null
+++ b/static/img/4.png
Binary files differ
diff --git a/static/img/back.png b/static/img/back.png
new file mode 100644
index 0000000..5850131
--- /dev/null
+++ b/static/img/back.png
Binary files differ
diff --git a/static/img/bg-qr-code.png b/static/img/bg-qr-code.png
new file mode 100644
index 0000000..0748e2a
--- /dev/null
+++ b/static/img/bg-qr-code.png
Binary files differ
diff --git a/static/img/bg.png b/static/img/bg.png
new file mode 100644
index 0000000..641f78f
--- /dev/null
+++ b/static/img/bg.png
Binary files differ
diff --git a/static/img/bg_code.png b/static/img/bg_code.png
new file mode 100644
index 0000000..7908d74
--- /dev/null
+++ b/static/img/bg_code.png
Binary files differ
diff --git a/static/img/bg_top.png b/static/img/bg_top.png
new file mode 100644
index 0000000..2fbcfe3
--- /dev/null
+++ b/static/img/bg_top.png
Binary files differ
diff --git a/static/img/cg.png b/static/img/cg.png
new file mode 100644
index 0000000..5708fba
--- /dev/null
+++ b/static/img/cg.png
Binary files differ
diff --git a/static/img/circle-bottom.png b/static/img/circle-bottom.png
new file mode 100644
index 0000000..83238d9
--- /dev/null
+++ b/static/img/circle-bottom.png
Binary files differ
diff --git a/static/img/circle-top.png b/static/img/circle-top.png
new file mode 100644
index 0000000..1ec6a83
--- /dev/null
+++ b/static/img/circle-top.png
Binary files differ
diff --git a/static/img/cs.png b/static/img/cs.png
new file mode 100644
index 0000000..0fa2c46
--- /dev/null
+++ b/static/img/cs.png
Binary files differ
diff --git a/static/img/ddxtlogo.png b/static/img/ddxtlogo.png
new file mode 100644
index 0000000..b40bdc9
--- /dev/null
+++ b/static/img/ddxtlogo.png
Binary files differ
diff --git a/static/img/hongbao.png b/static/img/hongbao.png
new file mode 100644
index 0000000..704fc7f
--- /dev/null
+++ b/static/img/hongbao.png
Binary files differ
diff --git a/static/img/hongbaoxiao.png b/static/img/hongbaoxiao.png
new file mode 100644
index 0000000..924e909
--- /dev/null
+++ b/static/img/hongbaoxiao.png
Binary files differ
diff --git a/static/img/img.png b/static/img/img.png
new file mode 100644
index 0000000..f846b8d
--- /dev/null
+++ b/static/img/img.png
Binary files differ
diff --git a/static/img/img_agree.png b/static/img/img_agree.png
new file mode 100644
index 0000000..3b2d47c
--- /dev/null
+++ b/static/img/img_agree.png
Binary files differ
diff --git a/static/img/img_auditing.png b/static/img/img_auditing.png
new file mode 100644
index 0000000..b08b4d9
--- /dev/null
+++ b/static/img/img_auditing.png
Binary files differ
diff --git a/static/img/img_frozen.png b/static/img/img_frozen.png
new file mode 100644
index 0000000..ccb6698
--- /dev/null
+++ b/static/img/img_frozen.png
Binary files differ
diff --git a/static/img/img_refuse.png b/static/img/img_refuse.png
new file mode 100644
index 0000000..19ea1ab
--- /dev/null
+++ b/static/img/img_refuse.png
Binary files differ
diff --git a/static/img/img_reupload.png b/static/img/img_reupload.png
new file mode 100644
index 0000000..151b888
--- /dev/null
+++ b/static/img/img_reupload.png
Binary files differ
diff --git a/static/img/ing.png b/static/img/ing.png
new file mode 100644
index 0000000..33696fc
--- /dev/null
+++ b/static/img/ing.png
Binary files differ
diff --git a/static/img/left.png b/static/img/left.png
new file mode 100644
index 0000000..f747d79
--- /dev/null
+++ b/static/img/left.png
Binary files differ
diff --git a/static/img/logo.png b/static/img/logo.png
new file mode 100644
index 0000000..dd926e3
--- /dev/null
+++ b/static/img/logo.png
Binary files differ
diff --git a/static/img/paying.png b/static/img/paying.png
new file mode 100644
index 0000000..7952f90
--- /dev/null
+++ b/static/img/paying.png
Binary files differ
diff --git a/static/img/post_agree.png b/static/img/post_agree.png
new file mode 100644
index 0000000..1a12902
--- /dev/null
+++ b/static/img/post_agree.png
Binary files differ
diff --git a/static/img/right.png b/static/img/right.png
new file mode 100644
index 0000000..6f060a4
--- /dev/null
+++ b/static/img/right.png
Binary files differ
diff --git a/static/img/share_pic.png b/static/img/share_pic.png
new file mode 100644
index 0000000..f44436a
--- /dev/null
+++ b/static/img/share_pic.png
Binary files differ
diff --git a/static/img/shsaom.png b/static/img/shsaom.png
new file mode 100644
index 0000000..f2e1a2e
--- /dev/null
+++ b/static/img/shsaom.png
Binary files differ
diff --git a/static/img/tonglian.png b/static/img/tonglian.png
new file mode 100644
index 0000000..719d922
--- /dev/null
+++ b/static/img/tonglian.png
Binary files differ
diff --git a/static/img/zxsyt.png b/static/img/zxsyt.png
new file mode 100644
index 0000000..c32a7ac
--- /dev/null
+++ b/static/img/zxsyt.png
Binary files differ
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..8c63047
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,15 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-30 09:19:08
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-30 09:47:47
+ * @Description:
+ */
+module.exports = {
+ configureWebpack: config => {
+ require('vux-loader').merge(config, {
+ options: {},
+ plugins: ['vux-ui']
+ })
+ }
+}
diff --git a/webpack.common.js b/webpack.common.js
new file mode 100644
index 0000000..386507b
--- /dev/null
+++ b/webpack.common.js
@@ -0,0 +1,133 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2021-01-07 10:34:13
+ * @Description:
+ */
+// webpack通用配置
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const VueLoaderPlugin = require('vue-loader/lib/plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const CopyPlugin = require('copy-webpack-plugin');
+const vuxLoader = require('vux-loader');
+let env = process.env.NODE_ENV;
+
+//打包地址
+let srcUrl = '/sib_wx_score/'
+module.exports = {
+ entry: {
+ index: "./src/index.js",
+ },
+ output: {
+ filename: 'js/[name].js',
+ path: path.resolve(__dirname, 'dist'),
+ publicPath: env ? '/sib_wx_score/' : '/' //根据线上项目路径更改 /projectpath
+ },
+ /**防止将某些 import 的包(package)打包到 bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖,
+ * 简而言之:就是使用cdn~不打包这些变量引用的文件,生成环境时需要在index.html中手动引入cdn
+ */
+ externals: {
+ vue: "Vue",
+ axios: "axios",
+ vuex: "Vuex",
+ router: "VueRouter",
+ },
+ resolve: {
+ extensions: ['.vue', '.js', '.less'],
+ alias: { //别名配置
+ "@": path.resolve(__dirname, 'src')
+ }
+ },
+ module: {
+ rules: [{
+ test: /\.(svg|ttf|eot|woff)\??.*$/,
+ loader: "url-loader?limit=10000"
+ },
+ {
+ test: /\.css$/,
+ use: [
+ env ? MiniCssExtractPlugin.loader : "vue-style-loader",
+ 'css-loader',
+ "postcss-loader",
+ ],
+ },
+ {
+ test: /\.less$/,
+ use: [
+ env ? MiniCssExtractPlugin.loader : "vue-style-loader",
+ 'css-loader',
+ "postcss-loader", //posscss-loader顺序一定要在less-loader前面~不然无法解析
+ 'less-loader',
+ // 全局注入less变量,在所有vue组件中可使用
+ // 不能写不接受变量的死类名在这些文件里,不然每个vue文件都会注入这些css类,打包后增加css体积!
+ {
+ loader: 'style-resources-loader',
+ options: {
+ patterns: [
+ path.resolve(__dirname, 'src/style/mixins.less'),
+ ]
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(png|svg|jpg|gif)/, //处理图片
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 100000,
+ outputPath: 'img/',
+ publicPath: `${srcUrl}img`
+ //publicPath: `/img`
+ }
+ }]
+ },
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader'
+ },
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ // @vue/babel-preset-jsx vue jsx语法支持
+ presets: ['@babel/preset-env', '@vue/babel-preset-jsx'],
+ plugins: ["dynamic-import-webpack"] //import 函数支持,需要安装
+ }
+ }
+ },
+ ]
+ },
+ plugins: [
+ // 静态目录
+ new CopyPlugin([{
+ from: path.resolve(__dirname, 'static'),
+ to: 'static',
+ }, ]),
+ new VueLoaderPlugin(),
+ new HtmlWebpackPlugin({
+ template: './public/index.html', //以这个文件作为模板
+ filename: 'index.html', //打包后的文件名
+ title: 'Vue_webpack',
+ hash: true,
+ minify: {
+ removeComments: true, //移除注释
+ collapseWhitespace: true,
+ removeEmptyAttributes: true, //移除空属性
+ removeAttributeQuotes: true //移除属性html标签属性的引号 ""
+ },
+ }),
+ ],
+}
+
+
+// module.exports = vuxLoader.merge(webpackConfig, {
+// plugins: [{
+// name: 'vux-ui'
+// }]
+// }
+// );
diff --git a/webpack.dev.js b/webpack.dev.js
new file mode 100644
index 0000000..75e817a
--- /dev/null
+++ b/webpack.dev.js
@@ -0,0 +1,63 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:18
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-11-20 17:19:45
+ * @Description:
+ */
+// webpack开发环境配置
+const webpack = require('webpack');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+ mode: 'development',
+ // 如果大型项目可以使用source-map,如果是中小型项目使用eval-source-map就可以了(方便debug)
+ devtool: 'source-map',
+ watch: true,
+ devServer: {
+ contentBase: './dist',
+ inline: true,
+ hot: true,
+ host: '127.0.0.1',
+ //服务端压缩是否开启
+ compress: true,
+ //配置服务端口号
+ port: 8011,
+ // 代理配置
+ proxy:{
+ "/sib": {
+ // target: 'http://192.168.1.46:8096',
+ target: 'https://t.finlean.com',
+ // target: 'https://pre.finlean.com',
+ // target: 'http://192.168.1.63:8096',
+ ws: true,
+ changeOrigin: true
+ },
+ "/image": {
+ // target: 'https://pre.finlean.com',
+ target: 'https://t.finlean.com',
+ ws: true,
+ changeOrigin: true
+ },
+ '/jttech': {
+ //target: 'https://pre.finlean.com',
+ target: 'https://t.finlean.com',
+ secure: false,
+ changeOrigin: true
+ }
+
+ }
+ },
+ plugins: [
+ new webpack.HotModuleReplacementPlugin(),
+ ],
+ watchOptions: {
+ //不监听的目录
+ ignored: /node_modules/,
+ //当第一个文件更改,会在重新构建前增加延迟。这个选项允许 webpack 将这段时间内进行的任何其他更改都聚合到一次重新构建里。
+ aggregateTimeout:800,
+ // 通过传递 true 开启 polling,或者指定毫秒为单位进行轮询。
+ // poll:1000,
+ }
+});
diff --git a/webpack.prod.js b/webpack.prod.js
new file mode 100644
index 0000000..cffc0e2
--- /dev/null
+++ b/webpack.prod.js
@@ -0,0 +1,38 @@
+// webpack生产环境配置
+process.env.NODE_ENV = 'production';
+const webpack = require('webpack');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+// 每次build之前删除dist文件夹
+const CleanWebpackPlugin = require('clean-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+// css压缩插件
+var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
+// js 压缩插件
+// const Uglify = require('uglifyjs-webpack-plugin');
+
+module.exports = merge(common, {
+ mode:"production",
+ plugins: [
+ // new Uglify(),
+ // 把vue组件的css文件提取出来
+ new MiniCssExtractPlugin({
+ filename: './css/[name].[hash].css'
+ }),
+ // css压缩(cssnano、OptimizeCssAssetsPlugin) 需要install
+ new OptimizeCssAssetsPlugin({
+ assetNameRegExp: /\.css$/g,
+ cssProcessor: require('cssnano'),
+ cssProcessorPluginOptions: {
+ preset: ['default', { discardComments: { removeAll: true } }],
+ },
+ canPrint: true
+ }),
+ // 指定环境
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify('production')
+ }),
+ // 清理/dist 文件夹
+ new CleanWebpackPlugin(['dist']),
+ ],
+});
\ No newline at end of file
--
Gitblit v1.8.0