index.vue 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103
  1. <template>
  2. <div class="dashboard-container">
  3. <div class="block">
  4. <div class="barBtn">
  5. <el-radio-group v-model="choice" class="bnts" size="medium" @change="handleRadioChange">
  6. <el-radio-button :label="0">普通检索</el-radio-button>
  7. <el-radio-button :label="1">高级检索</el-radio-button>
  8. <el-radio-button :label="2">专业检索</el-radio-button>
  9. </el-radio-group>
  10. </div>
  11. <div class="bnh" />
  12. <!-- 普通检索 -->
  13. <div v-if="choice == 0" class="bnh">
  14. <el-form :inline="true" class="demo-form-inline">
  15. <el-form-item label="">
  16. <el-input v-model="formData0.input" placeholder="输入关键字搜索" class="input-with-select width500"></el-input>
  17. </el-form-item>
  18. <el-form-item>
  19. <el-date-picker
  20. v-model="formData1.startTime"
  21. type="date"
  22. format="yyyy 年 MM 月 dd 日"
  23. value-format="yyyyMMdd"
  24. placeholder="出院时间开始"
  25. :picker-options="pickerOptions"
  26. :disabled="lock"
  27. />
  28. <span class="pind10" />
  29. <el-date-picker
  30. v-model="formData1.endTime"
  31. type="date"
  32. format="yyyy 年 MM 月 dd 日"
  33. value-format="yyyyMMdd"
  34. placeholder="出院时间结束"
  35. :picker-options="pickerOptions"
  36. :disabled="lock"
  37. />
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button class="bule" icon="el-icon-search" @click="searchBtn(0)">检索</el-button>
  41. </el-form-item>
  42. </el-form>
  43. <div style="margin: 15px" />
  44. </div>
  45. <div v-if="choice == 0" class="fBtn" style="position: relative">
  46. <el-button type="primary" icon="el-icon-download" style="position: absolute; right: 220px" @click="normalDownload('病历-普通搜索')">导出execl</el-button>
  47. <el-select v-model="formData0.input1" style="position: absolute; right: 0px" placeholder="检索历史" @change="funSetList()">
  48. <el-option v-for="(item, index) in setList" :key="index" :label="item" :value="item" />
  49. </el-select>
  50. </div>
  51. <!-- 高级检索 -->
  52. <div v-if="choice == 1" class="barBtn">
  53. <el-form ref="form" :model="formData1" label-width="100px">
  54. <el-form-item v-for="(item, index) in formData1.seniorList" :key="index">
  55. <!-- 下拉框开始 -->
  56. <el-select v-if="index != 0" v-model="item.select_type" :class="index != 0 ? 'marginLeft' : ''" class="width100" filterable placeholder="" :disabled="item.lock">
  57. <!-- fieldList -->
  58. <el-option label="且" :value="0" />
  59. <el-option label="或者" :value="1" />
  60. <el-option label="不包含" :value="2" />
  61. </el-select>
  62. <span v-if="index != 0" class="pind10" />
  63. <el-select v-model="item.key" class="width150" filterable placeholder="请选择" @change="funSelect(index)" :disabled="item.lock">
  64. <!-- fieldList -->
  65. <el-option v-for="(item, index) in fieldList" :key="index" :label="item.name" :value="item.id" :disabled="item.lock" />
  66. </el-select>
  67. <!-- 下拉框结束 -->
  68. <span class="pind10" />
  69. <!-- 中间选择输入框开始 -->
  70. <span v-if="item.key == 'AAC11N'">
  71. <el-select v-model="item.value" class="width150" filterable placeholder="请选择" :disabled="item.lock">
  72. <el-option v-for="(itemo, indexo) in departmentList" :key="indexo" :label="itemo.name" :value="itemo.name" />
  73. </el-select>
  74. </span>
  75. <span v-else>
  76. <el-input v-model="item.value" class="width150" :disabled="item.lock" placeholder="请输入" />
  77. </span>
  78. <!-- 中间选择输入框结束 -->
  79. <span class="pind10" />
  80. <!-- 条件下拉开始 -->
  81. <el-select v-model="item.type" class="width90" :disabled="item.lock" placeholder="">
  82. <el-option label="精确" value="1" />
  83. <el-option label="模糊" value="0" />
  84. </el-select>
  85. <!-- 条件下拉结束 -->
  86. <span class="pind10" />
  87. <!-- 增减重置选项按钮开始 -->
  88. <span>
  89. <el-button v-if="index != 0 && !item.lock" :disabled="formData1.seniorList.length == 1" type="primary" icon="el-icon-minus" @click="funDel(index)" />
  90. <el-button v-if="index == formData1.seniorList.length - 1" type="primary" icon="el-icon-plus" @click="funAdd" />
  91. <el-button v-if="index === formData1.seniorList.length - 1 && searchNum" @click="onLockResult">结果中检索</el-button>
  92. </span>
  93. <!-- 增减重置选项按钮结束 -->
  94. </el-form-item>
  95. <el-form-item label="出院时间">
  96. <el-date-picker
  97. v-model="formData1.startTime"
  98. type="date"
  99. format="yyyy 年 MM 月 dd 日"
  100. value-format="yyyyMMdd"
  101. placeholder="开始日期"
  102. :picker-options="pickerOptions"
  103. :disabled="lock"
  104. />
  105. <span class="pind10" />
  106. <el-date-picker
  107. v-model="formData1.endTime"
  108. type="date"
  109. format="yyyy 年 MM 月 dd 日"
  110. value-format="yyyyMMdd"
  111. placeholder="结束日期"
  112. :picker-options="pickerOptions"
  113. :disabled="lock"
  114. />
  115. </el-form-item>
  116. <el-form-item label="住院天数">
  117. <el-input-number v-model="formData1.AAC04_start" :min="1" :step="1" :controls="false" placeholder="起始天数" style="width: 220px" :disabled="lock"></el-input-number>
  118. <span class="pind10" />
  119. <el-input-number v-model="formData1.AAC04_end" :min="1" :step="1" :controls="false" placeholder="终止天数" style="width: 220px" :disabled="lock"></el-input-number>
  120. </el-form-item>
  121. <el-form-item label="患者年龄">
  122. <el-input-number
  123. v-model="formData1.AAA04_start"
  124. :min="1"
  125. :step="1"
  126. :controls="false"
  127. :placeholder="formData1.ageType1 ? '起始年龄' : '起始天数'"
  128. style="width: 220px"
  129. :disabled="lock"
  130. ></el-input-number>
  131. <el-select v-model="formData1.ageType1" :disabled="lock" placeholder="请选择" style="width: 80px">
  132. <el-option label="年龄" :value="1"></el-option>
  133. <el-option label="天数" :value="0"></el-option>
  134. </el-select>
  135. <span class="pind10" />
  136. ——
  137. <span class="pind10" />
  138. <el-input-number
  139. v-model="formData1.AAA04_end"
  140. :min="1"
  141. :step="1"
  142. :controls="false"
  143. :placeholder="formData1.ageType2 ? '终止年龄' : '终止天数'"
  144. style="width: 220px"
  145. :disabled="lock"
  146. ></el-input-number>
  147. <el-select v-model="formData1.ageType2" :disabled="lock" placeholder="请选择" style="width: 80px">
  148. <el-option label="年龄" :value="1"></el-option>
  149. <el-option label="天数" :value="0"></el-option>
  150. </el-select>
  151. </el-form-item>
  152. <el-form-item label="住院号">
  153. <el-input v-model="formData1.AAA28" placeholder="请输入" style="width: 220px"></el-input>
  154. </el-form-item>
  155. </el-form>
  156. </div>
  157. <div v-if="choice == 1" class="fBtn" style="position: relative">
  158. <el-button type="primary" icon="el-icon-download" style="position: absolute; right: 120px" @click="highDownload('病历-高级搜索')">导出execl</el-button>
  159. <el-button class="btn11" @click="reset">重置条件</el-button>
  160. <el-button class="btn2" @click="searchBtn(1)">检索</el-button>
  161. </div>
  162. <!-- 专业检索 -->
  163. <ProfessionSearchVue v-if="choice == 2" @search="handleProfessionSearch" @export="handelExport" @reset="handleReset" />
  164. </div>
  165. <div class="tableBox">
  166. <div class="flextab" style="margin: 0; margin-bottom: 30px; display: block">
  167. <div class="flextabtitle-box">
  168. <div class="h-title">
  169. <span class="blue" />
  170. <span class="text">检索结果</span>
  171. <span v-if="paginationData.total != 0" class="titleName">
  172. 找到
  173. <span class="title-left-span">{{ paginationData.total }}</span>
  174. 个例条相关结果
  175. </span>
  176. </div>
  177. <div class="title-right" style="margin-top: -30px">
  178. <div :class="onClass == '0' ? 'title-right-data' : ''" @click="funOnclass('0')">列表</div>
  179. <div :class="onClass == '1' ? 'title-right-data' : ''" @click="funOnclass('1')">详情</div>
  180. </div>
  181. </div>
  182. </div>
  183. <div v-if="onClass == '0'" class="conter" style="border: none">
  184. <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange">
  185. <el-table-column type="index" :index="indexAdd" label="序号" width="70px" />
  186. <el-table-column prop="AAA28" label="住院号">
  187. <template slot-scope="scope">
  188. <span class="blue" @click="funGoto(scope.row.MED_REC_ID)">
  189. <template>
  190. <div>
  191. {{ scope.row.AAA28 }}
  192. </div>
  193. </template>
  194. </span>
  195. </template>
  196. </el-table-column>
  197. <el-table-column prop="AAA04" label="年龄" />
  198. <el-table-column prop="AAC11N" label="出院科室" />
  199. <el-table-column prop="AAB01" label="入院时间" />
  200. <el-table-column prop="AAC01" label="出院时间" />
  201. </el-table>
  202. <!-- 分页控制 -->
  203. </div>
  204. <div v-for="(item, index) in tableDataDetails" :key="index">
  205. <div v-if="onClass == '1'" class="conter">
  206. <!-- 普通检索、高级检索 -->
  207. <div v-if="choice !=2">
  208. <div v-for="(i, j) in item.EMR_BL_BL01" :key="j">
  209. <div class="conter-title">
  210. <span>{{ paginationData.pageSize * (paginationData.currentPage - 1) + (index + 1) }}.{{ j + 1 }}</span>
  211. 病历名称:
  212. <span v-for="(k, q) in fieldList" :key="q" class="blue">{{ i.BLLB == k.id ? k.name : '' }}</span>
  213. </div>
  214. <div class="conter-case">
  215. <div v-html="i.HJNR" />
  216. </div>
  217. </div>
  218. <!-- 结账单 -->
  219. <div v-if="item.FeeDetailed.length" style="margin-bottom: 20px">
  220. <span class="conter-title">{{ paginationData.pageSize * (paginationData.currentPage - 1) + (index + 1) }}.{{ item.EMR_BL_BL01.length + 1 }}</span>
  221. <el-table :data="item.FeeDetailed" stripe style="width: 100%">
  222. <el-table-column prop="FYMC" label="费用名称">
  223. <template slot-scope="scope">
  224. <span v-html="scope.row.FYMC[0]"></span>
  225. </template>
  226. </el-table-column>
  227. <el-table-column prop="JFRQ" label="计费日期"></el-table-column>
  228. <el-table-column prop="FYSL" label="费用数量"></el-table-column>
  229. </el-table>
  230. </div>
  231. <!-- 医嘱本 -->
  232. <div v-if="item.YZB.length" style="margin-bottom: 20px">
  233. <span class="conter-title" v-if="!item.FeeDetailed.length">
  234. {{ paginationData.pageSize * (paginationData.currentPage - 1) + (index + 1) }}.{{ item.EMR_BL_BL01.length + 1 }}
  235. </span>
  236. <span class="conter-title" v-else>{{ paginationData.pageSize * (paginationData.currentPage - 1) + (index + 1) }}.{{ item.EMR_BL_BL01.length + 2 }}</span>
  237. <el-table :data="item.YZB" stripe style="width: 100%">
  238. <el-table-column prop="YZMC" label="医嘱名称">
  239. <template slot-scope="scope">
  240. <!-- 高级搜索 -->
  241. <span v-if="choice" v-html="scope.row.YZMC"></span>
  242. <!-- 普通搜索 -->
  243. <span v-else v-html="scope.row.YZMC[0]"></span>
  244. </template>
  245. </el-table-column>
  246. <el-table-column prop="BRKS" label="开嘱科室"></el-table-column>
  247. <el-table-column prop="KZSJ" label="开嘱时间"></el-table-column>
  248. <el-table-column prop="ZJE" label="医嘱期限"></el-table-column>
  249. </el-table>
  250. </div>
  251. <div class="conter-num" style="margin-top: 10px">
  252. 病案号:
  253. <span class="yeleou" @click="funGoto(item.MED_REC_ID)">{{ item.AAA28 }}</span>
  254. </div>
  255. <div class="conter-time">出院时间:{{ item.AAC01 }}</div>
  256. </div>
  257. <!-- 专业检索 -->
  258. <div v-if="choice == 2">
  259. <!-- 患者信息 -->
  260. <div v-if="item.patient_info">
  261. <el-descriptions title="患者信息">
  262. <el-descriptions-item label="住院号" v-if="item.patient_info.AAA28">
  263. <span v-html="item.patient_info.AAA28"></span>
  264. </el-descriptions-item>
  265. <el-descriptions-item label="出院科室" v-if="item.patient_info.AAC11N">
  266. <span v-html="item.patient_info.AAC11N"></span>
  267. </el-descriptions-item>
  268. <el-descriptions-item label="出院时间" v-if="item.patient_info.AAC01">
  269. <span v-html="item.patient_info.AAC01"></span>
  270. </el-descriptions-item>
  271. <el-descriptions-item label="姓名" v-if="item.patient_info.AAA01">
  272. <span v-html="item.patient_info.AAA01"></span>
  273. </el-descriptions-item>
  274. <el-descriptions-item label="性别" v-if="item.patient_info.AAA02C">
  275. <span v-html="item.patient_info.AAA02C"></span>
  276. </el-descriptions-item>
  277. <el-descriptions-item label="入院时间" v-if="item.patient_info.AAB01">
  278. <span v-html="item.patient_info.AAB01"></span>
  279. </el-descriptions-item>
  280. <el-descriptions-item label="住院天数" v-if="item.patient_info.AAC04">
  281. <span v-html="item.patient_info.AAC04"></span>
  282. </el-descriptions-item>
  283. <el-descriptions-item label="年龄" v-if="item.patient_info.AAA04 || item.patient_info.AAA40">
  284. <span v-html="item.patient_info.AAA04 ? item.patient_info.AAA04 : item.patient_info.AAA40 "></span>
  285. </el-descriptions-item>
  286. </el-descriptions>
  287. </div>
  288. <!-- 入院记录 -->
  289. <div v-if="item.ryjl">
  290. <el-descriptions title="入院记录">
  291. <el-descriptions-item label="整体" v-if="item.ryjl.RYJL_HJNR">
  292. <span v-html="item.ryjl.RYJL_HJNR"></span>
  293. </el-descriptions-item>
  294. <el-descriptions-item label="主诉" v-if="item.ryjl.RYJL_ZHS">
  295. <span v-html="item.ryjl.RYJL_ZHS"></span>
  296. </el-descriptions-item>
  297. <el-descriptions-item label="现病史" v-if="item.ryjl.RYJL_XBS">
  298. <span v-html="item.ryjl.RYJL_XBS"></span>
  299. </el-descriptions-item>
  300. <el-descriptions-item label="既往史" v-if="item.ryjl.RYJL_JWS">
  301. <span v-html="item.ryjl.RYJL_JWS"></span>
  302. </el-descriptions-item>
  303. <el-descriptions-item label="个人史" v-if="item.ryjl.RYJL_GRS">
  304. <span v-html="item.ryjl.RYJL_GRS"></span>
  305. </el-descriptions-item>
  306. <el-descriptions-item label="月经及婚育史+婚育史" v-if="item.ryjl.RYJL_YJJHYS">
  307. <span v-html="item.ryjl.RYJL_YJJHYS"></span>
  308. </el-descriptions-item>
  309. <el-descriptions-item label="家族史" v-if="item.ryjl.RYJL_JZS">
  310. <span v-html="item.ryjl.RYJL_JZS"></span>
  311. </el-descriptions-item>
  312. <el-descriptions-item label="体格检查" v-if="item.ryjl.RYJL_TGJC">
  313. <span v-html="item.ryjl.RYJL_TGJC"></span>
  314. </el-descriptions-item>
  315. <el-descriptions-item label="专科检查" v-if="item.ryjl.RYJL_ZHUANKE">
  316. <span v-html="item.ryjl.RYJL_ZHUANKE"></span>
  317. </el-descriptions-item>
  318. <el-descriptions-item label="辅助检查" v-if="item.ryjl.RYJL_FZJC">
  319. <span v-for="(aItem, aIndex) of item.ryjl.RYJL_FZJC" :key="aIndex">
  320. <span v-if="aIndex">;</span>
  321. <span v-html="aItem"></span>
  322. </span>
  323. </el-descriptions-item>
  324. <el-descriptions-item label="初步诊断" v-if="item.ryjl.RYJL_CBZD">
  325. <span v-for="(aItem, aIndex) of item.ryjl.RYJL_CBZD" :key="aIndex">
  326. <span v-if="aIndex">;</span>
  327. <span v-html="aItem"></span>
  328. </span>
  329. </el-descriptions-item>
  330. <el-descriptions-item label="第一初步诊断" v-if="item.ryjl.RYJL_CBZB">
  331. <span v-html="item.ryjl.RYJL_CBZB"></span>
  332. </el-descriptions-item>
  333. </el-descriptions>
  334. </div>
  335. <!-- 病程记录 -->
  336. <div v-if="item.bcjl_scbc">
  337. <el-descriptions title="病程记录">
  338. <el-descriptions-item label="整体" v-if="item.bcjl_scbc.BCJL_SCBC_HJNR">
  339. <span v-html="item.bcjl_scbc.BCJL_SCBC_HJNR"></span>
  340. </el-descriptions-item>
  341. <el-descriptions-item label="病历特点" v-if="item.bcjl_scbc.BCJL_SCBC_BLTD">
  342. <span v-html="item.bcjl_scbc.BCJL_SCBC_BLTD"></span>
  343. </el-descriptions-item>
  344. <el-descriptions-item label="第一初步诊断" v-if="item.bcjl_scbc.BCJL_SCBC_CBZD_ONE">
  345. <span v-html="item.bcjl_scbc.BCJL_SCBC_CBZD_ONE"></span>
  346. </el-descriptions-item>
  347. <el-descriptions-item label="其他初步诊断" v-if="item.bcjl_scbc.BCJL_SCBC_CBZD_OTHER">
  348. <span v-for="(aItem, aIndex) of item.bcjl_scbc.BCJL_SCBC_CBZD_OTHER" :key="aIndex">
  349. <span v-if="aIndex">;</span>
  350. <span v-html="aItem"></span>
  351. </span>
  352. </el-descriptions-item>
  353. <el-descriptions-item label="诊断依据" v-if="item.bcjl_scbc.BCJL_SCBC_ZDYJ">
  354. <span v-for="(aItem, aIndex) of item.bcjl_scbc.BCJL_SCBC_ZDYJ" :key="aIndex">
  355. <span v-if="aIndex">;</span>
  356. <span v-html="aItem"></span>
  357. </span>
  358. </el-descriptions-item>
  359. <el-descriptions-item label="鉴别诊断" v-if="item.bcjl_scbc.BCJL_SCBC_JBZD">
  360. <span v-for="(aItem, aIndex) of item.bcjl_scbc.BCJL_SCBC_JBZD" :key="aIndex">
  361. <span v-if="aIndex">;</span>
  362. <span v-html="aItem"></span>
  363. </span>
  364. </el-descriptions-item>
  365. <el-descriptions-item label="鉴别诊断名称" v-if="item.bcjl_scbc.BCJL_SCBC_JBZDMC">
  366. <span v-for="(aItem, aIndex) of item.bcjl_scbc.BCJL_SCBC_JBZDMC" :key="aIndex">
  367. <span v-if="aIndex">;</span>
  368. <span v-html="aItem"></span>
  369. </span>
  370. </el-descriptions-item>
  371. <el-descriptions-item label="诊疗记录" v-if="item.bcjl_scbc.BCJL_SCBC_ZLJH">
  372. <span v-for="(aItem, aIndex) of item.bcjl_scbc.BCJL_SCBC_ZLJH" :key="aIndex">
  373. <span v-if="aIndex">;</span>
  374. <span v-html="aItem"></span>
  375. </span>
  376. </el-descriptions-item>
  377. </el-descriptions>
  378. </div>
  379. </div>
  380. </div>
  381. </div>
  382. <el-pagination
  383. v-if="tableData && tableData.length !== 0"
  384. :total="paginationData.total"
  385. background
  386. class="table-pagination"
  387. style="margin: 15px 0px"
  388. :page-size="paginationData.pageSize"
  389. :current-page.sync="paginationData.currentPage"
  390. layout="total, sizes, prev, pager, next, jumper"
  391. @size-change="SizeChangeEvent"
  392. @current-change="pageHasChanged"
  393. />
  394. </div>
  395. </div>
  396. </template>
  397. <script>
  398. import Title from '@/components/Title';
  399. import { mapGetters } from 'vuex';
  400. import mPagination from '@/components/m-pagination';
  401. import { bassNormalSearchDownload, bassHighSearchDownload, professionSearchExport } from '@/api/excel';
  402. import ProfessionSearchVue from './components/ProfessionSearch.vue';
  403. export default {
  404. components: {
  405. Title,
  406. mPagination,
  407. ProfessionSearchVue,
  408. },
  409. computed: {
  410. ...mapGetters(['name']),
  411. },
  412. data() {
  413. return {
  414. pickerOptions: {
  415. disabledDate(time) {
  416. return time.getTime() > Date.now();
  417. },
  418. },
  419. checked: false,
  420. choice: 0,
  421. formData0: {
  422. input: '',
  423. input1: '',
  424. },
  425. formData1: {
  426. ageday: '',
  427. age_start_type: 2,
  428. age_end_type: 2,
  429. ageyear: '',
  430. endTime: undefined,
  431. startTime: undefined,
  432. seniorList: [
  433. {
  434. select_type: 0,
  435. key: '',
  436. value: '',
  437. type: '0',
  438. lock: false,
  439. },
  440. ],
  441. seniorList1: [],
  442. hospitalizationon: '',
  443. hospitalizationin: '',
  444. AAC04_start: undefined,
  445. AAC04_end: undefined,
  446. AAA04_start: undefined,
  447. AAA04_end: undefined,
  448. ageType1: 1,
  449. ageType2: 1,
  450. AAA28: '',
  451. },
  452. tableData: [],
  453. tableDataDetails: [],
  454. paginationData: {
  455. total: 0,
  456. currentPage: 1,
  457. pageSize: 10,
  458. },
  459. fieldList: [
  460. { name: '出院记录', id: '1' },
  461. { name: '入院记录', id: '292' },
  462. { name: '病程记录', id: '294' },
  463. { name: '手术记录', id: '303' },
  464. { name: '病历讨论记录', id: '43' },
  465. { name: '授权同意类', id: '329' },
  466. { name: '评估评分表类', id: '79' },
  467. { name: '死亡记录类', id: '288' },
  468. { name: '24小时内记录类', id: '18' },
  469. { name: '医患沟通类', id: '34' },
  470. { name: '医疗常用表格', id: '87' },
  471. { name: '医嘱单', id: '49' },
  472. { name: '出院科室', id: 'AAC11N' },
  473. { name: '费用明细', id: 'FYMC' },
  474. { name: '报告单', id: '2000002' },
  475. { name: '主要诊断名称', id: 'ICD10_NAME' },
  476. { name: '主要诊断编码', id: 'ICD10_ID1' },
  477. ],
  478. keyList: [],
  479. Dayoptions: [],
  480. multipleSelection: [],
  481. onClass: 0,
  482. setListTwe: [],
  483. setList: [],
  484. departmentList: [],
  485. lock: false,
  486. searchNum: 0,
  487. professionSearchData: {}
  488. };
  489. },
  490. mounted() {
  491. if (this.storageGet('inputOn')) {
  492. this.formData0.input = JSON.parse(this.storageGet('inputOn'));
  493. this.storageRemove('inputOn');
  494. }
  495. if (this.storageGet('formData1')) {
  496. this.formData1 = JSON.parse(this.storageGet('formData1'));
  497. this.storageRemove('formData1');
  498. }
  499. if (this.storageGet('choice')) {
  500. this.choice = Number(this.storageGet('choice'));
  501. this.storageRemove('choice');
  502. }
  503. if (this.storageGet('setList')) {
  504. this.setList = JSON.parse(this.storageGet('setList'));
  505. }
  506. this.selectInfo();
  507. this.funQuery(0);
  508. },
  509. created() {},
  510. methods: {
  511. normalDownload(name) {
  512. const params = {
  513. keyword: this.formData0.input,
  514. AAC01_start: this.formData1.startTime,
  515. AAC01_end: this.formData1.endTime,
  516. };
  517. bassNormalSearchDownload(params).then(res => {
  518. const content = res.data; // 后台返回二进制数据
  519. const blob = new Blob([content]);
  520. const fileName = `${name}.csv`;
  521. if ('download' in document.createElement('a')) {
  522. // 非IE下载
  523. const elink = document.createElement('a');
  524. elink.download = fileName;
  525. elink.style.display = 'none';
  526. elink.href = URL.createObjectURL(blob);
  527. document.body.appendChild(elink);
  528. elink.click();
  529. URL.revokeObjectURL(elink.href); // 释放URL 对象
  530. document.body.removeChild(elink);
  531. } else {
  532. // IE10+下载
  533. navigator.msSaveBlob(blob, fileName);
  534. }
  535. });
  536. },
  537. highDownload(name) {
  538. const pramse = {};
  539. pramse.field = this.formData1.seniorList;
  540. pramse.AAC01_start = this.formData1.startTime;
  541. pramse.AAC01_end = this.formData1.endTime;
  542. pramse.AAA28 = this.formData1.AAA28;
  543. pramse.AAC04_start = this.formData1.AAC04_start;
  544. pramse.AAC04_end = this.formData1.AAC04_end;
  545. const { ageType1, ageType2 } = this.formData1;
  546. // ageType1 = 1 年龄
  547. // ageType1 = 0 天数
  548. if (ageType1) {
  549. pramse.AAA04_start = this.formData1.AAA04_start;
  550. } else {
  551. pramse.AAA40_start = this.formData1.AAA04_start;
  552. }
  553. if (ageType2) {
  554. pramse.AAA04_end = this.formData1.AAA04_end;
  555. } else {
  556. pramse.AAA40_end = this.formData1.AAA04_end;
  557. }
  558. bassHighSearchDownload(pramse).then(res => {
  559. const content = res.data; // 后台返回二进制数据
  560. const blob = new Blob([content]);
  561. const fileName = `${name}.csv`;
  562. if ('download' in document.createElement('a')) {
  563. // 非IE下载
  564. const elink = document.createElement('a');
  565. elink.download = fileName;
  566. elink.style.display = 'none';
  567. elink.href = URL.createObjectURL(blob);
  568. document.body.appendChild(elink);
  569. elink.click();
  570. URL.revokeObjectURL(elink.href); // 释放URL 对象
  571. document.body.removeChild(elink);
  572. } else {
  573. // IE10+下载
  574. navigator.msSaveBlob(blob, fileName);
  575. }
  576. });
  577. },
  578. onLockResult() {
  579. this.lock = true;
  580. this.formData1.seniorList.map(item => {
  581. if (!!item.value) {
  582. item.lock = true;
  583. } else {
  584. item.lock = false;
  585. }
  586. });
  587. this.funAdd();
  588. },
  589. indexAdd(index) {
  590. return index + 1 + (this.paginationData.currentPage - 1) * this.paginationData.pageSize;
  591. },
  592. funSelect(index) {
  593. // 建坤:切换时,取消input 重置
  594. // this.formData1.seniorList[index].value = "";
  595. },
  596. selectInfo() {
  597. this.$axios.post('/selectInfo').then(res => {
  598. // 支付方式 pay
  599. this.departmentList = res.data.department;
  600. });
  601. },
  602. funGoto(val) {
  603. this.storageSet('inputOn', JSON.stringify(this.formData0.input));
  604. this.storageSet('formData1', JSON.stringify(this.formData1));
  605. this.storageSet('choice', JSON.stringify(this.choice));
  606. this.storageSet('getData', val);
  607. const { path } = this.$route;
  608. let toPath;
  609. if (path === '/hospital-search') {
  610. toPath = '/hospital-caseViews';
  611. } else {
  612. toPath = '/caseViews';
  613. }
  614. // status = 1 代表不能复制文本
  615. this.$router.push({ path: toPath });
  616. },
  617. funCeal() {
  618. this.$refs.multipleTable.clearSelection();
  619. },
  620. funSetformData2() {
  621. this.formData1.seniorList = this.formData1.seniorList1;
  622. },
  623. funSetList() {
  624. this.formData0.input = String(this.formData0.input1);
  625. },
  626. funOnclass(val) {
  627. this.onClass = val;
  628. },
  629. handleSelectionChange(val) {
  630. this.multipleSelection = val;
  631. },
  632. SizeChangeEvent(val) {
  633. this.paginationData.pageSize = val;
  634. const num = this.lock ? 1 : 0;
  635. if (this.choice == 2) {
  636. this.handleProfessionSearch(this.professionSearchData)
  637. } else {
  638. this.funQuery(num);
  639. }
  640. },
  641. pageHasChanged() {
  642. const num = this.lock ? 1 : 0;
  643. if (this.choice == 2) {
  644. this.handleProfessionSearch(this.professionSearchData)
  645. } else {
  646. this.funQuery(num);
  647. }
  648. },
  649. funBlur() {
  650. if (this.formData1.ageday > 356) {
  651. this.formData1.ageday = 356;
  652. }
  653. if (this.formData1.ageyear > 150) {
  654. this.formData1.ageyear = 150;
  655. }
  656. },
  657. funBluron() {
  658. if (this.formData1.hospitalizationon && this.formData1.hospitalizationin) {
  659. if (this.formData1.hospitalizationon > this.formData1.hospitalizationin) {
  660. this.$message('起止住院天数输入不正确');
  661. }
  662. }
  663. },
  664. funDel(i) {
  665. const index = i;
  666. if (index == 0) {
  667. return;
  668. }
  669. const list = this.formData1.seniorList;
  670. list.splice(index, 1);
  671. this.formData1.seniorList = list;
  672. },
  673. funAdd() {
  674. this.formData1.seniorList.push({
  675. key: '',
  676. select_type: 0,
  677. value: '',
  678. type: '0',
  679. lock: false,
  680. });
  681. },
  682. funQuery(num) {
  683. const pramse = {
  684. limit: this.paginationData.pageSize,
  685. page: this.paginationData.currentPage, // 是当前页数 默认是0 。普通检索的参数是
  686. };
  687. let queryUrl = 'normalSearch';
  688. if (this.choice == '0') {
  689. queryUrl = 'normalSearch';
  690. // 普通检索
  691. pramse.keyword = this.formData0.input; // 关键字
  692. pramse.AAC01_start = this.formData1.startTime;
  693. pramse.AAC01_end = this.formData1.endTime;
  694. this.$axios3.post(queryUrl, pramse).then(res => {
  695. this.tableData = res.data.data.list || [];
  696. this.tableDataDetails = res.data.data.detail || [];
  697. this.paginationData.total = res.data.data.total;
  698. if (this.choice == '0' && this.formData0.input) {
  699. this.setList.push(String(this.formData0.input));
  700. const listSetto = Array.from(new Set(this.setList));
  701. this.setList = listSetto;
  702. this.storageSet('setList', JSON.stringify(this.setList));
  703. }
  704. });
  705. } else {
  706. queryUrl = 'search';
  707. // 高级检索
  708. pramse.field = this.formData1.seniorList;
  709. pramse.AAC01_start = this.formData1.startTime;
  710. pramse.AAC01_end = this.formData1.endTime;
  711. pramse.AAA28 = this.formData1.AAA28;
  712. pramse.AAC04_start = this.formData1.AAC04_start;
  713. pramse.AAC04_end = this.formData1.AAC04_end;
  714. this.searchNum = num;
  715. const { ageType1, ageType2 } = this.formData1;
  716. // ageType1 = 1 年龄
  717. // ageType1 = 0 天数
  718. if (ageType1) {
  719. pramse.AAA04_start = this.formData1.AAA04_start;
  720. } else {
  721. pramse.AAA40_start = this.formData1.AAA04_start;
  722. }
  723. if (ageType2) {
  724. pramse.AAA04_end = this.formData1.AAA04_end;
  725. } else {
  726. pramse.AAA40_end = this.formData1.AAA04_end;
  727. }
  728. this.$axios3.post(queryUrl, pramse).then(res => {
  729. this.tableData = res.data.data.list || [];
  730. this.tableDataDetails = res.data.data.detail || [];
  731. this.paginationData.total = res.data.data.total;
  732. if (this.choice == '0' && this.formData0.input) {
  733. this.setList.push(String(this.formData0.input));
  734. const listSetto = Array.from(new Set(this.setList));
  735. this.setList = listSetto;
  736. this.storageSet('setList', JSON.stringify(this.setList));
  737. }
  738. });
  739. }
  740. },
  741. searchBtn(num) {
  742. this.paginationData.currentPage = 1;
  743. this.funQuery(num);
  744. },
  745. funBluron() {
  746. if (this.formData1.hospitalizationon && this.formData1.hospitalizationin) {
  747. if (this.formData1.hospitalizationon > this.formData1.hospitalizationin) {
  748. this.$message('起止住院天数输入不正确');
  749. }
  750. }
  751. },
  752. reset() {
  753. // 重置数据
  754. if (this.choice == 0) {
  755. Object.assign(this.$data.formData0, this.$options.data().formData0);
  756. } else {
  757. this.lock = false;
  758. this.searchNum = 0;
  759. Object.assign(this.$data.formData1, this.$options.data().formData1);
  760. }
  761. },
  762. // 专业检索
  763. handleProfessionSearch(params) {
  764. this.paginationData.currentPage = 1
  765. this.professionSearchData = params
  766. this.$axios3.post('/bl/serach', params).then(res => {
  767. this.tableData = res.data.list || [];
  768. this.tableDataDetails = res.data.detail || [];
  769. this.paginationData.total = res.data.total;
  770. });
  771. },
  772. // 判断对象是否为空
  773. isObject(form){
  774. let a = 0
  775. for(let key in form){
  776. if(!!form[key]){
  777. a++
  778. }
  779. }
  780. if (a) {
  781. return false
  782. } else {
  783. return true
  784. }
  785. },
  786. // 导出
  787. handelExport(params) {
  788. professionSearchExport(params).then(res => {
  789. const content = res.data; // 后台返回二进制数据
  790. const blob = new Blob([content]);
  791. const fileName = `住院病历查询.csv`;
  792. if ('download' in document.createElement('a')) {
  793. // 非IE下载
  794. const elink = document.createElement('a');
  795. elink.download = fileName;
  796. elink.style.display = 'none';
  797. elink.href = URL.createObjectURL(blob);
  798. document.body.appendChild(elink);
  799. elink.click();
  800. URL.revokeObjectURL(elink.href); // 释放URL 对象
  801. document.body.removeChild(elink);
  802. } else {
  803. // IE10+下载
  804. navigator.msSaveBlob(blob, fileName);
  805. }
  806. });
  807. },
  808. // 重置
  809. handleReset() {
  810. this.handleProfessionSearch({})
  811. },
  812. // 检索类型变化
  813. handleRadioChange(val) {
  814. if (val == 2) {
  815. this.handleProfessionSearch({})
  816. } else {
  817. this.professionSearchData = {}
  818. }
  819. }
  820. },
  821. };
  822. </script>
  823. <style scoped>
  824. ::v-deep.el-pagination.is-background .btn-next,
  825. ::v-deep.el-pagination.is-background .btn-prev,
  826. ::v-deep.el-pagination.is-background .el-pager li {
  827. margin: 0 5px;
  828. background-color: #fff;
  829. color: #606266;
  830. min-width: 30px;
  831. border-radius: 2px;
  832. border: 1px solid #dfe3f3;
  833. line-height: 27px;
  834. }
  835. ::v-deep.el-pagination.is-background .el-pager li:not(.disabled).active {
  836. background: #7e8bab;
  837. }
  838. ::v-deep.el-table .el-table__row td {
  839. color: #7e8bab;
  840. border-bottom: 1px solid #f4f4f4;
  841. }
  842. ::v-deep.el-table .el-table__header tr th:first-child {
  843. border-radius: 10px 0px 0px 10px;
  844. }
  845. ::v-deep.el-table .el-table__header tr th:last-child {
  846. border-radius: 0px 10px 10px 0px;
  847. }
  848. ::v-deep.el-table .el-table__header tr th {
  849. background: #f1f6ff;
  850. color: #13171e;
  851. border-bottom: 0px;
  852. }
  853. </style>
  854. <style lang="scss" scoped>
  855. .tableBox {
  856. background: #fff;
  857. padding: 19px;
  858. border-radius: 5px;
  859. font-size: 12px;
  860. }
  861. .block {
  862. background: #fff;
  863. border-radius: 5px;
  864. margin-bottom: 16px;
  865. padding: 20px;
  866. margin-bottom: 20px;
  867. .fBtn {
  868. margin-bottom: 20px;
  869. display: flex;
  870. align-items: center;
  871. justify-content: center;
  872. .btn11 {
  873. position: absolute;
  874. right: 0;
  875. }
  876. .btn2 {
  877. color: #185da6;
  878. background: #d5e4ff;
  879. width: 240px;
  880. }
  881. }
  882. .bnh {
  883. margin: 0 auto;
  884. margin-bottom: 20px;
  885. display: flex;
  886. flex-direction: column;
  887. align-items: center;
  888. justify-content: center;
  889. }
  890. .barBtn {
  891. display: flex;
  892. align-items: center;
  893. justify-content: center;
  894. }
  895. .selects {
  896. width: 100%;
  897. }
  898. .rowsa {
  899. margin-bottom: 20px;
  900. }
  901. }
  902. .tableBox {
  903. background: #fff;
  904. padding: 19px;
  905. border-radius: 5px;
  906. }
  907. .dashboard {
  908. &-container {
  909. margin: 30px;
  910. }
  911. &-text {
  912. font-size: 30px;
  913. line-height: 46px;
  914. }
  915. }
  916. .pind {
  917. padding: 0 20px;
  918. }
  919. .pind10 {
  920. padding: 0 5px;
  921. }
  922. .width100 {
  923. width: 100px;
  924. }
  925. .width150 {
  926. width: 200px;
  927. }
  928. .width300 {
  929. width: 295px;
  930. }
  931. .width500 {
  932. width: 280px;
  933. }
  934. .width90 {
  935. width: 90px;
  936. }
  937. .blue {
  938. color: #185da6;
  939. }
  940. .h-title {
  941. display: flex;
  942. .blue {
  943. display: block;
  944. width: 6px;
  945. height: 17px;
  946. background: linear-gradient(180deg, #185da6 0%, #3195ff 100%);
  947. border-radius: 3px;
  948. }
  949. .text {
  950. font-size: 16px;
  951. font-weight: 600;
  952. color: #13171e;
  953. margin: 0 0 0 14px;
  954. }
  955. }
  956. .flextab-item {
  957. display: flex;
  958. align-items: center;
  959. margin-left: 20px;
  960. }
  961. .flextab-item > div {
  962. font-size: 15px;
  963. margin-right: 15px;
  964. }
  965. .flextab-item > div span.s-1 {
  966. color: #185da6;
  967. }
  968. .flextab-item > div span.s-2 {
  969. font-weight: bold;
  970. }
  971. .inputOn {
  972. width: 200px;
  973. margin: 10px 10px;
  974. }
  975. .search-title {
  976. padding: 20px 10px;
  977. // width: 900px;
  978. display: flex;
  979. justify-content: space-between;
  980. }
  981. .search-title-span {
  982. font-size: 20px;
  983. font-weight: 600;
  984. color: #13171e;
  985. }
  986. .conter {
  987. position: relative;
  988. margin: 20px 0;
  989. border: 1px solid skyblue;
  990. padding: 20px;
  991. border-radius: 5px;
  992. }
  993. .conter-title {
  994. font-size: 16px;
  995. font-weight: 600;
  996. color: #13171e;
  997. }
  998. .blue {
  999. color: #185da6;
  1000. font-size: 16px;
  1001. font-weight: 600;
  1002. }
  1003. .conter-case {
  1004. margin: 20px 0;
  1005. font-size: 15px;
  1006. text-indent: 30px;
  1007. line-height: 30px;
  1008. }
  1009. .conter-case1 {
  1010. margin: 0 auto;
  1011. margin: 50px 0;
  1012. }
  1013. .yeleou {
  1014. font-size: 16px;
  1015. color: rgb(233, 157, 66);
  1016. cursor: pointer;
  1017. }
  1018. .conter-num {
  1019. font-size: 15px;
  1020. font-weight: 600;
  1021. }
  1022. .conter-time {
  1023. font-size: 15px;
  1024. padding-top: 10px;
  1025. font-weight: 600;
  1026. }
  1027. .onQuery {
  1028. padding: 0 20px;
  1029. color: rgb(233, 157, 66);
  1030. }
  1031. .cont-title {
  1032. width: 100%;
  1033. padding: 20px;
  1034. display: flex;
  1035. justify-content: space-between;
  1036. }
  1037. .title-left {
  1038. display: flex;
  1039. }
  1040. .title-right {
  1041. width: 300px;
  1042. display: flex;
  1043. float: right;
  1044. & > div {
  1045. width: 150px;
  1046. border: 1px solid #d5e4ff;
  1047. text-align: center;
  1048. padding: 10px 0;
  1049. }
  1050. }
  1051. .title-right-data {
  1052. background: #3195ff;
  1053. color: #fff;
  1054. }
  1055. .title-left-p {
  1056. line-height: 38px;
  1057. padding: 0 20px;
  1058. font-size: 16px;
  1059. color: #13171e;
  1060. }
  1061. .title-left-span {
  1062. color: #3195ff;
  1063. font-size: 18px;
  1064. padding: 0 5px;
  1065. // font-weight: 600;
  1066. }
  1067. .title-left-btn {
  1068. margin: 0 0 0 40px;
  1069. }
  1070. .title-left-checked {
  1071. margin-top: 10px;
  1072. }
  1073. .conter-checked {
  1074. position: absolute;
  1075. top: 21px;
  1076. left: 30px;
  1077. }
  1078. .bule {
  1079. background: #3195ff !important;
  1080. color: #fff !important;
  1081. }
  1082. .titleName {
  1083. margin-left: 30px;
  1084. vertical-align: top;
  1085. }
  1086. .marginLeft {
  1087. margin-left: -110px;
  1088. }
  1089. ::v-deep .el-input-number .el-input__inner {
  1090. text-align: left;
  1091. }
  1092. </style>