<template> <div class="white_bg burt-container"> <Goback title="EOB详情" /> <!-- form --> <a-form-model ref="form" layout="vertical" :model="form"> <a-row :gutter="30"> <a-col :lg="6" :sm="12"> <a-form-model-item label="保险公司"> <a-select v-model="form.payorCode" placeholder="请选择保险公司" allow-clear :disabled="!isEdit"> <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="6" :sm="12"> <a-form-model-item label="EOB日期"> <a-date-picker format="YYYY年MM月DD日" v-model="form.eobDate" placeholder="选择日期" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="EOB名称"> <a-input v-model="form.eobName" placeholder="请输入EOB名称" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="EOB金额(人民币)"> <a-input type="number" v-model="form.eobAmountCny" placeholder="请输入金额" allow-clear :disabled="!isEdit" /> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="EOB金额(美元)"> <a-input type="number" v-model="form.eobAmountUsd" placeholder="请输入金额" allow-clear :disabled="!isEdit"/> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="EOB状态"> <a-select v-model="form.eobSts" placeholder="请选择" allow-clear :disabled="!isEdit"> <a-select-option v-for="(item,i) in EOBStatusOptions" :key="i" :value="item.value">{{item.name}}</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="备注"> <a-input v-model="form.eobRemark" placeholder="请输入备注" allow-clear :disabled="!isEdit"/> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12" v-if="isEdit"> <a-form-model-item label="EOB文件"> <a-upload name="file" :multiple="false" :showUploadList="true" :fileList="form.eobFile" :customRequest="uploadEvt" :remove="removeFile"> <a-button type="primary"> <Icon name="ssiupload" :size="18" />上传EOB文件 </a-button> </a-upload> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="就诊日期起止"> <a-range-picker format="YYYY-MM-DD" v-model="form.visitTimeStart" :placeholder="['开始时间','结束时间']"/> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="病历号"> <a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear :disabled="!isEdit"/> </a-form-model-item> </a-col> <a-col :lg="6" :sm="12"> <a-form-model-item label="客户名称"> <a-input v-model="form.patientName" placeholder="请输入客户名称" allow-clear :disabled="!isEdit"/> </a-form-model-item> </a-col> <a-col :lg="24" :sm="24" class="none-label" v-if="isEdit"> <a-form-model-item label="button"> <a-button class="mar-left10" type="primary" @click="addNewEvt"> <Icon :name="eobNo?'ssibaocun':'ssiadd'" :size="14" />{{eobNo?'保存EOB':'新建EOB'}} </a-button> </a-form-model-item> </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> <div class="btn-div mar-bottom10 none-label"> <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="addNewBill" v-if="isEdit"> <Icon :name="isEditNewEob?'ssibaocun':'ssiadd'" :size="14" />{{isEditNewEob? '保存账单': '添加账单'}} </a-button> </div> </a-form-model> <!-- table --> <a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false" :row-selection="isEditNewEob?{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }:null"> <template slot="claimsStatus" slot-scope="text"> <span>{{text | formatClaimsStatus}}</span> </template> <template slot="operation" slot-scope="text, record"> <a-button type="link" @click.stop="editEvt(record)">修改</a-button> <!-- <a-button v-if="record.eobNo" type="link" class="danger" @click.stop="delRecord(index)">删除</a-button> --> </template> </a-table> <BurtPagination :pagination="pagination" @pageChange="pageChange" /> <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" :sm="24"> <a-form-model-item label="理赔状态" prop="claimsStatus"> <a-select v-model="editFormObj.claimsStatus" placeholder="请选择理赔状态" allow-clear> <a-select-option v-for="(item,i) in ClaimsStatusOptions" :key="i" :value="item.value">{{item.name}}</a-select-option> </a-select> </a-form-model-item> </a-col> <a-col :lg="12" :xs="24"> <a-form-model-item label="账单回款金额" prop="paidAmountEob"> <a-input v-model.trim="editFormObj.paidAmountEob" placeholder="账单回款金额" type="number" @change="changePaidAmount" /> </a-form-model-item> </a-col> <a-col :lg="12" :xs="24"> <a-form-model-item label="未赔付金额" prop="refuseAmountEob"> <a-input v-model.trim="editFormObj.refuseAmountEob" placeholder="未赔付金额" type="number" /> </a-form-model-item> </a-col> <!-- eccs-1944 --> <!-- <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/CUSTOMER/goback"; import BurtPagination from "@/components/CUSTOMER/pagation"; import moment from "moment"; import {ClaimsStatusOptions,EOBStatusOptions} from '@/utils/utilsdictOptions.js' import mixins from "@/mixins"; export default { data() { return { dialogShow: false, isEdit: false, ClaimsStatusOptions, EOBStatusOptions, eobNo: '', //eob编号 form: { eobDate: '', payorCode: '', eobName: '', eobAmountCny: '', eobAmountUsd: '', eobSts: '', eobRemark: '', eobFile: [] }, dataList: [], isEditNewEob: false, //是否在新建EOB companyOptions: [], //保险公司 pagination: { pageNum: 1, pageSize: 10, total: 0, }, selectedRowKeys: [], // Check here to configure the default column editFormObj: { receiptNo: '', claimsStatus: '', paidAmountEob: '', refuseAmountEob: '' }, editRules: { }, searchForm:{} }; }, mixins: [mixins], components: { Goback, BurtPagination, }, computed: { columns() { const base = [ { title: "账单编号", dataIndex: "receiptNo", ellipsis: true, width: 100 }, { title: "客户姓名", dataIndex: "patientName", ellipsis: true, width: 85 }, { title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 80 }, { title: "就诊日期", dataIndex: "receiptDate", ellipsis: true, width: 110}, { title: "理赔状态", dataIndex: "claimsStatus", ellipsis: true, width: 90, scopedSlots: { customRender: "claimsStatus" } }, { title: "账单金额", dataIndex: "chargeAmount", ellipsis: true, width: 85 }, { title: "折后金额", dataIndex: "actualAmount", ellipsis: true, width: 85 }, { title: "自付金额", dataIndex: "selfpaidAmount", ellipsis: true, width: 85 }, { title: "理赔金额", dataIndex: "eobPaidAmount", ellipsis: true, width: 85 }, { title: "回款金额", dataIndex: "paidAmountEob", ellipsis: true, width: 85 }, { title: "未清金额", dataIndex: "refuseAmountEob", ellipsis: true, width: 85 }, { title: "保险公司欠费", dataIndex: "payorNoPaidAmount", ellipsis: true, width: 110, }, { title: "个人欠费", dataIndex: "perNoPaidAmount", ellipsis: true, width: 85 }, { title: "备注", dataIndex: "sendRemark", ellipsis: true, width: 120 }, ]; if(this.eobNo && !this.isEditNewEob && this.isEdit){ // 编辑状态下已经保存的数据才可进行操作 return base.concat([ { title: "操作", dataIndex: "operation", scopedSlots: { customRender: "operation" }, fixed: "right", width: "170px", align: "center"}, ]) } return base } }, created(){ const { eobNo, isEdit } = this.$route.query this.eobNo = eobNo; this.isEdit = !!isEdit; this._getCompanyOptions(); if(this.eobNo){ let EobDataDetail = localStorage.getItem('EobDataDetail'); let dataDetail = EobDataDetail? JSON.parse(EobDataDetail): {}; if(dataDetail.eobFile){ dataDetail.eobFile = [ { uid: Math.random()*10000, name: dataDetail.eobFile.slice(dataDetail.eobFile.lastIndexOf('/')+1), status: 'done', url: dataDetail.eobFile, } ] }else{ dataDetail.eobFile = []; } this.form = dataDetail; this.getData(); } }, methods: { moment, onSelectChange(selectedRowKeys) { let arr = []; for(let i=0; i<selectedRowKeys.length; i++){ let idx = selectedRowKeys[i]; if(this.dataList[idx].eobNo){ this.$msg.destroy(); this.$message.warning('EOB编号已存在') }else{ arr.push(idx); } } this.selectedRowKeys = arr; }, handlerSearch() { this.pagination.pageNum = 1; let visitTimeStart = this.searchForm.visitTimeStart || [] this.searchData = this.$lodash.cloneDeep({ ...this.searchForm, visitTimeEnd: visitTimeStart[1] ? visitTimeStart[1] + ' 23:59:59' : undefined, visitTimeStart: visitTimeStart[0] ? visitTimeStart[0] + ' 00:00:00' : undefined, }); if(this.isEditNewEob) { // 点击添加EOB之后 分页数据查询就应该调EOB数据 this._getNewEOBList() return true; } this.getData(); }, //回款金额改变 moneyChange(){ this.editFormObj.refuseAmountEob = this.form.eobPaidAmount||0 - this.editFormObj.paidAmountEob||0; }, // 获取保险公司下拉选项 _getCompanyOptions() { this.$apis.GETCOMPANYOPTIONS().then((res) => { this.companyOptions = res.content || []; }); }, // 分页 pageChange(pager) { this.pagination = { ...this.pagination, ...pager } if(this.isEditNewEob) { // 点击添加EOB之后 分页数据查询就应该调EOB数据 this._getNewEOBList() return true; } this.getData(); }, getData() { this.$apis.QUERYEOBRECEIPTLIST({ pageNum: this.pagination.pageNum, pageSize: this.pagination.pageSize, eobNo: this.eobNo, ...this.searchData }) .then((res) => { if (res.returnCode == "0000") { let content = res.content || {}; this.pagination.total = content.total || 0; this.dataList = content.list || []; } else { this.$message.error(res.returnMsg); } }); }, //修改单条数据 editEvt(record) { this.dialogShow = true; this.$nextTick(()=>{ this.editFormObj = { actualAmount: record.actualAmount, // 该条记录的折后金额 id: record.id, receiptNo: record.receiptNo, refuseAmountEob: record.refuseAmountEob || '', claimsStatus: record.claimsStatus || "01", paidAmountEob: record.paidAmountEob || record.actualAmount || "", }; }) }, // 账单汇款金额输入改变 未赔付金额=账单金额-账单回款金额 changePaidAmount() { this.editFormObj.refuseAmountEob = (this.editFormObj.actualAmount || 0) - (this.editFormObj.paidAmountEob || 0) }, //编辑保存 handleEditOK() { this.$refs.editForm.validate((valid) => { if (valid) { this.$apis.SAVEEOBRECEIPTINFO({ ...this.form, eobFile: this.form.eobFile.length>0? this.form.eobFile[0].url: '', eobReceiptList: [this.editFormObj], eobDate: this.form.eobDate?moment(this.form.eobDate).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); } }); } }); }, //删除记录 delRecord(index) { this.$modal.confirm({ title: "删除", content: "确定删除该条记录?", okText: "确认", cancelText: "取消", onOk: () => { this.$apis.DELEOBRECEIPTINFO({ eobNo: this.dataList[index].eobNo, }) .then((res) => { if (res.returnCode == "0000") { this.$message.success("删除成功"); this.dataList.splice(index, 1); } else { this.$message.error(res.returnMsg); } }); }, onCancel: () => {}, }); }, //导出 exportEvt(){ this.$apis.EOBRECEIPLISTEXPORT({ eobNo: this.eobNo }) .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","EOB关联账单.xls"); document.body.appendChild(aLink); aLink.click(); document.body.removeChild(aLink); window.URL.revokeObjectURL(url); }) }, //添加账单 addNewBill(){ if(this.isEditNewEob){ //保存 this.addNewEvt() .then(()=>{ this.isEditNewEob = false; }) }else{ //查询所有未加入的账单 this.pagination.pageNum = 1; this.isEditNewEob = true; this._getNewEOBList(); } }, _getNewEOBList() { this.$apis.QUERYEOBNEEDRECEIPTLIST({ payorCode: this.form.payorCode, pageNum: this.pagination.pageNum, pageSize: this.pagination.pageSize, ...this.searchData }) .then((res) => { if (res.returnCode == "0000") { this.selectedRowKeys = []; let content = res.content || {}; this.pagination.total = content.total || 0; this.dataList = content.list || []; } else { this.$message.error(res.returnMsg); } }); }, //新建/保存EOB addNewEvt(){ let visitTimeStart = this.form.visitTimeStart || [] let eobReceiptList = []; this.dataList.forEach((item,index)=>{ if(this.selectedRowKeys.indexOf(index)!=-1){ eobReceiptList.push({ id: item.id, receiptNo: item.receiptNo, refuseAmountEob: item.refuseAmountEob, paidSts: item.paidSts, paidAmountEob: item.paidAmountEob, }) } }) let formData = { ...this.form, eobFile: this.form.eobFile.length>0? this.form.eobFile[0].url: '', eobReceiptList: eobReceiptList, eobDate: this.form.eobDate?moment(this.form.eobDate).format('YYYY-MM-DD 00:00:00'):'', eobNo: this.eobNo, visitTimeEnd: visitTimeStart[1] ? moment(visitTimeStart[1]).format('YYYY-MM-DD') + ' 23:59:59' : undefined, visitTimeStart: visitTimeStart[0] ? moment(visitTimeStart[0]).format('YYYY-MM-DD') + ' 00:00:00' : undefined, } return new Promise((resolve,reject)=>{ this.$apis.SAVEEOBRECEIPTINFO(formData) .then((res) => { if (res.returnCode == "0000") { this.eobNo = res.content; this.$message.success("成功"); this.selectedRowKeys = []; this.getData(); resolve(); } else { this.$message.error(res.returnMsg); reject(); } }); }) }, removeFile(){ return new Promise((resolve)=>{ this.form.eobFile = []; resolve(); }); }, //上传 uploadEvt(fileData){ let formData = new FormData(); formData.append("file", fileData.file); this.$apis.UPLOADIMG(formData) .then((res)=>{ fileData.onSuccess(); let fileList = [ { uid: Math.random()*10000, name: res.title, status: 'done', url: res.url, } ] this.form.eobFile = fileList; }) } }, }; </script> <style lang="less" scoped> .none-label { text-align: right; .ant-form-item-label { opacity: 0; } } .btn-div{ } .ant-btn .icon-class { .mg-r(10); } .success.ant-btn-link { color: #4cd964; } .danger.ant-btn-link { color: #ff3b30; } </style>