Compare commits

...

17 Commits

  1. 156
      .VSCodeCounter/2022-11-30_16-10-14/details.md
  2. 15
      .VSCodeCounter/2022-11-30_16-10-14/diff-details.md
  3. 2
      .VSCodeCounter/2022-11-30_16-10-14/diff.csv
  4. 19
      .VSCodeCounter/2022-11-30_16-10-14/diff.md
  5. 22
      .VSCodeCounter/2022-11-30_16-10-14/diff.txt
  6. 143
      .VSCodeCounter/2022-11-30_16-10-14/results.csv
  7. 1
      .VSCodeCounter/2022-11-30_16-10-14/results.json
  8. 94
      .VSCodeCounter/2022-11-30_16-10-14/results.md
  9. 238
      .VSCodeCounter/2022-11-30_16-10-14/results.txt
  10. 10
      .env.development
  11. 6
      .env.production
  12. 26
      CHANGELOG.md
  13. 2
      package.json
  14. 38
      src/apis/carbasics.js
  15. 13
      src/apis/project.js
  16. 5
      src/apis/role.js
  17. 68
      src/apis/tall.js
  18. 16
      src/apis/task.js
  19. 83
      src/components/Demonstration/Demonstration.vue
  20. 42
      src/components/NewRole/NewRole.vue
  21. 301
      src/components/PatientList/PatientList.vue
  22. 2
      src/components/PrettyExchange/PrettyExchange.vue
  23. 9
      src/components/Projects/ProjectItem.vue
  24. 5
      src/components/Service/Service.vue
  25. 134
      src/components/Share/Share copy.vue
  26. 98
      src/components/Share/Share.vue
  27. BIN
      src/components/Share/imgs/all.png
  28. BIN
      src/components/Share/imgs/bg.png
  29. BIN
      src/components/Share/imgs/btn.png
  30. BIN
      src/components/Share/imgs/code.png
  31. 176
      src/components/StatisticsCards/StatisticsCards.vue
  32. 81
      src/components/StatisticsLists/StatisticsLists.vue
  33. 985
      src/components/Test/Test copy.vue
  34. 369
      src/components/Test/Test.vue
  35. 34
      src/components/Test/component/Talk.vue
  36. 140
      src/components/Upload/Upload.vue
  37. 110
      src/components/Volume/Volume.vue
  38. 138
      src/components/VolumeProject/VolumeProject.vue
  39. 2
      src/main.js
  40. 32
      src/pages.json
  41. BIN
      src/pages/Apply/img/0.png
  42. BIN
      src/pages/Apply/img/1.png
  43. BIN
      src/pages/Apply/img/2.png
  44. BIN
      src/pages/Apply/img/kefu.jpg
  45. BIN
      src/pages/Apply/img/weixin.png
  46. 443
      src/pages/Apply/index.vue
  47. 197
      src/pages/BL/BL-zhuce.vue
  48. 113
      src/pages/BL/mixin.js
  49. 302
      src/pages/MoreCar/detail.vue
  50. 244
      src/pages/MoreCar/index.vue
  51. 294
      src/pages/Statistics/components/Title.vue
  52. 104
      src/pages/Statistics/index.vue
  53. 2
      src/pages/camera/camera.vue
  54. 16
      src/pages/detail-webview/detail-webview.vue
  55. 105
      src/pages/establish/establish.vue
  56. 534
      src/pages/index/index.vue
  57. 71
      src/pages/info/info.vue
  58. 411
      src/pages/inner/inner-old.vue
  59. 110
      src/pages/inner/inner.vue
  60. 22
      src/pages/inner/mixin.js
  61. 5
      src/pages/outside/outside.vue
  62. 91
      src/pages/patient/patient.vue
  63. 190
      src/pages/patientLine/patientLine.vue
  64. 23
      src/pages/phone-bind/phone-bind.vue
  65. 44
      src/pages/task-page/task-page.vue
  66. BIN
      src/static/image.png
  67. BIN
      src/static/news/Frame 34@2x.png
  68. BIN
      src/static/news/car.png
  69. BIN
      src/static/news/logo-car.png
  70. BIN
      src/static/news/logo.png
  71. BIN
      src/static/news/logo2x.png
  72. BIN
      src/static/news/logo2xg.png
  73. BIN
      src/static/news/news.png
  74. BIN
      src/static/news/role.png
  75. BIN
      src/static/news/top-bg.png
  76. BIN
      src/static/news/占.png
  77. BIN
      src/static/news/电.png
  78. BIN
      src/static/news/离.png
  79. BIN
      src/static/news/绿.png
  80. BIN
      src/static/news/闲.png
  81. BIN
      src/static/图1.png
  82. BIN
      src/static/图2.png
  83. BIN
      src/static/图3.png
  84. BIN
      src/static/指针.png
  85. 8
      src/store/carbasics/mutations.js
  86. 1
      src/store/carbasics/state.js

156
.VSCodeCounter/2022-11-30_16-10-14/details.md

@ -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)

15
.VSCodeCounter/2022-11-30_16-10-14/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

2
.VSCodeCounter/2022-11-30_16-10-14/diff.csv

@ -0,0 +1,2 @@
"filename", "language", "", "comment", "blank", "total"
"Total", "-", , 0, 0, 0
1 filename language comment blank total
2 Total - 0 0 0

19
.VSCodeCounter/2022-11-30_16-10-14/diff.md

@ -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)

22
.VSCodeCounter/2022-11-30_16-10-14/diff.txt

@ -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 |
+----------+----------+------------+------------+------------+------------+

143
.VSCodeCounter/2022-11-30_16-10-14/results.csv

@ -0,0 +1,143 @@
"filename", "language", "Properties", "JavaScript", "Markdown", "JSON", "Ignore", "HTML", "JSON with Comments", "Vue", "SCSS", "CSS", "SVG", "comment", "blank", "total"
"d:\job_project\暴风眼\tall-qcp2.0\.env", "Properties", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
"d:\job_project\暴风眼\tall-qcp2.0\.eslintrc.js", "JavaScript", 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 2, 49
"d:\job_project\暴风眼\tall-qcp2.0\.hbuilderx\launch.json", "JSON with Comments", 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 1, 1, 12
"d:\job_project\暴风眼\tall-qcp2.0\.prettierignore", "Ignore", 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 10
"d:\job_project\暴风眼\tall-qcp2.0\.prettierrc", "JSON", 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14
"d:\job_project\暴风眼\tall-qcp2.0\CHANGELOG.md", "Markdown", 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 26
"d:\job_project\暴风眼\tall-qcp2.0\README.md", "Markdown", 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 102
"d:\job_project\暴风眼\tall-qcp2.0\babel.config.js", "JavaScript", 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 58
"d:\job_project\暴风眼\tall-qcp2.0\commitlint.config.js", "JavaScript", 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
"d:\job_project\暴风眼\tall-qcp2.0\jest.config.js", "JavaScript", 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 53
"d:\job_project\暴风眼\tall-qcp2.0\package.json", "JSON", 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 117
"d:\job_project\暴风眼\tall-qcp2.0\postcss.config.js", "JavaScript", 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 22
"d:\job_project\暴风眼\tall-qcp2.0\public\img\icons\safari-pinned-tab.svg", "SVG", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 4
"d:\job_project\暴风眼\tall-qcp2.0\public\index.html", "HTML", 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 1, 4, 29
"d:\job_project\暴风眼\tall-qcp2.0\src\App.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 31, 10, 159
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\carbasics.js", "JavaScript", 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 7, 127
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\project.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 23
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\role.js", "JavaScript", 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 51
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\tall.js", "JavaScript", 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 5, 62
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\task.js", "JavaScript", 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 20
"d:\job_project\暴风眼\tall-qcp2.0\src\apis\wbs.js", "JavaScript", 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 8
"d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\app.scss", "SCSS", 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7
"d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.css", "CSS", 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 63, 258
"d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.scss", "SCSS", 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 63, 258
"d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\tailwind.scss", "SCSS", 0, 0, 0, 0, 0, 0, 0, 0, 3488, 0, 0, 0, 1030, 4518
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\Calendar.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 45, 29, 474
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\generateDates.js", "JavaScript", 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 5, 137
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Demonstration\Demonstration.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 1, 1, 72
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Globals\Globals.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 3, 9, 89
"d:\job_project\暴风眼\tall-qcp2.0\src\components\ImageCode\ImageCode.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 5, 38
"d:\job_project\暴风眼\tall-qcp2.0\src\components\NewRole\NewRole.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 1, 43
"d:\job_project\暴风眼\tall-qcp2.0\src\components\PatientList\PatientList.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 31, 5, 521
"d:\job_project\暴风眼\tall-qcp2.0\src\components\PrettyExchange\PrettyExchange.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 19, 34, 521
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\ProjectItem.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 5, 12, 166
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\Projects.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 9, 6, 66
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Roles\Roles.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 25, 22, 263
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Service\Service.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 1, 39
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share copy.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 15, 14, 135
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 4, 11, 99
"d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsCards\StatisticsCards.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 5, 11, 177
"d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsLists\StatisticsLists.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 1, 10, 82
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\Test.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 896, 0, 0, 0, 81, 5, 982
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\component\Talk.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 51, 3, 263
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\TimeLine.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 12, 11, 127
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Barrier.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 2, 43
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TaskTools.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 12, 19, 186
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeBox.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 6, 12, 143
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeStatus.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 18, 18, 232
"d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Title.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 8
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\Title.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 29, 19, 236
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\CreateTask.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 49, 25, 461
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\ShareProject.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 12, 15, 211
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Upload\Upload.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 8, 8, 244
"d:\job_project\暴风眼\tall-qcp2.0\src\components\VolumeProject\VolumeProject.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 17, 2, 115
"d:\job_project\暴风眼\tall-qcp2.0\src\components\Volume\Volume.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 6, 2, 107
"d:\job_project\暴风眼\tall-qcp2.0\src\components\select-lay\select-lay.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 18, 25, 419
"d:\job_project\暴风眼\tall-qcp2.0\src\config\app.js", "JavaScript", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7
"d:\job_project\暴风眼\tall-qcp2.0\src\config\db.js", "JavaScript", 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\config\plugin.js", "JavaScript", 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 98
"d:\job_project\暴风眼\tall-qcp2.0\src\config\task.js", "JavaScript", 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3
"d:\job_project\暴风眼\tall-qcp2.0\src\config\time.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18
"d:\job_project\暴风眼\tall-qcp2.0\src\config\user copy.js", "JavaScript", 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 44
"d:\job_project\暴风眼\tall-qcp2.0\src\config\user.js", "JavaScript", 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 45
"d:\job_project\暴风眼\tall-qcp2.0\src\config\zIndex.js", "JavaScript", 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 6
"d:\job_project\暴风眼\tall-qcp2.0\src\main.js", "JavaScript", 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 55
"d:\job_project\暴风眼\tall-qcp2.0\src\manifest.json", "JSON", 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 6, 2, 82
"d:\job_project\暴风眼\tall-qcp2.0\src\mixins\userAuth.js", "JavaScript", 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 49
"d:\job_project\暴风眼\tall-qcp2.0\src\pages.json", "JSON", 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 124
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\Apply\index.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 27, 4, 444
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\BL-zhuce.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 4, 1, 198
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\mixin.js", "JavaScript", 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 114
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\components\Title.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 31, 5, 295
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\index.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 21, 4, 105
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\camera\camera.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 20, 5, 212
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\detail-webview\detail-webview.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 1, 7, 50
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\establish\establish.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 306, 2, 450
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\get-phone-power\get-phone-power.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 27, 4, 157
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\index\index.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 82, 21, 553
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\info\info.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 23, 7, 383
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\inner.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 43, 6, 409
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\mixin.js", "JavaScript", 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 2, 1105
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\mixin.js", "JavaScript", 0, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 1111
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\outside.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 34, 2, 382
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\patientLine\patientLine.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 12, 3, 249
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\patient\patient.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 368, 2, 455
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\phone-bind\phone-bind.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 3, 15, 202
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\project-webview\project-webview.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 3, 5, 42
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\questionnaire-webview\questionnaire-webview.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 2, 3, 32
"d:\job_project\暴风眼\tall-qcp2.0\src\pages\task-page\task-page.vue", "Vue", 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 81, 27, 382
"d:\job_project\暴风眼\tall-qcp2.0\src\registerServiceWorker.js", "JavaScript", 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 30
"d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\actions.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\getters.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\mutations.js", "JavaScript", 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 2, 67
"d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\state.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\db\actions.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\db\getters.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\db\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\db\mutations.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\db\state.js", "JavaScript", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8
"d:\job_project\暴风眼\tall-qcp2.0\src\store\index.js", "JavaScript", 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 7, 53
"d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\getters.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\index.js", "JavaScript", 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5
"d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\mutations.js", "JavaScript", 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 7, 87
"d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\state.js", "JavaScript", 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9
"d:\job_project\暴风眼\tall-qcp2.0\src\store\project\actions.js", "JavaScript", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4
"d:\job_project\暴风眼\tall-qcp2.0\src\store\project\getters.js", "JavaScript", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 12
"d:\job_project\暴风眼\tall-qcp2.0\src\store\project\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\project\mutations.js", "JavaScript", 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 7, 72
"d:\job_project\暴风眼\tall-qcp2.0\src\store\project\state.js", "JavaScript", 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 10
"d:\job_project\暴风眼\tall-qcp2.0\src\store\role\actions.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 18
"d:\job_project\暴风眼\tall-qcp2.0\src\store\role\getters.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 14
"d:\job_project\暴风眼\tall-qcp2.0\src\store\role\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\role\mutations.js", "JavaScript", 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 49
"d:\job_project\暴风眼\tall-qcp2.0\src\store\role\state.js", "JavaScript", 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 10
"d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\actions.js", "JavaScript", 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 12, 152
"d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\index.js", "JavaScript", 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6
"d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\mutations.js", "JavaScript", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 4, 27
"d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\state.js", "JavaScript", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8
"d:\job_project\暴风眼\tall-qcp2.0\src\store\task\actions.js", "JavaScript", 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 34
"d:\job_project\暴风眼\tall-qcp2.0\src\store\task\getters.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 24
"d:\job_project\暴风眼\tall-qcp2.0\src\store\task\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\task\mutations.js", "JavaScript", 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 23, 207
"d:\job_project\暴风眼\tall-qcp2.0\src\store\task\state.js", "JavaScript", 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 26
"d:\job_project\暴风眼\tall-qcp2.0\src\store\user\actions.js", "JavaScript", 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 20
"d:\job_project\暴风眼\tall-qcp2.0\src\store\user\getters.js", "JavaScript", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 15
"d:\job_project\暴风眼\tall-qcp2.0\src\store\user\index.js", "JavaScript", 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 13
"d:\job_project\暴风眼\tall-qcp2.0\src\store\user\mutations.js", "JavaScript", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 25
"d:\job_project\暴风眼\tall-qcp2.0\src\store\user\state.js", "JavaScript", 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6
"d:\job_project\暴风眼\tall-qcp2.0\src\uni.scss", "SCSS", 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 23, 13, 77
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\cache.js", "JavaScript", 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 8, 177
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\cacheAndRequest.js", "JavaScript", 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 14, 191
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\indexedDB.js", "JavaScript", 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 14, 164
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\request.js", "JavaScript", 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6, 55
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\storage.js", "JavaScript", 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 9, 113
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\tall.js", "JavaScript", 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 39
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\time.js", "JavaScript", 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 22, 367
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\ui.js", "JavaScript", 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 5, 57
"d:\job_project\暴风眼\tall-qcp2.0\src\utils\upload.js", "JavaScript", 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 6, 111
"d:\job_project\暴风眼\tall-qcp2.0\tsconfig.json", "JSON with Comments", 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 1, 10
"d:\job_project\暴风眼\tall-qcp2.0\vue.config.js", "JavaScript", 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 37
"Total", "-", 0, 4523, 98, 326, 9, 24, 19, 9648, 3730, 195, 3, 2491, 1999, 23065
1 filename language Properties JavaScript Markdown JSON Ignore HTML JSON with Comments Vue SCSS CSS SVG comment blank total
2 d:\job_project\暴风眼\tall-qcp2.0\.env Properties 0 0 0 0 0 0 0 0 0 0 0 0 1 1
3 d:\job_project\暴风眼\tall-qcp2.0\.eslintrc.js JavaScript 0 33 0 0 0 0 0 0 0 0 0 14 2 49
4 d:\job_project\暴风眼\tall-qcp2.0\.hbuilderx\launch.json JSON with Comments 0 0 0 0 0 0 10 0 0 0 0 1 1 12
5 d:\job_project\暴风眼\tall-qcp2.0\.prettierignore Ignore 0 0 0 0 9 0 0 0 0 0 0 0 1 10
6 d:\job_project\暴风眼\tall-qcp2.0\.prettierrc JSON 0 0 0 13 0 0 0 0 0 0 0 0 1 14
7 d:\job_project\暴风眼\tall-qcp2.0\CHANGELOG.md Markdown 0 0 21 0 0 0 0 0 0 0 0 0 5 26
8 d:\job_project\暴风眼\tall-qcp2.0\README.md Markdown 0 0 77 0 0 0 0 0 0 0 0 0 25 102
9 d:\job_project\暴风眼\tall-qcp2.0\babel.config.js JavaScript 0 51 0 0 0 0 0 0 0 0 0 0 7 58
10 d:\job_project\暴风眼\tall-qcp2.0\commitlint.config.js JavaScript 0 1 0 0 0 0 0 0 0 0 0 0 1 2
11 d:\job_project\暴风眼\tall-qcp2.0\jest.config.js JavaScript 0 48 0 0 0 0 0 0 0 0 0 4 1 53
12 d:\job_project\暴风眼\tall-qcp2.0\package.json JSON 0 0 0 116 0 0 0 0 0 0 0 0 1 117
13 d:\job_project\暴风眼\tall-qcp2.0\postcss.config.js JavaScript 0 20 0 0 0 0 0 0 0 0 0 0 2 22
14 d:\job_project\暴风眼\tall-qcp2.0\public\img\icons\safari-pinned-tab.svg SVG 0 0 0 0 0 0 0 0 0 0 3 0 1 4
15 d:\job_project\暴风眼\tall-qcp2.0\public\index.html HTML 0 0 0 0 0 24 0 0 0 0 0 1 4 29
16 d:\job_project\暴风眼\tall-qcp2.0\src\App.vue Vue 0 0 0 0 0 0 0 118 0 0 0 31 10 159
17 d:\job_project\暴风眼\tall-qcp2.0\src\apis\carbasics.js JavaScript 0 80 0 0 0 0 0 0 0 0 0 40 7 127
18 d:\job_project\暴风眼\tall-qcp2.0\src\apis\project.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 5 7 23
19 d:\job_project\暴风眼\tall-qcp2.0\src\apis\role.js JavaScript 0 40 0 0 0 0 0 0 0 0 0 6 5 51
20 d:\job_project\暴风眼\tall-qcp2.0\src\apis\tall.js JavaScript 0 36 0 0 0 0 0 0 0 0 0 21 5 62
21 d:\job_project\暴风眼\tall-qcp2.0\src\apis\task.js JavaScript 0 13 0 0 0 0 0 0 0 0 0 5 2 20
22 d:\job_project\暴风眼\tall-qcp2.0\src\apis\wbs.js JavaScript 0 5 0 0 0 0 0 0 0 0 0 1 2 8
23 d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\app.scss SCSS 0 0 0 0 0 0 0 0 6 0 0 0 1 7
24 d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.css CSS 0 0 0 0 0 0 0 0 0 195 0 0 63 258
25 d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\iconfont.scss SCSS 0 0 0 0 0 0 0 0 195 0 0 0 63 258
26 d:\job_project\暴风眼\tall-qcp2.0\src\common\styles\tailwind.scss SCSS 0 0 0 0 0 0 0 0 3488 0 0 0 1030 4518
27 d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\Calendar.vue Vue 0 0 0 0 0 0 0 400 0 0 0 45 29 474
28 d:\job_project\暴风眼\tall-qcp2.0\src\components\Calendar\generateDates.js JavaScript 0 110 0 0 0 0 0 0 0 0 0 22 5 137
29 d:\job_project\暴风眼\tall-qcp2.0\src\components\Demonstration\Demonstration.vue Vue 0 0 0 0 0 0 0 70 0 0 0 1 1 72
30 d:\job_project\暴风眼\tall-qcp2.0\src\components\Globals\Globals.vue Vue 0 0 0 0 0 0 0 77 0 0 0 3 9 89
31 d:\job_project\暴风眼\tall-qcp2.0\src\components\ImageCode\ImageCode.vue Vue 0 0 0 0 0 0 0 32 0 0 0 1 5 38
32 d:\job_project\暴风眼\tall-qcp2.0\src\components\NewRole\NewRole.vue Vue 0 0 0 0 0 0 0 42 0 0 0 0 1 43
33 d:\job_project\暴风眼\tall-qcp2.0\src\components\PatientList\PatientList.vue Vue 0 0 0 0 0 0 0 485 0 0 0 31 5 521
34 d:\job_project\暴风眼\tall-qcp2.0\src\components\PrettyExchange\PrettyExchange.vue Vue 0 0 0 0 0 0 0 468 0 0 0 19 34 521
35 d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\ProjectItem.vue Vue 0 0 0 0 0 0 0 149 0 0 0 5 12 166
36 d:\job_project\暴风眼\tall-qcp2.0\src\components\Projects\Projects.vue Vue 0 0 0 0 0 0 0 51 0 0 0 9 6 66
37 d:\job_project\暴风眼\tall-qcp2.0\src\components\Roles\Roles.vue Vue 0 0 0 0 0 0 0 216 0 0 0 25 22 263
38 d:\job_project\暴风眼\tall-qcp2.0\src\components\Service\Service.vue Vue 0 0 0 0 0 0 0 38 0 0 0 0 1 39
39 d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share copy.vue Vue 0 0 0 0 0 0 0 106 0 0 0 15 14 135
40 d:\job_project\暴风眼\tall-qcp2.0\src\components\Share\Share.vue Vue 0 0 0 0 0 0 0 84 0 0 0 4 11 99
41 d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsCards\StatisticsCards.vue Vue 0 0 0 0 0 0 0 161 0 0 0 5 11 177
42 d:\job_project\暴风眼\tall-qcp2.0\src\components\StatisticsLists\StatisticsLists.vue Vue 0 0 0 0 0 0 0 71 0 0 0 1 10 82
43 d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\Test.vue Vue 0 0 0 0 0 0 0 896 0 0 0 81 5 982
44 d:\job_project\暴风眼\tall-qcp2.0\src\components\Test\component\Talk.vue Vue 0 0 0 0 0 0 0 209 0 0 0 51 3 263
45 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\TimeLine.vue Vue 0 0 0 0 0 0 0 104 0 0 0 12 11 127
46 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Barrier.vue Vue 0 0 0 0 0 0 0 41 0 0 0 0 2 43
47 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TaskTools.vue Vue 0 0 0 0 0 0 0 155 0 0 0 12 19 186
48 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeBox.vue Vue 0 0 0 0 0 0 0 125 0 0 0 6 12 143
49 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\TimeStatus.vue Vue 0 0 0 0 0 0 0 196 0 0 0 18 18 232
50 d:\job_project\暴风眼\tall-qcp2.0\src\components\TimeLine\component\Title.vue Vue 0 0 0 0 0 0 0 7 0 0 0 0 1 8
51 d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\Title.vue Vue 0 0 0 0 0 0 0 188 0 0 0 29 19 236
52 d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\CreateTask.vue Vue 0 0 0 0 0 0 0 387 0 0 0 49 25 461
53 d:\job_project\暴风眼\tall-qcp2.0\src\components\Title\components\ShareProject.vue Vue 0 0 0 0 0 0 0 184 0 0 0 12 15 211
54 d:\job_project\暴风眼\tall-qcp2.0\src\components\Upload\Upload.vue Vue 0 0 0 0 0 0 0 228 0 0 0 8 8 244
55 d:\job_project\暴风眼\tall-qcp2.0\src\components\VolumeProject\VolumeProject.vue Vue 0 0 0 0 0 0 0 96 0 0 0 17 2 115
56 d:\job_project\暴风眼\tall-qcp2.0\src\components\Volume\Volume.vue Vue 0 0 0 0 0 0 0 99 0 0 0 6 2 107
57 d:\job_project\暴风眼\tall-qcp2.0\src\components\select-lay\select-lay.vue Vue 0 0 0 0 0 0 0 376 0 0 0 18 25 419
58 d:\job_project\暴风眼\tall-qcp2.0\src\config\app.js JavaScript 0 6 0 0 0 0 0 0 0 0 0 0 1 7
59 d:\job_project\暴风眼\tall-qcp2.0\src\config\db.js JavaScript 0 3 0 0 0 0 0 0 0 0 0 0 1 4
60 d:\job_project\暴风眼\tall-qcp2.0\src\config\plugin.js JavaScript 0 94 0 0 0 0 0 0 0 0 0 2 2 98
61 d:\job_project\暴风眼\tall-qcp2.0\src\config\task.js JavaScript 0 1 0 0 0 0 0 0 0 0 0 1 1 3
62 d:\job_project\暴风眼\tall-qcp2.0\src\config\time.js JavaScript 0 16 0 0 0 0 0 0 0 0 0 1 1 18
63 d:\job_project\暴风眼\tall-qcp2.0\src\config\user copy.js JavaScript 0 37 0 0 0 0 0 0 0 0 0 3 4 44
64 d:\job_project\暴风眼\tall-qcp2.0\src\config\user.js JavaScript 0 37 0 0 0 0 0 0 0 0 0 4 4 45
65 d:\job_project\暴风眼\tall-qcp2.0\src\config\zIndex.js JavaScript 0 3 0 0 0 0 0 0 0 0 0 2 1 6
66 d:\job_project\暴风眼\tall-qcp2.0\src\main.js JavaScript 0 36 0 0 0 0 0 0 0 0 0 9 10 55
67 d:\job_project\暴风眼\tall-qcp2.0\src\manifest.json JSON 0 0 0 74 0 0 0 0 0 0 0 6 2 82
68 d:\job_project\暴风眼\tall-qcp2.0\src\mixins\userAuth.js JavaScript 0 40 0 0 0 0 0 0 0 0 0 5 4 49
69 d:\job_project\暴风眼\tall-qcp2.0\src\pages.json JSON 0 0 0 123 0 0 0 0 0 0 0 0 1 124
70 d:\job_project\暴风眼\tall-qcp2.0\src\pages\Apply\index.vue Vue 0 0 0 0 0 0 0 413 0 0 0 27 4 444
71 d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\BL-zhuce.vue Vue 0 0 0 0 0 0 0 193 0 0 0 4 1 198
72 d:\job_project\暴风眼\tall-qcp2.0\src\pages\BL\mixin.js JavaScript 0 110 0 0 0 0 0 0 0 0 0 2 2 114
73 d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\components\Title.vue Vue 0 0 0 0 0 0 0 259 0 0 0 31 5 295
74 d:\job_project\暴风眼\tall-qcp2.0\src\pages\Statistics\index.vue Vue 0 0 0 0 0 0 0 80 0 0 0 21 4 105
75 d:\job_project\暴风眼\tall-qcp2.0\src\pages\camera\camera.vue Vue 0 0 0 0 0 0 0 187 0 0 0 20 5 212
76 d:\job_project\暴风眼\tall-qcp2.0\src\pages\detail-webview\detail-webview.vue Vue 0 0 0 0 0 0 0 42 0 0 0 1 7 50
77 d:\job_project\暴风眼\tall-qcp2.0\src\pages\establish\establish.vue Vue 0 0 0 0 0 0 0 142 0 0 0 306 2 450
78 d:\job_project\暴风眼\tall-qcp2.0\src\pages\get-phone-power\get-phone-power.vue Vue 0 0 0 0 0 0 0 126 0 0 0 27 4 157
79 d:\job_project\暴风眼\tall-qcp2.0\src\pages\index\index.vue Vue 0 0 0 0 0 0 0 450 0 0 0 82 21 553
80 d:\job_project\暴风眼\tall-qcp2.0\src\pages\info\info.vue Vue 0 0 0 0 0 0 0 353 0 0 0 23 7 383
81 d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\inner.vue Vue 0 0 0 0 0 0 0 360 0 0 0 43 6 409
82 d:\job_project\暴风眼\tall-qcp2.0\src\pages\inner\mixin.js JavaScript 0 1093 0 0 0 0 0 0 0 0 0 10 2 1105
83 d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\mixin.js JavaScript 0 1099 0 0 0 0 0 0 0 0 0 6 6 1111
84 d:\job_project\暴风眼\tall-qcp2.0\src\pages\outside\outside.vue Vue 0 0 0 0 0 0 0 346 0 0 0 34 2 382
85 d:\job_project\暴风眼\tall-qcp2.0\src\pages\patientLine\patientLine.vue Vue 0 0 0 0 0 0 0 234 0 0 0 12 3 249
86 d:\job_project\暴风眼\tall-qcp2.0\src\pages\patient\patient.vue Vue 0 0 0 0 0 0 0 85 0 0 0 368 2 455
87 d:\job_project\暴风眼\tall-qcp2.0\src\pages\phone-bind\phone-bind.vue Vue 0 0 0 0 0 0 0 184 0 0 0 3 15 202
88 d:\job_project\暴风眼\tall-qcp2.0\src\pages\project-webview\project-webview.vue Vue 0 0 0 0 0 0 0 34 0 0 0 3 5 42
89 d:\job_project\暴风眼\tall-qcp2.0\src\pages\questionnaire-webview\questionnaire-webview.vue Vue 0 0 0 0 0 0 0 27 0 0 0 2 3 32
90 d:\job_project\暴风眼\tall-qcp2.0\src\pages\task-page\task-page.vue Vue 0 0 0 0 0 0 0 274 0 0 0 81 27 382
91 d:\job_project\暴风眼\tall-qcp2.0\src\registerServiceWorker.js JavaScript 0 26 0 0 0 0 0 0 0 0 0 1 3 30
92 d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\actions.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
93 d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\getters.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
94 d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
95 d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\mutations.js JavaScript 0 27 0 0 0 0 0 0 0 0 0 38 2 67
96 d:\job_project\暴风眼\tall-qcp2.0\src\store\carbasics\state.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
97 d:\job_project\暴风眼\tall-qcp2.0\src\store\db\actions.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
98 d:\job_project\暴风眼\tall-qcp2.0\src\store\db\getters.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
99 d:\job_project\暴风眼\tall-qcp2.0\src\store\db\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
100 d:\job_project\暴风眼\tall-qcp2.0\src\store\db\mutations.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
101 d:\job_project\暴风眼\tall-qcp2.0\src\store\db\state.js JavaScript 0 6 0 0 0 0 0 0 0 0 0 0 2 8
102 d:\job_project\暴风眼\tall-qcp2.0\src\store\index.js JavaScript 0 32 0 0 0 0 0 0 0 0 0 14 7 53
103 d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\getters.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
104 d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\index.js JavaScript 0 3 0 0 0 0 0 0 0 0 0 0 2 5
105 d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\mutations.js JavaScript 0 37 0 0 0 0 0 0 0 0 0 43 7 87
106 d:\job_project\暴风眼\tall-qcp2.0\src\store\messages\state.js JavaScript 0 7 0 0 0 0 0 0 0 0 0 0 2 9
107 d:\job_project\暴风眼\tall-qcp2.0\src\store\project\actions.js JavaScript 0 2 0 0 0 0 0 0 0 0 0 0 2 4
108 d:\job_project\暴风眼\tall-qcp2.0\src\store\project\getters.js JavaScript 0 6 0 0 0 0 0 0 0 0 0 4 2 12
109 d:\job_project\暴风眼\tall-qcp2.0\src\store\project\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
110 d:\job_project\暴风眼\tall-qcp2.0\src\store\project\mutations.js JavaScript 0 35 0 0 0 0 0 0 0 0 0 30 7 72
111 d:\job_project\暴风眼\tall-qcp2.0\src\store\project\state.js JavaScript 0 7 0 0 0 0 0 0 0 0 0 1 2 10
112 d:\job_project\暴风眼\tall-qcp2.0\src\store\role\actions.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 5 2 18
113 d:\job_project\暴风眼\tall-qcp2.0\src\store\role\getters.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 1 2 14
114 d:\job_project\暴风眼\tall-qcp2.0\src\store\role\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
115 d:\job_project\暴风眼\tall-qcp2.0\src\store\role\mutations.js JavaScript 0 18 0 0 0 0 0 0 0 0 0 25 6 49
116 d:\job_project\暴风眼\tall-qcp2.0\src\store\role\state.js JavaScript 0 8 0 0 0 0 0 0 0 0 0 0 2 10
117 d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\actions.js JavaScript 0 96 0 0 0 0 0 0 0 0 0 44 12 152
118 d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\index.js JavaScript 0 4 0 0 0 0 0 0 0 0 0 0 2 6
119 d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\mutations.js JavaScript 0 12 0 0 0 0 0 0 0 0 0 11 4 27
120 d:\job_project\暴风眼\tall-qcp2.0\src\store\socket\state.js JavaScript 0 6 0 0 0 0 0 0 0 0 0 0 2 8
121 d:\job_project\暴风眼\tall-qcp2.0\src\store\task\actions.js JavaScript 0 21 0 0 0 0 0 0 0 0 0 10 3 34
122 d:\job_project\暴风眼\tall-qcp2.0\src\store\task\getters.js JavaScript 0 16 0 0 0 0 0 0 0 0 0 3 5 24
123 d:\job_project\暴风眼\tall-qcp2.0\src\store\task\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
124 d:\job_project\暴风眼\tall-qcp2.0\src\store\task\mutations.js JavaScript 0 80 0 0 0 0 0 0 0 0 0 104 23 207
125 d:\job_project\暴风眼\tall-qcp2.0\src\store\task\state.js JavaScript 0 24 0 0 0 0 0 0 0 0 0 0 2 26
126 d:\job_project\暴风眼\tall-qcp2.0\src\store\user\actions.js JavaScript 0 13 0 0 0 0 0 0 0 0 0 5 2 20
127 d:\job_project\暴风眼\tall-qcp2.0\src\store\user\getters.js JavaScript 0 12 0 0 0 0 0 0 0 0 0 1 2 15
128 d:\job_project\暴风眼\tall-qcp2.0\src\store\user\index.js JavaScript 0 11 0 0 0 0 0 0 0 0 0 0 2 13
129 d:\job_project\暴风眼\tall-qcp2.0\src\store\user\mutations.js JavaScript 0 12 0 0 0 0 0 0 0 0 0 10 3 25
130 d:\job_project\暴风眼\tall-qcp2.0\src\store\user\state.js JavaScript 0 5 0 0 0 0 0 0 0 0 0 0 1 6
131 d:\job_project\暴风眼\tall-qcp2.0\src\uni.scss SCSS 0 0 0 0 0 0 0 0 41 0 0 23 13 77
132 d:\job_project\暴风眼\tall-qcp2.0\src\utils\cache.js JavaScript 0 114 0 0 0 0 0 0 0 0 0 55 8 177
133 d:\job_project\暴风眼\tall-qcp2.0\src\utils\cacheAndRequest.js JavaScript 0 129 0 0 0 0 0 0 0 0 0 48 14 191
134 d:\job_project\暴风眼\tall-qcp2.0\src\utils\indexedDB.js JavaScript 0 99 0 0 0 0 0 0 0 0 0 51 14 164
135 d:\job_project\暴风眼\tall-qcp2.0\src\utils\request.js JavaScript 0 39 0 0 0 0 0 0 0 0 0 10 6 55
136 d:\job_project\暴风眼\tall-qcp2.0\src\utils\storage.js JavaScript 0 67 0 0 0 0 0 0 0 0 0 37 9 113
137 d:\job_project\暴风眼\tall-qcp2.0\src\utils\tall.js JavaScript 0 33 0 0 0 0 0 0 0 0 0 0 6 39
138 d:\job_project\暴风眼\tall-qcp2.0\src\utils\time.js JavaScript 0 242 0 0 0 0 0 0 0 0 0 103 22 367
139 d:\job_project\暴风眼\tall-qcp2.0\src\utils\ui.js JavaScript 0 35 0 0 0 0 0 0 0 0 0 17 5 57
140 d:\job_project\暴风眼\tall-qcp2.0\src\utils\upload.js JavaScript 0 89 0 0 0 0 0 0 0 0 0 16 6 111
141 d:\job_project\暴风眼\tall-qcp2.0\tsconfig.json JSON with Comments 0 0 0 0 0 0 9 0 0 0 0 0 1 10
142 d:\job_project\暴风眼\tall-qcp2.0\vue.config.js JavaScript 0 27 0 0 0 0 0 0 0 0 0 8 2 37
143 Total - 0 4523 98 326 9 24 19 9648 3730 195 3 2491 1999 23065

1
.VSCodeCounter/2022-11-30_16-10-14/results.json

File diff suppressed because one or more lines are too long

94
.VSCodeCounter/2022-11-30_16-10-14/results.md

@ -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)

238
.VSCodeCounter/2022-11-30_16-10-14/results.txt

@ -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 |
+------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+

10
.env.development

@ -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/

6
.env.production

@ -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/

26
CHANGELOG.md

@ -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)

2
package.json

@ -26,6 +26,7 @@
"test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
},
"dependencies": {
"@dcloudio/uni-cli-i18n": "^2.0.1-34720220422002",
"@dcloudio/uni-h5": "^2.0.0-32220210818002",
"@dcloudio/uni-helper-json": "*",
"@dcloudio/uni-i18n": "^2.0.0-32220210818002",
@ -35,6 +36,7 @@
"@vue/shared": "^3.2.6",
"dayjs": "^1.10.6",
"flyio": "^0.6.2",
"html2canvas": "^1.4.1",
"lodash": "^4.17.21",
"regenerator-runtime": "^0.12.1",
"uview-ui": "^1.8.5",

38
src/apis/carbasics.js

@ -3,7 +3,11 @@ const fileUrl = process.env.VUE_APP_BASE_URL;
export const carbasics = `${apiUrl}/carbasics/v4.0`;
export const filedeal = `${fileUrl}/filedeal`;
const patient = `${carbasics}/patient`; // 患者相关接口
const plugin = `${carbasics}/plugin`; // 插件相关接口
const firstAid = `${carbasics}/firstAid`; // 急救数据相关接口
const screening = `${carbasics}/screening`; // 高危人群筛查相关接口
const questionnaire = `${carbasics}/questionnaire`; // 调查问卷相关接口
const account = `${carbasics}/account`; // 用户管理相关接口
// 获取急救/出院数据列表
export const querySelf = {
@ -77,6 +81,15 @@ const install = (Vue, vm) => {
vm.$u.api.getRecord = params => getRecord.index(params);
// 获取急救/出院数据列表
vm.$u.api.querySelf = params => querySelf.index(params);
// 查询地区
vm.$u.api.searchArea = params => vm.$u.post(`${questionnaire}/area`, params);
// 查询职位
vm.$u.api.searchPosition = params => vm.$u.post(`${questionnaire}/queryPosition`, params);
// 查询当前地区的医院列表
vm.$u.api.queryHospitalList = params => vm.$u.post(`${questionnaire}/queryHospitalList`, params);
// 医院名称回显
vm.$u.api.hospitalNameEcho = params => vm.$u.post(`${questionnaire}/hospitalNameEcho`, params);
// 患者加入急救
vm.$u.api.joinAid = params => vm.$u.post(`${firstAid}/join`, params);
// 患者退出急救
@ -89,12 +102,37 @@ const install = (Vue, vm) => {
vm.$u.api.getPatient = params => vm.$u.post(`${patient}/getPatient`, params);
// 修改急救患者的患者信息
vm.$u.api.updatePatient = params => vm.$u.post(`${patient}/updatePatient`, params);
// 分享问卷(生成分享二维码)
vm.$u.api.shareScreening = params => vm.$u.post(`${screening}/share`, params);
// 卫生院查看村医工作量
vm.$u.api.centerWorkload = params => vm.$u.post(`${screening}/center/workload`, params);
// 村医查看工作量
vm.$u.api.villageWorkload = params => vm.$u.post(`${screening}/village/workload`, params);
// 上传身份证图像识别
vm.$u.api.identifyWords = `${carbasics}/ocr/identifyWords`;
// 上传试题信息获取答案直接赋值给试题并且提交后台
vm.$u.api.generalBasic = params => vm.$u.post(`${carbasics}/ocr/general/basic`, params);
// 上传文件
vm.$u.api.uploadFile = `${filedeal}/file/upload/multiple`;
// vm.$u.api.uploadFile = `http://101.201.226.163/filedeal/file/upload/multiple`;
// 查询我的申请列表;
vm.$u.api.queryMyApply = params => vm.$u.post(`${account}/queryMyApply`, params);
// 查询部门与职位
vm.$u.api.queryDepartment = params => vm.$u.post(`${account}/queryDepartment`, params);
// 查询医院列表
vm.$u.api.queryHospital = params => vm.$u.post(`${account}/queryHospital`, params);
// 提交申请
vm.$u.api.submitAccount = params => vm.$u.post(`${account}/submitAccount`, params);
// 查询五个状态的平车(绿道,占用,空闲,充电,离线)
vm.$u.api.queryCar = params =>
vm.$u.get(`${firstAid}/queryCar?hospitalId=${params.hospitalId}&status=${params.status}
`);
// 查询平车绑定患者的当前环节信息
vm.$u.api.getStep = params => vm.$u.post(`${firstAid}/step`, params);
// 查询患者信息的目录列表
vm.$u.api.queryParentCode = params => vm.$u.post(`${plugin}/queryParentCode`, params);
// 根据目录类型查询类型下的题目
vm.$u.api.queryQuestionCode = params => vm.$u.post(`${plugin}/queryQuestionCode`, params);
};
export default { install };

13
src/apis/project.js

@ -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 };

5
src/apis/role.js

@ -1,4 +1,5 @@
const url = process.env.VUE_APP_API_URL;
export const carbasics = `${url}/carbasics/v4.0`;
// 查询首页按钮的名称及跳转
export const queryMustShow = {
async index(params) {
@ -41,9 +42,9 @@ const install = (Vue, vm) => {
// 保存当前用户在当前项目最后一次选择的角色
vm.$u.api.saveRoleRecord = params => saveRoleRecord.index(params);
// 根据项目id查找角色
vm.$u.api.findShowRole = param => vm.$u.post(`${uni.$t.domain}/role/show`, param);
vm.$u.api.findShowRole = param => vm.$u.post(`${carbasics}/role/show`, param);
// 根据项目id查找所有成员
vm.$u.api.queryChecker = param => vm.$u.post(`${uni.$t.domain}/deliver/queryChecker`, param);
vm.$u.api.queryChecker = param => vm.$u.post(`${carbasics}/deliver/queryChecker`, param);
};
export default { install };

68
src/apis/tall.js

@ -19,66 +19,14 @@ export const login = {
},
};
// 获取手机号
export const bindPhone = {
async index(params) {
try {
/* #endif */
const data = await uni.$u.http.post(`${tall}/users/bindingNoCode`, params);
return data;
} catch (error) {
throw new Error(error);
}
},
};
// 绑定手机号(合并或者替换)
export const bindNowPhone = {
async index(params) {
try {
/* #endif */
const data = await uni.$u.http.post(`${tall}/users/merge`, params);
return data;
} catch (error) {
throw new Error(error);
}
},
};
// 查询首页按钮的名称及跳转
export const getQueryButton = {
async index(params) {
try {
/* #endif */
const data = await uni.$u.http.post(`${carbasics}/questionnaire/queryButton`, params);
return data;
} catch (error) {
return null;
}
},
};
// 查询当前用户是否展示宣传页
export const queryIsShow = {
async index(params) {
try {
/* #endif */
const data = await uni.$u.http.post(`${carbasics}/questionnaire/queryIsShow`, params);
return data;
} catch (error) {
throw new Error(error);
}
},
};
const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
// 登录
vm.$u.api.signin = params => login.index(params);
// 绑定手机号无需验证码
vm.$u.api.bindPhone = params => bindPhone.index(params);
vm.$u.api.bindPhone = params => vm.$u.http.post(`${tall}/users/bindingNoCode`, params);
// 手机号已被注册,是否合并
vm.$u.api.bindNowPhone = params => bindNowPhone.index(params);
vm.$u.api.bindNowPhone = params => vm.$u.http.post(`${tall}/users/merge`, params);
// 获取图片验证码
vm.$u.api.getImageCode = () => vm.$u.get(`${tall}/users/code`);
// 获取短信验证码
@ -89,13 +37,17 @@ const install = (Vue, vm) => {
vm.$u.api.phoneBind = (phone, smsCode) => vm.$u.http.post(`${tall}/users/binding`, { phone, smsCode });
// 修改用户信息
vm.$u.api.updateUserInfo = params => vm.$u.http.post(`${tall}/users/userInfo`, params);
// 获取项目列表
vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${tall}/project/query`, { startTime, endTime });
// vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${tall}/project/query`, { startTime, endTime });
vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${carbasics}/project/queryProjectList`, { startTime, endTime });
// 查询首页的按钮展示及跳转
vm.$u.api.getQueryButton = params => getQueryButton.index(params);
vm.$u.api.getQueryButton = params => vm.$u.post(`${carbasics}/questionnaire/queryButton`, params);
// 查询首页轮播图
vm.$u.api.getCarouselShow = params => vm.$u.post(`${carbasics}/carousel/show`, params);
// 查询首页轮播图
vm.$u.api.getNoticeList = params => vm.$u.post(`${carbasics}/notice/query`, params);
// 查询当前用户是否展示宣传页按钮
vm.$u.api.queryIsShow = params => queryIsShow.index(params);
vm.$u.api.queryIsShow = params => vm.$u.post(`${carbasics}/questionnaire/queryIsShow`, params);
// 查询日历是否有小红点
vm.$u.api.findRedPoint = (startTime, endTime) => vm.$u.post(`${tall}/project/day`, { startTime, endTime });
// 设置项目顺序

16
src/apis/task.js

@ -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 };

83
src/components/Demonstration/Demonstration.vue

@ -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>

42
src/components/NewRole/NewRole.vue

@ -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>

301
src/components/PatientList/PatientList.vue

@ -1,51 +1,60 @@
<template>
<div class="flex flex-1 flex-col patient-list">
<div class="title flex justify-between items-center">
<u-search
style="width: 500rpx"
v-model="name"
shape="round"
action-text=" "
placeholder="请输入患者"
@search="getData(true)"
@blur="searchBlur"
></u-search>
<select-lay
:zindex="99"
:showplaceholder="false"
:value="tval"
name="name"
placeholder="请选择类型"
:options="provinces"
@selectitem="changeSelect"
>
</select-lay>
<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>
<div class="title flex justify-between items-center">
<u-search
class="w-full"
v-model="name"
shape="round"
action-text=" "
placeholder="搜索患者"
@search="getData(true)"
@blur="searchBlur"
:show-action="false"
></u-search>
<!-- <select-lay
:zindex="99"
:showplaceholder="false"
:value="tval"
name="name"
placeholder="请选择类型"
:options="provinces"
@selectitem="changeSelect"
>
</select-lay> -->
</div>
</view>
<div class="patients flex items-center">
<view class="shu"></view>
<div>病例列表</div>
<!-- <div class="ml-2 card-total flex items-center justify-center">{{ total }}</div> -->
</div>
<div class="patient-tabs flex justify-evenly">
<div class="flex items-center" style="position: relative" @click="changeSelect(0)">
<div class="tab-text">急救患者</div>
<div class="ml-1 card-total flex items-center justify-center" v-if="tval === 0">{{ total }}</div>
<div class="bor-bottom" v-if="tval === 0"></div>
</div>
<div class="flex items-center" style="position: relative" @click="changeSelect(1)">
<div class="tab-text">出院患者</div>
<div class="ml-1 card-total flex items-center justify-center" v-if="tval === 1">{{ total }}</div>
<div class="bor-bottom" v-if="tval === 1"></div>
</div>
</div>
<u-modal
v-model="show"
:closeOnClickOverlay="true"
title="提示"
content="是否确定删除当前患者信息?"
show-cancel-button
confirm-text="删除"
@confirm="confirmDel"
></u-modal>
<u-modal
v-model="show1"
:closeOnClickOverlay="true"
title="提示"
content="退出当前病例后,其他医生可接诊。确定要退出吗?"
show-cancel-button
confirm-text="退出"
@confirm="confirmBack"
></u-modal>
<u-toast ref="uToast" />
<scroll-view scroll-y="true" :style="{ height: height }" :lower-threshold="50" scroll-with-animation @scrolltolower="scrolltolower">
<div v-if="patientList.length" class="white list-box w-full flex-1 flex-col">
<div class="patients flex flex-row">
<!-- <div class="patients flex items-center">
<view class="shu"></view>
<div>{{ tval === 0 ? '急救患者' : '出院患者' }}</div>
<div class="ml-2 card-total flex items-center justify-center">{{ total }}</div>
</div>
</div> -->
<div
v-for="(card, cardIndex) in patientList"
:key="cardIndex"
@ -66,23 +75,37 @@
<div :style="{ 'margin-left': outIndex === cardIndex && card.recordUserId - 0 ? '-68px' : '' }" class="w-full anima">
<div class="crad-content">
<div class="status-wait" v-if="!(card.recordUserId - 0)"></div>
<div class="flex mb-2">
<div class="pr-2 fw-bold">
<span v-if="card.name">
{{ card.name }}
</span>
<span v-else> 无名氏 </span>
</div>
<div class="pr-2 fw-bold">
<span v-if="card.gender === 0"></span>
<span v-else-if="card.gender === 1"></span>
<span v-else>-</span>
</div>
<div class="pr-2 fw-bold">
<span v-if="card.age || card.age === 0">{{ card.age }}</span>
<span v-else>-</span>
</div>
<u-tag style="z-index: 99; margin-right: 0" plain shape="circle" v-if="card.isJmrs - 0 === 1" text="静脉溶栓"> </u-tag>
<div class="flex items-center justify-between">
<view class="flex flex-col">
<view class="flex">
<!-- <view class="huanzhe-tip">患者</view> -->
<div class="pr-2 fw-bold">
<span v-if="card.name">
{{ card.name }}
</span>
<span v-else> 无名氏 </span>
</div>
<div class="pr-2 fw-bold">
<span v-if="card.gender === 0"></span>
<span v-else-if="card.gender === 1"></span>
<span v-else>-</span>
</div>
<div class="pr-2 fw-bold">
<span v-if="card.age || card.age === 0">{{ card.age }}</span>
<span v-else>-</span>
</div>
<div class="pr-2 fw-bold yanshi-text" v-if="card.demonstrate === 1">
<span>演示中</span>
</div>
</view>
<view class="flex flex-nowrap items-center justify-left mt-2">
<view class="status-con mr-1" :class="card.demonstrate === 1 ? 'color-2' : 'color-3'">到院</view>
<view v-if="card.record2" style="color: #a3acbf; font-size: 24rpx">
{{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }}
</view>
</view>
</view>
<!-- <u-tag style="z-index: 99; margin-right: 0" plain shape="circle" v-if="card.isJmrs - 0 === 1" text="静脉溶栓"> </u-tag>
<u-tag
class="ml-2 flex items-center justify-center"
type="success"
@ -91,16 +114,20 @@
v-if="card.isXgzl - 0 === 1"
text="血管内治疗"
>
</u-tag>
</u-tag> -->
<u-icon name="arrow-right" size="28" color="#A3ACBF" />
<!-- <div v-if="card.record2" style="color: rgba(79, 139, 255, 1)">
{{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }}
</div> -->
</div>
<div class="flex">
<!-- <div class="flex">
<div>{{ tval === 0 ? '到院时间:' : '出院时间:' }}</div>
<div v-if="card.record2" style="color: rgba(0, 0, 0, 0.85)">
{{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }}
</div>
</div>
</div> -->
</div>
<img src="./icon/yanshi.png" class="img-box" v-if="card.demonstrate === 1" />
<!-- <img src="./icon/yanshi.png" class="img-box" v-if="card.demonstrate === 1" /> -->
</div>
<div
:style="{
@ -115,6 +142,25 @@
</div>
</div>
</scroll-view>
<u-modal
v-model="show"
:closeOnClickOverlay="true"
title="提示"
content="是否确定删除当前患者信息?"
show-cancel-button
confirm-text="删除"
@confirm="confirmDel"
></u-modal>
<u-modal
v-model="show1"
:closeOnClickOverlay="true"
title="提示"
content="退出当前病例后,其他医生可接诊。确定要退出吗?"
show-cancel-button
confirm-text="退出"
@confirm="confirmBack"
></u-modal>
<u-toast ref="uToast" />
<div class="add-patient" @click="jump">
<u-icon color="#fff" size="40" name="plus"></u-icon>
</div>
@ -159,7 +205,7 @@ export default {
},
mounted() {
const system = uni.getSystemInfoSync();
this.height = system.windowHeight - 33 - 38 - 52 + 'px';
this.height = system.windowHeight - 138 - 40 - 45 + 'px';
console.log('this.height: ', this.height);
},
@ -227,6 +273,7 @@ export default {
this.setFirstAidId(firstAidId);
this.setDetailValueType(demonstrate);
// this.$router.push(`/patient-line`);
this.outIndex = -1;
uni.navigateTo({ url: `/pages/patientLine/patientLine?caseType=${caseType}` });
}
} catch (error) {
@ -343,6 +390,7 @@ export default {
this.total = data.page.total;
} else {
this.$t.ui.showToast('没有更多数据');
this.total = data.page.total;
}
} catch (error) {
console.log('error: ', error);
@ -350,7 +398,8 @@ export default {
},
// ,
changeSelect(e) {
this.tval = this.provinces[e].value;
this.tval = e;
this.outIndex = -1;
this.getData(true);
},
searchBlur() {
@ -386,36 +435,112 @@ export default {
</script>
<style lang="scss" scoped>
.bor-bottom {
width: 64rpx;
height: 12rpx;
background: #4f8bff;
border-radius: 6rpx;
position: absolute;
left: 50%;
margin-left: -32rpx;
bottom: -20rpx;
}
.tab-text {
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.patient-tabs {
padding: 16rpx 32rpx;
margin-bottom: 16rpx;
}
.yanshi-text {
font-size: 28rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #ffae35;
}
.color-2 {
background: #ffece4;
color: #ff8833;
}
.color-3 {
background: #e4edff;
color: #5990ff;
}
.status-con {
padding: 2rpx 6rpx;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
}
.huanzhe-tip {
padding: 2rpx 12rpx;
background: #e4edff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 24rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #5990ff;
margin-right: 20rpx;
}
.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: 16px 32rpx 8px 32rpx;
height: 118px;
background: #ffffff;
box-shadow: 0px 4px 20px 0px rgba(39, 59, 97, 0.08);
border-radius: 20rpx;
overflow: hidden;
opacity: 1;
}
.add-patient {
z-index: 10;
border-radius: 50%;
height: 40px;
width: 40px;
height: 108rpx;
width: 108rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #0284c7;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
position: fixed;
bottom: 100px;
right: 16px;
bottom: 220rpx;
right: 32rpx;
}
.patient-list {
background-color: #fff;
}
.title {
height: 52px;
width: 750rpx;
padding: 8px 16px;
width: 100%;
padding: 32rpx 20rpx;
// position: fixed;
// top: 32px;
background: #fff;
box-shadow: 0 0 4px 4px #ccc;
}
.card-box {
/* box-shadow: 0 0 5px #ccc; */
border: 2px solid #ccc;
margin: 16px 0;
border-radius: 8px;
// border: 2px solid #ccc;
background: #f6f6f9;
// margin: 16px 0;
margin-bottom: 32rpx;
border-radius: 24rpx;
overflow: hidden;
}
.anima {
@ -425,7 +550,7 @@ export default {
.crad-content {
font-size: 14px;
color: #414141;
padding: 12px;
padding: 24rpx;
}
.status-wait {
position: absolute;
@ -448,24 +573,34 @@ export default {
z-index: 10;
}
.list-box {
padding: 16px;
padding: 16rpx 32rpx 32rpx 32rpx;
}
.patients {
font-size: 16px;
padding: 16rpx 32rpx;
font-size: 36rpx;
font-weight: bold;
padding: 10px 0;
color: #3e3d4d;
font-family: OPPOSans-Bold, OPPOSans;
}
.shu {
width: 16rpx;
height: 40rpx;
margin-right: 16rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
}
.card-total {
padding: 0 8px;
border-radius: 10px;
background-color: #009dff;
background-color: #4f8bff;
color: white;
}
.img-box {
position: absolute;
top: 14px;
bottom: -20rpx;
width: 44px;
height: 44px;
right: 16px;
right: -20rpx;
}
</style>

2
src/components/PrettyExchange/PrettyExchange.vue

@ -111,7 +111,7 @@
<view class="border-80 bg-blue-500" v-if="item.showSubBorder"></view>
</view>
</view>
<view class="edition">v2.0.4</view>
<view class="edition">v2.2.1</view>
</scroll-view>
<!-- 移动悬浮 begin -->
<view v-if="showMoveImage">

9
src/components/Projects/ProjectItem.vue

@ -39,22 +39,18 @@
<u-icon @click="openProject(item)" class="text-gray-400" name="arrow-right" size="14px" v-else></u-icon>
</view>
<!-- 有子项目 -->
<view class="ml-8" v-if="item.show">
<!-- <view class="ml-8" v-if="item.show">
<view
:id="'cu-' + index + '-' + subIndex"
:key="subIndex"
class="cu-item flex-col"
v-for="(subItem, subIndex) in item.sonProjectList"
>
<!-- <view :key="subItem.id" v-for="subItem in item.sonProjectList"> -->
<view class="flex items-center justify-between p-3">
<u-icon class="mover" name="https://www.tall.wiki/staticrec/drag.svg" size="48"></u-icon>
<!-- <u-icon @click="openMenu(subItem)" class="mover" name="https://www.tall.wiki/staticrec/drag.svg" size="48"></u-icon> -->
<view @click="openProject(subItem)" class="flex-1 px-3">
<view class="flex items-center">
<view class="mr-2">{{ subItem.name }}</view>
<!-- 状态 -->
<view
:class="
subItem.status === 0
@ -72,11 +68,10 @@
</view>
</view>
<!-- 箭头 -->
<u-icon @click="openProject(subItem)" class="text-gray-400" name="arrow-right" size="14px"></u-icon>
</view>
</view>
</view>
</view> -->
<!-- 项目操作面板 -->
<!-- <u-action-sheet :list="menuList" :tips="tips" @click="$emit('chooseAction', $event)" v-model="showMenu"></u-action-sheet> -->
<u-action-sheet :list="menuList" :tips="tips" @click="chooseAction" v-model="showMenu"></u-action-sheet>

5
src/components/Service/Service.vue

@ -9,6 +9,7 @@
<!-- 客服 -->
<img style="height: 28px; width: 28px" src="./icon/tel-we.png" alt="" />
</button>
<view class="edition">v4.0.2</view>
</div>
</template>
<script>
@ -20,6 +21,10 @@ export default {
};
</script>
<style lang="scss" scoped>
.edition {
text-align: center;
color: #999;
}
.upload {
z-index: 99;
position: fixed;

134
src/components/Share/Share copy.vue

@ -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>

98
src/components/Share/Share.vue

@ -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>

BIN
src/components/Share/imgs/all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
src/components/Share/imgs/bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
src/components/Share/imgs/btn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
src/components/Share/imgs/code.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

176
src/components/StatisticsCards/StatisticsCards.vue

@ -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>

81
src/components/StatisticsLists/StatisticsLists.vue

@ -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>

985
src/components/Test/Test copy.vue

@ -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') {
// ['<3cm1 ', '3-6cm2 ', '>6cm3 ']
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>

369
src/components/Test/Test.vue

@ -1,7 +1,7 @@
<template>
<div class="test">
<div bordered class="list-box" v-for="(item, index) in test" :key="index">
<template v-for="(listItem, listIndex) in item">
<div bordered class="list-box" v-for="(listItem, listIndex) in test" :key="listIndex">
<!-- <template v-for="(listItem, listIndex) in item"> -->
<template v-if="listItem.code === 'ZQTH-SJ'">
<Talk :key="listIndex" @changeHeigt="changeHeigt" />
</template>
@ -10,15 +10,23 @@
class="bg-white list-item"
:key="listIndex"
v-if="
itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level)
itemIsShow(listItem.relevanceQuestionCode, listItem.relevanceShowValue)
"
>
<div class="w-full flex flex-nowrap justify-between items-center" :style="{ marginLeft: listItem.grade === 2 ? '' : '16px' }">
<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="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.content" 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.content }}</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.content }}</view>
</div>
</div>
<div class="flex flex-1 justify-end">
<div class="flex flex-1 justify-end" :style="{marginLeft: listItem.content ? '' : '24rpx'}">
<!-- 自动计算 -->
<span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)">
{{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }}
@ -31,39 +39,43 @@
style="width: 200rpx"
placeholder="请输入"
input-align="right"
:value="listItem.value"
@bulr="changeIpt($event, listItem.code, index, listIndex)"
:value="listItem.answer[0]"
@blur="changeIpt($event, listItem.code, listIndex)"
/>
</template>
<!-- 单选 -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 2" style="margin-right: -24rpx">
<u-radio-group :value="listItem.answer[0]" 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"
@change="changeRadio($event, listItem.code, listIndex)"
v-for="radioValue in listItem.optionList"
:key="radioValue.optionContent"
:name="radioValue.optionContent"
>
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
<span :style="{ color: listItem.answer[0] === radioValue.optionContent ? '#1890ff' : '' }">{{ radioValue.optionContent }}</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">
<u-radio
style="display: block; width: 100%; margin-left: 0; height: 40px; line-height: 40px"
:name="radioValue"
:key="radioValue"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
</u-radio>
<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"
class="flex ml-2 mb-2 items-center"
>
<div>是否烟雾病:</div>
<u-radio-group :value="listItem.ywbValue">
@ -74,11 +86,11 @@
</div>
</u-radio-group>
<!-- 单选(横向三列) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 22" class="flex flex-row flex-wrap w-full">
<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: 200rpx"
style="width: 105%"
class="flex"
:class="{
'text-left': radioIndex % 3 === 0,
@ -88,12 +100,12 @@
'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"
>
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
</u-radio>
</div>
</u-radio-group>
@ -127,8 +139,8 @@
</div>
</div>
</template>
<template v-else>
<div>
<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' : '' }"
@ -183,44 +195,47 @@
>
<span :style="{ color: listItem.value === 'noScore' ? '#1890ff' : '' }">未评</span>
</u-radio>
</template>
</div>
</u-radio-group>
<!-- 单选(竖向排列带分数输入框) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 24" class="flex flex-col w-full">
<div class="w-full flex" v-for="(radioValue, radioIndex) in listItem.itemList" :key="radioIndex">
<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)"
>
{{ radioValue.name }}
</u-radio>
<div v-if="radioValue.showIpt" class="flex items-center ml-1 mr-1">
<!-- :disabled="listItem.value !== radioValue.name" -->
<u-input
:border="true"
:clearable="false"
:value="radioValue.value"
:type="radioValue.unit ? 'number' : 'text'"
placeholder="请输入"
style="width: 150rpx !important"
@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>
</div>
</u-radio-group>
<!-- 多选 -->
@ -234,13 +249,15 @@
v-for="(check, checkIndex) in listItem.itemIsChecked"
:key="checkIndex"
:style="{ minWidth: listItem.checkType - 0 === 3 ? '33%' : listItem.checkType - 0 === 2 ? '50%' : 0 }"
class="my-2 flex items-center"
class="w-full my-2 flex flex-1 flex-col items-start justify-center"
>
<u-checkbox v-model="check.isChecked" :name="listItem.itemList[checkIndex]">
<span :style="{ color: check.isChecked ? '#1890ff' : '' }">
<view class="flex">
<view :style="{ color: check.isChecked ? '#1890ff' : '' }" style="width: 628rpx">
{{ listItem.itemList[checkIndex] }}
</span>
</u-checkbox>
</view>
<u-checkbox v-model="check.isChecked" :name="listItem.itemList[checkIndex]">
</u-checkbox>
</view>
<u-input
:border="true"
:clearable="false"
@ -289,27 +306,38 @@
<!-- 时间选择 -->
<div
v-else-if="listItem.type === 4"
@click="openTimeSelect(listItem.title, listItem.code, index, listIndex, listItem.value)"
@click="openTimeSelect(listItem.content, listItem.code, listIndex, listItem.answer[0])"
class="flex items-center"
>
<span class="mr-3" v-if="listItem.value">
{{ $moment(+listItem.value).format('YYYY-MM-DD HH:mm') }}
{{ $moment(+listItem.answer[0]).format('YYYY-MM-DD HH:mm') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<!-- 日期选择 -->
<div
v-else-if="listItem.type === 41"
@click="openTimeSelect1(listItem.content, listItem.code, listIndex, listItem.answer[0])"
class="flex items-center"
>
<span class="mr-3" v-if="listItem.answer[0]">
{{ $moment(+listItem.answer[0]).format('YYYY-MM-DD') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<!-- <img src="@/static/icon/time.png" style="height: 20px" /> -->
<u-icon name="clock" color="#2979ff" size="28"></u-icon>
<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)"
@click="openDropDown(listItem.content, listItem.optionList, listItem.code, listIndex, listItem.answer[0])"
>
<span style="margin-right: 10px" v-if="listItem.value">{{ listItem.value }}</span>
<span style="margin-right: 10px" v-else>请选择</span>
<span style="margin-right: 10px;color: #bbb" v-if="listItem.answer.length">{{ listItem.answer[0] }}</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="#2979ff" size="28"></u-icon>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<!-- 带有最大最小值限制的输入框 -->
<div v-else-if="listItem.type === 7" class="flex items-center">
@ -319,14 +347,14 @@
</div>
<span v-if="listItem.beforeUnit">{{ listItem.beforeUnit }}</span>
<u-input
:border="true"
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)"
@blur="inputNumBlur($event, listItem.code, listItem.min, listItem.max, index, listIndex)"
/>
<span v-if="listItem.unit">{{ listItem.unit }}</span>
</div>
@ -335,14 +363,14 @@
:class="{ 'w-full': !listItem.title }"
v-else-if="listItem.type === 71"
:value="listItem.value"
class="flex-1"
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"
style="height: 40px;line-height: 40px"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
<u-input
@ -361,16 +389,17 @@
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)"
@blur="changeScroeNum($event, listItem.min, listItem.max, radioValue.code, index, listIndex, radioIndex)"
/>
<span v-else :style="{ color: listItem.value === radioValue.name ? '#1890ff' : '' }">{{ radioValue.name }}</span>
<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>
<!-- </template> -->
</div>
<u-picker mode="time" v-model="show" :title="title" :params="timeSelectparams" @confirm="chooseTime"></u-picker>
<u-picker mode="time" v-model="dateShow" :title="title" :params="timeSelectparams1" @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>
@ -416,6 +445,7 @@ export default {
timeItemIndex: 0, // index
timeCode: '', // code
show: false, //
dateShow: false, //
ZQTHSJ: null, //
timeSelectparams: {
//
@ -426,6 +456,15 @@ export default {
minute: true,
second: false,
},
timeSelectparams1: {
//
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false,
},
dropTitle: '',
dropList: [],
dropCode: '',
@ -492,7 +531,7 @@ export default {
},
methods: {
changeHeigt() {
this.$emit('getCollaoseHeight', this.testIndex);
// this.$emit('getCollaoseHeight', this.testIndex);
},
/**
* 判断当前 item 是否显示
@ -501,63 +540,20 @@ export default {
* 如果 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) {
itemIsShow(code, isShow) {
if (code && isShow) {
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;
}
// if (item) {
// for (let j = 0; j < item.length; j++) {
// const jtem = item[j];
if (item.code === code && item.answer[0] === isShow) {
return true;
} else if (i === this.test.length - 1) {
return false;
}
// }
// }.
}
} else {
return true;
@ -583,19 +579,17 @@ export default {
* 先获取到 this.test 数组props接收的值不能在当前界面修改,所以用将list的值赋值给了 test ,渲染界面也是用的 test
* 通过 index 修改掉 test 数组后,存储答案给服务端
*/
changeIpt(e, code, index, itemIndex) {
this.Rerender(e, index, itemIndex);
changeIpt(e, code, index) {
console.log('e, code, index: ', e, code, index);
// 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);
}
changeRadio(e, code, index) {
this.Rerender([e], index);
this.setAnswer(code, e);
},
// ,
@ -606,9 +600,9 @@ export default {
this.setAnswer(code, e);
},
// ,test,
Rerender(value, index, itemIndex) {
Rerender(value, index) {
let Arr = [...this.test];
Arr[index][itemIndex].value = value;
Arr[index].answer = [...value];
this.test = [...Arr];
},
//
@ -721,10 +715,9 @@ export default {
this.setAnswer(code, e);
},
//
async openTimeSelect(title, code, index, listIndex, time) {
async openTimeSelect(title, code, listIndex, time) {
this.timeValue = time ? time : 0;
this.title = title;
this.timeIndex = index;
this.timeItemIndex = listIndex;
this.timeCode = code;
this.show = true;
@ -738,34 +731,43 @@ export default {
this.ZQTHSJ = data.record['ZQTH-SJ'] && data.record['ZQTH-SJ'].length ? data.record['ZQTH-SJ'][0] : null;
}
},
//
async openTimeSelect1(title, code, listIndex, time) {
this.timeValue = time ? time : 0;
this.title = title;
this.timeItemIndex = listIndex;
this.timeCode = code;
this.dateShow = true;
},
//
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;
console.log('time: ', 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) {
openDropDown(title, list, code, itemIndex, value) {
console.log('title, list, code, itemIndex, value: ', title, list, code, itemIndex, value);
this.dropTitle = title;
this.dropList = list;
this.dropList = list.map(item=> {return item.optionContent});
this.dropCode = code;
this.dropIndex = index;
this.dropItemIndex = itemIndex;
this.dropIndex = itemIndex;
this.dValue = value;
this.showDrop = true;
},
//
chooseSelector(e) {
this.Rerender(this.dropList[e], this.dropIndex, this.dropItemIndex);
this.Rerender([this.dropList[e]], this.dropIndex);
this.setAnswer(this.dropCode, this.dropList[e]);
},
/**
@ -797,7 +799,8 @@ export default {
this.Rerender(num, index, itemIndex);
},
// ,,/
inputNumBlur(e, code) {
inputNumBlur(e, code, min, max, index, itemIndex) {
this.changeNum(e, min, max, code, index, itemIndex)
this.numIndex = null;
this.numItemIndex = null;
this.exceed = '';
@ -883,6 +886,7 @@ export default {
list: {
handler() {
this.test = [...this.list];
console.log('this.test: ', this.test);
},
deep: true,
},
@ -897,6 +901,7 @@ export default {
},
created() {
this.test = [...this.list];
console.log('this.test: ', this.test);
},
// --
beforeUpdate() {},
@ -911,17 +916,42 @@ export default {
};
</script>
<style>
<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: 40px;
line-height: 40px;
height: 33px;
line-height: 33px;
}
.list-box {
border-radius: 4px;
overflow: hidden;
box-sizing: border-box;
margin: 0;
padding: 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
@ -931,12 +961,11 @@ export default {
position: relative;
}
.list-item {
min-height: 54px;
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
border-bottom: 1px solid #e8e8e8;
margin-top: 8px;
padding: 24rpx 0;
border-bottom: 1px solid #eee;
}
</style>

34
src/components/Test/component/Talk.vue

@ -1,14 +1,15 @@
<template>
<div class="talk" style="margin-top:8px" @click="change">
<div class="talk" @click="change">
<div class="bg-white list-box">
<div class="list-item">
<div>谈话开始时间</div>
<div class="putong-title">谈话开始时间</div>
<div @click="openTimeSelect('talkStart', '谈话开始时间')" class="flex items-center">
<span class="mr-3" v-if="talkStart">
{{ $moment(+talkStart).format('YYYY-MM-DD HH:mm') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="clock" color="#2979ff" size="28"></u-icon>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
<!-- <u-icon name="clock" color="#2979ff" size="28"></u-icon> -->
</div>
</div>
</div>
@ -16,7 +17,6 @@
:head-style="headerStyle"
:item-style="itemStyle"
class="w-full"
style="margin-top:8px"
:bordered="false"
expand-icon-position="right"
ref="collapseView1"
@ -37,13 +37,14 @@
</u-collapse>
<div class="bg-white list-box">
<div class="list-item">
<div>签署知情同意书</div>
<div class="putong-title">签署知情同意书</div>
<div @click="openTimeSelect('ZQTH-SJ', '签署知情同意书')" class="flex items-center">
<span class="mr-3" v-if="ZQTHSJ">
{{ $moment(+ZQTHSJ).format('YYYY-MM-DD HH:mm') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="clock" color="#2979ff" size="28"></u-icon>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
<!-- <u-icon name="clock" color="#2979ff" size="28"></u-icon> -->
</div>
</div>
</div>
@ -51,7 +52,6 @@
:head-style="headerStyle"
:item-style="itemStyle"
class="w-full"
style="margin-top:8px"
:bordered="false"
expand-icon-position="right"
ref="collapseView2"
@ -99,17 +99,18 @@ export default {
minute: true,
second: false,
},
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden;height:300px;',
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden;height:300px;color: #3e3d4d;',
// customStyle: 'background: #fff;font-family: OPPOSans-Bold, OPPOSans;font-weight: bold;color: #3e3d4d;',
headerStyle: {
height: '54px',
lineHeight: '30px',
fontSize: '14px',
padding: '0 16px',
padding: '0 0 0 16px',
/* color: #1890ff; */
color: 'rgba(0, 0, 0, 0.65)',
backgroundColor: '#fff',
},
itemStyle: { marginBottom: '8px' },
itemStyle: { borderBottom: '1px solid #eee' },
}
},
computed: {
@ -236,6 +237,11 @@ export default {
</script>
<style scoped>
.putong-title {
/* font-size: 26rpx;
font-family: OPPOSans-Bold, OPPOSans; */
color: #3e3d4d;
}
.list-box {
border-radius: 4px;
overflow: hidden;
@ -251,12 +257,12 @@ export default {
position: relative;
}
.list-item {
min-height: 54px;
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
border-bottom: 1px solid #e8e8e8;
margin-top: 8px;
padding: 24rpx 0 24rpx 32rpx;
border-bottom: 1px solid #eee;
/* margin-top: 8px; */
}
</style>

140
src/components/Upload/Upload.vue

@ -1,60 +1,71 @@
<template>
<view class="upload">
<!-- <u-icon name="plus" size="24px" class="flex justify-center w-12 h-12 bg-blue-100 rounded-full shadow-md" @click="handleUpload">
<view>
<view class="upload">
<!-- <u-icon name="plus" size="24px" class="flex justify-center w-12 h-12 bg-blue-100 rounded-full shadow-md" @click="handleUpload">
</u-icon> -->
<template v-if="user.phone">
<div
v-if="btnList.length === 1"
class="flex justify-center w-12 h-12 bg-blue-100 rounded-full shadow-md"
style="line-height: 48px"
@click="jumpV(btnList[0].url)"
>
{{ btnList[0].name }}
</div>
<div v-else-if="btnList.length === 2" class="flex h-12 bg-blue-100 rounded-full shadow-md items-center" style="line-height: 48px">
<div class="border-gray-300 min-w-16 border-r-2 border-solid flex justify-center h-4 items-center" @click="jumpV(btnList[0].url)">
{{ btnList[0].name }}
</div>
<div class="flex min-w-16 justify-center" @click="jumpV(btnList[1].url)">{{ btnList[1].name }}</div>
</div>
<div v-else-if="btnList.length > 2" class="flex h-12 bg-blue-100 rounded-full shadow-md items-center" style="line-height: 48px">
<div class="border-gray-300 min-w-16 border-r-2 border-solid flex justify-center h-4 items-center" @click="jumpV(btnList[0].url)">
<template v-if="user.phone">
<div
v-if="btnList.length === 1"
class="flex justify-center w-12 h-12 bg-blue-100 rounded-full shadow-md"
style="line-height: 48px"
@click="jumpV(btnList[0].url)"
>
{{ btnList[0].name }}
</div>
<div class="flex min-w-16 justify-center" @click="isActive = !isActive">
<div class="mr-1">其他</div>
<u-icon
name="arrow-down"
color="#0284c7"
size="28"
type="down"
:style="{ transform: `rotate(${isActive ? -180 : 0}deg)` }"
@click="isActive = !isActive"
style="transition: transform 0.24s; margin-right: 0px"
/>
<div v-else-if="btnList.length === 2" class="flex h-12 bg-blue-100 rounded-full shadow-md items-center" style="line-height: 48px">
<div class="border-gray-300 min-w-16 border-r-2 border-solid flex justify-center h-4 items-center" @click="jumpV(btnList[0].url)">
{{ btnList[0].name }}
</div>
<div class="flex min-w-16 justify-center" @click="jumpV(btnList[1].url)">{{ btnList[1].name }}</div>
</div>
</div>
</template>
<u-button
v-else
open-type="getPhoneNumber"
@getphonenumber="getphonenumber"
:custom-style="customStyle"
shape="square"
size="default"
type="primary"
>
授权
</u-button>
<view :style="{ height: isActive ? '200px' : 0 }" style="transition: all 0.24s" class="role-more-box">
<template v-for="(item, index) in btnList">
<div :class="index === btnList.length - 1 ? '' : 'border-bottom'" class="jump-list-box" v-if="index !== 0" :key="item.url">
{{ item.name }}
<div v-else-if="btnList.length > 2" class="flex h-12 bg-blue-100 rounded-full shadow-md items-center" style="line-height: 48px">
<div class="border-gray-300 min-w-16 border-r-2 border-solid flex justify-center h-4 items-center" @click="jumpV(btnList[0].url)">
{{ btnList[0].name }}
</div>
<div class="flex min-w-16 justify-center" @click="isActive = !isActive">
<div class="mr-1">其他</div>
<u-icon
name="arrow-down"
color="#0284c7"
size="28"
type="down"
:style="{ transform: `rotate(${isActive ? -180 : 0}deg)` }"
@click="isActive = !isActive"
style="transition: transform 0.24s; margin-right: 0px"
/>
</div>
</div>
</template>
<u-button
v-else
open-type="getPhoneNumber"
@getphonenumber="getphonenumber"
:custom-style="customStyle"
shape="square"
size="default"
type="primary"
>
授权
</u-button>
<view :style="{ height: isActive ? '200px' : 0 }" style="transition: all 0.24s" class="role-more-box">
<template v-for="(item, index) in btnList">
<div :class="index === btnList.length - 1 ? '' : 'border-bottom'" class="jump-list-box" v-if="index !== 0" :key="item.url">
{{ item.name }}
</div>
</template>
</view>
<!-- <u-button @click="jump" size="default" type="primary"> 拍照 </u-button> -->
<u-top-tips ref="uTips"></u-top-tips>
</view>
<!-- <u-button @click="jump" size="default" type="primary"> 拍照 </u-button> -->
<u-top-tips ref="uTips"></u-top-tips>
<u-modal
v-model="showPhoneModal"
:content="content"
show-cancel-button
cancel-text="不合并"
confirm-text="合并"
@confirm="bindNowPhone(0)"
@cancel="bindNowPhone(1)"
></u-modal>
</view>
</template>
@ -76,6 +87,9 @@ export default {
},
btnList: [],
isActive: false,
showPhoneModal: false,
content: '当前手机号已被注册,是否合并信息',
phone: '',
};
},
computed: {
@ -113,14 +127,33 @@ export default {
}
}
} catch (error) {
console.error('error: ', error);
console.error('error授权失败: ', error);
this.$refs.uTips.show({
title: '授权失败',
type: 'success',
duration: '3000',
});
if (error.code === 75) {
console.log('data.phone', error.data.phone);
// this.$emit('showModal', error.data.phone);
this.phone = error.data.phone;
this.showPhoneModal = true;
}
}
},
// isMerge:0 , 1
async bindNowPhone(num) {
const params = {
phone: this.phone,
isMerge: num,
};
const data = await this.$u.api.bindNowPhone(params);
this.setUser(data);
this.setToken(data.token);
this.show = false;
},
// wbs
async handleUpload() {
try {
@ -153,6 +186,12 @@ export default {
},
//
async getInfo() {
if (!this.user) {
setTimeout(() => {
this.getInfo();
}, 100);
return;
}
const that = this;
const data = await that.$u.api.getQueryButton({});
this.btnList = data;
@ -182,6 +221,7 @@ export default {
transform: translate3d(0, 50%, 0);
color: $uni-color-primary !important;
}
.role-more-box {
box-shadow: 0 6px 6px rgba(0, 0, 0, 0.15);
overflow: hidden;

110
src/components/Volume/Volume.vue

@ -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>

138
src/components/VolumeProject/VolumeProject.vue

@ -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>

2
src/main.js

@ -21,6 +21,8 @@ import wbs from '@/apis/wbs.js';
// import indexedDB from '@/utils/indexedDB';
// Vue.use(indexedDB);
//#endif
var quarterOfYear = require('dayjs/plugin/quarterOfYear');
dayjs.extend(quarterOfYear);
Vue.config.productionTip = false;
Vue.prototype.$moment = dayjs;

32
src/pages.json

@ -3,6 +3,8 @@
{
"path": "pages/index/index",
"style": {
"navigationBarBackgroundColor": "#4F8BFF",
"navigationBarTextStyle": "white",
"navigationBarText": "暴风眼Typhoneye"
}
},
@ -85,6 +87,36 @@
"style": {
"navigationBarTitleText": "暴风眼详情页"
}
},
{
"path": "pages/BL/BL-zhuce",
"style": {
"navigationBarTitleText": "注册"
}
},
{
"path": "pages/Apply/index",
"style": {
"navigationBarTitleText": "申请加入"
}
},
{
"path": "pages/Statistics/index",
"style": {
"navigationBarTitleText": "数据统计"
}
},
{
"path": "pages/MoreCar/index",
"style": {
"navigationBarTitleText": "查看更多"
}
},
{
"path": "pages/MoreCar/detail",
"style": {
"navigationBarTitleText": "平车"
}
}
],
"globalStyle": {

BIN
src/pages/Apply/img/0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
src/pages/Apply/img/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/pages/Apply/img/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/pages/Apply/img/kefu.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
src/pages/Apply/img/weixin.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

443
src/pages/Apply/index.vue

@ -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>

197
src/pages/BL/BL-zhuce.vue

@ -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>

113
src/pages/BL/mixin.js

@ -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;

302
src/pages/MoreCar/detail.vue

@ -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>

244
src/pages/MoreCar/index.vue

@ -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>

294
src/pages/Statistics/components/Title.vue

@ -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">
&lt;
{{ text }}
&gt;
</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">
&lt;
{{ text }}
&gt;
</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">
&lt;
{{ text }}
&gt;
</div>
</a-month-picker>
<div v-else-if="timeValue === 3" style="color: #4b8aff; text-align: center; padding-left: 8px" @click="showCal = !showCal">
&lt;
{{ text }}
&gt;
</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">
&lt;
{{ text }}
&gt;
</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;
// 235959
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>

104
src/pages/Statistics/index.vue

@ -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>

2
src/pages/camera/camera.vue

@ -24,7 +24,7 @@ import { mapState, mapMutations } from 'vuex';
export default {
components: {},
data: () => ({
srcList: ['http://101.201.226.163/filedeal/uploads/upload/20220118/23f05a3dde9a4323bc95b1b061379cb5.jpeg'],
srcList: ['https://test.tall.wiki/filedeal/uploads/upload/20220118/23f05a3dde9a4323bc95b1b061379cb5.jpeg'],
action: '',
}),
computed: {

16
src/pages/detail-webview/detail-webview.vue

@ -1,13 +1,17 @@
<template>
<web-view :src="src" />
<web-view :src="src" @message="handleMessage" />
</template>
<script>
import { mapGetters } from 'vuex';
export default {
data() {
return { src: '' };
},
computed: mapGetters('user', ['userId']),
onLoad(options) {
const obj = { title: '暴风眼Typhoneye', path: '/pages/index/index' };
uni.showShareMenu(obj);
@ -30,6 +34,16 @@ export default {
onShareAppMessage() {
return { title: '暴风眼Typhoneye', path: '/pages/index/index' };
},
// webview
handleMessage(evt) {
console.log('接收到的消息-evt: ', evt);
console.log('接收到的消息:' + JSON.stringify(evt.detail.data));
if (evt.detail.data[0].action === 'back') {
uni.navigateBack();
uni.reLaunch({ url: `/pages/index/index?u=${this.userId}` });
}
},
},
};
</script>

105
src/pages/establish/establish.vue

@ -1,18 +1,21 @@
<template>
<div class="establish bg-gray-100">
<div class="establish">
<div bordered class="list-box bg-white" v-for="(item, index) in list" :key="index">
<div
class="list-item"
:style="{ 'border-bottom': listIndex === item.length - 1 ? '' : '1px solid #ccc;' }"
v-for="(listItem, listIndex) in item"
:key="listIndex"
>
<div class="list-item" :style="{ 'border-bottom': '1px solid #eee;' }" v-for="(listItem, listIndex) in item" :key="listIndex">
<div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title">
{{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
<!-- <div class="putong-title">{{ listItem.title }}</div>
<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>
<div class="flex-1 flex justify-end">
<u-switch v-if="listItem.type === 1" v-model="codeValue['CJBL-YLMS']" />
<u-upload
v-else-if="listItem.type === 2"
@ -40,15 +43,27 @@
身份证号输入有误!
</div>
</div>
<u-radio-group :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup">
<div @click="clickRadio(listItem.code, radioItem.name)" v-for="radioItem in listItem.listItem" :key="radioItem.id">
<u-radio-group
:value="codeValue[listItem.code]"
v-else-if="listItem.type === 4"
name="radioGroup"
class="w-full"
style="margin-left: 24rpx"
>
<div
@click="clickRadio(listItem.code, radioItem.name)"
v-for="radioItem in listItem.listItem"
:key="radioItem.id"
class="flex justify-between"
style="width: 100%; height: 43px; height: 43px"
>
<div class="shu-title">{{ radioItem.name }}</div>
<u-radio
@change="changeRadio($event, listItem.code)"
:disabled="isDisabled(listItem.code, radioItem.name)"
:key="radioItem.id"
:name="radioItem.id"
>
{{ radioItem.name }}
</u-radio>
</div>
<!-- <u-radio :value="1"> </u-radio> -->
@ -61,19 +76,31 @@
>
<u-radio
@change="changeRadio($event, listItem.code)"
v-for="radioItem in listItem.listItem"
v-for="(radioItem, radioIndex) in listItem.listItem"
:key="radioItem.id"
:name="radioItem.id"
>
{{ radioItem.name }}
<view class="ml-2" :class="{ 'mr-2': radioIndex < listItem.listItem.length - 1 }">
{{ radioItem.name }}
</view>
</u-radio>
</u-radio-group>
</div>
</div>
</div>
</div>
<div class="flex btn-box" v-if="showBtn">
<u-button type="primary" :disabled="isSubmit" id="complete-btn" class="flex-1 btn mr-2" @click="submit"> 完成创建病例 </u-button>
<div class="flex btn-box justify-center" v-if="showBtn">
<u-button
type="primary"
shape="circle"
:disabled="isSubmit"
id="complete-btn"
class="flex-1 btn"
@click="submit"
:custom-style="customStyle"
>
完成创建病例
</u-button>
<!-- <a-button
:disabled="isStartDisabled()"
:class="isStartDisabled() ? '' : 'green-btn'"
@ -92,6 +119,9 @@ import { mapState, mapGetters, mapMutations } from 'vuex';
export default {
components: {},
data: () => ({
customStyle: {
background: 'linear-gradient(136deg, #7BC0FF 0%, #4D88FF 100%)',
},
action: '',
codeValue: {
'CJBL-YLMS': false,
@ -103,6 +133,13 @@ export default {
},
list: [
[{ title: '演练模式', type: 1, isTrue: false }],
[
{
title: '信息填写',
type: -1,
isTrue: false,
},
],
[{ title: '扫描身份证', type: 2, isTrue: false }],
[
{ title: '姓名', type: 3, code: 'CJBL-NAME', isTrue: true },
@ -121,7 +158,7 @@ export default {
{
title: '疑似诊断',
code: 'CJBL-YSBL',
type: 4,
type: -1,
isTrue: false,
},
{
@ -417,6 +454,31 @@ export default {
</script>
<style>
/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;
}
.img-icon {
height: 24px;
width: 24px;
@ -429,8 +491,7 @@ export default {
border-radius: 4px;
overflow: hidden;
box-sizing: border-box;
margin: 0 0 0.75rem 0;
padding: 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
@ -440,10 +501,10 @@ export default {
position: relative;
}
.list-item {
min-height: 54px;
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
padding: 24rpx 0;
}
</style>

534
src/pages/index/index.vue

@ -1,19 +1,102 @@
<template>
<!-- <view class="flex flex-col h-full bg-gray-50" @click="openAuth"> -->
<view class="flex flex-col h-screen bg-gray-50">
<view class="relative" @touchmove="onMove">
<!-- 日历 -->
<Calendar @selected-change="onDateChange" :show-back="true" ref="calendar" @handleFindPoint="handleFindPoint" />
<!-- 上传 导入wbs -->
<Upload @success="onUploadSuccess" @error="onUploadError" />
<!-- #ifdef H5 -->
<!-- #endif -->
</view>
<view class="flex flex-col h-screen">
<scroll-view scroll-y style="height: calc(100vh - 50px)" :show-scrollbar="false">
<img src="@/static/news/top-bg.png" style="width: 100%; height: 268rpx" class="top-bg" alt="" />
<view class="relative" style="padding: 32rpx 16px 0 16px">
<!-- 日历 -->
<!-- <Calendar @selected-change="onDateChange" :show-back="true" ref="calendar" @handleFindPoint="handleFindPoint" /> -->
<u-swiper :list="list" border-radius="16" height="300" @click="gitSwiper"></u-swiper>
<!-- 上传 导入wbs -->
<!-- <Upload @success="onUploadSuccess" @error="onUploadError" /> -->
<!-- #ifdef H5 -->
<!-- #endif -->
</view>
<view class="tongzhi flex items-center">
<view class="tip flex items-center justify-center">绿道通知</view>
<view class="tongzhi-shu mr-2"></view>
<view class="tongzhi-info flex items-center flex-1">
<view class="mr-2">平车001</view>
<view class="mr-2">患者张辉</view>
<view class="mr-2"></view>
<view class="mr-2">34</view>
<view>高血压</view>
</view>
<u-icon name="arrow-right" color="#4f8bff" size="28"></u-icon>
</view>
<Volume />
<VolumeProject />
<view class="flex items-center title-box">
<view class="flex-1 flex items-center">
<view class="title-shu"></view>
<view class="news-title"> 平车 </view>
</view>
<u-button shape="circle" size="mini" @click="moreCar">查看更多</u-button>
</view>
<scroll-view scroll-x style="height: 224rpx">
<view class="flex" style="width: min-content; padding: 24rpx 16rpx 0 32rpx">
<view v-for="item in carList" :key="item.id" class="car-card">
<img src="@/static/news/car.png" class="car-img" alt="" />
<view class="car-name flex items-center">
<view style="font-size: 28rpx; margin-right: 16rpx">{{ item.name }}</view>
<view style="font-size: 24rpx">{{ item.patient }}</view>
</view>
<view class="patient-info flex items-center">
<view class="info-con">{{ item.sex }}</view>
<view class="info-con">{{ item.age }}</view>
<view class="info-con">{{ item.disease }}</view>
</view>
<view class="patient-info flex items-center">
<view class="doctor-con">医生{{ item.doctor }}</view>
<view class="doctor-con">护士{{ item.nurse }}</view>
</view>
<u-button class="car-btn" size="mini" type="success" shape="circle">查看详情</u-button>
</view>
</view>
</scroll-view>
<view class="flex items-center title-box">
<view class="flex-1 flex items-center">
<view class="title-shu"></view>
<view class="news-title"> 新闻中心 </view>
</view>
<u-button shape="circle" size="mini">查看更多</u-button>
</view>
<view class="news-content flex" v-for="(item, index) in newsList" :key="index" @click="jumpDetail(item)">
<img src="@/static/news/news.png" class="news-img" alt="" />
<view class="news-time flex justify-center items-center">
{{ $moment(+item.publishTime).format('YYYY-MM-DD') }}
</view>
<view class="flex-1">
<view class="flex">
<view class="title-tip-1 flex items-center justify-center" v-if="index % 2 === 0">医学</view>
<view class="title-tip-2 flex items-center justify-center" v-else>新闻</view>
<view class="news-title flex-1">
{{ item.title }}
</view>
</view>
<view class="news-intro">
{{
item.intro || '简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介'
}}
</view>
<view class="flex items-center justify-between" style="font-size: 24rpx">
<img src="@/static/news/logo.png" class="news-logo" alt="" />
<view class="pub-name">
{{ item.publishName || '未知' }}
</view>
<!-- <view class="flex-1 flex justify-end">
{{ $moment(+item.publishTime).format('YYYY-MM-DD') }}
</view> -->
</view>
</view>
</view>
</scroll-view>
<!-- 联系客服 -->
<Service />
<!-- 项目列表 -->
<Projects @getProjects="getProjects" class="flex-1 overflow-y-auto" />
<!-- <Projects @getProjects="getProjects" class="flex-1 overflow-y-auto" /> -->
<!-- 全局提示框 -->
<u-top-tips ref="uTips"></u-top-tips>
@ -30,8 +113,33 @@ export default {
mixins: [UserAuthMixin],
data() {
return {
list: [],
calendar: null,
days: [],
newsList: [],
carList: [
{
id: 1,
imgPath: '',
name: '平车001',
patient: '张辉',
sex: '男',
age: '34',
disease: '高血压',
doctor: '李兴',
nurse: '雪梅',
},
{
id: 2,
name: '平车002',
patient: '张辉',
sex: '男',
age: '34',
disease: '高血压',
doctor: '李兴',
nurse: '雪梅',
},
],
};
},
@ -51,15 +159,17 @@ export default {
const that = this;
setTimeout(function () {
that.getProjects();
that.handleFindPoint();
// that.handleFindPoint();
}, 100);
},
},
async created() {
this.getCarouselList();
this.getNotice();
if (!this.token) return;
this.getProjects();
this.handleFindPoint();
// this.handleFindPoint();
},
onReady() {
@ -68,6 +178,98 @@ export default {
methods: {
...mapMutations('project', ['setProjects', 'setDotList']),
moreCar() {
uni.navigateTo({ url: '/pages/MoreCar/index' });
},
gitSwiper(e) {
const data = this.list[e];
if (data.jumpUrl) {
const jumpType = data.jumpType;
if (jumpType === 1) {
uni.navigateTo({ url: `/pages/detail-webview/detail-webview?jumpUrl=${data.jumpUrl}` });
} else if (jumpType === 2) {
uni.downloadFile({
url: data.jumpUrl,
success: function (res) {
var filePath = res.tempFilePath;
uni.openDocument({
filePath: filePath,
showMenu: true,
});
},
});
} else if (jumpType === 3) {
uni.previewImage({
urls: [data.jumpUrl],
longPressActions: {
itemList: ['发送给朋友', '保存图片', '收藏'],
},
});
}
}
},
//
jumpDetail(item) {
// if (item.articleUrl) {
// uni.navigateTo({ url: `/pages/detail-webview/detail-webview?jumpUrl=${item.articleUrl}` });
// }
const data = item;
if (data.articleUrl) {
const jumpType = data.jumpType;
if (jumpType === 1) {
uni.navigateTo({ url: `/pages/detail-webview/detail-webview?jumpUrl=${data.articleUrl}` });
} else if (jumpType === 2) {
uni.downloadFile({
url: data.articleUrl,
success: function (res) {
var filePath = res.tempFilePath;
uni.openDocument({
filePath: filePath,
showMenu: true,
});
},
});
} else if (jumpType === 3) {
uni.previewImage({
urls: [data.articleUrl],
longPressActions: {
itemList: ['发送给朋友', '保存图片', '收藏'],
},
});
}
}
},
async getNotice() {
try {
const param = {
pageNum: 1,
pageSize: 10,
};
const res = await this.$u.api.getNoticeList(param);
console.log('res: ', res);
this.newsList = this.newsList.concat(res.list);
} catch (error) {
console.log('error: ', error);
}
},
//
async getCarouselList() {
try {
const param = {
showPosition: 1,
showType: 0,
};
const res = await this.$u.api.getCarouselShow(param);
console.log('res: ', res);
for (let i = 0; i < res.length; i++) {
res[i].image = res[i].url;
}
this.list = [...res];
} catch (error) {
console.log('error: ', error);
}
},
//
getProjects(start = this.$moment().startOf('day').valueOf(), end = this.$moment().endOf('day').valueOf()) {
@ -81,6 +283,7 @@ export default {
item.show = false;
});
this.setProjects(data);
console.log('data: ', data);
if (data && data[0]) {
// this.openFirstProject(data[0]);
}
@ -96,75 +299,276 @@ export default {
* @param { string } endTime 结束时间
* @param { string } startTime 开始时间
*/
async handleFindPoint(start, end) {
try {
const startTime = start || this.$moment().startOf('month').valueOf();
const endTime = end || this.$moment().endOf('month').valueOf();
const data = await this.$u.api.findRedPoint(startTime, endTime);
this.setDotList(data);
} catch (error) {
console.log('error: ', error);
}
},
// async handleFindPoint(start, end) {
// try {
// const startTime = start || this.$moment().startOf('month').valueOf();
// const endTime = end || this.$moment().endOf('month').valueOf();
// const data = await this.$u.api.findRedPoint(startTime, endTime);
// this.setDotList(data);
// } catch (error) {
// console.log('error: ', error);
// }
// },
//
onDateChange(event) {
const day = this.$moment(event.fullDate);
const start = day.startOf('date').valueOf();
const end = day.endOf('date').valueOf();
this.getProjects(start, end);
},
// onDateChange(event) {
// const day = this.$moment(event.fullDate);
// const start = day.startOf('date').valueOf();
// const end = day.endOf('date').valueOf();
// this.getProjects(start, end);
// },
// /
onMove(event) {
const y = event.changedTouches[0].pageY;
if (y - prevY > 0) {
// weekMode=true weekMode=false
this.calendar.weekMode && (this.calendar.weekMode = false);
} else if (y - prevY < 0) {
// weekMode=false weekMode=true
!this.calendar.weekMode && (this.calendar.weekMode = true);
}
prevY = y;
this.calendar.initDate();
},
// onMove(event) {
// console.log('event: ', event);
// const y = event.changedTouches[0].pageY;
// if (y - prevY > 0) {
// // weekMode=true weekMode=false
// this.calendar.weekMode && (this.calendar.weekMode = false);
// } else if (y - prevY < 0) {
// // weekMode=false weekMode=true
// !this.calendar.weekMode && (this.calendar.weekMode = true);
// }
// prevY = y;
// this.calendar.initDate();
// },
//
onUploadSuccess() {
this.$refs.uTips.show({
title: '导入成功,即将打开新项目',
type: 'success',
duration: '3000',
});
},
// onUploadSuccess() {
// this.$refs.uTips.show({
// title: '',
// type: 'success',
// duration: '3000',
// });
// },
//
onUploadError(error) {
this.$refs.uTips.show({
title: error || '导入失败',
type: 'error',
duration: '6000',
});
},
// onUploadError(error) {
// this.$refs.uTips.show({
// title: error || '',
// type: 'error',
// duration: '6000',
// });
// },
//
openFirstProject(project) {
const { name, id, url } = project;
url && (uni.$t.domain = url);
this.$u.route('pages/project-webview/project-webview', {
u: this.userId,
p: id,
pname: name,
url: encodeURIComponent(url),
});
},
// openFirstProject(project) {
// const { name, id, url } = project;
// url && (uni.$t.domain = url);
// this.$u.route('pages/project-webview/project-webview', {
// u: this.userId,
// p: id,
// pname: name,
// url: encodeURIComponent(url),
// });
// },
},
};
</script>
<style lang="scss" scoped>
.car-btn {
position: absolute;
right: 34rpx;
bottom: 28rpx;
}
.doctor-con {
font-size: 20rpx;
font-weight: 500;
margin-right: 16rpx;
color: #3dc195;
}
.info-con {
padding: 2rpx 12rpx;
color: #3dc195;
font-size: 20rpx;
font-weight: bold;
margin-right: 8rpx;
border-radius: 4rpx;
background: #d2fff0;
border-radius: 2px 2px 2px 2px;
opacity: 1;
}
.patient-info {
margin-left: 24rpx;
margin-top: 20rpx;
}
.car-name {
margin-left: 136rpx;
margin-top: 32rpx;
color: #3dc195;
font-weight: bold;
}
.car-img {
width: 96rpx;
height: 96rpx;
position: absolute;
left: 24rpx;
top: -24rpx;
}
.car-card {
position: relative;
width: 440rpx;
height: 200rpx;
background: #a1e5d9;
border-radius: 12rpx;
margin-right: 16rpx;
opacity: 1;
flex-shrink: 0;
}
.news-logo {
width: 32rpx;
height: 32rpx;
margin-right: 8rpx;
}
.pub-name {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.news-intro {
width: 100%;
height: 72rpx;
margin: 12rpx 0;
background: #f7f7fa;
border-radius: 4px 4px 4px 4px;
padding: 6rpx;
line-height: 31rpx;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #70798c;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.title-tip-2 {
width: 64rpx;
height: 48rpx;
padding: 2px 6px;
background: #cef4ff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #44bfe5;
}
.title-tip-1 {
width: 64rpx;
height: 48rpx;
padding: 2px 6px;
background: #e4edff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #5991ff;
}
.news-title {
font-size: 28rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.news-img {
width: 240rpx;
height: 176rpx;
border-radius: 14rpx;
margin-right: 16rpx;
}
.title-box {
margin: 48rpx 32rpx 36rpx 32rpx;
}
.title-shu {
width: 8px;
height: 20px;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 20px 20px 20px 20px;
opacity: 1;
}
.tongzhi-info {
font-size: 12px;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #a3acbf;
}
.tongzhi-shu {
width: 0px;
height: 12px;
opacity: 0.5;
border: 1px solid #4f8bff;
margin-left: 16rpx;
}
.tip {
width: 120rpx;
height: 44rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 4px 4px 4px 4px;
opacity: 1;
font-size: 12px;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #f6f6f9;
}
.tongzhi {
margin: 16px;
width: calc(750rpx - 32px);
height: 68rpx;
padding: 12rpx 24rpx;
background: #e4edff;
box-shadow: 0px 2px 8px 0px rgba(39, 59, 97, 0.08);
border-radius: 4px 4px 4px 4px;
opacity: 1;
}
.top-bg {
position: absolute;
top: 0;
z-index: 0;
}
page {
height: 100%;
overflow: hidden;
}
.news-title {
color: #3e3d4d;
font-weight: bold;
font-size: 36rpx;
margin-left: 8px;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
}
.news-content {
width: calc(100% - 64rpx);
font-size: 28rpx;
margin: 0 32rpx 48rpx 32rpx;
position: relative;
}
.news-time {
position: absolute;
left: 0;
width: 180rpx;
left: 30rpx;
border-radius: 12rpx;
background: #fff;
text-align: center;
bottom: 25%;
font-size: 20rpx;
height: 24rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #70798c;
}
</style>

71
src/pages/info/info.vue

@ -1,16 +1,23 @@
<template>
<div class="info">
<div class="info" style="padding-top: 42px">
<Demonstration />
<div bordered class="list-box bg-white mb-2" v-for="(item, index) in list" :key="index">
<template v-for="(listItem, listIndex) in item">
<div class="list-item" :key="listIndex" v-if="getRadioValue(listItem.Fcode) === listItem.isShow">
<div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center">
{{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<view v-if="listItem.title">
<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>
</view>
<div :style="{ marginRight: listItem.type === 2 ? '-24rpx' : '0' }">
<u-input
:border="true"
input-align="right"
:clearable="false"
:value="JBXXZYH"
v-if="listItem.type === 1"
@ -36,7 +43,7 @@
{{ getTime(listItem.code) }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="clock" color="#2979ff" size="28"></u-icon>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<div
v-else-if="listItem.type === 4"
@ -44,8 +51,8 @@
class="flex items-center"
@click="openDropDown(listItem.title, listItem.itemList, listItem.dropType, getValue(listItem.code))"
>
<span style="margin-right: 10px">{{ getValue(listItem.code) ? getValue(listItem.code) : '请选择' }}</span>
<u-icon name="arrow-right" color="#2979ff" size="28"></u-icon>
<span style="margin-right: 10px; color: #bbb">{{ getValue(listItem.code) ? getValue(listItem.code) : '请选择' }}</span>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
</div>
</div>
@ -59,9 +66,10 @@
<script>
import { mapState } from 'vuex';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
components: {},
components: { Demonstration },
data: () => ({
timeSelectparams: {
//
@ -73,17 +81,20 @@ export default {
second: false,
},
list: [
[{ title: '住院号', type: 1, code: 'JBXX-ZYH' }],
[
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '住院号', type: 1, code: 'JBXX-ZYH' },
{ title: '发病时间', type: 2, itemList: ['已知', '未知', '醒后卒中'], code: 'JBXX-FBSJ' },
{ title: '发病时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '已知', code: 'JBXX-FBTime' },
{ title: '最后正常时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '醒后卒中', code: 'JBXX-ZHZC' },
],
[
{ title: '是否院内卒中', type: 2, itemList: ['是', '否'], code: 'JBXX-YZCZ' },
{ title: '到院时间', type: 3, Fcode: 'JBXX-YZCZ', isShow: '否', code: 'JBXX-DYSJ' },
],
[
{ title: '办理住院手续时间', type: 3, code: 'JBXX-ZYSJ' },
{ title: '入院途径', type: 4, code: 'JBXX-RYTJ', dropType: 'one', itemList: ['急诊', '门诊', '其他医疗机构转入', '其他'] },
{
@ -93,8 +104,8 @@ export default {
dropType: 'two',
itemList: ['本院急救车', '当地120', '外院转院-网络协作医院', '外院转院-非网络协作医院', '自行来院'],
},
{ title: '卒中团队到场时间', type: 3, code: 'JBXX-TDDCSJ' },
],
[{ title: '卒中团队到场时间', type: 3, code: 'JBXX-TDDCSJ' }],
],
JBXXZYH: null,
JBXXFBSJ: null,
@ -325,12 +336,33 @@ export default {
</script>
<style>
.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;
}
.list-box {
border-radius: 4px;
overflow: hidden;
box-sizing: border-box;
margin: 0 0 0.75rem 0;
padding: 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
@ -340,10 +372,11 @@ export default {
position: relative;
}
.list-item {
min-height: 54px;
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
padding: 24rpx 0;
border-bottom: 1px solid #eee;
}
</style>

411
src/pages/inner/inner-old.vue

@ -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();
// codetitle
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;
}
}
},
//
// codeListcode 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>

110
src/pages/inner/inner.vue

@ -1,43 +1,36 @@
<template>
<div class="inner">
<!-- :style="{ paddingTop: detailValueType === 1 ? '28px' : '' }" -->
<div class="w-full" v-for="(item, index) in testList" :key="index">
<template v-if="item.testType === 1">
<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="testList"
/>
<!-- </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>
<Test
:testIndex="index"
@getCollaoseHeight="getCollaoseHeight"
:can-change="false"
:can-change="true"
:answer-list="answerList"
v-if="type"
class="w-full"
:list="item.content"
/>
</template>
<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>
</div>
</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">
@ -58,9 +51,10 @@
import { mapState } from 'vuex';
import Mixin from './mixin';
import cloneDeep from 'lodash/cloneDeep';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
components: {},
components: { Demonstration },
mixins: [Mixin],
data: () => ({
testList: [],
@ -90,6 +84,16 @@ export default {
openOcr() {
uni.navigateTo({ url: '/pages/camera/camera' });
},
async getAllTest() {
try {
const param = { parentCode: this.type };
const res = await this.$u.api.queryQuestionCode(param);
console.log('res: ', res);
this.testList = [...res];
} catch (error) {
console.log('error: ', error);
}
},
// code,
async getAnswer() {
const codeList = [];
@ -312,18 +316,8 @@ export default {
});
}
this.type = this.InputCode;
// 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();
this.getAllTest();
// this.getAnswer();
},
// --
onReady() {},
@ -346,7 +340,30 @@ export default {
};
</script>
<style>
<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;
}
@ -356,6 +373,7 @@ export default {
padding-left: 30rpx;
}
.ocr-open-box {
z-index: 11;
position: fixed;
right: 0;
top: 40%;
@ -371,7 +389,7 @@ export default {
box-shadow: 0 0 4px #1890ff;
}
.inner {
background-color: #ededed;
/* background-color: #ededed; */
min-height: 100vh;
}
</style>

22
src/pages/inner/mixin.js

@ -107,6 +107,11 @@ const mixin = {
testType: 1,
content: [
[
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '身高 cm', grade: 2, type: 7, min: 0, max: 350, code: 'RYPG-height', value: this.codeValue.RYPG['RYPG-height'] },
{ title: '体重 kg', grade: 2, type: 7, min: 0, max: 500, code: 'RYPG-weight', value: this.codeValue.RYPG['RYPG-weight'] },
{ title: 'BMI', grade: 2, type: 0, code: 'JBXX-BMI', value: null },
@ -192,7 +197,7 @@ const mixin = {
},
{
title: '',
type: 22,
type: 21,
itemList: ['1级', '2级', '3级', '4级', '未评级'],
code: 'RYPG-test',
Fcode: 'RYPG-swallowingFunction',
@ -229,8 +234,13 @@ const mixin = {
[
{
title: '初步诊断',
grade: 2,
type: -1,
isTrue: false,
},
// {
// title: '初步诊断',
// grade: 2,
// },
{
title: '',
grade: 2,
@ -464,7 +474,7 @@ const mixin = {
[
{
title: '未给予血管内治疗的原因',
type: 22,
type: 21,
Fcode: 'ZLFA-XGZL',
isShow: '否',
},
@ -560,7 +570,7 @@ const mixin = {
code: 'JRZL-SQ-TICI',
Fcode: 'ZLFA-XGZL',
isShow: '是',
type: 22,
type: 21,
itemList: ['0级', '1级', '2a级', '2b级', '3级', '未评'],
value: this.codeValue.SSXG['JRZL-SQ-TICI'],
},
@ -627,7 +637,7 @@ const mixin = {
},
{
title: 'TICI分级',
type: 22,
type: 21,
Fcode: 'ZLFA-XGZL',
isShow: '是',
},
@ -636,7 +646,7 @@ const mixin = {
code: 'JRZL-SH-TICI',
Fcode: 'ZLFA-XGZL',
isShow: '是',
type: 22,
type: 21,
itemList: ['0级', '1级', '2a级', '2b级', '3级', '未评'],
value: this.codeValue.SSXG['JRZL-SH-TICI'],
},

5
src/pages/outside/outside.vue

@ -1,5 +1,6 @@
<template>
<div class="w-full flex flex-col flex-wrap" style="padding-bottom: 20px">
<div class="w-full flex flex-col flex-wrap" style="padding-bottom: 20px; padding-top: 42px">
<Demonstration />
<div class="w-full" v-for="(item, index) in testList" :key="index">
<template v-if="item.testType === 1">
<Test
@ -58,10 +59,12 @@
import { mapState } from 'vuex';
import Mixin from './mixin';
import cloneDeep from 'lodash/cloneDeep';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
name: 'outside',
mixins: [Mixin],
components: { Demonstration },
data() {
return {
type: 'RYPG', // RYPG(),ZYJC(),SSXG(),CYJL(),TSCX()

91
src/pages/patient/patient.vue

@ -1,18 +1,25 @@
<template>
<div class="establish bg-gray-100">
<div class="establish" style="padding-top: 42px">
<Demonstration />
<div bordered class="list-box bg-white" v-for="(item, index) in list" :key="index">
<div
class="list-item"
:style="{ 'border-bottom': listIndex === item.length - 1 ? '' : '1px solid #ccc;' }"
:style="{ 'border-bottom': listIndex === item.length - 1 ? '' : '1px solid #eee;' }"
v-for="(listItem, listIndex) in item"
:key="listIndex"
>
<div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title">
{{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<div>
<view v-if="listItem.title">
<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>
</view>
<div class="flex-1 flex justify-end">
<!-- <u-switch v-if="listItem.type === 1" v-model="codeValue['CJBL-YLMS']" /> -->
<u-upload
v-if="listItem.type === 2"
@ -37,15 +44,23 @@
身份证号输入有误!
</div>
</div>
<u-radio-group :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup">
<div @click="clickRadio(listItem.code, radioItem.name)" v-for="radioItem in listItem.listItem" :key="radioItem.id">
<u-radio-group class="w-full" :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup">
<div
class="w-full flex justify-between items-center"
style="height: 78rpx"
@click="clickRadio(listItem.code, radioItem.name)"
v-for="radioItem in listItem.listItem"
:key="radioItem.id"
>
<view class="flex-1 putong-title">
{{ radioItem.name }}
</view>
<u-radio
@change="changeRadio($event, listItem.code)"
:disabled="isDisabled(listItem.code, radioItem.name)"
:key="radioItem.id"
:name="radioItem.id"
>
{{ radioItem.name }}
</u-radio>
</div>
</u-radio-group>
@ -57,11 +72,11 @@
>
<u-radio
@change="changeRadio($event, listItem.code)"
v-for="radioItem in listItem.listItem"
v-for="(radioItem, radioIndex) in listItem.listItem"
:key="radioItem.id"
:name="radioItem.id"
>
{{ radioItem.name }}
<view class="ml-2" :class="radioIndex === listItem.listItem.length - 1 ? '' : 'mr-2'">{{ radioItem.name }}</view>
</u-radio>
</u-radio-group>
</div>
@ -74,9 +89,10 @@
<script>
import { mapState, mapGetters, mapMutations } from 'vuex';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
components: {},
components: { Demonstration },
data: () => ({
action: '',
codeValue: {
@ -89,8 +105,13 @@ export default {
},
list: [
// [{ title: '', type: 1, isTrue: false }],
[{ title: '扫描身份证', type: 2, isTrue: false }],
[
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '扫描身份证', type: 2, isTrue: false },
{ title: '姓名', type: 3, code: 'CJBL-NAME', isTrue: true },
{
title: '性别',
@ -107,7 +128,7 @@ export default {
{
title: '疑似诊断',
code: 'CJBL-YSBL',
type: 4,
type: -1,
isTrue: false,
},
{
@ -131,10 +152,11 @@ export default {
active: 0,
role: '',
isFit: true, //
isWatch: false,
}),
computed: {
...mapGetters('project', ['projectId']),
...mapState('carbasics', ['globalData', 'firstAidId']),
...mapState('carbasics', ['globalData', 'firstAidId', 'detailValueType']),
},
onLoad(options) {
@ -159,6 +181,9 @@ export default {
'CJBL-idCard': data.idcard,
'CJBL-YSBL': data.suspected || 'AS急性脑卒中',
};
setTimeout(() => {
this.isWatch = true;
}, 100);
}
} catch (error) {
console.log('error: ', error);
@ -344,6 +369,7 @@ export default {
codeValue: {
handler(val) {
console.log('val: ', val);
if (!this.isWatch) return;
this.iptBlur(val['CJBL-idCard'], 'CJBL-idCard');
},
deep: true,
@ -370,7 +396,32 @@ export default {
};
</script>
<style>
<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;
}
.img-icon {
height: 24px;
width: 24px;
@ -384,7 +435,7 @@ export default {
overflow: hidden;
box-sizing: border-box;
margin: 0 0 0.75rem 0;
padding: 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
@ -394,10 +445,10 @@ export default {
position: relative;
}
.list-item {
min-height: 54px;
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
padding: 24rpx 0;
}
</style>

190
src/pages/patientLine/patientLine.vue

@ -1,30 +1,49 @@
<template>
<div class="patient-line">
<div>
<view class="info flex justify-between">
<view class="flex items-center">
<view class="shu"></view>
<view class="title">患者信息</view>
</view>
<view class="flex items-center patient-info">
<view>{{ patient.name || '' }}</view>
<view class="ml-2">{{ patient.gender === 0 ? '女' : patient.gender === 1 ? '男' : '-' }}</view>
<view class="ml-2">{{ patient.age || '-' }}</view>
</view>
</view>
<template v-if="showLine">
<div v-for="(item, index) in dataList" :key="index" class="flex flex-row item-box mb-2">
<div class="flex flex-col items-center mr-1" style="width: 36px">
<img src="./png/播放.png" alt="" style="width: 36px; height: 36px" />
<div class="mt-1 flex-1" style="border-right: 2px solid rgb(209, 213, 219)"></div>
<div v-if="index === innerList.length - 1" class="end-ric mt-2"></div>
</div>
<div class="flex-1 flex-col">
<div class="w-full time-box flex items-center" style="height: 34px; padding-left: 12px">
<!-- {{ $moment(time).format('MM月DD日') }} -->
{{ item.time }}
</div>
<div class="flex mt-2" style="height: 50px" @click="jump(item.code, item.path, item.name)">
<div class="name-box flex items-center time-box" style="padding-left: 16px; position: relative">
{{ item.name }}
<u-icon name="arrow-right" size="28" color="#303133" style="position: absolute; right: 16px" />
<div
v-for="(item, index) in dataList"
:key="index"
class="flex flex-row item-box mb-2"
:class="index < 2 ? (index === 1 ? 'red' : 'green') : 'gray'"
@click="jump(item.code, item.content)"
>
<view class="mulu-title"> 目录{{ getText(index + 1) }} </view>
<div class="flex flex-1 flex-col">
<div class="flex">
<div class="name-box flex justify-between items-center">
<view class="mulu-title" style="font-size: 32rpx">{{ item.content }}</view>
</div>
</div>
<!-- <view class="flex">
<view
class="flex flex-nowrap items-center justify-center status-con mt-2 mr-1"
v-for="(tag, tagInd) in item.tags"
:key="tagInd"
:class="index < 2 ? (index === 0 ? 'color-1' : 'color-2') : 'color-3'"
>
<view>{{ tag }}</view>
</view>
</view> -->
</div>
<u-icon name="arrow-right" size="28" color="#70798C" />
</div>
</template>
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { mapState, mapMutations } from 'vuex';
export default {
components: {},
data: () => ({
@ -36,30 +55,35 @@ export default {
time: '',
code: '',
path: '/pages/patient/patient',
tags: ['姓名', '性别', '民族', '身份证'],
},
{
name: '基本信息',
time: '',
code: '',
path: '/pages/info/info',
tags: ['住院号', '时间', '入院途径', '来源方式'],
},
{
name: '入院评估',
time: '',
code: 'RYPG',
path: '/pages/inner/inner',
tags: ['身高', '体重', 'BMI', '脉搏'],
},
{
name: '主要治疗操作',
time: '',
code: 'SSXG',
path: '/pages/inner/inner',
tags: ['静脉溶栓', '血管内开通治疗'],
},
{
name: '出院记录',
time: '',
code: 'CYJL',
path: '/pages/inner/inner',
tags: ['TOAST分型', '急救后NIHSS评分', '住院药物治疗'],
},
],
outSideList: [
@ -103,8 +127,10 @@ export default {
],
time: 0,
caseType: 0,
patient: {},
}),
computed: {
...mapState('carbasics', ['firstAidId']),
dataList() {
return this.caseType === 0 ? this.innerList : this.outSideList;
},
@ -118,13 +144,67 @@ export default {
for (let i = 0; i < this.outSideList.length; i++) {
this.outSideList[i].time = time;
}
this.getData();
this.showLine = true;
this.getLine();
},
methods: {
...mapMutations('carbasics', ['setInputCode']),
jump(code, path, name) {
async getLine() {
try {
const res = await this.$u.api.queryParentCode();
console.log('res: ', res);
this.innerList = [...res];
} catch (error) {
console.log('error: ', error);
}
},
//
async getData() {
try {
const param = { firstAidId: this.firstAidId };
const data = await this.$u.api.getPatient(param);
console.log('data: ', data);
this.patient = { ...data };
} catch (error) {
console.log('error: ', error);
}
},
jump(code, name) {
this.setInputCode(code ? code : 'RYPG');
uni.navigateTo({ url: `${path}?name=${name}` });
uni.navigateTo({ url: `/pages/inner/inner?name=${name}` });
},
getText(index) {
switch (index) {
case 1:
return '一';
case 2:
return '二';
case 3:
return '三';
case 4:
return '四';
case 5:
return '五';
case 6:
return '六';
case 7:
return '七';
case 8:
return '八';
case 9:
return '九';
case 10:
return '十';
case 11:
return '十一';
case 12:
return '十二';
case 13:
return '十三';
case 14:
return '十四';
}
},
},
watch: {},
@ -151,8 +231,56 @@ export default {
</script>
<style>
.patient-line {
margin-top: 16px;
.patient-info {
font-size: 32rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #3e3d4d;
}
.title {
font-size: 36rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
margin-right: 16rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
}
.info {
padding: 32rpx;
}
.color-1 {
color: #3dc195;
background: #d2fff0;
}
.color-2 {
background: #ffece4;
color: #ff8833;
}
.color-3 {
background: #e4edff;
color: #5990ff;
}
.status-con {
padding: 2rpx 6rpx;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
}
.mulu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #70798c;
margin-right: 32rpx;
margin-top: -2px;
}
.end-ric {
height: 6px;
@ -162,25 +290,27 @@ export default {
}
.name-box {
background-color: #fff;
height: 50px;
width: 100%;
border-radius: 10px;
box-shadow: 0px 5px 15px 5px rgba(0, 0, 0, 0.1);
}
.time-box {
font-size: 14px;
font-weight: 500;
color: #303133;
color: #a3acbf;
}
.red {
border: 1px solid red;
border-left: 6rpx solid #ff8833;
}
.green {
border: 1px solid green;
border-left: 6rpx solid #1bb299;
}
.gray {
border-left: 6rpx solid #a3acbf;
}
.item-box {
/* height: 110px; */
width: 100%;
padding: 0 16px;
margin: 0 32rpx 32rpx 32rpx;
padding: 24rpx;
box-shadow: 0px 2px 12rpx 1rpx #eeeeee;
border-radius: 12rpx;
background: #fff;
}
</style>

23
src/pages/phone-bind/phone-bind.vue

@ -27,6 +27,7 @@
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import UserAuthMixin from '@/mixins/userAuth';
export default {
@ -75,11 +76,14 @@ export default {
errorType: ['message'],
};
},
computed: {
...mapState('user', ['user']),
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
...mapMutations('user', ['setToken', 'setUser']),
submit() {
this.$refs.uForm.validate(async valid => {
if (valid) {
@ -87,12 +91,17 @@ export default {
const { phone, code } = this.model;
const data = await this.$u.api.phoneBind(phone, code);
console.log('data: ', data);
this.$refs.uTips.show({
title: '手机号绑定成功, 即将跳转上一页',
type: 'success',
duration: '3000',
});
setTimeout(() => uni.navigateBack(-2), 2000);
if (data && data.token) {
this.setUser(data);
this.setToken(data.token);
console.log(this.user);
this.$refs.uTips.show({
title: '手机号绑定成功, 即将跳转上一页',
type: 'success',
duration: '3000',
});
setTimeout(() => uni.navigateBack(-2), 2000);
}
} catch (error) {
this.$refs.uTips.show({
title: error.msg || '手机号绑定失败',

44
src/pages/task-page/task-page.vue

@ -1,19 +1,25 @@
<template>
<view :style="{ height: height }" class="flex flex-col overflow-hidden u-font-14">
<view class="container flex flex-col flex-1 mx-auto overflow-hidden bg-gray-100">
<view class="container flex flex-col flex-1 mx-auto overflow-hidden">
<!-- 角色栏 -->
<Roles style="z-index: 100" />
<!-- <Roles style="z-index: 100" /> -->
<!-- <NewRole /> -->
<!-- 日常任务面板 -->
<Globals v-if="globals.length" />
<!-- <Globals v-if="globals.length" /> -->
<!-- 任务详情 -->
<div v-if="globalData && permanents.length" class="flex flex-1">
<PatientList ref="PatientList" v-if="showPage === 'function'" class="flex flex-1" />
<div v-else class="flex flex-1 items-center justify-center flex-col">
<div>详情内容在详情页内查看</div>
<div class="text-blue-500" @click="jumpDetail">点击此处跳转</div>
</div>
</div>
<view v-if="globalData && permanents.length" class="flex flex-1" style="overflow-y: auto">
<PatientList ref="PatientList" class="flex flex-1" />
<!-- <PatientList ref="PatientList" v-if="showPage === 'function'" class="flex flex-1" />
<Share v-else-if="showPage === 'share'" class="flex flex-1" />
<StatisticsLists v-else-if="showPage === 'statistics-lists'" class="flex flex-1" />
<StatisticsCards v-else-if="showPage === 'statistics-cards'" class="flex flex-1" />
<view v-else class="flex flex-1 items-center justify-center flex-col">
<view>详情内容在详情页内查看</view>
<view class="text-blue-500" @click="jumpDetail">点击此处跳转</view>
</view> -->
</view>
</view>
<u-modal v-model="showModel" :content="content" @confirm="confirm"></u-modal>
</view>
</template>
@ -32,6 +38,8 @@ export default {
showStatus: 0,
showPage: '',
isBack: false,
showModel: false,
content: '当前不是神内医生,请前往首页申请',
};
},
@ -84,8 +92,9 @@ export default {
},
showPage(val) {
if (val !== 'function') {
let jumpUrl = `/pages/detail-webview/detail-webview?jumpUrl=${this.urlData.url}&projectId=${this.projectId}&roleId=${this.roleId}&userId=${this.userId}`;
if (val !== 'function' && val !== 'share' && val !== 'statistics-lists' && val !== 'statistics-cards') {
let url = `/pages/detail-webview/detail-webview?jumpUrl=`;
let jumpUrl = `${url}${this.urlData.url}&projectId=${this.projectId}&roleId=${this.roleId}&userId=${this.userId}`;
for (let key in this.urlData) {
if (key !== 'url') {
jumpUrl += `&${key}=${this.urlData[key]}`;
@ -113,10 +122,13 @@ export default {
...mapMutations('user', ['setToken']),
...mapMutations('project', ['setProject', 'setProjectName', 'setOrganData']),
...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']),
confirm() {
uni.navigateBack();
},
//
jumpDetail() {
let jumpUrl = `/pages/detail-webview/detail-webview?jumpUrl=${this.urlData.url}&projectId=${this.projectId}&roleId=${this.roleId}&userId=${this.userId}`;
let url = `/pages/detail-webview/detail-webview?jumpUrl=`;
let jumpUrl = `${url}${this.urlData.url}&projectId=${this.projectId}&roleId=${this.roleId}&userId=${this.userId}`;
for (let key in this.urlData) {
if (key !== 'url') {
jumpUrl += `&${key}=${this.urlData[key]}`;
@ -277,6 +289,10 @@ export default {
*/
getRoles(params) {
this.$t.$q.findShowRole(params, (err, data) => {
if (data.invisibleList && !data.invisibleList.length && !data.visibleList.length) {
this.showModel = true;
return;
}
if (err) {
console.error('err: ', err || '获取角色信息失败');
} else {

BIN
src/static/image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/static/news/Frame 34@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/static/news/car.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/static/news/logo-car.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
src/static/news/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

BIN
src/static/news/logo2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/static/news/logo2xg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/static/news/news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
src/static/news/role.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

BIN
src/static/news/top-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
src/static/news/占.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/static/news/电.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/static/news/离.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/static/news/绿.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/static/news/闲.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/static/图1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
src/static/图2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

BIN
src/static/图3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
src/static/指针.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

8
src/store/carbasics/mutations.js

@ -53,6 +53,14 @@ const mutations = {
setBasicData(state, data) {
state.basicData = data;
},
/**
* 存储当前查看的患者信息
* @param { object } state
* @param { object } data
*/
setPatientInfo(state, data) {
state.patientInfo = { ...data };
},
};
export default mutations;

1
src/store/carbasics/state.js

@ -6,6 +6,7 @@ const state = {
InputCode: 'RYPG', // 当前试题录入的类型
isRefresh: 0, // 是否刷新当前试题界面 监听数值,每次改变一次刷新一次
basicData: null, // ocr识别到的试题及答案的数据
patientInfo: {},
};
export default state;

Loading…
Cancel
Save