备份
Showing
46 changed files
with
1585 additions
and
133 deletions
... | @@ -1942,6 +1942,13 @@ | ... | @@ -1942,6 +1942,13 @@ |
1942 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", | 1942 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", |
1943 | "dev": true | 1943 | "dev": true |
1944 | }, | 1944 | }, |
1945 | "asap": { | ||
1946 | "version": "2.0.6", | ||
1947 | "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", | ||
1948 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", | ||
1949 | "dev": true, | ||
1950 | "optional": true | ||
1951 | }, | ||
1945 | "asn1": { | 1952 | "asn1": { |
1946 | "version": "0.2.4", | 1953 | "version": "0.2.4", |
1947 | "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", | 1954 | "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", |
... | @@ -5412,7 +5419,8 @@ | ... | @@ -5412,7 +5419,8 @@ |
5412 | "ansi-regex": { | 5419 | "ansi-regex": { |
5413 | "version": "2.1.1", | 5420 | "version": "2.1.1", |
5414 | "bundled": true, | 5421 | "bundled": true, |
5415 | "dev": true | 5422 | "dev": true, |
5423 | "optional": true | ||
5416 | }, | 5424 | }, |
5417 | "aproba": { | 5425 | "aproba": { |
5418 | "version": "1.2.0", | 5426 | "version": "1.2.0", |
... | @@ -5433,12 +5441,14 @@ | ... | @@ -5433,12 +5441,14 @@ |
5433 | "balanced-match": { | 5441 | "balanced-match": { |
5434 | "version": "1.0.0", | 5442 | "version": "1.0.0", |
5435 | "bundled": true, | 5443 | "bundled": true, |
5436 | "dev": true | 5444 | "dev": true, |
5445 | "optional": true | ||
5437 | }, | 5446 | }, |
5438 | "brace-expansion": { | 5447 | "brace-expansion": { |
5439 | "version": "1.1.11", | 5448 | "version": "1.1.11", |
5440 | "bundled": true, | 5449 | "bundled": true, |
5441 | "dev": true, | 5450 | "dev": true, |
5451 | "optional": true, | ||
5442 | "requires": { | 5452 | "requires": { |
5443 | "balanced-match": "^1.0.0", | 5453 | "balanced-match": "^1.0.0", |
5444 | "concat-map": "0.0.1" | 5454 | "concat-map": "0.0.1" |
... | @@ -5453,17 +5463,20 @@ | ... | @@ -5453,17 +5463,20 @@ |
5453 | "code-point-at": { | 5463 | "code-point-at": { |
5454 | "version": "1.1.0", | 5464 | "version": "1.1.0", |
5455 | "bundled": true, | 5465 | "bundled": true, |
5456 | "dev": true | 5466 | "dev": true, |
5467 | "optional": true | ||
5457 | }, | 5468 | }, |
5458 | "concat-map": { | 5469 | "concat-map": { |
5459 | "version": "0.0.1", | 5470 | "version": "0.0.1", |
5460 | "bundled": true, | 5471 | "bundled": true, |
5461 | "dev": true | 5472 | "dev": true, |
5473 | "optional": true | ||
5462 | }, | 5474 | }, |
5463 | "console-control-strings": { | 5475 | "console-control-strings": { |
5464 | "version": "1.1.0", | 5476 | "version": "1.1.0", |
5465 | "bundled": true, | 5477 | "bundled": true, |
5466 | "dev": true | 5478 | "dev": true, |
5479 | "optional": true | ||
5467 | }, | 5480 | }, |
5468 | "core-util-is": { | 5481 | "core-util-is": { |
5469 | "version": "1.0.2", | 5482 | "version": "1.0.2", |
... | @@ -5580,7 +5593,8 @@ | ... | @@ -5580,7 +5593,8 @@ |
5580 | "inherits": { | 5593 | "inherits": { |
5581 | "version": "2.0.3", | 5594 | "version": "2.0.3", |
5582 | "bundled": true, | 5595 | "bundled": true, |
5583 | "dev": true | 5596 | "dev": true, |
5597 | "optional": true | ||
5584 | }, | 5598 | }, |
5585 | "ini": { | 5599 | "ini": { |
5586 | "version": "1.3.5", | 5600 | "version": "1.3.5", |
... | @@ -5592,6 +5606,7 @@ | ... | @@ -5592,6 +5606,7 @@ |
5592 | "version": "1.0.0", | 5606 | "version": "1.0.0", |
5593 | "bundled": true, | 5607 | "bundled": true, |
5594 | "dev": true, | 5608 | "dev": true, |
5609 | "optional": true, | ||
5595 | "requires": { | 5610 | "requires": { |
5596 | "number-is-nan": "^1.0.0" | 5611 | "number-is-nan": "^1.0.0" |
5597 | } | 5612 | } |
... | @@ -5606,6 +5621,7 @@ | ... | @@ -5606,6 +5621,7 @@ |
5606 | "version": "3.0.4", | 5621 | "version": "3.0.4", |
5607 | "bundled": true, | 5622 | "bundled": true, |
5608 | "dev": true, | 5623 | "dev": true, |
5624 | "optional": true, | ||
5609 | "requires": { | 5625 | "requires": { |
5610 | "brace-expansion": "^1.1.7" | 5626 | "brace-expansion": "^1.1.7" |
5611 | } | 5627 | } |
... | @@ -5613,12 +5629,14 @@ | ... | @@ -5613,12 +5629,14 @@ |
5613 | "minimist": { | 5629 | "minimist": { |
5614 | "version": "0.0.8", | 5630 | "version": "0.0.8", |
5615 | "bundled": true, | 5631 | "bundled": true, |
5616 | "dev": true | 5632 | "dev": true, |
5633 | "optional": true | ||
5617 | }, | 5634 | }, |
5618 | "minipass": { | 5635 | "minipass": { |
5619 | "version": "2.3.5", | 5636 | "version": "2.3.5", |
5620 | "bundled": true, | 5637 | "bundled": true, |
5621 | "dev": true, | 5638 | "dev": true, |
5639 | "optional": true, | ||
5622 | "requires": { | 5640 | "requires": { |
5623 | "safe-buffer": "^5.1.2", | 5641 | "safe-buffer": "^5.1.2", |
5624 | "yallist": "^3.0.0" | 5642 | "yallist": "^3.0.0" |
... | @@ -5637,6 +5655,7 @@ | ... | @@ -5637,6 +5655,7 @@ |
5637 | "version": "0.5.1", | 5655 | "version": "0.5.1", |
5638 | "bundled": true, | 5656 | "bundled": true, |
5639 | "dev": true, | 5657 | "dev": true, |
5658 | "optional": true, | ||
5640 | "requires": { | 5659 | "requires": { |
5641 | "minimist": "0.0.8" | 5660 | "minimist": "0.0.8" |
5642 | } | 5661 | } |
... | @@ -5717,7 +5736,8 @@ | ... | @@ -5717,7 +5736,8 @@ |
5717 | "number-is-nan": { | 5736 | "number-is-nan": { |
5718 | "version": "1.0.1", | 5737 | "version": "1.0.1", |
5719 | "bundled": true, | 5738 | "bundled": true, |
5720 | "dev": true | 5739 | "dev": true, |
5740 | "optional": true | ||
5721 | }, | 5741 | }, |
5722 | "object-assign": { | 5742 | "object-assign": { |
5723 | "version": "4.1.1", | 5743 | "version": "4.1.1", |
... | @@ -5729,6 +5749,7 @@ | ... | @@ -5729,6 +5749,7 @@ |
5729 | "version": "1.4.0", | 5749 | "version": "1.4.0", |
5730 | "bundled": true, | 5750 | "bundled": true, |
5731 | "dev": true, | 5751 | "dev": true, |
5752 | "optional": true, | ||
5732 | "requires": { | 5753 | "requires": { |
5733 | "wrappy": "1" | 5754 | "wrappy": "1" |
5734 | } | 5755 | } |
... | @@ -5814,7 +5835,8 @@ | ... | @@ -5814,7 +5835,8 @@ |
5814 | "safe-buffer": { | 5835 | "safe-buffer": { |
5815 | "version": "5.1.2", | 5836 | "version": "5.1.2", |
5816 | "bundled": true, | 5837 | "bundled": true, |
5817 | "dev": true | 5838 | "dev": true, |
5839 | "optional": true | ||
5818 | }, | 5840 | }, |
5819 | "safer-buffer": { | 5841 | "safer-buffer": { |
5820 | "version": "2.1.2", | 5842 | "version": "2.1.2", |
... | @@ -5850,6 +5872,7 @@ | ... | @@ -5850,6 +5872,7 @@ |
5850 | "version": "1.0.2", | 5872 | "version": "1.0.2", |
5851 | "bundled": true, | 5873 | "bundled": true, |
5852 | "dev": true, | 5874 | "dev": true, |
5875 | "optional": true, | ||
5853 | "requires": { | 5876 | "requires": { |
5854 | "code-point-at": "^1.0.0", | 5877 | "code-point-at": "^1.0.0", |
5855 | "is-fullwidth-code-point": "^1.0.0", | 5878 | "is-fullwidth-code-point": "^1.0.0", |
... | @@ -5869,6 +5892,7 @@ | ... | @@ -5869,6 +5892,7 @@ |
5869 | "version": "3.0.1", | 5892 | "version": "3.0.1", |
5870 | "bundled": true, | 5893 | "bundled": true, |
5871 | "dev": true, | 5894 | "dev": true, |
5895 | "optional": true, | ||
5872 | "requires": { | 5896 | "requires": { |
5873 | "ansi-regex": "^2.0.0" | 5897 | "ansi-regex": "^2.0.0" |
5874 | } | 5898 | } |
... | @@ -5912,12 +5936,14 @@ | ... | @@ -5912,12 +5936,14 @@ |
5912 | "wrappy": { | 5936 | "wrappy": { |
5913 | "version": "1.0.2", | 5937 | "version": "1.0.2", |
5914 | "bundled": true, | 5938 | "bundled": true, |
5915 | "dev": true | 5939 | "dev": true, |
5940 | "optional": true | ||
5916 | }, | 5941 | }, |
5917 | "yallist": { | 5942 | "yallist": { |
5918 | "version": "3.0.3", | 5943 | "version": "3.0.3", |
5919 | "bundled": true, | 5944 | "bundled": true, |
5920 | "dev": true | 5945 | "dev": true, |
5946 | "optional": true | ||
5921 | } | 5947 | } |
5922 | } | 5948 | } |
5923 | }, | 5949 | }, |
... | @@ -6673,6 +6699,13 @@ | ... | @@ -6673,6 +6699,13 @@ |
6673 | "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", | 6699 | "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", |
6674 | "dev": true | 6700 | "dev": true |
6675 | }, | 6701 | }, |
6702 | "image-size": { | ||
6703 | "version": "0.5.5", | ||
6704 | "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", | ||
6705 | "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", | ||
6706 | "dev": true, | ||
6707 | "optional": true | ||
6708 | }, | ||
6676 | "import-cwd": { | 6709 | "import-cwd": { |
6677 | "version": "2.1.0", | 6710 | "version": "2.1.0", |
6678 | "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", | 6711 | "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", |
... | @@ -7385,6 +7418,64 @@ | ... | @@ -7385,6 +7418,64 @@ |
7385 | "invert-kv": "^2.0.0" | 7418 | "invert-kv": "^2.0.0" |
7386 | } | 7419 | } |
7387 | }, | 7420 | }, |
7421 | "less": { | ||
7422 | "version": "3.9.0", | ||
7423 | "resolved": "https://registry.npm.taobao.org/less/download/less-3.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-3.9.0.tgz", | ||
7424 | "integrity": "sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ=", | ||
7425 | "dev": true, | ||
7426 | "requires": { | ||
7427 | "clone": "^2.1.2", | ||
7428 | "errno": "^0.1.1", | ||
7429 | "graceful-fs": "^4.1.2", | ||
7430 | "image-size": "~0.5.0", | ||
7431 | "mime": "^1.4.1", | ||
7432 | "mkdirp": "^0.5.0", | ||
7433 | "promise": "^7.1.1", | ||
7434 | "request": "^2.83.0", | ||
7435 | "source-map": "~0.6.0" | ||
7436 | }, | ||
7437 | "dependencies": { | ||
7438 | "clone": { | ||
7439 | "version": "2.1.2", | ||
7440 | "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", | ||
7441 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", | ||
7442 | "dev": true | ||
7443 | }, | ||
7444 | "mime": { | ||
7445 | "version": "1.6.0", | ||
7446 | "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", | ||
7447 | "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", | ||
7448 | "dev": true, | ||
7449 | "optional": true | ||
7450 | }, | ||
7451 | "source-map": { | ||
7452 | "version": "0.6.1", | ||
7453 | "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", | ||
7454 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", | ||
7455 | "dev": true, | ||
7456 | "optional": true | ||
7457 | } | ||
7458 | } | ||
7459 | }, | ||
7460 | "less-loader": { | ||
7461 | "version": "5.0.0", | ||
7462 | "resolved": "https://registry.npm.taobao.org/less-loader/download/less-loader-5.0.0.tgz", | ||
7463 | "integrity": "sha1-SY3eOmxsT4h0WO6e0/CGoSrRtGY=", | ||
7464 | "dev": true, | ||
7465 | "requires": { | ||
7466 | "clone": "^2.1.1", | ||
7467 | "loader-utils": "^1.1.0", | ||
7468 | "pify": "^4.0.1" | ||
7469 | }, | ||
7470 | "dependencies": { | ||
7471 | "clone": { | ||
7472 | "version": "2.1.2", | ||
7473 | "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", | ||
7474 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", | ||
7475 | "dev": true | ||
7476 | } | ||
7477 | } | ||
7478 | }, | ||
7388 | "levn": { | 7479 | "levn": { |
7389 | "version": "0.3.0", | 7480 | "version": "0.3.0", |
7390 | "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", | 7481 | "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", |
... | @@ -9733,6 +9824,16 @@ | ... | @@ -9733,6 +9824,16 @@ |
9733 | "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", | 9824 | "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", |
9734 | "dev": true | 9825 | "dev": true |
9735 | }, | 9826 | }, |
9827 | "promise": { | ||
9828 | "version": "7.3.1", | ||
9829 | "resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", | ||
9830 | "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", | ||
9831 | "dev": true, | ||
9832 | "optional": true, | ||
9833 | "requires": { | ||
9834 | "asap": "~2.0.3" | ||
9835 | } | ||
9836 | }, | ||
9736 | "promise-inflight": { | 9837 | "promise-inflight": { |
9737 | "version": "1.0.1", | 9838 | "version": "1.0.1", |
9738 | "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", | 9839 | "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", |
... | @@ -10520,7 +10621,8 @@ | ... | @@ -10520,7 +10621,8 @@ |
10520 | "version": "4.0.8", | 10621 | "version": "4.0.8", |
10521 | "resolved": "https://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", | 10622 | "resolved": "https://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", |
10522 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", | 10623 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", |
10523 | "dev": true | 10624 | "dev": true, |
10625 | "optional": true | ||
10524 | }, | 10626 | }, |
10525 | "rx-lite-aggregates": { | 10627 | "rx-lite-aggregates": { |
10526 | "version": "4.0.8", | 10628 | "version": "4.0.8", | ... | ... |
... | @@ -34,6 +34,8 @@ | ... | @@ -34,6 +34,8 @@ |
34 | "babel-plugin-import": "^1.12.0", | 34 | "babel-plugin-import": "^1.12.0", |
35 | "eslint": "^5.16.0", | 35 | "eslint": "^5.16.0", |
36 | "eslint-plugin-vue": "^5.0.0", | 36 | "eslint-plugin-vue": "^5.0.0", |
37 | "less": "^3.9.0", | ||
38 | "less-loader": "^5.0.0", | ||
37 | "node-sass": "^4.12.0", | 39 | "node-sass": "^4.12.0", |
38 | "sass-loader": "^7.1.0", | 40 | "sass-loader": "^7.1.0", |
39 | "vue-template-compiler": "^2.6.10" | 41 | "vue-template-compiler": "^2.6.10" | ... | ... |
... | @@ -8,7 +8,7 @@ | ... | @@ -8,7 +8,7 @@ |
8 | <meta name="viewport" | 8 | <meta name="viewport" |
9 | content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | 9 | content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> |
10 | <link rel="icon" href="<%= BASE_URL %>favicon.ico"> | 10 | <link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
11 | <title>vue-cli3-framework</title> | 11 | <title></title> |
12 | </head> | 12 | </head> |
13 | 13 | ||
14 | <body> | 14 | <body> | ... | ... |
... | @@ -4,12 +4,13 @@ | ... | @@ -4,12 +4,13 @@ |
4 | <router-link to="/">Home</router-link> | | 4 | <router-link to="/">Home</router-link> | |
5 | <router-link to="/about">About</router-link> | 5 | <router-link to="/about">About</router-link> |
6 | </div>--> | 6 | </div>--> |
7 | <router-view/> | 7 | <router-view /> |
8 | </div> | 8 | </div> |
9 | </template> | 9 | </template> |
10 | 10 | ||
11 | |||
11 | <style lang="scss"> | 12 | <style lang="scss"> |
12 | @import './styles/support.scss'; | 13 | @import "./styles/support.scss"; |
13 | 14 | ||
14 | #app { | 15 | #app { |
15 | /* font-family: 'Avenir', Helvetica, Arial, sans-serif; | 16 | /* font-family: 'Avenir', Helvetica, Arial, sans-serif; |
... | @@ -30,6 +31,10 @@ div { | ... | @@ -30,6 +31,10 @@ div { |
30 | padding: 0; | 31 | padding: 0; |
31 | } | 32 | } |
32 | 33 | ||
34 | body { | ||
35 | background-color: #74cb35; | ||
36 | } | ||
37 | |||
33 | .app__width { | 38 | .app__width { |
34 | width: 750px; | 39 | width: 750px; |
35 | } | 40 | } |
... | @@ -83,5 +88,51 @@ div { | ... | @@ -83,5 +88,51 @@ div { |
83 | position: relative; | 88 | position: relative; |
84 | } | 89 | } |
85 | 90 | ||
91 | .sys-btn { | ||
92 | width: 430px; | ||
93 | height: 128px; | ||
94 | background: url(./assets/imgs/btn.png) no-repeat; | ||
95 | background-size: 100%; | ||
96 | text-align: center; | ||
97 | line-height: 118px; | ||
98 | color: #fff; | ||
99 | font-size: 50px; | ||
100 | font-weight: 600; | ||
101 | margin: auto; | ||
102 | } | ||
103 | |||
104 | .sys-btn-02 { | ||
105 | width: 342px; | ||
106 | height: 110px; | ||
107 | background: url(./assets/imgs/btn2.png) no-repeat; | ||
108 | background-size: 100%; | ||
109 | text-align: center; | ||
110 | line-height: 100px; | ||
111 | color: #fff; | ||
112 | font-size: 40px; | ||
113 | font-weight: 600; | ||
114 | margin: auto; | ||
115 | } | ||
86 | 116 | ||
117 | .sys-container-panel { | ||
118 | margin: auto; | ||
119 | width: 692px; | ||
120 | background-color: #fff; | ||
121 | border-radius: 50px; | ||
122 | box-shadow: 5px 5px 15px #8bc263; | ||
123 | position: relative; | ||
124 | .container-title { | ||
125 | width: 505px; | ||
126 | height: 84px; | ||
127 | line-height: 104px; | ||
128 | background: url(./assets/imgs/title-bg.png) no-repeat; | ||
129 | background-size: 100%; | ||
130 | position: absolute; | ||
131 | left: 93.5px; | ||
132 | top: -42px; | ||
133 | font-size: 38px; | ||
134 | font-weight: 600; | ||
135 | color: #e8e8e8; | ||
136 | } | ||
137 | } | ||
87 | </style> | 138 | </style> | ... | ... |
src/api/area.js
0 → 100644
This diff is collapsed.
Click to expand it.
1 | import axios from 'axios'; | 1 | import axios from 'axios'; |
2 | import Vue from 'vue'; | ||
3 | import Router from '../router' | ||
4 | |||
2 | // import { | 5 | // import { |
3 | // Toast | 6 | // Toast |
4 | // } from 'vant'; | 7 | // } from 'vant'; |
... | @@ -12,23 +15,33 @@ function Toast(msg) { | ... | @@ -12,23 +15,33 @@ function Toast(msg) { |
12 | 15 | ||
13 | // 服务器地址 | 16 | // 服务器地址 |
14 | let base = "https://ow.go.qudone.com"; | 17 | let base = "https://ow.go.qudone.com"; |
18 | let baseWxAppid = "wx9fc8816188c0ef2a"; | ||
19 | let wxOauthUrl = "http://clubwxuat.hm.liby.com.cn/api/getOpenId.htm"; | ||
15 | if (location.href.indexOf("//k.wxpai.cn") > 0) { | 20 | if (location.href.indexOf("//k.wxpai.cn") > 0) { |
16 | base = "https://api.k.wxpai.cn/bizproxy" | 21 | base = "https://api.k.wxpai.cn/bizproxy" |
22 | baseWxAppid = "wx9fc8816188c0ef2a"; | ||
23 | wxOauthUrl = "http://clubwxuat.hm.liby.com.cn/api/getOpenId.htm"; | ||
17 | } | 24 | } |
25 | |||
26 | let whileList = [ | ||
27 | "https://api.k.wxpai.cn/bizproxy/kdapi/file/upload" | ||
28 | ] | ||
18 | // let base = COM.baseUrl; | 29 | // let base = COM.baseUrl; |
19 | 30 | ||
20 | // 请求拦截器 | 31 | // 请求拦截器 |
21 | // axios.interceptors.request.use( | 32 | axios.interceptors.request.use( |
22 | // config => { | 33 | config => { |
23 | // // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 | 34 | // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 |
24 | // // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 | 35 | // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 |
25 | // const token = "token"; //这里写入token | 36 | const token = store.getSession(); |
26 | // token && (config.headers.Authorization = token); | 37 | if (token && whileList.indexOf(config.url) < 0) { |
27 | // return config; | 38 | config.headers["sessionId"] = token; |
28 | // }, | 39 | } |
29 | // error => { | 40 | return config; |
30 | // return Promise.error(error); | 41 | }, |
31 | // }) | 42 | error => { |
43 | return Promise.error(error); | ||
44 | }) | ||
32 | 45 | ||
33 | // 响应拦截器 | 46 | // 响应拦截器 |
34 | axios.interceptors.response.use( | 47 | axios.interceptors.response.use( |
... | @@ -37,7 +50,11 @@ axios.interceptors.response.use( | ... | @@ -37,7 +50,11 @@ axios.interceptors.response.use( |
37 | if (response.data.code === 200) { | 50 | if (response.data.code === 200) { |
38 | return Promise.resolve(response); | 51 | return Promise.resolve(response); |
39 | } else { | 52 | } else { |
40 | Toast(response.data.bizMsg); | 53 | if (response.data.code == 404) { |
54 | store.removeSession(); | ||
55 | store.saveRedirectUrl(); | ||
56 | Router.push("/"); | ||
57 | } | ||
41 | return Promise.reject(response); | 58 | return Promise.reject(response); |
42 | } | 59 | } |
43 | } else { | 60 | } else { |
... | @@ -46,43 +63,9 @@ axios.interceptors.response.use( | ... | @@ -46,43 +63,9 @@ axios.interceptors.response.use( |
46 | }, | 63 | }, |
47 | // 服务器状态码不是200的情况 | 64 | // 服务器状态码不是200的情况 |
48 | error => { | 65 | error => { |
66 | console.log("Router.path === ", Router.history.current); | ||
49 | if (error.response.status) { | 67 | if (error.response.status) { |
50 | switch (error.response.status) { | 68 | switch (error.response.status) { |
51 | // 401: 未登录 | ||
52 | // 未登录则跳转登录页面,并携带当前页面的路径 | ||
53 | // 在登录成功后返回当前页面,这一步需要在登录页操作。 | ||
54 | case 401: | ||
55 | router.replace({ | ||
56 | path: '/login', | ||
57 | query: { | ||
58 | redirect: router.currentRoute.fullPath | ||
59 | } | ||
60 | }); | ||
61 | break; | ||
62 | // 403 token过期 | ||
63 | // 登录过期对用户进行提示 | ||
64 | // 清除本地token和清空vuex中token对象 | ||
65 | // 跳转登录页面 | ||
66 | case 403: | ||
67 | Toast({ | ||
68 | message: '登录过期,请重新登录', | ||
69 | duration: 1000, | ||
70 | forbidClick: true | ||
71 | }); | ||
72 | // 清除token | ||
73 | localStorage.removeItem('token'); | ||
74 | store.commit('loginSuccess', null); | ||
75 | // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 | ||
76 | setTimeout(() => { | ||
77 | router.replace({ | ||
78 | path: '/login', | ||
79 | query: { | ||
80 | redirect: router.currentRoute.fullPath | ||
81 | } | ||
82 | }); | ||
83 | }, 1000); | ||
84 | break; | ||
85 | // 404请求不存在 | ||
86 | case 404: | 69 | case 404: |
87 | Toast({ | 70 | Toast({ |
88 | message: '网络请求不存在', | 71 | message: '网络请求不存在', |
... | @@ -90,7 +73,7 @@ axios.interceptors.response.use( | ... | @@ -90,7 +73,7 @@ axios.interceptors.response.use( |
90 | forbidClick: true | 73 | forbidClick: true |
91 | }); | 74 | }); |
92 | break; | 75 | break; |
93 | // 其他错误,直接抛出错误提示 | 76 | // 其他错误,直接抛出错误提示 |
94 | default: | 77 | default: |
95 | Toast({ | 78 | Toast({ |
96 | message: error.response.data.message, | 79 | message: error.response.data.message, |
... | @@ -119,7 +102,9 @@ export const httpGet = params => { | ... | @@ -119,7 +102,9 @@ export const httpGet = params => { |
119 | url, | 102 | url, |
120 | data | 103 | data |
121 | } = params; | 104 | } = params; |
122 | return axios.get(`${base}${url}`, { | 105 | data = !data ? {} : data; |
106 | let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`; | ||
107 | return axios.get(requestUrl, { | ||
123 | params: data | 108 | params: data |
124 | }).then(res => res.data.content); | 109 | }).then(res => res.data.content); |
125 | } | 110 | } |
... | @@ -133,9 +118,57 @@ export const httpPost = params => { | ... | @@ -133,9 +118,57 @@ export const httpPost = params => { |
133 | url, | 118 | url, |
134 | data | 119 | data |
135 | } = params; | 120 | } = params; |
136 | return axios.post(`${base}${url}`, data).then(res => res.data.content); | 121 | let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`; |
122 | return axios.post(requestUrl, data).then(res => res.data.content); | ||
137 | } | 123 | } |
138 | 124 | ||
125 | export const store = { | ||
126 | putSession: function (sessionId) { | ||
127 | localStorage.setItem("_jiajia_childrenhost_sesson", sessionId); | ||
128 | }, | ||
129 | getSession: function () { | ||
130 | return localStorage.getItem("_jiajia_childrenhost_sesson"); | ||
131 | }, | ||
132 | removeSession: function () { | ||
133 | localStorage.removeItem("_jiajia_childrenhost_sesson"); | ||
134 | }, | ||
135 | saveRedirectUrl() { | ||
136 | let current = Router.history.current || {}; | ||
137 | let data = { | ||
138 | route: current.path, | ||
139 | params: current.query | ||
140 | } | ||
141 | localStorage.setItem("_jiajia_childrenhost_redirect", JSON.stringify(data)); | ||
142 | }, | ||
143 | getRedirectUrl() { | ||
144 | let dataStr = localStorage.getItem("_jiajia_childrenhost_redirect"); | ||
145 | if (dataStr) { | ||
146 | let data = JSON.parse(dataStr); | ||
147 | let path = data.route; | ||
148 | let sep = "?"; | ||
149 | if (data.params) { | ||
150 | for (let key in data.params) { | ||
151 | path += sep + key + "=" + data.params[key]; | ||
152 | sep = "&"; | ||
153 | } | ||
154 | } | ||
155 | return path; | ||
156 | } | ||
157 | return null; | ||
158 | }, | ||
159 | delRedirectUrl() { | ||
160 | localStorage.removeItem("_jiajia_childrenhost_redirect"); | ||
161 | }, | ||
162 | getWxAppId() { | ||
163 | return `${baseWxAppid}`; | ||
164 | }, | ||
165 | toWxLogin() { | ||
166 | let baseUrl = location.origin + location.pathname; | ||
167 | let returnUrl = encodeURIComponent(`${wxOauthUrl}` + "?returnUrl=" + baseUrl + "?openId=OPENID&p=p"); | ||
168 | let oauthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + `${baseWxAppid}` + "&redirect_uri=" + returnUrl + "&response_type=code&scope=snsapi_userinfo&stats=" + new Date().getTime() + "#wechat_redirect"; | ||
169 | location.href = oauthUrl; | ||
170 | } | ||
171 | } | ||
139 | 172 | ||
140 | /** | 173 | /** |
141 | * 封装post方法 | 174 | * 封装post方法 |
... | @@ -152,5 +185,38 @@ export const formdata = params => { | ... | @@ -152,5 +185,38 @@ export const formdata = params => { |
152 | url, | 185 | url, |
153 | data | 186 | data |
154 | } = params; | 187 | } = params; |
155 | return axios.post(`${base}${url}`, data, formDataHeaders).then(res => res.data); | ||
156 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
188 | let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`; | ||
189 | return axios.post(requestUrl, data, formDataHeaders).then(res => res.data); | ||
190 | } | ||
191 | |||
192 | |||
193 | export const request = { | ||
194 | post(url, data) { | ||
195 | return axios.post(`${requestDomain}${url}`, data); | ||
196 | }, | ||
197 | get(url, data) { | ||
198 | return axios.get(`${requestDomain}${url}`, { params: data }); | ||
199 | }, | ||
200 | form(url, params) { | ||
201 | let formData = new FormData(); //使用formData对象 | ||
202 | for (let key in params) { | ||
203 | formData.append(key, params[key]); | ||
204 | } | ||
205 | let requestUrl = url.indexOf("://") >= 0 ? `${url}` : `${requestDomain}${url}`; | ||
206 | return axios.post(requestUrl, formData, formDataHeaders) | ||
207 | }, | ||
208 | build(url, params){ | ||
209 | let fullUrl = `${requestDomain}${url}`; | ||
210 | let split = ""; | ||
211 | for(let key in params){ | ||
212 | if(split){ | ||
213 | split = "&"; | ||
214 | } else { | ||
215 | split = "?" | ||
216 | } | ||
217 | fullUrl += split + key +"="+params[key]; | ||
218 | } | ||
219 | return fullUrl; | ||
220 | }, | ||
221 | /*test*/ | ||
222 | }; | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/assets/imgs/bottom-grassland.png
0 → 100644
84.4 KB
src/assets/imgs/btn.png
0 → 100644
7.9 KB
src/assets/imgs/btn2.png
0 → 100644
4.19 KB
src/assets/imgs/checkbox-checked.png
0 → 100644
770 Bytes
src/assets/imgs/checkbox-uncheck.png
0 → 100644
313 Bytes
src/assets/imgs/draw-down.png
0 → 100644
390 Bytes
src/assets/imgs/head-leap.png
0 → 100644
57.6 KB
src/assets/imgs/icon-01.png
0 → 100644
2.45 KB
src/assets/imgs/icon-02.png
0 → 100644
2.89 KB
src/assets/imgs/icon-03.png
0 → 100644
4.05 KB
src/assets/imgs/icon-04.png
0 → 100644
4.24 KB
src/assets/imgs/idx-head.jpg
0 → 100644
636 KB
src/assets/imgs/leap-01.png
0 → 100644
18.6 KB
src/assets/imgs/leap-02.png
0 → 100644
35.9 KB
src/assets/imgs/leap-03.png
0 → 100644
86.7 KB
src/assets/imgs/prize.png
0 → 100644
312 KB
src/assets/imgs/rule.png
0 → 100644
104 KB
src/assets/imgs/title-bg.png
0 → 100644
12.3 KB
src/assets/imgs/walfare-qrcode.png
0 → 100644
16.1 KB
src/assets/imgs/welfare-bg.jpg
0 → 100644
105 KB
src/assets/imgs/welfare-cj.png
0 → 100644
239 KB
src/assets/imgs/welfare-qy.png
0 → 100644
319 KB
src/assets/imgs/welfare-top.jpg
0 → 100644
120 KB
src/components/biz-model/biz-model.vue
0 → 100644
1 | <template> | ||
2 | <van-overlay :show="show" > | ||
3 | |||
4 | </van-overlay> | ||
5 | </template> | ||
6 | |||
7 | <script> | ||
8 | import Vue from "vue"; | ||
9 | import { Overlay } from "vant"; | ||
10 | Vue.use(Overlay); | ||
11 | |||
12 | export default { | ||
13 | props: ["value"], | ||
14 | data() { | ||
15 | return { | ||
16 | model: this.value, | ||
17 | show: false | ||
18 | }; | ||
19 | }, | ||
20 | methods: {}, | ||
21 | created() {} | ||
22 | }; | ||
23 | </script> | ||
24 | |||
25 | <style lang="less" scoped> | ||
26 | </style> |
src/components/bottom-tools/bottom-tools.vue
0 → 100644
1 | <template> | ||
2 | <div class="bottom-panel"> | ||
3 | <div class="bottom-tool-container"> | ||
4 | <div class="item" v-bind:class="{activity : activityIndex == 1}" @click="itemSelect(1)"> | ||
5 | <div class="white-bg"> | ||
6 | <div class="icon icon-01"></div> | ||
7 | </div> | ||
8 | <div class="name">大赛介绍</div> | ||
9 | </div> | ||
10 | <div class="item" v-bind:class="{activity : activityIndex == 2}" @click="itemSelect(2)"> | ||
11 | <div class="white-bg"> | ||
12 | <div class="icon icon-02"></div> | ||
13 | </div> | ||
14 | <div class="name">我要报名</div> | ||
15 | </div> | ||
16 | <div class="item" v-bind:class="{activity : activityIndex == 3}" @click="itemSelect(3)"> | ||
17 | <div class="white-bg"> | ||
18 | <div class="icon icon-03"></div> | ||
19 | </div> | ||
20 | <div class="name">人气评选</div> | ||
21 | </div> | ||
22 | <div class="item" v-bind:class="{activity : activityIndex == 4}" @click="itemSelect(4)"> | ||
23 | <div class="white-bg"> | ||
24 | <div class="icon icon-04"></div> | ||
25 | </div> | ||
26 | <div class="name">更多福利</div> | ||
27 | </div> | ||
28 | </div> | ||
29 | </div> | ||
30 | </template> | ||
31 | |||
32 | <script> | ||
33 | export default { | ||
34 | props: ["value"], | ||
35 | data() { | ||
36 | return { | ||
37 | activityIndex: this.value | ||
38 | }; | ||
39 | }, | ||
40 | methods: { | ||
41 | itemSelect(index) { | ||
42 | if (this.activityIndex == index) { | ||
43 | return; | ||
44 | } | ||
45 | this.activityIndex = index; | ||
46 | switch (this.activityIndex) { | ||
47 | case 1: | ||
48 | this.$router.push("/"); | ||
49 | break; | ||
50 | case 2: | ||
51 | this.$router.push("/sign"); | ||
52 | break; | ||
53 | case 3: | ||
54 | this.$router.push("/list"); | ||
55 | break; | ||
56 | case 4: | ||
57 | this.$router.push("/welfare"); | ||
58 | break; | ||
59 | } | ||
60 | this.$emit("selectChange", this.activityIndex); | ||
61 | } | ||
62 | }, | ||
63 | created() { | ||
64 | if (!this.activityIndex) { | ||
65 | this.activityIndex = 1; | ||
66 | } | ||
67 | } | ||
68 | }; | ||
69 | </script> | ||
70 | |||
71 | <style lang="less" scoped> | ||
72 | .bottom-panel { | ||
73 | z-index: 999; | ||
74 | position: fixed; | ||
75 | bottom: 0; | ||
76 | height: 165px; | ||
77 | width: 750px; | ||
78 | background: url(../../assets/imgs/bottom-grassland.png) no-repeat; | ||
79 | background-size: 100% auto; | ||
80 | background-position: bottom; | ||
81 | } | ||
82 | .bottom-tool-container { | ||
83 | margin: auto; | ||
84 | width: 680px; | ||
85 | display: flex; | ||
86 | justify-content: space-between; | ||
87 | } | ||
88 | |||
89 | .item { | ||
90 | width: 140px; | ||
91 | .icon { | ||
92 | margin: auto; | ||
93 | width: 86px; | ||
94 | height: 86px; | ||
95 | } | ||
96 | |||
97 | .icon-01 { | ||
98 | background: url(../../assets/imgs/icon-01.png); | ||
99 | background-size: 100%; | ||
100 | } | ||
101 | .icon-02 { | ||
102 | background: url(../../assets/imgs/icon-02.png); | ||
103 | background-size: 100%; | ||
104 | } | ||
105 | .icon-03 { | ||
106 | background: url(../../assets/imgs/icon-03.png); | ||
107 | background-size: 100%; | ||
108 | } | ||
109 | .icon-04 { | ||
110 | background: url(../../assets/imgs/icon-04.png); | ||
111 | background-size: 100%; | ||
112 | } | ||
113 | |||
114 | .name { | ||
115 | width: 100%; | ||
116 | text-align: center; | ||
117 | color: #fff; | ||
118 | font-size: 24px; | ||
119 | } | ||
120 | .white-bg { | ||
121 | margin: auto; | ||
122 | padding-top: 7px; | ||
123 | background-color: transparent; | ||
124 | width: 110px; | ||
125 | height: 103px; | ||
126 | border-radius: 55px; | ||
127 | } | ||
128 | } | ||
129 | |||
130 | .activity { | ||
131 | .white-bg { | ||
132 | background-color: #fff !important; | ||
133 | } | ||
134 | } | ||
135 | </style> |
1 | <template> | 1 | <template> |
2 | <div class="home">home</div> | 2 | <div class="home"> |
3 | <!-- <div class="title"></div> | ||
4 | <div class="sys-btn btn-margin">我要报名</div> | ||
5 | <div class="rule"></div> | ||
6 | <div class="prize"></div> | ||
7 | <div class="leap-01"></div> | ||
8 | <div class="leap-02"></div> | ||
9 | <div class="leap-03"></div> | ||
10 | <div class="remain"></div> | ||
11 | <bottom-tool v-model="activityIndex"></bottom-tool>--> | ||
12 | </div> | ||
3 | </template> | 13 | </template> |
4 | 14 | ||
5 | <script> | 15 | <script> |
16 | let urls = { | ||
17 | login: "/jiajiaCHApi/app/login" | ||
18 | }; | ||
19 | import { store, httpPost } from "@/api/fetch-api.js"; | ||
20 | |||
6 | export default { | 21 | export default { |
7 | name: 'home' | 22 | name: "home", |
8 | } | 23 | data() { |
24 | return { | ||
25 | activityIndex: 1, | ||
26 | loginParam: { | ||
27 | openid: "", | ||
28 | accessToken: "" | ||
29 | } | ||
30 | }; | ||
31 | }, | ||
32 | methods: { | ||
33 | init() { | ||
34 | if (store.getSession()) { | ||
35 | this.$router.push("/index"); | ||
36 | } else { | ||
37 | let params = this.analysisParams(); | ||
38 | if (params["openId"]) { | ||
39 | this.loginParam.openid = params["openId"]; | ||
40 | this.loginParam.accessToken = params["access_token"]; | ||
41 | this.login(); | ||
42 | } else { | ||
43 | store.toWxLogin(); | ||
44 | } | ||
45 | } | ||
46 | }, | ||
47 | analysisParams() { | ||
48 | let params = {}; | ||
49 | var query = window.location.search.substring(1); | ||
50 | var vars = query.split("&"); | ||
51 | for (var i = 0; i < vars.length; i++) { | ||
52 | var pair = vars[i].split("="); | ||
53 | params[pair[0]] = pair[1]; | ||
54 | } | ||
55 | return params; | ||
56 | }, | ||
57 | login() { | ||
58 | httpPost({ url: urls.login, data: this.loginParam }).then(res => { | ||
59 | store.putSession(res.sessionId); | ||
60 | let path = store.getRedirectUrl(); | ||
61 | path = !path ? "/index" : path; | ||
62 | store.delRedirectUrl(); | ||
63 | this.$router.push(path); | ||
64 | }); | ||
65 | } | ||
66 | }, | ||
67 | created() { | ||
68 | this.init(); | ||
69 | } | ||
70 | }; | ||
9 | </script> | 71 | </script> |
10 | 72 | ||
11 | <style lang="scss" scoped> | 73 | <style lang="scss" scoped> |
12 | .home { | 74 | .home { |
75 | position: relative; | ||
13 | text-align: center; | 76 | text-align: center; |
77 | background-color: #74cb35; | ||
14 | } | 78 | } |
15 | </style> | 79 | </style> | ... | ... |
src/pages/demo/index.js
deleted
100644 → 0
1 | import api from '../../api/api' | ||
2 | import { | ||
3 | httpGet, | ||
4 | httpPost | ||
5 | } from '../../api/fetch-api.js' | ||
6 | |||
7 | export default { | ||
8 | data() { | ||
9 | return { | ||
10 | key: 'value' | ||
11 | } | ||
12 | }, | ||
13 | components: {}, | ||
14 | methods: { | ||
15 | initData() {} | ||
16 | }, | ||
17 | mounted() {}, | ||
18 | created() { | ||
19 | console.log("demo created"); | ||
20 | } | ||
21 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/pages/demo/index.scss
deleted
100644 → 0
1 | @import './../../styles/support'; |
src/pages/demo/index.vue
deleted
100644 → 0
1 | |||
2 | <template> | ||
3 | <div class="page"> | ||
4 | <div class="app__bgc bgc"></div> | ||
5 | <div class="app__bg bg"></div> | ||
6 | <div class="app__content main"> | ||
7 | <div class="top-space"></div> | ||
8 | <div class="content"> | ||
9 | <span class="iconfont iconclose">demo</span> | ||
10 | </div> | ||
11 | </div> | ||
12 | </div> | ||
13 | </template> | ||
14 | |||
15 | <script src="./index.js"></script> | ||
16 | <style lang="scss" scoped> | ||
17 | // @import './index.scss'; | ||
18 | </style> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/pages/draw/index.vue
0 → 100644
File mode changed
src/pages/index/index.vue
0 → 100644
1 | <template> | ||
2 | <div class="home"> | ||
3 | <div class="title"></div> | ||
4 | <div class="sys-btn btn-margin" @click="toSign">立即报名</div> | ||
5 | <div class="rule"></div> | ||
6 | <div class="prize"></div> | ||
7 | <div class="leap-01"></div> | ||
8 | <div class="leap-02"></div> | ||
9 | <div class="leap-03"></div> | ||
10 | <div class="remain"></div> | ||
11 | <bottom-tool v-model="activityIndex"></bottom-tool> | ||
12 | </div> | ||
13 | </template> | ||
14 | |||
15 | <script> | ||
16 | import BottomTool from "@/components/bottom-tools/bottom-tools"; | ||
17 | |||
18 | export default { | ||
19 | name: "home", | ||
20 | data() { | ||
21 | return { | ||
22 | activityIndex: 1 | ||
23 | }; | ||
24 | }, | ||
25 | methods : { | ||
26 | toSign(){ | ||
27 | this.$router.push("/sign") | ||
28 | } | ||
29 | }, | ||
30 | components: { | ||
31 | BottomTool | ||
32 | } | ||
33 | }; | ||
34 | </script> | ||
35 | |||
36 | <style lang="scss" scoped> | ||
37 | .home { | ||
38 | position: relative; | ||
39 | text-align: center; | ||
40 | background-color: #74cb35; | ||
41 | } | ||
42 | .title { | ||
43 | width: 750px; | ||
44 | height: 955px; | ||
45 | background: url(../../assets/imgs/idx-head.jpg); | ||
46 | background-size: 100%; | ||
47 | } | ||
48 | .rule { | ||
49 | width: 689px; | ||
50 | height: 672px; | ||
51 | background: url(../../assets/imgs/rule.png); | ||
52 | background-size: 100%; | ||
53 | margin: auto; | ||
54 | margin-top: 26px; | ||
55 | } | ||
56 | .prize { | ||
57 | width: 684px; | ||
58 | height: 1570px; | ||
59 | background: url(../../assets/imgs/prize.png); | ||
60 | background-size: 100%; | ||
61 | margin: auto; | ||
62 | margin-top: 40px; | ||
63 | } | ||
64 | .btn-margin { | ||
65 | margin-top: 10px; | ||
66 | } | ||
67 | .leap-01 { | ||
68 | width: 87px; | ||
69 | height: 216px; | ||
70 | background: url(../../assets/imgs/leap-01.png); | ||
71 | background-size: 100%; | ||
72 | position: absolute; | ||
73 | right: 0; | ||
74 | top: 990px; | ||
75 | } | ||
76 | .leap-02 { | ||
77 | width: 138px; | ||
78 | height: 290px; | ||
79 | background: url(../../assets/imgs/leap-02.png); | ||
80 | background-size: 100%; | ||
81 | position: absolute; | ||
82 | right: 0; | ||
83 | top: 1665px; | ||
84 | } | ||
85 | .leap-03 { | ||
86 | width: 750px; | ||
87 | height: 355px; | ||
88 | background: url(../../assets/imgs/leap-03.png); | ||
89 | background-size: 100%; | ||
90 | position: absolute; | ||
91 | bottom: 0px; | ||
92 | } | ||
93 | .remain{ | ||
94 | height: 0px; | ||
95 | } | ||
96 | </style> |
src/pages/list/index.vue
0 → 100644
File mode changed
src/pages/sign/components/EditModel.vue
0 → 100644
1 | <template> | ||
2 | <div class="editClass"> | ||
3 | <div class="sys-container-panel content"> | ||
4 | <div class="container-title">我要报名</div> | ||
5 | <div class="head-line"></div> | ||
6 | |||
7 | <div class="text-container space"> | ||
8 | <div class="label">选手姓名:</div> | ||
9 | <div class="form-item"> | ||
10 | <input v-model="formData.name" placeholder="请填写参赛者姓名" /> | ||
11 | </div> | ||
12 | </div> | ||
13 | |||
14 | <div class="text-container space"> | ||
15 | <div class="label">所属地区:</div> | ||
16 | <div class="inline-group inline-group-width"> | ||
17 | <div class="form-item inline-group inline-02" @click="selectCityHandler"> | ||
18 | <div class="label">{{formData.province ? formData.province : "请选择"}}</div> | ||
19 | <div class="icon-draw-down"></div> | ||
20 | </div> | ||
21 | <div class="form-item inline-group inline-02" @click="selectCityHandler"> | ||
22 | <div class="label">{{formData.city ? formData.city : "请选择"}}</div> | ||
23 | <div class="icon-draw-down"></div> | ||
24 | </div> | ||
25 | </div> | ||
26 | </div> | ||
27 | |||
28 | <div class="text-container space"> | ||
29 | <div class="label">个人简介:</div> | ||
30 | <div class="form-item"> | ||
31 | <input v-model="formData.profile" placeholder="可填写参赛者获取过荣誉、特殊才艺技能等" /> | ||
32 | </div> | ||
33 | </div> | ||
34 | |||
35 | <div class="text-container space"> | ||
36 | <div class="label">竞赛宣言:</div> | ||
37 | <div class="form-item"> | ||
38 | <input v-model="formData.slogan" placeholder="参赛口号,不超过8个字" /> | ||
39 | </div> | ||
40 | </div> | ||
41 | <div class="text-container space"> | ||
42 | <div class="label">家长姓名:</div> | ||
43 | <div class="form-item"> | ||
44 | <input v-model="formData.parentName" placeholder="请填写父亲/母亲称呼" /> | ||
45 | </div> | ||
46 | </div> | ||
47 | <div class="text-container space"> | ||
48 | <div class="label">联系方式:</div> | ||
49 | <div class="form-item"> | ||
50 | <input v-model="formData.parentMobile" placeholder="请填写正确手机号码" /> | ||
51 | </div> | ||
52 | </div> | ||
53 | <div class="text-container space"> | ||
54 | <div class="label">照片/视频:</div> | ||
55 | <div class="item-group top"> | ||
56 | <div> | ||
57 | <upload-item v-model="formData.worksList"></upload-item> | ||
58 | </div> | ||
59 | <div class="tips">可上传1-3张照片,首张默认为海报图</div> | ||
60 | </div> | ||
61 | </div> | ||
62 | </div> | ||
63 | <div class="sys-btn-02" :class="{disabled : !autoRegister}" @click="submitFormHandler">确认提交</div> | ||
64 | |||
65 | <div class="center base-margin auto-register-tips" @click="acceptRegisterHandler"> | ||
66 | <div class="icon-register" :class="{activity : autoRegister}"></div> | ||
67 | <div class="tips">自动注册为立白集团会员,立享会员权益,详见“更多福利”</div> | ||
68 | </div> | ||
69 | |||
70 | <van-popup position="bottom" :style="{ height: '40%' }" v-model="area.show"> | ||
71 | <van-area | ||
72 | :area-list="areaList" | ||
73 | :columns-num="2" | ||
74 | title="选择城市" | ||
75 | :value="formData.cityCode" | ||
76 | @cancel="area.show = false" | ||
77 | @confirm="confirmSelectCityHandler" | ||
78 | /> | ||
79 | </van-popup> | ||
80 | </div> | ||
81 | </template> | ||
82 | |||
83 | <script> | ||
84 | let urls = { | ||
85 | area: "https://api.k.wxpai.cn/bizproxy/kdapi/area", | ||
86 | submit: "/jiajiaCHApi/app/works/submit" | ||
87 | }; | ||
88 | |||
89 | import UploadItem from "./UploadItem"; | ||
90 | import { httpGet, httpPost } from "@/api/fetch-api"; | ||
91 | import AreaList from "@/api/area"; | ||
92 | |||
93 | import Vue from "vue"; | ||
94 | import { Toast } from "vant"; | ||
95 | import { Area } from "vant"; | ||
96 | import { Popup } from "vant"; | ||
97 | |||
98 | Vue.use(Popup); | ||
99 | Vue.use(Area); | ||
100 | Vue.use(Toast); | ||
101 | |||
102 | export default { | ||
103 | props: ["value"], | ||
104 | data() { | ||
105 | return { | ||
106 | autoRegister: true, | ||
107 | successModelVisiable: true, | ||
108 | area: { | ||
109 | show: false | ||
110 | }, | ||
111 | formData: this.value | ||
112 | }; | ||
113 | }, | ||
114 | methods: { | ||
115 | selectCityHandler() { | ||
116 | if (!this.formData.cityCode) { | ||
117 | this.formData.cityCode = "110100"; | ||
118 | } | ||
119 | this.area.show = true; | ||
120 | }, | ||
121 | confirmSelectCityHandler(res) { | ||
122 | let province = res[0]; | ||
123 | let city = res[1]; | ||
124 | if (!city) { | ||
125 | return; | ||
126 | } | ||
127 | this.formData.province = province.name; | ||
128 | this.formData.provinceCode = province.code; | ||
129 | this.formData.city = city.name; | ||
130 | this.formData.cityCode = city.code; | ||
131 | this.area.show = false; | ||
132 | }, | ||
133 | acceptRegisterHandler() { | ||
134 | this.autoRegister = !this.autoRegister; | ||
135 | if (!this.autoRegister) { | ||
136 | } | ||
137 | }, | ||
138 | submitFormHandler() { | ||
139 | if (!this.autoRegister) { | ||
140 | return; | ||
141 | } | ||
142 | if (!this.formData.name) { | ||
143 | Toast("请填写“参数者姓名”"); | ||
144 | return; | ||
145 | } | ||
146 | if (!this.formData.province) { | ||
147 | Toast("请选择“所属地区”"); | ||
148 | return; | ||
149 | } | ||
150 | if (!this.formData.profile) { | ||
151 | Toast("请填写“个人简介”"); | ||
152 | return; | ||
153 | } | ||
154 | if (!this.formData.slogan) { | ||
155 | Toast("请填写“竞赛宣言”"); | ||
156 | return; | ||
157 | } | ||
158 | if (this.formData.slogan.length > 8) { | ||
159 | Toast("“竞赛宣言”不要超过8个字"); | ||
160 | return; | ||
161 | } | ||
162 | if (!this.formData.parentName) { | ||
163 | Toast("请填写“家长姓名”"); | ||
164 | return; | ||
165 | } | ||
166 | if (!this.formData.parentMobile) { | ||
167 | Toast("请填写“联系方式”"); | ||
168 | return; | ||
169 | } | ||
170 | if ( | ||
171 | this.formData.parentMobile.indexOf("1") != 0 || | ||
172 | this.formData.parentMobile.length != 11 | ||
173 | ) { | ||
174 | Toast("请填写正确的“联系方式”"); | ||
175 | return; | ||
176 | } | ||
177 | if (!this.formData.worksList || this.formData.worksList.length == 0) { | ||
178 | Toast("请上传作品"); | ||
179 | return; | ||
180 | } | ||
181 | |||
182 | Toast.loading({ | ||
183 | mask: true, | ||
184 | message: "数据提交中..." | ||
185 | }); | ||
186 | httpPost({ url: urls.submit, data: this.formData }).then(res => { | ||
187 | Toast.clear(); | ||
188 | this.$emit("submit", res); | ||
189 | }); | ||
190 | } | ||
191 | }, | ||
192 | computed: { | ||
193 | areaList() { | ||
194 | return AreaList; | ||
195 | } | ||
196 | }, | ||
197 | components: { | ||
198 | UploadItem | ||
199 | }, | ||
200 | created() {} | ||
201 | }; | ||
202 | </script> | ||
203 | |||
204 | <style lang="scss" scoped> | ||
205 | .content { | ||
206 | margin: 85px auto 60px auto; | ||
207 | padding-bottom: 60px; | ||
208 | |||
209 | .head-line { | ||
210 | height: 60px; | ||
211 | } | ||
212 | |||
213 | .edit { | ||
214 | width: 630px; | ||
215 | text-align: right; | ||
216 | u { | ||
217 | font-size: 24px; | ||
218 | color: #5db288; | ||
219 | position: relative; | ||
220 | z-index: 1000; | ||
221 | } | ||
222 | } | ||
223 | |||
224 | .swipe { | ||
225 | width: 630px; | ||
226 | height: 320px; | ||
227 | margin: auto; | ||
228 | border: 2px solid #82acae; | ||
229 | border-radius: 30px; | ||
230 | } | ||
231 | |||
232 | .space { | ||
233 | margin-top: 20px !important; | ||
234 | } | ||
235 | .top { | ||
236 | display: flex; | ||
237 | align-items: flex-start !important; | ||
238 | } | ||
239 | |||
240 | .inline-group-width { | ||
241 | width: 500px; | ||
242 | } | ||
243 | |||
244 | .inline-group { | ||
245 | display: flex; | ||
246 | justify-content: space-between; | ||
247 | align-items: center; | ||
248 | } | ||
249 | |||
250 | .text-container { | ||
251 | display: flex; | ||
252 | align-items: center; | ||
253 | width: 620px; | ||
254 | margin: auto; | ||
255 | |||
256 | .inline { | ||
257 | width: 315px !important; | ||
258 | } | ||
259 | |||
260 | .inline-02 { | ||
261 | width: 180px !important; | ||
262 | padding: 0 30px; | ||
263 | .label { | ||
264 | font-size: 20px; | ||
265 | } | ||
266 | } | ||
267 | |||
268 | .right { | ||
269 | justify-content: flex-end !important; | ||
270 | } | ||
271 | |||
272 | .label { | ||
273 | min-width: 128px; | ||
274 | font-size: 20px; | ||
275 | text-align: left; | ||
276 | } | ||
277 | .msg { | ||
278 | color: #303531; | ||
279 | font-size: 24px; | ||
280 | text-align: left; | ||
281 | } | ||
282 | .primay { | ||
283 | font-size: 32px !important; | ||
284 | font-weight: 600; | ||
285 | color: #ff9e30; | ||
286 | } | ||
287 | |||
288 | .form-item { | ||
289 | width: 500px; | ||
290 | height: 52px; | ||
291 | border: 1px solid #82acae; | ||
292 | background-color: #addfe1; | ||
293 | border-radius: 26px; | ||
294 | line-height: 52px; | ||
295 | display: flex; | ||
296 | align-items: center; | ||
297 | |||
298 | input { | ||
299 | margin-left: 25px; | ||
300 | line-height: 52px; | ||
301 | height: 52px; | ||
302 | border: none; | ||
303 | width: 90%; | ||
304 | height: 100%; | ||
305 | background-color: transparent; | ||
306 | position: relative; | ||
307 | z-index: 1000; | ||
308 | font-size: 22px; | ||
309 | } | ||
310 | } | ||
311 | } | ||
312 | |||
313 | input::-webkit-input-placeholder { | ||
314 | color: #4f9984; | ||
315 | font-size: 18px; | ||
316 | } | ||
317 | |||
318 | } | ||
319 | |||
320 | .view-btn-group { | ||
321 | display: flex; | ||
322 | width: 730px; | ||
323 | margin: auto; | ||
324 | justify-content: space-between; | ||
325 | margin-bottom: 200px; | ||
326 | |||
327 | .sys-btn-02 { | ||
328 | width: 300px; | ||
329 | line-height: 90px; | ||
330 | } | ||
331 | } | ||
332 | |||
333 | .auto-register-tips { | ||
334 | width: 700px; | ||
335 | margin: auto; | ||
336 | } | ||
337 | |||
338 | .icon-draw-down { | ||
339 | width: 30px; | ||
340 | height: 18px; | ||
341 | background: url(../../../assets/imgs/draw-down.png) no-repeat; | ||
342 | background-size: 100%; | ||
343 | } | ||
344 | |||
345 | .base-margin { | ||
346 | margin-top: 40px; | ||
347 | } | ||
348 | |||
349 | .icon-register { | ||
350 | width: 30px; | ||
351 | height: 30px; | ||
352 | background: url(../../../assets/imgs/checkbox-uncheck.png) no-repeat; | ||
353 | background-size: 100%; | ||
354 | } | ||
355 | |||
356 | .icon-register.activity { | ||
357 | width: 30px; | ||
358 | height: 30px; | ||
359 | background: url(../../../assets/imgs/checkbox-checked.png) no-repeat; | ||
360 | background-size: 100%; | ||
361 | } | ||
362 | |||
363 | .center { | ||
364 | display: flex; | ||
365 | justify-content: center; | ||
366 | align-items: center; | ||
367 | } | ||
368 | |||
369 | .disabled { | ||
370 | filter: grayscale(100%); | ||
371 | } | ||
372 | |||
373 | .tips { | ||
374 | font-size: 20px; | ||
375 | color: #064e39; | ||
376 | padding-left: 10px; | ||
377 | text-align: left; | ||
378 | } | ||
379 | </style> |
src/pages/sign/components/UploadItem.vue
0 → 100644
1 | <template> | ||
2 | <div> | ||
3 | <div class="img-container" v-for="(item,index) in fileList" :key="index"> | ||
4 | <img :src="item.worksUrl" /> | ||
5 | <i class="van-icon van-icon-delete" @click="deleteImageHandler(index)"></i> | ||
6 | </div> | ||
7 | <van-uploader | ||
8 | ref="vanUploader" | ||
9 | class="uploader" | ||
10 | :after-read="uploadSumit" | ||
11 | v-if="!fileList || fileList.length < 3" | ||
12 | >+</van-uploader> | ||
13 | </div> | ||
14 | </template> | ||
15 | |||
16 | |||
17 | |||
18 | <script> | ||
19 | import { request } from "@/api/fetch-api.js"; | ||
20 | |||
21 | import Vue from "vue"; | ||
22 | import { Uploader } from "vant"; | ||
23 | Vue.use(Uploader); | ||
24 | |||
25 | /** | ||
26 | * 外层插件可通过监听:v-on:before-upload;v-on:after-upload两个事件监听上传结果 | ||
27 | * after-upload(success, src) | ||
28 | */ | ||
29 | |||
30 | export default { | ||
31 | props: ["value"], | ||
32 | data() { | ||
33 | return { | ||
34 | fileList: this.value, | ||
35 | uploadUrl: "https://api.k.wxpai.cn/bizproxy/kdapi/file/upload", | ||
36 | }; | ||
37 | }, | ||
38 | methods: { | ||
39 | uploadSumit(params) { | ||
40 | console.log(params); | ||
41 | let data = { | ||
42 | path: "/pro/jiajiaChildrenHost", | ||
43 | file: params.file | ||
44 | }; | ||
45 | request | ||
46 | .form(this.uploadUrl, data) | ||
47 | .then(result => { | ||
48 | let uploadResult = { | ||
49 | worksUrl: result.data.content, | ||
50 | worksType: params.file.type.indexOf("image") >= 0 ? "pic" : "video" | ||
51 | }; | ||
52 | if (!this.fileList) { | ||
53 | this.fileList = []; | ||
54 | } | ||
55 | this.fileList.push(uploadResult); | ||
56 | this.$emit("input", this.fileList); | ||
57 | }) | ||
58 | .catch(res => {}); | ||
59 | }, | ||
60 | deleteImageHandler(index) { | ||
61 | this.fileList.splice(index, 1); | ||
62 | } | ||
63 | }, | ||
64 | computed: { | ||
65 | currentValue: function() { | ||
66 | return this.value; | ||
67 | } | ||
68 | } | ||
69 | }; | ||
70 | </script> | ||
71 | |||
72 | <style lang="scss" scoped> | ||
73 | .uploader { | ||
74 | border: 1px solid #82acae; | ||
75 | border-radius: 6px; | ||
76 | position: relative; | ||
77 | overflow: hidden; | ||
78 | padding: 10px; | ||
79 | background-color: #addfe1; | ||
80 | width: 120px; | ||
81 | min-height: 120px; | ||
82 | font-size: 40px; | ||
83 | line-height: 120px; | ||
84 | text-align: center; | ||
85 | font-weight: bold; | ||
86 | } | ||
87 | |||
88 | .img-container { | ||
89 | border: 1px solid #82acae; | ||
90 | border-radius: 6px; | ||
91 | position: relative; | ||
92 | overflow: hidden; | ||
93 | padding: 10px; | ||
94 | background-color: #addfe1; | ||
95 | width: 120px; | ||
96 | text-align: center; | ||
97 | font-weight: bold; | ||
98 | margin-bottom: 10px; | ||
99 | img { | ||
100 | width: 100%; | ||
101 | } | ||
102 | |||
103 | .van-icon { | ||
104 | background-color: rgba($color: #000000, $alpha: 0.3); | ||
105 | position: absolute; | ||
106 | right: 10px; | ||
107 | bottom: 5px; | ||
108 | font-size: 40px; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | .avatar { | ||
113 | max-width: 120px; | ||
114 | max-height: 120px; | ||
115 | display: block; | ||
116 | } | ||
117 | </style> |
src/pages/sign/components/ViewModel.vue
0 → 100644
1 | <template> | ||
2 | <div class="viewClass"> | ||
3 | <div class="sys-container-panel content"> | ||
4 | <div class="container-title">我要报名</div> | ||
5 | <div class="head-line"></div> | ||
6 | <div class="edit"> | ||
7 | <u @click="formEditHandler">信息编辑</u> | ||
8 | </div> | ||
9 | <div class="swipe"> | ||
10 | <van-swipe :autoplay="5000"> | ||
11 | <van-swipe-item v-for="(works, index) in formData.worksList" :key="index"> | ||
12 | <img :src="works.worksUrl" /> | ||
13 | </van-swipe-item> | ||
14 | </van-swipe> | ||
15 | </div> | ||
16 | <div class="text-container space"> | ||
17 | <div class="text-container inline"> | ||
18 | <div class="label">参数编号:</div> | ||
19 | <div class="msg">{{formData.worksNo}}</div> | ||
20 | </div> | ||
21 | |||
22 | <div class="text-container inline right"> | ||
23 | <div class="label">目前人气值:</div> | ||
24 | <div class="msg primay">{{formData.praiseNumber}}</div> | ||
25 | </div> | ||
26 | </div> | ||
27 | |||
28 | <div class="text-container space"> | ||
29 | <div class="label">来自城市:</div> | ||
30 | <div class="msg">{{formData.province}} {{formData.city}}</div> | ||
31 | </div> | ||
32 | |||
33 | <div class="text-container space top"> | ||
34 | <div class="label">我的简介:</div> | ||
35 | <div class="msg">{{formData.profile}}</div> | ||
36 | </div> | ||
37 | |||
38 | <div class="text-container space top"> | ||
39 | <div class="label">竞赛宣言:</div> | ||
40 | <div class="msg">{{formData.slogan}}</div> | ||
41 | </div> | ||
42 | |||
43 | <div class="privacy"> | ||
44 | <hr /> | ||
45 | <div class="text-container space top"> | ||
46 | <div class="label">家长称呼:</div> | ||
47 | <div class="msg">{{formData.parentName}}</div> | ||
48 | </div> | ||
49 | </div> | ||
50 | </div> | ||
51 | |||
52 | <div class="view-btn-group"> | ||
53 | <div class="sys-btn-02" @click="selfPraiseHandler">投自己一票</div> | ||
54 | <div class="sys-btn-02" @click="showShareHandler">呼叫亲友团</div> | ||
55 | </div> | ||
56 | </div> | ||
57 | </template> | ||
58 | |||
59 | <script> | ||
60 | let urls = {}; | ||
61 | |||
62 | import { httpGet, httpPost } from "@/api/fetch-api"; | ||
63 | |||
64 | import Vue from "vue"; | ||
65 | import { Toast } from "vant"; | ||
66 | import { Popup } from "vant"; | ||
67 | |||
68 | Vue.use(Popup); | ||
69 | Vue.use(Toast); | ||
70 | |||
71 | export default { | ||
72 | props: ["value"], | ||
73 | data() { | ||
74 | return { | ||
75 | formData: this.value | ||
76 | }; | ||
77 | }, | ||
78 | methods: { | ||
79 | formEditHandler() { | ||
80 | this.$emit("edit"); | ||
81 | }, | ||
82 | selfPraiseHandler() { | ||
83 | // 自己点赞 | ||
84 | }, | ||
85 | showShareHandler() { | ||
86 | // 出现分享层 | ||
87 | } | ||
88 | }, | ||
89 | created() { | ||
90 | console.log("view model === ", this.formData); | ||
91 | } | ||
92 | }; | ||
93 | </script> | ||
94 | |||
95 | <style lang="scss" scoped> | ||
96 | .content { | ||
97 | margin: 85px auto 60px auto; | ||
98 | padding-bottom: 60px; | ||
99 | |||
100 | .head-line { | ||
101 | height: 60px; | ||
102 | } | ||
103 | |||
104 | .edit { | ||
105 | width: 630px; | ||
106 | text-align: right; | ||
107 | u { | ||
108 | font-size: 24px; | ||
109 | color: #5db288; | ||
110 | position: relative; | ||
111 | z-index: 1000; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | .swipe { | ||
116 | width: 630px; | ||
117 | height: 320px; | ||
118 | margin: auto; | ||
119 | border: 2px solid #82acae; | ||
120 | border-radius: 30px; | ||
121 | |||
122 | img { | ||
123 | max-height: 300px; | ||
124 | max-width: 600px; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | .space { | ||
129 | margin-top: 20px !important; | ||
130 | } | ||
131 | .top { | ||
132 | display: flex; | ||
133 | align-items: flex-start !important; | ||
134 | } | ||
135 | |||
136 | .inline-group-width { | ||
137 | width: 500px; | ||
138 | } | ||
139 | |||
140 | .inline-group { | ||
141 | display: flex; | ||
142 | justify-content: space-between; | ||
143 | align-items: center; | ||
144 | } | ||
145 | |||
146 | .text-container { | ||
147 | display: flex; | ||
148 | align-items: center; | ||
149 | width: 620px; | ||
150 | margin: auto; | ||
151 | |||
152 | .inline { | ||
153 | width: 315px !important; | ||
154 | } | ||
155 | |||
156 | .inline-02 { | ||
157 | width: 180px !important; | ||
158 | padding: 0 30px; | ||
159 | .label { | ||
160 | font-size: 20px; | ||
161 | } | ||
162 | } | ||
163 | |||
164 | .right { | ||
165 | justify-content: flex-end !important; | ||
166 | } | ||
167 | |||
168 | .label { | ||
169 | min-width: 128px; | ||
170 | font-size: 20px; | ||
171 | text-align: left; | ||
172 | } | ||
173 | .msg { | ||
174 | color: #303531; | ||
175 | font-size: 24px; | ||
176 | text-align: left; | ||
177 | } | ||
178 | .primay { | ||
179 | font-size: 32px !important; | ||
180 | font-weight: 600; | ||
181 | color: #ff9e30; | ||
182 | } | ||
183 | } | ||
184 | |||
185 | .privacy { | ||
186 | width: 630px; | ||
187 | margin: auto; | ||
188 | hr { | ||
189 | border-top: 3px dashed #d4d1c5; | ||
190 | margin: 60px auto; | ||
191 | } | ||
192 | } | ||
193 | } | ||
194 | |||
195 | .view-btn-group { | ||
196 | display: flex; | ||
197 | width: 730px; | ||
198 | margin: auto; | ||
199 | justify-content: space-between; | ||
200 | margin-bottom: 200px; | ||
201 | |||
202 | .sys-btn-02 { | ||
203 | width: 300px; | ||
204 | line-height: 90px; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | .auto-register-tips { | ||
209 | width: 700px; | ||
210 | margin: auto; | ||
211 | } | ||
212 | |||
213 | .icon-draw-down { | ||
214 | width: 30px; | ||
215 | height: 18px; | ||
216 | background: url(../../../assets/imgs/draw-down.png) no-repeat; | ||
217 | background-size: 100%; | ||
218 | } | ||
219 | </style> |
src/pages/sign/index.vue
0 → 100644
1 | <template> | ||
2 | <div class="home"> | ||
3 | <div class="head-leap"></div> | ||
4 | |||
5 | <ViewModel v-model="formData" v-if="init && !formEdit" v-on:edit="formEdit=true"></ViewModel> | ||
6 | <EditModel v-model="formData" v-if="init && formEdit" v-on:submit="initActivity"></EditModel> | ||
7 | |||
8 | <div class="bottom-line"></div> | ||
9 | |||
10 | <bottom-tool v-model="activityIndex"></bottom-tool> | ||
11 | |||
12 | <!-- <van-popup class="messagePopue" v-model="successModelVisiable" :close-on-click-overlay="false"> | ||
13 | <div></div> | ||
14 | </van-popup>--> | ||
15 | </div> | ||
16 | </template> | ||
17 | |||
18 | <script> | ||
19 | let urls = { | ||
20 | myWork: "/jiajiaCHApi/app/works", | ||
21 | area: "https://api.k.wxpai.cn/bizproxy/kdapi/area" | ||
22 | }; | ||
23 | |||
24 | import BottomTool from "@/components/bottom-tools/bottom-tools"; | ||
25 | import EditModel from "./components/EditModel"; | ||
26 | import ViewModel from "./components/ViewModel"; | ||
27 | |||
28 | import { httpGet, httpPost } from "@/api/fetch-api"; | ||
29 | import AreaList from "@/api/area"; | ||
30 | |||
31 | import Vue from "vue"; | ||
32 | import { Toast } from "vant"; | ||
33 | import { Area } from "vant"; | ||
34 | import { Popup } from "vant"; | ||
35 | import { Swipe, SwipeItem } from "vant"; | ||
36 | |||
37 | Vue.use(Popup); | ||
38 | Vue.use(Area); | ||
39 | Vue.use(Toast); | ||
40 | Vue.use(Swipe).use(SwipeItem); | ||
41 | |||
42 | export default { | ||
43 | name: "home", | ||
44 | data() { | ||
45 | return { | ||
46 | activityIndex: 2, | ||
47 | formEdit: false, | ||
48 | init: false, | ||
49 | isMy: 1, | ||
50 | successModelVisiable: true, | ||
51 | formData: { | ||
52 | name: "", | ||
53 | province: "", | ||
54 | provinceCode: "", | ||
55 | city: "", | ||
56 | cityCode: "", | ||
57 | profile: "", | ||
58 | slogan: "", | ||
59 | parentName: "", | ||
60 | parentMobile: "", | ||
61 | worksList: [] | ||
62 | } | ||
63 | }; | ||
64 | }, | ||
65 | methods: { | ||
66 | initActivity() { | ||
67 | Toast.loading({ | ||
68 | mask: true, | ||
69 | message: "加载中..." | ||
70 | }); | ||
71 | |||
72 | httpGet({ url: urls.myWork }).then(res => { | ||
73 | this.init = true; | ||
74 | Toast.clear(); | ||
75 | this.formData = res.data || {}; | ||
76 | if (!res.data) { | ||
77 | this.formEdit = true; | ||
78 | } else { | ||
79 | this.formEdit = false; | ||
80 | } | ||
81 | }); | ||
82 | } | ||
83 | }, | ||
84 | components: { | ||
85 | BottomTool, | ||
86 | EditModel, | ||
87 | ViewModel | ||
88 | }, | ||
89 | created() { | ||
90 | this.initActivity(); | ||
91 | } | ||
92 | }; | ||
93 | </script> | ||
94 | |||
95 | <style lang="scss" scoped> | ||
96 | .home { | ||
97 | position: relative; | ||
98 | text-align: center; | ||
99 | } | ||
100 | |||
101 | .head-leap { | ||
102 | width: 750px; | ||
103 | height: 231px; | ||
104 | background: url(../../assets/imgs/head-leap.png); | ||
105 | background-size: 100%; | ||
106 | position: fixed; | ||
107 | left: 0; | ||
108 | top: 0; | ||
109 | z-index: 999; | ||
110 | } | ||
111 | |||
112 | .bottom-line { | ||
113 | height: 250px; | ||
114 | background-color: transparent; | ||
115 | } | ||
116 | </style> |
src/pages/welfare/index.vue
0 → 100644
1 | <template> | ||
2 | <div class="home"> | ||
3 | <div class="header"></div> | ||
4 | |||
5 | <div class="qy"> | ||
6 | <div class="qrcode"> | ||
7 | <img src="../../assets/imgs/walfare-qrcode.png" /> | ||
8 | </div> | ||
9 | </div> | ||
10 | <div class="cj"> | ||
11 | <div class="sys-btn-02 btn-position" @click="toDraw">马上抽奖</div> | ||
12 | </div> | ||
13 | |||
14 | <div class="remain"></div> | ||
15 | <bottom-tool v-model="activityIndex"></bottom-tool> | ||
16 | </div> | ||
17 | </template> | ||
18 | |||
19 | <script> | ||
20 | import BottomTool from "@/components/bottom-tools/bottom-tools"; | ||
21 | |||
22 | export default { | ||
23 | name: "home", | ||
24 | data() { | ||
25 | return { | ||
26 | activityIndex: 4 | ||
27 | }; | ||
28 | }, | ||
29 | methods: { | ||
30 | toDraw() { | ||
31 | this.$router.push("/draw"); | ||
32 | } | ||
33 | }, | ||
34 | components: { | ||
35 | BottomTool | ||
36 | } | ||
37 | }; | ||
38 | </script> | ||
39 | |||
40 | <style lang="scss" scoped> | ||
41 | .home { | ||
42 | position: relative; | ||
43 | text-align: center; | ||
44 | background: url(../../assets/imgs/welfare-bg.jpg); | ||
45 | background-size: 100% auto; | ||
46 | } | ||
47 | .header { | ||
48 | width: 750px; | ||
49 | height: 247px; | ||
50 | background: url(../../assets/imgs/welfare-top.jpg); | ||
51 | background-size: 100%; | ||
52 | } | ||
53 | |||
54 | .qy { | ||
55 | width: 708px; | ||
56 | height: 1136px; | ||
57 | background: url(../../assets/imgs/welfare-qy.png); | ||
58 | background-size: 100%; | ||
59 | margin: auto; | ||
60 | margin-top: -100px; | ||
61 | position: relative; | ||
62 | |||
63 | .qrcode { | ||
64 | position: absolute; | ||
65 | width: 171px; | ||
66 | height: 171px; | ||
67 | left: 270px; | ||
68 | bottom: 140px; | ||
69 | img { | ||
70 | width: 100%; | ||
71 | } | ||
72 | } | ||
73 | } | ||
74 | |||
75 | .cj { | ||
76 | width: 718px; | ||
77 | height: 968px; | ||
78 | background: url(../../assets/imgs/welfare-cj.png); | ||
79 | background-size: 100%; | ||
80 | margin: auto; | ||
81 | margin-top: 50px; | ||
82 | position: relative; | ||
83 | } | ||
84 | |||
85 | .btn-position { | ||
86 | position: absolute; | ||
87 | bottom: 80px; | ||
88 | left: 188px; | ||
89 | } | ||
90 | |||
91 | .remain { | ||
92 | height: 150px; | ||
93 | } | ||
94 | </style> |
... | @@ -5,29 +5,53 @@ import Home from './pages/Home.vue' | ... | @@ -5,29 +5,53 @@ import Home from './pages/Home.vue' |
5 | Vue.use(Router) | 5 | Vue.use(Router) |
6 | 6 | ||
7 | const routes = [{ | 7 | const routes = [{ |
8 | path: '/', | 8 | path: '/', |
9 | name: 'home', | 9 | name: 'home', |
10 | component: Home, | 10 | component: Home, |
11 | meta: { | 11 | meta: { |
12 | title: '首页' | 12 | title: '加载中...' |
13 | } | ||
14 | }, | ||
15 | { | ||
16 | path: '/demo', | ||
17 | name: 'demo', | ||
18 | component: () => import('./pages/demo/index.vue'), | ||
19 | meta: { | ||
20 | title: '模板' | ||
21 | } | ||
22 | }, | ||
23 | { | ||
24 | path: '/about', | ||
25 | name: 'about', | ||
26 | component: () => import('./pages/About.vue'), | ||
27 | meta: { | ||
28 | title: '关于' | ||
29 | } | ||
30 | } | 13 | } |
14 | }, | ||
15 | { | ||
16 | path: '/index', | ||
17 | name: 'index', | ||
18 | component: () => import('./pages/index/index.vue'), | ||
19 | meta: { | ||
20 | title: '大赛介绍' | ||
21 | } | ||
22 | }, | ||
23 | { | ||
24 | path: '/sign', | ||
25 | name: 'sign', | ||
26 | component: () => import('./pages/sign/index.vue'), | ||
27 | meta: { | ||
28 | title: '我要报名' | ||
29 | } | ||
30 | }, | ||
31 | { | ||
32 | path: '/list', | ||
33 | name: 'list', | ||
34 | component: () => import('./pages/list/index.vue'), | ||
35 | meta: { | ||
36 | title: '人气评选' | ||
37 | } | ||
38 | }, | ||
39 | { | ||
40 | path: '/welfare', | ||
41 | name: 'welfare', | ||
42 | component: () => import('./pages/welfare/index.vue'), | ||
43 | meta: { | ||
44 | title: '更多福利' | ||
45 | } | ||
46 | }, | ||
47 | { | ||
48 | path: '/draw', | ||
49 | name: 'draw', | ||
50 | component: () => import('./pages/draw/index.vue'), | ||
51 | meta: { | ||
52 | title: '幸运抽奖' | ||
53 | } | ||
54 | } | ||
31 | ] | 55 | ] |
32 | 56 | ||
33 | // add route path | 57 | // add route path | ... | ... |
... | @@ -38,7 +38,7 @@ module.exports = { | ... | @@ -38,7 +38,7 @@ module.exports = { |
38 | 38 | ||
39 | // 它支持webPack-dev-server的所有选项 | 39 | // 它支持webPack-dev-server的所有选项 |
40 | devServer: { | 40 | devServer: { |
41 | host: "localhost", | 41 | host: "192.168.0.101", |
42 | port: 9001, // 端口号 | 42 | port: 9001, // 端口号 |
43 | https: false, // https:{type:Boolean} | 43 | https: false, // https:{type:Boolean} |
44 | open: true, //配置自动启动浏览器 | 44 | open: true, //配置自动启动浏览器 | ... | ... |
-
Please register or sign in to post a comment