提交 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 @@
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
"dev": true
},
"abab": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
"integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4="
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
......@@ -53,12 +58,25 @@
"integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
"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": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"dev": true,
"optional": true,
"requires": {
"co": "^4.6.0",
"json-stable-stringify": "^1.0.1"
......@@ -185,6 +203,11 @@
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"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": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
......@@ -246,9 +269,7 @@
"assert-plus": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
"dev": true,
"optional": true
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
},
"assign-symbols": {
"version": "1.0.0",
......@@ -321,9 +342,7 @@
"aws-sign2": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
"integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
"dev": true,
"optional": true
"integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
},
"aws4": {
"version": "1.8.0",
......@@ -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": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
......@@ -1282,7 +1306,6 @@
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
"hoek": "2.x.x"
}
......@@ -1453,6 +1476,24 @@
"integrity": "sha512-fvicVRDlhHIQpt/bmbLl3hDHKUZb5ZP8O2OuZLz2fSEPlUBbvwwbhhqhGS617ldN6bDoo9A3+MQKQyFq0p7UXA==",
"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": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
......@@ -1900,8 +1941,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x"
}
......@@ -1924,6 +1963,14 @@
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
"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": {
"version": "0.25.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.25.0.tgz",
......@@ -2042,6 +2089,19 @@
"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": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
......@@ -2096,6 +2156,11 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"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": {
"version": "1.5.2",
"resolved": "http://192.168.110.93:4873/deepmerge/-/deepmerge-1.5.2.tgz",
......@@ -2391,17 +2456,46 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"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": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
"etag": {
"version": "1.8.1",
......@@ -2568,7 +2662,7 @@
},
"extract-text-webpack-plugin": {
"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=",
"dev": true,
"requires": {
......@@ -2592,6 +2686,11 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"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": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz",
......@@ -2621,6 +2720,10 @@
"loader-utils": "~0.2.5"
}
},
"file-saver": {
"version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e",
"from": "github:eligrey/FileSaver.js#1.3.8"
},
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
......@@ -2723,8 +2826,6 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"dev": true,
"optional": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.5",
......@@ -3485,16 +3586,12 @@
"har-schema": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
"integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
"dev": true,
"optional": true
"integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4="
},
"har-validator": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
"integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
"dev": true,
"optional": true,
"requires": {
"ajv": "^4.9.1",
"har-schema": "^1.0.5"
......@@ -3605,8 +3702,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x",
"cryptiles": "2.x.x",
......@@ -3623,8 +3718,7 @@
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
},
"home-or-tmp": {
"version": "2.0.0",
......@@ -3682,6 +3776,14 @@
"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": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
......@@ -3750,8 +3852,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "^0.2.0",
"jsprim": "^1.2.2",
......@@ -3768,7 +3868,6 @@
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
......@@ -4154,6 +4253,37 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"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": {
"version": "3.0.0-rc.1",
"resolved": "http://192.168.110.93:4873/jsencrypt/-/jsencrypt-3.0.0-rc.1.tgz",
......@@ -4185,8 +4315,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
"integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"dev": true,
"optional": true,
"requires": {
"jsonify": "~0.0.0"
}
......@@ -4211,9 +4339,43 @@
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
"dev": true,
"optional": true
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
},
"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": {
"version": "1.4.1",
......@@ -4281,6 +4443,15 @@
"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": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
......@@ -5373,12 +5544,15 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"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": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true,
"optional": true
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
},
"object-assign": {
"version": "4.1.1",
......@@ -5457,6 +5631,11 @@
"integrity": "sha1-9TxHNbptVq9aRrBN+3xDNMWW1E4=",
"dev": true
},
"omggif": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.7.tgz",
"integrity": "sha1-WdLuywJj3oRjWz/riHwMmXPx5J0="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
......@@ -5512,6 +5691,19 @@
"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": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz",
......@@ -5656,6 +5848,11 @@
"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": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
......@@ -5720,9 +5917,7 @@
"performance-now": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
"integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"dev": true,
"optional": true
"integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
},
"pify": {
"version": "2.3.0",
......@@ -6386,6 +6581,11 @@
"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": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
......@@ -6435,6 +6635,11 @@
"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": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
......@@ -7296,8 +7501,6 @@
"version": "2.81.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
"integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
"dev": true,
"optional": true,
"requires": {
"aws-sign2": "~0.6.0",
"aws4": "^1.2.1",
......@@ -7326,9 +7529,7 @@
"qs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
"dev": true,
"optional": true
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
}
}
},
......@@ -7384,6 +7585,11 @@
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
"rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
"integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0="
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
......@@ -7557,8 +7763,7 @@
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"scss": {
"version": "0.2.4",
......@@ -7885,8 +8090,6 @@
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"optional": true,
"requires": {
"hoek": "2.x.x"
}
......@@ -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": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
......@@ -8242,9 +8450,7 @@
"stringstream": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
"dev": true,
"optional": true
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="
},
"strip-ansi": {
"version": "4.0.0",
......@@ -8321,6 +8527,11 @@
"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": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
......@@ -8421,12 +8632,15 @@
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"optional": true,
"requires": {
"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": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
......@@ -8465,6 +8679,14 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"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": {
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
......@@ -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": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
......@@ -9126,7 +9353,7 @@
},
"webpack-sources": {
"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=",
"dev": true,
"requires": {
......@@ -9150,6 +9377,15 @@
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
"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": {
"version": "0.9.9",
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
......@@ -9188,6 +9424,11 @@
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"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": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
......@@ -9241,6 +9482,16 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"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": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
......
<template>
<div v-if="$route.name!='loginPage'">
<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>
<div class="content" id="body-content">
<transition name="router-fade" mode="out-in">
......@@ -47,6 +47,7 @@ export default {
portrait: '',
authList: {},
redNum: 0,
masterFlag: false,
}
},
computed:{
......@@ -142,6 +143,7 @@ export default {
localStorage.setItem('storageMaster', res.data.masterAdministratorFlag)
vm.idType = res.data.idType
vm.storageIdType = res.data.idType
vm.masterFlag = res.data.masterAdministratorFlag
vm.userName = res.data.name
vm.portrait = res.data.imageUrl
vm.authList = res.data.auth
......
......@@ -56,7 +56,7 @@ service.interceptors.request.use(config => {
// console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = '2E46B77D801C479DBA1C550CE70D348F';
config.headers['token'] = '006EAC5D201B4547A27C842505F0E368';
}else{
config.headers['token'] = localStorage.getItem('storageToken')
}
......
......@@ -270,5 +270,16 @@ const vueFilter = {
list = list.substring(0, list.length - 1);
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
\ No newline at end of file
......@@ -32,7 +32,7 @@
<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>
</el-form-item>
<div class="basic-item-icon">
<!-- <div class="basic-item-icon">
<span class="require">*</span>
<el-form-item label="组件图片" prop="imageUrl">
<el-upload
......@@ -52,7 +52,7 @@
</el-upload>
</el-form-item>
<p class="upload-message" v-if="uploadImgMessage">请上传组件图片</p>
</div>
</div> -->
<el-row>
<el-col :span="6">
<div class="basic-item-icon">
......@@ -565,7 +565,7 @@ export default {
}
if(!vm.portalComponent.imageUrl) {
vm.uploadImgMessage = true
return
// return
} else {
vm.uploadImgMessage = false
}
......
......@@ -4,8 +4,8 @@
<div class="component-content screenSet" id="screenSet">
<div class="header-title">{{ title }}</div>
<div class="button-group">
<el-button size="small" @click="complete(0)">暂存</el-button>
<el-button type="primary" size="small" @click="complete(1)">完成</el-button>
<el-button v-show="showStorage" size="small" @click="complete(1)">暂存</el-button>
<el-button type="primary" size="small" @click="complete(2)">完成</el-button>
</div>
<el-form
ref="formData"
......@@ -52,9 +52,9 @@
</el-form-item>
<el-form-item label="项目时间:" required>
<el-col :span="5">
<el-form-item prop="projectBegintime">
<el-form-item prop="entryBegintime">
<el-date-picker
v-model="formData.projectBegintime"
v-model="formData.entryBegintime"
size="small"
type="datetime"
placeholder="请选择开始时间"
......@@ -67,9 +67,9 @@
</el-col>
<el-col class="line" :span="1">~</el-col>
<el-col :span="5">
<el-form-item label prop="projectEndtime">
<el-form-item label prop="entryEndtime">
<el-date-picker
v-model="formData.projectEndtime"
v-model="formData.entryEndtime"
size="small"
type="datetime"
placeholder="请选择结束时间"
......@@ -82,18 +82,18 @@
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="项目简介:" prop="projectIntro">
<el-form-item label="入口简介:" prop="entryIntro">
<el-col :span="13">
<el-input
size="small"
type="textarea"
:autosize="{ minRows: 5}"
placeholder="请输入项目简介"
v-model="formData.projectIntro"
placeholder="请输入入口简介"
v-model="formData.entryIntro"
style="width:83%;"
:disabled="peopleLevel == 'L3'"
></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-form-item>
<div class="basic-item-icon">
......@@ -209,6 +209,7 @@
style="width: 350px"
placeholder="关联项目"
@change="changeValue"
filterable
>
<el-option
v-for="item in optionsProject"
......@@ -235,6 +236,14 @@
</el-col>
</el-form-item>
</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>
</template>
......@@ -266,35 +275,41 @@ export default {
curmbSecond: "项目组件",
curmbThird: "新建入口",
title: "",
projectId: null,
showStorage: false,
entryId: null,
peopleLevel: null,
uploadImgMessage: false,
uploadImgMessage2: false,
imgMouseOver: false,
imgMouseOver2: false,
organizationContent: "云鹊医",
statusValue: 0,
dialogUp: false,
formData: {
entryName: "",
projectBegintime: "",
projectEndtime: "",
projectIntro: "",
entryBegintime: "",
entryEndtime: "",
entryIntro: "",
type: 1,
attachmentUrl1: "",
attachmentUrl2: "",
attachmentMore1: {},
attachmentMore2: {},
organizationName: "",
project: []
},
optionsProject: [],
tagsProject: [],
visibleName: false,
entryOptionData: {},
pickerOptions0: {
disabledDate: time => {
if (
this.formData.projectEndtime != "" &&
this.formData.projectEndtime != null
this.formData.entryEndtime != "" &&
this.formData.entryEndtime != null
) {
return (
time.getTime() > new Date(this.formData.projectEndtime).getTime()
time.getTime() > new Date(this.formData.entryEndtime).getTime()
);
}
}
......@@ -302,7 +317,7 @@ export default {
pickerOptions1: {
disabledDate: time => {
return (
time.getTime() < new Date(this.formData.projectBegintime).getTime()
time.getTime() < new Date(this.formData.entryBegintime).getTime()
); //减去一天的时间代表可以选择同一天;
}
},
......@@ -326,14 +341,14 @@ export default {
trigger: "blur"
}
],
projectBegintime: [
entryBegintime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
projectEndtime: [
entryEndtime: [
{
required: true,
message: "请选择时间",
......@@ -348,7 +363,7 @@ export default {
trigger: "change"
}
],
projectIntro: [
entryIntro: [
{ required: true, message: "请填写项目简介", trigger: "blur" },
{ min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" }
],
......@@ -366,39 +381,49 @@ export default {
},
created() {
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.initTitle();
vm.initOption();
// vm.getEntryData();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
initTitle() {
if (vm.projectId == null) {
if (vm.entryId == null) {
vm.title = "新建入口";
vm.curmbThird = "新建入口";
vm.showStorage = true;
} else {
vm.title = "编辑入口";
vm.curmbThird = "编辑入口";
vm.showStorage = false;
}
},
initOption() {
vm.optionsProject = [
{
value: 1,
label: "项目A"
},
{
value: 2,
label: "项目B"
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;
},
{
value: 3,
label: "项目C"
initOption() {
vm.optionsProject = [];
let req = {};
openLoading(vm);
vm.GET("portal/entryInfo/getProjectList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.optionsProject = vm.setOption(res.data);
vm.getEntryData();
}
];
});
},
submitForm(formName) {
let flag = null;
......@@ -503,6 +528,7 @@ export default {
attachmentExt: path.ext,
attachmentSize: path.size
};
console.log("!!!" + vm.formData[fileLimit.key]);
vm.$message.success("上传成功");
});
}
......@@ -559,7 +585,7 @@ export default {
},
changeOrganizationName() {
let textLength = vm.formData.organizationName.length;
console.log("文字长度", textLength);
// console.log("文字长度", textLength);
if (textLength == 0) {
vm.visibleName = true;
} else {
......@@ -568,15 +594,15 @@ export default {
},
tagDrop() {
this.$nextTick(function() {
if(vm.tagsProject.length > 0) {
const ele = document.querySelector('.check-project .el-col-10');
if (vm.tagsProject.length > 0) {
const ele = document.querySelector(".check-project .el-col-10");
// console.log('ele',ele);
Sortable.create(ele, {
onEnd({ newIndex, oldIndex }) {
const currRow = vm.tagsProject.splice(oldIndex, 1)[0]
vm.tagsProject.splice(newIndex, 0, currRow)
const currRow = vm.tagsProject.splice(oldIndex, 1)[0];
vm.tagsProject.splice(newIndex, 0, currRow);
}
})
});
}
});
},
......@@ -596,6 +622,20 @@ export default {
}
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) {
if (tag.disabled == true) {
return;
......@@ -606,13 +646,207 @@ export default {
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) {
console.log("type:" + type);
if (type == 1) {
//1是暂存,2是完成
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 {
//暂存
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 {
position: relative;
padding: 10px;
background: #fff;
.dialog_p {
text-align: center;
span{
font-weight: 700;
}
}
.header-title {
padding: 10px 12px;
font-size: 12px;
......@@ -636,6 +876,15 @@ export default {
z-index: 999;
}
.basic-form {
::-webkit-scrollbar
{
width: 4px;
height: 20px;
background-color: #D8D8D8;
}
::-webkit-scrollbar-thumb {
background-color: #D8D8D8;
}
position: relative;
margin-top: 10px;
.basic-item-icon {
......
......@@ -2,37 +2,54 @@
<div class="entry-manager">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<el-row>
<el-form :model="formInline" ref="formInline" label-width="75px" class="form-inline">
<el-col :span="6">
<el-col :span="8">
<el-form-item label="入口名称:">
<el-input size="small" v-model="formInline.name" placeholder="请输入名称"></el-input>
<el-input size="small" v-model="formInline.entryName" placeholder="请输入名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="2"></el-col>
<el-col :span="12">
<el-button type="primary" size="small">查询</el-button>
</el-col>
<el-col :span="4" style="padding:0;text-align:right;padding-right:10px;">
<el-button type="primary" size="small">新建入口</el-button>
<el-col :span="16" style="padding:0;text-align:right;padding-right:10px;">
<el-button type="primary" @click="search()" size="small">查询</el-button>
<el-button type="primary" @click="resetForm()" size="small">重置</el-button>
</el-col>
</el-form>
</el-row>
<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-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="name" label="创建人" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
<el-table-column prop="desc" label="入口介绍" align="center"></el-table-column>
<el-table-column prop="startTime" label="开始时间" align="center"></el-table-column>
<el-table-column prop="endTime" label="介绍时间" align="center"></el-table-column>
<el-table-column fixed="right" label="状态" align="center">
<template slot-scope="scope">{{ scope.row.status | shieldStatus }}</template>
<el-table-column prop="createdTime" width="100" label="入口创建时间" align="center"></el-table-column>
<el-table-column prop="entryName" label="入口名称" align="center"></el-table-column>
<el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="entryIntro" label="入口简介" align="center" show-overflow-tooltip></el-table-column>
<el-table-column prop="entryBegintime" width="100" label="开始时间" align="center"></el-table-column>
<el-table-column prop="entryEndtime" width="100" label="结束时间" align="center"></el-table-column>
<el-table-column prop="entryStatus" label="状态" align="center">
<template slot-scope="scope">{{ scope.row.entryStatus | entryStatusType }}</template>
</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">
<el-button type="primary" size="small">编辑</el-button>
<el-button type="primary" size="small">上架</el-button>
<el-button type="primary" size="small">下架</el-button>
<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"
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>
</el-table-column>
</el-table>
......@@ -48,6 +65,34 @@
:total="totalRows"
></el-pagination>
</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>
</template>
......@@ -67,22 +112,15 @@ export default {
curmbFirst: "入口管理",
totalRows: 0,
formInline: {
name: "",
entryName: "",
pageNo: 1,
pageSize: 10
},
tableData: [
{
id: 123,
project: "小何同学的项目",
name: "小王同学",
createTime: "2019-09-09",
desc: "小王同学",
startTime: "2019-10-10",
endTime: "2019-12-10",
status: 1
}
]
tableData: [],
dialogUp: false,
dialogDel: false,
childrenNum: 0,
scopeRow: {}
};
},
computed: {
......@@ -90,18 +128,119 @@ export default {
},
created() {
vm = this;
vm.search();
},
mounted: function() {
commonUtil.resizeHeight();
},
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) {
console.log(`每页 ${val} 条`);
this.formInline.pageSize = val;
vm.searchData();
},
handleCurrentChange(val) {
console.log(`当前页: ${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 {
.component-content {
padding: 10px;
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>
\ No newline at end of file
......@@ -78,6 +78,7 @@
<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="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="项目简介"
......
......@@ -56,7 +56,11 @@
},
notCompleteCount: {
type: Number,
}
},
masterFlag: {
type: Boolean,
default: false
},
},
data() {
return {
......@@ -173,6 +177,13 @@
// if(val==2){ // 调试时已经去掉了
vm.setFollowSide()
// } // 调试时已经去掉了
},
masterFlag(newVal, oldVal) {
// console.log('新老:',newVal,oldVal)
// 入口管理暂时判断
if(newVal === true) {
vm.setEntrySide();
}
}
},
methods: {
......@@ -201,6 +212,14 @@
}
vm.items.push(followSider);
},
setEntrySide() {
const followSider = {
title: '入口管理',
icon: 'el-icon-setting',
index: 'entry-manager'
}
vm.items[1].subs.push(followSider);
},
goToMessageSendPage(checkAuth) {
if(checkAuth){
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>
<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="learning" ref="learning"></div>
</div>
</template>
<script>
import { openLoading, closeLoading } 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 {
data() {
return {};
return {
echartsData: {
chart1: {},
chart2: {}
}
};
},
created() {
vm = this;
vm.$nextTick(() => {
vm.setEducation();
vm.setLearning();
});
},
mounted() {
commonUtil.resizeHeight();
this.initEcharts();
},
methods: {
// 初始化图表
initEcharts() {
openLoading(this);
let trainChart = echarts.init(this.$refs["learning"]);
let educationChart = echarts.init(this.$refs["education"]);
let trainPara = {
color: ["#FF9999", "#66CCFF"],
text: '培训前后知识点掌握情况变化',
xAxisData: [
"转诊与履约",
"转诊与履约",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
exportPDF() {
let element = '';
element = document.querySelector('.data-all-wrap');
console.log(element);
if(element == null) {
return
}
setTimeout(() => {
html2Canvas(element).then(function(canvas) {
let contentWidth = canvas.width;
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中图片的宽高
let imgWidth = 595.28;
let imgHeight = 592.28 / contentWidth * contentHeight;
let pageData = canvas.toDataURL('image/jpeg', 1.0);
let pdf = new JsPDF('', 'pt', 'a4');
//有两个高度需要区分,一个是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 educationPara = {
color: ["#33FFFF", "#FF9999"],
text: '不同学历培训前后正确率对比',
xAxisData: [
"转诊与履约",
"转诊与履约",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
let title = "导出学情报告";
pdf.save(title + '.pdf');
});
}, 0);
},
updateResize() {
this.$nextTick(function() {
window.onresize = function() {
vm.echartsData.chart1.resize();
vm.echartsData.chart2.resize();
};
// 显示图表。
trainChart.setOption(this.echartOptions(trainPara));
educationChart.setOption(this.echartOptions(educationPara));
closeLoading(this)
});
},
// 图表的参数
echartOptions(parameter) {
setEducation() {
let myChart = echarts.init(this.$refs.education);
let option = {
color: parameter.color,
title: {
text: parameter.text,
x: "center",
textStyle: {
//主标题文本样式
fontSize: 16,
fontWeight: "bolder",
color: "#333"
}
text: ""
},
tooltip: {
trigger: "axis",
......@@ -78,10 +99,9 @@ export default {
type: "shadow"
}
},
color: ['#5D7092','#FFB01B'],
legend: {
data: ["培训前正确率", "培训后正确率"],
right: 0,
top: 20
data: ["项目前总正确率", "项目后总正确率"]
},
grid: {
left: "3%",
......@@ -89,70 +109,94 @@ export default {
bottom: "3%",
containLabel: true
},
xAxis: [
{
xAxis: {
type: "category",
data: parameter.xAxisData,
data: ["本科", "大专", "中专及以下", "硕士", "博士", "其他"]
},
yAxis: {
min: 0,
max: 100,
type: "value",
axisLabel: {
//坐标轴刻度标签的相关设置。
interval: 0,
rotate: "45"
}
formatter: "{value} %"
}
],
yAxis: [
},
series: [
{
name: "项目前总正确率",
type: "bar",
barWidth: 10,
data: [45, 45, 34, 34, 4, 8]
},
{
name: "比率(%)",
name: "项目后总正确率",
type: "bar",
barWidth: 10,
data: [70, 66, 67, 67, 24, 24]
}
]
};
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: {
show: true,
interval: "auto",
formatter: "{value} %"
},
show: true,
axisLine: {
// 轴线
show: false
}
}
],
},
series: [
{
name: "培训前正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%"
}
}
},
data: parameter.seriesBeforeDate
barWidth: 10,
data: [45]
},
{
name: "培训后正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%" //这是关键,在需要的地方加上就行了
}
}
},
data: parameter.seriesAfterDate
barWidth: 10,
data: [81]
}
]
};
return option;
}
myChart.setOption(option);
vm.echartsData.chart2 = myChart;
vm.updateResize();
},
}
};
</script>
......
......@@ -61,7 +61,7 @@
<el-button type="default" size="small" :disabled="exportStatus" @click="exportExcel">导出明细</el-button>
</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">
<part-in
ref="childPart"
......@@ -97,9 +97,18 @@
:organizationList="organizationList"
></examination-analysisfrom>
</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>
</el-tab-pane>-->
</el-tab-pane> -->
</el-tabs>
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" center>
<p style="text-align:center">文件正在生成,你可以去“我的导出下载”页,下载文件</p>
......@@ -130,6 +139,7 @@ import PartIn from "./item-part-in.vue";
import ExaminationAnalysisfrom from "./item-examination-analysis.vue";
import LearningEffect from "./item-learning-effect.vue";
import DataAlignment from "./data-alignment.vue";
import DataAll from "./item-data-all.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
......@@ -146,7 +156,8 @@ export default {
PartIn,
ExaminationAnalysisfrom,
LearningEffect,
DataAlignment
DataAlignment,
DataAll,
},
data() {
return {
......@@ -387,6 +398,11 @@ export default {
openLoading(vm);
vm.GET("basic-data/position/provinces", req).then(res => {
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") {
this.optionsRegion = operationData.setRegionOption(
res.data.provinceList
......
......@@ -45,6 +45,7 @@
<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="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="projectBegintime" label="项目开始时间" align="center"></el-table-column>
<el-table-column prop="projectEndtime" label="项目结束时间" align="center"></el-table-column>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册