CashierProcessInfo.vue 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143
  1. <template>
  2. <div class="layout_container">
  3. <header>
  4. <div style="height:25px;margin-bottom: 5px">
  5. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  6. <el-button :disabled="saveFlag" icon="Check" type="primary" @click="saveCashData">保存</el-button>
  7. <el-button :disabled="qxFlag" icon="Minus" type="danger" @click="cancelCash">取消出纳</el-button>
  8. <el-button type="primary" icon="RefreshLeft" @click="chongZhiData" >清空</el-button>
  9. <el-button type="warning" icon="Money" @click="openPos" >智能POS工具包</el-button>
  10. </div>
  11. <PatientBaseList ref="patientBaseListRef" :inOutFlag="1" @selectPatientInfo="selectPatient"></PatientBaseList>
  12. </header>
  13. <div class="layout_main">
  14. <el-container>
  15. <el-header style="height: 90px">
  16. <div style="width: 100%" >
  17. <el-form label-width="100px" size="large">
  18. <el-row style="width: 100%">
  19. <el-col :span="4" >
  20. <el-form-item v-show="setShowFlag" label="结算类型:">
  21. <el-input v-model="settData.settleTypeName" disabled style="width: 100px"></el-input>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="4" >
  25. <el-form-item v-show="setShowFlag" label="自付:">
  26. <el-input v-model="settData.zfJe" disabled style="width: 100px"></el-input>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="4" >
  30. <el-form-item v-show="setShowFlag" :label="settData.settleName">
  31. <el-input v-model="settData.settle" disabled style="width: 100px"></el-input>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="4" >
  35. <el-form-item v-show="setShowFlag" label="实收:">
  36. <el-input-number v-model="settData.ssJe" :controls="false" :precision="2" :min="0" />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="4" >
  40. <el-form-item v-show="setShowFlag" label="找还:">
  41. <el-input v-model="settData.zhje" disabled style="width: 80px"></el-input>
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="4" v-if="fpVersion ==='0'">
  45. <el-form-item label="当前发票号:">
  46. <span style="display: inline-block;width: 110px;background-color: #0f5e0f;text-align: center;color: #2eff00;font-size: 18px">{{settData.currentNoStr}}</span>
  47. </el-form-item>
  48. </el-col>
  49. </el-row>
  50. </el-form>
  51. </div>
  52. </el-header>
  53. <el-container>
  54. <el-aside style="width: 60%">
  55. <div style="height: 60%">
  56. <div class="border_solid layout_overflow_auto" style="float: left;width: 40%;height: 100%">
  57. <el-divider border-style="dashed" content-position="left" >记账信息</el-divider>
  58. <el-table :data="jzInfoList" style="width: 100%" height="200">
  59. <el-table-column property="ybType" label="类型" />
  60. <el-table-column property="ybJzJe" label="金额" />
  61. </el-table>
  62. </div>
  63. <div class="border_solid layout_overflow_auto" style="float: right;width: 58%;height: 100%">
  64. <el-divider border-style="dashed" content-position="left" >交款信息</el-divider>
  65. <el-table :data="jkInfoList" style="width: 100%" height="130">
  66. <el-table-column width="80" label="操作" >
  67. <template #default="scope">
  68. <el-button v-if="scope.row.settType ==='交纳' && (scope.row.depoType==='3' || scope.row.depoType==='O') " type="primary" @click="shuaKa(scope.row,scope.$index)">刷卡/扫码</el-button>
  69. </template>
  70. </el-table-column>
  71. <el-table-column property="settType" width="50" >
  72. <template #default="scope">
  73. <span v-if="scope.row.settType ==='退款'" style="color: blue;font-size: 15px">{{scope.row.settType}}</span>
  74. <span v-if="scope.row.settType !=='退款'" style="color: red;font-size: 15px">{{scope.row.settType}}</span>
  75. </template>
  76. </el-table-column>
  77. <el-table-column property="depoType" label="类型" >
  78. <template #default="scope">
  79. <el-select v-model="scope.row.depoType" size="default" style="width: 100px">
  80. <el-option v-for="item in zdChequeTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
  81. </el-select>
  82. </template>
  83. </el-table-column>
  84. <el-table-column property="depoAmount" label="金额" width="120">
  85. <template #default="scope">
  86. <el-input-number v-model="scope.row.depoAmount" @blur="calcJkJe" :controls="false" :precision="2" :min="0" size="large" style="width: 100px;"/>
  87. </template>
  88. </el-table-column>
  89. <el-table-column property="chequeNo" label="凭证号" >
  90. <template #default="scope">
  91. <el-input v-model="scope.row.chequeNo" size="default" style="width: 100px"/>
  92. </template>
  93. </el-table-column>
  94. <el-table-column >
  95. <template #default="scope">
  96. <el-button icon="Plus" @click="addJkInfo"></el-button>
  97. <el-button icon="Minus" @click="delJkInfo(scope.$index)" ></el-button>
  98. </template>
  99. </el-table-column>
  100. </el-table>
  101. <div v-if="jkInfoList.length > 0" style="width: 200px;margin-left: 100px" class="layout_overflow_auto">
  102. <el-descriptions size="large" :column="1" border >
  103. <el-descriptions-item label="交纳:" label-class-name="red-color">
  104. <span style="color: red; font-size: 24px; font-weight: bold" >{{jkHj.jnZj}} </span>
  105. </el-descriptions-item>
  106. <el-descriptions-item label="退款:" label-class-name="blue-color">
  107. <span style="color: blue; font-size: 24px; font-weight: bold">{{jkHj.tkZj}} </span>
  108. </el-descriptions-item>
  109. <el-descriptions-item label="总计:">
  110. <span style="font-size: 24px;font-weight: bold">{{jkHj.zj}} </span>
  111. </el-descriptions-item>
  112. </el-descriptions>
  113. </div>
  114. </div>
  115. </div>
  116. <div style="height: 30%">
  117. <el-divider border-style="dashed" content-position="left" >发票信息</el-divider>
  118. <div class="border_solid layout_overflow_auto" style="float: left;width: 50%;height: 100%">
  119. <el-table :data="zyInfoList" style="width: 100%" highlight-current-row @row-click="fetchZyData" height="180">
  120. <el-table-column property="ledgerSn" label="账页" />
  121. <el-table-column property="accountDate" label="结算日期" />
  122. <el-table-column label="类型" >
  123. <template #default="scope">
  124. {{getZySettType(scope.row)}}
  125. </template>
  126. </el-table-column>
  127. <el-table-column property="cashDate" label="出纳日期" />
  128. <el-table-column property="responceTypeName" label="结账身份" />
  129. </el-table>
  130. </div>
  131. <div class="border_solid layout_overflow_auto" style="float: right;width: 49%;height: 100%">
  132. <el-table :data="zyFpInfoList" style="width: 100%" height="180">
  133. <el-table-column label="操作" width="240" >
  134. <template #default="scope">
  135. <el-button v-if="scope.row.inpatientNo !=null && fpVersion==='0'" icon="Printer" type="success" @click="selectPrintZyFp(scope.row)">打印</el-button>
  136. <el-button v-if="scope.row.inpatientNo !=null && fpVersion==='1'" icon="Upload" title="上传电子发票" type="primary" @click="uploadZyFp(scope.row,3)"></el-button>
  137. <el-button v-if="scope.row.inpatientNo !=null && fpVersion==='1'" icon="Download" title="下载电子发票" type="primary" @click="openDzfp(scope.row,3)"></el-button>
  138. &nbsp;&nbsp;
  139. <el-button v-if="scope.row.inpatientNo !=null && fpVersion==='1'" icon="Delete" title="作废电子发票" type="danger" @click="uploadZyFp(scope.row,4)"></el-button>
  140. <el-button v-if="scope.row.inpatientNo !=null && fpVersion==='1'" icon="Download" title="下载已作废电子发票" type="danger" @click="downDzFp(scope.row,4,'0')"></el-button>
  141. </template>
  142. </el-table-column>
  143. <el-table-column property="ledgerSn" label="账页" />
  144. <el-table-column v-if="fpVersion === '0'" property="receiptNo" label="发票号" />
  145. <el-table-column property="responceUnitName" label="类型" />
  146. <el-table-column property="totalCharge" label="发票金额" />
  147. </el-table>
  148. </div>
  149. </div>
  150. </el-aside>
  151. <el-main style="width: 40%">
  152. <el-tabs v-model="activeName" @tab-change="tabClick">
  153. <el-tab-pane label="已交押金" name="one">
  154. <el-table :data="yjYjList" style="width: 100%;" :height="350">
  155. <el-table-column property="ledgerSn" label="账页" />
  156. <!-- <el-table-column label="打印操作" >-->
  157. <!-- <template #default="scope">-->
  158. <!-- <el-button v-if="scope.row.status ==='1'" icon="Printer" type="success" @click="printFp(scope.row)">打印</el-button>-->
  159. <!-- </template>-->
  160. <!-- </el-table-column>>-->
  161. <el-table-column property="depoDate" label="日期" />
  162. <el-table-column label="事务">
  163. <template #default="{row}">
  164. <span
  165. :class="row.statusName === '结算补交'
  166. ? 'red-color' : ''"
  167. >
  168. {{row.statusName}}
  169. </span>
  170. </template>
  171. </el-table-column>
  172. <el-table-column property="depoAmount" label="金额" />
  173. <el-table-column property="receiptNo" label="收据" />
  174. <el-table-column property="depoTypeName" label="类型" />
  175. <el-table-column property="chequeNo" label="支票号" />
  176. <el-table-column property="opIdCodeName" label="操作员" />
  177. </el-table>
  178. <div>
  179. <el-descriptions size="large" :column="2" border style="width:100%;" >
  180. <el-descriptions-item label="预交张数:">
  181. <span class="f-size">{{yjHz.yjZs}} </span>
  182. </el-descriptions-item>
  183. <el-descriptions-item label="预交合计:">
  184. <span class="f-size">{{yjHz.yjHj}} </span>
  185. </el-descriptions-item>
  186. <el-descriptions-item >
  187. </el-descriptions-item>
  188. <el-descriptions-item label="直退合计:" label-class-name="red-color">
  189. <span class="f-size" style="color: red">
  190. {{yjHz.ztHj}}
  191. </span>
  192. </el-descriptions-item>
  193. <el-descriptions-item >
  194. </el-descriptions-item>
  195. <el-descriptions-item label="实际预交:">
  196. <span class="f-size">{{yjHz.sjYj}} </span>
  197. </el-descriptions-item>
  198. </el-descriptions>
  199. </div>
  200. </el-tab-pane>
  201. <el-tab-pane label="可出纳列表" name="two">
  202. <div class="layout_overflow_auto" style="width: 100%;height: 100%">
  203. <el-table :data="kcnList" highlight-current-row @row-click="fetchCnPatient" style="width: 100%;" :height="450">
  204. <el-table-column property="actFlagName" label="在院/出院" />
  205. <el-table-column property="inpatientNo" label="住院号" />
  206. <el-table-column property="admissTimes" label="住院次数" />
  207. <el-table-column property="name" label="姓名" />
  208. <el-table-column property="bedNo" label="床号" />
  209. <el-table-column property="settle" label="补/退" />
  210. <el-table-column property="wardName" label="病房" />
  211. <el-table-column property="accountDate" label="结算时间" />
  212. <el-table-column property="admissDate" label="入院日期" />
  213. </el-table>
  214. </div>
  215. </el-tab-pane>
  216. </el-tabs>
  217. </el-main>
  218. </el-container>
  219. </el-container>
  220. </div>
  221. </div>
  222. <PosTransaction ref="posTransactionRef"></PosTransaction>
  223. <el-dialog v-model="zyFpPrintVisible" title="发票打印" width="800" center>
  224. <div style="width: 100%;height: 60px">
  225. <el-row>
  226. <el-col :span="12">
  227. 起始发票号: <span style="display: inline-block;width: 110px;background-color: #0f5e0f;text-align: center;color: #2eff00;font-size: 18px">{{settData.currentNoStr}}</span>
  228. </el-col>
  229. <el-col :span="6">
  230. <el-checkbox v-model="printFlag">更新发票号</el-checkbox>
  231. </el-col>
  232. <el-col :span="6">
  233. <el-button type="success" icon="Printer" @click="printZyFp">打印</el-button>
  234. </el-col>
  235. </el-row>
  236. </div>
  237. <div id="zyFpId" style="width: 640px;">
  238. <div style="width: 640px;border: 1px white solid">
  239. <div id="headDiv">
  240. <p style="margin-left: 478px;margin-top: 40px">
  241. {{settData.currentNoStr}}
  242. </p>
  243. <p style="margin-left: 170px;margin-top: -10px;">
  244. {{printZyFpInfo.responceTypeName}}
  245. </p>
  246. <p style="margin-left: 165px;margin-top: -10px">
  247. 住院总费用:{{printZyFpInfo.totalCharge}},其中医保统筹支付:{{printZyFpInfo.ybTcZfJe}}元,
  248. </p>
  249. <p style="margin-left: 165px;margin-top: -10px">
  250. 个人自付金额{{printZyFpInfo.grZfJe}},个人账户支付{{printZyFpInfo.grZhZfJe}}元
  251. </p>
  252. </div>
  253. <div style="height: 20px">
  254. <div style="margin-left: 40px">
  255. {{printZyFpInfo.name}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  256. {{printZyFpInfo.sexName}} <span style="display: inline-block;width: 270px"></span>
  257. {{printZyFpInfo.wardName}} <span style="display: inline-block;width: 40px"></span>
  258. {{printZyFpInfo.inpatientNo}}
  259. </div>
  260. </div>
  261. <div style="margin-left: 19px">
  262. {{getYeay(printZyFpInfo.startDate)}} <span style="display: inline-block;width: 25px"></span>
  263. {{getMoth(printZyFpInfo.startDate)}}<span style="display: inline-block;width: 29px"></span>
  264. {{getDay(printZyFpInfo.startDate)}}<span style="display: inline-block;width: 70px"></span>
  265. {{getYeay(printZyFpInfo.endDate)}}<span style="display: inline-block;width: 25px"></span>
  266. {{getMoth(printZyFpInfo.endDate)}}<span style="display: inline-block;width: 29px"></span>
  267. {{getDay(printZyFpInfo.endDate)}}<span style="display: inline-block;width: 65px"></span>
  268. {{printZyFpInfo.zyTs}}<span style="display: inline-block;width: 65px"></span>
  269. {{getYeay(getFormatDatetime(new Date()))}}<span style="display: inline-block;width: 25px"></span>
  270. {{getMoth(getFormatDatetime(new Date()))}}<span style="display: inline-block;width: 29px"></span>
  271. {{getDay(getFormatDatetime(new Date()))}}
  272. </div>
  273. <div class="comH"></div>
  274. <div class=" comH comM">
  275. <span class=" spanW " v-if="printZyFpInfo.charge1 !==0">{{printZyFpInfo.charge1}}</span>
  276. <span v-else class="spanW"></span>
  277. <span class="comSpan"></span>
  278. <span class="spanW" v-if="printZyFpInfo.charge9 !==0">{{printZyFpInfo.charge9}}</span>
  279. <span v-else class="spanW"></span>
  280. <span class="comSpan"></span>
  281. <span class="spanW" v-if="printZyFpInfo.charge17 !==0">{{printZyFpInfo.charge17}}</span>
  282. <span v-else class="spanW"></span>
  283. <span class="comSpan"></span>
  284. <span class="spanW" v-if="printZyFpInfo.charge25 !==0">{{printZyFpInfo.charge25}}</span>
  285. <span v-else class="spanW"></span>
  286. <span class="comSpan"></span>
  287. </div>
  288. <div class=" comH comM" >
  289. <span class=" spanW" v-if="printZyFpInfo.charge2 !==0">{{printZyFpInfo.charge2}}</span>
  290. <span v-else class="spanW"></span>
  291. <span class="comSpan"></span>
  292. <span class="spanW" v-if="printZyFpInfo.charge10 !==0">{{printZyFpInfo.charge10}}</span>
  293. <span v-else class="spanW"></span>
  294. <span class="comSpan"></span>
  295. <span class="spanW" v-if="printZyFpInfo.charge18 !==0">{{printZyFpInfo.charge18}}</span>
  296. <span v-else class="spanW"></span>
  297. <span class="comSpan" v-if="printZyFpInfo.charge26 !==0">其他</span>
  298. <span v-else class="comSpan"></span>
  299. <span class="spanW" v-if="printZyFpInfo.charge26 !==0">{{printZyFpInfo.charge26}}</span>
  300. <span v-else class="spanW"></span>
  301. <span class="comSpan"></span>
  302. <span class="spanW" v-if="printZyFpInfo.ysHjJe !==0">{{printZyFpInfo.ysHjJe}}</span>
  303. <span v-else class="spanW"></span>
  304. </div>
  305. <div class=" comH comM" >
  306. <span class=" spanW" v-if="printZyFpInfo.charge3 !==0">{{printZyFpInfo.charge3}}</span>
  307. <span v-else class="spanW"></span>
  308. <span class="comSpan"></span>
  309. <span class=" spanW" v-if="printZyFpInfo.charge11 !==0">{{printZyFpInfo.charge11}}</span>
  310. <span v-else class="spanW"></span>
  311. <span class="comSpan"></span>
  312. <span class="spanW" v-if="printZyFpInfo.charge19 !==0">{{printZyFpInfo.charge19}}</span>
  313. <span v-else class="spanW"></span>
  314. <span class="comSpan " v-if="printZyFpInfo.charge27 !==0">材料费</span>
  315. <span v-else class="comSpan"></span>
  316. <span class="spanW" v-if="printZyFpInfo.charge27 !==0">{{printZyFpInfo.charge27}}</span>
  317. <span v-else class="spanW"></span>
  318. </div>
  319. <div class=" comH comM" >
  320. <span class=" spanW" v-if="printZyFpInfo.charge4 !==0">{{printZyFpInfo.charge4}}</span>
  321. <span v-else class="spanW"></span>
  322. <span class="comSpan"></span>
  323. <span class="spanW" v-if="printZyFpInfo.charge12 !==0">{{printZyFpInfo.charge12}}</span>
  324. <span v-else class="spanW"></span>
  325. <span class="comSpan"></span>
  326. <span class="spanW" v-if="printZyFpInfo.charge20 !==0">{{printZyFpInfo.charge20}}</span>
  327. <span v-else class="spanW"></span>
  328. <span class="comSpan" v-if="printZyFpInfo.charge28 !==0">中成药</span>
  329. <span v-else class="comSpan"></span>
  330. <span class="spanW" v-if="printZyFpInfo.charge28 !==0">{{printZyFpInfo.charge28}}</span>
  331. <span v-else class="spanW"></span>
  332. <span class="comSpan"></span>
  333. <span class="spanW" v-if="printZyFpInfo.bsHjJe !==0">{{printZyFpInfo.bsHjJe}}</span>
  334. <span v-else class="spanW"></span>
  335. </div>
  336. <div class=" comH comM" >
  337. <span class=" spanW" v-if="printZyFpInfo.charge5 !==0">{{printZyFpInfo.charge5}}</span>
  338. <span v-else class="spanW"></span>
  339. <span class="comSpan"></span>
  340. <span class="spanW" v-if="printZyFpInfo.charge13 !==0">{{printZyFpInfo.charge13}}</span>
  341. <span v-else class="spanW"></span>
  342. <span class="comSpan"></span>
  343. <span class="spanW" v-if="printZyFpInfo.charge21 !==0">{{printZyFpInfo.charge21}}</span>
  344. <span v-else class="spanW"></span>
  345. <span class="comSpan" ></span>
  346. <span class="spanW" ></span>
  347. <span class="comSpan"></span>
  348. <span class="spanW" ></span>
  349. </div>
  350. <div class=" comH comM" >
  351. <span class=" spanW" v-if="printZyFpInfo.charge6 !==0">{{printZyFpInfo.charge6}}</span>
  352. <span v-else class="spanW"></span>
  353. <span class="comSpan"></span>
  354. <span class="spanW" v-if="printZyFpInfo.charge14 !==0">{{printZyFpInfo.charge14}}</span>
  355. <span v-else class="spanW"></span>
  356. <span class="comSpan"></span>
  357. <span class="spanW" v-if="printZyFpInfo.charge22 !==0">{{printZyFpInfo.charge22}}</span>
  358. <span v-else class="spanW"></span>
  359. <span class="comSpan" ></span>
  360. <span class="spanW" ></span>
  361. <span class="comSpan"></span>
  362. <span class="spanW" v-if="printZyFpInfo.tkHjJe !==0">{{printZyFpInfo.tkHjJe}}</span>
  363. <span v-else class="spanW"></span>
  364. </div>
  365. <div class=" comH comM" >
  366. <span class=" spanW" v-if="printZyFpInfo.charge7 !==0">{{printZyFpInfo.charge7}}</span>
  367. <span v-else class="spanW"></span>
  368. <span class="comSpan"></span>
  369. <span class="spanW" v-if="printZyFpInfo.charge15 !==0">{{printZyFpInfo.charge15}}</span>
  370. <span v-else class="spanW"></span>
  371. <span class="comSpan"></span>
  372. <span class="spanW" v-if="printZyFpInfo.charge23 !==0">{{printZyFpInfo.charge23}}</span>
  373. <span v-else class="spanW"></span>
  374. <span class="comSpan" ></span>
  375. <span class="spanW" ></span>
  376. <span class="comSpan"></span>
  377. <span class="spanW" ></span>
  378. </div>
  379. <div class=" comH comM" >
  380. <span class=" spanW" v-if="printZyFpInfo.charge8 !==0">{{printZyFpInfo.charge8}}</span>
  381. <span v-else class="spanW"></span>
  382. <span class="comSpan"></span>
  383. <span class="spanW" v-if="printZyFpInfo.charge16 !==0">{{printZyFpInfo.charge16}}</span>
  384. <span v-else class="spanW"></span>
  385. <span class="comSpan"></span>
  386. <span class="spanW" v-if="printZyFpInfo.charge24 !==0">{{printZyFpInfo.charge24}}</span>
  387. <span v-else class="spanW"></span>
  388. <span class="comSpan" ></span>
  389. <span class="spanW" ></span>
  390. <span class="comSpan"></span>
  391. <span class="spanW" ></span>
  392. </div>
  393. <div style="margin-left: 100px">
  394. 个人支付合计:{{printZyFpInfo.grZfHjJe}}<br/>
  395. {{printZyFpInfo.grZfHjJeChinese}}
  396. </div>
  397. </div>
  398. </div>
  399. <template #footer>
  400. <div class="dialog-footer">
  401. <el-button @click="zyFpPrintVisible = false">取消</el-button>
  402. </div>
  403. </template>
  404. </el-dialog>
  405. <el-dialog
  406. v-model="dzfpVisible"
  407. width="400"
  408. title="下载电子发票"
  409. @closed="clearSelectDzfp"
  410. >
  411. <template #footer>
  412. <div class="dialog-footer">
  413. <el-button type="success" @click="downDzFp(selectDzfpRow,selectDzfpTypeFlag,'1')">打印电子发票二维码</el-button>
  414. <el-button type="primary" @click="downDzFp(selectDzfpRow,selectDzfpTypeFlag,'0')">下载电子发票pdf文件</el-button>
  415. </div>
  416. </template>
  417. </el-dialog>
  418. </template>
  419. <script setup >
  420. import PatientBaseList from "@/components/zfsf/PatientInfoHead.vue"
  421. import PosTransaction from "@/components/zfsf/PosTransaction.vue"
  422. import {ref} from "vue";
  423. import {queryCurrentNo} from '@/api/zfsf/sfbillno.js'
  424. import {queryCashierProcessInfo,
  425. queryPatientZyLedgerFile,
  426. checkCashierProcess,
  427. queryKyCashierList,
  428. queryZyReceipt,
  429. queryZyDepositFileList,
  430. saveCashierData,
  431. queryZdChequeType,
  432. cancelCashierData,
  433. queryPrintZyFpData,
  434. updatePrintZyFpData,
  435. downDzInvoice,
  436. queryFpVersion
  437. } from '@/api/zfsf/cashier-process.js'
  438. import {getLodop, initLodop} from '@/utils/c-lodop'
  439. import {consume} from '@/api/zfsf/pos-transaction.js'
  440. import {stringIsBlank} from "@/utils/blank-utils";
  441. import { ElMessage, ElMessageBox } from 'element-plus'
  442. import {getDateDiffToDay, getFormatDatetime} from "@/utils/date";
  443. import router from "@/router";
  444. import {queryHospitalName} from "@/api/zy-gl/zy-daily.js";
  445. import {queryLastWindowsIpAddress} from "@/api/zy-gl/admission-registration.js";
  446. const hospitalName = ref('')
  447. const zyFpPrintVisible = ref(false)
  448. const saveFlag = ref(false)
  449. const qxFlag =ref(true)
  450. const activeName = ref('one')
  451. const patientInfo = ref({
  452. inpatientNo : "",
  453. admissTimes : null,
  454. ledgerSn : null,
  455. name : '',
  456. wardName : ''
  457. }
  458. )
  459. const printCode = ref(-1)
  460. const dzfpVisible = ref(false)
  461. const setShowFlag = ref(false)
  462. const patientBaseListRef = ref(null)
  463. const posTransactionRef = ref(null)
  464. // 支付方式字典集合
  465. const zdChequeTypes = ref([])
  466. // 结算数据
  467. const settData = ref({
  468. settleTypeName:'',
  469. zfJe:0,
  470. settle:0,
  471. settleName:'',
  472. zhje:0,
  473. ssJe:0,
  474. currentNoStr:'',
  475. })
  476. const openPos = ()=>{
  477. posTransactionRef.value.openOuter()
  478. }
  479. const chongZhiData = ()=>{
  480. clearData(true)
  481. qxFlag.value = false
  482. patientBaseListRef.value.clearAllData()
  483. }
  484. //保存出纳操作
  485. const saveCashData = ()=>{
  486. ElMessageBox.confirm('请确认是否要保存?', '提示', {
  487. type: 'warning',
  488. confirmButtonText: '是',
  489. cancelButtonText: '否',
  490. }).then(()=>{
  491. let param = {
  492. inpatientNo : patientInfo.value.inpatientNo,
  493. admissTimes : patientInfo.value.admissTimes,
  494. ledgerSn : patientInfo.value.ledgerSn,
  495. opId : userIdCode.value,
  496. depositFileList :[]
  497. }
  498. if(jzInfoList.value.length > 0){
  499. let ob = {
  500. status : '4',
  501. windowNo : '2',
  502. depoAmount : jzInfoList.value[jzInfoList.value.length-1].ybJzJe,
  503. depoType : '2',
  504. chequeNo : '',
  505. psordnum : '',
  506. agtordnum : '',
  507. transDate : '',
  508. parChannel : '',
  509. traceNo : '',
  510. receiptNo : '',
  511. }
  512. param.depositFileList.push(ob);
  513. }
  514. for (let i = 0; i < jkInfoList.value.length; i++) {
  515. let obj = {
  516. status : jkInfoList.value[i].settType === '退款' ? '2' : '4',
  517. windowNo : '2',
  518. depoAmount : jkInfoList.value[i].depoAmount,
  519. depoType : jkInfoList.value[i].depoType,
  520. chequeNo : jkInfoList.value[i].chequeNo,
  521. psordnum : '',
  522. agtordnum : '',
  523. transDate : '',
  524. parChannel : '',
  525. traceNo : '',
  526. receiptNo : '',
  527. }
  528. param.depositFileList.push(obj)
  529. }
  530. saveCashierData(param).then(res=> {
  531. chongZhiData()
  532. })
  533. })
  534. }
  535. // 取消出纳
  536. const cancelCash = ()=>{
  537. ElMessageBox.confirm('请确认是否要取消出纳?', '提示', {
  538. type: 'warning',
  539. confirmButtonText: '是',
  540. cancelButtonText: '否',
  541. }).then(()=>{
  542. cancelCashierData(patientInfo.value).then(res=>{
  543. chongZhiData()
  544. })
  545. })
  546. }
  547. const getYeay = (val)=>{
  548. return val.substring(0,4)
  549. }
  550. const getMoth = (val)=>{
  551. return val.substring(5,7)
  552. }
  553. const getDay = (val)=>{
  554. return val.substring(8,10)
  555. }
  556. // 刷卡 支付
  557. const shuaKa = (row,index)=>{
  558. let obj = {
  559. chequeType : row.depoType,
  560. amt : row.depoAmount,
  561. type : 1
  562. }
  563. consume(obj).then(res=>{
  564. jkInfoList.value[index].psordnum = res.refNo
  565. jkInfoList.value[index].agtordnum = res.wxAliPayOrderNo
  566. jkInfoList.value[index].transDate = res.transDate
  567. jkInfoList.value[index].parChannel = res.payChannel
  568. jkInfoList.value[index].traceNo = res.traceNo
  569. jkInfoList.value[index].receiptNo = res.lsOrderNo
  570. })
  571. }
  572. const selectPatient =(val)=>{
  573. if(fpVersion.value ==='0'){
  574. queryCurrentNo({cashId:userIdCode.value}).then(res=>{
  575. settData.value.currentNoStr = res.currentNoStr
  576. })
  577. }
  578. // 查询账页信息
  579. queryPatientZyLedgerFile(val).then(res=>{
  580. zyInfoList.value = res
  581. if( res.length > 0){
  582. let index = getSettInfoIndex(res)
  583. if(index === -1){
  584. dealSettData(res[res.length-1].inpatientNo,res[res.length-1].admissTimes,res[res.length-1].ledgerSn)
  585. }else {
  586. dealSettData(res[index].inpatientNo,res[index].admissTimes,res[index].ledgerSn)
  587. }
  588. }else {
  589. ElMessage.error('没有结算账页信息!')
  590. }
  591. })
  592. }
  593. // 检查是否有结算信息 未出纳的 下标
  594. const getSettInfoIndex = (val)=>{
  595. for (let i = 0; i < val.length; i++) {
  596. if(!stringIsBlank(val[i].accountDate) && stringIsBlank(val[i].cashDate)){
  597. return i
  598. }
  599. }
  600. return -1;
  601. }
  602. const fetchZyData = (row)=>{
  603. dealSettData(row.inpatientNo,row.admissTimes,row.ledgerSn)
  604. }
  605. // 选择出纳病人
  606. const fetchCnPatient = (row)=>{
  607. ElMessageBox.confirm('是否要进行出纳操作?', '提示', {
  608. type: 'warning',
  609. confirmButtonText: '是',
  610. cancelButtonText: '否',
  611. }).then(()=>{
  612. patientBaseListRef.value.fetchPatientData({inpatientNo:row.inpatientNo,admissTimes:row.admissTimes,inOutStatusFlag:row.actFlag})
  613. })
  614. }
  615. const dealSettData = (inpatientNo,admissTimes,ledgerSn)=>{
  616. let param = {
  617. inpatientNo : inpatientNo,
  618. admissTimes : admissTimes,
  619. ledgerSn : ledgerSn
  620. }
  621. checkCashierProcess(param).then(res =>{
  622. if(res.mzByJz != null){
  623. ElMessageBox.confirm(`该病人存在门诊欠款${res.mzByJz}是否继续出纳`, {
  624. distinguishCancelAndClose: true,
  625. cancelButtonText: '否',
  626. confirmButtonText: '是',
  627. }).then(() => {
  628. getCashierProcessInfo(param,res.zyLedgerFile,res)
  629. })
  630. .catch(action=>{
  631. if(action === 'cancel'){
  632. clearData(true)
  633. }
  634. })
  635. }else {
  636. getCashierProcessInfo(param,res.zyLedgerFile,res)
  637. }
  638. })
  639. }
  640. const getCashierProcessInfo = (param,zyLedgerFile,checkParam)=>{
  641. if(zyLedgerFile && stringIsBlank(zyLedgerFile.accountDate)){
  642. setShowFlag.value = false
  643. clearData(false)
  644. qxFlag.value = true
  645. ElMessage.error('不存在病人已结算待出纳信息!')
  646. patientBaseListRef.value.showCashName('未结算')
  647. }else {
  648. qxFlag.value = true
  649. patientBaseListRef.value.showCashName('已结算')
  650. }
  651. if(zyLedgerFile && !stringIsBlank(zyLedgerFile.cashDate)){
  652. let tempCashDate = zyLedgerFile.cashDate.substring(0,10) +' 00:00:00'
  653. let days = getDateDiffToDay(tempCashDate,new Date())
  654. if(days === 0){
  655. qxFlag.value = false
  656. }else {
  657. qxFlag.value = true
  658. }
  659. setShowFlag.value = false
  660. clearData(false)
  661. patientBaseListRef.value.showCashName('已出纳')
  662. ElMessage.error(`该病人已经在${zyLedgerFile.cashDate}做过出纳处理`)
  663. }
  664. if(checkParam.zYTotalFee != null){
  665. setShowFlag.value = false
  666. clearData(true)
  667. ElMessage.error(`该病人账页总费用${checkParam.zYTotalFee}和明细总费用${checkParam.mxTotalFee}不一致请重新结算再做出纳处理`)
  668. return
  669. }
  670. patientInfo.value.inpatientNo = param.inpatientNo
  671. patientInfo.value.admissTimes = param.admissTimes
  672. patientInfo.value.ledgerSn = param.ledgerSn
  673. queryFpAndYjj(param)
  674. if(!stringIsBlank(zyLedgerFile.accountDate) && stringIsBlank(zyLedgerFile.cashDate)){
  675. queryCashierProcessInfo(param).then(res=>{
  676. setSettData(res.settData)
  677. setJkInfoList(res.settData)
  678. setJzInfo(res.settData.ybJzJe)
  679. setShowFlag.value = true
  680. })
  681. }
  682. }
  683. const fpVersion = ref('0')
  684. const userIdCode = ref('')
  685. onMounted(()=>{
  686. initLodop()
  687. queryFpVersion().then((res)=>{
  688. fpVersion.value =res
  689. })
  690. queryHospitalName().then(res=>hospitalName.value = res)
  691. try {
  692. let patInfo = JSON.parse(window.atob(router.currentRoute.value.params.patientInfo))
  693. userIdCode.value = patInfo.userIdCode
  694. }catch (e){
  695. }
  696. queryZdChequeType().then(res=>{
  697. zdChequeTypes.value = res
  698. })
  699. queryLastWindowsIpAddress().then(res=>{
  700. printCode.value = res.zyPrintIndex
  701. })
  702. })
  703. // 查询发票和预交金
  704. const queryFpAndYjj = (param)=>{
  705. queryZyReceipt(param).then(res=>{
  706. zyFpInfoList.value = res
  707. })
  708. queryZyDepositFileList(param).then(res=>{
  709. yjYjList.value = res.yjYj
  710. yjHz.value.sjYj = res.sjYj
  711. yjHz.value.yjZs = res.yjZs
  712. yjHz.value.ztHj = res.ztHj
  713. yjHz.value.yjHj = res.yjHj
  714. patientInfo.value.name = res.patInfo.name
  715. patientInfo.value.wardName = res.patInfo.wardName
  716. })
  717. }
  718. const clearData = (zyFlag)=>{
  719. if(zyFlag){
  720. zyInfoList.value = []
  721. }
  722. jkHj.value.zj = 0
  723. jkHj.value.tkZj = 0
  724. jkHj.value.jnZj = 0
  725. jzInfoList.value = []
  726. jkInfoList.value = []
  727. zyFpInfoList.value = []
  728. yjYjList.value = []
  729. settData.value.settleTypeName = ''
  730. settData.value.zfJe = 0
  731. settData.value.settle = 0
  732. settData.value.settleName = ''
  733. settData.value.zhje = 0.00
  734. settData.value.ssJe = 0.00
  735. patientInfo.value.inpatientNo = ''
  736. patientInfo.value.admissTimes = null
  737. patientInfo.value.ledgerSn = null
  738. patientInfo.value.name = ''
  739. patientInfo.value.wardName = ''
  740. yjHz.value.sjYj = 0
  741. yjHz.value.yjHj = 0
  742. yjHz.value.yjZs = 0
  743. yjHz.value.ztHj = 0
  744. }
  745. const setSettData = (val)=>{
  746. settData.value.settleName = val.settleName
  747. settData.value.settleTypeName = val.settleTypeName
  748. settData.value.zhje = 0.00
  749. settData.value.ssJe = 0.00
  750. settData.value.settle = Math.abs(val.settle)
  751. settData.value.zfJe = val.lastBalance
  752. }
  753. const setJzInfo = (ybJzJe)=>{
  754. jzInfoList.value = []
  755. if(ybJzJe && ybJzJe != 0){
  756. jzInfoList.value.push({
  757. ybType : '医保记账',
  758. ybJzJe :ybJzJe
  759. })
  760. jzInfoList.value.push({
  761. ybType : '记账总计',
  762. ybJzJe :ybJzJe
  763. })
  764. }
  765. }
  766. // 新增交款信息
  767. const addJkInfo = ()=>{
  768. let obj = {
  769. settType : '',
  770. depoType : 'A',
  771. depoAmount : 0,
  772. chequeNo : '',
  773. psordnum : '',
  774. agtordnum : '',
  775. transDate : '',
  776. parChannel : '',
  777. traceNo : '',
  778. receiptNo : '',
  779. }
  780. let tkZj= jkInfoList.value.filter(item=>item.settType === '退款').reduce((pre,cur)=>{
  781. return pre + cur.depoAmount ;
  782. },0)
  783. let jnZj= jkInfoList.value.filter(item=>item.settType === '交纳').reduce((pre,cur)=>{
  784. return pre + cur.depoAmount ;
  785. },0)
  786. if(settData.value.settleName === '补交:'){
  787. if((jnZj - tkZj) <= Math.abs(settData.value.settle)){
  788. obj.settType ='交纳'
  789. obj.depoAmount = Math.abs(jnZj - tkZj -Math.abs(settData.value.settle))
  790. }else {
  791. obj.settType ='退款'
  792. obj.depoAmount = Math.abs(jnZj - tkZj -Math.abs(settData.value.settle))
  793. }
  794. }else {
  795. if((tkZj - jnZj) >= Math.abs(settData.value.settle)){
  796. obj.settType ='交纳'
  797. obj.depoAmount = Math.abs(tkZj - jnZj -Math.abs(settData.value.settle))
  798. }else {
  799. obj.settType ='退款'
  800. obj.depoAmount = Math.abs(tkZj - jnZj -Math.abs(settData.value.settle))
  801. }
  802. }
  803. jkInfoList.value.push(obj)
  804. calcJkJe()
  805. }
  806. const delJkInfo = (index)=>{
  807. if(jkInfoList.value.length === 1){
  808. ElMessage.error("交款信息不能为空")
  809. return
  810. }
  811. jkInfoList.value.splice(index, 1)
  812. calcJkJe()
  813. }
  814. const jkHj = ref({
  815. jnZj : 0,
  816. tkZj : 0,
  817. zj : 0
  818. })
  819. const calcJkJe = ()=>{
  820. let tkZj= jkInfoList.value.filter(item=>item.settType === '退款').reduce((pre,cur)=>{
  821. return pre + cur.depoAmount ;
  822. },0)
  823. let jnZj= jkInfoList.value.filter(item=>item.settType === '交纳').reduce((pre,cur)=>{
  824. return pre + cur.depoAmount ;
  825. },0)
  826. jkHj.value.jnZj = parseFloat(Number(jnZj).toFixed(2))
  827. jkHj.value.tkZj = parseFloat(Number(tkZj).toFixed(2))
  828. jkHj.value.zj = parseFloat(Number(Math.abs(jkHj.value.jnZj - jkHj.value.tkZj)).toFixed(2))
  829. }
  830. const setJkInfoList = (val)=>{
  831. jkInfoList.value = []
  832. let obj = {
  833. settType : '',
  834. depoType : 'A',
  835. depoAmount : 0,
  836. chequeNo : '',
  837. psordnum : '',
  838. agtordnum : '',
  839. transDate : '',
  840. parChannel : '',
  841. traceNo : '',
  842. receiptNo : '',
  843. }
  844. obj.settType = val.settle > 0 ? '退款' : '交纳'
  845. obj.depoAmount = Math.abs(val.settle)
  846. jkInfoList.value.push(obj)
  847. calcJkJe()
  848. }
  849. // 记账信息数据
  850. const jzInfoList = ref([])
  851. // 交款信息
  852. const jkInfoList = ref([])
  853. // 账页信息
  854. const zyInfoList = ref([])
  855. // 账页发票信息
  856. const zyFpInfoList = ref([])
  857. // 已交押金
  858. const yjYjList = ref([])
  859. // 预交汇总
  860. const yjHz = ref({
  861. yjZs : 0,
  862. sjYj : 0,
  863. yjHj : 0,
  864. ztHj : 0,
  865. })
  866. // 可出纳数据
  867. const kcnList = ref([])
  868. const tabClick = ()=>{
  869. if(activeName.value ==='two'){
  870. let startDate = getDateTiffDays(1).substring(0,10) + ' 00:00:00'
  871. let endDate = getDateTiffDays(1).substring(0,10) + ' 23:59:59'
  872. queryKyCashierList({startDate:startDate,endDate:endDate}).then(res=>{
  873. kcnList.value = res
  874. })
  875. }
  876. }
  877. //打印发票
  878. // const printFp = (row)=>{
  879. //
  880. // let LODOP = getLodop();
  881. // LODOP.PRINT_INIT('预交金')
  882. // LODOP.SET_PRINT_PAGESIZE(2, 0, 0, '')
  883. // LODOP.SET_PRINT_STYLE('FontSize', 9)
  884. // LODOP.ADD_PRINT_TEXT('8mm', '50mm', '220mm', '7mm', patientInfo.value.wardName)
  885. // LODOP.ADD_PRINT_TEXT('14mm', '50mm', '220mm', '7mm', patientInfo.value.name)
  886. // LODOP.ADD_PRINT_TEXT('20mm', '50mm', '220mm', '7mm', '紧急联系人:13908453983')
  887. // LODOP.ADD_PRINT_TEXT('30mm', '50mm', '220mm', '7mm', getYeay(row.depoDate)+'.'+getMoth(row.depoDate)+'.'+getDay(row.depoDate))
  888. // LODOP.ADD_PRINT_TEXT('40mm', '50mm', '220mm', '7mm', row.opIdCodeName)
  889. // LODOP.PREVIEW()
  890. //
  891. // }
  892. const zyFpCss = `
  893. #zyFpId{ width: 640px;}
  894. #headDiv p {
  895. line-height: 10px;
  896. }
  897. .comSpan{
  898. display: inline-block;
  899. width: 60px;
  900. }
  901. .spanW{
  902. display: inline-block;
  903. width: 60px;
  904. }
  905. .comH {
  906. height: 24px;
  907. }
  908. .comM{
  909. margin-left: 90px;
  910. }`
  911. const printZyFp = ()=>{
  912. let param = {
  913. inpatientNo :printZyFpInfo.value.inpatientNo,
  914. admissTimes :printZyFpInfo.value.admissTimes,
  915. ledgerSn :printZyFpInfo.value.ledgerSn,
  916. printFlag :printFlag.value ? '1' : '0',
  917. receiptNo : settData.value.currentNoStr,
  918. opId : userIdCode.value
  919. }
  920. updatePrintZyFpData(param).then(res=>{
  921. let LODOP = getLodop()
  922. LODOP.PRINT_INIT('住院发票') // 初始化打印机 名字
  923. LODOP.SET_PRINT_PAGESIZE(1, '256mm', '156mm', '') // 设置纸张大小
  924. LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true) // 整宽不变形
  925. LODOP.ADD_PRINT_HTM('1mm', '3mm', '100%', '100%', '<style>' + zyFpCss + '</style>' + '<body>' + document.getElementById('zyFpId').innerHTML + '</body>') //要打印的内容
  926. LODOP.PREVIEW() // 关闭
  927. })
  928. }
  929. const printZyFpInfo = ref({})
  930. const selectPrintZyFp = (row)=>{
  931. queryPrintZyFpData(row).then(res=>{
  932. zyFpPrintVisible.value = true
  933. printZyFpInfo.value = res
  934. })
  935. }
  936. const selectDzfpRow = ref({})
  937. const selectDzfpTypeFlag = ref(null)
  938. const openDzfp = (row,typeFlag)=>{
  939. selectDzfpRow.value = row
  940. selectDzfpTypeFlag.value = typeFlag
  941. dzfpVisible.value = true
  942. }
  943. const uploadZyFp=(row,typeFlag)=>{
  944. row['typeFlag'] = typeFlag
  945. let typeFlagStr = typeFlag == 3 ? '上传' : '作废'
  946. ElMessageBox.prompt("备注", "提示", {
  947. type: "warning",
  948. confirmButtonText: "确定"+typeFlagStr,
  949. cancelButtonText: "取消",
  950. })
  951. .then(({value}) => {
  952. row['remark'] = value
  953. queryPrintZyFpData(row).then(res=>{
  954. ElMessage.success(typeFlagStr+"电子发票成功!");
  955. })
  956. })
  957. }
  958. const clearSelectDzfp = ()=>{
  959. selectDzfpRow.value = {}
  960. selectDzfpTypeFlag.value = null
  961. }
  962. const downDzFp = (row,typeFlag,type)=>{
  963. row['typeFlag'] = typeFlag
  964. row['type'] = type
  965. downDzInvoice(row).then(res=>{
  966. let LODOP = getLodop();
  967. if(stringIsBlank(type) || type === '0'){
  968. const link = document.createElement("a");
  969. // 获取数据量
  970. const blob = new Blob([base64ToArrayBuffer(res.fpInfo.pdfFileStr)]);
  971. // 下载文件
  972. const objectUrl = URL.createObjectURL(blob);
  973. link.href = objectUrl;
  974. var timestamp = Date.parse(new Date());
  975. link.download = timestamp + ".pdf";
  976. link.click();
  977. URL.revokeObjectURL(objectUrl);
  978. link.remove();
  979. }else {
  980. //打印二维码
  981. let height = "125mm"
  982. let bkimgWidth = "80mm"
  983. LODOP.PRINT_INITA(6, 0, bkimgWidth, height, "泰和住院电子发票二维码打印");
  984. //设置默认打印机
  985. LODOP.SET_PRINTER_INDEX(printCode.value);
  986. LODOP.SET_SHOW_MODE("BKIMG_WIDTH", bkimgWidth);
  987. LODOP.SET_PRINT_PAGESIZE(3,bkimgWidth, height, "CreateCustomPage");
  988. LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "住院电子发票二维码");//对新建的纸张重命名
  989. LODOP.SET_PRINT_STYLE("FontSize", 11); //字体大小
  990. LODOP.ADD_PRINT_TEXT("1mm", "6mm", "80mm", "3mm", hospitalName.value+"住院电子发票凭证");
  991. LODOP.ADD_PRINT_TEXT("7mm", "3mm", "35mm", "3mm", "姓名:"+res.zyReceipt.name);
  992. LODOP.ADD_PRINT_TEXT("7mm", "37mm", "40mm", "3mm", "住院号:"+res.zyReceipt.inpatientNo);
  993. LODOP.ADD_PRINT_TEXT("13mm", "3mm", "75mm", "3mm", "科别:"+res.zyReceipt.wardName);
  994. LODOP.ADD_PRINT_TEXT("19mm", "3mm", "75mm", "3mm", "-------------------------------------");
  995. LODOP.ADD_PRINT_TEXT("25mm", "3mm", "75mm", "3mm", "住院总费用:"+res.zyReceipt.totalCharge);
  996. LODOP.ADD_PRINT_TEXT("31mm", "3mm", "75mm", "3mm", "预收金额:"+res.zyReceipt.ysHjJe);
  997. LODOP.ADD_PRINT_TEXT("37mm", "3mm", "75mm", "3mm", "退款金额:"+res.zyReceipt.tkHjJe);
  998. LODOP.ADD_PRINT_TEXT("43mm", "3mm", "75mm", "3mm", "补收金额:"+res.zyReceipt.bsHjJe);
  999. LODOP.ADD_PRINT_TEXT("50mm", "3mm", "75mm", "3mm", "--------------------------------------");
  1000. LODOP.ADD_PRINT_TEXT("56mm", "3mm", "80mm", "3mm", hospitalName.value+"住院发票二维码");
  1001. LODOP.ADD_PRINT_IMAGE("62mm", "3mm", "60mm", "60mm", "data:image/png;base64,"+res.fpInfo.qrcode);
  1002. LODOP.PRINT();
  1003. // LODOP.PREVIEW();
  1004. }
  1005. dzfpVisible.value = false
  1006. })
  1007. }
  1008. const base64ToArrayBuffer = (base64) => {
  1009. var bloBString = window.atob(base64);
  1010. var bloBLen = bloBString .length;
  1011. var bytes = new Uint8Array(bloBLen);
  1012. for (var i = 0; i < bloBLen; i++) {
  1013. var ascii = bloBString .charCodeAt(i);
  1014. bytes[i] = ascii;
  1015. }
  1016. return bytes;
  1017. };
  1018. const printFlag = ref(true)
  1019. const getZySettType= (row)=>{
  1020. if(stringIsBlank(row.accountDate)){
  1021. return '未结算'
  1022. }else {
  1023. if(stringIsBlank(row.cashDate)){
  1024. return '未出纳'
  1025. }else {
  1026. return '已出纳'
  1027. }
  1028. }
  1029. }
  1030. </script>
  1031. <style scoped>
  1032. .border_solid{
  1033. border: 1px #808080 solid
  1034. }
  1035. .f-size{
  1036. font-size: 18px;
  1037. }
  1038. .comSpan{
  1039. display: inline-block;
  1040. width: 60px;
  1041. }
  1042. .spanW{
  1043. display: inline-block;
  1044. width: 60px;
  1045. }
  1046. .comH {
  1047. height: 24px;
  1048. }
  1049. .comM{
  1050. margin-left: 90px;
  1051. }
  1052. #zyFpId p {
  1053. line-height: 10px;
  1054. }
  1055. </style>