1
0

search.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <template>
  2. <div class="container" style="height: 80vh; width: 95vw">
  3. <el-row :gutter="10">
  4. <el-col :span="5">
  5. <!-- 左边的导航菜单 -->
  6. <div class="left-body">
  7. <el-menu default-active="1">
  8. <el-menu-item index="1" @click="activePatient(1)">
  9. <i class="el-icon-user"></i>
  10. <span>患者基本信息/亲属</span>
  11. </el-menu-item>
  12. <el-submenu index="2">
  13. <template slot="title">
  14. <i class="el-icon-document"></i>
  15. <span>就诊信息</span>
  16. </template>
  17. <el-submenu v-for="(mouths, year) in groupedDates" :key="year" :index="year.toString()">
  18. <template slot="title">
  19. <span>{{year}}年</span>
  20. </template>
  21. <el-submenu v-for="(days,month) in mouths" :key="month" :index="month.toString()">
  22. <template slot="title">
  23. <span>{{month}}月</span>
  24. </template>
  25. <el-menu-item v-for="item in days" @click="getCard(item.id); activePatient(2)" :key="item.id" :index="item.id">
  26. {{year}}年{{month}}月{{item.day}}日
  27. </el-menu-item>
  28. </el-submenu>
  29. </el-submenu>
  30. </el-submenu>
  31. </el-menu>
  32. </div>
  33. </el-col>
  34. <el-col :span="19">
  35. <!-- 右边的信息显示 -->
  36. <div class="right-body">
  37. <!-- 患者基本信息/亲属 -->
  38. <div class="patient-info-nk" v-if="active === 1">
  39. <!-- 患者基本信息 -->
  40. <div class="patient-info">
  41. <el-descriptions style="width: 100%" title="患者信息" :column="3" border>
  42. <el-descriptions-item label="患者标识符">{{patientInfo.patientCode}}</el-descriptions-item>
  43. <el-descriptions-item label="就诊卡号">{{patientInfo.cardNumber}}</el-descriptions-item>
  44. <el-descriptions-item label="姓名">{{patientInfo.name}}</el-descriptions-item>
  45. <el-descriptions-item label="性别">
  46. <dict-tag :options="dict.type.patient_sex" :value="patientInfo.sex"/>
  47. </el-descriptions-item>
  48. <el-descriptions-item label="身份证号" prop="sfzh">{{patientInfo.sfzh}}</el-descriptions-item>
  49. <el-descriptions-item label="出生时间" prop="birthDate">{{patientInfo.birthDate}}</el-descriptions-item>
  50. <el-descriptions-item label="居住地址" prop="address">{{patientInfo.address}}</el-descriptions-item>
  51. <el-descriptions-item label="联系电话" prop="phone">{{patientInfo.phone}}</el-descriptions-item>
  52. <el-descriptions-item label="婚姻状况" prop="marital">
  53. <dict-tag :options="dict.type.patient_marital" :value="patientInfo.marital" />
  54. </el-descriptions-item>
  55. <el-descriptions-item label="民族" prop="nation">{{patientInfo.nation}}</el-descriptions-item>
  56. <el-descriptions-item label="职业" prop="career">{{patientInfo.career}}</el-descriptions-item>
  57. <el-descriptions-item label="国籍" prop="nationality">{{patientInfo.nationality}}</el-descriptions-item>
  58. <el-descriptions-item label="病历号" prop="blh">{{patientInfo.blh}}</el-descriptions-item>
  59. <el-descriptions-item label="病人卡号" prop="brkh">{{patientInfo.brkh}}</el-descriptions-item>
  60. <el-descriptions-item label="婴儿序号" prop="yexh">{{patientInfo.yexh}}</el-descriptions-item>
  61. </el-descriptions>
  62. </div>
  63. <!-- 患者亲属 -->
  64. <div class="patient-nk" style="margin-top: 10px">
  65. <el-table height="calc(75vh - 190px)" width="69vw" :data="nkList">
  66. <el-table-column label="姓名" align="center" prop="name"></el-table-column>
  67. <el-table-column label="所属关系" align="center" prop="kinship"></el-table-column>
  68. <el-table-column label="近亲地址" align="center" prop="address"></el-table-column>
  69. <el-table-column label="联系电话" align="center" prop="phone"></el-table-column>
  70. <el-table-column label="工作名称" align="center" prop="workName"></el-table-column>
  71. <el-table-column label="工作类别" align="center" prop="workCode"></el-table-column>
  72. </el-table>
  73. <pagination v-show="totalNk > 0" :total="totalNk" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getNkList" />
  74. </div>
  75. </div>
  76. <!-- 诊断信息 -->
  77. <div class="dg-info" v-if="active === 2">
  78. <!-- 单次就诊的详细信息 -->
  79. <div class="pv">
  80. <el-descriptions :column="3" border height="calc(90vh - 273px)" title="就诊信息">
  81. <el-descriptions-item label="患者类别">
  82. <dict-tag :options="dict.type.patient_category" :value="pvList.patientCategory"></dict-tag>
  83. </el-descriptions-item>
  84. <el-descriptions-item label="所在病区">{{pvList.wardName}}</el-descriptions-item>
  85. <el-descriptions-item label="主治医生">{{pvList.physician}}</el-descriptions-item>
  86. <el-descriptions-item label="主管护士">{{pvList.nurseCode}}</el-descriptions-item>
  87. <el-descriptions-item label="在院状态">
  88. <dict-tag :options="dict.type.hospital_status" :value="pvList.hospitalStatus"/>
  89. </el-descriptions-item>
  90. <el-descriptions-item label="入院次数">{{pvList.hospitalizedNumber}}</el-descriptions-item>
  91. <el-descriptions-item label="就诊号码">{{pvList.cardId}}</el-descriptions-item>
  92. <el-descriptions-item label="出院方式">
  93. <dict-tag :options="dict.type.discharge_method" :value="pvList.dischargeMothod"/>
  94. </el-descriptions-item>
  95. <el-descriptions-item label="入院时间">{{pvList.admissionTime}}</el-descriptions-item>
  96. <el-descriptions-item label="出院时间">{{pvList.dischargeTime}}</el-descriptions-item>
  97. <el-descriptions-item label="危重级别">{{pvList.level}}</el-descriptions-item>
  98. <el-descriptions-item label="入区时间">{{pvList.entryTime}}</el-descriptions-item>
  99. <el-descriptions-item label="出区时间">{{pvList.exitTime}}</el-descriptions-item>
  100. <el-descriptions-item label="出区原因">{{pvList.reasonArea}}</el-descriptions-item>
  101. </el-descriptions>
  102. </div>
  103. <!-- 诊断结果列表 -->
  104. <div class="dg" style="margin-top: 10px">
  105. <el-table width="69vw" height="calc(75vh - 190px)" :data="dgList">
  106. <el-table-column label="诊断名称" align="center" prop="diagnosticCode"></el-table-column>
  107. <el-table-column label="诊断时间" align="center" prop="diagnosisTime"></el-table-column>
  108. <el-table-column label="诊断类型" align="center" prop="diagnosticType">
  109. <template slot-scope="scope">
  110. <dict-tag :options="dict.type.diagnostic_type" :value="scope.row.diagnosticType"/>
  111. </template>
  112. </el-table-column>
  113. <el-table-column label="诊断类别" align="center" prop="diagnosticCategoryCode">
  114. <template slot-scope="scope">
  115. <dict-tag :options="dict.type.diagnostic_category_code" :value="scope.row.diagnosticCategoryCode"/>
  116. </template>
  117. </el-table-column>
  118. </el-table>
  119. <pagination v-show="totalDg > 0" :total="totalDg" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getDgList" />
  120. </div>
  121. </div>
  122. </div>
  123. </el-col>
  124. </el-row>
  125. </div>
  126. </template>
  127. <script>
  128. export default {
  129. dicts: ['patient_category','diagnostic_type', 'diagnostic_category_code','hospital_status','discharge_method','patient_sex','patient_marital'],
  130. data(){
  131. return{
  132. isGrouped: false,
  133. active:1,
  134. timeList:null,
  135. groupedDates: {},
  136. //亲属表数据总条数
  137. totalNk:0,
  138. //诊断表数据总条数
  139. totalDg:0,
  140. //dg表数据
  141. dgList:null,
  142. //pv表数据
  143. pvList:null,
  144. //nk表数据
  145. nkList:null,
  146. //患者详细信息
  147. patientInfo:null,
  148. //就诊详细信息
  149. pvInfo:null,
  150. //查询参数
  151. queryParams:{
  152. pageNum:1,
  153. pageSize:10
  154. }
  155. }
  156. },
  157. watch:{
  158. },
  159. created() {
  160. this.activePatient(1);
  161. this.getTime();
  162. },
  163. methods:{
  164. async activePatient(sign) {
  165. if (sign === 1) {
  166. this.getPatient();
  167. this.getNkList();
  168. this.active = sign;
  169. }
  170. if (sign === 2) {
  171. this.getDgList();
  172. this.active = sign;
  173. }
  174. },
  175. /** 查询某一次的就诊信息 */
  176. getCard(id){
  177. this.get({
  178. url:'/work/pv1/list',
  179. data:{
  180. id:id
  181. }
  182. }).then((response)=>{
  183. this.pvList = response.rows[0];
  184. })
  185. },
  186. /** 查询某科室某个病人的就诊记录 */
  187. getTime(){
  188. this.ajax({
  189. url:'/work/pv1/list',
  190. data:{
  191. patientId:this.param.id,
  192. department:this.param.department
  193. }
  194. }).then((response)=>{
  195. this.timeList = response.rows;
  196. this.groupDates(this.timeList);
  197. })
  198. },
  199. groupDates(dates){
  200. if (this.isGrouped) {
  201. // 如果已经获取了就诊日期数据,直接返回
  202. return;
  203. }
  204. dates.forEach(date => {
  205. let year = date.admissionTime.substring(0, 4);
  206. let month = date.admissionTime.substring(4, 6);
  207. let day = date.admissionTime.substring(6, 8);
  208. let id = date.id;
  209. if (!this.groupedDates[year]) {
  210. this.groupedDates[year] = {};
  211. }
  212. if (!this.groupedDates[year][month]) {
  213. this.groupedDates[year][month] = [];
  214. }
  215. this.groupedDates[year][month].push({id: id, day: day});
  216. })
  217. this.isGrouped = true;
  218. },
  219. /** 查询患者信息 */
  220. getPatient(){
  221. this.get({
  222. url:'/work/patient/detail/'+this.param.id,
  223. }).then((response)=>{
  224. this.patientInfo = response.data;
  225. console.log(this.patientInfo)
  226. })
  227. },
  228. /** 查询某一次就诊信息 */
  229. getPvList(){
  230. this.get({
  231. url:'/work/pv1/list',
  232. data:{
  233. cardId:this.param.cardId
  234. }
  235. }).then((response)=>{
  236. this.pvList = response.rows[0];
  237. })
  238. },
  239. /** 查询亲属表 */
  240. getNkList() {
  241. this.get({
  242. url:'/work/nk/list',
  243. data:{
  244. patientId:this.param.id,
  245. ...this.queryParams
  246. }
  247. }).then((response)=>{
  248. this.nkList = response.rows;
  249. this.totalNk = response.total;
  250. })
  251. },
  252. /** 查询诊断记录表 */
  253. getDgList(){
  254. this.get({
  255. url:'/work/dg/list',
  256. data:{
  257. patientId:this.patientInfo.id,
  258. ...this.queryParams
  259. }
  260. }).then((response)=>{
  261. this.dgList = response.rows;
  262. this.totalDg = response.total;
  263. })
  264. }
  265. }
  266. }
  267. </script>
  268. <style scoped lang="scss">
  269. </style>