You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
5.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<a-drawer title="添加手动生成账单" :width="820" :visible="isVisibleDrawer" :body-style="{ paddingBottom: '80px' }" @close="onClose">
<div class="drawer-content">
<div style="display: flex">
<div class="inner-content">
<a-tree v-model="checkedKeys" @check="onCheck"
:selectable="false" :tree-data="roomTreeData" checkable :replace-fields="replaceFields"></a-tree>
</div>
<div class="inner-content">
<a-table :data-source="tableData" :columns="columns" :pagination="false"
:row-selection="{
selectedRowKeys: this.form.chargesIds,
onChange: selectionChoosed,
}"
:row-key="
(record, index) => {
return record.id;
}
">
<template slot="title">
<span style="font-weight: 600">收费标准</span>
</template>
</a-table>
<a-form-model title="基础信息">
<a-row>
<a-col :span="24">
<a-form-model-item label="账单名称">
<a-input v-model="form.name"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="选择时间">
<a-range-picker v-model="selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</div>
</div>
</div>
<div class="drawer-footer">
<a-button :style="{ marginRight: '8px' }" @click="onClose">
关闭
</a-button>
<a-button type="primary" @click="onSubmit"> 提交 </a-button>
</div>
</a-drawer>
</template>
<script>
import {findEstateCascade} from "@/api/basic/estate"
import { chargesList } from "@/api/payment/chargeStandardManage";
import { manuallyGenerateBills } from "@/api/payment/payPlan"
function deleteIds(lists) {
// 楼栋id和房屋id有重复导致数形控件选择不可用把除房屋id外的全改为undefined
lists.forEach((list) => {
if (list.childList) {
list.id = undefined;
deleteIds(list.childList);
} else {
return;
}
});
}
export default {
name: 'addBillDrawer',
props: {
visible: Boolean,
},
watch: {
visible: {
handler(newValue) {
this.isVisibleDrawer = newValue;
},
immediate: true,
},
},
mounted() {
this.getApi()
},
data() {
return {
form: {
estateIds: [],
chargesIds: [],
name: '',
billDateStart: '',
billDateEnd: '',
},
isVisibleDrawer: false,
roomTreeData: [],
replaceFields: {
children: 'childList',
title: 'name',
key: 'id'
},
checkedKeys: [],
//收费标准
tableData: [],
columns: [
{title: "费用名称", dataIndex: "name"},
{title: "计费方式", dataIndex: "billingType"},
{title: "计量方式", dataIndex: "calculateType"},
{title: "计量单价", dataIndex: "calculateUnit",
customRender: function (calculateUnit) {
return (calculateUnit*1).toFixed(2)
},
},
{title: "备注", dataIndex: "remarks"},
],
selTime: []
}
},
methods: {
getApi() {
findEstateCascade().then(res => {
let data = res.data;
// data.forEach(ele => {
// ele.childList.forEach(el => {
// el.checkable = false
// });
// ele.checkable = false
// })
this.roomTreeData = data
deleteIds(this.roomTreeData);
});
chargesList({pageNum: 1,size: 1000}).then(res => {
let data = res.data.rows;
this.tableData = data;
})
},
onClose() {
this.$emit("onClose");
},
onCheck(checkedKeys) {
let ids = [];
for (let id of checkedKeys) {
if (typeof id == "number") {
ids.push(id);
}
}
this.form.estateIds = ids;
},
//收费标准
selectionChoosed(data) {
this.form.chargesIds = data;
},
timeChange(val) {
this.form.billDateStart = this.selTime[0];
this.form.billDateEnd = this.selTime[1];
},
success(){
this.$emit('success')
},
addClose() {
this.onClose();
this.form = {
estateIds: [],
chargesIds: [],
name: '',
billDateStart: '',
billDateEnd: '',
};
this.checkedKeys = [];
this.selTime = []
},
onSubmit() {
manuallyGenerateBills(this.form).then(res => {
if(res.code === 200){
this.$message.success(res.msg)
this.addClose();
this.success()
} else {
this.$message.error(res.msg)
}
})
}
}
}
</script>
<style lang="less">
.inner-content {
padding :8px 8px 8px 16px
}
</style>