XiangMuLuRu.vue 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <el-container>
  3. <el-header height="50px">
  4. <el-tag effect="dark" size="small">患者姓名: {{ patient.name }}</el-tag>
  5. <el-tag effect="dark" size="small">住院号: {{ patient.inpatientNo }}</el-tag>
  6. <el-tag effect="dark" size="small">床号: {{ patient.bedNo }}</el-tag>
  7. <el-tag effect="dark" size="small">住院次数: {{ patient.admissTimes }}</el-tag>
  8. <el-tag effect="dark" size="small">性别: {{ cptSex(patient.sex) }}</el-tag>
  9. 住院号:
  10. <el-input v-model="inpatientNo" clearable placeholder="住院号" style="width: 100px"></el-input>
  11. <el-button icon="Search" type="primary" @click="chaXunHuanZheXinXi">查询患者信息</el-button>
  12. <el-button icon="Close" style="margin-left: 20px" type="danger" @click="guanBiDialog">关闭</el-button>
  13. <el-button style="margin-left: 20px" type="warning" @click="chaoZuoZhiNan = true">操作指南</el-button>
  14. </el-header>
  15. <el-container>
  16. <el-main>
  17. <el-dialog v-model="chaoZuoZhiNan" title="操作指南">
  18. <el-collapse v-model="activeName" accordion>
  19. <el-collapse-item name="1" title="一、搜索">
  20. <div>1、搜索费用:项目名称一栏,可以根据编码、名称 、拼音首字母缩写查找(推荐使用编码查询这样会快一些,可选)
  21. </div>
  22. <div>2、录入日期:项目的录入时间范围(可选), 日期排序-降序从大到小排序,升序-从小到大排序</div>
  23. <div>3、费用类型:你需要查找的费用是,项目还是药品(请不要选择项目后一直搜索药品,这样是找不到的 ヽ(ー_ー)ノ)</div>
  24. <div>4、录入类型:该费用是怎么产生,护士录入,医嘱,医技</div>
  25. <div>
  26. 5、费用状态:未退-代表该费用没有被退,已退-代表费用是退费数据,被退-代表那些正的被退了
  27. <span
  28. style="color: red">(该条件只对在本系统中有效,如果无效请点击退费匹配 (退费匹配就在本页面的关闭旁边),或选择全部)</span><br/>
  29. </div>
  30. <div>6、点击查询即可查询费用(如提示没有数据,请检查搜索的条件)</div>
  31. </el-collapse-item>
  32. <el-collapse-item name="2" title=" 二、退费"> 1、选中表格中的多选按钮(小框框),然后点击退费即可,请仔细检查
  33. </el-collapse-item>
  34. <el-collapse-item name="3" title=" 三、撤销退费">
  35. <div>
  36. 1、如果退费退错了,可以点击费用后面的撤销按钮,前提是该费用没有被上传到医保,如果已经上传了且你一定要把这一条费用完全删除,那请先要医保科撤销上传。
  37. </div>
  38. <div>2、如果需要撤销退费的权限,请向信息科,提供工号,该权限只能提供给护士长。</div>
  39. </el-collapse-item>
  40. <el-collapse-item name="4" title=" 四、录入模板">
  41. <div>
  42. 1、模板:进入系统会查询出您所在科室的模板(如果没有看见模板,请在个人中心中查看你的科室,如果不对请人资进行调整)
  43. </div>
  44. <div>
  45. 2、取模板:点击模板的名字后,出现一个小表格,然后点击小表格中的多选按钮,你所选择的费用会显示在录入信息的表格中(无法重复添加)
  46. </div>
  47. <div>3、存模板:请在录入信息中添加你需要存的费用信息,然后点击存模板,会弹出一个对话框,输入名称,点击保存即可
  48. </div>
  49. <div>4、修改:取一个一模一样名称的模板,即可修改,前提是这个模板是你创建的。</div>
  50. <div>5、删除:点击模板名称后面的删除。</div>
  51. </el-collapse-item>
  52. <el-collapse-item name="5" title="五、录入费用">
  53. <div>1、请选择需要录入的费用(如果模板中没有,请点击新增,然后进行搜索,可根据 名称、编码、首字母缩写
  54. 搜索,然后在下拉框中点击对应的费用)
  55. </div>
  56. <div>2、确认这些费用后点击保存即可</div>
  57. <div>
  58. 3、修改执行科室,如果有费用需要录入到,别的科室可以点击表格中的执行科室修改,也可以一键修改,就在新增右边,在下拉框(这个可以根据中文来搜索)
  59. 选择对应的科室后点击修改执行科室。
  60. </div>
  61. </el-collapse-item>
  62. </el-collapse>
  63. </el-dialog>
  64. <el-tabs v-model="xmlrTabs">
  65. <el-tab-pane label="已录入项目" name="ylrxm">
  66. 项目名称:
  67. <xc-combo-grid v-model="patient"
  68. clearable
  69. style="width: 220px"
  70. code="chargeCode"
  71. name="chargeName"
  72. :query-data-func="getChargeCode">
  73. <el-table-column label="规格" prop="specification" width="250" show-overflow-tooltip/>
  74. <el-table-column label="厂家" prop="manufactor" width="250" show-overflow-tooltip/>
  75. </xc-combo-grid>
  76. 医嘱号:
  77. <el-input v-model="patient.actOrderNo" clearable placeholder="医嘱号" style="width: 120px"/>
  78. 录入日期:
  79. <el-date-picker
  80. v-model="dateRange"
  81. :shortcuts="shortcuts"
  82. end-placeholder="结束日期"
  83. placeholder="选择日期"
  84. range-separator="至"
  85. start-placeholder="开始日期"
  86. style="width: 280px"
  87. type="daterange"
  88. ></el-date-picker>
  89. <el-button :icon="riQiPaiXu === 'DESC' ? 'CaretBottom' : 'CaretTop'" type="success"
  90. @click="riQiPaiXu === 'DESC' ? (riQiPaiXu = 'ASC') : (riQiPaiXu = 'DESC')"
  91. >{{ riQiPaiXu === 'DESC' ? '日期降序' : '日期升序' }}
  92. </el-button>
  93. <el-select v-model="feiYongLeiXingCode" style="width: 70px" @change="queryFeiYong">
  94. <el-option v-for="item in feiYongLeiXing" :key="item.code" :label="item.name" :value="item.code">
  95. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  96. <el-divider direction="vertical"></el-divider>
  97. <span>{{ item.name }}</span>
  98. </el-option>
  99. </el-select>
  100. <el-select v-model="patient.orderNo" style="width: 70px">
  101. <el-option v-for="item in yiZhuTuiFeiLeiXing" :key="item.code" :label="item.name" :value="item.code">
  102. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  103. <el-divider direction="vertical"></el-divider>
  104. <span>{{ item.name }}</span>
  105. </el-option>
  106. </el-select>
  107. <el-select v-model="patient.tuiFeiFlag" style="width: 70px">
  108. <el-option v-for="item in tuiFeiLeiXin" :key="item.code" :label="item.name" :value="item.code">
  109. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  110. <el-divider direction="vertical"></el-divider>
  111. <span>{{ item.name }}</span>
  112. </el-option>
  113. </el-select>
  114. <el-button icon="Search" type="primary" @click="queryFeiYong">查询</el-button>
  115. <el-button icon="Delete" type="danger" @click="xiangMuTuiFeiClick">退费</el-button>
  116. <!-- 退费的费用详细 -->
  117. <refund-for-project-entry
  118. @refreshFee="queryFeiYong"
  119. :is-drug="feiYongLeiXingCode === 1"
  120. v-if="refundConfirmation.dialog"
  121. @uncheck="refundUncheck"
  122. :patient="patient"
  123. v-model="refundConfirmation.dialog"
  124. :list="refundConfirmation.data"/>
  125. <el-button v-if="store.state.user.info.roles.findIndex((i) => i === 1 || i === 8) > -1" type="warning"
  126. @click="sheZhiWeiYiVBao">设为医保
  127. </el-button>
  128. <el-table :data="cptTableDataHuanZheFeiYong"
  129. :height="tableHeight"
  130. class="eltable"
  131. highlight-current-row
  132. row-key="rowId"
  133. ref="elTableRef"
  134. stripe @selection-change="handleSelectionChange">
  135. <el-table-column style="width: 100px" type="selection" :reserve-selection="true"></el-table-column>
  136. <el-table-column label="流水号" prop="detailSn" width="70px"></el-table-column>
  137. <el-table-column label="医嘱号" prop="orderNo" width="70px"></el-table-column>
  138. <el-table-column label="录入日期" prop="chargeDate" width="70px"></el-table-column>
  139. <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
  140. <el-table-column label="项目名称" prop="chargeName"></el-table-column>
  141. <el-table-column label="规格" v-if="feiYongLeiXingCode !== 1" prop="specification"></el-table-column>
  142. <el-table-column v-if="feiYongLeiXingCode === 1" label="药品名称" prop="drugname"></el-table-column>
  143. <el-table-column label="执行科室" prop="execDept"></el-table-column>
  144. <el-table-column label="申请科室" prop="deptCode"></el-table-column>
  145. <el-table-column label="金额" prop="chargeFee"></el-table-column>
  146. <el-table-column label="数量" prop="chargeAmount"></el-table-column>
  147. <el-table-column label="状态" prop="chargeStatus">
  148. <template #default="scope">
  149. {{ costState(scope.row.chargeStatus) }}
  150. </template>
  151. </el-table-column>
  152. <el-table-column label="录入人" prop="opName"></el-table-column>
  153. <el-table-column label="账单码" prop="billItemName"></el-table-column>
  154. <el-table-column label="是否退费" prop="tuiFeiFlag">
  155. <template #default="scope">
  156. <span v-html="conversionRefundFlag(scope.row.oriDetailSn)" style="color:red;"></span>
  157. <br>
  158. <span v-if="scope.row.oriDetailSn > 0">
  159. <span style="color: #e6a23c">退费数据</span> <br/>
  160. <span style="color: teal">
  161. 原流水号为 <br/>
  162. 【 {{ scope.row.oriDetailSn }} 】
  163. </span>
  164. </span>
  165. </template>
  166. </el-table-column>
  167. </el-table>
  168. <el-pagination
  169. :current-page="patient.currentPage"
  170. :page-size="patient.pageSize"
  171. :page-sizes="[20, 30, 40, 50]"
  172. :total="total"
  173. layout="total, sizes, prev, pager, next, jumper"
  174. style="margin-top: 5px"
  175. @size-change="handleSizeChange"
  176. @current-change="handleCurrentChange"
  177. ></el-pagination>
  178. </el-tab-pane>
  179. <!-- 项目录入 -->
  180. <el-tab-pane v-if="panDuanSFTongGuoBingShiJinRu" label="项目录入" name="xmlr">
  181. <el-row>
  182. <el-col :span="3">
  183. <HuoQuMuBan @selectionFeiYong="xuanZeXiangMuTable"></HuoQuMuBan>
  184. </el-col>
  185. <el-col :offset="1" :span="20">
  186. <el-row>
  187. <el-col :span="24" style="margin-top: 10px">
  188. <el-button icon="StarOff" type="warning" @click="baoCunMuBanDialog = true">存模板</el-button>
  189. <el-button icon="Upload" type="primary" @click="shangChuanXiangMu">保存</el-button>
  190. <el-button icon="Plus" type="success" @click="xinZhengXiangMuDialog = true">新增</el-button>
  191. <el-select v-model="zhiXingKeShi" filterable style="width: 180px; margin: 0px 10px 0px 10px">
  192. <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
  193. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  194. <el-divider direction="vertical"></el-divider>
  195. <span>{{ item.name }}</span></el-option
  196. >
  197. </el-select>
  198. <el-button icon="Edit" type="warning" @click="xieGaiZhiXingKeShi">修改执行科室</el-button>
  199. </el-col>
  200. <el-col :span="24">
  201. <!-- 这个下面查看录入的项目 -->
  202. <el-table :data="muBanNeiRongData" :height="tableHeight - 27" class="eltable" highlight-current-row
  203. stripe style="margin-top: 10px">
  204. <el-table-column label="录入信息">
  205. <el-table-column label="录入时间">
  206. <template #default>
  207. {{ getDatetime(new Date()) }}
  208. </template>
  209. </el-table-column>
  210. <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
  211. <el-table-column label="名称" prop="chargeName"></el-table-column>
  212. <el-table-column label="执行科室" prop="deptCode">
  213. <template #default="scope">
  214. <el-select v-model="scope.row.deptCode" filterable style="width: 90%">
  215. <el-option v-for="item in deptData" :key="item.code" :label="item.name"
  216. :value="item.code">
  217. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  218. <el-divider direction="vertical"></el-divider>
  219. <span>{{ item.name }}</span></el-option
  220. >
  221. </el-select>
  222. </template>
  223. </el-table-column>
  224. <el-table-column label="单价" prop="chargeAmount"></el-table-column>
  225. <el-table-column label="数量" prop="amount" width="130">
  226. <template #default="scope">
  227. <!--precision 限制输入的精度 0 就是不带任何一位小数点 -->
  228. <el-input-number v-model="scope.row.amount" :min="0" :precision="1"
  229. style="width: 120px"></el-input-number>
  230. </template>
  231. </el-table-column>
  232. </el-table-column>
  233. <el-table-column label="金额">
  234. <template #default="scope">
  235. {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
  236. </template>
  237. </el-table-column>
  238. <el-table-column label="账单码" prop="billItemName"></el-table-column>
  239. <el-table-column label="规格" prop="descriptions"></el-table-column>
  240. <el-table-column label="操作">
  241. <template #default="scope">
  242. <el-button type="danger" @click="shanChuXiangMuClick(scope.$index)">删除</el-button>
  243. </template>
  244. </el-table-column>
  245. </el-table>
  246. <el-tag> 项目总价:{{ xiangMuZongJia }}</el-tag>
  247. </el-col>
  248. </el-row>
  249. </el-col>
  250. </el-row>
  251. </el-tab-pane>
  252. </el-tabs>
  253. <el-dialog v-model="xinZhengXiangMuDialog" :width="1500" title="新增项目">
  254. <el-row>
  255. <el-col :span="24">
  256. 搜索:
  257. <el-select v-model="chargePyCode" :remote-method="rmChargePyCode" clearable default-first-option
  258. filterable remote @change="getDanGeXiangMu">
  259. <el-option
  260. v-for="item in xiangMuData.slice((danGeXiangMuCurrentPage - 1) * 20, danGeXiangMuCurrentPage * 20)"
  261. :key="item.chargeCode"
  262. :label="item.chargeName"
  263. :value="item.chargeCode"
  264. >
  265. <span style="color: #ff0000; font-size: 12px">{{ item.chargeCode }}</span>
  266. <el-divider direction="vertical"></el-divider>
  267. <span> {{ item.chargeName }}
  268. <span v-if="item.descriptions">
  269. ({{ item.descriptions }})
  270. </span>
  271. </span>
  272. <el-divider direction="vertical"></el-divider>
  273. <span style="color: red"> {{ item.ybComment }}</span>
  274. <el-divider direction="vertical"></el-divider>
  275. <span style="color: #2eff00"> {{ item.chargeAmount }} 元</span>
  276. <el-divider direction="vertical"></el-divider>
  277. </el-option>
  278. <el-pagination
  279. :current-page="danGeXiangMuCurrentPage"
  280. :page-size="20"
  281. :pager-count="5"
  282. :total="xiangMuData.length"
  283. layout=" prev, pager, next,total"
  284. small
  285. style="margin-top: 5px"
  286. @current-change="danGeXiangMuCurrentChange"
  287. ></el-pagination>
  288. </el-select>
  289. <el-button type="success" @click="danGeXiangMuBaoCun">保存</el-button>
  290. </el-col>
  291. <el-col :span="24">
  292. <el-table :data="danGeLuRuXiangMu" class="eltable">
  293. <el-table-column label="项目代码" prop="chargeCodeMx"></el-table-column>
  294. <el-table-column label="项目名称" prop="chargeName"></el-table-column>
  295. <el-table-column label="单位" prop="spec"></el-table-column>
  296. <el-table-column label="执行科室" prop="deptCode">
  297. <template #default="scope">
  298. <el-select v-model="scope.row.deptCode" filterable style="width: 90%">
  299. <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
  300. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  301. <el-divider direction="vertical"></el-divider>
  302. <span>{{ item.name }}</span></el-option
  303. >
  304. </el-select>
  305. </template>
  306. </el-table-column>
  307. <el-table-column label="国家编码" prop="nationalCode"></el-table-column>
  308. <el-table-column label="国家名称" prop="nationalName"></el-table-column>
  309. <el-table-column label="单价" prop="chargeAmount"></el-table-column>
  310. <el-table-column label="数量" prop="amount">
  311. <template #default="scope">
  312. <el-input-number v-model="scope.row.amount" :min="1" :precision="1"></el-input-number>
  313. </template>
  314. </el-table-column>
  315. <el-table-column label="金额">
  316. <template #default="scope">
  317. {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
  318. </template>
  319. </el-table-column>
  320. <el-table-column label="账单码" prop="billItemName"></el-table-column>
  321. <el-table-column label="规格" show-overflow-tooltip prop="descriptions"></el-table-column>
  322. <el-table-column label="删除">
  323. <template #default="scope">
  324. <el-button @click="danGeLuRuXiangMu.splice(scope.$index, 1)">删除</el-button>
  325. </template>
  326. </el-table-column>
  327. </el-table>
  328. </el-col>
  329. </el-row>
  330. </el-dialog>
  331. <el-dialog v-model="baoCunMuBanDialog" title="保存模板">
  332. <el-row>
  333. <el-col :span="24">
  334. 模板名称:
  335. <el-input v-model="cunMuBanPojo.name" maxlength="15" show-word-limit @blur="zhuanPinYin"></el-input>
  336. </el-col>
  337. <el-col :span="12">
  338. 拼音码:
  339. <el-input v-model="cunMuBanPojo.pyCode" maxlength="8" show-word-limit></el-input>
  340. </el-col>
  341. <el-col :span="12">
  342. 五笔码:
  343. <el-input v-model="cunMuBanPojo.dcode" maxlength="8" show-word-limit></el-input>
  344. </el-col>
  345. <el-col :span="12">
  346. 创建科室:
  347. <el-input v-model="cunMuBanPojo.dept" disabled></el-input>
  348. </el-col>
  349. <el-col :span="12">
  350. <el-button icon="Upload" style="margin-top: 10px" type="primary" @click="baoCunMuBan">保存</el-button>
  351. </el-col>
  352. </el-row>
  353. </el-dialog>
  354. </el-main>
  355. </el-container>
  356. </el-container>
  357. </template>
  358. <script name="xiangMuLuRu" setup>
  359. import store from '@/store'
  360. import {costState, cptSex, conversionRefundFlag} from '@/utils/computed'
  361. import {shortcuts} from '@/data/shortcuts'
  362. import {
  363. getChargeCode,
  364. getHuanZheFeiYong,
  365. getPyCode,
  366. queryDanGeXiangMu,
  367. shangChuanMuBan,
  368. xiangMuFeiYongShangChuan,
  369. xiuGaiZiFeiBiaoZhi,
  370. } from '@/api/inpatient/xiang-mu-lu-ru'
  371. import {ElMessage, ElMessageBox} from 'element-plus'
  372. import {getDateRangeFormatDate, getDatetime} from '@/utils/date'
  373. import {clone} from '@/utils/clone'
  374. import {getPatientInfo} from '@/api/inpatient/patient'
  375. import {feiYongLeiXing, tuiFeiLeiXin, yiZhuTuiFeiLeiXing} from '@/data'
  376. import HuoQuMuBan from '@/components/med-tec-mod/HuoQuMuBan.vue'
  377. import {getDept} from '@/api/public-api'
  378. import {baseinfo} from '@/data/inpatient'
  379. import {listIsBlank} from '@/utils/blank-utils'
  380. import Sleep from "@/utils/sleep";
  381. import RefundForProjectEntry from "@/components/med-tec-mod/RefundForProjectEntry";
  382. import XcComboGrid from "@/components/xiao-chan/combo-grid/XcComboGrid.vue";
  383. const emit = defineEmits(['close-xmlr'])
  384. const windowSize = store.state.app.windowSize
  385. const tableHeight = windowSize.h - 170
  386. const chaoZuoZhiNan = ref(false)
  387. // 默认选中已录入项目
  388. const xmlrTabs = ref('ylrxm')
  389. const inpatientNo = ref('')
  390. const zhiXingKeShi = ref('')
  391. const dateRange = ref([])
  392. // DESC 降 ASC 升
  393. const riQiPaiXu = ref('DESC')
  394. const activeName = ref('1')
  395. const feiYongLeiXingCode = ref(0)
  396. /**
  397. * 录入费用 表格
  398. */
  399. const tableDataHuanZheFeiYong = ref([])
  400. // 获取全部科室
  401. const deptData = ref([])
  402. // 患者信息
  403. const patient = ref({})
  404. /**
  405. * 判断这个操作员是否可以退费
  406. */
  407. const panDuanSFTongGuoBingShiJinRu = ref(false)
  408. // 弹框 输入住院号
  409. const jinRuPanDuanSFXieDaiHuanZheXinXi = async () => {
  410. await Sleep(300)
  411. ElMessageBox.prompt('请输入患者住院号', '提示', {
  412. confirmButtonText: '确定',
  413. cancelButtonText: '取消',
  414. inputPattern: /\S/,
  415. inputErrorMessage: '患者住院号不能为空 (∩•̀ω•́)⊃-*⋆',
  416. type: 'warning',
  417. })
  418. .then(({value}) => {
  419. inpatientNo.value = value
  420. chaXunHuanZheXinXi()
  421. })
  422. .catch(() => {
  423. guanBiDialog()
  424. })
  425. }
  426. /**
  427. * 这个是 用户没有选择患者 就进来执行的
  428. */
  429. const chaXunHuanZheXinXi = () => {
  430. getPatientInfo(inpatientNo.value)
  431. .then((res) => {
  432. patient.value = res
  433. setDefault()
  434. queryFeiYong()
  435. if (patient.value.ward === store.state.user.info.deptCode) {
  436. panDuanSFTongGuoBingShiJinRu.value = true
  437. } else {
  438. xmlrTabs.value = 'ylrxm'
  439. panDuanSFTongGuoBingShiJinRu.value = false
  440. }
  441. })
  442. .catch(() => {
  443. patient.value = {}
  444. jinRuPanDuanSFXieDaiHuanZheXinXi()
  445. })
  446. }
  447. const total = ref(0)
  448. const elTableRef = ref()
  449. /**
  450. * 查询
  451. */
  452. const queryFeiYong = () => {
  453. elTableRef.value.clearSelection()
  454. let dateR = getDateRangeFormatDate(dateRange.value);
  455. patient.value.startTime = dateR.startTime
  456. patient.value.endTime = dateR.endTime
  457. patient.value.riQiPaiXu = riQiPaiXu.value
  458. patient.value.feiYongLeiXingCode = feiYongLeiXingCode.value
  459. patient.value.currentPage = 1
  460. patient.value.total = 0
  461. getHuanZheFeiYong(patient.value)
  462. .then(async (res) => {
  463. tableDataHuanZheFeiYong.value = []
  464. cptTableDataHuanZheFeiYong.value = []
  465. await Sleep(100)
  466. tableDataHuanZheFeiYong.value = res
  467. cptTableDataHuanZheFeiYong.value = res.records
  468. total.value = res.total
  469. if (patient.value.admissWard === store.state.user.info.deptCode) {
  470. panDuanSFTongGuoBingShiJinRu.value = true
  471. }
  472. })
  473. .catch(() => {
  474. tableDataHuanZheFeiYong.value = []
  475. cptTableDataHuanZheFeiYong.value = []
  476. patient.value.total = 0
  477. })
  478. }
  479. const handleQueryFeiYong = () => {
  480. let dateR = getDateRangeFormatDate(dateRange.value)
  481. patient.value.startTime = dateR.startTime
  482. patient.value.endTime = dateR.endTime
  483. patient.value.riQiPaiXu = riQiPaiXu.value
  484. patient.value.feiYongLeiXingCode = feiYongLeiXingCode.value
  485. patient.value.total = total.value
  486. getHuanZheFeiYong(patient.value)
  487. .then(async (res) => {
  488. tableDataHuanZheFeiYong.value = []
  489. cptTableDataHuanZheFeiYong.value = []
  490. await Sleep(100)
  491. tableDataHuanZheFeiYong.value = res
  492. cptTableDataHuanZheFeiYong.value = res.records
  493. if (patient.value.admissWard === store.state.user.info.deptCode) {
  494. panDuanSFTongGuoBingShiJinRu.value = true
  495. }
  496. })
  497. .catch(() => {
  498. tableDataHuanZheFeiYong.value = []
  499. cptTableDataHuanZheFeiYong.value = []
  500. patient.value.total = 0
  501. })
  502. }
  503. /**
  504. * 分页
  505. */
  506. const handleSizeChange = (val) => {
  507. patient.value.pageSize = val
  508. handleQueryFeiYong()
  509. }
  510. const handleCurrentChange = (val) => {
  511. patient.value.currentPage = val
  512. handleQueryFeiYong()
  513. }
  514. /**
  515. * 获取多选框的值
  516. */
  517. const handleSelectionChange = (val) => {
  518. patient.value.list = val
  519. }
  520. /** */
  521. const cptTableDataHuanZheFeiYong = ref([])
  522. /**
  523. * 项目退费
  524. */
  525. let refundConfirmation = $ref({
  526. dialog: false,
  527. data: []
  528. })
  529. /**
  530. * 退费取消选中
  531. * @param val
  532. */
  533. const refundUncheck = (val) => {
  534. elTableRef.value.toggleRowSelection(val, false)
  535. }
  536. const xiangMuTuiFeiClick = () => {
  537. refundConfirmation.data = elTableRef.value.getSelectionRows()
  538. if (refundConfirmation.data.length === 0) {
  539. ElMessage.error('请先选择退费数据')
  540. } else {
  541. refundConfirmation.dialog = true
  542. }
  543. }
  544. //////////////////////////////////// 以上全部是 已录入项目 //////////////////////////////////////////////////////////////////////////////
  545. /**
  546. * 获取项目模板详情的数据
  547. */
  548. const muBanNeiRongData = ref([])
  549. // 保存 code 不要重复添加
  550. let muBanCode = []
  551. const xuanZeXiangMuTable = (param) => {
  552. let val = param.val
  553. for (let i = 0; i < val.length; i++) {
  554. let code = val[i].chargeCodeMx
  555. if (muBanCode.indexOf(code) === -1) {
  556. muBanCode.push(code)
  557. val[i].deptCode = patient.value.zkWard
  558. muBanNeiRongData.value.push(val[i])
  559. }
  560. }
  561. }
  562. /**
  563. * 删除项目
  564. */
  565. const shanChuXiangMuClick = (index) => {
  566. muBanNeiRongData.value.splice(index, 1)
  567. muBanCode.splice(index, 1)
  568. }
  569. /**
  570. * 获取项目的总价
  571. */
  572. const xiangMuZongJia = computed(() => {
  573. let sum = 0
  574. for (let i = 0; i < muBanNeiRongData.value.length; i++) {
  575. sum += muBanNeiRongData.value[i].chargeAmount * muBanNeiRongData.value[i].amount
  576. }
  577. return sum.toFixed(2)
  578. })
  579. //以下全部是 新增项目 对话框功能
  580. /**
  581. * 新增项目
  582. */
  583. const xinZhengXiangMuDialog = ref(false)
  584. // 项目拼音的code
  585. const chargePyCode = ref('')
  586. // 项目数据
  587. const xiangMuData = ref([])
  588. /**
  589. * 远程搜索
  590. */
  591. const rmChargePyCode = (val) => {
  592. if (val.length >= 2) {
  593. queryDanGeXiangMu(val, 0).then((res) => {
  594. xiangMuData.value = res
  595. })
  596. }
  597. }
  598. const danGeXiangMuCurrentPage = ref(1)
  599. const danGeXiangMuCurrentChange = (val) => {
  600. danGeXiangMuCurrentPage.value = val
  601. }
  602. /**
  603. * 用来获取新增对画框中选择的项目
  604. */
  605. const danGeLuRuXiangMu = ref([])
  606. const getDanGeXiangMu = () => {
  607. xiangMuData.value.filter((item) => {
  608. if (item.chargeCode === chargePyCode.value) {
  609. item.deptCode = patient.value.zkWard
  610. danGeLuRuXiangMu.value.push(item)
  611. }
  612. })
  613. }
  614. /**
  615. * 单个项目保存
  616. */
  617. const danGeXiangMuBaoCun = () => {
  618. if (danGeLuRuXiangMu.value.length === 0) {
  619. ElMessage.error('请选择需要添加的项目')
  620. return
  621. }
  622. for (let i = 0; i < muBanNeiRongData.value.length; i++) {
  623. if (muBanNeiRongData.value[i].chargeCodeMx === danGeLuRuXiangMu.value[0].chargeCodeMx) {
  624. ElMessage.error({
  625. message: '已存在相同项目请勿重复添加',
  626. showClose: true,
  627. })
  628. return
  629. }
  630. }
  631. muBanCode.push(clone(danGeLuRuXiangMu.value[0].chargeCodeMx))
  632. muBanNeiRongData.value.push(clone(danGeLuRuXiangMu.value[0]))
  633. danGeLuRuXiangMu.value = []
  634. chargePyCode.value = ''
  635. }
  636. //以上全部是 新增项目 对话框功能
  637. // 下面就是上传 项目
  638. const shangChuanXiangMu = () => {
  639. if (muBanNeiRongData.value.length === 0) {
  640. ElMessage.error({
  641. message: '请先选择需要上传的费用',
  642. showClose: true,
  643. })
  644. return
  645. }
  646. for (let i = 0; i < muBanNeiRongData.value.length; i++) {
  647. if (muBanNeiRongData.value[i].deptCode === '') {
  648. ElMessage.error({
  649. message: '【' + muBanNeiRongData.value[i].chargeName + '】的执行科室为空',
  650. showClose: true,
  651. })
  652. return
  653. }
  654. }
  655. let shangChuanFeiYong = {
  656. inpatientNo: patient.value.inpatientNo,
  657. admissTimes: patient.value.admissTimes,
  658. ledgerSn: patient.value.ledgerSn,
  659. dept: patient.value.admissDept,
  660. zySerialNo: patient.value.zySerialNo,
  661. ward: patient.value.zkWard,
  662. referPhysician: patient.value.referPhysician,
  663. list: muBanNeiRongData.value,
  664. orderNo: 0,
  665. }
  666. // 在此处上传
  667. ElMessageBox.confirm('共上传【' + muBanNeiRongData.value.length + '】条', '请认真核对', {
  668. cancelButtonText: '取消',
  669. confirmButtonText: '确定',
  670. })
  671. .then(() => {
  672. xiangMuFeiYongShangChuan(shangChuanFeiYong).then(() => {
  673. muBanNeiRongData.value = []
  674. muBanCode = []
  675. })
  676. })
  677. .catch(() => {
  678. })
  679. }
  680. // 上面就是上传 项目
  681. // 下面就是保存的模板信息
  682. const cunMuBanPojo = ref({
  683. pyCode: '',
  684. dcode: '',
  685. name: '',
  686. paiXu: '',
  687. dept: '',
  688. deptCode: store.state.user.info.deptCode,
  689. list: [],
  690. })
  691. const baoCunMuBanDialog = ref(false)
  692. const baoCunMuBan = () => {
  693. if (muBanNeiRongData.value.length === 0) {
  694. ElMessage.error({
  695. message: '请先选择项目',
  696. showClose: true,
  697. })
  698. return
  699. }
  700. if (cunMuBanPojo.value.name === '' || cunMuBanPojo.value.pyCode === '' || cunMuBanPojo.value.dcode === '') {
  701. ElMessage.error({
  702. message: '模板名称,拼音码,五笔码不能为空',
  703. showClose: true,
  704. })
  705. return
  706. }
  707. cunMuBanPojo.value.list = clone(muBanNeiRongData.value)
  708. // 开始上传
  709. shangChuanMuBan(cunMuBanPojo.value).then(() => {
  710. cunMuBanPojo.value = {}
  711. })
  712. }
  713. // 获取到保存模板的拼音码和五笔码
  714. const zhuanPinYin = () => {
  715. getPyCode(cunMuBanPojo.value.name).then((res) => {
  716. cunMuBanPojo.value.pyCode = res.pyCode
  717. cunMuBanPojo.value.dcode = res.wbCode
  718. })
  719. }
  720. // 上面就是保存的模板信息
  721. /** 关闭 对话框 */
  722. const guanBiDialog = () => {
  723. emit('close-xmlr')
  724. }
  725. /**
  726. * 设置患者默认值
  727. */
  728. const setDefault = () => {
  729. patient.value.currentPage = 1
  730. patient.value.pageSize = 40
  731. patient.value.total = 0
  732. patient.value.tuiFeiFlag = 3
  733. patient.value.orderNo = 2
  734. patient.value.deptCode = store.state.user.info.deptCode
  735. zhiXingKeShi.value = patient.value.zkWard
  736. }
  737. onMounted(async () => {
  738. if (!baseinfo().inpatientNo) {
  739. await jinRuPanDuanSFXieDaiHuanZheXinXi()
  740. } else {
  741. patient.value = clone(baseinfo())
  742. panDuanSFTongGuoBingShiJinRu.value = true
  743. await nextTick()
  744. setDefault()
  745. queryFeiYong()
  746. }
  747. getDept().then((res) => {
  748. deptData.value = res
  749. })
  750. })
  751. const xieGaiZhiXingKeShi = () => {
  752. for (let i = 0; i < muBanNeiRongData.value.length; i++) {
  753. muBanNeiRongData.value[i].deptCode = zhiXingKeShi.value
  754. }
  755. }
  756. const sheZhiWeiYiVBao = () => {
  757. if (listIsBlank(patient.value.list)) {
  758. ElMessage.error('请先选择需要修改的数据')
  759. return
  760. }
  761. ElMessageBox.confirm('请仔细检查.', '提示', {
  762. confirmButtonText: '确认',
  763. cancelButtonText: '取消',
  764. type: 'warning',
  765. })
  766. .then(() => {
  767. xiuGaiZiFeiBiaoZhi(patient.value)
  768. })
  769. .catch(() => {
  770. })
  771. }
  772. </script>
  773. <style></style>