<template> <!-- 收费查询-账单查询 --> <div class="white_bg burt-container custom-info"> <Goback title="理赔件详情" /> <!-- form --> <a-form-model ref="form" layout="vertical" :model="form"> <a-row :gutter="30"> <a-col :lg="8" :sm="12"> <a-form-model-item label="保险公司"> <a-select v-model="form.payorCode" placeholder="请选择保险公司" allow-clear showSearch :disabled="!isEdit" optionFilterProp="label" > <a-select-option v-for="item in companyOptions" :key="item.id" :value="item.payorCode" :label="item.longName" > {{ item.longName }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送状态"> <a-select v-model="form.sendSts" placeholder="请选择寄送状态" allow-clear :disabled="!isEdit" > <a-select-option value="1">已寄送</a-select-option> <a-select-option value="2">未寄送</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="快递公司"> <a-select v-model="form.sendCompany" placeholder="请选择快递公司" showSearch allow-clear :disabled="!isEdit" > <a-select-option v-for="item in expressList" :key="item.id" :value="item.descCh" >{{ item.descCh }}</a-select-option > </a-select> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="快递单号"> <a-input v-model="form.trackingNo" placeholder="请输入快递单号" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送方式"> <a-select v-model="form.sendMode" placeholder="请选择寄送方式" allow-clear :disabled="!isEdit" > <a-select-option value="快递">快递</a-select-option> <a-select-option value="邮件">邮件</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送日期"> <a-date-picker format="YYYY年MM月DD日" v-model="form.sendDate" placeholder="选择日期" /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送地址"> <a-input v-model="form.sendAddress" placeholder="请输入寄送地址" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送邮箱"> <a-input v-model="form.sendEmail" placeholder="请输入寄送邮箱" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="寄送备注"> <a-textarea v-model="form.sendRemark" placeholder="请输入寄送备注" :auto-size="{ minRows: 2, maxRows: 5 }" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :sm="24" class="none-label" v-if="isEdit"> <div class="btn-div flex"> <span></span> <a-form-model-item label="button"> <a-button class="mar-left10" type="primary" @click.stop="addNewCharge(true)" > <Icon :name="sendBatchNo ? 'ssibaocun' : 'ssiadd'" :size="14" />{{ sendBatchNo ? '保存寄送' : '新建寄送' }}</a-button > </a-form-model-item> </div> </a-col> </a-row> </a-form-model> <a-form-model ref="form" layout="vertical" :model="searchForm"> <a-row :gutter="30"> <a-col :lg="8" :sm="12"> <a-form-model-item label="账单日期"> <a-range-picker format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="searchForm.visitTimeStart" :placeholder="['选择账单开始日期', '选择账单结束日期']" /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="病历号"> <a-input v-model="searchForm.mrnNo" placeholder="请输入病历号" allow-clear /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="客户名称"> <a-input v-model="searchForm.patientName" placeholder="请输入客户名称" allow-clear /> </a-form-model-item> </a-col> </a-row> <a-row :gutter="30"> <a-col :lg="8" :sm="12"> <a-form-model-item label="账单编号"> <a-input v-model="searchForm.receiptNo" placeholder="请输入账单编号" allow-clear /> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="状态"> <a-select v-model="searchForm.rStatus" placeholder="请选择状态" allow-clear > <a-select-option :key="item.code" :value="item.code" v-for="item in statusOptions" >{{ item.name }}</a-select-option > </a-select> </a-form-model-item> </a-col> <a-col :lg="8" :sm="12"> <a-form-model-item label="就诊日期"> <a-range-picker format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="searchForm.admissionDateStart" :placeholder="['选择开始日期', '选择结束日期']" /> </a-form-model-item> </a-col> </a-row> <a-row :gutter="30"> <a-col :sm="24" class="none-label"> <div class="btn-div flex"> <div class="total-div flex"> <div> <span>总账单数:</span> <span class="blue-text">{{ totalListNum + selectedRowKeys.length }}</span> 条 <span :style="{ color: 'red' }" v-if="invalidNum > 0" >(无效{{ invalidNum }} 条)</span > </div> <div> <span>理赔金额合计:</span> <span class="blue-text">¥{{ totalAmount }}</span> <span :style="{ color: 'red' }" v-if="invalidActualAmount > 0" >(无效{{ invalidActualAmount }}元)</span > </div> <a-button v-if="isEditNewBill" size="small" type="primary" @click="checkAll" >全选</a-button > </div> <a-form-model-item label="button"> <a-button type="primary" @click="handlerSearch"> <Icon name="ssisearch_active" :size="14" />查询 </a-button> <a-button class="mar-left10" type="primary" @click="exportEvt"> <Icon name="ssidaochu" :size="14" />导出 </a-button> <a-button class="mar-left10" type="primary" @click.stop="addNewBill" v-if="isEdit" > <Icon :name="isEditNewBill ? 'ssibaocun' : 'ssiadd'" :size="14" />{{ isEditNewBill ? '保存账单' : '添加账单' }}</a-button > </a-form-model-item> </div> </a-col> </a-row> </a-form-model> <!-- table --> <a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false" :row-selection=" isEditNewBill ? { selectedRowKeys: selectedRowKeys, onChange: onSelectChange } : null " > <template slot="sendDate" slot-scope="text"> {{ text ? moment(text).format('YYYY-MM-DD') : '' }} </template> <template slot="sendSts" slot-scope="text"> {{ text == 1 ? '已寄送' : '未寄送' }} </template> <template slot="status" slot-scope="text"> <span :style="{ color: text == 2 ? 'red' : '' }">{{ text == 1 ? '有效' : text == 2 ? '无效' : '' }}</span> </template> <template slot="operation" slot-scope="text, record"> <!-- <a-button type="link" @click.stop="editEvt(record)">修改</a-button> --> <a-button type="link" class="danger" @click.stop="delRecord(record)" >删除</a-button > </template> </a-table> <!--分页--> <BurtPagination :pagination="pagination" @pageChange="getPageData" /> <a-modal title="编辑" :visible="dialogShow" width="700px" :maskClosable="false" okText="确定" cancelText="取消" @ok="handleEditOK" @cancel="dialogShow = false" > <a-form-model ref="editForm" :model="editFormObj" :rules="editRules"> <a-row :gutter="30"> <a-col :lg="12" :xs="24"> <a-form-model-item label="保险公司" prop="payorCode"> <a-select v-model="editFormObj.payorCode" placeholder="请选择保险公司" allowClear > <a-select-option v-for="item in companyOptions" :key="item.id" :value="item.payorCode" > {{ item.longName }} </a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="12" :sm="24"> <a-form-model-item label="寄送状态" prop="sendSts"> <a-select v-model="editFormObj.sendSts" placeholder="请选择寄送状态" allowClear > <a-select-option :value="1">已寄送</a-select-option> <a-select-option :value="2">未寄送</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="12" :sm="24"> <a-form-model-item label="寄送日期" prop="sendDate"> <a-date-picker format="YYYY年MM月DD日" v-model="editFormObj.sendDate" placeholder="选择日期" /> </a-form-model-item> </a-col> <a-col :lg="12" :xs="24"> <a-form-model-item label="快递单号" prop="trackingNo"> <a-input v-model.trim="editFormObj.trackingNo" placeholder="快递单号" /> </a-form-model-item> </a-col> </a-row> <a-row :gutter="30"> <a-col :lg="12" :xs="24"> <a-form-model-item label="寄送备注" prop="sendRemark"> <a-textarea v-model.trim="editFormObj.sendRemark" placeholder="寄送备注" /> </a-form-model-item> </a-col> </a-row> </a-form-model> </a-modal> </div> </template> <script> import Goback from '@/components/Customers/goback' import BurtPagination from '@/components/Customers/pagation' import moment from 'moment' import Big from 'big.js' // import { numValid } from "@/utils/index" export default { data() { return { loading: false, dialogShow: false, isEdit: false, sendBatchNo: '', //寄送批号 form: { payorCode: '', sendSts: '', sendMode: '', sendDate: '', sendCompany: '', trackingNo: '', sendAddress: '', sendEmail: '', sendRemark: '' }, searchForm: {}, searchData: {}, companyOptions: [], //保险公司 expressList: [], //快递列表 selectedRowKeys: [], // Check here to configure the default column dataList: [], cacheDataList: {}, isEditNewBill: false, //是否在新建账单 pagination: { pageNum: 1, pageSize: 500, total: 0 }, editFormObj: { payorCode: '', sendSts: '', sendDate: '', trackingNo: '', sendRemark: '' }, editRules: { sendDate: [ { required: true, message: '请选择寄送日期', trigger: 'change' } ], trackingNo: [ { required: true, message: '请输入寄送单号', trigger: 'blur' } ] }, statusOptions: [ { name: '无效', code: 2 }, { name: '有效', code: 1 } ], totalActualAmount: 0, totalListNum: 0, selectActualAmount: 0, invalidNum: 0, invalidActualAmount: 0 } }, components: { Goback, BurtPagination }, computed: { totalAmount() { console.log( this.totalActualAmount, this.selectActualAmount, Number(this.totalActualAmount * 100) + this.selectActualAmount * 100 ) if (this.isEditNewBill) { return Big(this.totalActualAmount).plus(this.selectActualAmount) } else { return this.totalActualAmount } }, columns() { const base = [ { title: '账单日期', dataIndex: 'receiptDate', width: 120, fixed: 'left', scopedSlots: { customRender: 'receiptDate' } }, { title: '状态', dataIndex: 'status', key: 'status', align: 'center', fixed: 'left', width: 60, scopedSlots: { customRender: 'status' } }, { title: '客户姓名', dataIndex: 'patientName', fixed: 'left', width: 120 }, { title: '就诊日期', dataIndex: 'admissionDate', fixed: 'left', width: 120 }, { title: '病历号', dataIndex: 'mrnNo', key: 'mrnNo', align: 'center', width: 136 }, { title: '保险公司', dataIndex: 'payorName', ellipsis: true, width: 250 }, { title: '保险卡号', dataIndex: 'memberCardNo', width: 140 }, { title: '客户生日', dataIndex: 'birthday', width: 120 }, { title: '就诊医生', dataIndex: 'doctorName', width: 100, align: 'center' }, { title: '应收金额', dataIndex: 'chargeAmount', width: 100, align: 'center' }, { title: '折扣金额', dataIndex: 'discountAmount', width: 100, align: 'center' }, { title: '减免金额', dataIndex: 'reduceAmount', width: 100, align: 'center' }, { title: '客户自付', dataIndex: 'selfpaidAmount', width: 100, align: 'center' }, { title: '理赔金额', dataIndex: 'actualAmount', width: 100, align: 'center' }, { title: '账单编号', dataIndex: 'receiptNo', key: 'receiptNo', align: 'center' } ] if (this.sendBatchNo && !this.isEditNewBill && this.isEdit) { // 编辑状态下已经保存的数据才可进行操作 return base.concat([ { title: '操作', key: 'operation', width: '100px', fixed: 'right', scopedSlots: { customRender: 'operation' } } ]) } return base } }, created() { const { sendBatchNo, isEdit } = this.$route.query this.sendBatchNo = sendBatchNo this.isEdit = isEdit this._getCompanyOptions() this.getRefcdByRefgrp() if (this.sendBatchNo) { let jisongDataDetail = localStorage.getItem('jisongDataDetail') this.form = jisongDataDetail ? JSON.parse(jisongDataDetail) : {} this.getData() } }, methods: { moment, onSelectChange(selectedRowKeys) { let arr = [] this.selectActualAmount = 0 for (let i = 0; i < selectedRowKeys.length; i++) { let idx = selectedRowKeys[i] if (this.dataList[idx].sendBatchNo) { this.$msg.destroy() this.$message.warning('寄送批号已存在') } else { arr.push(idx) if (idx.status == 2) { this.invalidNum++ this.invalidActualAmount = Big(this.invalidActualAmount).plus( this.dataList[idx].actualAmount ) } this.selectActualAmount = Big(this.selectActualAmount).plus( this.dataList[idx].actualAmount ) } } this.selectedRowKeys = arr }, // 全选 checkAll() { this.$apis .queryNoSendReceipList({ pageNum: 1, pageSize: this.pagination.total, payorCode: this.form.payorCode, ...this.searchData }) .then((res) => { if (res.returnCode == '0000') { const dataList = res.content.list || [] const selectedRowKeys = dataList.map((item, index) => index) this.onSelectChange(selectedRowKeys) const index = Math.ceil(dataList.length / this.pagination.pageSize) for (let i = 1; i < index + 1; i++) { this.cacheDataList[i] = dataList.slice( (i - 1) * this.pagination.pageSize, i * this.pagination.pageSize ) } } else { this.$message.error(res.returnMsg) } }) }, // 分页回调 getPageData(pager) { console.log(pager, 1111) if (pager) { this.pagination = { ...this.pagination, ...pager } } if (this.isEditNewBill) { // 新增时添加了账单信息 那分页也应该是调账单信息接口 this._getNewBillList() } else { this.getData() } }, // 获取列表数据 getData() { this.selectedRowKeys = [] let filter = { pageNum: this.pagination.pageNum, pageSize: this.pagination.pageSize, sendBatchNo: this.sendBatchNo || undefined, ...this.searchData } this.$apis.querySendReceipList(filter).then((res) => { if (res.returnCode == '0000') { let content = res.content || {} this.pagination.total = content.total || 0 this.dataList = content.list || [] this.cacheDataList[filter.pageNum] = this.dataList this.getTotal() } else { this.$message.error(res.returnMsg) } }) }, // 计算总保费 getTotal() { let totalNum = 0 let totalMoney = 0 let invalidNum = 0 let invalidActualAmount = 0 if (this.dataList.length > 0) { this.dataList.forEach((item) => { totalNum++ totalMoney = Big(totalMoney).plus(item.actualAmount) if (item.status == 2) { invalidNum++ invalidActualAmount = Big(invalidActualAmount).plus( item.actualAmount ) } }) } this.totalActualAmount = totalMoney this.totalListNum = totalNum this.invalidNum = invalidNum this.invalidActualAmount = invalidActualAmount }, // 获取保险公司下拉选项 _getCompanyOptions() { this.$apis.getCompanyOptions().then((res) => { this.companyOptions = res.content || [] }) }, // 获取快递列表 getRefcdByRefgrp() { this.$apis .getRefcdByRefgrp({ modid: 'CI', refgrp: 'SEND_COMPANY' }) .then((res) => { this.expressList = res.content || [] }) }, //查看 detailEvt(record) { const { receiptNo } = record this.$router.push({ name: 'chargeQueryDetail', query: { receiptNo } }) }, editEvt(record) { this.editFormObj = { ciReceiptSendVos: [ { id: record.id, receiptNo: record.receiptNo } ], payorCode: record.payorCode || '', sendSts: Number(record.sendSts) || '', sendDate: record.sendDate || '', trackingNo: record.trackingNo || '', sendRemark: record.sendRemark || '' } this.dialogShow = true }, //编辑保存 handleEditOK() { this.$refs.editForm.validate((valid) => { if (valid) { this.$apis .saceReceipSendInfo({ ...this.editFormObj, sendDate: moment(this.editFormObj.sendDate).format( 'YYYY-MM-DD 00:00:00' ) }) .then((res) => { if (res.returnCode == '0000') { this.$message.success('编辑成功') this.dialogShow = false this.getData() } else { this.$message.error(res.returnMsg) } }) } }) }, handlerSearch() { this.pagination.pageNum = 1 let visitTimeStart = this.searchForm.visitTimeStart || [] let admissionDateStart = this.searchForm.admissionDateStart || [] this.searchData = this.$lodash.cloneDeep({ ...this.searchForm, admissionDateStart: admissionDateStart[0] ? admissionDateStart[0] + ' 00:00:00' : undefined, admissionDateEnd: admissionDateStart[1] ? admissionDateStart[1] + ' 23:59:59' : undefined, visitTimeEnd: visitTimeStart[1] ? visitTimeStart[1] + ' 23:59:59' : undefined, visitTimeStart: visitTimeStart[0] ? visitTimeStart[0] + ' 00:00:00' : undefined }) if (this.isEditNewBill) { // 新增时添加了账单信息 那分页也应该是调账单信息接口 this._getNewBillList() } else { this.getData() } }, //删除 delRecord(data) { this.$modal.confirm({ title: '删除', content: '确定删除该条记录?', okText: '确定', cancelText: '取消', onOk: () => { this.$apis .deleteSendReceipt({ ciReceiptSendVos: [{ receiptNo: data.receiptNo }], sendBatchNo: this.sendBatchNo }) .then((res) => { if (res.returnCode == '0000') { this.$message.success('删除成功') this.getData() // this.dataList.splice(index, 1); } else { this.$message.error(res.returnMsg) } }) } }) }, //导出 exportEvt() { let visitTimeStart = this.searchForm.visitTimeStart || [] let api = '' if (!this.isEditNewBill) { // 新增时添加了账单信息 那分页也应该是调账单信息接口 api = this.$apis.sendReceipListExport } else { api = this.$apis.noSendReceipListExport } api({ sendBatchNo: this.sendBatchNo || undefined, ...this.searchForm, payorCode: this.form.payorCode || undefined, visitTimeEnd: visitTimeStart[1] ? visitTimeStart[1] + ' 23:59:59' : undefined, visitTimeStart: visitTimeStart[0] ? visitTimeStart[0] + ' 00:00:00' : undefined }).then((res) => { let blob = new Blob([res.data], { type: 'application/vnd.ms-excel;charset=utf-8' }) let url = window.URL.createObjectURL(blob) let aLink = document.createElement('a') aLink.style.display = 'none' aLink.href = url aLink.setAttribute( 'download', !this.isEditNewBill ? '寄送账单.xls' : '未寄送账单.xls' ) document.body.appendChild(aLink) aLink.click() document.body.removeChild(aLink) window.URL.revokeObjectURL(url) }) }, //添加账单 addNewBill() { if (this.isEditNewBill) { //保存 this.addNewCharge().then(() => { this.isEditNewBill = false }) } else { //查询所有未加入的账单 this.pagination.pageNum = 1 this.isEditNewBill = true this.cacheDataList = {} if (this.isEditNewBill) { // 新增时添加了账单信息 那分页也应该是调账单信息接口 this._getNewBillList() } else { this.getData() } } }, _getNewBillList() { this.$apis .queryNoSendReceipList({ pageNum: this.pagination.pageNum, pageSize: this.pagination.pageSize, payorCode: this.form.payorCode, ...this.searchData }) .then((res) => { if (res.returnCode == '0000') { // this.selectedRowKeys = []; let content = res.content || {} this.pagination.total = content.total || 0 this.dataList = content.list || [] this.cacheDataList[this.pagination.pageNum] = this.dataList } else { this.$message.error(res.returnMsg) } }) }, checkBeforeSave() { if (!this.form.trackingNo) { this.$message.warning('请输入快递单号') return false } if (!this.form.sendDate) { this.$message.warning('请选择寄送日期') return false } let allData = [] for (let i in this.cacheDataList) { allData = allData.concat(this.cacheDataList[i]) } let ciReceiptSendVos = [] if (this.isEditNewBill) { ciReceiptSendVos = [] allData.forEach((item, index) => { if (this.selectedRowKeys.indexOf(index) != -1) { ciReceiptSendVos.push({ id: item.id, receiptNo: item.receiptNo, selfpaidAmount: item.selfpaidAmount }) } }) } else { ciReceiptSendVos = allData.map((item) => { return { id: item.id, receiptNo: item.receiptNo, selfpaidAmount: item.selfpaidAmount } }) } // for(let i = 0; i < ciReceiptSendVos.length; i ++) { // const selfpaidAmount = ciReceiptSendVos[i].selfpaidAmount // if(selfpaidAmount && !numValid.test(selfpaidAmount)){ // this.$message.warning("请输入正确的客户自付金额"); // return false; // } // } return { ...this.form, ciReceiptSendVos: ciReceiptSendVos, sendDate: moment(this.form.sendDate).format('YYYY-MM-DD 00:00:00'), sendBatchNo: this.sendBatchNo || undefined } }, //新建/保存寄送 addNewCharge(flag = false) { return new Promise((resolve, reject) => { let formData = this.checkBeforeSave() if (!formData) { reject() return false } this.$apis.saceReceipSendInfo(formData).then((res) => { if (res.returnCode == '0000') { this.sendBatchNo = res.content this.$message.success('成功') // this.selectedRowKeys = []; this.cacheDataList = {} if (flag) { this.isEditNewBill = false this.getData() return true } if (!this.isEditNewBill) { // 新增时添加了账单信息 那分页也应该是调账单信息接口 this._getNewBillList() } else { this.getData() } resolve() } else { this.$message.error(res.returnMsg) reject() } }) }) } } } </script> <style lang="less" scoped> .none-label { text-align: right; .ant-form-item-label { opacity: 0; } } .ant-btn .icon-class { .mg-r(10); } .btn-div { justify-content: space-between; } .total-div { gap: 20px; div span:first-child { font-weight: bold; font-family: PingFangSC-Medium, PingFang SC; font-size: 14px; } } </style>