Baozhangchao 3 anos atrás
pai
commit
36d24f8bd6

+ 9
- 1
babel.config.js Ver arquivo

@@ -1,5 +1,13 @@
1 1
 module.exports = {
2 2
   presets: [
3
-    '@vue/cli-plugin-babel/preset'
3
+    '@vue/cli-plugin-babel/preset',
4
+
5
+  ],
6
+  plugins: [
7
+    ['import', {
8
+      libraryName: 'vant',
9
+      libraryDirectory: 'es',
10
+      style: true
11
+    }, 'vant']
4 12
   ]
5 13
 }

+ 211
- 3
package-lock.json Ver arquivo

@@ -1673,6 +1673,8 @@
1673 1673
     },
1674 1674
     "@vue/cli-plugin-babel": {
1675 1675
       "version": "4.5.15",
1676
+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.15.tgz",
1677
+      "integrity": "sha512-hBLrwYfFkHldEe34op/YNgPhpOWI5n5DB2Qt9I/1Epeif4M4iFaayrgjvOR9AVM6WbD3Yx7WCFszYpWrQZpBzQ==",
1676 1678
       "dev": true,
1677 1679
       "requires": {
1678 1680
         "@babel/core": "^7.11.0",
@@ -1686,6 +1688,8 @@
1686 1688
     },
1687 1689
     "@vue/cli-plugin-eslint": {
1688 1690
       "version": "4.5.15",
1691
+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.15.tgz",
1692
+      "integrity": "sha512-/2Fl6wY/5bz3HD035oSnFRMsKNxDxU396KqBdpCQdwdvqk4mm6JAbXqihpcBRTNPeTO6w+LwGe6FE56PVbJdbg==",
1689 1693
       "dev": true,
1690 1694
       "requires": {
1691 1695
         "@vue/cli-shared-utils": "^4.5.15",
@@ -1713,6 +1717,8 @@
1713 1717
     },
1714 1718
     "@vue/cli-service": {
1715 1719
       "version": "4.5.15",
1720
+      "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.15.tgz",
1721
+      "integrity": "sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==",
1716 1722
       "dev": true,
1717 1723
       "requires": {
1718 1724
         "@intervolga/optimize-cssnano-plugin": "^1.0.5",
@@ -1764,6 +1770,7 @@
1764 1770
         "thread-loader": "^2.1.3",
1765 1771
         "url-loader": "^2.2.0",
1766 1772
         "vue-loader": "^15.9.2",
1773
+        "vue-loader-v16": "npm:vue-loader@^16.1.0",
1767 1774
         "vue-style-loader": "^4.1.2",
1768 1775
         "webpack": "^4.0.0",
1769 1776
         "webpack-bundle-analyzer": "^3.8.0",
@@ -2368,8 +2375,18 @@
2368 2375
       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
2369 2376
       "dev": true
2370 2377
     },
2378
+    "axios": {
2379
+      "version": "0.26.0",
2380
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
2381
+      "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
2382
+      "requires": {
2383
+        "follow-redirects": "^1.14.8"
2384
+      }
2385
+    },
2371 2386
     "babel-eslint": {
2372 2387
       "version": "10.1.0",
2388
+      "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz",
2389
+      "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
2373 2390
       "dev": true,
2374 2391
       "requires": {
2375 2392
         "@babel/code-frame": "^7.0.0",
@@ -2468,6 +2485,16 @@
2468 2485
         "object.assign": "^4.1.0"
2469 2486
       }
2470 2487
     },
2488
+    "babel-plugin-import": {
2489
+      "version": "1.13.3",
2490
+      "resolved": "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.3.tgz",
2491
+      "integrity": "sha512-1qCWdljJOrDRH/ybaCZuDgySii4yYrtQ8OJQwrcDqdt0y67N30ng3X3nABg6j7gR7qUJgcMa9OMhc4AGViDwWw==",
2492
+      "dev": true,
2493
+      "requires": {
2494
+        "@babel/helper-module-imports": "^7.0.0",
2495
+        "@babel/runtime": "^7.0.0"
2496
+      }
2497
+    },
2471 2498
     "babel-plugin-polyfill-corejs2": {
2472 2499
       "version": "0.3.1",
2473 2500
       "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
@@ -3610,6 +3637,15 @@
3610 3637
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
3611 3638
       "dev": true
3612 3639
     },
3640
+    "copy-anything": {
3641
+      "version": "2.0.6",
3642
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
3643
+      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
3644
+      "dev": true,
3645
+      "requires": {
3646
+        "is-what": "^3.14.1"
3647
+      }
3648
+    },
3613 3649
     "copy-concurrently": {
3614 3650
       "version": "1.0.5",
3615 3651
       "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
@@ -3684,6 +3720,11 @@
3684 3720
         }
3685 3721
       }
3686 3722
     },
3723
+    "core-js": {
3724
+      "version": "3.21.1",
3725
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
3726
+      "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig=="
3727
+    },
3687 3728
     "core-js-compat": {
3688 3729
       "version": "3.21.1",
3689 3730
       "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.21.1.tgz",
@@ -4690,6 +4731,8 @@
4690 4731
     },
4691 4732
     "eslint": {
4692 4733
       "version": "6.8.0",
4734
+      "resolved": "https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz",
4735
+      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
4693 4736
       "dev": true,
4694 4737
       "requires": {
4695 4738
         "@babel/code-frame": "^7.0.0",
@@ -4789,6 +4832,8 @@
4789 4832
     },
4790 4833
     "eslint-plugin-vue": {
4791 4834
       "version": "6.2.2",
4835
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz",
4836
+      "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==",
4792 4837
       "dev": true,
4793 4838
       "requires": {
4794 4839
         "natural-compare": "^1.4.0",
@@ -5392,8 +5437,7 @@
5392 5437
     "follow-redirects": {
5393 5438
       "version": "1.14.8",
5394 5439
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.8.tgz",
5395
-      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
5396
-      "dev": true
5440
+      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA=="
5397 5441
     },
5398 5442
     "for-in": {
5399 5443
       "version": "1.0.2",
@@ -6115,6 +6159,13 @@
6115 6159
       "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
6116 6160
       "dev": true
6117 6161
     },
6162
+    "image-size": {
6163
+      "version": "0.5.5",
6164
+      "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz",
6165
+      "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
6166
+      "dev": true,
6167
+      "optional": true
6168
+    },
6118 6169
     "import-cwd": {
6119 6170
       "version": "2.1.0",
6120 6171
       "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -6621,6 +6672,12 @@
6621 6672
         "call-bind": "^1.0.2"
6622 6673
       }
6623 6674
     },
6675
+    "is-what": {
6676
+      "version": "3.14.1",
6677
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
6678
+      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
6679
+      "dev": true
6680
+    },
6624 6681
     "is-windows": {
6625 6682
       "version": "1.0.2",
6626 6683
       "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz",
@@ -6817,6 +6874,76 @@
6817 6874
         "launch-editor": "^2.3.0"
6818 6875
       }
6819 6876
     },
6877
+    "less": {
6878
+      "version": "4.1.2",
6879
+      "resolved": "https://registry.npmmirror.com/less/-/less-4.1.2.tgz",
6880
+      "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==",
6881
+      "dev": true,
6882
+      "requires": {
6883
+        "copy-anything": "^2.0.1",
6884
+        "errno": "^0.1.1",
6885
+        "graceful-fs": "^4.1.2",
6886
+        "image-size": "~0.5.0",
6887
+        "make-dir": "^2.1.0",
6888
+        "mime": "^1.4.1",
6889
+        "needle": "^2.5.2",
6890
+        "parse-node-version": "^1.0.1",
6891
+        "source-map": "~0.6.0",
6892
+        "tslib": "^2.3.0"
6893
+      },
6894
+      "dependencies": {
6895
+        "make-dir": {
6896
+          "version": "2.1.0",
6897
+          "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz",
6898
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
6899
+          "dev": true,
6900
+          "optional": true,
6901
+          "requires": {
6902
+            "pify": "^4.0.1",
6903
+            "semver": "^5.6.0"
6904
+          }
6905
+        },
6906
+        "mime": {
6907
+          "version": "1.6.0",
6908
+          "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
6909
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
6910
+          "dev": true,
6911
+          "optional": true
6912
+        },
6913
+        "semver": {
6914
+          "version": "5.7.1",
6915
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz",
6916
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
6917
+          "dev": true,
6918
+          "optional": true
6919
+        },
6920
+        "tslib": {
6921
+          "version": "2.3.1",
6922
+          "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz",
6923
+          "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
6924
+          "dev": true
6925
+        }
6926
+      }
6927
+    },
6928
+    "less-loader": {
6929
+      "version": "5.0.0",
6930
+      "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-5.0.0.tgz",
6931
+      "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==",
6932
+      "dev": true,
6933
+      "requires": {
6934
+        "clone": "^2.1.1",
6935
+        "loader-utils": "^1.1.0",
6936
+        "pify": "^4.0.1"
6937
+      },
6938
+      "dependencies": {
6939
+        "clone": {
6940
+          "version": "2.1.2",
6941
+          "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz",
6942
+          "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
6943
+          "dev": true
6944
+        }
6945
+      }
6946
+    },
6820 6947
     "levn": {
6821 6948
       "version": "0.3.0",
6822 6949
       "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz",
@@ -7353,6 +7480,30 @@
7353 7480
       "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
7354 7481
       "dev": true
7355 7482
     },
7483
+    "needle": {
7484
+      "version": "2.9.1",
7485
+      "resolved": "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz",
7486
+      "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
7487
+      "dev": true,
7488
+      "optional": true,
7489
+      "requires": {
7490
+        "debug": "^3.2.6",
7491
+        "iconv-lite": "^0.4.4",
7492
+        "sax": "^1.2.4"
7493
+      },
7494
+      "dependencies": {
7495
+        "debug": {
7496
+          "version": "3.2.7",
7497
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
7498
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
7499
+          "dev": true,
7500
+          "optional": true,
7501
+          "requires": {
7502
+            "ms": "^2.1.1"
7503
+          }
7504
+        }
7505
+      }
7506
+    },
7356 7507
     "negotiator": {
7357 7508
       "version": "0.6.3",
7358 7509
       "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
@@ -7893,6 +8044,12 @@
7893 8044
         "json-parse-better-errors": "^1.0.1"
7894 8045
       }
7895 8046
     },
8047
+    "parse-node-version": {
8048
+      "version": "1.0.1",
8049
+      "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz",
8050
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
8051
+      "dev": true
8052
+    },
7896 8053
     "parse5": {
7897 8054
       "version": "5.1.1",
7898 8055
       "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz",
@@ -10862,7 +11019,9 @@
10862 11019
       "dev": true
10863 11020
     },
10864 11021
     "vue": {
10865
-      "version": "2.6.14"
11022
+      "version": "2.6.14",
11023
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz",
11024
+      "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
10866 11025
     },
10867 11026
     "vue-eslint-parser": {
10868 11027
       "version": "7.11.0",
@@ -10911,6 +11070,48 @@
10911 11070
         }
10912 11071
       }
10913 11072
     },
11073
+    "vue-loader-v16": {
11074
+      "version": "npm:vue-loader@16.8.3",
11075
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
11076
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
11077
+      "dev": true,
11078
+      "optional": true,
11079
+      "requires": {
11080
+        "chalk": "^4.1.0",
11081
+        "hash-sum": "^2.0.0",
11082
+        "loader-utils": "^2.0.0"
11083
+      },
11084
+      "dependencies": {
11085
+        "chalk": {
11086
+          "version": "4.1.2",
11087
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
11088
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
11089
+          "dev": true,
11090
+          "optional": true,
11091
+          "requires": {
11092
+            "ansi-styles": "^4.1.0",
11093
+            "supports-color": "^7.1.0"
11094
+          }
11095
+        },
11096
+        "loader-utils": {
11097
+          "version": "2.0.2",
11098
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
11099
+          "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
11100
+          "dev": true,
11101
+          "optional": true,
11102
+          "requires": {
11103
+            "big.js": "^5.2.2",
11104
+            "emojis-list": "^3.0.0",
11105
+            "json5": "^2.1.2"
11106
+          }
11107
+        }
11108
+      }
11109
+    },
11110
+    "vue-router": {
11111
+      "version": "3.5.3",
11112
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz",
11113
+      "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg=="
11114
+    },
10914 11115
     "vue-style-loader": {
10915 11116
       "version": "4.1.3",
10916 11117
       "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@@ -10931,6 +11132,8 @@
10931 11132
     },
10932 11133
     "vue-template-compiler": {
10933 11134
       "version": "2.6.14",
11135
+      "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
11136
+      "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
10934 11137
       "dev": true,
10935 11138
       "requires": {
10936 11139
         "de-indent": "^1.0.2",
@@ -10943,6 +11146,11 @@
10943 11146
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
10944 11147
       "dev": true
10945 11148
     },
11149
+    "vuex": {
11150
+      "version": "3.6.2",
11151
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",
11152
+      "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw=="
11153
+    },
10946 11154
     "watchpack": {
10947 11155
       "version": "1.7.5",
10948 11156
       "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz",

+ 7
- 1
package.json Ver arquivo

@@ -8,17 +8,23 @@
8 8
     "lint": "vue-cli-service lint"
9 9
   },
10 10
   "dependencies": {
11
+    "axios": "^0.26.0",
11 12
     "core-js": "^3.6.5",
12 13
     "vant": "^2.12.44",
13
-    "vue": "^2.6.11"
14
+    "vue": "^2.6.11",
15
+    "vue-router": "^3.5.3",
16
+    "vuex": "^3.6.2"
14 17
   },
15 18
   "devDependencies": {
16 19
     "@vue/cli-plugin-babel": "~4.5.0",
17 20
     "@vue/cli-plugin-eslint": "~4.5.0",
18 21
     "@vue/cli-service": "~4.5.0",
19 22
     "babel-eslint": "^10.1.0",
23
+    "babel-plugin-import": "^1.13.3",
20 24
     "eslint": "^6.7.2",
21 25
     "eslint-plugin-vue": "^6.2.2",
26
+    "less": "^4.1.2",
27
+    "less-loader": "^5.0.0",
22 28
     "vue-template-compiler": "^2.6.11"
23 29
   },
24 30
   "eslintConfig": {

+ 8
- 9
src/App.vue Ver arquivo

@@ -1,27 +1,26 @@
1 1
 <template>
2 2
   <div id="app">
3
-    <index msg="Welcome to Your Vue.js App" />
3
+    <router-view />
4
+    <Tabber />
4 5
   </div>
5 6
 </template>
6 7
 
7 8
 <script>
8
-import index from './components/index.vue'
9
+import Tabber from './components/Tabber.vue'
9 10
 
10 11
 export default {
11 12
   name: 'App',
12 13
   components: {
13
-    index
14
+    Tabber
14 15
   }
15 16
 }
16 17
 </script>
17 18
 
18 19
 <style>
20
+html,
21
+body,
19 22
 #app {
20
-  font-family: Avenir, Helvetica, Arial, sans-serif;
21
-  -webkit-font-smoothing: antialiased;
22
-  -moz-osx-font-smoothing: grayscale;
23
-  text-align: center;
24
-  color: #2c3e50;
25
-  margin-top: 60px;
23
+  margin: 0;
24
+  height: 100%;
26 25
 }
27 26
 </style>

BIN
src/assets/userImag/user.png Ver arquivo


+ 10
- 0
src/components/Course.vue Ver arquivo

@@ -0,0 +1,10 @@
1
+<template>
2
+  <h1>Course 课程管理</h1>
3
+</template>
4
+
5
+<script>
6
+export default {}
7
+</script>
8
+
9
+<style lang="less" scoped>
10
+</style>

+ 10
- 0
src/components/StrongPhoto.vue Ver arquivo

@@ -0,0 +1,10 @@
1
+<template>
2
+  <h1>StrongPhoto 精彩瞬间</h1>
3
+</template>
4
+
5
+<script>
6
+export default {}
7
+</script>
8
+
9
+<style lang="less" scoped>
10
+</style>

+ 72
- 0
src/components/Tabber.vue Ver arquivo

@@ -0,0 +1,72 @@
1
+<template>
2
+  <div class="tabbar">
3
+    <van-tabbar class="van-tabbar" v-model="active" @change="onChange">
4
+      <van-tabbar-item icon="column">课程管理</van-tabbar-item>
5
+      <van-tabbar-item icon="photo">精彩瞬间</van-tabbar-item>
6
+      <van-tabbar-item icon="manager">个人中心</van-tabbar-item>
7
+    </van-tabbar>
8
+  </div>
9
+</template>
10
+
11
+<script>
12
+export default {
13
+  name: 'Tabber',
14
+  props: {
15
+    // active: Number
16
+  },
17
+  data() {
18
+    return {
19
+      // tabbarTempValue: this.active,
20
+      active: 0
21
+    }
22
+  },
23
+  created() {
24
+    //由于 vant 标签栏路由模式,无法自动加载页面,所以这里需要初始化
25
+    console.log(this.$route) //打印当前路由属性
26
+    switch (this.$route.name) {
27
+      case 'Course':
28
+        this.active = 0
29
+        break
30
+      case 'StrongPhoto':
31
+        this.active = 1
32
+        break
33
+      case 'UserCenter':
34
+        this.active = 2
35
+        break
36
+      default:
37
+        break
38
+    }
39
+  },
40
+  methods: {
41
+    onChange(index) {
42
+      console.log(index)
43
+      switch (index) {
44
+        case 0:
45
+          this.$router.push('/')
46
+
47
+          break
48
+        case 1:
49
+          this.$router.push('/StrongPhoto')
50
+
51
+          break
52
+        case 2:
53
+          this.$router.push('/UserCenter')
54
+
55
+          break
56
+        default:
57
+          break
58
+      }
59
+      // const routerArray = ['/Course', '/StrongPhoto', '/UserCenter']
60
+      // this.$router.push(routerArray[index])
61
+    }
62
+  }
63
+}
64
+</script>
65
+
66
+<style lang="less" scoped>
67
+.tabbar {
68
+  .van-tabbar {
69
+    padding-bottom: 2em;
70
+  }
71
+}
72
+</style>

+ 146
- 0
src/components/UserCenter.vue Ver arquivo

@@ -0,0 +1,146 @@
1
+<template>
2
+  <div class="User-box">
3
+    <!-- <h1>UserCenter 个人中心</h1> -->
4
+    <div class="user-info">
5
+      <img src="../assets/userImag/user.png" />
6
+      <div class="info-name">
7
+        <div>
8
+          <span>旺旺旺</span>
9
+        </div>
10
+        <div>
11
+          <span>18888888888</span>
12
+        </div>
13
+      </div>
14
+    </div>
15
+
16
+    <div class="button-box">
17
+      <van-cell-group>
18
+        <van-cell class="user-button" title="注册" @click="handLogin()" />
19
+      </van-cell-group>
20
+      <!-- <button type="primary" @click="handLogin()">微信授权登录</button> -->
21
+      <!-- <van-button class="user-button" type="info" @click="handLogin()">注册</van-button> -->
22
+    </div>
23
+  </div>
24
+</template>
25
+
26
+<script>
27
+export default {
28
+  data() {
29
+    return {
30
+      code: '' // 前端获取 code 传给后端调用相应接口
31
+    }
32
+  },
33
+  created() {
34
+    // 从 window.location.href 中截取 code 并且赋值
35
+    if (window.location.href.indexOf('CSDN_state') !== -1) {
36
+      // 此方法仅供参考!!!
37
+      this.code = window.location.href.split('?')[1].split('=')[1].split('&')[0]
38
+      this.$store.commit('SET_USER_INFO', { code: this.code })
39
+    }
40
+
41
+    if (this.$store.state.user.code) {
42
+      // 存在 code 直接调用接口
43
+      this.handGetUserInfo(this.code)
44
+    }
45
+  },
46
+  methods: {
47
+    handLogin() {
48
+      this.$store.commit('SET_USER_INFO', { code: this.code })
49
+
50
+      // 重定向地址重定到当前页面,在路径获取 code
51
+      if (process.env.NODE_ENV === 'development') {
52
+        console.log(222)
53
+        return
54
+      }
55
+      /**
56
+       * 获取 code
57
+       * @returns
58
+       */
59
+      // function getCode() {
60
+      //   const matched = /[?&]*code=([^&]+)/.exec(location.search)
61
+      //   if (matched) {
62
+      //     return decodeURIComponent(matched[1])
63
+      //   }
64
+      // }
65
+
66
+      const hrefUrl = window.location.href
67
+
68
+      // const originCode = localStorage.getItem('wxcode')
69
+      // const queryCode = getCode()
70
+      // localStorage.setItem('wxcode', queryCode)
71
+      // const local = encodeURIComponent(location.origin + location.pathname)
72
+
73
+      if (this.code === '') {
74
+        window.location.href = `
75
+						https://open.weixin.qq.com/connect/oauth2/authorize
76
+						?appid=${this.$store.state.user.appid}
77
+						&redirect_uri=${encodeURIComponent(hrefUrl)}
78
+						&response_type=code
79
+						&scope=snsapi_userinfo
80
+						&state=Code_state#wechat_redirect
81
+					`
82
+      }
83
+    },
84
+    handGetUserInfo(code) {
85
+      console.log(
86
+        '🚀 ~ file: UserCenter.vue ~ line 44 ~ handGetUserInfo ~ code',
87
+        code
88
+      )
89
+      // 调用后端接口,参数为 code 剩下工作量交给后端即可
90
+      // wxLogin({
91
+      //   data: {
92
+      //     code: code
93
+      //   },
94
+      //   method: 'GET'
95
+      // }).then((res) => {
96
+      //   console.log(
97
+      //     '🚀 ~ file: UserCenter.vue ~ line 47 ~ handGetUserInfo ~ res',
98
+      //     res
99
+      //   )
100
+      //   // res => 登陆成功!
101
+      // })
102
+    }
103
+  }
104
+}
105
+</script>
106
+
107
+<style lang="less" scoped>
108
+.User-box {
109
+  width: 100%;
110
+  height: 100%;
111
+  .user-info {
112
+    display: flex;
113
+    height: 20%;
114
+    padding-left: 24px;
115
+    > img {
116
+      width: 70px;
117
+      height: 70px;
118
+      border-radius: 50%;
119
+      position: relative;
120
+      top: 5vh;
121
+    }
122
+    .info-name {
123
+      position: relative;
124
+      font-size: 17px;
125
+      height: 20%;
126
+      font-weight: 700;
127
+      top: 5vh;
128
+      left: 6vw;
129
+      > div {
130
+        margin-top: 10px;
131
+      }
132
+    }
133
+  }
134
+  .button-box {
135
+    width: 97%;
136
+    margin: 0 auto;
137
+    // box-shadow: 0px 8px 38px 0px rgba(0, 0, 0, 0.12);
138
+    .user-button {
139
+      height: 50px;
140
+      line-height: 30px;
141
+
142
+      // box-shadow: 0px 8px 38px 0px rgba(0, 0, 0, 0.12);
143
+    }
144
+  }
145
+}
146
+</style>

+ 0
- 16
src/components/index.vue Ver arquivo

@@ -1,16 +0,0 @@
1
-<template>
2
-  <h1>asdasdas</h1>
3
-</template>
4
-
5
-<script>
6
-export default {}
7
-</script>
8
-
9
-<style>
10
-html,
11
-body,
12
-#app {
13
-  margin: 0;
14
-  height: 100%;
15
-}
16
-</style>

+ 21
- 0
src/main.js Ver arquivo

@@ -1,8 +1,29 @@
1 1
 import Vue from 'vue'
2 2
 import App from './App.vue'
3
+import { Tabbar, TabbarItem, Button } from 'vant';
4
+import router from './router/index'//路由
5
+import store from './store';//状态管理
6
+import { Icon } from 'vant';
7
+import { Notify } from 'vant';
8
+
9
+import { Cell, CellGroup } from 'vant';
10
+
11
+Vue.use(Cell);
12
+Vue.use(CellGroup);
13
+Vue.use(Notify);
14
+Vue.use(Tabbar).use(TabbarItem);
15
+Vue.use(Button);
16
+Vue.use(Icon);
17
+
18
+
19
+// Vue.use(Tabbar);
20
+// Vue.use(TabbarItem);
21
+
3 22
 
4 23
 Vue.config.productionTip = false
5 24
 
6 25
 new Vue({
26
+  router,
27
+  store,
7 28
   render: h => h(App),
8 29
 }).$mount('#app')

+ 58
- 0
src/router/index.js Ver arquivo

@@ -0,0 +1,58 @@
1
+
2
+
3
+import Vue from 'vue'
4
+import Router from 'vue-router'
5
+import Course from '../components/Course.vue'//课程
6
+import StrongPhoto from '../components/StrongPhoto.vue'
7
+import UserCenter from '../components/UserCenter.vue'
8
+
9
+// // import Login from '../Login.vue'
10
+
11
+
12
+Vue.use(Router)
13
+
14
+
15
+
16
+export default new Router({
17
+
18
+  mode: "history",
19
+
20
+
21
+  routes: [
22
+    //课程管理
23
+    {
24
+      path: '/',
25
+      name: 'Course',
26
+      component: Course,
27
+      meta: {
28
+        requireAuth: true //是否登陆
29
+      }
30
+
31
+
32
+    },
33
+    //精彩瞬间
34
+    {
35
+      path: '/StrongPhoto',
36
+      name: 'StrongPhoto',
37
+      component: StrongPhoto,
38
+      meta: {
39
+        requireAuth: true //是否登陆
40
+      }
41
+
42
+    },
43
+    //个人中心
44
+    {
45
+      path: '/UserCenter',
46
+      name: 'UserCenter',
47
+      component: UserCenter,
48
+      meta: {
49
+        requireAuth: false //是否登陆
50
+      }
51
+    }
52
+
53
+
54
+
55
+
56
+  ]
57
+})
58
+

+ 58
- 0
src/store/index.js Ver arquivo

@@ -0,0 +1,58 @@
1
+import Vue from 'vue'
2
+import Vuex from 'vuex'
3
+// import user from './modules/user.js'
4
+
5
+
6
+Vue.use(Vuex)
7
+
8
+const store = new Vuex.Store({
9
+
10
+  // state 中存放的就是全局共享的数据
11
+  state: {
12
+    user: {
13
+
14
+      appid: 'wxd3bab568bc42d1de',
15
+
16
+      code: '',
17
+
18
+    }
19
+  },
20
+  // Mutation 用户变更Store数据
21
+  mutations: {
22
+    SET_USER_INFO (state, value) {
23
+      state.user = {
24
+        ...state.user,
25
+        ...value
26
+      }
27
+
28
+      console.log('SET_USER_INFO被修改为:', state.user);
29
+
30
+
31
+    },
32
+
33
+  },
34
+  //Getter用于对Store中的数据进行加工处理,形成新的数据
35
+  getters: {
36
+    completedUserInfo (state) {
37
+      return state.user
38
+    }
39
+
40
+
41
+  },
42
+  //Action 是专门用于处理异步任务的
43
+  actions: {
44
+    getUserInfo ({ dispatch, commit }, value) {
45
+      console.log('actions---vaule', value);
46
+      //处理异步还得调用mutations里面的方法修改数据 mutations 不能处理异步
47
+      commit('SET_USER_INFO', value)
48
+      dispatch('SET_USER_INFO', value)
49
+    }
50
+  }
51
+
52
+
53
+});
54
+
55
+export default store;
56
+
57
+
58
+

+ 35
- 0
src/store/modules/user.js Ver arquivo

@@ -0,0 +1,35 @@
1
+
2
+// const state = {
3
+//   user: {
4
+//     appid: '1234',
5
+//     personId: '',
6
+//     phone: ''
7
+//   }
8
+// };
9
+
10
+// const mutations = {
11
+//   SET_USER_INFO (state, value) {
12
+//     state.userInfo = value;
13
+//   }
14
+// }
15
+
16
+// const getters = {
17
+//   conpletedUserInfo (state) {
18
+//     return state.userInfo;
19
+//   }
20
+// }
21
+
22
+// const actions = {
23
+//   getUserInfo ({ commit }, value) {
24
+//     commit('SET_USER_INFO', value)
25
+//   }
26
+// };
27
+// export default {
28
+//   state,
29
+//   mutations,
30
+//   getters,
31
+//   actions
32
+// }
33
+
34
+
35
+

+ 72
- 0
src/util/request.js Ver arquivo

@@ -0,0 +1,72 @@
1
+
2
+
3
+
4
+import axios from 'axios'
5
+
6
+import { Message } from 'element-ui'
7
+// import md5 from 'js-md5'
8
+import store from '../store'
9
+// import routerfrom from '../router'
10
+
11
+
12
+
13
+
14
+export default function (url, params, methodType = 'GET') {
15
+  return new Promise((resolve, reject) => {
16
+    const { personId, phone, appid, totalScore } = store.state.user
17
+    // const timestamp = new Date().valueOf()
18
+    // const sign = md5(appid + personId + phone + timestamp)
19
+
20
+    // let header = {
21
+    //   'x-appid': appid,
22
+    //   'x-personid': personId,
23
+    //   'x-timestamp': timestamp,
24
+    //   'x-sign': sign,
25
+    //   'totalScore': totalScore
26
+    // }
27
+
28
+
29
+    axios.request({
30
+      url: url,
31
+      method: methodType,
32
+      data: params,
33
+      // headers: header,
34
+      timeout: 1000 * 60,
35
+    }).then(res => {
36
+      const { code, message, data, token } = res.data
37
+
38
+      if (code === 1000) {
39
+        resolve(data)
40
+      } else {
41
+        Message.error(message)
42
+
43
+        if (code === 1001) {
44
+          // Message.error('请重新登陆')
45
+
46
+          // routerfrom.push('../Login.vue')
47
+
48
+          // this.$router.replace('../Login.vue') //replace  不记录页面 ,无法返回
49
+        }
50
+      }
51
+
52
+
53
+
54
+    }).catch(err => {
55
+      const message = err.message || err.errMsg || err
56
+      console.error("🚀 错误~ err", err)
57
+      Message.error('请求错误', err)
58
+
59
+
60
+
61
+
62
+
63
+      if (err.message.includes('timeout')) {
64
+        // 请求超时
65
+        Message.error('请求超时')
66
+      }
67
+      reject(message)
68
+    }).finally(() => {
69
+      // 请求结束
70
+    })
71
+  })
72
+}

+ 144
- 7
yarn.lock Ver arquivo

@@ -892,7 +892,7 @@
892 892
     "@babel/types" "^7.4.4"
893 893
     esutils "^2.0.2"
894 894
 
895
-"@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
895
+"@babel/runtime@7.x", "@babel/runtime@^7.0.0", "@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
896 896
   version "7.17.2"
897 897
   resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941"
898 898
   integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==
@@ -1004,6 +1004,11 @@
1004 1004
   resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
1005 1005
   integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
1006 1006
 
1007
+"@popperjs/core@^2.9.2":
1008
+  version "2.11.2"
1009
+  resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
1010
+  integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
1011
+
1007 1012
 "@soda/friendly-errors-webpack-plugin@^1.7.1":
1008 1013
   version "1.8.1"
1009 1014
   resolved "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz#4d4fbb1108993aaa362116247c3d18188a2c6c85"
@@ -1178,7 +1183,19 @@
1178 1183
     anymatch "^3.0.0"
1179 1184
     source-map "^0.6.0"
1180 1185
 
1181
-"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
1186
+"@vant/icons@^1.7.1":
1187
+  version "1.7.3"
1188
+  resolved "https://registry.npmmirror.com/@vant/icons/-/icons-1.7.3.tgz#e51b46065cfde445617401ebe309a33b62a29725"
1189
+  integrity sha512-tW4EqzxN4kXw1rnlnQJQHofEifPbt/gECOWiibomht8QLyvoGuE4iUmDFS288dJ07ZjuTy0bhdABj0SENo2fmQ==
1190
+
1191
+"@vant/popperjs@^1.1.0":
1192
+  version "1.1.0"
1193
+  resolved "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.1.0.tgz#b4edee5bbfa6fb18705986e313d4fd5f17942a0f"
1194
+  integrity sha512-8MD1gz146awV/uPxYjz4pet22f7a9YVKqk7T+gFkWFwT9mEcrIUEg/xPrdOnWKLP9puXyYtm7oVfSDSefZ/p/w==
1195
+  dependencies:
1196
+    "@popperjs/core" "^2.9.2"
1197
+
1198
+"@vue/babel-helper-vue-jsx-merge-props@^1.0.0", "@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
1182 1199
   version "1.2.1"
1183 1200
   resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
1184 1201
   integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==
@@ -1439,6 +1456,11 @@
1439 1456
   optionalDependencies:
1440 1457
     prettier "^1.18.2 || ^2.0.0"
1441 1458
 
1459
+"@vue/devtools-api@^6.0.0-beta.11":
1460
+  version "6.0.12"
1461
+  resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.12.tgz#7b57cce215ae9f37a86984633b3aa3d595aa5b46"
1462
+  integrity sha512-iO/4FIezHKXhiDBdKySCvJVh8/mZPxHpiQrTy+PXVqJZgpTPTdHy4q8GXulaY+UKEagdkBb0onxNQZ0LNiqVhw==
1463
+
1442 1464
 "@vue/preload-webpack-plugin@^1.1.0":
1443 1465
   version "1.1.2"
1444 1466
   resolved "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab"
@@ -1878,6 +1900,13 @@ aws4@^1.8.0:
1878 1900
   resolved "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
1879 1901
   integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
1880 1902
 
1903
+axios@^0.26.0:
1904
+  version "0.26.0"
1905
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.0.tgz#9a318f1c69ec108f8cd5f3c3d390366635e13928"
1906
+  integrity sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==
1907
+  dependencies:
1908
+    follow-redirects "^1.14.8"
1909
+
1881 1910
 babel-eslint@^10.1.0:
1882 1911
   version "10.1.0"
1883 1912
   resolved "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
@@ -1907,6 +1936,14 @@ babel-plugin-dynamic-import-node@^2.3.3:
1907 1936
   dependencies:
1908 1937
     object.assign "^4.1.0"
1909 1938
 
1939
+babel-plugin-import@^1.13.3:
1940
+  version "1.13.3"
1941
+  resolved "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.3.tgz#9dbbba7d1ac72bd412917a830d445e00941d26d7"
1942
+  integrity sha512-1qCWdljJOrDRH/ybaCZuDgySii4yYrtQ8OJQwrcDqdt0y67N30ng3X3nABg6j7gR7qUJgcMa9OMhc4AGViDwWw==
1943
+  dependencies:
1944
+    "@babel/helper-module-imports" "^7.0.0"
1945
+    "@babel/runtime" "^7.0.0"
1946
+
1910 1947
 babel-plugin-polyfill-corejs2@^0.3.0:
1911 1948
   version "0.3.1"
1912 1949
   resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
@@ -2522,6 +2559,11 @@ clone@^1.0.2:
2522 2559
   resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
2523 2560
   integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
2524 2561
 
2562
+clone@^2.1.1:
2563
+  version "2.1.2"
2564
+  resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
2565
+  integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
2566
+
2525 2567
 coa@^2.0.2:
2526 2568
   version "2.0.2"
2527 2569
   resolved "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
@@ -2697,6 +2739,13 @@ cookie@0.4.2:
2697 2739
   resolved "https://registry.npmmirror.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
2698 2740
   integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
2699 2741
 
2742
+copy-anything@^2.0.1:
2743
+  version "2.0.6"
2744
+  resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
2745
+  integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
2746
+  dependencies:
2747
+    is-what "^3.14.1"
2748
+
2700 2749
 copy-concurrently@^1.0.0:
2701 2750
   version "1.0.5"
2702 2751
   resolved "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -3393,7 +3442,7 @@ entities@^2.0.0:
3393 3442
   resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
3394 3443
   integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
3395 3444
 
3396
-errno@^0.1.3, errno@~0.1.7:
3445
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
3397 3446
   version "0.1.8"
3398 3447
   resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
3399 3448
   integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
@@ -3955,6 +4004,11 @@ follow-redirects@^1.0.0:
3955 4004
   resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
3956 4005
   integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
3957 4006
 
4007
+follow-redirects@^1.14.8:
4008
+  version "1.14.9"
4009
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
4010
+  integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
4011
+
3958 4012
 for-in@^1.0.2:
3959 4013
   version "1.0.2"
3960 4014
   resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -4493,7 +4547,7 @@ human-signals@^1.1.1:
4493 4547
   resolved "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
4494 4548
   integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
4495 4549
 
4496
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
4550
+iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
4497 4551
   version "0.4.24"
4498 4552
   resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
4499 4553
   integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4527,6 +4581,11 @@ ignore@^4.0.3, ignore@^4.0.6:
4527 4581
   resolved "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
4528 4582
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
4529 4583
 
4584
+image-size@~0.5.0:
4585
+  version "0.5.5"
4586
+  resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
4587
+  integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
4588
+
4530 4589
 import-cwd@^2.0.0:
4531 4590
   version "2.1.0"
4532 4591
   resolved "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -4970,6 +5029,11 @@ is-weakref@^1.0.1:
4970 5029
   dependencies:
4971 5030
     call-bind "^1.0.2"
4972 5031
 
5032
+is-what@^3.14.1:
5033
+  version "3.14.1"
5034
+  resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
5035
+  integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
5036
+
4973 5037
 is-windows@^1.0.2:
4974 5038
   version "1.0.2"
4975 5039
   resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@@ -5174,6 +5238,32 @@ launch-editor@^2.2.1, launch-editor@^2.3.0:
5174 5238
     picocolors "^1.0.0"
5175 5239
     shell-quote "^1.6.1"
5176 5240
 
5241
+less-loader@^5.0.0:
5242
+  version "5.0.0"
5243
+  resolved "https://registry.npmmirror.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466"
5244
+  integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==
5245
+  dependencies:
5246
+    clone "^2.1.1"
5247
+    loader-utils "^1.1.0"
5248
+    pify "^4.0.1"
5249
+
5250
+less@^4.1.2:
5251
+  version "4.1.2"
5252
+  resolved "https://registry.npmmirror.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0"
5253
+  integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==
5254
+  dependencies:
5255
+    copy-anything "^2.0.1"
5256
+    parse-node-version "^1.0.1"
5257
+    tslib "^2.3.0"
5258
+  optionalDependencies:
5259
+    errno "^0.1.1"
5260
+    graceful-fs "^4.1.2"
5261
+    image-size "~0.5.0"
5262
+    make-dir "^2.1.0"
5263
+    mime "^1.4.1"
5264
+    needle "^2.5.2"
5265
+    source-map "~0.6.0"
5266
+
5177 5267
 levn@^0.3.0, levn@~0.3.0:
5178 5268
   version "0.3.0"
5179 5269
   resolved "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -5315,7 +5405,7 @@ lru-cache@^5.1.1:
5315 5405
   dependencies:
5316 5406
     yallist "^3.0.2"
5317 5407
 
5318
-make-dir@^2.0.0:
5408
+make-dir@^2.0.0, make-dir@^2.1.0:
5319 5409
   version "2.1.0"
5320 5410
   resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
5321 5411
   integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
@@ -5456,7 +5546,7 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24,
5456 5546
   dependencies:
5457 5547
     mime-db "1.51.0"
5458 5548
 
5459
-mime@1.6.0:
5549
+mime@1.6.0, mime@^1.4.1:
5460 5550
   version "1.6.0"
5461 5551
   resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
5462 5552
   integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@@ -5627,6 +5717,15 @@ natural-compare@^1.4.0:
5627 5717
   resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
5628 5718
   integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
5629 5719
 
5720
+needle@^2.5.2:
5721
+  version "2.9.1"
5722
+  resolved "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
5723
+  integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
5724
+  dependencies:
5725
+    debug "^3.2.6"
5726
+    iconv-lite "^0.4.4"
5727
+    sax "^1.2.4"
5728
+
5630 5729
 negotiator@0.6.3:
5631 5730
   version "0.6.3"
5632 5731
   resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
@@ -6064,6 +6163,11 @@ parse-json@^5.0.0:
6064 6163
     json-parse-even-better-errors "^2.3.0"
6065 6164
     lines-and-columns "^1.1.6"
6066 6165
 
6166
+parse-node-version@^1.0.1:
6167
+  version "1.0.1"
6168
+  resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
6169
+  integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
6170
+
6067 6171
 parse5-htmlparser2-tree-adapter@^6.0.0:
6068 6172
   version "6.0.1"
6069 6173
   resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
@@ -7092,7 +7196,7 @@ safe-regex@^1.1.0:
7092 7196
   resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
7093 7197
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
7094 7198
 
7095
-sax@~1.2.4:
7199
+sax@^1.2.4, sax@~1.2.4:
7096 7200
   version "1.2.4"
7097 7201
   resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
7098 7202
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -7877,6 +7981,11 @@ tslib@^1.9.0:
7877 7981
   resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
7878 7982
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
7879 7983
 
7984
+tslib@^2.3.0:
7985
+  version "2.3.1"
7986
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
7987
+  integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
7988
+
7880 7989
 tty-browserify@0.0.0:
7881 7990
   version "0.0.0"
7882 7991
   resolved "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -8149,6 +8258,17 @@ validate-npm-package-license@^3.0.1:
8149 8258
     spdx-correct "^3.0.0"
8150 8259
     spdx-expression-parse "^3.0.0"
8151 8260
 
8261
+vant@^2.12.44:
8262
+  version "2.12.44"
8263
+  resolved "https://registry.npmmirror.com/vant/-/vant-2.12.44.tgz#bb8ca87512a91a98d577d6c275fc37ae8b8c7258"
8264
+  integrity sha512-0ZRq0v+26Ny6Ezt3M1GEN5KLEh6vVp6rBmQENi6jd0HejgpwfCRUWTFCH9sQqB3LhfxJ7ywHmrLAn5oj1eHozA==
8265
+  dependencies:
8266
+    "@babel/runtime" "7.x"
8267
+    "@vant/icons" "^1.7.1"
8268
+    "@vant/popperjs" "^1.1.0"
8269
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
8270
+    vue-lazyload "1.2.3"
8271
+
8152 8272
 vary@~1.1.2:
8153 8273
   version "1.1.2"
8154 8274
   resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -8191,6 +8311,11 @@ vue-hot-reload-api@^2.3.0:
8191 8311
   resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
8192 8312
   integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
8193 8313
 
8314
+vue-lazyload@1.2.3:
8315
+  version "1.2.3"
8316
+  resolved "https://registry.npmmirror.com/vue-lazyload/-/vue-lazyload-1.2.3.tgz#901f9ec15c7e6ca78781a2bae4a343686bdedb2c"
8317
+  integrity sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g==
8318
+
8194 8319
 "vue-loader-v16@npm:vue-loader@^16.1.0":
8195 8320
   version "16.8.3"
8196 8321
   resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz#d43e675def5ba9345d6c7f05914c13d861997087"
@@ -8211,6 +8336,11 @@ vue-loader@^15.9.2:
8211 8336
     vue-hot-reload-api "^2.3.0"
8212 8337
     vue-style-loader "^4.1.0"
8213 8338
 
8339
+vue-router@^3.5.3:
8340
+  version "3.5.3"
8341
+  resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999"
8342
+  integrity sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==
8343
+
8214 8344
 vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
8215 8345
   version "4.1.3"
8216 8346
   resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"
@@ -8237,6 +8367,13 @@ vue@^2.6.11:
8237 8367
   resolved "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
8238 8368
   integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
8239 8369
 
8370
+vuex@^4.0.2:
8371
+  version "4.0.2"
8372
+  resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.2.tgz#f896dbd5bf2a0e963f00c67e9b610de749ccacc9"
8373
+  integrity sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==
8374
+  dependencies:
8375
+    "@vue/devtools-api" "^6.0.0-beta.11"
8376
+
8240 8377
 watchpack-chokidar2@^2.0.1:
8241 8378
   version "2.0.1"
8242 8379
   resolved "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"