正在显示
15 个修改的文件
包含
941 行增加
和
29 行删除
@@ -83,6 +83,15 @@ | @@ -83,6 +83,15 @@ | ||
83 | "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", | 83 | "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", |
84 | "dev": true | 84 | "dev": true |
85 | }, | 85 | }, |
86 | + "adler-32": { | ||
87 | + "version": "1.2.0", | ||
88 | + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", | ||
89 | + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", | ||
90 | + "requires": { | ||
91 | + "exit-on-epipe": "~1.0.1", | ||
92 | + "printj": "~1.1.0" | ||
93 | + } | ||
94 | + }, | ||
86 | "ajv": { | 95 | "ajv": { |
87 | "version": "6.10.2", | 96 | "version": "6.10.2", |
88 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", | 97 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", |
@@ -1947,6 +1956,17 @@ | @@ -1947,6 +1956,17 @@ | ||
1947 | "lazy-cache": "^1.0.3" | 1956 | "lazy-cache": "^1.0.3" |
1948 | } | 1957 | } |
1949 | }, | 1958 | }, |
1959 | + "cfb": { | ||
1960 | + "version": "1.1.3", | ||
1961 | + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz", | ||
1962 | + "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", | ||
1963 | + "requires": { | ||
1964 | + "adler-32": "~1.2.0", | ||
1965 | + "commander": "^2.16.0", | ||
1966 | + "crc-32": "~1.2.0", | ||
1967 | + "printj": "~1.1.2" | ||
1968 | + } | ||
1969 | + }, | ||
1950 | "chalk": { | 1970 | "chalk": { |
1951 | "version": "1.1.3", | 1971 | "version": "1.1.3", |
1952 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", | 1972 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", |
@@ -2303,6 +2323,22 @@ | @@ -2303,6 +2323,22 @@ | ||
2303 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", | 2323 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", |
2304 | "dev": true | 2324 | "dev": true |
2305 | }, | 2325 | }, |
2326 | + "codepage": { | ||
2327 | + "version": "1.14.0", | ||
2328 | + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", | ||
2329 | + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", | ||
2330 | + "requires": { | ||
2331 | + "commander": "~2.14.1", | ||
2332 | + "exit-on-epipe": "~1.0.1" | ||
2333 | + }, | ||
2334 | + "dependencies": { | ||
2335 | + "commander": { | ||
2336 | + "version": "2.14.1", | ||
2337 | + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", | ||
2338 | + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" | ||
2339 | + } | ||
2340 | + } | ||
2341 | + }, | ||
2306 | "collection-visit": { | 2342 | "collection-visit": { |
2307 | "version": "1.0.0", | 2343 | "version": "1.0.0", |
2308 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", | 2344 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", |
@@ -2375,8 +2411,7 @@ | @@ -2375,8 +2411,7 @@ | ||
2375 | "commander": { | 2411 | "commander": { |
2376 | "version": "2.17.1", | 2412 | "version": "2.17.1", |
2377 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", | 2413 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", |
2378 | - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", | ||
2379 | - "dev": true | 2414 | + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" |
2380 | }, | 2415 | }, |
2381 | "commondir": { | 2416 | "commondir": { |
2382 | "version": "1.0.1", | 2417 | "version": "1.0.1", |
@@ -2596,8 +2631,7 @@ | @@ -2596,8 +2631,7 @@ | ||
2596 | "core-util-is": { | 2631 | "core-util-is": { |
2597 | "version": "1.0.2", | 2632 | "version": "1.0.2", |
2598 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", | 2633 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", |
2599 | - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", | ||
2600 | - "dev": true | 2634 | + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" |
2601 | }, | 2635 | }, |
2602 | "cosmiconfig": { | 2636 | "cosmiconfig": { |
2603 | "version": "2.2.2", | 2637 | "version": "2.2.2", |
@@ -2622,6 +2656,15 @@ | @@ -2622,6 +2656,15 @@ | ||
2622 | } | 2656 | } |
2623 | } | 2657 | } |
2624 | }, | 2658 | }, |
2659 | + "crc-32": { | ||
2660 | + "version": "1.2.0", | ||
2661 | + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", | ||
2662 | + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", | ||
2663 | + "requires": { | ||
2664 | + "exit-on-epipe": "~1.0.1", | ||
2665 | + "printj": "~1.1.0" | ||
2666 | + } | ||
2667 | + }, | ||
2625 | "create-ecdh": { | 2668 | "create-ecdh": { |
2626 | "version": "4.0.3", | 2669 | "version": "4.0.3", |
2627 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", | 2670 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", |
@@ -3456,6 +3499,11 @@ | @@ -3456,6 +3499,11 @@ | ||
3456 | "safe-buffer": "^5.1.1" | 3499 | "safe-buffer": "^5.1.1" |
3457 | } | 3500 | } |
3458 | }, | 3501 | }, |
3502 | + "exit-on-epipe": { | ||
3503 | + "version": "1.0.1", | ||
3504 | + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", | ||
3505 | + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" | ||
3506 | + }, | ||
3459 | "expand-brackets": { | 3507 | "expand-brackets": { |
3460 | "version": "2.1.4", | 3508 | "version": "2.1.4", |
3461 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", | 3509 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", |
@@ -3769,6 +3817,11 @@ | @@ -3769,6 +3817,11 @@ | ||
3769 | } | 3817 | } |
3770 | } | 3818 | } |
3771 | }, | 3819 | }, |
3820 | + "file-saver": { | ||
3821 | + "version": "2.0.2", | ||
3822 | + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", | ||
3823 | + "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" | ||
3824 | + }, | ||
3772 | "filesize": { | 3825 | "filesize": { |
3773 | "version": "3.6.1", | 3826 | "version": "3.6.1", |
3774 | "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", | 3827 | "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", |
@@ -3917,6 +3970,11 @@ | @@ -3917,6 +3970,11 @@ | ||
3917 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", | 3970 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", |
3918 | "dev": true | 3971 | "dev": true |
3919 | }, | 3972 | }, |
3973 | + "frac": { | ||
3974 | + "version": "1.1.2", | ||
3975 | + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", | ||
3976 | + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" | ||
3977 | + }, | ||
3920 | "fragment-cache": { | 3978 | "fragment-cache": { |
3921 | "version": "0.2.1", | 3979 | "version": "0.2.1", |
3922 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", | 3980 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", |
@@ -5067,6 +5125,11 @@ | @@ -5067,6 +5125,11 @@ | ||
5067 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", | 5125 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", |
5068 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" | 5126 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" |
5069 | }, | 5127 | }, |
5128 | + "immediate": { | ||
5129 | + "version": "3.0.6", | ||
5130 | + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", | ||
5131 | + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" | ||
5132 | + }, | ||
5070 | "import-fresh": { | 5133 | "import-fresh": { |
5071 | "version": "3.1.0", | 5134 | "version": "3.1.0", |
5072 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", | 5135 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", |
@@ -5366,8 +5429,7 @@ | @@ -5366,8 +5429,7 @@ | ||
5366 | "isarray": { | 5429 | "isarray": { |
5367 | "version": "1.0.0", | 5430 | "version": "1.0.0", |
5368 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | 5431 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", |
5369 | - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", | ||
5370 | - "dev": true | 5432 | + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" |
5371 | }, | 5433 | }, |
5372 | "isexe": { | 5434 | "isexe": { |
5373 | "version": "2.0.0", | 5435 | "version": "2.0.0", |
@@ -5509,6 +5571,17 @@ | @@ -5509,6 +5571,17 @@ | ||
5509 | "verror": "1.10.0" | 5571 | "verror": "1.10.0" |
5510 | } | 5572 | } |
5511 | }, | 5573 | }, |
5574 | + "jszip": { | ||
5575 | + "version": "3.2.2", | ||
5576 | + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", | ||
5577 | + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", | ||
5578 | + "requires": { | ||
5579 | + "lie": "~3.3.0", | ||
5580 | + "pako": "~1.0.2", | ||
5581 | + "readable-stream": "~2.3.6", | ||
5582 | + "set-immediate-shim": "~1.0.1" | ||
5583 | + } | ||
5584 | + }, | ||
5512 | "kind-of": { | 5585 | "kind-of": { |
5513 | "version": "3.2.2", | 5586 | "version": "3.2.2", |
5514 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", | 5587 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", |
@@ -5542,6 +5615,14 @@ | @@ -5542,6 +5615,14 @@ | ||
5542 | "type-check": "~0.3.2" | 5615 | "type-check": "~0.3.2" |
5543 | } | 5616 | } |
5544 | }, | 5617 | }, |
5618 | + "lie": { | ||
5619 | + "version": "3.3.0", | ||
5620 | + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", | ||
5621 | + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", | ||
5622 | + "requires": { | ||
5623 | + "immediate": "~3.0.5" | ||
5624 | + } | ||
5625 | + }, | ||
5545 | "load-json-file": { | 5626 | "load-json-file": { |
5546 | "version": "1.1.0", | 5627 | "version": "1.1.0", |
5547 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", | 5628 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", |
@@ -9563,8 +9644,7 @@ | @@ -9563,8 +9644,7 @@ | ||
9563 | "pako": { | 9644 | "pako": { |
9564 | "version": "1.0.10", | 9645 | "version": "1.0.10", |
9565 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", | 9646 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", |
9566 | - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", | ||
9567 | - "dev": true | 9647 | + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" |
9568 | }, | 9648 | }, |
9569 | "parallel-transform": { | 9649 | "parallel-transform": { |
9570 | "version": "1.1.0", | 9650 | "version": "1.1.0", |
@@ -10265,6 +10345,11 @@ | @@ -10265,6 +10345,11 @@ | ||
10265 | "utila": "~0.4" | 10345 | "utila": "~0.4" |
10266 | } | 10346 | } |
10267 | }, | 10347 | }, |
10348 | + "printj": { | ||
10349 | + "version": "1.1.2", | ||
10350 | + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", | ||
10351 | + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" | ||
10352 | + }, | ||
10268 | "private": { | 10353 | "private": { |
10269 | "version": "0.1.8", | 10354 | "version": "0.1.8", |
10270 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", | 10355 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", |
@@ -10280,8 +10365,7 @@ | @@ -10280,8 +10365,7 @@ | ||
10280 | "process-nextick-args": { | 10365 | "process-nextick-args": { |
10281 | "version": "2.0.1", | 10366 | "version": "2.0.1", |
10282 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", | 10367 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |
10283 | - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", | ||
10284 | - "dev": true | 10368 | + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" |
10285 | }, | 10369 | }, |
10286 | "progress": { | 10370 | "progress": { |
10287 | "version": "2.0.3", | 10371 | "version": "2.0.3", |
@@ -10439,6 +10523,11 @@ | @@ -10439,6 +10523,11 @@ | ||
10439 | "unpipe": "1.0.0" | 10523 | "unpipe": "1.0.0" |
10440 | } | 10524 | } |
10441 | }, | 10525 | }, |
10526 | + "raw-loader": { | ||
10527 | + "version": "0.5.1", | ||
10528 | + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", | ||
10529 | + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=" | ||
10530 | + }, | ||
10442 | "read-pkg": { | 10531 | "read-pkg": { |
10443 | "version": "1.1.0", | 10532 | "version": "1.1.0", |
10444 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", | 10533 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", |
@@ -10483,7 +10572,6 @@ | @@ -10483,7 +10572,6 @@ | ||
10483 | "version": "2.3.6", | 10572 | "version": "2.3.6", |
10484 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", | 10573 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", |
10485 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", | 10574 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", |
10486 | - "dev": true, | ||
10487 | "requires": { | 10575 | "requires": { |
10488 | "core-util-is": "~1.0.0", | 10576 | "core-util-is": "~1.0.0", |
10489 | "inherits": "~2.0.3", | 10577 | "inherits": "~2.0.3", |
@@ -11120,8 +11208,7 @@ | @@ -11120,8 +11208,7 @@ | ||
11120 | "safe-buffer": { | 11208 | "safe-buffer": { |
11121 | "version": "5.1.2", | 11209 | "version": "5.1.2", |
11122 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | 11210 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
11123 | - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", | ||
11124 | - "dev": true | 11211 | + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" |
11125 | }, | 11212 | }, |
11126 | "safe-regex": { | 11213 | "safe-regex": { |
11127 | "version": "1.1.0", | 11214 | "version": "1.1.0", |
@@ -11237,6 +11324,14 @@ | @@ -11237,6 +11324,14 @@ | ||
11237 | } | 11324 | } |
11238 | } | 11325 | } |
11239 | }, | 11326 | }, |
11327 | + "script-loader": { | ||
11328 | + "version": "0.7.2", | ||
11329 | + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", | ||
11330 | + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", | ||
11331 | + "requires": { | ||
11332 | + "raw-loader": "~0.5.1" | ||
11333 | + } | ||
11334 | + }, | ||
11240 | "scss-tokenizer": { | 11335 | "scss-tokenizer": { |
11241 | "version": "0.2.3", | 11336 | "version": "0.2.3", |
11242 | "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", | 11337 | "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", |
@@ -11316,6 +11411,11 @@ | @@ -11316,6 +11411,11 @@ | ||
11316 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", | 11411 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", |
11317 | "dev": true | 11412 | "dev": true |
11318 | }, | 11413 | }, |
11414 | + "set-immediate-shim": { | ||
11415 | + "version": "1.0.1", | ||
11416 | + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", | ||
11417 | + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" | ||
11418 | + }, | ||
11319 | "set-value": { | 11419 | "set-value": { |
11320 | "version": "2.0.1", | 11420 | "version": "2.0.1", |
11321 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", | 11421 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", |
@@ -11641,6 +11741,14 @@ | @@ -11641,6 +11741,14 @@ | ||
11641 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", | 11741 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", |
11642 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" | 11742 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" |
11643 | }, | 11743 | }, |
11744 | + "ssf": { | ||
11745 | + "version": "0.10.2", | ||
11746 | + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz", | ||
11747 | + "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==", | ||
11748 | + "requires": { | ||
11749 | + "frac": "~1.1.2" | ||
11750 | + } | ||
11751 | + }, | ||
11644 | "sshpk": { | 11752 | "sshpk": { |
11645 | "version": "1.16.1", | 11753 | "version": "1.16.1", |
11646 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", | 11754 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", |
@@ -11778,7 +11886,6 @@ | @@ -11778,7 +11886,6 @@ | ||
11778 | "version": "1.1.1", | 11886 | "version": "1.1.1", |
11779 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", | 11887 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", |
11780 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | 11888 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
11781 | - "dev": true, | ||
11782 | "requires": { | 11889 | "requires": { |
11783 | "safe-buffer": "~5.1.0" | 11890 | "safe-buffer": "~5.1.0" |
11784 | } | 11891 | } |
@@ -12385,8 +12492,7 @@ | @@ -12385,8 +12492,7 @@ | ||
12385 | "util-deprecate": { | 12492 | "util-deprecate": { |
12386 | "version": "1.0.2", | 12493 | "version": "1.0.2", |
12387 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | 12494 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", |
12388 | - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", | ||
12389 | - "dev": true | 12495 | + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" |
12390 | }, | 12496 | }, |
12391 | "utila": { | 12497 | "utila": { |
12392 | "version": "0.4.0", | 12498 | "version": "0.4.0", |
@@ -13046,6 +13152,20 @@ | @@ -13046,6 +13152,20 @@ | ||
13046 | "async-limiter": "~1.0.0" | 13152 | "async-limiter": "~1.0.0" |
13047 | } | 13153 | } |
13048 | }, | 13154 | }, |
13155 | + "xlsx": { | ||
13156 | + "version": "0.15.1", | ||
13157 | + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.1.tgz", | ||
13158 | + "integrity": "sha512-z+o4+QPMc32EPboLCzJAz94o0Zyy+8jrmWTsVpfzwknFln9qDO6/HN1KrGGVC4//sGA7dh4R3HA4fhbGIKCDOA==", | ||
13159 | + "requires": { | ||
13160 | + "adler-32": "~1.2.0", | ||
13161 | + "cfb": "^1.1.3", | ||
13162 | + "codepage": "~1.14.0", | ||
13163 | + "commander": "~2.17.1", | ||
13164 | + "crc-32": "~1.2.0", | ||
13165 | + "exit-on-epipe": "~1.0.1", | ||
13166 | + "ssf": "~0.10.2" | ||
13167 | + } | ||
13168 | + }, | ||
13049 | "xtend": { | 13169 | "xtend": { |
13050 | "version": "4.0.2", | 13170 | "version": "4.0.2", |
13051 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | 13171 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", |
@@ -14,16 +14,20 @@ | @@ -14,16 +14,20 @@ | ||
14 | "echarts": "^3.3.2", | 14 | "echarts": "^3.3.2", |
15 | "element-ui": "^1.2.8", | 15 | "element-ui": "^1.2.8", |
16 | "eslint": "^5.14.1", | 16 | "eslint": "^5.14.1", |
17 | + "file-saver": "^2.0.2", | ||
17 | "font-awesome": "^4.7.0", | 18 | "font-awesome": "^4.7.0", |
18 | "install": "^0.12.2", | 19 | "install": "^0.12.2", |
19 | "js-cookie": "^2.2.1", | 20 | "js-cookie": "^2.2.1", |
21 | + "jszip": "^3.2.2", | ||
20 | "moment": "^2.24.0", | 22 | "moment": "^2.24.0", |
21 | "npm": "^6.8.0", | 23 | "npm": "^6.8.0", |
22 | "nprogress": "^0.2.0", | 24 | "nprogress": "^0.2.0", |
25 | + "script-loader": "^0.7.2", | ||
23 | "vue": "^2.2.2", | 26 | "vue": "^2.2.2", |
24 | "vue-i18n": "^8.14.0", | 27 | "vue-i18n": "^8.14.0", |
25 | "vue-router": "^2.3.0", | 28 | "vue-router": "^2.3.0", |
26 | - "vuex": "^2.0.0-rc.6" | 29 | + "vuex": "^2.0.0-rc.6", |
30 | + "xlsx": "^0.15.1" | ||
27 | }, | 31 | }, |
28 | "devDependencies": { | 32 | "devDependencies": { |
29 | "autoprefixer": "^6.7.2", | 33 | "autoprefixer": "^6.7.2", |
src/api/article.js
0 → 100755
1 | +import request from '@/utils/request' | ||
2 | + | ||
3 | +export function fetchList(query) { | ||
4 | + return request({ | ||
5 | + url: '/article/list', | ||
6 | + method: 'get', | ||
7 | + params: query | ||
8 | + }) | ||
9 | +} | ||
10 | + | ||
11 | +export function fetchArticle(id) { | ||
12 | + return request({ | ||
13 | + url: '/article/detail', | ||
14 | + method: 'get', | ||
15 | + params: { id } | ||
16 | + }) | ||
17 | +} | ||
18 | + | ||
19 | +export function fetchPv(pv) { | ||
20 | + return request({ | ||
21 | + url: '/article/pv', | ||
22 | + method: 'get', | ||
23 | + params: { pv } | ||
24 | + }) | ||
25 | +} | ||
26 | + | ||
27 | +export function createArticle(data) { | ||
28 | + return request({ | ||
29 | + url: '/article/create', | ||
30 | + method: 'post', | ||
31 | + data | ||
32 | + }) | ||
33 | +} | ||
34 | + | ||
35 | +export function updateArticle(data) { | ||
36 | + return request({ | ||
37 | + url: '/article/update', | ||
38 | + method: 'post', | ||
39 | + data | ||
40 | + }) | ||
41 | +} |
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | Auth: Lei.j1ang | 32 | Auth: Lei.j1ang |
33 | Created: 2018/1/19-13:59 | 33 | Created: 2018/1/19-13:59 |
34 | */ | 34 | */ |
35 | -import treeToArray from './eval' | 35 | +import treeToArray from './eval.js' |
36 | export default { | 36 | export default { |
37 | name: 'TreeTable', | 37 | name: 'TreeTable', |
38 | props: { | 38 | props: { |
@@ -68,8 +68,11 @@ export default { | @@ -68,8 +68,11 @@ export default { | ||
68 | }, | 68 | }, |
69 | methods: { | 69 | methods: { |
70 | showRow: function(row) { | 70 | showRow: function(row) { |
71 | - const show = (row.row.parent ? (row.row.parent._expanded && row.row.parent._show) : true) | ||
72 | - row.row._show = show | 71 | + this.data |
72 | + const show = (row.parent ? (row.parent._expanded && row.parent._show) : true) | ||
73 | +// const show = (row.row.parent ? (row.row.parent._expanded && row.row.parent._show) : true) | ||
74 | +// row.row._show = show | ||
75 | + row._show = show | ||
73 | return show ? 'animation:treeTableShow 1s;-webkit-animation:treeTableShow 1s;' : 'display:none;' | 76 | return show ? 'animation:treeTableShow 1s;-webkit-animation:treeTableShow 1s;' : 'display:none;' |
74 | }, | 77 | }, |
75 | // 切换下级是否展开 | 78 | // 切换下级是否展开 |
src/store/getters.js
0 → 100755
1 | +const getters = { | ||
2 | + sidebar: state => state.app.sidebar, | ||
3 | + language: state => state.app.language, | ||
4 | + size: state => state.app.size, | ||
5 | + device: state => state.app.device, | ||
6 | + visitedViews: state => state.tagsView.visitedViews, | ||
7 | + cachedViews: state => state.tagsView.cachedViews, | ||
8 | + token: state => state.user.token, | ||
9 | + avatar: state => state.user.avatar, | ||
10 | + name: state => state.user.name, | ||
11 | + introduction: state => state.user.introduction, | ||
12 | + status: state => state.user.status, | ||
13 | + roles: state => state.user.roles, | ||
14 | + setting: state => state.user.setting, | ||
15 | + permission_routers: state => state.permission.routers, | ||
16 | + addRouters: state => state.permission.addRouters, | ||
17 | + errorLogs: state => state.errorLog.logs | ||
18 | +} | ||
19 | +export default getters |
src/store/index.js
0 → 100755
1 | +import Vue from 'vue' | ||
2 | +import Vuex from 'vuex' | ||
3 | +import app from './modules/app' | ||
4 | +import errorLog from './modules/errorLog' | ||
5 | +import permission from './modules/permission' | ||
6 | +import tagsView from './modules/tagsView' | ||
7 | +import user from './modules/user' | ||
8 | +import getters from './getters' | ||
9 | + | ||
10 | +Vue.use(Vuex) | ||
11 | + | ||
12 | +const store = new Vuex.Store({ | ||
13 | + modules: { | ||
14 | + app, | ||
15 | + errorLog, | ||
16 | + permission, | ||
17 | + tagsView, | ||
18 | + user | ||
19 | + }, | ||
20 | + getters | ||
21 | +}) | ||
22 | + | ||
23 | +export default store |
src/store/modules/app.js
0 → 100755
1 | +import Cookies from 'js-cookie' | ||
2 | + | ||
3 | +const app = { | ||
4 | + state: { | ||
5 | + sidebar: { | ||
6 | + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, | ||
7 | + withoutAnimation: false | ||
8 | + }, | ||
9 | + device: 'desktop', | ||
10 | + language: Cookies.get('language') || 'en', | ||
11 | + size: Cookies.get('size') || 'medium' | ||
12 | + }, | ||
13 | + mutations: { | ||
14 | + TOGGLE_SIDEBAR: state => { | ||
15 | + state.sidebar.opened = !state.sidebar.opened | ||
16 | + state.sidebar.withoutAnimation = false | ||
17 | + if (state.sidebar.opened) { | ||
18 | + Cookies.set('sidebarStatus', 1) | ||
19 | + } else { | ||
20 | + Cookies.set('sidebarStatus', 0) | ||
21 | + } | ||
22 | + }, | ||
23 | + CLOSE_SIDEBAR: (state, withoutAnimation) => { | ||
24 | + Cookies.set('sidebarStatus', 0) | ||
25 | + state.sidebar.opened = false | ||
26 | + state.sidebar.withoutAnimation = withoutAnimation | ||
27 | + }, | ||
28 | + TOGGLE_DEVICE: (state, device) => { | ||
29 | + state.device = device | ||
30 | + }, | ||
31 | + SET_LANGUAGE: (state, language) => { | ||
32 | + state.language = language | ||
33 | + Cookies.set('language', language) | ||
34 | + }, | ||
35 | + SET_SIZE: (state, size) => { | ||
36 | + state.size = size | ||
37 | + Cookies.set('size', size) | ||
38 | + } | ||
39 | + }, | ||
40 | + actions: { | ||
41 | + toggleSideBar({ commit }) { | ||
42 | + commit('TOGGLE_SIDEBAR') | ||
43 | + }, | ||
44 | + closeSideBar({ commit }, { withoutAnimation }) { | ||
45 | + commit('CLOSE_SIDEBAR', withoutAnimation) | ||
46 | + }, | ||
47 | + toggleDevice({ commit }, device) { | ||
48 | + commit('TOGGLE_DEVICE', device) | ||
49 | + }, | ||
50 | + setLanguage({ commit }, language) { | ||
51 | + commit('SET_LANGUAGE', language) | ||
52 | + }, | ||
53 | + setSize({ commit }, size) { | ||
54 | + commit('SET_SIZE', size) | ||
55 | + } | ||
56 | + } | ||
57 | +} | ||
58 | + | ||
59 | +export default app |
src/store/modules/errorLog.js
0 → 100755
src/store/modules/permission.js
0 → 100755
1 | +import { asyncRouterMap, constantRouterMap } from '@/router' | ||
2 | + | ||
3 | +/** | ||
4 | + * 通过meta.role判断是否与当前用户权限匹配 | ||
5 | + * @param roles | ||
6 | + * @param route | ||
7 | + */ | ||
8 | +function hasPermission(roles, route) { | ||
9 | + if (route.meta && route.meta.roles) { | ||
10 | + return roles.some(role => route.meta.roles.includes(role)) | ||
11 | + } else { | ||
12 | + return true | ||
13 | + } | ||
14 | +} | ||
15 | + | ||
16 | +/** | ||
17 | + * 递归过滤异步路由表,返回符合用户角色权限的路由表 | ||
18 | + * @param routes asyncRouterMap | ||
19 | + * @param roles | ||
20 | + */ | ||
21 | +function filterAsyncRouter(routes, roles) { | ||
22 | + const res = [] | ||
23 | + | ||
24 | + routes.forEach(route => { | ||
25 | + const tmp = { ...route } | ||
26 | + if (hasPermission(roles, tmp)) { | ||
27 | + if (tmp.children) { | ||
28 | + tmp.children = filterAsyncRouter(tmp.children, roles) | ||
29 | + } | ||
30 | + res.push(tmp) | ||
31 | + } | ||
32 | + }) | ||
33 | + | ||
34 | + return res | ||
35 | +} | ||
36 | + | ||
37 | +const permission = { | ||
38 | + state: { | ||
39 | + routers: [], | ||
40 | + addRouters: [] | ||
41 | + }, | ||
42 | + mutations: { | ||
43 | + SET_ROUTERS: (state, routers) => { | ||
44 | + state.addRouters = routers | ||
45 | + state.routers = constantRouterMap.concat(routers) | ||
46 | + } | ||
47 | + }, | ||
48 | + actions: { | ||
49 | + GenerateRoutes({ commit }, data) { | ||
50 | + return new Promise(resolve => { | ||
51 | + const { roles } = data | ||
52 | + let accessedRouters | ||
53 | + if (roles.includes('admin')) { | ||
54 | + accessedRouters = asyncRouterMap | ||
55 | + } else { | ||
56 | + accessedRouters = filterAsyncRouter(asyncRouterMap, roles) | ||
57 | + } | ||
58 | + commit('SET_ROUTERS', accessedRouters) | ||
59 | + resolve() | ||
60 | + }) | ||
61 | + } | ||
62 | + } | ||
63 | +} | ||
64 | + | ||
65 | +export default permission |
src/store/modules/tagsView.js
0 → 100755
1 | +const tagsView = { | ||
2 | + state: { | ||
3 | + visitedViews: [], | ||
4 | + cachedViews: [] | ||
5 | + }, | ||
6 | + mutations: { | ||
7 | + ADD_VISITED_VIEW: (state, view) => { | ||
8 | + if (state.visitedViews.some(v => v.path === view.path)) return | ||
9 | + state.visitedViews.push( | ||
10 | + Object.assign({}, view, { | ||
11 | + title: view.meta.title || 'no-name' | ||
12 | + }) | ||
13 | + ) | ||
14 | + }, | ||
15 | + ADD_CACHED_VIEW: (state, view) => { | ||
16 | + if (state.cachedViews.includes(view.name)) return | ||
17 | + if (!view.meta.noCache) { | ||
18 | + state.cachedViews.push(view.name) | ||
19 | + } | ||
20 | + }, | ||
21 | + | ||
22 | + DEL_VISITED_VIEW: (state, view) => { | ||
23 | + for (const [i, v] of state.visitedViews.entries()) { | ||
24 | + if (v.path === view.path) { | ||
25 | + state.visitedViews.splice(i, 1) | ||
26 | + break | ||
27 | + } | ||
28 | + } | ||
29 | + }, | ||
30 | + DEL_CACHED_VIEW: (state, view) => { | ||
31 | + for (const i of state.cachedViews) { | ||
32 | + if (i === view.name) { | ||
33 | + const index = state.cachedViews.indexOf(i) | ||
34 | + state.cachedViews.splice(index, 1) | ||
35 | + break | ||
36 | + } | ||
37 | + } | ||
38 | + }, | ||
39 | + | ||
40 | + DEL_OTHERS_VISITED_VIEWS: (state, view) => { | ||
41 | + state.visitedViews = state.visitedViews.filter(v => { | ||
42 | + return v.meta.affix || v.path === view.path | ||
43 | + }) | ||
44 | + }, | ||
45 | + DEL_OTHERS_CACHED_VIEWS: (state, view) => { | ||
46 | + for (const i of state.cachedViews) { | ||
47 | + if (i === view.name) { | ||
48 | + const index = state.cachedViews.indexOf(i) | ||
49 | + state.cachedViews = state.cachedViews.slice(index, index + 1) | ||
50 | + break | ||
51 | + } | ||
52 | + } | ||
53 | + }, | ||
54 | + | ||
55 | + DEL_ALL_VISITED_VIEWS: state => { | ||
56 | + // keep affix tags | ||
57 | + const affixTags = state.visitedViews.filter(tag => tag.meta.affix) | ||
58 | + state.visitedViews = affixTags | ||
59 | + }, | ||
60 | + DEL_ALL_CACHED_VIEWS: state => { | ||
61 | + state.cachedViews = [] | ||
62 | + }, | ||
63 | + | ||
64 | + UPDATE_VISITED_VIEW: (state, view) => { | ||
65 | + for (let v of state.visitedViews) { | ||
66 | + if (v.path === view.path) { | ||
67 | + v = Object.assign(v, view) | ||
68 | + break | ||
69 | + } | ||
70 | + } | ||
71 | + } | ||
72 | + | ||
73 | + }, | ||
74 | + actions: { | ||
75 | + addView({ dispatch }, view) { | ||
76 | + dispatch('addVisitedView', view) | ||
77 | + dispatch('addCachedView', view) | ||
78 | + }, | ||
79 | + addVisitedView({ commit }, view) { | ||
80 | + commit('ADD_VISITED_VIEW', view) | ||
81 | + }, | ||
82 | + addCachedView({ commit }, view) { | ||
83 | + commit('ADD_CACHED_VIEW', view) | ||
84 | + }, | ||
85 | + | ||
86 | + delView({ dispatch, state }, view) { | ||
87 | + return new Promise(resolve => { | ||
88 | + dispatch('delVisitedView', view) | ||
89 | + dispatch('delCachedView', view) | ||
90 | + resolve({ | ||
91 | + visitedViews: [...state.visitedViews], | ||
92 | + cachedViews: [...state.cachedViews] | ||
93 | + }) | ||
94 | + }) | ||
95 | + }, | ||
96 | + delVisitedView({ commit, state }, view) { | ||
97 | + return new Promise(resolve => { | ||
98 | + commit('DEL_VISITED_VIEW', view) | ||
99 | + resolve([...state.visitedViews]) | ||
100 | + }) | ||
101 | + }, | ||
102 | + delCachedView({ commit, state }, view) { | ||
103 | + return new Promise(resolve => { | ||
104 | + commit('DEL_CACHED_VIEW', view) | ||
105 | + resolve([...state.cachedViews]) | ||
106 | + }) | ||
107 | + }, | ||
108 | + | ||
109 | + delOthersViews({ dispatch, state }, view) { | ||
110 | + return new Promise(resolve => { | ||
111 | + dispatch('delOthersVisitedViews', view) | ||
112 | + dispatch('delOthersCachedViews', view) | ||
113 | + resolve({ | ||
114 | + visitedViews: [...state.visitedViews], | ||
115 | + cachedViews: [...state.cachedViews] | ||
116 | + }) | ||
117 | + }) | ||
118 | + }, | ||
119 | + delOthersVisitedViews({ commit, state }, view) { | ||
120 | + return new Promise(resolve => { | ||
121 | + commit('DEL_OTHERS_VISITED_VIEWS', view) | ||
122 | + resolve([...state.visitedViews]) | ||
123 | + }) | ||
124 | + }, | ||
125 | + delOthersCachedViews({ commit, state }, view) { | ||
126 | + return new Promise(resolve => { | ||
127 | + commit('DEL_OTHERS_CACHED_VIEWS', view) | ||
128 | + resolve([...state.cachedViews]) | ||
129 | + }) | ||
130 | + }, | ||
131 | + | ||
132 | + delAllViews({ dispatch, state }, view) { | ||
133 | + return new Promise(resolve => { | ||
134 | + dispatch('delAllVisitedViews', view) | ||
135 | + dispatch('delAllCachedViews', view) | ||
136 | + resolve({ | ||
137 | + visitedViews: [...state.visitedViews], | ||
138 | + cachedViews: [...state.cachedViews] | ||
139 | + }) | ||
140 | + }) | ||
141 | + }, | ||
142 | + delAllVisitedViews({ commit, state }) { | ||
143 | + return new Promise(resolve => { | ||
144 | + commit('DEL_ALL_VISITED_VIEWS') | ||
145 | + resolve([...state.visitedViews]) | ||
146 | + }) | ||
147 | + }, | ||
148 | + delAllCachedViews({ commit, state }) { | ||
149 | + return new Promise(resolve => { | ||
150 | + commit('DEL_ALL_CACHED_VIEWS') | ||
151 | + resolve([...state.cachedViews]) | ||
152 | + }) | ||
153 | + }, | ||
154 | + | ||
155 | + updateVisitedView({ commit }, view) { | ||
156 | + commit('UPDATE_VISITED_VIEW', view) | ||
157 | + } | ||
158 | + } | ||
159 | +} | ||
160 | + | ||
161 | +export default tagsView |
src/store/modules/user.js
0 → 100755
1 | +import { loginByUsername, logout, getUserInfo } from '@/api/login' | ||
2 | +import { getToken, setToken, removeToken } from '@/utils/auth' | ||
3 | + | ||
4 | +const user = { | ||
5 | + state: { | ||
6 | + user: '', | ||
7 | + status: '', | ||
8 | + code: '', | ||
9 | + token: getToken(), | ||
10 | + name: '', | ||
11 | + avatar: '', | ||
12 | + introduction: '', | ||
13 | + roles: [], | ||
14 | + setting: { | ||
15 | + articlePlatform: [] | ||
16 | + } | ||
17 | + }, | ||
18 | + | ||
19 | + mutations: { | ||
20 | + SET_CODE: (state, code) => { | ||
21 | + state.code = code | ||
22 | + }, | ||
23 | + SET_TOKEN: (state, token) => { | ||
24 | + state.token = token | ||
25 | + }, | ||
26 | + SET_INTRODUCTION: (state, introduction) => { | ||
27 | + state.introduction = introduction | ||
28 | + }, | ||
29 | + SET_SETTING: (state, setting) => { | ||
30 | + state.setting = setting | ||
31 | + }, | ||
32 | + SET_STATUS: (state, status) => { | ||
33 | + state.status = status | ||
34 | + }, | ||
35 | + SET_NAME: (state, name) => { | ||
36 | + state.name = name | ||
37 | + }, | ||
38 | + SET_AVATAR: (state, avatar) => { | ||
39 | + state.avatar = avatar | ||
40 | + }, | ||
41 | + SET_ROLES: (state, roles) => { | ||
42 | + state.roles = roles | ||
43 | + } | ||
44 | + }, | ||
45 | + | ||
46 | + actions: { | ||
47 | + // 用户名登录 | ||
48 | + LoginByUsername({ commit }, userInfo) { | ||
49 | + const username = userInfo.username.trim() | ||
50 | + return new Promise((resolve, reject) => { | ||
51 | + loginByUsername(username, userInfo.password).then(response => { | ||
52 | + const data = response.data | ||
53 | + commit('SET_TOKEN', data.token) | ||
54 | + setToken(response.data.token) | ||
55 | + resolve() | ||
56 | + }).catch(error => { | ||
57 | + reject(error) | ||
58 | + }) | ||
59 | + }) | ||
60 | + }, | ||
61 | + | ||
62 | + // 获取用户信息 | ||
63 | + GetUserInfo({ commit, state }) { | ||
64 | + return new Promise((resolve, reject) => { | ||
65 | + getUserInfo(state.token).then(response => { | ||
66 | + // 由于mockjs 不支持自定义状态码只能这样hack | ||
67 | + if (!response.data) { | ||
68 | + reject('Verification failed, please login again.') | ||
69 | + } | ||
70 | + const data = response.data | ||
71 | + | ||
72 | + if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组 | ||
73 | + commit('SET_ROLES', data.roles) | ||
74 | + } else { | ||
75 | + reject('getInfo: roles must be a non-null array!') | ||
76 | + } | ||
77 | + | ||
78 | + commit('SET_NAME', data.name) | ||
79 | + commit('SET_AVATAR', data.avatar) | ||
80 | + commit('SET_INTRODUCTION', data.introduction) | ||
81 | + resolve(response) | ||
82 | + }).catch(error => { | ||
83 | + reject(error) | ||
84 | + }) | ||
85 | + }) | ||
86 | + }, | ||
87 | + | ||
88 | + // 第三方验证登录 | ||
89 | + // LoginByThirdparty({ commit, state }, code) { | ||
90 | + // return new Promise((resolve, reject) => { | ||
91 | + // commit('SET_CODE', code) | ||
92 | + // loginByThirdparty(state.status, state.email, state.code).then(response => { | ||
93 | + // commit('SET_TOKEN', response.data.token) | ||
94 | + // setToken(response.data.token) | ||
95 | + // resolve() | ||
96 | + // }).catch(error => { | ||
97 | + // reject(error) | ||
98 | + // }) | ||
99 | + // }) | ||
100 | + // }, | ||
101 | + | ||
102 | + // 登出 | ||
103 | + LogOut({ commit, state }) { | ||
104 | + return new Promise((resolve, reject) => { | ||
105 | + logout(state.token).then(() => { | ||
106 | + commit('SET_TOKEN', '') | ||
107 | + commit('SET_ROLES', []) | ||
108 | + removeToken() | ||
109 | + resolve() | ||
110 | + }).catch(error => { | ||
111 | + reject(error) | ||
112 | + }) | ||
113 | + }) | ||
114 | + }, | ||
115 | + | ||
116 | + // 前端 登出 | ||
117 | + FedLogOut({ commit }) { | ||
118 | + return new Promise(resolve => { | ||
119 | + commit('SET_TOKEN', '') | ||
120 | + removeToken() | ||
121 | + resolve() | ||
122 | + }) | ||
123 | + }, | ||
124 | + | ||
125 | + // 动态修改权限 | ||
126 | + ChangeRoles({ commit, dispatch }, role) { | ||
127 | + return new Promise(resolve => { | ||
128 | + commit('SET_TOKEN', role) | ||
129 | + setToken(role) | ||
130 | + getUserInfo(role).then(response => { | ||
131 | + const data = response.data | ||
132 | + commit('SET_ROLES', data.roles) | ||
133 | + commit('SET_NAME', data.name) | ||
134 | + commit('SET_AVATAR', data.avatar) | ||
135 | + commit('SET_INTRODUCTION', data.introduction) | ||
136 | + dispatch('GenerateRoutes', data) // 动态修改权限后 重绘侧边菜单 | ||
137 | + resolve() | ||
138 | + }) | ||
139 | + }) | ||
140 | + } | ||
141 | + } | ||
142 | +} | ||
143 | + | ||
144 | +export default user |
1 | import axios from 'axios' | 1 | import axios from 'axios' |
2 | import { Message } from 'element-ui' | 2 | import { Message } from 'element-ui' |
3 | -import store from '@/store' | ||
4 | -import { getToken } from '@/utils/auth' | ||
5 | 3 | ||
6 | // create an axios instance | 4 | // create an axios instance |
7 | const service = axios.create({ | 5 | const service = axios.create({ |
@@ -15,7 +13,7 @@ service.interceptors.request.use( | @@ -15,7 +13,7 @@ service.interceptors.request.use( | ||
15 | // Do something before request is sent | 13 | // Do something before request is sent |
16 | if (store.getters.token) { | 14 | if (store.getters.token) { |
17 | // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改 | 15 | // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改 |
18 | - config.headers['X-Token'] = getToken() | 16 | + // config.headers['X-Token'] = getToken() |
19 | } | 17 | } |
20 | return config | 18 | return config |
21 | }, | 19 | }, |
src/vendor/Export2Excel.js
0 → 100755
1 | +/* eslint-disable */ | ||
2 | +require('script-loader!file-saver'); | ||
3 | +import XLSX from 'xlsx' | ||
4 | + | ||
5 | +function generateArray(table) { | ||
6 | + var out = []; | ||
7 | + var rows = table.querySelectorAll('tr'); | ||
8 | + var ranges = []; | ||
9 | + for (var R = 0; R < rows.length; ++R) { | ||
10 | + var outRow = []; | ||
11 | + var row = rows[R]; | ||
12 | + var columns = row.querySelectorAll('td'); | ||
13 | + for (var C = 0; C < columns.length; ++C) { | ||
14 | + var cell = columns[C]; | ||
15 | + var colspan = cell.getAttribute('colspan'); | ||
16 | + var rowspan = cell.getAttribute('rowspan'); | ||
17 | + var cellValue = cell.innerText; | ||
18 | + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; | ||
19 | + | ||
20 | + //Skip ranges | ||
21 | + ranges.forEach(function (range) { | ||
22 | + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { | ||
23 | + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); | ||
24 | + } | ||
25 | + }); | ||
26 | + | ||
27 | + //Handle Row Span | ||
28 | + if (rowspan || colspan) { | ||
29 | + rowspan = rowspan || 1; | ||
30 | + colspan = colspan || 1; | ||
31 | + ranges.push({ | ||
32 | + s: { | ||
33 | + r: R, | ||
34 | + c: outRow.length | ||
35 | + }, | ||
36 | + e: { | ||
37 | + r: R + rowspan - 1, | ||
38 | + c: outRow.length + colspan - 1 | ||
39 | + } | ||
40 | + }); | ||
41 | + }; | ||
42 | + | ||
43 | + //Handle Value | ||
44 | + outRow.push(cellValue !== "" ? cellValue : null); | ||
45 | + | ||
46 | + //Handle Colspan | ||
47 | + if (colspan) | ||
48 | + for (var k = 0; k < colspan - 1; ++k) outRow.push(null); | ||
49 | + } | ||
50 | + out.push(outRow); | ||
51 | + } | ||
52 | + return [out, ranges]; | ||
53 | +}; | ||
54 | + | ||
55 | +function datenum(v, date1904) { | ||
56 | + if (date1904) v += 1462; | ||
57 | + var epoch = Date.parse(v); | ||
58 | + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); | ||
59 | +} | ||
60 | + | ||
61 | +function sheet_from_array_of_arrays(data, opts) { | ||
62 | + var ws = {}; | ||
63 | + var range = { | ||
64 | + s: { | ||
65 | + c: 10000000, | ||
66 | + r: 10000000 | ||
67 | + }, | ||
68 | + e: { | ||
69 | + c: 0, | ||
70 | + r: 0 | ||
71 | + } | ||
72 | + }; | ||
73 | + for (var R = 0; R != data.length; ++R) { | ||
74 | + for (var C = 0; C != data[R].length; ++C) { | ||
75 | + if (range.s.r > R) range.s.r = R; | ||
76 | + if (range.s.c > C) range.s.c = C; | ||
77 | + if (range.e.r < R) range.e.r = R; | ||
78 | + if (range.e.c < C) range.e.c = C; | ||
79 | + var cell = { | ||
80 | + v: data[R][C] | ||
81 | + }; | ||
82 | + if (cell.v == null) continue; | ||
83 | + var cell_ref = XLSX.utils.encode_cell({ | ||
84 | + c: C, | ||
85 | + r: R | ||
86 | + }); | ||
87 | + | ||
88 | + if (typeof cell.v === 'number') cell.t = 'n'; | ||
89 | + else if (typeof cell.v === 'boolean') cell.t = 'b'; | ||
90 | + else if (cell.v instanceof Date) { | ||
91 | + cell.t = 'n'; | ||
92 | + cell.z = XLSX.SSF._table[14]; | ||
93 | + cell.v = datenum(cell.v); | ||
94 | + } else cell.t = 's'; | ||
95 | + | ||
96 | + ws[cell_ref] = cell; | ||
97 | + } | ||
98 | + } | ||
99 | + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); | ||
100 | + return ws; | ||
101 | +} | ||
102 | + | ||
103 | +function Workbook() { | ||
104 | + if (!(this instanceof Workbook)) return new Workbook(); | ||
105 | + this.SheetNames = []; | ||
106 | + this.Sheets = {}; | ||
107 | +} | ||
108 | + | ||
109 | +function s2ab(s) { | ||
110 | + var buf = new ArrayBuffer(s.length); | ||
111 | + var view = new Uint8Array(buf); | ||
112 | + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; | ||
113 | + return buf; | ||
114 | +} | ||
115 | + | ||
116 | +export function export_table_to_excel(id) { | ||
117 | + var theTable = document.getElementById(id); | ||
118 | + var oo = generateArray(theTable); | ||
119 | + var ranges = oo[1]; | ||
120 | + | ||
121 | + /* original data */ | ||
122 | + var data = oo[0]; | ||
123 | + var ws_name = "SheetJS"; | ||
124 | + | ||
125 | + var wb = new Workbook(), | ||
126 | + ws = sheet_from_array_of_arrays(data); | ||
127 | + | ||
128 | + /* add ranges to worksheet */ | ||
129 | + // ws['!cols'] = ['apple', 'banan']; | ||
130 | + ws['!merges'] = ranges; | ||
131 | + | ||
132 | + /* add worksheet to workbook */ | ||
133 | + wb.SheetNames.push(ws_name); | ||
134 | + wb.Sheets[ws_name] = ws; | ||
135 | + | ||
136 | + var wbout = XLSX.write(wb, { | ||
137 | + bookType: 'xlsx', | ||
138 | + bookSST: false, | ||
139 | + type: 'binary' | ||
140 | + }); | ||
141 | + | ||
142 | + saveAs(new Blob([s2ab(wbout)], { | ||
143 | + type: "application/octet-stream" | ||
144 | + }), "test.xlsx") | ||
145 | +} | ||
146 | + | ||
147 | +export function export_json_to_excel({ | ||
148 | + header, | ||
149 | + data, | ||
150 | + filename, | ||
151 | + autoWidth = true, | ||
152 | + bookType= 'xlsx' | ||
153 | +} = {}) { | ||
154 | + /* original data */ | ||
155 | + filename = filename || 'excel-list' | ||
156 | + data = [...data] | ||
157 | + data.unshift(header); | ||
158 | + var ws_name = "SheetJS"; | ||
159 | + var wb = new Workbook(), | ||
160 | + ws = sheet_from_array_of_arrays(data); | ||
161 | + | ||
162 | + if (autoWidth) { | ||
163 | + /*设置worksheet每列的最大宽度*/ | ||
164 | + const colWidth = data.map(row => row.map(val => { | ||
165 | + /*先判断是否为null/undefined*/ | ||
166 | + if (val == null) { | ||
167 | + return { | ||
168 | + 'wch': 10 | ||
169 | + }; | ||
170 | + } | ||
171 | + /*再判断是否为中文*/ | ||
172 | + else if (val.toString().charCodeAt(0) > 255) { | ||
173 | + return { | ||
174 | + 'wch': val.toString().length * 2 | ||
175 | + }; | ||
176 | + } else { | ||
177 | + return { | ||
178 | + 'wch': val.toString().length | ||
179 | + }; | ||
180 | + } | ||
181 | + })) | ||
182 | + /*以第一行为初始值*/ | ||
183 | + let result = colWidth[0]; | ||
184 | + for (let i = 1; i < colWidth.length; i++) { | ||
185 | + for (let j = 0; j < colWidth[i].length; j++) { | ||
186 | + if (result[j]['wch'] < colWidth[i][j]['wch']) { | ||
187 | + result[j]['wch'] = colWidth[i][j]['wch']; | ||
188 | + } | ||
189 | + } | ||
190 | + } | ||
191 | + ws['!cols'] = result; | ||
192 | + } | ||
193 | + | ||
194 | + /* add worksheet to workbook */ | ||
195 | + wb.SheetNames.push(ws_name); | ||
196 | + wb.Sheets[ws_name] = ws; | ||
197 | + | ||
198 | + var wbout = XLSX.write(wb, { | ||
199 | + bookType: bookType, | ||
200 | + bookSST: false, | ||
201 | + type: 'binary' | ||
202 | + }); | ||
203 | + saveAs(new Blob([s2ab(wbout)], { | ||
204 | + type: "application/octet-stream" | ||
205 | + }), `${filename}.${bookType}`); | ||
206 | +} |
src/vendor/Export2Zip.js
0 → 100755
1 | +/* eslint-disable */ | ||
2 | +require('script-loader!file-saver'); | ||
3 | +import JSZip from 'jszip' | ||
4 | + | ||
5 | +export function export_txt_to_zip(th, jsonData, txtName, zipName) { | ||
6 | + const zip = new JSZip() | ||
7 | + const txt_name = txtName || 'file' | ||
8 | + const zip_name = zipName || 'file' | ||
9 | + const data = jsonData | ||
10 | + let txtData = `${th}\r\n` | ||
11 | + data.forEach((row) => { | ||
12 | + let tempStr = '' | ||
13 | + tempStr = row.toString() | ||
14 | + txtData += `${tempStr}\r\n` | ||
15 | + }) | ||
16 | + zip.file(`${txt_name}.txt`, txtData) | ||
17 | + zip.generateAsync({ | ||
18 | + type: "blob" | ||
19 | + }).then((blob) => { | ||
20 | + saveAs(blob, `${zip_name}.zip`) | ||
21 | + }, (err) => { | ||
22 | + alert('导出失败') | ||
23 | + }) | ||
24 | +} |
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">{{ $t('table.export') }}</el-button> | 9 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">{{ $t('table.export') }}</el-button> |
10 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-message" @click="handleCreate">批量发送</el-button> | 10 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-message" @click="handleCreate">批量发送</el-button> |
11 | </div> | 11 | </div> |
12 | - <tree-table :data="data" :eval-func="func" :eval-args="args" :expand-all="expandAll" stripe="true" style="font-size: 13px" border @selection-change="handleSelectionChange"> | 12 | + <tree-table :data="data" :eval-func="func" :eval-args="args" :expand-all="expandAll" stripe style="font-size: 13px" border @selection-change="handleSelectionChange"> |
13 | <el-table-column prop="waybillNo" label="主单号" width="110px" align="center" sortable> | 13 | <el-table-column prop="waybillNo" label="主单号" width="110px" align="center" sortable> |
14 | <template slot-scope="scope"> | 14 | <template slot-scope="scope"> |
15 | <span>{{ scope.row.waybillNo }}</span> | 15 | <span>{{ scope.row.waybillNo }}</span> |
@@ -80,7 +80,7 @@ | @@ -80,7 +80,7 @@ | ||
80 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> | 80 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> |
81 | 81 | ||
82 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" fullscreen="true"> | 82 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" fullscreen="true"> |
83 | - <el-form ref="" :inline="true" :label-position="left" :rules="rules" :model="temp" label-width="100px" style="font-size: 13px"> | 83 | + <el-form ref="" :inline="true" label-position="left" :rules="rules" :model="temp" label-width="100px" style="font-size: 13px"> |
84 | <div> | 84 | <div> |
85 | <el-tag type="info" effect="plain"> | 85 | <el-tag type="info" effect="plain"> |
86 | 航班信息 | 86 | 航班信息 |
@@ -350,7 +350,7 @@ | @@ -350,7 +350,7 @@ | ||
350 | Auth: Lei.j1ang | 350 | Auth: Lei.j1ang |
351 | Created: 2018/1/19-14:54 | 351 | Created: 2018/1/19-14:54 |
352 | */ | 352 | */ |
353 | - | 353 | +import { fetchList } from '@/api/article' |
354 | import treeTable from '@/components/TreeTable' | 354 | import treeTable from '@/components/TreeTable' |
355 | import treeToArray from './customEval' | 355 | import treeToArray from './customEval' |
356 | import Pagination from '@/components/Pagination' | 356 | import Pagination from '@/components/Pagination' |
@@ -359,7 +359,8 @@ import country from '@/utils/country.js' | @@ -359,7 +359,8 @@ import country from '@/utils/country.js' | ||
359 | import companyType from '@/utils/companyType.js' | 359 | import companyType from '@/utils/companyType.js' |
360 | import dangerGoods from '@/utils/dangerGoods.js' | 360 | import dangerGoods from '@/utils/dangerGoods.js' |
361 | import goodsPackage from '@/utils/goodsPackage.js' | 361 | import goodsPackage from '@/utils/goodsPackage.js' |
362 | - | 362 | +import excel from '@/vendor/Export2Excel' |
363 | +import { parseTime } from '@/utils' | ||
363 | const calendarTypeOptions = [ | 364 | const calendarTypeOptions = [ |
364 | { key: 'CN', display_name: 'China' }, | 365 | { key: 'CN', display_name: 'China' }, |
365 | { key: 'US', display_name: 'USA' }, | 366 | { key: 'US', display_name: 'USA' }, |
@@ -404,7 +405,9 @@ export default { | @@ -404,7 +405,9 @@ export default { | ||
404 | expandAll: true, | 405 | expandAll: true, |
405 | total: 1, | 406 | total: 1, |
406 | resend: true, | 407 | resend: true, |
407 | - listLoading: true, | 408 | + listLoading: false, |
409 | + downloadLoading: false, | ||
410 | + loading: false, | ||
408 | multipleSelection: [], | 411 | multipleSelection: [], |
409 | dialogFormVisible: false, | 412 | dialogFormVisible: false, |
410 | dialogStatus: '', | 413 | dialogStatus: '', |
@@ -517,7 +520,7 @@ export default { | @@ -517,7 +520,7 @@ export default { | ||
517 | ] | 520 | ] |
518 | }, | 521 | }, |
519 | { | 522 | { |
520 | - id: 4, | 523 | + id: 5, |
521 | waybillNo: '580-20728391', | 524 | waybillNo: '580-20728391', |
522 | houseWaybillNo: '', | 525 | houseWaybillNo: '', |
523 | custom: '4604', | 526 | custom: '4604', |
@@ -605,6 +608,10 @@ export default { | @@ -605,6 +608,10 @@ export default { | ||
605 | this.$refs[''].clearValidate() | 608 | this.$refs[''].clearValidate() |
606 | }) | 609 | }) |
607 | }, | 610 | }, |
611 | + handleFilter() { | ||
612 | + this.listQuery.page = 1 | ||
613 | + this.getList() | ||
614 | + }, | ||
608 | handleModifyStatus(row, status) { | 615 | handleModifyStatus(row, status) { |
609 | this.$message({ | 616 | this.$message({ |
610 | message: '操作成功', | 617 | message: '操作成功', |
@@ -613,7 +620,16 @@ export default { | @@ -613,7 +620,16 @@ export default { | ||
613 | row.status = status | 620 | row.status = status |
614 | }, | 621 | }, |
615 | getList() { | 622 | getList() { |
623 | + this.listLoading = true | ||
624 | + fetchList(this.listQuery).then(response => { | ||
625 | + this.list = response.data.items | ||
626 | + this.total = response.data.total | ||
616 | 627 | ||
628 | + // Just to simulate the time of the request | ||
629 | + setTimeout(() => { | ||
630 | + this.listLoading = false | ||
631 | + }, 1.5 * 1000) | ||
632 | + }) | ||
617 | }, | 633 | }, |
618 | handleSelectionChange(val) { | 634 | handleSelectionChange(val) { |
619 | this.multipleSelection = val | 635 | this.multipleSelection = val |
@@ -640,6 +656,18 @@ export default { | @@ -640,6 +656,18 @@ export default { | ||
640 | this.$refs[''].clearValidate() | 656 | this.$refs[''].clearValidate() |
641 | }) | 657 | }) |
642 | }, | 658 | }, |
659 | + handleDownload() { | ||
660 | + this.downloadLoading = true | ||
661 | + const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
662 | + const filterVal = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
663 | + const data = this.formatJson(filterVal, this.list) | ||
664 | + excel.export_json_to_excel({ | ||
665 | + header: tHeader, | ||
666 | + data, | ||
667 | + filename: 'table-list' | ||
668 | + }) | ||
669 | + this.downloadLoading = false | ||
670 | + }, | ||
643 | remoteMethod(query) { | 671 | remoteMethod(query) { |
644 | if (query !== '') { | 672 | if (query !== '') { |
645 | this.loading = true | 673 | this.loading = true |
-
请 注册 或 登录 后发表评论