提交 ce9a7c6b 编写于 作者: zhentian.jia's avatar zhentian.jia

Merge branch 'dev-coop-phase2.3-1031' into 'release'

Dev coop phase2.3 1031



See merge request !119
[1112/102746.726:ERROR:process_info.cc(329)] VirtualQueryEx: 拒绝访问。 (0x5)
[1112/102746.728:ERROR:process_info.cc(556)] ReadMemoryInfo failed
[1112/102746.728:ERROR:scoped_process_suspend.cc(40)] NtResumeProcess: 已尝试访问正在退出的过程。 (0xc000010a)
...@@ -32,6 +32,11 @@ ...@@ -32,6 +32,11 @@
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
"dev": true "dev": true
}, },
"abab": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
"integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4="
},
"abbrev": { "abbrev": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
...@@ -53,12 +58,25 @@ ...@@ -53,12 +58,25 @@
"integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
"dev": true "dev": true
}, },
"acorn-globals": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
"integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
"requires": {
"acorn": "^2.1.0"
},
"dependencies": {
"acorn": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
"integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
}
}
},
"ajv": { "ajv": {
"version": "4.11.8", "version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"dev": true,
"optional": true,
"requires": { "requires": {
"co": "^4.6.0", "co": "^4.6.0",
"json-stable-stringify": "^1.0.1" "json-stable-stringify": "^1.0.1"
...@@ -185,6 +203,11 @@ ...@@ -185,6 +203,11 @@
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true "dev": true
}, },
"array-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
},
"array-find-index": { "array-find-index": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
...@@ -246,9 +269,7 @@ ...@@ -246,9 +269,7 @@
"assert-plus": { "assert-plus": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
"dev": true,
"optional": true
}, },
"assign-symbols": { "assign-symbols": {
"version": "1.0.0", "version": "1.0.0",
...@@ -321,9 +342,7 @@ ...@@ -321,9 +342,7 @@
"aws-sign2": { "aws-sign2": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
"integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
"dev": true,
"optional": true
}, },
"aws4": { "aws4": {
"version": "1.8.0", "version": "1.8.0",
...@@ -1189,6 +1208,11 @@ ...@@ -1189,6 +1208,11 @@
} }
} }
}, },
"base64-arraybuffer": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz",
"integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ=="
},
"base64-js": { "base64-js": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
...@@ -1282,7 +1306,6 @@ ...@@ -1282,7 +1306,6 @@
"version": "2.10.1", "version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": { "requires": {
"hoek": "2.x.x" "hoek": "2.x.x"
} }
...@@ -1453,6 +1476,24 @@ ...@@ -1453,6 +1476,24 @@
"integrity": "sha512-fvicVRDlhHIQpt/bmbLl3hDHKUZb5ZP8O2OuZLz2fSEPlUBbvwwbhhqhGS617ldN6bDoo9A3+MQKQyFq0p7UXA==", "integrity": "sha512-fvicVRDlhHIQpt/bmbLl3hDHKUZb5ZP8O2OuZLz2fSEPlUBbvwwbhhqhGS617ldN6bDoo9A3+MQKQyFq0p7UXA==",
"dev": true "dev": true
}, },
"canvg": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/canvg/-/canvg-1.5.3.tgz",
"integrity": "sha512-7Gn2IuQzvUQWPIuZuFHrzsTM0gkPz2RRT9OcbdmA03jeKk8kltrD8gqUzNX15ghY/4PV5bbe5lmD6yDLDY6Ybg==",
"requires": {
"jsdom": "^8.1.0",
"rgbcolor": "^1.0.1",
"stackblur-canvas": "^1.4.1",
"xmldom": "^0.1.22"
},
"dependencies": {
"stackblur-canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz",
"integrity": "sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs="
}
}
},
"caseless": { "caseless": {
"version": "0.12.0", "version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
...@@ -1900,8 +1941,6 @@ ...@@ -1900,8 +1941,6 @@
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"optional": true,
"requires": { "requires": {
"boom": "2.x.x" "boom": "2.x.x"
} }
...@@ -1924,6 +1963,14 @@ ...@@ -1924,6 +1963,14 @@
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
"dev": true "dev": true
}, },
"css-line-break": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz",
"integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==",
"requires": {
"base64-arraybuffer": "^0.2.0"
}
},
"css-loader": { "css-loader": {
"version": "0.25.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.25.0.tgz", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.25.0.tgz",
...@@ -2042,6 +2089,19 @@ ...@@ -2042,6 +2089,19 @@
"source-map": "^0.5.3" "source-map": "^0.5.3"
} }
}, },
"cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
},
"cssstyle": {
"version": "0.2.37",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
"integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
"requires": {
"cssom": "0.3.x"
}
},
"currently-unhandled": { "currently-unhandled": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
...@@ -2096,6 +2156,11 @@ ...@@ -2096,6 +2156,11 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true "dev": true
}, },
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
},
"deepmerge": { "deepmerge": {
"version": "1.5.2", "version": "1.5.2",
"resolved": "http://192.168.110.93:4873/deepmerge/-/deepmerge-1.5.2.tgz", "resolved": "http://192.168.110.93:4873/deepmerge/-/deepmerge-1.5.2.tgz",
...@@ -2391,17 +2456,46 @@ ...@@ -2391,17 +2456,46 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
}, },
"escodegen": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
"integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
"requires": {
"esprima": "^3.1.3",
"estraverse": "^4.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
},
"dependencies": {
"esprima": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"optional": true
}
}
},
"esprima": { "esprima": {
"version": "2.7.3", "version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true "dev": true
}, },
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
},
"esutils": { "esutils": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
"dev": true
}, },
"etag": { "etag": {
"version": "1.8.1", "version": "1.8.1",
...@@ -2568,7 +2662,7 @@ ...@@ -2568,7 +2662,7 @@
}, },
"extract-text-webpack-plugin": { "extract-text-webpack-plugin": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz", "resolved": "http://192.168.110.93:4873/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz",
"integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=", "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=",
"dev": true, "dev": true,
"requires": { "requires": {
...@@ -2592,6 +2686,11 @@ ...@@ -2592,6 +2686,11 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
}, },
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"fastclick": { "fastclick": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz", "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz",
...@@ -2621,6 +2720,10 @@ ...@@ -2621,6 +2720,10 @@
"loader-utils": "~0.2.5" "loader-utils": "~0.2.5"
} }
}, },
"file-saver": {
"version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
"from": "github:eligrey/FileSaver.js#1.3.8"
},
"filename-regex": { "filename-regex": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
...@@ -2723,8 +2826,6 @@ ...@@ -2723,8 +2826,6 @@
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"dev": true,
"optional": true,
"requires": { "requires": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.5", "combined-stream": "^1.0.5",
...@@ -3485,16 +3586,12 @@ ...@@ -3485,16 +3586,12 @@
"har-schema": { "har-schema": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
"integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4="
"dev": true,
"optional": true
}, },
"har-validator": { "har-validator": {
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
"integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
"dev": true,
"optional": true,
"requires": { "requires": {
"ajv": "^4.9.1", "ajv": "^4.9.1",
"har-schema": "^1.0.5" "har-schema": "^1.0.5"
...@@ -3605,8 +3702,6 @@ ...@@ -3605,8 +3702,6 @@
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"optional": true,
"requires": { "requires": {
"boom": "2.x.x", "boom": "2.x.x",
"cryptiles": "2.x.x", "cryptiles": "2.x.x",
...@@ -3623,8 +3718,7 @@ ...@@ -3623,8 +3718,7 @@
"hoek": { "hoek": {
"version": "2.16.3", "version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
"dev": true
}, },
"home-or-tmp": { "home-or-tmp": {
"version": "2.0.0", "version": "2.0.0",
...@@ -3682,6 +3776,14 @@ ...@@ -3682,6 +3776,14 @@
"toposort": "^1.0.0" "toposort": "^1.0.0"
} }
}, },
"html2canvas": {
"version": "1.0.0-rc.5",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.5.tgz",
"integrity": "sha512-DtNqPxJNXPoTajs+lVQzGS1SULRI4GQaROeU5R41xH8acffHukxRh/NBVcTBsfCkJSkLq91rih5TpbEwUP9yWA==",
"requires": {
"css-line-break": "1.1.1"
}
},
"htmlparser2": { "htmlparser2": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
...@@ -3750,8 +3852,6 @@ ...@@ -3750,8 +3852,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"dev": true,
"optional": true,
"requires": { "requires": {
"assert-plus": "^0.2.0", "assert-plus": "^0.2.0",
"jsprim": "^1.2.2", "jsprim": "^1.2.2",
...@@ -3768,7 +3868,6 @@ ...@@ -3768,7 +3868,6 @@
"version": "0.4.23", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"dev": true,
"requires": { "requires": {
"safer-buffer": ">= 2.1.2 < 3" "safer-buffer": ">= 2.1.2 < 3"
} }
...@@ -4154,6 +4253,37 @@ ...@@ -4154,6 +4253,37 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
}, },
"jsdom": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-8.5.0.tgz",
"integrity": "sha1-1Nj12/J2hjW2KmKCO5R89wcevJg=",
"requires": {
"abab": "^1.0.0",
"acorn": "^2.4.0",
"acorn-globals": "^1.0.4",
"array-equal": "^1.0.0",
"cssom": ">= 0.3.0 < 0.4.0",
"cssstyle": ">= 0.2.34 < 0.3.0",
"escodegen": "^1.6.1",
"iconv-lite": "^0.4.13",
"nwmatcher": ">= 1.3.7 < 2.0.0",
"parse5": "^1.5.1",
"request": "^2.55.0",
"sax": "^1.1.4",
"symbol-tree": ">= 3.1.0 < 4.0.0",
"tough-cookie": "^2.2.0",
"webidl-conversions": "^3.0.1",
"whatwg-url": "^2.0.1",
"xml-name-validator": ">= 2.0.1 < 3.0.0"
},
"dependencies": {
"acorn": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
"integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
}
}
},
"jsencrypt": { "jsencrypt": {
"version": "3.0.0-rc.1", "version": "3.0.0-rc.1",
"resolved": "http://192.168.110.93:4873/jsencrypt/-/jsencrypt-3.0.0-rc.1.tgz", "resolved": "http://192.168.110.93:4873/jsencrypt/-/jsencrypt-3.0.0-rc.1.tgz",
...@@ -4185,8 +4315,6 @@ ...@@ -4185,8 +4315,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
"integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"dev": true,
"optional": true,
"requires": { "requires": {
"jsonify": "~0.0.0" "jsonify": "~0.0.0"
} }
...@@ -4211,9 +4339,43 @@ ...@@ -4211,9 +4339,43 @@
"jsonify": { "jsonify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
"dev": true, },
"optional": true "jspdf": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-1.5.3.tgz",
"integrity": "sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==",
"requires": {
"canvg": "1.5.3",
"file-saver": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
"html2canvas": "1.0.0-alpha.12",
"omggif": "1.0.7",
"promise-polyfill": "8.1.0",
"stackblur-canvas": "2.2.0"
},
"dependencies": {
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
},
"css-line-break": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz",
"integrity": "sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=",
"requires": {
"base64-arraybuffer": "^0.1.5"
}
},
"html2canvas": {
"version": "1.0.0-alpha.12",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-alpha.12.tgz",
"integrity": "sha1-OxmS48mz9WBjw1/WIElPN+uohRM=",
"requires": {
"css-line-break": "1.0.1"
}
}
}
}, },
"jsprim": { "jsprim": {
"version": "1.4.1", "version": "1.4.1",
...@@ -4281,6 +4443,15 @@ ...@@ -4281,6 +4443,15 @@
"loader-utils": "^0.2.5" "loader-utils": "^0.2.5"
} }
}, },
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"requires": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
}
},
"load-json-file": { "load-json-file": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
...@@ -5373,12 +5544,15 @@ ...@@ -5373,12 +5544,15 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
}, },
"nwmatcher": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
"integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ=="
},
"oauth-sign": { "oauth-sign": {
"version": "0.8.2", "version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
"dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
...@@ -5457,6 +5631,11 @@ ...@@ -5457,6 +5631,11 @@
"integrity": "sha1-9TxHNbptVq9aRrBN+3xDNMWW1E4=", "integrity": "sha1-9TxHNbptVq9aRrBN+3xDNMWW1E4=",
"dev": true "dev": true
}, },
"omggif": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.7.tgz",
"integrity": "sha1-WdLuywJj3oRjWz/riHwMmXPx5J0="
},
"on-finished": { "on-finished": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
...@@ -5512,6 +5691,19 @@ ...@@ -5512,6 +5691,19 @@
"wordwrap": "~0.0.2" "wordwrap": "~0.0.2"
} }
}, },
"optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"requires": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
}
},
"ora": { "ora": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz", "resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz",
...@@ -5656,6 +5848,11 @@ ...@@ -5656,6 +5848,11 @@
"error-ex": "^1.2.0" "error-ex": "^1.2.0"
} }
}, },
"parse5": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
"integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ="
},
"parseurl": { "parseurl": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
...@@ -5720,9 +5917,7 @@ ...@@ -5720,9 +5917,7 @@
"performance-now": { "performance-now": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
"integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
"dev": true,
"optional": true
}, },
"pify": { "pify": {
"version": "2.3.0", "version": "2.3.0",
...@@ -6386,6 +6581,11 @@ ...@@ -6386,6 +6581,11 @@
"uniqs": "^2.0.0" "uniqs": "^2.0.0"
} }
}, },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
},
"prepend-http": { "prepend-http": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
...@@ -6435,6 +6635,11 @@ ...@@ -6435,6 +6635,11 @@
"asap": "~2.0.3" "asap": "~2.0.3"
} }
}, },
"promise-polyfill": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz",
"integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA=="
},
"proto-list": { "proto-list": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
...@@ -7296,8 +7501,6 @@ ...@@ -7296,8 +7501,6 @@
"version": "2.81.0", "version": "2.81.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
"integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
"dev": true,
"optional": true,
"requires": { "requires": {
"aws-sign2": "~0.6.0", "aws-sign2": "~0.6.0",
"aws4": "^1.2.1", "aws4": "^1.2.1",
...@@ -7326,9 +7529,7 @@ ...@@ -7326,9 +7529,7 @@
"qs": { "qs": {
"version": "6.4.0", "version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
"dev": true,
"optional": true
} }
} }
}, },
...@@ -7384,6 +7585,11 @@ ...@@ -7384,6 +7585,11 @@
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true "dev": true
}, },
"rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
"integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0="
},
"right-align": { "right-align": {
"version": "0.1.3", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
...@@ -7557,8 +7763,7 @@ ...@@ -7557,8 +7763,7 @@
"sax": { "sax": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
"dev": true
}, },
"scss": { "scss": {
"version": "0.2.4", "version": "0.2.4",
...@@ -7885,8 +8090,6 @@ ...@@ -7885,8 +8090,6 @@
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"optional": true,
"requires": { "requires": {
"hoek": "2.x.x" "hoek": "2.x.x"
} }
...@@ -8061,6 +8264,11 @@ ...@@ -8061,6 +8264,11 @@
} }
} }
}, },
"stackblur-canvas": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.2.0.tgz",
"integrity": "sha512-5Gf8dtlf8k6NbLzuly2NkGrkS/Ahh+I5VUjO7TnFizdJtgpfpLLEdQlLe9umbcnZlitU84kfYjXE67xlSXfhfQ=="
},
"static-extend": { "static-extend": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
...@@ -8242,9 +8450,7 @@ ...@@ -8242,9 +8450,7 @@
"stringstream": { "stringstream": {
"version": "0.0.6", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="
"dev": true,
"optional": true
}, },
"strip-ansi": { "strip-ansi": {
"version": "4.0.0", "version": "4.0.0",
...@@ -8321,6 +8527,11 @@ ...@@ -8321,6 +8527,11 @@
"whet.extend": "~0.9.9" "whet.extend": "~0.9.9"
} }
}, },
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
"tapable": { "tapable": {
"version": "0.1.10", "version": "0.1.10",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
...@@ -8421,12 +8632,15 @@ ...@@ -8421,12 +8632,15 @@
"version": "2.3.4", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"optional": true,
"requires": { "requires": {
"punycode": "^1.4.1" "punycode": "^1.4.1"
} }
}, },
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"trim-newlines": { "trim-newlines": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
...@@ -8465,6 +8679,14 @@ ...@@ -8465,6 +8679,14 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
}, },
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"requires": {
"prelude-ls": "~1.1.2"
}
},
"type-is": { "type-is": {
"version": "1.6.16", "version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
...@@ -8877,6 +9099,11 @@ ...@@ -8877,6 +9099,11 @@
} }
} }
}, },
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"webpack": { "webpack": {
"version": "1.15.0", "version": "1.15.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
...@@ -9126,7 +9353,7 @@ ...@@ -9126,7 +9353,7 @@
}, },
"webpack-sources": { "webpack-sources": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", "resolved": "http://192.168.110.93:4873/webpack-sources/-/webpack-sources-0.1.5.tgz",
"integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=",
"dev": true, "dev": true,
"requires": { "requires": {
...@@ -9150,6 +9377,15 @@ ...@@ -9150,6 +9377,15 @@
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
"dev": true "dev": true
}, },
"whatwg-url": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-2.0.1.tgz",
"integrity": "sha1-U5ayBD8CDub3BNnEXqhRnnJN5lk=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"whet.extend": { "whet.extend": {
"version": "0.9.9", "version": "0.9.9",
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
...@@ -9188,6 +9424,11 @@ ...@@ -9188,6 +9424,11 @@
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true "dev": true
}, },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
},
"wordwrap": { "wordwrap": {
"version": "0.0.3", "version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
...@@ -9241,6 +9482,16 @@ ...@@ -9241,6 +9482,16 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}, },
"xml-name-validator": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
"integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
},
"xmldom": {
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
},
"xtend": { "xtend": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
......
<template> <template>
<div v-if="$route.name!='loginPage'"> <div v-if="$route.name!='loginPage'">
<v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header> <v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header>
<v-slidebar :authList="authList" :tokenValue="token" :storageIdType="storageIdType" :notCompleteCount="redNum"></v-slidebar> <v-slidebar :authList="authList" :tokenValue="token" :storageIdType="storageIdType" :notCompleteCount="redNum" :masterFlag="masterFlag"></v-slidebar>
<el-container> <el-container>
<div class="content" id="body-content"> <div class="content" id="body-content">
<transition name="router-fade" mode="out-in"> <transition name="router-fade" mode="out-in">
...@@ -46,7 +46,8 @@ export default { ...@@ -46,7 +46,8 @@ export default {
userName: '', userName: '',
portrait: '', portrait: '',
authList: {}, authList: {},
redNum: 0, redNum: 0,
masterFlag: false,
} }
}, },
computed:{ computed:{
...@@ -141,7 +142,8 @@ export default { ...@@ -141,7 +142,8 @@ export default {
localStorage.setItem('storageIdType', res.data.idType) localStorage.setItem('storageIdType', res.data.idType)
localStorage.setItem('storageMaster', res.data.masterAdministratorFlag) localStorage.setItem('storageMaster', res.data.masterAdministratorFlag)
vm.idType = res.data.idType vm.idType = res.data.idType
vm.storageIdType = res.data.idType vm.storageIdType = res.data.idType
vm.masterFlag = res.data.masterAdministratorFlag
vm.userName = res.data.name vm.userName = res.data.name
vm.portrait = res.data.imageUrl vm.portrait = res.data.imageUrl
vm.authList = res.data.auth vm.authList = res.data.auth
......
...@@ -56,7 +56,7 @@ service.interceptors.request.use(config => { ...@@ -56,7 +56,7 @@ service.interceptors.request.use(config => {
// console.log('环境变量>>>> ', process.env.BUILD_ENV); // console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6'; // config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291'; // config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = '2E46B77D801C479DBA1C550CE70D348F'; config.headers['token'] = '006EAC5D201B4547A27C842505F0E368';
}else{ }else{
config.headers['token'] = localStorage.getItem('storageToken') config.headers['token'] = localStorage.getItem('storageToken')
} }
......
...@@ -270,5 +270,16 @@ const vueFilter = { ...@@ -270,5 +270,16 @@ const vueFilter = {
list = list.substring(0, list.length - 1); list = list.substring(0, list.length - 1);
return list return list
}, },
entryStatusType: (value) => {
if(value == 1) {
return '草稿';
} else if(value == 2) {
return '未上架';
} else if(value == 3) {
return '已上架';
} else if(value == 4) {
return '已下架';
}
}
} }
export default vueFilter export default vueFilter
\ No newline at end of file
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<el-input type="textarea" rows="4" cols="10" v-model="portalComponent.introduce" size="small" placeholder="请输入组件简介" style="width:37%;"></el-input> <el-input type="textarea" rows="4" cols="10" v-model="portalComponent.introduce" size="small" placeholder="请输入组件简介" style="width:37%;"></el-input>
<span class="word-num">{{(portalComponent.introduce).replace(/\s+/g,"").length}}/150</span> <span class="word-num">{{(portalComponent.introduce).replace(/\s+/g,"").length}}/150</span>
</el-form-item> </el-form-item>
<div class="basic-item-icon"> <!-- <div class="basic-item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="组件图片" prop="imageUrl"> <el-form-item label="组件图片" prop="imageUrl">
<el-upload <el-upload
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<p class="upload-message" v-if="uploadImgMessage">请上传组件图片</p> <p class="upload-message" v-if="uploadImgMessage">请上传组件图片</p>
</div> </div> -->
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<div class="basic-item-icon"> <div class="basic-item-icon">
...@@ -565,7 +565,7 @@ export default { ...@@ -565,7 +565,7 @@ export default {
} }
if(!vm.portalComponent.imageUrl) { if(!vm.portalComponent.imageUrl) {
vm.uploadImgMessage = true vm.uploadImgMessage = true
return // return
} else { } else {
vm.uploadImgMessage = false vm.uploadImgMessage = false
} }
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
<div class="component-content screenSet" id="screenSet"> <div class="component-content screenSet" id="screenSet">
<div class="header-title">{{ title }}</div> <div class="header-title">{{ title }}</div>
<div class="button-group"> <div class="button-group">
<el-button size="small" @click="complete(0)">暂存</el-button> <el-button v-show="showStorage" size="small" @click="complete(1)">暂存</el-button>
<el-button type="primary" size="small" @click="complete(1)">完成</el-button> <el-button type="primary" size="small" @click="complete(2)">完成</el-button>
</div> </div>
<el-form <el-form
ref="formData" ref="formData"
...@@ -52,9 +52,9 @@ ...@@ -52,9 +52,9 @@
</el-form-item> </el-form-item>
<el-form-item label="项目时间:" required> <el-form-item label="项目时间:" required>
<el-col :span="5"> <el-col :span="5">
<el-form-item prop="projectBegintime"> <el-form-item prop="entryBegintime">
<el-date-picker <el-date-picker
v-model="formData.projectBegintime" v-model="formData.entryBegintime"
size="small" size="small"
type="datetime" type="datetime"
placeholder="请选择开始时间" placeholder="请选择开始时间"
...@@ -67,9 +67,9 @@ ...@@ -67,9 +67,9 @@
</el-col> </el-col>
<el-col class="line" :span="1">~</el-col> <el-col class="line" :span="1">~</el-col>
<el-col :span="5"> <el-col :span="5">
<el-form-item label prop="projectEndtime"> <el-form-item label prop="entryEndtime">
<el-date-picker <el-date-picker
v-model="formData.projectEndtime" v-model="formData.entryEndtime"
size="small" size="small"
type="datetime" type="datetime"
placeholder="请选择结束时间" placeholder="请选择结束时间"
...@@ -82,18 +82,18 @@ ...@@ -82,18 +82,18 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="项目简介:" prop="projectIntro"> <el-form-item label="入口简介:" prop="entryIntro">
<el-col :span="13"> <el-col :span="13">
<el-input <el-input
size="small" size="small"
type="textarea" type="textarea"
:autosize="{ minRows: 5}" :autosize="{ minRows: 5}"
placeholder="请输入项目简介" placeholder="请输入入口简介"
v-model="formData.projectIntro" v-model="formData.entryIntro"
style="width:83%;" style="width:83%;"
:disabled="peopleLevel == 'L3'" :disabled="peopleLevel == 'L3'"
></el-input> ></el-input>
<span class="word-num">{{(formData.projectIntro).replace(/\s+/g,"").length}}/200</span> <span class="word-num">{{(formData.entryIntro).replace(/\s+/g,"").length}}/200</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<div class="basic-item-icon"> <div class="basic-item-icon">
...@@ -209,6 +209,7 @@ ...@@ -209,6 +209,7 @@
style="width: 350px" style="width: 350px"
placeholder="关联项目" placeholder="关联项目"
@change="changeValue" @change="changeValue"
filterable
> >
<el-option <el-option
v-for="item in optionsProject" v-for="item in optionsProject"
...@@ -235,6 +236,14 @@ ...@@ -235,6 +236,14 @@
</el-col> </el-col>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-dialog title="确认上架" :visible.sync="dialogUp" width="30%" center>
<p class="dialog_p">该项目已关联<span> 0 </span>个子项目</p>
<p class="dialog_p">继续上架,将在APP端无法显示该项目</p>
<span slot="footer" class="dialog-footer">
<el-button @click="insertOrUpdate(2)">确认上架</el-button>
<el-button type="primary" @click="dialogUp = false">取消</el-button>
</span>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
...@@ -266,35 +275,41 @@ export default { ...@@ -266,35 +275,41 @@ export default {
curmbSecond: "项目组件", curmbSecond: "项目组件",
curmbThird: "新建入口", curmbThird: "新建入口",
title: "", title: "",
projectId: null, showStorage: false,
entryId: null,
peopleLevel: null, peopleLevel: null,
uploadImgMessage: false, uploadImgMessage: false,
uploadImgMessage2: false, uploadImgMessage2: false,
imgMouseOver: false, imgMouseOver: false,
imgMouseOver2: false, imgMouseOver2: false,
organizationContent: "云鹊医", organizationContent: "云鹊医",
statusValue: 0,
dialogUp: false,
formData: { formData: {
entryName: "", entryName: "",
projectBegintime: "", entryBegintime: "",
projectEndtime: "", entryEndtime: "",
projectIntro: "", entryIntro: "",
type: 1, type: 1,
attachmentUrl1: "", attachmentUrl1: "",
attachmentUrl2: "", attachmentUrl2: "",
attachmentMore1: {},
attachmentMore2: {},
organizationName: "", organizationName: "",
project: [] project: []
}, },
optionsProject: [], optionsProject: [],
tagsProject: [], tagsProject: [],
visibleName: false, visibleName: false,
entryOptionData: {},
pickerOptions0: { pickerOptions0: {
disabledDate: time => { disabledDate: time => {
if ( if (
this.formData.projectEndtime != "" && this.formData.entryEndtime != "" &&
this.formData.projectEndtime != null this.formData.entryEndtime != null
) { ) {
return ( return (
time.getTime() > new Date(this.formData.projectEndtime).getTime() time.getTime() > new Date(this.formData.entryEndtime).getTime()
); );
} }
} }
...@@ -302,7 +317,7 @@ export default { ...@@ -302,7 +317,7 @@ export default {
pickerOptions1: { pickerOptions1: {
disabledDate: time => { disabledDate: time => {
return ( return (
time.getTime() < new Date(this.formData.projectBegintime).getTime() time.getTime() < new Date(this.formData.entryBegintime).getTime()
); //减去一天的时间代表可以选择同一天; ); //减去一天的时间代表可以选择同一天;
} }
}, },
...@@ -326,14 +341,14 @@ export default { ...@@ -326,14 +341,14 @@ export default {
trigger: "blur" trigger: "blur"
} }
], ],
projectBegintime: [ entryBegintime: [
{ {
required: true, required: true,
message: "请选择时间", message: "请选择时间",
trigger: "change" trigger: "change"
} }
], ],
projectEndtime: [ entryEndtime: [
{ {
required: true, required: true,
message: "请选择时间", message: "请选择时间",
...@@ -348,7 +363,7 @@ export default { ...@@ -348,7 +363,7 @@ export default {
trigger: "change" trigger: "change"
} }
], ],
projectIntro: [ entryIntro: [
{ required: true, message: "请填写项目简介", trigger: "blur" }, { required: true, message: "请填写项目简介", trigger: "blur" },
{ min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" } { min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" }
], ],
...@@ -366,39 +381,49 @@ export default { ...@@ -366,39 +381,49 @@ export default {
}, },
created() { created() {
vm = this; vm = this;
vm.projectId = vm.getUrlSearch(window.location.href, "projectId"); vm.entryId = vm.getUrlSearch(window.location.href, "entryId");
vm.peopleLevel = vm.getUrlSearch(window.location.href, "level"); vm.peopleLevel = vm.getUrlSearch(window.location.href, "level");
vm.initTitle(); vm.initTitle();
vm.initOption(); vm.initOption();
// vm.getEntryData();
}, },
mounted: function() { mounted: function() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { methods: {
initTitle() { initTitle() {
if (vm.projectId == null) { if (vm.entryId == null) {
vm.title = "新建入口"; vm.title = "新建入口";
vm.curmbThird = "新建入口"; vm.curmbThird = "新建入口";
vm.showStorage = true;
} else { } else {
vm.title = "编辑入口"; vm.title = "编辑入口";
vm.curmbThird = "编辑入口"; vm.curmbThird = "编辑入口";
vm.showStorage = false;
} }
}, },
setOption(data) {
let list = [];
for(let i = 0; i<data.length ; i++) {
let obj = {
value: data[i].projectId,
label: data[i].projectName,
}
list.push(obj);
}
return list;
},
initOption() { initOption() {
vm.optionsProject = [ vm.optionsProject = [];
{ let req = {};
value: 1, openLoading(vm);
label: "项目A" vm.GET("portal/entryInfo/getProjectList", req).then(res => {
}, closeLoading(vm);
{ if (res.code == "000000") {
value: 2, vm.optionsProject = vm.setOption(res.data);
label: "项目B" vm.getEntryData();
},
{
value: 3,
label: "项目C"
} }
]; });
}, },
submitForm(formName) { submitForm(formName) {
let flag = null; let flag = null;
...@@ -503,6 +528,7 @@ export default { ...@@ -503,6 +528,7 @@ export default {
attachmentExt: path.ext, attachmentExt: path.ext,
attachmentSize: path.size attachmentSize: path.size
}; };
console.log("!!!" + vm.formData[fileLimit.key]);
vm.$message.success("上传成功"); vm.$message.success("上传成功");
}); });
} }
...@@ -559,7 +585,7 @@ export default { ...@@ -559,7 +585,7 @@ export default {
}, },
changeOrganizationName() { changeOrganizationName() {
let textLength = vm.formData.organizationName.length; let textLength = vm.formData.organizationName.length;
console.log("文字长度", textLength); // console.log("文字长度", textLength);
if (textLength == 0) { if (textLength == 0) {
vm.visibleName = true; vm.visibleName = true;
} else { } else {
...@@ -568,15 +594,15 @@ export default { ...@@ -568,15 +594,15 @@ export default {
}, },
tagDrop() { tagDrop() {
this.$nextTick(function() { this.$nextTick(function() {
if(vm.tagsProject.length > 0) { if (vm.tagsProject.length > 0) {
const ele = document.querySelector('.check-project .el-col-10'); const ele = document.querySelector(".check-project .el-col-10");
// console.log('ele',ele); // console.log('ele',ele);
Sortable.create(ele, { Sortable.create(ele, {
onEnd({ newIndex, oldIndex }) { onEnd({ newIndex, oldIndex }) {
const currRow = vm.tagsProject.splice(oldIndex, 1)[0] const currRow = vm.tagsProject.splice(oldIndex, 1)[0];
vm.tagsProject.splice(newIndex, 0, currRow) vm.tagsProject.splice(newIndex, 0, currRow);
} }
}) });
} }
}); });
}, },
...@@ -596,6 +622,20 @@ export default { ...@@ -596,6 +622,20 @@ export default {
} }
vm.tagDrop(); vm.tagDrop();
}, },
initTags(value) {
vm.tagsProject = [];
let len = 0;
for (let i = 0; i < value.length; i++) {
for (let j = 0; j < vm.optionsProject.length; j++) {
if (value[i] == vm.optionsProject[j].value) {
vm.tagsProject[len] = {};
vm.tagsProject[len].value = vm.optionsProject[j].value;
vm.tagsProject[len].name = vm.optionsProject[j].label;
len++;
}
}
}
},
handleCloseProject(tag) { handleCloseProject(tag) {
if (tag.disabled == true) { if (tag.disabled == true) {
return; return;
...@@ -606,13 +646,207 @@ export default { ...@@ -606,13 +646,207 @@ export default {
vm.formData.project[j] = vm.tagsProject[j].value; vm.formData.project[j] = vm.tagsProject[j].value;
} }
}, },
getEntryData() {
if (vm.entryId == null) {
return;
}
let req = {
entryId: vm.entryId
};
openLoading(vm);
vm.GET("portal/entryInfo/getEntry", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.setEditData(res.data);
vm.entryOptionData = res.data;
vm.statusValue = res.data.portalEntry.entryStatus;
// console.log("portalEntryUniInfo", vm.entryOptionData);
} else {
vm.$message(res.message);
}
});
},
setProject(data) {
let list = [];
for(let i = 0; i<data.length; i++) {
list.push(data[i]);
}
return list;
},
setEditData(data) {
if(data.portalEntry.entryStatus === 1) {
vm.showStorage = true;
}
vm.formData = {
entryName: data.portalEntry.entryName,
organizationName: data.portalEntry.organizationName,
entryBegintime: data.portalEntry.entryBegintime,
entryEndtime: data.portalEntry.entryEndtime,
entryIntro: data.portalEntry.entryIntro,
// type: 1,
// attachmentUrl1: "",
// attachmentUrl2: "",
type: data.attachments[1].attachmentType,
attachmentUrl1: data.attachments[0].attachmentUrl,
attachmentUrl2: data.attachments[1].attachmentUrl,
attachmentMore1: {
attachmentName: data.attachments[0].attachmentName,
},
attachmentMore2: {
attachmentName: data.attachments[1].attachmentName,
},
project: data.projectIds,
};
let projectEdit = data.projectIds;
vm.initTags(projectEdit);
},
complete(type) { complete(type) {
console.log("type:" + type); //1是暂存,2是完成
if (type == 1) { if (type == 2) {
if (!vm.formData.attachmentUrl1) {
vm.uploadImgMessage = true;
} else {
vm.uploadImgMessage = false;
}
if (!vm.formData.attachmentUrl2) {
vm.uploadImgMessage2 = true;
} else {
vm.uploadImgMessage2 = false;
}
let completeState = vm.submitForm("formData");
if (
completeState === true &&
vm.formData.attachmentUrl1 != "" &&
vm.formData.attachmentUrl2 != ""
) {
if(vm.statusValue === 3 && vm.formData.project.length == 0) {
vm.dialogUp = true;
} else {
vm.insertOrUpdate(type);
}
}
//完成 //完成
} else { } else {
//暂存 //暂存
if(vm.formData.entryName == '') {
vm.$message('请输入入口名称!');
} else {
vm.insertOrUpdate(type);
}
}
},
insertOrUpdate(isCompleted) {
//option
let portalEntryUniInfo = {};
if (vm.entryId == null) {
portalEntryUniInfo = {
portalEntry: {
entryBegintime: vm.formData.entryBegintime,
entryEndtime: vm.formData.entryEndtime,
entryIntro: vm.formData.entryIntro,
entryName: vm.formData.entryName,
organizationName: vm.formData.organizationName
},
attachments: [
{
attachmentType: 1,
attachmentUrl: vm.formData.attachmentUrl1,
attachmentName: vm.formData.attachmentMore1.attachmentName,
// attachmentExt: vm.formData.attachmentMore1.attachmentExt,
// attachmentSize: vm.formData.attachmentMore1.attachmentSize,
kind: 1,
// seqNo: 1
},
{
attachmentType: vm.formData.type,
attachmentUrl: vm.formData.attachmentUrl2,
attachmentName: vm.formData.attachmentMore2.attachmentName,
// attachmentExt: vm.formData.attachmentMore2.attachmentExt,
// attachmentSize: vm.formData.attachmentMore2.attachmentSize,
kind: 2,
// seqNo: 1
}
],
projectIds: []
};
for(let i = 0;i < vm.tagsProject.length ; i++) {
// portalEntryUniInfo.subprojects[i] = {
// projectId: vm.tagsProject[i].value,
// projectName: vm.tagsProject[i].label,
// }
portalEntryUniInfo.projectIds[i] = vm.tagsProject[i].value;
}
} else {
portalEntryUniInfo = {
portalEntry: {
createdId: vm.entryOptionData.portalEntry.createdId,
createdName: vm.entryOptionData.portalEntry.createdName,
createdTime: vm.entryOptionData.portalEntry.createdTime,
deleteFlag: vm.entryOptionData.portalEntry.deleteFlag,
entryBegintime: vm.formData.entryBegintime,
entryEndtime: vm.formData.entryEndtime,
entryIntro: vm.formData.entryIntro,
entryName: vm.formData.entryName,
entryStatus: vm.entryOptionData.portalEntry.entryStatus,
id: vm.entryOptionData.portalEntry.id,
organizationId: 0,
organizationName: vm.formData.organizationName
},
attachments: [
{
attachmentType: 1,
attachmentUrl: vm.formData.attachmentUrl1,
attachmentName: vm.formData.attachmentMore1.attachmentName,
entryId: vm.entryOptionData.portalEntry.id,
id: vm.entryOptionData.portalEntry.id,
kind: 1,
// seqNo: 1
},
{
attachmentType: vm.formData.type,
attachmentUrl: vm.formData.attachmentUrl2,
attachmentName: vm.formData.attachmentMore2.attachmentName,
entryId: vm.entryOptionData.portalEntry.id,
id: vm.entryOptionData.portalEntry.id,
kind: 2,
// seqNo: 1
}
],
projectIds: []
};
for(let i = 0;i < vm.tagsProject.length ; i++) {
// portalEntryUniInfo.subprojects[i] = {
// projectId: vm.tagsProject[i].value,
// projectName: vm.tagsProject[i].label,
// }
portalEntryUniInfo.projectIds[i] = vm.tagsProject[i].value;
}
// console.log('tagsProject',vm.tagsProject);
} }
// console.log("portalEntryUniInfo", portalEntryUniInfo);
openLoading(vm);
vm.POST(
"portal/entryInfo/updateInsertEntry?isCompleted=" + isCompleted,
portalEntryUniInfo
).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(vm.statusValue === 3) {
vm.$message({
message: '发布成功',
type: 'success'
});
}
vm.$router.push("entry-manager");
} else {
if(vm.statusValue === 3) {
vm.$message.error('发布失败');
vm.$message(res.message);
} else {
vm.$message(res.message);
}
}
});
} }
} }
}; };
...@@ -623,6 +857,12 @@ export default { ...@@ -623,6 +857,12 @@ export default {
position: relative; position: relative;
padding: 10px; padding: 10px;
background: #fff; background: #fff;
.dialog_p {
text-align: center;
span{
font-weight: 700;
}
}
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px;
font-size: 12px; font-size: 12px;
...@@ -636,6 +876,15 @@ export default { ...@@ -636,6 +876,15 @@ export default {
z-index: 999; z-index: 999;
} }
.basic-form { .basic-form {
::-webkit-scrollbar
{
width: 4px;
height: 20px;
background-color: #D8D8D8;
}
::-webkit-scrollbar-thumb {
background-color: #D8D8D8;
}
position: relative; position: relative;
margin-top: 10px; margin-top: 10px;
.basic-item-icon { .basic-item-icon {
......
...@@ -2,37 +2,54 @@ ...@@ -2,37 +2,54 @@
<div class="entry-manager"> <div class="entry-manager">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="component-content screenSet" id="screenSet"> <div class="component-content screenSet" id="screenSet">
<el-form :model="formInline" ref="formInline" label-width="75px" class="form-inline"> <el-row>
<el-col :span="6"> <el-form :model="formInline" ref="formInline" label-width="75px" class="form-inline">
<el-form-item label="入口名称:"> <el-col :span="8">
<el-input size="small" v-model="formInline.name" placeholder="请输入名称"></el-input> <el-form-item label="入口名称:">
</el-form-item> <el-input size="small" v-model="formInline.entryName" placeholder="请输入名称"></el-input>
</el-col> </el-form-item>
<el-col :span="2"></el-col> </el-col>
<el-col :span="12"> <el-col :span="16" style="padding:0;text-align:right;padding-right:10px;">
<el-button type="primary" size="small">查询</el-button> <el-button type="primary" @click="search()" size="small">查询</el-button>
</el-col> <el-button type="primary" @click="resetForm()" size="small">重置</el-button>
<el-col :span="4" style="padding:0;text-align:right;padding-right:10px;"> </el-col>
<el-button type="primary" size="small">新建入口</el-button> </el-form>
</el-col> </el-row>
</el-form> <el-row>
<el-button class="button-jump" type="primary" size="small" @click="toPage()">新建入口</el-button>
</el-row>
<el-table :data="tableData" style="width: 100%"> <el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="ID编号" align="center"></el-table-column> <el-table-column prop="id" label="ID编号" align="center"></el-table-column>
<el-table-column prop="project" label="入口名称" align="center"></el-table-column> <el-table-column prop="createdTime" width="100" label="入口创建时间" align="center"></el-table-column>
<el-table-column prop="name" label="创建人" align="center"></el-table-column> <el-table-column prop="entryName" label="入口名称" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column> <el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="desc" label="入口介绍" align="center"></el-table-column> <el-table-column prop="entryIntro" label="入口简介" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="startTime" label="开始时间" align="center"></el-table-column> <el-table-column prop="entryBegintime" width="100" label="开始时间" align="center"></el-table-column>
<el-table-column prop="endTime" label="介绍时间" align="center"></el-table-column> <el-table-column prop="entryEndtime" width="100" label="结束时间" align="center"></el-table-column>
<el-table-column fixed="right" label="状态" align="center"> <el-table-column prop="entryStatus" label="状态" align="center">
<template slot-scope="scope">{{ scope.row.status | shieldStatus }}</template> <template slot-scope="scope">{{ scope.row.entryStatus | entryStatusType }}</template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" width="350" align="center"> <el-table-column fixed="right" label="操作" width="250" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="small">编辑</el-button> <el-button type="primary" @click="toPage(scope.row.id)" size="small">编辑</el-button>
<el-button type="primary" size="small">上架</el-button> <el-button
<el-button type="primary" size="small">下架</el-button> type="primary"
<el-button type="primary" size="small">删除</el-button> v-show="showButton(scope.row.entryStatus,1)"
@click="openDialog('up',scope.row)"
size="small"
>上架</el-button>
<el-button
type="primary"
v-show="showButton(scope.row.entryStatus,2)"
@click="changeStatus(scope.row.id, 4)"
size="small"
>下架</el-button>
<el-button
type="primary"
v-show="showButton(scope.row.entryStatus,3)"
@click="delEntry(scope.row, 5)"
size="small"
>删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -48,6 +65,34 @@ ...@@ -48,6 +65,34 @@
:total="totalRows" :total="totalRows"
></el-pagination> ></el-pagination>
</div> </div>
<el-dialog title="确定上架" :visible.sync="dialogUp" width="30%" center>
<p v-if="childrenNum > 0" class="dialog_p">该项目已关联<span> {{ childrenNum }} </span>个子项目</p>
<p v-if="childrenNum > 0" class="dialog_p">确认要继续上架吗?</p>
<p v-if="childrenNum == 0" class="dialog_p">该项目已关联<span> 0 </span>个子项目</p>
<p v-if="childrenNum == 0" class="dialog_p">继续上架,将在APP端无法显示该项目</p>
<span v-if="childrenNum > 0" slot="footer" class="dialog-footer">
<el-button @click="dialogUp = false">取消</el-button>
<el-button type="primary" @click="changeStatus(null,3)">确定上架</el-button>
</span>
<span v-if="childrenNum == 0" slot="footer" class="dialog-footer">
<el-button @click="changeStatus(null,3)">确认上架</el-button>
<el-button type="primary" @click="dialogUp = false">取消</el-button>
</span>
</el-dialog>
<el-dialog title="确定删除" :visible.sync="dialogDel" width="30%" center>
<p v-if="scopeRow.entryStatus != 4" class="dialog_p">确认删除该条记录?</p>
<span v-if="scopeRow.entryStatus != 4" slot="footer" class="dialog-footer">
<el-button @click="dialogDel = false">取消</el-button>
<el-button type="primary" @click="changeStatus(null,5)">确认删除</el-button>
</span>
<p v-if="scopeRow.entryStatus == 4" class="dialog_p">删除后,该项目入口将不存在</p>
<p v-if="scopeRow.entryStatus == 4" class="dialog_p">同时释放该项目关联的所有子项目</p>
<span v-if="scopeRow.entryStatus == 4" slot="footer" class="dialog-footer">
<el-button @click="changeStatus(null,5)">确认删除</el-button>
<el-button type="primary" @click="dialogDel = false">取消</el-button>
</span>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
...@@ -67,22 +112,15 @@ export default { ...@@ -67,22 +112,15 @@ export default {
curmbFirst: "入口管理", curmbFirst: "入口管理",
totalRows: 0, totalRows: 0,
formInline: { formInline: {
name: "", entryName: "",
pageNo: 1, pageNo: 1,
pageSize: 10 pageSize: 10
}, },
tableData: [ tableData: [],
{ dialogUp: false,
id: 123, dialogDel: false,
project: "小何同学的项目", childrenNum: 0,
name: "小王同学", scopeRow: {}
createTime: "2019-09-09",
desc: "小王同学",
startTime: "2019-10-10",
endTime: "2019-12-10",
status: 1
}
]
}; };
}, },
computed: { computed: {
...@@ -90,18 +128,119 @@ export default { ...@@ -90,18 +128,119 @@ export default {
}, },
created() { created() {
vm = this; vm = this;
vm.search();
}, },
mounted: function() { mounted: function() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { methods: {
searchData() {
vm.formInline.pageNo = 1;
vm.search();
},
search() {
let req = {};
req = vm.formInline;
openLoading(vm);
vm.GET("portal/entryInfo/getEntryList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.tableData = res.data.data;
vm.totalRows = res.data.totalRows;
} else {
vm.$message(res.message);
}
});
},
showButton(status, option) {
//status 1.草稿,2.未上架,3.已上架,4.已下架
//option 0.编辑,1上架,2下架,3删除
status = status - 1;
let showArray = [
[true, false, false, true],
[true, true, false, true],
[true, false, true, false],
[true, true, false, true]
];
let showType = showArray[status][option];
return showType;
},
resetForm() {
vm.formInline = {
entryName: "",
pageNo: 1, //当前是第几页
pageSize: 10 //页面总数
};
vm.search();
},
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
this.formInline.pageSize = val; this.formInline.pageSize = val;
vm.searchData();
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
this.formInline.pageNo = val; this.formInline.pageNo = val;
vm.search();
},
toPage(id) {
if (id === undefined) {
this.$router.push("edit-entry");
} else {
this.$router.push("edit-entry?entryId=" + id);
}
},
openDialog(type, row) {
vm.scopeRow = row;
vm.childrenNum = row.subprojectNum;
vm.dialogUp = true;
},
changeStatus(id, changeTo) {
vm.dialogUp = false;
vm.dialogDel = false;
let req = {};
let entryId = id;
if (entryId == null) {
entryId = vm.scopeRow.id;
}
openLoading(vm);
vm.POST(
"portal/entryInfo/changeStatus?entryId=" +
entryId +
"&changeTo=" +
changeTo,
req
).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(changeTo === 3) {
vm.$message({
message: '发布成功',
type: 'success'
});
} else {
vm.$message(res.message);
}
} else {
//失败
if(changeTo === 3) {
vm.$message.error('发布失败');
} else {
vm.$message(res.message);
}
}
vm.search();
});
},
delEntry(row, changeTo) {
vm.scopeRow = row;
vm.dialogDel = true;
// if (vm.scopeRow.entryStatus == 4) {
// vm.dialogDel = true;
// } else {
// vm.changeStatus(vm.scopeRow.id, changeTo);
// }
} }
} }
}; };
...@@ -111,6 +250,20 @@ export default { ...@@ -111,6 +250,20 @@ export default {
.component-content { .component-content {
padding: 10px; padding: 10px;
background: #fff; background: #fff;
.dialog_p {
text-align: center;
span{
font-weight: 700;
}
}
.button-jump {
margin-right: 10px;
margin-bottom: 10px;
float: right;
}
} }
} }
.el-tooltip__popper {
max-width:50%
}
</style> </style>
\ No newline at end of file
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column> <el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column> <el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdName" label="创建人" align="center"></el-table-column> <el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" width="100" align="center"></el-table-column>
<el-table-column <el-table-column
prop="projectIntro" prop="projectIntro"
label="项目简介" label="项目简介"
......
...@@ -56,7 +56,11 @@ ...@@ -56,7 +56,11 @@
}, },
notCompleteCount: { notCompleteCount: {
type: Number, type: Number,
} },
masterFlag: {
type: Boolean,
default: false
},
}, },
data() { data() {
return { return {
...@@ -173,6 +177,13 @@ ...@@ -173,6 +177,13 @@
// if(val==2){ // 调试时已经去掉了 // if(val==2){ // 调试时已经去掉了
vm.setFollowSide() vm.setFollowSide()
// } // 调试时已经去掉了 // } // 调试时已经去掉了
},
masterFlag(newVal, oldVal) {
// console.log('新老:',newVal,oldVal)
// 入口管理暂时判断
if(newVal === true) {
vm.setEntrySide();
}
} }
}, },
methods: { methods: {
...@@ -201,6 +212,14 @@ ...@@ -201,6 +212,14 @@
} }
vm.items.push(followSider); vm.items.push(followSider);
}, },
setEntrySide() {
const followSider = {
title: '入口管理',
icon: 'el-icon-setting',
index: 'entry-manager'
}
vm.items[1].subs.push(followSider);
},
goToMessageSendPage(checkAuth) { goToMessageSendPage(checkAuth) {
if(checkAuth){ if(checkAuth){
utils.checkAuthFunc().then(res=>{ utils.checkAuthFunc().then(res=>{
......
<template>
<div class="data-all-wrap">
<div v-if="dataType == 0" class="data-chart">
<div class="box-list">
<div v-for="(item , index) in cardData" :key="index" class="box">
<el-card class="box-card">
<el-tooltip class="item-tool" placement="bottom-end" effect="light">
<div slot="content">
<p v-for="text in item.content">{{ text }}</p>
</div>
<i class="el-icon-question notice"></i>
</el-tooltip>
<div class="left-content">
<p class="title">{{ item.title }}</p>
<p class="value">{{ item.value }}</p>
</div>
<div class="vertical"></div>
<div class="right-content">
<p class="has">{{ item.hasKey }}:{{ item.hasNum }}</p>
<p class="should">{{ item.shouldKey }}:{{ item.shouldNum }}</p>
</div>
</el-card>
<!-- <div v-if="index+1 !== cardData.length" class="line"></div> -->
</div>
</div>
<div class="chart-title">证历分布情况</div>
<div class="chart-distributeChart">
<div class="distributeChart" id="distributeChart" ref="distributeChart"></div>
<div class="data-text">
<div class="content-text">
<p v-for="item in distributeList" :key="item.value">{{item.label}}{{item.value}}</p>
</div>
</div>
</div>
<div class="chart-title">证书级别按学历发布情况</div>
<div class="chart-recordChart">
<div class="recordChart" id="recordChart" ref="recordChart"></div>
<div class="data-text">
<div class="content-text">
<p v-for="item in recordList" :key="item.value">{{item.label}}{{item.value}}</p>
</div>
</div>
</div>
<!-- <el-select class="chart-select" v-model="rankType" placeholder="请选择">
<el-option
v-for="item in rankOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>-->
<div class="chart-title">培训情况排名</div>
<div class="chart" id="certificateChart" ref="certificateChart"></div>
<div class="chart-title">在线培训完成时长情况</div>
<div class="chart" id="durationChart" ref="durationChart"></div>
</div>
<div v-if="dataType == 1" class="data-table">
<div class="box-list">
<div v-for="(item , index) in cardData" :key="index" class="box">
<el-card class="box-card box-card2">
<el-tooltip class="item-tool" placement="bottom-end" effect="light">
<div slot="content">
<p v-for="text in item.content">{{ text }}</p>
</div>
<i class="el-icon-question notice"></i>
</el-tooltip>
<div class="left-content">
<p class="title">{{ item.title }}</p>
<p class="value">{{ item.value }}</p>
</div>
<div class="vertical"></div>
<div class="right-content">
<p class="has">{{ item.hasKey }}:{{ item.hasNum }}</p>
<p class="should">{{ item.shouldKey }}:{{ item.shouldNum }}</p>
</div>
</el-card>
<!-- <div v-if="index+1 !== cardData.length" class="line"></div> -->
</div>
</div>
<div class="person">
<div class="person-title">项目人员情况</div>
<!-- <el-radio-group class="person-radio" v-model="tableType" @change="change">
<el-radio-button label="0">已获证</el-radio-button>
<el-radio-button label="1">未获证</el-radio-button>
<el-radio-button label="2">未参与</el-radio-button>
</el-radio-group> -->
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="rank" label="排名" align="center"></el-table-column>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" align="center"></el-table-column>
<el-table-column prop="department" label="科室" align="center"></el-table-column>
<el-table-column prop="join" label="是否参与项目" align="center"></el-table-column>
<el-table-column prop="complete" label="是否完成项目" align="center"></el-table-column>
<el-table-column prop="grade" label="证书级别" align="center"></el-table-column>
<el-table-column prop="certificateDate" label="获证日期" align="center"></el-table-column>
<el-table-column prop="record" label="成绩" align="center"></el-table-column>
<el-table-column prop="learnTime" label="学习时长" align="center"></el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formTable.pageNo"
:page-sizes="[10, 20, 30, 100]"
:page-size="formTable.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import echarts from "echarts";
import { setTimeout } from "timers";
let vm = null;
export default {
props: {
formInline: {
type: Object
},
activeName: {
type: String
},
organizationNum: {
type: Number
},
organizationList: {
type: Array
}
},
data() {
return {
roleType: "L1",
projectId: "",
dataType: 0,
tableType: "0",
echartsData: {
chart0: {},
chart1: {},
chart2: {},
chart3: {}
},
distributeList: [],
recordList: [],
cardData: [],
rankType: 1,
rankOptions: [
{
value: 1,
label: "按获证比例排名"
},
{
value: 2,
label: "按参与人数排名"
}
],
tableData: [],
totalRows: 0,
formTable: {
pageNo: 1,
pageSize: 10,
},
};
},
created() {
vm = this;
vm.projectId = vm.getUrlSearch(window.location.href, "id");
vm.initCard();
if(vm.dataType == 0) {
// vm.setInitWidth();
setTimeout(function() {
// vm.$nextTick(() => {
vm.setDistributeChart();
vm.setRecordChart();
vm.setDurationChart();
vm.setCertificateChart();
// });
}, 500);
} else {
vm.setTable();
}
},
mounted: function() {},
methods: {
initCard() {
let cardData = [
{
value: "45%",
title: "机构参与率",
hasKey: "已参与机构数",
hasNum: "318535",
shouldKey: "应参与机构数",
shouldNum: "78534",
content: [
"机构参与率:已参与机构数/应参与机构数*100% ",
"应参与机构数:筛选范围下,所有圈选机构数量,包含白名单反退出来的机构",
"已参与机构数:筛选范围下,在应参与机构中,机构学员有参与项目行为的机构数量"
]
},
{
value: "78%",
title: "人员参与率",
hasKey: "已参与人数",
hasNum: "878534",
shouldKey: "应参与人数",
shouldNum: "674343",
content: [
"人员参与率:已参与人数/应参与人数*100%",
"应参与人数:筛选范围下,所圈选人员数量",
"已参与人数:筛选范围下,在应参与人员中,有参与项目行为的人员数量"
]
},
{
value: "71%",
title: "获证率",
hasKey: "已获证人数",
hasNum: "567",
shouldKey: "应参与人数",
shouldNum: "78534",
content: [
"获证率:已完成人数/应参与人数*100%",
"应参与人数:筛选范围下,所圈选人员数量",
"已获证人数:筛选范围下,在应参与人员中,已获证的人员数量"
]
}
];
if(vm.dataType == 0) {
vm.cardData = cardData;
} else if(vm.dataType == 1) {
vm.cardData = cardData.slice(0,2);
}
},
updateResize() {
setTimeout(function() {
window.onresize = function() {
vm.echartsData.chart0.resize();
vm.echartsData.chart1.resize();
vm.echartsData.chart2.resize();
vm.echartsData.chart3.resize();
};
},100);
},
setInitWidth() {
},
setDistributeChart() {
vm.distributeList = [
{
label: '未获证人数',
value: 2290,
},
{
label: '获优秀人数',
value: 1900,
},
{
label: '获及格人数',
value: 150,
},
]
let myChart = echarts.init(this.$refs.distributeChart);
let option = {
title: {
text: "",
x: "left"
},
tooltip: {
trigger: "item",
formatter: "{b} : {c} ({d}%)"
},
label: {
formatter: "{d}%"
},
color: ['#FF9A4B','#39AF9A', '#FFB01B'],
legend: {
orient: "horizontal",
top: "",
left: "40%",
data: ["未获证人数占比", "获优秀人数占比", "获及格人数占比"]
},
series: [
{
name: "",
type: "pie",
radius: "60%",
center: ["65%", "50%"],
data: [
{ value: 3000, name: "未获证人数占比" },
{ value: 6800, name: "获优秀人数占比" },
{ value: 3200, name: "获及格人数占比" }
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)"
}
}
}
]
};
myChart.setOption(option);
vm.echartsData.chart0 = myChart;
vm.updateResize();
},
setRecordChart() {
vm.recordList = [
{
label: '博士',
value: 50,
},
{
label: '硕士',
value: 90,
},
{
label: '本科',
value: 700,
},
{
label: '大专',
value: 20428,
},
{
label: '中专及以下',
value: 34234,
},
{
label: '其他',
value: 2345,
},
]
let myChart = echarts.init(this.$refs.recordChart);
let option = {
title: {
text: "",
x: "left"
},
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
shadowStyle: {
shadowColor: '#E3EFED',
width: 36,
},
},
backgroundColor: 'rgba(0,0,0,0.7)',
formatter: function(params) {
let relVal = params[0].name + "人数:";
let value = 0;
for (let i = 0, l = params.length; i < l; i++) {
value += params[i].value;
}
relVal += value + "人";
let divList = [];
divList[0] = "<div style='background: #FFB01B;height: 12px;width: 20px;margin: 5px 5px 0 2px;float: left;border-radius:2px;'></div>";
divList[1] = "<div style='background: #39AF9A;height: 12px;width: 20px;margin: 5px 5px 0 2px;float: left;border-radius:2px;'></div>";
divList[2] = "<div style='background: #5D7092;height: 12px;width: 20px;margin: 5px 5px 0 2px;float: left;border-radius:2px;'></div>";
for (let j = params.length - 1 ; j >= 0; j--) {
relVal +=
"<br/>" + divList[j] +
params[j].seriesName +
"占比: " +
(
(100 * parseFloat(params[j].value)) /
parseFloat(value)
).toFixed(2) +
"%";
}
return relVal;
}
},
color: ['#FFB01B','#39AF9A', '#5D7092'],
legend: {
data: ["未获证人数", "获优秀人数", "获及格人数"]
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
xAxis: {
type: "category",
data: ["博士", "硕士", "本科", "大专", "中专及以下", "其他"]
},
yAxis: {
type: "value",
name: "人数 (个)"
},
series: [
{
name: "获及格人数",
type: "bar",
stack: "总量",
barWidth: 18,
label: {
normal: {
show: true,
rotate: -90,
}
},
data: [220, 182, 191, 234, 290, 330]
},
{
name: "获优秀人数",
type: "bar",
stack: "总量",
barWidth: 18,
label: {
normal: {
show: true,
rotate: -90,
}
},
data: [120, 132, 101, 134, 90, 230]
},
{
name: "未获证人数",
type: "bar",
stack: "总量",
barWidth: 18,
label: {
normal: {
show: true,
rotate: -90,
}
},
data: [1, 302, 301, 334, 390, 330]
},
]
};
myChart.setOption(option);
vm.echartsData.chart1 = myChart;
vm.updateResize();
},
setCertificateChart() {
let myChart = echarts.init(this.$refs.certificateChart);
let option = {
title: {
text: "",
x: "left"
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
crossStyle: {
color: "#999"
}
},
backgroundColor: 'rgba(0,0,0,0.7)',
formatter: function(params) {
let relVal = "";
let divList = [];
divList[0] = "<div style='background: #5D7092;height: 12px;width: 20px;margin: 5px 5px 0 2px;float: left;border-radius:2px;'></div>";
divList[1] = "<div style='background: #FFB01B;height: 12px;width: 20px;margin: 5px 5px 0 2px;float: left;border-radius:2px;'></div>";
divList[2] = "<div style='background: #559A99;height: 12px;width: 12px;margin: 5px 5px 0 5px;float: left;border-radius:50%;'></div>";
for (let j = 0, l = params.length; j < l; j++) {
relVal += divList[j] + params[j].seriesName + ": " + params[j].value;
if (j === 2) {
relVal += "%";
} else {
relVal += "<br/>";
}
}
return relVal;
}
},
color: ['#5D7092','#FFB01B', '#559A99'],
dataZoom: {
show: true,
start: 0,
end: 60
},
legend: {
data: ["参与人数", "获证人数", "获证比例"]
},
xAxis: [
{
axisLabel: {
interval: 0,
rotate: 45
},
type: "category",
data: [
"北京市",
"天津市",
"河北省",
"山西省",
"内蒙古自治区",
"辽宁省",
"吉林省",
"黑龙江省",
"上海市",
"江苏省",
"浙江省",
"安徽省",
"福建省",
"江西省",
"山东省",
"河南省",
"湖北省",
"湖南省",
"广东省",
"广西壮族自治区",
"海南省",
"重庆市",
"四川省",
"贵州省",
"云南省",
"西藏自治区",
"陕西省",
"甘肃省",
"青海省",
"宁夏回族自治区",
"新疆维吾尔自治区"
],
axisPointer: {
type: "shadow"
}
}
],
yAxis: [
{
type: "value",
name: "人数(个)",
axisLabel: {
formatter: "{value} "
}
},
{
type: "value",
name: "比例",
min: 0,
max: 100,
axisLabel: {
formatter: "{value} %"
}
}
],
series: [
{
name: "参与人数",
barWidth: 10,
type: "bar",
data: [
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390
],
label: {
show: true,
position: "top",
formatter: "{c}", //这是关键,在需要的地方加上就行了
rotate: -90,
offset: [-5, -15]
}
},
{
name: "获证人数",
barWidth: 10,
type: "bar",
data: [9, 8, 100, 200, 200, 55, 10, 9, 8, 100, 200, 200, 55, 10, 9, 8, 100, 200, 200, 55, 10],
label: {
show: true,
position: "top",
formatter: "{c}", //这是关键,在需要的地方加上就行了
rotate: -90,
offset: [-5, -15]
}
},
{
name: "获证比例",
type: "line",
yAxisIndex: 1,
data: [
2,
22,
32,
41,
61,
10,
20,
23,
55,
67,
91,
6,
2,
22,
32,
41,
61,
10,
20,
23,
55,
67,
91,
6
],
label: {
show: true,
position: "top",
formatter: "{c}%" //这是关键,在需要的地方加上就行了
}
}
]
};
myChart.setOption(option);
vm.echartsData.chart2 = myChart;
vm.updateResize();
},
setDurationChart() {
let myChart = echarts.init(this.$refs.durationChart);
let option = {
title: {
text: "",
x: "left"
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
}
},
color: ['#449284'],
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
dataZoom: {
show: true,
start: 0,
end: 66
},
xAxis: [
{
axisLabel: {
interval: 0,
rotate: 35
},
type: "category",
data: [
"北京市",
"天津市",
"河北省",
"山西省",
"内蒙古自治区",
"辽宁省",
"吉林省",
"黑龙江省",
"上海市",
"江苏省",
"浙江省",
"安徽省",
"福建省",
"江西省",
"山东省",
"河南省",
"湖北省",
"湖南省",
"广东省",
"广西壮族自治区",
"海南省",
"重庆市",
"四川省",
"贵州省",
"云南省",
"西藏自治区",
"陕西省",
"甘肃省",
"青海省",
"宁夏回族自治区",
"新疆维吾尔自治区"
],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: "value",
name: "完成时长 (天)"
}
],
series: [
{
name: "时长",
type: "bar",
barWidth: 17,
data: [
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390,
330,
220,
10,
52,
200,
334,
390
],
label: {
show: true,
position: "top",
formatter: "{c}", //这是关键,在需要的地方加上就行了
rotate: -90,
offset: [-5, -15]
}
}
]
};
myChart.setOption(option);
vm.echartsData.chart3 = myChart;
vm.updateResize();
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.formTable.pageSize = val;
vm.formTable.pageNo = 1;
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
vm.formTable.pageNo = val;
},
setTable() {
vm.tableData = [
{
id: 1,
rank: 1,
name: '伊娟',
sex: '女',
department: '内科',
join: 1,
complete: 1,
grade: '1级',
certificateDate: '2019-10-11',
record: 100,
learnTime: '4小时23分34秒',
}
];
}
}
};
</script>
<style lang="scss">
.el-tooltip__popper.is-light[x-placement^=bottom-end] {
width: 330px;
background-color: #449284;
border-color: #449284;
color: #ffffff;
.popper__arrow::after {
border-bottom-color: #449284;
}
.popper__arrow {
border-bottom-color: #449284;
}
}
.data-all-wrap {
background: #fff;
overflow: hidden;
padding: 10px;
.box-list {
position: relative;
// width: 100%;
height: 110px;
.box-card {
position: relative;
background-color: #e3efed;
color: #449284;
width: 31%;
margin-right: 2%;
height: 110px;
float: left;
.notice {
position: absolute;
z-index: 999;
top: 21px;
right: 14px;
width: 16px;
height: 16px;
}
.el-card__header {
border-bottom-width: 0;
}
.el-card__body {
padding: 0px;
}
.left-content {
position: relative;
float: left;
width: 33%;
height: 110px;
text-align: left;
padding: 23px 0 0 20px;
.title {
font-size: 14px;
height: 14px;
line-height: 14px;
}
.value {
margin-top: 20px;
height: 22px;
font-size: 30px;
line-height: 22px;
font-weight: 500;
}
}
.vertical {
position: absolute;
left: 34%;
float: left;
margin-top: 23px;
width:1px;
height:57px;
background-color: #C1D8D4;
}
.right-content {
position: relative;
float: left;
width: 64%;
height: 110px;
text-align: left;
font-size: 14px;
padding: 23px 0 0 29px;
p {
height: 14px;
line-height: 14px;
}
.should {
margin-top: 28px;
}
}
}
.box-card2 {
width: 48%;
margin-right: 1%;
}
}
.chart-select {
position: relative;
}
.chart-title {
position: relative;
margin-top: 17px;
width: 100%;
height: 60px;
font-size:18px;
font-weight:600;
line-height: 60px;
color: #000000;
border-bottom: 1px solid #E4E7ED;
}
.chart {
position: relative;
margin: 20px auto 0 auto;
// width: 100%;
width: 860px;
height: 350px;
}
.chart-distributeChart {
position: relative;
margin: 20px auto 0 auto;
height: 350px;
width: 100%;
overflow-x: hidden;
.distributeChart {
position: relative;
float: left;
// width: 70%;
width: 600px;
height: 350px;
}
.data-text {
position: relative;
float: left;
width: 30%;
height: 350px;
.content-text {
position: relative;
margin-top: 135px;
margin-left: 35%;
text-align: left;
p {
margin-top: 20px;
height:12px;
font-size:12px;
font-weight:400;
color:rgba(102,102,102,1);
line-height:12px;
}
}
}
}
.chart-recordChart {
position: relative;
margin: 20px auto 0 auto;
height: 350px;
width: 100%;
overflow-x: hidden;
.recordChart {
position: relative;
float: left;
// width: 83.5%;
width: 700px;
height: 350px;
}
.data-text {
position: relative;
float: left;
width: 16%;
height: 350px;
.content-text {
position: relative;
margin-top: 100px;
margin-left: 16%;
text-align: left;
p {
margin-top: 20px;
height:12px;
font-size:12px;
font-weight:400;
color:rgba(102,102,102,1);
line-height:12px;
}
}
}
}
.person {
position: relative;
margin-top: 20px;
width: 100%;
.person-title {
font-size:18px;
font-weight:700;
margin-bottom: 20px;
}
.person-radio {
margin-top: 10px;
.el-radio-button {
.el-radio-button__inner {
border:0 solid #666666 !important;
box-shadow: 0;
}
}
.is-active {
border-radius: 10px 10px 0px 0px;
border-bottom: 2px solid #666666 !important;
.el-radio-button__inner{
border-radius:10px 10px 0px 0px;
background:#DFDFDF !important;
border:0 solid #666666 !important;
box-shadow: 0;
}
}
}
}
}
</style>
\ No newline at end of file
<template> <template>
<div class="learning-effect"> <div class="learning-effect">
<div class="learning" ref="learning"></div> <el-button type="default" size="small" @click="exportPDF">导出明细</el-button>
<div class="education" ref="education"></div> <div class="education" ref="education"></div>
<div class="learning" ref="learning"></div>
</div> </div>
</template> </template>
<script> <script>
import { openLoading, closeLoading } from "../../utils/utils"; import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils"; import * as commonUtil from "../../utils/utils";
const echarts = require("echarts"); import echarts from "echarts";
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
let vm = null;
export default { export default {
data() { data() {
return {}; return {
echartsData: {
chart1: {},
chart2: {}
}
};
},
created() {
vm = this;
vm.$nextTick(() => {
vm.setEducation();
vm.setLearning();
});
}, },
mounted() { mounted() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
this.initEcharts();
}, },
methods: { methods: {
// 初始化图表 exportPDF() {
initEcharts() { let element = '';
openLoading(this); element = document.querySelector('.data-all-wrap');
let trainChart = echarts.init(this.$refs["learning"]); console.log(element);
let educationChart = echarts.init(this.$refs["education"]); if(element == null) {
let trainPara = { return
color: ["#FF9999", "#66CCFF"],
text: '培训前后知识点掌握情况变化',
xAxisData: [
"转诊与履约",
"转诊与履约",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
} }
let educationPara = { setTimeout(() => {
color: ["#33FFFF", "#FF9999"], html2Canvas(element).then(function(canvas) {
text: '不同学历培训前后正确率对比', let contentWidth = canvas.width;
xAxisData: [ let contentHeight = canvas.height;
"转诊与履约",
"转诊与履约", //一页pdf显示html页面生成的canvas高度;
"周三", let pageHeight = contentWidth / 592.28 * 841.89;
"治疗原则及降压目标", //未生成pdf的html页面高度
"周五", let leftHeight = contentHeight;
"治疗原则及降压目标", //页面偏移
"周日" let position = 0;
], //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32], let imgWidth = 595.28;
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15] let imgHeight = 592.28 / contentWidth * contentHeight;
};
// 显示图表。 let pageData = canvas.toDataURL('image/jpeg', 1.0);
trainChart.setOption(this.echartOptions(trainPara));
educationChart.setOption(this.echartOptions(educationPara)); let pdf = new JsPDF('', 'pt', 'a4');
closeLoading(this)
//有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
//当内容未超过pdf一页显示的范围,无需分页
if (leftHeight < pageHeight) {
pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
} else {
while (leftHeight > 0) {
pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
leftHeight -= pageHeight;
position -= 841.89;
//避免添加空白页
if (leftHeight > 0) {
pdf.addPage();
}
}
}
let title = "导出学情报告";
pdf.save(title + '.pdf');
});
}, 0);
},
updateResize() {
this.$nextTick(function() {
window.onresize = function() {
vm.echartsData.chart1.resize();
vm.echartsData.chart2.resize();
};
});
}, },
// 图表的参数 setEducation() {
echartOptions(parameter) { let myChart = echarts.init(this.$refs.education);
let option = { let option = {
color: parameter.color,
title: { title: {
text: parameter.text, text: ""
x: "center",
textStyle: {
//主标题文本样式
fontSize: 16,
fontWeight: "bolder",
color: "#333"
}
}, },
tooltip: { tooltip: {
trigger: "axis", trigger: "axis",
...@@ -78,10 +99,9 @@ export default { ...@@ -78,10 +99,9 @@ export default {
type: "shadow" type: "shadow"
} }
}, },
color: ['#5D7092','#FFB01B'],
legend: { legend: {
data: ["培训前正确率", "培训后正确率"], data: ["项目前总正确率", "项目后总正确率"]
right: 0,
top: 20
}, },
grid: { grid: {
left: "3%", left: "3%",
...@@ -89,70 +109,94 @@ export default { ...@@ -89,70 +109,94 @@ export default {
bottom: "3%", bottom: "3%",
containLabel: true containLabel: true
}, },
xAxis: [ xAxis: {
{ type: "category",
type: "category", data: ["本科", "大专", "中专及以下", "硕士", "博士", "其他"]
data: parameter.xAxisData, },
axisLabel: { yAxis: {
//坐标轴刻度标签的相关设置。 min: 0,
interval: 0, max: 100,
rotate: "45" type: "value",
} axisLabel: {
formatter: "{value} %"
} }
], },
yAxis: [ series: [
{ {
name: "比率(%)", name: "项目前总正确率",
type: "value", type: "bar",
axisLabel: { barWidth: 10,
show: true, data: [45, 45, 34, 34, 4, 8]
interval: "auto", },
formatter: "{value} %" {
}, name: "项目后总正确率",
show: true, type: "bar",
axisLine: { barWidth: 10,
// 轴线 data: [70, 66, 67, 67, 24, 24]
show: false
}
} }
], ]
};
myChart.setOption(option);
vm.echartsData.chart1 = myChart;
vm.updateResize();
},
setLearning() {
let myChart = echarts.init(this.$refs.learning);
let option = {
title: {
text: ""
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow"
}
},
color: ['#5D7092','#FFB01B'],
legend: {
data: ["培训前正确率", "培训后正确率"]
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
xAxis: {
axisLabel: {
interval: 0,
rotate: 45
},
type: "category",
data: ["推荐联合用药方案"]
},
yAxis: {
min: 0,
max: 100,
type: "value",
axisLabel: {
formatter: "{value} %"
}
},
series: [ series: [
{ {
name: "培训前正确率", name: "培训前正确率",
type: "bar", type: "bar",
barGap: "20%", barWidth: 10,
barMaxWidth: "50", data: [45]
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%"
}
}
},
data: parameter.seriesBeforeDate
}, },
{ {
name: "培训后正确率", name: "培训后正确率",
type: "bar", type: "bar",
barGap: "20%", barWidth: 10,
barMaxWidth: "50", data: [81]
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%" //这是关键,在需要的地方加上就行了
}
}
},
data: parameter.seriesAfterDate
} }
] ]
}; };
return option; myChart.setOption(option);
} vm.echartsData.chart2 = myChart;
vm.updateResize();
},
} }
}; };
</script> </script>
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<el-button type="default" size="small" :disabled="exportStatus" @click="exportExcel">导出明细</el-button> <el-button type="default" size="small" :disabled="exportStatus" @click="exportExcel">导出明细</el-button>
</div> </div>
<!-- <div class="item-tab"></div> --> <!-- <div class="item-tab"></div> -->
<el-tabs v-model="activeName" @tab-click="handleClick" :before-leave="beforeLeave"> <el-tabs id="item-list-tabs" v-model="activeName" @tab-click="handleClick" :before-leave="beforeLeave">
<el-tab-pane label="参与情况" name="first"> <el-tab-pane label="参与情况" name="first">
<part-in <part-in
ref="childPart" ref="childPart"
...@@ -97,9 +97,18 @@ ...@@ -97,9 +97,18 @@
:organizationList="organizationList" :organizationList="organizationList"
></examination-analysisfrom> ></examination-analysisfrom>
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="学习效果分析" name="fifth" lazy> <!-- <el-tab-pane label="数据总览" name="zero" >
<data-all
ref="childDataAll"
:formInline="formInline"
:activeName="activeName"
:organizationNum="organizationNum"
:organizationList="organizationList"
></data-all>
</el-tab-pane>
<el-tab-pane label="学习效果分析" name="fifth" :lazy=true>
<learning-effect></learning-effect> <learning-effect></learning-effect>
</el-tab-pane>--> </el-tab-pane> -->
</el-tabs> </el-tabs>
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" center> <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" center>
<p style="text-align:center">文件正在生成,你可以去“我的导出下载”页,下载文件</p> <p style="text-align:center">文件正在生成,你可以去“我的导出下载”页,下载文件</p>
...@@ -130,6 +139,7 @@ import PartIn from "./item-part-in.vue"; ...@@ -130,6 +139,7 @@ import PartIn from "./item-part-in.vue";
import ExaminationAnalysisfrom from "./item-examination-analysis.vue"; import ExaminationAnalysisfrom from "./item-examination-analysis.vue";
import LearningEffect from "./item-learning-effect.vue"; import LearningEffect from "./item-learning-effect.vue";
import DataAlignment from "./data-alignment.vue"; import DataAlignment from "./data-alignment.vue";
import DataAll from "./item-data-all.vue";
import { create } from "domain"; import { create } from "domain";
import { mapGetters } from "vuex"; import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils"; import { openLoading, closeLoading } from "../../utils/utils";
...@@ -146,7 +156,8 @@ export default { ...@@ -146,7 +156,8 @@ export default {
PartIn, PartIn,
ExaminationAnalysisfrom, ExaminationAnalysisfrom,
LearningEffect, LearningEffect,
DataAlignment DataAlignment,
DataAll,
}, },
data() { data() {
return { return {
...@@ -387,6 +398,11 @@ export default { ...@@ -387,6 +398,11 @@ export default {
openLoading(vm); openLoading(vm);
vm.GET("basic-data/position/provinces", req).then(res => { vm.GET("basic-data/position/provinces", req).then(res => {
closeLoading(vm); closeLoading(vm);
// let list = [];
// for(let i =0;i<res.data.provinceList.length;i++) {
// list[i] = res.data.provinceList[i].provinceName;
// }
// console.log(list);
if (res.code == "000000") { if (res.code == "000000") {
this.optionsRegion = operationData.setRegionOption( this.optionsRegion = operationData.setRegionOption(
res.data.provinceList res.data.provinceList
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
<el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column> <el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column> <el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdName" label="创建人" align="center"></el-table-column> <el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" width="100" align="center"></el-table-column>
<el-table-column prop="projectIntro" label="项目简介" align="center" min-width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="projectIntro" label="项目简介" align="center" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="projectBegintime" label="项目开始时间" align="center"></el-table-column> <el-table-column prop="projectBegintime" label="项目开始时间" align="center"></el-table-column>
<el-table-column prop="projectEndtime" label="项目结束时间" align="center"></el-table-column> <el-table-column prop="projectEndtime" label="项目结束时间" align="center"></el-table-column>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册