<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">基础信息</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) return callback(new Error('请选择')); 
 | 
        if (!value.length === 0) return callback(new Error('请选择')); 
 | 
        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: [ 
 | 
            { required: true, 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) { 
 | 
        var that = this 
 | 
        this.title = title 
 | 
        this.time.startDate = time.startDate 
 | 
        this.time.endDate = time.endDate 
 | 
        this.pickerOptions = { 
 | 
          disabledDate(time) { 
 | 
            // 如果没有后面的 -8.64e7 就是不可以选择今天的 
 | 
            const beginDate = new Date(that.time.startDate).getTime() - 8.64e7 
 | 
            const endDate = new Date(that.time.endDate).getTime() 
 | 
            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> 
 |