FillCaseFrontSheet.vue 127 KB

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