extract.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <!-- -->
  2. <template>
  3. <div class="extract" ref="layoutRef" :class="{ downMode }" v-if="data">
  4. <h2 class="title">当事人血样(尿样)提取登记表</h2>
  5. <div class="container">
  6. <table>
  7. <tr>
  8. <td width="12%" colspan="2">姓名</td>
  9. <td width="20%">
  10. <div>
  11. <input v-model="data.name" />
  12. <div class="content-box">{{ data.name }}</div>
  13. </div>
  14. </td>
  15. <td width="10%">性别</td>
  16. <td width="8%">
  17. <div>
  18. <input v-model="data.sex" />
  19. <div class="content-box">{{ data.sex }}</div>
  20. </div>
  21. </td>
  22. <td width="20%">身份证号码</td>
  23. <td width="30%" colspan="2">
  24. <div>
  25. <input v-model="data.id" />
  26. <div class="content-box">{{ data.id }}</div>
  27. </div>
  28. </td>
  29. </tr>
  30. <tr>
  31. <td width="15%" colspan="2">事故时间</td>
  32. <td width="35%" colspan="3">
  33. <div>
  34. <input v-model="data.time" />
  35. <div class="content-box">{{ data.time }}</div>
  36. </div>
  37. </td>
  38. <td width="20%">地点</td>
  39. <td width="30%" colspan="2">
  40. <div>
  41. <input v-model="data.address" />
  42. <div class="content-box">{{ data.address }}</div>
  43. </div>
  44. </td>
  45. </tr>
  46. <tr>
  47. <td colspan="2">血样(尿样)提取时间</td>
  48. <td colspan="6">
  49. <div>
  50. <input v-model="data.extractTime" />
  51. <div class="content-box">{{ data.extractTime }}</div>
  52. </div>
  53. </td>
  54. </tr>
  55. <tr>
  56. <td colspan="2">血样(尿样)提取地点</td>
  57. <td colspan="6">
  58. <div>
  59. <input v-model="data.extractAdress" />
  60. <div class="content-box">{{ data.extractAdress }}</div>
  61. </div>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td width="10%" rowspan="4" colspan="1">血样(尿样)提取人员填写</td>
  66. <td width="5%" rowspan="3">提取登记</td>
  67. <td colspan="3">A样本盛装容器编号</td>
  68. <td>
  69. <div>
  70. <input v-model="data.aNumber" />
  71. <div class="content-box">{{ data.aNumber }}</div>
  72. </div>
  73. </td>
  74. <td width="10%">提取量</td>
  75. <td>
  76. <div>
  77. <div>
  78. <input v-model="data.aVolume" />
  79. <div class="content-box">{{ data.aVolume }}</div>
  80. </div>
  81. ml
  82. </div>
  83. </td>
  84. </tr>
  85. <tr>
  86. <td colspan="3">B样本盛装容器编号</td>
  87. <td>
  88. <div>
  89. <input v-model="data.bNumber" />
  90. <div class="content-box">{{ data.bNumber }}</div>
  91. </div>
  92. </td>
  93. <td>提取量</td>
  94. <td>
  95. <div>
  96. <div>
  97. <input v-model="data.bVolume" />
  98. <div class="content-box">{{ data.bVolume }}</div>
  99. </div>
  100. ml
  101. </div>
  102. </td>
  103. </tr>
  104. <tr>
  105. <td colspan="1">消毒名称</td>
  106. <td colspan="2">
  107. <div>
  108. <input v-model="data.disinfect" />
  109. <div class="content-box">{{ data.disinfect }}</div>
  110. </div>
  111. </td>
  112. <td>密封方式</td>
  113. <td colspan="2">
  114. <div>
  115. <input v-model="data.sealing" />
  116. <div class="content-box">{{ data.sealing }}</div>
  117. </div>
  118. </td>
  119. </tr>
  120. <tr>
  121. <td width="10%" colspan="2">提取人员单位</td>
  122. <td colspan="2">
  123. <div>
  124. <input v-model="data.extractUnit" />
  125. <div class="content-box">{{ data.extractUnit }}</div>
  126. </div>
  127. </td>
  128. <td>提取人员(签名)</td>
  129. <td colspan="2">
  130. <div>
  131. <input v-model="data.extractMumber" />
  132. <div class="content-box">{{ data.extractMumber }}</div>
  133. </div>
  134. </td>
  135. </tr>
  136. <tr>
  137. <td>通知家属情况</td>
  138. <td colspan="7">
  139. <div>
  140. <input v-model="data.notice" />
  141. <div class="content-box">{{ data.notice }}</div>
  142. </div>
  143. </td>
  144. </tr>
  145. <tr>
  146. <td>被提取人(签名)</td>
  147. <td colspan="2">
  148. <div>
  149. <input v-model="data.extractBySign" />
  150. <div class="content-box">{{ data.extractBySign }}</div>
  151. </div>
  152. </td>
  153. <td>见证人(签名)</td>
  154. <td colspan="2">
  155. <div>
  156. <input v-model="data.witnessSign" />
  157. <div class="content-box">{{ data.witnessSign }}</div>
  158. </div>
  159. </td>
  160. <td>交通警察(签名)</td>
  161. <td colspan="2">
  162. <div>
  163. <input v-model="data.policeSign" />
  164. <div class="content-box">{{ data.policeSign }}</div>
  165. </div>
  166. </td>
  167. </tr>
  168. <tr>
  169. <td>办案单位</td>
  170. <td colspan="7">
  171. <div>
  172. <input v-model="data.company" />
  173. <div class="content-box">{{ data.company }}</div>
  174. </div>
  175. </td>
  176. </tr>
  177. </table>
  178. </div>
  179. </div>
  180. </template>
  181. <script setup lang="ts">
  182. import { reactive, ref, toRefs, onBeforeMount, onMounted, nextTick } from "vue";
  183. import { tables } from "@/store/tables";
  184. import { tablesInfo, setData } from "./data";
  185. const props = defineProps({
  186. downMode: { type: Boolean, default: false },
  187. isDownloadShow: { type: Boolean, default: false },
  188. });
  189. const data = ref(null);
  190. const saveHandler = () => {
  191. return { type: "extract", data: data.value };
  192. };
  193. defineExpose({ saveHandler, data });
  194. onMounted(() => {
  195. if (props.isDownloadShow) {
  196. } else {
  197. setData("extract");
  198. }
  199. if (tablesInfo.extract) {
  200. data.value = tablesInfo.extract;
  201. }
  202. });
  203. </script>
  204. <style lang="scss" scoped>
  205. .content-box {
  206. width: 100%;
  207. height: 100%;
  208. display: flex;
  209. align-items: center;
  210. justify-content: center;
  211. &.left {
  212. justify-content: flex-start;
  213. }
  214. }
  215. div[contenteditable] {
  216. outline: none;
  217. display: flex;
  218. align-items: center;
  219. justify-content: center;
  220. // height: 100%;
  221. width: 100%;
  222. }
  223. .extract {
  224. color: #000;
  225. font-size: 20px;
  226. // padding: 10px 30px;
  227. width: 100%;
  228. height: 100%;
  229. // display: grid;
  230. overflow: auto;
  231. font-family: sr, st;
  232. box-sizing: border-box;
  233. .content-box {
  234. display: none;
  235. }
  236. &.downMode {
  237. input {
  238. display: none;
  239. }
  240. .content-box {
  241. display: flex;
  242. }
  243. }
  244. .title {
  245. text-align: center;
  246. margin-bottom: 10px;
  247. }
  248. .container {
  249. table {
  250. width: 100%;
  251. // height: 100%;
  252. border-collapse: collapse;
  253. border: 1px solid #000;
  254. tr {
  255. &:last-of-type {
  256. td {
  257. border-bottom: none;
  258. }
  259. }
  260. td {
  261. // height: 40px;
  262. height: 110px;
  263. outline: none;
  264. // line-height: 24px;
  265. padding: 0 5px;
  266. text-align: center;
  267. border-right: 1px solid #000;
  268. border-bottom: 1px solid #000;
  269. &:last-of-type {
  270. border-right: none;
  271. }
  272. > div {
  273. display: flex;
  274. align-items: center;
  275. justify-content: center;
  276. // word-break: break-all;
  277. white-space: nowrap;
  278. line-height: 110px;
  279. width: 100%;
  280. height: 100%;
  281. input {
  282. width: 100%;
  283. height: 100%;
  284. text-align: center;
  285. }
  286. }
  287. input {
  288. width: 100%;
  289. height: 100%;
  290. text-align: center;
  291. line-height: 110px;
  292. }
  293. }
  294. }
  295. }
  296. }
  297. }
  298. </style>