作者 xudada

Merge remote-tracking branch 'origin/master'

要显示太多修改。

为保证性能只显示 57 of 57+ 个文件。

@@ -9,11 +9,12 @@ module.exports = { @@ -9,11 +9,12 @@ module.exports = {
9 assetsSubDirectory: 'static', 9 assetsSubDirectory: 'static',
10 assetsPublicPath: './', 10 assetsPublicPath: './',
11 productionSourceMap: true, 11 productionSourceMap: true,
12 - // Gzip off by default as many popular static hosts such as 12 + // Gzip off by default as many popular static hosts such as2.20202
13 // Surge or Netlify already gzip all static assets for you. 13 // Surge or Netlify already gzip all static assets for you.
14 // Before setting to `true`, make sure to: 14 // Before setting to `true`, make sure to:
15 // npm install --save-dev compression-webpack-plugin 15 // npm install --save-dev compression-webpack-plugin
16 productionGzip: false, 16 productionGzip: false,
  17 +
17 productionGzipExtensions: ['js', 'css'], 18 productionGzipExtensions: ['js', 'css'],
18 // Run the build command with an extra argument to 19 // Run the build command with an extra argument to
19 // View the bundle analyzer report after build finishes: 20 // View the bundle analyzer report after build finishes:
@@ -23,17 +24,17 @@ module.exports = { @@ -23,17 +24,17 @@ module.exports = {
23 }, 24 },
24 dev: { 25 dev: {
25 env: require('./dev.env'), 26 env: require('./dev.env'),
26 - port: 4006, 27 + port: 12020,
27 autoOpenBrowser: true, 28 autoOpenBrowser: true,
28 assetsSubDirectory: 'static', 29 assetsSubDirectory: 'static',
29 assetsPublicPath: '/', 30 assetsPublicPath: '/',
30 proxyTable: { 31 proxyTable: {
31 '/api':{ 32 '/api':{
32 target: 'http://192.168.1.53:12343',//设置你调用的接口域名和端口号 别忘了加http 33 target: 'http://192.168.1.53:12343',//设置你调用的接口域名和端口号 别忘了加http
33 - // target: 'http://192.168.43.78:12343',//设置你调用的接口域名和端口号 别忘了加http 34 + // target: 'http://localhost:12343',//设置你调用的接口域名和端口号 别忘了加http
34 changeOrigin: true, 35 changeOrigin: true,
35 pathRewrite: { 36 pathRewrite: {
36 - '^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可 37 + '^/api/': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
37 } 38 }
38 } 39 }
39 }, 40 },
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 3
4 <head> 4 <head>
5 <meta charset="utf-8"> 5 <meta charset="utf-8">
6 - <title>流浪地球项目</title> 6 + <title>易通快速通关申报管理系统</title>
7 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> 7 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
8 </head> 8 </head>
9 9
@@ -34,6 +34,11 @@ @@ -34,6 +34,11 @@
34 } 34 }
35 } 35 }
36 }, 36 },
  37 + "abab": {
  38 + "version": "1.0.4",
  39 + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
  40 + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4="
  41 + },
37 "abbrev": { 42 "abbrev": {
38 "version": "1.1.1", 43 "version": "1.1.1",
39 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 44 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -72,6 +77,21 @@ @@ -72,6 +77,21 @@
72 } 77 }
73 } 78 }
74 }, 79 },
  80 + "acorn-globals": {
  81 + "version": "1.0.9",
  82 + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
  83 + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
  84 + "requires": {
  85 + "acorn": "^2.1.0"
  86 + },
  87 + "dependencies": {
  88 + "acorn": {
  89 + "version": "2.7.0",
  90 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
  91 + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
  92 + }
  93 + }
  94 + },
75 "acorn-jsx": { 95 "acorn-jsx": {
76 "version": "5.0.1", 96 "version": "5.0.1",
77 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", 97 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
@@ -487,6 +507,11 @@ @@ -487,6 +507,11 @@
487 "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 507 "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
488 "dev": true 508 "dev": true
489 }, 509 },
  510 + "array-equal": {
  511 + "version": "1.0.0",
  512 + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
  513 + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
  514 + },
490 "array-find-index": { 515 "array-find-index": {
491 "version": "1.0.2", 516 "version": "1.0.2",
492 "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 517 "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -524,7 +549,6 @@ @@ -524,7 +549,6 @@
524 "version": "0.2.4", 549 "version": "0.2.4",
525 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 550 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
526 "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 551 "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
527 - "dev": true,  
528 "requires": { 552 "requires": {
529 "safer-buffer": "~2.1.0" 553 "safer-buffer": "~2.1.0"
530 } 554 }
@@ -570,8 +594,7 @@ @@ -570,8 +594,7 @@
570 "assert-plus": { 594 "assert-plus": {
571 "version": "1.0.0", 595 "version": "1.0.0",
572 "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 596 "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
573 - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",  
574 - "dev": true 597 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
575 }, 598 },
576 "assign-symbols": { 599 "assign-symbols": {
577 "version": "1.0.0", 600 "version": "1.0.0",
@@ -613,8 +636,8 @@ @@ -613,8 +636,8 @@
613 }, 636 },
614 "async-validator": { 637 "async-validator": {
615 "version": "1.8.5", 638 "version": "1.8.5",
616 - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",  
617 - "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", 639 + "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz",
  640 + "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
618 "requires": { 641 "requires": {
619 "babel-runtime": "6.x" 642 "babel-runtime": "6.x"
620 } 643 }
@@ -622,8 +645,7 @@ @@ -622,8 +645,7 @@
622 "asynckit": { 645 "asynckit": {
623 "version": "0.4.0", 646 "version": "0.4.0",
624 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 647 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
625 - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",  
626 - "dev": true 648 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
627 }, 649 },
628 "atob": { 650 "atob": {
629 "version": "2.1.2", 651 "version": "2.1.2",
@@ -648,14 +670,12 @@ @@ -648,14 +670,12 @@
648 "aws-sign2": { 670 "aws-sign2": {
649 "version": "0.7.0", 671 "version": "0.7.0",
650 "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 672 "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
651 - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",  
652 - "dev": true 673 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
653 }, 674 },
654 "aws4": { 675 "aws4": {
655 "version": "1.8.0", 676 "version": "1.8.0",
656 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 677 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
657 - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",  
658 - "dev": true 678 + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
659 }, 679 },
660 "axios": { 680 "axios": {
661 "version": "0.19.0", 681 "version": "0.19.0",
@@ -896,8 +916,8 @@ @@ -896,8 +916,8 @@
896 }, 916 },
897 "babel-helper-vue-jsx-merge-props": { 917 "babel-helper-vue-jsx-merge-props": {
898 "version": "2.0.3", 918 "version": "2.0.3",
899 - "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",  
900 - "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" 919 + "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
  920 + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
901 }, 921 },
902 "babel-helpers": { 922 "babel-helpers": {
903 "version": "6.24.1", 923 "version": "6.24.1",
@@ -1610,6 +1630,11 @@ @@ -1610,6 +1630,11 @@
1610 } 1630 }
1611 } 1631 }
1612 }, 1632 },
  1633 + "base64-arraybuffer": {
  1634 + "version": "0.2.0",
  1635 + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz",
  1636 + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ=="
  1637 + },
1613 "base64-js": { 1638 "base64-js": {
1614 "version": "1.3.1", 1639 "version": "1.3.1",
1615 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 1640 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
@@ -1620,7 +1645,6 @@ @@ -1620,7 +1645,6 @@
1620 "version": "1.0.2", 1645 "version": "1.0.2",
1621 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 1646 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
1622 "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 1647 "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
1623 - "dev": true,  
1624 "requires": { 1648 "requires": {
1625 "tweetnacl": "^0.14.3" 1649 "tweetnacl": "^0.14.3"
1626 } 1650 }
@@ -1955,11 +1979,28 @@ @@ -1955,11 +1979,28 @@
1955 "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", 1979 "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
1956 "dev": true 1980 "dev": true
1957 }, 1981 },
  1982 + "canvg": {
  1983 + "version": "1.5.3",
  1984 + "resolved": "https://registry.npmjs.org/canvg/-/canvg-1.5.3.tgz",
  1985 + "integrity": "sha512-7Gn2IuQzvUQWPIuZuFHrzsTM0gkPz2RRT9OcbdmA03jeKk8kltrD8gqUzNX15ghY/4PV5bbe5lmD6yDLDY6Ybg==",
  1986 + "requires": {
  1987 + "jsdom": "^8.1.0",
  1988 + "rgbcolor": "^1.0.1",
  1989 + "stackblur-canvas": "^1.4.1",
  1990 + "xmldom": "^0.1.22"
  1991 + },
  1992 + "dependencies": {
  1993 + "stackblur-canvas": {
  1994 + "version": "1.4.1",
  1995 + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz",
  1996 + "integrity": "sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs="
  1997 + }
  1998 + }
  1999 + },
1958 "caseless": { 2000 "caseless": {
1959 "version": "0.12.0", 2001 "version": "0.12.0",
1960 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 2002 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
1961 - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",  
1962 - "dev": true 2003 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
1963 }, 2004 },
1964 "center-align": { 2005 "center-align": {
1965 "version": "0.1.3", 2006 "version": "0.1.3",
@@ -1972,9 +2013,9 @@ @@ -1972,9 +2013,9 @@
1972 } 2013 }
1973 }, 2014 },
1974 "cfb": { 2015 "cfb": {
1975 - "version": "1.1.3",  
1976 - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz",  
1977 - "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", 2016 + "version": "1.1.4",
  2017 + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.4.tgz",
  2018 + "integrity": "sha512-rwFkl3aFO3f+ljR27YINwC0x8vPjyiEVbYbrTCKzspEf7Q++3THdfHVgJYNUbxNcupJECrLX+L40Mjm9hm/Bgw==",
1978 "requires": { 2019 "requires": {
1979 "adler-32": "~1.2.0", 2020 "adler-32": "~1.2.0",
1980 "commander": "^2.16.0", 2021 "commander": "^2.16.0",
@@ -2418,7 +2459,6 @@ @@ -2418,7 +2459,6 @@
2418 "version": "1.0.8", 2459 "version": "1.0.8",
2419 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 2460 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
2420 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 2461 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
2421 - "dev": true,  
2422 "requires": { 2462 "requires": {
2423 "delayed-stream": "~1.0.0" 2463 "delayed-stream": "~1.0.0"
2424 } 2464 }
@@ -2754,6 +2794,14 @@ @@ -2754,6 +2794,14 @@
2754 "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", 2794 "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
2755 "dev": true 2795 "dev": true
2756 }, 2796 },
  2797 + "css-line-break": {
  2798 + "version": "1.1.1",
  2799 + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz",
  2800 + "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==",
  2801 + "requires": {
  2802 + "base64-arraybuffer": "^0.2.0"
  2803 + }
  2804 + },
2757 "css-loader": { 2805 "css-loader": {
2758 "version": "0.26.4", 2806 "version": "0.26.4",
2759 "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz", 2807 "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz",
@@ -2906,6 +2954,19 @@ @@ -2906,6 +2954,19 @@
2906 "source-map": "^0.5.3" 2954 "source-map": "^0.5.3"
2907 } 2955 }
2908 }, 2956 },
  2957 + "cssom": {
  2958 + "version": "0.3.8",
  2959 + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
  2960 + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
  2961 + },
  2962 + "cssstyle": {
  2963 + "version": "0.2.37",
  2964 + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
  2965 + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
  2966 + "requires": {
  2967 + "cssom": "0.3.x"
  2968 + }
  2969 + },
2909 "currently-unhandled": { 2970 "currently-unhandled": {
2910 "version": "0.4.1", 2971 "version": "0.4.1",
2911 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 2972 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -2925,7 +2986,6 @@ @@ -2925,7 +2986,6 @@
2925 "version": "1.14.1", 2986 "version": "1.14.1",
2926 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 2987 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
2927 "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 2988 "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
2928 - "dev": true,  
2929 "requires": { 2989 "requires": {
2930 "assert-plus": "^1.0.0" 2990 "assert-plus": "^1.0.0"
2931 } 2991 }
@@ -2975,8 +3035,8 @@ @@ -2975,8 +3035,8 @@
2975 }, 3035 },
2976 "deepmerge": { 3036 "deepmerge": {
2977 "version": "1.5.2", 3037 "version": "1.5.2",
2978 - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",  
2979 - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" 3038 + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1570547201087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
  3039 + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
2980 }, 3040 },
2981 "define-property": { 3041 "define-property": {
2982 "version": "2.0.2", 3042 "version": "2.0.2",
@@ -3040,8 +3100,7 @@ @@ -3040,8 +3100,7 @@
3040 "delayed-stream": { 3100 "delayed-stream": {
3041 "version": "1.0.0", 3101 "version": "1.0.0",
3042 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 3102 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
3043 - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",  
3044 - "dev": true 3103 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
3045 }, 3104 },
3046 "delegates": { 3105 "delegates": {
3047 "version": "1.0.0", 3106 "version": "1.0.0",
@@ -3188,7 +3247,6 @@ @@ -3188,7 +3247,6 @@
3188 "version": "0.1.2", 3247 "version": "0.1.2",
3189 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 3248 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
3190 "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 3249 "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
3191 - "dev": true,  
3192 "requires": { 3250 "requires": {
3193 "jsbn": "~0.1.0", 3251 "jsbn": "~0.1.0",
3194 "safer-buffer": "^2.1.0" 3252 "safer-buffer": "^2.1.0"
@@ -3350,6 +3408,26 @@ @@ -3350,6 +3408,26 @@
3350 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 3408 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3351 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 3409 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
3352 }, 3410 },
  3411 + "escodegen": {
  3412 + "version": "1.14.1",
  3413 + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
  3414 + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
  3415 + "requires": {
  3416 + "esprima": "^4.0.1",
  3417 + "estraverse": "^4.2.0",
  3418 + "esutils": "^2.0.2",
  3419 + "optionator": "^0.8.1",
  3420 + "source-map": "~0.6.1"
  3421 + },
  3422 + "dependencies": {
  3423 + "source-map": {
  3424 + "version": "0.6.1",
  3425 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
  3426 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
  3427 + "optional": true
  3428 + }
  3429 + }
  3430 + },
3353 "eslint": { 3431 "eslint": {
3354 "version": "5.16.0", 3432 "version": "5.16.0",
3355 "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", 3433 "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
@@ -3749,8 +3827,7 @@ @@ -3749,8 +3827,7 @@
3749 "extsprintf": { 3827 "extsprintf": {
3750 "version": "1.3.0", 3828 "version": "1.3.0",
3751 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 3829 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
3752 - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",  
3753 - "dev": true 3830 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
3754 }, 3831 },
3755 "fast-deep-equal": { 3832 "fast-deep-equal": {
3756 "version": "2.0.1", 3833 "version": "2.0.1",
@@ -3970,14 +4047,12 @@ @@ -3970,14 +4047,12 @@
3970 "forever-agent": { 4047 "forever-agent": {
3971 "version": "0.6.1", 4048 "version": "0.6.1",
3972 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 4049 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
3973 - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",  
3974 - "dev": true 4050 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
3975 }, 4051 },
3976 "form-data": { 4052 "form-data": {
3977 "version": "2.3.3", 4053 "version": "2.3.3",
3978 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 4054 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
3979 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 4055 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
3980 - "dev": true,  
3981 "requires": { 4056 "requires": {
3982 "asynckit": "^0.4.0", 4057 "asynckit": "^0.4.0",
3983 "combined-stream": "^1.0.6", 4058 "combined-stream": "^1.0.6",
@@ -4721,7 +4796,6 @@ @@ -4721,7 +4796,6 @@
4721 "version": "0.1.7", 4796 "version": "0.1.7",
4722 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 4797 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
4723 "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 4798 "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
4724 - "dev": true,  
4725 "requires": { 4799 "requires": {
4726 "assert-plus": "^1.0.0" 4800 "assert-plus": "^1.0.0"
4727 } 4801 }
@@ -4804,14 +4878,12 @@ @@ -4804,14 +4878,12 @@
4804 "har-schema": { 4878 "har-schema": {
4805 "version": "2.0.0", 4879 "version": "2.0.0",
4806 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 4880 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
4807 - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",  
4808 - "dev": true 4881 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
4809 }, 4882 },
4810 "har-validator": { 4883 "har-validator": {
4811 "version": "5.1.3", 4884 "version": "5.1.3",
4812 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 4885 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
4813 "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 4886 "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
4814 - "dev": true,  
4815 "requires": { 4887 "requires": {
4816 "ajv": "^6.5.5", 4888 "ajv": "^6.5.5",
4817 "har-schema": "^2.0.0" 4889 "har-schema": "^2.0.0"
@@ -5020,6 +5092,14 @@ @@ -5020,6 +5092,14 @@
5020 "toposort": "^1.0.0" 5092 "toposort": "^1.0.0"
5021 } 5093 }
5022 }, 5094 },
  5095 + "html2canvas": {
  5096 + "version": "1.0.0-rc.5",
  5097 + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.5.tgz",
  5098 + "integrity": "sha512-DtNqPxJNXPoTajs+lVQzGS1SULRI4GQaROeU5R41xH8acffHukxRh/NBVcTBsfCkJSkLq91rih5TpbEwUP9yWA==",
  5099 + "requires": {
  5100 + "css-line-break": "1.1.1"
  5101 + }
  5102 + },
5023 "htmlparser2": { 5103 "htmlparser2": {
5024 "version": "3.10.1", 5104 "version": "3.10.1",
5025 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 5105 "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
@@ -5101,7 +5181,6 @@ @@ -5101,7 +5181,6 @@
5101 "version": "1.2.0", 5181 "version": "1.2.0",
5102 "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 5182 "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
5103 "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 5183 "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
5104 - "dev": true,  
5105 "requires": { 5184 "requires": {
5106 "assert-plus": "^1.0.0", 5185 "assert-plus": "^1.0.0",
5107 "jsprim": "^1.2.2", 5186 "jsprim": "^1.2.2",
@@ -5431,8 +5510,7 @@ @@ -5431,8 +5510,7 @@
5431 "is-typedarray": { 5510 "is-typedarray": {
5432 "version": "1.0.0", 5511 "version": "1.0.0",
5433 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 5512 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
5434 - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",  
5435 - "dev": true 5513 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
5436 }, 5514 },
5437 "is-utf8": { 5515 "is-utf8": {
5438 "version": "0.2.1", 5516 "version": "0.2.1",
@@ -5465,8 +5543,7 @@ @@ -5465,8 +5543,7 @@
5465 "isstream": { 5543 "isstream": {
5466 "version": "0.1.2", 5544 "version": "0.1.2",
5467 "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 5545 "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
5468 - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",  
5469 - "dev": true 5546 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
5470 }, 5547 },
5471 "js-base64": { 5548 "js-base64": {
5472 "version": "2.5.1", 5549 "version": "2.5.1",
@@ -5521,8 +5598,38 @@ @@ -5521,8 +5598,38 @@
5521 "jsbn": { 5598 "jsbn": {
5522 "version": "0.1.1", 5599 "version": "0.1.1",
5523 "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 5600 "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
5524 - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",  
5525 - "dev": true 5601 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
  5602 + },
  5603 + "jsdom": {
  5604 + "version": "8.5.0",
  5605 + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-8.5.0.tgz",
  5606 + "integrity": "sha1-1Nj12/J2hjW2KmKCO5R89wcevJg=",
  5607 + "requires": {
  5608 + "abab": "^1.0.0",
  5609 + "acorn": "^2.4.0",
  5610 + "acorn-globals": "^1.0.4",
  5611 + "array-equal": "^1.0.0",
  5612 + "cssom": ">= 0.3.0 < 0.4.0",
  5613 + "cssstyle": ">= 0.2.34 < 0.3.0",
  5614 + "escodegen": "^1.6.1",
  5615 + "iconv-lite": "^0.4.13",
  5616 + "nwmatcher": ">= 1.3.7 < 2.0.0",
  5617 + "parse5": "^1.5.1",
  5618 + "request": "^2.55.0",
  5619 + "sax": "^1.1.4",
  5620 + "symbol-tree": ">= 3.1.0 < 4.0.0",
  5621 + "tough-cookie": "^2.2.0",
  5622 + "webidl-conversions": "^3.0.1",
  5623 + "whatwg-url": "^2.0.1",
  5624 + "xml-name-validator": ">= 2.0.1 < 3.0.0"
  5625 + },
  5626 + "dependencies": {
  5627 + "acorn": {
  5628 + "version": "2.7.0",
  5629 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
  5630 + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
  5631 + }
  5632 + }
5526 }, 5633 },
5527 "jsesc": { 5634 "jsesc": {
5528 "version": "1.3.0", 5635 "version": "1.3.0",
@@ -5539,8 +5646,7 @@ @@ -5539,8 +5646,7 @@
5539 "json-schema": { 5646 "json-schema": {
5540 "version": "0.2.3", 5647 "version": "0.2.3",
5541 "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 5648 "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
5542 - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",  
5543 - "dev": true 5649 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
5544 }, 5650 },
5545 "json-schema-traverse": { 5651 "json-schema-traverse": {
5546 "version": "0.4.1", 5652 "version": "0.4.1",
@@ -5564,8 +5670,7 @@ @@ -5564,8 +5670,7 @@
5564 "json-stringify-safe": { 5670 "json-stringify-safe": {
5565 "version": "5.0.1", 5671 "version": "5.0.1",
5566 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 5672 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
5567 - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",  
5568 - "dev": true 5673 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
5569 }, 5674 },
5570 "json5": { 5675 "json5": {
5571 "version": "0.5.1", 5676 "version": "0.5.1",
@@ -5579,11 +5684,50 @@ @@ -5579,11 +5684,50 @@
5579 "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 5684 "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
5580 "dev": true 5685 "dev": true
5581 }, 5686 },
  5687 + "jspdf": {
  5688 + "version": "1.5.3",
  5689 + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-1.5.3.tgz",
  5690 + "integrity": "sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==",
  5691 + "requires": {
  5692 + "canvg": "1.5.3",
  5693 + "file-saver": "github:eligrey/FileSaver.js#1.3.8",
  5694 + "html2canvas": "1.0.0-alpha.12",
  5695 + "omggif": "1.0.7",
  5696 + "promise-polyfill": "8.1.0",
  5697 + "stackblur-canvas": "2.2.0"
  5698 + },
  5699 + "dependencies": {
  5700 + "base64-arraybuffer": {
  5701 + "version": "0.1.5",
  5702 + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
  5703 + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
  5704 + },
  5705 + "css-line-break": {
  5706 + "version": "1.0.1",
  5707 + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz",
  5708 + "integrity": "sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=",
  5709 + "requires": {
  5710 + "base64-arraybuffer": "^0.1.5"
  5711 + }
  5712 + },
  5713 + "file-saver": {
  5714 + "version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
  5715 + "from": "github:eligrey/FileSaver.js#1.3.8"
  5716 + },
  5717 + "html2canvas": {
  5718 + "version": "1.0.0-alpha.12",
  5719 + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-alpha.12.tgz",
  5720 + "integrity": "sha1-OxmS48mz9WBjw1/WIElPN+uohRM=",
  5721 + "requires": {
  5722 + "css-line-break": "1.0.1"
  5723 + }
  5724 + }
  5725 + }
  5726 + },
5582 "jsprim": { 5727 "jsprim": {
5583 "version": "1.4.1", 5728 "version": "1.4.1",
5584 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 5729 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
5585 "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 5730 "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
5586 - "dev": true,  
5587 "requires": { 5731 "requires": {
5588 "assert-plus": "1.0.0", 5732 "assert-plus": "1.0.0",
5589 "extsprintf": "1.3.0", 5733 "extsprintf": "1.3.0",
@@ -5941,14 +6085,12 @@ @@ -5941,14 +6085,12 @@
5941 "mime-db": { 6085 "mime-db": {
5942 "version": "1.40.0", 6086 "version": "1.40.0",
5943 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 6087 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
5944 - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",  
5945 - "dev": true 6088 + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
5946 }, 6089 },
5947 "mime-types": { 6090 "mime-types": {
5948 "version": "2.1.24", 6091 "version": "2.1.24",
5949 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 6092 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
5950 "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 6093 "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
5951 - "dev": true,  
5952 "requires": { 6094 "requires": {
5953 "mime-db": "1.40.0" 6095 "mime-db": "1.40.0"
5954 } 6096 }
@@ -6316,7 +6458,7 @@ @@ -6316,7 +6458,7 @@
6316 }, 6458 },
6317 "normalize-wheel": { 6459 "normalize-wheel": {
6318 "version": "1.0.1", 6460 "version": "1.0.1",
6319 - "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", 6461 + "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
6320 "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" 6462 "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
6321 }, 6463 },
6322 "npm": { 6464 "npm": {
@@ -9402,11 +9544,15 @@ @@ -9402,11 +9544,15 @@
9402 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 9544 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
9403 "dev": true 9545 "dev": true
9404 }, 9546 },
  9547 + "nwmatcher": {
  9548 + "version": "1.4.4",
  9549 + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
  9550 + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ=="
  9551 + },
9405 "oauth-sign": { 9552 "oauth-sign": {
9406 "version": "0.9.0", 9553 "version": "0.9.0",
9407 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 9554 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
9408 - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",  
9409 - "dev": true 9555 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
9410 }, 9556 },
9411 "object-assign": { 9557 "object-assign": {
9412 "version": "4.1.1", 9558 "version": "4.1.1",
@@ -9469,6 +9615,11 @@ @@ -9469,6 +9615,11 @@
9469 } 9615 }
9470 } 9616 }
9471 }, 9617 },
  9618 + "omggif": {
  9619 + "version": "1.0.7",
  9620 + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.7.tgz",
  9621 + "integrity": "sha1-WdLuywJj3oRjWz/riHwMmXPx5J0="
  9622 + },
9472 "on-finished": { 9623 "on-finished": {
9473 "version": "2.3.0", 9624 "version": "2.3.0",
9474 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 9625 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -9726,6 +9877,11 @@ @@ -9726,6 +9877,11 @@
9726 "error-ex": "^1.2.0" 9877 "error-ex": "^1.2.0"
9727 } 9878 }
9728 }, 9879 },
  9880 + "parse5": {
  9881 + "version": "1.5.1",
  9882 + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
  9883 + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ="
  9884 + },
9729 "parseurl": { 9885 "parseurl": {
9730 "version": "1.3.3", 9886 "version": "1.3.3",
9731 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 9887 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -9811,8 +9967,7 @@ @@ -9811,8 +9967,7 @@
9811 "performance-now": { 9967 "performance-now": {
9812 "version": "2.1.0", 9968 "version": "2.1.0",
9813 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 9969 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
9814 - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",  
9815 - "dev": true 9970 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
9816 }, 9971 },
9817 "pify": { 9972 "pify": {
9818 "version": "3.0.0", 9973 "version": "3.0.0",
@@ -10407,6 +10562,11 @@ @@ -10407,6 +10562,11 @@
10407 "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", 10562 "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
10408 "dev": true 10563 "dev": true
10409 }, 10564 },
  10565 + "promise-polyfill": {
  10566 + "version": "8.1.0",
  10567 + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz",
  10568 + "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA=="
  10569 + },
10410 "proto-list": { 10570 "proto-list": {
10411 "version": "1.2.4", 10571 "version": "1.2.4",
10412 "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 10572 "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -10438,8 +10598,7 @@ @@ -10438,8 +10598,7 @@
10438 "psl": { 10598 "psl": {
10439 "version": "1.3.0", 10599 "version": "1.3.0",
10440 "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", 10600 "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
10441 - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",  
10442 - "dev": true 10601 + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag=="
10443 }, 10602 },
10444 "public-encrypt": { 10603 "public-encrypt": {
10445 "version": "4.0.3", 10604 "version": "4.0.3",
@@ -11126,7 +11285,6 @@ @@ -11126,7 +11285,6 @@
11126 "version": "2.88.0", 11285 "version": "2.88.0",
11127 "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 11286 "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
11128 "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 11287 "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
11129 - "dev": true,  
11130 "requires": { 11288 "requires": {
11131 "aws-sign2": "~0.7.0", 11289 "aws-sign2": "~0.7.0",
11132 "aws4": "^1.8.0", 11290 "aws4": "^1.8.0",
@@ -11153,8 +11311,7 @@ @@ -11153,8 +11311,7 @@
11153 "qs": { 11311 "qs": {
11154 "version": "6.5.2", 11312 "version": "6.5.2",
11155 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 11313 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
11156 - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",  
11157 - "dev": true 11314 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
11158 } 11315 }
11159 } 11316 }
11160 }, 11317 },
@@ -11184,8 +11341,8 @@ @@ -11184,8 +11341,8 @@
11184 }, 11341 },
11185 "resize-observer-polyfill": { 11342 "resize-observer-polyfill": {
11186 "version": "1.5.1", 11343 "version": "1.5.1",
11187 - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",  
11188 - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" 11344 + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresize-observer-polyfill%2Fdownload%2Fresize-observer-polyfill-1.5.1.tgz",
  11345 + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
11189 }, 11346 },
11190 "resolve": { 11347 "resolve": {
11191 "version": "1.12.0", 11348 "version": "1.12.0",
@@ -11222,6 +11379,11 @@ @@ -11222,6 +11379,11 @@
11222 "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 11379 "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
11223 "dev": true 11380 "dev": true
11224 }, 11381 },
  11382 + "rgbcolor": {
  11383 + "version": "1.0.1",
  11384 + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
  11385 + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0="
  11386 + },
11225 "right-align": { 11387 "right-align": {
11226 "version": "0.1.3", 11388 "version": "0.1.3",
11227 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 11389 "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
@@ -11355,8 +11517,7 @@ @@ -11355,8 +11517,7 @@
11355 "sax": { 11517 "sax": {
11356 "version": "1.2.4", 11518 "version": "1.2.4",
11357 "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 11519 "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
11358 - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",  
11359 - "dev": true 11520 + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
11360 }, 11521 },
11361 "schema-utils": { 11522 "schema-utils": {
11362 "version": "0.3.0", 11523 "version": "0.3.0",
@@ -11811,9 +11972,9 @@ @@ -11811,9 +11972,9 @@
11811 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 11972 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
11812 }, 11973 },
11813 "ssf": { 11974 "ssf": {
11814 - "version": "0.10.2",  
11815 - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz",  
11816 - "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==", 11975 + "version": "0.10.3",
  11976 + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz",
  11977 + "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
11817 "requires": { 11978 "requires": {
11818 "frac": "~1.1.2" 11979 "frac": "~1.1.2"
11819 } 11980 }
@@ -11822,7 +11983,6 @@ @@ -11822,7 +11983,6 @@
11822 "version": "1.16.1", 11983 "version": "1.16.1",
11823 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 11984 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
11824 "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 11985 "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
11825 - "dev": true,  
11826 "requires": { 11986 "requires": {
11827 "asn1": "~0.2.3", 11987 "asn1": "~0.2.3",
11828 "assert-plus": "^1.0.0", 11988 "assert-plus": "^1.0.0",
@@ -11844,6 +12004,11 @@ @@ -11844,6 +12004,11 @@
11844 "safe-buffer": "^5.1.1" 12004 "safe-buffer": "^5.1.1"
11845 } 12005 }
11846 }, 12006 },
  12007 + "stackblur-canvas": {
  12008 + "version": "2.2.0",
  12009 + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.2.0.tgz",
  12010 + "integrity": "sha512-5Gf8dtlf8k6NbLzuly2NkGrkS/Ahh+I5VUjO7TnFizdJtgpfpLLEdQlLe9umbcnZlitU84kfYjXE67xlSXfhfQ=="
  12011 + },
11847 "stackframe": { 12012 "stackframe": {
11848 "version": "1.0.4", 12013 "version": "1.0.4",
11849 "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", 12014 "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
@@ -12038,6 +12203,11 @@ @@ -12038,6 +12203,11 @@
12038 } 12203 }
12039 } 12204 }
12040 }, 12205 },
  12206 + "symbol-tree": {
  12207 + "version": "3.2.4",
  12208 + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
  12209 + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
  12210 + },
12041 "table": { 12211 "table": {
12042 "version": "5.4.6", 12212 "version": "5.4.6",
12043 "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 12213 "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
@@ -12103,8 +12273,8 @@ @@ -12103,8 +12273,8 @@
12103 }, 12273 },
12104 "throttle-debounce": { 12274 "throttle-debounce": {
12105 "version": "1.1.0", 12275 "version": "1.1.0",
12106 - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",  
12107 - "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" 12276 + "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz",
  12277 + "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
12108 }, 12278 },
12109 "through": { 12279 "through": {
12110 "version": "2.3.8", 12280 "version": "2.3.8",
@@ -12214,7 +12384,6 @@ @@ -12214,7 +12384,6 @@
12214 "version": "2.4.3", 12384 "version": "2.4.3",
12215 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 12385 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
12216 "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 12386 "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
12217 - "dev": true,  
12218 "requires": { 12387 "requires": {
12219 "psl": "^1.1.24", 12388 "psl": "^1.1.24",
12220 "punycode": "^1.4.1" 12389 "punycode": "^1.4.1"
@@ -12223,11 +12392,15 @@ @@ -12223,11 +12392,15 @@
12223 "punycode": { 12392 "punycode": {
12224 "version": "1.4.1", 12393 "version": "1.4.1",
12225 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 12394 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
12226 - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",  
12227 - "dev": true 12395 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
12228 } 12396 }
12229 } 12397 }
12230 }, 12398 },
  12399 + "tr46": {
  12400 + "version": "0.0.3",
  12401 + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
  12402 + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
  12403 + },
12231 "trim-newlines": { 12404 "trim-newlines": {
12232 "version": "1.0.0", 12405 "version": "1.0.0",
12233 "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 12406 "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
@@ -12270,7 +12443,6 @@ @@ -12270,7 +12443,6 @@
12270 "version": "0.6.0", 12443 "version": "0.6.0",
12271 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 12444 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
12272 "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 12445 "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
12273 - "dev": true,  
12274 "requires": { 12446 "requires": {
12275 "safe-buffer": "^5.0.1" 12447 "safe-buffer": "^5.0.1"
12276 } 12448 }
@@ -12278,8 +12450,7 @@ @@ -12278,8 +12450,7 @@
12278 "tweetnacl": { 12450 "tweetnacl": {
12279 "version": "0.14.5", 12451 "version": "0.14.5",
12280 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 12452 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
12281 - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",  
12282 - "dev": true 12453 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
12283 }, 12454 },
12284 "type-check": { 12455 "type-check": {
12285 "version": "0.3.2", 12456 "version": "0.3.2",
@@ -12578,8 +12749,7 @@ @@ -12578,8 +12749,7 @@
12578 "uuid": { 12749 "uuid": {
12579 "version": "3.3.2", 12750 "version": "3.3.2",
12580 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 12751 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
12581 - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",  
12582 - "dev": true 12752 + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
12583 }, 12753 },
12584 "validate-npm-package-license": { 12754 "validate-npm-package-license": {
12585 "version": "3.0.4", 12755 "version": "3.0.4",
@@ -12607,7 +12777,6 @@ @@ -12607,7 +12777,6 @@
12607 "version": "1.10.0", 12777 "version": "1.10.0",
12608 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 12778 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
12609 "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 12779 "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
12610 - "dev": true,  
12611 "requires": { 12780 "requires": {
12612 "assert-plus": "^1.0.0", 12781 "assert-plus": "^1.0.0",
12613 "core-util-is": "1.0.2", 12782 "core-util-is": "1.0.2",
@@ -12625,6 +12794,11 @@ @@ -12625,6 +12794,11 @@
12625 "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", 12794 "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz",
12626 "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" 12795 "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
12627 }, 12796 },
  12797 + "vue-count-to": {
  12798 + "version": "1.0.13",
  12799 + "resolved": "https://registry.npmjs.org/vue-count-to/-/vue-count-to-1.0.13.tgz",
  12800 + "integrity": "sha512-6R4OVBVNtQTlcbXu6SJ8ENR35M2/CdWt3Jmv57jOUM+1ojiFmjVGvZPH8DfHpMDSA+ITs+EW5V6qthADxeyYOQ=="
  12801 + },
12628 "vue-hot-reload-api": { 12802 "vue-hot-reload-api": {
12629 "version": "2.3.3", 12803 "version": "2.3.3",
12630 "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", 12804 "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz",
@@ -12780,6 +12954,11 @@ @@ -12780,6 +12954,11 @@
12780 "neo-async": "^2.5.0" 12954 "neo-async": "^2.5.0"
12781 } 12955 }
12782 }, 12956 },
  12957 + "webidl-conversions": {
  12958 + "version": "3.0.1",
  12959 + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
  12960 + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
  12961 + },
12783 "webpack": { 12962 "webpack": {
12784 "version": "2.7.0", 12963 "version": "2.7.0",
12785 "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", 12964 "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz",
@@ -13103,6 +13282,15 @@ @@ -13103,6 +13282,15 @@
13103 } 13282 }
13104 } 13283 }
13105 }, 13284 },
  13285 + "whatwg-url": {
  13286 + "version": "2.0.1",
  13287 + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-2.0.1.tgz",
  13288 + "integrity": "sha1-U5ayBD8CDub3BNnEXqhRnnJN5lk=",
  13289 + "requires": {
  13290 + "tr46": "~0.0.3",
  13291 + "webidl-conversions": "^3.0.0"
  13292 + }
  13293 + },
13106 "whet.extend": { 13294 "whet.extend": {
13107 "version": "0.9.9", 13295 "version": "0.9.9",
13108 "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", 13296 "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
@@ -13156,6 +13344,11 @@ @@ -13156,6 +13344,11 @@
13156 "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 13344 "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
13157 "dev": true 13345 "dev": true
13158 }, 13346 },
  13347 + "wmf": {
  13348 + "version": "1.0.2",
  13349 + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
  13350 + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
  13351 + },
13159 "wordwrap": { 13352 "wordwrap": {
13160 "version": "1.0.0", 13353 "version": "1.0.0",
13161 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 13354 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -13231,19 +13424,30 @@ @@ -13231,19 +13424,30 @@
13231 } 13424 }
13232 }, 13425 },
13233 "xlsx": { 13426 "xlsx": {
13234 - "version": "0.15.1",  
13235 - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.1.tgz",  
13236 - "integrity": "sha512-z+o4+QPMc32EPboLCzJAz94o0Zyy+8jrmWTsVpfzwknFln9qDO6/HN1KrGGVC4//sGA7dh4R3HA4fhbGIKCDOA==", 13427 + "version": "0.15.6",
  13428 + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.6.tgz",
  13429 + "integrity": "sha512-7vD9eutyLs65iDjNFimVN+gk/oDkfkCgpQUjdE82QgzJCrBHC4bGPH7fzKVyy0UPp3gyFVQTQEFJaWaAvZCShQ==",
13237 "requires": { 13430 "requires": {
13238 "adler-32": "~1.2.0", 13431 "adler-32": "~1.2.0",
13239 - "cfb": "^1.1.3", 13432 + "cfb": "^1.1.4",
13240 "codepage": "~1.14.0", 13433 "codepage": "~1.14.0",
13241 "commander": "~2.17.1", 13434 "commander": "~2.17.1",
13242 "crc-32": "~1.2.0", 13435 "crc-32": "~1.2.0",
13243 "exit-on-epipe": "~1.0.1", 13436 "exit-on-epipe": "~1.0.1",
13244 - "ssf": "~0.10.2" 13437 + "ssf": "~0.10.3",
  13438 + "wmf": "~1.0.1"
13245 } 13439 }
13246 }, 13440 },
  13441 + "xml-name-validator": {
  13442 + "version": "2.0.1",
  13443 + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
  13444 + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
  13445 + },
  13446 + "xmldom": {
  13447 + "version": "0.1.31",
  13448 + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
  13449 + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
  13450 + },
13247 "xtend": { 13451 "xtend": {
13248 "version": "4.0.2", 13452 "version": "4.0.2",
13249 "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 13453 "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -16,19 +16,22 @@ @@ -16,19 +16,22 @@
16 "eslint": "^5.14.1", 16 "eslint": "^5.14.1",
17 "file-saver": "^2.0.2", 17 "file-saver": "^2.0.2",
18 "font-awesome": "^4.7.0", 18 "font-awesome": "^4.7.0",
  19 + "html2canvas": "^1.0.0-rc.5",
19 "install": "^0.12.2", 20 "install": "^0.12.2",
20 "js-cookie": "^2.2.1", 21 "js-cookie": "^2.2.1",
  22 + "jspdf": "^1.5.3",
21 "jszip": "^3.2.2", 23 "jszip": "^3.2.2",
22 "moment": "^2.24.0", 24 "moment": "^2.24.0",
23 "npm": "^6.8.0", 25 "npm": "^6.8.0",
24 "nprogress": "^0.2.0", 26 "nprogress": "^0.2.0",
25 "script-loader": "^0.7.2", 27 "script-loader": "^0.7.2",
26 "vue": "^2.2.2", 28 "vue": "^2.2.2",
  29 + "vue-count-to": "^1.0.13",
27 "vue-i18n": "^8.14.0", 30 "vue-i18n": "^8.14.0",
28 "vue-quill-editor": "^3.0.6", 31 "vue-quill-editor": "^3.0.6",
29 "vue-router": "^2.3.0", 32 "vue-router": "^2.3.0",
30 "vuex": "^2.0.0-rc.6", 33 "vuex": "^2.0.0-rc.6",
31 - "xlsx": "^0.15.1" 34 + "xlsx": "^0.15.6"
32 }, 35 },
33 "devDependencies": { 36 "devDependencies": {
34 "autoprefixer": "^6.7.2", 37 "autoprefixer": "^6.7.2",
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-import/nmms/allocat'
  3 +
  4 +
  5 +export const addAllocatImport=params=>{return http.post(`${baseUrl}/addAllocatImport`, params);};
  6 +export const addAllocatArrive=params=>{return http.post(`${baseUrl}/addAllocatArrive`, params);};
  7 +export const QueryData=params=>{return http.get(`${baseUrl}/QueryData`, params);};
  8 +export const ediAllocat=params=>{return http.put(`${baseUrl}/ediAllocat`, params);};
  9 +
  10 +export const sendCreateMt6202=params=>{return http.post(`${baseUrl}/sendCreateMt6202`, params);};
  11 +export const sendRemoveMt6202=params=>{return http.post(`${baseUrl}/sendRemoveMt6202`, params);};
  12 +export const sendCreateMt3202=params=>{return http.post(`${baseUrl}/sendCreateMt3202`, params);};
  13 +export const sendRemoveMt3202=params=>{return http.post(`${baseUrl}/sendRemoveMt3202`, params);};
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-import/nmms/rep'
  4 +//添加回执明细
  5 +export const addResponse=params=>{return http.post(`${baseUrl}/InsertResponse`, params);};
  6 +//查询回执明细列表
  7 +export const selectResponseList=params=>{return http.post(`${baseUrl}/selectResponseList`, params);};
@@ -5,13 +5,13 @@ import qs from 'qs' @@ -5,13 +5,13 @@ import qs from 'qs'
5 Vue.prototype.$http = axios; 5 Vue.prototype.$http = axios;
6 6
7 7
8 -export const getuserMenus = params => { return axios.get(`/perm/userMenus`, { params: params }); }; 8 +export const getuserMenus = params => { return axios.get(`USER-CENTER/perm/userMenus`, { params: params }); };
9 9
10 -export const getUserList = params => { return axios.get(`/hqpt-user-center/user/list`, { params: params }); }; 10 +export const getUserList = params => { return axios.get(`/cloud-user-center/user/list`, { params: params }); };
11 11
12 export const getUserListPage = params => { return axios({ 12 export const getUserListPage = params => { return axios({
13 method: 'GET', 13 method: 'GET',
14 - url: `/user/list`, 14 + url: `/cloud-user-center/user/list`,
15 data: params, 15 data: params,
16 headers: { 16 headers: {
17 'Content-Type': 'application/json;charset=UTF-8' 17 'Content-Type': 'application/json;charset=UTF-8'
@@ -21,18 +21,18 @@ export const getUserListPage = params => { return axios({ @@ -21,18 +21,18 @@ export const getUserListPage = params => { return axios({
21 21
22 export const removeUser = params => { return axios({ 22 export const removeUser = params => { return axios({
23 method: 'DELETE', 23 method: 'DELETE',
24 - url: `/user/del`, 24 + url: `/cloud-user-center/user/del`,
25 data: params, 25 data: params,
26 headers: { 26 headers: {
27 'Content-Type': 'application/json;charset=UTF-8' 27 'Content-Type': 'application/json;charset=UTF-8'
28 } 28 }
29 })}; 29 })};
30 30
31 -export const batchRemoveUser = params => { return axios.get(`/user/batchremove`, { params: params }); }; 31 +export const batchRemoveUser = params => { return axios.get(`USER-CENTER/user/batchremove`, { params: params }); };
32 32
33 export const editUser = params => { return axios({ 33 export const editUser = params => { return axios({
34 method: 'PUT', 34 method: 'PUT',
35 - url: `/user/edit`, 35 + url: `/cloud-user-center/user/edit`,
36 data: params, 36 data: params,
37 headers: { 37 headers: {
38 'Content-Type': 'application/json;charset=UTF-8' 38 'Content-Type': 'application/json;charset=UTF-8'
@@ -41,7 +41,7 @@ export const editUser = params => { return axios({ @@ -41,7 +41,7 @@ export const editUser = params => { return axios({
41 41
42 export const addUser = params => { return axios({ 42 export const addUser = params => { return axios({
43 method: 'POST', 43 method: 'POST',
44 - url: `/user/add`, 44 + url: `/cloud-user-center/user/add`,
45 data: params, 45 data: params,
46 headers: { 46 headers: {
47 'Content-Type': 'application/json;charset=UTF-8' 47 'Content-Type': 'application/json;charset=UTF-8'
@@ -50,9 +50,9 @@ export const addUser = params => { return axios({ @@ -50,9 +50,9 @@ export const addUser = params => { return axios({
50 50
51 export const setUserRole = params => { return axios({ 51 export const setUserRole = params => { return axios({
52 method: 'PUT', 52 method: 'PUT',
53 - url: `/user/roleset`, 53 + url: `/cloud-user-center/user/roleset`,
54 data: params, 54 data: params,
55 headers: { 55 headers: {
56 'Content-Type': 'application/json;charset=UTF-8' 56 'Content-Type': 'application/json;charset=UTF-8'
57 } 57 }
58 -})};  
  58 +})};
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/company'; 3 +let base = '/cloud-user-center/company';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-export/nmms/country'
  3 +
  4 +
  5 +export const getCountry = params => { return http.get(`${baseUrl}/getCountryCode`, params); };
  6 +
  7 +export const getByCountryCodeForName = params => { return http.post(`${baseUrl}/getByCountryCodeForName`,params)};
  8 +
  9 +export const getByCountryCode = params => { return http.post(`${baseUrl}/getByCountryCode`,params)};
  10 +
  11 +export const getAirportCode = params =>{return http.get(`/nmms-server-import/nmms/mt1201/selectList`,params)}
  12 +
  13 +export const getCustomCode = params =>{return http.get(`/nmms-server-import/nmms/mt1201/selectCustomcode`,params)}
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/department'; 3 +let base = '/cloud-user-center/department';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/mt3201'
  4 +
  5 +export const getMt3201ListForParam = params => {
  6 + return http.get(`${baseUrl}/getMt3201ListForParam`, params);
  7 +};
  8 +export const deleteByIsDelete = params => { return http.del(`${baseUrl}/deleteByIsDelete`,params)};
  9 +
  10 +export const updateStatus = params => { return http.put(`${baseUrl}/updateStatus`, params)};
  11 +
  12 +export const updateMT3201 = params => { return http.put(`${baseUrl}/updateMt3201`,params)};
  13 +
  14 +export const addMt3201 = params => { return http.post(`${baseUrl}/addMt3201`,params)};
  15 +
  16 +export const sendCreateMt3201 = params => { return http.post(`${baseUrl}/sendCreateMt3201`,params)};
  17 +
  18 +export const sendRemoveMt3201 = params => { return http.post(`${baseUrl}/sendRemoveMt3201`,params)};
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/flight'
  4 +
  5 +export const getFlightListForParam = params => {
  6 + return http.get(`${baseUrl}/getFlight`, params);
  7 +};
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/mt4201'
  4 +
  5 +export const getMt4201ListForParam = params => {
  6 + return http.get(`${baseUrl}/getMt4201ListForParam`, params);
  7 +};
  8 +export const deleteByIsDelete = params => { return http.del(`${baseUrl}/deleteByIsDelete`,params)};
  9 +
  10 +export const updateStatus = params => { return http.put(`${baseUrl}/updateStatus`, params)};
  11 +
  12 +export const updateMT4201 = params => { return http.put(`${baseUrl}/updateMt4201`,params)};
  13 +
  14 +export const addMt4201 = params => { return http.post(`${baseUrl}/addMt4201`,params)};
  15 +
  16 +
  17 +export const sendCreateMt4201 = params => { return http.post(`${baseUrl}/sendCreateMt4201`,params)};
  18 +
  19 +export const sendDeleteMt4201 = params => { return http.post(`${baseUrl}/sendDeleteMt4201`,params)};
  20 +
  21 +
  22 +
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/manifest'
  4 +
  5 +export const getManifests = params => {
  6 + return http.get(`${baseUrl}/getManifests`, params);
  7 +};
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/mt2201'
  4 +
  5 +export const getMt2201ListForParam = params => { return http.get(`${baseUrl}/getMt2201ListForParam`, params)};
  6 +
  7 +export const deleteByIsDelete = params => { return http.del(`${baseUrl}/deleteByIsDelete`,params)};
  8 +
  9 +export const updateStatus = params => { return http.put(`${baseUrl}/updateStatus`, params) };
  10 +
  11 +export const updateMT2201 = params => { return http.put(`${baseUrl}/updateMt2201`,params)};
  12 +
  13 +export const addMt2201 = params => { return http.post(`${baseUrl}/addMt2201`,params)};
  14 +
  15 +export const getLostLoadChange = params => { return http.get(`${baseUrl}/getLostLoadChange`, params)};
  16 +
  17 +export const saveLostChange = params => { return http.get(`${baseUrl}/saveLostChange`, params)};
  18 +
  19 +export const saveLostLoad = params => { return http.put(`${baseUrl}/saveLostLoad`,params)};
  20 +
  21 +export const sendDeleteMt2201 = params =>{return http.post(`${baseUrl}/sendDeleteMt2201`,params)}
  22 +
  23 +export const sendUpdateMt2201 = params =>{return http.post(`${baseUrl}/sendUpdateMt2201`,params)}
  24 +
  25 +export const sendCreateMt2201 = params =>{return http.post(`${baseUrl}/sendCreateMt2201`,params)}
  26 +
  27 +export const uploadFileExcel = params =>{return http.post(`${baseUrl}/uploadFileExcel`,params)}
  28 +
  29 +
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/mt520x'
  4 +
  5 +export const getMt520XListForParam = params => {
  6 + return http.get(`${baseUrl}/getMt520xListForParam`, params);
  7 +};
  8 +export const deleteByIsDelete = params => { return http.del(`${baseUrl}/deleteByIsDelete`,params)};
  9 +
  10 +export const updateStatus = params => { return http.put(`${baseUrl}/updateStatus`, params)};
  11 +
  12 +export const updateMt520X = params => { return http.put(`${baseUrl}/updateMt520x`,params)};
  13 +
  14 +export const addMt520X = params => { return http.post(`${baseUrl}/addMt520x`,params)};
  15 +
  16 +export const sendCreateMt5202 = params => { return http.post(`${baseUrl}/sendCreateMt5202`,params)};
  17 +
  18 +export const sendRemoveMt5202 = params => { return http.post(`${baseUrl}/sendRemoveMt5202`,params)};
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/group'; 3 +let base = '/cloud-user-center/group';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  1 +//不使用JQuery版的
  2 +
  3 +import html2canvas from 'html2canvas';
  4 +import JsPDF from 'jspdf';
  5 +
  6 +/**
  7 + * @param ele 要生成 pdf 的DOM元素(容器)
  8 + * @param padfName PDF文件生成后的文件名字
  9 + * */
  10 +
  11 +function downloadPDF(ele, pdfName){
  12 +
  13 + let eleW = ele.offsetWidth;// 获得该容器的宽
  14 + let eleH = ele.offsetHeight;// 获得该容器的高
  15 +
  16 +
  17 + let eleOffsetTop = ele.offsetTop; // 获得该容器到文档顶部的距离
  18 + let eleOffsetLeft = ele.offsetLeft; // 获得该容器到文档最左的距离
  19 +
  20 + var canvas = document.createElement("canvas");
  21 + var abs = 0;
  22 +
  23 + let win_in = document.documentElement.clientWidth || document.body.clientWidth; // 获得当前可视窗口的宽度(不包含滚动条)
  24 + let win_out = window.innerWidth; // 获得当前窗口的宽度(包含滚动条)
  25 +
  26 + if(win_out>win_in){
  27 + // abs = (win_o - win_i)/2; // 获得滚动条长度的一半
  28 + abs = (win_out - win_in)/2; // 获得滚动条宽度的一半
  29 + // console.log(a, '新abs');
  30 + }
  31 +
  32 + canvas.width = eleW * 2; // 将画布宽&&高放大两倍
  33 + canvas.height = eleH * 2;
  34 +
  35 +
  36 +
  37 +
  38 + var context = canvas.getContext("2d");
  39 +
  40 + context.scale(2, 2);
  41 +
  42 + context.translate(-eleOffsetLeft -abs, -eleOffsetTop);
  43 + // 这里默认横向没有滚动条的情况,因为offset.left(),有无滚动条的时候存在差值,因此
  44 + // translate的时候,要把这个差值去掉
  45 +
  46 + // html2canvas(element).then( (canvas)=>{ //报错
  47 + // html2canvas(element[0]).then( (canvas)=>{
  48 + html2canvas( ele, {
  49 + dpi: 300,
  50 + // allowTaint: true, //允许 canvas 污染, allowTaint参数要去掉,否则是无法通过toDataURL导出canvas数据的
  51 + useCORS:true //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。
  52 + } ).then( (canvas)=>{
  53 +
  54 + var contentWidth = canvas.width;
  55 + var contentHeight = canvas.height;
  56 + //一页pdf显示html页面生成的canvas高度;
  57 + var pageHeight = contentWidth / 592.28 * 841.89;
  58 + //未生成pdf的html页面高度
  59 + var leftHeight = contentHeight;
  60 + //页面偏移
  61 + var position = 0;
  62 + //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  63 + var imgWidth = 595.28;
  64 + var imgHeight = 595.28/contentWidth * contentHeight;
  65 +
  66 + var pageData = canvas.toDataURL('image/jpeg', 1.0);
  67 +
  68 +
  69 +
  70 + var pdf = new JsPDF('', 'pt', 'a4');
  71 +
  72 + //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
  73 + //当内容未超过pdf一页显示的范围,无需分页
  74 + if (leftHeight < pageHeight) {
  75 + //在pdf.addImage(pageData, 'JPEG', 左,上,宽度,高度)设置在pdf中显示;
  76 + pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
  77 + // pdf.addImage(pageData, 'JPEG', 20, 40, imgWidth, imgHeight);
  78 + } else { // 分页
  79 + while(leftHeight > 0) {
  80 + pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
  81 + leftHeight -= pageHeight;
  82 + position -= 841.89;
  83 + //避免添加空白页
  84 + if(leftHeight > 0) {
  85 + pdf.addPage();
  86 + }
  87 + }
  88 + }
  89 +
  90 + //可动态生成
  91 + pdf.save(pdfName);
  92 + })
  93 +
  94 +
  95 +}
  96 +
  97 +
  98 +export default {
  99 + downloadPDF
  100 +}
@@ -17,7 +17,7 @@ export default { @@ -17,7 +17,7 @@ export default {
17 return axios({ 17 return axios({
18 method: 'GET', 18 method: 'GET',
19 url: url, 19 url: url,
20 - params: params, 20 + params: params,
21 headers: { 21 headers: {
22 'Content-Type': 'application/x-www-form-urlencoded' 22 'Content-Type': 'application/x-www-form-urlencoded'
23 } 23 }
@@ -46,7 +46,7 @@ export default { @@ -46,7 +46,7 @@ export default {
46 login: data =>{ 46 login: data =>{
47 return axios({ 47 return axios({
48 method: 'POST', // 请求协议 48 method: 'POST', // 请求协议
49 - url: 'hqpt-user-center/login', // 请求的地址 49 + url: 'cloud-user-center/login', // 请求的地址
50 data: qs.stringify(data), // post 请求的数据 50 data: qs.stringify(data), // post 请求的数据
51 timeout: 30000, // 超时时间, 单位毫秒 51 timeout: 30000, // 超时时间, 单位毫秒
52 headers: { 52 headers: {
@@ -67,4 +67,4 @@ export default { @@ -67,4 +67,4 @@ export default {
67 // headers: {}, 67 // headers: {},
68 // // axios 的配置 68 // // axios 的配置
69 // config: {} 69 // config: {}
70 -// }  
  70 +// }
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/system/log'; 3 +let base = '/cloud-user-center/system/log';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-import/nmms/mt1201'
  3 +
  4 +export const selectFlightLists = params => { return http.get(`${baseUrl}/selectFlightLists`, params); };
  5 +export const getMt1201List=params=>{return http.get(`${baseUrl}/getMt1201List`, params);};
  6 +export const getFenList=params=>{return http.get(`${baseUrl}/getFenList`, params);};
  7 +export const addMt1201=params=>{return http.post(`${baseUrl}/addMt1201`, params);};
  8 +export const ediMt1201=params=>{return http.put(`${baseUrl}/ediMt1201`, params);};
  9 +export const selectAirport=params=>{return http.get(`${baseUrl}/selectList`, params);};
  10 +export const getCountryCode=params=>{return http.get(`${baseUrl}/getCountryCode`, params);};
  11 +export const selectCustomcode=params=>{return http.get(`${baseUrl}/selectCustomcode`, params);};
  12 +
  13 +export const sendCreateMt1201=params=>{return http.post(`${baseUrl}/sendCreateMt1201`, params);};
  14 +export const sendEditeMt1201=params=>{return http.post(`${baseUrl}/sendEditeMt1201`, params);};
  15 +export const sendRemoveMt1201=params=>{return http.post(`${baseUrl}/sendRemoveMt1201`, params);};
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-import/nmms/mt5201'
  3 +let baseUrl2='nmms-server-import/nmms/mt1201'
  4 +
  5 +export const getMt5201List=params=>{return http.get(`${baseUrl}/getMt5201List`, params);};
  6 +export const addMt5201=params=>{return http.post(`${baseUrl}/addMt5201`, params);};
  7 +export const ediMt5201=params=>{return http.put(`${baseUrl}/ediMt5201`, params);};
  8 +export const delMt5201 = params => { return http.del(`${baseUrl}/delMt5201`,params)};
  9 +
  10 +export const sendCreateMt520x=params=>{return http.post(`${baseUrl}/sendCreateMt520x`, params);};
  11 +export const sendRemoveMt520x=params=>{return http.post(`${baseUrl}/sendRemoveMt520x`, params);};
  12 +export const selectCustomcode=params=>{return http.get(`${baseUrl2}/selectCustomcode`, params);};
  13 +
  14 +
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-export/nmms/mt1201'
  3 +
  4 +export const getMt1201ListForParam = params => { return http.get(`${baseUrl}/getMt1201ListForParam`, params); };
  5 +
  6 +export const deleteByIsDelete = params => { return http.del(`${baseUrl}/deleteByIsDelete`,params)};
  7 +
  8 +export const updateStatus = params => { return http.put(`${baseUrl}/updateStatus`, { params: params }); };
  9 +
  10 +export const updateMT1201 = params => { return http.put(`${baseUrl}/updateMT1201`,params)};
  11 +
  12 +export const addMt1201 = params => { return http.post(`${baseUrl}/addMt1201`,params)};
  13 +
  14 +
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/perm'; 3 +let base = '/cloud-user-center/perm';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
@@ -34,4 +34,4 @@ export const add = params => { return axios({ @@ -34,4 +34,4 @@ export const add = params => { return axios({
34 headers: { 34 headers: {
35 'Content-Type': 'application/json;charset=UTF-8' 35 'Content-Type': 'application/json;charset=UTF-8'
36 } 36 }
37 -})};  
  37 +})};
  1 +import request from '@/utils/request'
  2 +
  3 +export function searchUser(name) {
  4 + return request({
  5 + url: '/vue-element-admin/search/user',
  6 + method: 'get',
  7 + params: { name }
  8 + })
  9 +}
  10 +
  11 +export function transactionList(query) {
  12 + return request({
  13 + url: '/vue-element-admin/transaction/list',
  14 + method: 'get',
  15 + params: query
  16 + })
  17 +}
  1 +import http from './http.js'
  2 +
  3 +let baseUrl = 'nmms-server-export/nmms/rep'
  4 +
  5 +export const getResponseForParam = params => {
  6 + return http.get(`${baseUrl}/getResponseForParam`, params);
  7 +};
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/role'; 3 +let base = '/cloud-user-center/role';
4 4
5 5
6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; 6 export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
@@ -43,4 +43,4 @@ export const updateRolePerm = params => { return axios({ @@ -43,4 +43,4 @@ export const updateRolePerm = params => { return axios({
43 headers: { 43 headers: {
44 'Content-Type': 'application/json;charset=UTF-8' 44 'Content-Type': 'application/json;charset=UTF-8'
45 } 45 }
46 -})};  
  46 +})};
1 import http from './http.js' 1 import http from './http.js'
2 -let baseUrl = '/hqpt-user-center/user'  
3 - 2 +let baseUrl = '/cloud-user-center/user'
4 export const getUserList = params => { return http.get(`${baseUrl}/list`, params); }; 3 export const getUserList = params => { return http.get(`${baseUrl}/list`, params); };
5 4
6 export const getUserListPage = params => { return http.get(`/user/list`,params) }; 5 export const getUserListPage = params => { return http.get(`/user/list`,params) };
7 6
8 -export const removeUser = params => { return http.del(`/user/del`,params)}; 7 +export const removeUser = params => { return http.del(`${baseUrl}/del`,params)};
  8 +
  9 +export const batchRemoveUser = params => { return http.del(`${baseUrl}/batchremove`, { params: params }); };
9 10
10 -export const batchRemoveUser = params => { return http.del(`/user/batchremove`, { params: params }); }; 11 +export const editPass = params => { return http.put(`${baseUrl}/password`,params)};
11 12
12 -export const editUser = params => { return http.put(`/user/edit`,params)}; 13 +export const editUser = params => { return http.put(`${baseUrl}/edit`,params)};
13 14
14 -export const addUser = params => { return http.post(`/user/add`,params)}; 15 +export const addUser = params => { return http.post(`${baseUrl}/add`,params)};
15 16
16 -export const setUserRole = params => { return http.put(`/user/roleset`,params)};  
  17 +export const setUserRole = params => { return http.put(`${baseUrl}/roleset`,params)};
  1 +import http from './http.js'
  2 +let baseUrl = 'nmms-server-import/nmms/wayDeclaration'
  3 +export const QueryData=params=>{return http.get(`${baseUrl}/Query`, params);};
1 var SIGN_REGEXP = /([yMdhsm])(\1*)/g; 1 var SIGN_REGEXP = /([yMdhsm])(\1*)/g;
2 var DEFAULT_PATTERN = 'yyyy-MM-dd'; 2 var DEFAULT_PATTERN = 'yyyy-MM-dd';
  3 +/**
  4 + * 根据数组 元素的“值” 来删除或者获取数据
  5 + * 使用方法arrList.splice(arrList.contains('c'),1)
  6 + */
  7 +Array.prototype.contains = function(obj) {
  8 + var i = this.length;
  9 + while (i--) {
  10 + if (this[i] === obj) {
  11 + return i; // 返回的这个 i 就是元素的索引下标,
  12 + }
  13 + }
  14 + return false;
  15 +}
3 16
4 function padding(s, len) { 17 function padding(s, len) {
5 - var len = len - (s + '').length; 18 + len = len - (s + '').length;
6 for (var i = 0; i < len; i++) { s = '0' + s; } 19 for (var i = 0; i < len; i++) { s = '0' + s; }
7 return s; 20 return s;
8 -}; 21 +}
9 22
10 export default { 23 export default {
11 getQueryStringByName: function (name) { 24 getQueryStringByName: function (name) {
  1 +<template>
  2 +<!-- href="https://github.com/PanJiaChen/vue-element-admin"-->
  3 + <a target="_blank" class="github-corner" aria-label="View source on Github">
  4 + <svg
  5 + width="80"
  6 + height="80"
  7 + viewBox="0 0 250 250"
  8 + style="fill:#40c9c6; color:#fff;"
  9 + aria-hidden="true"
  10 + >
  11 + <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
  12 + <path
  13 + d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
  14 + fill="currentColor"
  15 + style="transform-origin: 130px 106px;"
  16 + class="octo-arm"
  17 + />
  18 + <path
  19 + d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
  20 + fill="currentColor"
  21 + class="octo-body"
  22 + />
  23 + </svg>
  24 + </a>
  25 +</template>
  26 +
  27 +<style scoped>
  28 +.github-corner:hover .octo-arm {
  29 + animation: octocat-wave 560ms ease-in-out
  30 +}
  31 +
  32 +@keyframes octocat-wave {
  33 + 0%,
  34 + 100% {
  35 + transform: rotate(0)
  36 + }
  37 + 20%,
  38 + 60% {
  39 + transform: rotate(-25deg)
  40 + }
  41 + 40%,
  42 + 80% {
  43 + transform: rotate(10deg)
  44 + }
  45 +}
  46 +
  47 +@media (max-width:500px) {
  48 + .github-corner:hover .octo-arm {
  49 + animation: none
  50 + }
  51 + .github-corner .octo-arm {
  52 + animation: octocat-wave 560ms ease-in-out
  53 + }
  54 +}
  55 +</style>
@@ -29,12 +29,12 @@ export default { @@ -29,12 +29,12 @@ export default {
29 }, 29 },
30 limit: { 30 limit: {
31 type: Number, 31 type: Number,
32 - default: 20 32 + default: 100
33 }, 33 },
34 pageSizes: { 34 pageSizes: {
35 type: Array, 35 type: Array,
36 default() { 36 default() {
37 - return [10, 20, 30, 50] 37 + return [10, 20, 30, 50, 100]
38 } 38 }
39 }, 39 },
40 layout: { 40 layout: {
@@ -92,7 +92,7 @@ export default { @@ -92,7 +92,7 @@ export default {
92 <style scoped> 92 <style scoped>
93 .pagination-container { 93 .pagination-container {
94 background: #fff; 94 background: #fff;
95 - padding: 32px 16px; 95 + /*padding: 32px 16px;*/
96 } 96 }
97 .pagination-container.hidden { 97 .pagination-container.hidden {
98 display: none; 98 display: none;
  1 +<template>
  2 + <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
  3 + <div class="pan-info">
  4 + <div class="pan-info-roles-container">
  5 + <slot />
  6 + </div>
  7 + </div>
  8 + <!-- eslint-disable-next-line -->
  9 + <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
  10 + </div>
  11 +</template>
  12 +
  13 +<script>
  14 +export default {
  15 + name: 'PanThumb',
  16 + props: {
  17 + image: {
  18 + type: String,
  19 + required: true
  20 + },
  21 + zIndex: {
  22 + type: Number,
  23 + default: 1
  24 + },
  25 + width: {
  26 + type: String,
  27 + default: '150px'
  28 + },
  29 + height: {
  30 + type: String,
  31 + default: '150px'
  32 + }
  33 + }
  34 +}
  35 +</script>
  36 +
  37 +<style scoped>
  38 +.pan-item {
  39 + width: 200px;
  40 + height: 200px;
  41 + border-radius: 50%;
  42 + display: inline-block;
  43 + position: relative;
  44 + cursor: default;
  45 + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  46 +}
  47 +
  48 +.pan-info-roles-container {
  49 + padding: 20px;
  50 + text-align: center;
  51 +}
  52 +
  53 +.pan-thumb {
  54 + width: 100%;
  55 + height: 100%;
  56 + background-position: center center;
  57 + background-size: cover;
  58 + border-radius: 50%;
  59 + overflow: hidden;
  60 + position: absolute;
  61 + transform-origin: 95% 40%;
  62 + transition: all 0.3s ease-in-out;
  63 +}
  64 +
  65 +/* .pan-thumb:after {
  66 + content: '';
  67 + width: 8px;
  68 + height: 8px;
  69 + position: absolute;
  70 + border-radius: 50%;
  71 + top: 40%;
  72 + left: 95%;
  73 + margin: -4px 0 0 -4px;
  74 + background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
  75 + box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
  76 +} */
  77 +
  78 +.pan-info {
  79 + position: absolute;
  80 + width: inherit;
  81 + height: inherit;
  82 + border-radius: 50%;
  83 + overflow: hidden;
  84 + box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
  85 +}
  86 +
  87 +.pan-info h3 {
  88 + color: #fff;
  89 + text-transform: uppercase;
  90 + position: relative;
  91 + letter-spacing: 2px;
  92 + font-size: 18px;
  93 + margin: 0 60px;
  94 + padding: 22px 0 0 0;
  95 + height: 85px;
  96 + font-family: 'Open Sans', Arial, sans-serif;
  97 + text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
  98 +}
  99 +
  100 +.pan-info p {
  101 + color: #fff;
  102 + padding: 10px 5px;
  103 + font-style: italic;
  104 + margin: 0 30px;
  105 + font-size: 12px;
  106 + border-top: 1px solid rgba(255, 255, 255, 0.5);
  107 +}
  108 +
  109 +.pan-info p a {
  110 + display: block;
  111 + color: #333;
  112 + width: 80px;
  113 + height: 80px;
  114 + background: rgba(255, 255, 255, 0.3);
  115 + border-radius: 50%;
  116 + color: #fff;
  117 + font-style: normal;
  118 + font-weight: 700;
  119 + text-transform: uppercase;
  120 + font-size: 9px;
  121 + letter-spacing: 1px;
  122 + padding-top: 24px;
  123 + margin: 7px auto 0;
  124 + font-family: 'Open Sans', Arial, sans-serif;
  125 + opacity: 0;
  126 + transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
  127 + transform: translateX(60px) rotate(90deg);
  128 +}
  129 +
  130 +.pan-info p a:hover {
  131 + background: rgba(255, 255, 255, 0.5);
  132 +}
  133 +
  134 +.pan-item:hover .pan-thumb {
  135 + transform: rotate(-110deg);
  136 +}
  137 +
  138 +.pan-item:hover .pan-info p a {
  139 + opacity: 1;
  140 + transform: translateX(0px) rotate(0deg);
  141 +}
  142 +</style>
  1 +<template>
  2 + <a :class="className" class="link--mallki" href="#">
  3 + {{ text }}
  4 + <span :data-letters="text" />
  5 + <span :data-letters="text" />
  6 + </a>
  7 +</template>
  8 +
  9 +<script>
  10 +export default {
  11 + props: {
  12 + className: {
  13 + type: String,
  14 + default: ''
  15 + },
  16 + text: {
  17 + type: String,
  18 + default: 'vue-element-admin'
  19 + }
  20 + }
  21 +}
  22 +</script>
  23 +
  24 +<style>
  25 +/* Mallki */
  26 +
  27 +.link--mallki {
  28 + font-weight: 800;
  29 + color: #4dd9d5;
  30 + font-family: 'Dosis', sans-serif;
  31 + -webkit-transition: color 0.5s 0.25s;
  32 + transition: color 0.5s 0.25s;
  33 + overflow: hidden;
  34 + position: relative;
  35 + display: inline-block;
  36 + line-height: 1;
  37 + outline: none;
  38 + text-decoration: none;
  39 +}
  40 +
  41 +.link--mallki:hover {
  42 + -webkit-transition: none;
  43 + transition: none;
  44 + color: transparent;
  45 +}
  46 +
  47 +.link--mallki::before {
  48 + content: '';
  49 + width: 100%;
  50 + height: 6px;
  51 + margin: -3px 0 0 0;
  52 + background: #3888fa;
  53 + position: absolute;
  54 + left: 0;
  55 + top: 50%;
  56 + -webkit-transform: translate3d(-100%, 0, 0);
  57 + transform: translate3d(-100%, 0, 0);
  58 + -webkit-transition: -webkit-transform 0.4s;
  59 + transition: transform 0.4s;
  60 + -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  61 + transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  62 +}
  63 +
  64 +.link--mallki:hover::before {
  65 + -webkit-transform: translate3d(100%, 0, 0);
  66 + transform: translate3d(100%, 0, 0);
  67 +}
  68 +
  69 +.link--mallki span {
  70 + position: absolute;
  71 + height: 50%;
  72 + width: 100%;
  73 + left: 0;
  74 + top: 0;
  75 + overflow: hidden;
  76 +}
  77 +
  78 +.link--mallki span::before {
  79 + content: attr(data-letters);
  80 + color: red;
  81 + position: absolute;
  82 + left: 0;
  83 + width: 100%;
  84 + color: #3888fa;
  85 + -webkit-transition: -webkit-transform 0.5s;
  86 + transition: transform 0.5s;
  87 +}
  88 +
  89 +.link--mallki span:nth-child(2) {
  90 + top: 50%;
  91 +}
  92 +
  93 +.link--mallki span:first-child::before {
  94 + top: 0;
  95 + -webkit-transform: translate3d(0, 100%, 0);
  96 + transform: translate3d(0, 100%, 0);
  97 +}
  98 +
  99 +.link--mallki span:nth-child(2)::before {
  100 + bottom: 0;
  101 + -webkit-transform: translate3d(0, -100%, 0);
  102 + transform: translate3d(0, -100%, 0);
  103 +}
  104 +
  105 +.link--mallki:hover span::before {
  106 + -webkit-transition-delay: 0.3s;
  107 + transition-delay: 0.3s;
  108 + -webkit-transform: translate3d(0, 0, 0);
  109 + transform: translate3d(0, 0, 0);
  110 + -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
  111 + transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
  112 +}
  113 +</style>
1 <template> 1 <template>
2 <el-table :data="formatData" :row-style="showRow" v-bind="$attrs"> 2 <el-table :data="formatData" :row-style="showRow" v-bind="$attrs">
3 - <el-table-column type="selection" width="30" align="center"/>  
4 - <el-table-column v-if="columns.length===0" width="30" align="center"> 3 + <el-table-column type="selection" width="50" align="center"></el-table-column>
  4 + <el-table-column v-if="columns.length===0" width="55" align="center">
5 <template slot-scope="scope"> 5 <template slot-scope="scope">
6 <span v-for="space in scope.row._level" :key="space" class="ms-tree-space"/> 6 <span v-for="space in scope.row._level" :key="space" class="ms-tree-space"/>
7 <span v-if="iconShow(0,scope.row)" class="tree-ctrl" @click="toggleExpanded(scope.$index)"> 7 <span v-if="iconShow(0,scope.row)" class="tree-ctrl" @click="toggleExpanded(scope.$index)">
8 <i v-if="!scope.row._expanded" class="el-icon-plus"/> 8 <i v-if="!scope.row._expanded" class="el-icon-plus"/>
9 <i v-else class="el-icon-minus"/> 9 <i v-else class="el-icon-minus"/>
10 </span> 10 </span>
11 - <!--{{ scope.$index }}-->  
12 </template> 11 </template>
13 </el-table-column> 12 </el-table-column>
14 <el-table-column v-for="(column, index) in columns" v-else :key="column.value" :label="column.text" :width="column.width"> 13 <el-table-column v-for="(column, index) in columns" v-else :key="column.value" :label="column.text" :width="column.width">
@@ -20,7 +19,6 @@ @@ -20,7 +19,6 @@
20 <i v-if="!scope.row._expanded" class="el-icon-plus"/> 19 <i v-if="!scope.row._expanded" class="el-icon-plus"/>
21 <i v-else class="el-icon-minus"/> 20 <i v-else class="el-icon-minus"/>
22 </span> 21 </span>
23 - {{ scope.row[column.value] }}  
24 </template> 22 </template>
25 </el-table-column> 23 </el-table-column>
26 <slot/> 24 <slot/>
@@ -49,7 +47,7 @@ export default { @@ -49,7 +47,7 @@ export default {
49 evalArgs: Array, 47 evalArgs: Array,
50 expandAll: { 48 expandAll: {
51 type: Boolean, 49 type: Boolean,
52 - default: true 50 + default: false
53 } 51 }
54 }, 52 },
55 computed: { 53 computed: {
@@ -68,11 +66,8 @@ export default { @@ -68,11 +66,8 @@ export default {
68 }, 66 },
69 methods: { 67 methods: {
70 showRow: function(row) { 68 showRow: function(row) {
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 69 + const show = (row.row.parent ? (row.row.parent._expanded && row.row.parent._show) : true)
  70 + row.row._show = show
76 return show ? 'animation:treeTableShow 1s;-webkit-animation:treeTableShow 1s;' : 'display:none;' 71 return show ? 'animation:treeTableShow 1s;-webkit-animation:treeTableShow 1s;' : 'display:none;'
77 }, 72 },
78 // 切换下级是否展开 73 // 切换下级是否展开
1 1
2 import Vue from 'vue' 2 import Vue from 'vue'
3 import App from './App' 3 import App from './App'
  4 +import ElementUI from 'element-ui'
4 import 'element-ui/lib/theme-chalk/index.css' 5 import 'element-ui/lib/theme-chalk/index.css'
5 //import './assets/theme/theme-green/index.css' 6 //import './assets/theme/theme-green/index.css'
6 import VueRouter from 'vue-router' 7 import VueRouter from 'vue-router'
@@ -11,9 +12,10 @@ import rout from './routes' @@ -11,9 +12,10 @@ import rout from './routes'
11 import Mock from './mock' 12 import Mock from './mock'
12 import i18n from './lang' 13 import i18n from './lang'
13 import 'font-awesome/css/font-awesome.min.css' 14 import 'font-awesome/css/font-awesome.min.css'
14 -import ElementUI from 'element-ui'  
15 15
16 import * as socketApi from './api/socket' 16 import * as socketApi from './api/socket'
  17 +import '@/styles/index.scss'
  18 +
17 19
18 //定义一个全局过滤器实现日期格式化 20 //定义一个全局过滤器实现日期格式化
19 Vue.filter('datefmt',function(input,fmtstring){ 21 Vue.filter('datefmt',function(input,fmtstring){
@@ -33,8 +35,8 @@ Vue.use(Vuex) @@ -33,8 +35,8 @@ Vue.use(Vuex)
33 Vue.prototype.$axios = axios; 35 Vue.prototype.$axios = axios;
34 36
35 //NProgress.configure({ showSpinner: false }); 37 //NProgress.configure({ showSpinner: false });
36 -console.log("mainjs:");  
37 -console.log(rout.routes); 38 +// console.log("mainjs:");
  39 +// console.log(rout.routes);
38 const router = new VueRouter({ 40 const router = new VueRouter({
39 routes:rout.routes 41 routes:rout.routes
40 }); 42 });
@@ -61,7 +63,7 @@ router.beforeEach((to, from, next) => { @@ -61,7 +63,7 @@ router.beforeEach((to, from, next) => {
61 } 63 }
62 }); 64 });
63 65
64 -var message = Vue.prototype.$message; 66 +const message = Vue.prototype.$message;
65 axios.defaults.baseURL = '/api'; 67 axios.defaults.baseURL = '/api';
66 axios.interceptors.response.use( 68 axios.interceptors.response.use(
67 res => { 69 res => {
@@ -89,12 +91,9 @@ axios.interceptors.response.use( @@ -89,12 +91,9 @@ axios.interceptors.response.use(
89 91
90 // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面 92 // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
91 if (error.response.status === 401) { 93 if (error.response.status === 401) {
92 - router.push({  
93 - path: "/login"  
94 - });  
95 message({ 94 message({
96 // 饿了么的消息弹窗组件 95 // 饿了么的消息弹窗组件
97 - message: '授权超时,或未授权,请重新登录', 96 + message: '授权超时,或访问未授权,请重新登录',
98 type: "error" 97 type: "error"
99 }); 98 });
100 } 99 }
@@ -106,9 +105,14 @@ axios.interceptors.response.use( @@ -106,9 +105,14 @@ axios.interceptors.response.use(
106 }); 105 });
107 } 106 }
108 if (error.response.status === 500) { 107 if (error.response.status === 500) {
109 - router.push({  
110 - path: "/error/500" 108 + message({
  109 + // 饿了么的消息弹窗组件
  110 + message: error.message,
  111 + type: "error"
111 }); 112 });
  113 + // router.push({
  114 + // path: "/error/500"
  115 + // });
112 } 116 }
113 if (error.response.status === 502) { 117 if (error.response.status === 502) {
114 router.push({ 118 router.push({
@@ -116,13 +120,15 @@ axios.interceptors.response.use( @@ -116,13 +120,15 @@ axios.interceptors.response.use(
116 }); 120 });
117 } 121 }
118 if (error.response.status === 404) { 122 if (error.response.status === 404) {
119 - router.push({  
120 - path: "/error/404" 123 + message({
  124 + // 饿了么的消息弹窗组件
  125 + message: error.message,
  126 + type: "error"
121 }); 127 });
122 } 128 }
123 } 129 }
124 // 返回 response 里的错误信息 130 // 返回 response 里的错误信息
125 - let errorInfo = error.data.error ? error.data.error.message : error.data; 131 + let errorInfo = error.response ? error.response.statusText : (error.data.error ? error.data.error.message : error.message);
126 return Promise.reject(errorInfo); 132 return Promise.reject(errorInfo);
127 } 133 }
128 ); 134 );
1 import Login from './views/Login.vue' 1 import Login from './views/Login.vue'
2 import NotFound from './views/404.vue' 2 import NotFound from './views/404.vue'
3 import Home from './views/Home.vue' 3 import Home from './views/Home.vue'
4 -import Main from './views/Main.vue' 4 +import Main from './views/dashboard/index'
5 // import Table from './views/nav1/Table.vue' 5 // import Table from './views/nav1/Table.vue'
6 import Role from './views/nav1/role.vue' 6 import Role from './views/nav1/role.vue'
7 import Perm from './views/nav1/perm.vue' 7 import Perm from './views/nav1/perm.vue'
@@ -14,6 +14,27 @@ import Process from './views/hqpt/Process.vue' @@ -14,6 +14,27 @@ import Process from './views/hqpt/Process.vue'
14 import Job from './views/hqpt/Job.vue' 14 import Job from './views/hqpt/Job.vue'
15 // import Form from './views/nav1/Form.vue' 15 // import Form from './views/nav1/Form.vue'
16 16
  17 +
  18 +import OrgManifest from './views/nmms/orgManifest.vue'
  19 +import ExitFlight from './views/nmms/ExitFlight.vue'
  20 +import ExitPre from './views/nmms/ExitPre.vue'
  21 +import ExitTidy from './views/nmms/ExitTidy.vue'
  22 +import ExitArrive from './views/nmms/ExitArrive.vue'
  23 +import ExitManifest from './views/nmms/ExitManifest.vue'
  24 +import ExitLoading from './views/nmms/ExitLoading.vue'
  25 +import ExitFlightDesc from './views/nmms/ExitFlightDesc.vue'
  26 +import LostLoad from './views/lostLoadChange/lostLoading.vue'
  27 +import LostLoadChange from './views/lostLoadChange/lostLoadChange.vue'
  28 +
  29 +import OrigFlightList from './views/nmms_import/OrigFlightList.vue'
  30 +import EnterFlightInfo from './views/nmms_import/EnterFlightInfo.vue'
  31 +import OrigMaster from './views/nmms_import/OrigMaster.vue'
  32 +import EnterTally from './views/nmms_import/EnterFlightTally.vue'
  33 +import TallyMster from './views/nmms_import/TallyMster.vue'
  34 +import Waybill from './views/nmms_import/Waybill.vue'
  35 +import AllocateSearch from './views/nmms_import/AllocateSearch.vue'
  36 +import Importallocation from './views/nmms_import/Importallocation.vue'
  37 +import Allocatearrive from './views/nmms_import/Allocatearrive.vue'
17 import User from './views/nav1/user.vue' 38 import User from './views/nav1/user.vue'
18 import Page4 from './views/nav2/Page4.vue' 39 import Page4 from './views/nav2/Page4.vue'
19 import Page5 from './views/nav2/Page5.vue' 40 import Page5 from './views/nav2/Page5.vue'
@@ -47,7 +68,7 @@ let routes = [ @@ -47,7 +68,7 @@ let routes = [
47 leaf: true, 68 leaf: true,
48 iconCls: 'el-icon-menu', 69 iconCls: 'el-icon-menu',
49 children: [ 70 children: [
50 - { path: '/main', component: Main, name: '首页'}, 71 + {path: '/main', component: Main, name: '首页'},
51 ] 72 ]
52 }, 73 },
53 // { path: '/test', component: Main }, 74 // { path: '/test', component: Main },
@@ -58,7 +79,7 @@ let routes = [ @@ -58,7 +79,7 @@ let routes = [
58 iconCls: 'el-icon-setting',//图标样式class 79 iconCls: 'el-icon-setting',//图标样式class
59 children: [ 80 children: [
60 { path: '/user', component: User, name: '用户管理' }, 81 { path: '/user', component: User, name: '用户管理' },
61 - { path: '/role', component: Role, name: '岗位管理' }, 82 + { path: '/role', component: Role, name: '组织机构' },
62 { path: '/perm', component: Perm, name: '权限管理' }, 83 { path: '/perm', component: Perm, name: '权限管理' },
63 { path: '/log', component: LOG, name: '系统日志' }, 84 { path: '/log', component: LOG, name: '系统日志' },
64 { path: '/department', component: Department, name: '部门管理' }, 85 { path: '/department', component: Department, name: '部门管理' },
@@ -73,7 +94,51 @@ let routes = [ @@ -73,7 +94,51 @@ let routes = [
73 iconCls: 'fa fa-id-card-o', 94 iconCls: 'fa fa-id-card-o',
74 children: [ 95 children: [
75 { path: '/process', component: Process, name: '工单管理' }, 96 { path: '/process', component: Process, name: '工单管理' },
76 - { path: '/job', component: Job, name: '任务管理' } 97 + { path: '/job', component: Job, name: '任务管理' },
  98 + {path: '/pre1', component: PreManifest, name: '预配'},
  99 + ]
  100 + },
  101 + {
  102 + path: '/output',
  103 + component: Home,
  104 + name: '出港业务申报',
  105 + iconCls: 'el-icon-collection',
  106 + children: [
  107 + {path: '/flight', component: ExitFlight, name: '出港航班申报'},
  108 + {path: '/manifest', component: ExitManifest, name: '出港运单申报'},
  109 + {path: '/pre', component: ExitPre, name: '出港预配舱单'},
  110 + {path: '/arrive', component: ExitArrive, name: '出港运抵'},
  111 + {path: '/loadingView', component: ExitFlightDesc, name: '出港航班信息'},
  112 + {path: '/loading', component: ExitLoading, name: '出港装载'},
  113 + {path: '/tidy', component: ExitTidy, name: '出港理货'}
  114 + ]
  115 + },
  116 + {
  117 + path: '/nmms2',
  118 + component: Home,
  119 + name: '进港业务申报',
  120 + iconCls: 'fa fa-id-card-o',
  121 + children: [
  122 + { path: '/orig', component: OrigFlightList, name: '进港航班申报' },
  123 + {path:'/waybill',component:Waybill,name:'进港运单申报'},
  124 + {path:'/allocateSearch',component:AllocateSearch,name:'运单分拨申报'},
  125 + { path: '/enter', component: EnterFlightInfo, name: '原始舱单'},
  126 + { path:'/origmaster',component:OrigMaster,name:'进港原始舱单'},
  127 + {path:'/entertall',component:EnterTally,name:'进港理货'},
  128 + {path:'/tallymaster',component:TallyMster,name:'进港理货舱单'},
  129 + {path:'/importallocation',component:Importallocation,name:'进港分拨'},
  130 + {path:'/allocatearrive',component:Allocatearrive,name:'分拨运抵'},
  131 + ]
  132 + },
  133 + {
  134 + path: '/lost',
  135 + component: Home,
  136 + name: '落装改配申报',
  137 + iconCls:'el-icon-goods',
  138 + children:[
  139 + {path:'/lostLoad',component:LostLoad,name:'落装业务申报'},
  140 + {path:'/lostLoadChange',component:LostLoadChange,name:'改配业务申报'}
  141 +
77 ] 142 ]
78 }, 143 },
79 { 144 {
@@ -105,7 +170,6 @@ let routes = [ @@ -105,7 +170,6 @@ let routes = [
105 iconCls: 'fa fa-address-card', 170 iconCls: 'fa fa-address-card',
106 // leaf: true,//只有一个节点 171 // leaf: true,//只有一个节点
107 children: [ 172 children: [
108 -  
109 { path: '/water_stations_patrol', component: WaterStationsPatrol, name: '二水厂-水站巡视记录单管理' }, 173 { path: '/water_stations_patrol', component: WaterStationsPatrol, name: '二水厂-水站巡视记录单管理' },
110 // { path: '/page6', component: Page6, name: '水质量检测' }, 174 // { path: '/page6', component: Page6, name: '水质量检测' },
111 // { path: '/page6', component: Page6, name: '污水站' }, 175 // { path: '/page6', component: Page6, name: '污水站' },
@@ -119,13 +183,13 @@ let routes = [ @@ -119,13 +183,13 @@ let routes = [
119 name: 'Charts', 183 name: 'Charts',
120 iconCls: 'fa fa-bar-chart', 184 iconCls: 'fa fa-bar-chart',
121 children: [ 185 children: [
122 - { path: '/echarts', component: echarts, name: 'echarts' } 186 + {path: '/echarts', component: echarts, name: 'echarts'}
123 ] 187 ]
124 }, 188 },
125 { 189 {
126 path: '*', 190 path: '*',
127 hidden: true, 191 hidden: true,
128 - redirect: { path: '/404' } 192 + redirect: {path: '/404'}
129 } 193 }
130 ]; 194 ];
131 let initRouters = routes.concat(); 195 let initRouters = routes.concat();
@@ -136,7 +200,7 @@ let setUserMenus = function (list) { @@ -136,7 +200,7 @@ let setUserMenus = function (list) {
136 * 处理登陆后的账号对应的菜单 200 * 处理登陆后的账号对应的菜单
137 * @param menuList 201 * @param menuList
138 */ 202 */
139 -let handleMenuList = function (router,menu) { 203 +let handleMenuList = function (router, menu) {
140 var _self = this; 204 var _self = this;
141 var routerName = ""; 205 var routerName = "";
142 router.forEach(function (v_router) { 206 router.forEach(function (v_router) {
@@ -149,16 +213,16 @@ let handleMenuList = function (router,menu) { @@ -149,16 +213,16 @@ let handleMenuList = function (router,menu) {
149 213
150 //匹配到继续判断是否子元素,有子元素继续递归 214 //匹配到继续判断是否子元素,有子元素继续递归
151 if (result) { 215 if (result) {
152 - if(v_router.children) {  
153 - _self.handleMenuList(v_router.children,result.children); 216 + if (v_router.children) {
  217 + _self.handleMenuList(v_router.children, result.children);
154 } 218 }
155 //没有则可以移除 219 //没有则可以移除
156 - }else {  
157 - router.splice(router.findIndex(itm => itm.name === routerName ),1); 220 + } else {
  221 + router.splice(router.findIndex(itm => itm.name === routerName), 1);
158 } 222 }
159 }) 223 })
160 }); 224 });
161 } 225 }
162 export default { 226 export default {
163 - routes,setUserMenus,handleMenuList,initRouters  
164 -};  
  227 + routes, setUserMenus, handleMenuList, initRouters
  228 +};
  1 +@import './variables.scss';
  2 +
  3 +@mixin colorBtn($color) {
  4 + background: $color;
  5 +
  6 + &:hover {
  7 + color: $color;
  8 +
  9 + &:before,
  10 + &:after {
  11 + background: $color;
  12 + }
  13 + }
  14 +}
  15 +
  16 +.blue-btn {
  17 + @include colorBtn($blue)
  18 +}
  19 +
  20 +.light-blue-btn {
  21 + @include colorBtn($light-blue)
  22 +}
  23 +
  24 +.red-btn {
  25 + @include colorBtn($red)
  26 +}
  27 +
  28 +.pink-btn {
  29 + @include colorBtn($pink)
  30 +}
  31 +
  32 +.green-btn {
  33 + @include colorBtn($green)
  34 +}
  35 +
  36 +.tiffany-btn {
  37 + @include colorBtn($tiffany)
  38 +}
  39 +
  40 +.yellow-btn {
  41 + @include colorBtn($yellow)
  42 +}
  43 +
  44 +.pan-btn {
  45 + font-size: 14px;
  46 + color: #fff;
  47 + padding: 14px 36px;
  48 + border-radius: 8px;
  49 + border: none;
  50 + outline: none;
  51 + transition: 600ms ease all;
  52 + position: relative;
  53 + display: inline-block;
  54 +
  55 + &:hover {
  56 + background: #fff;
  57 +
  58 + &:before,
  59 + &:after {
  60 + width: 100%;
  61 + transition: 600ms ease all;
  62 + }
  63 + }
  64 +
  65 + &:before,
  66 + &:after {
  67 + content: '';
  68 + position: absolute;
  69 + top: 0;
  70 + right: 0;
  71 + height: 2px;
  72 + width: 0;
  73 + transition: 400ms ease all;
  74 + }
  75 +
  76 + &::after {
  77 + right: inherit;
  78 + top: inherit;
  79 + left: 0;
  80 + bottom: 0;
  81 + }
  82 +}
  83 +
  84 +.custom-button {
  85 + display: inline-block;
  86 + line-height: 1;
  87 + white-space: nowrap;
  88 + cursor: pointer;
  89 + background: #fff;
  90 + color: #fff;
  91 + -webkit-appearance: none;
  92 + text-align: center;
  93 + box-sizing: border-box;
  94 + outline: 0;
  95 + margin: 0;
  96 + padding: 10px 15px;
  97 + font-size: 14px;
  98 + border-radius: 4px;
  99 +}
  1 +//覆盖一些element-ui样式
  2 +
  3 +.el-breadcrumb__inner,
  4 +.el-breadcrumb__inner a {
  5 + font-weight: 400 !important;
  6 +}
  7 +
  8 +.el-upload {
  9 + input[type="file"] {
  10 + display: none !important;
  11 + }
  12 +}
  13 +
  14 +.el-upload__input {
  15 + display: none;
  16 +}
  17 +
  18 +.cell {
  19 + .el-tag {
  20 + margin-right: 0px;
  21 + }
  22 +}
  23 +
  24 +.small-padding {
  25 + .cell {
  26 + padding-left: 5px;
  27 + padding-right: 5px;
  28 + }
  29 +}
  30 +
  31 +.fixed-width {
  32 + .el-button--mini {
  33 + padding: 7px 10px;
  34 + width: 60px;
  35 + }
  36 +}
  37 +
  38 +.status-col {
  39 + .cell {
  40 + padding: 0 10px;
  41 + text-align: center;
  42 +
  43 + .el-tag {
  44 + margin-right: 0px;
  45 + }
  46 + }
  47 +}
  48 +
  49 +//暂时性解决dialog 问题 https://github.com/ElemeFE/element/issues/2461
  50 +.el-dialog {
  51 + transform: none;
  52 + left: 0;
  53 + position: relative;
  54 + margin: 0 auto;
  55 +}
  56 +
  57 +//文章页textarea修改样式
  58 +.article-textarea {
  59 + textarea {
  60 + padding-right: 40px;
  61 + resize: none;
  62 + border: none;
  63 + border-radius: 0px;
  64 + border-bottom: 1px solid #bfcbd9;
  65 + }
  66 +}
  67 +
  68 +//element ui upload
  69 +.upload-container {
  70 + .el-upload {
  71 + width: 100%;
  72 +
  73 + .el-upload-dragger {
  74 + width: 100%;
  75 + height: 200px;
  76 + }
  77 + }
  78 +}
  79 +
  80 +//dropdown
  81 +.el-dropdown-menu {
  82 + a {
  83 + display: block
  84 + }
  85 +}
  1 +@import './variables.scss';
  2 +@import './mixin.scss';
  3 +@import './transition.scss';
  4 +@import './element-ui.scss';
  5 +@import './sidebar.scss';
  6 +@import './btn.scss';
  7 +
  8 +body {
  9 + height: 100%;
  10 + -moz-osx-font-smoothing: grayscale;
  11 + -webkit-font-smoothing: antialiased;
  12 + text-rendering: optimizeLegibility;
  13 + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
  14 +}
  15 +
  16 +label {
  17 + font-weight: 700;
  18 +}
  19 +
  20 +html {
  21 + height: 100%;
  22 + box-sizing: border-box;
  23 +}
  24 +
  25 +#app {
  26 + height: 100%;
  27 +}
  28 +
  29 +*,
  30 +*:before,
  31 +*:after {
  32 + box-sizing: inherit;
  33 +}
  34 +
  35 +.no-padding {
  36 + padding: 0px !important;
  37 +}
  38 +
  39 +.padding-content {
  40 + padding: 4px 0;
  41 +}
  42 +
  43 +a:focus,
  44 +a:active {
  45 + outline: none;
  46 +}
  47 +
  48 +a,
  49 +a:focus,
  50 +a:hover {
  51 + cursor: pointer;
  52 + color: inherit;
  53 + text-decoration: none;
  54 +}
  55 +
  56 +div:focus {
  57 + outline: none;
  58 +}
  59 +
  60 +.fr {
  61 + float: right;
  62 +}
  63 +
  64 +.fl {
  65 + float: left;
  66 +}
  67 +
  68 +.pr-5 {
  69 + padding-right: 5px;
  70 +}
  71 +
  72 +.pl-5 {
  73 + padding-left: 5px;
  74 +}
  75 +
  76 +.block {
  77 + display: block;
  78 +}
  79 +
  80 +.pointer {
  81 + cursor: pointer;
  82 +}
  83 +
  84 +.inlineBlock {
  85 + display: block;
  86 +}
  87 +
  88 +.clearfix {
  89 + &:after {
  90 + visibility: hidden;
  91 + display: block;
  92 + font-size: 0;
  93 + content: " ";
  94 + clear: both;
  95 + height: 0;
  96 + }
  97 +}
  98 +
  99 +code {
  100 + background: #eef1f6;
  101 + padding: 15px 16px;
  102 + margin-bottom: 20px;
  103 + display: block;
  104 + line-height: 36px;
  105 + font-size: 15px;
  106 + font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
  107 +
  108 + a {
  109 + color: #337ab7;
  110 + cursor: pointer;
  111 +
  112 + &:hover {
  113 + color: rgb(32, 160, 255);
  114 + }
  115 + }
  116 +}
  117 +
  118 +.warn-content {
  119 + background: rgba(66, 185, 131, .1);
  120 + border-radius: 2px;
  121 + padding: 16px;
  122 + padding: 1rem;
  123 + line-height: 1.6rem;
  124 + word-spacing: .05rem;
  125 +
  126 + a {
  127 + color: #42b983;
  128 + font-weight: 600;
  129 + }
  130 +}
  131 +
  132 +//main-container全局样式
  133 +.app-container {
  134 + padding: 20px;
  135 +}
  136 +
  137 +.components-container {
  138 + margin: 30px 50px;
  139 + position: relative;
  140 +}
  141 +
  142 +.pagination-container {
  143 + margin-top: 30px;
  144 +}
  145 +
  146 +.text-center {
  147 + text-align: center
  148 +}
  149 +
  150 +.sub-navbar {
  151 + height: 50px;
  152 + line-height: 50px;
  153 + position: relative;
  154 + width: 100%;
  155 + text-align: right;
  156 + padding-right: 20px;
  157 + transition: 600ms ease position;
  158 + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
  159 +
  160 + .subtitle {
  161 + font-size: 20px;
  162 + color: #fff;
  163 + }
  164 +
  165 + &.draft {
  166 + background: #d0d0d0;
  167 + }
  168 +
  169 + &.deleted {
  170 + background: #d0d0d0;
  171 + }
  172 +}
  173 +
  174 +.link-type,
  175 +.link-type:focus {
  176 + color: #337ab7;
  177 + cursor: pointer;
  178 +
  179 + &:hover {
  180 + color: rgb(32, 160, 255);
  181 + }
  182 +}
  183 +
  184 +.filter-container {
  185 + padding-bottom: 10px;
  186 +
  187 + .filter-item {
  188 + display: inline-block;
  189 + vertical-align: middle;
  190 + margin-bottom: 10px;
  191 + }
  192 +}
  193 +
  194 +//refine vue-multiselect plugin
  195 +.multiselect {
  196 + line-height: 16px;
  197 +}
  198 +
  199 +.multiselect--active {
  200 + z-index: 1000 !important;
  201 +}
  1 +@mixin clearfix {
  2 + &:after {
  3 + content: "";
  4 + display: table;
  5 + clear: both;
  6 + }
  7 +}
  8 +
  9 +@mixin scrollBar {
  10 + &::-webkit-scrollbar-track-piece {
  11 + background: #d3dce6;
  12 + }
  13 +
  14 + &::-webkit-scrollbar {
  15 + width: 6px;
  16 + }
  17 +
  18 + &::-webkit-scrollbar-thumb {
  19 + background: #99a9bf;
  20 + border-radius: 20px;
  21 + }
  22 +}
  23 +
  24 +@mixin relative {
  25 + position: relative;
  26 + width: 100%;
  27 + height: 100%;
  28 +}
  29 +
  30 +@mixin pct($pct) {
  31 + width: #{$pct};
  32 + position: relative;
  33 + margin: 0 auto;
  34 +}
  35 +
  36 +@mixin triangle($width, $height, $color, $direction) {
  37 + $width: $width/2;
  38 + $color-border-style: $height solid $color;
  39 + $transparent-border-style: $width solid transparent;
  40 + height: 0;
  41 + width: 0;
  42 +
  43 + @if $direction==up {
  44 + border-bottom: $color-border-style;
  45 + border-left: $transparent-border-style;
  46 + border-right: $transparent-border-style;
  47 + }
  48 +
  49 + @else if $direction==right {
  50 + border-left: $color-border-style;
  51 + border-top: $transparent-border-style;
  52 + border-bottom: $transparent-border-style;
  53 + }
  54 +
  55 + @else if $direction==down {
  56 + border-top: $color-border-style;
  57 + border-left: $transparent-border-style;
  58 + border-right: $transparent-border-style;
  59 + }
  60 +
  61 + @else if $direction==left {
  62 + border-right: $color-border-style;
  63 + border-top: $transparent-border-style;
  64 + border-bottom: $transparent-border-style;
  65 + }
  66 +}
  1 +#app {
  2 +
  3 + // 主体区域 Main container
  4 + .main-container {
  5 + min-height: 100%;
  6 + transition: margin-left .28s;
  7 + margin-left: $sideBarWidth;
  8 + position: relative;
  9 + }
  10 +
  11 + // 侧边栏 Sidebar container
  12 + .sidebar-container {
  13 + transition: width 0.28s;
  14 + width: $sideBarWidth !important;
  15 + height: 100%;
  16 + position: fixed;
  17 + font-size: 0px;
  18 + top: 0;
  19 + bottom: 0;
  20 + left: 0;
  21 + z-index: 1001;
  22 + overflow: hidden;
  23 +
  24 + //reset element-ui css
  25 + .horizontal-collapse-transition {
  26 + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
  27 + }
  28 +
  29 + .scrollbar-wrapper {
  30 + overflow-x: hidden !important;
  31 +
  32 + .el-scrollbar__view {
  33 + height: 100%;
  34 + }
  35 + }
  36 +
  37 + .el-scrollbar__bar.is-vertical {
  38 + right: 0px;
  39 + }
  40 +
  41 + .is-horizontal {
  42 + display: none;
  43 + }
  44 +
  45 + a {
  46 + display: inline-block;
  47 + width: 100%;
  48 + overflow: hidden;
  49 + }
  50 +
  51 + .svg-icon {
  52 + margin-right: 16px;
  53 + }
  54 +
  55 + .el-menu {
  56 + border: none;
  57 + height: 100%;
  58 + width: 100% !important;
  59 + }
  60 +
  61 + // menu hover
  62 + .submenu-title-noDropdown,
  63 + .el-submenu__title {
  64 + &:hover {
  65 + background-color: $menuHover !important;
  66 + }
  67 + }
  68 +
  69 + .is-active>.el-submenu__title {
  70 + color: $subMenuActiveText !important;
  71 + }
  72 +
  73 + & .nest-menu .el-submenu>.el-submenu__title,
  74 + & .el-submenu .el-menu-item {
  75 + min-width: $sideBarWidth !important;
  76 + background-color: $subMenuBg !important;
  77 +
  78 + &:hover {
  79 + background-color: $subMenuHover !important;
  80 + }
  81 + }
  82 + }
  83 +
  84 + .hideSidebar {
  85 + .sidebar-container {
  86 + width: 36px !important;
  87 + }
  88 +
  89 + .main-container {
  90 + margin-left: 36px;
  91 + }
  92 +
  93 + .submenu-title-noDropdown {
  94 + padding-left: 10px !important;
  95 + position: relative;
  96 +
  97 + .el-tooltip {
  98 + padding: 0 10px !important;
  99 + }
  100 + }
  101 +
  102 + .el-submenu {
  103 + overflow: hidden;
  104 +
  105 + &>.el-submenu__title {
  106 + padding-left: 10px !important;
  107 +
  108 + .el-submenu__icon-arrow {
  109 + display: none;
  110 + }
  111 + }
  112 + }
  113 +
  114 + .el-menu--collapse {
  115 + .el-submenu {
  116 + &>.el-submenu__title {
  117 + &>span {
  118 + height: 0;
  119 + width: 0;
  120 + overflow: hidden;
  121 + visibility: hidden;
  122 + display: inline-block;
  123 + }
  124 + }
  125 + }
  126 + }
  127 + }
  128 +
  129 + .el-menu--collapse .el-menu .el-submenu {
  130 + min-width: $sideBarWidth !important;
  131 + }
  132 +
  133 + // 适配移动端, Mobile responsive
  134 + .mobile {
  135 + .main-container {
  136 + margin-left: 0px;
  137 + }
  138 +
  139 + .sidebar-container {
  140 + transition: transform .28s;
  141 + width: $sideBarWidth !important;
  142 + }
  143 +
  144 + &.hideSidebar {
  145 + .sidebar-container {
  146 + pointer-events: none;
  147 + transition-duration: 0.3s;
  148 + transform: translate3d(-$sideBarWidth, 0, 0);
  149 + }
  150 + }
  151 + }
  152 +
  153 + .withoutAnimation {
  154 +
  155 + .main-container,
  156 + .sidebar-container {
  157 + transition: none;
  158 + }
  159 + }
  160 +}
  161 +
  162 +// when menu collapsed
  163 +.el-menu--vertical {
  164 + &>.el-menu {
  165 + .svg-icon {
  166 + margin-right: 16px;
  167 + }
  168 + }
  169 +
  170 + .nest-menu .el-submenu>.el-submenu__title,
  171 + .el-menu-item {
  172 + &:hover {
  173 + // you can use $subMenuHover
  174 + background-color: $menuHover !important;
  175 + }
  176 + }
  177 +
  178 + // the scroll bar appears when the subMenu is too long
  179 + >.el-menu--popup {
  180 + max-height: 100vh;
  181 + overflow-y: auto;
  182 +
  183 + &::-webkit-scrollbar-track-piece {
  184 + background: #d3dce6;
  185 + }
  186 +
  187 + &::-webkit-scrollbar {
  188 + width: 6px;
  189 + }
  190 +
  191 + &::-webkit-scrollbar-thumb {
  192 + background: #99a9bf;
  193 + border-radius: 20px;
  194 + }
  195 + }
  196 +}
  1 +//globl transition css
  2 +
  3 +/*fade*/
  4 +.fade-enter-active,
  5 +.fade-leave-active {
  6 + transition: opacity 0.28s;
  7 +}
  8 +
  9 +.fade-enter,
  10 +.fade-leave-active {
  11 + opacity: 0;
  12 +}
  13 +
  14 +/*fade-transform*/
  15 +.fade-transform-leave-active,
  16 +.fade-transform-enter-active {
  17 + transition: all .5s;
  18 +}
  19 +
  20 +.fade-transform-enter {
  21 + opacity: 0;
  22 + transform: translateX(-30px);
  23 +}
  24 +
  25 +.fade-transform-leave-to {
  26 + opacity: 0;
  27 + transform: translateX(30px);
  28 +}
  29 +
  30 +/*breadcrumb transition*/
  31 +.breadcrumb-enter-active,
  32 +.breadcrumb-leave-active {
  33 + transition: all .5s;
  34 +}
  35 +
  36 +.breadcrumb-enter,
  37 +.breadcrumb-leave-active {
  38 + opacity: 0;
  39 + transform: translateX(20px);
  40 +}
  41 +
  42 +.breadcrumb-move {
  43 + transition: all .5s;
  44 +}
  45 +
  46 +.breadcrumb-leave-active {
  47 + position: absolute;
  48 +}
  1 +// base color
  2 +$blue:#324157;
  3 +$light-blue:#3A71A8;
  4 +$red:#C03639;
  5 +$pink: #E65D6E;
  6 +$green: #30B08F;
  7 +$tiffany: #4AB7BD;
  8 +$yellow:#FEC171;
  9 +$panGreen: #30B08F;
  10 +
  11 +//sidebar
  12 +$menuText:#bfcbd9;
  13 +$menuActiveText:#409EFF;
  14 +$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
  15 +
  16 +$menuBg:#304156;
  17 +$menuHover:#263445;
  18 +
  19 +$subMenuBg:#1f2d3d;
  20 +$subMenuHover:#001528;
  21 +
  22 +$sideBarWidth: 180px;
  23 +
  24 +// the :export directive is the magic sauce for webpack
  25 +:export {
  26 + menuText: $menuText;
  27 + menuActiveText: $menuActiveText;
  28 + subMenuActiveText: $subMenuActiveText;
  29 + menuBg: $menuBg;
  30 + menuHover: $menuHover;
  31 + subMenuBg: $subMenuBg;
  32 + subMenuHover: $subMenuHover;
  33 + sideBarWidth: $sideBarWidth;
  34 +}
1 -$color-primary: #20a0ff;//#18c79c  
  1 +$color-primary: #1a4496;//#18c79c
@@ -8,7 +8,7 @@ const type = [{ @@ -8,7 +8,7 @@ const type = [{
8 value: 'CN', 8 value: 'CN',
9 label: 'PASSPORT' 9 label: 'PASSPORT'
10 }, { 10 }, {
11 - value: 'CN', 11 + value: 'US',
12 label: 'OC' 12 label: 'OC'
13 }, { 13 }, {
14 value: 'CN', 14 value: 'CN',
@@ -35,6 +35,50 @@ export function validAlphabets(str) { @@ -35,6 +35,50 @@ export function validAlphabets(str) {
35 return reg.test(str) 35 return reg.test(str)
36 } 36 }
37 37
  38 +/* 大小写字母数字*/
  39 +export function validAlphabetsAndNum(str) {
  40 + const reg = /^[0-9A-Za-z]+$/
  41 + return reg.test(str)
  42 +}
  43 +
  44 +/* 大小写字母数字空格*/
  45 +export function validAlphabetsAndSpanceKey(str) {
  46 + const reg = /^[0-9a-zA-Z\s]+$/
  47 + return reg.test(str)
  48 +}
  49 +
  50 +/**
  51 + * 航班校验
  52 + */
  53 +export function validFlightNo(str) {
  54 + const reg = /^[A-Z0-9]{6,7}$/
  55 + if(!reg.test(str)){
  56 + return false
  57 + }
  58 + const flightNoPre = /^[A-Z]+$/
  59 + if(!flightNoPre.test(str.substring(0,2))){
  60 + return false
  61 + } else {
  62 + return true
  63 + }
  64 +}
  65 +
  66 +/**
  67 + * 主单校验
  68 + */
  69 +export function validAwb(str) {
  70 + const reg = /^[0-9\-]{12}$/
  71 + if(!reg.test(str)){
  72 + return false
  73 + }
  74 + const result = str.split("-")[1]
  75 + const num = (result.substring(0,7)) % 7
  76 + if(num === eval(str.substring(11)) ){
  77 + return true
  78 + } else {
  79 + return false
  80 + }
  81 +}
38 /** 82 /**
39 * validate email 83 * validate email
40 * @param email 84 * @param email
@@ -44,3 +88,25 @@ export function validEmail(email) { @@ -44,3 +88,25 @@ export function validEmail(email) {
44 const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 88 const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
45 return re.test(email) 89 return re.test(email)
46 } 90 }
  91 +
  92 +/**
  93 + *
  94 + * 整数和小数,小数最多两位
  95 + * @param value
  96 + * @returns {boolean}
  97 + */
  98 +export function validatorNum(value) {
  99 + const reg = /^(\d*)+(\.[0-9]{1,2})?$/
  100 + return reg.test(value)
  101 +}
  102 +
  103 +
  104 +/**
  105 + * 关区校验 4位数字
  106 + * @param value
  107 + * @returns {boolean}
  108 + */
  109 +export function validatorCustomsNum(value) {
  110 + const reg = /^(\d{4})$/
  111 + return reg.test(value)
  112 +}
1 <template> 1 <template>
2 - <el-row class="container">  
3 - <el-col :span="24" class="header">  
4 - <el-col :span="10" class="logo" :class="collapsed?'logo-collapse-width':'logo-width'">  
5 - {{collapsed?'':sysName}}  
6 - </el-col>  
7 - <el-col :span="10">  
8 - <div class="tools" @click.prevent="collapse">  
9 - <i class="fa fa-align-justify"></i>  
10 - </div>  
11 - </el-col>  
12 - <el-col :span="4" class="userinfo">  
13 - <el-dropdown trigger="hover">  
14 - <span class="el-dropdown-link userinfo-inner"><img :src="this.sysUserAvatar" /> {{sysUserName}}</span>  
15 - <el-dropdown-menu slot="dropdown">  
16 - <el-dropdown-item>我的消息</el-dropdown-item>  
17 - <el-dropdown-item>设置</el-dropdown-item>  
18 - <el-dropdown-item divided @click.native="logout">退出登录</el-dropdown-item>  
19 - </el-dropdown-menu>  
20 - </el-dropdown>  
21 - </el-col>  
22 - </el-col>  
23 - <el-col :span="24" class="main">  
24 - <aside :class="collapsed?'menu-collapsed':'menu-expanded'">  
25 - <!--导航菜单-->  
26 - <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" @close="handleclose" @select="handleselect" unique-opened router v-show="!collapsed" style="min-width: 230px" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">  
27 - <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden">  
28 - <el-submenu :index="index+''" v-if="!item.leaf">  
29 - <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template>  
30 - <el-menu-item v-for="child in item.children" :index="child.path" :key="child.path" v-if="!child.hidden">{{child.name}}</el-menu-item>  
31 - </el-submenu>  
32 - <el-menu-item v-if="item.leaf&&item.children.length>0" :index="item.children[0].path"><i :class="item.iconCls"></i>{{item.children[0].name}}</el-menu-item>  
33 - </template>  
34 - </el-menu>  
35 - <!--导航菜单-折叠后-->  
36 - <ul class="el-menu el-menu-vertical-demo collapsed" v-show="collapsed" ref="menuCollapsed">  
37 - <li v-for="(item,index) in $router.options.routes" v-if="!item.hidden" class="el-submenu item">  
38 - <template v-if="!item.leaf">  
39 - <div class="el-submenu__title" style="padding-left: 20px;" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)"><i :class="item.iconCls"></i></div>  
40 - <ul class="el-menu submenu" :class="'submenu-hook-'+index" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)">  
41 - <li v-for="child in item.children" v-if="!child.hidden" :key="child.path" class="el-menu-item" style="padding-left: 40px;" :class="$route.path==child.path?'is-active':''" @click="$router.push(child.path)">{{child.name}}</li>  
42 - </ul>  
43 - </template>  
44 - <template v-else>  
45 - <li class="el-submenu">  
46 - <div class="el-submenu__title el-menu-item" style="padding-left: 20px;height: 56px;line-height: 56px;padding: 0 20px;" :class="$route.path==item.children[0].path?'is-active':''" @click="$router.push(item.children[0].path)"><i :class="item.iconCls"></i></div>  
47 - </li>  
48 - </template>  
49 - </li>  
50 - </ul>  
51 - </aside>  
52 - <section class="content-container">  
53 - <div class="grid-content bg-purple-light">  
54 - <el-col :span="24" class="breadcrumb-container">  
55 - <strong class="title">{{$route.name}}</strong>  
56 - <el-breadcrumb separator="/" class="breadcrumb-inner">  
57 - <el-breadcrumb-item v-for="item in $route.matched" :key="item.path">  
58 - {{ item.name }}  
59 - </el-breadcrumb-item>  
60 - </el-breadcrumb>  
61 - </el-col>  
62 - <el-col :span="24" class="content-wrapper">  
63 - <transition name="fade" mode="out-in">  
64 - <router-view></router-view>  
65 - </transition>  
66 - </el-col>  
67 - </div>  
68 - </section>  
69 - </el-col>  
70 - </el-row>  
71 -</template> 2 + <el-row class="container darkmenu" style="margin-top: 0px;">
  3 + <el-col :span="24" class="header">
  4 + <el-col :span="10" class="logo" :class="collapsed?'logo-collapse-width':'logo-width'">
  5 + {{collapsed?'':sysName}}
  6 + </el-col>
  7 + <el-col :span="10">
  8 + <div class="tools" @click.prevent="collapse">
  9 + <i class="fa fa-align-justify"></i>
  10 + </div>
  11 + </el-col>
  12 + <el-col :span="4" class="userinfo">
  13 + <el-dropdown trigger="hover">
  14 + <span class="el-dropdown-link userinfo-inner"><img :src="this.sysUserAvatar" /> {{sysUserName}}</span>
  15 + <el-dropdown-menu slot="dropdown">
  16 + <el-dropdown-item>我的消息</el-dropdown-item>
  17 + <el-dropdown-item @click.native="editPass">修改密码</el-dropdown-item>
  18 + <el-dropdown-item divided @click.native="logout">退出登录</el-dropdown-item>
  19 + </el-dropdown-menu>
  20 + </el-dropdown>
  21 + </el-col>
  22 + </el-col>
  23 + <el-col>
  24 + <el-dialog title="修改密码" :visible.sync="dialogFormVisible">
  25 + <el-form :model="resetForm" status-icon :rules="resetFormRules" ref="resetForm" label-width="100px">
  26 + <el-form-item label="用户名" prop="name">
  27 + <span>{{sysUserName}}</span>
  28 + </el-form-item>
  29 + <el-form-item label="新密码" prop="newpwd">
  30 + <el-input type="password" v-model="resetForm.newpwd" autocomplete="off" placeholder="8-20位字符在数字、小写、大写字母以及特殊字符中四选三"></el-input>
  31 + </el-form-item>
  32 + <el-form-item label="确认密码" prop="renewpwd">
  33 + <el-input type="password" v-model="resetForm.renewpwd" auto-complete="off"></el-input>
  34 + </el-form-item>
  35 + <el-form-item>
  36 + <el-button type="primary" @click="submitEdit('resetForm')" style="float:right">提 交</el-button>
  37 + </el-form-item>
72 38
  39 + </el-form>
  40 + </el-dialog>
  41 + </el-col>
  42 + <el-col :span="24" class="main">
  43 + <aside :class="collapsed?'menu-collapsed':'menu-expanded'">
  44 + <!--导航菜单-->
  45 + <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" @close="handleclose" @select="handleselect" unique-opened router v-show="!collapsed" style="min-width: 230px">
  46 + <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden">
  47 + <el-submenu :index="index+''" v-if="!item.leaf">
  48 + <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template>
  49 + <el-menu-item v-for="child in item.children" :index="child.path" :key="child.path" v-if="!child.hidden">{{child.name}}</el-menu-item>
  50 + </el-submenu>
  51 + <el-menu-item v-if="item.leaf&&item.children.length>0" :index="item.children[0].path"><i :class="item.iconCls"></i>{{item.children[0].name}}</el-menu-item>
  52 + </template>
  53 + </el-menu>
  54 + <!--导航菜单-折叠后-->
  55 + <ul class="el-menu el-menu-vertical-demo collapsed" v-show="collapsed" ref="menuCollapsed">
  56 + <li v-for="(item,index) in $router.options.routes" v-if="!item.hidden" class="el-submenu item">
  57 + <template v-if="!item.leaf">
  58 + <div class="el-submenu__title" style="padding-left: 20px;" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)"><i :class="item.iconCls"></i></div>
  59 + <ul class="el-menu submenu" :class="'submenu-hook-'+index" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)">
  60 + <li v-for="child in item.children" v-if="!child.hidden" :key="child.path" class="el-menu-item" style="padding-left: 40px;" :class="$route.path==child.path?'is-active':''" @click="$router.push(child.path)">{{child.name}}</li>
  61 + </ul>
  62 + </template>
  63 + <template v-else>
  64 + <li class="el-submenu">
  65 + <div class="el-submenu__title el-menu-item" style="padding-left: 20px;height: 56px;line-height: 56px;padding: 0 20px;" :class="$route.path==item.children[0].path?'is-active':''" @click="$router.push(item.children[0].path)"><i :class="item.iconCls"></i></div>
  66 + </li>
  67 +</template>
  68 +</li>
  69 +</ul>
  70 +</aside>
  71 +<section class="content-container">
  72 + <div class="grid-content bg-purple-light">
  73 + <el-col :span="24" class="breadcrumb-container">
  74 + <strong class="title">{{$route.name}}</strong>
  75 + <el-breadcrumb separator="/" class="breadcrumb-inner">
  76 + <el-breadcrumb-item v-for="item in $route.matched" :key="item.path">
  77 + {{ item.name }}
  78 + </el-breadcrumb-item>
  79 + </el-breadcrumb>
  80 + </el-col>
  81 + <el-col :span="24" class="content-wrapper">
  82 + <transition name="fade" mode="out-in">
  83 + <router-view :key="$route.path +$route.query.t"></router-view>
  84 + </transition>
  85 + </el-col>
  86 + </div>
  87 +</section>
  88 +</el-col>
  89 +</el-row>
  90 +</template>
73 91
74 <script> 92 <script>
75 import rt from '../routes' 93 import rt from '../routes'
  94 + import { editPass} from '../api/user';
  95 + import ElFormItem from "element-ui/packages/form/src/form-item";
76 export default { 96 export default {
77 - data() {  
78 - return {  
79 - sysName:'后勤管理平台',  
80 - collapsed:false,  
81 - sysUserName: '',  
82 - sysUserAvatar: '',  
83 - form: {  
84 - name: '',  
85 - region: '',  
86 - date1: '',  
87 - date2: '',  
88 - delivery: false,  
89 - type: [],  
90 - resource: '',  
91 - desc: ''  
92 - }  
93 - }  
94 - },  
95 - methods: {  
96 - onSubmit() {  
97 - console.log('submit!');  
98 - },  
99 - handleopen() {  
100 - console.log('handleopen');  
101 - },  
102 - handleclose() {  
103 - console.log('handleclose');  
104 - },  
105 - handleselect: function (a, b) {  
106 - console.log('handleselect!');  
107 - },  
108 - //退出登录  
109 - logout: function () {  
110 - var _this = this;  
111 - this.$confirm('确认退出吗?', '提示', {  
112 - //type: 'warning'  
113 - }).then(() => {  
114 - sessionStorage.removeItem('user');  
115 - sessionStorage.removeItem('menu');  
116 97
  98 + provide() {
  99 + return {
  100 + reload: this.reload
  101 + }
  102 + },
  103 + components: {ElFormItem},
  104 + data() {
  105 + var validatePass = (rule, value, callback) => {
  106 + if (!value) {
  107 + callback(new Error('请输入新密码'));
  108 + }else {
  109 + var ls=0;
  110 + if(value.match(/([a-z])+/)){
  111 + ls++;
  112 + } if(value.match(/([0-9])+/)){
  113 + ls++;
  114 + } if(value.match(/([A-Z])+/)){
  115 + ls++;
  116 + } if((/([\W])+/) && !value.match(/(![\u4E00-\u9FA5])+/)){
  117 + ls++;
  118 + } if (value.toString().length < 8 || value.toString().length > 20) {
  119 + callback(new Error('密码长度为8 - 20个字符'));
  120 + ls=0;
  121 + } if(value.match(/([\u4E00-\u9FA5])+/)){
  122 + callback(new Error('不能包含中文字符'));
  123 + ls=0;
  124 + }
  125 + switch (ls) {
  126 + case 0: this.passwordPercent = 0;callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三'));break;
  127 + case 1: this.passwordPercent = 33;callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三'));break;
  128 + case 2: this.passwordPercent = 66;callback(new Error('数字、小写字母 、大写字母以及特殊字符中四选三'));break;
  129 + case 3:
  130 + case 4: this.passwordPercent = 100;break;
  131 + default: this.passwordPercent = 0;break;
  132 + }
  133 + callback();
  134 + }
  135 +
  136 + };
  137 +
  138 + var validatePass2 = (rule, value, callback) => {
  139 + if (value === '') {
  140 + callback(new Error('请再次输入密码'));
  141 + } else if (value !== this.resetForm.newpwd) {
  142 + callback(new Error('两次输入密码不一致!'));
  143 + } else {
  144 + callback();
  145 + }
  146 + };
  147 + return {
  148 + sysName:'易通快速通关申报管理系统',
  149 + collapsed:false,
  150 + sysUserName: '',
  151 + sysUserId:'',
  152 + sysUserAvatar: '',
  153 + isRouterAlive: true,
  154 + form: {
  155 + name: '',
  156 + region: '',
  157 + date1: '',
  158 + date2: '',
  159 + delivery: false,
  160 + type: [],
  161 + resource: '',
  162 + desc: ''
  163 + },
  164 + dialogFormVisible:false,
  165 + resetForm: {
  166 + newpwd: '',
  167 + renewpwd: '',
  168 + },
  169 + resetFormRules: {
  170 + newpwd: [
  171 + { required: true, validator: validatePass, trigger: 'blur' }
  172 + ],
  173 + renewpwd: [
  174 + { required: true, validator: validatePass2, trigger: 'blur' }
  175 + ]
  176 + },
  177 + editForm: {
  178 + userId: '',
  179 + password: '',
  180 + },
  181 + }
  182 + },
  183 + methods: {
  184 + reload() {
  185 + this.$nextTick(function () {
  186 + this.$router.push({
  187 + path: this.$router.path,
  188 + query:{
  189 + t: new Date().getTime()
  190 + }
  191 + })
  192 + })
  193 + },
  194 + editPass:function(){
  195 + this.dialogFormVisible=true;
  196 + },
  197 + submitEdit(formName){
  198 + this.$refs[formName].validate((valid) => {
  199 + if (valid) {
  200 + this.editForm.userId=this.sysUserId;
  201 + this.editForm.password=this.resetForm.renewpwd;
  202 + editPass(this.editForm).then(res=>{
  203 + let response=res.data;
  204 + if(response.code=='200'){
  205 + this.$notify({
  206 + title: '密码修改成功',
  207 + message: '密码修改成功,退出请重新登录',
  208 + type: 'success'
  209 + });
  210 + this.dialogFormVisible=false;
  211 + }else{
  212 + this.$notify.error({
  213 + title: '密码修改失败',
  214 + message: '密码修改失败!!!'
  215 + });
  216 + }
  217 + });
  218 + } else {
  219 + console.log('error submit!!');
  220 + return false;
  221 + }
  222 + });
  223 + },
  224 + onSubmit() {
  225 + console.log('submit!');
  226 + },
  227 + handleopen() {
  228 + console.log('handleopen');
  229 + },
  230 + handleclose() {
  231 + console.log('handleclose');
  232 + },
  233 + handleselect: function (a, b) {
  234 + this.reload()
  235 + },
  236 + //退出登录
  237 + logout: function () {
  238 + var _this = this;
  239 + this.$confirm('确认退出吗?', '提示', {
  240 + //type: 'warning'
  241 + }).then(() => {
  242 + sessionStorage.removeItem('user');
  243 + sessionStorage.removeItem('menu');
117 //退出后初始化原来的路由 244 //退出后初始化原来的路由
118 let sysRoutes = JSON.parse(sessionStorage.getItem('sysMenu')); 245 let sysRoutes = JSON.parse(sessionStorage.getItem('sysMenu'));
119 console.log(sysRoutes); 246 console.log(sysRoutes);
120 - _this.$router.options.routes = sysRoutes; 247 + _this.$router.options.routes = sysRoutes;
121 248
122 - _this.$router.push('/login');  
123 - }).catch(() => { 249 + _this.$router.push('/login');
  250 + }).catch(() => {
124 251
125 - }); 252 + });
126 253
127 254
128 - },  
129 - //折叠导航栏  
130 - collapse:function(){  
131 - this.collapsed=!this.collapsed;  
132 - },  
133 - showMenu(i,status){  
134 - this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-'+i)[0].style.display=status?'block':'none';  
135 - }  
136 - },  
137 - mounted() { 255 + },
  256 + //折叠导航栏
  257 + collapse:function(){
  258 + this.collapsed=!this.collapsed;
  259 + },
  260 + showMenu(i,status){
  261 + this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-'+i)[0].style.display=status?'block':'none';
  262 + }
  263 + },
  264 + mounted() {
138 var _this = this; 265 var _this = this;
139 - var user = sessionStorage.getItem('user');  
140 - if (user) {  
141 - user = JSON.parse(user);  
142 - this.sysUserName = user.username || '';  
143 - this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg';  
144 - }  
145 - //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由  
146 - var userRouters = sessionStorage.getItem('menu');  
147 - if (userRouters) { 266 + var user = sessionStorage.getItem('user');
  267 + if (user) {
  268 + user = JSON.parse(user);
  269 + this.sysUserName = user.username || '';
  270 + this.sysUserId=user.userId||'';
  271 + this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg';
  272 + }
  273 + //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由
  274 + var userRouters = sessionStorage.getItem('menu');
  275 + if (userRouters) {
148 userRouters = JSON.parse(userRouters); 276 userRouters = JSON.parse(userRouters);
149 _this.$router.options.routes = userRouters; 277 _this.$router.options.routes = userRouters;
150 console.log("home:"); 278 console.log("home:");
151 console.log(_this.$router.options.routes); 279 console.log(_this.$router.options.routes);
152 - }  
153 - }  
154 - } 280 + }
  281 + }
  282 + }
155 283
156 </script> 284 </script>
157 285
158 <style scoped lang="scss"> 286 <style scoped lang="scss">
159 - @import '~scss_vars';  
160 -  
161 - .container {  
162 - position: absolute;  
163 - top: 0px;  
164 - bottom: 0px;  
165 - width: 100%;  
166 - .header {  
167 - height: 60px;  
168 - line-height: 60px;  
169 - background: $color-primary;  
170 - color:#fff;  
171 - .userinfo {  
172 - text-align: right;  
173 - padding-right: 35px;  
174 - float: right;  
175 - .userinfo-inner {  
176 - cursor: pointer;  
177 - color:#fff;  
178 - img {  
179 - width: 40px;  
180 - height: 40px;  
181 - border-radius: 20px;  
182 - margin: 10px 0px 10px 10px;  
183 - float: right;  
184 - }  
185 - }  
186 - }  
187 - .logo {  
188 - //width:230px;  
189 - height:60px;  
190 - font-size: 22px;  
191 - padding-left:20px;  
192 - padding-right:20px;  
193 - border-color: rgba(238,241,146,0.3);  
194 - border-right-width: 1px;  
195 - border-right-style: solid;  
196 - img {  
197 - width: 40px;  
198 - float: left;  
199 - margin: 10px 10px 10px 18px;  
200 - }  
201 - .txt {  
202 - color:#fff;  
203 - }  
204 - }  
205 - .logo-width{  
206 - width:230px;  
207 - }  
208 - .logo-collapse-width{  
209 - width:60px  
210 - }  
211 - .tools{  
212 - padding: 0px 23px;  
213 - width:14px;  
214 - height: 60px;  
215 - line-height: 60px;  
216 - cursor: pointer;  
217 - }  
218 - }  
219 - .main {  
220 - display: flex;  
221 - // background: #324057;  
222 - position: absolute;  
223 - top: 60px;  
224 - bottom: 0px;  
225 - overflow: hidden;  
226 - aside {  
227 - flex:0 0 230px;  
228 - width: 230px;  
229 - // position: absolute;  
230 - // top: 0px;  
231 - // bottom: 0px;  
232 - .el-menu{  
233 - height: 100%;  
234 - }  
235 - .collapsed{  
236 - width:60px;  
237 - .item{  
238 - position: relative;  
239 - }  
240 - .submenu{  
241 - position:absolute;  
242 - top:0px;  
243 - left:60px;  
244 - z-index:99999;  
245 - height:auto;  
246 - display:none;  
247 - } 287 + @import '~scss_vars';
  288 + .container {
  289 + position: absolute;
  290 + top: 0px;
  291 + bottom: 0px;
  292 + width: 100%;
  293 + .header {
  294 + height: 60px;
  295 + line-height: 60px;
  296 + background: $color-primary url("/static/images/air-banner.png");
  297 + color:#fff;
  298 + .userinfo {
  299 + text-align: right;
  300 + padding-right: 35px;
  301 + float: right;
  302 + .userinfo-inner {
  303 + cursor: pointer;
  304 + color:#fff;
  305 + img {
  306 + width: 40px;
  307 + height: 40px;
  308 + border-radius: 20px;
  309 + margin: 10px 0px 10px 10px;
  310 + float: right;
  311 + }
  312 + }
  313 + }
  314 + .logo {
  315 + //width:230px;
  316 + height:60px;
  317 + font-size: 22px;
  318 + padding-left:20px;
  319 + padding-right:20px;
  320 + border-color: rgba(238,241,146,0.3);
  321 + border-right-width: 1px;
  322 + border-right-style: solid;
  323 + img {
  324 + width: 40px;
  325 + float: left;
  326 + margin: 10px 10px 10px 18px;
  327 + }
  328 + .txt {
  329 + color:#fff;
  330 + }
  331 + }
  332 + .logo-width{
  333 + width:230px;
  334 + }
  335 + .logo-collapse-width{
  336 + width:60px
  337 + }
  338 + .tools{
  339 + padding: 0px 23px;
  340 + width:14px;
  341 + height: 60px;
  342 + line-height: 60px;
  343 + cursor: pointer;
  344 + }
  345 + }
  346 + .main {
  347 + display: flex;
  348 + // background: #324057;
  349 + position: absolute;
  350 + top: 60px;
  351 + bottom: 0px;
  352 + overflow: hidden;
  353 + aside {
  354 + flex:0 0 230px;
  355 + width: 230px;
  356 + // position: absolute;
  357 + // top: 0px;
  358 + // bottom: 0px;
  359 + .collapsed{
  360 + width:60px;
  361 + .item{
  362 + position: relative;
  363 + }
  364 + .submenu{
  365 + position:absolute;
  366 + top:0px;
  367 + left:60px;
  368 + z-index:99999;
  369 + height:auto;
  370 + display:none;
  371 + }
248 372
249 - }  
250 - }  
251 - .menu-collapsed{  
252 - flex:0 0 60px;  
253 - width: 60px;  
254 - }  
255 - .menu-expanded{  
256 - flex:0 0 230px;  
257 - width: 230px;  
258 - }  
259 - .menu-expanded ul{  
260 - width: 230px;  
261 - }  
262 - .content-container {  
263 - // background: #f1f2f7;  
264 - flex:1;  
265 - // position: absolute;  
266 - // right: 0px;  
267 - // top: 0px;  
268 - // bottom: 0px;  
269 - // left: 230px;  
270 - overflow-y: scroll;  
271 - padding: 20px;  
272 - .breadcrumb-container {  
273 - //margin-bottom: 15px;  
274 - .title {  
275 - width: 200px;  
276 - float: left;  
277 - color: #475669;  
278 - }  
279 - .breadcrumb-inner {  
280 - float: right;  
281 - }  
282 - }  
283 - .content-wrapper {  
284 - background-color: #fff;  
285 - box-sizing: border-box;  
286 - }  
287 - }  
288 - }  
289 - } 373 + }
  374 + }
  375 + .menu-collapsed{
  376 + flex:0 0 60px;
  377 + width: 60px;
  378 + }
  379 + .menu-expanded{
  380 + flex:0 0 230px;
  381 + width: 230px;
  382 + }
  383 + .menu-expanded ul{
  384 + width: 230px;
  385 + }
  386 + .content-container {
  387 + // background: #f1f2f7;
  388 + flex:1;
  389 + // position: absolute;
  390 + // right: 0px;
  391 + // top: 0px;
  392 + // bottom: 0px;
  393 + // left: 230px;
  394 + overflow-y: scroll;
  395 + padding: 10px;
  396 + .breadcrumb-container {
  397 + //margin-bottom: 15px;
  398 + .title {
  399 + width: 200px;
  400 + float: left;
  401 + color: #475669;
  402 + margin-left: 10px;
  403 + }
  404 + .breadcrumb-inner {
  405 + float: right;
  406 + margin-right:10px;
  407 + }
  408 + .el-breadcrumb{
  409 + line-height:36px;
  410 + }
  411 + }
  412 + .content-wrapper {
  413 + background-color: #fff;
  414 + box-sizing: border-box;
  415 + }
  416 + }
  417 + }
  418 + }
  419 +</style>
  420 +<style lang="scss">
  421 + .darkmenu{
  422 + .main {
  423 + aside {
  424 + .el-menu{
  425 + height: 100%;
  426 + background: #606060;
  427 + .el-menu-item {
  428 + i{
  429 + color: white;
  430 + }
  431 + color: white;
  432 + }
  433 + .el-menu-item.is-active{
  434 + color:#e6a23c;
  435 + }
  436 + .el-menu-item:hover,.el-menu-item:focus{
  437 + background-color: #1a4496;
  438 + }
  439 + .el-submenu {
  440 + ul.el-menu.el-menu--inline{
  441 + background: #303030;
  442 + }
  443 + .el-submenu__title {
  444 + color: white;
  445 + i{
  446 + color: white;
  447 + }
  448 + }
  449 + .el-submenu__title:hover {
  450 + background-color: #1a4496;
  451 + }
  452 + }
  453 + }
  454 + }
  455 + }
  456 + }
290 </style> 457 </style>
@@ -3,12 +3,12 @@ @@ -3,12 +3,12 @@
3 <el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position="left" label-width="0px" class="demo-ruleForm login-container" id="loginForm"> 3 <el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position="left" label-width="0px" class="demo-ruleForm login-container" id="loginForm">
4 <h3 class="title">系统登录</h3> 4 <h3 class="title">系统登录</h3>
5 <el-form-item prop="account"> 5 <el-form-item prop="account">
6 - <el-input type="text" v-model="ruleForm2.account" auto-complete="off" placeholder="账号"></el-input> 6 + <el-input type="text" v-model="ruleForm2.account" autofocus placeholder="账号"></el-input>
7 </el-form-item> 7 </el-form-item>
8 <el-form-item prop="checkPass"> 8 <el-form-item prop="checkPass">
9 - <el-input type="password" v-model="ruleForm2.checkPass" auto-complete="off" placeholder="密码"></el-input> 9 + <el-input type="password" v-model="ruleForm2.checkPass" placeholder="密码" @keyup.enter.native="handleSubmit2"></el-input>
10 </el-form-item> 10 </el-form-item>
11 - <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox> 11 + <el-checkbox v-model="checked" checked class="remeberme">记住密码</el-checkbox>
12 <el-form-item style="width:100%;"> 12 <el-form-item style="width:100%;">
13 <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit2" :loading="logining" :plain="true">登录</el-button> 13 <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit2" :loading="logining" :plain="true">登录</el-button>
14 <!--<el-button @click.native.prevent="handleReset2">重置</el-button>--> 14 <!--<el-button @click.native.prevent="handleReset2">重置</el-button>-->
@@ -42,8 +42,8 @@ @@ -42,8 +42,8 @@
42 fixStyle: '', 42 fixStyle: '',
43 logining: false, 43 logining: false,
44 ruleForm2: { 44 ruleForm2: {
45 - account: 'admin',  
46 - checkPass: '123456' 45 + account: '',
  46 + checkPass: ''
47 }, 47 },
48 rules2: { 48 rules2: {
49 account: [ 49 account: [
@@ -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 style="font-size: 13px" border @selection-change="handleSelectionChange"> 12 + <tree-table :data="tableData" :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>
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 </el-table-column> 27 </el-table-column>
28 <el-table-column label="航班日期" width="100px" align="center" sortable> 28 <el-table-column label="航班日期" width="100px" align="center" sortable>
29 <template slot-scope="scope"> 29 <template slot-scope="scope">
30 - <span>{{ scope.row.flightDate | parseTime('{y}-{m}-{d}') }}</span> 30 + <span>{{ scope.row.flightDate }}</span>
31 </template> 31 </template>
32 </el-table-column> 32 </el-table-column>
33 <el-table-column label="起始站" width="60px" align="center"> 33 <el-table-column label="起始站" width="60px" align="center">
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 </div> 63 </div>
64 </template> 64 </template>
65 </el-table-column> 65 </el-table-column>
66 - <el-table-column :label="$t('table.actions')" align="center" class-name="small-padding fixed-width"> 66 + <el-table-column :label="$t('table.actions')" align="center" class-name="small-padding fixed-width" >
67 <template slot-scope="scope"> 67 <template slot-scope="scope">
68 <el-button type="primary" size="small" @click="handleUpdate(scope.row)">快速编辑</el-button> 68 <el-button type="primary" size="small" @click="handleUpdate(scope.row)">快速编辑</el-button>
69 <el-button type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button> 69 <el-button type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button>
@@ -79,8 +79,8 @@ @@ -79,8 +79,8 @@
79 </tree-table> 79 </tree-table>
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">  
83 - <el-form ref="" :inline="true" label-position="left" :rules="rules" :model="temp" label-width="100px" style="font-size: 13px"> 82 + <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" fullscreen>
  83 + <el-form ref="" :inline="true" :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,17 +350,16 @@ @@ -350,17 +350,16 @@
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 -import { fetchList } from '@/api/article' 353 +
354 import treeTable from '@/components/TreeTable' 354 import treeTable from '@/components/TreeTable'
355 -import treeToArray from './customEval' 355 +import treeToArray from '@/utils/customEval'
356 import Pagination from '@/components/Pagination' 356 import Pagination from '@/components/Pagination'
357 import waves from '@/directive/waves' // Waves directive 357 import waves from '@/directive/waves' // Waves directive
358 import country from '@/utils/country.js' 358 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 -import excel from '@/vendor/Export2Excel'  
363 -import { parseTime } from '@/utils' 362 +
364 const calendarTypeOptions = [ 363 const calendarTypeOptions = [
365 { key: 'CN', display_name: 'China' }, 364 { key: 'CN', display_name: 'China' },
366 { key: 'US', display_name: 'USA' }, 365 { key: 'US', display_name: 'USA' },
@@ -403,11 +402,12 @@ export default { @@ -403,11 +402,12 @@ export default {
403 return { 402 return {
404 func: treeToArray, 403 func: treeToArray,
405 expandAll: true, 404 expandAll: true,
  405 + fullscreen:true,
406 total: 1, 406 total: 1,
407 resend: true, 407 resend: true,
408 - listLoading: false,  
409 - downloadLoading: false,  
410 - loading: false, 408 + loading:false,
  409 + listLoading: true,
  410 + downloadLoading:false,
411 multipleSelection: [], 411 multipleSelection: [],
412 dialogFormVisible: false, 412 dialogFormVisible: false,
413 dialogStatus: '', 413 dialogStatus: '',
@@ -428,6 +428,7 @@ export default { @@ -428,6 +428,7 @@ export default {
428 flightDate: '', 428 flightDate: '',
429 custom: '' 429 custom: ''
430 }, 430 },
  431 + tableData:[],
431 temp: { 432 temp: {
432 id: undefined, 433 id: undefined,
433 waybillNo: '', 434 waybillNo: '',
@@ -441,7 +442,103 @@ export default { @@ -441,7 +442,103 @@ export default {
441 maniWeight: undefined 442 maniWeight: undefined
442 }, 443 },
443 manifestCustoms: ['4604', '4620', '4613'], 444 manifestCustoms: ['4604', '4620', '4613'],
444 - data: [ 445 +
  446 + pickerOptions: {
  447 + shortcuts: [
  448 + {
  449 + text: '今天',
  450 + onClick(picker) {
  451 + picker.$emit('pick', new Date())
  452 + }
  453 + },
  454 + {
  455 + text: '昨天',
  456 + onClick(picker) {
  457 + const date = new Date()
  458 + date.setTime(date.getTime() - 3600 * 1000 * 24)
  459 + picker.$emit('pick', date)
  460 + }
  461 + },
  462 + {
  463 + text: '明天',
  464 + onClick(picker) {
  465 + const date = new Date()
  466 + date.setTime(date.getTime() + 3600 * 1000 * 24)
  467 + picker.$emit('pick', date)
  468 + }
  469 + },
  470 + {
  471 + text: '一周前',
  472 + onClick(picker) {
  473 + const date = new Date()
  474 + date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
  475 + picker.$emit('pick', date)
  476 + }
  477 + }
  478 + ]
  479 + },
  480 + args: [null, null, 'timeLine'],
  481 + rules: {
  482 + maniWeight: [{ type: 'number', required: true, message: '重量必须为数字', trigger: 'blur' }],
  483 + maniPiece: [{ type: 'number', required: true, message: '件数必须为数字', trigger: 'blur' }],
  484 + desStation: [{ required: true, message: '运单目的地必须输入', trigger: 'blur' }],
  485 + oriStation: [{ required: true, message: '运单起始站必须数据', trigger: 'change' }],
  486 + flightDate: [{ type: 'date', required: true, message: '航班日期必须输入', trigger: 'change' }],
  487 + flight: [{ required: true, message: '航班号必须输入', trigger: 'blur' }],
  488 + custom: [{ required: true, message: '关区代码必须选择', trigger: 'change' }],
  489 + waybillNo: [{ required: true, message: '运单号必须输入', trigger: 'blur' }]
  490 + }
  491 + }
  492 + },
  493 + created(){
  494 + console.log(this.$route.params.scopeRow)
  495 + this.getList()
  496 + },
  497 + methods: {
  498 + message(row) {
  499 + this.$message.info(row.event)
  500 + },
  501 + sortChange(data) {
  502 + const { prop, order } = data
  503 + if (prop === 'id') {
  504 + this.sortByID(order)
  505 + }
  506 + },
  507 + sortByID(order) {
  508 + if (order === 'ascending') {
  509 + this.listQuery.sort = '+id'
  510 + } else {
  511 + this.listQuery.sort = '-id'
  512 + }
  513 + this.handleFilter()
  514 + },
  515 + handleFilter(){
  516 +
  517 + },
  518 + handleSwitch(row){
  519 +
  520 + },
  521 + handleDownload(){
  522 + this.downloadLoading = true
  523 + },
  524 + handleUpdate(row) {
  525 + this.temp = Object.assign({}, row) // copy obj
  526 + this.temp.timestamp = new Date(this.temp.timestamp)
  527 + this.dialogStatus = 'update'
  528 + this.dialogFormVisible = true
  529 + this.$nextTick(() => {
  530 + this.$refs[''].clearValidate()
  531 + })
  532 + },
  533 + handleModifyStatus(row, status) {
  534 + this.$message({
  535 + message: '操作成功',
  536 + type: 'success'
  537 + })
  538 + row.status = status
  539 + },
  540 + getList() {
  541 + this.tableData = [
445 { 542 {
446 id: 0, 543 id: 0,
447 waybillNo: '580-20728399', 544 waybillNo: '580-20728399',
@@ -520,7 +617,7 @@ export default { @@ -520,7 +617,7 @@ export default {
520 ] 617 ]
521 }, 618 },
522 { 619 {
523 - id: 5, 620 + id: 4,
524 waybillNo: '580-20728391', 621 waybillNo: '580-20728391',
525 houseWaybillNo: '', 622 houseWaybillNo: '',
526 custom: '4604', 623 custom: '4604',
@@ -532,104 +629,278 @@ export default { @@ -532,104 +629,278 @@ export default {
532 maniWeight: 21321, 629 maniWeight: 21321,
533 status: '10003', 630 status: '10003',
534 customText: ' 已发送预配舱单 ' 631 customText: ' 已发送预配舱单 '
  632 + },
  633 + {
  634 + id: 5,
  635 + waybillNo: '580-20728399',
  636 + houseWaybillNo: '',
  637 + custom: '4604',
  638 + flight: 'CV9733',
  639 + flightDate: '2019-06-21',
  640 + oriStation: 'LUX',
  641 + desStation: 'CGO',
  642 + maniPiece: 50,
  643 + maniWeight: 21321,
  644 + status: '41301',
  645 + customText: ' 预配舱单主要数据传输成功。',
  646 + customComplate: 25
  647 + },
  648 + {
  649 + id: 6,
  650 + waybillNo: '580-20728399',
  651 + houseWaybillNo: '',
  652 + custom: '4604',
  653 + flight: 'CV9733',
  654 + flightDate: '2019-06-21',
  655 + oriStation: 'LUX',
  656 + desStation: 'CGO',
  657 + maniPiece: 50,
  658 + maniWeight: 21321,
  659 + status: '41301',
  660 + customText: ' 预配舱单主要数据传输成功。',
  661 + customComplate: 25
  662 + },
  663 + {
  664 + id: 7,
  665 + waybillNo: '580-20728399',
  666 + houseWaybillNo: '',
  667 + custom: '4604',
  668 + flight: 'CV9733',
  669 + flightDate: '2019-06-21',
  670 + oriStation: 'LUX',
  671 + desStation: 'CGO',
  672 + maniPiece: 50,
  673 + maniWeight: 21321,
  674 + status: '41301',
  675 + customText: ' 预配舱单主要数据传输成功。',
  676 + customComplate: 25
  677 + },
  678 + {
  679 + id: 8,
  680 + waybillNo: '580-20728399',
  681 + houseWaybillNo: '',
  682 + custom: '4604',
  683 + flight: 'CV9733',
  684 + flightDate: '2019-06-21',
  685 + oriStation: 'LUX',
  686 + desStation: 'CGO',
  687 + maniPiece: 50,
  688 + maniWeight: 21321,
  689 + status: '41301',
  690 + customText: ' 预配舱单主要数据传输成功。',
  691 + customComplate: 25
  692 + },
  693 + {
  694 + id: 9,
  695 + waybillNo: '580-20728399',
  696 + houseWaybillNo: '',
  697 + custom: '4604',
  698 + flight: 'CV9733',
  699 + flightDate: '2019-06-21',
  700 + oriStation: 'LUX',
  701 + desStation: 'CGO',
  702 + maniPiece: 50,
  703 + maniWeight: 21321,
  704 + status: '41301',
  705 + customText: ' 预配舱单主要数据传输成功。',
  706 + customComplate: 25
  707 + },
  708 + {
  709 + id: 10,
  710 + waybillNo: '580-20728399',
  711 + houseWaybillNo: '',
  712 + custom: '4604',
  713 + flight: 'CV9733',
  714 + flightDate: '2019-06-21',
  715 + oriStation: 'LUX',
  716 + desStation: 'CGO',
  717 + maniPiece: 50,
  718 + maniWeight: 21321,
  719 + status: '41301',
  720 + customText: ' 预配舱单主要数据传输成功。',
  721 + customComplate: 25
  722 + },
  723 + {
  724 + id: 11,
  725 + waybillNo: '580-20728399',
  726 + houseWaybillNo: '',
  727 + custom: '4604',
  728 + flight: 'CV9733',
  729 + flightDate: '2019-06-21',
  730 + oriStation: 'LUX',
  731 + desStation: 'CGO',
  732 + maniPiece: 50,
  733 + maniWeight: 21321,
  734 + status: '41301',
  735 + customText: ' 预配舱单主要数据传输成功。',
  736 + customComplate: 25
  737 + },
  738 + {
  739 + id: 12,
  740 + waybillNo: '580-20728399',
  741 + houseWaybillNo: '',
  742 + custom: '4604',
  743 + flight: 'CV9733',
  744 + flightDate: '2019-06-21',
  745 + oriStation: 'LUX',
  746 + desStation: 'CGO',
  747 + maniPiece: 50,
  748 + maniWeight: 21321,
  749 + status: '41301',
  750 + customText: ' 预配舱单主要数据传输成功。',
  751 + customComplate: 25
  752 + },
  753 + {
  754 + id: 13,
  755 + waybillNo: '580-20728399',
  756 + houseWaybillNo: '',
  757 + custom: '4604',
  758 + flight: 'CV9733',
  759 + flightDate: '2019-06-21',
  760 + oriStation: 'LUX',
  761 + desStation: 'CGO',
  762 + maniPiece: 50,
  763 + maniWeight: 21321,
  764 + status: '41301',
  765 + customText: ' 预配舱单主要数据传输成功。',
  766 + customComplate: 25
  767 + },{
  768 + id: 14,
  769 + waybillNo: '580-20728399',
  770 + houseWaybillNo: '',
  771 + custom: '4604',
  772 + flight: 'CV9733',
  773 + flightDate: '2019-06-21',
  774 + oriStation: 'LUX',
  775 + desStation: 'CGO',
  776 + maniPiece: 50,
  777 + maniWeight: 21321,
  778 + status: '41301',
  779 + customText: ' 预配舱单主要数据传输成功。',
  780 + customComplate: 25
  781 + },
  782 + {
  783 + id: 15,
  784 + waybillNo: '580-20728399',
  785 + houseWaybillNo: '',
  786 + custom: '4604',
  787 + flight: 'CV9733',
  788 + flightDate: '2019-06-21',
  789 + oriStation: 'LUX',
  790 + desStation: 'CGO',
  791 + maniPiece: 50,
  792 + maniWeight: 21321,
  793 + status: '41301',
  794 + customText: ' 预配舱单主要数据传输成功。',
  795 + customComplate: 25
  796 + },
  797 + {
  798 + id: 16,
  799 + waybillNo: '580-20728399',
  800 + houseWaybillNo: '',
  801 + custom: '4604',
  802 + flight: 'CV9733',
  803 + flightDate: '2019-06-21',
  804 + oriStation: 'LUX',
  805 + desStation: 'CGO',
  806 + maniPiece: 50,
  807 + maniWeight: 21321,
  808 + status: '41301',
  809 + customText: ' 预配舱单主要数据传输成功。',
  810 + customComplate: 25
  811 + },
  812 + {
  813 + id: 17,
  814 + waybillNo: '580-20728399',
  815 + houseWaybillNo: '',
  816 + custom: '4604',
  817 + flight: 'CV9733',
  818 + flightDate: '2019-06-21',
  819 + oriStation: 'LUX',
  820 + desStation: 'CGO',
  821 + maniPiece: 50,
  822 + maniWeight: 21321,
  823 + status: '41301',
  824 + customText: ' 预配舱单主要数据传输成功。',
  825 + customComplate: 25
  826 + },
  827 + {
  828 + id: 18,
  829 + waybillNo: '580-20728399',
  830 + houseWaybillNo: '',
  831 + custom: '4604',
  832 + flight: 'CV9733',
  833 + flightDate: '2019-06-21',
  834 + oriStation: 'LUX',
  835 + desStation: 'CGO',
  836 + maniPiece: 50,
  837 + maniWeight: 21321,
  838 + status: '41301',
  839 + customText: ' 预配舱单主要数据传输成功。',
  840 + customComplate: 25
  841 + },
  842 + {
  843 + id: 19,
  844 + waybillNo: '580-20728399',
  845 + houseWaybillNo: '',
  846 + custom: '4604',
  847 + flight: 'CV9733',
  848 + flightDate: '2019-06-21',
  849 + oriStation: 'LUX',
  850 + desStation: 'CGO',
  851 + maniPiece: 50,
  852 + maniWeight: 21321,
  853 + status: '41301',
  854 + customText: ' 预配舱单主要数据传输成功。',
  855 + customComplate: 25
  856 + },
  857 + {
  858 + id: 20,
  859 + waybillNo: '580-20728399',
  860 + houseWaybillNo: '',
  861 + custom: '4604',
  862 + flight: 'CV9733',
  863 + flightDate: '2019-06-21',
  864 + oriStation: 'LUX',
  865 + desStation: 'CGO',
  866 + maniPiece: 50,
  867 + maniWeight: 21321,
  868 + status: '41301',
  869 + customText: ' 预配舱单主要数据传输成功。',
  870 + customComplate: 25
  871 + },
  872 + {
  873 + id: 23,
  874 + waybillNo: '580-20728399',
  875 + houseWaybillNo: '',
  876 + custom: '4604',
  877 + flight: 'CV9733',
  878 + flightDate: '2019-06-21',
  879 + oriStation: 'LUX',
  880 + desStation: 'CGO',
  881 + maniPiece: 50,
  882 + maniWeight: 21321,
  883 + status: '41301',
  884 + customText: ' 预配舱单主要数据传输成功。',
  885 + customComplate: 25
  886 + }, {
  887 + id: 22,
  888 + waybillNo: '580-20728399',
  889 + houseWaybillNo: '',
  890 + custom: '4604',
  891 + flight: 'CV9733',
  892 + flightDate: '2019-06-21',
  893 + oriStation: 'LUX',
  894 + desStation: 'CGO',
  895 + maniPiece: 50,
  896 + maniWeight: 21321,
  897 + status: '41300',
  898 + customText: ' 预配舱单主要数据传输成功。',
  899 + customComplate: 25
535 } 900 }
536 - ],  
537 - pickerOptions: {  
538 - shortcuts: [  
539 - {  
540 - text: '今天',  
541 - onClick(picker) {  
542 - picker.$emit('pick', new Date())  
543 - }  
544 - },  
545 - {  
546 - text: '昨天',  
547 - onClick(picker) {  
548 - const date = new Date()  
549 - date.setTime(date.getTime() - 3600 * 1000 * 24)  
550 - picker.$emit('pick', date)  
551 - }  
552 - },  
553 - {  
554 - text: '明天',  
555 - onClick(picker) {  
556 - const date = new Date()  
557 - date.setTime(date.getTime() + 3600 * 1000 * 24)  
558 - picker.$emit('pick', date)  
559 - }  
560 - },  
561 - {  
562 - text: '一周前',  
563 - onClick(picker) {  
564 - const date = new Date()  
565 - date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)  
566 - picker.$emit('pick', date)  
567 - }  
568 - }  
569 - ]  
570 - },  
571 - args: [null, null, 'timeLine'],  
572 - rules: {  
573 - maniWeight: [{ type: 'number', required: true, message: '重量必须为数字', trigger: 'blur' }],  
574 - maniPiece: [{ type: 'number', required: true, message: '件数必须为数字', trigger: 'blur' }],  
575 - desStation: [{ required: true, message: '运单目的地必须输入', trigger: 'blur' }],  
576 - oriStation: [{ required: true, message: '运单起始站必须数据', trigger: 'change' }],  
577 - flightDate: [{ type: 'date', required: true, message: '航班日期必须输入', trigger: 'change' }],  
578 - flight: [{ required: true, message: '航班号必须输入', trigger: 'blur' }],  
579 - custom: [{ required: true, message: '关区代码必须选择', trigger: 'change' }],  
580 - waybillNo: [{ required: true, message: '运单号必须输入', trigger: 'blur' }]  
581 - }  
582 - }  
583 - },  
584 - methods: {  
585 - message(row) {  
586 - this.$message.info(row.event)  
587 - },  
588 - sortChange(data) {  
589 - const { prop, order } = data  
590 - if (prop === 'id') {  
591 - this.sortByID(order)  
592 - }  
593 - },  
594 - sortByID(order) {  
595 - if (order === 'ascending') {  
596 - this.listQuery.sort = '+id'  
597 - } else {  
598 - this.listQuery.sort = '-id'  
599 - }  
600 - this.handleFilter()  
601 - },  
602 - handleUpdate(row) {  
603 - this.temp = Object.assign({}, row) // copy obj  
604 - this.temp.timestamp = new Date(this.temp.timestamp)  
605 - this.dialogStatus = 'update'  
606 - this.dialogFormVisible = true  
607 - this.$nextTick(() => {  
608 - this.$refs[''].clearValidate()  
609 - })  
610 - },  
611 - handleFilter() {  
612 - this.listQuery.page = 1  
613 - this.getList()  
614 - },  
615 - handleModifyStatus(row, status) {  
616 - this.$message({  
617 - message: '操作成功',  
618 - type: 'success'  
619 - })  
620 - row.status = status  
621 - },  
622 - getList() {  
623 - this.listLoading = true  
624 - fetchList(this.listQuery).then(response => {  
625 - this.list = response.data.items  
626 - this.total = response.data.total  
627 901
628 - // Just to simulate the time of the request  
629 - setTimeout(() => {  
630 - this.listLoading = false  
631 - }, 1.5 * 1000)  
632 - }) 902 + ]
  903 + this.total = this.tableData.length
633 }, 904 },
634 handleSelectionChange(val) { 905 handleSelectionChange(val) {
635 this.multipleSelection = val 906 this.multipleSelection = val
@@ -656,18 +927,6 @@ export default { @@ -656,18 +927,6 @@ export default {
656 this.$refs[''].clearValidate() 927 this.$refs[''].clearValidate()
657 }) 928 })
658 }, 929 },
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 - },  
671 remoteMethod(query) { 930 remoteMethod(query) {
672 if (query !== '') { 931 if (query !== '') {
673 this.loading = true 932 this.loading = true
@@ -696,9 +955,6 @@ export default { @@ -696,9 +955,6 @@ export default {
696 margin-bottom: 0; 955 margin-bottom: 0;
697 } 956 }
698 } 957 }
699 - .el-col {  
700 - border-radius: 4px;  
701 - }  
702 .bg-purple-dark { 958 .bg-purple-dark {
703 background: #99a9bf; 959 background: #99a9bf;
704 } 960 }
@@ -709,7 +965,6 @@ export default { @@ -709,7 +965,6 @@ export default {
709 background: #e5e9f2; 965 background: #e5e9f2;
710 } 966 }
711 .grid-content { 967 .grid-content {
712 - border-radius: 4px;  
713 min-height: 36px; 968 min-height: 36px;
714 } 969 }
715 .row-bg { 970 .row-bg {
  1 +<template>
  2 + <div :class="className" :style="{height:height,width:width}" />
  3 +</template>
  4 +
  5 +<script>
  6 +import echarts from 'echarts'
  7 +require('echarts/theme/macarons') // echarts theme
  8 +import resize from './mixins/resize'
  9 +
  10 +const animationDuration = 6000
  11 +
  12 +export default {
  13 + mixins: [resize],
  14 + props: {
  15 + className: {
  16 + type: String,
  17 + default: 'chart'
  18 + },
  19 + width: {
  20 + type: String,
  21 + default: '100%'
  22 + },
  23 + height: {
  24 + type: String,
  25 + default: '300px'
  26 + }
  27 + },
  28 + data() {
  29 + return {
  30 + chart: null
  31 + }
  32 + },
  33 + mounted() {
  34 + this.$nextTick(() => {
  35 + this.initChart()
  36 + })
  37 + },
  38 + beforeDestroy() {
  39 + if (!this.chart) {
  40 + return
  41 + }
  42 + this.chart.dispose()
  43 + this.chart = null
  44 + },
  45 + methods: {
  46 + initChart() {
  47 + this.chart = echarts.init(this.$el, 'macarons')
  48 +
  49 + this.chart.setOption({
  50 + tooltip: {
  51 + trigger: 'axis',
  52 + axisPointer: { // 坐标轴指示器,坐标轴触发有效
  53 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  54 + }
  55 + },
  56 + grid: {
  57 + top: 10,
  58 + left: '2%',
  59 + right: '2%',
  60 + bottom: '3%',
  61 + containLabel: true
  62 + },
  63 + xAxis: [{
  64 + type: 'category',
  65 + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
  66 + axisTick: {
  67 + alignWithLabel: true
  68 + }
  69 + }],
  70 + yAxis: [{
  71 + type: 'value',
  72 + axisTick: {
  73 + show: false
  74 + }
  75 + }],
  76 + series: [{
  77 + name: 'pageA',
  78 + type: 'bar',
  79 + stack: 'vistors',
  80 + barWidth: '60%',
  81 + data: [79, 52, 200, 334, 390, 330, 220],
  82 + animationDuration
  83 + }, {
  84 + name: 'pageB',
  85 + type: 'bar',
  86 + stack: 'vistors',
  87 + barWidth: '60%',
  88 + data: [80, 52, 200, 334, 390, 330, 220],
  89 + animationDuration
  90 + }, {
  91 + name: 'pageC',
  92 + type: 'bar',
  93 + stack: 'vistors',
  94 + barWidth: '60%',
  95 + data: [30, 52, 200, 334, 390, 330, 220],
  96 + animationDuration
  97 + }]
  98 + })
  99 + }
  100 + }
  101 +}
  102 +</script>
  1 +<template>
  2 + <el-card class="box-card-component" style="margin-left:8px;">
  3 + <div slot="header" class="box-card-header">
  4 + <img src="https://wpimg.wallstcn.com/e7d23d71-cf19-4b90-a1cc-f56af8c0903d.png">
  5 + </div>
  6 + <div style="position:relative;">
  7 + <pan-thumb :image="avatar" class="panThumb" />
  8 + <mallki class-name="mallki-text" text="vue-element-admin" />
  9 + <div style="padding-top:35px;" class="progress-item">
  10 + <span>Vue</span>
  11 + <el-progress :percentage="70" />
  12 + </div>
  13 + <div class="progress-item">
  14 + <span>JavaScript</span>
  15 + <el-progress :percentage="18" />
  16 + </div>
  17 + <div class="progress-item">
  18 + <span>Css</span>
  19 + <el-progress :percentage="12" />
  20 + </div>
  21 + <div class="progress-item">
  22 + <span>ESLint</span>
  23 + <el-progress :percentage="100" status="success" />
  24 + </div>
  25 + </div>
  26 + </el-card>
  27 +</template>
  28 +
  29 +<script>
  30 +import { mapGetters } from 'vuex'
  31 +import PanThumb from '../../../components/PanThumb'
  32 +import Mallki from '../../../components/TextHoverEffect/Mallki'
  33 +
  34 +export default {
  35 + components: { PanThumb, Mallki },
  36 +
  37 + filters: {
  38 + statusFilter(status) {
  39 + const statusMap = {
  40 + success: 'success',
  41 + pending: 'danger'
  42 + }
  43 + return statusMap[status]
  44 + }
  45 + },
  46 + data() {
  47 + return {
  48 + statisticsData: {
  49 + article_count: 1024,
  50 + pageviews_count: 1024
  51 + }
  52 + }
  53 + },
  54 + computed: {
  55 + ...mapGetters([
  56 + 'name',
  57 + 'avatar',
  58 + 'roles'
  59 + ])
  60 + }
  61 +}
  62 +</script>
  63 +
  64 +<style lang="scss" >
  65 +.box-card-component{
  66 + .el-card__header {
  67 + padding: 0px!important;
  68 + }
  69 +}
  70 +</style>
  71 +<style lang="scss" scoped>
  72 +.box-card-component {
  73 + .box-card-header {
  74 + position: relative;
  75 + height: 220px;
  76 + img {
  77 + width: 100%;
  78 + height: 100%;
  79 + transition: all 0.2s linear;
  80 + &:hover {
  81 + transform: scale(1.1, 1.1);
  82 + filter: contrast(130%);
  83 + }
  84 + }
  85 + }
  86 + .mallki-text {
  87 + position: absolute;
  88 + top: 0px;
  89 + right: 0px;
  90 + font-size: 20px;
  91 + font-weight: bold;
  92 + }
  93 + .panThumb {
  94 + z-index: 100;
  95 + height: 70px!important;
  96 + width: 70px!important;
  97 + position: absolute!important;
  98 + top: -45px;
  99 + left: 0px;
  100 + border: 5px solid #ffffff;
  101 + background-color: #fff;
  102 + margin: auto;
  103 + box-shadow: none!important;
  104 + /deep/ .pan-info {
  105 + box-shadow: none!important;
  106 + }
  107 + }
  108 + .progress-item {
  109 + margin-bottom: 10px;
  110 + font-size: 14px;
  111 + }
  112 + @media only screen and (max-width: 1510px){
  113 + .mallki-text{
  114 + display: none;
  115 + }
  116 + }
  117 +}
  118 +</style>
  1 +<template>
  2 + <div :class="className" :style="{height:height,width:width}" />
  3 +</template>
  4 +
  5 +<script>
  6 +import echarts from 'echarts'
  7 +require('echarts/theme/macarons') // echarts theme
  8 +import resize from './mixins/resize'
  9 +
  10 +export default {
  11 + mixins: [resize],
  12 + props: {
  13 + className: {
  14 + type: String,
  15 + default: 'chart'
  16 + },
  17 + width: {
  18 + type: String,
  19 + default: '100%'
  20 + },
  21 + height: {
  22 + type: String,
  23 + default: '350px'
  24 + },
  25 + autoResize: {
  26 + type: Boolean,
  27 + default: true
  28 + },
  29 + chartData: {
  30 + type: Object,
  31 + required: true
  32 + }
  33 + },
  34 + data() {
  35 + return {
  36 + chart: null
  37 + }
  38 + },
  39 + watch: {
  40 + chartData: {
  41 + deep: true,
  42 + handler(val) {
  43 + this.setOptions(val)
  44 + }
  45 + }
  46 + },
  47 + mounted() {
  48 + this.$nextTick(() => {
  49 + this.initChart()
  50 + })
  51 + },
  52 + beforeDestroy() {
  53 + if (!this.chart) {
  54 + return
  55 + }
  56 + this.chart.dispose()
  57 + this.chart = null
  58 + },
  59 + methods: {
  60 + initChart() {
  61 + this.chart = echarts.init(this.$el, 'macarons')
  62 + this.setOptions(this.chartData)
  63 + },
  64 + setOptions({ expectedData, actualData } = {}) {
  65 + this.chart.setOption({
  66 + xAxis: {
  67 + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
  68 + boundaryGap: false,
  69 + axisTick: {
  70 + show: false
  71 + }
  72 + },
  73 + grid: {
  74 + left: 10,
  75 + right: 10,
  76 + bottom: 20,
  77 + top: 30,
  78 + containLabel: true
  79 + },
  80 + tooltip: {
  81 + trigger: 'axis',
  82 + axisPointer: {
  83 + type: 'cross'
  84 + },
  85 + padding: [5, 10]
  86 + },
  87 + yAxis: {
  88 + axisTick: {
  89 + show: false
  90 + }
  91 + },
  92 + legend: {
  93 + data: ['expected', 'actual']
  94 + },
  95 + series: [{
  96 + name: 'expected', itemStyle: {
  97 + normal: {
  98 + color: '#FF005A',
  99 + lineStyle: {
  100 + color: '#FF005A',
  101 + width: 2
  102 + }
  103 + }
  104 + },
  105 + smooth: true,
  106 + type: 'line',
  107 + data: expectedData,
  108 + animationDuration: 2800,
  109 + animationEasing: 'cubicInOut'
  110 + },
  111 + {
  112 + name: 'actual',
  113 + smooth: true,
  114 + type: 'line',
  115 + itemStyle: {
  116 + normal: {
  117 + color: '#3888fa',
  118 + lineStyle: {
  119 + color: '#3888fa',
  120 + width: 2
  121 + },
  122 + areaStyle: {
  123 + color: '#f3f8ff'
  124 + }
  125 + }
  126 + },
  127 + data: actualData,
  128 + animationDuration: 2800,
  129 + animationEasing: 'quadraticOut'
  130 + }]
  131 + })
  132 + }
  133 + }
  134 +}
  135 +</script>
  1 +<template>
  2 + <el-row :gutter="15" class="panel-group">
  3 +
  4 + <el-col :span="5" class="card-panel-col">
  5 + <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
  6 + <div class="card-panel-icon-wrapper icon-people">
  7 +<!-- <svg-icon icon-class="peoples" class-name="card-panel-icon" />-->
  8 + <i class="el-icon-user-solid" style="font-size: 60px;"></i>
  9 + </div>
  10 + <div class="card-panel-description">
  11 + <div class="card-panel-text">
  12 + New Visits
  13 + </div>
  14 + <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" />
  15 + </div>
  16 + </div>
  17 + </el-col>
  18 +
  19 +<!-- :xs="12" :sm="12" :lg="6"-->
  20 + <el-col :span="5" class="card-panel-col">
  21 + <div class="card-panel" @click="handleSetLineChartData('messages')">
  22 + <div class="card-panel-icon-wrapper icon-message">
  23 +<!-- <svg-icon icon-class="message" class-name="card-panel-icon" />-->
  24 + <i class="el-icon-message" style="font-size: 60px;"></i>
  25 + </div>
  26 + <div class="card-panel-description">
  27 + <div class="card-panel-text">
  28 + Messages
  29 + </div>
  30 + <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" />
  31 + </div>
  32 + </div>
  33 + </el-col>
  34 +
  35 + <el-col :span="5" class="card-panel-col">
  36 + <div class="card-panel" @click="handleSetLineChartData('purchases')">
  37 + <div class="card-panel-icon-wrapper icon-money">
  38 +<!-- <svg-icon icon-class="money" class-name="card-panel-icon" />-->
  39 + <i class="el-icon-money" style="font-size: 60px;"></i>
  40 + </div>
  41 + <div class="card-panel-description">
  42 + <div class="card-panel-text">
  43 + Purchases
  44 + </div>
  45 + <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" />
  46 + </div>
  47 + </div>
  48 + </el-col>
  49 + <el-col :span="5" class="card-panel-col">
  50 + <div class="card-panel" @click="handleSetLineChartData('shoppings')">
  51 + <div class="card-panel-icon-wrapper icon-shopping">
  52 +<!-- <svg-icon icon-class="shopping" class-name="card-panel-icon" />-->
  53 + <i class="el-icon-shopping-cart-2" style="font-size: 60px;"></i>
  54 + </div>
  55 + <div class="card-panel-description">
  56 + <div class="card-panel-text">
  57 + Shoppings
  58 + </div>
  59 + <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" />
  60 + </div>
  61 + </div>
  62 + </el-col>
  63 + </el-row>
  64 +</template>
  65 +
  66 +<script>
  67 +import CountTo from 'vue-count-to'
  68 +// import '../../../icons'
  69 +export default {
  70 + components: {
  71 + CountTo
  72 + },
  73 + methods: {
  74 + handleSetLineChartData(type) {
  75 + this.$emit('handleSetLineChartData', type)
  76 + }
  77 + }
  78 +}
  79 +</script>
  80 +
  81 +<style lang="scss" scoped>
  82 +.panel-group {
  83 + margin-top: 18px;
  84 +
  85 + .card-panel-col {
  86 + margin-bottom: 32px;
  87 + }
  88 +
  89 + .card-panel {
  90 + height: 108px;
  91 + cursor: pointer;
  92 + font-size: 12px;
  93 + position: relative;
  94 + overflow: hidden;
  95 + color: #666;
  96 + background: #fff;
  97 + box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
  98 + border-color: rgba(0, 0, 0, .05);
  99 +
  100 + &:hover {
  101 + .card-panel-icon-wrapper {
  102 + color: #fff;
  103 + }
  104 +
  105 + .icon-people {
  106 + background: #40c9c6;
  107 + }
  108 +
  109 + .icon-message {
  110 + background: #36a3f7;
  111 + }
  112 +
  113 + .icon-money {
  114 + background: #f4516c;
  115 + }
  116 +
  117 + .icon-shopping {
  118 + background: #34bfa3
  119 + }
  120 + }
  121 +
  122 + .icon-people {
  123 + color: #40c9c6;
  124 + }
  125 +
  126 + .icon-message {
  127 + color: #36a3f7;
  128 + }
  129 +
  130 + .icon-money {
  131 + color: #f4516c;
  132 + }
  133 +
  134 + .icon-shopping {
  135 + color: #34bfa3
  136 + }
  137 +
  138 + .card-panel-icon-wrapper {
  139 + float: left;
  140 + margin: 14px 0 0 14px;
  141 + padding: 16px;
  142 + transition: all 0.38s ease-out;
  143 + border-radius: 6px;
  144 + }
  145 +
  146 + .card-panel-icon {
  147 + float: left;
  148 + font-size: 48px;
  149 + }
  150 +
  151 + .card-panel-description {
  152 + float: right;
  153 + font-weight: bold;
  154 + margin: 26px;
  155 + margin-left: 0px;
  156 +
  157 + .card-panel-text {
  158 + line-height: 18px;
  159 + color: rgba(0, 0, 0, 0.45);
  160 + font-size: 16px;
  161 + margin-bottom: 12px;
  162 + }
  163 +
  164 + .card-panel-num {
  165 + font-size: 20px;
  166 + }
  167 + }
  168 + }
  169 +}
  170 +
  171 +@media (max-width:550px) {
  172 + .card-panel-description {
  173 + display: none;
  174 + }
  175 +
  176 + .card-panel-icon-wrapper {
  177 + float: none !important;
  178 + width: 100%;
  179 + height: 100%;
  180 + margin: 0 !important;
  181 +
  182 + .svg-icon {
  183 + display: block;
  184 + margin: 14px auto !important;
  185 + float: none !important;
  186 + }
  187 + }
  188 +}
  189 +</style>