7 changed files with 446 additions and 158 deletions
-
3src/components/report/TurnoverReport.vue
-
3src/components/report/TurnoverReportM.vue
-
3src/components/report/TurnoverReportP.vue
-
145src/components/report/TurnoverReportS.vue
-
6src/router/index.js
-
104src/views/fee-settings/cardBill.vue
-
332src/views/fee-settings/cardBillSum.vue
@ -0,0 +1,332 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<div style="position: relative"> |
||||
|
<div class="middlebox"> |
||||
|
<div class="contenttitle"> |
||||
|
收费 / |
||||
|
<span class="contenttitleBold" |
||||
|
>会员卡记账统计</span |
||||
|
> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="margin-top:7px"> |
||||
|
<div style="background-color: #fff; padding: 15px; border-radius: 8px;display: flex;flex-wrap: wrap; margin-bottom: 10px;height:80px;margin-top: 7px;"> |
||||
|
<div class="query"> |
||||
|
<span>记账日期:</span> |
||||
|
<el-date-picker v-model="query.startDate" type="date" placeholder="起始日期" size="small" value-format="yyyy-MM-dd"/> |
||||
|
<span>--</span> |
||||
|
<el-date-picker v-model="query.endDate" type="date" placeholder="截止日期" size="small" value-format="yyyy-MM-dd"/> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>记账标志:</span> |
||||
|
<el-select v-model="query.billFlag" placeholder="请选择" filterable clearable size="small"> |
||||
|
<el-option v-for="item in dict.billFlag" :key="item.id" :label="item.displayName" :value="item.id" /> |
||||
|
</el-select> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>支付方式:</span> |
||||
|
<el-select v-model="query.payModeIds" placeholder="请选择" filterable clearable size="small" multiple collapse-tags> |
||||
|
<el-option v-for="item in dict.payMode" :key="item.id" :label="item.displayName" :value="item.id" /> |
||||
|
</el-select> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>卡号:</span> |
||||
|
<el-input placeholder="卡号" v-model="query.cardNo" size="small" clearable style="width: 190px"/> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>卡主姓名:</span> |
||||
|
<el-input placeholder="卡主姓名" v-model="query.customerName" size="small" clearable style="width: 190px"/> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>身份证号:</span> |
||||
|
<el-input placeholder="身份证号" v-model="query.idNo" size="small" clearable style="width: 190px"/> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<span>电话:</span> |
||||
|
<el-input placeholder="手机号/电话" v-model="query.mobileTelephone" size="small" clearable style="width: 190px"/> |
||||
|
</div> |
||||
|
<div class="query"> |
||||
|
<el-button class="commonbutton" @click="btnQuery">查询</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="background-color: #fff; padding: 15px; border-radius: 8px;"> |
||||
|
<el-table :data="dataList" width="100%" :height="window.pageHeight < 600 ? 330 : window.pageHeight - 250" |
||||
|
row-key="id" highlight-current-row ref="dataList" border show-summary :summary-method="getSummaries"> |
||||
|
<el-table-column type="index" label="序号" width="50" align="center"/> |
||||
|
<el-table-column prop="cardNo" label="会员卡号" width="150" align="center"/> |
||||
|
<el-table-column prop="customerName" label="卡主姓名" /> |
||||
|
<el-table-column prop="mobileTelephone" label="手机号" align="center"/> |
||||
|
<el-table-column prop="payModeNams" label="支付方式" align="center" /> |
||||
|
<el-table-column prop="billMoney" label="充值金额" align="center"/> |
||||
|
<el-table-column prop="billMoney" label="扣费金额" align="center"/> |
||||
|
<el-table-column prop="billMoney" label="退费金额" align="center"/> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import moment from "moment"; |
||||
|
import { mapState, mapActions } from "vuex"; |
||||
|
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
||||
|
import { dddw, objCopy, arrayReduce, arrayExistObj, deepCopy } from "@/utlis/proFunc"; |
||||
|
|
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
|
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
query: { |
||||
|
startDate:'', |
||||
|
endDate:'', |
||||
|
billFlag:'', |
||||
|
payModeIds:[], |
||||
|
cardNo:'', |
||||
|
customerName:'', |
||||
|
idNo:'', |
||||
|
mobileTelephone:'' |
||||
|
}, //查询条件 |
||||
|
dataList: [], //列表数据 |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
created() { |
||||
|
this.query.startDate = moment(new Date()).format("yyyy-MM-DD"); |
||||
|
this.query.endDate = this.query.startDate; |
||||
|
}, |
||||
|
|
||||
|
//挂载完成 |
||||
|
mounted() { |
||||
|
this.dicInit(); |
||||
|
this.enterToQuery() |
||||
|
}, |
||||
|
updated() { |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs['dataList'].doLayout() //刷新显示合计 |
||||
|
}) |
||||
|
}, |
||||
|
computed: { |
||||
|
...mapState(["window", "dict"]), |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapActions(["getCustomerOrgGroup", "getPatientRegisterAbs"]), |
||||
|
dddw, moment, |
||||
|
|
||||
|
|
||||
|
//查询 |
||||
|
btnQuery(queryType) { |
||||
|
let body = deepCopy(this.query) |
||||
|
|
||||
|
switch (queryType) { |
||||
|
case 'idNo': |
||||
|
if(!this.query.idNo) return; |
||||
|
body = { idNo: this.query.idNo }; |
||||
|
break; |
||||
|
case 'cardNo': |
||||
|
if(!this.query.cardNo) return; |
||||
|
body = { cardNo: this.query.cardNo }; |
||||
|
break; |
||||
|
default: |
||||
|
if(this.query.idNo){ |
||||
|
body = { idNo: this.query.idNo }; |
||||
|
}else if(this.query.cardNo){ |
||||
|
body = { cardNo: this.query.cardNo }; |
||||
|
}else{ |
||||
|
// if(!this.query.startDate) this.query.startDate = moment(new Date()).format('yyyy-MM-DD'); |
||||
|
// if(!this.query.endDate) this.query.endDate = moment(new Date()).format('yyyy-MM-DD'); |
||||
|
if(this.query.startDate > this.query.endDate){ |
||||
|
this.$message.error("数据不合法,起始日期不能大于截止日期!"); |
||||
|
return; |
||||
|
} |
||||
|
if(!body.cardNo) delete body.cardNo |
||||
|
if(!body.billFlag) delete body.billFlag |
||||
|
if(!body.customerName) delete body.customerName |
||||
|
if(!body.idNo) delete body.idNo |
||||
|
if(!body.mobileTelephone) delete body.mobileTelephone |
||||
|
if(body?.payModeIds.length == 0) delete body.payModeIds |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
// { |
||||
|
// "cardNo": "string", |
||||
|
// "customerName": "string", |
||||
|
// "idNo": "string", |
||||
|
// "mobileTelephone": "string", |
||||
|
// "billFlag": "string", |
||||
|
// "startDate": "string", |
||||
|
// "endDate": "string" |
||||
|
// } |
||||
|
|
||||
|
postapi('/api/app/cardbill/getcardbilllist', body) |
||||
|
.then((res) => { |
||||
|
if (res.code != -1) { |
||||
|
this.dataList = res.data; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
//合计 |
||||
|
getSummaries(param) { |
||||
|
//console.log('getSummaries param', param) |
||||
|
// if(!param){ |
||||
|
// param = { |
||||
|
// columns:[{}, {}, {}, {}, {}, {}, {property: 'asbitemMoney'},{property: 'customerOrgGroupDetailMoney'}], |
||||
|
// data:this.customerOrgGroupAsbitems |
||||
|
// } |
||||
|
// } |
||||
|
|
||||
|
const { columns, data } = param; |
||||
|
const sumCol = [5,6,7] //需合计的列 |
||||
|
const sums = []; |
||||
|
columns.forEach((column, index) => { |
||||
|
//console.log('column, index,data',column, index,data) |
||||
|
//显示合计列 |
||||
|
if (index === 1) { |
||||
|
sums[index] = '合计'; |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
//不合计的列 |
||||
|
if (sumCol.indexOf(index) == -1) { |
||||
|
sums[index] = ''; |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
sums[index] = 0 |
||||
|
data.forEach(e => { |
||||
|
if (!isNaN(e[column.property])) sums[index] += Number(e[column.property])// * e['amount'] |
||||
|
}) |
||||
|
sums[index] = sums[index].toFixed(2) //+ ' 元'; |
||||
|
|
||||
|
}); |
||||
|
// this.groupPrice = sums[7]; |
||||
|
//console.log('getSummaries',sums) |
||||
|
// if (!this.totalFoucs) this.total = sums[5]; |
||||
|
// if (!this.discountFoucs) this.discount = Number(this.total * 100 / this.totalStand).toFixed(2); |
||||
|
return sums; |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
dicInit(){ |
||||
|
//支付方式 |
||||
|
getapi("/api/app/pay-mode").then((res) => { |
||||
|
if (res.code == 1) { |
||||
|
this.dict.payMode = res.data; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
//回车替代查询 |
||||
|
enterToQuery() { |
||||
|
// console.log('enterToTab'); |
||||
|
this.$nextTick(() => { |
||||
|
let inputs = document.querySelectorAll(["input"]); //用数组可以读取多个标签的元素 //.inline-input |
||||
|
|
||||
|
// 为每个输入框添加键盘事件监听器 |
||||
|
inputs.forEach((input, i) => { |
||||
|
// console.log('input',input); |
||||
|
input.addEventListener('keydown', (event) => { |
||||
|
if (event.keyCode === 13) { |
||||
|
// 阻止回车键的默认行为(换行) |
||||
|
event.preventDefault(); |
||||
|
|
||||
|
// 如果按下的是回车查询 |
||||
|
// console.log(input.getAttribute('placeholder'),input.value) |
||||
|
let placeholder = input.getAttribute('placeholder') |
||||
|
switch (placeholder) { |
||||
|
case '卡号': |
||||
|
if (input.value) this.btnQuery() |
||||
|
input.select() |
||||
|
break; |
||||
|
case '身份证号': |
||||
|
if (input.value) this.btnQuery() |
||||
|
input.select() |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
input.addEventListener('click', (event) => { |
||||
|
let placeholder = input.getAttribute('placeholder') |
||||
|
switch (placeholder) { |
||||
|
case '卡号': |
||||
|
input.select() |
||||
|
break; |
||||
|
case '身份证号': |
||||
|
input.select() |
||||
|
break; |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
//监听事件 |
||||
|
watch: { |
||||
|
//触发查询事件 |
||||
|
"patientRegister.query.times"(newVal, oldVal) { |
||||
|
if (newVal != oldVal) { |
||||
|
//alert('触发查询事件') |
||||
|
this.query(); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
@import "../../assets/css/global_button.css"; |
||||
|
@import "../../assets/css/global_dialog.css"; |
||||
|
@import "../../assets/css/global_table.css"; |
||||
|
@import "../../assets/css/global_form.css"; |
||||
|
@import "../../assets/css/global_input.css"; |
||||
|
@import "../../assets/css/global.css"; |
||||
|
::v-deep .el-input__inner { |
||||
|
/*text-align: center;*/ |
||||
|
padding-left: 5px; |
||||
|
padding-right: 25px; |
||||
|
} |
||||
|
::v-deep .el-icon-date:before { |
||||
|
content: "" |
||||
|
} |
||||
|
.query{ |
||||
|
margin-right: 15px; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
font-size: 14px; |
||||
|
color: #232748; |
||||
|
font-size: 400; |
||||
|
font-family: "NotoSansSC-Regular"; |
||||
|
} |
||||
|
.box { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
} |
||||
|
:deep .el-form-item { |
||||
|
margin-bottom: 14px; |
||||
|
} |
||||
|
/* el-dialog的头部样式 */ |
||||
|
:deep .el-dialog__header { |
||||
|
padding: 11px 20px 11px; |
||||
|
} |
||||
|
/* el-dialog的主体样式 */ |
||||
|
:deep .el-dialog__body { |
||||
|
padding: 0px 20px 0px; |
||||
|
} |
||||
|
/* el-divider样式 */ |
||||
|
:deep .el-divider--horizontal { |
||||
|
margin: 0px 0 12px; |
||||
|
} |
||||
|
/* el-dialog的底部样式 */ |
||||
|
:deep .el-dialog__footer { |
||||
|
padding: 0px 20px 14px; |
||||
|
} |
||||
|
.query:last-child{ |
||||
|
margin-right: 0; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue