Commit 54a5fa27 authored by 朱彩云's avatar 朱彩云

Merge branch 'func-eccs-2127' into 'master'

ECCS 2127 商保系统回款多字段修改&&样式优化

See merge request !35
parents c816ef8f d29d1b66
......@@ -15,5 +15,7 @@ export default {
queryBackReceiptList: "/backstage/auth/queryBackReceiptList", //回销关联账单列表查询
queryReceiptInfoList: "/backstage/auth/queryReceiptInfoList", //回销账单列表查询
deleteReceiptRecord: "/backstage/auth/deleteBackReceipt", // 删除已关联账单
exportBackMoneyReport: "/backstage/auth/backMoneyListExport", // 回款列表导出
exportBackReceiptList: "/backstage/auth/exportBackReceiptList", // 关联账单列表导出
};
......@@ -67,6 +67,16 @@ const DELETERECEIPTRECORD = (data) => {
return req.post(apis.deleteReceiptRecord, data);
};
// 回款列表导出
const EXPORTBACKMONEYREPORT = (data) => {
return req.post(apis.exportBackMoneyReport, data, { responseType: "blob" });
};
// 关联账单导出
const EXPORTBACKRECEIPTLIST = (data) => {
return req.post(apis.exportBackReceiptList, data, { responseType: "blob" });
};
// 对象数组
export default {
QUERYEOBLIST,
......@@ -82,5 +92,7 @@ export default {
EOBRECEIPLISTEXPORT,
QUERYBACKRECEIPTLIST,
QUERYBACKRECEIPTINFOLIST,
DELETERECEIPTRECORD
DELETERECEIPTRECORD,
EXPORTBACKMONEYREPORT,
EXPORTBACKRECEIPTLIST
};
\ No newline at end of file
//性别
const sexOptions = [{
name: '',
value: 'M'
}, {
name: '',
value: 'F'
}];
//寄送状态
const SendStatusOptions = [
{ name: '未寄送', value: '1'},
{ name: '寄送', value: '2'},
{ name: '待寄送', value: '3'},
];
//理赔状态
const ClaimsStatusOptions = [
{ name: '赔付', value: '01'},
{ name: '部分赔付', value: '02'},
{ name: '拒赔', value: '03'},
{ name: '补充材料', value: '04'},
];
//EOB状态
const EOBStatusOptions = [
{ name: '待回款', value: '1'},
{ name: '已回款', value: '2'},
{ name: '未回款', value: '3'}
];
//申请状态
const ApplyStatusOptions = [
{ name: '申请中', value: '01'},
{ name: '预授权批准', value: '02'},
{ name: '预授权拒绝', value: '03'},
{ name: '预授权调查', value: '04'},
];
//审批结果
const ApproveStatusOptions = [
{ name: '未通过', value: '1'},
{ name: '已通过', value: '2'}
];
//monetUnit
const MoneyUnitOptions = [
{ name: '', value: '01'},
{ name: '美元', value: '02'},
{ name: '英镑', value: '03'},
{ name: '欧元', value: '04'},
];
module.exports = {
sexOptions,
SendStatusOptions,
ClaimsStatusOptions,
EOBStatusOptions,
ApplyStatusOptions,
ApproveStatusOptions,
MoneyUnitOptions,
//性别
const sexOptions = [{
name: '',
value: 'M'
}, {
name: '',
value: 'F'
}];
//寄送状态
const SendStatusOptions = [
{ name: '未寄送', value: '1'},
{ name: '寄送', value: '2'},
{ name: '待寄送', value: '3'},
];
//理赔状态
const ClaimsStatusOptions = [
{ name: '赔付', value: '01'},
{ name: '部分赔付', value: '02'},
{ name: '拒赔', value: '03'},
{ name: '补充材料', value: '04'},
];
//EOB状态
const EOBStatusOptions = [
{ name: '待回款', value: '1'},
{ name: '已回款', value: '2'},
{ name: '未回款', value: '3'}
];
//申请状态
const ApplyStatusOptions = [
{ name: '申请中', value: '01'},
{ name: '预授权批准', value: '02'},
{ name: '预授权拒绝', value: '03'},
{ name: '预授权调查', value: '04'},
];
//审批结果
const ApproveStatusOptions = [
{ name: '未通过', value: '1'},
{ name: '已通过', value: '2'}
];
//monetUnit
const MoneyUnitOptions = [
{ name: '', value: '01'},
{ name: '美元', value: '02'},
{ name: '英镑', value: '03'},
{ name: '欧元', value: '04'},
];
// 账单类型
const receiptTypeOptions = [
{ name: '收费', value: '1'},
{ name: '退费', value: '2'},
];
module.exports = {
sexOptions,
SendStatusOptions,
ClaimsStatusOptions,
EOBStatusOptions,
ApplyStatusOptions,
ApproveStatusOptions,
MoneyUnitOptions,
receiptTypeOptions
}
\ No newline at end of file
<template>
<!-- -账单明细 -->
<div class="white_bg burt-container custom-info">
<Goback title="账单详情" />
<a-form-model ref="form" layout="vertical" :model="form">
<a-row :gutter="30">
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="病历号">
<a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="客户姓名">
<a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="客户类型">
<a-select v-model="form.patientType" placeholder="请选择客户类型" allowClear>
<a-select-option v-for="item in patientTypeOptions" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="保险公司">
<a-select v-model="form.payorId" placeholder="请选择保险公司" allowClear>
<a-select-option v-for="item in companyOptions" :key="item.corpCode" :value="item.id">
{{ item.longName }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :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 :xl="5" :lg="6" :sm="12">
<a-form-model-item label="就诊时间">
<a-date-picker value-format="YYYY-MM-DD 00:00:00" v-model="form.receiptDate" placeholder="就诊时间" />
</a-form-model-item>
</a-col>
<a-col :xl="3" :lg="6" :sm="12">
<a-form-model-item label="支付方式">
<a-select v-model="form.paymentCode" placeholder="请选择支付方式" allowClear>
<a-select-option v-for="item in paymentOptions" :key="item.code" :value="item.code" allow-clear>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="16" :lg="12" :sm="12" class="none-label">
<a-form-model-item label="button">
<!-- <a-button>更新数据</a-button>
<a-button class="mar-left10" type="primary" @click="addNewCharge">
<Icon name="ssiadd" :size="14" />新建预授权</a-button> -->
<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-form-model-item>
</a-col>
</a-row>
</a-form-model>
<a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false">
<template slot="operation" slot-scope="record">
<a-button type="link" @click.stop="editEvt(record)">修改</a-button>
<a-popconfirm title="你确定要关闭吗?" ok-text="确定" cancel-text="取消" @confirm="deleteData" >
<a-button type="link" class="danger">删除</a-button>
</a-popconfirm>
</template>
<template slot="footer">
<div class="total">总计: <span>{{form.chargeAmount||0}}</span></div>
</template>
</a-table>
<!--分页-->
<BurtPagination :pagination="pagination" @pageChange="_getChargeListDetail" />
<div class="title-div">费用支付明细</div>
<a-table :columns="payColumns" :data-source="payDataList" :scroll="{ x: true }" :pagination="false" class="payTable">
<template slot="paymentType" slot-scope="text">
<a-button class="danger">{{ text | payStyleFilters }}</a-button>
</template>
</a-table>
<a-row :gutter="30">
<a-col :sm="24">
<div class="btn-div flex">
<a-button type="primary" @click="receiptEvt">
<Icon name="ssibaocun" :size="14" />结算</a-button>
<a-button type="primary" class="mar-left10" @click="printEvt">
<Icon name="ssidayinji_o" :size="14" />打印</a-button>
</div>
</a-col>
</a-row>
<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-col>
</a-row>
</a-form-model>
</a-modal>
</div>
</template>
<script>
import Goback from "@/components/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import { mapState } from "vuex"
export default {
data() {
const columns = [
{ title: "项目", dataIndex: "itemcatDesc", width: 180 },
{ title: "项目明细", dataIndex: "itemDesc", width: 180},
{ title: "单价", dataIndex: "itemPrice", width: 120},
{ title: "数量", dataIndex: "itemQty", width: 180 },
{ title: "单位", dataIndex: "itemUnitDesc", width: 180 },
{ title: "金额", dataIndex: "chargeAmount", width: 180 },
{ title: "折扣(%)", dataIndex: "discountAmount", width: 180 },
{ title: "折后金额", dataIndex: "actualAmount", width: 180 },
{ title: "减免金额", dataIndex: "reduceAmount", width: 180 },
{ title: "实际金额", dataIndex: "paidAmount", width: 180 },
// { title: "免赔额", dataIndex: "deductible", width: 180 },
// { title: "自付额", dataIndex: "selfPaid", width: 180 },
// { title: "其他费用", dataIndex: "otherPaid", width: 180 },
// { title: "理赔金额", dataIndex: "actualPaid", width: 180 },
// { title: "操作", key: "operation", width: "175px", fixed: "right", scopedSlots: { customRender: "operation" },align: "center"},
];
const payColumns = [
{ title: "免赔额", dataIndex: "deductible", width: 180 },
{ title: "自付额", dataIndex: "selfPaid", width: 180 },
{ title: "其他费用", dataIndex: "otherPaid", width: 180 },
{ title: "个人支付", dataIndex: "personalPaid", width: 180 },
{ title: "理赔金额", dataIndex: "ciPaid", width: 180 },
{ title: "支付方式", dataIndex: "paymentType", width: 180, scopedSlots: { customRender: "paymentType" }},
];
return {
dialogShow: false,
receiptNo: "",
columns,
payColumns,
form: {},
pageForm: {
doctorCode: "",
patientName: "",
mrnNo: "",
paymentCode: "",
payorId: 0,
receiptDate: ""
},
patientTypeOptions: [
{
name: "商保",
code: 1,
},
], //客户类型
companyOptions: [], //保险公司
doctorOptions: [], //就诊医生
paymentOptions: [
{
name: "商保",
code: 1,
},
], //支付方式
dataList: [],
pager: {
pageNum: 1,
pageSize: 10,
},
payDataList: [],
pagination: {
pageNum: 1,
pageSize: 10,
total: 0,
},
editFormObj: {
id: "",
mrnNo: '',
patientName: '',
},
editRules: {
mrnNo: [{ required: true, message: "病历号", trigger: "blur" }],
patientName: [{ required: true, message: "客户姓名", trigger: "blur" }],
},
};
},
components: {
Goback,
BurtPagination,
},
computed: {
...mapState({
userInfo: (state) => state.common.userInfo
})
},
filters: {
payStyleFilters(value) {
const styleMap = {
1: "支付宝",
2: "微信",
3: "现金",
};
return styleMap[value];
},
},
created() {
const { receiptNo } = this.$route.query;
this.receiptNo = receiptNo || "";
let chargeQueryDetail = localStorage.getItem('chargeQueryDetail');
this.form = chargeQueryDetail? JSON.parse(chargeQueryDetail): {};
this._getChargeListDetail();
this._getCompanyOptions();//获取保险公司下拉选项
this._getDoctorListNoPage();//获取看诊医生下拉选项
this._getReceiptPaymentDetail(); //费用支付明细
},
methods: {
// 获取列表数据
_getChargeListDetail() {
const data = {
receiptNo: this.receiptNo,
...this.pager,
};
this.$apis.GETCHARGELISTDETAIL(data).then((res) => {
console.log("11111111111获取table信息=", res);
if (res.returnCode == "0000") {
this.dataList = (res.content && res.content.list) || [];
// this.pager.total = (res.content && res.content.total) || 0;
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取保险公司下拉选项
_getCompanyOptions() {
this.$apis.GETCOMPANYOPTIONS().then((res) => {
console.log("获取保险公司下拉选项", res);
if (res.returnCode == "0000") {
this.companyOptions = res.content || [];
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取看诊医生下拉选项
_getDoctorListNoPage(){
this.$apis.GETDOCTORlISTNOPAGE({"providerId": this.userInfo.providerId}).then((res) => {
if (res.returnCode === "0000") {
this.doctorOptions = res.content || [];
}else{
this.$message.success(res.returnMsg);
}
});
},
// 获取费用支付明细
_getReceiptPaymentDetail() {
const params = {
receiptNo: this.receiptNo,
...this.payPager,
};
this.$apis.GETRECEIPTPAYMENTDETAIL(params).then((res) => {
console.log("获取费用支付明细", res);
if (res.returnCode == "0000") {
let content = res.content || {};
this.payDataList = content;
} else {
this.$message.error(res.returnMsg);
}
});
},
//账单结算
receiptEvt(){
this.$modal.confirm({
title: "结算",
content: "确定结算该账单?",
okText: "确定",
cancelText: "取消",
onOk: () => {
this.$apis.RECEIPTSETTLEMENT({
id: this.form.id
}).then((res) => {
if (res.returnCode === "0000") {
this.$message.success('结算成功');
this.pagination.pageNum = 1;
this._getChargeListDetail();
}else{
this.$message.error(res.returnMsg);
}
});
},
});
},
//打印
printEvt(){
this.$apis.RECEIPTPRINT({
id: this.form.id
}).then(res => {
if(res.returnCode == '0000'){
let url = res.content;
let link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('target', "_blank");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}else{
this.$message.error(res.returnMsg);
}
})
},
// 重置
handlerReset() {
const { mrnNo, patientName } = this.form;
this.form = {mrnNo, patientName};
},
editEvt(record) {
this.editFormObj = {
id: record.id || "",
};
this.dialogShow = true;
},
//编辑保存
handleEditOK() {
this.$refs.editForm.validate((valid) => {
if (valid) {
console.log(11)
}
});
},
handlerSearch() {
this.pagination.pageNum = 1;
this.pageForm = this.$lodash.cloneDeep(this.form);
this._getChargeListDetail();
},
deleteData() {
this.$message.success("删除成功");
},
// 新建账单信息
addNewCharge() {
// this.$router.push("/customer/edit");
},
},
};
</script>
<style lang="less" scoped>
.none-label {
text-align: right;
.ant-form-item-label {
opacity: 0;
}
}
.ant-btn .icon-class {
.mg-r(10);
}
.title-div {
line-height: 56px;
color: #252631;
font-weight: bold;
border-bottom: 1px solid #eee;
}
.payTable{
.ant-btn{
border-color: #1890ff;
color: #1890ff;
}
}
.btn-div{
margin-top: 10px;
justify-content: flex-end;
}
.total{
font-weight: 600;
span{
color: red;
}
}
</style>
<template>
<!-- -账单明细 -->
<div class="white_bg burt-container custom-info">
<Goback title="账单详情" />
<a-form-model ref="form" layout="vertical" :model="form">
<a-row :gutter="30">
<a-col :xl="5" :lg="6" :sm="12">
<a-form-model-item label="病历号">
<a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="5" :lg="6" :sm="12">
<a-form-model-item label="客户姓名">
<a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="5" :lg="6" :sm="12">
<a-form-model-item label="保险公司">
<a-select v-model="form.payorId" placeholder="请选择保险公司" allowClear>
<a-select-option v-for="item in companyOptions" :key="item.corpCode" :value="item.id">
{{ item.longName }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="5" :lg="6" :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 :xl="5" :lg="6" :sm="12">
<a-form-model-item label="收费时间">
<a-date-picker value-format="YYYY-MM-DD 00:00:00" v-model="form.receiptDate" placeholder="就诊时间" />
</a-form-model-item>
</a-col>
<a-col :xl="16" :lg="12" :sm="12" class="none-label">
<a-form-model-item label="button">
<!-- <a-button>更新数据</a-button>
<a-button class="mar-left10" type="primary" @click="addNewCharge">
<Icon name="ssiadd" :size="14" />新建预授权</a-button> -->
<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-form-model-item>
</a-col>
</a-row>
</a-form-model>
<a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false">
<template slot="operation" slot-scope="record">
<a-button type="link" @click.stop="editEvt(record)">修改</a-button>
<a-popconfirm title="你确定要关闭吗?" ok-text="确定" cancel-text="取消" @confirm="deleteData" >
<a-button type="link" class="danger">删除</a-button>
</a-popconfirm>
</template>
<template slot="footer">
<div class="total">总计: <span>{{sumAmount||0}}</span></div>
</template>
</a-table>
<!--分页-->
<BurtPagination :pagination="pagination" @pageChange="_getChargeListDetail" />
<div class="title-div">费用支付明细</div>
<a-table :columns="payColumns" :data-source="payDataList" :scroll="{ x: true }" :pagination="false" class="payTable">
<template slot="paymentType" slot-scope="text">
<a-button class="danger">{{ text | payStyleFilters }}</a-button>
</template>
</a-table>
<a-row :gutter="30">
<a-col :sm="24">
<div class="btn-div flex">
<a-button type="primary" @click="receiptEvt">
<Icon name="ssibaocun" :size="14" />结算</a-button>
<a-button type="primary" class="mar-left10" @click="printEvt">
<Icon name="ssidayinji_o" :size="14" />打印</a-button>
</div>
</a-col>
</a-row>
<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-col>
</a-row>
</a-form-model>
</a-modal>
</div>
</template>
<script>
import Goback from "@/components/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import { mapState } from "vuex"
export default {
data() {
const columns = [
{ title: "项目", dataIndex: "itemcatDesc", width: 180 },
{ title: "项目明细", dataIndex: "itemDesc", width: 180},
{ title: "单价", dataIndex: "itemPrice", width: 120},
{ title: "数量", dataIndex: "itemQty", width: 180 },
{ title: "单位", dataIndex: "itemUnitDesc", width: 180 },
{ title: "金额", dataIndex: "chargeAmount", width: 180 },
{ title: "折扣(%)", dataIndex: "discountAmount", width: 180 },
// { title: "折后金额", dataIndex: "actualAmount", width: 180 },
{ title: "减免金额", dataIndex: "reduceAmount", width: 180 },
{ title: "实际金额", dataIndex: "paidAmount", width: 180 },
// { title: "免赔额", dataIndex: "deductible", width: 180 },
// { title: "自付额", dataIndex: "selfPaid", width: 180 },
// { title: "其他费用", dataIndex: "otherPaid", width: 180 },
// { title: "理赔金额", dataIndex: "actualPaid", width: 180 },
// { title: "操作", key: "operation", width: "175px", fixed: "right", scopedSlots: { customRender: "operation" },align: "center"},
];
const payColumns = [
{ title: "免赔额", dataIndex: "deductible", width: 180 },
{ title: "自付额", dataIndex: "selfPaid", width: 180 },
{ title: "其他费用", dataIndex: "otherPaid", width: 180 },
{ title: "个人支付", dataIndex: "personalPaid", width: 180 },
{ title: "理赔金额", dataIndex: "ciPaid", width: 180 },
{ title: "支付方式", dataIndex: "paymentType", width: 180, scopedSlots: { customRender: "paymentType" }},
];
return {
dialogShow: false,
receiptNo: "",
columns,
payColumns,
form: {},
pageForm: {
doctorCode: "",
patientName: "",
mrnNo: "",
paymentCode: "",
payorId: 0,
receiptDate: ""
},
patientTypeOptions: [
{
name: "商保",
code: 1,
},
], //客户类型
companyOptions: [], //保险公司
doctorOptions: [], //就诊医生
paymentOptions: [
{
name: "商保",
code: 1,
},
], //支付方式
dataList: [],
pager: {
pageNum: 1,
pageSize: 10,
},
payDataList: [],
pagination: {
pageNum: 1,
pageSize: 10,
total: 0,
},
editFormObj: {
id: "",
mrnNo: '',
patientName: '',
},
editRules: {
mrnNo: [{ required: true, message: "病历号", trigger: "blur" }],
patientName: [{ required: true, message: "客户姓名", trigger: "blur" }],
},
};
},
components: {
Goback,
BurtPagination,
},
computed: {
...mapState({
userInfo: (state) => state.common.userInfo
}),
sumAmount() {
let total = 0
this.dataList.forEach(item => {
total += Number(item.paidAmount || 0)
})
return Number(total.toFixed(2))
}
},
filters: {
payStyleFilters(value) {
const styleMap = {
1: "支付宝",
2: "微信",
3: "现金",
};
return styleMap[value];
},
},
created() {
const { receiptNo } = this.$route.query;
this.receiptNo = receiptNo || "";
let chargeQueryDetail = localStorage.getItem('chargeQueryDetail');
this.form = chargeQueryDetail? JSON.parse(chargeQueryDetail): {};
console.log(this.form)
this._getChargeListDetail();
this._getCompanyOptions();//获取保险公司下拉选项
this._getDoctorListNoPage();//获取看诊医生下拉选项
this._getReceiptPaymentDetail(); //费用支付明细
},
methods: {
// 获取列表数据
_getChargeListDetail() {
const data = {
receiptNo: this.receiptNo,
basereceiptId: this.form.externalId,
...this.pager,
};
this.$apis.GETCHARGELISTDETAIL(data).then((res) => {
console.log("11111111111获取table信息=", res);
if (res.returnCode == "0000") {
this.dataList = (res.content && res.content.list) || [];
// this.pager.total = (res.content && res.content.total) || 0;
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取保险公司下拉选项
_getCompanyOptions() {
this.$apis.GETCOMPANYOPTIONS().then((res) => {
console.log("获取保险公司下拉选项", res);
if (res.returnCode == "0000") {
let existPayor = false
this.companyOptions = res.content.map(item => {
item.id = Number(item.id)
if(item.id === this.form.payorId) {
existPayor = true
}
return item
}) || [];
if(!existPayor) {
this.companyOptions.push({
id: this.form.payorId,
longName: this.form.payorName
})
}
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取看诊医生下拉选项
_getDoctorListNoPage(){
this.$apis.GETDOCTORlISTNOPAGE({"providerId": this.userInfo.providerId}).then((res) => {
if (res.returnCode === "0000") {
this.doctorOptions = res.content || [];
}else{
this.$message.success(res.returnMsg);
}
});
},
// 获取费用支付明细
_getReceiptPaymentDetail() {
const params = {
receiptNo: this.receiptNo,
...this.payPager,
};
this.$apis.GETRECEIPTPAYMENTDETAIL(params).then((res) => {
console.log("获取费用支付明细", res);
if (res.returnCode == "0000") {
let content = res.content || {};
this.payDataList = content;
} else {
this.$message.error(res.returnMsg);
}
});
},
//账单结算
receiptEvt(){
this.$modal.confirm({
title: "结算",
content: "确定结算该账单?",
okText: "确定",
cancelText: "取消",
onOk: () => {
this.$apis.RECEIPTSETTLEMENT({
id: this.form.id
}).then((res) => {
if (res.returnCode === "0000") {
this.$message.success('结算成功');
this.pagination.pageNum = 1;
this._getChargeListDetail();
}else{
this.$message.error(res.returnMsg);
}
});
},
});
},
//打印
printEvt(){
this.$apis.RECEIPTPRINT({
id: this.form.id
}).then(res => {
if(res.returnCode == '0000'){
let url = res.content;
let link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('target', "_blank");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}else{
this.$message.error(res.returnMsg);
}
})
},
// 重置
handlerReset() {
const { mrnNo, patientName } = this.form;
this.form = {mrnNo, patientName};
},
editEvt(record) {
this.editFormObj = {
id: record.id || "",
};
this.dialogShow = true;
},
//编辑保存
handleEditOK() {
this.$refs.editForm.validate((valid) => {
if (valid) {
console.log(11)
}
});
},
handlerSearch() {
this.pagination.pageNum = 1;
this.pageForm = this.$lodash.cloneDeep(this.form);
this._getChargeListDetail();
},
deleteData() {
this.$message.success("删除成功");
},
// 新建账单信息
addNewCharge() {
// this.$router.push("/customer/edit");
},
},
};
</script>
<style lang="less" scoped>
.none-label {
text-align: right;
.ant-form-item-label {
opacity: 0;
}
}
.ant-btn .icon-class {
.mg-r(10);
}
.title-div {
line-height: 56px;
color: #252631;
font-weight: bold;
border-bottom: 1px solid #eee;
}
.payTable{
.ant-btn{
border-color: #1890ff;
color: #1890ff;
}
}
.btn-div{
margin-top: 10px;
justify-content: flex-end;
}
.total{
font-weight: 600;
span{
color: red;
}
}
</style>
<template>
<!-- 收费查询-账单查询 -->
<div class="white_bg burt-container custom-info">
<!-- form -->
<a-form-model ref="form" layout="vertical" :model="form">
<a-row :gutter="30">
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="病历号">
<a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="客户姓名">
<a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="客户类型">
<a-select v-model="form.patientType" placeholder="请选择客户类型" allowClear>
<a-select-option v-for="item in patientTypeOptions" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :sm="12">
<a-form-model-item label="保险公司">
<a-select v-model="form.payorId" placeholder="请选择保险公司" allowClear>
<a-select-option v-for="item in companyOptions" :key="item.corpCode" :value="item.id">
{{ item.longName }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="4" :lg="6" :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 :xl="5" :lg="6" :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 :xl="3" :lg="6" :sm="12">
<a-form-model-item label="支付方式">
<a-select v-model="form.paymentCode" placeholder="请选择支付方式" allowClear>
<a-select-option v-for="item in paymentOptions" :key="item.code" :value="item.code" allow-clear>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="3" :lg="6" :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 :xl="3" :lg="6" :sm="12">
<a-form-model-item label="是否已关联EOB">
<a-select v-model="form.isEob" placeholder="请选择是否已关联EOB" 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 :xl="3" :lg="6" :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 :xl="6" :lg="3" :sm="3" class="none-label">
<a-form-model-item label="button">
<!-- <a-button>更新数据</a-button> -->
<!-- <a-button class="mar-left10" type="primary" @click="addNewCharge">
<Icon name="ssiadd" :size="14" />新建预授权</a-button> -->
<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-row>
</a-form-model>
<!-- 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" @click.stop="receiptEvt(record)">结算</a-button> -->
<a-button type="link" class="success" @click.stop="detailEvt(record)">查看</a-button>
<!-- <a-popconfirm title="你确定要关闭吗?" ok-text="确定" cancel-text="取消" @confirm="deleteData" >
<a-button type="link" class="danger">删除</a-button>
</a-popconfirm> -->
</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>
</a-table>
<!--分页-->
<BurtPagination :pagination="pagination" @pageChange="_getChargeList" />
</div>
</template>
<script>
import BurtPagination from "@/components/CUSTOMER/pagation";
import { mapState } from "vuex"
import moment from "moment";
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: "mrnNo",width: 180},
{ title: "客户姓名",dataIndex: "patientName",width: 120,},
{ title: "客户类型", dataIndex: "patientType", width: 180 },
{ title: "保险公司", dataIndex: "payorName", width: 200 },
{ title: "就诊医生", dataIndex: "doctorName", width: 150 },
{ title: "是否已关联寄送单", dataIndex: "isSend", width: 180,scopedSlots: { customRender: "isSend" } },
{ title: "是否已关联EOB", dataIndex: "isEob", width: 180,scopedSlots: { customRender: "isEob" } },
{ title: "是否已回款", dataIndex: "isEobBack", width: 180,scopedSlots: { customRender: "isEobBack" } },
{ title: "账单金额", dataIndex: "chargeAmount", width: 180 },
{ title: "折扣(%)", dataIndex: "discountAmount", width: 180 },
{ title: "折后金额", dataIndex: "actualAmount", width: 180 },
{ title: "客户自付", dataIndex: "selfpaidAmount", width: 180 },
{ title: "减免金额", dataIndex: "reduceAmount1", width: 180 },
{ title: "理赔金额", dataIndex: "claimsAmount", width: 180 },
{ title: "保险已支付", dataIndex: "insurancePaidAmount", width: 180 },
{ title: "未清余额", dataIndex: "outstandAmount", width: 180 },
{ title: "保险欠费", dataIndex: "insuranceArrearsAmount", width: 180 },
{ title: "个人欠费", dataIndex: "personalArrearsAmount", width: 180 },
{ title: "发票号码", dataIndex: "receiptNo", width: 180 },
{ title: "操作", key: "operation", width: "175px",fixed: "right",scopedSlots: { customRender: "operation" }, align: "center"},
];
return {
columns,
form: {},
pageForm: {
doctorCode: "",
patientName: "",
mrnNo: "",
paymentCode: "",
payorId: 0,
visitTimeEnd: "",
visitTimeStart: "",
},
patientTypeOptions: [
{
name: "商保",
code: 1,
},
], //客户类型
companyOptions: [], //保险公司
doctorOptions: [], //就诊医生
paymentOptions: [
{
name: "商保",
code: 1,
},
], //支付方式
dataList: [],
pagination: {
pageNum: 1,
pageSize: 10,
total: 0,
},
};
},
components: {
BurtPagination,
},
computed: {
...mapState({
userInfo: (state) => state.common.userInfo
})
},
created() {
this._getCompanyOptions();
this._getDoctorListNoPage();//获取医生下拉选项
},
methods: {
moment,
// 获取列表数据
_getChargeList() {
const data = {
...this.pageForm,
...this.pagination,
};
this.$apis.GETCHARGELIST(data).then((res) => {
let content = res.content || {};
this.dataList = content.list || [];
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] + ' 00:00:00'
this.form.visitTimeEnd = 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();
});
},
// 新建账单信息
addNewCharge() {
// this.$router.push("/customer/edit");
},
//导出报表
exportExcel(){
let filter = {
...this.form,
}
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);
}
</style>
<template>
<!-- 收费查询-账单查询 -->
<div class="white_bg burt-container custom-info">
<!-- form -->
<a-form-model ref="form" layout="vertical" :model="form">
<a-row :gutter="30">
<a-col :xl="6" :lg="6" :sm="12">
<a-form-model-item label="病历号">
<a-input v-model="form.mrnNo" placeholder="请输入病历号" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="6" :lg="6" :sm="12">
<a-form-model-item label="客户姓名">
<a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="6" :lg="6" :sm="12">
<a-form-model-item label="保险公司">
<a-select v-model="form.payorId" placeholder="请选择保险公司" allowClear>
<a-select-option v-for="item in companyOptions" :key="item.corpCode" :value="item.id">
{{ item.longName }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :xl="6" :lg="6" :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 :xl="6" :lg="6" :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 :xl="6" :lg="6" :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 :xl="6" :lg="6" :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 :xl="6" :lg="6" :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 :xl="6" :lg="6" :sm="12">
<a-form-model-item label="账单编号">
<a-input v-model="form.receiptNo" placeholder="请输入账单编号" allow-clear />
</a-form-model-item>
</a-col>
<a-col :xl="8" :lg="3" :sm="3" class="none-label">
<a-form-model-item label="button">
<!-- <a-button>更新数据</a-button> -->
<!-- <a-button class="mar-left10" type="primary" @click="addNewCharge">
<Icon name="ssiadd" :size="14" />新建预授权</a-button> -->
<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-row>
</a-form-model>
<!-- 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" @click.stop="receiptEvt(record)">结算</a-button> -->
<a-button type="link" class="success" @click.stop="detailEvt(record)">查看</a-button>
<!-- <a-popconfirm title="你确定要关闭吗?" ok-text="确定" cancel-text="取消" @confirm="deleteData" >
<a-button type="link" class="danger">删除</a-button>
</a-popconfirm> -->
</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>
</a-table>
<!--分页-->
<BurtPagination :pagination="pagination" @pageChange="_getChargeList" />
</div>
</template>
<script>
import BurtPagination from "@/components/CUSTOMER/pagation";
import { mapState } from "vuex"
import moment from "moment";
import { receiptTypeOptions } from '@/utils/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: "mrnNo",width: 180},
{ title: "客户姓名",dataIndex: "patientName",width: 120,},
{ title: "保险公司", dataIndex: "payorName", 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 },
{ title: "未清余额", dataIndex: "residueBackAmount", width: 180 },
{ title: "操作", key: "operation", width: "175px",fixed: "right",scopedSlots: { customRender: "operation" }, align: "center"},
];
return {
columns,
receiptTypeOptions,
form: {},
pageForm: {
doctorCode: "",
patientName: "",
mrnNo: "",
paymentCode: "",
payorId: 0,
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': '退费'
}
};
},
components: {
BurtPagination,
},
computed: {
...mapState({
userInfo: (state) => state.common.userInfo
})
},
created() {
this._getCompanyOptions();
this._getDoctorListNoPage();//获取医生下拉选项
},
methods: {
moment,
// 获取列表数据
_getChargeList() {
const data = {
...this.pageForm,
...this.pagination,
};
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] + ' 00:00:00'
this.form.visitTimeEnd = 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();
});
},
// 新建账单信息
addNewCharge() {
// this.$router.push("/customer/edit");
},
//导出报表
exportExcel(){
let filter = {
...this.form,
}
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);
}
</style>
<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 :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="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="addNewCharge">
<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 :sm="24" class="none-label">
<div class="btn-div flex">
<span></span>
<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="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="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/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import moment from 'moment'
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: 100,
total: 0,
},
editFormObj: {
payorCode: '',
sendSts: '',
sendDate: '',
trackingNo: '',
sendRemark: '',
},
editRules: {
sendDate: [{ required: true, message: "请选择寄送日期", trigger: "change" }],
trackingNo: [{ required: true, message: "请输入寄送单号", trigger: "blur" }],
},
};
},
components: {
Goback,
BurtPagination,
},
computed: {
columns() {
const base = [
{ title: "就诊日期", dataIndex: "receiptDate", width: 160,scopedSlots: { customRender: "receiptDate" } },
{ title: "病历号", dataIndex: "mrnNo", key:"mrnNo",align:'center', width: 136},
{ title: "客户姓名", dataIndex: "patientName", width: 160 },
{ title: "保险卡号", dataIndex: "memberCardNo", width: 180 },
{ title: "客户生日", dataIndex: "birthday", width: 160 },
{ title: "账单编号", dataIndex: "receiptNo", key:"receiptNo",align:'center', width: 136},
{ title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 250 },
{ title: "应收金额", dataIndex: "chargeAmount", width: 100, align: 'center' },
{ title: "折扣金额", dataIndex: "discountAmount", width: 100, align: 'center' },
{ title: "减免金额", dataIndex: "discountAmount2", width: 100, align: 'center' },
{ title: "客户自付", dataIndex: "selfpaidAmount", width: 100, align: 'center', customRender: (val, row) => {
return <a-input v-model={row.selfpaidAmount} allow-clear />
} },
{ title: "理赔金额", dataIndex: "paidAmount", width: 100, 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 = [];
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);
}
}
this.selectedRowKeys = arr;
},
// 分页回调
getPageData(pager) {
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
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取保险公司下拉选项
_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.SAVERECEIPSENDINFO({
...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 || []
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.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(){
this.$apis.SENDRECEIPTLISTEXPORT({
sendBatchNo: this.sendBatchNo || 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","寄送账单.xls");
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink);
window.URL.revokeObjectURL(url);
})
},
//添加账单
addNewBill(){
// this.isEditNewBill = !this.isEditNewBill;
if(this.isEditNewBill){ //保存
this.addNewCharge()
.then(()=>{
this.isEditNewBill = false;
})
}else{ //查询所有未加入的账单
this.pagination.pageNum = 1;
this.isEditNewBill = true;
this.cacheDataList = {}
this._getNewBillList()
}
},
_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(){
return new Promise((resolve,reject)=>{
let formData = this.checkBeforeSave()
if(!formData){
reject()
return false;
}
this.$apis.SAVERECEIPSENDINFO(formData)
.then((res) => {
if (res.returnCode == "0000") {
this.sendBatchNo = res.content;
this.$message.success("成功");
this.selectedRowKeys = [];
this.cacheDataList = {}
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;
}
</style>
<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 :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="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="addNewCharge">
<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 :sm="24" class="none-label">
<div class="btn-div flex">
<span></span>
<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="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="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/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import moment from 'moment'
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: 100,
total: 0,
},
editFormObj: {
payorCode: '',
sendSts: '',
sendDate: '',
trackingNo: '',
sendRemark: '',
},
editRules: {
sendDate: [{ required: true, message: "请选择寄送日期", trigger: "change" }],
trackingNo: [{ required: true, message: "请输入寄送单号", trigger: "blur" }],
},
};
},
components: {
Goback,
BurtPagination,
},
computed: {
columns() {
const base = [
{ title: "账单日期", dataIndex: "receiptDate", width: 160,scopedSlots: { customRender: "receiptDate" } },
{ title: "病历号", dataIndex: "mrnNo", key:"mrnNo",align:'center', width: 136},
{ title: "客户姓名", dataIndex: "patientName", width: 160 },
{ title: "保险卡号", dataIndex: "memberCardNo", width: 180 },
{ title: "客户生日", dataIndex: "birthday", width: 160 },
{ title: "账单编号", dataIndex: "receiptNo", key:"receiptNo",align:'center', width: 136},
{ title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 250 },
{ 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' },
];
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 = [];
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);
}
}
this.selectedRowKeys = arr;
},
// 分页回调
getPageData(pager) {
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
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取保险公司下拉选项
_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.SAVERECEIPSENDINFO({
...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 || []
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.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(){
this.$apis.SENDRECEIPTLISTEXPORT({
sendBatchNo: this.sendBatchNo || 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","寄送账单.xls");
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink);
window.URL.revokeObjectURL(url);
})
},
//添加账单
addNewBill(){
// this.isEditNewBill = !this.isEditNewBill;
if(this.isEditNewBill){ //保存
this.addNewCharge()
.then(()=>{
this.isEditNewBill = false;
})
}else{ //查询所有未加入的账单
this.pagination.pageNum = 1;
this.isEditNewBill = true;
this.cacheDataList = {}
this._getNewBillList()
}
},
_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(){
return new Promise((resolve,reject)=>{
let formData = this.checkBeforeSave()
if(!formData){
reject()
return false;
}
this.$apis.SAVERECEIPSENDINFO(formData)
.then((res) => {
if (res.returnCode == "0000") {
this.sendBatchNo = res.content;
this.$message.success("成功");
this.selectedRowKeys = [];
this.cacheDataList = {}
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;
}
</style>
<template>
<div class="white_bg burt-container">
<img src="../../assets/image/home_bg.jpg" alt="">
</div>
</template>
<script>
export default{
data(){
return{
}
}
}
</script>
<style lang="less" scoped>
.burt-container{
height: calc(100vh - 116px);
padding: 0;
img{
width: 100%;
height: 100%;
object-fit: contain;
}
}
<template>
<div class="white_bg burt-container">
<img src="../../assets/image/home_bg.jpg" alt="">
</div>
</template>
<script>
export default{
data(){
return{
}
}
}
</script>
<style lang="less" scoped>
.burt-container{
height: calc(100vh - 86px);
padding: 0;
img{
width: 100%;
height: 100%;
object-fit: contain;
}
}
</style>
\ No newline at end of file
<template>
<div class="sub-menu">
<router-link
tag="button"
:class="{ btn: true, 'btn-active': isVisit(item.path) }"
v-for="(item, index) in menuStack"
:key="item.path"
:to="item.path"
>
{{ item.title }}
<Icon v-if="menuStack.length>1"
@click="(e)=>closeMenu(e, index)"
:name="isVisit(item.path) ? 'ssiclose_active' : 'ssiclose'"
:size="16"
/>
</router-link>
<slot name="tips" />
</div>
</template>
<script>
import { mapState } from "vuex";
export default {
computed: {
...mapState({
menuStack: (state) => state.common.menuStack,
}),
},
methods: {
isVisit(val) {
const path = this.$route.path;
return path === val;
},
closeMenu(e, index) {
e.stopPropagation();
const menuStack = JSON.parse(JSON.stringify(this.menuStack));
const isVisit = this.isVisit(menuStack[index].path);
menuStack.splice(index, 1);
this.$store.commit("common/setMenuStack", menuStack);
if (isVisit) {
// 关闭的是当前正在查看的
const i = Math.max(0, index - 1);
this.$router.push(menuStack[i].path || "/");
}
},
},
};
</script>
<style lang="less" scoped>
.sub-menu {
width: 100%;
overflow-x: auto;
white-space: nowrap;
.mg-b(16);
.btn {
.fs(14);
.lh(20);
.pa(8, 13, 8, 13);
.mg-r(40);
color: #252631;
font-weight: bold;
border: none;
background-color: #fff;
border-radius: 5px;
cursor: pointer;
}
.btn-active {
color: #fff;
background-color: #2b63ff;
}
}
</style>
<template>
<div class="menu-layout">
<Header></Header>
<div class="container">
<Menu></Menu>
<Loading />
<div class="content">
<SubMenu></SubMenu>
<router-view />
</div>
</div>
</div>
</template>
<script>
import Header from "./components/Header.vue";
import Menu from "./components/menu";
import SubMenu from "./components/menu/subMenu.vue";
import Loading from "@/components/Loading/Loading.vue";
export default {
components: {
Header,
Menu,
SubMenu,
Loading
},
data() {
return {};
},
created() {},
mounted() {},
methods: {},
};
</script>
<style>
.icon-class.arrow{
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
</style>
<style lang="less" scoped>
.menu-layout {
background-color: #f8fafb;
font-family: "Helvetica" "Microsoft YaHei" "微软雅黑";
.container {
display: flex;
position: relative;
.pt(68);
// min-height: calc(100vh - 50px);
.content {
position: relative;
flex: 1;
.mg-l(242);
.pa(14, 40, 0, 40);
min-height: calc(100vh - 68px);
overflow-x: hidden;
}
}
.menu {
position: fixed;
.w(242);
height: calc(100vh - 68px);
overflow: auto;
background-color: #fff;
li{
position: relative;
}
}
}
</style>
<template>
<div class="menu-layout">
<Header></Header>
<div class="container">
<Menu></Menu>
<Loading />
<div class="content">
<router-view />
</div>
</div>
</div>
</template>
<script>
import Header from "./components/Header.vue";
import Menu from "./components/menu";
import Loading from "@/components/Loading/Loading.vue";
export default {
components: {
Header,
Menu,
Loading
},
data() {
return {};
},
created() {},
mounted() {},
methods: {},
};
</script>
<style>
.icon-class.arrow{
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
</style>
<style lang="less" scoped>
.menu-layout {
background-color: #f8fafb;
font-family: "Helvetica" "Microsoft YaHei" "微软雅黑";
.container {
display: flex;
position: relative;
.pt(68);
// min-height: calc(100vh - 50px);
.content {
position: relative;
flex: 1;
.mg-l(242);
.pa(14, 40, 0, 40);
min-height: calc(100vh - 68px);
overflow-x: hidden;
}
}
.menu {
position: fixed;
.w(242);
height: calc(100vh - 68px);
overflow: auto;
background-color: #fff;
li{
position: relative;
}
}
}
</style>
......@@ -57,6 +57,11 @@
<a-input v-model="form.backAmountCny" placeholder="回款金额" />
</a-form-model-item>
</a-col>
<a-col :lg="6" :sm="12">
<a-form-model-item label="回款编号">
<a-input v-model="form.backMoneyNo" placeholder="回款编号" />
</a-form-model-item>
</a-col>
<a-col :md="24" class="none-label">
<a-form-model-item label="button">
<a-button class="mar-left10" type="primary" @click="handlerSearch">
......@@ -72,6 +77,9 @@
<a-button class="mar-left10" type="primary" @click="addNewEvt">
<Icon name="ssiadd" :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-row>
......@@ -109,6 +117,7 @@
<script>
import BurtPagination from "@/components/CUSTOMER/pagation";
import moment from "moment";
import { exportFile } from '@/utils/index';
const columns = [
{ title: "回款编号", dataIndex: "backMoneyNo", ellipsis: true, width: 150 },
{ title: "EOB编号", dataIndex: "eobNos", ellipsis: true, width: 140 },
......@@ -149,6 +158,7 @@ export default {
endDate: "",
backStatus: "",
backAmountCny: "", // 回款金额
backMoneyNo: "", // 回款编号
},
dataList: [],
companyOptions: [], //保险公司
......@@ -295,6 +305,16 @@ export default {
onCancel: () => {},
});
},
//导出报表
exportExcel(){
let filter = {
...this.form,
dateRange: undefined,
}
this.$apis.EXPORTBACKMONEYREPORT(filter).then(res => {
exportFile(res, '回款列表.xls');
})
}
},
};
</script>
......
<template>
<div class="white_bg burt-container">
<Goback title="回款详情" />
<!-- 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" @change="changePayor">
<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="5" :sm="12">
<a-form-model-item label="回款日期">
<a-date-picker format="YYYY-MM-DD" format-value="YYYY-MM-DD 00:00:00" v-model="form.backDate" placeholder="选择日期" allow-clear :disabled="!isEdit" />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="回款金额(人民币)">
<a-input type="number" v-model="form.backAmountCny" placeholder="请输入金额" allow-clear :disabled="!isEdit" />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="可核销余额">
<a-input v-model="residueBackAmount" disabled />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="回款金额(美元)">
<a-input type="number" v-model="form.backAmountUsd" 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.backExchangeRate" placeholder="请输入金额" allow-clear :disabled="!isEdit" />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="EOB编号">
<a-input v-model="form.eobNos" placeholder="请输入EOB编号" allow-clear :disabled="!isEdit" />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="EOB备注">
<a-input v-model="form.eobRemark" placeholder="请输入EOB备注" allow-clear :disabled="!isEdit" />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="上传附件">
<a-upload name="file" :multiple="false" :showUploadList="true" :disabled="!isEdit"
:fileList="fileList"
:customRequest="(file)=>uploadFile(file)"
:beforeUpload="()=>beforeUpload()"
:remove="(file)=>removeFile(file)">
<a-button type="primary"> <Icon name="ssiupload" :size="18" />上传文件 </a-button>
</a-upload>
</a-form-model-item>
</a-col>
<a-col :md="24" :lg="24" class="none-label" v-if="isEdit">
<a-form-model-item label="button">
<a-button class="mar-left10" type="primary" @click="addNewEvt(0)">
<Icon :name="backMoneyNo?'ssibaocun':'ssiadd'" :size="14" />暂存
</a-button>
<a-button class="mar-left10" type="primary" @click="addNewEvt(1)">
<Icon :name="backMoneyNo?'ssibaocun':'ssiadd'" :size="14" />结案
</a-button>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
<div class="bill-content">
<!-- 已关联账单 -->
<template v-if="selectedRows.length > 0">
<div class="table-title">已关联账单</div>
<a-table class="table-content" :columns="selectedColumns" :data-source="selectedRows" :scroll="{ x: true, y: 200 }" :pagination="false">
<template slot="operation" slot-scope="text, record, index">
<a-button type="link" class="danger" @click.stop="delRecord(record, index)">删除</a-button>
</template>
</a-table>
</template>
<!-- table -->
<template v-if="isEdit">
<a-row class="search-form">
<a-form-model ref="searchForm" layout="vertical" :model="searchForm">
<a-tabs v-model="activeKey" @change="paneChange">
<a-tab-pane v-for="pane in panes" :key="pane.key" :tab="pane.title">
<template v-if="activeKey === '0'">
<!-- 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-range-picker format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="searchForm.billDate" :placeholder="['开始时间','结束时间']"/>
<a-form-model-item label="保险公司">
<a-select
v-model="form.payorCode"
placeholder="请选择保险公司"
allow-clear
:disabled="!isEdit"
@change="changePayor"
>
<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="5" :sm="12">
<a-form-model-item label="病历号">
<a-input v-model="searchForm.mrnNo" placeholder="请输入病历号" allow-clear :disabled="!isEdit"/>
<a-form-model-item label="回款日期">
<a-date-picker
format="YYYY-MM-DD"
format-value="YYYY-MM-DD 00:00:00"
v-model="form.backDate"
placeholder="选择日期"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="客户名称">
<a-input v-model="searchForm.patientName" placeholder="请输入客户名称" allow-clear :disabled="!isEdit"/>
<a-form-model-item label="回款金额(人民币)">
<a-input
type="number"
v-model="form.backAmountCny"
placeholder="请输入金额"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<div class="btn-div mar-bottom10 none-label">
<a-button type="primary" @click="_getNewEOBList">
<Icon name="ssisearch_active" :size="14" />查询
</a-button>
</div>
<a-form-model-item label="可核销余额">
<a-input v-model="residueBackAmount" disabled />
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="回款金额(美元)">
<a-input
type="number"
v-model="form.backAmountUsd"
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.backExchangeRate"
placeholder="请输入金额"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="EOB编号">
<a-input
v-model="form.eobNos"
placeholder="请输入EOB编号"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="EOB备注">
<a-input
v-model="form.eobRemark"
placeholder="请输入EOB备注"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="5" :sm="12">
<a-form-model-item label="上传附件">
<a-upload
name="file"
:multiple="false"
:showUploadList="true"
:disabled="!isEdit"
:fileList="fileList"
:customRequest="(file) => uploadFile(file)"
:beforeUpload="() => beforeUpload()"
:remove="(file) => removeFile(file)"
>
<a-button type="primary">
<Icon name="ssiupload" :size="18" />上传文件
</a-button>
</a-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</template>
<template v-else>
<!-- form -->
<a-form-model
ref="form"
:labelCol="{ span: 5 }"
:wrapperCol="{ span: 16 }"
:model="form"
class="bill-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
:disabled="!isEdit"
@change="changePayor"
>
<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="8" :sm="12">
<a-form-model-item label="可核销余额">
<a-input v-model="residueBackAmount" disabled />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</a-row>
<div class="table-title">账单列表</div>
<a-table :columns="columns" :data-source="dataList" :scroll="{ x: true, y: 200 }" :pagination="false" :rowKey="'id'"
:row-selection="{ selectedRowKeys: selectedRowKeys, onSelect: onSelectChange, onSelectAll: onSelectAll }">
</a-table>
<BurtPagination :pagination="pagination" @pageChange="pageChange" />
</template>
</div>
<div class="bill-content">
<!-- 已关联账单 -->
<template v-if="selectedRows.length > 0">
<div class="table-title">
<span>已关联账单</span>
<a-button class="mar-left10" type="primary" @click="exportExcel">
<Icon name="ssidaochu" :size="14" />导出
</a-button>
</div>
<a-table
class="table-content"
:columns="selectedColumns"
:data-source="selectedRows"
:scroll="{ x: true, y: 450 }"
:pagination="false"
>
<template slot="operation" slot-scope="text, record, index">
<a-button
type="link"
class="danger"
@click.stop="delRecord(record, index)"
>删除</a-button
>
</template>
</a-table>
</template>
<!-- table -->
<template v-if="isEdit">
<a-row class="search-form">
<a-form-model
ref="searchForm"
layout="inline"
:labelCol="{ span: 8 }"
:wrapperCol="{ span: 16 }"
:model="searchForm"
>
<a-row :gutter="30">
<a-col :lg="6" :sm="10">
<a-form-model-item label="账单日期">
<a-range-picker
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
v-model="searchForm.billDate"
:placeholder="['开始时间', '结束时间']"
/>
</a-form-model-item>
</a-col>
<a-col :lg="6" :sm="10">
<a-form-model-item label="病历号">
<a-input
v-model="searchForm.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="searchForm.patientName"
placeholder="请输入客户名称"
allow-clear
:disabled="!isEdit"
/>
</a-form-model-item>
</a-col>
<a-col :lg="4" :sm="12">
<div class="btn-div mar-bottom10 none-label">
<a-button type="primary" @click="_getNewEOBList">
<Icon name="ssisearch_active" :size="14" />查询
</a-button>
</div>
</a-col>
</a-row>
</a-form-model>
</a-row>
<div class="table-title">账单列表</div>
<a-table
:columns="columns"
:data-source="dataList"
:scroll="{ x: true, y: 300 }"
:pagination="false"
:rowKey="'id'"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onSelect: onSelectChange,
onSelectAll: onSelectAll,
}"
>
</a-table>
<BurtPagination
:pagination="pagination"
@pageChange="pageChange"
/>
</template>
</div>
</template>
</a-tab-pane>
<div v-if="isEdit" slot="tabBarExtraContent">
<a-button class="mar-left10" type="primary" @click="addNewEvt(0)">
<Icon :name="backMoneyNo ? 'ssibaocun' : 'ssiadd'" :size="14" />暂存
</a-button>
<a-button class="mar-left10" type="primary" @click="addNewEvt(1)">
<Icon :name="backMoneyNo ? 'ssibaocun' : 'ssiadd'" :size="14" />结案
</a-button>
</div>
</a-tabs>
</div>
</template>
<script>
import Goback from "@/components/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import {EOBStatusOptions} from '@/utils/utilsdictOptions.js'
import { EOBStatusOptions } from "@/utils/utilsdictOptions.js";
import { exportFile } from '@/utils/index';
import moment from "moment";
import mixins from "@/mixins";
export default {
......@@ -134,13 +277,13 @@ export default {
EOBStatusOptions,
dialogShow: false,
form: {
payorCode: '',
payorCode: "",
backDate: null,
backAmountCny: '',
backAmountUsd: '',
backExchangeRate: '',
eobNos: '', // EOB编号
eobRemark: '' // EOB备注
backAmountCny: "",
backAmountUsd: "",
backExchangeRate: "",
eobNos: "", // EOB编号
eobRemark: "", // EOB备注
},
fileList: [], // 上传文件列表
dataList: [],
......@@ -153,7 +296,7 @@ export default {
},
selectedRowKeys: [], // Check here to configure the default column
selectedRows: [], // Check here to configure the default column
backMoneyNo: '',
backMoneyNo: "",
editRules: {
backAmountUsd: [{ required: true, message: "请输入", trigger: "blur" }],
backAmount: [{ required: true, message: "请输入", trigger: "blur" }],
......@@ -161,11 +304,17 @@ export default {
searchForm: {
billDate: [],
mrnNo: '', // 病历号
patientName: '', // 客户名字
mrnNo: "", // 病历号
patientName: "", // 客户名字
},
savedStatus: false, //是否已保存
relatedList: []
relatedList: [],
panes: [
{ title: "基础信息", key: "0", show: true, content: "PaymentClaims" },
{ title: "账单列表", key: "1", show: false, content: "Insurance" },
],
activeKey: "0",
};
},
mixins: [mixins],
......@@ -175,66 +324,167 @@ export default {
},
computed: {
columns() {
const base = [
{ title: "账单编号", dataIndex: "receiptNo", ellipsis: true, width: 150 },
{ title: "病历号", dataIndex: "mrnNo", ellipsis: true, width: 195 },
{ title: "客户姓名",dataIndex: "patientName", ellipsis: true, width: 160 },
// { title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 160 },
{ title: "账单日期", dataIndex: "receiptDate", ellipsis: true, width: 150 },
{ title: "收银", dataIndex: "receiptTellerName", ellipsis: true, width: 120,},
{ title: "账单金额", dataIndex: "actualAmount", ellipsis: true, width: 150,},
{ title: "回款金额", dataIndex: "writeOffAmount", ellipsis: true, width: 150},
{ title: "未清余额", dataIndex: "residueBackAmount", ellipsis: true, width: 150,},
];
return base
const base = [
{
title: "账单编号",
dataIndex: "receiptNo",
ellipsis: true,
width: 150,
},
{ title: "病历号", dataIndex: "mrnNo", ellipsis: true, width: 195 },
{
title: "客户姓名",
dataIndex: "patientName",
ellipsis: true,
width: 160,
},
// { title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 160 },
{
title: "账单日期",
dataIndex: "receiptDate",
ellipsis: true,
width: 180,
},
{
title: "收银",
dataIndex: "receiptTellerName",
ellipsis: true,
width: 120,
},
{
title: "理赔账单金额",
dataIndex: "actualAmount",
ellipsis: true,
width: 150,
},
{
title: "回款金额",
dataIndex: "writeOffAmount",
ellipsis: true,
width: 150,
},
{
title: "个人欠费",
dataIndex: "arrearsAmountShow",
ellipsis: true,
width: 150,
},
{
title: "未清余额",
dataIndex: "residueBackAmount",
ellipsis: true,
width: 150,
},
];
return base;
},
selectedColumns() {
const base = JSON.parse(JSON.stringify(this.columns))
const changeAmount = this.changeAmount
base[6] = { title: "回款金额", dataIndex: "backAmount", ellipsis: true, width: 150, customRender: (val, row) => {
return <a-input-number v-model={row.backAmount} allow-clear disabled={!this.isEdit} onBlur={() => {changeAmount(row)}} />
} }
base[7] = { title: "未清余额", dataIndex: "residueBackAmount", ellipsis: true, width: 150, customRender: (val, row) => {
const residueBackAmount = Number(row.currentReceiptAmount || 0) - Number(row.backAmount || 0)
return Number(residueBackAmount.toFixed(2))
} }
base.splice(6, 0, { title: "余末金额", dataIndex: "currentReceiptAmount", ellipsis: true, width: 150,})
base.push({ title: "回款日期", dataIndex: "backDate", ellipsis: true, width: 150,})
if(this.isEdit) {
base.push({ title: "操作", dataIndex: "operation", fixed: 'right', width: 100, scopedSlots: { customRender: "operation" }})
const base = JSON.parse(JSON.stringify(this.columns));
const changeAmount = this.changeAmount;
base[6] = {
title: "回款金额",
dataIndex: "backAmount",
ellipsis: true,
width: 150,
customRender: (val, row) => {
return (
<a-input-number
v-model={row.backAmount}
allow-clear
disabled={!this.isEdit}
onBlur={() => {
changeAmount(row);
}}
/>
);
},
};
base[8] = {
title: "未清余额",
dataIndex: "residueBackAmount",
ellipsis: true,
width: 150,
customRender: (val, row) => {
const residueBackAmount =
Number(row.currentReceiptAmount || 0) - Number(row.backAmount || 0) - Number(row.arrearsAmount || 0);
return Number(residueBackAmount.toFixed(2));
},
};
base[7] = {
title: "个人欠费",
dataIndex: "arrearsAmount",
ellipsis: true,
width: 150,
customRender: (val, row) => {
return (
<a-input-number
v-model={row.arrearsAmount}
allow-clear
disabled={!this.isEdit}
onBlur={() => {
changeAmount(row);
}}
/>
);
},
};
base.splice(6, 0, {
title: "余末金额",
dataIndex: "currentReceiptAmount",
ellipsis: true,
width: 150,
});
base.push({
title: "回款日期",
dataIndex: "backDate",
ellipsis: true,
width: 150,
});
if (this.isEdit) {
base.push({
title: "操作",
dataIndex: "operation",
fixed: "right",
width: 100,
scopedSlots: { customRender: "operation" },
});
}
return base
return base;
},
// 可核销余额
residueBackAmount() {
let totalMoney = Number(this.form.backAmountCny || 0)
this.selectedRows.forEach(item => {
totalMoney -= Number(item.backAmount)
})
return Number(totalMoney.toFixed(2))
}
let totalMoney = Number(this.form.backAmountCny || 0);
this.selectedRows.forEach((item) => {
totalMoney -= Number(item.backAmount);
});
return Number(totalMoney.toFixed(2));
},
},
created(){
const { backMoneyNo, isEdit } = this.$route.query
created() {
const { backMoneyNo, isEdit } = this.$route.query;
this.backMoneyNo = backMoneyNo;
this.isEdit = isEdit;
this._getCompanyOptions();
if(backMoneyNo){
const backMoneyDataDetail = JSON.parse(localStorage.getItem('backMoneyDataDetail') || '{}');
this.form = backMoneyDataDetail
this.form.backDate = this.form.backDate ? moment(this.form.backDate).format('YYYY-MM-DD 00:00:00') : null
if (backMoneyNo) {
const backMoneyDataDetail = JSON.parse(
localStorage.getItem("backMoneyDataDetail") || "{}"
);
this.form = backMoneyDataDetail;
this.form.backDate = this.form.backDate
? moment(this.form.backDate).format("YYYY-MM-DD 00:00:00")
: null;
// 如果有上传附件则显示列表
if(backMoneyDataDetail.fileList) {
this.fileList = backMoneyDataDetail.fileList.map(d => {
if (backMoneyDataDetail.fileList) {
this.fileList = backMoneyDataDetail.fileList.map((d) => {
const file = {
uid: Math.random()*10000,
uid: Math.random() * 10000,
name: d.fileName,
status: 'done',
status: "done",
url: d.fileUrl,
}
return file
})
};
return file;
});
}
this.getData();
}
......@@ -242,92 +492,112 @@ export default {
},
methods: {
moment,
paneChange() {
this.panes.forEach((item) => {
item.show = false;
});
this.panes[Number(this.activeKey)].show = true;
},
changeAmount(row) {
if((Number(row.actualAmount || 0) - Number(row.backAmount || 0)) < 0) {
if (Number(row.actualAmount || 0) - Number(row.backAmount || 0) < 0) {
this.$message.warning("录入账单回款金额大于账单金额");
}
},
onSelectChange(selectedRow, selected) {
if(selected) {
this.selectedRowKeys.push(selectedRow.id)
this.selectedRows.push(selectedRow)
if (selected) {
this.selectedRowKeys.push(selectedRow.id);
this.selectedRows.push(selectedRow);
} else {
const index = this.selectedRowKeys.findIndex(item => item === selectedRow.id)
this.selectedRowKeys.splice(index, 1)
this.selectedRows.splice(index, 1)
this._confirmDelReceipt([selectedRow])
const index = this.selectedRowKeys.findIndex(
(item) => item === selectedRow.id
);
this.selectedRowKeys.splice(index, 1);
this.selectedRows.splice(index, 1);
this._confirmDelReceipt([selectedRow]);
}
},
onSelectAll(selected, selectedRows, changeRows) {
console.log(selected, selectedRows, changeRows)
if(selected) {
this.selectedRowKeys = this.selectedRowKeys.concat(changeRows.map(item => item.id))
this.selectedRows = this.selectedRows.concat(changeRows)
console.log(selected, selectedRows, changeRows);
if (selected) {
this.selectedRowKeys = this.selectedRowKeys.concat(
changeRows.map((item) => item.id)
);
this.selectedRows = this.selectedRows.concat(changeRows);
} else {
changeRows.forEach(item => {
const findIndex = this.selectedRowKeys.findIndex(rowId => rowId === item.id)
this.selectedRowKeys.splice(findIndex, 1)
this.selectedRows.splice(findIndex, 1)
})
this._confirmDelReceipt(changeRows)
changeRows.forEach((item) => {
const findIndex = this.selectedRowKeys.findIndex(
(rowId) => rowId === item.id
);
this.selectedRowKeys.splice(findIndex, 1);
this.selectedRows.splice(findIndex, 1);
});
this._confirmDelReceipt(changeRows);
}
},
delRecord(record, index) {
this.selectedRowKeys.splice(index, 1)
this.selectedRows.splice(index, 1)
if(record.relationed) {
this.selectedRowKeys.splice(index, 1);
this.selectedRows.splice(index, 1);
if (record.relationed) {
// 已经关联的调用接口删除
this._confirmDelReceipt([record])
this._confirmDelReceipt([record]);
}
},
_confirmDelReceipt(records) {
console.log(records)
if(!this.backMoneyNo) return;
const receiptVoList = records.filter(item => {
const findIndex = this.relatedList.findIndex(rowId => rowId === item.id)
return (findIndex > -1)
}).map(item => {
return {
id: item.id
}
})
console.log(receiptVoList)
if(receiptVoList.length === 0) return;
this.$apis.DELETERECEIPTRECORD({
backMoneyNo: this.backMoneyNo,
receiptVoList
})
.then((res) => {
if (res.returnCode == "0000") {
this._getNewEOBList()
} else {
this.$message.error(res.returnMsg);
}
});
console.log(records);
if (!this.backMoneyNo) return;
const receiptVoList = records
.filter((item) => {
const findIndex = this.relatedList.findIndex(
(rowId) => rowId === item.id
);
return findIndex > -1;
})
.map((item) => {
return {
id: item.id,
};
});
console.log(receiptVoList);
if (receiptVoList.length === 0) return;
this.$apis
.DELETERECEIPTRECORD({
backMoneyNo: this.backMoneyNo,
receiptVoList,
})
.then((res) => {
if (res.returnCode == "0000") {
this._getNewEOBList();
} else {
this.$message.error(res.returnMsg);
}
});
},
// 修改保险公司
changePayor() {
if(this.selectedRowKeys.length > 0 && (this.form.id || this.savedStatus)) {
if (
this.selectedRowKeys.length > 0 &&
(this.form.id || this.savedStatus)
) {
this.$modal.confirm({
title: "提示",
content: "是否解除已关联账单",
okText: "确认",
cancelText: "取消",
onOk: () => {
this.selectedRowKeys = []
this.selectedRows = []
this.selectedRowKeys = [];
this.selectedRows = [];
},
onCancel: () => {},
});
}
this._getNewEOBList()
this._getNewEOBList();
},
pageChange(pager) {
this.pagination = {
...this.pagination,
...pager,
}
this._getNewEOBList()
};
this._getNewEOBList();
},
// 获取保险公司下拉选项
_getCompanyOptions() {
......@@ -337,101 +607,110 @@ export default {
},
// 获取已关联的账单
getData() {
this.$apis.QUERYBACKRECEIPTLIST({
pageNum: 1,
pageSize: 999,
backMoneyNo: this.backMoneyNo,
payorCode: this.form.payorCode
})
.then((res) => {
if (res.returnCode == "0000") {
const list = res.content.list || [];
this.selectedRowKeys = list.map(d => d.id)
this.selectedRows = list.map(item => {
item.relationed = true
return item
})
this.relatedList = list.map(d => d.id)
} else {
this.$message.error(res.returnMsg);
}
});
this.$apis
.QUERYBACKRECEIPTLIST({
pageNum: 1,
pageSize: 999,
backMoneyNo: this.backMoneyNo,
payorCode: this.form.payorCode,
})
.then((res) => {
if (res.returnCode == "0000") {
const list = res.content.list || [];
this.selectedRowKeys = list.map((d) => d.id);
this.selectedRows = list.map((item) => {
item.relationed = true;
return item;
});
this.relatedList = list.map((d) => d.id);
} else {
this.$message.error(res.returnMsg);
}
});
},
// 获取所有账单
_getNewEOBList(){
let billDate = this.searchForm.billDate || []
this.$apis.QUERYBACKRECEIPTINFOLIST({
_getNewEOBList() {
let billDate = this.searchForm.billDate || [];
this.$apis
.QUERYBACKRECEIPTINFOLIST({
pageNum: this.pagination.pageNum,
pageSize: this.pagination.pageSize,
backMoneyNo: this.backMoneyNo,
payorCode: this.form.payorCode,
...this.searchForm,
receiptEndDate: billDate[1] ? billDate[1] + ' 23:59:59' : undefined,
receiptStartDate: billDate[0] ? billDate[0] + ' 00:00:00' : undefined,
receiptEndDate: billDate[1] ? billDate[1] + " 23:59:59" : undefined,
receiptStartDate: billDate[0] ? billDate[0] + " 00:00:00" : undefined,
})
.then((res) => {
if (res.returnCode == "0000") {
let content = res.content || {};
this.pagination.total = content.total || 0;
this.dataList = content.list || [];
this.dataList = content.list.map(item => {
item.arrearsAmountShow = item.arrearsAmount
item.arrearsAmount = ''
return item
}) || [];
} else {
this.$message.error(res.returnMsg);
}
});
},
//新建/保存回款
addNewEvt(backStatus){
return new Promise((resolve,reject)=>{
console.log(this.selectedRows)
if(!this.form.payorCode){
this.$message.warning("请选择保险公司");
reject();
return;
//新建/保存回款
addNewEvt(backStatus) {
return new Promise((resolve, reject) => {
console.log(this.selectedRows);
if (!this.form.payorCode) {
this.$message.warning("请选择保险公司");
reject();
return;
}
if(!this.form.backDate){
this.$message.warning("请选择回款日期");
reject();
return;
if (!this.form.backDate) {
this.$message.warning("请选择回款日期");
reject();
return;
}
if(!this.form.backAmountCny){
this.$message.warning("请输入回款金额");
reject();
return;
if (!this.form.backAmountCny) {
this.$message.warning("请输入回款金额");
reject();
return;
}
let receiptVoList = this.selectedRows.map(item => {
let receiptVoList = this.selectedRows.map((item) => {
return {
id: item.id,
backAmount: item.backAmount,
}
})
const valid = receiptVoList.some(item => {
return !item.backAmount
})
if(valid) {
arrearsAmount: item.arrearsAmount,
};
});
const valid = receiptVoList.some((item) => {
const exist = !item.backAmount && item.backAmount !== 0
return exist;
});
if (valid) {
this.$message.warning("存在关联账单未输入回款金额");
reject();
return;
reject();
return;
}
const formData = {
...this.form,
receiptVoList,
backDate: this.form.backDate? moment(this.form.backDate).format('YYYY-MM-DD HH:mm:ss'):'',
backMoneyNo: this.backMoneyNo, //回款编号
backStatus // 0暂存 1结案
}
...this.form,
receiptVoList,
backDate: this.form.backDate
? moment(this.form.backDate).format("YYYY-MM-DD HH:mm:ss")
: "",
backMoneyNo: this.backMoneyNo, //回款编号
backStatus, // 0暂存 1结案
};
// 上传附件格式转换
formData.fileList = this.fileList.map(d => {
formData.fileList = this.fileList.map((d) => {
const file = {
fileName: d.name,
fileUrl: d.url
}
return file
})
fileUrl: d.url,
};
return file;
});
this.$apis.SAVEBACKMONEY(formData)
.then((res) => {
this.$apis.SAVEBACKMONEY(formData).then((res) => {
if (res.returnCode == "0000") {
this.backMoneyNo = res.content;
this.savedStatus = true;
......@@ -439,7 +718,7 @@ export default {
this.selectedRowKeys = [];
this.getData();
this._getNewEOBList();
// this.$router.go(-1);
resolve();
} else {
......@@ -447,21 +726,21 @@ export default {
reject();
}
});
})
});
},
/* ======== 上传区域 ======== */
// 上传之前
beforeUpload(){
beforeUpload() {
const len = this.fileList.length;
if(len >= 5){
this.$message.warning('不能超过5个文件');
if (len >= 5) {
this.$message.warning("不能超过5个文件");
return false;
}
return true;
},
// 删除文件
removeFile(file){
removeFile(file) {
let index;
this.fileList.forEach((item, i) => {
if (item.uid == file.uid) {
......@@ -472,25 +751,32 @@ export default {
return true;
},
// 上传文件
uploadFile(fileData){
uploadFile(fileData) {
let formData = new FormData();
formData.append("file", fileData.file);
this.$apis.UPLOADIMG(formData)
.then((res)=>{
this.$apis.UPLOADIMG(formData).then((res) => {
fileData.onSuccess();
let tmp = {
uid: Math.random()*10000,
let tmp = {
uid: Math.random() * 10000,
name: res.original,
status: 'done',
status: "done",
url: res.url,
}
};
this.fileList.push(tmp);
this.$forceUpdate();
})
});
},
// 导出账单列表
exportEvt() {}
//导出报表
exportExcel(){
let filter = {
backMoneyNo: this.backMoneyNo,
payorCode: this.form.payorCode,
}
this.$apis.EXPORTBACKRECEIPTLIST(filter).then(res => {
exportFile(res, '已关联账单.xls');
})
}
},
};
</script>
......@@ -505,6 +791,9 @@ export default {
.table-title {
font-size: 15px;
margin: 6px 0;
display: flex;
align-items: center;
justify-content: space-between;
}
.table-content {
margin-bottom: 8px;
......@@ -525,15 +814,25 @@ export default {
color: #ff3b30;
}
.burt-container {
height: calc(100vh - 86px);
display: flex;
flex-direction: column;
height: calc(100vh - 110px);
.bill-content {
flex: 1;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
padding-right: 12px;
::v-deep {
.ant-tabs {
flex: 1;
min-height: 0;
}
}
}
.bill-content {
height: calc(100vh - 338px);
overflow-y: auto;
overflow-x: hidden;
padding-right: 12px;
}
::v-deep .bill-form {
.ant-form .ant-form-item {
margin-bottom: 4px !important;
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment