<template> <!-- 收费查询-账单查询 --> <div class="white_bg burt-container custom-info"> <!-- form --> <a-form-model ref="form" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" > <a-row :gutter="30"> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="病历号"> <a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear /> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="客户姓名"> <a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear /> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="就诊日期"> <a-range-picker format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="form.admissionDateArr" :placeholder="['选择开始日期', '选择结束日期']" /> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="保险公司"> <a-select v-model="form.payorIds" placeholder="请选择保险公司" allowClear show-search mode="multiple" :filterOption="filterCode" optionFilterProp="label" > <a-select-option v-for="item in companyOptions" :key="item.corpCode" :value="item.id" :label="item.longName" > {{ item.longName }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="看诊医生"> <a-select v-model="form.doctorCode" placeholder="请选择看诊医生" allowClear > <a-select-option v-for="item in doctorOptions" :key="item.doctorCode" :value="item.doctorCode" > {{ item.doctorDesc }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="收费时间"> <a-range-picker format="YYYY-MM-DD" v-model="form.dateRange" :placeholder="['开始时间', '结束时间']" @change="onSelectVisitTime" /> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="是否已关联寄送单"> <a-select v-model="form.isSend" placeholder="请选择是否已关联寄送单" allowClear > <a-select-option value="Y" allow-clear> 是 </a-select-option> <a-select-option value="N" allow-clear> 否 </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="是否已回款"> <a-select v-model="form.isEobBack" placeholder="请选择是否已回款" allowClear > <a-select-option value="Y" allow-clear> 是 </a-select-option> <a-select-option value="N" allow-clear> 否 </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="账单类型"> <a-select v-model="form.receiptType" placeholder="请选择账单类型" allowClear > <a-select-option v-for="item in receiptTypeOptions" :key="item.value" :value="item.value" > {{ item.name }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="账单编号"> <a-input v-model="form.receiptNo" placeholder="请输入账单编号" allow-clear /> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="12"> <a-form-model-item label="状态"> <a-select v-model="form.status" placeholder="请选择状态" allowClear> <a-select-option v-for="item in statusOptions" :key="item.code" :value="item.code" > {{ item.name }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :xxl="6" :xl="8" :sm="3" class="none-label"> <a-form-model-item label="" :labelCol="{ span: 0 }" :wrapperCol="{ span: 24 }" > <a-button class="mar-left10" type="primary" @click="handlerReset"> <Icon name="ssireset" :size="14" />重置 </a-button> <a-button class="mar-left10" type="primary" @click="handlerSearch"> <Icon name="ssisearch_active" :size="14" />查询 </a-button> <a-button class="mar-left10" type="primary" @click="exportExcel"> <Icon name="ssidaochu" :size="14" />导出 </a-button> </a-form-model-item> </a-col> <a-col :xl="24" :lg="24" :sm="24"> <div class="residue-amount"> 未清余额合计:<span class="blue-text" >¥{{ ciReceiptTotalVo.residueBackAmount || 0 }} </span> (共计<span class="blue-text"> {{ ciReceiptTotalVo.totalNum || 0 }} </span >条<span v-if="ciReceiptTotalVo.invalidNum" >,其中:无效 <span style="color: red">{{ ciReceiptTotalVo.invalidNum || 0 }}</span> 条</span >) </div> </a-col> </a-row> <a-row></a-row> </a-form-model> <!-- table --> <div class="scroll-table"> <a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false" > <template slot="index" slot-scope="text, record, index"> {{ index + 1 }} </template> <template slot="operation" slot-scope="record"> <a-button type="link" class="success" @click.stop="detailEvt(record)" >查看</a-button > </template> <template slot="isSend" slot-scope="text"> {{ text == 'Y' ? '是' : text == 'N' ? '否' : '' }} </template> <template slot="isEob" slot-scope="text"> {{ text == 'Y' ? '是' : text == 'N' ? '否' : '' }} </template> <template slot="isEobBack" slot-scope="text"> {{ text == 'Y' ? '是' : text == 'N' ? '否' : '' }} </template> <template slot="status" slot-scope="text"> <span :style="{ color: text == 2 ? 'red' : '' }">{{ text == 1 ? '有效' : text == 2 ? '无效' : '' }}</span> </template> <template slot="redText" slot-scope="text"> <span style="color: red">{{ text }}</span> </template> </a-table> <!--分页--> <BurtPagination :pagination="pagination" @pageChange="_getChargeList" /> </div> </div> </template> <script> import BurtPagination from '@/components/Customers/pagation' import { mapState } from 'vuex' import moment from 'moment' import { receiptTypeOptions } from '@/assets/js/utilsdictOptions.js' import { exportFile } from '@/utils/index' export default { data() { const columns = [ { title: '序号', dataIndex: 'index', key: 'index', align: 'center', width: 80, scopedSlots: { customRender: 'index' } }, { title: '收费时间', dataIndex: 'receiptDate', width: 180 }, { title: '账单编号', dataIndex: 'receiptNo', width: 180 }, { title: '账单类型', dataIndex: 'receiptTypeStr', width: 130 }, { title: '状态', dataIndex: 'status', width: 130, customRender: (val) => { return ( <span class={val === '2' ? 'red-text' : ''}> {val === '2' ? '无效' : '有效'} </span> ) } }, { title: '病历号', dataIndex: 'mrnNo', width: 180 }, { title: '客户姓名', dataIndex: 'patientName', width: 120 }, { title: '就诊日期', dataIndex: 'admissionDate', width: 120, customRender: (val) => { return val ? moment(val).format('YYYY-MM-DD') : '' } }, { title: '保险公司', dataIndex: 'payorName', width: 200 }, { title: '保险卡', dataIndex: 'cardNo', width: 200 }, { title: '客户生日', dataIndex: 'birthday', width: 200 }, { title: '就诊医生', dataIndex: 'doctorName', width: 150 }, { title: '是否已关联寄送单', dataIndex: 'isSend', width: 180, scopedSlots: { customRender: 'isSend' } }, { title: '是否已回款', dataIndex: 'isEobBack', width: 180, scopedSlots: { customRender: 'isEobBack' } }, { title: '应收金额', dataIndex: 'chargeAmount', width: 180 }, { title: '折扣(%)', dataIndex: 'discountAmount', width: 180 }, { title: '减免金额', dataIndex: 'reduceAmount', width: 180 }, { title: '应付金额', dataIndex: 'payableAmount', width: 180 }, { title: '客户自付', dataIndex: 'selfpaidAmount', width: 180 }, { title: '理赔金额', dataIndex: 'actualAmount', width: 180 }, { title: '保险已支付', dataIndex: 'backAmount', width: 180 }, { title: '保险欠费', dataIndex: 'insuranceArrearsAmount', width: 180 }, { title: '个人欠费', dataIndex: 'arrearsAmount', width: 180, scopedSlots: { customRender: 'redText' } }, { title: '备注', dataIndex: 'remark', width: 200, scopedSlots: { customRender: 'redText' } }, { title: '未清余额', dataIndex: 'residueBackAmount', width: 180 }, { title: '账龄', dataIndex: 'diffDay', width: 180 }, { title: '操作', key: 'operation', width: '175px', fixed: 'right', scopedSlots: { customRender: 'operation' }, align: 'center' } ] return { labelCol: { span: 8 }, wrapperCol: { span: 16 }, columns, receiptTypeOptions, form: {}, pageForm: { doctorCode: '', patientName: '', admissionDateArr: [], mrnNo: '', paymentCode: '', payorIds: [], visitTimeEnd: '', visitTimeStart: '', receiptType: '', receiptNo: '' }, patientTypeOptions: [ { name: '商保', code: 1 } ], //客户类型 companyOptions: [], //保险公司 doctorOptions: [], //就诊医生 paymentOptions: [ { name: '商保', code: 1 } ], //支付方式 dataList: [], pagination: { pageNum: 1, pageSize: 10, total: 0 }, receiptTypeDict: { 1: '收费', 2: '退费' }, statusOptions: [ { name: '无效', code: 2 }, { name: '有效', code: 1 } ], ciReceiptTotalVo: {}, iscreated: false } }, components: { BurtPagination }, computed: { ...mapState({ userInfo: (state) => state.common.userInfo }) }, created() { this.iscreated = true this._getCompanyOptions() this._getDoctorListNoPage() //获取医生下拉选项 }, activated() { if (!this.iscreated) { this._getCompanyOptions() } else { this.iscreated = false } }, methods: { moment, // 获取未清余额合计 getReceiptCount() { this.$apis .receiptCount({ ...this.pageForm, ...this.pagination, admissionDateStart: this.form.admissionDateArr && this.form.admissionDateArr[0] ? moment(this.form.admissionDateArr[0]).format( 'YYYY-MM-DD 00:00:00' ) : '', admissionDateEnd: this.form.admissionDateArr && this.form.admissionDateArr[1] ? moment(this.form.admissionDateArr[1]).format( 'YYYY-MM-DD 23:59:59' ) : '' }) .then((res) => { if (res.returnCode == '0000') { console.log(res.content) this.ciReceiptTotalVo = res.content } }) }, // 选择框筛选 filterCode(input, option) { return ( option.componentOptions.children[0].text .toLowerCase() .indexOf(input.toLowerCase()) >= 0 ) }, // 获取列表数据 _getChargeList() { const data = { ...this.pageForm, ...this.pagination, admissionDateStart: this.form.admissionDateArr && this.form.admissionDateArr[0] ? moment(this.form.admissionDateArr[0]).format( 'YYYY-MM-DD 00:00:00' ) : '', admissionDateEnd: this.form.admissionDateArr && this.form.admissionDateArr[1] ? moment(this.form.admissionDateArr[1]).format( 'YYYY-MM-DD 23:59:59' ) : '' } this.$apis.getChargeList(data).then((res) => { let content = res.content || {} this.dataList = content.list.map((item) => { item.receiptTypeStr = this.receiptTypeDict[item.receiptType] || '' return item }) || [] this.pagination.total = content.total || 0 }) }, // 获取保险公司下拉选项 _getCompanyOptions() { this.$apis.getCompanyOptions().then((res) => { this.companyOptions = res.content || [] }) }, // 获取看诊医生下拉选项 _getDoctorListNoPage() { this.$apis .getDoctorListNoPage({ providerId: this.userInfo.providerId }) .then((res) => { if (res.returnCode === '0000') { this.doctorOptions = res.content || [] } else { this.$message.success(res.returnMsg) } }) }, // 选中就诊时间 onSelectVisitTime(date, dateString) { this.form.visitTimeStart = dateString[0] ? dateString[0] + ' 00:00:00' : '' this.form.visitTimeEnd = dateString[1] ? dateString[1] + ' 23:59:59' : '' console.log(date, dateString) }, // 重置 handlerReset() { this.form = {} }, //查看 detailEvt(record) { localStorage.setItem('chargeQueryDetail', JSON.stringify(record)) const { receiptNo } = record this.$router.push({ name: 'chargeQueryDetail', query: { receiptNo } }) }, //账单结算 receiptEvt(record) { this.$modal.confirm({ title: '结算', content: '确定结算该账单?', okText: '确定', cancelText: '取消', onOk: () => { this.$apis .receiptSettlement({ id: record.id }) .then((res) => { if (res.returnCode === '0000') { this.$message.success('结算成功') this._getChargeList() } else { this.$message.error(res.returnMsg) } }) } }) }, handlerSearch() { this.$refs.form.validate((valid) => { if (!valid) { return false } this.pagination.pageNum = 1 this.pageForm = this.$lodash.cloneDeep({ ...this.form, dateRange: undefined }) this._getChargeList() this.getReceiptCount() }) }, //导出报表 exportExcel() { let filter = { ...this.form, admissionDateStart: this.form.admissionDateArr && this.form.admissionDateArr[0] ? moment(this.form.admissionDateArr[0]).format( 'YYYY-MM-DD 00:00:00' ) : '', admissionDateEnd: this.form.admissionDateArr && this.form.admissionDateArr[1] ? moment(this.form.admissionDateArr[1]).format( 'YYYY-MM-DD 23:59:59' ) : '' } delete filter.admissionDateArr this.$apis.rceiptListReport(filter).then((res) => { exportFile(res, '账单报表.xls') }) } } } </script> <style lang="less" scoped> .none-label { text-align: right; .ant-form-item-label { opacity: 0; } } .ant-btn .icon-class { .mg-r(10); } .residue-amount { color: rgba(0, 0, 0, 0.65); font-size: 14px; margin: 0 0 10px; } .scroll-table { height: calc(100vh - 355px); overflow: scroll; } @media screen and (min-width: 1920px) { .scroll-table { height: calc(100vh - 342px); } } </style>