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.

245 lines
9.1 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="920" :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 :rules="rules" :model="form" ref="ruleForm">
<a-row>
<a-col :span="24">
<a-form-model-item prop="name" 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-radio-group v-model="form.isLongTermEffective" :options="[{label:'长期生效',value:1},{label:'选择日期',value:2}]"></a-radio-group>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item prop="selTime" label="选择计划日期">
<a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker>
</a-form-model-item>
</a-col>
<a-col :span="8">
<a-form-model-item label="生成时间">
<a-select v-model="form.billDateStart">
<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 :span="8">
<a-form-model-item label="提前/延长">
<a-select v-model="form.billDateType">
<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 :span="8">
<a-form-model-item label="天数">
<a-input-number v-model="form.billDateNum"></a-input-number>
</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 { autoGenerateBills } 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: '',
isLongTermEffective: 1,
autoEffectiveDateStart: '-',
autoEffectiveDateEnd: '-',
billDateStart: 1,
billDateType: 1,
billDateNum: 0,
selTime: []
},
rules: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
selTime: [{ required: true, message: "请选择时间", trigger: "blur" }],
},
isVisibleDrawer: false,
roomTreeData: [],
replaceFields: {
children: 'childList',
title: 'name',
key: 'id'
},
checkedKeys: [],
//收费标准
tableData: [],
columns: [
{title: "费用名称", dataIndex: "name"},
{title: "计费方式", dataIndex: "billingType",
customRender: function (billingType) {
switch(billingType) {
case 1: return '单价*计量方式';
case 2: return '固定金额';
}
},
},
{title: "计量方式", dataIndex: "calculateType",
customRender: function (calculateType) {
switch(calculateType) {
case 1: return '建筑面积';
case 2: return '使用面积';
case 3: return '公摊面积';
case 5: return '仪表用量';
case 6: return '房屋数分摊';
case 7: return '房屋建筑面积分摊';
case 8: return '房屋在住人口分摊';
}
},
},
{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.autoEffectiveDateStart = this.form.selTime[0];
this.form.autoEffectiveDateEnd = this.form.selTime[1];
},
success(){
this.$emit('success')
},
addClose() {
this.onClose();
this.form = {
estateIds: [],
chargesIds: [],
name: '',
isLongTermEffective: 1,
autoEffectiveDateStart: '',
autoEffectiveDateEnd: '',
billDateStart: 1,
billDateType: 1,
billDateNum: 0,
selTime: []
};
this.checkedKeys = [];
this.form.selTime = []
},
onSubmit() {
autoGenerateBills(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>