FillCaseFrontSheet.vue 107 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631
  1. <template>
  2. <div class="layout_container fill-sheet">
  3. <header class="round-header">
  4. <el-select
  5. v-model="currentWard"
  6. @change="handleWardChange"
  7. style="width: 120px"
  8. filterable
  9. >
  10. <el-option
  11. v-for="item in userWards"
  12. :key="item.code"
  13. :value="item.code"
  14. :label="item.name"
  15. ></el-option>
  16. </el-select>
  17. <el-select
  18. v-model="inOutStatus"
  19. style="width: 80px; margin-right: 8px"
  20. @change="changeInOutStatus"
  21. >
  22. <el-option
  23. v-for="item in inOutOptions"
  24. :key="item.code"
  25. :value="item.code"
  26. :label="item.name"
  27. ></el-option>
  28. </el-select>
  29. <el-button
  30. type="primary"
  31. icon="Clock"
  32. v-show="inOutStatus === 2"
  33. @click="showSelectDateRange = true"
  34. >
  35. 日期范围
  36. </el-button>
  37. <el-divider direction="vertical"></el-divider>
  38. <el-input
  39. v-model="inpatientNo"
  40. style="width: 110px"
  41. placeholder="住院号"
  42. clearable
  43. ></el-input>
  44. <el-button
  45. type="primary"
  46. icon="Search"
  47. @click="searchPatient"
  48. style="margin-left: 8px"
  49. >搜索患者
  50. </el-button>
  51. <el-divider direction="vertical"></el-divider>
  52. <el-button
  53. type="primary"
  54. icon="Edit"
  55. @click="openYbDiag"
  56. v-if="inOutStatus === 1"
  57. >医保诊断
  58. </el-button>
  59. <el-button type="primary" icon="Upload" @click="saveVerify(1)"
  60. >保存首页
  61. </el-button>
  62. <el-dropdown
  63. trigger="click"
  64. type="primary"
  65. @command="sheetQualityVerification"
  66. style="margin: 0 8px"
  67. >
  68. <el-button icon="DataLine" type="primary"
  69. >病案质控<i class="el-icon-arrow-down el-icon--right"></i
  70. ></el-button>
  71. <template #dropdown>
  72. <el-dropdown-menu>
  73. <el-dropdown-item command="applyVerification"
  74. >申请审核
  75. </el-dropdown-item>
  76. <el-dropdown-item command="verificationRecord"
  77. >审核记录
  78. </el-dropdown-item>
  79. </el-dropdown-menu>
  80. </template>
  81. </el-dropdown>
  82. <el-button type="success" icon="Printer" @click="beforePrint(1)"
  83. >打印正面
  84. </el-button>
  85. <el-button type="success" icon="Printer" @click="beforePrint(2)"
  86. >打印反面
  87. </el-button>
  88. <el-button
  89. type="primary"
  90. icon="PieChart"
  91. @click="setlUplaodClick"
  92. v-if="inOutStatus === 2"
  93. >
  94. 结算清单质控
  95. </el-button>
  96. <el-button type="danger" icon="Download" @click="showExportPanel"
  97. >历史病案导出
  98. </el-button>
  99. </header>
  100. <div class="layout_main layout_container layout-horizontal">
  101. <aside class="layout_el-table">
  102. <el-table
  103. ref="asideTable"
  104. :data="cptOverviews"
  105. stripe
  106. highlight-current-row
  107. @row-click="handleClickOverview"
  108. >
  109. <el-table-column
  110. prop="bedNo"
  111. label="床号"
  112. width="40"
  113. ></el-table-column>
  114. <el-table-column label="姓名" width="75">
  115. <template #default="scope">
  116. <img
  117. class="sex-icon"
  118. :src="scope.row.sex === 1 ? maleIcon : femaleIcon"
  119. />
  120. {{ scope.row.name }}
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="住院号-次数" width="85">
  124. <template #default="scope">
  125. <span style="font-weight: bold; color: black">
  126. {{ scope.row.bah }}
  127. </span>
  128. -{{ scope.row.times }}
  129. </template>
  130. </el-table-column>
  131. <el-table-column prop="doctorName" label="医生" width="90">
  132. <template #header>
  133. <span style="margin-right: 8px">医生</span>
  134. <el-checkbox v-model="onlyShowMyPatients">我的</el-checkbox>
  135. </template>
  136. </el-table-column>
  137. </el-table>
  138. </aside>
  139. <div
  140. style="
  141. min-width: 800px;
  142. padding: 0 20px 0 35px;
  143. overflow-y: scroll;
  144. position: relative;
  145. "
  146. id="scrollWrapper"
  147. >
  148. <div style="position: absolute; top: 20px; left: 20px">
  149. <span
  150. v-if="patient.auditState === 'NONE'"
  151. class="audit-state audit-state_none"
  152. >
  153. 病案质控未申请
  154. </span>
  155. <span
  156. v-else-if="patient.auditState === 'INITIAL'"
  157. class="audit-state audit-state_initial"
  158. >
  159. 病案质控未审核
  160. </span>
  161. <span
  162. v-else-if="patient.auditState === 'APPROVED'"
  163. class="audit-state audit-state_approved"
  164. >
  165. 病案质控已通过
  166. </span>
  167. <span
  168. v-else-if="patient.auditState === 'REJECTED'"
  169. class="audit-state audit-state_rejected"
  170. @click="sheetQualityVerification('verificationRecord')"
  171. >
  172. 病案质控已驳回
  173. </span>
  174. </div>
  175. <div>
  176. <h3 style="width: 100%; font-size: 17px; text-align: center">
  177. 住 院 病 案 首 页
  178. </h3>
  179. <div style="width: 100%; font-size: 15px; text-align: center">
  180. 医疗机构:
  181. <span style="font-weight: 700">{{ env.VITE_HOSPITAL_NAME }}</span>
  182. ( 组织机构代码:
  183. <span style="font-weight: 700">{{ env.VITE_HOSPITAL_CODE }}</span
  184. >)
  185. </div>
  186. <div style="height: 25px; line-height: 25px; display: flex">
  187. <div>
  188. 医疗付费方式:
  189. <select
  190. id="payMethod"
  191. v-model="patient.payMethod"
  192. style="width: 180px"
  193. >
  194. <option
  195. v-for="(item, index) in dics.getPayMethod"
  196. :key="index"
  197. :value="item.code"
  198. >
  199. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  200. </option>
  201. </select>
  202. </div>
  203. <div style="width: 120px; margin-left: 12px">
  204. 健康卡号: {{ patient.healthCardNo }}
  205. </div>
  206. <div style="width: 100px">
  207. 第&nbsp;{{ patient.admissTimes }}&nbsp;次住院
  208. </div>
  209. <div style="width: 130px">病案号: {{ patient.bah }}</div>
  210. </div>
  211. </div>
  212. <div id="page1" style="border: 1px solid black; padding: 5px">
  213. <div>
  214. 姓名:
  215. <input id="name" v-model="patient.name" style="width: 130px" />
  216. 性别:
  217. <select id="sex" v-model="patient.sex">
  218. <option
  219. v-for="(item, index) in dics.getSexCode"
  220. :key="index"
  221. :value="item.code"
  222. >
  223. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  224. </option>
  225. </select>
  226. 出生日期:
  227. <input
  228. id="birthDate"
  229. v-model="patient.birthDate"
  230. style="width: 90px"
  231. />
  232. 年龄:
  233. <input
  234. id="age"
  235. v-model="patient.age"
  236. type="number"
  237. style="width: 30px"
  238. />
  239. 国籍:
  240. <select id="country" v-model="patient.country">
  241. <option
  242. v-for="(item, index) in dics.getCountry"
  243. :key="index"
  244. :value="item.code"
  245. >
  246. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  247. </option>
  248. </select>
  249. </div>
  250. <div>
  251. (年龄不足 1 周岁的)年龄:
  252. <input
  253. id="ageDays"
  254. type="number"
  255. v-model="patient.ageDays"
  256. style="width: 50px"
  257. />天 新生儿出生体重:
  258. <input
  259. id="newBornWeight"
  260. type="number"
  261. v-model="patient.newBornWeight"
  262. style="width: 70px"
  263. />克 新生儿入院体重:
  264. <input
  265. id="newBornAdmissWeight"
  266. type="number"
  267. v-model="patient.newBornAdmissWeight"
  268. style="width: 70px"
  269. />克
  270. </div>
  271. <div>
  272. 出生地:
  273. <input
  274. id="birthPlaceName"
  275. v-model="patient.birthPlaceName"
  276. readonly
  277. style="width: 230px"
  278. @click="showSearchData('birth')"
  279. />
  280. 籍贯:
  281. <input
  282. id="nativePlaceName"
  283. v-model="patient.nativePlaceName"
  284. readonly
  285. style="width: 170px"
  286. @click="showSearchData('native')"
  287. />
  288. 民族:
  289. <select id="nation" v-model="patient.nation">
  290. <option
  291. v-for="(item, index) in dics.getNation"
  292. :key="index"
  293. :value="item.code"
  294. >
  295. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  296. </option>
  297. </select>
  298. </div>
  299. <div>
  300. 身份证号:
  301. <input
  302. id="socialNo"
  303. v-model="patient.socialNo"
  304. style="width: 160px"
  305. maxlength="18"
  306. />
  307. 职业:
  308. <select id="occupation" v-model="patient.occupation">
  309. <option
  310. v-for="(item, index) in dics.getOccupation"
  311. :key="index"
  312. :value="item.code"
  313. >
  314. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  315. </option>
  316. </select>
  317. 婚姻:
  318. <select id="marriage" v-model="patient.marriage">
  319. <option
  320. v-for="(item, index) in dics.getMarriageCode"
  321. :key="index"
  322. :value="item.code"
  323. >
  324. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  325. </option>
  326. </select>
  327. </div>
  328. <div id="livePlace">
  329. 现住址:
  330. <span id="livePlace1">
  331. <el-cascader
  332. v-model="patient.standardAddress"
  333. :options="regions"
  334. placeholder="省/市/区"
  335. style="width: 230px"
  336. ></el-cascader>
  337. </span>
  338. <input
  339. id="livePlace2"
  340. v-model="patient.livePlace"
  341. style="width: 300px"
  342. placeholder="街道/小区/乡镇"
  343. />
  344. </div>
  345. <div>
  346. 电话:
  347. <input id="phone" v-model="patient.phone" style="width: 90px" />
  348. 邮编:
  349. <input
  350. id="addrZipCode"
  351. v-model="patient.addrZipCode"
  352. style="width: 70px"
  353. maxlength="6"
  354. />
  355. </div>
  356. <div>
  357. 户口地址:
  358. <input
  359. id="hkPlaceName"
  360. v-model="patient.hkPlaceName"
  361. style="width: 300px"
  362. @click="showGoSearchBtn1 = true"
  363. @blur="dismissShowSearch(1)"
  364. />
  365. <el-button
  366. icon="Search"
  367. type="primary"
  368. v-show="showGoSearchBtn1"
  369. @click="showSearchData('hk')"
  370. >
  371. 前往搜索
  372. </el-button>
  373. 邮编:
  374. <input
  375. id="hkZipCode"
  376. v-model="patient.hkZipCode"
  377. style="width: 70px"
  378. maxlength="6"
  379. />
  380. </div>
  381. <div>
  382. 工作单位及地址:
  383. <input
  384. id="unitName"
  385. v-model="patient.unitName"
  386. style="margin-right: 0; width: 145px"
  387. />
  388. /
  389. <input
  390. id="unitPlace"
  391. v-model.trim="patient.unitPlace"
  392. style="width: 145px"
  393. />
  394. 单位电话:
  395. <input
  396. id="unitPhone"
  397. v-model="patient.unitPhone"
  398. style="width: 80px"
  399. />
  400. 邮编:
  401. <input
  402. id="unitZipCode"
  403. v-model="patient.unitZipCode"
  404. style="width: 50px"
  405. maxlength="6"
  406. />
  407. </div>
  408. <div>
  409. 联系人姓名:
  410. <input
  411. id="contactName"
  412. v-model="patient.contactName"
  413. style="width: 200px"
  414. />
  415. 联系人关系:
  416. <select id="contactRelation" v-model="patient.contactRelation">
  417. <option
  418. v-for="(item, index) in dics.getRelations"
  419. :key="index"
  420. :value="item.code"
  421. >
  422. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  423. </option>
  424. </select>
  425. </div>
  426. <div>
  427. 联系人地址:
  428. <input
  429. id="contactAddrName"
  430. v-model="patient.contactAddrName"
  431. style="width: 300px"
  432. @click="showGoSearchBtn2 = true"
  433. @blur="dismissShowSearch(2)"
  434. />
  435. <el-button
  436. icon="Search"
  437. type="primary"
  438. v-show="showGoSearchBtn2"
  439. @click="showSearchData('contact')"
  440. >
  441. 前往搜索
  442. </el-button>
  443. 联系人电话:
  444. <input
  445. id="contactPhone"
  446. v-model.trim="patient.contactPhone"
  447. style="width: 90px"
  448. />
  449. </div>
  450. <div>
  451. 入院途径:
  452. <select id="zyAdmissWay" v-model="patient.zyAdmissWay">
  453. <option
  454. v-for="(item, index) in dics.getAdmissWay"
  455. :key="index"
  456. :value="item.code"
  457. >
  458. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  459. </option>
  460. </select>
  461. 是否手术:
  462. <select
  463. id="hasSurgery"
  464. v-model="patient.hasSurgery"
  465. @change="hasSurgeryChanged(patient.hasSurgery)"
  466. >
  467. <option
  468. v-for="itm in operations"
  469. :key="itm.code"
  470. :value="itm.code"
  471. >
  472. {{ itm.name }}
  473. </option>
  474. </select>
  475. </div>
  476. <div>
  477. 入院时间:<input
  478. id="admissDate"
  479. v-model="patient.admissDate"
  480. readonly
  481. style="width: 135px"
  482. />
  483. 入院科别:<input
  484. v-model="patient.admissDept"
  485. readonly
  486. style="width: 120px"
  487. />
  488. 病房:<input
  489. v-model="patient.admissWard"
  490. readonly
  491. style="width: 80px"
  492. />
  493. 转科科别:<input
  494. v-model="patient.transDept"
  495. readonly
  496. style="width: 120px"
  497. />
  498. </div>
  499. <div>
  500. 出院时间:<input
  501. id="dismissDate"
  502. v-model="patient.dismissDate"
  503. readonly
  504. style="width: 135px"
  505. />
  506. 出院科别:<input
  507. v-model="patient.dismissDept"
  508. readonly
  509. style="width: 120px"
  510. />
  511. 病房:<input
  512. v-model="patient.dismissWard"
  513. readonly
  514. style="width: 80px"
  515. />
  516. 住院天数:<input
  517. id="admissDays"
  518. v-model="patient.admissDays"
  519. style="width: 70px"
  520. />
  521. </div>
  522. <div id="clinicDiag" style="display: flex; align-items: center">
  523. 门(急)诊诊断:
  524. <input
  525. v-model="patient.clinicDiagStr"
  526. readonly
  527. style="width: 280px"
  528. @click="showSearchData('clinicdiag')"
  529. />
  530. 疾病编码:
  531. <input
  532. v-model="patient.clinicDiagCode"
  533. readonly
  534. style="width: 110px"
  535. @click="showSearchData('clinicdiag')"
  536. />
  537. <div
  538. v-if="patient.validClinicDiag === 0"
  539. style="font-size: 10px; margin: 8px 0 0 8px; color: red"
  540. >
  541. 门诊诊断编码有误
  542. </div>
  543. </div>
  544. <div id="admDiag" style="display: flex; align-items: center">
  545. 入院诊断名称:
  546. <input
  547. v-model="patient.supplement.admDiagName"
  548. readonly
  549. style="width: 280px"
  550. @click="showSearchData('admdiag')"
  551. />
  552. 入院诊断编码:
  553. <input
  554. v-model="patient.supplement.admDiagCode"
  555. readonly
  556. style="width: 110px"
  557. @click="showSearchData('admdiag')"
  558. />
  559. </div>
  560. <div style="display: flex; align-items: center">
  561. 入院时情况:
  562. <select
  563. id="admDiagStatus"
  564. style="width: 80px; margin-right: 30px"
  565. v-model="patient.supplement.admStatus"
  566. >
  567. <option :value="1">危</option>
  568. <option :value="2">急</option>
  569. <option :value="3">一般</option>
  570. </select>
  571. 入院后确诊日期:
  572. <input
  573. v-model="patient.supplement.diagnosisConfirmYear"
  574. type="number"
  575. style="width: 40px; text-align: center"
  576. />
  577. <input
  578. v-model="patient.supplement.diagnosisConfirmMonth"
  579. type="number"
  580. style="width: 20px; text-align: center"
  581. />
  582. <input
  583. v-model="patient.supplement.diagnosisConfirmDay"
  584. type="number"
  585. style="width: 20px; text-align: center"
  586. />
  587. </div>
  588. <div
  589. id="diagTable"
  590. style="
  591. height: max-content;
  592. display: flex;
  593. width: 720px;
  594. margin-top: 2px;
  595. "
  596. >
  597. <div style="width: 360px">
  598. <table
  599. style="
  600. width: 100%;
  601. border: 1px solid black;
  602. border-collapse: collapse;
  603. "
  604. >
  605. <tr>
  606. <th>主要诊断</th>
  607. <th>疾病编码</th>
  608. <th>入院病情</th>
  609. <th>出院病情</th>
  610. </tr>
  611. <tr>
  612. <td>
  613. <input
  614. id="disdiagMain"
  615. style="border: none !important; width: 170px"
  616. v-model="patient.disdiagList[0].name"
  617. @click="onSearchDiagFocus(0)"
  618. readonly
  619. />
  620. <div
  621. v-show="showDel[0]"
  622. style="width: 100%; text-align: center"
  623. >
  624. <el-button
  625. type="primary"
  626. icon="Edit"
  627. @click="showSearch = true"
  628. >修改
  629. </el-button>
  630. </div>
  631. </td>
  632. <td style="text-align: center">
  633. <input
  634. style="border: none !important; width: 100px"
  635. v-model="patient.disdiagList[0].code"
  636. readonly
  637. />
  638. </td>
  639. <td>
  640. <select
  641. id="disdiagMainAdmStatus"
  642. style="border: none !important; width: 30px"
  643. v-model="patient.disdiagList[0].admissStatus"
  644. >
  645. <option
  646. v-for="(item, index) in dics.getDisAdmissStatus"
  647. :key="index"
  648. :value="item.code"
  649. >
  650. &nbsp;&nbsp; {{ item.code }}&nbsp;&nbsp;
  651. </option>
  652. </select>
  653. </td>
  654. <td>
  655. <select
  656. style="border: none !important; width: 30px"
  657. v-model="patient.disdiagList[0].dismissStatus"
  658. @change="handleSelectCybq"
  659. >
  660. <option
  661. v-for="(item, index) in dics.getDisdiagStatus"
  662. :key="index"
  663. :value="item.code"
  664. >
  665. &nbsp;&nbsp; {{ item.code }}&nbsp;&nbsp;
  666. </option>
  667. </select>
  668. </td>
  669. </tr>
  670. <tr>
  671. <th colspan="4">其他诊断</th>
  672. </tr>
  673. <tr v-for="n in 11" :key="n">
  674. <td>
  675. <input
  676. style="
  677. border: none !important;
  678. text-align: left;
  679. padding-left: 5px;
  680. "
  681. v-model="patient.disdiagList[n].name"
  682. @click="onSearchDiagFocus(n)"
  683. readonly
  684. />
  685. <div
  686. v-show="showDel[n]"
  687. style="width: 100%; text-align: center"
  688. >
  689. <el-button
  690. type="primary"
  691. circle
  692. icon="Edit"
  693. @click="showSearch = true"
  694. ></el-button>
  695. <el-button
  696. type="danger"
  697. circle
  698. icon="Delete"
  699. @click="deleteDisdiag(n)"
  700. ></el-button>
  701. <el-button
  702. type="success"
  703. circle
  704. icon="Plus"
  705. @click="insertDisdiag(n)"
  706. ></el-button>
  707. </div>
  708. </td>
  709. <td>
  710. <input
  711. style="border: none !important; width: 90px"
  712. v-model="patient.disdiagList[n].code"
  713. readonly
  714. />
  715. </td>
  716. <td>
  717. <select
  718. style="border: none !important; width: 30px"
  719. v-model="patient.disdiagList[n].admissStatus"
  720. >
  721. <option
  722. v-for="(item, index) in dics.getDisAdmissStatus"
  723. :key="index"
  724. :value="item.code"
  725. >
  726. &nbsp;&nbsp;{{ item.code }}&nbsp;&nbsp;
  727. </option>
  728. </select>
  729. </td>
  730. <td>
  731. <select
  732. style="border: none !important; width: 30px"
  733. v-model="patient.disdiagList[n].dismissStatus"
  734. @change="handleSelectCybq"
  735. >
  736. <option
  737. v-for="(item, index) in dics.getDisdiagStatus"
  738. :key="index"
  739. :value="item.code"
  740. >
  741. &nbsp;&nbsp;{{ item.code }}&nbsp;&nbsp;
  742. </option>
  743. </select>
  744. </td>
  745. </tr>
  746. </table>
  747. </div>
  748. <div style="width: 360px">
  749. <table style="border: 1px solid black; border-collapse: collapse">
  750. <tr v-for="n in 14" :key="n">
  751. <td>
  752. <input
  753. style="border: none !important; width: 170px"
  754. v-model="patient.disdiagList[n + 11].name"
  755. @click="onSearchDiagFocus(n + 11)"
  756. readonly
  757. />
  758. <div
  759. v-show="showDel[n + 11]"
  760. style="width: 100%; text-align: center"
  761. >
  762. <button circle @click="showSearch = true">
  763. <i class="el-icon-edit"></i>
  764. </button>
  765. <button circle @click="deleteDisdiag(n + 11)">
  766. <i class="el-icon-delete"></i>
  767. </button>
  768. <button circle @click="insertDisdiag(n + 11)">
  769. <i class="el-icon-upload"></i>
  770. </button>
  771. </div>
  772. </td>
  773. <td>
  774. <input
  775. style="border: none !important; width: 100px"
  776. v-model="patient.disdiagList[n + 11].code"
  777. readonly
  778. />
  779. </td>
  780. <td>
  781. <select
  782. style="border: none !important; width: 30px"
  783. v-model="patient.disdiagList[n + 11].admissStatus"
  784. >
  785. <option
  786. v-for="(item, index) in dics.getDisAdmissStatus"
  787. :key="index"
  788. :value="item.code"
  789. >
  790. &nbsp;&nbsp;{{ item.code }}&nbsp;&nbsp;
  791. </option>
  792. </select>
  793. </td>
  794. <td>
  795. <select
  796. style="border: none !important; width: 30px"
  797. v-model="patient.disdiagList[n + 11].dismissStatus"
  798. @change="handleSelectCybq"
  799. >
  800. <option
  801. v-for="(item, index) in dics.getDisdiagStatus"
  802. :key="index"
  803. :value="item.code"
  804. >
  805. &nbsp;&nbsp;{{ item.code }}&nbsp;&nbsp;
  806. </option>
  807. </select>
  808. </td>
  809. </tr>
  810. </table>
  811. </div>
  812. </div>
  813. <div style="border-bottom: 1px solid black; font-size: 12px">
  814. 备注:
  815. <span>入院病情:</span>1.有,2.临床未确定,3.情况不明,4.无
  816. <span style="margin-left: 10px">出院病情:</span
  817. >1.治愈,2.好转,3.未愈,4.死亡,9.其他
  818. </div>
  819. <div>
  820. 损伤、中毒的外部原因:
  821. <input
  822. id="hurtReasonName"
  823. v-model="patient.hurtReasonName"
  824. readonly
  825. style="width: 360px"
  826. @click="showSearchData('hurt')"
  827. />
  828. 疾病编码:
  829. <input
  830. id="hurtReasonCode"
  831. v-model="patient.hurtReasonCode"
  832. style="width: 110px"
  833. readonly
  834. />
  835. &nbsp;&nbsp;<el-button
  836. type="danger"
  837. circle
  838. icon="Delete"
  839. @click="clearLine('hurtReason')"
  840. ></el-button>
  841. </div>
  842. <div>
  843. 病理诊断:
  844. <input
  845. id="pathologicDiagStr"
  846. v-model="patient.pathologicDiagStr"
  847. readonly
  848. style="width: 300px"
  849. @click="showSearchData('pathologic')"
  850. />
  851. 病理编码:
  852. <input
  853. id="pathologicDiagCode"
  854. v-model="patient.pathologicDiagCode"
  855. style="width: 90px"
  856. readonly
  857. />
  858. 病理号:
  859. <input id="blh" v-model="patient.blh" style="width: 70px" />
  860. &nbsp;&nbsp;<el-button
  861. type="danger"
  862. circle
  863. icon="Delete"
  864. @click="clearLine('pathologicDiag')"
  865. ></el-button>
  866. </div>
  867. <div>
  868. 药物过敏:
  869. <select
  870. id="allergy"
  871. v-model="patient.allergy"
  872. @change="onAllergyChanged"
  873. >
  874. <option
  875. v-for="(item, index) in haveOrNot"
  876. :key="index"
  877. :value="item.code"
  878. >
  879. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  880. </option>
  881. </select>
  882. ,过敏药物:
  883. <input
  884. id="allergicMedicine"
  885. v-model="patient.allergicMedicine"
  886. style="width: 110px"
  887. />
  888. 死亡患者尸检:
  889. <select id="autopsy" v-model="patient.autopsy">
  890. <option
  891. v-for="(item, index) in autopsies"
  892. :key="index"
  893. :value="item.code"
  894. >
  895. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  896. </option>
  897. </select>
  898. </div>
  899. <div>
  900. 输血前四项: HbsAg
  901. <select id="hbsAg" v-model="patient.hbsAg">
  902. <option
  903. v-for="(item, index) in dics.getHbsag"
  904. :key="index"
  905. :value="item.code"
  906. >
  907. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  908. </option>
  909. </select>
  910. HCV-Ab
  911. <select id="hcvAb" v-model="patient.hcvAb" style="margin-left: 8px">
  912. <option
  913. v-for="(item, index) in dics.getHbsag"
  914. :key="index"
  915. :value="item.code"
  916. >
  917. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  918. </option>
  919. </select>
  920. HIV-Ab
  921. <select id="hivAb" v-model="patient.hivAb" style="margin-left: 8px">
  922. <option
  923. v-for="(item, index) in dics.getHbsag"
  924. :key="index"
  925. :value="item.code"
  926. >
  927. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  928. </option>
  929. </select>
  930. TP-Ab
  931. <select id="tpAb" v-model="patient.tpAb" style="margin-left: 8px">
  932. <option
  933. v-for="(item, index) in dics.getHbsag"
  934. :key="index"
  935. :value="item.code"
  936. >
  937. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  938. </option>
  939. </select>
  940. </div>
  941. <div>
  942. 血型:
  943. <select
  944. id="bloodType"
  945. v-model="patient.bloodType"
  946. @change="handleSelectBloodType"
  947. >
  948. <option
  949. v-for="(item, index) in dics.getBloodType"
  950. :key="index"
  951. :value="item.code"
  952. >
  953. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  954. </option>
  955. </select>
  956. Rh:
  957. <select id="rh" v-model="patient.rh">
  958. <option
  959. v-for="(item, index) in dics.getHbsag"
  960. :key="index"
  961. :value="item.code"
  962. >
  963. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  964. </option>
  965. </select>
  966. </div>
  967. <div>
  968. 科室主任:
  969. <input
  970. id="deptLeaderName"
  971. readonly
  972. style="width: 70px"
  973. v-model="patient.deptLeaderName"
  974. @click="showSearchData('deptleader')"
  975. />
  976. 主任(副主任)医师:
  977. <input
  978. id="leaderDoctorName"
  979. readonly
  980. style="width: 70px"
  981. v-model="patient.leaderDoctorName"
  982. @click="showSearchData('leaderdoctor')"
  983. />
  984. 主治医师:
  985. <input
  986. id="mainDoctorName"
  987. readonly
  988. style="width: 70px"
  989. v-model="patient.mainDoctorName"
  990. @click="showSearchData('maindoctor')"
  991. />
  992. 住院医师:
  993. <input
  994. id="admissDoctorName"
  995. readonly
  996. style="width: 70px"
  997. v-model="patient.admissDoctorName"
  998. @click="showSearchData('admissdoctor')"
  999. />
  1000. </div>
  1001. <div>
  1002. 责任护士:
  1003. <input
  1004. id="dutyNurseName"
  1005. readonly
  1006. style="width: 70px"
  1007. v-model="patient.dutyNurseName"
  1008. @click="showSearchData('dutynurse')"
  1009. />
  1010. 进修医师:
  1011. <input
  1012. id="studyDoctorName"
  1013. readonly
  1014. style="width: 70px"
  1015. v-model="patient.studyDoctorName"
  1016. @click="showSearchData('studydoctor')"
  1017. />
  1018. 实习医师:
  1019. <input
  1020. id="internshipDoctorName"
  1021. readonly
  1022. style="width: 70px"
  1023. v-model="patient.internshipDoctorName"
  1024. @click="showSearchData('internshipdoctor')"
  1025. />
  1026. 编码员:
  1027. <input
  1028. id="coderName"
  1029. readonly
  1030. style="width: 70px"
  1031. v-model="patient.coderName"
  1032. @click="showSearchData('coder')"
  1033. />
  1034. </div>
  1035. <div>
  1036. 病案质量:
  1037. <select
  1038. id="qualityControlLevel"
  1039. v-model="patient.qualityControlLevel"
  1040. >
  1041. <option
  1042. v-for="(item, index) in dics.getQualityLevel"
  1043. :key="index"
  1044. :value="item.code"
  1045. >
  1046. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1047. </option>
  1048. </select>
  1049. 质控医师:
  1050. <input
  1051. id="qualityControlDoctorName"
  1052. readonly
  1053. style="width: 70px"
  1054. v-model="patient.qualityControlDoctorName"
  1055. @click="showSearchData('qualitycontroldoctor')"
  1056. />
  1057. 质控护士:
  1058. <input
  1059. style="width: 70px"
  1060. readonly
  1061. v-model="patient.qualityControlNurseName"
  1062. @click="showSearchData('qualitycontrolnurse')"
  1063. />
  1064. 质控日期:
  1065. <input
  1066. id="qualityControlDate"
  1067. style="width: 170px"
  1068. type="date"
  1069. v-model="patient.qualityControlDate"
  1070. />
  1071. </div>
  1072. </div>
  1073. <div id="page2" style="border: 1px solid black; padding: 5px">
  1074. <table
  1075. id="surgeryTable"
  1076. style="border-collapse: collapse; width: 100%; margin-left: -25px"
  1077. >
  1078. <tr>
  1079. <th rowspan="2" style="border: none"></th>
  1080. <th rowspan="2">手术及操作名称</th>
  1081. <th rowspan="2" style="width: 70px">手术及操作日期</th>
  1082. <th rowspan="2" style="width: 10px">手术级别</th>
  1083. <th rowspan="2">手术及操作编码</th>
  1084. <th colspan="3">手术及操作医师</th>
  1085. <th rowspan="2" style="width: 30px">切口愈合等级</th>
  1086. <th rowspan="2">麻醉方式</th>
  1087. <th rowspan="2">麻醉医师</th>
  1088. </tr>
  1089. <tr>
  1090. <th>术者</th>
  1091. <th>I助</th>
  1092. <th>II助</th>
  1093. </tr>
  1094. <tr v-for="n in defaultSurgerySize" :key="n">
  1095. <td style="border: none; width: 25px">
  1096. <div v-if="patient.surgeryList[n - 1].name">
  1097. <div
  1098. v-if="n > 1"
  1099. class="order-arrow"
  1100. @click="changeSurgeryOrder(n - 1, n - 2)"
  1101. >
  1102. </div>
  1103. <div
  1104. v-if="n < defaultSurgerySize && patient.surgeryList[n].name"
  1105. class="order-arrow"
  1106. style="margin-top: 5px"
  1107. @click="changeSurgeryOrder(n - 1, n)"
  1108. >
  1109. </div>
  1110. <div
  1111. v-if="n === defaultSurgerySize"
  1112. class="order-arrow"
  1113. style="margin-top: 4px"
  1114. @click="addSurgeSize"
  1115. >
  1116. +
  1117. </div>
  1118. </div>
  1119. </td>
  1120. <td style="padding: 3px">
  1121. <textarea
  1122. id="surgeryMain"
  1123. style="border: none !important; width: 90px"
  1124. rows="3"
  1125. v-model="patient.surgeryList[n - 1].name"
  1126. @click="onSearchSurgeryFocus(n - 1)"
  1127. readonly
  1128. ></textarea>
  1129. <div
  1130. v-show="showDel[n - 1]"
  1131. style="width: 100%; text-align: center"
  1132. >
  1133. <el-button
  1134. type="primary"
  1135. circle
  1136. icon="Edit"
  1137. @click="onEditSurgeryClick(n - 1)"
  1138. ></el-button>
  1139. <el-button
  1140. type="danger"
  1141. circle
  1142. icon="Delete"
  1143. @click="deleteSurgery(n - 1)"
  1144. ></el-button>
  1145. </div>
  1146. </td>
  1147. <td style="padding: 3px">
  1148. <textarea
  1149. style="border: none !important; width: 70px"
  1150. v-model="patient.surgeryList[n - 1].date"
  1151. rows="3"
  1152. @click="showPickSurgeryDatetime(n - 1)"
  1153. readonly
  1154. ></textarea>
  1155. </td>
  1156. <td style="text-align-last: center">
  1157. <select
  1158. style="border: none !important; width: 30px"
  1159. v-model="patient.surgeryList[n - 1].level"
  1160. >
  1161. <option
  1162. v-for="(item, index) in dics.getOperateScale"
  1163. :key="index"
  1164. :value="item.code"
  1165. >
  1166. &nbsp;&nbsp;{{ item.code }}
  1167. </option>
  1168. </select>
  1169. </td>
  1170. <td>
  1171. <input
  1172. v-model="patient.surgeryList[n - 1].code"
  1173. style="border: none !important; width: 70px"
  1174. readonly
  1175. />
  1176. </td>
  1177. <td>
  1178. <input
  1179. style="border: none !important; width: 40px"
  1180. v-model="patient.surgeryList[n - 1].operatorName"
  1181. @click="showSearchSurgerior('operator', n)"
  1182. />
  1183. </td>
  1184. <td style="width: 50px">
  1185. <div style="position: relative">
  1186. <input
  1187. style="border: none !important; width: 40px"
  1188. v-model="patient.surgeryList[n - 1].assistantOneName"
  1189. @click="showSearchSurgerior('assistantone', n)"
  1190. />
  1191. <div
  1192. v-if="patient.surgeryList[n - 1].assistantOneName"
  1193. style="position: absolute; top: -20px; right: 0"
  1194. >
  1195. <el-button
  1196. type="danger"
  1197. circle
  1198. icon="Delete"
  1199. @click="deleteAssistantOne(n - 1)"
  1200. ></el-button>
  1201. </div>
  1202. </div>
  1203. </td>
  1204. <td style="width: 50px">
  1205. <div style="position: relative">
  1206. <input
  1207. style="border: none !important; width: 40px"
  1208. v-model="patient.surgeryList[n - 1].assistantTwoName"
  1209. @click="showSearchSurgerior('assistanttwo', n)"
  1210. />
  1211. <div
  1212. v-if="patient.surgeryList[n - 1].assistantTwoName"
  1213. style="position: absolute; top: -20px; right: 0"
  1214. >
  1215. <el-button
  1216. type="danger"
  1217. circle
  1218. icon="Delete"
  1219. @click="deleteAssistantTwo(n - 1)"
  1220. ></el-button>
  1221. </div>
  1222. </div>
  1223. </td>
  1224. <td style="text-align-last: center">
  1225. <select
  1226. v-model="patient.surgeryList[n - 1].cutHeal"
  1227. style="border: none !important"
  1228. >
  1229. <option
  1230. v-for="(item, index) in dics.getCutHealGrade"
  1231. :key="index"
  1232. :value="item.code"
  1233. >
  1234. {{ item.code }}
  1235. </option>
  1236. </select>
  1237. </td>
  1238. <td>
  1239. <select
  1240. v-model="patient.surgeryList[n - 1].anaesthesia"
  1241. style="border: none !important"
  1242. >
  1243. <option
  1244. v-for="(item, index) in dics.getAnaesthesia"
  1245. :key="index"
  1246. :value="item.code"
  1247. >
  1248. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1249. </option>
  1250. </select>
  1251. </td>
  1252. <td>
  1253. <div style="position: relative">
  1254. <input
  1255. style="border: none !important; width: 40px"
  1256. v-model="patient.surgeryList[n - 1].anaesthesiaorName"
  1257. @click="showSearchSurgerior('anaesthesiaor', n)"
  1258. />
  1259. <div
  1260. v-if="patient.surgeryList[n - 1].anaesthesiaorName"
  1261. style="position: absolute; top: -20px; right: 0"
  1262. >
  1263. <el-button
  1264. type="danger"
  1265. circle
  1266. icon="Delete"
  1267. @click="deleteAnestor(n - 1)"
  1268. ></el-button>
  1269. </div>
  1270. </div>
  1271. </td>
  1272. </tr>
  1273. </table>
  1274. <div>
  1275. 离院方式:
  1276. <select
  1277. id="zyDismissWay"
  1278. v-model="patient.zyDismissWay"
  1279. @change="onDismissWayChanged"
  1280. >
  1281. <option
  1282. v-for="(item, index) in dics.getZyDismissWay"
  1283. :key="index"
  1284. :value="item.code"
  1285. >
  1286. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1287. </option>
  1288. </select>
  1289. ,拟接收医疗机构名称:
  1290. <input
  1291. id="dismissDestination"
  1292. v-model="patient.dismissDestination"
  1293. style="width: 210px"
  1294. />
  1295. </div>
  1296. <div>
  1297. 是否有出院31天内再住院计划:
  1298. <select
  1299. id="admissAgainInOneMonth"
  1300. v-model="patient.admissAgainInOneMonth"
  1301. @change="onAdmissAgainChanged"
  1302. >
  1303. <option
  1304. v-for="(item, index) in haveOrNot"
  1305. :key="index"
  1306. :value="item.code"
  1307. >
  1308. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1309. </option>
  1310. </select>
  1311. ,目的:
  1312. <input
  1313. id="admissAgainPurpose"
  1314. v-model="patient.admissAgainPurpose"
  1315. style="width: 300px"
  1316. />
  1317. </div>
  1318. <div>
  1319. 颅脑损伤患者昏迷时间: 入院前
  1320. <input
  1321. id="comaDaysBeforeAdmiss"
  1322. v-model="patient.comaDaysBeforeAdmiss"
  1323. style="width: 30px"
  1324. />天
  1325. <input
  1326. id="comaHoursBeforeAdmiss"
  1327. v-model="patient.comaHoursBeforeAdmiss"
  1328. style="width: 30px"
  1329. />小时
  1330. <input
  1331. id="comaMinutesBeforeAdmiss"
  1332. v-model="patient.comaMinutesBeforeAdmiss"
  1333. style="width: 30px"
  1334. />分钟 入院后
  1335. <input
  1336. id="comaDaysAfterAdmiss"
  1337. v-model="patient.comaDaysAfterAdmiss"
  1338. style="width: 30px"
  1339. />天
  1340. <input
  1341. id="comaHoursAfterAdmiss"
  1342. v-model="patient.comaHoursAfterAdmiss"
  1343. style="width: 30px"
  1344. />小时
  1345. <input
  1346. id="comaMinutesAfterAdmiss"
  1347. v-model="patient.comaMinutesAfterAdmiss"
  1348. style="width: 30px"
  1349. />分钟
  1350. </div>
  1351. <div>
  1352. 住院费用(元): 总费用
  1353. <input v-model="patient.totalCost" style="width: 110px" readonly />
  1354. (自付金额:
  1355. <input v-model="patient.selfPay" style="width: 110px" readonly />)
  1356. </div>
  1357. <div>
  1358. 1.综合医疗服务类: (1)一般医疗服务费:
  1359. <input
  1360. v-model="patient.generalMedicalServiceFee"
  1361. style="width: 70px"
  1362. readonly
  1363. />
  1364. (2)一般治疗操作费:
  1365. <input
  1366. v-model="patient.generalTreatmentOperatingFee"
  1367. style="width: 70px"
  1368. readonly
  1369. />
  1370. (3)护理费:
  1371. <input v-model="patient.careFee" style="width: 50px" readonly />
  1372. </div>
  1373. <div>
  1374. (4)其他费:
  1375. <input v-model="patient.elseFee" style="width: 70px" readonly />
  1376. </div>
  1377. <div>
  1378. 2.诊断类: (5)病理诊断费:
  1379. <input
  1380. v-model="patient.pathologicDiagFee"
  1381. style="width: 70px"
  1382. readonly
  1383. />
  1384. (6)实验室诊断费:
  1385. <input
  1386. v-model="patient.experimentDiagFee"
  1387. style="width: 70px"
  1388. readonly
  1389. />
  1390. (7)影像学诊断费:
  1391. <input v-model="patient.ctDiagFee" style="width: 70px" readonly />
  1392. </div>
  1393. <div>
  1394. (8)临床诊断项目费:
  1395. <input
  1396. v-model="patient.clinicalDiagFee"
  1397. style="width: 70px"
  1398. readonly
  1399. />
  1400. </div>
  1401. <div>
  1402. 3.治疗类: (9)非手术治疗项目费:
  1403. <input
  1404. v-model="patient.notSurgicalFee"
  1405. style="width: 70px"
  1406. readonly
  1407. />
  1408. (临床物理治疗费:
  1409. <input
  1410. v-model="patient.clinicalPhysicalFee"
  1411. style="width: 70px"
  1412. readonly
  1413. />)
  1414. </div>
  1415. <div>
  1416. (10)手术治疗费:
  1417. <input v-model="patient.surgicalFee" style="width: 70px" readonly />
  1418. (麻醉费:
  1419. <input
  1420. v-model="patient.anesthetizeFee"
  1421. style="width: 70px"
  1422. readonly
  1423. />
  1424. &nbsp;&nbsp;手术费:
  1425. <input v-model="patient.surgeryFee" style="width: 70px" readonly />)
  1426. </div>
  1427. <div>
  1428. 4.康复类: (11)康复费:
  1429. <input v-model="patient.recoverFee" style="width: 70px" readonly />
  1430. </div>
  1431. <div>
  1432. 5.中医类: (12)中医治疗费:
  1433. <input
  1434. v-model="patient.tcmTreatmentFee"
  1435. style="width: 70px"
  1436. readonly
  1437. />
  1438. </div>
  1439. <div>
  1440. 6.西药类: (13)西药费:
  1441. <input
  1442. v-model="patient.westMedicineFee"
  1443. style="width: 70px"
  1444. readonly
  1445. />
  1446. </div>
  1447. <div>
  1448. 7.中药类: (14)中成药费:
  1449. <input
  1450. v-model="patient.chinesePatentMedicineFee"
  1451. style="width: 70px"
  1452. readonly
  1453. />
  1454. (15)中草药费:
  1455. <input
  1456. v-model="patient.chineseHerbalMedicineFee"
  1457. style="width: 70px"
  1458. readonly
  1459. />
  1460. </div>
  1461. <div>
  1462. 8.血液和血液制品类: (16)血费:
  1463. <input v-model="patient.bloodFee" style="width: 50px" readonly />
  1464. (17)白蛋白类制品费:
  1465. <input
  1466. v-model="patient.albuminProductsFee"
  1467. style="width: 50px"
  1468. readonly
  1469. />
  1470. (18)球蛋白类制品费:
  1471. <input
  1472. v-model="patient.globulinProductsFee"
  1473. style="width: 50px"
  1474. readonly
  1475. />
  1476. </div>
  1477. <div>
  1478. (19)凝血因子类制品费:
  1479. <input
  1480. v-model="patient.coagulationFactorProductsFee"
  1481. style="width: 70px"
  1482. readonly
  1483. />
  1484. (20)细胞因子类制品费:
  1485. <input
  1486. v-model="patient.cytokineProductsFee"
  1487. style="width: 70px"
  1488. readonly
  1489. />
  1490. </div>
  1491. <div>
  1492. 9.耗材类: (21)检查用一次性医用材料费:
  1493. <input
  1494. v-model="patient.costOfDisposableMedicalMaterialsForExamination"
  1495. style="width: 70px"
  1496. readonly
  1497. />
  1498. (22)治疗用一次性医用材料费:
  1499. <input
  1500. v-model="patient.costOfDisposableMedicalMaterialsForTreatment"
  1501. style="width: 70px"
  1502. readonly
  1503. />
  1504. </div>
  1505. <div>
  1506. (23)手术用一次性医用材料费:
  1507. <input
  1508. v-model="patient.costOfDisposableMedicalMaterialsForOperation"
  1509. style="width: 70px"
  1510. readonly
  1511. />
  1512. </div>
  1513. <div>
  1514. 10.其他类: (24)其他费:
  1515. <input v-model="patient.otherFees" style="width: 70px" readonly />
  1516. </div>
  1517. <div>
  1518. 主要诊断治愈好转情况:
  1519. <span style="border-bottom: 1px solid black; padding: 0 5px">
  1520. {{ filterDismissStatus(patient.disdiagList[0].dismissStatus) }}
  1521. </span>
  1522. </div>
  1523. <div>
  1524. 诊断符合情况: 门诊与出院
  1525. <select
  1526. id="diagConform1"
  1527. v-model="patient.diagConform1"
  1528. style="margin-right: 12px"
  1529. >
  1530. <option
  1531. v-for="(item, index) in dics.getDiagConform"
  1532. :key="index"
  1533. :value="item.code"
  1534. >
  1535. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1536. </option>
  1537. </select>
  1538. 入院与出院
  1539. <select id="diagConform2" v-model="patient.diagConform2">
  1540. <option
  1541. v-for="(item, index) in dics.getDiagConform"
  1542. :key="index"
  1543. :value="item.code"
  1544. >
  1545. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1546. </option>
  1547. </select>
  1548. </div>
  1549. <div>
  1550. 术前与术后
  1551. <select
  1552. id="diagConform3"
  1553. v-model="patient.diagConform3"
  1554. style="margin-right: 12px"
  1555. >
  1556. <option
  1557. v-for="(item, index) in dics.getDiagConform"
  1558. :key="index"
  1559. :value="item.code"
  1560. >
  1561. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1562. </option>
  1563. </select>
  1564. 临床与病理
  1565. <select
  1566. id="diagConform4"
  1567. v-model="patient.diagConform4"
  1568. style="margin-right: 12px"
  1569. >
  1570. <option
  1571. v-for="(item, index) in dics.getDiagConform"
  1572. :key="index"
  1573. :value="item.code"
  1574. >
  1575. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1576. </option>
  1577. </select>
  1578. 放射与病理
  1579. <select id="diagConform5" v-model="patient.diagConform5">
  1580. <option
  1581. v-for="(item, index) in dics.getDiagConform"
  1582. :key="index"
  1583. :value="item.code"
  1584. >
  1585. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1586. </option>
  1587. </select>
  1588. </div>
  1589. <div>
  1590. 抢救情况: 抢救
  1591. <input
  1592. id="rescueTimes"
  1593. v-model="patient.rescueTimes"
  1594. type="number"
  1595. style="width: 90px"
  1596. />次, 成功
  1597. <input
  1598. id="rescueSuccessTimes"
  1599. v-model="patient.rescueSuccessTimes"
  1600. type="number"
  1601. style="width: 90px"
  1602. />次
  1603. </div>
  1604. <div>
  1605. 单病种管理:
  1606. <select
  1607. id="monopathyManagement"
  1608. v-model="patient.monopathyManagement"
  1609. style="margin-right: 12px"
  1610. >
  1611. <option
  1612. v-for="(item, index) in yesOrNo"
  1613. :key="index"
  1614. :value="item.code"
  1615. >
  1616. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1617. </option>
  1618. </select>
  1619. 实施临床路径管理:
  1620. <select
  1621. id="clinicalPathwayManagement"
  1622. v-model="patient.clinicalPathwayManagement"
  1623. style="margin-right: 12px"
  1624. >
  1625. <option
  1626. v-for="(item, index) in dics.getClinicalPathwayManagement"
  1627. :key="index"
  1628. :value="item.code"
  1629. >
  1630. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1631. </option>
  1632. </select>
  1633. 实施DRGs管理:
  1634. <select id="drgsManagement" v-model="patient.drgsManagement">
  1635. <option
  1636. v-for="(item, index) in dics.getDrgsManagement"
  1637. :key="index"
  1638. :value="item.code"
  1639. >
  1640. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1641. </option>
  1642. </select>
  1643. </div>
  1644. <div>
  1645. 抗生素使用:
  1646. <select
  1647. id="useAntibiotic"
  1648. v-model="patient.useAntibiotic"
  1649. style="margin-right: 12px"
  1650. >
  1651. <option
  1652. v-for="(item, index) in yesOrNo"
  1653. :key="index"
  1654. :value="item.code"
  1655. >
  1656. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1657. </option>
  1658. </select>
  1659. 细菌培养标本送检:
  1660. <select
  1661. id="bacilliculture"
  1662. v-model="patient.bacilliculture"
  1663. style="margin-right: 12px"
  1664. >
  1665. <option value="1">&nbsp;&nbsp;是&nbsp;&nbsp;</option>
  1666. <option value="2">&nbsp;&nbsp;否&nbsp;&nbsp;</option>
  1667. </select>
  1668. 法定传染病:
  1669. <select id="statutoryEpidemic" v-model="patient.statutoryEpidemic">
  1670. <option
  1671. v-for="(item, index) in dics.getStatutoryEpidemic"
  1672. :key="index"
  1673. :value="item.code"
  1674. >
  1675. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1676. </option>
  1677. </select>
  1678. </div>
  1679. <div>
  1680. 病例分型:
  1681. <select
  1682. id="caseClassification"
  1683. v-model="patient.caseClassification"
  1684. style="margin-right: 12px"
  1685. >
  1686. <option
  1687. v-for="(item, index) in dics.getCaseClassification"
  1688. :key="index"
  1689. :value="item.code"
  1690. >
  1691. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1692. </option>
  1693. </select>
  1694. 有创呼吸机使用时间:
  1695. <input
  1696. v-model="patient.supplement.ventilatorUseTime"
  1697. type="number"
  1698. style="width: 40px; text-align: center"
  1699. />
  1700. 小时
  1701. <span style="margin-left: 30px">
  1702. 新生儿 5分钟 Apgar评分:
  1703. <input
  1704. style="margin-right: 0; width: 40px; text-align: center"
  1705. v-model="patient.xxeApgar"
  1706. />分
  1707. </span>
  1708. </div>
  1709. <div>
  1710. 住院过程中有无进入重症监护室:
  1711. <select
  1712. v-model="patient.supplement.hadIcu"
  1713. style="width: 40px; margin-right: 30px"
  1714. >
  1715. <option :value="1">有</option>
  1716. <option :value="2">无</option>
  1717. </select>
  1718. 重症监护室名称:
  1719. <select v-model="patient.supplement.icuName" style="width: 150px">
  1720. <option value=""></option>
  1721. <option value="01">CCU-心脏监护室</option>
  1722. <option value="02">RICU-呼吸监护室</option>
  1723. <option value="03">SICU-外科监护室</option>
  1724. <option value="04">NICU-新生儿监护室</option>
  1725. <option value="05">PICU-儿科监护室</option>
  1726. <option value="06">EICU-急诊重症监护室</option>
  1727. <option value="07">MICU-内科重症监护室</option>
  1728. <option value="99">其他</option>
  1729. </select>
  1730. </div>
  1731. <div>
  1732. 进入时间:
  1733. <input
  1734. v-model="patient.supplement.startIcuYear"
  1735. type="number"
  1736. style="width: 40px; text-align: center"
  1737. />
  1738. <input
  1739. v-model="patient.supplement.startIcuMonth"
  1740. type="number"
  1741. style="width: 20px; text-align: center"
  1742. />
  1743. <input
  1744. v-model="patient.supplement.startIcuDay"
  1745. type="number"
  1746. style="width: 20px; text-align: center"
  1747. />
  1748. <input
  1749. v-model="patient.supplement.startIcuHour"
  1750. type="number"
  1751. style="width: 20px; text-align: center"
  1752. />
  1753. <input
  1754. v-model="patient.supplement.startIcuMinute"
  1755. type="number"
  1756. style="width: 20px; text-align: center"
  1757. />
  1758. <span style="margin-left: 30px"> 转出时间: </span>
  1759. <input
  1760. v-model="patient.supplement.endIcuYear"
  1761. type="number"
  1762. style="width: 40px; text-align: center"
  1763. />
  1764. <input
  1765. v-model="patient.supplement.endIcuMonth"
  1766. type="number"
  1767. style="width: 20px; text-align: center"
  1768. />
  1769. <input
  1770. v-model="patient.supplement.endIcuDay"
  1771. type="number"
  1772. style="width: 20px; text-align: center"
  1773. />
  1774. <input
  1775. v-model="patient.supplement.endIcuHour"
  1776. type="number"
  1777. style="width: 20px; text-align: center"
  1778. />
  1779. <input
  1780. v-model="patient.supplement.endIcuMinute"
  1781. type="number"
  1782. style="width: 20px; text-align: center"
  1783. />
  1784. </div>
  1785. <div>
  1786. 住院过程中是否使用ECMO:
  1787. <select
  1788. v-model="patient.supplement.hadEcmo"
  1789. style="width: 40px; margin-right: 30px"
  1790. >
  1791. <option :value="1">是</option>
  1792. <option :value="2">否</option>
  1793. </select>
  1794. 模式:
  1795. <select
  1796. v-model="patient.supplement.ecmoMode"
  1797. style="width: 50px; margin-right: 30px"
  1798. >
  1799. <option value="V-A">V-A</option>
  1800. <option value="V-V">V-V</option>
  1801. <option value="V-AV">V-AV</option>
  1802. <option value="VV-A">VV-A</option>
  1803. </select>
  1804. 膜肺更换次数:
  1805. <input
  1806. v-model="patient.supplement.memlungChangeTimes"
  1807. type="number"
  1808. style="width: 40px; text-align: center"
  1809. />
  1810. </div>
  1811. <div>
  1812. 上机时间:
  1813. <input
  1814. v-model="patient.supplement.startEcmoYear"
  1815. type="number"
  1816. style="width: 40px; text-align: center"
  1817. />
  1818. <input
  1819. v-model="patient.supplement.startEcmoMonth"
  1820. type="number"
  1821. style="width: 20px; text-align: center"
  1822. />
  1823. <input
  1824. v-model="patient.supplement.startEcmoDay"
  1825. type="number"
  1826. style="width: 20px; text-align: center"
  1827. />
  1828. <input
  1829. v-model="patient.supplement.startEcmoHour"
  1830. type="number"
  1831. style="width: 20px; text-align: center"
  1832. />
  1833. <input
  1834. v-model="patient.supplement.startEcmoMinute"
  1835. type="number"
  1836. style="width: 20px; text-align: center"
  1837. />
  1838. <span style="margin-left: 30px"> 撤机时间: </span>
  1839. <input
  1840. v-model="patient.supplement.endEcmoYear"
  1841. type="number"
  1842. style="width: 40px; text-align: center"
  1843. />
  1844. <input
  1845. v-model="patient.supplement.endEcmoMonth"
  1846. type="number"
  1847. style="width: 20px; text-align: center"
  1848. />
  1849. <input
  1850. v-model="patient.supplement.endEcmoDay"
  1851. type="number"
  1852. style="width: 20px; text-align: center"
  1853. />
  1854. <input
  1855. v-model="patient.supplement.endEcmoHour"
  1856. type="number"
  1857. style="width: 20px; text-align: center"
  1858. />
  1859. <input
  1860. v-model="patient.supplement.endEcmoMinute"
  1861. type="number"
  1862. style="width: 20px; text-align: center"
  1863. />
  1864. </div>
  1865. <div>
  1866. 输血品种:红细胞
  1867. <input
  1868. v-model="patient.supplement.erythrocyte"
  1869. type="number"
  1870. style="width: 36px"
  1871. />
  1872. 单位
  1873. <span style="margin-left: 10px"> 血小板 </span>
  1874. <input
  1875. v-model="patient.supplement.platelet"
  1876. type="number"
  1877. style="width: 36px"
  1878. />
  1879. 单位
  1880. <span style="margin-left: 10px"> 血浆 </span>
  1881. <input
  1882. v-model="patient.supplement.plasma"
  1883. type="number"
  1884. style="width: 36px"
  1885. />
  1886. ml
  1887. <span style="margin-left: 10px"> 全血 </span>
  1888. <input
  1889. v-model="patient.supplement.wholeBlood"
  1890. type="number"
  1891. style="width: 36px"
  1892. />
  1893. 单位
  1894. <span style="margin-left: 10px"> 自体血回输 </span>
  1895. <input
  1896. v-model="patient.supplement.autotransfusion"
  1897. type="number"
  1898. style="width: 36px"
  1899. />
  1900. 单位
  1901. </div>
  1902. <div>
  1903. 肿瘤分期: T
  1904. <select
  1905. id="tumorLevelT"
  1906. v-model="patient.tumorLevelT"
  1907. style="margin-right: 12px"
  1908. >
  1909. <option
  1910. v-for="(item, index) in dics.getTumorLevelT"
  1911. :key="index"
  1912. :value="item.code"
  1913. >
  1914. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1915. </option>
  1916. </select>
  1917. N
  1918. <select
  1919. id="tumorLevelN"
  1920. v-model="patient.tumorLevelN"
  1921. style="margin-right: 12px"
  1922. >
  1923. <option
  1924. v-for="(item, index) in dics.getTumorLevelN"
  1925. :key="index"
  1926. :value="item.code"
  1927. >
  1928. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1929. </option>
  1930. </select>
  1931. M
  1932. <select
  1933. id="tumorLevelM"
  1934. v-model="patient.tumorLevelM"
  1935. style="margin-right: 12px"
  1936. >
  1937. <option
  1938. v-for="(item, index) in dics.getTumorLevelM"
  1939. :key="index"
  1940. :value="item.code"
  1941. >
  1942. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1943. </option>
  1944. </select>
  1945. 分期
  1946. <select
  1947. id="tumorLevel"
  1948. v-model="patient.tumorLevel"
  1949. style="margin-right: 18px"
  1950. >
  1951. <option
  1952. v-for="(item, index) in dics.getTumorLevel"
  1953. :key="index"
  1954. :value="item.code"
  1955. >
  1956. &nbsp;&nbsp;{{ item.name }}&nbsp;&nbsp;
  1957. </option>
  1958. </select>
  1959. </div>
  1960. <div>
  1961. 输液输血情况: 1.输液情况:
  1962. <select
  1963. v-model="patient.supplement.infusion"
  1964. style="width: 40px; margin-right: 18px"
  1965. >
  1966. <option :value="1">有</option>
  1967. <option :value="2">无</option>
  1968. </select>
  1969. 2.输液反应:
  1970. <select
  1971. v-model="patient.supplement.infusionReaction"
  1972. style="width: 40px; margin-right: 18px"
  1973. >
  1974. <option :value="1">有</option>
  1975. <option :value="2">无</option>
  1976. </select>
  1977. 3.输血情况:
  1978. <select
  1979. v-model="patient.supplement.transfusion"
  1980. style="width: 40px; margin-right: 18px"
  1981. >
  1982. <option :value="1">有</option>
  1983. <option :value="2">无</option>
  1984. </select>
  1985. 4.输血反应:
  1986. <select
  1987. v-model="patient.supplement.transfusionReaction"
  1988. style="width: 40px; margin-right: 18px"
  1989. >
  1990. <option :value="1">有</option>
  1991. <option :value="2">无</option>
  1992. </select>
  1993. </div>
  1994. </div>
  1995. </div>
  1996. </div>
  1997. </div>
  1998. <div id="headpage" style="opacity: 0; position: fixed">
  1999. <HeadPage :patient="patient" :dics="dics" />
  2000. </div>
  2001. <div id="tailpage" style="opacity: 0; position: fixed">
  2002. <TailPage :patient="patient" :dics="dics" />
  2003. </div>
  2004. <el-drawer
  2005. v-model="showMessageDrawer"
  2006. title="首页保存/打印校验结果"
  2007. size="260px"
  2008. modal-class="modal-class"
  2009. >
  2010. <div class="page-inner">
  2011. <div
  2012. v-if="forceVerifies.length === 0 && adviceVerifies.length === 0"
  2013. class="no-verify-message"
  2014. >
  2015. 暂无校验内容
  2016. </div>
  2017. <div
  2018. v-show="forceVerifies.length > 0"
  2019. style="padding: 8px 0 4px 0; font-weight: bold"
  2020. >
  2021. 以下条目为强制要求,请完善。
  2022. </div>
  2023. <div
  2024. v-for="(item, index) in forceVerifies"
  2025. :key="index"
  2026. class="message-item"
  2027. :style="messageColor(index)"
  2028. @click="handleClickMessage(item.code, index)"
  2029. >
  2030. {{ index + 1 }}、{{ item.name }}
  2031. </div>
  2032. <div
  2033. v-show="adviceVerifies.length > 0"
  2034. style="padding: 8px 0 4px 0; font-weight: bold"
  2035. >
  2036. 以下条目为建议执行,不做强制要求。
  2037. </div>
  2038. <div
  2039. v-for="(item, index) in adviceVerifies"
  2040. :key="index"
  2041. style="
  2042. padding: 6px;
  2043. margin-bottom: 6px;
  2044. border-radius: 4px;
  2045. background: #eea7a752;
  2046. color: #ff2b2b;
  2047. "
  2048. >
  2049. {{ index + 1 }}、{{ item.name }}
  2050. </div>
  2051. </div>
  2052. </el-drawer>
  2053. <div class="rightside-btn" @click="showMessageDrawer = !showMessageDrawer">
  2054. 首页保存 / 打印校验结果
  2055. </div>
  2056. <el-dialog
  2057. v-model="showSelectDateRange"
  2058. title="出院日期"
  2059. width="320px"
  2060. draggable
  2061. >
  2062. <div style="height: 20px"></div>
  2063. 请选择出院日期范围:
  2064. <div style="height: 10px"></div>
  2065. <el-date-picker
  2066. v-model="dateRange"
  2067. type="daterange"
  2068. range-separator="至"
  2069. start-placeholder="开始日期"
  2070. end-placeholder="结束日期"
  2071. :shortcuts="shortcuts"
  2072. style="width: 260px"
  2073. ></el-date-picker>
  2074. <div style="margin: 20px 0 10px 0; width: 100%; text-align: right">
  2075. <el-button type="primary" icon="Check" @click="confirmDateRange"
  2076. >确定
  2077. </el-button>
  2078. </div>
  2079. </el-dialog>
  2080. <el-dialog
  2081. v-model="showYbDiag"
  2082. title="医保出院诊断"
  2083. width="70%"
  2084. top="30px"
  2085. draggable
  2086. >
  2087. <div
  2088. style="
  2089. width: 100%;
  2090. height: 30px;
  2091. line-height: 30px;
  2092. background: rgb(252, 160, 23);
  2093. margin-bottom: 8px;
  2094. border-radius: 8px;
  2095. padding-left: 8px;
  2096. color: white;
  2097. "
  2098. >
  2099. <strong>主要诊断病种分值:{{ diseFamilyGrade }}</strong>
  2100. </div>
  2101. <el-tag type="info">医保诊断录入</el-tag>
  2102. <el-tag style="margin-left: 12px">患者:{{ patient.name }}</el-tag>
  2103. <el-tag style="margin-left: 8px"
  2104. >医疗类别:{{ patient.medTypeName }}
  2105. </el-tag>
  2106. <el-tag style="margin-left: 8px">险种类型:{{ patient.insutype }}</el-tag>
  2107. <div style="height: 5px"></div>
  2108. <el-input
  2109. v-model="ybDiag.name"
  2110. placeholder="在此搜索诊断"
  2111. readonly
  2112. style="width: 160px"
  2113. @click="showSearchData('ybDiag')"
  2114. ></el-input>
  2115. <el-input
  2116. placeholder="诊断编码"
  2117. disabled
  2118. style="width: 100px"
  2119. v-model="ybDiag.code"
  2120. ></el-input>
  2121. <el-select
  2122. v-model="ybDiag.siDiagType"
  2123. style="width: 100px"
  2124. placeholder="诊断类别"
  2125. >
  2126. <el-option
  2127. v-for="item in diagTypes"
  2128. :key="item.code"
  2129. :value="item.code"
  2130. :label="item.name"
  2131. ></el-option>
  2132. </el-select>
  2133. <el-select
  2134. v-model="ybDiag.admissCond"
  2135. style="width: 100px"
  2136. placeholder="入院病情"
  2137. >
  2138. <el-option
  2139. v-for="item in admissConds"
  2140. :key="item.code"
  2141. :value="item.code"
  2142. :label="item.name"
  2143. ></el-option>
  2144. </el-select>
  2145. <el-select
  2146. v-model="ybDiag.cyzg"
  2147. style="width: 120px"
  2148. placeholder="出院转归"
  2149. >
  2150. <el-option
  2151. v-for="item in cyzgs"
  2152. :key="item.code"
  2153. :value="item.code"
  2154. :label="item.name"
  2155. ></el-option>
  2156. </el-select>
  2157. <el-divider direction="vertical"></el-divider>
  2158. <el-button type="primary" icon="Plus" @click="addToYbDiags">添加</el-button>
  2159. <el-button type="success" icon="Upload" @click="saveYbDiags"
  2160. >保存
  2161. </el-button>
  2162. <el-table :data="ybDiags" stripe :height="200">
  2163. <el-table-column type="index" label="序号" width="45"></el-table-column>
  2164. <el-table-column prop="code" label="诊断编码"></el-table-column>
  2165. <el-table-column prop="name" label="诊断名称"></el-table-column>
  2166. <el-table-column
  2167. prop="siDiagType"
  2168. label="诊断类别"
  2169. width="80"
  2170. ></el-table-column>
  2171. <el-table-column
  2172. prop="admissCond"
  2173. label="入院病情"
  2174. width="80"
  2175. ></el-table-column>
  2176. <el-table-column
  2177. prop="cyzg"
  2178. label="出院转归"
  2179. width="80"
  2180. ></el-table-column>
  2181. <el-table-column
  2182. prop="operId"
  2183. label="录入人"
  2184. width="70"
  2185. ></el-table-column>
  2186. <el-table-column prop="opDate" label="录入日期"></el-table-column>
  2187. <el-table-column label="操作">
  2188. <template #default="scope">
  2189. <el-button
  2190. type="danger"
  2191. icon="Delete"
  2192. @click="deleteYbDiag(scope.$index)"
  2193. >删除
  2194. </el-button>
  2195. </template>
  2196. </el-table-column>
  2197. </el-table>
  2198. <div style="height: 12px"></div>
  2199. <el-tag type="info">病案首页诊断信息</el-tag>
  2200. <el-table :data="filterDisDiagList" stripe :height="200">
  2201. <el-table-column type="index" label="序号" width="45"></el-table-column>
  2202. <el-table-column prop="code" label="诊断编码"></el-table-column>
  2203. <el-table-column prop="name" label="诊断名称"></el-table-column>
  2204. <el-table-column label="出院病情">
  2205. <template #default="scope">
  2206. {{ filterDismissStatus(scope.row.dismissStatus) }}
  2207. </template>
  2208. </el-table-column>
  2209. <el-table-column label="操作">
  2210. <template #default="scope">
  2211. <el-button
  2212. icon="Link"
  2213. title="添加到医保诊断"
  2214. circle
  2215. @click="syncronizeWithSiDiagnose(scope.row.code)"
  2216. ></el-button>
  2217. </template>
  2218. </el-table-column>
  2219. </el-table>
  2220. </el-dialog>
  2221. <el-dialog v-model="showSearch" title="数据搜索" width="730px" draggable>
  2222. 检索依据:
  2223. <el-select v-model="searchMethod" style="width: 100px">
  2224. <el-option
  2225. v-for="item in searchMethods"
  2226. :key="item.code"
  2227. :label="item.name"
  2228. :value="item.code"
  2229. ></el-option>
  2230. </el-select>
  2231. &nbsp;&nbsp;&nbsp;&nbsp; 搜索内容:
  2232. <el-input
  2233. ref="searchInput"
  2234. v-model="searchContent"
  2235. prefix-icon="Search"
  2236. placeholder="请输入搜索内容"
  2237. style="width: 160px"
  2238. clearable
  2239. @input="executeSearch"
  2240. ></el-input>
  2241. <div
  2242. v-if="showSurgeryRecommand"
  2243. style="padding: 12px 0 4px 4px; color: gray"
  2244. >
  2245. 根据患者主诊断
  2246. <el-tag
  2247. >{{ patient.disdiagList[0].code }}
  2248. <span style="color: blue">{{ patient.disdiagList[0].name }}</span>
  2249. </el-tag>
  2250. ,推荐以下手术操作:
  2251. </div>
  2252. <el-table
  2253. :data="searchResults"
  2254. height="400"
  2255. stripe
  2256. highlight-current-row
  2257. @row-click="handleSelectSearch"
  2258. >
  2259. <el-table-column prop="code" label="编码" width="130"></el-table-column>
  2260. <el-table-column prop="name" label="名称"></el-table-column>
  2261. <el-table-column
  2262. v-if="searchUrl === 'employee'"
  2263. prop="deptName"
  2264. label="科室"
  2265. ></el-table-column>
  2266. <el-table-column
  2267. v-if="searchUrl === 'employee'"
  2268. prop="ybCode"
  2269. label="医保赋码"
  2270. ></el-table-column>
  2271. <el-table-column
  2272. v-if="showSurgeryRecommand"
  2273. prop="ssfz"
  2274. label="手术分值"
  2275. width="60"
  2276. ></el-table-column>
  2277. </el-table>
  2278. <div style="margin-top: 15px; width: 100%; text-align: right">
  2279. <el-button
  2280. type="primary"
  2281. icon="ArrowLeft"
  2282. @click="lastPage"
  2283. :disabled="showSurgeryRecommand || currentSRPage === 1"
  2284. >
  2285. 上一页
  2286. </el-button>
  2287. <el-button
  2288. type="primary"
  2289. icon="ArrowRight"
  2290. @click="nextPage"
  2291. :disabled="
  2292. showSurgeryRecommand ||
  2293. (currentSRPage > 1 && searchResults.length < 10)
  2294. "
  2295. >
  2296. 下一页
  2297. </el-button>
  2298. </div>
  2299. </el-dialog>
  2300. <el-dialog
  2301. v-model="showSurgeryDatetime"
  2302. title="请选择手术时间"
  2303. width="330px"
  2304. draggable
  2305. >
  2306. <div style="height: 12px"></div>
  2307. <el-date-picker
  2308. v-model="surgeryDatetime"
  2309. type="datetime"
  2310. placeholder="手术开始时间"
  2311. ></el-date-picker>
  2312. <div style="height: 12px"></div>
  2313. <el-date-picker
  2314. v-model="opEndDate"
  2315. type="datetime"
  2316. placeholder="手术结束时间"
  2317. ></el-date-picker>
  2318. <div style="margin: 12px 0 8px 0; font-size: 14px; color: red">
  2319. 提示:有麻醉(局麻除外)的患者需要填写麻醉时间,否则最终校验无法通过!
  2320. </div>
  2321. <el-date-picker
  2322. v-model="anstStartDate"
  2323. type="datetime"
  2324. placeholder="麻醉开始时间"
  2325. ></el-date-picker>
  2326. <div style="height: 12px"></div>
  2327. <el-date-picker
  2328. v-model="anstEndDate"
  2329. type="datetime"
  2330. placeholder="麻醉结束时间"
  2331. ></el-date-picker>
  2332. <template #footer>
  2333. <div>
  2334. <el-button type="primary" icon="Success" @click="confirmSurgeryDatetime"
  2335. >确定
  2336. </el-button>
  2337. </div>
  2338. </template>
  2339. </el-dialog>
  2340. </template>
  2341. <script setup name="FillCaseFrontSheet">
  2342. import {
  2343. autopsies,
  2344. clone,
  2345. filterDismissStatus,
  2346. haveOrNot,
  2347. initShowDel,
  2348. searchMethods,
  2349. yesOrNo,
  2350. } from "./common";
  2351. import { operations } from "@/data";
  2352. import { getLodop, initLodop } from "@/utils/c-lodop";
  2353. import {
  2354. doSaveYbDiags,
  2355. executePrintVerify,
  2356. executeSaveVerify,
  2357. fetchAuditCount,
  2358. fetchOutPatients,
  2359. fetchSsfz,
  2360. getAllDictionary,
  2361. getPatientOverview,
  2362. getSheetInfo,
  2363. getSsfzSurgeriesByIcd,
  2364. getUserWards,
  2365. getYbDiags,
  2366. increaseDiagWeight,
  2367. isMedinsSetl,
  2368. selectSiDiagByBaDiag,
  2369. sheetSearch,
  2370. submitQualityVerification,
  2371. } from "@/api/case-front-sheet";
  2372. import maleIcon from "@/assets/male-icon.png";
  2373. import femaleIcon from "@/assets/female-icon.png";
  2374. import {ElMessage, ElMessageBox} from "element-plus";
  2375. import { shortcuts } from "@/data/shortcuts";
  2376. import {
  2377. formatDate,
  2378. formatDatetime,
  2379. getDatetime,
  2380. getOneMonthOffset,
  2381. } from "@/utils/date";
  2382. import HeadPage from "../../../components/inpatient/frontsheet-printpage/HeadPage.vue";
  2383. import TailPage from "../../../components/inpatient/frontsheet-printpage/TailPage.vue";
  2384. import router from "@/router/index";
  2385. import Sleep from "@/utils/sleep";
  2386. import { smoothScrollTableColumn } from "@/utils/el-table-scroll";
  2387. import { regions } from "@/data/region";
  2388. import { CyMessageBox } from "@/utils/cy-message-box";
  2389. import { xcMessage } from "@/utils/xiaochan-element-plus";
  2390. import AuditHistory from "@/components/inpatient/frontsheet-printpage/AuditHistory.vue";
  2391. import { useUserStore } from "@/pinia/user-store";
  2392. import HistorySheetExport from "@/views/hospitalization/case-front-sheet/component/HistorySheetExport.vue";
  2393. import { useDialog } from "@/components/cy/CyDialog/index";
  2394. import env from "../../../utils/setting";
  2395. import {isNumeric} from "@/utils/validate.js";
  2396. const userStore = useUserStore();
  2397. const userWards = ref([]);
  2398. const currentWard = ref("");
  2399. const inOutStatus = ref(1);
  2400. const inOutOptions = initInOutOptions();
  2401. const inpatientNo = ref("");
  2402. const onlyShowMyPatients = ref(false);
  2403. const overview = ref([]);
  2404. const patient = ref({
  2405. disdiagList: [
  2406. {},
  2407. {},
  2408. {},
  2409. {},
  2410. {},
  2411. {},
  2412. {},
  2413. {},
  2414. {},
  2415. {},
  2416. {},
  2417. {},
  2418. {},
  2419. {},
  2420. {},
  2421. {},
  2422. {},
  2423. {},
  2424. {},
  2425. {},
  2426. {},
  2427. {},
  2428. {},
  2429. {},
  2430. {},
  2431. {},
  2432. {},
  2433. ],
  2434. surgeryList: [{}, {}, {}, {}, {}],
  2435. supplement: {},
  2436. });
  2437. const defaultSurgerySize = ref(5);
  2438. const dics = ref({});
  2439. const showGoSearchBtn1 = ref(false);
  2440. const showGoSearchBtn2 = ref(false);
  2441. const showDel = initShowDel();
  2442. const asideTable = ref(null);
  2443. function addSurgeSize() {
  2444. patient.value.surgeryList.push({});
  2445. defaultSurgerySize.value += 1;
  2446. }
  2447. const cptOverviews = computed(() => {
  2448. return overview.value.filter(item => {
  2449. if (onlyShowMyPatients.value) {
  2450. return item.doctorCode === userStore.userInfo.code;
  2451. }
  2452. return true;
  2453. });
  2454. });
  2455. const filterDisDiagList = computed(() => {
  2456. return patient.value.disdiagList.filter(item => {
  2457. return item.code && item.name;
  2458. });
  2459. });
  2460. const searchPatient = () => {
  2461. if (!inpatientNo.value || inpatientNo.value.trim().length < 1) {
  2462. ElMessage({
  2463. message: "请输入要搜索的住院号",
  2464. type: "warning",
  2465. duration: 2500,
  2466. showClose: true,
  2467. });
  2468. return;
  2469. }
  2470. const patientIndex = overview.value.findIndex(item => {
  2471. return item.bah === inpatientNo.value.trim();
  2472. });
  2473. if (patientIndex === -1) {
  2474. ElMessage({
  2475. message: "未找到住院号【" + inpatientNo.value.trim() + "】的患者信息",
  2476. type: "warning",
  2477. duration: 2500,
  2478. showClose: true,
  2479. });
  2480. } else {
  2481. const currentPatient = overview.value[patientIndex];
  2482. handleClickOverview(currentPatient);
  2483. smoothScrollTableColumn(asideTable.value, patientIndex, currentPatient);
  2484. }
  2485. };
  2486. const handleWardChange = () => {
  2487. if (inOutStatus.value === 1) {
  2488. fetchOverview();
  2489. } else {
  2490. confirmDateRange();
  2491. }
  2492. };
  2493. const dateRange = ref([]);
  2494. const showSelectDateRange = ref(false);
  2495. const changeInOutStatus = () => {
  2496. if (inOutStatus.value === 1) {
  2497. fetchOverview();
  2498. } else {
  2499. if (!dateRange.value || dateRange.value.length < 2) {
  2500. const oneMonth = getOneMonthOffset();
  2501. dateRange.value[0] = oneMonth.start;
  2502. dateRange.value[1] = oneMonth.end;
  2503. }
  2504. showSelectDateRange.value = true;
  2505. }
  2506. };
  2507. const confirmDateRange = () => {
  2508. if (!dateRange.value || dateRange.value.length < 2) {
  2509. ElMessage({
  2510. message: "请选择时间范围",
  2511. type: "warning",
  2512. duration: 2500,
  2513. showClose: true,
  2514. });
  2515. return;
  2516. }
  2517. const param = {
  2518. ward: currentWard.value,
  2519. start: formatDate(dateRange.value[0]),
  2520. end: formatDate(dateRange.value[1]),
  2521. };
  2522. fetchOutPatients(param).then(res => {
  2523. overview.value = res;
  2524. showSelectDateRange.value = false;
  2525. });
  2526. };
  2527. const fetchOverview = () => {
  2528. getPatientOverview(currentWard.value).then(res => {
  2529. overview.value = res;
  2530. });
  2531. };
  2532. const currentRow = ref({});
  2533. const handleClickOverview = row => {
  2534. currentRow.value = row;
  2535. fetchSheetInfo(row);
  2536. };
  2537. const fetchSheetInfo = row => {
  2538. if (
  2539. row.bah !== patient.value.bah ||
  2540. row.times !== patient.value.admissTimes
  2541. ) {
  2542. forceVerifies.value = [];
  2543. adviceVerifies.value = [];
  2544. }
  2545. row.inOutFlag = inOutStatus.value;
  2546. getSheetInfo(row).then(res => {
  2547. patient.value = res;
  2548. let s = res.surgeryList.length;
  2549. defaultSurgerySize.value = s > 5 ? s : 5;
  2550. patient.value.bedNo = row.bedNo;
  2551. patient.value.sex = row.sex;
  2552. });
  2553. };
  2554. const currentSRPage = ref(1);
  2555. const showSearch = ref(false);
  2556. const insertDiag = ref(false);
  2557. watchEffect(() => {
  2558. if (showSearch.value) {
  2559. searchResults.value = [];
  2560. setTimeout(() => {
  2561. showDel.value = initShowDel();
  2562. searchInput.value.focus();
  2563. }, 300);
  2564. } else {
  2565. insertDiag.value = false;
  2566. }
  2567. });
  2568. const searchInput = ref(null);
  2569. const searchUrl = ref("");
  2570. const searchTargetCode = ref("");
  2571. const searchTargetName = ref("");
  2572. const searchContent = ref("");
  2573. const lastPage = () => {
  2574. currentSRPage.value--;
  2575. fetchSearchData();
  2576. };
  2577. const nextPage = () => {
  2578. currentSRPage.value++;
  2579. fetchSearchData();
  2580. };
  2581. const fetchSearchData = () => {
  2582. const param = {
  2583. patNo: patient.value.bah,
  2584. times: patient.value.admissTimes,
  2585. method: searchMethod.value,
  2586. target: searchUrl.value,
  2587. content: searchContent.value,
  2588. medType: patient.value.medType,
  2589. page: currentSRPage.value,
  2590. };
  2591. sheetSearch(param).then(res => {
  2592. searchResults.value = res;
  2593. });
  2594. };
  2595. const executeSearch = () => {
  2596. showSurgeryRecommand.value = false;
  2597. if (
  2598. mainSurgeryFocused.value &&
  2599. searchContent.value === "" &&
  2600. patient.value.disdiagList[0].code
  2601. ) {
  2602. getSsfzSurgeriesByIcd(
  2603. patient.value.bah,
  2604. patient.value.admissTimes,
  2605. patient.value.disdiagList[0].code
  2606. ).then(res => {
  2607. searchResults.value = res;
  2608. showSurgeryRecommand.value = true;
  2609. });
  2610. return;
  2611. }
  2612. if (searchContent.value.length < 2) return;
  2613. currentSRPage.value = 1;
  2614. fetchSearchData();
  2615. };
  2616. const showYbDiag = ref(false);
  2617. const openYbDiag = () => {
  2618. if (nullPatient()) {
  2619. return;
  2620. }
  2621. if (!patient.value.medType) {
  2622. ElMessage({
  2623. message: "自费病人无需填写医保诊断",
  2624. type: "warning",
  2625. duration: 2500,
  2626. showClose: true,
  2627. });
  2628. return;
  2629. }
  2630. getYbDiags(patient.value.bah, patient.value.admissTimes).then(res => {
  2631. ybDiags.value = res;
  2632. showYbDiag.value = true;
  2633. });
  2634. };
  2635. const searchMethod = ref("alpha");
  2636. const searchResults = ref([]);
  2637. const showSearchData = flag => {
  2638. mainSurgeryFocused.value = false;
  2639. showSurgeryRecommand.value = false;
  2640. searchUrl.value = "place";
  2641. if (flag === "birth") {
  2642. searchTargetCode.value = "birthPlace";
  2643. searchTargetName.value = "birthPlaceName";
  2644. } else if (flag === "native") {
  2645. searchTargetCode.value = "nativePlace";
  2646. searchTargetName.value = "nativePlaceName";
  2647. } else if (flag === "hk") {
  2648. searchTargetCode.value = "hkPlace";
  2649. searchTargetName.value = "hkPlaceName";
  2650. } else if (flag === "contact") {
  2651. searchTargetCode.value = "contactAddr";
  2652. searchTargetName.value = "contactAddrName";
  2653. } else if (flag === "hurt") {
  2654. searchUrl.value = "hurtReason";
  2655. searchTargetCode.value = "hurtReasonCode";
  2656. searchTargetName.value = "hurtReasonName";
  2657. } else if (flag === "pathologic") {
  2658. searchUrl.value = "pathologicDiag";
  2659. searchTargetCode.value = "pathologicDiagCode";
  2660. searchTargetName.value = "pathologicDiagStr";
  2661. } else if (flag === "deptleader") {
  2662. searchUrl.value = "employee";
  2663. searchTargetCode.value = "deptLeader";
  2664. searchTargetName.value = "deptLeaderName";
  2665. } else if (flag === "leaderdoctor") {
  2666. searchUrl.value = "employee";
  2667. searchTargetCode.value = "leaderDoctor";
  2668. searchTargetName.value = "leaderDoctorName";
  2669. } else if (flag === "maindoctor") {
  2670. searchUrl.value = "employee";
  2671. searchTargetCode.value = "mainDoctor";
  2672. searchTargetName.value = "mainDoctorName";
  2673. } else if (flag === "admissdoctor") {
  2674. searchUrl.value = "employee";
  2675. searchTargetCode.value = "admissDoctor";
  2676. searchTargetName.value = "admissDoctorName";
  2677. } else if (flag === "dutynurse") {
  2678. searchUrl.value = "employee";
  2679. searchTargetCode.value = "dutyNurse";
  2680. searchTargetName.value = "dutyNurseName";
  2681. } else if (flag === "studydoctor") {
  2682. searchUrl.value = "employee";
  2683. searchTargetCode.value = "studyDoctor";
  2684. searchTargetName.value = "studyDoctorName";
  2685. } else if (flag === "internshipdoctor") {
  2686. searchUrl.value = "employee";
  2687. searchTargetCode.value = "internshipDoctor";
  2688. searchTargetName.value = "internshipDoctorName";
  2689. } else if (flag === "coder") {
  2690. searchUrl.value = "employee";
  2691. searchTargetCode.value = "coder";
  2692. searchTargetName.value = "coderName";
  2693. } else if (flag === "qualitycontroldoctor") {
  2694. searchUrl.value = "employee";
  2695. searchTargetCode.value = "qualityControlDoctor";
  2696. searchTargetName.value = "qualityControlDoctorName";
  2697. } else if (flag === "qualitycontrolnurse") {
  2698. searchUrl.value = "employee";
  2699. searchTargetCode.value = "qualityControlNurse";
  2700. searchTargetName.value = "qualityControlNurseName";
  2701. } else if (flag === "ybDiag") {
  2702. searchUrl.value = "diag";
  2703. searchTargetCode.value = "ybDiagCode";
  2704. } else if (flag === "clinicdiag") {
  2705. searchUrl.value = "clinicdiag";
  2706. searchTargetCode.value = "clinicDiagCode";
  2707. searchTargetName.value = "clinicDiagStr";
  2708. } else if (flag === "admdiag") {
  2709. searchUrl.value = "clinicdiag";
  2710. searchTargetCode.value = "admDiagCode";
  2711. searchTargetName.value = "admDiagStr";
  2712. }
  2713. showSearch.value = true;
  2714. };
  2715. const showSurgeryDatetime = ref(false);
  2716. const surgeryDatetime = ref(null);
  2717. const opEndDate = ref(null);
  2718. const anstStartDate = ref(null);
  2719. const anstEndDate = ref(null);
  2720. const currentSurgeryDatetimeIndex = ref(null);
  2721. const showPickSurgeryDatetime = index => {
  2722. currentSurgeryDatetimeIndex.value = index;
  2723. let surgery = patient.value.surgeryList[index];
  2724. surgeryDatetime.value = surgery.date;
  2725. opEndDate.value = surgery.opEndDate;
  2726. anstStartDate.value = surgery.anstStartDate;
  2727. anstEndDate.value = surgery.anstEndDate;
  2728. showSurgeryDatetime.value = true;
  2729. };
  2730. const confirmSurgeryDatetime = () => {
  2731. if (!surgeryDatetime.value) {
  2732. ElMessage({
  2733. message: "手术开始时间不能为空!",
  2734. type: "warning",
  2735. duration: 2500,
  2736. showClose: true,
  2737. });
  2738. return;
  2739. }
  2740. if (!opEndDate.value) {
  2741. ElMessage({
  2742. message: "手术结束时间不能为空!",
  2743. type: "warning",
  2744. duration: 2500,
  2745. showClose: true,
  2746. });
  2747. return;
  2748. }
  2749. patient.value.surgeryList[currentSurgeryDatetimeIndex.value].date =
  2750. formatDatetime(surgeryDatetime.value);
  2751. patient.value.surgeryList[currentSurgeryDatetimeIndex.value].opEndDate =
  2752. formatDatetime(opEndDate.value);
  2753. patient.value.surgeryList[currentSurgeryDatetimeIndex.value].anstStartDate =
  2754. formatDatetime(anstStartDate.value);
  2755. patient.value.surgeryList[currentSurgeryDatetimeIndex.value].anstEndDate =
  2756. formatDatetime(anstEndDate.value);
  2757. showSurgeryDatetime.value = false;
  2758. };
  2759. const showSearchSurgerior = (flag, index) => {
  2760. mainSurgeryFocused.value = false;
  2761. showSurgeryRecommand.value = false;
  2762. if (flag === "operator") {
  2763. searchTargetCode.value = "surgeryOperatorCode" + (index - 1);
  2764. searchTargetName.value = "surgeryOperatorName" + (index - 1);
  2765. } else if (flag === "assistantone") {
  2766. searchTargetCode.value = "surgeryAssistantOneCode" + (index - 1);
  2767. searchTargetName.value = "surgeryAssistantOneName" + (index - 1);
  2768. } else if (flag === "assistanttwo") {
  2769. searchTargetCode.value = "surgeryAssistantTwoCode" + (index - 1);
  2770. searchTargetName.value = "surgeryAssistantTwoName" + (index - 1);
  2771. } else {
  2772. searchTargetCode.value = "surgeryAnaesthesiaorCode" + (index - 1);
  2773. searchTargetName.value = "surgeryAnaesthesiaorName" + (index - 1);
  2774. }
  2775. searchUrl.value = "employee";
  2776. showSearch.value = true;
  2777. };
  2778. const diseFamilyGrade = ref(null);
  2779. const ybDiag = reactive({});
  2780. const cyzgs = initCyzgs();
  2781. const admissConds = initAdmissConds();
  2782. const diagTypes = initDiagTypes();
  2783. const handleSelectSearch = item => {
  2784. if (searchTargetCode.value.startsWith("surgery")) {
  2785. let offset = defaultSurgerySize.value > 10 ? 2 : 1;
  2786. let no = searchTargetCode.value.substr(
  2787. searchTargetCode.value.length - offset
  2788. );
  2789. if (!isNumeric(no)) {
  2790. offset = 1
  2791. no = searchTargetCode.value.substr(
  2792. searchTargetCode.value.length - offset
  2793. );
  2794. }
  2795. switch (
  2796. searchTargetCode.value.substr(0, searchTargetCode.value.length - offset)
  2797. ) {
  2798. case "surgeryCode":
  2799. if (no > 0) {
  2800. patient.value.surgeryList[no] = clone(
  2801. patient.value.surgeryList[no - 1]
  2802. );
  2803. }
  2804. patient.value.surgeryList[no].no = no;
  2805. patient.value.surgeryList[no].name = item.name;
  2806. patient.value.surgeryList[no].code = item.code;
  2807. patient.value.surgeryList[no].level = item.opScale;
  2808. break;
  2809. case "surgeryOperatorCode":
  2810. patient.value.surgeryList[no].operator = item.code;
  2811. patient.value.surgeryList[no].operatorName = item.name;
  2812. break;
  2813. case "surgeryAssistantOneCode":
  2814. patient.value.surgeryList[no].assistantOne = item.code;
  2815. patient.value.surgeryList[no].assistantOneName = item.name;
  2816. break;
  2817. case "surgeryAssistantTwoCode":
  2818. patient.value.surgeryList[no].assistantTwo = item.code;
  2819. patient.value.surgeryList[no].assistantTwoName = item.name;
  2820. break;
  2821. case "surgeryAnaesthesiaorCode":
  2822. patient.value.surgeryList[no].anaesthesiaor = item.code;
  2823. patient.value.surgeryList[no].anaesthesiaorName = item.name;
  2824. break;
  2825. }
  2826. } else if (searchTargetCode.value.startsWith("disdiags")) {
  2827. let no = Number(searchTargetCode.value.replace("disdiagsCode", ""));
  2828. if (insertDiag.value) {
  2829. for (let i = 26; i > no; i--) {
  2830. patient.value.disdiagList[i] = clone(patient.value.disdiagList[i - 1]);
  2831. }
  2832. patient.value.disdiagList.splice(27);
  2833. insertDiag.value = false;
  2834. }
  2835. patient.value.disdiagList[no].code = item.code;
  2836. patient.value.disdiagList[no].name = item.name;
  2837. patient.value.disdiagList[no].no = no;
  2838. patient.value.disdiagList[no].admissStatus = patient.value.disdiagList[
  2839. no
  2840. ].dismissStatus = "1";
  2841. patient.value.disdiagList[no].opIdCode = userStore.userInfo.code;
  2842. increaseDiagWeight(item.code);
  2843. } else if (searchTargetCode.value === "ybDiagCode") {
  2844. ybDiag.code = item.code;
  2845. ybDiag.name = item.name;
  2846. ybDiag.cyzg = 0;
  2847. ybDiag.siDiagType = 1;
  2848. if (!ybDiags.value || ybDiags.value.length === 0) {
  2849. fetchSsfz(item.code, patient.value.bah, patient.value.admissTimes).then(
  2850. res => {
  2851. diseFamilyGrade.value = res;
  2852. }
  2853. );
  2854. }
  2855. } else if (searchTargetCode.value === "clinicDiagCode") {
  2856. patient.value.clinicDiagCode = item.code;
  2857. patient.value.clinicDiagStr = item.name;
  2858. } else if (searchTargetCode.value === "admDiagCode") {
  2859. patient.value.supplement.admDiagCode = item.code;
  2860. patient.value.supplement.admDiagName = item.name;
  2861. } else {
  2862. if (needDorSiCode.indexOf(searchTargetCode.value) > -1) {
  2863. if (!item.ybCode.startsWith("D")) {
  2864. ElMessage({
  2865. message: "医师医保编码首字母为D,请重新选择。",
  2866. type: "warning",
  2867. showClose: true,
  2868. duration: 2500,
  2869. });
  2870. return;
  2871. }
  2872. }
  2873. if (searchTargetCode.value === "dutyNurse") {
  2874. if (!item.ybCode.startsWith("N")) {
  2875. ElMessage({
  2876. message: "护士医保编码首字母为N,请重新选择。",
  2877. type: "warning",
  2878. showClose: true,
  2879. duration: 2500,
  2880. });
  2881. return;
  2882. }
  2883. }
  2884. patient.value[searchTargetCode.value] = item.code;
  2885. patient.value[searchTargetName.value] = item.name;
  2886. if (searchTargetCode.value === "birthPlace") {
  2887. patient.value.nativePlace = item.code;
  2888. patient.value.nativePlaceName = item.name;
  2889. }
  2890. }
  2891. searchContent.value = "";
  2892. showSearch.value = false;
  2893. };
  2894. const needDorSiCode = [
  2895. "deptLeader",
  2896. "leaderDoctor",
  2897. "mainDoctor",
  2898. "admissDoctor",
  2899. ];
  2900. const syncronizeWithSiDiagnose = code => {
  2901. selectSiDiagByBaDiag(code).then(res => {
  2902. ybDiag.code = res.code;
  2903. ybDiag.name = res.name;
  2904. ybDiag.cyzg = 0;
  2905. ybDiag.siDiagType = 1;
  2906. if (!ybDiags.value || ybDiags.value.length === 0) {
  2907. fetchSsfz(res.code, patient.value.bah, patient.value.admissTimes).then(
  2908. res2 => {
  2909. diseFamilyGrade.value = res2;
  2910. }
  2911. );
  2912. }
  2913. });
  2914. };
  2915. const clearLine = option => {
  2916. switch (option) {
  2917. case "hurtReason":
  2918. patient.value.hurtReasonName = null;
  2919. patient.value.hurtReasonCode = null;
  2920. break;
  2921. case "pathologicDiag":
  2922. patient.value.pathologicDiagStr = null;
  2923. patient.value.pathologicDiagCode = null;
  2924. patient.value.blh = null;
  2925. break;
  2926. }
  2927. };
  2928. const ybDiags = ref([]);
  2929. const addToYbDiags = () => {
  2930. if (!ybDiag.siDiagType) {
  2931. ElMessage({
  2932. message: "请选择诊断类别!",
  2933. type: "warning",
  2934. duration: 2500,
  2935. showClose: true,
  2936. });
  2937. return;
  2938. }
  2939. if (!ybDiag.admissCond) {
  2940. ElMessage({
  2941. message: "请选择入院病情!",
  2942. type: "warning",
  2943. duration: 2500,
  2944. showClose: true,
  2945. });
  2946. return;
  2947. }
  2948. const temp = clone(ybDiag);
  2949. temp.diagType = 13;
  2950. temp.operId = userStore.userInfo.code;
  2951. temp.opDate = getDatetime();
  2952. temp.bzfx = "普通";
  2953. ybDiags.value.push(temp);
  2954. ybDiag.code = ybDiag.name = ybDiag.cyzg = "";
  2955. };
  2956. const deleteYbDiag = index => {
  2957. ybDiags.value.splice(index, 1);
  2958. };
  2959. const saveYbDiags = () => {
  2960. const param = {
  2961. bah: patient.value.bah,
  2962. times: patient.value.admissTimes,
  2963. ybDiags: ybDiags.value,
  2964. };
  2965. doSaveYbDiags(param).then(() => {
  2966. ElMessage({
  2967. message: "保存成功",
  2968. type: "success",
  2969. duration: 2500,
  2970. showClose: true,
  2971. });
  2972. });
  2973. };
  2974. const onSearchDiagFocus = n => {
  2975. mainSurgeryFocused.value = false;
  2976. showSurgeryRecommand.value = false;
  2977. if (n > 0 && !patient.value.disdiagList[n - 1].code) {
  2978. ElMessage({
  2979. message: "请按顺序填写",
  2980. type: "warning",
  2981. duration: 2500,
  2982. showClose: true,
  2983. });
  2984. return;
  2985. }
  2986. searchUrl.value = "normalDiag";
  2987. searchTargetCode.value = "disdiagsCode" + n;
  2988. searchTargetName.value = "disdiagsName" + n;
  2989. if (!patient.value.disdiagList[n].code) {
  2990. showSearch.value = true;
  2991. } else {
  2992. showDel.value[n] = true;
  2993. }
  2994. };
  2995. const showSurgeryRecommand = ref(false);
  2996. const mainSurgeryFocused = ref(false);
  2997. const onSearchSurgeryFocus = n => {
  2998. if (n > 0 && !patient.value.surgeryList[n - 1].code) {
  2999. ElMessage({
  3000. message: "请按顺序填写",
  3001. type: "warning",
  3002. duration: 2500,
  3003. showClose: true,
  3004. });
  3005. return;
  3006. }
  3007. mainSurgeryFocused.value = false;
  3008. showSurgeryRecommand.value = false;
  3009. searchUrl.value = "surgery";
  3010. searchTargetCode.value = "surgeryCode" + n;
  3011. searchTargetName.value = "surgeryName" + n;
  3012. if (!patient.value.surgeryList[n].code) {
  3013. if (n === 0 && patient.value.disdiagList[0].code) {
  3014. mainSurgeryFocused.value = true;
  3015. getSsfzSurgeriesByIcd(
  3016. patient.value.bah,
  3017. patient.value.admissTimes,
  3018. patient.value.disdiagList[0].code
  3019. ).then(res => {
  3020. searchResults.value = res;
  3021. showSurgeryRecommand.value = true;
  3022. });
  3023. }
  3024. showSearch.value = true;
  3025. } else {
  3026. showDel.value[n] = true;
  3027. }
  3028. };
  3029. const onEditSurgeryClick = n => {
  3030. showSearch.value = true;
  3031. if (n === 0 && patient.value.disdiagList[0].code) {
  3032. mainSurgeryFocused.value = true;
  3033. getSsfzSurgeriesByIcd(
  3034. patient.value.bah,
  3035. patient.value.admissTimes,
  3036. patient.value.disdiagList[0].code
  3037. ).then(res => {
  3038. searchResults.value = res;
  3039. showSurgeryRecommand.value = true;
  3040. });
  3041. } else {
  3042. mainSurgeryFocused.value = false;
  3043. showSurgeryRecommand.value = false;
  3044. }
  3045. };
  3046. const hasSurgeryChanged = val => {
  3047. if (val === "0") {
  3048. patient.value.diagConform3 = 0;
  3049. }
  3050. };
  3051. const deleteDisdiag = index => {
  3052. showDel.value[index] = false;
  3053. while (index < 26) {
  3054. patient.value.disdiagList[index] = patient.value.disdiagList[index + 1];
  3055. index++;
  3056. }
  3057. patient.value.disdiagList[26] = {};
  3058. patient.value.disdiagList.splice(27);
  3059. };
  3060. const insertDisdiag = index => {
  3061. mainSurgeryFocused.value = false;
  3062. showSurgeryRecommand.value = false;
  3063. insertDiag.value = true;
  3064. searchUrl.value = "normalDiag";
  3065. searchTargetCode.value = "disdiagsCode" + index;
  3066. searchTargetName.value = "disdiagsName" + index;
  3067. showSearch.value = true;
  3068. };
  3069. function changeSurgeryOrder(currentIndex, newIndex) {
  3070. let temp = patient.value.surgeryList[currentIndex];
  3071. patient.value.surgeryList[currentIndex] = patient.value.surgeryList[newIndex];
  3072. patient.value.surgeryList[newIndex] = temp;
  3073. }
  3074. const deleteSurgery = index => {
  3075. showDel.value[index] = false;
  3076. while (index < defaultSurgerySize.value - 1) {
  3077. patient.value.surgeryList[index] = patient.value.surgeryList[index + 1];
  3078. index++;
  3079. }
  3080. patient.value.surgeryList[defaultSurgerySize.value - 1] = {};
  3081. patient.value.surgeryList.splice(defaultSurgerySize.value);
  3082. if (defaultSurgerySize.value > 5) {
  3083. defaultSurgerySize.value -= 1;
  3084. }
  3085. };
  3086. const deleteAssistantOne = index => {
  3087. patient.value.surgeryList[index].assistantOne = "";
  3088. patient.value.surgeryList[index].assistantOneName = "";
  3089. };
  3090. const deleteAssistantTwo = index => {
  3091. patient.value.surgeryList[index].assistantTwo = "";
  3092. patient.value.surgeryList[index].assistantTwoName = "";
  3093. };
  3094. const deleteAnestor = index => {
  3095. patient.value.surgeryList[index].anaesthesiaor = "";
  3096. patient.value.surgeryList[index].anaesthesiaorName = "";
  3097. };
  3098. const nullPatient = () => {
  3099. if (!patient.value.bah) {
  3100. ElMessage({
  3101. message: "请先选择患者!",
  3102. type: "warning",
  3103. duration: 2500,
  3104. showClose: true,
  3105. });
  3106. return true;
  3107. }
  3108. return false;
  3109. };
  3110. const forceVerifies = ref([]);
  3111. const adviceVerifies = ref([]);
  3112. const currentMessageIndex = ref(null);
  3113. const messageColor = id => {
  3114. return currentMessageIndex.value === id
  3115. ? {
  3116. background: "#ff2b2b",
  3117. color: "white",
  3118. }
  3119. : {
  3120. background: "#eea7a752",
  3121. color: "#ff2b2b",
  3122. };
  3123. };
  3124. const scrollWrapper = ref(null);
  3125. const handleClickMessage = (id, index) => {
  3126. currentMessageIndex.value = index;
  3127. let ele = document.getElementById(id);
  3128. scrollWrapper.value.scrollTop = ele.offsetTop - 260;
  3129. let i = 0;
  3130. let timer = setInterval(() => {
  3131. ele.style.background = i % 2 === 0 ? "rgb(238, 98, 5)" : "transparent";
  3132. i++;
  3133. if (i > 7) {
  3134. clearInterval(timer);
  3135. }
  3136. }, 500);
  3137. };
  3138. const showMessageDrawer = ref(false);
  3139. const setlUplaodClick = () => {
  3140. if (nullPatient()) return;
  3141. isMedinsSetl(patient.value.bah, patient.value.admissTimes).then(() => {
  3142. router.push(
  3143. "/inpatient/casefrntsht/drgCoding/" +
  3144. patient.value.bah +
  3145. "/" +
  3146. patient.value.admissTimes
  3147. );
  3148. });
  3149. };
  3150. const saveVerify = opType => {
  3151. if (nullPatient()) return;
  3152. fetchAuditCount({
  3153. patNo: patient.value.bah,
  3154. times: patient.value.admissTimes,
  3155. }).then(res => {
  3156. if (res.approved > 0) {
  3157. xcMessage.error("此患者病案首页质控审核已通过,无法保存。");
  3158. return;
  3159. }
  3160. executeSaveVerify({
  3161. opType,
  3162. sheet: patient.value,
  3163. })
  3164. .then(() => {
  3165. ElMessage({
  3166. message: "操作成功。",
  3167. type: "success",
  3168. duration: 2500,
  3169. showClose: true,
  3170. });
  3171. })
  3172. .catch(e => {
  3173. forceVerifies.value = e.data;
  3174. showMessageDrawer.value = true;
  3175. });
  3176. });
  3177. };
  3178. function sheetQualityVerification(command) {
  3179. if (command === "applyVerification") {
  3180. beforeSubmitAudit();
  3181. } else {
  3182. useDialog(AuditHistory, {
  3183. dialogProps: { title: "质控记录" },
  3184. showFooter: false,
  3185. params: {
  3186. patinfo: {
  3187. patNo: patient.value.bah,
  3188. times: patient.value.admissTimes,
  3189. },
  3190. },
  3191. });
  3192. }
  3193. }
  3194. function beforeSubmitAudit() {
  3195. if (nullPatient()) {
  3196. return;
  3197. }
  3198. fetchAuditCount({
  3199. patNo: patient.value.bah,
  3200. times: patient.value.admissTimes,
  3201. }).then(res => {
  3202. if (res.approved > 0) {
  3203. xcMessage.error("此患者的质控审核已通过,无需再次申请。");
  3204. return;
  3205. }
  3206. if (res.initial > 0) {
  3207. xcMessage.error("此患者有未被处理的质控审核,请勿重复提交。");
  3208. return;
  3209. }
  3210. executePrintVerify({
  3211. sheet: patient.value,
  3212. })
  3213. .then(() => {
  3214. submitAuditConfirm();
  3215. })
  3216. .catch(e => {
  3217. forceVerifies.value = e.data.force;
  3218. adviceVerifies.value = e.data.advice;
  3219. showMessageDrawer.value = true;
  3220. if (e.data.force.length === 0) {
  3221. submitAuditConfirm();
  3222. }
  3223. });
  3224. });
  3225. }
  3226. function submitAuditConfirm() {
  3227. CyMessageBox.confirm({
  3228. type: "warning",
  3229. title: "提示",
  3230. message: `质控审核通过后,病案将进入锁定状态,无法再次修改。确定要提交质控审核吗?`,
  3231. })
  3232. .then(() => {
  3233. executeSubmitAudit();
  3234. })
  3235. .catch(() => {});
  3236. }
  3237. function executeSubmitAudit() {
  3238. const params = {
  3239. patNo: patient.value.bah,
  3240. times: patient.value.admissTimes,
  3241. patName: patient.value.name,
  3242. patGender: filterPatGender(),
  3243. disDeptCode: patient.value.dismissDeptCode,
  3244. disDeptName: patient.value.dismissDept,
  3245. };
  3246. submitQualityVerification(params).then(() => {
  3247. xcMessage.success("提交成功");
  3248. if (inOutStatus === 2) {
  3249. CyMessageBox.confirm({
  3250. type: "warning",
  3251. title: "提示",
  3252. message: "是否申请医保结算清单质控?",
  3253. }).then(() => {
  3254. setlUplaodClick();
  3255. });
  3256. }
  3257. });
  3258. }
  3259. function filterPatGender() {
  3260. if (patient.value.sex === 1 || patient.value.sex === "1") {
  3261. return "MALE";
  3262. }
  3263. if (patient.value.sex === 2 || patient.value.sex === "2") {
  3264. return "FEMALE";
  3265. }
  3266. return "UNKNOWN";
  3267. }
  3268. const dismissShowSearch = flag => {
  3269. setTimeout(() => {
  3270. if (flag === 1) {
  3271. showGoSearchBtn1.value = false;
  3272. } else {
  3273. showGoSearchBtn2.value = false;
  3274. }
  3275. }, 100);
  3276. };
  3277. const beforePrint = page => {
  3278. if (nullPatient()) return;
  3279. fetchAuditCount({
  3280. patNo: patient.value.bah,
  3281. times: patient.value.admissTimes,
  3282. }).then(res => {
  3283. if (res.approved > 0) {
  3284. execPrint(page);
  3285. } else {
  3286. ElMessageBox.confirm('病案首页质控审核未通过,是否继续打印?', '提示', {
  3287. type: "warning",
  3288. }).then(() => {
  3289. execPrint(page)
  3290. }).catch(() => {})
  3291. }
  3292. });
  3293. };
  3294. const execPrint = page => {
  3295. const LODOP = getLodop();
  3296. const prntStyle = `<style>*{font-size:10pt} table,th,td {border: 1px solid black;border-collapse: collapse;} td,th {height: 24px;padding-left: 4px;}</style>`;
  3297. const prntContent =
  3298. page === 1
  3299. ? document.getElementById("headpage").innerHTML
  3300. : document.getElementById("tailpage").innerHTML;
  3301. let pagePrint = prntStyle + "<body>" + prntContent + "</body>";
  3302. LODOP.PRINT_INIT("casefrontsheet");
  3303. LODOP.SET_PRINT_PAGESIZE(1, "210mm", "297mm", "");
  3304. LODOP.SET_PRINT_MODE("FULL_WIDTH_FOR_OVERFLOW", true); // 整宽不变形
  3305. LODOP.ADD_PRINT_HTM("2mm", "5mm", "100%", "100%", pagePrint);
  3306. LODOP.SET_PRINT_STYLE("ItemType", 3);
  3307. LODOP.PREVIEW();
  3308. };
  3309. onActivated(async () => {
  3310. const params = router.currentRoute.value.query;
  3311. if (params && params.patNo && params.deptCode) {
  3312. await Sleep(300);
  3313. if (params.times && params.disdate) {
  3314. dateRange.value[0] = params.disdate;
  3315. dateRange.value[1] = params.disdate;
  3316. inOutStatus.value = 2;
  3317. } else {
  3318. inOutStatus.value = 1;
  3319. }
  3320. inpatientNo.value = params.patNo;
  3321. currentWard.value = params.deptCode;
  3322. handleWardChange();
  3323. await Sleep(500);
  3324. searchPatient();
  3325. }
  3326. });
  3327. function showExportPanel() {
  3328. useDialog(HistorySheetExport, {
  3329. dialogProps: {
  3330. title: "历史病案导出",
  3331. width: "600px",
  3332. },
  3333. confirmText: "导出",
  3334. });
  3335. }
  3336. onMounted(() => {
  3337. scrollWrapper.value = document.getElementById("scrollWrapper");
  3338. initLodop();
  3339. getAllDictionary().then(res => {
  3340. res.getOperations = operations;
  3341. res.getYesOrNo = yesOrNo;
  3342. res.getHaveOrNot = haveOrNot;
  3343. res.getAutopsies = autopsies;
  3344. dics.value = res;
  3345. });
  3346. getUserWards().then(res => {
  3347. userWards.value = res;
  3348. if (res.length > 0) {
  3349. currentWard.value = res[0].code;
  3350. fetchOverview();
  3351. }
  3352. });
  3353. });
  3354. function initInOutOptions() {
  3355. return [
  3356. { code: 1, name: "在院" },
  3357. { code: 2, name: "出院" },
  3358. ];
  3359. }
  3360. function initCyzgs() {
  3361. return [
  3362. { code: 0, name: "好转/治愈" },
  3363. { code: 1, name: "未愈" },
  3364. { code: 2, name: "转院(医院要求)" },
  3365. { code: 3, name: "转院(病人要求)" },
  3366. { code: 4, name: "转科" },
  3367. { code: 5, name: "无效" },
  3368. { code: 6, name: "死亡" },
  3369. { code: 7, name: "双向转诊" },
  3370. { code: 9, name: "其他" },
  3371. ];
  3372. }
  3373. function initAdmissConds() {
  3374. return [
  3375. { code: 1, name: "有" },
  3376. { code: 2, name: "临床未确定" },
  3377. { code: 3, name: "情况不明" },
  3378. { code: 4, name: "无" },
  3379. ];
  3380. }
  3381. function initDiagTypes() {
  3382. return [
  3383. { code: 1, name: "西医诊断" },
  3384. { code: 2, name: "中医主病诊断" },
  3385. { code: 3, name: "中医主症诊断" },
  3386. ];
  3387. }
  3388. </script>
  3389. <style scoped>
  3390. :deep(.el-dialog__body) {
  3391. padding-top: 8px;
  3392. }
  3393. :deep(.el-drawer) {
  3394. border: 1px solid orange;
  3395. }
  3396. :deep(.el-drawer .el-icon) {
  3397. font-size: 20px;
  3398. color: orangered;
  3399. }
  3400. :deep(.el-drawer__header) {
  3401. margin-bottom: 8px;
  3402. }
  3403. :deep(.el-dialog__header) {
  3404. padding-bottom: 4px;
  3405. }
  3406. :deep(.el-checkbox__label) {
  3407. padding-left: 2px;
  3408. }
  3409. select,
  3410. input {
  3411. outline: none;
  3412. border: none;
  3413. height: 20px;
  3414. line-height: 20px;
  3415. border-radius: 0;
  3416. background: transparent;
  3417. border-bottom: 1px solid #333333;
  3418. -webkit-appearance: none;
  3419. -moz-appearance: none;
  3420. appearance: none;
  3421. }
  3422. input[type="number"] {
  3423. -moz-appearance: textfield;
  3424. }
  3425. select ::-ms-expand {
  3426. display: none;
  3427. }
  3428. textarea {
  3429. outline: none;
  3430. border: none;
  3431. background-color: transparent;
  3432. }
  3433. table th {
  3434. border: 1px solid black;
  3435. text-align: center;
  3436. }
  3437. table td {
  3438. border: 1px solid black;
  3439. }
  3440. .page-inner {
  3441. padding: 0 20px 10px 26px;
  3442. border-radius: 12px;
  3443. text-align: justify;
  3444. }
  3445. .message-item {
  3446. padding: 6px;
  3447. margin-bottom: 6px;
  3448. border-radius: 4px;
  3449. }
  3450. .message-item:hover {
  3451. cursor: pointer;
  3452. }
  3453. .rightside-btn {
  3454. display: flex;
  3455. align-items: center;
  3456. text-align: center;
  3457. color: white;
  3458. border-radius: 4px;
  3459. width: 20px;
  3460. height: 185px;
  3461. position: fixed;
  3462. background: rgb(238, 98, 5);
  3463. top: 260px;
  3464. right: 10px;
  3465. cursor: pointer;
  3466. }
  3467. .no-verify-message {
  3468. width: 100%;
  3469. text-align: center;
  3470. margin-top: 50px;
  3471. font-size: 18px;
  3472. color: gray;
  3473. }
  3474. :deep(.m-drawer .el-overlay) {
  3475. right: 0;
  3476. left: calc(100vw - 260px);
  3477. background: transparent !important;
  3478. }
  3479. :deep(#livePlace .el-input__wrapper) {
  3480. background: transparent;
  3481. border: none;
  3482. box-shadow: none;
  3483. border-radius: 0;
  3484. border-bottom: 1px solid black;
  3485. color: black;
  3486. }
  3487. :deep(#livePlace .el-input__inner) {
  3488. color: black;
  3489. }
  3490. .audit-state {
  3491. font-weight: bold;
  3492. font-size: 16px;
  3493. }
  3494. .audit-state_approved {
  3495. color: green;
  3496. }
  3497. .audit-state_rejected {
  3498. color: red;
  3499. text-decoration: underline;
  3500. cursor: pointer;
  3501. }
  3502. .audit-state_initial {
  3503. color: #777777;
  3504. }
  3505. .audit-state_none {
  3506. color: #e8b600;
  3507. }
  3508. .order-arrow {
  3509. font-size: 16px;
  3510. cursor: pointer;
  3511. }
  3512. .order-arrow:hover {
  3513. color: #0a84fd;
  3514. }
  3515. </style>