Elizabeth's proactive approach involves introducing urinal toilet attachment , an ingenious concept that optimizes space and functionality.

summary.vue 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <template>
  2. <div class="main-contain outpatientChargesManagement">
  3. <div class="position">
  4. <bread-crumb :crumbs='crumbs'></bread-crumb>
  5. </div>
  6. <div class="app-container">
  7. <div style="display: flex;justify-content: space-between;margin-bottom:10px;">
  8. <div>
  9. <el-input size="small" style="width:150px;" v-model="keywords"
  10. class="filter-item"/>
  11. <el-button size="small" style="margin-left:10px;" class="filter-item" type="primary" @click="searchAction">
  12. 搜索
  13. </el-button>
  14. <el-select size="small" v-model="admin_user_id" placeholder="请选择" style="width:150px;margin-left:10px;" @change="changeDoctor">
  15. <el-option
  16. label="全部"
  17. value="0">
  18. </el-option>
  19. <el-option
  20. v-for="item,index in doctors"
  21. :key="index"
  22. :label="item.user_name"
  23. :value="item.admin_user_id">
  24. </el-option>
  25. </el-select>
  26. <el-date-picker size="small" v-model="start_time" prefix-icon="el-icon-date"
  27. @change="handleStartTimeChange" :editable="false" :clearable="false"
  28. style="width: 196px;margin-right:10px;" type="date" placeholder="选择开始日期"
  29. format="yyyy-MM-dd"
  30. value-format="yyyy-MM-dd"
  31. align="right"></el-date-picker>
  32. <el-date-picker size="small" v-model="end_time" prefix-icon="el-icon-date"
  33. @change="handleEndTimeChange" :editable="false" :clearable="false"
  34. style="width: 196px;margin-right:10px;" type="date" placeholder="选择结束日期"
  35. format="yyyy-MM-dd"
  36. value-format="yyyy-MM-dd"
  37. align="right"></el-date-picker>
  38. <!--<el-radio v-model="radio" label="1">明细</el-radio>-->
  39. <!--<el-radio v-model="radio" label="2">汇总</el-radio>-->
  40. </div>
  41. <el-button size="small" type="primary" @click="export_detail">报表下载</el-button>
  42. </div>
  43. <el-table :data="tableData" border style="width: 100%;" :row-style="{ color: '#303133' }"
  44. :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)',color: '#606266'}" highlight-current-row>
  45. <el-table-column
  46. prop="date"
  47. label="序号"
  48. width="60"
  49. align="center"
  50. type="index"
  51. >
  52. </el-table-column>
  53. <el-table-column align="center" prop="name" label="就诊号">
  54. <template slot-scope="scope">{{ scope.row.his_patient.number }}</template>
  55. </el-table-column>
  56. <el-table-column align="center" prop="name" label="患者名字">
  57. <template slot-scope="scope">{{ scope.row.patient.name }}</template>
  58. </el-table-column>
  59. <!--<el-table-column align="center" prop="name" label="患者类型">-->
  60. <!--<template slot-scope="scope"></template>-->
  61. <!--</el-table-column>-->
  62. <el-table-column align="center" prop="name" label="应收金额">
  63. <template slot-scope="scope">{{scope.row.medfee_sumamt}}</template>
  64. </el-table-column>
  65. <el-table-column align="center" prop="name" label="实收金额">
  66. <template slot-scope="scope">{{scope.row.reality_price}}</template>
  67. </el-table-column>
  68. <el-table-column align="center" prop="name" label="科室">
  69. <template slot-scope="scope">{{scope.row.p_info.department.name}}</template>
  70. </el-table-column>
  71. <el-table-column align="center" prop="name" label="收费日期">
  72. <template slot-scope="scope"> {{getTimes(scope.row.settle_accounts_date)}}</template>
  73. </el-table-column>
  74. <el-table-column align="center" prop="name" label="收费员">
  75. <template slot-scope="scope">{{ scope.row.p_info.doctor }}</template>
  76. </el-table-column>
  77. <el-table-column align="center" prop="name" label="状态">
  78. <template slot-scope="scope">
  79. <div v-if="scope.row.order_status == 1">待结算</div>
  80. <div v-if="scope.row.order_status == 2">已结算</div>
  81. <div v-if="scope.row.order_status == 3">已退费</div>
  82. </template>
  83. </el-table-column>
  84. <el-table-column align="center" prop="name" label="操作">
  85. <template slot-scope="scope">
  86. <el-button size="mini" type="primary" @click="toDetail(scope.row)">详情</el-button>
  87. </template>
  88. </el-table-column>
  89. </el-table>
  90. <el-pagination
  91. @size-change="handleSizeChange"
  92. @current-change="handleCurrentChange"
  93. :page-sizes="[10, 50, 100]"
  94. :page-size="10"
  95. background
  96. style="margin-top:20px;float: right"
  97. layout="total, sizes, prev, pager, next, jumper"
  98. :total="total"
  99. >
  100. </el-pagination>
  101. </div>
  102. </div>
  103. </template>
  104. <script>
  105. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  106. import { getHisOrderList,getDoctorList,getExportConsumeDetailList } from '@/api/his/his'
  107. import { uParseTime } from '@/utils/tools'
  108. export default {
  109. components: {
  110. BreadCrumb
  111. },
  112. data() {
  113. return {
  114. crumbs: [
  115. { path: false, name: '门诊收费' },
  116. { path: false, name: '项目消费明细汇总' }
  117. ],
  118. tableData: [],
  119. limit:10,
  120. page:1,
  121. keywords:"",
  122. start_time:"",
  123. end_time:"",
  124. total:"",
  125. doctors:[],
  126. admin_user_id:"",
  127. }
  128. },
  129. methods: {
  130. export_detail(){
  131. let params= {
  132. start_time:this.start_time,
  133. end_time: this.end_time,
  134. }
  135. getExportConsumeDetailList(params).then(response => {
  136. if (response.data.state == 0) {
  137. this.$message.error(response.data.msg)
  138. return false
  139. } else {
  140. let list = []
  141. for (let i =0; i < response.data.data.order.length; i++){
  142. let order = response.data.data.order[i]
  143. let number = ""
  144. let name = ""
  145. let department = ""
  146. let doctor_name = ""
  147. let balance_accounts = ""
  148. let order_status = ""
  149. if(order.his_patient != null && order.his_patient.number.length > 0){
  150. number = order.his_patient.number
  151. }
  152. if(order.his_patient != null ){
  153. if(order.his_patient.balance_accounts_type == 1){
  154. balance_accounts = "自费"
  155. }
  156. if(order.his_patient.balance_accounts_type == 2){
  157. balance_accounts = "医保"
  158. }
  159. }
  160. if(order.patient != null && order.patient.name.length > 0){
  161. name = order.patient.name
  162. }
  163. if(order.p_info != null && order.p_info.department != null && order.p_info.department.name.length > 0){
  164. department = order.p_info.department.name
  165. }
  166. if(order.p_info != null && order.p_info.doctor.length > 0){
  167. doctor_name = order.p_info.doctor
  168. }
  169. if(order.order_status == 1){
  170. order_status = "待结算"
  171. }
  172. if(order.order_status == 2){
  173. order_status = "已结算"
  174. }
  175. if(order.order_status == 3){
  176. order_status = "已退费"
  177. }
  178. let obj = {
  179. "就诊号":number,
  180. "患者姓名":name,
  181. "应收金额":order.medfee_sumamt,
  182. "实收金额":order.medfee_sumamt,
  183. "科室":department,
  184. "医生姓名":doctor_name,
  185. "收费类别":balance_accounts,
  186. "收费者姓名":doctor_name,
  187. "总金额":order.medfee_sumamt,
  188. "现金支付":"",
  189. "账户支付":"",
  190. "支付宝支付":"",
  191. "微信支付":"",
  192. "其他支付":"",
  193. "收费日期":"",
  194. "收费状态":order_status,
  195. "退费日期":"",
  196. }
  197. list.push(obj)
  198. }
  199. import('@/vendor/Export2Excel').then(excel => {
  200. const tHeader = ['就诊号', '患者姓名', '应收金额', '实收金额', '科室',"医生姓名","收费类别","收费者姓名","总金额","现金支付","账户支付","支付宝支付","微信支付","其他支付","收费日期","收费状态","退费日期"]
  201. const filterVal = ['就诊号', '患者姓名', '应收金额', '实收金额', '科室',"医生姓名","收费类别","收费者姓名","总金额","现金支付","账户支付","支付宝支付","微信支付","其他支付","收费日期","收费状态","退费日期"]
  202. const data = this.formatJson(filterVal, list)
  203. excel.export_json_to_excel({
  204. header: tHeader,
  205. data,
  206. filename: "消费明细"
  207. })
  208. })
  209. }
  210. })
  211. }, formatJson(filterVal, jsonData) {
  212. return jsonData.map(v => filterVal.map(j => v[j]))
  213. },
  214. changeDoctor(){
  215. this.page = 1
  216. this.keywords=""
  217. this.getHisOrderList()
  218. },
  219. handleSizeChange(limit){
  220. this.limit = limit;
  221. this.getHisOrderList()
  222. },handleCurrentChange(page){
  223. this.page = page;
  224. this.getHisOrderList()
  225. },
  226. handleStartTimeChange(){
  227. this.page = 1
  228. this.keywords=""
  229. this.getHisOrderList()
  230. },handleEndTimeChange(){
  231. this.page = 1
  232. this.keywords=""
  233. this.getHisOrderList()
  234. },
  235. searchAction(){
  236. this.page = 1
  237. this.getHisOrderList()
  238. },
  239. getTimes(time) {
  240. return uParseTime(time, "{y}-{m}-{d}");
  241. },
  242. toDetail(row) {
  243. this.$router.push('/outpatientCharges/summaryDetail?patient_id='+row.patient.id+"&number="+row.number)
  244. }, getTime(value, temp) {
  245. if (value != undefined) {
  246. return uParseTime(value, temp)
  247. }
  248. return ''
  249. },getHisOrderList(){
  250. let params= {
  251. page : this.page,
  252. limit: this.limit,
  253. keywords:this.keywords,
  254. start_time:this.start_time,
  255. end_time: this.end_time,
  256. type: this.admin_user_id
  257. }
  258. getHisOrderList(params).then(response => {
  259. if (response.data.state == 0) {
  260. this.$message.error(response.data.msg)
  261. return false
  262. } else {
  263. this.tableData = response.data.data.order
  264. this.total = response.data.data.total
  265. }
  266. })
  267. },getDoctorList(){
  268. getDoctorList().then(response => {
  269. if (response.data.state == 0) {
  270. this.$message.error(response.data.msg)
  271. return false
  272. } else {
  273. this.doctors = response.data.data.doctors
  274. }
  275. })
  276. }
  277. }, created() {
  278. this.getDoctorList()
  279. this.getHisOrderList()
  280. }
  281. }
  282. </script>