XiangMuLuRu.vue 32 KB

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