caseViews.vue 32 KB

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