From 93f30ecb74eea1c7ed460d45bc01df2ef14d69a3 Mon Sep 17 00:00:00 2001 From: 阳洁 <2077506045@qq.com> Date: 星期三, 10 五月 2023 14:53:57 +0800 Subject: [PATCH] Merge branch 'v13-20230413' --- src/views/report/reportView.vue | 46 + vue.config.js | 1 package-lock.json | 160 ++++- src/views/exam/components/QuestionEdit.vue | 2 src/views/report/reportH5.vue | 391 +++++++++++++ src/assets/report/page4.png | 0 src/router.js | 54 + src/lang/th.js | 3 src/views/exam/paper/guide.vue | 2 src/views/demography/index.vue | 33 + src/views/demography/login.vue | 12 src/assets/report/page5.png | 0 src/lang/zh.js | 5 src/assets/report/page1.png | 0 src/assets/report/page1.jpg | 0 src/views/report/reportH5Bak.vue | 298 ++++++++++ src/assets/report/page2.png | 0 /dev/null | 0 src/views/exam/paper/finish.vue | 37 + src/lang/en.js | 3 src/views/exam/paper/career_interests.vue | 570 ++++++++++++++++++++ src/main.js | 4 package.json | 2 src/assets/report/page3.png | 0 src/views/exam/paper/personality.vue | 7 src/assets/report/page4-1.png | 0 src/api/examPaper.js | 4 27 files changed, 1,582 insertions(+), 52 deletions(-) diff --git a/dist.zip b/dist.zip deleted file mode 100644 index e1c10d7..0000000 --- a/dist.zip +++ /dev/null Binary files differ diff --git a/package-lock.json b/package-lock.json index ea0fc38..5043d83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2514,8 +2514,8 @@ }, "async-validator": { "version": "1.8.5", - "resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz", - "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", "requires": { "babel-runtime": "6.x" } @@ -2717,8 +2717,8 @@ }, "babel-helper-vue-jsx-merge-props": { "version": "2.0.3", - "resolved": "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", - "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" }, "babel-loader": { "version": "8.0.6", @@ -3568,7 +3568,8 @@ "version": "4.6.0", "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "dev": true, + "optional": true }, "coa": { "version": "2.0.2", @@ -4364,8 +4365,7 @@ "de-indent": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" }, "debug": { "version": "4.1.1", @@ -4718,6 +4718,38 @@ "safer-buffer": "^2.1.0" } }, + "echarts": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz", + "integrity": "sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.3" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "echarts": { + "version": "5.4.2", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.2.tgz", + "integrity": "sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.3" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", @@ -4737,9 +4769,9 @@ "dev": true }, "element-ui": { - "version": "2.10.1", - "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.10.1.tgz?cache=0&sync_timestamp=1562053824530&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.10.1.tgz", - "integrity": "sha1-EBEBblDnb12ub7+chuU7blP8ues=", + "version": "2.15.13", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.13.tgz", + "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==", "requires": { "async-validator": "~1.8.1", "babel-helper-vue-jsx-merge-props": "^2.0.0", @@ -6115,7 +6147,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6136,12 +6169,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6156,17 +6191,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6283,7 +6321,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6295,6 +6334,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6309,6 +6349,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6316,12 +6357,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6340,6 +6383,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6420,7 +6464,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6432,6 +6477,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6517,7 +6563,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6553,6 +6600,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6572,6 +6620,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6615,12 +6664,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6971,8 +7022,7 @@ "he": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/he/download/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", - "dev": true + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" }, "hex-color-regex": { "version": "1.1.0", @@ -9001,8 +9051,8 @@ }, "normalize-wheel": { "version": "1.0.1", - "resolved": "http://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", - "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" }, "normalize.css": { "version": "8.0.1", @@ -9521,6 +9571,11 @@ "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } + }, + "pdfh5": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/pdfh5/-/pdfh5-1.4.2.tgz", + "integrity": "sha512-1BL8HIx/EEZowRPBgas7/WokbGEv1gxKNRmmHSimG113178mKxIBH4pxWBc0tj6d25Sy+EwnlQwv9cUUmQa42w==" }, "performance-now": { "version": "2.1.0", @@ -10872,8 +10927,8 @@ }, "resize-observer-polyfill": { "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { "version": "1.10.0", @@ -10989,7 +11044,8 @@ "version": "4.0.8", "resolved": "http://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "dev": true, + "optional": true }, "rx-lite-aggregates": { "version": "4.0.8", @@ -11755,6 +11811,11 @@ "requires": { "is-plain-obj": "^1.0.0" } + }, + "sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" }, "source-list-map": { "version": "2.0.1", @@ -12569,8 +12630,8 @@ }, "throttle-debounce": { "version": "1.1.0", - "resolved": "http://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz", - "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=" + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" }, "through": { "version": "2.3.8", @@ -13294,7 +13355,6 @@ "version": "2.6.10", "resolved": "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.10.tgz", "integrity": "sha1-MjtPNJXwT6o1AzN6gvXWUHeZycw=", - "dev": true, "requires": { "de-indent": "^1.0.2", "he": "^1.1.0" @@ -13305,6 +13365,14 @@ "resolved": "http://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "dev": true + }, + "vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "requires": { + "sortablejs": "1.10.2" + } }, "vuex": { "version": "3.1.0", @@ -13952,6 +14020,36 @@ "dev": true } } + }, + "zrender": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.3.tgz", + "integrity": "sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==", + "requires": { + "tslib": "2.3.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "zrender": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.3.tgz", + "integrity": "sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==", + "requires": { + "tslib": "2.3.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } } } } diff --git a/package.json b/package.json index a2d92dd..66fea60 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,13 @@ "dependencies": { "axios": "^0.19.0", "core-js": "^2.6.9", + "echarts": "^5.4.2", "element-ui": "^2.14.1", "es6-promise": "^4.2.8", "js-cookie": "2.2.0", "normalize.css": "8.0.1", "nprogress": "0.2.0", + "pdfh5": "^1.4.2", "vue": "2.6.10", "vue-i18n": "^8.15.3", "vue-router": "^3.0.3", diff --git a/src/api/examPaper.js b/src/api/examPaper.js index defe3fc..426349d 100644 --- a/src/api/examPaper.js +++ b/src/api/examPaper.js @@ -8,5 +8,7 @@ pageList: query => post('/api/student/exam/paper/pageList', query), updateTestMemberStatus: tokenId => postOts('/api/exam/exampaper/answer/updateTestMemberStatus/' + tokenId), selectTesterReport: tokenId => postOts('/api/exam/paper/testerReport/' + tokenId), - down: (fileName) => get('/api/exam/paper/download?fileName=' + fileName + '&delete=false') + down: (fileName) => get('/api/exam/paper/download?fileName=' + fileName + '&delete=false'), + selectTesterReportUrl: tokenId => postOts('/api/exam/paper/selectTesterReportUrl/' + tokenId), + selectTesterReportResult: tokenId => postOts('/api/exam/paper/selectTesterReportResult/' + tokenId) } diff --git a/src/assets/report/page1.jpg b/src/assets/report/page1.jpg new file mode 100644 index 0000000..07f99e9 --- /dev/null +++ b/src/assets/report/page1.jpg Binary files differ diff --git a/src/assets/report/page1.png b/src/assets/report/page1.png new file mode 100644 index 0000000..a459faf --- /dev/null +++ b/src/assets/report/page1.png Binary files differ diff --git a/src/assets/report/page2.png b/src/assets/report/page2.png new file mode 100644 index 0000000..b8efcd3 --- /dev/null +++ b/src/assets/report/page2.png Binary files differ diff --git a/src/assets/report/page3.png b/src/assets/report/page3.png new file mode 100644 index 0000000..0f6f988 --- /dev/null +++ b/src/assets/report/page3.png Binary files differ diff --git a/src/assets/report/page4-1.png b/src/assets/report/page4-1.png new file mode 100644 index 0000000..5db5677 --- /dev/null +++ b/src/assets/report/page4-1.png Binary files differ diff --git a/src/assets/report/page4.png b/src/assets/report/page4.png new file mode 100644 index 0000000..68208dd --- /dev/null +++ b/src/assets/report/page4.png Binary files differ diff --git a/src/assets/report/page5.png b/src/assets/report/page5.png new file mode 100644 index 0000000..6827271 --- /dev/null +++ b/src/assets/report/page5.png Binary files differ diff --git a/src/lang/en.js b/src/lang/en.js index de3ef89..c470454 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -2,6 +2,7 @@ start: 'Continue testing', submission: 'submit', down: 'download report', + view: 'view report', lastQuestion: 'Last', nextQuestion: 'Next', recommendedTime: 'Recommended Time:', @@ -51,7 +52,9 @@ partRemailTime: 'Remaining Time:', finishIntelligenceInfo: 'You have completed the cognitive ability test questionnaire, the data has been successfully uploaded to the server, and has been saved. Thank you.', finishPersonalityInfo: 'You have completed the personality quetionnaire, and the data has been successfully uploaded to the server and saved. ', + finishCareerInterestsInfo: 'You have completed the Career Interests quetionnaire, and the data has been successfully uploaded to the server and saved. ', finishPersonalityDownInfo: 'You may click the red button below to download your test report.', + finishViewReportInfo: 'You can click on the red button below to view your result report.', langWelcomeThai: '喔⑧复喔權笖喔掂笗喔笝喔`副喔氞釜喔灌箞喙�喔о箛喔氞箘喔嬥涪喙屶釜喔赤斧喔`副喔氞笚喔赤箒喔氞笟喔椸笖喔腑喔氞競喔竾', langOptionThai: '喔佮福喔膏笓喔侧箑喔ム阜喔竵喔犩覆喔┼覆 喙佮弗喔班竸喔ム复喔� 鈥溹笖喔赤箑喔權复喔權竵喔侧福喔曕箞喔�.', values_finishValuesInfo:'Thank you! Your responses have been submitted. You can close this page now.', diff --git a/src/lang/th.js b/src/lang/th.js index 1b3817e..304231d 100644 --- a/src/lang/th.js +++ b/src/lang/th.js @@ -2,6 +2,7 @@ start: 'Continue testing', submission: 'submit', down: 'download report', + view: 'view report', lastQuestion: 'Last', nextQuestion: 'Next', recommendedTime: 'Recommended Time:', @@ -51,7 +52,9 @@ partRemailTime: 'Remaining Time:', finishIntelligenceInfo: 'You have completed the cognitive ability test questionnaire, the data has been successfully uploaded to the server, and has been saved. Thank you.', finishPersonalityInfo: 'You have completed the personality quetionnaire, and the data has been successfully uploaded to the server and saved. ', + finishCareerInterestsInfo: 'You have completed the Career Interests quetionnaire, and the data has been successfully uploaded to the server and saved. ', finishPersonalityDownInfo: 'You may click the red button below to download your test report.', + finishViewReportInfo: 'You can click on the red button below to view your result report.', langWelcomeThai: '喔⑧复喔權笖喔掂笗喔笝喔`副喔氞釜喔灌箞喙�喔о箛喔氞箘喔嬥涪喙屶釜喔赤斧喔`副喔氞笚喔赤箒喔氞笟喔椸笖喔腑喔氞競喔竾', langOptionThai: '喔佮福喔膏笓喔侧箑喔ム阜喔竵喔犩覆喔┼覆 喙佮弗喔班竸喔ム复喔� 鈥溹笖喔赤箑喔權复喔權竵喔侧福喔曕箞喔�.' } diff --git a/src/lang/zh.js b/src/lang/zh.js index cc1d7ef..4d83359 100644 --- a/src/lang/zh.js +++ b/src/lang/zh.js @@ -2,6 +2,7 @@ start: '缁х画娴嬭瘯', submission: ' 鎻愪氦', down: '涓嬭浇鎶ュ憡', + view: '鏌ョ湅鎶ュ憡', lastQuestion: '鍥炲埌涓婁竴棰�', nextQuestion: '涓嬩竴棰�', recommendedTime: '寤鸿鏃堕棿锛�', @@ -51,7 +52,9 @@ partRemailTime: '鍓╀綑鏃堕棿:', finishIntelligenceInfo: '鎮ㄥ凡缁忓畬鎴愪簡璁ょ煡鑳藉姏娴嬭瘯闂嵎锛屾暟鎹凡缁忔垚鍔熺殑涓婁紶鑷虫湇鍔″櫒锛屽苟宸茬粡淇濆瓨濂姐�傝阿璋€��', finishPersonalityInfo: '鎮ㄥ凡缁忓畬鎴愪簡浜烘牸娴嬭瘯闂嵎锛屾暟鎹凡缁忔垚鍔熺殑涓婁紶鑷虫湇鍔″櫒锛屽苟宸茬粡淇濆瓨濂姐��', + finishCareerInterestsInfo: '鎮ㄥ凡缁忓畬鎴愪簡鑱屼笟鍏磋叮闂嵎锛屾暟鎹凡缁忔垚鍔熺殑涓婁紶鑷虫湇鍔″櫒锛屽苟宸茬粡淇濆瓨濂姐��', finishPersonalityDownInfo: '鎮ㄥ彲浠ョ偣鍑讳笅闈㈢孩鑹叉寜閽笅杞芥偍鐨勭粨鏋滄姤鍛娿��', + finishViewReportInfo: '鎮ㄥ彲浠ョ偣鍑讳笅闈㈢孩鑹叉寜閽煡鐪嬫偍鐨勭粨鏋滄姤鍛娿��', langWelcomeThai: '喔⑧复喔權笖喔掂笗喔笝喔`副喔氞釜喔灌箞喙�喔о箛喔氞箘喔嬥涪喙屶釜喔赤斧喔`副喔氞笚喔赤箒喔氞笟喔椸笖喔腑喔氞競喔竾', langOptionThai: '喔佮福喔膏笓喔侧箑喔ム阜喔竵喔犩覆喔┼覆 喙佮弗喔班竸喔ム复喔� 鈥溹笖喔赤箑喔權复喔權竵喔侧福喔曕箞喔�.', values_finishValuesInfo: '娴嬭瘯缁撴潫锛佹偍鐨勬墍鏈夐�夐」鏁版嵁宸茬粡涓婁紶鑷虫湇鍔″櫒锛屽苟宸蹭繚瀛樺ソ銆傛偍鍙互鍏抽棴娴忚鍣紝閫�鍑虹瓟棰樼晫闈€��', @@ -92,5 +95,5 @@ values_pic_tmpArea:'鍥剧墖鏁寸悊鍖�', values_pic_tmpArea_desc:'鐜板湪浣犲彲浠ュ浣犲垰鎵嶅鍥剧墖鍋氬嚭鐨勫垎绫昏繘琛屼慨鏀广�傚啀娆℃彁閱掍竴涓嬶紝姣忎釜绫诲埆鍐呴儴鍥剧墖浠庡乏鍒板彸鐨勯『搴忔槸鏃犲叧绱ц鐨勩�傚鏋滀綘鎯虫洿鏀规煇浜涘浘鐗囩殑绫诲埆锛屼綘闇�瑕佸厛鎶婅繖浜涘浘鐗囨嫋鎷芥斁鍏モ�滃浘鐗囨暣鐞嗗尯鈥濓紝鐒跺悗鍐嶆嫋鍏ユ柊鐨勭被鍒�傚鏋滀綘鎯虫洿鎹袱寮犲浘鐗囩殑绫诲埆锛岄偅涔堜綘闇�瑕佹妸杩欎袱寮犲浘鐗囬兘鎷栧叆鈥滃浘鐗囨暣鐞嗗尯鈥濄�傚湪浣犵‘瀹氳嚜宸遍�夊ソ浜嗕箣鍚庯紝璇风偣鍑烩�滄彁浜も�濄��', values_nextStepTips_tips:'璇烽�氳繃灏嗗浘鍍忓垎涓轰節绫绘潵缁嗗寲鍥惧儚鐨勬帓搴忓拰鎺掑悕銆傝娉ㄦ剰锛屾偍鍙互鍦ㄦ瘡涓被鍒腑鏀剧疆鐨勫浘鍍忔暟閲忔槸鍥哄畾鐨勩��' - + } diff --git a/src/main.js b/src/main.js index 2b0de04..bd8d2e8 100644 --- a/src/main.js +++ b/src/main.js @@ -17,6 +17,10 @@ import 'babel-polyfill' import promise from 'es6-promise' + +import * as echarts from 'echarts' +Vue.prototype.$echarts = echarts + promise.polyfill() Vue.use(Element, { diff --git a/src/router.js b/src/router.js index 7d65a90..93c1dc1 100644 --- a/src/router.js +++ b/src/router.js @@ -119,18 +119,48 @@ } ] }, - { - path: '/exam', - component: Layout, - children: [ - { - path: 'values', - component: () => import('@/views/exam/paper/values'), - name: 'ExamPaperValues', - meta: { title: 'values' } - } - ] - } + { + path: '/exam', + component: Layout, + children: [ + { + path: 'values', + component: () => import('@/views/exam/paper/values'), + name: 'ExamPaperValues', + meta: { title: 'values' } + } + ] + }, + { + path: '/exam', + component: Layout, + children: [ + { + path: 'career_interests', + component: () => import('@/views/exam/paper/career_interests'), + name: 'ExamPaperCareerInterests', + meta: { title: 'career_interests' } + } + ] + }, + { + path: '/report', + component: Layout, + children: [ + { + path: 'view', + component: () => import('@/views/report/reportView'), + name: 'reportView', + meta: { title: 'PDF鎶ュ憡' } + } + ] + }, + { + path: '/report/h5', + component: () => import('@/views/report/reportH5'), + name: 'reportH5', + meta: { title: 'H5鎶ュ憡' } + } ] }) diff --git a/src/views/demography/index.vue b/src/views/demography/index.vue index 629a018..997ece0 100644 --- a/src/views/demography/index.vue +++ b/src/views/demography/index.vue @@ -56,20 +56,23 @@ </div> <div v-if="item.types=='select' && item.isRequired =='1'"> <el-form-item :label="item.paramName" + :prop="'data.'+index+'.paramValue'" :rules="[{ required: true, message: $t('required'),trigger: 'change'}]"> - <el-select v-model="item.paramValue" :placeholder= "$t('pleaseSelect')"> + <el-select v-model="item.paramValue" :placeholder= "$t('pleaseSelect')" :popper-append-to-body="false"> <el-option v-for="itemIter in item.dictData" :key="itemIter.dictValue" :label="itemIter.dictLabel" - :value="itemIter.dictValue"> + :value="itemIter.dictValue" + :title="itemIter.dictLabel"> + <span>{{ itemIter.dictLabel }}</span> </el-option> </el-select> </el-form-item> </div> <div v-if="item.types=='select' && item.isRequired !='1'"> <el-form-item :label="item.paramName"> - <el-select v-model="item.paramValue" :placeholder= "$t('pleaseSelect')"> + <el-select v-model="item.paramValue" :placeholder= "$t('pleaseSelect')" :popper-append-to-body="false"> <el-option v-for="itemIter in item.dictData" :key="itemIter.dictValue" @@ -115,6 +118,7 @@ submitDemography: function () { let _this = this _this.submitDisable = true + console.log( this.$refs.demographyMenber) this.$refs.demographyMenber.validate(vaild => { if (vaild) { _this.parasInfos = [] @@ -214,4 +218,27 @@ .align-center { text-align: center } + +/* .product-style /deep/ .el-select-dropdown__item { + width: 300px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + }*/ + + //鏍峰紡淇敼閮ㄥ垎 + .el-select .el-select-dropdown .el-scrollbar .el-select-dropdown__wrap .el-scrollbar__view .el-select-dropdown__item{ + white-space: pre-wrap; + color: #606266; + height: auto; + font-weight: normal; + width: 300px; + } + /*.el-select .el-select-dropdown .el-scrollbar .el-select-dropdown__wrap .el-scrollbar__view .el-select-dropdown__item.selected{ + background: #0090FF; + color: #fff; + font-weight: 700 + }*/ + </style> diff --git a/src/views/demography/login.vue b/src/views/demography/login.vue index 9d624c6..407a505 100644 --- a/src/views/demography/login.vue +++ b/src/views/demography/login.vue @@ -18,7 +18,8 @@ parasInfos: [], parasInfoIds: {}, formDo: {}, - statusInfo: { '2': this.$t('statusInfo2'), '3': this.$t('statusInfo3'), '4': this.$t('statusInfo4') } + statusInfo: { '2': this.$t('statusInfo2'), '3': this.$t('statusInfo3'), '4': this.$t('statusInfo4') }, + doUrl: null } }, created () { @@ -35,6 +36,7 @@ } else if (re.response.status !== '1') { _this.$router.push({ path: '/exam/exception', query: { name: '', content: _this.statusInfo[re.response.status] } }) } else { + _this.doUrl = re.response.doUrl _this.setMemberTocken(_this.paraMemberToken) _this.setDoUrl(re.response.doUrl) _this.setReportTemplateId(re.response.reportTemplateId) @@ -50,6 +52,14 @@ demographyApi.queryDemographyParamInfo(_this.paraMemberToken).then( reParam => { if (reParam.code !== 1) { + // 鑱屼笟鍏磋叮鎶ュ憡鐗规畩鍖栧鐞� 鍙湁涓枃 + if(_this.doUrl === 'career_interests') { + _this.$i18n.locale = 'zh' + _this.setLangType('Chinese') + _this.$router.push({ path: '/demography/fill/index', query: { demographyMenber: _this.memberToken, isStart: false } }) + return + } + // 鍏堥�夋嫨瀵嗙爜 _this.$router.push({ path: '/demography/fill/langOption', query: { langSelectValue: _this.langType } }) _this.setMemberTocken(_this.paraMemberToken) diff --git a/src/views/exam/components/QuestionEdit.vue b/src/views/exam/components/QuestionEdit.vue index 3d557a0..9094d9b 100644 --- a/src/views/exam/components/QuestionEdit.vue +++ b/src/views/exam/components/QuestionEdit.vue @@ -57,7 +57,7 @@ name: 'QuestionShow', data () { return { - abcValue: { '1': 'A', '2': 'B', '3': 'C', '4': 'D', '5': 'E', '6': 'F' } + abcValue: { '1': 'A', '2': 'B', '3': 'C', '4': 'D', '5': 'E', '6': 'F', '7': 'G', '8': 'H', '9': 'I', '10': 'J' } } }, props: { diff --git a/src/views/exam/paper/career_interests.vue b/src/views/exam/paper/career_interests.vue new file mode 100644 index 0000000..8acacb7 --- /dev/null +++ b/src/views/exam/paper/career_interests.vue @@ -0,0 +1,570 @@ +<template> + <div> + <el-container class="app-item-contain"> + <el-header class="align-center" v-if="guide"> + <h1></h1> + </el-header> + <el-main style="padding-top: 3%;"> + <div v-html="guideDescirption" v-if="guide" :style="ismobile?'padding-top: 2%;margin-top: 5%;':'padding-top: 2%;margin: 0 auto;width:66%'"></div> + <el-row class="do-align-center" v-if="guide"> + <el-button @click="startDo" type="primary" :disable="startDoDisable">{{$t('start')}}</el-button> + </el-row > + <el-form :model="form" ref="form" v-loading="formLoading" label-width="100%" v-else> + <el-row :key="index" v-for="(titleItem,index) in titleItems"> + <div class="q-content">{{titleItem.description}}</div> + <el-card class="exampaper-item-box" v-if="titleItem.questionItems.length!==0" style="border:2px solid #2b90ff;"> + <div class="align-center"><span style="font-size: small; float: left">{{$t('examinee')}}{{memberName}}</span><span style="margin-top: 0px;padding-right: 11%">鈼弡{form.name}}鈼�</span></div> + <hr style="border : 1px dashed #b3d8ff;" /> + <el-form-item :key="itemOrder" label-width="1px"> + <QuestionEdit @callNextSubject="nextSubject" :qType="questionItem.questionType" :question="questionItem" + :answer="answer.answerItems[questionItem.itemOrder-1]" :qLabel="itemOrder+'/'+itemSize"/> + </el-form-item> + <hr style="border : 0.5px dashed #b3d8ff;" /> + <div style="color: red;font-size: smaller">{{$t('pleaseAnswerCarefully')}}</div> + <el-row class="do-align-center" v-if="order < problemLength"> + <el-button @click="preSubject" type="warning" v-if ="preDisable" round>{{$t('lastQuestion')}}</el-button> + <el-button @click="nextSubject" type="primary" v-if ="nextDisable" round>{{$t('nextQuestion')}}</el-button> + </el-row> + <el-row class="do-align-center" v-else> + <el-button @click="preSubject" type="warning" v-if ="preDisable" round>{{$t('lastQuestion')}}</el-button> + <el-button @click="submitForm" type="primary" :disabled="submitDisable" round>{{$t('submission')}}</el-button> + </el-row> + </el-card> + </el-row> + </el-form> + + </el-main> + </el-container> + <el-row class="do-exam-title footer"> + <el-col :span="24"> + <!--<el-popover placement="top" title="棰樼洰鍒楄〃" width="200" trigger="click" ref="popovertag">--> + <!--<el-tag type="success" slot="reference">棰樼洰</el-tag>--> + <!--<span :key="item.itemOrder" v-for="(item) in answer.answerItems">--> + <!--<el-tag :type="questionCompleted(item.completed)" class="do-exam-title-tag"--> + <!-->{{item.itemOrder}}</el-tag>--> + <!--</span>--> + <!--</el-popover>--> + <span class="do-exam-time"> + <!--<label>{{$t('remainingTime')}}</label>--> + <!--<label>{{formatSecondsG(remainTime,$t('hour'),$t('min'),$t('second'))}}</label>--> + </span> + </el-col> + </el-row> + </div> +</template> + +<script> +import { mapState, mapGetters, mapMutations } from 'vuex' +import { formatSeconds, formatSecondsG, formatDate } from '@/utils' +import QuestionEdit from '../components/QuestionEdit' +import examPaperApi from '@/api/examPaper' +import examPaperAnswerApi from '@/api/examPaperAnswer' +import demographyApi from '@/api/demography' +export default { + name: 'career_interests', + components: { QuestionEdit }, + data () { + return { + form: {}, + formLoading: false, + answer: { + questionId: null, + doTime: 0, + answerItems: [], + verifyStatus: 2 + }, + timer: null, + problemLength: 0, + titleItemsLength: 0, + remainTime: 0, + titleItemName: '', // 鑰冭瘯绗簩鏍囬 + itemOrder: '', // 棰樼洰鐨勫簭鍙� + questionItem: {}, // 棰樼洰 + titleItems: [], + order: 0, + guide: false, + answered: [], + submitDisable: true, + doTime: 0, + preDisable: false, + nextDisable: false, + partOrder: 0, + parts: [], + guideTitle: '', + guideDescirption: '', + isCallTain: '', + isSignalObject: '', + memberName: '', + itemSize: '', // 棰樼洰闀垮害 + startDoDisable: true, + ismobile: false + } + }, + created: function () { + let _this = this + _this.ismobile = /ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(navigator.userAgent.toLowerCase()) + // 澶氳瑷� + _this.setLangFlag(false) + _this.form = this.$route.query.formDo + if (_this.form !== {} && _this.form !== undefined) { + _this.formLoading = true + _this.remainTime = _this.form.suggestTime * 60 + _this.problemLength = _this.form.titleItems[0].questionItems.length - 1 + _this.titleItemsLength = _this.form.titleItems.length + _this.titleItems.push(_this.form.titleItems[0]) + _this.questionItem = _this.form.titleItems[0].questionItems[0] + _this.partOrder = _this.questionItem.partOrder + _this.itemOrder = _this.form.titleItems[0].questionItems[0].itemOrder + _this.timeReduce() + _this.initAnswer() + _this.formLoading = false + _this.memberName = _this.form.memberName + _this.itemSize = _this.form.titleItems[0].questionItems.length + } else { + _this.formLoading = true + // 闃叉鍒锋柊鎴愪簡涓嶅悓鐨勮瑷� + demographyApi.queryDemographyParamInfo(_this.memberToken).then( + re => { + if (re.response[0].langType !== null || re.response[0].langType.trim() !== '') { + _this.setLangType(re.response[0].langType) + } + // 鍔犺浇棰樼洰 + examPaperApi.select(_this.memberToken, _this.langType).then(re => { + _this.form = re.response + _this.remainTime = re.response.suggestTime * 60 + _this.problemLength = _this.form.titleItems[0].questionItems.length - 1 + _this.titleItemsLength = _this.form.titleItems.length + _this.titleItems.push(_this.form.titleItems[0]) + _this.itemOrder = _this.form.titleItems[0].questionItems[_this.order].itemOrder + _this.itemSize = _this.form.titleItems[0].questionItems.length + _this.questionItem = _this.form.titleItems[0].questionItems[_this.order] + _this.partOrder = _this.questionItem.partOrder + _this.initAnswer() + _this.formLoading = false + _this.memberName = _this.form.memberName + + examPaperApi.selectTokenId(_this.memberToken).then(re => { + _this.answered = re.response.examItemOrderAndContentList + _this.doTime = re.response.doTime + _this.timeReduce() + + if (_this.answered !== null) { + _this.answered.forEach(it => { + _this.answer.answerItems[parseInt(it.itemOrder) - 1].content = it.content + _this.answer.answerItems[parseInt(it.itemOrder) - 1].completed = true + }) + } + + for (let i = 0; i < _this.answer.answerItems.length; i++) { + if (!_this.answer.answerItems[i].completed || _this.answer.answerItems[i].content === null || _this.answer.answerItems[i].content === '') { + _this.questionItem = _this.form.titleItems[0].questionItems[i] + _this.partOrder = _this.questionItem.partOrder + _this.itemOrder = _this.form.titleItems[0].questionItems[i].itemOrder + _this.order = i + _this.preDisable = true + break + } + + if (_this.isForFinish(i)) { + _this.$router.push({ path: '/exam/finish', query: { name: '', content: _this.$t('finishMsg'), tokenId: _this.memberToken } }) + } + } + // 濡傛灉涓婁竴棰樹笉鏄湰娈碉紝鍒欎笉鑳借繑鍥炰笂涓�娈� + if (this.isDiffPartOrder()) { + _this.preDisable = false + } + + if (this.isDiffPartOrder()) { + _this.showNextGuide(re.response.signalObject, false) + } + }).catch(e => { + // _this.$message.error('棰樼洰鏌ヨ寮傚父') + }) + }).catch(e => { + _this.$message.info(_this.$t('noquestionMsg')) + }) + } + ).catch(e => { + }) + } + }, + mounted () { + }, + beforeDestroy () { + window.clearInterval(this.timer) + }, + methods: { + formatSeconds (theTime) { + return formatSeconds(theTime) + }, + formatSecondsG (theTime, hour, min, second) { + return formatSecondsG(theTime, hour, min, second) + }, + formatDate (time, formatsrc) { + return formatDate(time, formatsrc) + }, + timeReduce: function () { + let _this = this + _this.answer.doTime += _this.doTime + this.timer = setInterval(function () { + if (_this.answer.doTime <= 0) { + _this.answer.doTime = 0 + } + ++_this.answer.doTime + }, 1000) + }, + questionCompleted (completed) { + return this.enumFormat(this.doCompletedTag, completed) + }, + goAnchor (selector) { + let _this = this + let num = parseInt(selector.substr(10)) - 1 + this.itemOrder = _this.form.titleItems[0].questionItems[num].itemOrder + this.questionItem = _this.form.titleItems[0].questionItems[num] + _this.order = num + setTimeout(function () { + _this.$el.querySelector(selector).scrollIntoView({ behavior: 'instant', block: 'center', inline: 'nearest' }) + }, 200) + _this.$refs['popovertag'].doClose() + }, + initAnswer () { + this.answer.id = this.form.id + this.answer.questionOrder = this.form.questionOrder + let titleItemArray = this.form.titleItems + for (let tIndex in titleItemArray) { + let questionArray = titleItemArray[tIndex].questionItems + for (let qIndex in questionArray) { + let question = questionArray[qIndex] + this.answer.answerItems.push({ title: question.title, permanentId: question.permanentId, questionId: question.id, content: null, contentArray: [], completed: false, itemOrder: question.itemOrder, lastContent: null, startTime: question.startTime, endTime: question.endTime, partOrder: question.partOrder, questionReport: {}, readOnly: false }) + } + } + + // 鍒濆鍖栧紑濮嬫椂闂达紝璁剧疆绗竴涓椂闂� + for (let i = 0; i < this.answer.answerItems.length; i++) { + if (this.answer.answerItems[i].startTime == null || this.answer.answerItems[i].startTime.trim() === '') { + this.answer.answerItems[i].startTime = this.formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss') + break + } + } + }, + isContentNotEmpty: function (num) { + let _this = this + return _this.answer.answerItems[num].content !== '' && _this.answer.answerItems[num].content !== null && _this.answer.answerItems[num].content.trim() !== '' + }, + nextQuestion: function (nowPartOrder) { + let _this = this + let num = ++_this.order + _this.itemOrder = _this.form.titleItems[0].questionItems[num].itemOrder + // 璺冲埌娌℃湁绛旂殑棰樼洰 + while (_this.isContentNotEmpty(num) && num !== _this.answer.answerItems.length - 1) { + num = ++_this.order + this.getEmptySubjct(num) + } + _this.questionItem = _this.form.titleItems[0].questionItems[num] + _this.partOrder = _this.questionItem.partOrder + if (_this.partOrder !== nowPartOrder) { + _this.isShowGuide(true) + } + + // 濡傛灉涓婁竴棰樹笉鏄湰娈碉紝鍒欎笉鑳借繑鍥炰笂涓�娈� + if (this.isDiffPartOrder()) { + _this.preDisable = false + } else { + _this.preDisable = true + } + _this.nextDisable = false + _this.answer.answerItems[_this.order].startTime = _this.formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss') + + // 濡傛灉鏄渶鍚庝竴涓苟涓斿凡缁忓畬鎴愪簡锛屽氨鎻愪氦 + if (num === _this.answer.answerItems.length - 1 && _this.isForFinish(num)) { + this.submitForm() + } + }, + nextQuestionOrder: function (nowPartOrder) { + if (this.order < this.problemLength) { + this.nextQuestion(nowPartOrder) + } else { + this.submitDisable = false + } + }, + isNextShowGuide: function (nowPartOrder) { + let _this = this + // 鏈鐨勬瘡涓�棰橀兘鎵撳畬瑕佹寚瀵艰 + let showGuideFlag = true + for (let i = 0; i < _this.answer.answerItems.length; i++) { + if (_this.form.titleItems[0].questionItems[i].partOrder === nowPartOrder && !_this.isContentNotEmpty(i)) { + showGuideFlag = false + } + } + return showGuideFlag + }, + catThaiSubmit: function (answerSubmit) { + answerSubmit.isCallTain = 'CallThai' + }, + setSignalObject: function (answerSubmit) { + answerSubmit.isSignalObject = 'CIAQ' + }, + getEmptySubjct: function (order) { + let _this = this + _this.itemOrder = _this.form.titleItems[0].questionItems[order].itemOrder + _this.questionItem = _this.form.titleItems[0].questionItems[order] + _this.partOrder = _this.questionItem.partOrder + _this.preDisable = false + _this.answer.answerItems[order].readOnly = false + // _this.answer.answerItems[order].content = '' + // _this.answer.answerItems[order].completed = false + _this.order = order + }, + isNotEmpty (obj) { + return obj !== null && obj !== undefined && obj !== '' + }, + isEmpty (obj) { + return !this.isNotEmpty(obj) + }, + nextSubject: function () { + let _this = this + _this.isShowGuide(false) + let nowPartOrder = _this.partOrder + // 璁剧疆涓婁竴棰樼殑缁撴潫鏃堕棿 + this.answer.answerItems[_this.order].endTime = _this.formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss') + // 寰幆娌℃湁绛旂殑棰樼洰,杩欓噷鍚屾椂鍐冲畾浜嗛棶绛旈鎵撳畬鍙互杩涘叆涓嬩竴棰� + for (let i = 0; i < _this.order; i++) { + if (!this.isContentNotEmpty(i)) { + // 杩斿洖涔嬪墠娌″仛鐨勯偅閬撻 + this.getEmptySubjct(i) + return + } + // 濡傛灉寰幆鍒版渶鍚庝竴棰樺氨鎻愪氦 + if (_this.isForFinish(i)) { + _this.submitForm() + return + } + } + + // 鍏ㄩ儴绛斿畬浜嗗氨鍙互鎻愪氦浜�,浣嗘槸濡傛灉鏄渶鍚庝竴棰樺氨鑷繁鎻愪氦 + for (let i = 0; i < _this.answer.answerItems.length; i++) { + if (!_this.isContentNotEmpty(i)) { + break + } + if (i === _this.answer.answerItems.length - 1 && _this.order !== _this.answer.answerItems.length - 1) { + _this.submitForm() + return + } + } + this.answer.answerItems[_this.order].readOnly = true + let answerSubmit = _this.getSubmitAnswerValue(nowPartOrder) + console.log(answerSubmit) + // 宸茬粡绛斿埌浜嗘渶鍚庝竴棰樹簡,涓嶇敤鑷姩璺冲埌涓嬩竴棰� + if (this.order + 1 > this.problemLength) { + this.submitDisable = false + return + } + // 濡傛灉鏄渶鍚庝竴棰樺氨涓婇潰鎻愪氦浜嗭紝涓嶄細璧板埌杩欓噷 + if (this.isNextShowGuide(nowPartOrder)) { + this.setSignalObject(answerSubmit) + } + examPaperAnswerApi.answerSubmit(answerSubmit, _this.memberToken).then(re => { + if (re.code !== 1) { + _this.$message.error(re.message) + throw (re.message) + } + + // 灞曠ず鎸囧璇� + if (this.isNextShowGuide(nowPartOrder)) { + // 灞曠ず鎸囧璇� + _this.showNextGuide(re.response.signalObject, true) + } else { + this.nextQuestionOrder(nowPartOrder) + } + }).catch(e => { + _this.reloadPage(e) + }) + }, + getSubmitAnswerValue (nowPartOrder) { + let _this = this + let answerSubmit = JSON.parse(JSON.stringify(_this.answer)) + answerSubmit.answerItems.forEach(answerItem => { + // 棰樼洰鎶ヨ〃锛屽鏋滄病鏈夌粨鏉熸椂闂达紝寮�濮嬫椂闂翠篃涓嶉渶瑕� + if (answerItem.endTime == null || answerItem.endTime === '') { + answerItem.startTime = '' + } + answerItem.questionReport = { questionOrder: answerItem.questionId, questionTitle: answerItem.title, permanentId: answerItem.permanentId, startTime: answerItem.startTime, endTime: answerItem.endTime, langType: _this.langType, partOrder: answerItem.partOrder, answer: answerItem.content } + }) + answerSubmit.langType = _this.langType + answerSubmit.isCallTain = _this.isCallTain + answerSubmit.isSignalObject = _this.isSignalObject + answerSubmit.partOrder = nowPartOrder + answerSubmit.itemOrder = _this.itemOrder + return answerSubmit + }, + preSubject () { + let _this = this + _this.isShowGuide(false) + if (_this.order > 0) { + // 娓呯┖鏈鐨勯�夋嫨 + _this.answer.answerItems[_this.order].content = null + _this.answer.answerItems[_this.order].completed = false + _this.answer.answerItems[_this.order].questionReport = null + _this.answer.answerItems[_this.order].readOnly = false + + // 璁剧疆鍥炲埌涓婁竴棰� + let num = --_this.order + _this.itemOrder = _this.form.titleItems[0].questionItems[num].itemOrder + _this.questionItem = _this.form.titleItems[0].questionItems[num] + _this.partOrder = _this.questionItem.partOrder + _this.preDisable = false + _this.nextDisable = true + _this.answer.answerItems[_this.order].readOnly = false + } + }, + submitForm () { + let _this = this + _this.submitDisable = true + window.clearInterval(_this.timer) + _this.formLoading = true + let unFinish = false + for (let i = 0; i < _this.answer.answerItems.length; i++) { + if (_this.answer.answerItems[i].content === null) { + unFinish = true + // 鏈夋湭瀹屾垚鐨勭瓟棰樺簲璇ユ槸 2绛旈涓� + // 涔嬪墠鏄�0鏈鐞� + _this.answer.finish = 2 + } + } + if (unFinish) { + // 鐩存帴鍋滅暀鍦ㄦ病鏈夋墦瀹岀殑棰樼洰 + for (let i = 0; i < _this.answer.answerItems.length; i++) { + if (!_this.isContentNotEmpty(i)) { + _this.questionItem = _this.form.titleItems[0].questionItems[i] + _this.partOrder = _this.questionItem.partOrder + _this.itemOrder = _this.form.titleItems[0].questionItems[i].itemOrder + _this.order = i + _this.preDisable = true + break + } + _this.formLoading = false + _this.submitDisable = false + } + } else { + _this.answer.verifyStatus = 1 + _this.answer.finish = 1 + _this.submitAnswer(_this.$t('finishCareerInterestsInfo')) + } + }, + startDo: function () { + let _this = this + _this.guide = false + _this.isCallTain = '' + _this.isSignalObject = '' + }, + submitAnswer: function (mess) { + let _this = this + this.answer.answerItems[_this.order].endTime = this.formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss') + // 鎻愪氦涔嬪墠鎻愪氦鏈�鍚庝竴娈� + let answerSubmit = _this.getSubmitAnswerValue(_this.partOrder) + _this.catThaiSubmit(answerSubmit) + let loading = _this.$loading({ + lock: false, + text: _this.$t('uploadInfo'), + spinner: 'el-icon-loading' + }) + examPaperAnswerApi.answerSubmit(answerSubmit, _this.memberToken).then(re => { + loading.close() + if (re.code === 1) { + _this.$router.push({ path: '/exam/finish', query: { name: _this.form.name, content: mess, tokenId: _this.memberToken, type: 'CIAQ' } }) + } else { + _this.$message.error(re.message + '/exam/finish') + } + _this.formLoading = false + }).catch(e => { + _this.reloadPage(e) + loading.close() + }) + }, + showNextGuide: function (signalObject, nextQuestion) { + let _this = this + _this.guideDescirption = signalObject.signalDescription + if (_this.guideDescirption !== null && _this.guideDescirption !== undefined && _this.guideDescirption !== '') { + _this.isShowGuide(true) + _this.preDisable = false + } else { + throw (signalObject.message) + } + if (Object.keys(_this.guideDescirption).length === 0) { + _this.isShowGuide(false) + _this.preDisable = false + } + _this.startDoDisable = false + if (!nextQuestion) { + return + } + _this.nextQuestionOrder() + }, + isNull: function (obj) { + return obj === null || obj === undefined + }, + isShowGuide (flag) { + let _this = this + _this.guide = flag + // _this.isCallTain = flag ? 'callTain' : '' + }, + reloadPage (e) { + let _this = this + let mes = '' + if (e.message !== null && e.message !== undefined && e.message.indexOf('timeout') !== -1) { + mes = _this.$t('submitTimeout') + ',' + 'order:' + _this.order + ',' + e.message// 鎻愪氦鍚庡彴瓒呮椂 + } else { + mes = JSON.stringify(e) + ',' + 'order:' + _this.order + ',' + e.message + } + // 璋冭瘯鐢� + // _this.$router.push({ path: '/exam/exception', query: { name: _this.form.name, content: _this.$t('submitExceptionInfo') + '<br>' + mes } }) + _this.$router.push({ path: '/exam/exception', query: { name: _this.form.name, content: _this.$t('submitExceptionInfo') } }) + _this.formLoading = false + _this.submitDisable = false + }, + isForFinish (i) { + return i === this.answer.answerItems.length - 1 && (this.answer.answerItems[i].content !== null && this.answer.answerItems[i].content !== '') + }, + isDiffPartOrder: function () { + let _this = this + return _this.form.titleItems[0].questionItems[_this.order].partOrder !== _this.form.titleItems[0].questionItems[_this.order - 1].partOrder + }, + ...mapMutations('user', ['setLangType']), + ...mapMutations('user', ['setLangFlag']) + }, + computed: { + ...mapGetters('enumItem', ['enumFormat']), + ...mapState('enumItem', { doCompletedTag: state => state.exam.question.answer.doCompletedTag }), + ...mapState('user', { memberToken: state => state.memberToken }), + ...mapState('user', { langType: state => state.langType }), + ...mapState('user', { langFlag: state => state.langFlag }), + ...mapState('exam', { doUrl: state => state.doUrl }) + } +} +</script> + +<style lang="scss" scoped> + .align-center { + text-align: center; + } + + .exam-question-item { + padding: 10px; + font-size: large; + + .el-form-item__label { + font-size: large !important; + } + } + + .question-title-padding { + padding-left: 25px; + padding-right: 25px; + } + .footer { + position: absolute; + position: fixed; + z-index: 1000; + bottom: 0px; + } +</style> diff --git a/src/views/exam/paper/finish.vue b/src/views/exam/paper/finish.vue index a034b92..eb8b933 100644 --- a/src/views/exam/paper/finish.vue +++ b/src/views/exam/paper/finish.vue @@ -9,6 +9,12 @@ <!-- 鏂板涓嬭浇鎶ュ憡鎻愮ず璇� --> <H1 v-if ="downDisable">{{$t('finishPersonalityDownInfo')}}</H1> <el-button type="danger" v-if ="downDisable" @click="downReport" round>{{$t('down')}}</el-button> + <!-- 鏂板棰勮鎻愮ず璇� --> +<!-- <H1 v-if ="viewDisable">{{$t('finishViewReportInfo')}}</H1>--> +<!-- <el-button type="danger" v-if ="viewDisable" @click="viewReport" round>{{$t('view')}}</el-button>--> + <!-- --> + <H1 v-if ="type == 'CIAQ'">{{$t('finishViewReportInfo')}}</H1> + <el-button type="danger" v-if ="type == 'CIAQ' && isMobile()" @click="viewReportH5" round>{{$t('view')}}</el-button> </el-main> </el-container> </div> @@ -22,8 +28,11 @@ name: this.$route.query.name, content: this.$route.query.content, tokenId: this.$route.query.tokenId, + type: this.$route.query.type, downDisable: false, - downUrl: '' + viewDisable: false, + downUrl: '', + viewUrl: '' } }, created () { @@ -39,6 +48,18 @@ console.log(re) } }) + + // CIAQ PDF棰勮Url + // examPaperApi.selectTesterReportUrl(_this.tokenId).then(re => { + // if (re.code === 0) { + // _this.viewDisable = true + // // 璁剧疆棰勮璺緞 + // _this.viewUrl = re.msg + // console.log(re) + // } else { + // console.log(re) + // } + // }) }, mounted () { @@ -50,6 +71,20 @@ downReport: function () { let _this = this window.open(_this.downUrl) + }, + // 棰勮鎶ュ憡 + viewReport: function () { + let _this = this + _this.$router.push({ path: '/report/view', query: { fileUrl: _this.viewUrl } }) + }, + // 棰勮鎶ュ憡(H5) + viewReportH5: function () { + let _this = this + _this.$router.push({ path: '/report/h5', query: { tokenId: _this.tokenId } }) + }, + isMobile () { + let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) + return flag } }, computed: { diff --git a/src/views/exam/paper/guide.vue b/src/views/exam/paper/guide.vue index 53364aa..e9ed05e 100644 --- a/src/views/exam/paper/guide.vue +++ b/src/views/exam/paper/guide.vue @@ -1,7 +1,7 @@ <template> <div> <el-container class="app-item-contain"> - <el-header class="align-center" style="height: 50px;padding: 1%;"> + <el-header class="align-center" style="height: 50px;padding: 1%;margin-top: 4%"> <H2 v-html="$t('guide')" v-if="formDo.questionTemplateId !== 'job' || formDo.questionTemplateId !== 'values'"></H2> </el-header> <el-main style="padding-top:0%"> diff --git a/src/views/exam/paper/personality.vue b/src/views/exam/paper/personality.vue index dc2ae2d..98ce246 100644 --- a/src/views/exam/paper/personality.vue +++ b/src/views/exam/paper/personality.vue @@ -402,6 +402,13 @@ let _this = this _this.isShowGuide(false) if (_this.order > 0) { + // 娓呯┖鏈鐨勯�夋嫨 + _this.answer.answerItems[_this.order].content = null + _this.answer.answerItems[_this.order].completed = false + _this.answer.answerItems[_this.order].questionReport = null + _this.answer.answerItems[_this.order].readOnly = false + + // 璁剧疆鍥炲埌涓婁竴棰� let num = --_this.order _this.itemOrder = _this.form.titleItems[0].questionItems[num].itemOrder _this.questionItem = _this.form.titleItems[0].questionItems[num] diff --git a/src/views/report/reportH5.vue b/src/views/report/reportH5.vue new file mode 100644 index 0000000..6624eaf --- /dev/null +++ b/src/views/report/reportH5.vue @@ -0,0 +1,391 @@ +<template> + <div id="app"> + <div class="report"> + <el-image :src="require('@/assets/report/page1.jpg')"></el-image> + <div class="word" style="left: 23.5%;top: 68.6%;font-size: 0.8rem;color: #313157">銆恵{ data.questionnaireTaker }}銆�</div> + <div class="word" style="left: 27%;top: 71.2%;font-size: 0.8rem;color: #313157">銆恵{ data.reportGenerationDate }}銆�</div> + </div> + <div class="report"> + <el-image :src="require('@/assets/report/page2.png')"></el-image> + <div id="myChart" style="width: 100%; height: 300px; "></div> + </div> + + <div class="report"> + <el-image :src="require('@/assets/report/page3.png')"></el-image> + <div class="word" style="left: 40%;top: 3.3%;font-size: 0.8rem;color: #34BBC4">{{ data.PR_Dim01 }}</div> + <div class="word" style="left: 40%;top: 6.3%;font-size: 0.8rem;color: #E1AD04">{{ data.PR_Dim02 }}</div> + <div class="word" style="left: 40%;top: 9.3%;font-size: 0.8rem;color: #6D67AD">{{ data.PR_Dim03 }}</div> + <div class="word" style="left: 40%;top: 12.3%;font-size: 0.8rem;color: #EC7864">{{ data.PR_Dim04 }}</div> + <div class="word" style="left: 80%;top: 3.3%;font-size: 0.8rem;color: #D78EBB">{{ data.PR_Dim05 }}</div> + <div class="word" style="left: 80%;top: 6.3%;font-size: 0.8rem;color: #E8497D">{{ data.PR_Dim06 }}</div> + <div class="word" style="left: 80%;top: 9.3%;font-size: 0.8rem;color: #62BEA4">{{ data.PR_Dim07 }}</div> + <div class="word" style="left: 80%;top: 12.3%;font-size: 0.8rem;color: #4976BA">{{ data.PR_Dim08 }}</div> + <div class="word career" style="left: 14%;top: 36.3%;font-size: 0.6rem;font-weight: bold;line-height:25px"> + 1.{{data.occ1H}}<br> + 2.{{data.occ2H}}<br> + 3.{{data.occ3H}}<br> + 4.{{data.occ4H}}<br> + 5.{{data.occ5H}}<br> + 6.{{data.occ6H}}<br> + 7.{{data.occ7H}}<br> + 8.{{data.occ8H}}<br> + 9.{{data.occ9H}}<br> + 10.{{data.occ10H}} + </div> + <div class="word career" style="left: 14%;top: 72%;font-size: 0.6rem;font-weight: bold;line-height:25px"> + 1.{{data.occ1L}}<br> + 2.{{data.occ2L}}<br> + 3.{{data.occ3L}}<br> + 4.{{data.occ4L}}<br> + 5.{{data.occ5L}}<br> + 6.{{data.occ6L}}<br> + 7.{{data.occ7L}}<br> + 8.{{data.occ8L}}<br> + 9.{{data.occ9L}}<br> + 10.{{data.occ10L}} + </div> + </div> + <div class="report"> + <div v-if="data.condition != null"> + <el-image :src="require('@/assets/report/page4.png')"></el-image> + </div> + <div v-if="data.condition == null"> + <el-image :src="require('@/assets/report/page4-1.png')"></el-image> + </div> + </div> + <div class="report"> + <el-image :src="require('@/assets/report/page5.png')"></el-image> + </div> + </div> +</template> + +<script> +import examPaperApi from '@/api/examPaper' + +export default { + name: 'reportH5', + data () { + return { + tokenId: this.$route.query.tokenId, + condition: true, + data: { + occ1L: '鍦拌川鍕樻帰宸ョ▼鎶�鏈汉鍛橈紙姣斿鍦拌川鐭夸骇璋冩煡宸ョ▼鎶�鏈汉鍛橈級', + occ3L: '鐭垮北宸ョ▼鎶�鏈汉鍛橈紙姣斿閫夌熆涓庣熆鐗╁姞宸ュ伐绋嬫妧鏈汉鍛橈級', + PR_Dim01: 10, + PR_Dim02: 20, + PR_Dim03: 30, + PR_Dim04: 40, + occ5H: '椋熷搧琛屼笟鍝佽瘎甯堬紙姣斿涔冲搧璇勯壌甯堛�佸搧閰掑笀锛�', + occ9L: '淇℃伅閫氫俊缃戠粶杩愯绠$悊浜哄憳锛堟瘮濡備俊鎭�氫俊缃戠粶杩愯绠$悊鍛橈級', + occ7H: '鑷劧淇濇姢鍖哄拰鑽夊湴鐩戞姢浜哄憳锛堟瘮濡傝嚜鐒朵繚鎶ゅ尯宸℃姢鐩戞祴鍛樸�佽崏鍦扮洃鎶ゅ憳锛�', + occ1H: '缁垮寲涓庡洯鑹烘湇鍔′汉鍛橈紙姣斿鐩嗘櫙甯堛�佹彃鑺辫姳鑹哄笀锛�', + occ5L: '鏈烘宸ョ▼鎶�鏈汉鍛橈紙姣斿鏈烘璁捐宸ョ▼鎶�鏈汉鍛樸�佽嚜鍔ㄦ帶鍒跺伐绋嬫妧鏈汉鍛橈級', + occ3H: '妞嶇墿淇濇姢鎶�鏈汉鍛�', + occ7L: '宸ヤ笟鏈哄櫒浜烘搷浣滆繍缁翠汉鍛橈紙姣斿宸ヤ笟鏈哄櫒浜虹郴缁熻繍缁村憳銆侊級', + occ10H: '闄剁摲鍒跺搧鍒堕�犱汉鍛橈紙姣斿闄剁摲瑁呴グ宸ャ�佸彜寤虹悏鐠冨伐锛�', + occ10L: '鍦拌川鍕樻煡浜哄憳锛堟瘮濡傜墿鎺㈠伐銆佸湴璐ㄨ皟鏌ュ憳锛�', + occ8H: '缁垮寲涓庡洯鑹烘湇鍔′汉鍛橈紙姣斿鍥灄缁垮寲宸ャ�佽崏鍧洯鑹哄笀锛�', + PR_Dim05: 50, + PR_Dim06: 60, + PR_Dim07: 70, + questionnaireTaker: '娴嬭瘯', + PR_Dim08: 80, + reportGenerationDate: '2023-04-29', + occ2L: '娴嬬粯鍜屽湴鐞嗕俊鎭伐绋嬫妧鏈汉鍛橈紙姣斿宸ョ▼娴嬮噺宸ョ▼鎶�鏈汉鍛橈級', + occ4H: '鍥壓鎶�鏈汉鍛�', + occ8L: '鐢靛瓙宸ョ▼鎶�鏈汉鍛橈紙姣斿鐢靛瓙鏉愭枡/鐢靛瓙鍏冨櫒浠跺伐绋嬫妧鏈汉鍛橈級', + occ6H: '搴峰吇銆佷紤闂叉湇鍔′汉鍛橈紙姣斿妫灄鍥灄搴峰吇甯堬級', + occ4L: '鍐堕噾宸ョ▼鎶�鏈汉鍛橈紙姣斿鍐堕噾鐑兘宸ョ▼鎶�鏈汉鍛樸�佺█鍦熷伐绋嬫妧鏈汉鍛橈級', + occ2H: '鍥藉湡绌洪棿瑙勫垝涓庣敓鎬佷慨澶嶅伐绋嬫妧鏈汉鍛橈紙姣斿鍩庝埂瑙勫垝宸ョ▼鎶�鏈汉鍛橈級', + occ6L: '鑸┖宸ョ▼鎶�鏈汉鍛橈紙姣斿椋炶鍣ㄥ埗閫犲伐绋嬫妧鏈汉鍛橈級', + condition: '娉細鎮ㄥ湪鍏釜鍏磋叮涓婚涓婄殑寰楀垎鏄剧ず鎮ㄧ殑鑱屼笟鍏磋叮鍒嗗寲绋嬪害涓嶉珮锛屽洜姝よ亴涓氭帹鑽愮殑缁撴灉鍙兘涓嶅绮剧‘銆傚缓璁偍鍦ㄥ弬鑰冧笂杩拌亴涓氶鍩熺殑鍚屾椂锛屼篃搴斿鍏朵粬鑱屼笟棰嗗煙淇濇寔寮�鏀炬�佸害銆�', + occ9H: '閲庣敓鍔ㄦ鐗╀繚鎶や汉鍛橈紙姣斿閲庣敓妞嶇墿淇濇姢鍛樸�佸睍鍑哄姩鐗╀繚鑲插憳锛�' + } + } + }, + created () { + let _this = this + // 鏌ヨ鎶ュ憡鏂囦欢鍚� + examPaperApi.selectTesterReportResult(_this.tokenId).then(re => { + if (re.code === 0) { + _this.data = re.data.data + this.drawLine() + } + console.log(re) + }) + }, + mounted () { + + }, + methods: { + drawLine () { + let _this = this + // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥 + let myChart = this.$echarts.init(document.getElementById('myChart')) + let option = { + title: { + text: '鑱屼笟鍏磋叮涓婚寰楀垎', + show: false + }, + legend: {}, + radar: { + // shape: 'circle', + nameGap: 15, + center: ['50%', '50%'], + // 鍦嗕腑蹇冨潗鏍囷紝鏁扮粍鐨勭涓�椤规槸妯潗鏍囷紝绗簩椤规槸绾靛潗鏍囥�俒 default: ['50%', '50%'] ] + radius: 120, + // 鍦嗙殑鍗婂緞锛屾暟缁勭殑绗竴椤规槸鍐呭崐寰勶紝绗簩椤规槸澶栧崐寰勩�� + startAngle: 90, + indicator: [ + { + name: '鍋ュ悍绉戝', max: '100', + //鑻ュ皢姝ゅ睘鎬ф斁鍦╮adar涓嬶紝鍒欐瘡鏉ndicator閮戒細鏄剧ず鍦堜笂鐨勬暟鍊硷紝鏀惧湪杩欏効锛屽彧鍦ㄩ�氫俊杩欐潯indicator涓婃樉绀� + axisLabel: { + show: true, + fontSize: 8, + color: '#7F7F7F', + showMaxLabel: true, //涓嶆樉绀烘渶澶у�硷紝鍗冲鍦堜笉鏄剧ず鏁板瓧30 + showMinLabel: true, //鏄剧ず鏈�灏忔暟瀛楋紝鍗充腑蹇冪偣鏄剧ず0 + } + }, + { name: '浜嬬墿', max: '100' }, + { name: '鑷劧', max: '100' }, + { name: '褰卞搷', max: '100' }, + { name: '缁勭粐', max: '100' }, + { name: '浜�', max: '100' }, + { name: '绉戞妧', max: '100' }, + { name: '鍒涢�犳�ц〃杈�', max: '100' } + ], + splitArea: { //鍦嗙幆鍖哄煙鏍峰紡 + areaStyle: { + color: ['#fff', '#fff', '#fff'], + shadowColor: 'rgba(230, 230, 230, 0.5)', + shadowBlur: 20, + shadowOffsetY: '10', + shadowOffsetX: '-10' + } + }, + splitNumber: 4, + axisName: { + color: '#7F7F7F', + fontSize: 10 + }, + axisLine: { + show: false, + lineStyle: { + shadowColor: '#F5F4F4', + shadowBlur: 10 + } + } + }, + series: [ + { + name: '鍋ュ悍绉戝', + type: 'radar', + z: 1, + areaStyle: { + color: '#E5E3E3' //闃村奖 + }, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#34BBC4' + }, + lineStyle: {//绾挎潯鏍峰紡 + color: '#C0BEBD' + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + value: [_this.data.PR_Dim01, _this.data.PR_Dim08, _this.data.PR_Dim07, _this.data.PR_Dim06, _this.data.PR_Dim05, _this.data.PR_Dim04, _this.data.PR_Dim03, _this.data.PR_Dim02] + } + ] + }, + { + name: '鍒涢�犳�ц〃杈�', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#E1AD04' + }, + lineStyle: { + width: 0, + labelLine: { + show: false, //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', '1000', '1000', _this.data.PR_Dim02] + } + ] + }, + { + name: '绉戞妧', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#6D67AD' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', '1000', _this.data.PR_Dim03, '1000'] + } + ] + }, + { + name: '浜�', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#EC7864' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', _this.data.PR_Dim04, '1000', '1000'] + } + ] + }, + { + name: '缁勭粐', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#D78EBB' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', _this.data.PR_Dim05, '1000', '1000', '1000'] + } + ] + }, + { + name: '褰卞搷', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#E8497D' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', _this.data.PR_Dim06, '1000', '1000', '1000', '1000'] + } + ] + }, + { + name: '鑷劧', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#62BEA4' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', _this.data.PR_Dim07, '1000', '1000', '1000', '1000', '1000'] + } + ] + }, + { + name: '浜嬬墿', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: '#4976BA' + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 13,//鍦嗙偣澶у皬 + symbol: 'circle',//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', _this.data.PR_Dim08, '1000', '1000', '1000', '1000', '1000', '1000'] + } + ] + } + ] + } + // 缁樺埗鍥捐〃 + myChart.setOption(option) + } + } +} +</script> +<style scoped> +.report { + position: relative +} + +.report .word { + position: absolute; +} + +.career { + display: inline-block; + width: 260px; + /*瓒呭嚭閮ㄥ垎闅愯棌*/ + overflow: hidden; + /*鏂囨湰涓嶆崲琛�*/ + white-space: nowrap; + /*瓒呭嚭涓嶅皝鐢ㄤ笁涓渷鐣ュ彿浠f浛*/ + text-overflow: ellipsis; +} + +#app { + max-width: 100vh; + max-height: 100vh; + background-color: white; +} + +</style> diff --git a/src/views/report/reportH5Bak.vue b/src/views/report/reportH5Bak.vue new file mode 100644 index 0000000..76f9b92 --- /dev/null +++ b/src/views/report/reportH5Bak.vue @@ -0,0 +1,298 @@ +<template> + <div> + <div id="page1" class="page1 font"> + <div style="left: 19%;position: absolute;top: 12%;font-weight: bold;font-size: 1rem;">涓浗澶у鐢熻亴涓氬叴瓒i噺琛�</div> + <div style="left: 9%;position: absolute;top: 65%;font-weight: bold;font-size: 2.1rem;">涓汉鍙嶉鎶ュ憡</div> + <div style="left: 10%;position: absolute;top: 72%;font-size: 0.1rem;">娴� 璇� 鑰咃細銆�%questionnaireTaker%銆�</div> + <div style="left: 10%;position: absolute;top: 74%;font-size: 0.1rem;">娴嬭瘯鏃堕棿锛氥��%reportGenerationDate%銆�</div> + <div style="left: 10%;position: absolute;top: 76%;font-size: 0.1rem;">甯� 妯★細涓浗澶у鐢�</div> + <div style="left: 10%; position: absolute; top: 79%; font-size: 0.1rem;">鎶ュ憡涓昏鍐呭锛�</div> + <div style="left: 10%;position: absolute;top: 81%;font-size: 0.1rem;">1. 鍏ぇ鑱屼笟鍏磋叮涓婚鐨勪粙缁嶅強涓汉鍒嗘暟</div> + <div style="left: 10%;position: absolute;top: 83%;font-size: 0.1rem;width: 85%;">2. 鍩轰簬銆婁腑鍗庝汉姘戝叡鍜屽浗鑱屼笟鍒嗙被澶у吀锛�2022鐗堬級銆嬬敓鎴愮殑涓汉鑱屼笟鏂瑰悜鎴栭鍩熺殑鎺ㄨ崘娓呭崟</div> + </div> + <div style="height: 1700px;background-color: white"> + 鎶ュ憡浠嬬粛 + 鑱屼笟鍏磋叮鏄奖鍝嶆垜浠敓娑�夋嫨鐨勯噸瑕佸洜绱犱箣涓�锛屼粠浜嬩笌鑷繁鍏磋叮鐩稿叧鐨勮亴涓氫篃鏈夊姪浜庢垜浠湪宸ヤ綔涓彇寰楄緝濂界殑缁╂晥琛ㄧ幇浠ュ強宸ヤ綔婊℃剰搴︺�傛垜浠緷鎹亴涓氬叴瓒ETPOINT妯″瀷锛圫u et al., 2019锛夛紝骞跺熀浜庝腑鍥藉浗鎯呭紑鍙戜簡鏈娴嬭瘯鐨勯鐩�傛湰娴嬮獙娴嬮噺浜嗘偍鍦ㄥ叓澶ц亴涓氬叴瓒d富棰樹笂鐨勫緱鍒嗭紝鎮ㄧ殑娴嬭瘯鍒嗘暟鏄湪浠ヤ腑鍥戒汉缇や负甯告ā鐨勫熀纭�涓婅绠楀嚭鐨勭櫨鍒嗕綅鏁般�傚彟澶栵紝鎴戜滑瀵广�婁腑鍗庝汉姘戝叡鍜屽浗鑱屼笟鍒嗙被澶у吀锛�2022鐗堬級銆嬩腑鍑虹幇鐨勮亴涓氱被鍨嬭繘琛屼簡缂栫爜锛屽苟鍩轰簬鎮ㄧ殑鍏磋叮鐗圭偣锛岀敓鎴愪簡鎮ㄥ彲鑳芥渶鎰熷叴瓒g殑鍗佷釜鑱屼笟绫诲瀷鍜屾偍鍙兘鏈�涓嶆劅鍏磋叮鐨勫崄涓亴涓氱被鍨嬶紝甯姪鎮ㄦ洿鏈夋晥鍦版帰绱㈣亴涓氱敓娑�備换浣曞績鐞嗘祴璇曢兘涓嶅彲鑳藉仛鍒板畬鍏ㄧ簿纭紝鎵�浠ユ祴璇曞垎鏁颁互鍙婃帹鑽愮殑鑱屼笟绫诲瀷浠呬緵鎮ㄥ弬鑰冦�� + </div> + </div> + <!--<div id="myChart" style="width: 100%; height: 500px; margin-top: 100px"></div>--> +</template> + +<script> +// import '@/assets/style/rem' +// import '@/assets/style/reset.css' + +export default { + name: 'reportH5', + data () { + + }, + mounted () { + this.drawLine() + }, + methods: { + drawLine () { + // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥 + let myChart = this.$echarts.init(document.getElementById('myChart')) + let option = { + title: { + text: '鑱屼笟鍏磋叮涓婚寰楀垎', + show: false + }, + legend: {}, + radar: { + // shape: 'circle', + nameGap: 25, + indicator: [ + { + name: '鍋ュ悍绉戝', max: '100', + //鑻ュ皢姝ゅ睘鎬ф斁鍦╮adar涓嬶紝鍒欐瘡鏉ndicator閮戒細鏄剧ず鍦堜笂鐨勬暟鍊硷紝鏀惧湪杩欏効锛屽彧鍦ㄩ�氫俊杩欐潯indicator涓婃樉绀� + axisLabel: { + show: true, + fontSize: 12, + color: '#7F7F7F', + showMaxLabel: true, //涓嶆樉绀烘渶澶у�硷紝鍗冲鍦堜笉鏄剧ず鏁板瓧30 + showMinLabel: true, //鏄剧ず鏈�灏忔暟瀛楋紝鍗充腑蹇冪偣鏄剧ず0 + } + }, + {name: '浜嬬墿', max: '100'}, + {name: '鑷劧', max: '100'}, + {name: '褰卞搷', max: '100'}, + {name: '缁勭粐', max: '100'}, + {name: '浜�', max: '100'}, + {name: '绉戞妧', max: '100'}, + {name: '鍒涢�犳�ц〃杈�', max: '100'} + ], + splitArea: { //鍦嗙幆鍖哄煙鏍峰紡 + areaStyle: { + color: ['#fff', '#fff', '#fff'], + shadowColor: 'rgba(230, 230, 230, 0.5)', + shadowBlur: 20, + shadowOffsetY: '10', + shadowOffsetX: '-10', + } + }, + splitNumber: 4, + axisName: { + color: '#7F7F7F', + fontSize: 18 + }, + axisLine: { + show: false, + lineStyle: { + shadowColor: '#F5F4F4', + shadowBlur: 10 + } + } + }, + series: [ + { + name: '鍋ュ悍绉戝', + type: 'radar', + z: 1, + areaStyle: { + color: '#E5E3E3' //闃村奖 + }, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#34BBC4", + }, + lineStyle: {//绾挎潯鏍峰紡 + color: "#C0BEBD" + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + value: [50, 16, 22, 78, 55, 82, 67, 23], + } + ] + }, + { + name: '鍒涢�犳�ц〃杈�', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#E1AD04" + }, + lineStyle: { + width: 0, + labelLine: { + show: false, //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', '1000', '1000', 23] + } + ] + }, + { + name: '绉戞妧', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#6D67AD" + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', '1000', '67', '1000'] + } + ] + }, + { + name: '浜�', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#EC7864" + }, + lineStyle: { + width: 0, + labelLine: { + show: false, //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '1000', '82', '1000', '1000'] + } + ] + }, + { + name: '缁勭粐', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#D78EBB" + }, + lineStyle: { + width: 0, + labelLine: { + show: false, //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '1000', '55', '1000', '1000', '1000'] + } + ] + }, + { + name: '褰卞搷', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#E8497D" + }, + lineStyle: { + width: 0, + labelLine: { + show: false, //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '1000', '78', '1000', '1000', '1000', '1000'], + } + ] + }, + { + name: '鑷劧', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#62BEA4" + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + }, + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '1000', '22', '1000', '1000', '1000', '1000', '1000'], + } + ] + }, + { + name: '浜嬬墿', + type: 'radar', + z: 2, + itemStyle: {//鎶樼嚎鎷愮偣鏍囧織鐨勬牱寮� + color: "#4976BA" + }, + lineStyle: { + width: 0, + labelLine: { + show: false //闅愯棌鏍囩ず绾� + } + }, + symbolSize: 20,//鍦嗙偣澶у皬 + symbol: "circle",//鍦嗙偣鏍峰紡 + data: [ + { + // 鎬濇兂鏄細璁剧疆鏃犵嚎澶э紝鍘绘帀閾炬帴绾垮嵆鍙� + value: ['1000', '16', '1000', '1000', '1000', '1000', '1000', '1000'], + } + ] + } + ] + } + // 缁樺埗鍥捐〃 + myChart.setOption(option) + } + } +} +</script> +<style scoped> +/* 鑳屾櫙鍥剧墖*/ +.page1{ + margin-top: 50px; + background:url('~@/assets/report/page1.png') no-repeat; + width: 100%; + height: 100%; + position:fixed; + background-size: cover; + background-size:100% 100%; + overflow:auto; +} + +.bg { + width: 500px; + height: 300px; + background:url('~@/assets/report/page1.png') no-repeat; + border: 1px solid #72bf3d; + /* background-size: contain; */ + /* background-size: cover; */ +} + +.font { + font-family: 榛戜綋; +} + +</style> diff --git a/src/views/report/reportView.vue b/src/views/report/reportView.vue new file mode 100644 index 0000000..43e6adb --- /dev/null +++ b/src/views/report/reportView.vue @@ -0,0 +1,46 @@ +<template> + <div class="m-pdf"> + <div id="pdf-content"></div> + </div> +</template> +<script> +import Pdfh5 from 'pdfh5' +import 'pdfh5/css/pdfh5.css' + +export default { + name: 'Pdfh5', + data () { + return { + pdfh5: null, + // 鍙紩鍏ョ綉缁滄枃浠舵垨鑰呮湰鍦版枃浠� + pdfUrl: this.$route.query.fileUrl + // 濡傛灉寮曞叆鏈湴pdf鏂囦欢锛岄渶瑕佸皢pdf鏀惧湪public鏂囦欢澶逛笅锛屽紩鐢ㄦ椂浣跨敤缁濆璺緞锛�/锛氳〃绀簆ublic鏂囦欢澶癸級 + } + }, + mounted () { + console.log(this.pdfUrl) + this.initPdf() + }, + methods: { + initPdf () { + // pdfh5瀹炰緥鍖栨椂浼犱袱涓弬鏁帮細selector閫夋嫨鍣紝options閰嶇疆椤瑰弬鏁帮紝浼氳繑鍥炰竴涓猵dfh5瀹炰緥瀵硅薄锛屽彲浠ョ敤鏉ユ搷浣減df锛岀洃鍚浉鍏充簨浠� + // pdfh5 = new Pdfh5(selector, options) goto鍒濆鍒扮鍑犻〉锛宭ogo璁剧疆姣忎竴椤祊df涓婄殑姘村嵃 + this.pdfh5 = new Pdfh5('#report-content', { + pdfurl: this.pdfUrl, + goto: 1 + // 璁剧疆姣忎竴椤祊df涓婄殑姘村嵃 + // logo: { src: require('@/assets/images/bus/icon_head@2x.png'), x: 420, y: 700, width: 120, height: 120 } + }) + this.pdfh5.scrollEnable(true) // 鍏佽pdf婊氬姩 + // 鐩戝惉pdf鍑嗗寮�濮嬫覆鏌擄紝姝ゆ椂鍙互鎷垮埌pdf鎬婚〉鏁� + this.pdfh5.on('ready', function () { + console.log('鎬婚〉鏁�:' + this.totalNum) + }) + // 鐩戝惉pdf鍔犺浇瀹屾垚浜嬩欢锛屽姞杞藉け璐ャ�佹覆鏌撴垚鍔熼兘浼氳Е鍙� + this.pdfh5.on('complete', (status, msg, time) => { + console.log('鐘舵��:' + status + '锛屼俊鎭�:' + msg + '锛岃�楁椂:' + time + '姣') + }) + } + } +} +</script> diff --git a/vue.config.js b/vue.config.js index 84c0d8f..c3aebea 100644 --- a/vue.config.js +++ b/vue.config.js @@ -19,6 +19,7 @@ hotOnly: false, proxy: { '/': { + ws: false, target: 'http://127.0.0.1:8090', changeOrigin: true } -- Gitblit v1.9.1