ylyx-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/README.md +184 -0
  2. package/bin/ylyx.js +95 -0
  3. package/lib/generator.js +192 -0
  4. package/lib/index.js +113 -0
  5. package/lib/interactive.js +87 -0
  6. package/lib/remote.js +179 -0
  7. package/lib/template.js +174 -0
  8. package/lib/utils.js +134 -0
  9. package/package.json +56 -0
  10. package/templates/react-app/files/README.md +23 -0
  11. package/templates/react-app/files/package.json +29 -0
  12. package/templates/react-app/files/public/index.html +11 -0
  13. package/templates/react-app/files/src/App.css +15 -0
  14. package/templates/react-app/files/src/App.js +15 -0
  15. package/templates/react-app/files/src/index.css +10 -0
  16. package/templates/react-app/files/src/index.js +11 -0
  17. package/templates/react-app/template.json +12 -0
  18. package/templates/react-component/files/Component.module.css +5 -0
  19. package/templates/react-component/files/Component.tsx +31 -0
  20. package/templates/react-component/files/index.ts +2 -0
  21. package/templates/react-component/template.json +49 -0
  22. package/templates/vue-app/files/.editorconfig +14 -0
  23. package/templates/vue-app/files/.env.development +21 -0
  24. package/templates/vue-app/files/.env.production +18 -0
  25. package/templates/vue-app/files/.eslintignore +5 -0
  26. package/templates/vue-app/files/.eslintrc.js +267 -0
  27. package/templates/vue-app/files/.prettierignore +12 -0
  28. package/templates/vue-app/files/.travis.yml +5 -0
  29. package/templates/vue-app/files/.vscode/extensions.json +7 -0
  30. package/templates/vue-app/files/.vscode/settings.json +39 -0
  31. package/templates/vue-app/files/LICENSE +191 -0
  32. package/templates/vue-app/files/README.md +87 -0
  33. package/templates/vue-app/files/babel.config.js +11 -0
  34. package/templates/vue-app/files/jest.config.js +24 -0
  35. package/templates/vue-app/files/package.json +136 -0
  36. package/templates/vue-app/files/plopfile.js +7 -0
  37. package/templates/vue-app/files/postcss.config.js +5 -0
  38. package/templates/vue-app/files/prettier.config.js +36 -0
  39. package/templates/vue-app/files/public/default.js +26 -0
  40. package/templates/vue-app/files/public/favicon.ico +0 -0
  41. package/templates/vue-app/files/public/index.html +26 -0
  42. package/templates/vue-app/files/src/App.vue +54 -0
  43. package/templates/vue-app/files/src/api/bigDataV/index.js +198 -0
  44. package/templates/vue-app/files/src/api/data.js +42 -0
  45. package/templates/vue-app/files/src/api/dataArchive/index.js +186 -0
  46. package/templates/vue-app/files/src/api/generator/genConfig.js +16 -0
  47. package/templates/vue-app/files/src/api/generator/generator.js +32 -0
  48. package/templates/vue-app/files/src/api/indexManagement/index.js +39 -0
  49. package/templates/vue-app/files/src/api/institutionMonitor/index.js +396 -0
  50. package/templates/vue-app/files/src/api/institutionSet/index.js +120 -0
  51. package/templates/vue-app/files/src/api/login.js +44 -0
  52. package/templates/vue-app/files/src/api/selfStatistics/index.js +50 -0
  53. package/templates/vue-app/files/src/api/system/code.js +15 -0
  54. package/templates/vue-app/files/src/api/system/dict.js +34 -0
  55. package/templates/vue-app/files/src/api/system/dictDetail.js +52 -0
  56. package/templates/vue-app/files/src/api/system/equipment.js +35 -0
  57. package/templates/vue-app/files/src/api/system/examManage.js +49 -0
  58. package/templates/vue-app/files/src/api/system/examProject.js +48 -0
  59. package/templates/vue-app/files/src/api/system/hosModel.js +35 -0
  60. package/templates/vue-app/files/src/api/system/hospital.js +88 -0
  61. package/templates/vue-app/files/src/api/system/job.js +40 -0
  62. package/templates/vue-app/files/src/api/system/menu.js +67 -0
  63. package/templates/vue-app/files/src/api/system/model.js +42 -0
  64. package/templates/vue-app/files/src/api/system/risConfig.js +9 -0
  65. package/templates/vue-app/files/src/api/system/role.js +64 -0
  66. package/templates/vue-app/files/src/api/system/sysSet.js +19 -0
  67. package/templates/vue-app/files/src/api/system/timing.js +41 -0
  68. package/templates/vue-app/files/src/api/system/user.js +121 -0
  69. package/templates/vue-app/files/src/api/tools/alipay.js +25 -0
  70. package/templates/vue-app/files/src/api/tools/email.js +24 -0
  71. package/templates/vue-app/files/src/api/tools/localStorage.js +27 -0
  72. package/templates/vue-app/files/src/api/tools/qiniu.js +40 -0
  73. package/templates/vue-app/files/src/assets/401_images/401.gif +0 -0
  74. package/templates/vue-app/files/src/assets/404_images/404.png +0 -0
  75. package/templates/vue-app/files/src/assets/404_images/404_cloud.png +0 -0
  76. package/templates/vue-app/files/src/assets/css/font-awesome.css +2342 -0
  77. package/templates/vue-app/files/src/assets/css/font-awesome.min.css +2336 -0
  78. package/templates/vue-app/files/src/assets/fonts/FontAwesome.otf +0 -0
  79. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.eot +0 -0
  80. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.svg +2671 -0
  81. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.ttf +0 -0
  82. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.woff +0 -0
  83. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.woff2 +0 -0
  84. package/templates/vue-app/files/src/assets/icons/index.js +9 -0
  85. package/templates/vue-app/files/src/assets/icons/svg/Steve-Jobs.svg +1 -0
  86. package/templates/vue-app/files/src/assets/icons/svg/achive.svg +1 -0
  87. package/templates/vue-app/files/src/assets/icons/svg/alipay.svg +1 -0
  88. package/templates/vue-app/files/src/assets/icons/svg/anq.svg +1 -0
  89. package/templates/vue-app/files/src/assets/icons/svg/app.svg +1 -0
  90. package/templates/vue-app/files/src/assets/icons/svg/archive.svg +1 -0
  91. package/templates/vue-app/files/src/assets/icons/svg/backup.svg +1 -0
  92. package/templates/vue-app/files/src/assets/icons/svg/chain.svg +1 -0
  93. package/templates/vue-app/files/src/assets/icons/svg/chart.svg +1 -0
  94. package/templates/vue-app/files/src/assets/icons/svg/codeConsole.svg +1 -0
  95. package/templates/vue-app/files/src/assets/icons/svg/dashboard.svg +1 -0
  96. package/templates/vue-app/files/src/assets/icons/svg/database.svg +1 -0
  97. package/templates/vue-app/files/src/assets/icons/svg/date.svg +1 -0
  98. package/templates/vue-app/files/src/assets/icons/svg/deploy.svg +1 -0
  99. package/templates/vue-app/files/src/assets/icons/svg/dept.svg +1 -0
  100. package/templates/vue-app/files/src/assets/icons/svg/dev.svg +1 -0
  101. package/templates/vue-app/files/src/assets/icons/svg/develop.svg +1 -0
  102. package/templates/vue-app/files/src/assets/icons/svg/dictionary.svg +1 -0
  103. package/templates/vue-app/files/src/assets/icons/svg/doc.svg +1 -0
  104. package/templates/vue-app/files/src/assets/icons/svg/download.svg +1 -0
  105. package/templates/vue-app/files/src/assets/icons/svg/edit.svg +1 -0
  106. package/templates/vue-app/files/src/assets/icons/svg/education.svg +1 -0
  107. package/templates/vue-app/files/src/assets/icons/svg/email.svg +1 -0
  108. package/templates/vue-app/files/src/assets/icons/svg/equSet.svg +1 -0
  109. package/templates/vue-app/files/src/assets/icons/svg/error.svg +1 -0
  110. package/templates/vue-app/files/src/assets/icons/svg/exit-fullscreen.svg +1 -0
  111. package/templates/vue-app/files/src/assets/icons/svg/fullscreen.svg +1 -0
  112. package/templates/vue-app/files/src/assets/icons/svg/fwb.svg +1 -0
  113. package/templates/vue-app/files/src/assets/icons/svg/github.svg +1 -0
  114. package/templates/vue-app/files/src/assets/icons/svg/goBack.svg +1 -0
  115. package/templates/vue-app/files/src/assets/icons/svg/gonggao.svg +1 -0
  116. package/templates/vue-app/files/src/assets/icons/svg/hospital.svg +2 -0
  117. package/templates/vue-app/files/src/assets/icons/svg/hospital1.svg +2 -0
  118. package/templates/vue-app/files/src/assets/icons/svg/hospitalTotal.svg +1 -0
  119. package/templates/vue-app/files/src/assets/icons/svg/icon.svg +1 -0
  120. package/templates/vue-app/files/src/assets/icons/svg/image.svg +1 -0
  121. package/templates/vue-app/files/src/assets/icons/svg/index.svg +1 -0
  122. package/templates/vue-app/files/src/assets/icons/svg/international.svg +1 -0
  123. package/templates/vue-app/files/src/assets/icons/svg/ipvisits.svg +1 -0
  124. package/templates/vue-app/files/src/assets/icons/svg/java.svg +1 -0
  125. package/templates/vue-app/files/src/assets/icons/svg/link.svg +1 -0
  126. package/templates/vue-app/files/src/assets/icons/svg/list.svg +1 -0
  127. package/templates/vue-app/files/src/assets/icons/svg/lock.svg +1 -0
  128. package/templates/vue-app/files/src/assets/icons/svg/log.svg +1 -0
  129. package/templates/vue-app/files/src/assets/icons/svg/login.svg +1 -0
  130. package/templates/vue-app/files/src/assets/icons/svg/loginOne.svg +35 -0
  131. package/templates/vue-app/files/src/assets/icons/svg/loginOneWhite.svg +19 -0
  132. package/templates/vue-app/files/src/assets/icons/svg/loginOr.svg +93 -0
  133. package/templates/vue-app/files/src/assets/icons/svg/loginUp.svg +96 -0
  134. package/templates/vue-app/files/src/assets/icons/svg/markdown.svg +1 -0
  135. package/templates/vue-app/files/src/assets/icons/svg/menu.svg +1 -0
  136. package/templates/vue-app/files/src/assets/icons/svg/message.svg +1 -0
  137. package/templates/vue-app/files/src/assets/icons/svg/mnt.svg +1 -0
  138. package/templates/vue-app/files/src/assets/icons/svg/money.svg +1 -0
  139. package/templates/vue-app/files/src/assets/icons/svg/monitor.svg +1 -0
  140. package/templates/vue-app/files/src/assets/icons/svg/nested.svg +1 -0
  141. package/templates/vue-app/files/src/assets/icons/svg/network.svg +1 -0
  142. package/templates/vue-app/files/src/assets/icons/svg/offline.svg +1 -0
  143. package/templates/vue-app/files/src/assets/icons/svg/online.svg +1 -0
  144. package/templates/vue-app/files/src/assets/icons/svg/password.svg +1 -0
  145. package/templates/vue-app/files/src/assets/icons/svg/people.svg +1 -0
  146. package/templates/vue-app/files/src/assets/icons/svg/peoples.svg +1 -0
  147. package/templates/vue-app/files/src/assets/icons/svg/perSet.svg +1 -0
  148. package/templates/vue-app/files/src/assets/icons/svg/permission.svg +1 -0
  149. package/templates/vue-app/files/src/assets/icons/svg/phone.svg +1 -0
  150. package/templates/vue-app/files/src/assets/icons/svg/piechart.svg +1 -0
  151. package/templates/vue-app/files/src/assets/icons/svg/qiniu.svg +1 -0
  152. package/templates/vue-app/files/src/assets/icons/svg/redis.svg +1 -0
  153. package/templates/vue-app/files/src/assets/icons/svg/resetpassword.svg +1 -0
  154. package/templates/vue-app/files/src/assets/icons/svg/resetpassword1.svg +1 -0
  155. package/templates/vue-app/files/src/assets/icons/svg/role.svg +1 -0
  156. package/templates/vue-app/files/src/assets/icons/svg/search.svg +1 -0
  157. package/templates/vue-app/files/src/assets/icons/svg/server.svg +1 -0
  158. package/templates/vue-app/files/src/assets/icons/svg/shopping.svg +1 -0
  159. package/templates/vue-app/files/src/assets/icons/svg/size.svg +1 -0
  160. package/templates/vue-app/files/src/assets/icons/svg/skill.svg +1 -0
  161. package/templates/vue-app/files/src/assets/icons/svg/source.svg +1 -0
  162. package/templates/vue-app/files/src/assets/icons/svg/sqlMonitor.svg +1 -0
  163. package/templates/vue-app/files/src/assets/icons/svg/statistical.svg +1 -0
  164. package/templates/vue-app/files/src/assets/icons/svg/swagger.svg +1 -0
  165. package/templates/vue-app/files/src/assets/icons/svg/sys-tools.svg +1 -0
  166. package/templates/vue-app/files/src/assets/icons/svg/system.svg +1 -0
  167. package/templates/vue-app/files/src/assets/icons/svg/system1.svg +1 -0
  168. package/templates/vue-app/files/src/assets/icons/svg/tab.svg +1 -0
  169. package/templates/vue-app/files/src/assets/icons/svg/teams.svg +1 -0
  170. package/templates/vue-app/files/src/assets/icons/svg/theme.svg +1 -0
  171. package/templates/vue-app/files/src/assets/icons/svg/timing.svg +1 -0
  172. package/templates/vue-app/files/src/assets/icons/svg/tools.svg +1 -0
  173. package/templates/vue-app/files/src/assets/icons/svg/tree-table.svg +1 -0
  174. package/templates/vue-app/files/src/assets/icons/svg/tree.svg +1 -0
  175. package/templates/vue-app/files/src/assets/icons/svg/unlock.svg +1 -0
  176. package/templates/vue-app/files/src/assets/icons/svg/user.svg +1 -0
  177. package/templates/vue-app/files/src/assets/icons/svg/user1.svg +1 -0
  178. package/templates/vue-app/files/src/assets/icons/svg/validCode.svg +1 -0
  179. package/templates/vue-app/files/src/assets/icons/svg/visits.svg +1 -0
  180. package/templates/vue-app/files/src/assets/icons/svg/web.svg +1 -0
  181. package/templates/vue-app/files/src/assets/icons/svg/wechat.svg +1 -0
  182. package/templates/vue-app/files/src/assets/icons/svg/weixin.svg +1 -0
  183. package/templates/vue-app/files/src/assets/icons/svg/zujian.svg +1 -0
  184. package/templates/vue-app/files/src/assets/icons/svgo.yml +21 -0
  185. package/templates/vue-app/files/src/assets/images/archive.png +0 -0
  186. package/templates/vue-app/files/src/assets/images/archive_icon.png +0 -0
  187. package/templates/vue-app/files/src/assets/images/avatar.png +0 -0
  188. package/templates/vue-app/files/src/assets/images/background.jpg +0 -0
  189. package/templates/vue-app/files/src/assets/images/bg.png +0 -0
  190. package/templates/vue-app/files/src/assets/images/gongan.png +0 -0
  191. package/templates/vue-app/files/src/assets/images/hospital_icon.png +0 -0
  192. package/templates/vue-app/files/src/assets/images/location.png +0 -0
  193. package/templates/vue-app/files/src/assets/images/logintitle.jpg +0 -0
  194. package/templates/vue-app/files/src/assets/images/logo-copy1.png +0 -0
  195. package/templates/vue-app/files/src/assets/images/logo.png +0 -0
  196. package/templates/vue-app/files/src/assets/images/logoBg.png +0 -0
  197. package/templates/vue-app/files/src/assets/images/offline-bg.png +0 -0
  198. package/templates/vue-app/files/src/assets/images/position.png +0 -0
  199. package/templates/vue-app/files/src/assets/images/qualityBg.jpg +0 -0
  200. package/templates/vue-app/files/src/assets/images/self-bg.png +0 -0
  201. package/templates/vue-app/files/src/assets/images/self-bg2.png +0 -0
  202. package/templates/vue-app/files/src/assets/images/triAngel.png +0 -0
  203. package/templates/vue-app/files/src/assets/images/triAngelNormal.png +0 -0
  204. package/templates/vue-app/files/src/assets/styles/btn.scss +103 -0
  205. package/templates/vue-app/files/src/assets/styles/eladmin.scss +124 -0
  206. package/templates/vue-app/files/src/assets/styles/element-ui.scss +217 -0
  207. package/templates/vue-app/files/src/assets/styles/element-variables.scss +31 -0
  208. package/templates/vue-app/files/src/assets/styles/global.scss +73 -0
  209. package/templates/vue-app/files/src/assets/styles/index.scss +220 -0
  210. package/templates/vue-app/files/src/assets/styles/mixin.scss +60 -0
  211. package/templates/vue-app/files/src/assets/styles/publicStyle.scss +224 -0
  212. package/templates/vue-app/files/src/assets/styles/sidebar.scss +239 -0
  213. package/templates/vue-app/files/src/assets/styles/transition.scss +48 -0
  214. package/templates/vue-app/files/src/assets/styles/variables.scss +44 -0
  215. package/templates/vue-app/files/src/common/flexible.js +145 -0
  216. package/templates/vue-app/files/src/components/Breadcrumb/index.vue +87 -0
  217. package/templates/vue-app/files/src/components/Crud/CRUD.operation.vue +248 -0
  218. package/templates/vue-app/files/src/components/Crud/Pagination.vue +20 -0
  219. package/templates/vue-app/files/src/components/Crud/RR.operation.vue +39 -0
  220. package/templates/vue-app/files/src/components/Crud/UD.operation.vue +106 -0
  221. package/templates/vue-app/files/src/components/Crud/crud.js +907 -0
  222. package/templates/vue-app/files/src/components/Crud/user/UR.operation.vue +154 -0
  223. package/templates/vue-app/files/src/components/DateRangePicker/index.vue +42 -0
  224. package/templates/vue-app/files/src/components/DateRangePickerProhibitNext/index.vue +42 -0
  225. package/templates/vue-app/files/src/components/DateRangePickerProhibitTodayNext/index.vue +48 -0
  226. package/templates/vue-app/files/src/components/Dict/Dict.js +31 -0
  227. package/templates/vue-app/files/src/components/Dict/index.js +29 -0
  228. package/templates/vue-app/files/src/components/Doc/index.vue +16 -0
  229. package/templates/vue-app/files/src/components/Echarts/BarChart.vue +115 -0
  230. package/templates/vue-app/files/src/components/Echarts/Category.vue +768 -0
  231. package/templates/vue-app/files/src/components/Echarts/Funnel.vue +120 -0
  232. package/templates/vue-app/files/src/components/Echarts/Gauge.vue +74 -0
  233. package/templates/vue-app/files/src/components/Echarts/Graph.vue +101 -0
  234. package/templates/vue-app/files/src/components/Echarts/HeatMap.vue +301 -0
  235. package/templates/vue-app/files/src/components/Echarts/Line3D.vue +110 -0
  236. package/templates/vue-app/files/src/components/Echarts/PieChart.vue +84 -0
  237. package/templates/vue-app/files/src/components/Echarts/Point.vue +161 -0
  238. package/templates/vue-app/files/src/components/Echarts/RadarChart.vue +123 -0
  239. package/templates/vue-app/files/src/components/Echarts/Rich.vue +160 -0
  240. package/templates/vue-app/files/src/components/Echarts/Sankey.vue +114 -0
  241. package/templates/vue-app/files/src/components/Echarts/Scatter.vue +192 -0
  242. package/templates/vue-app/files/src/components/Echarts/Sunburst.vue +127 -0
  243. package/templates/vue-app/files/src/components/Echarts/ThemeRiver.vue +233 -0
  244. package/templates/vue-app/files/src/components/Echarts/WordCloud.vue +201 -0
  245. package/templates/vue-app/files/src/components/GithubCorner/index.vue +55 -0
  246. package/templates/vue-app/files/src/components/Hamburger/index.vue +44 -0
  247. package/templates/vue-app/files/src/components/HeaderSearch/index.vue +196 -0
  248. package/templates/vue-app/files/src/components/IconSelect/index.vue +74 -0
  249. package/templates/vue-app/files/src/components/IconSelect/requireIcons.js +10 -0
  250. package/templates/vue-app/files/src/components/Iframe/index.vue +30 -0
  251. package/templates/vue-app/files/src/components/JavaEdit/index.vue +78 -0
  252. package/templates/vue-app/files/src/components/Pagination/index.vue +100 -0
  253. package/templates/vue-app/files/src/components/PanThumb/index.vue +149 -0
  254. package/templates/vue-app/files/src/components/ParentView/index.vue +3 -0
  255. package/templates/vue-app/files/src/components/Permission/index.js +13 -0
  256. package/templates/vue-app/files/src/components/Permission/permission.js +21 -0
  257. package/templates/vue-app/files/src/components/RightPanel/index.vue +149 -0
  258. package/templates/vue-app/files/src/components/Screenfull/index.vue +60 -0
  259. package/templates/vue-app/files/src/components/SizeSelect/index.vue +60 -0
  260. package/templates/vue-app/files/src/components/SvgIcon/index.vue +66 -0
  261. package/templates/vue-app/files/src/components/ThemePicker/index.vue +177 -0
  262. package/templates/vue-app/files/src/components/UploadExcel/index.vue +149 -0
  263. package/templates/vue-app/files/src/components/WaterMark/setWaterMark.js +68 -0
  264. package/templates/vue-app/files/src/components/WaterMark/waterMark.vue +69 -0
  265. package/templates/vue-app/files/src/components/Xgplayer/index.vue +49 -0
  266. package/templates/vue-app/files/src/components/YamlEdit/index.vue +81 -0
  267. package/templates/vue-app/files/src/layout/components/AppMain.vue +67 -0
  268. package/templates/vue-app/files/src/layout/components/Navbar.vue +209 -0
  269. package/templates/vue-app/files/src/layout/components/Settings/index.vue +125 -0
  270. package/templates/vue-app/files/src/layout/components/Sidebar/FixiOSBug.js +26 -0
  271. package/templates/vue-app/files/src/layout/components/Sidebar/Item.vue +29 -0
  272. package/templates/vue-app/files/src/layout/components/Sidebar/Link.vue +35 -0
  273. package/templates/vue-app/files/src/layout/components/Sidebar/Logo.vue +93 -0
  274. package/templates/vue-app/files/src/layout/components/Sidebar/SidebarItem.vue +104 -0
  275. package/templates/vue-app/files/src/layout/components/Sidebar/index.vue +79 -0
  276. package/templates/vue-app/files/src/layout/components/TagsView/ScrollPane.vue +90 -0
  277. package/templates/vue-app/files/src/layout/components/TagsView/index.vue +299 -0
  278. package/templates/vue-app/files/src/layout/components/index.js +5 -0
  279. package/templates/vue-app/files/src/layout/index.vue +119 -0
  280. package/templates/vue-app/files/src/layout/mixin/ResizeHandler.js +45 -0
  281. package/templates/vue-app/files/src/main.js +89 -0
  282. package/templates/vue-app/files/src/mixins/crud.js +348 -0
  283. package/templates/vue-app/files/src/router/index.js +156 -0
  284. package/templates/vue-app/files/src/router/routers.js +203 -0
  285. package/templates/vue-app/files/src/settings.js +57 -0
  286. package/templates/vue-app/files/src/store/getters.js +29 -0
  287. package/templates/vue-app/files/src/store/index.js +25 -0
  288. package/templates/vue-app/files/src/store/modules/api.js +33 -0
  289. package/templates/vue-app/files/src/store/modules/app.js +55 -0
  290. package/templates/vue-app/files/src/store/modules/permission.js +79 -0
  291. package/templates/vue-app/files/src/store/modules/register.js +17 -0
  292. package/templates/vue-app/files/src/store/modules/settings.js +46 -0
  293. package/templates/vue-app/files/src/store/modules/tagsView.js +168 -0
  294. package/templates/vue-app/files/src/store/modules/user.js +119 -0
  295. package/templates/vue-app/files/src/utils/auth.js +18 -0
  296. package/templates/vue-app/files/src/utils/base64ToFile.js +27 -0
  297. package/templates/vue-app/files/src/utils/clipboard.js +36 -0
  298. package/templates/vue-app/files/src/utils/datetime.js +289 -0
  299. package/templates/vue-app/files/src/utils/getBlobFile.js +10 -0
  300. package/templates/vue-app/files/src/utils/getTime.js +29 -0
  301. package/templates/vue-app/files/src/utils/index.js +520 -0
  302. package/templates/vue-app/files/src/utils/permission.js +29 -0
  303. package/templates/vue-app/files/src/utils/pinyin.js +450 -0
  304. package/templates/vue-app/files/src/utils/request.js +139 -0
  305. package/templates/vue-app/files/src/utils/rsaEncrypt.js +37 -0
  306. package/templates/vue-app/files/src/utils/shortcuts.js +210 -0
  307. package/templates/vue-app/files/src/utils/upload.js +12 -0
  308. package/templates/vue-app/files/src/utils/validate.js +262 -0
  309. package/templates/vue-app/files/src/views/components/Echarts.vue +124 -0
  310. package/templates/vue-app/files/src/views/components/Editor.vue +75 -0
  311. package/templates/vue-app/files/src/views/components/MarkDown.vue +44 -0
  312. package/templates/vue-app/files/src/views/components/UVideo.vue +37 -0
  313. package/templates/vue-app/files/src/views/components/YamlEdit.vue +206 -0
  314. package/templates/vue-app/files/src/views/components/camera/camera.vue +115 -0
  315. package/templates/vue-app/files/src/views/components/camera/cameraTest.vue +158 -0
  316. package/templates/vue-app/files/src/views/components/excel/upload-excel.vue +41 -0
  317. package/templates/vue-app/files/src/views/components/icons/element-icons.js +74 -0
  318. package/templates/vue-app/files/src/views/components/icons/index.vue +106 -0
  319. package/templates/vue-app/files/src/views/components/icons/svg-icons.js +10 -0
  320. package/templates/vue-app/files/src/views/components/scroll/index.vue +107 -0
  321. package/templates/vue-app/files/src/views/components/scrollFull/index.vue +99 -0
  322. package/templates/vue-app/files/src/views/dashboard/LineChart.vue +138 -0
  323. package/templates/vue-app/files/src/views/dashboard/PanelGroup.vue +173 -0
  324. package/templates/vue-app/files/src/views/dashboard/mixins/resize.js +57 -0
  325. package/templates/vue-app/files/src/views/dataArchive/delTable.vue +354 -0
  326. package/templates/vue-app/files/src/views/dataArchive/exportDetail.vue +121 -0
  327. package/templates/vue-app/files/src/views/dataArchive/exportList.vue +160 -0
  328. package/templates/vue-app/files/src/views/dataArchive/index.vue +2104 -0
  329. package/templates/vue-app/files/src/views/features/401.vue +83 -0
  330. package/templates/vue-app/files/src/views/features/404.vue +226 -0
  331. package/templates/vue-app/files/src/views/features/redirect.vue +12 -0
  332. package/templates/vue-app/files/src/views/generator/config.vue +348 -0
  333. package/templates/vue-app/files/src/views/generator/index.vue +143 -0
  334. package/templates/vue-app/files/src/views/generator/preview.vue +39 -0
  335. package/templates/vue-app/files/src/views/home.vue +80 -0
  336. package/templates/vue-app/files/src/views/indexManagement/index.vue +422 -0
  337. package/templates/vue-app/files/src/views/indexManagement/other.vue +286 -0
  338. package/templates/vue-app/files/src/views/institutionMonitor/components/LineChart.vue +191 -0
  339. package/templates/vue-app/files/src/views/institutionMonitor/index.scss +339 -0
  340. package/templates/vue-app/files/src/views/institutionMonitor/index.vue +1385 -0
  341. package/templates/vue-app/files/src/views/institutionMonitor/mixins/resize.js +57 -0
  342. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/checkProjectCode.vue +267 -0
  343. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/imageAbnormalMonitor.vue +361 -0
  344. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/index.vue +686 -0
  345. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/leakageAnomaly.vue +270 -0
  346. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/moveMonitore.vue +114 -0
  347. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/qualityMonitore.vue +338 -0
  348. package/templates/vue-app/files/src/views/institutionSet/cloudSet.vue +534 -0
  349. package/templates/vue-app/files/src/views/institutionSet/index.vue +2550 -0
  350. package/templates/vue-app/files/src/views/login.vue +243 -0
  351. package/templates/vue-app/files/src/views/qualityLogin.vue +280 -0
  352. package/templates/vue-app/files/src/views/selfStatistics/components/LineChart.vue +296 -0
  353. package/templates/vue-app/files/src/views/selfStatistics/hospitalDetail/index.vue +533 -0
  354. package/templates/vue-app/files/src/views/selfStatistics/index.scss +447 -0
  355. package/templates/vue-app/files/src/views/selfStatistics/index.vue +903 -0
  356. package/templates/vue-app/files/src/views/selfStatistics/mixins/resize.js +57 -0
  357. package/templates/vue-app/files/src/views/selfStatistics/monitorDetail/index.vue +285 -0
  358. package/templates/vue-app/files/src/views/selfStatistics/offlineDetail/index.vue +104 -0
  359. package/templates/vue-app/files/src/views/selfStatistics/selfActiveDetail/index.vue +104 -0
  360. package/templates/vue-app/files/src/views/selfStatistics/selfMonitorDetail/index.vue +420 -0
  361. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/setWaterMark.js +68 -0
  362. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/waterMark.vue +69 -0
  363. package/templates/vue-app/files/src/views/system/dept/index.vue +144 -0
  364. package/templates/vue-app/files/src/views/system/dict/dictDetail.vue +146 -0
  365. package/templates/vue-app/files/src/views/system/dict/index.vue +159 -0
  366. package/templates/vue-app/files/src/views/system/examModality/index.vue +174 -0
  367. package/templates/vue-app/files/src/views/system/examPart/index.vue +184 -0
  368. package/templates/vue-app/files/src/views/system/examProject/index.vue +321 -0
  369. package/templates/vue-app/files/src/views/system/examine/index.vue +66 -0
  370. package/templates/vue-app/files/src/views/system/job/index.vue +119 -0
  371. package/templates/vue-app/files/src/views/system/job/module/form.vue +72 -0
  372. package/templates/vue-app/files/src/views/system/job/module/header.vue +48 -0
  373. package/templates/vue-app/files/src/views/system/menu/index.vue +327 -0
  374. package/templates/vue-app/files/src/views/system/model/index.vue +285 -0
  375. package/templates/vue-app/files/src/views/system/role/index.vue +434 -0
  376. package/templates/vue-app/files/src/views/system/sysSet/index.vue +84 -0
  377. package/templates/vue-app/files/src/views/system/timing/index.vue +289 -0
  378. package/templates/vue-app/files/src/views/system/timing/log.vue +143 -0
  379. package/templates/vue-app/files/src/views/system/user/admin.vue +414 -0
  380. package/templates/vue-app/files/src/views/system/user/center/updateEmail.vue +146 -0
  381. package/templates/vue-app/files/src/views/system/user/center/updatePass.vue +168 -0
  382. package/templates/vue-app/files/src/views/system/user/center.vue +140 -0
  383. package/templates/vue-app/files/src/views/system/user/index.vue +972 -0
  384. package/templates/vue-app/files/src/views/systemSet/role/index.vue +314 -0
  385. package/templates/vue-app/files/src/views/systemSet/user/admin.vue +414 -0
  386. package/templates/vue-app/files/src/views/systemSet/user/center/updateEmail.vue +146 -0
  387. package/templates/vue-app/files/src/views/systemSet/user/center/updatePass.vue +115 -0
  388. package/templates/vue-app/files/src/views/systemSet/user/center.vue +351 -0
  389. package/templates/vue-app/files/src/views/systemSet/user/index.vue +928 -0
  390. package/templates/vue-app/files/src/views/tools/aliPay/config.vue +102 -0
  391. package/templates/vue-app/files/src/views/tools/aliPay/index.vue +48 -0
  392. package/templates/vue-app/files/src/views/tools/aliPay/toPay.vue +91 -0
  393. package/templates/vue-app/files/src/views/tools/email/config.vue +91 -0
  394. package/templates/vue-app/files/src/views/tools/email/index.vue +42 -0
  395. package/templates/vue-app/files/src/views/tools/email/send.vue +159 -0
  396. package/templates/vue-app/files/src/views/tools/storage/index.vue +35 -0
  397. package/templates/vue-app/files/src/views/tools/storage/local/index.vue +207 -0
  398. package/templates/vue-app/files/src/views/tools/storage/qiniu/form.vue +108 -0
  399. package/templates/vue-app/files/src/views/tools/storage/qiniu/index.vue +241 -0
  400. package/templates/vue-app/files/src/views/tools/swagger/index.vue +14 -0
  401. package/templates/vue-app/files/vue.config.js +173 -0
  402. package/templates/vue-app/template.json +30 -0
@@ -0,0 +1,2104 @@
1
+ <template>
2
+ <div class="app-container" ref="dataArchiveContainer">
3
+ <!--工具栏-->
4
+ <div class="head-container" ref="fixedDiv" style="width: calc(100%)">
5
+ <div class="query-container" v-if="crud.props.searchToggle">
6
+ <el-form :inline="true" :model="query" class="demo-form-dataArchive" size="small">
7
+ <el-form-item prop="address">
8
+ <!-- 区域 -->
9
+ <el-cascader
10
+ v-model="query.address"
11
+ clearable
12
+ placeholder="机构地区"
13
+ :options="provinceList"
14
+ :props="props"
15
+ @active-item-change="handleItemChange"
16
+ @change="addressChange">
17
+ </el-cascader>
18
+ </el-form-item>
19
+ <el-form-item>
20
+ <el-input
21
+ v-model="query.patientId"
22
+ size="small"
23
+ clearable
24
+ @clear="crud.toQuery"
25
+ placeholder="请输入患者编号"
26
+ style="width: 150px"
27
+ class="filter-item"
28
+ @keyup.enter.native="crud.toQuery" />
29
+ </el-form-item>
30
+ <el-form-item>
31
+ <el-input
32
+ v-model="query.accessNumber"
33
+ size="small"
34
+ clearable
35
+ @clear="crud.toQuery"
36
+ placeholder="请输入检查编号"
37
+ style="width: 150px"
38
+ class="filter-item"
39
+ @keyup.enter.native="crud.toQuery" />
40
+ </el-form-item>
41
+ <el-form-item>
42
+ <el-input
43
+ v-model="query.patientName"
44
+ size="small"
45
+ clearable
46
+ @clear="crud.toQuery"
47
+ placeholder="请输入姓名"
48
+ style="width: 150px"
49
+ class="filter-item"
50
+ @keyup.enter.native="crud.toQuery" />
51
+ </el-form-item>
52
+ <el-form-item>
53
+ <el-input
54
+ v-model="query.mobilePhone"
55
+ size="small"
56
+ @clear="crud.toQuery"
57
+ placeholder="请输入手机号"
58
+ style="width: 150px"
59
+ class="filter-item"
60
+ @keyup.enter.native="crud.toQuery" />
61
+ </el-form-item>
62
+ <el-form-item>
63
+ <el-input
64
+ v-model="query.idCardNo"
65
+ size="small"
66
+ clearable
67
+ @clear="crud.toQuery"
68
+ placeholder="请输入患者身份证号"
69
+ style="width: 180px"
70
+ class="filter-item"
71
+ @keyup.enter.native="crud.toQuery" />
72
+ </el-form-item>
73
+ <el-form-item>
74
+ <el-input
75
+ v-model="query.studyUid"
76
+ size="small"
77
+ clearable
78
+ @clear="crud.toQuery"
79
+ placeholder="请输入studyUid"
80
+ style="width: 150px"
81
+ class="filter-item"
82
+ @keyup.enter.native="crud.toQuery" />
83
+ </el-form-item>
84
+ <el-form-item>
85
+ <el-input
86
+ v-model="query.modality"
87
+ size="small"
88
+ clearable
89
+ @clear="crud.toQuery"
90
+ placeholder="请输入检查模式"
91
+ style="width: 160px"
92
+ class="filter-item"
93
+ @keyup.enter.native="crud.toQuery" />
94
+ </el-form-item>
95
+ <el-form-item>
96
+ <el-input
97
+ v-model="query.examBodyPart"
98
+ size="small"
99
+ clearable
100
+ @clear="crud.toQuery"
101
+ placeholder="请输入检查部位"
102
+ style="width: 160px"
103
+ class="filter-item"
104
+ @keyup.enter.native="crud.toQuery" />
105
+ </el-form-item>
106
+ <el-form-item>
107
+ <el-input
108
+ v-model="query.examItemName"
109
+ size="small"
110
+ clearable
111
+ @clear="crud.toQuery"
112
+ placeholder="请输入检查项目"
113
+ style="width: 160px"
114
+ class="filter-item"
115
+ @keyup.enter.native="crud.toQuery" />
116
+ </el-form-item>
117
+ <el-form-item> </el-form-item>
118
+ <el-form-item>
119
+ <el-input
120
+ v-model="query.urlKey"
121
+ clearable
122
+ @clear="crud.toQuery"
123
+ type="number"
124
+ placeholder="请输入urlKey"
125
+ style="width: 160px"
126
+ class="filter-item"
127
+ @keyup.enter.native="crud.toQuery" />
128
+ </el-form-item>
129
+ <el-form-item>
130
+ <el-input
131
+ v-model="query.applicationId"
132
+ clearable
133
+ @clear="crud.toQuery"
134
+ placeholder="请输入申请单ID"
135
+ style="width: 160px"
136
+ class="filter-item"
137
+ @keyup.enter.native="crud.toQuery" />
138
+ </el-form-item>
139
+ <el-form-item>
140
+ <el-input
141
+ v-model="query.studyOrderId"
142
+ clearable
143
+ @clear="crud.toQuery"
144
+ placeholder="请输入检查医嘱ID"
145
+ style="width: 160px"
146
+ class="filter-item"
147
+ @keyup.enter.native="crud.toQuery" />
148
+ </el-form-item>
149
+ <el-form-item prop="isOss">
150
+ <el-select
151
+ v-model="query.isOss"
152
+ clearable
153
+ placeholder="图像状态"
154
+ class="filter-item"
155
+ style="width: 160px"
156
+ @change="crud.toQuery">
157
+ <el-option
158
+ v-for="item in dict.is_oss"
159
+ :key="item.value"
160
+ :label="item.label"
161
+ :value="item.value" />
162
+ </el-select>
163
+ </el-form-item>
164
+ <el-form-item label="检查机构:">
165
+ <el-select
166
+ v-model="query.hosId"
167
+ placeholder="请选择"
168
+ filterable
169
+ remote
170
+ clearable
171
+ reserve-keyword
172
+ :remote-method="remoteMethod"
173
+ :loading="loading"
174
+ style="width: 160px"
175
+ size="small"
176
+ @focus="clear"
177
+ @hook:mounted="clear"
178
+ @visible-change="clear"
179
+ ref="select">
180
+ <el-option
181
+ v-for="(item, index) in options"
182
+ :key="index"
183
+ :label="item.hospitalName"
184
+ :value="item.hospitalId">
185
+ </el-option>
186
+ </el-select>
187
+ </el-form-item>
188
+ <el-form-item label="检查时间:">
189
+ <date-range-picker
190
+ style="width: 300px; height: 34px"
191
+ startPlaceholder="开始检查时间"
192
+ endPlaceholder="结束检查时间"
193
+ @change="crud.toQuery"
194
+ :clearable="false"
195
+ v-model="query.checkTime"
196
+ unlink-panels />
197
+ </el-form-item>
198
+ <el-form-item>
199
+ <el-button @click="crud.toQuery" class="filter-item" size="small">查询</el-button>
200
+ <el-button @click="ResetClick" class="filter-item" size="small" style="margin-left: 5px"
201
+ >重置</el-button
202
+ >
203
+ <el-button
204
+ @click="exportExcel"
205
+ v-if="checkPer(permission.export)"
206
+ class="filter-item"
207
+ size="small"
208
+ style="margin-left: 5px"
209
+ >导出</el-button
210
+ >
211
+ <el-button @click="exportLog" class="filter-item" size="small" style="margin-left: 5px"
212
+ >导出日志</el-button
213
+ >
214
+ </el-form-item>
215
+ <!-- 搜索 -->
216
+ </el-form>
217
+ <div>
218
+ <el-button
219
+ size="medium"
220
+ type="primary"
221
+ v-if="checkPer(permission.editUrlKey)"
222
+ @click="editUrlKey"
223
+ >修改urlKey
224
+ </el-button>
225
+ <el-button size="medium" type="danger" v-if="checkPer(permission.del)" @click="delAction"
226
+ >删除</el-button
227
+ >
228
+ <el-button
229
+ size="medium"
230
+ type="info"
231
+ v-if="checkPer(permission.delList)"
232
+ @click="delRecordsShow"
233
+ >删除记录</el-button
234
+ >
235
+ </div>
236
+ </div>
237
+ <crudOperation :permission="permission" />
238
+ </div>
239
+ <!--表单渲染-->
240
+ <el-dialog
241
+ :title="
242
+ showReport ? '浏览报告' : showQRCode ? '二维码' : showUrlKey ? '修改urlKey' : '删除记录'
243
+ "
244
+ :visible.sync="dataArchiveVisible"
245
+ style="min-width: 300px"
246
+ :width="showReport ? '55%' : showUrlKey || showQRCode ? '500px' : '80%'"
247
+ :before-close="handleClose"
248
+ append-to-body
249
+ :top="showQRCode ? '10vh' : '3vh'"
250
+ @open="dialogOpen"
251
+ @close="dialogClose">
252
+ <div v-if="showReport">
253
+ <el-row>
254
+ <el-col :span="24"
255
+ ><h3 style="text-align: center">
256
+ {{ this.currentRow.applyHospitalName || this.empty }}
257
+ </h3>
258
+ </el-col>
259
+ </el-row>
260
+ <el-row class="patientDetail">
261
+ <el-col :span="8"
262
+ ><span>姓名:</span>{{ this.currentRow.patientName || this.empty }}</el-col
263
+ >
264
+ <el-col :span="8"
265
+ ><span>性别:</span>{{ this.currentRow.patientSex || this.empty }}</el-col
266
+ >
267
+ <el-col :span="8"
268
+ ><span>年龄:</span>{{ this.currentRow.patientAge || this.empty }}</el-col
269
+ >
270
+ </el-row>
271
+ <el-row class="patientDetail">
272
+ <el-col :span="8"
273
+ ><span>申请科室:</span>{{ this.currentRow.applyOffice || this.empty }}</el-col
274
+ >
275
+ <el-col :span="8"
276
+ ><span>患者类型:</span>{{ this.currentRow.patientType || this.empty }}</el-col
277
+ >
278
+ <el-col :span="8"
279
+ ><span>检查编号:</span>{{ this.currentRow.accessNumber || this.empty }}</el-col
280
+ >
281
+ </el-row>
282
+ <el-row class="patientDetail">
283
+ <el-col :span="8"
284
+ ><span>检查部位:</span>{{ this.currentRow.examBodyPart || this.empty }}</el-col
285
+ >
286
+ <el-col :span="8">
287
+ <span>检查项目:</span>
288
+ <span v-if="currentRow.examItemName">
289
+ <span
290
+ v-for="(item, index) in currentRow.examItemName"
291
+ :key="index"
292
+ style="font-weight: normal">
293
+ {{ item }}<span v-if="index != currentRow.examItemName.length - 1">,</span>
294
+ </span>
295
+ </span>
296
+ <span v-else>{{ this.empty }}</span>
297
+ </el-col>
298
+ <el-col :span="8"
299
+ ><span>检查时间:</span>{{ this.currentRow.patientCheckDate || this.empty }}</el-col
300
+ >
301
+ </el-row>
302
+ <el-row>
303
+ <el-col :span="24" class="paddingClass"><h3>检查所见</h3></el-col>
304
+ </el-row>
305
+ <el-row>
306
+ <el-col class="paddingClass" :span="24">
307
+ <p>{{ this.currentRow.firExamFindings || this.empty }}</p></el-col
308
+ >
309
+ </el-row>
310
+ <el-row>
311
+ <el-col :span="24" class="paddingClass"><h3>检查印象</h3></el-col>
312
+ </el-row>
313
+ <el-row>
314
+ <el-col :span="24" class="paddingClass">
315
+ <p>{{ this.currentRow.firExamImpression || this.empty }}</p></el-col
316
+ >
317
+ </el-row>
318
+ <el-row class="patientDetail">
319
+ <el-col :span="8"
320
+ ><span>报告医生:</span
321
+ ><span>{{ this.currentRow.firstRepDocName || this.empty }}</span></el-col
322
+ >
323
+ <el-col :span="8"
324
+ ><span>审核医生:</span
325
+ ><span>{{ this.currentRow.audiRepDocName || this.empty }}</span></el-col
326
+ >
327
+ <el-col :span="8"
328
+ ><span>审核时间:</span
329
+ ><span>{{ this.currentRow.auditRepTime || this.empty }}</span></el-col
330
+ >
331
+ </el-row>
332
+ </div>
333
+ <div v-else-if="showQRCode">
334
+ <div style="padding: 0 20px">
335
+ <p style="font-size: 15px; line-height: 1.75em">
336
+ 检查项目:<span v-if="currentRow.examItemName">
337
+ <span
338
+ v-for="(item, index) in currentRow.examItemName"
339
+ :key="index"
340
+ style="font-weight: normal">
341
+ {{ item }}<span v-if="index != currentRow.examItemName.length - 1">,</span>
342
+ </span>
343
+ </span>
344
+ <span v-else>{{ this.empty }}</span>
345
+ </p>
346
+ <p style="font-size: 15px; line-height: 1.75em">
347
+ 检查时间:{{ this.currentRow.patientCheckDate || this.empty }}
348
+ </p>
349
+ </div>
350
+
351
+ <div class="scanImg">
352
+ <div class="qrcode">
353
+ <div>
354
+ <img :src="scanString[1]" />
355
+ <span>无校验二维码</span>
356
+ </div>
357
+ <div>
358
+ <img :src="scanString[0]" />
359
+ <span>校验二维码</span>
360
+ </div>
361
+ </div>
362
+ </div>
363
+ </div>
364
+ <div v-else-if="showUrlKey">
365
+ <el-form
366
+ :model="ruleForm"
367
+ :rules="rules"
368
+ ref="ruleForm"
369
+ label-width="0"
370
+ class="demo-ruleForm">
371
+ <el-form-item label="" prop="urlKey">
372
+ <el-input v-model="ruleForm.urlKey" placeholder="请输Url Key"></el-input>
373
+ <div class="showUrlKeyWarn">
374
+ <i class="el-icon-warning"></i>
375
+ 修改Key值可能会导致看图错误,请谨慎修改!
376
+ </div>
377
+ </el-form-item>
378
+ </el-form>
379
+ </div>
380
+ <div v-else>
381
+ <delTable v-if="delTableShow" ref="delTable" />
382
+ </div>
383
+ <span slot="footer" class="dialog-footer" v-if="showUrlKey">
384
+ <el-button @click="dataArchiveVisible = false">取 消</el-button>
385
+ <el-button type="primary" @click="dialogSubmit">确 定</el-button>
386
+ </span>
387
+ </el-dialog>
388
+ <!--表格渲染-->
389
+ <div class="box-card" ref="dataArchiveTable">
390
+ <el-popover
391
+ popper-class="popoverCollapsemedical"
392
+ placement="bottom"
393
+ width="200"
394
+ trigger="click">
395
+ <el-form style="max-height: 50vh; overflow: auto">
396
+ <el-form-item style="margin-bottom: 0">
397
+ <!-- :disabled="index == 0" -->
398
+ <el-checkbox
399
+ @change="inkured"
400
+ :disabled="item.prop == 'accessNumber'"
401
+ v-for="(item, index) in tableHeader"
402
+ :key="index"
403
+ v-model="item.isShow">
404
+ <p style="margin: 2px 0">{{ item.label }}</p>
405
+ </el-checkbox>
406
+ </el-form-item>
407
+ </el-form>
408
+ <el-button slot="reference" size="small" style="margin-bottom: 10px" class="el-icon-s-grid">
409
+ <i class="el-icon-arrow-down el-icon--right"></i>
410
+ </el-button>
411
+ </el-popover>
412
+ <el-table
413
+ ref="multipleTable"
414
+ v-loading="crud.loading"
415
+ lazy
416
+ :data="crud.data"
417
+ :cell-style="{ textAlign: 'center' }"
418
+ :header-cell-style="{ textAlign: 'center' }"
419
+ :tree-props="{ children: 'flag', hasChildren: 'flag' }"
420
+ :row-key="getRowKeys"
421
+ @current-change="handleCurrentChange"
422
+ @select="crud.selectChange"
423
+ @select-all="crud.selectAllChange"
424
+ @selection-change="handleSelectionChange"
425
+ :max-height="tableHeight">
426
+ <el-table-column fixed="" type="selection" width="55"> </el-table-column>
427
+ <el-table-column fixed label="序号" type="index" align="center">
428
+ <template slot-scope="scope">
429
+  <span>{{ (crud.page.page - 1) * crud.page.size + scope.$index + 1 }}</span>
430
+ </template>
431
+ </el-table-column>
432
+ <el-table-column
433
+ :show-overflow-tooltip="true"
434
+ v-for="(item, index) in bindTableColumns"
435
+ :key="index + '-bindTableColumns'"
436
+ align="center"
437
+ :label="item.label"
438
+ :prop="item.prop"
439
+ :min-width="item.width"
440
+ :sortable="item.sortable">
441
+ <template slot-scope="scope">
442
+ <span v-if="item.prop == 'standardProjectName'">
443
+ <ul v-if="scope.row.standardProjectName">
444
+ <li v-for="(item, index) in scope.row.standardProjectName" :key="index">
445
+ {{ item }}
446
+ </li>
447
+ </ul>
448
+ <span v-else>-</span>
449
+ </span>
450
+ <span v-else-if="item.prop == 'standardProjectCode'">
451
+ <ul v-if="scope.row.standardProjectCode">
452
+ <li v-for="(item, index) in scope.row.standardProjectCode" :key="index">
453
+ {{ item }}
454
+ </li>
455
+ </ul>
456
+ <span v-else>-</span>
457
+ </span>
458
+ <span v-else-if="item.prop == 'examItemName'">
459
+ <ul v-if="scope.row.examItemName">
460
+ <li v-for="(item, index) in scope.row.examItemName" :key="index">
461
+ {{ item }}
462
+ </li>
463
+ </ul>
464
+ <span v-else>-</span>
465
+ </span>
466
+ <span v-else-if="item.prop == 'examItemCode'">
467
+ <ul v-if="scope.row.examItemCode">
468
+ <li v-for="(item, index) in scope.row.examItemCode" :key="index">
469
+ {{ item }}
470
+ </li>
471
+ </ul>
472
+ <span v-else>-</span>
473
+ </span>
474
+ <span v-else>
475
+ {{ scope.row[item.prop] || empty }}
476
+ </span>
477
+ </template>
478
+ </el-table-column>
479
+
480
+ <el-table-column label="操作" width="250px" fixed="right">
481
+ <template slot-scope="scope">
482
+ <el-button type="text" size="mini" @click="showReportDetail">报告</el-button>
483
+
484
+ <el-button
485
+ type="text"
486
+ size="mini"
487
+ v-if="checkPer(permission.downLoad)"
488
+ :disabled="scope.row.isOss == 1 || scope.row.isOss == 5"
489
+ @click="operateDonwnLoad(scope.row)"
490
+ >下载</el-button
491
+ >
492
+
493
+ <el-button
494
+ type="text"
495
+ size="mini"
496
+ v-if="scope.row.isOss == 1"
497
+ @click="getImage(scope.row)">
498
+ <span style="color: #ff7e00"> 获取图像</span>
499
+ </el-button>
500
+ <el-button type="text" size="mini" :disabled="true" v-if="scope.row.isOss == 5">
501
+ 正在获取
502
+ </el-button>
503
+ <el-button
504
+ type="text"
505
+ size="mini"
506
+ @click="imageBrower(scope.row)"
507
+ v-if="scope.row.isOss == 2 || scope.row.isOss == 0">
508
+ 浏览图像
509
+ </el-button>
510
+
511
+ <el-dropdown>
512
+ <span class="el-dropdown-link">
513
+ 更多<i class="el-icon-arrow-down el-icon--right"></i>
514
+ </span>
515
+ <el-dropdown-menu slot="dropdown">
516
+ <el-dropdown-item>
517
+ <el-button
518
+ type="text"
519
+ style="width: 100%"
520
+ size="mini"
521
+ @click="getUpdate(scope.row)"
522
+ v-if="checkPer(permission.editInfo)"
523
+ >修改信息</el-button
524
+ >
525
+ </el-dropdown-item>
526
+ <el-dropdown-item>
527
+ <el-button type="text" size="mini" @click="showQRCodeDetail(scope.row)"
528
+ >二维码</el-button
529
+ >
530
+ </el-dropdown-item>
531
+ <el-dropdown-item>
532
+ <el-button
533
+ type="text"
534
+ size="mini"
535
+ v-if="checkPer(permission.SMSnotice)"
536
+ @click="SMSnotice(scope.row)">
537
+ 短信通知
538
+ </el-button>
539
+ </el-dropdown-item>
540
+ <el-dropdown-item>
541
+ <el-button type="text" size="mini" @click="checkReport(scope.row, 1)">
542
+ 电子报告
543
+ </el-button>
544
+ </el-dropdown-item>
545
+ <el-dropdown-item>
546
+ <el-button type="text" size="mini" @click="checkReport(scope.row, 2)">
547
+ 电子胶片
548
+ </el-button>
549
+ </el-dropdown-item>
550
+ </el-dropdown-menu>
551
+ </el-dropdown>
552
+ </template>
553
+ </el-table-column>
554
+ </el-table>
555
+ <!--分页组件-->
556
+ <pagination />
557
+ </div>
558
+ <el-dialog
559
+ title="修改患者信息"
560
+ :visible.sync="updateInfoShow"
561
+ width="400px"
562
+ top="6vh"
563
+ :before-close="beforeClose">
564
+ <div class="warning">
565
+ <span class="el-icon-warning"></span>
566
+ <span>修改患者信息可能会导致无法查看图像,请谨慎修改!</span>
567
+ </div>
568
+ <!-- :rules="rules" -->
569
+ <el-form
570
+ :inline="true"
571
+ :model="form"
572
+ class="form-inline-hospital"
573
+ size="small"
574
+ ref="form"
575
+ label-position="right"
576
+ label-width="100px">
577
+ <el-form-item prop="patientName" label="患者姓名">
578
+ <el-input
579
+ v-model="form.patientName"
580
+ type="text"
581
+ auto-complete="off"
582
+ placeholder="请输入患者姓名">
583
+ </el-input>
584
+ </el-form-item>
585
+ <el-form-item prop="mobilePhone" label="手机号">
586
+ <el-input
587
+ v-model="form.mobilePhone"
588
+ type="text"
589
+ auto-complete="off"
590
+ placeholder="请输入手机号">
591
+ </el-input>
592
+ </el-form-item>
593
+ <el-form-item prop="idCardNo" label="身份证号">
594
+ <el-input
595
+ v-model="form.idCardNo"
596
+ type="text"
597
+ auto-complete="off"
598
+ placeholder="请输入身份证号">
599
+ </el-input>
600
+ </el-form-item>
601
+ <el-form-item prop="examItemCode" label="检查项目编码">
602
+ <el-input
603
+ v-model="form.examItemCode"
604
+ type="textarea"
605
+ autosize
606
+ auto-complete="off"
607
+ placeholder="请输入检查项目编码">
608
+ </el-input>
609
+ </el-form-item>
610
+ </el-form>
611
+ <span slot="footer" class="dialog-footer">
612
+ <el-button @click="beforeClose">取消</el-button>
613
+ <el-button type="primary" @click="sureUpdate">确认</el-button>
614
+ </span>
615
+ </el-dialog>
616
+ <el-dialog title="下载" :visible.sync="downLoadShow" width="25%" :before-close="beforeClose1">
617
+ <div class="download">
618
+ <div @click="openHref">
619
+ <p>链接:</p>
620
+ <span class="hover">{{ pramsUrl.shortUrl }}</span>
621
+ <el-button type="text" style="margin-left: 15%">打开</el-button>
622
+ </div>
623
+ <div>
624
+ <p>提取码:</p>
625
+ <span id="text">{{ pramsUrl.vfCode }}</span>
626
+ <el-button
627
+ type="text"
628
+ style="margin-left: 5%"
629
+ data-clipboard-target="#text"
630
+ @click="btnCopy"
631
+ class="btn"
632
+ >复制</el-button
633
+ >
634
+ </div>
635
+ <div>
636
+ <p>有效期:</p>
637
+ <span>{{ pramsUrl.validityTime }}</span>
638
+ </div>
639
+ </div>
640
+ <span slot="footer" class="dialog-footer">
641
+ <el-button type="primary" @click="beforeClose1">确认</el-button>
642
+ </span>
643
+ </el-dialog>
644
+ <!-- 短信通知 -->
645
+ <el-dialog title="短信通知" :visible.sync="SMSnoticeShow" width="30%" @close="closeSMS">
646
+ <div class="SMSnoticeStyle">
647
+ <div>检查机构:{{ SMSnoticeObj.applyHospitalName || '-' }}</div>
648
+ <div>检查编号:{{ SMSnoticeObj.accessNumber || '-' }}</div>
649
+ <div>手机号码:{{ SMSnoticeObj.mobilePhone || '-' }}</div>
650
+ </div>
651
+ <span slot="footer" class="dialog-footer">
652
+ <el-button size="small" @click="closeSMS">取 消</el-button>
653
+ <el-button size="small" type="primary" @click="submitSMSnotice">确 定</el-button>
654
+ </span>
655
+ </el-dialog>
656
+ <!-- 收费状态 -->
657
+ <el-dialog
658
+ title="修改收费状态"
659
+ :visible.sync="chargeStatusShow"
660
+ width="30%"
661
+ @close="closecharge">
662
+ <div class="SMSnoticeStyle">
663
+ <el-select
664
+ v-model="isImageService"
665
+ clearable
666
+ placeholder="收费状态"
667
+ class="filter-item"
668
+ style="width: 100%">
669
+ <el-option
670
+ v-for="item in dict.dataCharge_status"
671
+ :key="item.value"
672
+ :label="item.label"
673
+ :value="item.value" />
674
+ </el-select>
675
+ <div class="warningStyle">
676
+ <div>
677
+ <i class="el-icon-warning warning-icon"
678
+ >修改收费状态可能会导致收费数据不一致,请谨慎修改!</i
679
+ >
680
+ </div>
681
+ </div>
682
+ </div>
683
+ <span slot="footer" class="dialog-footer">
684
+ <el-button size="small" @click="closecharge">取 消</el-button>
685
+ <el-button size="small" type="primary" @click="updateIsImageService">确 定</el-button>
686
+ </span>
687
+ </el-dialog>
688
+ <el-dialog title="验证手机" :visible.sync="validateShow" width="400px" @close="closeValidate">
689
+ <div class="phone-box">
690
+ <el-form
691
+ :inline="true"
692
+ :model="validateForm"
693
+ class="form-inline-hospital"
694
+ size="small"
695
+ ref="validateForm"
696
+ :rules="rules"
697
+ label-position="right"
698
+ label-width="100px">
699
+ <el-form-item prop="mobilePhone" label="手机号">
700
+ <el-input
701
+ v-model="validateForm.mobilePhone"
702
+ type="text"
703
+ auto-complete="off"
704
+ placeholder="请输入手机号"
705
+ disabled>
706
+ </el-input>
707
+ </el-form-item>
708
+ <el-form-item prop="code" label="验证码" style="width: 100%">
709
+ <el-input
710
+ v-model="validateForm.code"
711
+ type="text"
712
+ auto-complete="off"
713
+ placeholder="请输入验证码"
714
+ style="width: 58%">
715
+ </el-input>
716
+ <el-button
717
+ type="primary"
718
+ :disabled="canClick"
719
+ @click="getCode"
720
+ size="small"
721
+ style="width: 40%"
722
+ >{{ btnText }}</el-button
723
+ >
724
+ </el-form-item>
725
+ </el-form>
726
+ </div>
727
+ <span slot="footer" class="dialog-footer">
728
+ <el-button size="small" @click="closeValidate">取 消</el-button>
729
+ <el-button size="small" :loading="downloadLoading" type="primary" @click="sureExport"
730
+ >确 定</el-button
731
+ >
732
+ </span>
733
+ </el-dialog>
734
+ <!-- 电子报告 -->
735
+ <el-dialog
736
+ :visible.sync="imageReportShow"
737
+ custom-class="report-dialog"
738
+ top="5vh"
739
+ width="70%"
740
+ @close="closeReport">
741
+ <span slot="title" class="dialog-footer">
742
+ <span>{{ imageTitle }}</span>
743
+ </span>
744
+ <div class="checkReportImage">
745
+ <el-image
746
+ v-if="imageArray.length > 0"
747
+ :src="currentImage"
748
+ :preview-src-list="[currentImage]">
749
+ </el-image>
750
+
751
+ <p v-else>{{ loadingText }}</p>
752
+ </div>
753
+ <span slot="footer" class="dialog-footer">
754
+ <div class="footer-left">
755
+ <el-button @click="prevImage" :disabled="currentIndex === 1">上一页</el-button>
756
+ <p>
757
+ <span>{{ currentIndex }}</span
758
+ >/{{ imageArray.length }}
759
+ </p>
760
+ <el-button @click="nextImage" :disabled="currentIndex === imageArray.length">
761
+ 下一页
762
+ </el-button>
763
+ </div>
764
+
765
+ <el-button size="small" type="primary" @click="deleteImage">删除</el-button>
766
+ </span>
767
+ </el-dialog>
768
+ <!-- 导出日志 -->
769
+ <el-dialog
770
+ :visible.sync="exportLogShow"
771
+ custom-class="report-dialog"
772
+ top="5vh"
773
+ width="70%"
774
+ @close="closeExportLog"
775
+ title="导出日志详情">
776
+ <export-list />
777
+ </el-dialog>
778
+ </div>
779
+ </template>
780
+
781
+ <script>
782
+ import { getDay } from '@/utils/getTime';
783
+ import { mapGetters } from 'vuex';
784
+ import { downloadFile } from '@/utils/index';
785
+ import { download } from '@/api/data';
786
+ const start = getDay(-6) + ' 00:00:00';
787
+ const end = getDay(0) + ' 23:59:59';
788
+ import exportList from './exportList.vue';
789
+
790
+ import crudDataAchive, {
791
+ getHospital,
792
+ getNewScanString,
793
+ updateOssStatus,
794
+ viewImage,
795
+ modifyUrlKey,
796
+ deletePatients,
797
+ operateDonwnLoad,
798
+ updatePatientInfo,
799
+ echoPatientInfo,
800
+ sendMessage,
801
+ sendMsgCode,
802
+ updateIsImageService,
803
+ getTypesettingFilmInfo,
804
+ checkExistByOriginalReport,
805
+ getReportStream,
806
+ retrieveTypesettingFilm,
807
+ removeTypesettingFilm,
808
+ removeApplyOrReportFile,
809
+ } from '@/api/dataArchive/index';
810
+ // import { validatePhone, validateIdNo } from "@/utils/validate";
811
+ import IconSelect from '@/components/IconSelect';
812
+ import Treeselect from '@riophae/vue-treeselect';
813
+ import '@riophae/vue-treeselect/dist/vue-treeselect.css';
814
+ import CRUD, { presenter, header, form, crud } from '@crud/crud';
815
+ import rrOperation from '@crud/RR.operation';
816
+ import crudOperation from '@crud/CRUD.operation';
817
+ import udOperation from '@crud/UD.operation';
818
+ import DateRangePicker from '@/components/DateRangePicker';
819
+ import pagination from '@crud/Pagination';
820
+ import delTable from '@/views/dataArchive/delTable.vue';
821
+ import QRCode from 'qrcodejs2';
822
+ import Clipboard from 'clipboard';
823
+ import institutionMonitor from '@/api/institutionMonitor/index';
824
+
825
+ const defaultForm = {
826
+ id: null,
827
+ name: '',
828
+ url: '',
829
+ parentId: null,
830
+ type: '',
831
+ radio: '',
832
+ isDeleted: '',
833
+ };
834
+ export default {
835
+ name: 'dataArchive',
836
+ components: {
837
+ Treeselect,
838
+ IconSelect,
839
+ crudOperation,
840
+ rrOperation,
841
+ udOperation,
842
+ DateRangePicker,
843
+ pagination,
844
+ delTable,
845
+ QRCode,
846
+ exportList,
847
+ },
848
+ cruds() {
849
+ return CRUD({
850
+ title: '接口',
851
+ url: '/patient/queryPatientList',
852
+ sort: '',
853
+ crudMethod: { ...crudDataAchive },
854
+ query: {
855
+ checkTime: [start, end],
856
+ },
857
+ optShow: {
858
+ add: false,
859
+ reset: true,
860
+ },
861
+ page: {
862
+ page: 0,
863
+ size: 10,
864
+ total: 0,
865
+ sizes: [10, 20, 30, 40, 50, 100, 1000],
866
+ },
867
+ });
868
+ },
869
+ mixins: [presenter(), header(), form(defaultForm), crud()],
870
+ dicts: ['isOss_status', 'is_oss', 'dataCharge_status'],
871
+ data() {
872
+ var _this = this;
873
+ /* 是否手机号码*/
874
+ function validatePhone(rule, value, callback) {
875
+ const reg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
876
+ if (!value && !_this.form.mobilePhone) {
877
+ callback(new Error('请填写手机号'));
878
+ } else if (!reg.test(value) && value !== '') {
879
+ callback(new Error('请输入正确的手机号'));
880
+ } else {
881
+ callback();
882
+ // _this.$refs['form'].clearValidate()
883
+ if (_this.$refs['form']) _this.$refs['form'].validateField();
884
+ }
885
+ }
886
+ function validateIdNo(rule, value, callback) {
887
+ const reg =
888
+ /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
889
+ if (!value && !_this.form.idCardNo) {
890
+ callback(new Error('请填写身份证号'));
891
+ } else if (!reg.test(value) && value) {
892
+ callback(new Error('请输入正确的身份证号码'));
893
+ } else {
894
+ callback();
895
+ // _this.$refs['form'].clearValidate('mobilePhone')
896
+ if (_this.$refs['form']) _this.$refs['form'].validateField();
897
+ }
898
+ }
899
+ return {
900
+ waterMarkProp: {
901
+ zIndex: 1,
902
+ devicePixelRatio: 2,
903
+ text: '',
904
+ showTime: true,
905
+ },
906
+ menus: [],
907
+ props: {
908
+ value: 'value',
909
+ children: 'cities',
910
+ label: 'label',
911
+ checkStrictly: true,
912
+ },
913
+ fixedDivHeight: 0,
914
+ tableHeight: 0,
915
+ sidebarWidth: 0,
916
+ permission: {
917
+ delList: ['admin', 'datas:dellist'],
918
+ editUrlKey: ['admin', 'datas:editurlKey'],
919
+ editImageStatus: ['admin', 'datas:editImageStatus'],
920
+ del: ['admin', 'datas:del'],
921
+ downLoad: ['admin', 'datas:downLoad'],
922
+ editInfo: ['admin', 'datas:editInfo'],
923
+ SMSnotice: ['admin', 'datas:SMSnotice'],
924
+ export: ['admin', 'datas:export'],
925
+ editCostStatus: ['admin', 'datas:editCostStatus'],
926
+ },
927
+ rules: {
928
+ urlKey: [{ required: true, message: '请输入urlKey', trigger: 'blur' }],
929
+ patientName: [{ required: true, message: '请输入患者姓名', trigger: 'blur' }],
930
+ mobilePhone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
931
+ idCardNo: [
932
+ {
933
+ required: true,
934
+ trigger: 'blur',
935
+ validator: validateIdNo,
936
+ },
937
+ ],
938
+ //
939
+ code: [{ required: true, message: '请输入', trigger: 'blur' }],
940
+ },
941
+ provinceList: [],
942
+ tableHeader: [
943
+ { label: '患者编号', prop: 'patientId', width: '140', isShow: true },
944
+ {
945
+ label: '检查编号',
946
+ prop: 'accessNumber',
947
+ width: '140',
948
+ sortable: false,
949
+ isShow: true,
950
+ },
951
+ {
952
+ label: '患者姓名',
953
+ prop: 'patientName',
954
+ width: '80',
955
+ sortable: false,
956
+ isShow: true,
957
+ },
958
+ {
959
+ label: 'studyUid ',
960
+ prop: 'studyUid',
961
+ width: '100',
962
+ sortable: false,
963
+ isShow: true,
964
+ },
965
+ {
966
+ label: '身份证号',
967
+ prop: 'idCardNo',
968
+ width: '130',
969
+ sortable: false,
970
+ isShow: true,
971
+ },
972
+ {
973
+ label: '性别',
974
+ prop: 'patientSex',
975
+ width: '80',
976
+ sortable: false,
977
+ isShow: true,
978
+ },
979
+ {
980
+ label: '年龄',
981
+ prop: 'patientAge',
982
+ width: '80',
983
+ sortable: false,
984
+ isShow: true,
985
+ },
986
+ {
987
+ label: '图像数量',
988
+ prop: 'imageCount',
989
+ width: '80',
990
+ sortable: false,
991
+ isShow: true,
992
+ },
993
+ {
994
+ label: '检查模式',
995
+ prop: 'modality',
996
+ width: '120',
997
+ sortable: false,
998
+ isShow: true,
999
+ },
1000
+ {
1001
+ label: '检查部位',
1002
+ prop: 'examBodyPart',
1003
+ width: '140',
1004
+ sortable: false,
1005
+ isShow: true,
1006
+ },
1007
+ {
1008
+ label: '检查项目',
1009
+ prop: 'examItemName',
1010
+ width: '140',
1011
+ sortable: false,
1012
+ isShow: true,
1013
+ },
1014
+ {
1015
+ label: '检查项目编码',
1016
+ prop: 'examItemCode',
1017
+ width: '140',
1018
+ sortable: false,
1019
+ isShow: true,
1020
+ },
1021
+ {
1022
+ label: '标准检查项目',
1023
+ prop: 'standardProjectName',
1024
+ width: '140',
1025
+ sortable: false,
1026
+ isShow: true,
1027
+ },
1028
+ {
1029
+ label: '标准检查项目编码',
1030
+ prop: 'standardProjectCode',
1031
+ width: '140',
1032
+ sortable: false,
1033
+ isShow: true,
1034
+ },
1035
+ {
1036
+ label: '申请单ID',
1037
+ prop: 'applicationId',
1038
+ width: '140',
1039
+ sortable: false,
1040
+ isShow: true,
1041
+ },
1042
+ {
1043
+ label: '检查医嘱ID',
1044
+ prop: 'studyOrderId',
1045
+ width: '140',
1046
+ sortable: false,
1047
+ isShow: true,
1048
+ },
1049
+ {
1050
+ label: '检查时间',
1051
+ prop: 'patientCheckDate',
1052
+ width: '180',
1053
+ sortable: false,
1054
+ isShow: true,
1055
+ },
1056
+ {
1057
+ label: '检查机构',
1058
+ prop: 'applyHospitalName',
1059
+ width: '140',
1060
+ sortable: false,
1061
+ isShow: true,
1062
+ },
1063
+ {
1064
+ label: '数字影像服务费',
1065
+ prop: 'isImageService',
1066
+ width: '160',
1067
+ sortable: false,
1068
+ isShow: false,
1069
+ },
1070
+ {
1071
+ label: '住院号',
1072
+ prop: 'hospitalizedNo',
1073
+ width: '140',
1074
+ sortable: false,
1075
+ isShow: true,
1076
+ },
1077
+ {
1078
+ label: '就诊卡号',
1079
+ prop: 'healthCardNo',
1080
+ width: '140',
1081
+ sortable: false,
1082
+ isShow: true,
1083
+ },
1084
+ {
1085
+ label: 'urlKey',
1086
+ prop: 'urlKey',
1087
+ width: '80',
1088
+ sortable: false,
1089
+ isShow: true,
1090
+ },
1091
+ {
1092
+ label: '数字影像服务费',
1093
+ prop: 'isImageService',
1094
+ width: '100',
1095
+ sortable: false,
1096
+ isShow: false,
1097
+ },
1098
+ ],
1099
+ options: [],
1100
+ sysList: [],
1101
+ partherOptions: [],
1102
+ dataArchiveVisible: false,
1103
+ showReport: false,
1104
+ showQRCode: false,
1105
+ showUrlKey: false,
1106
+ currentRow: {},
1107
+ qrcode: '', //生成的二维码
1108
+ loading: false,
1109
+ empty: '---',
1110
+ multiSelection: [],
1111
+ ruleForm: {
1112
+ urlKey: '',
1113
+ },
1114
+ delTableShow: false,
1115
+ imageRuleForm: {
1116
+ imageState: '',
1117
+ },
1118
+ imageRuleRules: {
1119
+ imageState: [{ required: true, message: '请选择看图状态', trigger: 'change' }],
1120
+ },
1121
+ visible: false,
1122
+ // 控制修改弹窗
1123
+ updateInfoShow: false,
1124
+ downLoadShow: false,
1125
+ // 存储修改的手机号和身份证
1126
+ form: {
1127
+ mobilePhone: '',
1128
+ idCardNo: '',
1129
+ patientName: '',
1130
+ examItemCode: '',
1131
+ },
1132
+ // 存储选中那条数据
1133
+ clickRow: {},
1134
+ pramsUrl: {},
1135
+ SMSnoticeShow: false,
1136
+ SMSnoticeObj: {},
1137
+ tableShowHeight: 0,
1138
+ crudShow: false,
1139
+ // 收费弹窗
1140
+ chargeStatusShow: false,
1141
+ isImageService: '',
1142
+ // 验证手机,验证码
1143
+ validateShow: false,
1144
+ validateForm: {
1145
+ mobilePhone: '',
1146
+ code: '',
1147
+ },
1148
+ // 查看胶片报告
1149
+
1150
+ imageReportShow: false,
1151
+ currentIndex: 1,
1152
+ imageTitle: '电子报告',
1153
+ imageArray: [],
1154
+ // 导出日志
1155
+ exportLogShow: false,
1156
+ downloadLoading: false,
1157
+ loadingText: '加载中',
1158
+ canClick: false,
1159
+ totalTime: 60,
1160
+ btnText: '获取验证码',
1161
+ timer: null,
1162
+ // viewer: null,
1163
+ };
1164
+ },
1165
+ created() {
1166
+ this.getHospital();
1167
+ },
1168
+ mounted() {
1169
+ this.$nextTick(() => {
1170
+ this.fixedDivHeight = this.$refs.fixedDiv.clientHeight - 25;
1171
+ this.tableHeight = this.$refs.dataArchiveContainer.clientHeight - 280;
1172
+ window.addEventListener('resize', () => {
1173
+ this.fixedDivHeight = this.$refs.fixedDiv.clientHeight - 25;
1174
+ });
1175
+ this.waterMarkProp.text = this.user.name;
1176
+ });
1177
+ },
1178
+ computed: {
1179
+ ...mapGetters(['user', 'sidebar']),
1180
+ bindTableColumns() {
1181
+ return this.tableHeader.filter(column => column.isShow);
1182
+ },
1183
+ currentImage() {
1184
+ console.log(this.currentIndex - 1);
1185
+ return this.imageArray[this.currentIndex - 1].url;
1186
+ },
1187
+ },
1188
+ methods: {
1189
+ clear(async) {
1190
+ this.$nextTick(() => {
1191
+ if (!async) {
1192
+ // ios 手机有延迟问题
1193
+ setTimeout(() => {
1194
+ const { select } = this.$refs;
1195
+ const input = select.$el.querySelector('.el-input__inner');
1196
+ input.removeAttribute('readonly');
1197
+ }, 200);
1198
+ }
1199
+ });
1200
+ },
1201
+
1202
+ // 地区联动获取数据
1203
+ getPosition(val, cb) {
1204
+ let vm = this; //查询省市县
1205
+ let params = { parent: 1 };
1206
+ if (!val) {
1207
+ //初始化加载 获取所有省份数据
1208
+ params = { parent: 1 };
1209
+ } else if (val.length === 1) {
1210
+ //加载二级 获取市级数据
1211
+ params = { parent: val[0] };
1212
+ } else {
1213
+ //加载3级 获取县级数据
1214
+ params = { parent: val[1] };
1215
+ }
1216
+ institutionMonitor
1217
+ .queryNation(params)
1218
+ .then(res => {
1219
+ if (!val) {
1220
+ //初始化加载 查询省份数据
1221
+ vm.provinceList = res.content.map(e => {
1222
+ return {
1223
+ value: e.saleid,
1224
+ label: e.province,
1225
+ cities: [],
1226
+ };
1227
+ });
1228
+ } else if (val.length === 1) {
1229
+ //加载二级 查询该省下市级数据
1230
+ vm.provinceList.map(item => {
1231
+ if (item.value === val[0]) {
1232
+ item.cities = res.content.map(e => {
1233
+ return {
1234
+ value: e.saleid,
1235
+ label: e.city || e.county,
1236
+ cities: [],
1237
+ };
1238
+ });
1239
+ }
1240
+ });
1241
+ } else {
1242
+ //加载3级 查询该省市下县级数据
1243
+ vm.provinceList.map(item => {
1244
+ if (item.value === val[0]) {
1245
+ item.cities.map(value => {
1246
+ if (value.value === val[1]) {
1247
+ value.cities = res.content.map(e => {
1248
+ return { value: e.saleid, label: e.county };
1249
+ });
1250
+ }
1251
+ });
1252
+ }
1253
+ });
1254
+ }
1255
+ cb && cb(res);
1256
+ })
1257
+ .catch(err => {
1258
+ console.log(err);
1259
+ });
1260
+ },
1261
+ // 一级二级改变的时候调取下一级数据
1262
+ handleItemChange(val) {
1263
+ this.getPosition(val);
1264
+ },
1265
+ addressChange() {
1266
+ if (this.query.address.length > 0) {
1267
+ this.query.province = this.query.address[0];
1268
+ this.query.city = this.query.address[1];
1269
+ this.query.district = this.query.address[2];
1270
+ } else {
1271
+ this.query.province = '';
1272
+ this.query.city = '';
1273
+ this.query.district = '';
1274
+ }
1275
+ this.crud.toQuery();
1276
+ },
1277
+ forceUpdate() {
1278
+ this.$forceUpdate(); // 强制刷新
1279
+ },
1280
+ // setTableHeight() {
1281
+ // setTimeout(() => {
1282
+ // const dataArchiveContainer = this.$refs.dataArchiveContainer;
1283
+ // const dataArchiveTable = this.$refs.dataArchiveTable;
1284
+ // this.tableShowHeight =
1285
+ // dataArchiveContainer.clientHeight -
1286
+ // (dataArchiveTable.offsetTop - dataArchiveContainer.offsetTop) -
1287
+ // 30;
1288
+ // }, 1000);
1289
+ // },
1290
+ getUpdate(row) {
1291
+ this.clickRow = row;
1292
+ echoPatientInfo(encodeURIComponent(row.id)).then(res => {
1293
+ this.form.mobilePhone = res.mobilePhone;
1294
+ this.form.idCardNo = res.idCardNo;
1295
+ this.form.patientName = res.patientName;
1296
+ this.form.examItemCode = res.examItemCode;
1297
+ });
1298
+
1299
+ this.updateInfoShow = true;
1300
+ },
1301
+ sureUpdate() {
1302
+ this.$refs.form.validate(valid => {
1303
+ console.log(valid, this.$refs.form, 'valid');
1304
+ if (!valid) return false;
1305
+ let data = {
1306
+ ...this.form,
1307
+ userName: this.user.username,
1308
+ accessNumber: this.clickRow.accessNumber,
1309
+ hospitalId: this.clickRow.hospitalId,
1310
+ id: this.clickRow.id,
1311
+ studyUid: this.clickRow.studyUid,
1312
+ };
1313
+ updatePatientInfo(data).then(res => {
1314
+ if (res == 'ERROR_MSG') {
1315
+ this.$message.error('身份证不正确,请重新输入');
1316
+ } else {
1317
+ this.$message.success('修改成功');
1318
+ this.beforeClose();
1319
+ this.crud.toQuery();
1320
+ }
1321
+ });
1322
+ });
1323
+ },
1324
+ operateDonwnLoad(row) {
1325
+ this.downLoadShow = true;
1326
+ operateDonwnLoad(row).then(res => {
1327
+ console.log(res);
1328
+ this.pramsUrl = res;
1329
+ });
1330
+ },
1331
+ btnCopy() {
1332
+ let textUrl = new Clipboard('.btn');
1333
+ console.log(textUrl);
1334
+ textUrl.on('success', e => {
1335
+ console.log(e.action);
1336
+ this.$message('复制成功');
1337
+ textUrl.destroy();
1338
+ });
1339
+ textUrl.on('error', () => {
1340
+ consold.log('没有复制成功');
1341
+ this.$message('没有复制成功');
1342
+ textUrl.destroy();
1343
+ });
1344
+ },
1345
+ openHref() {
1346
+ window.open(`${this.pramsUrl.shortUrl}`, '_blank');
1347
+ },
1348
+ beforeClose() {
1349
+ this.$refs.form.resetFields();
1350
+ this.updateInfoShow = false;
1351
+ },
1352
+ beforeClose1() {
1353
+ this.pramsUrl = {};
1354
+ this.downLoadShow = false;
1355
+ },
1356
+ //重置
1357
+ ResetClick() {
1358
+ for (let key in this.query) {
1359
+ if (key !== 'checkTime') {
1360
+ this.query[key] = '';
1361
+ }
1362
+ }
1363
+ this.getPosition(null, () => {});
1364
+ this.query.address = [window.config.defaultAddress];
1365
+ this.query.province = this.query.address[0];
1366
+ this.crud.toQuery();
1367
+ },
1368
+ //获取检查机构下拉列表
1369
+ getHospital() {
1370
+ getHospital().then(res => {
1371
+ this.optionsDefault = res.content;
1372
+ this.options = res.content;
1373
+ });
1374
+ },
1375
+ //检查机构筛选
1376
+ remoteMethod(query) {
1377
+ this.options = this.optionsDefault.filter((item, index) => {
1378
+ return item.hospitalName.indexOf(query) !== -1;
1379
+ });
1380
+ },
1381
+
1382
+ handleClose() {
1383
+ this.dataArchiveVisible = false;
1384
+ },
1385
+ getRowKeys(row) {
1386
+ return row.id;
1387
+ },
1388
+
1389
+ //无校验二维码
1390
+ showQRCodeDetail(row) {
1391
+ this.$nextTick(res => {
1392
+ this.showReport = false;
1393
+ this.showQRCode = true;
1394
+ this.showUrlKey = false;
1395
+ let data = {
1396
+ hospitalId: row.hospitalId,
1397
+ applyHospitalId: row.applyHospitalId,
1398
+ accessNumber: row.accessNumber,
1399
+ };
1400
+
1401
+ getNewScanString(data).then(res => {
1402
+ this.scanString = res;
1403
+ if (this.showQRCode) {
1404
+ this.dataArchiveVisible = true;
1405
+ }
1406
+ });
1407
+ });
1408
+ },
1409
+ //查看报告
1410
+ showReportDetail() {
1411
+ this.dataArchiveVisible = true;
1412
+ this.showReport = true;
1413
+ this.showQRCode = false;
1414
+ this.showUrlKey = false;
1415
+ },
1416
+ //删除记录
1417
+ delRecordsShow() {
1418
+ this.dataArchiveVisible = true;
1419
+ this.showReport = false;
1420
+ this.showQRCode = false;
1421
+ this.showUrlKey = false;
1422
+ this.delTableShow = true;
1423
+ },
1424
+ //删除按钮
1425
+ delAction() {
1426
+ if (this.multiSelection.length == 0) {
1427
+ return this.$message.info('请至少选择一条数据!');
1428
+ }
1429
+ this.$confirm('删除后云端将无此数据,是否删除?', '提示', {
1430
+ confirmButtonText: '确定',
1431
+ cancelButtonText: '取消',
1432
+ type: 'warning',
1433
+ })
1434
+ .then(() => {
1435
+ let ids = [];
1436
+ this.multiSelection.forEach((item, index) => {
1437
+ ids.push(item.id);
1438
+ });
1439
+ // this.$store.state.user.username
1440
+ // console.log(this.user.username,'this.user.username')
1441
+ let data = {
1442
+ ids: ids,
1443
+ loginName: this.user.username,
1444
+ };
1445
+ deletePatients(data).then(res => {
1446
+ console.log(res);
1447
+ if (res == undefined) {
1448
+ this.crud.toQuery();
1449
+ this.$message({
1450
+ type: 'success',
1451
+ message: '删除成功!',
1452
+ });
1453
+ }
1454
+ });
1455
+ })
1456
+ .catch(() => {});
1457
+ },
1458
+ updateIsImageService() {
1459
+ let ids = [];
1460
+ this.multiSelection.forEach((item, index) => {
1461
+ ids.push(item.id);
1462
+ });
1463
+ let data = {
1464
+ ids,
1465
+ isImageService: this.isImageService,
1466
+ };
1467
+ console.log(data);
1468
+ updateIsImageService(data)
1469
+ .then(res => {
1470
+ this.chargeStatusShow = false;
1471
+ this.crud.toQuery();
1472
+ this.$message({
1473
+ type: 'info',
1474
+ message: '收费状态修改中,稍后查看!',
1475
+ });
1476
+ })
1477
+ .catch(err => {
1478
+ this.chargeStatusShow = false;
1479
+ });
1480
+ },
1481
+ //浏览图像
1482
+ imageBrower(row) {
1483
+ let data = {
1484
+ urlKey: row.urlKey,
1485
+ studyUid: row.studyUid,
1486
+ accessNumber: row.accessNumber,
1487
+ hospitalId: row.hospitalId,
1488
+ };
1489
+ viewImage(data).then(res => {
1490
+ if (res) {
1491
+ window.open(res);
1492
+ }
1493
+ });
1494
+ },
1495
+ SMSnotice(row) {
1496
+ this.SMSnoticeObj = row;
1497
+ this.SMSnoticeShow = true;
1498
+ },
1499
+ submitSMSnotice() {
1500
+ this.$confirm('确定要发送向该手机号的短信通知 ?', '提示', {
1501
+ confirmButtonText: '确定',
1502
+ cancelButtonText: '取消',
1503
+ type: 'warning',
1504
+ }).then(() => {
1505
+ let iphoneRule = /^[1][3,4,5,6.7,8,9][0-9]{9}$/;
1506
+ if (iphoneRule.test(this.SMSnoticeObj.mobilePhone)) {
1507
+ let params = {
1508
+ hospitalId: this.SMSnoticeObj.hospitalId,
1509
+ accessNumber: this.SMSnoticeObj.accessNumber,
1510
+ applyHospitalName: this.SMSnoticeObj.applyHospitalName,
1511
+ mobilePhone: this.SMSnoticeObj.mobilePhone,
1512
+ patientName: this.SMSnoticeObj.patientName,
1513
+ modality: this.SMSnoticeObj.modality,
1514
+ };
1515
+ sendMessage(params)
1516
+ .then(res => {
1517
+ this.$message.success('发送成功');
1518
+ this.closeSMS();
1519
+ })
1520
+ .catch(err => {});
1521
+ } else {
1522
+ this.$message.warning('该编号手机号码有误,无法发送短信通知');
1523
+ }
1524
+ });
1525
+ },
1526
+ closeSMS() {
1527
+ this.SMSnoticeShow = false;
1528
+ },
1529
+ closecharge() {
1530
+ this.chargeStatusShow = false;
1531
+ },
1532
+ exportExcel(row) {
1533
+ if (!this.query.hosId) {
1534
+ return this.$message.info('请选择一家机构!');
1535
+ }
1536
+ this.validateShow = true;
1537
+ this.validateForm.mobilePhone = this.user.phone;
1538
+ },
1539
+ closeValidate() {
1540
+ this.$refs.validateForm.resetFields();
1541
+ window.clearInterval(this.timer);
1542
+ this.btnText = '获取验证码';
1543
+ this.totalTime = 60;
1544
+ this.canClick = false;
1545
+ this.validateShow = false;
1546
+ },
1547
+ checkReport(row, status) {
1548
+ if (status == 1) {
1549
+ this.imageTitle = '电子报告';
1550
+ this.getReport(row);
1551
+ } else {
1552
+ this.imageTitle = '电子胶片';
1553
+ this.getImagefilm(row);
1554
+ }
1555
+ },
1556
+ getReport(row) {
1557
+ let data = {
1558
+ hospitalId: row.hospitalId,
1559
+ accessNumber: row.accessNumber,
1560
+ };
1561
+ checkExistByOriginalReport(data).then(res => {
1562
+ let array = [];
1563
+ if (res.length == 0) return this.$message.info('暂无电子报告');
1564
+ this.imageReportShow = true;
1565
+ res.forEach(item => {
1566
+ let data = {
1567
+ accessNumber: item.accessNumber,
1568
+ hospitalId: item.hospitalId,
1569
+ formType: item.formType,
1570
+ };
1571
+ // let image = `${window.config.baseUrl}/patient/retrieveTypesettingFilm`;
1572
+ getReportStream(data)
1573
+ .then(result => {})
1574
+ .catch(result => {
1575
+ let blob = new Blob([result], { type: 'image/png' }); // 创建一个Blob对象,并指定文件类型
1576
+ let imageUrl = URL.createObjectURL(blob);
1577
+ let params = {
1578
+ ...data,
1579
+ url: imageUrl,
1580
+ };
1581
+ array.push(params);
1582
+ });
1583
+ });
1584
+ this.imageArray = array;
1585
+ console.log(this.imageArray);
1586
+ });
1587
+ },
1588
+ // // 预览图片
1589
+ // previewImage() {
1590
+ // if (!this.viewer) {
1591
+ // console.log(this.$el.querySelector("img"));
1592
+ // this.viewer = new Viewer(this.$el.querySelector("img"), {
1593
+ // // 可以根据需要设置viewer的配置选项
1594
+ // });
1595
+ // this.viewer.show();
1596
+ // } else {
1597
+ // this.viewer.show();
1598
+ // }
1599
+ // },
1600
+ getImagefilm(row) {
1601
+ let data = {
1602
+ hospitalId: row.hospitalId,
1603
+ accessNumber: row.accessNumber,
1604
+ };
1605
+ getTypesettingFilmInfo(data).then(res => {
1606
+ let array = [];
1607
+ if (res.content.length == 0) return this.$message.info('暂无电子胶片');
1608
+ this.imageReportShow = true;
1609
+
1610
+ res.content.forEach(item => {
1611
+ let data = {
1612
+ accessNumber: item.accessNumber,
1613
+ hospitalId: item.hospitalId,
1614
+ typesettingFilmFileId: item.typesettingFilmFileId,
1615
+ contentType: 'image/jpeg',
1616
+ };
1617
+ // let image = `${window.config.baseUrl}/patient/retrieveTypesettingFilm`;
1618
+ retrieveTypesettingFilm(data)
1619
+ .then(result => {})
1620
+ .catch(result => {
1621
+ let blob = new Blob([result], { type: 'image/png' }); // 创建一个Blob对象,并指定文件类型
1622
+ let imageUrl = URL.createObjectURL(blob);
1623
+ let params = {
1624
+ ...data,
1625
+ url: imageUrl,
1626
+ };
1627
+ array.push(params);
1628
+ });
1629
+ });
1630
+ this.imageArray = array;
1631
+ console.log(this.imageArray);
1632
+ });
1633
+ },
1634
+ closeReport() {
1635
+ this.imageReportShow = false;
1636
+ this.currentIndex = 1;
1637
+ this.imageArray = [];
1638
+ this.loadingText = '加载中';
1639
+ },
1640
+ prevImage() {
1641
+ if (this.currentIndex > 0) {
1642
+ this.currentIndex--;
1643
+ }
1644
+ },
1645
+ exportLog() {
1646
+ this.exportLogShow = true;
1647
+ },
1648
+ closeExportLog() {
1649
+ this.exportLogShow = false;
1650
+ },
1651
+ deleteImage() {
1652
+ if (this.imageArray.length == 0) return this.$message.info('没有数据可删除');
1653
+ this.$confirm('此操作将删除该条数据,是否继续?', '提示', {
1654
+ confirmButtonText: '确定',
1655
+ cancelButtonText: '取消',
1656
+ type: 'warning',
1657
+ }).then(() => {
1658
+ if (this.imageTitle == '电子报告') {
1659
+ removeApplyOrReportFile(this.imageArray[this.currentIndex - 1]).then(res => {
1660
+ this.$message.success('删除成功');
1661
+ this.imageArray.splice(this.currentIndex - 1, 1);
1662
+ if (this.currentIndex >= this.imageArray.length) {
1663
+ this.currentIndex = this.imageArray.length;
1664
+ }
1665
+ if (this.imageArray.length == 0) this.closeReport();
1666
+ });
1667
+ } else {
1668
+ removeTypesettingFilm(this.imageArray[this.currentIndex - 1]).then(res => {
1669
+ this.$message.success('删除成功');
1670
+ this.imageArray.splice(this.currentIndex - 1, 1);
1671
+ if (this.currentIndex >= this.imageArray.length) {
1672
+ this.currentIndex = this.imageArray.length;
1673
+ }
1674
+ if (this.imageArray.length == 0) this.closeReport();
1675
+ });
1676
+ }
1677
+ });
1678
+ },
1679
+ nextImage() {
1680
+ if (this.currentIndex < this.imageArray.length) {
1681
+ this.currentIndex++;
1682
+ }
1683
+ },
1684
+ //获取图像
1685
+ getImage(row) {
1686
+ this.$message.warning('开始获取,请稍后手动刷新页面查看');
1687
+ updateOssStatus(row.id).then(res => {
1688
+ this.crud.toQuery();
1689
+ });
1690
+ },
1691
+ validateBtn() {
1692
+ console.log(this.dict.isOss_status);
1693
+ this.$refs.imageRuleForm.validate(valid => {
1694
+ if (valid) {
1695
+ this.visible = true;
1696
+ } else {
1697
+ this.visible = false;
1698
+ return false;
1699
+ }
1700
+ });
1701
+ },
1702
+ // 获取验证码
1703
+ getCode() {
1704
+ let _this = this;
1705
+ if (this.canClick) return;
1706
+ this.canClick = true;
1707
+ sendMsgCode({
1708
+ telNum: this.validateForm.mobilePhone,
1709
+ }).then(res => {});
1710
+ this.btnText = this.totalTime + 's后重新发送';
1711
+ this.timer = window.setInterval(() => {
1712
+ this.totalTime--;
1713
+ this.btnText = this.totalTime + 's后重新发送';
1714
+ if (this.totalTime < 0) {
1715
+ window.clearInterval(_this.timer);
1716
+ this.btnText = '重新获取验证码';
1717
+ this.totalTime = 60;
1718
+ this.canClick = false;
1719
+ }
1720
+ }, 1000);
1721
+ },
1722
+ sureExport() {
1723
+ let _this = this;
1724
+ this.$refs.validateForm.validate(valid => {
1725
+ if (!valid) return false;
1726
+ this.downloadLoading = true;
1727
+ let query = {
1728
+ ...this.query,
1729
+ telNum: this.validateForm.mobilePhone,
1730
+ code: this.validateForm.code,
1731
+ };
1732
+ download('patient/exprotQueryPatient', query)
1733
+ .then(result => {
1734
+ this.downloadLoading = false;
1735
+ })
1736
+ .catch(e => {
1737
+ console.log(e);
1738
+ const reader = new FileReader();
1739
+ // 设置读取完成后的回调函数
1740
+ reader.onload = function (event) {
1741
+ const jsonText = event.target.result; // 获取读取的结果(JSON 字符串)
1742
+ console.log(jsonText.includes('code'));
1743
+
1744
+ if (jsonText.includes('code')) {
1745
+ let data = JSON.parse(jsonText);
1746
+ _this.$message.error(data.message);
1747
+ } else {
1748
+ downloadFile(e, '归档数据', 'xlsx');
1749
+ _this.validateShow = false;
1750
+ }
1751
+ };
1752
+ reader.readAsText(e);
1753
+ // downloadFile(e, "归档数据", "xlsx");
1754
+ this.downloadLoading = false;
1755
+ });
1756
+ });
1757
+ },
1758
+ //修改url Key
1759
+ editUrlKey() {
1760
+ if (this.multiSelection.length == 0) {
1761
+ return this.$message.info('请至少选择一条数据!');
1762
+ }
1763
+ // 不同的UrlKey 给出提示
1764
+ let urlKeyList = [];
1765
+ this.multiSelection.forEach((item, index) => {
1766
+ urlKeyList.push(item.urlKey);
1767
+ });
1768
+ let urlKeyFilterList = new Set(urlKeyList);
1769
+ urlKeyFilterList = Array.from(urlKeyFilterList);
1770
+ console.log(urlKeyFilterList, urlKeyList);
1771
+ if (this.multiSelection.length !== 1 && urlKeyList.length == urlKeyFilterList.length) {
1772
+ return this.$message.warning('请选择urlKey值相同的数据!');
1773
+ }
1774
+ this.ruleForm.urlKey = this.multiSelection[0].urlKey;
1775
+ this.dataArchiveVisible = true;
1776
+ this.showReport = false;
1777
+ this.showQRCode = false;
1778
+ this.showUrlKey = true;
1779
+ },
1780
+ //dialog 确定按钮
1781
+ dialogSubmit() {
1782
+ this.$refs.ruleForm.validate(valid => {
1783
+ if (valid) {
1784
+ if (this.showUrlKey) {
1785
+ let ids = [];
1786
+ this.multiSelection.forEach((item, index) => {
1787
+ ids.push(item.id);
1788
+ });
1789
+ let data = {
1790
+ ids: ids,
1791
+ urlKey: this.ruleForm.urlKey,
1792
+ };
1793
+ modifyUrlKey(data).then(res => {
1794
+ if (res == undefined) {
1795
+ this.dataArchiveVisible = false;
1796
+ this.crud.toQuery();
1797
+ return this.$message.success('修改成功!');
1798
+ }
1799
+ });
1800
+ }
1801
+ }
1802
+ });
1803
+ },
1804
+ handleSelectionChange(val) {
1805
+ console.log('选中多选', val);
1806
+ this.multiSelection = val;
1807
+ },
1808
+ // 新增与编辑前做的操作
1809
+ [CRUD.HOOK.afterToCU](crud, form) {},
1810
+ [CRUD.HOOK.beforeRefresh](crud, form) {
1811
+ if (!this.crudShow) {
1812
+ this.getPosition(null, () => {});
1813
+ this.query.address = [window.config.defaultAddress];
1814
+ this.query.province = this.query.address[0];
1815
+
1816
+ this.crudShow = true;
1817
+ }
1818
+ },
1819
+ [CRUD.HOOK.afterRefresh](crud, form) {
1820
+ crud.data.forEach(tmp => {
1821
+ if (tmp.standardProjectCode) tmp.standardProjectCode = tmp.standardProjectCode.split(',');
1822
+ if (tmp.standardProjectName) tmp.standardProjectName = tmp.standardProjectName.split(',');
1823
+ if (tmp.examItemCode) tmp.examItemCode = tmp.examItemCode.split(',');
1824
+ if (tmp.examItemName) tmp.examItemName = tmp.examItemName.split(',');
1825
+ });
1826
+ },
1827
+ //弹出框打开
1828
+ dialogOpen() {},
1829
+ //关闭弹出框
1830
+ dialogClose() {
1831
+ this.delTableShow = false;
1832
+ this.scanString = [];
1833
+ if (document.getElementById('qrcodeDom')) {
1834
+ document.getElementById('qrcodeDom').innerHTML = '';
1835
+ }
1836
+ },
1837
+ // 选中图标
1838
+ selected(name) {
1839
+ this.form.icon = name;
1840
+ },
1841
+
1842
+ //获取当前数据
1843
+ handleCurrentChange(val) {
1844
+ this.currentRow = val;
1845
+ console.log(this.currentRow, 'val', '741');
1846
+ },
1847
+ //生成二维码
1848
+ transQrcode() {
1849
+ this.$nextTick(() => {
1850
+ this.qrcode = new QRCode('qrcodeDom', {
1851
+ widht: 250,
1852
+ height: 250,
1853
+ text: this.scanString,
1854
+ });
1855
+ });
1856
+ },
1857
+ inkured() {
1858
+ this.$nextTick(() => {
1859
+ this.$refs.multipleTable.doLayout();
1860
+ });
1861
+ },
1862
+ },
1863
+ activated() {
1864
+ this.$nextTick(() => {
1865
+ this.fixedDivHeight = this.$refs.fixedDiv.clientHeight - 25;
1866
+ console.log(this.fixedDivHeight);
1867
+ });
1868
+
1869
+ this.crud.toQuery();
1870
+ },
1871
+ };
1872
+ </script>
1873
+ // App.vue
1874
+ <style lang="scss">
1875
+ // to fix 在ios设备中,el-select组件下拉框,点击2次才能选中问题。
1876
+ .el-scrollbar .el-scrollbar__bar {
1877
+ opacity: 1 !important;
1878
+ }
1879
+ .phone-box {
1880
+ .el-form-item {
1881
+ width: 100%;
1882
+ .el-form-item__content {
1883
+ width: calc(100% - 100px);
1884
+ }
1885
+ }
1886
+ }
1887
+ .report-dialog {
1888
+ .dialog-footer {
1889
+ display: flex;
1890
+ justify-content: space-between;
1891
+ .footer-left {
1892
+ display: flex;
1893
+ align-items: center;
1894
+ p {
1895
+ margin: 0 15px;
1896
+ span {
1897
+ color: #0089ff;
1898
+ }
1899
+ }
1900
+ }
1901
+ }
1902
+ }
1903
+ .el-dropdown {
1904
+ margin-left: 10px;
1905
+ span {
1906
+ color: #0089ff;
1907
+ }
1908
+ .el-dropdown-menu {
1909
+ display: flex;
1910
+ flex-direction: column;
1911
+ }
1912
+ }
1913
+ </style>
1914
+ <style rel="stylesheet/scss" lang="scss" scoped>
1915
+ .app-container {
1916
+ display: flex;
1917
+ flex-direction: column;
1918
+ border: 1px solid #dcdfe6;
1919
+ padding: 8px;
1920
+ }
1921
+ ::v-deep .el-table__fixed-right {
1922
+ height: 100% !important;
1923
+ }
1924
+ ::v-deep .el-dropdown-menu__item {
1925
+ width: 100%;
1926
+ padding: 0;
1927
+ height: auto;
1928
+ .el-button {
1929
+ width: 100%;
1930
+ padding: 0 20px;
1931
+ height: 36px;
1932
+ line-height: 36px;
1933
+ span {
1934
+ display: inline-block;
1935
+ width: 100%;
1936
+ height: 100%;
1937
+ }
1938
+ }
1939
+ }
1940
+ .query-container {
1941
+ background: #fff;
1942
+ // padding: 10px;
1943
+ padding-bottom: 0;
1944
+ }
1945
+ .head-container {
1946
+ // position: fixed;
1947
+ // z-index: 10;
1948
+ // margin: -16px 0 0 -15px;
1949
+ }
1950
+ .box-card {
1951
+ // margin-top: 230px;
1952
+ border: 1px solid #dcdfe6;
1953
+ padding: 15px;
1954
+ }
1955
+ .warning {
1956
+ height: 30px;
1957
+ line-height: 30px;
1958
+ background-color: #f8f9fa;
1959
+ padding: 0 10px;
1960
+ margin-bottom: 10px;
1961
+ span {
1962
+ color: #ff7b35;
1963
+ &:last-child {
1964
+ font-size: 13px;
1965
+ display: inline-block;
1966
+ margin-left: 5px;
1967
+ }
1968
+ }
1969
+ }
1970
+ .download {
1971
+ > div {
1972
+ display: flex;
1973
+ align-items: center;
1974
+ > p {
1975
+ text-align: right;
1976
+ width: 60px;
1977
+ }
1978
+ .hover:hover {
1979
+ color: #0089ff;
1980
+ }
1981
+ &:last-child {
1982
+ margin: 10px 0;
1983
+ }
1984
+ }
1985
+ }
1986
+ ::v-deep .el-input-number .el-input__inner {
1987
+ text-align: left;
1988
+ }
1989
+ ::v-deep .el-button.filter-item {
1990
+ color: #1890ff;
1991
+ border: 1px solid #1890ff;
1992
+ }
1993
+
1994
+ ::v-deep .vue-treeselect__control,
1995
+ ::v-deep .vue-treeselect__placeholder,
1996
+ ::v-deep .vue-treeselect__single-value {
1997
+ height: 30px;
1998
+ line-height: 30px;
1999
+ }
2000
+ ::v-deep.el-form-item {
2001
+ margin-bottom: 16px;
2002
+ }
2003
+ .demo-form-dataArchive {
2004
+ position: relative;
2005
+ background-color: #fff;
2006
+ // z-index: 10;
2007
+ .el-form-item {
2008
+ margin-bottom: 0;
2009
+ }
2010
+ }
2011
+
2012
+ .patientDetail {
2013
+ padding: 10px 0;
2014
+
2015
+ span {
2016
+ color: #606266;
2017
+ font-weight: bold;
2018
+ }
2019
+ }
2020
+
2021
+ .paddingClass {
2022
+ padding: 10px 0;
2023
+ }
2024
+
2025
+ #qrcodeDom {
2026
+ position: relative;
2027
+
2028
+ display: flex;
2029
+ align-items: center;
2030
+ justify-content: center;
2031
+ }
2032
+
2033
+ #qrCodeIco {
2034
+ position: absolute;
2035
+ width: 40px;
2036
+ height: 40px;
2037
+ left: 50%;
2038
+ top: 50%;
2039
+ margin-left: -20px;
2040
+ margin-top: -20px;
2041
+ z-index: 99;
2042
+ background-color: #fff;
2043
+ }
2044
+
2045
+ .showUrlKeyWarn {
2046
+ padding: 10px 0;
2047
+ }
2048
+
2049
+ .OperationFlex {
2050
+ display: flex;
2051
+ }
2052
+
2053
+ .imageStateDialog {
2054
+ display: flex;
2055
+ flex-direction: column;
2056
+ }
2057
+ .scanImg {
2058
+ display: flex;
2059
+ justify-content: center;
2060
+ img {
2061
+ width: 200px;
2062
+ margin: 0 20px;
2063
+ }
2064
+ span {
2065
+ margin-top: 8px;
2066
+ }
2067
+ }
2068
+ .qrcode {
2069
+ display: flex;
2070
+ align-items: center;
2071
+ justify-content: center;
2072
+ div {
2073
+ display: flex;
2074
+ flex-direction: column;
2075
+ align-items: center;
2076
+ justify-content: center;
2077
+ }
2078
+ }
2079
+ .SMSnoticeStyle {
2080
+ & > div {
2081
+ color: #111111;
2082
+ line-height: 32px;
2083
+ }
2084
+ }
2085
+ .warningStyle {
2086
+ margin-top: 15px;
2087
+ }
2088
+ .checkReportImage {
2089
+ height: 70vh;
2090
+ overflow: auto;
2091
+ display: flex;
2092
+ // align-items: center;
2093
+ justify-content: center;
2094
+ img {
2095
+ width: auto;
2096
+ height: 100%;
2097
+ }
2098
+ p {
2099
+ font-size: 16px;
2100
+ color: #111111;
2101
+ margin-top: 30%;
2102
+ }
2103
+ }
2104
+ </style>