<template>
|
<GlobalWindow
|
width="100%"
|
:title="title"
|
:visible.sync="visible"
|
:confirm-working="isWorking"
|
@close="close"
|
@confirm="confirm">
|
<div class="main">
|
<div class="main_content">
|
<el-form :model="form" label-position="top" ref="form" :rules="rules">
|
<div class="head">
|
<div class="m_title">基础信息-{{time.startDate}}~{{time.endDate}}</div>
|
<div class="tabs">
|
<div class="tab" :class="{ active: form.feeType === 0 }" @click="timeTabClick(0)">周期费用</div>
|
<div class="tab" :class="{ active: form.feeType === 1 }" @click="timeTabClick(1)">一次性费用</div>
|
</div>
|
</div>
|
<div class="list">
|
<el-form-item label="关联合同" prop="contractCode">
|
<el-input v-model="form.contractCode" disabled placeholder="请输入应收金额" v-trim />
|
</el-form-item>
|
<el-form-item label="付款方" prop="renterName">
|
<el-input v-model="form.renterName" disabled placeholder="请输入应收金额" v-trim />
|
</el-form-item>
|
<el-form-item label="费用类型" prop="costType">
|
<el-select v-model="form.costType" placeholder="请选择">
|
<el-option :value="0" label="租赁费"></el-option>
|
<el-option :value="1" label="物业费"></el-option>
|
<el-option :value="4" label="水电费"></el-option>
|
<el-option :value="5" label="杂项费"></el-option>
|
<el-option :value="6" label="其他"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="计费周期" prop="date" v-if="form.feeType !== 1">
|
<el-date-picker
|
type="daterange"
|
range-separator="至"
|
v-model="form.date"
|
:picker-options="pickerOptions"
|
@change="changeDate"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
value-format="yyyy-MM-dd"
|
placeholder="请选择" />
|
</el-form-item>
|
<el-form-item label="应收金额" prop="receivableFee">
|
<el-input v-model="form.receivableFee" placeholder="请输入应收金额" v-trim />
|
</el-form-item>
|
<el-form-item label="应收日期" prop="planPayDate">
|
<el-date-picker type="date" v-model="form.planPayDate" value-format="yyyy-MM-dd" placeholder="请选择" />
|
</el-form-item>
|
<el-form-item label="所属公司" prop="companyId">
|
<el-select v-model="form.companyId" placeholder="请选择" clearable>
|
<el-option
|
v-for="(item, index) in comparyList"
|
:key="index"
|
:value="item.id"
|
:label="item.name" />
|
</el-select>
|
</el-form-item>
|
<el-form-item style="width: 100%;" label="账单备注" prop="remark">
|
<el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请输入" />
|
</el-form-item>
|
</div>
|
</el-form>
|
</div>
|
</div>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import BaseOpera from '@/components/base/BaseOpera'
|
import { companyList } from '@/api/company'
|
import { mapState } from 'vuex'
|
export default {
|
name: 'addCollectionBill',
|
components: {
|
GlobalWindow
|
},
|
computed: {
|
...mapState(['userInfo'])
|
},
|
extends: BaseOpera,
|
data () {
|
const validateArr = (rule, value, callback) => {
|
if (value.length === 0 || !value) {
|
callback(new Error('请选择'));
|
} else {
|
callback();
|
}
|
};
|
return {
|
form: {
|
contractCode: '',
|
contractId: '',
|
costType: '',
|
renterName: '',
|
renterId: '',
|
remark: '',
|
startDate: '',
|
endDate: '',
|
price: 0,
|
receivableFeeCopy: '',
|
receivableFee: '',
|
feeType: 0,
|
planPayDate: '',
|
billType: 0,
|
billTypeCopy: 0,
|
date: []
|
},
|
pickerOptions: {},
|
time: {
|
startDate: '',
|
endDate: ''
|
},
|
rules: {
|
contractCode: [
|
{ required: true, message: '请输入', trigger: 'blur' }
|
],
|
renterName: [
|
{ required: true, message: '请输入', trigger: 'blur' }
|
],
|
costType: [
|
{ required: true, message: '请选择', trigger: 'blur' }
|
],
|
date: [
|
{ validator: validateArr, trigger: 'blur' }
|
],
|
receivableFee: [
|
{ required: true, message: '请输入', trigger: 'blur' }
|
],
|
planPayDate: [
|
{ required: true, message: '请选择', trigger: 'blur' }
|
],
|
companyId: [
|
{ required: true, message: '请选择', trigger: 'blur' }
|
]
|
},
|
comparyList: []
|
}
|
},
|
methods: {
|
open (title, target, time) {
|
this.title = title
|
this.time.startDate = time.startDate
|
this.time.endDate = time.endDate
|
this.pickerOptions = {
|
disabledDate(time) {
|
// 如果没有后面的 -8.64e7 就是不可以选择今天的
|
const beginDate = new Date(time.startDate).getTime() - 8.64e7
|
const endDate = new Date(time.endDate).getTime() - 8.64e7
|
return beginDate > time.getTime() || endDate < time.getTime()
|
}
|
}
|
this.getCompany()
|
this.visible = true
|
// 新建
|
if (target == null) {
|
this.$nextTick(() => {
|
this.$refs.form.resetFields()
|
this.form[this.configData['field.id']] = null
|
})
|
return
|
}
|
// 编辑
|
this.$nextTick(() => {
|
for (const key in this.form) {
|
this.form[key] = target[key]
|
}
|
})
|
},
|
getCompany () {
|
companyList({ type: 2 })
|
.then(res => {
|
this.comparyList = res
|
})
|
},
|
timeTabClick (val) {
|
this.form.feeType = val
|
if (val === 1) {
|
this.form.startDate = ''
|
this.form.endDate = ''
|
this.date = []
|
}
|
},
|
changeDate (e) {
|
if (!e || e.length === 0) {
|
this.form.startDate = ''
|
this.form.endDate = ''
|
} else {
|
this.form.startDate = e[0]
|
this.form.endDate = e[1]
|
}
|
},
|
confirm () {
|
this.$refs.form.validate((valid) => {
|
if (!valid) return
|
let obj = JSON.parse(JSON.stringify(this.form))
|
obj.receivableFeeCopy = Number(obj.receivableFee)
|
if (obj.feeType === 0) {
|
obj.startDate = obj.startDate + ' 00:00:00'
|
obj.endDate = obj.endDate + ' 00:00:00'
|
} else {
|
obj.startDate = ''
|
obj.endDate = ''
|
}
|
obj.price = Number(obj.receivableFee)
|
obj.rowType = 1
|
obj.actReceivableFee = 0
|
this.$emit('getVal', obj)
|
this.visible = false
|
})
|
},
|
close () {
|
this.$emit('close')
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
@import '@/assets/style/variables.scss';
|
|
|
.cost_tabs {
|
justify-content: flex-start;
|
border: none;
|
|
.tab {
|
height: 36px;
|
line-height: 36px;
|
font-size: 14px;
|
}
|
}
|
|
.main {
|
display: flex;
|
margin-bottom: 20px;
|
|
.main_content {
|
flex: 1;
|
margin-right: 20px;
|
|
.head {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
|
.tabs {
|
display: flex;
|
margin-bottom: 20px;
|
align-items: center;
|
justify-content: center;
|
|
.tab {
|
height: 14px;
|
line-height: 14px;
|
cursor: pointer;
|
border: 1px solid #ebebeb;
|
padding: 12px 24px;
|
}
|
|
.active {
|
font-weight: 500;
|
color: $primary-color;
|
border: 1px solid $primary-color;
|
}
|
}
|
}
|
|
.list {
|
display: flex;
|
flex-wrap: wrap;
|
|
.el-form-item {
|
width: 33.33%;
|
box-sizing: border-box;
|
padding: 0 12px;
|
}
|
}
|
}
|
|
.main_house {
|
width: 320px;
|
padding: 24px 12px;
|
border: 1px solid #c3c6cd;
|
border-radius: 2px;
|
|
.title {
|
font-size: 16px;
|
font-weight: 500;
|
margin-bottom: 30px;
|
}
|
}
|
|
}
|
|
.total {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
height: 32px;
|
background-color: #e7e9f5;
|
|
span {
|
width: 160px;
|
text-align: center;
|
}
|
}
|
|
.file_wrap {
|
padding: 20px 16px;
|
border: 1px solid #c3c6cd;
|
border-radius: 2px;
|
|
.head {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
}
|
}
|
|
.m_title {
|
font-weight: 500;
|
font-size: 14px;
|
margin-bottom: 15px;
|
margin-top: 10px;
|
}
|
</style>
|