caseViews.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. <template>
  2. <div id="MyDiv" style="margin: 16px" :class="{ nocopy: $route.query.status }">
  3. <div class="header zbjg-box" style="background: #fff;margin: 10px 0;padding: 6px 20px;">
  4. <el-button type="primary" >AI模型</el-button>
  5. <el-button type="primary" @click="clickzbjg">指标结果</el-button>
  6. </div>
  7. <div class="cont_container">
  8. <!-- 左侧点击列表部分 -->
  9. <div class="cont-left-tiem">
  10. <div style="margin: 20px">
  11. <el-button type="primary" @click="onControll">执行质控</el-button>
  12. </div>
  13. <ul class="el-menu-vertical-demo el-menu">
  14. <!-- 预警信息不展示病案首页 -->
  15. <li v-if="$route.query.from !== 'forewarning'" class="li-left-item" :class="is_active == 0 ? 'is-active' : ''" @click="clickTree(0, '病案首页')">
  16. <span>病案首页</span>
  17. </li>
  18. <li
  19. :class="[
  20. is_active == item.bllb && item.bllb != 49 ? 'is-active' : '',
  21. item.bllb == 49 || [2000002, 294, 303, 288, 87].includes(item.bllb) ? 'li-left-itemyz' : 'li-left-item',
  22. ]"
  23. v-for="(item, index) in treeList"
  24. :key="index"
  25. @click="clickTree(item.bllb, item.name, item)"
  26. >
  27. <span>{{ item.name }}</span>
  28. <div v-if="item.bllb == 49">
  29. <div :class="['li-left-item-li', is_active == '长期医嘱' ? 'is-active' : '']" data-li="49-1" :id="item.bllb">长期医嘱</div>
  30. <div :class="['li-left-item-li', is_active == '临时医嘱' ? 'is-active' : '']" data-li="49-2" :id="item.bllb">临时医嘱</div>
  31. </div>
  32. <div v-if="item.bllb == 2000002">
  33. <div :class="['li-left-item-li', is_active == jitem.ExamType ? 'is-active' : '']" v-for="(jitem, jindex) in item.list" :key="jindex" :id="jitem.type">
  34. {{ jitem.name }}
  35. </div>
  36. </div>
  37. <!-- 病程记录、手术记录 -->
  38. <div v-if="[294, 303, 288, 87].includes(item.bllb)">
  39. <div
  40. :class="['li-left-item-li', is_active == jitem.blbh ? 'is-active' : '']"
  41. v-for="(jitem, jindex) in item.list"
  42. :key="jindex"
  43. :id="`${jitem.blbh}`"
  44. :title="jitem.name.trim()"
  45. >
  46. {{ jitem.name.trim() }}
  47. </div>
  48. </div>
  49. </li>
  50. </ul>
  51. </div>
  52. <div class="cont-left-file">
  53. <div v-if="is_active == 0">
  54. <mainHomePage :data="mainHomeData" ref="main" :ifFile="ifFile"></mainHomePage>
  55. </div>
  56. <div v-else-if="parentType == 292">
  57. <!-- 入院记录 -->
  58. <admissionRecord :data="admissionRecord" :ifFile="ifFile"></admissionRecord>
  59. </div>
  60. <div v-else-if="parentType == '1' && is_active == 1">
  61. <!-- 出院记录 -->
  62. <OutHospitalRecord :data="outHospitalRecordData" />
  63. </div>
  64. <div v-else-if="parentType == 294">
  65. <!-- 病程记录 -->
  66. <CaseRecord :data="caseRecodeInfo" v-if="caseRecodeInfo.is_format === 1" />
  67. <NoFormatText :text="caseRecodeInfo.content" :data="caseRecodeInfo" name="" v-else />
  68. </div>
  69. <div v-else-if="parentType == 303">
  70. <!-- 手术记录 -->
  71. <template v-if="surgeryData.is_format">
  72. <ShouShuRecord1 v-if="surgeryData.type === 1" :data="surgeryData" />
  73. <ShouShuRecord2 v-if="surgeryData.type === 2" :data="surgeryData" />
  74. <ShouShuRecord4 v-if="surgeryData.type === 4" :data="surgeryData" />
  75. </template>
  76. <NoFormatText v-else :text="surgeryData.content" :data="surgeryData" :name="blname_title" />
  77. </div>
  78. <div v-else-if="is_active == '长期医嘱'">
  79. <!-- 长期医嘱 -->
  80. <medicalAdvice :dataObj="longAdvice"></medicalAdvice>
  81. </div>
  82. <div v-else-if="is_active == '临时医嘱'">
  83. <!-- 临时医嘱 -->
  84. <medicalTemporary :dataObj="happensAdvice"></medicalTemporary>
  85. </div>
  86. <div v-else-if="parentType == '2000002' && is_active == '1'">
  87. <!-- 病历图文报告 -->
  88. <caseImageText :dataObjArr="pacsDetail"></caseImageText>
  89. </div>
  90. <div v-else-if="parentType == '2000002' && is_active == '2'">
  91. <!-- 超声诊断 -->
  92. <ultrasound :dataObjArr="pacsDetail"></ultrasound>
  93. </div>
  94. <div v-else-if="parentType == '2000002' && is_active == '3'">
  95. <!-- 影像诊断 -->
  96. <imaging :dataObjArr="pacsDetail"></imaging>
  97. </div>
  98. <div v-else-if="parentType == '2000002' && is_active == '4'">
  99. <!-- 为心电 -->
  100. <electrocar :dataObjArr="pacsDetail"></electrocar>
  101. </div>
  102. <div v-else-if="parentType == '2000002' && is_active == '5'">
  103. <!-- 检验报告单 病理 -->
  104. <checkout :dataObjArr="pacsDetail"></checkout>
  105. </div>
  106. <div v-else-if="parentType == '2000002' && is_active == '6'">
  107. <!-- 內窥镜检查报告 病理 -->
  108. <sightGlass :dataObjArr="pacsDetail"></sightGlass>
  109. </div>
  110. <div v-else-if="is_active == 288 || is_active == 18">
  111. <!-- 死亡记录 或 24小时内入院记录 -->
  112. <DeathText :dataObjArr="dataObj"></DeathText>
  113. </div>
  114. <div v-else>
  115. <div v-if="update">
  116. <newContFile v-for="(item, index) of text" :key="index" :text="item.HJNR" :name="name_title"></newContFile>
  117. </div>
  118. </div>
  119. </div>
  120. <!-- status 不存在 意味着不脱敏、医院自助查询 -->
  121. <template v-if="!$route.query.status && isControl">
  122. <!-- 病案首页质控 -->
  123. <CaseQualityBox v-if="results" :data="results" :type="type_v" :width="340" :height="820" @hightRight="hightRight" />
  124. </template>
  125. </div>
  126. <div class="VueDragResize-box" v-if="is_VueDragResize">
  127. <!-- 弹窗 -->
  128. <VueDragResize :style="`z-index:${zInfex_0};`"
  129. dragHandle=".VueDragResize-title-box"
  130. :isActive="true" :isDraggable="true"
  131. :parentW="parentW" :parentH="parentH" :parentLimitation="true" :preventActiveBehavior="true"
  132. :w="width" :h="height"
  133. :minw="minw" :minh="minh"
  134. :x='left' :y='top' @dragstop="onDragstop"
  135. @resizing="resize" @dragging="resize" @deactivated="onDeactivated"
  136. >
  137. <div class="VueDragResize-centent-box">
  138. <div class="VueDragResize-title-box">
  139. <div class="title"><span>指标结果</span></div>
  140. <div class="icon-box">
  141. <span @click="clickcloseBtn">X</span>
  142. </div>
  143. </div>
  144. <div class="navbaerMag-content-box">
  145. <div class="list-box">
  146. <div class="list-item-box">
  147. <div class="listItem-title-box">
  148. <span>指标名称:</span>
  149. <span style="color: #ff0000;">{{ show_name }}</span>
  150. <!-- <span class="span-btn" @click="clickJsTitleBtn">指标计算</span> -->
  151. <img src="../../assets/images/arrow-down.png" alt="" @click.stop="clickListItem" class="arrow-down" :class="show_box?'show':''"/>
  152. </div>
  153. <div class="items-show-box" :class=" show_box ? 'show': '' ">
  154. <div class="xqItemError-box" v-for="(item,index) in xqItemError" :key="index">
  155. <div class="items-titleBox">
  156. <span class="idx-span">{{ index+1 }}</span>
  157. <el-tag :type="item.status == 1?'success':'danger'">{{ item.status == 1?'正确':'错误' }}</el-tag>
  158. <img src="../../assets/images/arrow-down.png" alt="" @click.stop="clickxqItemErrorItems(index)" class="arrow-down" :class="item.show ?'show':''"/>
  159. </div>
  160. <div class="itemsDiv-box" :class=" item.show ? 'show': '' ">
  161. <div class="items-box" v-for="(items,idx) in item.content" :key="idx">
  162. <div class="items-content" v-html="items.content" :style="`color: ${items.status == 1?'#000':'#ff0000'};`"></div>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. </div>
  170. </div>
  171. </VueDragResize>
  172. </div>
  173. </div>
  174. </template>
  175. <script>
  176. import Mmenu from '@/components/m-menu';
  177. import mainHomePage from '@/views/allcase/contFile/mainHomePage';
  178. import newContFile from '@/views/allcase/contFile/newContFile';
  179. import admissionRecord from '@/views/allcase/contFile/admissionRecord2';
  180. import medicalAdvice from '@/views/allcase/contFile/medicalAdvice';
  181. import medicalTemporary from '@/views/allcase/contFile/medicalTemporary';
  182. import caseImageText from '@/views/allcase/report/caseImageText';
  183. import ultrasound from '@/views/allcase/report/ultrasound';
  184. import imaging from '@/views/allcase/report/imaging';
  185. import electrocar from '@/views/allcase/report/electrocar';
  186. import checkout from '@/views/allcase/report/checkout';
  187. import sightGlass from '@/views/allcase/report/sightGlass';
  188. import CaseRecord from './components/CaseRecord2.vue';
  189. import ShouShuRecord1 from './components/ShouShuRecord1.vue';
  190. import ShouShuRecord2 from './components/ShouShuRecord2.vue';
  191. import ShouShuRecord4 from './components/ShouShuRecord4.vue';
  192. import NoFormatText from './components/NoFormatText.vue';
  193. import OutHospitalRecord from './components/OutHospitalRecord.vue';
  194. import CaseQualityBox from './components/CaseQualityBox2.vue';
  195. import DeathText from './components/DeathText.vue';
  196. import VueDragResize from 'vue-drag-resize';
  197. export default {
  198. components: {
  199. Mmenu,
  200. mainHomePage,
  201. newContFile,
  202. admissionRecord,
  203. medicalAdvice,
  204. medicalTemporary,
  205. caseImageText,
  206. ultrasound,
  207. imaging,
  208. electrocar,
  209. sightGlass,
  210. checkout,
  211. CaseRecord,
  212. ShouShuRecord1,
  213. ShouShuRecord2,
  214. ShouShuRecord4,
  215. NoFormatText,
  216. OutHospitalRecord,
  217. CaseQualityBox,
  218. DeathText,
  219. VueDragResize,
  220. },
  221. directives: {},
  222. filters: {},
  223. extends: {},
  224. mixins: {},
  225. props: {},
  226. data() {
  227. return {
  228. type_v: '', // v2 表示从(事中)进入
  229. mainHomeData: {},
  230. admissionRecord: {},
  231. longAdvice: {},
  232. happensAdvice: {},
  233. valData: '',
  234. ruleId: '',
  235. ifFile: false,
  236. treeList: [],
  237. is_active: 0,
  238. parentType: 0,
  239. name_title: '',
  240. text: [],
  241. update: true,
  242. titleName: '病案首页',
  243. pacsDetail: {},
  244. // 病程记录详情
  245. caseRecodeInfo: {
  246. is_format: 1,
  247. },
  248. surgeryData: {
  249. mzfj: [],
  250. ssqk: [],
  251. sscxsj: [],
  252. sslb: [],
  253. is_format: 0,
  254. },
  255. outHospitalRecordData: {
  256. name: {},
  257. ry_time: {},
  258. sex: {},
  259. age: {},
  260. cy_time: {},
  261. zyts: {},
  262. ryqk: {},
  263. cbzd: {},
  264. zljg: {},
  265. cyqk: {},
  266. cyzd: {},
  267. cyyz: {},
  268. },
  269. dataObj: [],
  270. results: null,
  271. is_tm_path: ['/hospital-caseViews', '/embedIndex-caseViews', '/reviewIndex-caseViews', '/whitelist-caseViews', '/whitelist-search'],
  272. isControl: false,
  273. // 弹窗信息
  274. width: 0,
  275. height: 0,
  276. minw: 620,
  277. minh: 340,
  278. parentH: 0,
  279. parentW: 0,
  280. top: 1,
  281. left: 500,
  282. zInfex_0: 9999,
  283. is_VueDragResize: false,
  284. tabStatus: 1,
  285. show_box: false,
  286. xqItemError: [],
  287. show_name: ''
  288. };
  289. },
  290. computed: {
  291. bcjlLiIds() {
  292. // 病程记录子项数据
  293. const arr = Object.values(this.treeList).filter(item => item.bllb === 294);
  294. const liIds = [];
  295. if (arr.length) {
  296. if (arr[0].list) {
  297. for (let i = 0; i < arr[0].list.length; i++) {
  298. liIds.push(arr[0].list[i].blbh);
  299. }
  300. }
  301. }
  302. return liIds;
  303. },
  304. shoushuLiIds() {
  305. // 病程记录子项数据
  306. const arr = Object.values(this.treeList).filter(item => item.bllb === 303);
  307. const liIds = [];
  308. if (arr.length) {
  309. if (arr[0].list) {
  310. for (let i = 0; i < arr[0].list.length; i++) {
  311. liIds.push(arr[0].list[i].blbh);
  312. }
  313. }
  314. }
  315. return liIds;
  316. },
  317. blname_title() {
  318. let title;
  319. const type = this.surgeryData.type;
  320. if (type === 1) {
  321. title = '手术风险评估表';
  322. } else if (type === 2) {
  323. title = '手术安全核查表';
  324. } else if (type === 3) {
  325. title = '手术同意书';
  326. } else if (type === 4) {
  327. title = '手术记录';
  328. }
  329. return title;
  330. },
  331. },
  332. watch: {},
  333. created() {
  334. // 弹窗
  335. let getViewportSize = this.$getViewportSize();
  336. this.parentH = getViewportSize.height; // 组件范围
  337. this.parentW = getViewportSize.width; // 组件范围
  338. this.width = 400; // 可拖动div 宽
  339. this.height = Number(getViewportSize.height - 100); // 可拖动div 高度
  340. this.left = Number(getViewportSize.width) - Number(this.width) - 40;
  341. this.top = 60;
  342. this.type_v = this.$route.query.type_v;
  343. this.show_name = this.$route.query.show_name?this.$route.query.show_name:'';
  344. this.isControl = localStorage.getItem('isControl') == 'true' ? true : false;
  345. console.log(!this.$route.query.status && this.isControl, !this.$route.query.status, this.isControl);
  346. },
  347. mounted() {
  348. this.valData = this.storageGet('getData');
  349. this.ruleId = this.storageGet('getDataRule');
  350. let xqItemError = this.storageGet('xqItemError');
  351. if(xqItemError){
  352. this.xqItemError = JSON.parse(xqItemError);
  353. // this.is_VueDragResize= true;
  354. }
  355. if (this.valData) {
  356. if (this.$route.query.from !== 'forewarning') {
  357. this.funQuery();
  358. }
  359. this.getCaseQualityResults();
  360. }
  361. this.getTree();
  362. },
  363. methods: {
  364. clickzbjg(){
  365. this.is_VueDragResize = true;
  366. },
  367. clickListItem(){
  368. this.show_box = !this.show_box;
  369. this.resize();
  370. },
  371. clickxqItemErrorItems(i){
  372. let xqItemError = this.xqItemError;
  373. xqItemError[i].show = !xqItemError[i].show;
  374. this.xqItemError = xqItemError;
  375. this.resize();
  376. },
  377. clickStatus(n){
  378. this.tabStatus = Number(n);
  379. },
  380. clickcloseBtn(){
  381. this.is_VueDragResize = false;
  382. },
  383. // 拖拽时可以确定元素位置
  384. resize(newRect) {
  385. if(newRect){
  386. this.width = newRect.width;
  387. this.height = newRect.height;
  388. this.top = newRect.top;
  389. this.right = newRect.right;
  390. }
  391. },
  392. onDeactivated(e){
  393. },
  394. onDragstop(newRect) {
  395. },
  396. onControll() {
  397. this.$axios2.get(`/quality_handle?zyh=${this.valData}`).then(res => {
  398. this.$message.success('执行中...');
  399. if (res.data === true) {
  400. this.valData = this.storageGet('getData');
  401. if (this.valData) {
  402. if (this.$route.query.from !== 'forewarning') {
  403. this.funQuery();
  404. }
  405. this.getCaseQualityResults();
  406. }
  407. this.getTree();
  408. }
  409. });
  410. },
  411. // 获取新病案指控结果
  412. getCaseQualityResults() {
  413. const params = {
  414. id: Number(this.valData),
  415. ruleId: Number(this.ruleId)
  416. };
  417. if (this.type_v == 'v2') {
  418. // (事中)
  419. this.$axios2.post('/get_case_quality_v2', params).then(res => {
  420. this.results = null;
  421. this.$nextTick(() => {
  422. this.results = res.data;
  423. });
  424. });
  425. } else {
  426. this.$axios2.post('/get_case_quality', params).then(res => {
  427. this.results = null;
  428. this.$nextTick(() => {
  429. this.results = res.data;
  430. });
  431. });
  432. }
  433. },
  434. reload() {
  435. // 移除组件
  436. this.update = false;
  437. // 在组件移除后,重新渲染组件
  438. // this.$nextTick可实现在DOM 状态更新后,执行传入的方法。
  439. this.$nextTick(() => {
  440. this.update = true;
  441. });
  442. },
  443. funEdit() {
  444. this.ifFile = true;
  445. this.$message('errer:功能待开发');
  446. },
  447. getback() {
  448. this.$router.go(-1);
  449. },
  450. /**
  451. * 跳转对应病历首页
  452. */
  453. getBlankIndexss(item) {
  454. this.$refs.main.getBlankIndex(item);
  455. },
  456. funQuery() {
  457. const params = {
  458. id: this.valData,
  459. };
  460. if (this.is_tm_path.includes(this.$route.path)) {
  461. params.is_tm = 1;
  462. }
  463. this.$axios.post('/medical_record', params).then(res => {
  464. this.mainHomeData = res.data;
  465. });
  466. },
  467. getTree() {
  468. let that = this;
  469. let pramse = {
  470. id: this.valData,
  471. };
  472. this.$axios.post('/getTree', pramse).then(res => {
  473. that.treeList = res.data;
  474. // 当页面上级为预警信息时,设置默认
  475. const keys = Object.keys(this.treeList);
  476. if (this.$route.query.from === 'forewarning') {
  477. const item = this.treeList[keys[0]];
  478. this.clickTree(item.bllb, item.name, item);
  479. }
  480. });
  481. },
  482. clickTree(b, n, item) {
  483. if (item) {
  484. if (item.blbh) {
  485. this.is_active_blbh = item.blbh;
  486. } else {
  487. this.is_active_blbh = event.target.id;
  488. }
  489. } else {
  490. // this.is_active_blbh = this.mainHomeData.MED_REC_ID
  491. this.is_active = 0;
  492. this.funQuery();
  493. }
  494. this.titleName = n;
  495. this.parentType = b;
  496. let that = this;
  497. // 判断点击的
  498. if (event.target.id || !item?.list) {
  499. if (event.target.outerText == '长期医嘱' || event.target.outerText == '临时医嘱') {
  500. that.is_active = event.target.outerText;
  501. } else if (b == 2000002) {
  502. that.is_active = event.target.id;
  503. } else if (b == 294) {
  504. that.is_active = event.target.id;
  505. } else if (b == 303) {
  506. that.is_active = event.target.id;
  507. } else {
  508. that.is_active = b;
  509. }
  510. }
  511. that.name_title = n;
  512. if (b != 0 && b != 292 && b != 1) {
  513. const params = {
  514. MED_REC_ID: that.valData,
  515. bllb: b,
  516. };
  517. if (this.is_tm_path.includes(this.$route.path)) {
  518. params.is_tm = 1;
  519. }
  520. that.$axios.post('/getAllCase', params).then(res => {
  521. that.text = res.data;
  522. that.dataObj = res.data;
  523. that.reload();
  524. });
  525. } else if (b == 292) {
  526. // 获取详情
  527. const params = {
  528. id: this.valData,
  529. bllb: b,
  530. };
  531. if (this.is_tm_path.includes(this.$route.path)) {
  532. params.is_tm = '1';
  533. }
  534. console.log('这里1');
  535. that.$axios2.post('/get_case_platform', params).then(res => {
  536. this.admissionRecord = res.data;
  537. });
  538. } else if (b == 1) {
  539. // 获取详情
  540. const params = {
  541. id: this.valData,
  542. bllb: b,
  543. };
  544. if (this.is_tm_path.includes(this.$route.path)) {
  545. params.is_tm = 1;
  546. }
  547. console.log('这里2');
  548. that.$axios2.post('/get_case_platform', params).then(res => {
  549. this.outHospitalRecordData = res.data;
  550. });
  551. }
  552. if (that.is_active == '长期医嘱') {
  553. // 长期医嘱
  554. const params = {
  555. AAA28: that.valData,
  556. };
  557. if (this.is_tm_path.includes(this.$route.path)) {
  558. params.is_tm = 1;
  559. }
  560. that.$axios.post('/long', params).then(res => {
  561. this.longAdvice = res.data;
  562. });
  563. }
  564. if (that.is_active == '临时医嘱') {
  565. // 临时医嘱
  566. const params = {
  567. AAA28: that.valData,
  568. };
  569. if (this.is_tm_path.includes(this.$route.path)) {
  570. params.is_tm = 1;
  571. }
  572. that.$axios.post('/temporary', params).then(res => {
  573. this.happensAdvice = res.data;
  574. });
  575. }
  576. if (that.parentType == '2000002' && that.is_active != '') {
  577. // 报告单 相关
  578. let parm = {
  579. type: Number(that.is_active),
  580. };
  581. if (this.is_tm_path.includes(this.$route.path)) {
  582. parm.is_tm = 1;
  583. }
  584. let treeListArr = Object.values(that.treeList);
  585. treeListArr.forEach((item, index) => {
  586. if (item.bllb == 2000002) {
  587. parm.zyh = Number(item.list[0].ZYH);
  588. }
  589. });
  590. that.$axios.post('/get_pacs_data', parm).then(res => {
  591. this.pacsDetail = res.data;
  592. });
  593. }
  594. // 病程记录
  595. if (item.bllb === 294) {
  596. if (that.is_active) {
  597. // 请求前先重置之前的数据
  598. that.caseRecodeInfo = {};
  599. let parm = { blbh: that.is_active };
  600. if (this.is_tm_path.includes(this.$route.path)) {
  601. parm.is_tm = 1;
  602. }
  603. that.$axios.post('/get_bc_data', parm).then(res => {
  604. that.caseRecodeInfo = res.data[0].bc_data;
  605. that.caseRecodeInfo.is_format = res.data[0].is_format;
  606. });
  607. }
  608. }
  609. // 手术记录
  610. if (item.bllb === 303) {
  611. if (that.is_active) {
  612. // 请求前先重置之前的数据
  613. that.surgeryData = {};
  614. let parm = { blbh: that.is_active };
  615. if (this.is_tm_path.includes(this.$route.path)) {
  616. parm.is_tm = 1;
  617. }
  618. that.$axios.post('/get_surgery_data', parm).then(res => {
  619. that.surgeryData = res.data[0].surgery_data;
  620. that.surgeryData.is_format = res.data[0].is_format;
  621. });
  622. }
  623. }
  624. },
  625. //质控依据高亮方法
  626. hightRight(hightKeyWord, bllb, zyh) {
  627. const that = this;
  628. let betweenPart = [];
  629. betweenPart = that.getKeyWord(hightKeyWord);
  630. //自动选中某个菜单
  631. that.is_active = bllb;
  632. that.titleName = '入院记录';
  633. that.parentType = bllb;
  634. console.log('这里3');
  635. const params = { id: zyh, bllb: bllb, isHight: 1, keyWord: betweenPart };
  636. that.$axios2.post('/get_case_platform', params).then(res => {
  637. this.admissionRecord = res.data;
  638. });
  639. },
  640. //获取需要高亮的关键词
  641. getKeyWord(str) {
  642. const result = [];
  643. let startIndex = 0;
  644. let endIndex;
  645. // 查找第一个【的索引
  646. while ((startIndex = str.indexOf('【', startIndex)) !== -1) {
  647. // 查找当前【之后的第一个】的索引
  648. endIndex = str.indexOf('】', startIndex);
  649. // 确保找到了闭合的】
  650. if (endIndex !== -1) {
  651. // 截取【和】之间的内容(不包括【和】)
  652. const content = str.substring(startIndex + 1, endIndex);
  653. result.push(content);
  654. // 更新开始索引为当前】之后的位置,以便查找下一个【
  655. startIndex = endIndex + 1;
  656. } else {
  657. // 如果没有找到闭合的】,则退出循环
  658. break;
  659. }
  660. }
  661. return result;
  662. },
  663. },
  664. };
  665. </script>
  666. <style lang="scss" scoped>
  667. #MyDiv {
  668. margin: 0;
  669. padding: 0 !important;
  670. }
  671. .header {
  672. margin: 10px 20px;
  673. text-align: right;
  674. display: flex;
  675. justify-content: flex-end;
  676. }
  677. .cont_container {
  678. display: flex;
  679. justify-content: center;
  680. }
  681. .cont-left-tiem {
  682. width: 250px;
  683. min-height: 650px;
  684. height: calc(100vh - 130px);
  685. overflow-y: scroll;
  686. background: #ffffff;
  687. }
  688. .cont-left-file {
  689. flex: 1;
  690. min-height: 650px;
  691. margin: 0 5px;
  692. height: calc(100vh - 130px);
  693. overflow-y: scroll;
  694. background: #ffffff;
  695. border: 1px solid #e2e2e2;
  696. padding: 10px;
  697. }
  698. .li-router {
  699. display: inline-block;
  700. width: 100%;
  701. height: 100%;
  702. }
  703. .li-left-item {
  704. line-height: 56px;
  705. font-size: 14px;
  706. color: #303133;
  707. padding: 0 20px;
  708. cursor: pointer;
  709. -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s;
  710. transition: border-color 0.3s, background-color 0.3s, color 0.3s;
  711. -webkit-box-sizing: border-box;
  712. box-sizing: border-box;
  713. }
  714. .li-left-itemyz {
  715. line-height: 56px;
  716. font-size: 14px;
  717. color: #303133;
  718. padding-left: 20px;
  719. -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s;
  720. transition: border-color 0.3s, background-color 0.3s, color 0.3s;
  721. -webkit-box-sizing: border-box;
  722. box-sizing: border-box;
  723. .li-left-item-li {
  724. width: 100%;
  725. line-height: 36px;
  726. padding: 0 20px;
  727. cursor: pointer;
  728. white-space: nowrap;
  729. overflow: hidden;
  730. text-overflow: ellipsis;
  731. }
  732. .li-left-item-li:hover {
  733. outline: 0;
  734. background-color: #ecf5ff;
  735. }
  736. }
  737. .li-left-item:focus,
  738. .li-left-item:hover {
  739. outline: 0;
  740. background-color: #ecf5ff;
  741. }
  742. .is-active {
  743. color: #409eff;
  744. }
  745. // 拖拽弹窗样式
  746. .VueDragResize-box{
  747. position: fixed;
  748. width: 100%;
  749. height: 100%;
  750. z-index: 9999;
  751. top: 0;
  752. left: 0;
  753. pointer-events: none; /* 鼠标事件穿透 */
  754. & ::v-deep .vdr-stick{
  755. display: none;
  756. }
  757. & ::v-deep .vdr.active:before{
  758. display: none;
  759. }
  760. .VueDragResize-centent-box{
  761. width: 100%;
  762. height: 100%;
  763. background: #fff;
  764. box-shadow: 0 1px 8px 0 rgb(206 206 206);
  765. border-radius: 6px;
  766. overflow: hidden;
  767. display: flex;
  768. flex-direction: column;
  769. pointer-events: all; /* 鼠标事件穿透 */
  770. .vdr-icon{
  771. width: 28px;
  772. height: 28px;
  773. position: absolute;
  774. bottom: -4px;
  775. right: -4px;
  776. background: #ff0000;
  777. z-index: auto;
  778. display: block;
  779. }
  780. .VueDragResize-title-box{
  781. background: rgb(32 138 183);
  782. color: #fff;
  783. display: flex;
  784. align-items: center;
  785. justify-content: space-between;
  786. font-size: 14px;
  787. height: auto;
  788. height: 40px;
  789. padding: 0 12px;
  790. cursor: move;
  791. .icon-box{
  792. display: flex;
  793. align-items: center;
  794. justify-content: flex-end;
  795. &>span{
  796. font-size: 12px;
  797. display: flex;
  798. align-items: center;
  799. justify-content: center;
  800. width: 20px;
  801. height: 20px;
  802. line-height: 20px;
  803. border: 1px solid #fff;
  804. border-radius: 50%;
  805. cursor: pointer;
  806. }
  807. }
  808. }
  809. .navbaerMag-content-box{
  810. flex: 1;
  811. height: calc(100% - 40px);
  812. overflow: auto;
  813. padding: 10px;
  814. .navbaerMag-tab-box{
  815. width: auto;
  816. display: flex;
  817. align-items: center;
  818. &>div{
  819. cursor: pointer;
  820. width: 82px;
  821. font-size: 14px;
  822. display: flex;
  823. align-items: center;
  824. justify-content: center;
  825. padding: 6px 0;
  826. border: 1px solid rgb(23 80 154);
  827. &.hover-items{
  828. background: rgb(23 80 154);
  829. color: #fff;
  830. }
  831. }
  832. }
  833. .list-box{
  834. width: 100%;
  835. .list-item-box{
  836. width: 100%;
  837. border-radius: 4px;
  838. padding: 10px;
  839. margin-top: 14px;
  840. background: rgb(241 246 255);
  841. font-size: 14px;
  842. .listItem-title-box{
  843. display: flex;
  844. align-items: center;
  845. & span{
  846. font-size: 14px;
  847. }
  848. .span-btn{
  849. display: inline-block;
  850. background: #2b8f53;
  851. margin-left: 6px;
  852. font-size: 12px;
  853. color: #fff;
  854. padding: 6px 12px;
  855. border-radius: 4px;
  856. text-align: center;
  857. cursor: pointer;
  858. }
  859. .arrow-down{
  860. width: 12px;
  861. height: 12px;
  862. margin-left: 12px;
  863. cursor: pointer;
  864. }
  865. .arrow-down.show{
  866. transform: rotate(180deg);
  867. }
  868. }
  869. .items-show-box{
  870. height: auto;
  871. }
  872. .items-show-box.show{
  873. height: 0;
  874. overflow: hidden;
  875. }
  876. .xqItemError-box{
  877. padding: 10px 0;
  878. border-bottom: 1px solid rgb(211, 225, 243);
  879. .items-titleBox{
  880. display: flex;
  881. align-items: center;
  882. margin-top: 10px;
  883. .idx-span{
  884. display: inline-block;
  885. width: 20px;
  886. height: 20px;
  887. border-radius: 50%;
  888. line-height: 20px;
  889. text-align: center;
  890. background: rgb(23 80 154);
  891. color: #fff;
  892. margin-right: 4px;
  893. }
  894. & ::v-deep .el-tag{
  895. height: 26px;
  896. line-height: 26px;
  897. }
  898. .arrow-down{
  899. width: 12px;
  900. height: 12px;
  901. margin-left: 12px;
  902. cursor: pointer;
  903. }
  904. .arrow-down.show{
  905. transform: rotate(180deg);
  906. }
  907. }
  908. .itemsDiv-box{
  909. height: auto;
  910. }
  911. .itemsDiv-box.show{
  912. height: 0;
  913. overflow: hidden;
  914. }
  915. .items-box{
  916. margin-top: 10px;
  917. padding-left: 10px;
  918. box-sizing: border-box;
  919. .items-content{
  920. font-size: 14px;
  921. margin-top: 6px;
  922. line-height: 20px;
  923. }
  924. }
  925. }
  926. }
  927. }
  928. }
  929. }
  930. }
  931. </style>
  932. <style>
  933. /* ================================== 文本形式样式 ↓ ======================== */
  934. .refachInput span {
  935. height: auto;
  936. line-height: 1;
  937. padding: 10px 0;
  938. }
  939. .refachInput span.refachInput-text {
  940. padding-left: 12px;
  941. }
  942. .el-row--flex.is-justify-space-around {
  943. justify-content: flex-start;
  944. }
  945. .member-infobox {
  946. width: 100%;
  947. }
  948. .member-infobox .info-box-1 {
  949. /* display: flex;
  950. flex-wrap: wrap; */
  951. margin-top: 20px;
  952. }
  953. .infoBox-items {
  954. width: auto;
  955. display: flex;
  956. align-items: center;
  957. padding: 8px 0;
  958. }
  959. .padding-left20 {
  960. padding-left: 20px;
  961. }
  962. .padding-right20 {
  963. padding-right: 20px;
  964. }
  965. .infoBox-title {
  966. color: #333;
  967. font-size: 12px;
  968. font-weight: bold;
  969. }
  970. .infoBox-items-text {
  971. color: #666;
  972. font-size: 12px;
  973. padding-left: 5px;
  974. padding-right: 20px;
  975. }
  976. .title-ff0000 {
  977. color: #ff0000;
  978. }
  979. /* 高亮 */
  980. .choose-twinkle {
  981. font-size: 20px;
  982. color: red;
  983. font-weight: 600;
  984. background: yellow;
  985. }
  986. .table-value-look {
  987. padding-left: 12px;
  988. color: #ff0000;
  989. cursor: pointer;
  990. }
  991. .keyHight {
  992. background-color: red !important;
  993. font-weight: bold !important;
  994. }
  995. .zbjg-box::v-deep .el-button--primary{
  996. background: #208ab7;
  997. }
  998. </style>