Compare commits
17 Commits
Author | SHA1 | Date |
---|---|---|
|
a1bcd46488 | 3 years ago |
|
d8eba32521 | 3 years ago |
|
41660c0246 | 3 years ago |
|
e73ed4cbb6 | 3 years ago |
|
04c9511b3e | 3 years ago |
|
34e3871e79 | 3 years ago |
|
8fdc5b0ba1 | 3 years ago |
|
fa31283b5d | 3 years ago |
|
dc65ffa6eb | 3 years ago |
|
760c14e37e | 3 years ago |
|
191b289e82 | 3 years ago |
|
639b82510c | 3 years ago |
|
b30977a2d4 | 3 years ago |
|
d3bc164451 | 3 years ago |
|
75917e50ed | 3 years ago |
|
0854a84da4 | 3 years ago |
|
b31ecd7f82 | 3 years ago |
@ -0,0 +1,156 @@ |
|||
# Details |
|||
|
|||
Date : 2022-11-30 16:10:14 |
|||
|
|||
Directory d:\\job_project\\暴风眼\\tall-qcp2.0 |
|||
|
|||
Total : 141 files, 18575 codes, 2491 comments, 1999 blanks, all 23065 lines |
|||
|
|||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) |
|||
|
|||
## Files |
|||
| filename | language | code | comment | blank | total | |
|||
| :--- | :--- | ---: | ---: | ---: | ---: | |
|||
| [.env](/.env) | Properties | 0 | 0 | 1 | 1 | |
|||
| [.eslintrc.js](/.eslintrc.js) | JavaScript | 33 | 14 | 2 | 49 | |
|||
| [.hbuilderx/launch.json](/.hbuilderx/launch.json) | JSON with Comments | 10 | 1 | 1 | 12 | |
|||
| [.prettierignore](/.prettierignore) | Ignore | 9 | 0 | 1 | 10 | |
|||
| [.prettierrc](/.prettierrc) | JSON | 13 | 0 | 1 | 14 | |
|||
| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 21 | 0 | 5 | 26 | |
|||
| [README.md](/README.md) | Markdown | 77 | 0 | 25 | 102 | |
|||
| [babel.config.js](/babel.config.js) | JavaScript | 51 | 0 | 7 | 58 | |
|||
| [commitlint.config.js](/commitlint.config.js) | JavaScript | 1 | 0 | 1 | 2 | |
|||
| [jest.config.js](/jest.config.js) | JavaScript | 48 | 4 | 1 | 53 | |
|||
| [package.json](/package.json) | JSON | 116 | 0 | 1 | 117 | |
|||
| [postcss.config.js](/postcss.config.js) | JavaScript | 20 | 0 | 2 | 22 | |
|||
| [public/img/icons/safari-pinned-tab.svg](/public/img/icons/safari-pinned-tab.svg) | SVG | 3 | 0 | 1 | 4 | |
|||
| [public/index.html](/public/index.html) | HTML | 24 | 1 | 4 | 29 | |
|||
| [src/App.vue](/src/App.vue) | Vue | 118 | 31 | 10 | 159 | |
|||
| [src/apis/carbasics.js](/src/apis/carbasics.js) | JavaScript | 80 | 40 | 7 | 127 | |
|||
| [src/apis/project.js](/src/apis/project.js) | JavaScript | 11 | 5 | 7 | 23 | |
|||
| [src/apis/role.js](/src/apis/role.js) | JavaScript | 40 | 6 | 5 | 51 | |
|||
| [src/apis/tall.js](/src/apis/tall.js) | JavaScript | 36 | 21 | 5 | 62 | |
|||
| [src/apis/task.js](/src/apis/task.js) | JavaScript | 13 | 5 | 2 | 20 | |
|||
| [src/apis/wbs.js](/src/apis/wbs.js) | JavaScript | 5 | 1 | 2 | 8 | |
|||
| [src/common/styles/app.scss](/src/common/styles/app.scss) | SCSS | 6 | 0 | 1 | 7 | |
|||
| [src/common/styles/iconfont.css](/src/common/styles/iconfont.css) | CSS | 195 | 0 | 63 | 258 | |
|||
| [src/common/styles/iconfont.scss](/src/common/styles/iconfont.scss) | SCSS | 195 | 0 | 63 | 258 | |
|||
| [src/common/styles/tailwind.scss](/src/common/styles/tailwind.scss) | SCSS | 3,488 | 0 | 1,030 | 4,518 | |
|||
| [src/components/Calendar/Calendar.vue](/src/components/Calendar/Calendar.vue) | Vue | 400 | 45 | 29 | 474 | |
|||
| [src/components/Calendar/generateDates.js](/src/components/Calendar/generateDates.js) | JavaScript | 110 | 22 | 5 | 137 | |
|||
| [src/components/Demonstration/Demonstration.vue](/src/components/Demonstration/Demonstration.vue) | Vue | 70 | 1 | 1 | 72 | |
|||
| [src/components/Globals/Globals.vue](/src/components/Globals/Globals.vue) | Vue | 77 | 3 | 9 | 89 | |
|||
| [src/components/ImageCode/ImageCode.vue](/src/components/ImageCode/ImageCode.vue) | Vue | 32 | 1 | 5 | 38 | |
|||
| [src/components/NewRole/NewRole.vue](/src/components/NewRole/NewRole.vue) | Vue | 42 | 0 | 1 | 43 | |
|||
| [src/components/PatientList/PatientList.vue](/src/components/PatientList/PatientList.vue) | Vue | 485 | 31 | 5 | 521 | |
|||
| [src/components/PrettyExchange/PrettyExchange.vue](/src/components/PrettyExchange/PrettyExchange.vue) | Vue | 468 | 19 | 34 | 521 | |
|||
| [src/components/Projects/ProjectItem.vue](/src/components/Projects/ProjectItem.vue) | Vue | 149 | 5 | 12 | 166 | |
|||
| [src/components/Projects/Projects.vue](/src/components/Projects/Projects.vue) | Vue | 51 | 9 | 6 | 66 | |
|||
| [src/components/Roles/Roles.vue](/src/components/Roles/Roles.vue) | Vue | 216 | 25 | 22 | 263 | |
|||
| [src/components/Service/Service.vue](/src/components/Service/Service.vue) | Vue | 38 | 0 | 1 | 39 | |
|||
| [src/components/Share/Share copy.vue](/src/components/Share/Share%20copy.vue) | Vue | 106 | 15 | 14 | 135 | |
|||
| [src/components/Share/Share.vue](/src/components/Share/Share.vue) | Vue | 84 | 4 | 11 | 99 | |
|||
| [src/components/StatisticsCards/StatisticsCards.vue](/src/components/StatisticsCards/StatisticsCards.vue) | Vue | 161 | 5 | 11 | 177 | |
|||
| [src/components/StatisticsLists/StatisticsLists.vue](/src/components/StatisticsLists/StatisticsLists.vue) | Vue | 71 | 1 | 10 | 82 | |
|||
| [src/components/Test/Test.vue](/src/components/Test/Test.vue) | Vue | 896 | 81 | 5 | 982 | |
|||
| [src/components/Test/component/Talk.vue](/src/components/Test/component/Talk.vue) | Vue | 209 | 51 | 3 | 263 | |
|||
| [src/components/TimeLine/TimeLine.vue](/src/components/TimeLine/TimeLine.vue) | Vue | 104 | 12 | 11 | 127 | |
|||
| [src/components/TimeLine/component/Barrier.vue](/src/components/TimeLine/component/Barrier.vue) | Vue | 41 | 0 | 2 | 43 | |
|||
| [src/components/TimeLine/component/TaskTools.vue](/src/components/TimeLine/component/TaskTools.vue) | Vue | 155 | 12 | 19 | 186 | |
|||
| [src/components/TimeLine/component/TimeBox.vue](/src/components/TimeLine/component/TimeBox.vue) | Vue | 125 | 6 | 12 | 143 | |
|||
| [src/components/TimeLine/component/TimeStatus.vue](/src/components/TimeLine/component/TimeStatus.vue) | Vue | 196 | 18 | 18 | 232 | |
|||
| [src/components/TimeLine/component/Title.vue](/src/components/TimeLine/component/Title.vue) | Vue | 7 | 0 | 1 | 8 | |
|||
| [src/components/Title/Title.vue](/src/components/Title/Title.vue) | Vue | 188 | 29 | 19 | 236 | |
|||
| [src/components/Title/components/CreateTask.vue](/src/components/Title/components/CreateTask.vue) | Vue | 387 | 49 | 25 | 461 | |
|||
| [src/components/Title/components/ShareProject.vue](/src/components/Title/components/ShareProject.vue) | Vue | 184 | 12 | 15 | 211 | |
|||
| [src/components/Upload/Upload.vue](/src/components/Upload/Upload.vue) | Vue | 228 | 8 | 8 | 244 | |
|||
| [src/components/VolumeProject/VolumeProject.vue](/src/components/VolumeProject/VolumeProject.vue) | Vue | 96 | 17 | 2 | 115 | |
|||
| [src/components/Volume/Volume.vue](/src/components/Volume/Volume.vue) | Vue | 99 | 6 | 2 | 107 | |
|||
| [src/components/select-lay/select-lay.vue](/src/components/select-lay/select-lay.vue) | Vue | 376 | 18 | 25 | 419 | |
|||
| [src/config/app.js](/src/config/app.js) | JavaScript | 6 | 0 | 1 | 7 | |
|||
| [src/config/db.js](/src/config/db.js) | JavaScript | 3 | 0 | 1 | 4 | |
|||
| [src/config/plugin.js](/src/config/plugin.js) | JavaScript | 94 | 2 | 2 | 98 | |
|||
| [src/config/task.js](/src/config/task.js) | JavaScript | 1 | 1 | 1 | 3 | |
|||
| [src/config/time.js](/src/config/time.js) | JavaScript | 16 | 1 | 1 | 18 | |
|||
| [src/config/user copy.js](/src/config/user%20copy.js) | JavaScript | 37 | 3 | 4 | 44 | |
|||
| [src/config/user.js](/src/config/user.js) | JavaScript | 37 | 4 | 4 | 45 | |
|||
| [src/config/zIndex.js](/src/config/zIndex.js) | JavaScript | 3 | 2 | 1 | 6 | |
|||
| [src/main.js](/src/main.js) | JavaScript | 36 | 9 | 10 | 55 | |
|||
| [src/manifest.json](/src/manifest.json) | JSON | 74 | 6 | 2 | 82 | |
|||
| [src/mixins/userAuth.js](/src/mixins/userAuth.js) | JavaScript | 40 | 5 | 4 | 49 | |
|||
| [src/pages.json](/src/pages.json) | JSON | 123 | 0 | 1 | 124 | |
|||
| [src/pages/Apply/index.vue](/src/pages/Apply/index.vue) | Vue | 413 | 27 | 4 | 444 | |
|||
| [src/pages/BL/BL-zhuce.vue](/src/pages/BL/BL-zhuce.vue) | Vue | 193 | 4 | 1 | 198 | |
|||
| [src/pages/BL/mixin.js](/src/pages/BL/mixin.js) | JavaScript | 110 | 2 | 2 | 114 | |
|||
| [src/pages/Statistics/components/Title.vue](/src/pages/Statistics/components/Title.vue) | Vue | 259 | 31 | 5 | 295 | |
|||
| [src/pages/Statistics/index.vue](/src/pages/Statistics/index.vue) | Vue | 80 | 21 | 4 | 105 | |
|||
| [src/pages/camera/camera.vue](/src/pages/camera/camera.vue) | Vue | 187 | 20 | 5 | 212 | |
|||
| [src/pages/detail-webview/detail-webview.vue](/src/pages/detail-webview/detail-webview.vue) | Vue | 42 | 1 | 7 | 50 | |
|||
| [src/pages/establish/establish.vue](/src/pages/establish/establish.vue) | Vue | 142 | 306 | 2 | 450 | |
|||
| [src/pages/get-phone-power/get-phone-power.vue](/src/pages/get-phone-power/get-phone-power.vue) | Vue | 126 | 27 | 4 | 157 | |
|||
| [src/pages/index/index.vue](/src/pages/index/index.vue) | Vue | 450 | 82 | 21 | 553 | |
|||
| [src/pages/info/info.vue](/src/pages/info/info.vue) | Vue | 353 | 23 | 7 | 383 | |
|||
| [src/pages/inner/inner.vue](/src/pages/inner/inner.vue) | Vue | 360 | 43 | 6 | 409 | |
|||
| [src/pages/inner/mixin.js](/src/pages/inner/mixin.js) | JavaScript | 1,093 | 10 | 2 | 1,105 | |
|||
| [src/pages/outside/mixin.js](/src/pages/outside/mixin.js) | JavaScript | 1,099 | 6 | 6 | 1,111 | |
|||
| [src/pages/outside/outside.vue](/src/pages/outside/outside.vue) | Vue | 346 | 34 | 2 | 382 | |
|||
| [src/pages/patientLine/patientLine.vue](/src/pages/patientLine/patientLine.vue) | Vue | 234 | 12 | 3 | 249 | |
|||
| [src/pages/patient/patient.vue](/src/pages/patient/patient.vue) | Vue | 85 | 368 | 2 | 455 | |
|||
| [src/pages/phone-bind/phone-bind.vue](/src/pages/phone-bind/phone-bind.vue) | Vue | 184 | 3 | 15 | 202 | |
|||
| [src/pages/project-webview/project-webview.vue](/src/pages/project-webview/project-webview.vue) | Vue | 34 | 3 | 5 | 42 | |
|||
| [src/pages/questionnaire-webview/questionnaire-webview.vue](/src/pages/questionnaire-webview/questionnaire-webview.vue) | Vue | 27 | 2 | 3 | 32 | |
|||
| [src/pages/task-page/task-page.vue](/src/pages/task-page/task-page.vue) | Vue | 274 | 81 | 27 | 382 | |
|||
| [src/registerServiceWorker.js](/src/registerServiceWorker.js) | JavaScript | 26 | 1 | 3 | 30 | |
|||
| [src/store/carbasics/actions.js](/src/store/carbasics/actions.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/carbasics/getters.js](/src/store/carbasics/getters.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/carbasics/index.js](/src/store/carbasics/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/carbasics/mutations.js](/src/store/carbasics/mutations.js) | JavaScript | 27 | 38 | 2 | 67 | |
|||
| [src/store/carbasics/state.js](/src/store/carbasics/state.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/db/actions.js](/src/store/db/actions.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/db/getters.js](/src/store/db/getters.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/db/index.js](/src/store/db/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/db/mutations.js](/src/store/db/mutations.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/db/state.js](/src/store/db/state.js) | JavaScript | 6 | 0 | 2 | 8 | |
|||
| [src/store/index.js](/src/store/index.js) | JavaScript | 32 | 14 | 7 | 53 | |
|||
| [src/store/messages/getters.js](/src/store/messages/getters.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/messages/index.js](/src/store/messages/index.js) | JavaScript | 3 | 0 | 2 | 5 | |
|||
| [src/store/messages/mutations.js](/src/store/messages/mutations.js) | JavaScript | 37 | 43 | 7 | 87 | |
|||
| [src/store/messages/state.js](/src/store/messages/state.js) | JavaScript | 7 | 0 | 2 | 9 | |
|||
| [src/store/project/actions.js](/src/store/project/actions.js) | JavaScript | 2 | 0 | 2 | 4 | |
|||
| [src/store/project/getters.js](/src/store/project/getters.js) | JavaScript | 6 | 4 | 2 | 12 | |
|||
| [src/store/project/index.js](/src/store/project/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/project/mutations.js](/src/store/project/mutations.js) | JavaScript | 35 | 30 | 7 | 72 | |
|||
| [src/store/project/state.js](/src/store/project/state.js) | JavaScript | 7 | 1 | 2 | 10 | |
|||
| [src/store/role/actions.js](/src/store/role/actions.js) | JavaScript | 11 | 5 | 2 | 18 | |
|||
| [src/store/role/getters.js](/src/store/role/getters.js) | JavaScript | 11 | 1 | 2 | 14 | |
|||
| [src/store/role/index.js](/src/store/role/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/role/mutations.js](/src/store/role/mutations.js) | JavaScript | 18 | 25 | 6 | 49 | |
|||
| [src/store/role/state.js](/src/store/role/state.js) | JavaScript | 8 | 0 | 2 | 10 | |
|||
| [src/store/socket/actions.js](/src/store/socket/actions.js) | JavaScript | 96 | 44 | 12 | 152 | |
|||
| [src/store/socket/index.js](/src/store/socket/index.js) | JavaScript | 4 | 0 | 2 | 6 | |
|||
| [src/store/socket/mutations.js](/src/store/socket/mutations.js) | JavaScript | 12 | 11 | 4 | 27 | |
|||
| [src/store/socket/state.js](/src/store/socket/state.js) | JavaScript | 6 | 0 | 2 | 8 | |
|||
| [src/store/task/actions.js](/src/store/task/actions.js) | JavaScript | 21 | 10 | 3 | 34 | |
|||
| [src/store/task/getters.js](/src/store/task/getters.js) | JavaScript | 16 | 3 | 5 | 24 | |
|||
| [src/store/task/index.js](/src/store/task/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/task/mutations.js](/src/store/task/mutations.js) | JavaScript | 80 | 104 | 23 | 207 | |
|||
| [src/store/task/state.js](/src/store/task/state.js) | JavaScript | 24 | 0 | 2 | 26 | |
|||
| [src/store/user/actions.js](/src/store/user/actions.js) | JavaScript | 13 | 5 | 2 | 20 | |
|||
| [src/store/user/getters.js](/src/store/user/getters.js) | JavaScript | 12 | 1 | 2 | 15 | |
|||
| [src/store/user/index.js](/src/store/user/index.js) | JavaScript | 11 | 0 | 2 | 13 | |
|||
| [src/store/user/mutations.js](/src/store/user/mutations.js) | JavaScript | 12 | 10 | 3 | 25 | |
|||
| [src/store/user/state.js](/src/store/user/state.js) | JavaScript | 5 | 0 | 1 | 6 | |
|||
| [src/uni.scss](/src/uni.scss) | SCSS | 41 | 23 | 13 | 77 | |
|||
| [src/utils/cache.js](/src/utils/cache.js) | JavaScript | 114 | 55 | 8 | 177 | |
|||
| [src/utils/cacheAndRequest.js](/src/utils/cacheAndRequest.js) | JavaScript | 129 | 48 | 14 | 191 | |
|||
| [src/utils/indexedDB.js](/src/utils/indexedDB.js) | JavaScript | 99 | 51 | 14 | 164 | |
|||
| [src/utils/request.js](/src/utils/request.js) | JavaScript | 39 | 10 | 6 | 55 | |
|||
| [src/utils/storage.js](/src/utils/storage.js) | JavaScript | 67 | 37 | 9 | 113 | |
|||
| [src/utils/tall.js](/src/utils/tall.js) | JavaScript | 33 | 0 | 6 | 39 | |
|||
| [src/utils/time.js](/src/utils/time.js) | JavaScript | 242 | 103 | 22 | 367 | |
|||
| [src/utils/ui.js](/src/utils/ui.js) | JavaScript | 35 | 17 | 5 | 57 | |
|||
| [src/utils/upload.js](/src/utils/upload.js) | JavaScript | 89 | 16 | 6 | 111 | |
|||
| [tsconfig.json](/tsconfig.json) | JSON with Comments | 9 | 0 | 1 | 10 | |
|||
| [vue.config.js](/vue.config.js) | JavaScript | 27 | 8 | 2 | 37 | |
|||
|
|||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) |
@ -0,0 +1,15 @@ |
|||
# Diff Details |
|||
|
|||
Date : 2022-11-30 16:10:14 |
|||
|
|||
Directory d:\\job_project\\暴风眼\\tall-qcp2.0 |
|||
|
|||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines |
|||
|
|||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details |
|||
|
|||
## Files |
|||
| filename | language | code | comment | blank | total | |
|||
| :--- | :--- | ---: | ---: | ---: | ---: | |
|||
|
|||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details |
|
@ -0,0 +1,19 @@ |
|||
# Diff Summary |
|||
|
|||
Date : 2022-11-30 16:10:14 |
|||
|
|||
Directory d:\\job_project\\暴风眼\\tall-qcp2.0 |
|||
|
|||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines |
|||
|
|||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) |
|||
|
|||
## Languages |
|||
| language | files | code | comment | blank | total | |
|||
| :--- | ---: | ---: | ---: | ---: | ---: | |
|||
|
|||
## Directories |
|||
| path | files | code | comment | blank | total | |
|||
| :--- | ---: | ---: | ---: | ---: | ---: | |
|||
|
|||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) |
@ -0,0 +1,22 @@ |
|||
Date : 2022-11-30 16:10:14 |
|||
Directory : d:\job_project\暴风眼\tall-qcp2.0 |
|||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines |
|||
|
|||
Languages |
|||
+----------+------------+------------+------------+------------+------------+ |
|||
| language | files | code | comment | blank | total | |
|||
+----------+------------+------------+------------+------------+------------+ |
|||
+----------+------------+------------+------------+------------+------------+ |
|||
|
|||
Directories |
|||
+------+------------+------------+------------+------------+------------+ |
|||
| path | files | code | comment | blank | total | |
|||
+------+------------+------------+------------+------------+------------+ |
|||
+------+------------+------------+------------+------------+------------+ |
|||
|
|||
Files |
|||
+----------+----------+------------+------------+------------+------------+ |
|||
| filename | language | code | comment | blank | total | |
|||
+----------+----------+------------+------------+------------+------------+ |
|||
| Total | | 0 | 0 | 0 | 0 | |
|||
+----------+----------+------------+------------+------------+------------+ |
|
@ -0,0 +1,94 @@ |
|||
# Summary |
|||
|
|||
Date : 2022-11-30 16:10:14 |
|||
|
|||
Directory d:\\job_project\\暴风眼\\tall-qcp2.0 |
|||
|
|||
Total : 141 files, 18575 codes, 2491 comments, 1999 blanks, all 23065 lines |
|||
|
|||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) |
|||
|
|||
## Languages |
|||
| language | files | code | comment | blank | total | |
|||
| :--- | ---: | ---: | ---: | ---: | ---: | |
|||
| Vue | 49 | 9,648 | 1,602 | 471 | 11,721 | |
|||
| JavaScript | 75 | 4,523 | 858 | 314 | 5,695 | |
|||
| SCSS | 4 | 3,730 | 23 | 1,107 | 4,860 | |
|||
| JSON | 4 | 326 | 6 | 5 | 337 | |
|||
| CSS | 1 | 195 | 0 | 63 | 258 | |
|||
| Markdown | 2 | 98 | 0 | 30 | 128 | |
|||
| HTML | 1 | 24 | 1 | 4 | 29 | |
|||
| JSON with Comments | 2 | 19 | 1 | 2 | 22 | |
|||
| Ignore | 1 | 9 | 0 | 1 | 10 | |
|||
| SVG | 1 | 3 | 0 | 1 | 4 | |
|||
| Properties | 1 | 0 | 0 | 1 | 1 | |
|||
|
|||
## Directories |
|||
| path | files | code | comment | blank | total | |
|||
| :--- | ---: | ---: | ---: | ---: | ---: | |
|||
| . | 141 | 18,575 | 2,491 | 1,999 | 23,065 | |
|||
| .hbuilderx | 1 | 10 | 1 | 1 | 12 | |
|||
| public | 2 | 27 | 1 | 5 | 33 | |
|||
| public\\img | 1 | 3 | 0 | 1 | 4 | |
|||
| public\\img\\icons | 1 | 3 | 0 | 1 | 4 | |
|||
| src | 125 | 18,113 | 2,463 | 1,943 | 22,519 | |
|||
| src\\apis | 6 | 185 | 78 | 28 | 291 | |
|||
| src\\common | 4 | 3,884 | 0 | 1,157 | 5,041 | |
|||
| src\\common\\styles | 4 | 3,884 | 0 | 1,157 | 5,041 | |
|||
| src\\components | 31 | 5,851 | 505 | 343 | 6,699 | |
|||
| src\\components\\Calendar | 2 | 510 | 67 | 34 | 611 | |
|||
| src\\components\\Demonstration | 1 | 70 | 1 | 1 | 72 | |
|||
| src\\components\\Globals | 1 | 77 | 3 | 9 | 89 | |
|||
| src\\components\\ImageCode | 1 | 32 | 1 | 5 | 38 | |
|||
| src\\components\\NewRole | 1 | 42 | 0 | 1 | 43 | |
|||
| src\\components\\PatientList | 1 | 485 | 31 | 5 | 521 | |
|||
| src\\components\\PrettyExchange | 1 | 468 | 19 | 34 | 521 | |
|||
| src\\components\\Projects | 2 | 200 | 14 | 18 | 232 | |
|||
| src\\components\\Roles | 1 | 216 | 25 | 22 | 263 | |
|||
| src\\components\\Service | 1 | 38 | 0 | 1 | 39 | |
|||
| src\\components\\Share | 2 | 190 | 19 | 25 | 234 | |
|||
| src\\components\\StatisticsCards | 1 | 161 | 5 | 11 | 177 | |
|||
| src\\components\\StatisticsLists | 1 | 71 | 1 | 10 | 82 | |
|||
| src\\components\\Test | 2 | 1,105 | 132 | 8 | 1,245 | |
|||
| src\\components\\Test\\component | 1 | 209 | 51 | 3 | 263 | |
|||
| src\\components\\TimeLine | 6 | 628 | 48 | 63 | 739 | |
|||
| src\\components\\TimeLine\\component | 5 | 524 | 36 | 52 | 612 | |
|||
| src\\components\\Title | 3 | 759 | 90 | 59 | 908 | |
|||
| src\\components\\Title\\components | 2 | 571 | 61 | 40 | 672 | |
|||
| src\\components\\Upload | 1 | 228 | 8 | 8 | 244 | |
|||
| src\\components\\Volume | 1 | 99 | 6 | 2 | 107 | |
|||
| src\\components\\VolumeProject | 1 | 96 | 17 | 2 | 115 | |
|||
| src\\components\\select-lay | 1 | 376 | 18 | 25 | 419 | |
|||
| src\\config | 8 | 197 | 13 | 15 | 225 | |
|||
| src\\mixins | 1 | 40 | 5 | 4 | 49 | |
|||
| src\\pages | 21 | 6,091 | 1,106 | 133 | 7,330 | |
|||
| src\\pages\\Apply | 1 | 413 | 27 | 4 | 444 | |
|||
| src\\pages\\BL | 2 | 303 | 6 | 3 | 312 | |
|||
| src\\pages\\Statistics | 2 | 339 | 52 | 9 | 400 | |
|||
| src\\pages\\Statistics\\components | 1 | 259 | 31 | 5 | 295 | |
|||
| src\\pages\\camera | 1 | 187 | 20 | 5 | 212 | |
|||
| src\\pages\\detail-webview | 1 | 42 | 1 | 7 | 50 | |
|||
| src\\pages\\establish | 1 | 142 | 306 | 2 | 450 | |
|||
| src\\pages\\get-phone-power | 1 | 126 | 27 | 4 | 157 | |
|||
| src\\pages\\index | 1 | 450 | 82 | 21 | 553 | |
|||
| src\\pages\\info | 1 | 353 | 23 | 7 | 383 | |
|||
| src\\pages\\inner | 2 | 1,453 | 53 | 8 | 1,514 | |
|||
| src\\pages\\outside | 2 | 1,445 | 40 | 8 | 1,493 | |
|||
| src\\pages\\patient | 1 | 85 | 368 | 2 | 455 | |
|||
| src\\pages\\patientLine | 1 | 234 | 12 | 3 | 249 | |
|||
| src\\pages\\phone-bind | 1 | 184 | 3 | 15 | 202 | |
|||
| src\\pages\\project-webview | 1 | 34 | 3 | 5 | 42 | |
|||
| src\\pages\\questionnaire-webview | 1 | 27 | 2 | 3 | 32 | |
|||
| src\\pages\\task-page | 1 | 274 | 81 | 27 | 382 | |
|||
| src\\store | 39 | 600 | 349 | 134 | 1,083 | |
|||
| src\\store\\carbasics | 5 | 53 | 38 | 10 | 101 | |
|||
| src\\store\\db | 5 | 23 | 0 | 10 | 33 | |
|||
| src\\store\\messages | 4 | 49 | 43 | 13 | 105 | |
|||
| src\\store\\project | 5 | 61 | 35 | 15 | 111 | |
|||
| src\\store\\role | 5 | 59 | 31 | 14 | 104 | |
|||
| src\\store\\socket | 4 | 118 | 55 | 20 | 193 | |
|||
| src\\store\\task | 5 | 152 | 117 | 35 | 304 | |
|||
| src\\store\\user | 5 | 53 | 16 | 10 | 79 | |
|||
| src\\utils | 9 | 847 | 337 | 90 | 1,274 | |
|||
|
|||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) |
@ -0,0 +1,238 @@ |
|||
Date : 2022-11-30 16:10:14 |
|||
Directory : d:\job_project\暴风眼\tall-qcp2.0 |
|||
Total : 141 files, 18575 codes, 2491 comments, 1999 blanks, all 23065 lines |
|||
|
|||
Languages |
|||
+--------------------+------------+------------+------------+------------+------------+ |
|||
| language | files | code | comment | blank | total | |
|||
+--------------------+------------+------------+------------+------------+------------+ |
|||
| Vue | 49 | 9,648 | 1,602 | 471 | 11,721 | |
|||
| JavaScript | 75 | 4,523 | 858 | 314 | 5,695 | |
|||
| SCSS | 4 | 3,730 | 23 | 1,107 | 4,860 | |
|||
| JSON | 4 | 326 | 6 | 5 | 337 | |
|||
| CSS | 1 | 195 | 0 | 63 | 258 | |
|||
| Markdown | 2 | 98 | 0 | 30 | 128 | |
|||
| HTML | 1 | 24 | 1 | 4 | 29 | |
|||
| JSON with Comments | 2 | 19 | 1 | 2 | 22 | |
|||
| Ignore | 1 | 9 | 0 | 1 | 10 | |
|||
| SVG | 1 | 3 | 0 | 1 | 4 | |
|||
| Properties | 1 | 0 | 0 | 1 | 1 | |
|||
+--------------------+------------+------------+------------+------------+------------+ |
|||
|
|||
Directories |
|||
+------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ |
|||
| path | files | code | comment | blank | total | |
|||
+------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ |
|||
| . | 141 | 18,575 | 2,491 | 1,999 | 23,065 | |
|||
| .hbuilderx | 1 | 10 | 1 | 1 | 12 | |
|||
| public | 2 | 27 | 1 | 5 | 33 | |
|||
| public\img | 1 | 3 | 0 | 1 | 4 | |
|||
| public\img\icons | 1 | 3 | 0 | 1 | 4 | |
|||
| src | 125 | 18,113 | 2,463 | 1,943 | 22,519 | |
|||
| src\apis | 6 | 185 | 78 | 28 | 291 | |
|||
| src\common | 4 | 3,884 | 0 | 1,157 | 5,041 | |
|||
| src\common\styles | 4 | 3,884 | 0 | 1,157 | 5,041 | |
|||
| src\components | 31 | 5,851 | 505 | 343 | 6,699 | |
|||
| src\components\Calendar | 2 | 510 | 67 | 34 | 611 | |
|||
| src\components\Demonstration | 1 | 70 | 1 | 1 | 72 | |
|||
| src\components\Globals | 1 | 77 | 3 | 9 | 89 | |
|||
| src\components\ImageCode | 1 | 32 | 1 | 5 | 38 | |
|||
| src\components\NewRole | 1 | 42 | 0 | 1 | 43 | |
|||
| src\components\PatientList | 1 | 485 | 31 | 5 | 521 | |
|||
| src\components\PrettyExchange | 1 | 468 | 19 | 34 | 521 | |
|||
| src\components\Projects | 2 | 200 | 14 | 18 | 232 | |
|||
| src\components\Roles | 1 | 216 | 25 | 22 | 263 | |
|||
| src\components\Service | 1 | 38 | 0 | 1 | 39 | |
|||
| src\components\Share | 2 | 190 | 19 | 25 | 234 | |
|||
| src\components\StatisticsCards | 1 | 161 | 5 | 11 | 177 | |
|||
| src\components\StatisticsLists | 1 | 71 | 1 | 10 | 82 | |
|||
| src\components\Test | 2 | 1,105 | 132 | 8 | 1,245 | |
|||
| src\components\Test\component | 1 | 209 | 51 | 3 | 263 | |
|||
| src\components\TimeLine | 6 | 628 | 48 | 63 | 739 | |
|||
| src\components\TimeLine\component | 5 | 524 | 36 | 52 | 612 | |
|||
| src\components\Title | 3 | 759 | 90 | 59 | 908 | |
|||
| src\components\Title\components | 2 | 571 | 61 | 40 | 672 | |
|||
| src\components\Upload | 1 | 228 | 8 | 8 | 244 | |
|||
| src\components\Volume | 1 | 99 | 6 | 2 | 107 | |
|||
| src\components\VolumeProject | 1 | 96 | 17 | 2 | 115 | |
|||
| src\components\select-lay | 1 | 376 | 18 | 25 | 419 | |
|||
| src\config | 8 | 197 | 13 | 15 | 225 | |
|||
| src\mixins | 1 | 40 | 5 | 4 | 49 | |
|||
| src\pages | 21 | 6,091 | 1,106 | 133 | 7,330 | |
|||
| src\pages\Apply | 1 | 413 | 27 | 4 | 444 | |
|||
| src\pages\BL | 2 | 303 | 6 | 3 | 312 | |
|||
| src\pages\Statistics | 2 | 339 | 52 | 9 | 400 | |
|||
| src\pages\Statistics\components | 1 | 259 | 31 | 5 | 295 | |
|||
| src\pages\camera | 1 | 187 | 20 | 5 | 212 | |
|||
| src\pages\detail-webview | 1 | 42 | 1 | 7 | 50 | |
|||
| src\pages\establish | 1 | 142 | 306 | 2 | 450 | |
|||
| src\pages\get-phone-power | 1 | 126 | 27 | 4 | 157 | |
|||
| src\pages\index | 1 | 450 | 82 | 21 | 553 | |
|||
| src\pages\info | 1 | 353 | 23 | 7 | 383 | |
|||
| src\pages\inner | 2 | 1,453 | 53 | 8 | 1,514 | |
|||
| src\pages\outside | 2 | 1,445 | 40 | 8 | 1,493 | |
|||
| src\pages\patient | 1 | 85 | 368 | 2 | 455 | |
|||
| src\pages\patientLine | 1 | 234 | 12 | 3 | 249 | |
|||
| src\pages\phone-bind | 1 | 184 | 3 | 15 | 202 | |
|||
| src\pages\project-webview | 1 | 34 | 3 | 5 | 42 | |
|||
| src\pages\questionnaire-webview | 1 | 27 | 2 | 3 | 32 | |
|||
| src\pages\task-page | 1 | 274 | 81 | 27 | 382 | |
|||
| src\store | 39 | 600 | 349 | 134 | 1,083 | |
|||
| src\store\carbasics | 5 | 53 | 38 | 10 | 101 | |
|||
| src\store\db | 5 | 23 | 0 | 10 | 33 | |
|||
| src\store\messages | 4 | 49 | 43 | 13 | 105 | |
|||
| src\store\project | 5 | 61 | 35 | 15 | 111 | |
|||
| src\store\role | 5 | 59 | 31 | 14 | 104 | |
|||
| src\store\socket | 4 | 118 | 55 | 20 | 193 | |
|||
| src\store\task | 5 | 152 | 117 | 35 | 304 | |
|||
| src\store\user | 5 | 53 | 16 | 10 | 79 | |
|||
| src\utils | 9 | 847 | 337 | 90 | 1,274 | |
|||
+------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ |
|||
|
|||
Files |
|||
+------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ |
|||
| filename | language | code | comment | blank | total | |
|||
+------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ |
|||
| d:\job_project\暴风眼\tall-qcp2.0\.env | Properties | 0 | 0 | 1 | 1 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\.eslintrc.js | JavaScript | 33 | 14 | 2 | 49 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\.hbuilderx\launch.json | JSON with Comments | 10 | 1 | 1 | 12 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\.prettierignore | Ignore | 9 | 0 | 1 | 10 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\.prettierrc | JSON | 13 | 0 | 1 | 14 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\CHANGELOG.md | Markdown | 21 | 0 | 5 | 26 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\README.md | Markdown | 77 | 0 | 25 | 102 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\babel.config.js | JavaScript | 51 | 0 | 7 | 58 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\commitlint.config.js | JavaScript | 1 | 0 | 1 | 2 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\jest.config.js | JavaScript | 48 | 4 | 1 | 53 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\package.json | JSON | 116 | 0 | 1 | 117 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\postcss.config.js | JavaScript | 20 | 0 | 2 | 22 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\public\img\icons\safari-pinned-tab.svg | SVG | 3 | 0 | 1 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\public\index.html | HTML | 24 | 1 | 4 | 29 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\App.vue | Vue | 118 | 31 | 10 | 159 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\carbasics.js | JavaScript | 80 | 40 | 7 | 127 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\project.js | JavaScript | 11 | 5 | 7 | 23 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\role.js | JavaScript | 40 | 6 | 5 | 51 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\tall.js | JavaScript | 36 | 21 | 5 | 62 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\task.js | JavaScript | 13 | 5 | 2 | 20 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\apis\wbs.js | JavaScript | 5 | 1 | 2 | 8 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\app.scss | SCSS | 6 | 0 | 1 | 7 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.css | CSS | 195 | 0 | 63 | 258 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.scss | SCSS | 195 | 0 | 63 | 258 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\tailwind.scss | SCSS | 3,488 | 0 | 1,030 | 4,518 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\Calendar.vue | Vue | 400 | 45 | 29 | 474 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\generateDates.js | JavaScript | 110 | 22 | 5 | 137 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Demonstration\Demonstration.vue | Vue | 70 | 1 | 1 | 72 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Globals\Globals.vue | Vue | 77 | 3 | 9 | 89 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\ImageCode\ImageCode.vue | Vue | 32 | 1 | 5 | 38 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\NewRole\NewRole.vue | Vue | 42 | 0 | 1 | 43 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\PatientList\PatientList.vue | Vue | 485 | 31 | 5 | 521 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\PrettyExchange\PrettyExchange.vue | Vue | 468 | 19 | 34 | 521 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\ProjectItem.vue | Vue | 149 | 5 | 12 | 166 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\Projects.vue | Vue | 51 | 9 | 6 | 66 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Roles\Roles.vue | Vue | 216 | 25 | 22 | 263 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Service\Service.vue | Vue | 38 | 0 | 1 | 39 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share copy.vue | Vue | 106 | 15 | 14 | 135 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share.vue | Vue | 84 | 4 | 11 | 99 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsCards\StatisticsCards.vue | Vue | 161 | 5 | 11 | 177 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsLists\StatisticsLists.vue | Vue | 71 | 1 | 10 | 82 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\Test.vue | Vue | 896 | 81 | 5 | 982 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\component\Talk.vue | Vue | 209 | 51 | 3 | 263 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\TimeLine.vue | Vue | 104 | 12 | 11 | 127 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Barrier.vue | Vue | 41 | 0 | 2 | 43 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TaskTools.vue | Vue | 155 | 12 | 19 | 186 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeBox.vue | Vue | 125 | 6 | 12 | 143 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeStatus.vue | Vue | 196 | 18 | 18 | 232 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Title.vue | Vue | 7 | 0 | 1 | 8 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\Title.vue | Vue | 188 | 29 | 19 | 236 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\CreateTask.vue | Vue | 387 | 49 | 25 | 461 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\ShareProject.vue | Vue | 184 | 12 | 15 | 211 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Upload\Upload.vue | Vue | 228 | 8 | 8 | 244 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\VolumeProject\VolumeProject.vue | Vue | 96 | 17 | 2 | 115 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\Volume\Volume.vue | Vue | 99 | 6 | 2 | 107 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\components\select-lay\select-lay.vue | Vue | 376 | 18 | 25 | 419 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\app.js | JavaScript | 6 | 0 | 1 | 7 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\db.js | JavaScript | 3 | 0 | 1 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\plugin.js | JavaScript | 94 | 2 | 2 | 98 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\task.js | JavaScript | 1 | 1 | 1 | 3 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\time.js | JavaScript | 16 | 1 | 1 | 18 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\user copy.js | JavaScript | 37 | 3 | 4 | 44 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\user.js | JavaScript | 37 | 4 | 4 | 45 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\config\zIndex.js | JavaScript | 3 | 2 | 1 | 6 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\main.js | JavaScript | 36 | 9 | 10 | 55 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\manifest.json | JSON | 74 | 6 | 2 | 82 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\mixins\userAuth.js | JavaScript | 40 | 5 | 4 | 49 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages.json | JSON | 123 | 0 | 1 | 124 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\Apply\index.vue | Vue | 413 | 27 | 4 | 444 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\BL-zhuce.vue | Vue | 193 | 4 | 1 | 198 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\mixin.js | JavaScript | 110 | 2 | 2 | 114 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\components\Title.vue | Vue | 259 | 31 | 5 | 295 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\index.vue | Vue | 80 | 21 | 4 | 105 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\camera\camera.vue | Vue | 187 | 20 | 5 | 212 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\detail-webview\detail-webview.vue | Vue | 42 | 1 | 7 | 50 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\establish\establish.vue | Vue | 142 | 306 | 2 | 450 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\get-phone-power\get-phone-power.vue | Vue | 126 | 27 | 4 | 157 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\index\index.vue | Vue | 450 | 82 | 21 | 553 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\info\info.vue | Vue | 353 | 23 | 7 | 383 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\inner.vue | Vue | 360 | 43 | 6 | 409 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\mixin.js | JavaScript | 1,093 | 10 | 2 | 1,105 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\mixin.js | JavaScript | 1,099 | 6 | 6 | 1,111 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\outside.vue | Vue | 346 | 34 | 2 | 382 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\patientLine\patientLine.vue | Vue | 234 | 12 | 3 | 249 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\patient\patient.vue | Vue | 85 | 368 | 2 | 455 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\phone-bind\phone-bind.vue | Vue | 184 | 3 | 15 | 202 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\project-webview\project-webview.vue | Vue | 34 | 3 | 5 | 42 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\questionnaire-webview\questionnaire-webview.vue | Vue | 27 | 2 | 3 | 32 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\pages\task-page\task-page.vue | Vue | 274 | 81 | 27 | 382 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\registerServiceWorker.js | JavaScript | 26 | 1 | 3 | 30 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\actions.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\getters.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\mutations.js | JavaScript | 27 | 38 | 2 | 67 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\state.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\db\actions.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\db\getters.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\db\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\db\mutations.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\db\state.js | JavaScript | 6 | 0 | 2 | 8 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\index.js | JavaScript | 32 | 14 | 7 | 53 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\getters.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\index.js | JavaScript | 3 | 0 | 2 | 5 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\mutations.js | JavaScript | 37 | 43 | 7 | 87 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\state.js | JavaScript | 7 | 0 | 2 | 9 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\project\actions.js | JavaScript | 2 | 0 | 2 | 4 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\project\getters.js | JavaScript | 6 | 4 | 2 | 12 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\project\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\project\mutations.js | JavaScript | 35 | 30 | 7 | 72 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\project\state.js | JavaScript | 7 | 1 | 2 | 10 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\role\actions.js | JavaScript | 11 | 5 | 2 | 18 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\role\getters.js | JavaScript | 11 | 1 | 2 | 14 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\role\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\role\mutations.js | JavaScript | 18 | 25 | 6 | 49 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\role\state.js | JavaScript | 8 | 0 | 2 | 10 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\actions.js | JavaScript | 96 | 44 | 12 | 152 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\index.js | JavaScript | 4 | 0 | 2 | 6 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\mutations.js | JavaScript | 12 | 11 | 4 | 27 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\state.js | JavaScript | 6 | 0 | 2 | 8 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\task\actions.js | JavaScript | 21 | 10 | 3 | 34 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\task\getters.js | JavaScript | 16 | 3 | 5 | 24 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\task\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\task\mutations.js | JavaScript | 80 | 104 | 23 | 207 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\task\state.js | JavaScript | 24 | 0 | 2 | 26 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\user\actions.js | JavaScript | 13 | 5 | 2 | 20 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\user\getters.js | JavaScript | 12 | 1 | 2 | 15 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\user\index.js | JavaScript | 11 | 0 | 2 | 13 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\user\mutations.js | JavaScript | 12 | 10 | 3 | 25 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\store\user\state.js | JavaScript | 5 | 0 | 1 | 6 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\uni.scss | SCSS | 41 | 23 | 13 | 77 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\cache.js | JavaScript | 114 | 55 | 8 | 177 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\cacheAndRequest.js | JavaScript | 129 | 48 | 14 | 191 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\indexedDB.js | JavaScript | 99 | 51 | 14 | 164 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\request.js | JavaScript | 39 | 10 | 6 | 55 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\storage.js | JavaScript | 67 | 37 | 9 | 113 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\tall.js | JavaScript | 33 | 0 | 6 | 39 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\time.js | JavaScript | 242 | 103 | 22 | 367 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\ui.js | JavaScript | 35 | 17 | 5 | 57 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\src\utils\upload.js | JavaScript | 89 | 16 | 6 | 111 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\tsconfig.json | JSON with Comments | 9 | 0 | 1 | 10 | |
|||
| d:\job_project\暴风眼\tall-qcp2.0\vue.config.js | JavaScript | 27 | 8 | 2 | 37 | |
|||
| Total | | 18,575 | 2,491 | 1,999 | 23,065 | |
|||
+------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ |
@ -1,8 +1,8 @@ |
|||
VUE_APP_NODE_ENV=development |
|||
VUE_APP_BASE_URL=http://101.201.226.163 |
|||
VUE_APP_API_URL=http://101.201.226.163/gateway |
|||
VUE_APP_MSG_URL=ws://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_PROJECT_PATH=http://101.201.226.163/carBasicTall |
|||
VUE_APP_QUESTION_PATH=http://101.201.226.163/carbasics |
|||
VUE_APP_BASE_URL=https://test.tall.wiki |
|||
VUE_APP_API_URL=https://test.tall.wiki/gateway1 |
|||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall |
|||
VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics |
|||
VUE_APP_VERSION=v3.1.0 |
|||
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
|||
|
@ -1,8 +1,8 @@ |
|||
VUE_APP_NODE_ENV=production |
|||
VUE_APP_BASE_URL=https://test.tall.wiki |
|||
VUE_APP_API_URL=https://test.tall.wiki/gateway-1 |
|||
VUE_APP_API_URL=https://test.tall.wiki/gateway1 |
|||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall-1 |
|||
VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics-1 |
|||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall |
|||
VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics |
|||
VUE_APP_VERSION=v3.1.0 |
|||
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
|||
|
@ -1,9 +1,25 @@ |
|||
# 0.1.0 (2022-03-07) |
|||
# 0.1.0 (2022-05-26) |
|||
|
|||
### 🐛 Bug 修复 |
|||
范围|描述|commitId |
|||
--|--|-- |
|||
- | 详情页内容迁移 | [2752bc9](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/2752bc9) |
|||
- | ocr识别及答案存储 | [5301c60](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/5301c60) |
|||
- | 病例列表,神内神外界面重构,ocr界面开发及逻辑处理 | [b45b67c](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/b45b67c) |
|||
- | 暴风眼 | [cb74b8b](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/cb74b8b) |
|||
- | 提测试版本 | [b31ecd7](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/b31ecd7) |
|||
- | 修改接口路径 | [75917e5](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/75917e5) |
|||
- | 修改bug | [0854a84](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/0854a84) |
|||
- | bug修复 | [63940a6](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/63940a6) |
|||
|
|||
|
|||
范围|描述|commitId |
|||
--|--|-- |
|||
- | 2.0.4测试环境 | [0f84b7e](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/0f84b7e) |
|||
- | 2.0.2版本号与患者列表bug修改 | [9cdec00](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/9cdec00) |
|||
- | 暴风眼2.0.0上线bug测试及修改 | [6000be9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/6000be9) |
|||
- | 2.0.0上线 | [5a6d721](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/5a6d721) |
|||
- | 静脉溶栓显示及判断bug修复 | [d5a5ca9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/d5a5ca9) |
|||
- | bug修复 | [bb28e16](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/bb28e16) |
|||
- | 多选框等bug修改 | [acf511d](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/acf511d) |
|||
- | 详情页内容迁移 | [2752bc9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/2752bc9) |
|||
- | ocr识别及答案存储 | [5301c60](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/5301c60) |
|||
- | 病例列表,神内神外界面重构,ocr界面开发及逻辑处理 | [b45b67c](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/b45b67c) |
|||
- | 暴风眼 | [cb74b8b](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/cb74b8b) |
|||
|
|||
|
@ -1,19 +1,22 @@ |
|||
const apiUrl = process.env.VUE_APP_API_URL; |
|||
export const carbasics = `${apiUrl}/carbasics/v4.0`; |
|||
|
|||
const install = (Vue, vm) => { |
|||
vm.$u.api = { ...vm.$u.api } || {}; |
|||
//根据id获取项目信息
|
|||
vm.$u.api.findProjectById = param => vm.$u.post(`${uni.$t.domain}/project/findProjectById`, param); |
|||
vm.$u.api.findProjectById = param => vm.$u.post(`${carbasics}/project/findProjectById`, param); |
|||
|
|||
//创建分享连接
|
|||
vm.$u.api.createShare = param => vm.$u.post(`${uni.$t.domain}/share/create`, param); |
|||
vm.$u.api.createShare = param => vm.$u.post(`${carbasics}/share/create`, param); |
|||
|
|||
//点击分享连接
|
|||
vm.$u.api.clickShare = param => vm.$u.post(`${uni.$t.domain}/share/click`, param); |
|||
vm.$u.api.clickShare = param => vm.$u.post(`${carbasics}/share/click`, param); |
|||
|
|||
//查询医院是否填写了调查问卷
|
|||
vm.$u.api.queryNotWrite = param => vm.$u.post(`${uni.$t.domain}/questionnaire/queryNotWrite`, param); |
|||
vm.$u.api.queryNotWrite = param => vm.$u.post(`${carbasics}/questionnaire/queryNotWrite`, param); |
|||
|
|||
// 根据项目id查询当前项目是不是 医院体验项目
|
|||
vm.$u.api.getByProject = param => vm.$u.post(`${uni.$t.domain}/organization/getByProject`, param); |
|||
vm.$u.api.getByProject = param => vm.$u.post(`${carbasics}/organization/getByProject`, param); |
|||
}; |
|||
|
|||
export default { install }; |
|||
|
@ -1,17 +1,19 @@ |
|||
const url = process.env.VUE_APP_API_URL; |
|||
export const carbasics = `${url}/carbasics/v4.0`; |
|||
const install = (Vue, vm) => { |
|||
vm.$u.api = { ...vm.$u.api } || {}; |
|||
vm.$u.api.getGlobal = param => vm.$u.post(`${uni.$t.domain}/task/global`, param); |
|||
vm.$u.api.getPermanent = param => vm.$u.post(`${uni.$t.domain}/task/permanent`, param); |
|||
vm.$u.api.getGlobal = param => vm.$u.post(`${carbasics}/task/global`, param); |
|||
vm.$u.api.getPermanent = param => vm.$u.post(`${carbasics}/task/permanent`, param); |
|||
//根据时间基准点和角色查找定期任务
|
|||
vm.$u.api.getRegularTask = param => vm.$u.post(`${uni.$t.domain}/task/regular`, param); |
|||
vm.$u.api.getRegularTask = param => vm.$u.post(`${carbasics}/task/regular`, param); |
|||
//修改任务状态
|
|||
vm.$u.api.updateTaskType = param => vm.$u.post(`${uni.$t.domain}/task/type`, param); |
|||
vm.$u.api.updateTaskType = param => vm.$u.post(`${carbasics}/task/type`, param); |
|||
//新建任务
|
|||
vm.$u.api.saveTask = param => vm.$u.post(`${uni.$t.domain}/task/save`, param); |
|||
vm.$u.api.saveTask = param => vm.$u.post(`${carbasics}/task/save`, param); |
|||
//克隆任务
|
|||
vm.$u.api.cloneTask = param => vm.$u.post(`${uni.$t.domain}/task/clone`, param); |
|||
vm.$u.api.cloneTask = param => vm.$u.post(`${carbasics}/task/clone`, param); |
|||
//模糊查询 查找项目下的任务
|
|||
vm.$u.api.queryTaskOfProject = param => vm.$u.post(`${uni.$t.domain}/task/queryTaskOfProject`, param); |
|||
vm.$u.api.queryTaskOfProject = param => vm.$u.post(`${carbasics}/task/queryTaskOfProject`, param); |
|||
}; |
|||
|
|||
export default { install }; |
|||
|
@ -0,0 +1,83 @@ |
|||
<template> |
|||
<div class="demonstration-box flex flex-nowrap" :class="patientInfo && patientInfo.isInfo ? 'justify-between' : 'justify-center'"> |
|||
<!-- :style="{ backgroundColor: detailValueType === 1 ? '#40a9ff' : '#6ea4d1' }" --> |
|||
<template v-if="patientInfo && patientInfo.isInfo"> |
|||
<div class="w-full flex justify-between"> |
|||
<view class="flex items-center"> |
|||
<!-- <u-icon name="clock" color="#5990FF" style="margin-right: 4px"></u-icon> --> |
|||
<img src="@/static/指针.png" style="width: 32rpx; height: 32rpx; margin-right: 4px" alt="" /> |
|||
{{ patientInfo.firstAidType }} |
|||
</view> |
|||
<view class="flex"> |
|||
<div style="margin-right: 4px"> |
|||
{{ patientInfo.name ? patientInfo.name : '无名氏' }} |
|||
</div> |
|||
<div style="margin-right: 4px"> |
|||
<span v-if="patientInfo && (patientInfo.gender || patientInfo.gender === 0)"> |
|||
{{ patientInfo.gender === 0 ? '女' : '男' }} |
|||
</span> |
|||
<span v-else>-</span> |
|||
</div> |
|||
<div> |
|||
{{ patientInfo.age ? patientInfo.age + '岁' : '-' }} |
|||
</div> |
|||
</view> |
|||
</div> |
|||
</template> |
|||
<div> |
|||
<span v-if="detailValueType === 1"> 当前为演示模式 </span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
export default { |
|||
name: 'Demonstration', |
|||
data() { |
|||
return {}; |
|||
}, |
|||
computed: mapState('carbasics', ['patientInfo', 'firstAidId', 'detailValueType']), |
|||
async created() { |
|||
await this.getData(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('carbasics', ['setPatientInfo']), |
|||
// 获取病例信息 |
|||
async getData() { |
|||
try { |
|||
const param = { firstAidId: this.firstAidId }; |
|||
const data = await this.$u.api.getPatient(param); |
|||
const info = { |
|||
name: data.name, |
|||
gender: data.gender, |
|||
age: data.age, |
|||
isInfo: true, |
|||
firstAidType: data.firstAidType === 0 ? '急救患者' : '出院患者', |
|||
}; |
|||
this.setPatientInfo(info); |
|||
} catch (error) { |
|||
console.log('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.demonstration-box { |
|||
width: calc(750rpx - 64rpx); |
|||
height: 32px; |
|||
margin: 32rpx 32rpx 0 32rpx; |
|||
text-align: center; |
|||
position: fixed; |
|||
border-radius: 14px; |
|||
padding: 16rpx 24rpx; |
|||
color: #fff; |
|||
background: #e4edff; |
|||
top: 0; |
|||
z-index: 99; |
|||
font-size: 24rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #5990ff; |
|||
} |
|||
</style> |
@ -0,0 +1,42 @@ |
|||
<template> |
|||
<view class="role-box"> |
|||
<view class="role flex items-center justify-between"> |
|||
<view class="flex items-center"> |
|||
<img src="@/static/news/role.png" style="width: 44rpx; height: 44rpx" alt="" /> |
|||
<view class="ml-2 role-name">医生</view> |
|||
</view> |
|||
<u-icon name="arrow-down" color="#4F8BFF" size="34"></u-icon> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.role-name { |
|||
font-size: 32rpx; |
|||
font-weight: bold; |
|||
color: #5991ff; |
|||
} |
|||
.role { |
|||
height: 92rpx; |
|||
background: #e4edff; |
|||
box-shadow: 0px 0px 6rpx 0 #eeeeee; |
|||
border-radius: 24r 24r 0px 0px; |
|||
padding: 24rpx; |
|||
opacity: 1; |
|||
} |
|||
.role-box { |
|||
width: 686rpx; |
|||
margin: 32rpx; |
|||
height: 236rpx; |
|||
background: #ffffff; |
|||
box-shadow: 0px 4px 20px 0px rgba(39, 59, 97, 0.08); |
|||
border-radius: 24r; |
|||
opacity: 1; |
|||
} |
|||
</style> |
@ -0,0 +1,134 @@ |
|||
<template> |
|||
<view class="flex flex-col items-center w-full"> |
|||
<!-- <a-spin tip="图片生成中..." :spinning="spinning" class="w-full"> --> |
|||
<view class="flex flex-col items-center w-full" ref="child"> |
|||
<view class="hb flex justify-center" ref="shareCode" id="code"> |
|||
<img src="@/components/Share/imgs/bg.png" mode="widthFix" class="w-full" /> |
|||
<view class="flex flex-col items-center hb-box"> |
|||
<img :src="url" alt="" class="hb-img" /> |
|||
<text class="text-xl font-bold">{{ hospitalName }}</text> |
|||
<text class="text-xl font-bold">{{ doctorName }}</text> |
|||
</view> |
|||
</view> |
|||
<!-- <ShareCode ref="shareCode" :url="url" :hospitalName="hospitalName" :doctorName="doctorName" /> --> |
|||
<view class="flex justify-center w-full" @click="downLoadImage"> |
|||
<img src="@/components/Share/imgs/btn.png" mode="aspectFit" class="btn" /> |
|||
</view> |
|||
</view> |
|||
<!-- </a-spin> --> |
|||
<!-- <a-modal v-model="visible" title="请长按图片保存到手机" @ok="visible = false" :footer="footer"> |
|||
<img class="w-full" :src="new_url" id="all_img" /> |
|||
</a-modal> --> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import html2canvas from 'html2canvas'; |
|||
|
|||
export default { |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
// url: require('./imgs/code.png'), |
|||
url: '', |
|||
hospitalName: '', |
|||
doctorName: '', |
|||
spinning: false, |
|||
visible: false, |
|||
cancelText: '', |
|||
new_url: '', |
|||
footer: [], |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getCode(); |
|||
}, |
|||
|
|||
mounted() { |
|||
setTimeout(() => { |
|||
console.log('ref', this.$refs); |
|||
}, 2000); |
|||
}, |
|||
|
|||
methods: { |
|||
async downLoadImage() { |
|||
// this.spinning = true; |
|||
console.log('code', wx.createSelectorQuery().select('code')); |
|||
let dom = wx.createSelectorQuery(); |
|||
console.log('dom: ', dom.select('#code')); |
|||
html2canvas(dom.select('#code'), { |
|||
// width: dom.clientWidth, |
|||
// height: dom.clientHeight, |
|||
// scrollX: 0, |
|||
// scrollY: 0, |
|||
useCORS: true, |
|||
}).then(canvas => { |
|||
console.log('canvas: ', canvas); |
|||
// 转成图片,生成图片地址 |
|||
// let imgUrl = canvas.toDataURL('image/png'); //可将 canvas 转为 base64 格式 |
|||
// console.log('imgUrl: ', imgUrl); |
|||
// this.save(imgUrl); |
|||
}); |
|||
}, |
|||
|
|||
save(src) { |
|||
this.spinning = false; |
|||
this.new_url = src; |
|||
this.visible = true; |
|||
|
|||
var a = document.createElement('a'); |
|||
a.href = src; |
|||
a.download = '分享'; |
|||
document.body.appendChild(a); |
|||
// 触发点击 |
|||
a.click(); |
|||
// 然后移除 |
|||
document.body.removeChild(a); |
|||
}, |
|||
|
|||
/** |
|||
* 分享问卷(生成分享二维码) |
|||
*/ |
|||
async getCode() { |
|||
try { |
|||
const params = { roleId: this.roleId, type: 1 }; |
|||
const data = await this.$u.api.shareScreening(params); |
|||
this.url = data.qrCode; |
|||
this.hospitalName = data.hospitalName; |
|||
this.doctorName = data.doctorName; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.hb { |
|||
width: 90%; |
|||
margin: 18px auto; |
|||
position: relative; |
|||
|
|||
.hb-box { |
|||
position: absolute; |
|||
top: 38%; |
|||
} |
|||
|
|||
.hb-img { |
|||
width: 150px; |
|||
height: 150px; |
|||
margin-bottom: 24px; |
|||
} |
|||
} |
|||
|
|||
.btn { |
|||
width: 152px; |
|||
height: 42px; |
|||
margin-bottom: 50px; |
|||
} |
|||
</style> |
@ -0,0 +1,98 @@ |
|||
<template> |
|||
<view class="flex flex-col items-center w-full"> |
|||
<view class="flex flex-col items-center w-full" ref="child"> |
|||
<view class="hb flex justify-center" ref="shareCode" id="code"> |
|||
<img :src="url" mode="widthFix" class="w-full" /> |
|||
</view> |
|||
<view class="flex justify-center w-full" @click="downLoadImage(url)"> |
|||
<img src="@/components/Share/imgs/btn.png" mode="aspectFit" class="btn" /> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
url: require('./imgs/all.png'), |
|||
// url: '', |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
downLoadImage(url) { |
|||
uni.downloadFile({ |
|||
url, |
|||
success: res => { |
|||
if (res.statusCode === 200) { |
|||
uni.saveImageToPhotosAlbum({ |
|||
filePath: res.tempFilePath, |
|||
success: function () { |
|||
uni.showToast({ |
|||
title: '保存成功', |
|||
icon: 'none', |
|||
}); |
|||
}, |
|||
fail: function () { |
|||
uni.showToast({ |
|||
title: '保存失败', |
|||
icon: 'none', |
|||
}); |
|||
}, |
|||
}); |
|||
} |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* 分享问卷(生成分享二维码) |
|||
*/ |
|||
async getCode() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
const params = { roleId: this.roleId, type: 1 }; |
|||
const data = await this.$u.api.shareScreening(params); |
|||
this.url = data.qrCode; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.hb { |
|||
width: 90%; |
|||
margin: 18px auto; |
|||
position: relative; |
|||
|
|||
.hb-box { |
|||
position: absolute; |
|||
top: 38%; |
|||
} |
|||
|
|||
.hb-img { |
|||
width: 150px; |
|||
height: 150px; |
|||
margin-bottom: 24px; |
|||
} |
|||
} |
|||
|
|||
.btn { |
|||
width: 152px; |
|||
height: 42px; |
|||
margin-bottom: 50px; |
|||
} |
|||
</style> |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,176 @@ |
|||
<template> |
|||
<view class="w-full"> |
|||
<view class="w-full flex flex-col"> |
|||
<view class="bg-white flex flex-col px-2"> |
|||
<view class="flex flex-nowrap"> |
|||
<view @click="changeType(0)" class="tags tag-all" :class="type === 0 ? 'all-checked' : ''">全部{{ tags.all }}</view> |
|||
<view @click="changeType(1)" class="tags tag-high" :class="type === 1 ? 'high-checked' : ''">高危{{ tags.high }}</view> |
|||
<view @click="changeType(2)" class="tags tag-middle" :class="type === 2 ? 'middle-checked' : ''">中危{{ tags.middle }}</view> |
|||
<view @click="changeType(3)" class="tags tag-low" :class="type === 3 ? 'low-checked' : ''">低危{{ tags.low }}</view> |
|||
</view> |
|||
<u-input |
|||
:border="true" |
|||
input-align="center" |
|||
border-color="#0096ff" |
|||
placeholder-style="font-size: 14px" |
|||
class="mt-1 mb-4" |
|||
v-model="name" |
|||
placeholder="姓名搜索" |
|||
@blur="getWorkload" |
|||
/> |
|||
</view> |
|||
<view class="rankings" v-if="lists.length"> |
|||
<view class="bg-white px-2 pb-4"> |
|||
<view class="box p-4 mb-2" v-for="(list, index) in lists" :key="index"> |
|||
<view class="sign sign-hign" v-if="list.type === 1">高危</view> |
|||
<view class="sign sign-middle" v-if="list.type === 2">中危</view> |
|||
<view class="sign sign-low" v-if="list.type === 3">低危</view> |
|||
<view class="text-base font-bold"> |
|||
<span>{{ list.name }}</span> |
|||
<span class="ml-4">{{ list.phone }}</span> |
|||
</view> |
|||
<view class="mt-3" style="color: #666"> |
|||
提交时间: |
|||
<span v-if="list.submitTime"> {{ $moment(+list.submitTime).format('YYYY-MM-DD HH:mm') }}</span> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<u-line></u-line> |
|||
</view> |
|||
<u-empty v-else mode="list" class="mt-10"> </u-empty> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
tags: { |
|||
all: '0', |
|||
high: '0', |
|||
middle: '0', |
|||
low: '0', |
|||
}, |
|||
lists: [], |
|||
name: '', |
|||
type: 0, |
|||
clickAll: true, |
|||
clickHigh: false, |
|||
clickMiddle: false, |
|||
clickLow: false, |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
async created() { |
|||
await this.getWorkload(); |
|||
}, |
|||
|
|||
methods: { |
|||
async changeType(type) { |
|||
this.type = type; |
|||
await this.getWorkload(); |
|||
}, |
|||
|
|||
/** |
|||
* 村医查看工作量 |
|||
* @param {String} name 患者名称 |
|||
* @param {Number} type 高危类型 0全部 1高危 2中危 3低危 默认为0 |
|||
*/ |
|||
async getWorkload() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
const { name, type } = this; |
|||
const params = { name, type }; |
|||
const data = await this.$u.api.villageWorkload(params); |
|||
this.tags.all = data.totalNum; |
|||
this.tags.high = data.highNum > 99 ? '99+' : data.highNum; |
|||
this.tags.middle = data.middleNum > 99 ? '99+' : data.middleNum; |
|||
this.tags.low = data.lowNum > 99 ? '99+' : data.lowNum; |
|||
this.lists = data.workloadLists; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.tags { |
|||
padding: 0 14px; |
|||
height: 30px; |
|||
border-radius: 16px; |
|||
font-size: 12px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
margin: 16px 8px 7px 0; |
|||
} |
|||
.tag-all { |
|||
color: #5985c3; |
|||
background: rgba(89, 133, 195, 0.1); |
|||
} |
|||
.all-checked { |
|||
border: 1px solid #5985c3; |
|||
} |
|||
.tag-high { |
|||
color: #ff3131; |
|||
background: rgba(255, 49, 49, 0.1); |
|||
} |
|||
.high-checked { |
|||
border: 1px solid #ff3131; |
|||
} |
|||
.tag-middle { |
|||
color: #ff864b; |
|||
background: rgba(255, 134, 75, 0.1); |
|||
} |
|||
.middle-checked { |
|||
border: 1px solid #ff864b; |
|||
} |
|||
.tag-low { |
|||
color: #0096ff; |
|||
background: rgba(89, 133, 195, 0.1); |
|||
} |
|||
.low-checked { |
|||
border: 1px solid #0096ff; |
|||
} |
|||
|
|||
.rankings { |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.box { |
|||
width: 100%; |
|||
background: #ffffff; |
|||
box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.16); |
|||
border-radius: 6px; |
|||
position: relative; |
|||
} |
|||
|
|||
.sign { |
|||
width: 60px; |
|||
height: 28px; |
|||
line-height: 28px; |
|||
border-radius: 0px 6px 0px 6px; |
|||
font-size: 14px; |
|||
color: #ffffff; |
|||
text-align: center; |
|||
position: absolute; |
|||
right: 0; |
|||
top: 0; |
|||
} |
|||
.sign-hign { |
|||
background: #ff3131; |
|||
} |
|||
.sign-middle { |
|||
background: #ff864b; |
|||
} |
|||
.sign-low { |
|||
background: #0096ff; |
|||
} |
|||
</style> |
@ -0,0 +1,81 @@ |
|||
<template> |
|||
<view class="w-full"> |
|||
<view class="w-full flex flex-col"> |
|||
<view class="flex flex-nowrap bg-white mb-2 px-2" style="height: 48px; line-height: 48px"> |
|||
<view class="col1">排名</view> |
|||
<view class="col2">单位/个人</view> |
|||
<view class="col2">提交总数</view> |
|||
<view class="col2">高危人数</view> |
|||
</view> |
|||
<view class="rankings" v-if="lists.length"> |
|||
<view class="bg-white px-2"> |
|||
<view class="ranking flex flex-nowrap" v-for="(list, index) in lists" :key="index"> |
|||
<view class="col1"> |
|||
{{ index + 1 }} |
|||
</view> |
|||
<view class="col2 text-blue-500">{{ list.doctorName }}</view> |
|||
<view class="col2 font-bold"> |
|||
<span>{{ list.totalNum }}</span> |
|||
</view> |
|||
<view class="col2 font-bold">{{ list.highNum }}</view> |
|||
</view> |
|||
</view> |
|||
<u-line></u-line> |
|||
</view> |
|||
<u-empty v-else mode="list" class="mt-10"> </u-empty> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
data() { |
|||
return { lists: [] }; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
|
|||
methods: { |
|||
// 卫生院查看村医工作量 |
|||
async getData() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
this.lists = []; |
|||
const params = { roleId: this.roleId }; |
|||
const data = await this.$u.api.centerWorkload(params); |
|||
this.lists = data; |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style> |
|||
.rankings { |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.ranking { |
|||
height: 48px; |
|||
line-height: 48px; |
|||
border-bottom: 1px solid #f4f4f4; |
|||
} |
|||
|
|||
.col1 { |
|||
width: 16%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.col2 { |
|||
width: 28%; |
|||
text-align: center; |
|||
} |
|||
</style> |
@ -0,0 +1,985 @@ |
|||
<template> |
|||
<div class="test"> |
|||
<div bordered class="list-box" v-for="(item, index) in test" :key="index"> |
|||
<template v-for="(listItem, listIndex) in item"> |
|||
<template v-if="listItem.code === 'ZQTH-SJ'"> |
|||
<Talk :key="listIndex" @changeHeigt="changeHeigt" /> |
|||
</template> |
|||
<template v-else> |
|||
<div |
|||
class="bg-white list-item" |
|||
:key="listIndex" |
|||
v-if=" |
|||
itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level) |
|||
" |
|||
> |
|||
<div class="w-full flex flex-nowrap justify-between items-center"> |
|||
<div class="flex items-center" v-if="listItem.title" style="font-size: 16px"> |
|||
<!-- {{ listItem.title }} |
|||
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> --> |
|||
<div class="flex items-center" v-if="listItem.type !== -1"> |
|||
<view class="putong-title">{{ listItem.title }}</view> |
|||
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> |
|||
</div> |
|||
<div class="flex items-center" v-else> |
|||
<view class="shu"></view> |
|||
<view class="shu-title">{{ listItem.title }}</view> |
|||
</div> |
|||
</div> |
|||
<div class="flex flex-1 justify-end" :style="{marginLeft: listItem.title ? '' : '24rpx'}"> |
|||
<!-- 自动计算 --> |
|||
<span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)"> |
|||
{{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }} |
|||
</span> |
|||
<!-- 输入框 --> |
|||
<template v-else-if="listItem.type === 1"> |
|||
<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
style="width: 200rpx" |
|||
placeholder="请输入" |
|||
input-align="right" |
|||
:value="listItem.value" |
|||
@blur="changeIpt($event, listItem.code, index, listIndex)" |
|||
/> |
|||
</template> |
|||
<!-- 单选 --> |
|||
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 2" style="margin-right: -24rpx"> |
|||
<u-radio |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
v-for="radioValue in listItem.itemList" |
|||
:key="radioValue" |
|||
:name="radioValue" |
|||
> |
|||
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span> |
|||
</u-radio> |
|||
</u-radio-group> |
|||
<!-- 单选(竖向排列) --> |
|||
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 21" class="flex flex-col w-full"> |
|||
<div v-for="radioValue in listItem.itemList" :key="radioValue" style="width: 105%"> |
|||
<view class="flex justify-between"> |
|||
<view class="flex-1"> |
|||
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span> |
|||
</view> |
|||
<u-radio |
|||
style="display: block;margin-left: 0; height: 40px; line-height: 40px" |
|||
:name="radioValue" |
|||
:key="radioValue" |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
> |
|||
</u-radio> |
|||
</view> |
|||
<div |
|||
v-if=" |
|||
listItem.code === 'ZLFA-FBJZ' && |
|||
listItem.value === '其他原因所致的缺血性卒中(SOE)' && |
|||
radioValue === '其他原因所致的缺血性卒中(SOE)' |
|||
" |
|||
class="flex ml-2 mb-2 items-center" |
|||
> |
|||
<div>是否烟雾病:</div> |
|||
<u-radio-group :value="listItem.ywbValue"> |
|||
<u-radio @change="changeYWBRadio($event, listItem.ywbCode, index, listIndex)" name="是"> 是 </u-radio> |
|||
<u-radio @change="changeYWBRadio($event, listItem.ywbCode, index, listIndex)" name="否"> 否 </u-radio> |
|||
</u-radio-group> |
|||
</div> |
|||
</div> |
|||
</u-radio-group> |
|||
<!-- 单选(横向三列) --> |
|||
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 22" class="flex w-full"> |
|||
<div |
|||
v-for="(radioValue, radioIndex) in listItem.itemList" |
|||
:key="radioValue" |
|||
style="width: 105%" |
|||
class="flex" |
|||
:class="{ |
|||
'text-left': radioIndex % 3 === 0, |
|||
'text-center': (radioIndex - 1) % 3 === 0, |
|||
'text-right': (radioIndex + 1) % 3 === 0, |
|||
'flex-wrap': radioIndex > 3, |
|||
'flex-nowrap': radioIndex <= 3, |
|||
}" |
|||
> |
|||
<view class="flex-1" :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</view> |
|||
<u-radio |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
style="margin-left: 0; height: 40px; line-height: 40px" |
|||
:name="radioValue" |
|||
> |
|||
</u-radio> |
|||
</div> |
|||
</u-radio-group> |
|||
<!-- 单选(带分数输入框) --> |
|||
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 23" class="flex flex-col flex-wrap w-full"> |
|||
<template v-if="listItem.code !== 'JRZL-SQ-ASPECT'"> |
|||
<div |
|||
v-for="(radioValue, radioIndex) in listItem.listItem" |
|||
:key="radioIndex" |
|||
class="flex flex-1 items-center" |
|||
style="height: 44px" |
|||
> |
|||
<u-radio |
|||
style="margin-left: 0; height: 40px; line-height: 40px" |
|||
:style="{ color: listItem.value === radioValue ? '#1890ff' : '' }" |
|||
:value="radioValue.type" |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
> |
|||
{{ radioValue.name }} |
|||
</u-radio> |
|||
<div v-if="radioValue.showIpt"> |
|||
<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
:value="radioValue.value" |
|||
placeholder="请输入" |
|||
style="width: 100rpx !important" |
|||
@click="iptChangeRadio('score', listItem.code, index, listIndex)" |
|||
@blur="changeScroeNum($event, radioValue.min, radioValue.max, radioValue.code, index, listIndex, radioIndex)" |
|||
/>分 |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<div v-else style="flex flex-nowrap items-center"> |
|||
<div style="height: 44px;line-height: 44px"> |
|||
<u-radio |
|||
style="margin-left: 0" |
|||
:style="{ color: listItem.value === 'score' ? '#1890ff' : '' }" |
|||
name="score" |
|||
@change="changeRadio('score', listItem.code, index, listIndex)" |
|||
> |
|||
<div class="flex items-center" :style="{ color: listItem.value === 'score' ? '#1890ff' : '' }"> |
|||
CT<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
:value="listItem.listItem[0].value" |
|||
placeholder="请输入" |
|||
style="width: 100rpx !important" |
|||
@click="iptChangeRadio('score', listItem.code, index, listIndex)" |
|||
@blur=" |
|||
changeScroeNum( |
|||
$event, |
|||
listItem.listItem[0].min, |
|||
listItem.listItem[0].max, |
|||
listItem.listItem[0].code, |
|||
index, |
|||
listIndex, |
|||
0, |
|||
) |
|||
" |
|||
/>分,MRI<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
:value="listItem.listItem[1].value" |
|||
placeholder="请输入" |
|||
style="width: 100rpx !important" |
|||
@click="iptChangeRadio('score', listItem.code, index, listIndex)" |
|||
@blur=" |
|||
changeScroeNum( |
|||
$event, |
|||
listItem.listItem[1].min, |
|||
listItem.listItem[1].max, |
|||
listItem.listItem[1].code, |
|||
index, |
|||
listIndex, |
|||
1, |
|||
) |
|||
" |
|||
/>分 |
|||
</div> |
|||
</u-radio> |
|||
</div> |
|||
<u-radio |
|||
style="margin-left: 0; height: 40px; line-height: 40px" |
|||
name="noScore" |
|||
@change="changeRadio('noScore', listItem.code, index, listIndex)" |
|||
> |
|||
<span :style="{ color: listItem.value === 'noScore' ? '#1890ff' : '' }">未评</span> |
|||
</u-radio> |
|||
</div> |
|||
</u-radio-group> |
|||
<!-- 单选(竖向排列带分数输入框) --> |
|||
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 24" class="flex flex-col w-full"> |
|||
<div class="flex items-center justify-between" style="width: 105%" v-for="(radioValue, radioIndex) in listItem.itemList" :key="radioIndex"> |
|||
<view class="flex items-center flex-1" style="height: 78rpx;line-height: 78rpx"> |
|||
<view>{{ radioValue.name }}</view> |
|||
<div v-if="radioValue.showIpt" class="flex items-center ml-1 mr-1"> |
|||
<!-- :disabled="listItem.value !== radioValue.name" --> |
|||
<u-input |
|||
:clearable="false" |
|||
:value="radioValue.value" |
|||
:type="radioValue.unit ? 'number' : 'text'" |
|||
:placeholder="radioValue.min && radioValue.max ? `请输入${radioValue.min}-${radioValue.max}` : '请输入'" |
|||
style="width: 300rpx !important" |
|||
:custom-style="{fontSize: '28rpx'}" |
|||
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)" |
|||
@blur=" |
|||
changeRadioScore( |
|||
$event, |
|||
radioValue.code, |
|||
index, |
|||
listIndex, |
|||
radioIndex, |
|||
radioValue.unit, |
|||
radioValue.min, |
|||
radioValue.max, |
|||
) |
|||
" |
|||
/> |
|||
<span>{{ radioValue.unit }}</span> |
|||
</div> |
|||
</view> |
|||
<u-radio |
|||
class="flex items-center" |
|||
label-size="28" |
|||
:style="{ color: listItem.value === radioValue ? '#1890ff' : '' }" |
|||
:name="radioValue.name" |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
> |
|||
</u-radio> |
|||
</div> |
|||
</u-radio-group> |
|||
<!-- 多选 --> |
|||
<u-checkbox-group |
|||
v-else-if="listItem.type === 3" |
|||
@change="changeCheck($event, listItem.code, index, listIndex, false, listItem.showOther)" |
|||
:class="{ 'justify-between': listItem.checkType - 0 === 4 }" |
|||
class="w-full flex flex-row flex-wrap" |
|||
> |
|||
<div |
|||
v-for="(check, checkIndex) in listItem.itemIsChecked" |
|||
:key="checkIndex" |
|||
:style="{ minWidth: listItem.checkType - 0 === 3 ? '33%' : listItem.checkType - 0 === 2 ? '50%' : 0 }" |
|||
class="w-full my-2 flex flex-1 flex-col items-start justify-center" |
|||
> |
|||
<view class="flex"> |
|||
<view :style="{ color: check.isChecked ? '#1890ff' : '' }" style="width: 628rpx"> |
|||
{{ listItem.itemList[checkIndex] }} |
|||
</view> |
|||
<u-checkbox v-model="check.isChecked" :name="listItem.itemList[checkIndex]"> |
|||
</u-checkbox> |
|||
</view> |
|||
<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
:value="listItem.iptValue" |
|||
v-if="listItem.showIpt && listItem.showIptItem === listItem.itemList[checkIndex]" |
|||
@blur="changeOther($event, listItem.iptCode, index, listIndex)" |
|||
placeholder="请输入" |
|||
style="width: 200rpx" |
|||
/> |
|||
</div> |
|||
</u-checkbox-group> |
|||
<!-- 多选特殊类型 --> |
|||
<div v-else-if="listItem.type === 31" class="w-full"> |
|||
<div v-for="(checkTest, checkIndex) in listItem.checkList" :key="checkTest.title"> |
|||
<div>{{ checkTest.title }}</div> |
|||
<u-checkbox-group |
|||
:class="{ 'justify-between': listItem.checkType - 0 === 4 }" |
|||
class="w-full flex flex-row flex-wrap" |
|||
@change="changeCheck($event, checkTest.code, index, listIndex, checkIndex)" |
|||
> |
|||
<div |
|||
style="min-width: 33%" |
|||
class="my-2 flex items-center" |
|||
v-for="(check, isCheckIndex) in checkTest.itemIsChecked" |
|||
:key="check" |
|||
> |
|||
<u-checkbox v-model="check.isChecked" :name="checkTest.itemList[isCheckIndex]"> |
|||
<!-- itemIsChecked,itemList --> |
|||
<span :style="{ color: check.isChecked ? '#1890ff' : '' }"> |
|||
{{ check }} |
|||
</span> |
|||
</u-checkbox> |
|||
<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
@bulr="changeCheckIpt($event, checkTest.iptCode, index, listIndex, checkIndex)" |
|||
:value="checkTest.iptValue" |
|||
placeholder="请输入" |
|||
style="width: 200rpx" |
|||
v-if="checkTest.showIpt && checkTest.showValue === checkTest.itemList[isCheckIndex]" |
|||
/> |
|||
</div> |
|||
</u-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<!-- 时间选择 --> |
|||
<div |
|||
v-else-if="listItem.type === 4" |
|||
@click="openTimeSelect(listItem.title, listItem.code, index, listIndex, listItem.value)" |
|||
class="flex items-center" |
|||
> |
|||
<span class="mr-3" v-if="listItem.value"> |
|||
{{ $moment(+listItem.value).format('YYYY-MM-DD HH:mm') }} |
|||
</span> |
|||
<span class="mr-3 gray-text" v-else>请选择时间</span> |
|||
<!-- <img src="@/static/icon/time.png" style="height: 20px" /> --> |
|||
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon> |
|||
</div> |
|||
<!-- 展开底部下拉框 --> |
|||
<div |
|||
v-else-if="listItem.type === 5" |
|||
style="min-width: 160px; width: auto; justify-content: flex-end; height: 30px" |
|||
class="flex items-center" |
|||
@click="openDropDown(listItem.title, listItem.itemList, listItem.code, index, listIndex, listItem.value)" |
|||
> |
|||
<span style="margin-right: 10px;color: #bbb" v-if="listItem.value">{{ listItem.value }}</span> |
|||
<span style="margin-right: 10px;color: #bbb" v-else>请选择</span> |
|||
<!-- <img src="@/static/icon/right.png" style="height: 20px" /> --> |
|||
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon> |
|||
</div> |
|||
<!-- 带有最大最小值限制的输入框 --> |
|||
<div v-else-if="listItem.type === 7" class="flex items-center"> |
|||
<div v-if="numIndex === index && numItemIndex === listIndex" class="mr-1 font-12 text-red"> |
|||
<span v-if="exceed === 'max'"> 超过最大值{{ listItem.max }} </span> |
|||
<span v-else-if="exceed === 'min'"> 超过最小值{{ listItem.min }} </span> |
|||
</div> |
|||
<span v-if="listItem.beforeUnit">{{ listItem.beforeUnit }}</span> |
|||
<u-input |
|||
input-align="right" |
|||
:clearable="false" |
|||
type="number" |
|||
:value="listItem.value" |
|||
placeholder="请输入" |
|||
style="width: 200rpx" |
|||
@change="changeNum($event, listItem.min, listItem.max, listItem.code, index, listIndex)" |
|||
@blur="inputNumBlur($event, listItem.code, listItem.min, listItem.max, index, listIndex)" |
|||
/> |
|||
<span v-if="listItem.unit">{{ listItem.unit }}</span> |
|||
</div> |
|||
<!-- 带已评输入框的单选 --> |
|||
<u-radio-group |
|||
:class="{ 'w-full': !listItem.title }" |
|||
v-else-if="listItem.type === 71" |
|||
:value="listItem.value" |
|||
class="flex-1 flex items-center" |
|||
> |
|||
<u-radio |
|||
:name="radioValue.name" |
|||
v-for="(radioValue, radioIndex) in listItem.listItem" |
|||
:key="radioValue.name" |
|||
class="ipt-radio" |
|||
style="height: 40px;line-height: 40px" |
|||
@change="changeRadio($event, listItem.code, index, listIndex)" |
|||
> |
|||
<u-input |
|||
:border="true" |
|||
:clearable="false" |
|||
v-if="radioValue.name === '已评'" |
|||
:style="{ |
|||
color: listItem.value !== '已评' ? 'rgba(0,0,0,0.25)' : '', |
|||
background: listItem.value !== '已评' ? '#eee' : '', |
|||
}" |
|||
type="number" |
|||
:value="radioValue.value" |
|||
placeholder="请输入" |
|||
class="ipt-radio" |
|||
style="width: 200rpx" |
|||
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)" |
|||
@blur="changeScroeNum($event, listItem.min, listItem.max, radioValue.code, index, listIndex, radioIndex)" |
|||
/> |
|||
<view v-else style="height: 40px;line-height: 40px" :style="{ color: listItem.value === radioValue.name ? '#1890ff' : '' }">{{ radioValue.name }}</view> |
|||
</u-radio> |
|||
</u-radio-group> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
</template> |
|||
</div> |
|||
<u-picker mode="time" v-model="show" :title="title" :params="timeSelectparams" @confirm="chooseTime"></u-picker> |
|||
<u-picker mode="selector" v-model="showDrop" :range="dropList" :default-selector="[0]" @confirm="chooseSelector"></u-picker> |
|||
<u-toast ref="uToast" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import Talk from './component/Talk.vue' |
|||
|
|||
export default { |
|||
components: { Talk }, |
|||
props: { |
|||
testIndex: { |
|||
type: Number, |
|||
default: 0, |
|||
}, |
|||
list: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
answerList: { |
|||
type: Object, |
|||
default: () => {}, |
|||
}, |
|||
canChange: { |
|||
type: Boolean, |
|||
default: false, |
|||
}, |
|||
}, |
|||
data: () => ({ |
|||
test: [], // 试题数组 |
|||
radioStyle: { |
|||
// 单选试题竖向排列时的样式 |
|||
display: 'block', |
|||
width: '100%', |
|||
marginLeft: '0', |
|||
height: '40px', |
|||
lineHeight: '40px', |
|||
}, |
|||
timeValue: '', |
|||
title: '', // 时间选择器组件的标题 |
|||
timeIndex: 0, // 当前时间选择器对应试题的 index 位置 |
|||
timeItemIndex: 0, // 当前时间选择器对应试题的 index 位置 |
|||
timeCode: '', // 当前时间选择器对应试题的 code |
|||
show: false, // 是否显示时间选择器组件 |
|||
ZQTHSJ: null, // 知情谈话时间 |
|||
timeSelectparams: { |
|||
// 时间选择器可以选择那个时间 |
|||
year: true, |
|||
month: true, |
|||
day: true, |
|||
hour: true, |
|||
minute: true, |
|||
second: false, |
|||
}, |
|||
dropTitle: '', |
|||
dropList: [], |
|||
dropCode: '', |
|||
dropIndex: '', |
|||
dropItemIndex: '', |
|||
dValue: '', |
|||
showDrop: false, |
|||
numIndex: '', |
|||
numItemIndex: '', |
|||
exceed: '', |
|||
}), |
|||
computed: { |
|||
...mapState('carbasics', ['firstAidId']), |
|||
getBMI() { |
|||
let height = 0; |
|||
let weight = 0; |
|||
for (let key in this.test) { |
|||
for (let i in this.test[key]) { |
|||
if (this.test[key][i].code === 'RYPG-height' && this.test[key][i].value) { |
|||
height = this.test[key][i].value - 0; |
|||
} else if (this.test[key][i].code === 'RYPG-weight' && this.test[key][i].value) { |
|||
weight = this.test[key][i].value - 0; |
|||
} |
|||
} |
|||
} |
|||
if (height && weight) { |
|||
return (weight / (((height / 100) * height) / 100)).toFixed(2); |
|||
} else { |
|||
return 0; |
|||
} |
|||
}, |
|||
getCount() { |
|||
let num = 0; |
|||
for (let key in this.test) { |
|||
for (let i in this.test[key]) { |
|||
if (this.test[key][i].code === 'TSCX-AVM-SIZE') { |
|||
// ['<3cm(1 分)', '3-6cm(2 分)', '>6cm(3 分)'] |
|||
if (this.test[key][i].value === '<3cm(1 分)') { |
|||
num += 1; |
|||
} else if (this.test[key][i].value === '3-6cm(2 分)') { |
|||
num += 2; |
|||
} else if (this.test[key][i].value === '>6cm(3 分)') { |
|||
num += 3; |
|||
} |
|||
} else if (this.test[key][i].code === 'TSCX-AVM-features') { |
|||
// ['大脑非功能区(0 分)', '大脑功能区(1 分)'] |
|||
if (this.test[key][i].value === '大脑非功能区(0 分)') { |
|||
num += 0; |
|||
} else if (this.test[key][i].value === '大脑功能区(1 分)') { |
|||
num += 1; |
|||
} |
|||
} else if (this.test[key][i].code === 'TSCX-AVM-SEAT') { |
|||
// ['浅表部(0 分)', '深部(1 分)'] |
|||
if (this.test[key][i].value === '浅表部(0 分)') { |
|||
num += 0; |
|||
} else if (this.test[key][i].value === '深部(1 分)') { |
|||
num += 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
return num; |
|||
}, |
|||
}, |
|||
methods: { |
|||
changeHeigt() { |
|||
// this.$emit('getCollaoseHeight', this.testIndex); |
|||
}, |
|||
/** |
|||
* 判断当前 item 是否显示 |
|||
* 根据 显示条件: isShow 是否和父级code: Fcode 的值相等判断 |
|||
* 如果 Fcode 和 isShow 都不存在,则直接返回true,显示当前item |
|||
* 如果 Fcode 和 isShow 都存在,而且 (父级code存在且父级code的value和isShow值相等) 则返回ture |
|||
* 否则返回false |
|||
*/ |
|||
itemIsShow(code, isShow, level) { |
|||
if (!level) { |
|||
if (code && isShow) { |
|||
for (let i = 0; i < this.test.length; i++) { |
|||
const item = this.test[i]; |
|||
if (item) { |
|||
for (let j = 0; j < item.length; j++) { |
|||
const jtem = item[j]; |
|||
if (jtem.code === code && jtem.value === isShow) { |
|||
return true; |
|||
} else if (i === this.test.length - 1 && j === item.length) { |
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
return true; |
|||
} |
|||
} else { |
|||
if (this.answerList && this.answerList[code]) { |
|||
const value = this.answerList[code]; |
|||
if (Array.isArray(value)) { |
|||
for (var i = 0; i < value.length; i++) { |
|||
if (value[i] === isShow) { |
|||
return true; |
|||
} else if (i === value.length - 1) { |
|||
return false; |
|||
} |
|||
} |
|||
} else { |
|||
return value === isShow; |
|||
} |
|||
} else { |
|||
return true; |
|||
} |
|||
} |
|||
}, |
|||
/** |
|||
* 判断当前试题是否显示 |
|||
* 不是根据父级试题选了哪一项而显示,而是根据父级试题没选哪一项而显示 |
|||
* 比如 选了 '死亡',不能再出现'出院带药'等试题,选了其他选项则可以出现 |
|||
* 需要根据 @param level 来判断父级试题与当前题是否处于同一分类下 |
|||
* 并且 父级 题目的 答案不一定是字符串,也有可能是数组 |
|||
*/ |
|||
itemNoShow(NFcode, noShow, level) { |
|||
if (level && NFcode && noShow) { |
|||
for (let i = 0; i < this.test.length; i++) { |
|||
const item = this.test[i]; |
|||
for (let j = 0; j < item.length; j++) { |
|||
const jtem = item[j]; |
|||
if (jtem.code === NFcode) { |
|||
return this.judgeType(jtem.value, noShow); |
|||
} else if (i === this.test.length - 1 && j === item.length) { |
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
return true; |
|||
} |
|||
}, |
|||
// 判断传入的值是字符串还是数组,并 根据 两者是否相等或 包含 返回true |
|||
// 有相同项 则 返回false 不显示当前试题 |
|||
judgeType(Fvalue, value) { |
|||
if (Array.isArray(Fvalue)) { |
|||
for (var i = 0; i < Fvalue.length; i++) { |
|||
if (Fvalue[i] === value) { |
|||
return false; |
|||
} else if (i === Fvalue.length - 1) { |
|||
return true; |
|||
} |
|||
} |
|||
} else { |
|||
return Fvalue !== value; |
|||
} |
|||
}, |
|||
/** |
|||
* 修改输入框内容 |
|||
* 先获取到 this.test 数组(props接收的值不能在当前界面修改,所以用将list的值赋值给了 test ,渲染界面也是用的 test) |
|||
* 通过 index 修改掉 test 数组后,存储答案给服务端 |
|||
*/ |
|||
changeIpt(e, code, index, itemIndex) { |
|||
this.Rerender(e, index, itemIndex); |
|||
this.setAnswer(code, e); |
|||
}, |
|||
/** |
|||
* 修改单选框内容 |
|||
* 和输入框操作一样 |
|||
*/ |
|||
changeRadio(e, code, index, itemIndex) { |
|||
this.Rerender(e, index, itemIndex); |
|||
// if (this.canChange) { |
|||
// this.$emit('getCollaoseHeight', this.testIndex); |
|||
// } |
|||
this.setAnswer(code, e); |
|||
}, |
|||
// 修改是否是烟雾病的题时, |
|||
changeYWBRadio(e, code, index, itemIndex) { |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].ywbValue = e; |
|||
this.test = [...Arr]; |
|||
this.setAnswer(code, e); |
|||
}, |
|||
// 修改试题时,重新赋值test,达到重新渲染界面的目的 |
|||
Rerender(value, index, itemIndex) { |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].value = value; |
|||
console.log('Arr[index][itemIndex].value: ', Arr[index][itemIndex].value); |
|||
this.test = [...Arr]; |
|||
}, |
|||
// 修改带评分输入框的单选题内的输入框 |
|||
changeRadioScore(e, code, index, itemIndex, radioIndex, unit, min, max) { |
|||
let num = e; |
|||
if (unit && max) { |
|||
if (num || num - 0 === 0) { |
|||
if (num < min) { |
|||
// this.$message.warning('最低数值为:' + min); |
|||
this.$refs.uToast.show({ |
|||
title: '最低数值为:' + min, |
|||
type: 'warning', |
|||
}); |
|||
num = min; |
|||
} else if (num > max) { |
|||
// this.$message.warning('最高数值为:' + max); |
|||
this.$refs.uToast.show({ |
|||
title: '最高数值为:' + max, |
|||
type: 'warning', |
|||
}); |
|||
num = max; |
|||
} |
|||
} |
|||
} |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].itemList[radioIndex].value = num; |
|||
this.test = [...Arr]; |
|||
this.setAnswer(code, num); |
|||
}, |
|||
/** |
|||
* 修改多选框内容 |
|||
* 因为多选的类型有分成了几种特殊类型 |
|||
* 所以需要判断某些参数是否存在 |
|||
*/ |
|||
changeCheck(e, code, index, itemIndex, checkIndex, other) { |
|||
let val = [...e]; |
|||
if (!checkIndex && checkIndex !== 0) { |
|||
let Arr = [...this.test]; |
|||
const answerList = Arr[index][itemIndex] |
|||
val = []; |
|||
for(let i = 0; i < Arr[index][itemIndex].itemList.length; i++) { |
|||
if(answerList.itemIsChecked[i].isChecked) { |
|||
val.push(Arr[index][itemIndex].itemList[i]) |
|||
} |
|||
} |
|||
// if (other && e.length) { |
|||
// for (let i = 0; i < e.length; i++) { |
|||
// if (e[i] === other) { |
|||
// val = [other]; |
|||
// } |
|||
// } |
|||
// } |
|||
Arr[index][itemIndex].value = [...val]; |
|||
this.Rerender(val, index, itemIndex); |
|||
} else { |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].checkList[checkIndex].value = val; |
|||
this.test = [...Arr]; |
|||
} |
|||
const codeAndAnswerList = [ |
|||
{ |
|||
questionCode: code, |
|||
answer: val, |
|||
}, |
|||
]; |
|||
const setParams = { |
|||
codeAndAnswerList, |
|||
firstAidId: this.firstAidId, |
|||
}; |
|||
uni.$u.api.setRecord(setParams); |
|||
}, |
|||
// 判断当前多选题得选项是否可选 |
|||
isDisabled(check, value, other) { |
|||
let status = false; |
|||
if (value.length && other) { |
|||
for (let i = 0; i < value.length; i++) { |
|||
if (value[i] && value[i] === other) { |
|||
status = true; |
|||
} |
|||
} |
|||
} |
|||
if (check === other) { |
|||
return false; |
|||
} else { |
|||
return status; |
|||
} |
|||
}, |
|||
// 获取当前多选框的内容是否已选中 |
|||
getCheckIsCheck(list, value) { |
|||
let status = true; |
|||
for (let key in list) { |
|||
if (list[key] === value) { |
|||
status = true; |
|||
} |
|||
} |
|||
return status; |
|||
}, |
|||
// 修改其他的输入框内容 |
|||
changeOther(e, code, index, itemIndex) { |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].iptValue = e; |
|||
this.test = [...Arr]; |
|||
this.setAnswer(code, e); |
|||
}, |
|||
// 特殊类型的多选题的其他输入框审的改变事件 |
|||
changeCheckIpt(e, code, index, listIndex, checkIndex) { |
|||
let Arr = [...this.test]; |
|||
Arr[index][listIndex].checkList[checkIndex].iptValue = e; |
|||
this.test = [...Arr]; |
|||
this.setAnswer(code, e); |
|||
}, |
|||
// 打开时间选择器组件 |
|||
async openTimeSelect(title, code, index, listIndex, time) { |
|||
this.timeValue = time ? time : 0; |
|||
this.title = title; |
|||
this.timeIndex = index; |
|||
this.timeItemIndex = listIndex; |
|||
this.timeCode = code; |
|||
this.show = true; |
|||
if (code === 'YJJL-CTendTime') { |
|||
const codeList = ['ZQTH-SJ']; |
|||
const param = { |
|||
codeList, |
|||
firstAidId: this.firstAidId, |
|||
}; |
|||
const data = await this.$u.api.getRecord(param); |
|||
this.ZQTHSJ = data.record['ZQTH-SJ'] && data.record['ZQTH-SJ'].length ? data.record['ZQTH-SJ'][0] : null; |
|||
} |
|||
}, |
|||
// 时间选择器组件选择了时间 |
|||
chooseTime(time) { |
|||
const timeValue = this.$moment(`${time.year}-${time.month}-${time.day} ${time.hour}:${time.minute}:00`).valueOf(); |
|||
if (this.timeCode === 'YJJL-CTendTime' && this.ZQTHSJ && timeValue - 0 < this.ZQTHSJ - 0) { |
|||
// this.$message.error('CT完成时间不能晚于签署知情同意书时间,请重新选择'); |
|||
this.$refs.uToast.show({ |
|||
title: 'CT完成时间不能晚于签署知情同意书时间,请重新选择', |
|||
type: 'warning', |
|||
}); |
|||
return; |
|||
} |
|||
this.Rerender(timeValue, this.timeIndex, this.timeItemIndex); |
|||
this.setAnswer(this.timeCode, timeValue); |
|||
this.show = false; |
|||
}, |
|||
// 打开底部下拉 |
|||
openDropDown(title, list, code, index, itemIndex, value) { |
|||
this.dropTitle = title; |
|||
this.dropList = list; |
|||
this.dropCode = code; |
|||
this.dropIndex = index; |
|||
this.dropItemIndex = itemIndex; |
|||
this.dValue = value; |
|||
this.showDrop = true; |
|||
}, |
|||
// 底部下拉选中 |
|||
chooseSelector(e) { |
|||
this.Rerender(this.dropList[e], this.dropIndex, this.dropItemIndex); |
|||
this.setAnswer(this.dropCode, this.dropList[e]); |
|||
}, |
|||
/** |
|||
* 修改数字输入框,存在最大最小值 |
|||
* 小于最小值,则存储最小值 |
|||
* 大于最大值,则存储最大值 |
|||
* 否则存储当前拿到的值 |
|||
*/ |
|||
changeNum(e, min, max, code, index, itemIndex) { |
|||
let num = 0; |
|||
if (e || e - 0 === 0) { |
|||
if (e < min) { |
|||
this.numIndex = index; |
|||
this.numItemIndex = itemIndex; |
|||
this.exceed = 'min'; |
|||
num = min; |
|||
} else if (e > max) { |
|||
this.numIndex = index; |
|||
this.numItemIndex = itemIndex; |
|||
this.exceed = 'max'; |
|||
num = max; |
|||
} else { |
|||
this.numIndex = null; |
|||
this.numItemIndex = null; |
|||
this.exceed = ''; |
|||
num = e; |
|||
} |
|||
} |
|||
this.Rerender(num, index, itemIndex); |
|||
}, |
|||
// 分数数据框失去焦点后,取消警告提示,因为值自己会改到最大/最小值 |
|||
inputNumBlur(e, code, min, max, index, itemIndex) { |
|||
this.changeNum(e, min, max, code, index, itemIndex) |
|||
this.numIndex = null; |
|||
this.numItemIndex = null; |
|||
this.exceed = ''; |
|||
if (code) { |
|||
if (code === 'RYPG-systolicPressure') { |
|||
// 收缩压 |
|||
const maxNum = this.getPressure(1); // 舒张压 |
|||
if (e < maxNum && maxNum) { |
|||
// this.$message.error('收缩压必须大于舒张压,请重新填写'); |
|||
this.$refs.uToast.show({ |
|||
title: '收缩压必须大于舒张压,请重新填写', |
|||
type: 'warning', |
|||
}); |
|||
return; |
|||
} |
|||
} else if (code === 'RYPG-diastolicPressure') { |
|||
// 舒张压 |
|||
const minNum = this.getPressure(0); // 收缩压 |
|||
if (e > minNum && minNum) { |
|||
// this.$message.error('舒张压必须小于收缩压,请重新填写'); |
|||
this.$refs.uToast.show({ |
|||
title: '舒张压必须小于收缩压,请重新填写', |
|||
type: 'warning', |
|||
}); |
|||
return; |
|||
} |
|||
} |
|||
this.setAnswer(code, e); |
|||
} |
|||
}, |
|||
// 获取当前收缩压/舒张压的值 0:收缩压,1:舒张压 |
|||
getPressure(type) { |
|||
const { list } = this; |
|||
let num = 0; |
|||
for (let i = 0; i < list.length; i++) { |
|||
const item = list[i]; |
|||
for (let k = 0; k < item.length; k++) { |
|||
const obj = item[k]; |
|||
if ((obj.code === 'RYPG-systolicPressure' && type === 0) || (obj.code === 'RYPG-diastolicPressure' && type === 1)) { |
|||
num = obj.value - 0; |
|||
return num; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 修改评分的输入框 |
|||
changeScroeNum(e, min, max, code, index, itemIndex, radioIndex) { |
|||
let num = 0; |
|||
if (e || e - 0 === 0) { |
|||
if (e < min) { |
|||
num = min; |
|||
} else if (e > max) { |
|||
num = max; |
|||
} else { |
|||
num = e; |
|||
} |
|||
} |
|||
let Arr = [...this.test]; |
|||
Arr[index][itemIndex].listItem[radioIndex].value = num; |
|||
this.test = [...Arr]; |
|||
this.setAnswer(code, num); |
|||
}, |
|||
// 点击分数输入框时,将当前输入框的选项改为选中状态 |
|||
iptChangeRadio(value, code, index, itemIndex) { |
|||
this.Rerender(value, index, itemIndex); |
|||
this.setAnswer(code, value); |
|||
}, |
|||
// 存储提交答案 |
|||
setAnswer(questionCode, value) { |
|||
const params = { |
|||
codeAndAnswerList: [ |
|||
{ |
|||
questionCode, |
|||
answer: [value], |
|||
}, |
|||
], |
|||
firstAidId: this.firstAidId, |
|||
}; |
|||
uni.$u.api.setRecord(params); |
|||
}, |
|||
}, |
|||
watch: { |
|||
list: { |
|||
handler() { |
|||
this.test = [...this.list]; |
|||
}, |
|||
deep: true, |
|||
}, |
|||
}, |
|||
|
|||
// 组件周期函数--监听组件挂载完毕 |
|||
mounted() { |
|||
const that = this |
|||
this.$nextTick(()=> { |
|||
that.changeHeigt(); |
|||
}) |
|||
}, |
|||
created() { |
|||
this.test = [...this.list]; |
|||
}, |
|||
// 组件周期函数--监听组件数据更新之前 |
|||
beforeUpdate() {}, |
|||
// 组件周期函数--监听组件数据更新之后 |
|||
updated() {}, |
|||
// 组件周期函数--监听组件激活(显示) |
|||
activated() {}, |
|||
// 组件周期函数--监听组件停用(隐藏) |
|||
deactivated() {}, |
|||
// 组件周期函数--监听组件销毁之前 |
|||
beforeDestroy() {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
/deep/.u-radio__label { |
|||
margin-left: 0 !important; |
|||
margin-right: 0 !important; |
|||
} |
|||
.putong-title { |
|||
margin-left: 24rpx; |
|||
font-size: 32rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #3e3d4d; |
|||
} |
|||
.shu { |
|||
width: 16rpx; |
|||
height: 40rpx; |
|||
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%); |
|||
border-radius: 40rpx; |
|||
opacity: 1; |
|||
margin-right: 8rpx; |
|||
} |
|||
.shu-title { |
|||
font-size: 36rpx; |
|||
font-family: Open Sans-Bold, Open Sans; |
|||
font-weight: bold; |
|||
color: #3e3d4d; |
|||
} |
|||
.ipt-radio view { |
|||
height: 33px; |
|||
line-height: 33px; |
|||
} |
|||
.list-box { |
|||
border-radius: 4px; |
|||
overflow: hidden; |
|||
box-sizing: border-box; |
|||
margin: 0; |
|||
padding: 0 32rpx; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-size: 14px; |
|||
font-variant: tabular-nums; |
|||
line-height: 1.5; |
|||
list-style: none; |
|||
font-feature-settings: 'tnum'; |
|||
position: relative; |
|||
} |
|||
.list-item { |
|||
min-height: 60px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
padding: 24rpx 0; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
</style> |
@ -0,0 +1,110 @@ |
|||
<template> |
|||
<view class="volume-box"> |
|||
<scroll-view scroll-x style="height: 100%; width: 100%"> |
|||
<view class="flex justify-between"> |
|||
<!-- <view class="flex flex-col items-center justify-center" style="flex-shrink: 0" @click="apply"> |
|||
<img class="volume-img" src="@/static/image.png" alt="" /> |
|||
<span class="mt-2" style="color: #70798c">申请</span> |
|||
</view> --> |
|||
<!-- <view class="flex flex-col items-center justify-center" style="flex-shrink: 0" @click="statistics"> |
|||
<img class="volume-img" src="@/static/image.png" alt="" /> |
|||
<span class="mt-2" style="color: #70798c">统计</span> |
|||
</view> --> |
|||
<view |
|||
class="flex flex-col items-center justify-center" |
|||
style="flex-shrink: 0" |
|||
v-for="(item, index) in btnList" |
|||
:key="index" |
|||
@click="jumpV(item)" |
|||
> |
|||
<!-- <img class="volume-img" src="@/static/image.png" alt="" /> --> |
|||
<img class="volume-img" :src="item.iconUrl || '@/static/image.png'" alt="" /> |
|||
<span class="mt-2" style="color: #70798c">{{ item.name }}</span> |
|||
</view> |
|||
</view> |
|||
</scroll-view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapGetters } from 'vuex'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
name: '', |
|||
url: '', |
|||
btnList: [], |
|||
}; |
|||
}, |
|||
computed: { |
|||
...mapState('user', ['user']), |
|||
...mapGetters('user', ['userId']), |
|||
}, |
|||
created() { |
|||
this.getInfo(); |
|||
}, |
|||
methods: { |
|||
statistics() { |
|||
console.log('统计'); |
|||
uni.navigateTo({ url: '/pages/Statistics/index' }); |
|||
}, |
|||
apply() { |
|||
console.log('申请'); |
|||
uni.navigateTo({ url: '/pages/Apply/index' }); |
|||
}, |
|||
// 获取按钮信息及跳转路径 |
|||
async getInfo() { |
|||
if (!this.user) { |
|||
setTimeout(() => { |
|||
this.getInfo(); |
|||
}, 10); |
|||
return; |
|||
} |
|||
const that = this; |
|||
const data = await that.$u.api.getQueryButton({}); |
|||
this.btnList = data; |
|||
console.log('data: ', data); |
|||
if (data && data.length) { |
|||
that.name = data[0].name; |
|||
that.url = data[0].url; |
|||
} else if (data && data.name) { |
|||
that.name = data.name; |
|||
that.url = data.url; |
|||
} else if (!data) { |
|||
setTimeout(() => { |
|||
that.getInfo(); |
|||
}, 500); |
|||
} |
|||
}, |
|||
// 跳转到问卷调查 |
|||
jumpV(item) { |
|||
const url = item.url; |
|||
if (item.jumpType === 0) { |
|||
uni.navigateTo({ url }); |
|||
} else { |
|||
if (this.user.phone) { |
|||
console.log('this.userId: ', this.userId); |
|||
this.$u.route('pages/questionnaire-webview/questionnaire-webview', { u: this.userId, url: url }); |
|||
} else { |
|||
// this.$u.route('/pages/get-phone-power/get-phone-power'); |
|||
this.$u.route('/pages/phone-bind/phone-bind'); |
|||
} |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.volume-img { |
|||
height: 100rpx; |
|||
width: 100rpx; |
|||
/* border-radius: 50%; */ |
|||
} |
|||
.volume-box { |
|||
width: 670rpx; |
|||
margin: 48rpx 32rpx 0 32rpx; |
|||
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.125); */ |
|||
border-radius: 8rpx; |
|||
/* padding: 32rpx; */ |
|||
} |
|||
</style> |
@ -0,0 +1,138 @@ |
|||
<template> |
|||
<view class="volume-box" v-if="itemList.length"> |
|||
<swiper class="swiper" circular :autoplay="autoplay" :interval="interval" :duration="duration" @change="changeCard"> |
|||
<!-- previous-margin="45rpx" |
|||
next-margin="45rpx" --> |
|||
<swiper-item v-for="(item, index) in itemList" :key="item.id" @click="openProject(item)"> |
|||
<view |
|||
class="swiper-item flex items-center justify-center" |
|||
:class="['card-item', currentCardIndex === index ? 'card-item-current' : 'card-item-default']" |
|||
style="transition: all 0.3s" |
|||
> |
|||
<view class="hos-name">{{ item.name }}</view> |
|||
<view class="doc-name flex items-center justify-center">{{ item.doctorName }}</view> |
|||
</view> |
|||
</swiper-item> |
|||
</swiper> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapGetters, mapMutations } from 'vuex'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
autoplay: false, |
|||
interval: 2000, |
|||
duration: 500, |
|||
itemList: [], |
|||
currentCardIndex: 0, |
|||
}; |
|||
}, |
|||
watch: { |
|||
projects(val) { |
|||
this.itemList = val; |
|||
this.itemList.forEach(item => { |
|||
item.showBorder = false; |
|||
item.showSubBorder = false; |
|||
item.showTopBorder = false; |
|||
}); |
|||
console.log('this.itemList: ', this.itemList); |
|||
}, |
|||
}, |
|||
computed: { |
|||
...mapState('user', ['user']), |
|||
...mapState('project', ['projects']), |
|||
...mapGetters('user', ['userId']), |
|||
}, |
|||
mounted() { |
|||
this.$nextTick(function () { |
|||
this.itemList = this.projects; |
|||
this.itemList.forEach(item => { |
|||
item.showBorder = false; |
|||
item.showSubBorder = false; |
|||
item.showTopBorder = false; |
|||
}); |
|||
}); |
|||
}, |
|||
methods: { |
|||
...mapMutations('carbasics', ['setGlobalData']), |
|||
...mapMutations('task', ['setPermanents', 'setDailyTasks']), |
|||
changeCard(e) { |
|||
this.currentCardIndex = e.detail.current; |
|||
}, |
|||
// 打开项目详情 |
|||
openProject(project) { |
|||
const { name, id, url, templateCode } = project; |
|||
url && (uni.$t.domain = url); |
|||
// if (templateCode === 'carbasics') { |
|||
// 跳转项目时,清空当前的插件缓存 |
|||
this.setGlobalData({}); |
|||
this.setPermanents(null); |
|||
this.setDailyTasks(null); |
|||
uni.navigateTo({ url: `/pages/task-page/task-page?u=${this.userId}&p=${id}&pname=${name}&url=${encodeURIComponent(url)}` }); |
|||
// } else { |
|||
// this.$u.route('pages/project-webview/project-webview', { |
|||
// u: this.userId, |
|||
// p: id, |
|||
// pname: name, |
|||
// url: encodeURIComponent(url), |
|||
// }); |
|||
// } |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.hos-name { |
|||
font-size: 32rpx; |
|||
font-family: Open Sans-Bold, Open Sans; |
|||
font-weight: bold; |
|||
color: #ffe03b; |
|||
position: absolute; |
|||
top: 70rpx; |
|||
left: 64rpx; |
|||
} |
|||
.doc-name { |
|||
min-width: 80rpx; |
|||
background: #ffc83b; |
|||
border-radius: 24rpx; |
|||
font-size: 20rpx; |
|||
font-family: Open Sans-Bold, Open Sans; |
|||
font-weight: bold; |
|||
color: #ffffff; |
|||
position: absolute; |
|||
top: 130rpx; |
|||
left: 64rpx; |
|||
padding: 4rpx 12rpx; |
|||
} |
|||
.card-item-default { |
|||
transform: scale(0.96, 0.96) translateY(8.5rpx); |
|||
} |
|||
.swiper { |
|||
height: 240rpx; |
|||
/* background: rgba(255, 255, 255, 0); */ |
|||
} |
|||
.swiper-item { |
|||
font-size: 32rpx; |
|||
color: #fff; |
|||
font-weight: bold; |
|||
border-radius: 8rpx; |
|||
height: 100%; |
|||
width: 100%; |
|||
background: url('https://test.tall.wiki/gateway1/carbasics/v4.0/uploads/project.png'); |
|||
background-size: 100% 100%; |
|||
position: relative; |
|||
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); */ |
|||
} |
|||
.volume-box { |
|||
width: calc(750rpx - 32px); |
|||
height: 240rpx; |
|||
margin: 36rpx 32rpx 0 32rpx; |
|||
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); */ |
|||
border-radius: 8rpx; |
|||
/* overflow: hidden; */ |
|||
/* background: #f9fafb; */ |
|||
/* padding: 32rpx; */ |
|||
} |
|||
</style> |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 228 KiB |
After Width: | Height: | Size: 500 KiB |
@ -0,0 +1,443 @@ |
|||
<template> |
|||
<div class="flex flex-col"> |
|||
<view class="bg-white flex flex-col" style="padding: 0" v-if="onceList.length"> |
|||
<div class="w-full" style="max-height: 342px; overflow-y: scroll; padding: 16px 16px 0 16px"> |
|||
<div class="w-full ver-box" v-for="item in onceList" :key="item.id"> |
|||
<div class="flex ver-title items-center justify-between"> |
|||
<div class="flex" style="font-size: 16px; font-weight: bold"> |
|||
<div class="mr-2">{{ item.department }}</div> |
|||
<div>{{ item.position }}</div> |
|||
</div> |
|||
<div class="over-hidden" style="color: #70798c; text-align: right; font-size: 12px; font-weight: bold; width: 40%"> |
|||
{{ item.hospitalName }} |
|||
</div> |
|||
</div> |
|||
<div class="flex flex-row flex-nowrap ver-content"> |
|||
<div> |
|||
<div class="con-tip mt-2 mb-3">姓名</div> |
|||
<div class="con-tip">手机号</div> |
|||
</div> |
|||
<div> |
|||
<div class="con-tip mt-2 mb-3"> |
|||
{{ item.name }} |
|||
</div> |
|||
<div class="con-tip"> |
|||
{{ item.phone }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div v-if="item.auditStatus === 0" class="ver-over"> |
|||
<img src="./img/0.png" style="height: 80px; width: 59px" alt="" /> |
|||
</div> |
|||
<div v-else-if="item.auditStatus === 1" class="ver-over"> |
|||
<img src="./img/1.png" style="height: 80px; width: 59px" alt="" /> |
|||
</div> |
|||
<div v-else-if="item.auditStatus === 2" class="ver-over"> |
|||
<img src="./img/2.png" style="height: 80px; width: 59px" alt="" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</view> |
|||
<view class="bg-white"> |
|||
<div class="apply-title w-full my-2">“暴风眼”(Typhoneye)小程序账户登记</div> |
|||
<div class="apply-control mb-2">“暴风眼”(Typhoneye)是急诊急救数字化管理平台基础版的简称。</div> |
|||
<div class="apply-control mb-2"> |
|||
“暴风眼”质控模式践行“以病人为核心”的理念,医疗资源围绕病人运转,尽量减少病人不必要的“无效位移”和“无效等待”。 |
|||
</div> |
|||
<div class="apply-control mb-2">您的参与对我们非常重要,有问题请联系首页客服:</div> |
|||
<div class="w-full flex justify-center"> |
|||
<img src="./img/kefu.jpg" style="width: 130px; margin: 8px auto" @click="showImg = true" /> |
|||
</div> |
|||
</view> |
|||
<view class="bg-white"> |
|||
<div class="w-full item-title flex align-start">医院</div> |
|||
<div class="w-full hos-box"> |
|||
<u-radio-group v-model="value" class="w-full" wrap @change="onChange"> |
|||
<div v-for="(item, index) in hosList" :key="index" class="mb-3 flex justify-between title"> |
|||
{{ item.name }} |
|||
<u-radio :name="item.name"> </u-radio> |
|||
</div> |
|||
</u-radio-group> |
|||
<view v-if="value === '其他'" style="width: calc(100% - 32rpx)" class="pb-3 title"> |
|||
<u-input class="w-full" @blur="iptBlur" border v-model="hosName" placeholder="请输入..." /> |
|||
</view> |
|||
</div> |
|||
</view> |
|||
<view class="bg-white"> |
|||
<div class="w-full item-title flex align-start">部门/职位</div> |
|||
<div class="w-full post-box"> |
|||
<!-- <u-input v-model="departmentName" type="text" border disabled @click="showDep = true" placeholder="选择部门" class="mr-4" /> |
|||
<u-input v-model="posiName" type="text" border disabled @click="showPositions" placeholder="选择职位" /> --> |
|||
<view class="mb-3 flex justify-between" @click="showDep = true"> |
|||
<view class="title">部门</view> |
|||
<view> |
|||
{{ departmentName }} |
|||
<u-icon class="ml-2" name="arrow-down" color="#70798c"></u-icon> |
|||
</view> |
|||
</view> |
|||
<view class="flex justify-between" @click="showPositions"> |
|||
<view class="title">职位</view> |
|||
<view> |
|||
{{ posiName }} |
|||
<u-icon class="ml-2" name="arrow-down" color="#70798c"></u-icon> |
|||
</view> |
|||
</view> |
|||
</div> |
|||
</view> |
|||
<view class="bg-white"> |
|||
<div class="w-full item-title flex align-start">信息</div> |
|||
<div class="w-full info-box"> |
|||
<!-- <u-input v-model="departmentName" type="text" border disabled @click="showDep = true" placeholder="选择部门" class="mr-4" /> |
|||
<u-input v-model="posiName" type="text" border disabled @click="showPositions" placeholder="选择职位" /> --> |
|||
<view class="flex items-center justify-between" @click="showDep = true"> |
|||
<view class="mb-1 title">姓名</view> |
|||
<view> |
|||
<u-input placeholder="请输入" input-align="right" v-model="FilledBy"></u-input> |
|||
</view> |
|||
</view> |
|||
<view class="flex justify-between" @click="showPositions"> |
|||
<view class="title">手机号</view> |
|||
<view> |
|||
<span>{{ FilledTel }}</span> |
|||
</view> |
|||
</view> |
|||
</div> |
|||
</view> |
|||
<!-- <view class="bg-white mb-2 flex items-center justify-between"> |
|||
<div class="col-title">姓名</div> |
|||
<div> |
|||
<u-input placeholder="请输入" border input-align="right" v-model="FilledBy"></u-input> |
|||
</div> |
|||
</view> |
|||
<view class="bg-white mb-2 flex items-center justify-between"> |
|||
<div class="col-title">手机号</div> |
|||
<div> |
|||
<span>{{ FilledTel }}</span> |
|||
</div> |
|||
</view> --> |
|||
<u-button shape="circle" :disabled="waiting" type="primary" :custom-style="submitBtn" @click="submit">提交申请</u-button> |
|||
<u-select |
|||
v-model="showDep" |
|||
:list="departmentList" |
|||
value-name="departmentCode" |
|||
label-name="departmentName" |
|||
@confirm="handleChange" |
|||
></u-select> |
|||
<u-select v-model="showPos" :list="positions" value-name="positionCode" label-name="positionName" @confirm="handleChangePos"></u-select> |
|||
<div class="img-box flex items-center" v-if="showImg" @click="showImg = false"> |
|||
<img src="./img/kefu.jpg" class="w-full h-full" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
export default { |
|||
name: 'Apply', |
|||
components: {}, |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
value: '', |
|||
onceList: [], // 已经提交过的数组 |
|||
hosList: [], |
|||
departmentList: [], |
|||
positions: [], |
|||
hosName: '', // 医院选择的其他输入框 |
|||
departmentName: '', // 部门名称 |
|||
departmentCode: '', // 部门code |
|||
posiName: '', // 职位名称 |
|||
posiCode: '', // 职位Code |
|||
FilledBy: '', // 姓名 |
|||
FilledTel: '', // 手机号 |
|||
waiting: false, |
|||
showImg: false, |
|||
showDep: false, |
|||
showPos: false, |
|||
submitBtn: { |
|||
height: '46px', |
|||
margin: '32rpx 32rpx 48px 32rpx', |
|||
background: 'linear-gradient(136deg, #7BC0FF 0%, #4D88FF 100%)', |
|||
}, |
|||
}; |
|||
}, |
|||
computed: { |
|||
...mapState('user', ['user']), |
|||
}, |
|||
methods: { |
|||
// 选择职位select,先判断是否选择了部门 |
|||
showPositions() { |
|||
if (!this.departmentCode) { |
|||
this.$t.ui.showToast('请先选择部门'); |
|||
} else { |
|||
this.showPos = true; |
|||
} |
|||
}, |
|||
// 查询已经提交过的申请 |
|||
async getMyApply() { |
|||
try { |
|||
const param = { |
|||
auditStatus: '', |
|||
name: '', |
|||
}; |
|||
const res = await this.$u.api.queryMyApply(param); |
|||
this.onceList = res; |
|||
} catch (error) { |
|||
this.$t.ui.showToast('网络异常,查询申请列表失败,请稍后重试'); |
|||
} |
|||
}, |
|||
// 获取医院列表 |
|||
async getHosList() { |
|||
try { |
|||
const res = await this.$u.api.queryHospital({}); |
|||
const other = { name: '其他' }; |
|||
res.push(other); |
|||
this.hosList = res; |
|||
console.log('this.hosList: ', this.hosList); |
|||
} catch (error) { |
|||
this.$t.ui.showToast('网络异常,请稍后重试'); |
|||
} |
|||
}, |
|||
// 获取部门与职位 |
|||
async getPosList() { |
|||
try { |
|||
const param = { name: this.hosName ? this.hosName : this.value }; |
|||
const res = await this.$u.api.queryDepartment(param); |
|||
this.departmentList = res; |
|||
console.log('this.departmentList: ', this.departmentList); |
|||
} catch (error) { |
|||
this.$t.ui.showToast('网络异常,请稍后重试'); |
|||
} |
|||
}, |
|||
// 判断医院单选,切换时,清空 其他输入框 |
|||
onChange(e) { |
|||
if (e === '其他') { |
|||
this.hosName = ''; |
|||
} |
|||
this.getPosList(); |
|||
}, |
|||
// 医院的其他输入框失去焦点时,重新请求部门的接口 |
|||
iptBlur() { |
|||
this.getPosList(); |
|||
}, |
|||
// 修改部门选项 |
|||
handleChange(e) { |
|||
this.departmentName = e[0].label; |
|||
this.departmentCode = e[0].value; |
|||
for (let i = 0; i < this.departmentList.length; i++) { |
|||
const item = this.departmentList[i]; |
|||
if (item.departmentCode === e[0].value) { |
|||
this.positions = item.positions; |
|||
} |
|||
} |
|||
this.posiName = ''; |
|||
this.posiCode = ''; |
|||
}, |
|||
// 修改职位选项 |
|||
handleChangePos(e) { |
|||
this.posiName = e[0].label; |
|||
this.posiCode = e[0].value; |
|||
}, |
|||
// 提交数据 |
|||
async submit() { |
|||
this.waiting = true; |
|||
try { |
|||
if (!this.hosName && this.value === '其他') { |
|||
this.$t.ui.showToast('请输入医院名称'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
if (!this.value) { |
|||
this.$t.ui.showToast('请选择医院'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
if (!this.departmentName) { |
|||
this.$t.ui.showToast('请选择部门'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
if (!this.posiName) { |
|||
this.$t.ui.showToast('请选择职位'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
if (!this.FilledBy) { |
|||
this.$t.ui.showToast('请填写姓名'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
if (!this.FilledTel) { |
|||
this.$t.ui.showToast('请填写手机号'); |
|||
this.waiting = false; |
|||
return; |
|||
} |
|||
const param = { |
|||
departmentCode: this.departmentCode, |
|||
departmentName: this.departmentName, |
|||
hospitalName: this.hosName ? this.hosName : this.value, |
|||
positionCode: this.posiCode, |
|||
positionName: this.posiName, |
|||
submitter: this.FilledBy, |
|||
submitterPhone: this.FilledTel, |
|||
}; |
|||
const res = await this.$u.api.submitAccount(param); |
|||
this.$t.ui.showToast('提交成功'); |
|||
this.departmentCode = ''; |
|||
this.departmentName = ''; |
|||
// this.hosName = ''; // 医院其他输入框 |
|||
this.posiCode = ''; |
|||
this.posiName = ''; |
|||
// this.FilledBy = ''; // 姓名 |
|||
this.getMyApply(); |
|||
uni.pageScrollTo({ |
|||
scrollTop: 0, |
|||
duration: 100, |
|||
}); |
|||
this.waiting = false; |
|||
} catch (error) { |
|||
this.$t.ui.showToast('网络异常,请稍后重试'); |
|||
this.waiting = false; |
|||
} |
|||
}, |
|||
}, |
|||
watch: {}, |
|||
|
|||
// 页面周期函数--监听页面加载 |
|||
onLoad() { |
|||
if (this.user.phone) { |
|||
this.FilledTel = this.user.phone; |
|||
} |
|||
this.getMyApply(); |
|||
this.getHosList(); |
|||
this.getPosList(); |
|||
}, |
|||
// 页面周期函数--监听页面初次渲染完成 |
|||
onReady() {}, |
|||
// 页面周期函数--监听页面显示(not-nvue) |
|||
onShow() {}, |
|||
// 页面周期函数--监听页面隐藏 |
|||
onHide() {}, |
|||
// 页面周期函数--监听页面卸载 |
|||
onUnload() {}, |
|||
// 页面处理函数--监听用户下拉动作 |
|||
// onPullDownRefresh() { uni.stopPullDownRefresh(); }, |
|||
// 页面处理函数--监听用户上拉触底 |
|||
// onReachBottom() {}, |
|||
// 页面处理函数--监听页面滚动(not-nvue) |
|||
// onPageScroll(event) {}, |
|||
// 页面处理函数--用户点击右上角分享 |
|||
// onShareAppMessage(options) {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.title { |
|||
color: #70798c; |
|||
font-size: 14px; |
|||
font-weight: bold; |
|||
} |
|||
.bg-white { |
|||
background-color: white; |
|||
/* margin-bottom: 12px; */ |
|||
padding: 16px; |
|||
} |
|||
.img-box { |
|||
width: 100vw; |
|||
height: 100vh; |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
background: rgba(0, 0, 0, 0.45); |
|||
z-index: 1000; |
|||
} |
|||
.over-hidden { |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
.ver-over { |
|||
height: 80px; |
|||
width: 60px; |
|||
text-align: center; |
|||
line-height: 56px; |
|||
position: absolute; |
|||
right: 12px; |
|||
bottom: 16px; |
|||
} |
|||
.con-tip { |
|||
font-size: 16px; |
|||
color: #70798c; |
|||
min-width: 80px; |
|||
} |
|||
.ver-content { |
|||
padding: 16px; |
|||
height: 100px; |
|||
} |
|||
.ver-box { |
|||
border-left: 6rpx solid #1bb299; |
|||
box-shadow: 0 0 12px 1px #eee; |
|||
border-radius: 10rpx; |
|||
margin-bottom: 16px; |
|||
position: relative; |
|||
} |
|||
.hos-box { |
|||
height: auto; |
|||
border-left: 6rpx solid #4f8bff; |
|||
box-shadow: 0 0 12px 1px #eee; |
|||
border-radius: 10rpx; |
|||
/* margin-bottom: 16px; */ |
|||
position: relative; |
|||
padding: 24rpx 0 0rpx 20rpx; |
|||
} |
|||
.post-box { |
|||
height: auto; |
|||
border-left: 6rpx solid #1bb299; |
|||
box-shadow: 0 0 12px 1px #eee; |
|||
border-radius: 10rpx; |
|||
position: relative; |
|||
padding: 24rpx 20rpx; |
|||
} |
|||
.info-box { |
|||
height: auto; |
|||
border-left: 6rpx solid #ff8833; |
|||
box-shadow: 0 0 12px 1px #eee; |
|||
border-radius: 10rpx; |
|||
position: relative; |
|||
padding: 8rpx 20rpx 24rpx 20rpx; |
|||
} |
|||
.ver-title { |
|||
height: 52px; |
|||
border-bottom: 1px solid #eee; |
|||
color: #3e3d4d; |
|||
font-weight: bold; |
|||
padding: 0 16px; |
|||
} |
|||
/deep/.ant-select { |
|||
width: 45%; |
|||
} |
|||
.item-title { |
|||
height: 40px; |
|||
/* border-bottom: 1px solid #eee; */ |
|||
font-weight: bold; |
|||
font-size: 18px; |
|||
font-weight: bold; |
|||
color: #3e3d4d; |
|||
} |
|||
.col-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
} |
|||
.apply-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: #333; |
|||
text-align: center; |
|||
} |
|||
.apply-control { |
|||
font-size: 14px; |
|||
color: #666; |
|||
} |
|||
</style> |
@ -0,0 +1,197 @@ |
|||
<template> |
|||
<div class="flex flex-col"> |
|||
<div class="mt-2" style="position: relative"> |
|||
<div class="w-full"> |
|||
<p class="title-p title-one">山西省急性缺血性脑卒中数据汇总表</p> |
|||
<p class="title-p title-two">2021年7月-12月收治急性脑梗死患者相关数据</p> |
|||
</div> |
|||
<!-- <div class="flex items-center justify-center mr-2" style="position: absolute; right: 2px; top: 12px"> |
|||
<a href="tel:13485387689" id="tel-a" style="display: none"> </a> |
|||
</div> --> |
|||
</div> |
|||
<div class="p-4"> |
|||
<u-form :model="form" ref="uForm" label-width="150"> |
|||
<u-form-item label="市/县" class="flex"> |
|||
<u-input v-model="form.county" @click="show = true" placeholder="请选择市/县" /> |
|||
</u-form-item> |
|||
<u-form-item label="医院名称"><u-input v-model="form.intro" /></u-form-item> |
|||
<u-form-item label="性别"><u-input v-model="form.sex" type="select" /></u-form-item> |
|||
<u-form-item label="水果"> |
|||
<u-checkbox-group> |
|||
<u-checkbox v-model="item.checked" v-for="(item, index) in checkboxList" :key="index" :name="item.name"> |
|||
{{ item.name }} |
|||
</u-checkbox> |
|||
</u-checkbox-group> |
|||
</u-form-item> |
|||
<u-form-item label="味道"> |
|||
<u-radio-group v-model="radio"> |
|||
<u-radio v-for="(item, index) in radioList" :key="index" :name="item.name" :disabled="item.disabled"> |
|||
{{ item.name }} |
|||
</u-radio> |
|||
</u-radio-group> |
|||
</u-form-item> |
|||
<u-form-item label="开关"><u-switch slot="right" v-model="switchVal"></u-switch></u-form-item> |
|||
</u-form> |
|||
</div> |
|||
<u-select |
|||
v-model="show" |
|||
value-name="id" |
|||
label-name="name" |
|||
child-name="child" |
|||
mode="mutil-column-auto" |
|||
:list="list" |
|||
@confirm="chooseArea" |
|||
></u-select> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import Mixin from './mixin'; |
|||
import { mapState } from 'vuex'; |
|||
export default { |
|||
mixins: [Mixin], |
|||
data() { |
|||
return { |
|||
form: { |
|||
county: '', |
|||
countyId: '', |
|||
intro: '', |
|||
sex: '', |
|||
}, |
|||
show: false, |
|||
list: [], |
|||
isSearch: false, |
|||
hosList: [], |
|||
checkboxList: [ |
|||
{ |
|||
name: '苹果', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
{ |
|||
name: '雪梨', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
{ |
|||
name: '柠檬', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
], |
|||
radioList: [ |
|||
{ |
|||
name: '鲜甜', |
|||
disabled: false, |
|||
}, |
|||
{ |
|||
name: '麻辣', |
|||
disabled: false, |
|||
}, |
|||
], |
|||
radio: '', |
|||
switchVal: false, |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['user']), |
|||
created() { |
|||
this.getList(); |
|||
// this.getPosition(); |
|||
this.getArea(); |
|||
this.getHosName(); |
|||
}, |
|||
methods: { |
|||
// 选择了地区 |
|||
chooseArea(e) { |
|||
let str = ''; |
|||
let ids = ''; |
|||
for (let i = 0; i < e.length; i++) { |
|||
str += e[i].label + (i < e.length - 1 ? '>' : ''); |
|||
ids += e[i].value + (i < e.length - 1 ? ',' : ''); |
|||
} |
|||
this.form.county = str; |
|||
this.form.countyId = ids; |
|||
}, |
|||
async getHosName() { |
|||
try { |
|||
const params = {}; |
|||
const res = await this.$u.api.hospitalNameEcho(params); |
|||
if (res) { |
|||
console.log('res: ', res); |
|||
} |
|||
} catch (error) {} |
|||
}, |
|||
async searchHosList(name) { |
|||
try { |
|||
if (this.isSearch) { |
|||
return; |
|||
} |
|||
this.isSearch = true; |
|||
this.hosList = []; |
|||
const params = { |
|||
area: this.form.countyId, |
|||
name, |
|||
}; |
|||
const res = await this.$u.api.queryHospitalList(params); |
|||
if (res) { |
|||
console.log(res); |
|||
res.forEach(item => { |
|||
this.data.push(item.name); |
|||
}); |
|||
} else { |
|||
this.$t.ui.showToast('医院搜索失败,请手动输入'); |
|||
} |
|||
} catch (error) { |
|||
this.$t.ui.showToast('医院搜索失败,请手动输入'); |
|||
} |
|||
this.isSearch = false; |
|||
}, |
|||
// 查询地区数组 |
|||
async getArea() { |
|||
try { |
|||
const params = { id: '140000' }; |
|||
const res = await this.$u.api.searchArea(params); |
|||
if (res) { |
|||
this.list = [...res]; |
|||
} else { |
|||
this.$t.ui.showToast(msg); |
|||
} |
|||
} catch (error) { |
|||
this.$t.ui.showToast('网络异常,请检查您的网络!'); |
|||
} |
|||
}, |
|||
// 查询职位 |
|||
async getPosition() { |
|||
try { |
|||
const params = { param: {} }; |
|||
const res = await this.$u.api.searchPosition(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
let list = []; |
|||
for (var i = 0; i < data.length; i++) { |
|||
list.push(data[i].name); |
|||
} |
|||
console.log('职位list: ', list); |
|||
} else { |
|||
console.log(msg); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.title-one { |
|||
font-size: 18px; |
|||
font-weight: bold; |
|||
} |
|||
.title-two { |
|||
font-size: 12px; |
|||
color: #666; |
|||
} |
|||
.title-p { |
|||
margin-bottom: 2px; |
|||
text-align: center; |
|||
} |
|||
</style> |
@ -0,0 +1,113 @@ |
|||
const mixin = { |
|||
data() { |
|||
return { |
|||
codeValue: { |
|||
'CITY-COUNTY': [], |
|||
'HOS-NAME': null, |
|||
'HOS-LEVEL': [], |
|||
'HOS-GRADE': null, |
|||
'HOS-KESHI': null, |
|||
'HOS-ZHIWU': null, |
|||
'HOS-MAN': null, |
|||
'HOS-TEL': null, |
|||
}, |
|||
list: [], |
|||
}; |
|||
}, |
|||
methods: { |
|||
// 试题类型:type: 1:省市区三级下拉 11:医院等级 2:输入框模糊搜索 3:下拉菜单 5:输入框
|
|||
getList() { |
|||
this.list = [ |
|||
{ |
|||
name: '', |
|||
testList: [ |
|||
{ |
|||
secondName: '', |
|||
contentList: [ |
|||
{ |
|||
name: '市/县', |
|||
code: 'CITY-COUNTY', |
|||
value: this.codeValue['CITY-COUNTY'], |
|||
type: 1, |
|||
itemList: [], |
|||
}, |
|||
{ |
|||
name: '医院名称', |
|||
code: 'HOS-NAME', |
|||
value: this.codeValue['HOS-NAME'], |
|||
type: 2, |
|||
}, |
|||
{ |
|||
name: '医院等级', |
|||
code: 'HOS-LEVEL', |
|||
value: this.codeValue['HOS-LEVEL'], |
|||
type: 11, |
|||
itemList: [ |
|||
{ |
|||
value: '二级', |
|||
label: '二级', |
|||
children: [ |
|||
{ |
|||
value: '甲等', |
|||
label: '甲等', |
|||
}, |
|||
{ |
|||
value: '乙等', |
|||
label: '乙等', |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
value: '三级', |
|||
label: '三级', |
|||
children: [ |
|||
{ |
|||
value: '甲等', |
|||
label: '甲等', |
|||
}, |
|||
{ |
|||
value: '乙等', |
|||
label: '乙等', |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
name: '科室', |
|||
code: 'HOS-KESHI', |
|||
value: this.codeValue['HOS-KESHI'], |
|||
type: 3, |
|||
itemList: ['神经内科', '内科', '神经外科'], |
|||
}, |
|||
{ |
|||
name: '职务', |
|||
code: 'HOS-ZHIWU', |
|||
value: this.codeValue['HOS-ZHIWU'], |
|||
type: 3, |
|||
// itemList: [],
|
|||
itemList: ['科主任', '副主任', '卒中质控医生', '医生'], |
|||
}, |
|||
{ |
|||
name: '联系人', |
|||
code: 'HOS-MAN', |
|||
value: this.codeValue['HOS-MAN'], |
|||
type: 5, |
|||
}, |
|||
{ |
|||
name: '联系电话', |
|||
code: 'HOS-TEL', |
|||
value: this.codeValue['HOS-TEL'], |
|||
disable: true, |
|||
type: 5, |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
}, |
|||
}, |
|||
}; |
|||
|
|||
export default mixin; |
@ -0,0 +1,302 @@ |
|||
<template> |
|||
<div class="detail"> |
|||
<view class="title"> 平车信息 </view> |
|||
<view |
|||
class="car-box bor-left-lv" |
|||
v-if="car" |
|||
:class="{ |
|||
'bor-left-lv': car.carStatus === 1, |
|||
'bor-left-zhan': car.carStatus === 0 || car.carStatus === 3, |
|||
'bor-left-xian': car.carStatus === 2, |
|||
}" |
|||
@click="openDetail" |
|||
> |
|||
<!-- 'bor-left-dian': car.carStatus === 3, |
|||
'bor-left-li': car.carStatus === 4, --> |
|||
<view class="car-title flex items-center"> |
|||
<view class="car-no">{{ car.carNo }}</view> |
|||
<view style="margin-right: 16rpx; font-size: 32rpx">{{ |
|||
car.nursesName ? car.nursesName : car.carStatus === 3 ? '无病历' : '无名氏' |
|||
}}</view> |
|||
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view> |
|||
<view style="font-size: 32rpx">{{ car.age || '年龄' }}</view> |
|||
</view> |
|||
<view class="info-box flex items-center"> |
|||
<view class="car-no flex items-center"> |
|||
<img v-if="car.carStatus === 1" src="@/static/news/绿.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img |
|||
v-else-if="car.carStatus === 0 || car.carStatus === 3" |
|||
src="@/static/news/占.png" |
|||
style="width: 60rpx; height: 60rpx" |
|||
alt="" |
|||
/> |
|||
<img v-else-if="car.carStatus === 2" src="@/static/news/闲.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<!-- <img v-else-if="car.carStatus === 3" src="@/static/news/电.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img v-else-if="car.carStatus === 4" src="@/static/news/离.png" style="width: 60rpx; height: 60rpx" alt="" /> --> |
|||
</view> |
|||
<view> |
|||
<view class="flex"> |
|||
<view |
|||
class="bing" |
|||
:class="{ |
|||
lv: car.carStatus === 1, |
|||
zhan: car.carStatus === 0 || car.carStatus === 3, |
|||
xian: car.carStatus === 2, |
|||
}" |
|||
v-for="(medical, mIndex) in car.medicalHistoryList" |
|||
:key="mIndex" |
|||
> |
|||
<!-- dian: car.carStatus === 3, |
|||
li: car.carStatus === 4, --> |
|||
{{ medical }} |
|||
</view> |
|||
</view> |
|||
<view class="id-card">身份证:{{ car.idcard || '暂无' }}</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<view class="title"> 时间轴 </view> |
|||
<view class="time-line-box"> |
|||
<view class="flex" v-for="(step, stepIndex) in stepList" :key="step.stepId"> |
|||
<view class="time-line-left flex flex-col items-center"> |
|||
<view class="time-line-cir" :class="step.type === 1 ? 'green' : step.type === 2 ? 'blue' : ''"></view> |
|||
<view |
|||
class="time-line-bor" |
|||
v-if="stepIndex !== stepList.length - 1" |
|||
:class="step.type === 1 ? 'green-bg' : step.type === 2 ? 'blue-bg' : ''" |
|||
></view> |
|||
</view> |
|||
<view class="time-line-right flex-1" style="margin-top: -16rpx"> |
|||
<view class="w-full name-status flex justify-between"> |
|||
<view :class="step.type === 1 ? 'green' : step.type === 2 ? 'blue' : ''"> |
|||
{{ step.stepName }} |
|||
</view> |
|||
<view :class="step.type === 1 ? 'green' : step.type === 2 ? 'blue' : ''"> |
|||
<!-- {{ step.type }} --> |
|||
{{ step.type === 0 ? '未开始' : step.type === 1 ? '待确认' : '已结束' }} |
|||
</view> |
|||
</view> |
|||
<view class="w-full time-status flex justify-between"> |
|||
<view class="flex items-center" :class="step.type === 1 ? 'green' : step.type === 2 ? 'blue' : ''"> |
|||
<!-- {{ step.stepName }} --> |
|||
<img src="@/static/news/logo2xg.png" v-if="step.type === 2" style="width: 32rpx; height: 32rpx; margin-right: 8rpx" alt="" /> |
|||
<img src="@/static/news/logo2x.png" v-else style="width: 32rpx; height: 32rpx; margin-right: 8rpx" alt="" /> |
|||
{{ step.startTime ? $moment(+step.startTime).format('YYYY-MM-DD HH:mm') : '未知' }} |
|||
</view> |
|||
<view> |
|||
<!-- {{ step.type }} --> |
|||
<u-icon size="32" name="edit-pen" :color="step.type === 1 ? '#00c767' : step.type === 2 ? '#4f8bff' : ''"></u-icon> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
export default { |
|||
name: 'detail', |
|||
components: {}, |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
car: null, |
|||
status: 0, |
|||
stepList: [], |
|||
}; |
|||
}, |
|||
computed: {}, |
|||
methods: { |
|||
...mapMutations('carbasics', ['setFirstAidId', 'setDetailValueType']), |
|||
// 查看病历填写详情 |
|||
openDetail() { |
|||
this.setFirstAidId(this.car.firstAidId); |
|||
this.setDetailValueType(this.car.demonstrate); |
|||
uni.navigateTo({ url: `/pages/patientLine/patientLine?caseType=${0}` }); |
|||
}, |
|||
async getSteps() { |
|||
try { |
|||
const params = { firstAidId: this.car.firstAidId }; |
|||
const res = await this.$u.api.getStep(params); |
|||
this.stepList = [...res]; |
|||
} catch (error) { |
|||
console.log('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
watch: {}, |
|||
|
|||
// 页面周期函数--监听页面加载 |
|||
onLoad(options) { |
|||
console.log('options: ', options); |
|||
this.car = JSON.parse(options.info); |
|||
console.log('this.car: ', this.car); |
|||
this.getSteps(); |
|||
}, |
|||
// 页面周期函数--监听页面初次渲染完成0 |
|||
onReady() {}, |
|||
// 页面周期函数--监听页面显示(not-nvue) |
|||
onShow() {}, |
|||
// 页面周期函数--监听页面隐藏 |
|||
onHide() {}, |
|||
// 页面周期函数--监听页面卸载 |
|||
onUnload() {}, |
|||
// 页面处理函数--监听用户下拉动作 |
|||
// onPullDownRefresh() { uni.stopPullDownRefresh(); }, |
|||
// 页面处理函数--监听用户上拉触底 |
|||
// onReachBottom() {}, |
|||
// 页面处理函数--监听页面滚动(not-nvue) |
|||
// onPageScroll(event) {}, |
|||
// 页面处理函数--用户点击右上角分享 |
|||
// onShareAppMessage(options) {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.blue-bg { |
|||
background: #4f8bff !important; |
|||
} |
|||
.green-bg { |
|||
background: #00c767 !important; |
|||
} |
|||
.blue { |
|||
color: #4f8bff !important; |
|||
border-color: #4f8bff !important; |
|||
} |
|||
.green { |
|||
color: #00c767 !important; |
|||
border-color: #00c767 !important; |
|||
} |
|||
.name-status { |
|||
font-size: 32rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #a3acbf; |
|||
} |
|||
.time-status { |
|||
margin-top: 12rpx; |
|||
font-size: 24rpx; |
|||
font-family: OPPOSans-Medium, OPPOSans; |
|||
font-weight: 500; |
|||
color: #a3acbf; |
|||
} |
|||
.time-line-left { |
|||
margin-right: 24rpx; |
|||
} |
|||
.time-line-cir { |
|||
width: 8px; |
|||
height: 8px; |
|||
border: 4rpx solid #a3acbf; |
|||
border-radius: 50%; |
|||
opacity: 1; |
|||
} |
|||
.time-line-bor { |
|||
width: 4rpx; |
|||
height: 112rpx; |
|||
background: #a3acbf; |
|||
opacity: 1; |
|||
} |
|||
.time-line-box { |
|||
margin-right: 24rpx; |
|||
width: calc(100% - 64rpx); |
|||
/* height: 100rpx; */ |
|||
margin: 32rpx; |
|||
padding: 32rpx; |
|||
background: #ffffff; |
|||
box-shadow: 0px 4px 20px 0px rgba(39, 59, 97, 0.08); |
|||
border-radius: 24rpx; |
|||
opacity: 1; |
|||
} |
|||
.car-title { |
|||
margin-left: 42rpx; |
|||
font-size: 36rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #70798c; |
|||
} |
|||
.car-no { |
|||
width: 140rpx; |
|||
margin-right: 10rpx; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
/* display: -webkit-box; */ |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
.id-card { |
|||
font-size: 28rpx; |
|||
margin-top: 8rpx; |
|||
font-family: OPPOSans-Medium, OPPOSans; |
|||
font-weight: 500; |
|||
color: #70798c; |
|||
} |
|||
.lv { |
|||
background: #d2fff0; |
|||
color: #3dc195; |
|||
} |
|||
.zhan { |
|||
background: #ffece4; |
|||
color: #ff8833; |
|||
} |
|||
.xian { |
|||
background: #e4edff; |
|||
color: #5990ff; |
|||
} |
|||
.dian { |
|||
background: #ffe3dd; |
|||
color: #ff7b60; |
|||
} |
|||
.li { |
|||
background: #ececec; |
|||
color: #70798c; |
|||
} |
|||
.bing { |
|||
padding: 2rpx 8rpx; |
|||
font-size: 20rpx; |
|||
margin-right: 8rpx; |
|||
} |
|||
.info-box { |
|||
margin-left: 42rpx; |
|||
margin-top: 8rpx; |
|||
height: 80rpx; |
|||
} |
|||
.MoreCar { |
|||
height: 100vh; |
|||
overflow: hidden; |
|||
} |
|||
.car-box { |
|||
height: 188rpx; |
|||
width: calc(100% - 64rpx); |
|||
box-sizing: border-box; |
|||
margin: 32rpx 32rpx; |
|||
/* margin-bottom: 0; */ |
|||
border-radius: 8rpx; |
|||
box-shadow: 0 0 30rpx 5rpx rgba(0, 0, 0, 0.1); |
|||
padding: 24rpx 0; |
|||
} |
|||
.bor-left-lv { |
|||
border-left: 4rpx solid #1bb299; |
|||
} |
|||
.bor-left-zhan { |
|||
border-left: 4rpx solid #ff8833; |
|||
} |
|||
.bor-left-xian { |
|||
border-left: 4rpx solid #5990ff; |
|||
} |
|||
.bor-left-dian { |
|||
border-left: 4rpx solid #ff7b60; |
|||
} |
|||
.bor-left-li { |
|||
border-left: 4rpx solid #70798c; |
|||
} |
|||
.title { |
|||
margin-left: 32rpx; |
|||
margin-top: 32rpx; |
|||
font-size: 36rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #3e3d4d; |
|||
} |
|||
</style> |
@ -0,0 +1,244 @@ |
|||
<template> |
|||
<div class="MoreCar"> |
|||
<view style="width: 100%; box-shadow: 0 0 4rpx rgba(0, 0, 0, 0.1)"> |
|||
<u-tabs |
|||
:list="list" |
|||
:is-scroll="false" |
|||
:current="status" |
|||
@change="change" |
|||
:active-item-style="itemStyle" |
|||
bar-width="82" |
|||
inactive-color="#8C9AA3" |
|||
> |
|||
</u-tabs> |
|||
</view> |
|||
<template v-if="carList.length"> |
|||
<scroll-view scroll-y style="height: calc(100% - 84rpx); margin-top: 4rpx; padding: 0 16rpx"> |
|||
<div style="height: 1rpx; width: 100%"></div> |
|||
<view |
|||
v-for="car in carList" |
|||
:key="car.carId" |
|||
class="car-box bor-left-lv" |
|||
:class="{ |
|||
'bor-left-lv': status === 0, |
|||
'bor-left-zhan': status === 1, |
|||
'bor-left-xian': status === 2, |
|||
'bor-left-dian': status === 3, |
|||
'bor-left-li': status === 4, |
|||
}" |
|||
@click="detailCar(car)" |
|||
> |
|||
<view class="title flex items-center"> |
|||
<view class="car-no">{{ car.carNo }}</view> |
|||
<view style="margin-right: 16rpx; font-size: 32rpx">{{ |
|||
car.nursesName ? car.nursesName : car.carStatus === 3 ? '无病历' : '无名氏' |
|||
}}</view> |
|||
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view> |
|||
<view style="font-size: 32rpx">{{ car.age || '年龄' }}</view> |
|||
</view> |
|||
<view class="info-box flex items-center"> |
|||
<view class="car-no flex items-center"> |
|||
<img v-if="status === 0" src="@/static/news/绿.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img v-else-if="status === 1" src="@/static/news/占.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img v-else-if="status === 2" src="@/static/news/闲.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img v-else-if="status === 3" src="@/static/news/电.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
<img v-else-if="status === 4" src="@/static/news/离.png" style="width: 60rpx; height: 60rpx" alt="" /> |
|||
</view> |
|||
<view> |
|||
<view class="flex"> |
|||
<view |
|||
class="bing" |
|||
:class="{ lv: status === 0, zhan: status === 1, xian: status === 2, dian: status === 3, li: status === 4 }" |
|||
v-for="(medical, mIndex) in car.medicalHistoryList" |
|||
:key="mIndex" |
|||
> |
|||
{{ medical }} |
|||
</view> |
|||
</view> |
|||
<view class="id-card">身份证:{{ car.idcard || '暂无' }}</view> |
|||
</view> |
|||
</view> |
|||
<u-icon |
|||
name="arrow-right" |
|||
class="car-right-icon" |
|||
size="50" |
|||
color="#70798c" |
|||
v-if="(status === 0 || status === 1) && car.carStatus !== 3" |
|||
></u-icon> |
|||
</view> |
|||
</scroll-view> |
|||
</template> |
|||
<u-empty v-else src="http://test.tall.wiki/gateway1/carbasics/v4.0/uploads/carlogo.png" text="暂无平车数据"></u-empty> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'MoreCar', |
|||
components: {}, |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
list: [ |
|||
{ |
|||
name: '绿道', |
|||
}, |
|||
{ |
|||
name: '占用', |
|||
}, |
|||
{ |
|||
name: '空闲', |
|||
}, |
|||
{ |
|||
name: '充电', |
|||
}, |
|||
{ |
|||
name: '离线', |
|||
}, |
|||
], |
|||
itemStyle: { |
|||
color: '#2C2B3B', |
|||
}, |
|||
carList: [], |
|||
status: 0, |
|||
}; |
|||
}, |
|||
computed: {}, |
|||
methods: { |
|||
detailCar(info) { |
|||
if ((this.status === 0 || this.status === 1) && info.carStatus !== 3) { |
|||
uni.navigateTo({ url: `/pages/MoreCar/detail?info=${JSON.stringify(info)}` }); |
|||
} |
|||
}, |
|||
change(index) { |
|||
this.carList = []; |
|||
this.status = index; |
|||
this.getData(); |
|||
}, |
|||
async getData() { |
|||
try { |
|||
const params = { |
|||
hospitalId: '1436207203748159488', |
|||
status: this.status, |
|||
}; |
|||
const res = await this.$u.api.queryCar(params); |
|||
console.log('res: ', res); |
|||
this.carList = [...res]; |
|||
} catch (error) {} |
|||
}, |
|||
}, |
|||
watch: {}, |
|||
|
|||
// 页面周期函数--监听页面加载 |
|||
onLoad() { |
|||
this.getData(); |
|||
}, |
|||
// 页面周期函数--监听页面初次渲染完成 |
|||
onReady() {}, |
|||
// 页面周期函数--监听页面显示(not-nvue) |
|||
onShow() {}, |
|||
// 页面周期函数--监听页面隐藏 |
|||
onHide() {}, |
|||
// 页面周期函数--监听页面卸载 |
|||
onUnload() {}, |
|||
// 页面处理函数--监听用户下拉动作 |
|||
// onPullDownRefresh() { uni.stopPullDownRefresh(); }, |
|||
// 页面处理函数--监听用户上拉触底 |
|||
// onReachBottom() {}, |
|||
// 页面处理函数--监听页面滚动(not-nvue) |
|||
// onPageScroll(event) {}, |
|||
// 页面处理函数--用户点击右上角分享 |
|||
// onShareAppMessage(options) {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.car-right-icon { |
|||
position: absolute; |
|||
right: 32rpx; |
|||
top: 69rpx; |
|||
} |
|||
.car-no { |
|||
width: 140rpx; |
|||
margin-right: 10rpx; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
/* display: -webkit-box; */ |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
.id-card { |
|||
font-size: 28rpx; |
|||
margin-top: 8rpx; |
|||
font-family: OPPOSans-Medium, OPPOSans; |
|||
font-weight: 500; |
|||
color: #70798c; |
|||
} |
|||
.lv { |
|||
background: #d2fff0; |
|||
color: #3dc195; |
|||
} |
|||
.zhan { |
|||
background: #ffece4; |
|||
color: #ff8833; |
|||
} |
|||
.xian { |
|||
background: #e4edff; |
|||
color: #5990ff; |
|||
} |
|||
.dian { |
|||
background: #ffe3dd; |
|||
color: #ff7b60; |
|||
} |
|||
.li { |
|||
background: #ececec; |
|||
color: #70798c; |
|||
} |
|||
.bing { |
|||
padding: 2rpx 8rpx; |
|||
font-size: 20rpx; |
|||
margin-right: 8rpx; |
|||
} |
|||
.info-box { |
|||
margin-left: 42rpx; |
|||
margin-top: 8rpx; |
|||
height: 80rpx; |
|||
} |
|||
.MoreCar { |
|||
height: 100vh; |
|||
overflow: hidden; |
|||
} |
|||
.car-box { |
|||
position: relative; |
|||
height: 188rpx; |
|||
width: calc(100% - 64rpx); |
|||
box-sizing: border-box; |
|||
margin: 32rpx 16rpx; |
|||
/* margin-bottom: 0; */ |
|||
border-radius: 8rpx; |
|||
box-shadow: 0 0 30rpx 5rpx rgba(0, 0, 0, 0.1); |
|||
padding: 24rpx 0; |
|||
} |
|||
.bor-left-lv { |
|||
border-left: 4rpx solid #1bb299; |
|||
} |
|||
.bor-left-zhan { |
|||
border-left: 4rpx solid #ff8833; |
|||
} |
|||
.bor-left-xian { |
|||
border-left: 4rpx solid #5990ff; |
|||
} |
|||
.bor-left-dian { |
|||
border-left: 4rpx solid #ff7b60; |
|||
} |
|||
.bor-left-li { |
|||
border-left: 4rpx solid #70798c; |
|||
} |
|||
.title { |
|||
margin-left: 42rpx; |
|||
font-size: 36rpx; |
|||
font-family: OPPOSans-Bold, OPPOSans; |
|||
font-weight: bold; |
|||
color: #70798c; |
|||
} |
|||
</style> |
@ -0,0 +1,294 @@ |
|||
<template> |
|||
<div class="title-box bg-white fill-width"> |
|||
<!-- <a-tabs v-model="timeValue" @change="changeTab" size="small"> |
|||
<a-tab-pane :key="0" tab="24h"></a-tab-pane> |
|||
<a-tab-pane :key="1" tab="周"></a-tab-pane> |
|||
<a-tab-pane :key="2" tab="月"></a-tab-pane> |
|||
<a-tab-pane :key="3" tab="季"></a-tab-pane> |
|||
<a-tab-pane :key="4" tab="年"></a-tab-pane> |
|||
</a-tabs> --> |
|||
<u-subsection :list="list" :current="timeValue" @change="changeTab"></u-subsection> |
|||
<div class="time-box"> |
|||
<a-date-picker @change="changeDay" v-if="timeValue === 0" :popup-style="popupStyle"> |
|||
<div style="color: #4b8aff; text-align: center; padding-left: 8px"> |
|||
< |
|||
{{ text }} |
|||
> |
|||
</div> |
|||
</a-date-picker> |
|||
<a-week-picker @change="changeWeek" v-else-if="timeValue === 1" :popup-style="popupStyle"> |
|||
<div style="color: #4b8aff; text-align: center; padding-left: 8px"> |
|||
< |
|||
{{ text }} |
|||
> |
|||
</div> |
|||
</a-week-picker> |
|||
<a-month-picker @change="changeMonth" v-else-if="timeValue === 2" :popup-style="popupStyle"> |
|||
<div style="color: #4b8aff; text-align: center; padding-left: 8px"> |
|||
< |
|||
{{ text }} |
|||
> |
|||
</div> |
|||
</a-month-picker> |
|||
<div v-else-if="timeValue === 3" style="color: #4b8aff; text-align: center; padding-left: 8px" @click="showCal = !showCal"> |
|||
< |
|||
{{ text }} |
|||
> |
|||
</div> |
|||
<div class="calendar-box" :style="{ height: timeValue === 3 && showCal ? '160px' : '0' }"> |
|||
<div class="ant-calendar-year-panel-header"> |
|||
<a type="left" class="ant-calendar-year-panel-prev-decade-btn" @click="quarterYear--" /> |
|||
<span>{{ quarterYear }}</span> |
|||
<a type="right" class="ant-calendar-year-panel-next-decade-btn" @click="quarterYear++" /> |
|||
</div> |
|||
<div class="ant-calendar-year-panel-tbody d-flex flex-column justify-space-between" style="height: 120px"> |
|||
<div |
|||
class="quarter-box" |
|||
@click="changeQuarter(0, '第一季度')" |
|||
:style="{ background: isActive === 0 ? '#40a9ff' : '', color: isActive === 0 ? '#fff' : '' }" |
|||
> |
|||
第一季度 |
|||
</div> |
|||
<div |
|||
class="quarter-box" |
|||
@click="changeQuarter(1, '第二季度')" |
|||
:style="{ background: isActive === 1 ? '#40a9ff' : '', color: isActive === 1 ? '#fff' : '' }" |
|||
> |
|||
第二季度 |
|||
</div> |
|||
<div |
|||
class="quarter-box" |
|||
@click="changeQuarter(2, '第三季度')" |
|||
:style="{ background: isActive === 2 ? '#40a9ff' : '', color: isActive === 2 ? '#fff' : '' }" |
|||
> |
|||
第三季度 |
|||
</div> |
|||
<div |
|||
class="quarter-box" |
|||
@click="changeQuarter(3, '第四季度')" |
|||
:style="{ background: isActive === 3 ? '#40a9ff' : '', color: isActive === 3 ? '#fff' : '' }" |
|||
> |
|||
第四季度 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a-date-picker @panelChange="changeYear" v-if="timeValue === 4" format="YYYY" mode="year" :popup-style="popupStyle"> |
|||
<div style="color: #4b8aff; text-align: center; padding-left: 8px"> |
|||
< |
|||
{{ text }} |
|||
> |
|||
</div> |
|||
</a-date-picker> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
name: 'Title', |
|||
data() { |
|||
return { |
|||
// text: '过去24小时' |
|||
list: ['24h', '周', '月', '季', '年'], |
|||
text: '近24h', |
|||
startTime: 0, |
|||
endTime: 0, |
|||
timeUnit: 0, |
|||
timeValue: 0, |
|||
quarterYear: new Date().getFullYear(), |
|||
popupStyle: { |
|||
left: '0 !important', |
|||
top: '0 !important', |
|||
position: 'relative', |
|||
}, |
|||
showCal: false, |
|||
isActive: 0, |
|||
}; |
|||
}, |
|||
watch: { |
|||
endTime() { |
|||
this.$emit('getTime', this.startTime, this.endTime, this.timeUnit); |
|||
}, |
|||
quarterYear(val) { |
|||
if (this.isActive === 0) { |
|||
this.text = val + '-第一季度'; |
|||
this.startTime = this.$moment(`${val}-01-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${val}-3-31 23:59:59`).valueOf(); |
|||
} else if (this.isActive === 1) { |
|||
this.text = val + '-第二季度'; |
|||
this.startTime = this.$moment(`${val}-04-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${val}-6-30 23:59:59`).valueOf(); |
|||
} else if (this.isActive === 2) { |
|||
this.text = val + '-第三季度'; |
|||
this.startTime = this.$moment(`${val}-07-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${val}-9-30 23:59:59`).valueOf(); |
|||
} else if (this.isActive === 3) { |
|||
this.text = val + '-第四季度'; |
|||
this.startTime = this.$moment(`${val}-10-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${val}-12-31 23:59:59`).valueOf(); |
|||
} |
|||
}, |
|||
}, |
|||
methods: { |
|||
// changeTab(e) { |
|||
// this.$emit('getTime', e); |
|||
// }, |
|||
// 时间选择 |
|||
changeTab(e) { |
|||
console.log('e: ', e); |
|||
// this.endTime = new Date().valueOf(); |
|||
this.showCal = false; |
|||
this.timeUnit = e; |
|||
if (e === 0) { |
|||
// 天 |
|||
// 获取当前天的开始时间 |
|||
const dayDateStart = this.$moment(new Date().valueOf()).format('YYYY-MM-DD 00:00:00'); |
|||
// 获取当前天的结束时间 |
|||
const dayDateEnd = this.$moment(new Date().valueOf()).format('YYYY-MM-DD 23:59:59'); |
|||
// 默认开始时间为今天0点的前一个小时 |
|||
this.startTime = this.$moment(dayDateStart).valueOf() - 3600 * 1000; |
|||
// 默认结束时间为今天23点59分59秒的后一个小时 |
|||
this.endTime = this.$moment(dayDateEnd).valueOf(); |
|||
this.text = '近24h'; |
|||
} else if (e === 1) { |
|||
// 周 |
|||
this.startTime = new Date().valueOf() - 7 * 24 * 3600 * 1000; |
|||
const weekDateStart = this.$moment(new Date()).week(this.$moment(new Date()).week()).startOf('week').format('YYYY-MM-DD 00:00:00'); |
|||
this.startTime = this.$moment(weekDateStart).valueOf() - 24 * 3600 * 1000; |
|||
this.endTime = this.$moment(weekDateStart).valueOf() + 6 * 24 * 3600 * 1000; |
|||
this.text = '近一周'; |
|||
} else if (e === 2) { |
|||
// 月 |
|||
this.startTime = |
|||
this.$moment(this.$moment(new Date().valueOf()).startOf('month').format('YYYY-MM-DD HH:mm:ss')).valueOf() - 3600 * 1000; |
|||
this.endTime = |
|||
this.$moment(this.$moment(new Date().valueOf()).endOf('month').format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000; |
|||
this.text = '近一月'; |
|||
} else if (e === 3) { |
|||
// 季 |
|||
this.startTime = new Date().valueOf() - 90 * 24 * 3600 * 1000; |
|||
const num = this.$moment().quarter() - 0; |
|||
if (num === 1) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-01-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-3-31 23:59:59`).valueOf(); |
|||
} else if (num === 2) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-04-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-6-30 23:59:59`).valueOf(); |
|||
} else if (num === 3) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-07-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-9-30 23:59:59`).valueOf(); |
|||
} else if (num === 4) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-10-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-12-31 23:59:59`).valueOf(); |
|||
} |
|||
|
|||
this.text = '近一季度'; |
|||
} else if (e === 4) { |
|||
// 年 |
|||
const yearDate = this.$moment().year(); |
|||
this.startTime = this.$moment(`${yearDate}-01-01 00:00:00`).valueOf() - 30 * 24 * 3600 * 1000; |
|||
this.endTime = this.$moment(`${yearDate}-12-31 23:59:59`).valueOf(); |
|||
this.text = '近一年'; |
|||
} |
|||
console.log(this.text); |
|||
// this.$emit('getTime', e); |
|||
}, |
|||
// 改变天 |
|||
changeDay(e, dateString) { |
|||
this.text = dateString; |
|||
this.startTime = this.$moment(`${this.text} 00:00:00`).valueOf() - 3600 * 1000; |
|||
this.endTime = this.$moment(`${this.text} 23:59:59`).valueOf(); |
|||
}, |
|||
// 改变周 |
|||
changeWeek(e, dateString) { |
|||
this.text = dateString; |
|||
const startValue = this.$moment(e._d).week(this.$moment(e._d).week()).startOf('week').format('YYYY-MM-DD 00:00:00'); // 获取所选日期所在周的第一天 |
|||
this.startTime = this.$moment(startValue).valueOf() - 24 * 3600 * 1000; |
|||
this.endTime = this.startTime + 7 * 24 * 3600 * 1000; |
|||
}, |
|||
// 改变月 |
|||
changeMonth(e, dateString) { |
|||
this.text = dateString; |
|||
console.log('e, dateString: ', e, dateString); |
|||
this.startTime = this.$moment(this.$moment(e._d).startOf('month').format('YYYY-MM-DD HH:mm:ss')).valueOf() - 3600 * 1000; |
|||
this.endTime = this.$moment(this.$moment(e._d).endOf('month').format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000; |
|||
}, |
|||
// 修改季度 |
|||
changeQuarter(num, str) { |
|||
this.isActive = num; |
|||
this.text = this.quarterYear + '-' + str; |
|||
|
|||
if (num === 0) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-01-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-3-31 23:59:59`).valueOf(); |
|||
} else if (num === 1) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-04-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-6-30 23:59:59`).valueOf(); |
|||
} else if (num === 2) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-07-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-9-30 23:59:59`).valueOf(); |
|||
} else if (num === 3) { |
|||
this.startTime = this.$moment(`${this.quarterYear}-10-01 00:00:00`).valueOf(); |
|||
this.endTime = this.$moment(`${this.quarterYear}-12-31 23:59:59`).valueOf(); |
|||
} |
|||
|
|||
setTimeout(() => { |
|||
this.showCal = false; |
|||
}, 80); |
|||
}, |
|||
// 修改年份 |
|||
changeYear(e) { |
|||
this.text = this.$moment(e).format('YYYY'); |
|||
this.startTime = this.$moment(`${this.text}-01-01 00:00:00`).valueOf() - 30 * 24 * 3600 * 1000; |
|||
this.endTime = this.$moment(`${this.text}-12-31 23:59:59`).valueOf(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
/* .title-box { |
|||
height: 84px; |
|||
width: 100%; |
|||
text-align: center; |
|||
} |
|||
/deep/.ant-tabs-bar { |
|||
margin: 0 0 8px 0; |
|||
border-bottom: none; |
|||
} |
|||
*/ |
|||
.time-box { |
|||
text-align: center; |
|||
margin: auto; |
|||
position: relative; |
|||
} |
|||
/deep/.ant-tabs-nav { |
|||
margin-right: auto; |
|||
} |
|||
/deep/.ant-tabs-tab { |
|||
margin-right: 0; |
|||
text-align: center; |
|||
} |
|||
/deep/.ant-tabs-nav { |
|||
width: 100%; |
|||
} |
|||
/deep/.ant-tabs-nav div { |
|||
width: 100%; |
|||
display: flex; |
|||
justify-content: center; |
|||
} |
|||
|
|||
.calendar-box { |
|||
position: absolute; |
|||
background-color: #fff; |
|||
border-radius: 8px; |
|||
box-shadow: 0 0 5px #ddd; |
|||
z-index: 10; |
|||
left: 50%; |
|||
margin-left: -140px; |
|||
width: 280px; |
|||
transition: all 0.2s; |
|||
overflow: hidden; |
|||
} |
|||
.quarter-box { |
|||
line-height: 30px; |
|||
} |
|||
</style> |
@ -0,0 +1,104 @@ |
|||
<template> |
|||
<div class="flex flex-nowrap flex-col bg-white"> |
|||
<u-collapse default-active-key="1" class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right"> |
|||
<u-collapse-item key="1" :title="header" :style="customStyle"> |
|||
<!-- <view class="bg-white"> --> |
|||
<Title @getTime="getTime" /> |
|||
<!-- </view> --> |
|||
<view bordered class="mt-2" v-for="item in list" :key="item"> |
|||
123 |
|||
<!-- <runway v-if="item === 'run'" :start-time="startTime" :end-time="endTime" /> |
|||
<DNT v-else-if="item === 'DNT'" :start-time="startTime" :end-time="endTime" /> |
|||
<DPT v-else-if="item === 'DPT'" :start-time="startTime" :end-time="endTime" /> |
|||
<Operation v-else-if="item === '手术方式'" :start-time="startTime" :end-time="endTime" /> |
|||
<Hospital v-else-if="item === '来院方式'" :start-time="startTime" :end-time="endTime" /> --> |
|||
</view> |
|||
<view bordered class="mt-2"> |
|||
456 |
|||
<!-- <Data :start-time="startTime" :end-time="endTime" /> --> |
|||
</view> |
|||
</u-collapse-item> |
|||
</u-collapse> |
|||
<!-- <u-collapse class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right"> |
|||
<template #expandIcon="props"> |
|||
<a-icon type="down" :rotate="props.isActive ? 0 : -180" /> |
|||
</template> |
|||
<a-collapse-panel key="1" header="单项数据统计" :style="customStyle"> |
|||
<lineBarChart /> |
|||
</a-collapse-panel> |
|||
</u-collapse> |
|||
<u-collapse class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right"> |
|||
<template #expandIcon="props"> |
|||
<a-icon type="down" :rotate="props.isActive ? 0 : -180" /> |
|||
</template> |
|||
<a-collapse-panel key="1" header="各地市数据对比" :style="customStyle"> |
|||
<cityChart /> |
|||
</a-collapse-panel> |
|||
</u-collapse> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Title from './components/Title.vue'; |
|||
export default { |
|||
name: 'Statistics', |
|||
components: { Title }, |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden', |
|||
list: ['run', 'DNT', 'DPT', '手术方式', '来院方式'], |
|||
startTime: 0, |
|||
endTime: 0, |
|||
header: '', |
|||
}; |
|||
}, |
|||
computed: {}, |
|||
methods: { |
|||
getTime(startTime, endTime) { |
|||
this.startTime = startTime; |
|||
this.endTime = endTime; |
|||
}, |
|||
}, |
|||
watch: {}, |
|||
|
|||
// 页面周期函数--监听页面加载 |
|||
onLoad() { |
|||
this.startTime = this.$moment(this.$moment(new Date().valueOf()).format('YYYY-MM-DD 00:00:00')).valueOf() - 3600 * 1000; |
|||
this.endTime = this.$moment(this.$moment(new Date().valueOf()).format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000; |
|||
// if (this.ptProps.projectRole - 0 === 0) { |
|||
this.header = '本院统计'; |
|||
// } else if (this.ptProps.projectRole - 0 === 1) { |
|||
// this.header = '本市统计'; |
|||
// } else if (this.ptProps.projectRole - 0 === 2) { |
|||
// this.header = '本省统计'; |
|||
// } else { |
|||
// this.header = '数据统计'; |
|||
// } |
|||
}, |
|||
// 页面周期函数--监听页面初次渲染完成 |
|||
onReady() {}, |
|||
// 页面周期函数--监听页面显示(not-nvue) |
|||
onShow() {}, |
|||
// 页面周期函数--监听页面隐藏 |
|||
onHide() {}, |
|||
// 页面周期函数--监听页面卸载 |
|||
onUnload() {}, |
|||
// 页面处理函数--监听用户下拉动作 |
|||
// onPullDownRefresh() { uni.stopPullDownRefresh(); }, |
|||
// 页面处理函数--监听用户上拉触底 |
|||
// onReachBottom() {}, |
|||
// 页面处理函数--监听页面滚动(not-nvue) |
|||
// onPageScroll(event) {}, |
|||
// 页面处理函数--用户点击右上角分享 |
|||
// onShareAppMessage(options) {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.bg-white { |
|||
background-color: white; |
|||
margin-bottom: 12px; |
|||
padding: 16px; |
|||
} |
|||
</style> |
@ -0,0 +1,411 @@ |
|||
<template> |
|||
<div class="inner" style="padding-top: 42px; padding-bottom: 50rpx"> |
|||
<Demonstration /> |
|||
<div class="w-full" v-for="(item, index) in testList" :key="index"> |
|||
<template v-if="item.testType === 1"> |
|||
<Test |
|||
:testIndex="index" |
|||
@getCollaoseHeight="getCollaoseHeight" |
|||
:can-change="false" |
|||
:answer-list="answerList" |
|||
v-if="type" |
|||
class="w-full" |
|||
:list="item.content" |
|||
/> |
|||
</template> |
|||
<template v-if="item.testType === 2"> |
|||
<view class="list-item"> |
|||
<view class="flex items-center"> |
|||
<view class="shu"></view> |
|||
<view class="shu-title">{{ item.testTitle }}</view> |
|||
</view> |
|||
</view> |
|||
<!-- <u-collapse |
|||
:head-style="headerStyle" |
|||
:item-style="itemStyle" |
|||
class="mb-2 w-full" |
|||
v-if="item.testType === 2" |
|||
:bordered="false" |
|||
expand-icon-position="right" |
|||
:ref="'collapseView' + index" |
|||
> --> |
|||
<!-- <template #expandIcon="props"> |
|||
<u-icon type="down" :rotate="props.isActive ? 0 : -180" /> |
|||
</template> --> |
|||
<!-- <u-collapse-item :open="true" class="w-full" :title="item.testTitle" :style="customStyle"> --> |
|||
<Test |
|||
:testIndex="index" |
|||
@getCollaoseHeight="getCollaoseHeight" |
|||
:can-change="true" |
|||
:answer-list="answerList" |
|||
v-if="type" |
|||
class="w-full" |
|||
:list="item.content" |
|||
/> |
|||
<!-- </u-collapse-item> |
|||
</u-collapse> --> |
|||
</template> |
|||
</div> |
|||
<div class="ocr-open-box" @click="openOcr">OCR</div> |
|||
<u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData"> |
|||
<view class="slot-content"> |
|||
<scroll-view scroll-y style="height: 750rpx"> |
|||
<div v-for="(item, index) in basicList" :key="index" class="modal-content flex justify-between items-center"> |
|||
<u-checkbox v-model="item.checked" :name="item.questionCode"> |
|||
<div>{{ item.name }}</div> |
|||
</u-checkbox> |
|||
<div class="flex items-center fz-16">{{ item.answer }}</div> |
|||
</div> |
|||
</scroll-view> |
|||
</view> |
|||
</u-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import Mixin from './mixin'; |
|||
import cloneDeep from 'lodash/cloneDeep'; |
|||
import Demonstration from 'components/Demonstration/Demonstration'; |
|||
|
|||
export default { |
|||
components: { Demonstration }, |
|||
mixins: [Mixin], |
|||
data: () => ({ |
|||
testList: [], |
|||
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden', |
|||
headerStyle: { |
|||
height: '54px', |
|||
lineHeight: '30px', |
|||
fontSize: '18px', |
|||
padding: '0 16px', |
|||
/* color: #1890ff; */ |
|||
color: 'rgba(0, 0, 0, 0.65)', |
|||
fontWeight: 'bold', |
|||
backgroundColor: '#fff', |
|||
}, |
|||
itemStyle: { marginBottom: '8px' }, |
|||
type: 'RYPG', |
|||
afterStr: '主要治疗', |
|||
beforeStr: '基本信息', |
|||
answerList: {}, |
|||
showBasic: false, |
|||
codeAndTitle: [], |
|||
basicList: [], |
|||
}), |
|||
computed: { ...mapState('carbasics', ['InputCode', 'firstAidId', 'isRefresh', 'basicData', 'detailValueType']) }, |
|||
methods: { |
|||
// 打开ocr界面 |
|||
openOcr() { |
|||
uni.navigateTo({ url: '/pages/camera/camera' }); |
|||
}, |
|||
// 获取到所有的code,调用接口获取答案 |
|||
async getAnswer() { |
|||
const codeList = []; |
|||
for (let key in this.codeValue) { |
|||
if (key === this.type) { |
|||
for (let value in this.codeValue[key]) { |
|||
codeList.push(value); |
|||
} |
|||
} |
|||
} |
|||
const param = { |
|||
codeList, |
|||
firstAidId: this.firstAidId, |
|||
}; |
|||
const answer = await this.$u.api.getRecord(param); |
|||
this.answerList = answer.record; |
|||
this.reassign(answer.record); |
|||
}, |
|||
// 给试题赋值(以前答过) |
|||
reassign(recordList) { |
|||
for (let key in this.codeValue[this.type]) { |
|||
for (let value in recordList) { |
|||
if (key === value) { |
|||
if (Array.isArray(this.codeValue[this.type][key])) { |
|||
this.codeValue[this.type][key] = recordList[value]; |
|||
break; |
|||
} else { |
|||
this.codeValue[this.type][key] = recordList[value][0]; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 给list赋值试题数组 |
|||
this.reassignList(); |
|||
// 增加checkedList的选中状态,不然多选框默认不选中,需要修改list数组的状态,所以只能放在给list赋值之后 |
|||
this.changeCheckStatus(); |
|||
// 获取所有试题的code和title |
|||
this.getAllCodeAndTitle(); |
|||
// 获取对应当前type的试题数组 |
|||
this.getTest(); |
|||
}, |
|||
// 判断当前多选是否选中,选中时需要修改当前的选中状态为ture |
|||
changeCheckStatus() { |
|||
for (let i = 0; i < this.list.length; i++) { |
|||
const item = this.list[i]; |
|||
if (item.testList.length) { |
|||
for (let j = 0; j < item.testList.length; j++) { |
|||
const itemJ = item.testList[j]; |
|||
if (itemJ.content.length) { |
|||
for (let k = 0; k < itemJ.content.length; k++) { |
|||
const itemK = itemJ.content[k]; |
|||
if (itemK.length) { |
|||
for (let m = 0; m < itemK.length; m++) { |
|||
if (Array.isArray(itemK[m].value)) { |
|||
for (let n = 0; n < itemK[m].itemList.length; n++) { |
|||
const itemN = itemK[m].itemList[n]; |
|||
itemK[m].itemIsChecked[n].isChecked = this.getCheckedStatus(itemN, itemK[m].value); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 获取当前选项是否选中 |
|||
getCheckedStatus(item, valueList) { |
|||
for (let i = 0; i < valueList.length; i++) { |
|||
if (valueList[i] === item) { |
|||
return true; |
|||
} else if (i === valueList.length - 0) { |
|||
return false; |
|||
} |
|||
} |
|||
}, |
|||
// 获取试题 |
|||
// 因为试题的每个题的答案默认绑定的是codeList的每个code 对应的value |
|||
// 所以需要先定义codeList,然后再调用getTest |
|||
getTest() { |
|||
for (let i = 0; i < this.list.length; i++) { |
|||
if (this.list[i].name === this.type) { |
|||
this.testList = [...this.list[i].testList]; |
|||
break; |
|||
} |
|||
} |
|||
}, |
|||
// 获取所有试题的题目和code |
|||
getAllCodeAndTitle() { |
|||
let Arr = []; |
|||
for (let i = 0; i < this.list.length; i++) { |
|||
const item = this.list[i]; |
|||
if (item.testList.length) { |
|||
for (let j = 0; j < item.testList.length; j++) { |
|||
const itemJ = item.testList[j]; |
|||
if (itemJ.content.length) { |
|||
for (let k = 0; k < itemJ.content.length; k++) { |
|||
const itemK = itemJ.content[k]; |
|||
if (itemK.length) { |
|||
for (let m = 0; m < itemK.length; m++) { |
|||
const itemM = itemK[m]; |
|||
const itemMm = itemK[m - 1]; |
|||
let obj = null; |
|||
if (itemM.code && itemM.title) { |
|||
obj = { |
|||
code: itemM.code, |
|||
title: itemM.title, |
|||
}; |
|||
} else if (itemM.code && !itemM.title) { |
|||
obj = { |
|||
code: itemM.code, |
|||
title: itemMm.title, |
|||
}; |
|||
} |
|||
if (obj) { |
|||
Arr.push(obj); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
this.codeAndTitle = Arr; |
|||
}, |
|||
// 通过code,获取试题的title信息 |
|||
getNameByCode() { |
|||
let Arr = [...this.basicList]; |
|||
for (let k = 0; k < Arr.length; k++) { |
|||
for (let i = 0; i < this.codeAndTitle.length; i++) { |
|||
const item = this.codeAndTitle[i]; |
|||
if (Arr[k].questionCode === item.code) { |
|||
Arr[k].name = item.title; |
|||
} |
|||
} |
|||
} |
|||
this.basicList = [...Arr]; |
|||
}, |
|||
// 获取到试题的答案后,判断类型,返回正确格式 时间戳/数组/字符串 |
|||
getAnswerByType(obj) { |
|||
let answer = obj.answer; |
|||
if (typeof (answer - 0) === 'number') { |
|||
obj.type === 0; // 时间格式 |
|||
answer = this.$moment(answer - 0).format('YYYY-MM-DD HH:mm'); |
|||
} else if (Array.isArray(answer)) { |
|||
let str = ''; |
|||
for (let i = 0; i < answer.length; i++) { |
|||
if (i === answer.length - 0) { |
|||
str += answer[i]; |
|||
} else { |
|||
str = str + answer[i] + ','; |
|||
} |
|||
} |
|||
obj.type === 1; // 数组格式 |
|||
answer = str; |
|||
} else { |
|||
obj.type === 2; // 字符串格式 |
|||
} |
|||
obj.answer = answer; |
|||
return obj; |
|||
}, |
|||
// 重新计算面板高度 |
|||
getCollaoseHeight(index) { |
|||
const that = this; |
|||
// 获取到需要重新计算的面板 |
|||
this.$nextTick(() => { |
|||
that.$refs[`collapseView${index}`][0].init(); |
|||
setTimeout(() => { |
|||
that.$refs[`collapseView${index}`][0].init(); |
|||
}, 200); |
|||
}); |
|||
}, |
|||
// 点击modal框的确定,提交识别到,并且选择确定提交的数据 |
|||
// 提交数据之后重新请求当前界面的答案然后回显 |
|||
async submitBasicData() { |
|||
let codeAndAnswerList = []; |
|||
for (let i = 0; i < this.basicList.length; i++) { |
|||
const item = this.basicList[i]; |
|||
if (item.checked) { |
|||
let obj = { |
|||
questionCode: item.questionCode, |
|||
answer: this.basicData[i].answer, |
|||
}; |
|||
codeAndAnswerList.push(obj); |
|||
} |
|||
} |
|||
const param = { |
|||
codeAndAnswerList, |
|||
firstAidId: this.firstAidId, |
|||
}; |
|||
await this.$u.api.setRecord(param); |
|||
this.getAnswer(); |
|||
}, |
|||
}, |
|||
watch: { |
|||
isRefresh() { |
|||
let Arr = []; |
|||
const basicData = cloneDeep(this.basicData); |
|||
for (let i = 0; i < basicData.length; i++) { |
|||
Arr.push(basicData[i]); |
|||
} |
|||
for (let i = 0; i < Arr.length; i++) { |
|||
Arr[i] = this.getAnswerByType(Arr[i]); |
|||
} |
|||
this.basicList = [...Arr]; |
|||
this.getNameByCode(); |
|||
this.showBasic = true; |
|||
}, |
|||
}, |
|||
|
|||
// 页面周期函数--监听页面加载 |
|||
onLoad(query) { |
|||
if (query.name) { |
|||
uni.setNavigationBarTitle({ |
|||
title: query.name, |
|||
}); |
|||
} |
|||
this.type = this.InputCode; |
|||
console.log('this.type: ', this.type); |
|||
// if (this.type === 'RYPG') { |
|||
// this.afterStr = '主要治疗'; |
|||
// this.beforeStr = '基本信息'; |
|||
// } else if (this.type === 'SSXG') { |
|||
// this.afterStr = '出院记录'; |
|||
// this.beforeStr = '入院评估'; |
|||
// } else if (this.type === 'CYJL') { |
|||
// this.afterStr = '无数据'; |
|||
// this.beforeStr = '主要治疗'; |
|||
// } |
|||
// this.tips = '正在获取试题...'; |
|||
this.getAnswer(); |
|||
}, |
|||
// 页面周期函数--监听页面初次渲染完成 |
|||
onReady() {}, |
|||
// 页面周期函数--监听页面显示(not-nvue) |
|||
onShow() {}, |
|||
// 页面周期函数--监听页面隐藏 |
|||
onHide() {}, |
|||
// 页面周期函数--监听页面卸载 |
|||
onUnload() {}, |
|||
// 页面处理函数--监听用户下拉动作 |
|||
onPullDownRefresh() { |
|||
uni.stopPullDownRefresh(); |
|||
}, |
|||
// 页面处理函数--监听用户上拉触底 |
|||
onReachBottom() {}, |
|||
// 页面处理函数--监听页面滚动(not-nvue) |
|||
/* onPageScroll(event) {}, */ |
|||
// 页面处理函数--用户点击右上角分享 |
|||
/* onShareAppMessage(options) {}, */ |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.list-item { |
|||
min-height: 60px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
padding: 24rpx 0; |
|||
margin: 0 32rpx; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
.shu { |
|||
width: 16rpx; |
|||
height: 40rpx; |
|||
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%); |
|||
border-radius: 40rpx; |
|||
opacity: 1; |
|||
margin-right: 8rpx; |
|||
} |
|||
.shu-title { |
|||
font-size: 36rpx; |
|||
font-family: Open Sans-Bold, Open Sans; |
|||
font-weight: bold; |
|||
color: #3e3d4d; |
|||
} |
|||
.modal-content { |
|||
padding: 16px; |
|||
} |
|||
.slot-content { |
|||
font-size: 28rpx; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
padding-left: 30rpx; |
|||
} |
|||
.ocr-open-box { |
|||
z-index: 11; |
|||
position: fixed; |
|||
right: 0; |
|||
top: 40%; |
|||
height: 40px; |
|||
width: 40px; |
|||
font-size: 16px; |
|||
background: #1890ff; |
|||
color: white; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
border-radius: 20px 20px 0 20px; |
|||
box-shadow: 0 0 4px #1890ff; |
|||
} |
|||
.inner { |
|||
/* background-color: #ededed; */ |
|||
min-height: 100vh; |
|||
} |
|||
</style> |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 559 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 813 B |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 146 KiB |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 1.1 KiB |