| <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="关联合同" required> | 
|                             <el-input v-model="form.contractCode" disabled placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="费用类型" required> | 
|                             <el-input v-model="form.costTypeName" disabled placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="计费周期" required> | 
|                             <el-input v-model="form.date" disabled placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item :label="`应${form.needReceivableFeeCopy > 0 ? '收' : '付'}金额`" required> | 
|                             <el-input v-model="form.receivableFee" disabled placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item :label="`实${form.needReceivableFeeCopy > 0 ? '收' : '付'}金额`" prop="actReceivableFee"> | 
|                             <el-input v-model="form.actReceivableFee" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item :label="`${form.needReceivableFeeCopy > 0 ? '入' : '出'}账日期`" prop="actPayDate"> | 
|                             <el-date-picker type="date" v-model="form.actPayDate" value-format="yyyy-MM-dd" placeholder="请选择" /> | 
|                         </el-form-item> | 
|                         <el-form-item :label="`${form.needReceivableFeeCopy > 0 ? '收' : '付'}款方式`" prop="payType"> | 
|                             <el-select v-model="form.payType" placeholder="请选择"> | 
|                                 <el-option label="现金" :value="1"></el-option> | 
|                                 <el-option label="网银转账" :value="2"></el-option> | 
|                                 <el-option label="POS机" :value="3"></el-option> | 
|                                 <el-option label="支付宝" :value="4"></el-option> | 
|                                 <el-option label="微信" :value="5"></el-option> | 
|                                 <el-option label="转账支票" :value="6"></el-option> | 
|                                 <el-option label="其它方式" :value="7"></el-option> | 
|                             </el-select> | 
|                         </el-form-item> | 
|                         <el-form-item label="所属公司" prop="companyName"> | 
|                             <el-input disabled v-model="form.companyName" placeholder="请输入" /> | 
|                         </el-form-item> | 
|                         <el-form-item label="收支账户" prop="accountId"> | 
|                             <el-select v-model="form.accountId" placeholder="请选择" clearable> | 
|                                 <el-option v-for="item in agentList" :value="item.id" :label="item.title"></el-option> | 
|                             </el-select> | 
|                         </el-form-item> | 
|                         <el-form-item label="备注" prop="remark" style="width: 100%;"> | 
|                             <el-input type="textarea" :rows="6" v-model="form.remark" placeholder="请输入" /> | 
|                         </el-form-item> | 
|                     </div> | 
|                 </el-form> | 
|             </div> | 
|         </div> | 
|         <div class="file_wrap"> | 
|             <div class="head"> | 
|                 <div>账单附件</div> | 
|                 <el-upload class="upload-demo" :show-file-list="false" :data="uploadData" :action="uploadImgUrl" | 
|                    :on-success="uploadAvatarSuccess" :before-upload="beforeUpload" :on-error="uploadError"> | 
|                     <el-button icon="el-icon-plus" plain>添加附件</el-button> | 
|                 </el-upload> | 
|             </div> | 
|             <el-table :data="form.multifileList" stripe> | 
|                 <el-table-column prop="name" label="附件名称" align="center" min-width="100" show-overflow-tooltip /> | 
|                 <el-table-column prop="userName" label="操作人" align="center" min-width="100" show-overflow-tooltip /> | 
|                 <el-table-column prop="createTime" label="操作时间" align="center" min-width="100" show-overflow-tooltip /> | 
|                 <el-table-column label="操作" align="center" min-width="100"> | 
|                     <template slot-scope="{ row }"> | 
|                         <span class="cu red" @click="dele(row.imgaddr)">删除</span> | 
|                     </template> | 
|                 </el-table-column> | 
|             </el-table> | 
|         </div> | 
|     </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
|   import GlobalWindow from '@/components/common/GlobalWindow' | 
|   import BaseOpera from '@/components/base/BaseOpera' | 
|   import { ywAccountList } from '@/api/bill' | 
|   import { create } from '@/api/ywContractRevenue' | 
|   import { Message, Loading } from 'element-ui' | 
|   import { mapState } from 'vuex' | 
|   export default { | 
|     name: "flowingWater", | 
|     components: { | 
|       GlobalWindow | 
|     }, | 
|     computed: { | 
|       ...mapState(['userInfo']) | 
|     }, | 
|     extends: BaseOpera, | 
|     data() { | 
|       return { | 
|         form: { | 
|           billId: '', | 
|           billType: '', | 
|           costType: '', | 
|           contractCode: '', | 
|           contractId: '', | 
|           startDate: '', | 
|           endDate: '', | 
|           receivableFee: '', | 
|           date: '', | 
|           companyId: '', | 
|           actReceivableFee: '', | 
|           actPayDate: '', | 
|           payType: '', | 
|           companyName: '', | 
|           remark: '', | 
|           accountId: '', | 
|           multifileList: [], | 
|           costTypeName: '', | 
|           needReceivableFeeCopy: '' | 
|         }, | 
|         rules: { | 
|           receivableFee: [ | 
|             { required: true, message: '请输入', trigger: 'blur' } | 
|           ], | 
|           actPayDate: [ | 
|             { required: true, message: '请选择', trigger: 'blur' } | 
|           ], | 
|           payType: [ | 
|             { required: true, message: '请选择', trigger: 'blur' } | 
|           ], | 
|           accountId: [ | 
|             { required: true, message: '请选择', trigger: 'blur' } | 
|           ] | 
|         }, | 
|         loadingInstance: null, | 
|         uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', | 
|         uploadData: { | 
|           folder: 'YW_CONTRACT_BILL' | 
|         }, | 
|         agentList: [] | 
|       } | 
|     }, | 
|     methods: { | 
|       getDayTime () { | 
|         const today = new Date(); | 
|         const year = today.getFullYear(); | 
|         const month = today.getMonth() + 1; | 
|         const day = today.getDate(); | 
|         return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; | 
|       }, | 
|       confirm () { | 
|         this.$refs.form.validate((valid) => { | 
|           if (!valid) return | 
|           this.isWorking = true | 
|           create(this.form) | 
|             .then(() => { | 
|               this.visible = false | 
|               this.$tip.apiSuccess('创建成功') | 
|               this.$emit('success') | 
|               this.$emit('refresh') | 
|             }) | 
|             .finally(() => { | 
|               this.isWorking = false | 
|             }) | 
|         }) | 
|       }, | 
|       handleRent() { | 
|         this.$refs.MemberSearchRef.openModal() | 
|       }, | 
|       houseChange(e) { | 
|         console.log(e) | 
|         console.log(this.value) | 
|       }, | 
|       getDates (companyId) { | 
|         ywAccountList({ | 
|           companyId, | 
|           isdeleted: 0, | 
|           status: 0 | 
|         }).then(res => { | 
|           this.agentList = res | 
|         }) | 
|       }, | 
|       dele (imgaddr) { | 
|         this.form.multifileList.forEach((item, index) => { | 
|           if (imgaddr === item.imgaddr) { | 
|             this.form.multifileList.splice(index, 1) | 
|           } | 
|         }) | 
|       }, | 
|       beforeUpload(file) { | 
|         this.loadingInstance = Loading.service({ | 
|           lock: true, | 
|           text: 'Loading', | 
|           spinner: 'el-icon-loading', | 
|           background: 'rgba(0, 0, 0, 0.7)' | 
|         }) | 
|       }, | 
|       uploadError() { | 
|         this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭 | 
|           if (this.loadingInstance) { | 
|             this.loadingInstance.close() | 
|           } | 
|         }) | 
|       }, | 
|       getDay () { | 
|         const now = new Date() | 
|         const year = now.getFullYear() | 
|         const month = now.getMonth() + 1 // 加1使其从1开始 | 
|         const day = now.getDate() | 
|         const hours = now.getHours() | 
|         const minutes = now.getMinutes() | 
|         const seconds = now.getSeconds() | 
|         return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; | 
|       }, | 
|       uploadAvatarSuccess(file) { | 
|         this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭 | 
|           if (this.loadingInstance) { | 
|             this.loadingInstance.close() | 
|           } | 
|         }) | 
|         const item = file.data[0] | 
|         this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) | 
|       }, | 
|       close() { | 
|         this.$emit('close') | 
|       }, | 
|       open(title, target) { | 
|         this.title = title | 
|         this.visible = true | 
|         this.$nextTick(() => { | 
|           this.$refs.form.resetFields(); | 
|           for (const key in this.form) { | 
|             this.form[key] = target[key] | 
|           } | 
|           this.form.actPayDate = this.getDayTime() | 
|         }) | 
|         this.getDates(target.companyId) | 
|       } | 
|     } | 
|   } | 
| </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; | 
|                     display: flex; | 
|                     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 { | 
|          | 
|         .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> |