| <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> | 
|                     <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="customerName"> | 
|                             <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"> | 
|                             <el-date-picker | 
|                                 type="daterange" | 
|                                 range-separator="至" | 
|                                 v-model="form.date" | 
|                                 @change="changeDate" | 
|                                 :picker-options="pickerOptions" | 
|                                 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: 'addPaymentBill', | 
|     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, | 
|           feeType: 0, | 
|           receivableFeeCopy: '', | 
|           receivableFee: '', | 
|           planPayDate: '', | 
|           billType: 1, | 
|           billTypeCopy: 1, | 
|           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) { | 
|         var that = this | 
|         this.title = title | 
|         this.time.startDate = time.startDate | 
|         this.time.endDate = time.endDate | 
|         this.pickerOptions = { | 
|           disabledDate(time) { | 
|             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.getCompanyList() | 
|         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] | 
|           } | 
|         }) | 
|       }, | 
|       getCompanyList () { | 
|         companyList({ type: 2 }) | 
|           .then(res => { | 
|             this.comparyList = res | 
|           }) | 
|       }, | 
|       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) | 
|           obj.startDate = obj.startDate + ' 00:00:00' | 
|           obj.endDate = obj.endDate + ' 00:00:00' | 
|           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> |