MenZhenXiangMu.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. <template>
  2. <div class="layout_container">
  3. <header>
  4. <div>
  5. <el-date-picker
  6. v-model="dateRange"
  7. :shortcuts="shortcuts"
  8. end-placeholder="结束日期"
  9. placeholder="选择日期"
  10. range-separator="至"
  11. start-placeholder="开始日期"
  12. style="width: 280px"
  13. type="daterange"
  14. ></el-date-picker>
  15. 患者ID:
  16. <el-input v-model="patientId" clearable style="width: 120px" @blur="patientId = $event.target.value.trim()"
  17. @keyup.enter="getMzPatientClick"></el-input>
  18. <el-select v-model="xiangMuZhuangTai" style="width: 90px">
  19. <el-option v-for="item in xiangMuZhuangTaiData" :key="item.code" :label="item.name" :value="item.code">
  20. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  21. <el-divider direction="vertical"></el-divider>
  22. <span :style="{ color: item.color }">{{ item.name }}</span>
  23. </el-option>
  24. </el-select>
  25. <el-button icon="Search" type="primary" @click="getMzPatientClick"> 查询</el-button>
  26. <el-button icon="Search" type="primary" @click="kuaiSuChaZhaoClick"> 快速查找</el-button>
  27. <el-button icon="Search" type="warning" @click="chaoZuoZhiNanDialog = true"> 操作指南</el-button>
  28. <el-button icon="Upload" type="success" @click="baoCunClick"> 保存</el-button>
  29. </div>
  30. <div>
  31. <el-tag effect="dark" size="large">患者姓名: {{ patient.name }}</el-tag>
  32. <el-tag effect="dark" size="large" type="warning">性别:{{ cptSex(patient.sex) }}</el-tag>
  33. <el-tag effect="dark" size="large">出生日期: {{ patient.birthDay }}</el-tag>
  34. <el-tag effect="dark" size="large" type="warning">诊疗卡: {{ patient.icCardNo }}</el-tag>
  35. </div>
  36. </header>
  37. <div class="layout_main layout_container layout-horizontal">
  38. <aside class="layout_el-table" style="width: 220px">
  39. <el-table :data="shouFeiData" highlight-current-row stripe
  40. @cell-click="getFeiYongXinXiClick">
  41. <el-table-column label="收费信息">
  42. <el-table-column label="缴费日期" prop="chargeDate" width="80"></el-table-column>
  43. <el-table-column label="流水号">
  44. <template #default="scope">
  45. <el-popover :width="800" placement="right" trigger="click">
  46. <template #reference>
  47. <el-button type="success" @click="getFeiYongXinXiClick(scope.row)">{{
  48. scope.row.realNo
  49. }}
  50. </el-button>
  51. </template>
  52. <el-table :data="feiYongData" height="calc(100vh - 50%)" highlight-current-row stripe>
  53. <el-table-column label="缴费明细信息">
  54. <el-table-column label="待确认标志" prop="confirmFlag">
  55. <template #default="scope">
  56. <span v-html="confirmFlag(scope.row.confirmFlag)"></span>
  57. </template>
  58. </el-table-column>
  59. <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
  60. <el-table-column label="项目" prop="chargeName"></el-table-column>
  61. <el-table-column label="金额" prop="chargeFee"></el-table-column>
  62. <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
  63. <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
  64. <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
  65. <el-table-column label="申请号" prop="reqNo"></el-table-column>
  66. </el-table-column>
  67. </el-table>
  68. </el-popover>
  69. </template>
  70. </el-table-column>
  71. </el-table-column>
  72. </el-table>
  73. </aside>
  74. <div class="layout_main layout_el-table">
  75. <el-table :data="keQueRenData" highlight-current-row stripe>
  76. <el-table-column label="本科室">
  77. <el-table-column label="待确认标志" prop="confirmFlag" width="250">
  78. <template #default="scope">
  79. <el-radio-group v-model="scope.row.confirmFlag">
  80. <el-radio-button :disabled="scope.row.xiangMuZhuangTai === 1 || scope.row.xiangMuZhuangTai === 3"
  81. :value="0"> 未确认
  82. </el-radio-button>
  83. <el-radio-button :value="1">确认</el-radio-button>
  84. <el-radio-button :value="3">取消</el-radio-button>
  85. </el-radio-group>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
  89. <el-table-column label="项目" prop="chargeName"></el-table-column>
  90. <el-table-column label="金额" prop="chargeFeeNew"></el-table-column>
  91. <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
  92. <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
  93. <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
  94. <el-table-column label="申请号" prop="reqNo">
  95. <template #default="scope">
  96. <el-button type="success" @click="getMingXiClick(scope.row)">{{ scope.row.reqNo }}</el-button>
  97. </template>
  98. </el-table-column>
  99. </el-table-column>
  100. </el-table>
  101. </div>
  102. </div>
  103. </div>
  104. <el-dialog v-model="kuaiSuChaZhaoDialog" title="点击表格中的姓名即可">
  105. <el-table
  106. :data="kuaiSuChaZhaoData.list.slice((kuaiSuChaZhaoData.currentPage - 1) * kuaiSuChaZhaoData.pageSize, kuaiSuChaZhaoData.pageSize * kuaiSuChaZhaoData.currentPage)"
  107. height="calc(100vh - 50%)"
  108. highlight-current-row
  109. stripe
  110. @cell-click="chaZhaoTable"
  111. >
  112. <el-table-column label="姓名" prop="name"></el-table-column>
  113. <el-table-column label="门诊号" prop="patientId"></el-table-column>
  114. </el-table>
  115. <el-pagination
  116. :current-page="kuaiSuChaZhaoData.currentPage"
  117. :page-size="kuaiSuChaZhaoData.pageSize"
  118. :total="kuaiSuChaZhaoData.list.length"
  119. background
  120. layout="total, prev, pager, next, jumper"
  121. @current-change="kuaiSuChaZhaoCurrent"
  122. >
  123. </el-pagination>
  124. </el-dialog>
  125. <el-dialog v-model="chaoZuoZhiNanDialog" title="操作指南">
  126. 一、查询<br/><br/>
  127. 1、选择好时间以及患者的门诊号(门诊号或者诊疗卡号),在选择是否查看已经确认的还是未确认的 点击查询即可。<br/>
  128. 2、快速查询,只针对医生开了执行科室为本科室的才有用,没有带执行科室的请手动输入门诊号查询,是根据日期来查询的。<br/>
  129. 3、如果感觉有点卡的话那么就日期范围选择短一些<br/><br/>
  130. 二、数据<br/><br/>
  131. 1、点击右边侧边栏的表格,开在本科室的项目就会显示在左边,点击流水号,能看到这个费用的明细<br/>
  132. 2、点击中间的表格,选择您需要进行的操作。<br/>
  133. 3、点击申请号,可也看见套餐的明细。<br/><br/>
  134. 三、保存<br/><br/>
  135. 1、在选择完数据后点击保存即可。 <br/>
  136. </el-dialog>
  137. <el-dialog v-model="detailsDialog.dialog"
  138. class="mz_que-fei_detailsDialog"
  139. title="明细">
  140. <div class="detail">
  141. 申请单明细:
  142. <el-form label-width="80">
  143. <el-form-item label="症状:">
  144. {{ detailsDialog.details.req_comment }}
  145. </el-form-item>
  146. <el-form-item label="病史:">
  147. {{ detailsDialog.details.emr_hpi }}
  148. </el-form-item>
  149. <el-form-item label="体征:">
  150. {{ detailsDialog.details.emr_pe }}
  151. </el-form-item>
  152. <el-form-item label="备注:">
  153. {{ detailsDialog.details.jy_remark }}
  154. </el-form-item>
  155. <el-form-item label="申请医生:">
  156. <img :src="`http://172.16.32.167:8077/doctorSignatureImage/${detailsDialog.details.req_doctor}.png`"
  157. :alt="detailsDialog.details.req_doctor_name"
  158. />
  159. </el-form-item>
  160. <el-form-item label="申请科室:">
  161. {{ detailsDialog.details.req_ward_name }}
  162. </el-form-item>
  163. </el-form>
  164. </div>
  165. <div class="detail">
  166. 费用明细:
  167. <el-table :data="detailsDialog.tableData"
  168. highlight-current-row
  169. stripe>
  170. <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
  171. <el-table-column label="项目" prop="chargeName"></el-table-column>
  172. <el-table-column label="金额" prop="chargeFee"></el-table-column>
  173. </el-table>
  174. </div>
  175. </el-dialog>
  176. </template>
  177. <script setup>
  178. import {shortcuts} from '@/data/shortcuts'
  179. import {ref} from 'vue'
  180. import {cptSex} from '@/utils/computed'
  181. import {
  182. getFeiYongXinXi,
  183. getMzPatient, getReqDetailsByNo,
  184. kuaiSuChaZhao,
  185. menZhenXiangMuQuXiaoHuoQueRen
  186. } from '@/api/zhu-yuan-yi-ji/men-zhen-xiang-mu'
  187. import {getDateRangeFormatDate} from '@/utils/date'
  188. import {ElMessage, ElMessageBox} from 'element-plus'
  189. import {listIsBlank, stringIsBlank} from '@/utils/blank-utils'
  190. import {isDev, needRule} from "@/utils/public";
  191. import XEUtils from 'xe-utils'
  192. import {useUserStore} from "@/pinia/user-store";
  193. const userInfo = useUserStore().userInfo
  194. const dateRange = ref(shortcuts[0].value)
  195. const patientId = ref(isDev ? '339138-4' : '')
  196. const xiangMuZhuangTai = ref(0)
  197. const chargeDate = ref('')
  198. const patient = ref({})
  199. const shouFeiData = ref([])
  200. const feiYongData = ref([])
  201. const keQueRenData = ref([])
  202. const danGeXingXi = ref([])
  203. const detailsDialog = reactive({
  204. dialog: false,
  205. tableData: [],
  206. details: {}
  207. })
  208. const xiangMuZhuangTaiData = [
  209. {code: 0, name: '未确认'},
  210. {code: 1, name: '已确认'},
  211. ]
  212. const getMzPatientClick = () => {
  213. lingShiBaoCunJiaoFeiMingXi.value = {}
  214. shouFeiData.value = []
  215. keQueRenData.value = []
  216. feiYongData.value = []
  217. danGeXingXi.value = []
  218. let dateR = getDateRangeFormatDate(dateRange.value)
  219. getMzPatient(patientId.value, xiangMuZhuangTai.value, dateR.startTime, dateR.endTime, userInfo.deptCode)
  220. .then((res) => {
  221. patientId.value = res.patientId
  222. patient.value = res
  223. patient.value.birthDay = patient.value.birthDay.split(' ')[0]
  224. shouFeiData.value = res.list
  225. })
  226. .catch(() => {
  227. patient.value = {}
  228. })
  229. }
  230. const lingShiBaoCunJiaoFeiMingXi = ref({})
  231. function deptList(item) {
  232. return !!userInfo.partTimeDeptMap[item];
  233. }
  234. const getFeiYongXinXiClick = (val) => {
  235. chargeDate.value = val.chargeDate
  236. getFeiYongXinXi(val.realNo, val.patientId, val.times, xiangMuZhuangTai.value).then((res) => {
  237. keQueRenData.value = []
  238. feiYongData.value = res
  239. lingShiBaoCunJiaoFeiMingXi.value = XEUtils.clone(val)
  240. if (needRule(1)) {
  241. keQueRenData.value = XEUtils.clone(feiYongData.value, true)
  242. } else {
  243. keQueRenData.value = feiYongData.value.filter((item) => {
  244. return deptList(item.execDept) || stringIsBlank(item.execDept)
  245. })
  246. }
  247. })
  248. }
  249. const getMingXiClick = (val) => {
  250. if (typeof val.list !== 'undefined') {
  251. val.list.forEach((item) => {
  252. item.chargeFee = item.drugWin * item.quantity * item.unitPrice
  253. })
  254. }
  255. getReqDetailsByNo(val.patientId, val.reqNo).then((res) => {
  256. detailsDialog.dialog = true
  257. detailsDialog.details = res
  258. })
  259. detailsDialog.tableData = val.list || []
  260. }
  261. const baoCunClick = () => {
  262. const list = keQueRenData.value.filter((item) => {
  263. return item.confirmFlag !== item.oldConfirmFlag && item.confirmFlag !== 0
  264. })
  265. if (listIsBlank(list)) {
  266. return ElMessage.error('数据没有变化请勿点击')
  267. }
  268. ElMessageBox.confirm('请确认数据', '提示', {
  269. type: 'warning',
  270. })
  271. .then(() => {
  272. let baoCun = {
  273. list: list,
  274. realNo: lingShiBaoCunJiaoFeiMingXi.value.realNo,
  275. patientId: lingShiBaoCunJiaoFeiMingXi.value.patientId,
  276. times: lingShiBaoCunJiaoFeiMingXi.value.times,
  277. execDept: userInfo.deptCode,
  278. }
  279. menZhenXiangMuQuXiaoHuoQueRen(baoCun).then((res) => {
  280. keQueRenData.value = []
  281. })
  282. })
  283. .catch(() => {
  284. })
  285. }
  286. const kuaiSuChaZhaoDialog = ref(false)
  287. const kuaiSuChaZhaoData = ref({
  288. currentPage: 1,
  289. pageSize: 10,
  290. list: [],
  291. })
  292. const chaoZuoZhiNanDialog = ref(false)
  293. const kuaiSuChaZhaoClick = () => {
  294. let dateR = getDateRangeFormatDate(dateRange.value)
  295. kuaiSuChaZhao(dateR.startTime, dateR.endTime, userInfo.deptCode).then((res) => {
  296. kuaiSuChaZhaoData.value.list = res
  297. kuaiSuChaZhaoDialog.value = true
  298. })
  299. }
  300. const kuaiSuChaZhaoCurrent = (val) => {
  301. kuaiSuChaZhaoData.value.currentPage = val
  302. }
  303. const chaZhaoTable = (val) => {
  304. patientId.value = val.patientId
  305. getMzPatientClick()
  306. }
  307. function confirmFlag(val) {
  308. switch (val) {
  309. case 0:
  310. return '<span style="color:#E6A23C">未确认</span>'
  311. case 1:
  312. return '<span style="color:#67C23A">已确认</span>'
  313. case 3:
  314. return '<span style="color:#F56C6C">已取消</span>'
  315. }
  316. }
  317. </script>
  318. <style lang="scss">
  319. .mz_que-fei_detailsDialog {
  320. .detail {
  321. color: black;
  322. margin-bottom: 10px;
  323. padding: 20px;
  324. box-shadow: var(--el-box-shadow);
  325. }
  326. }
  327. </style>