<template> 
 | 
  <GlobalWindow width="100%" :title="title" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" 
 | 
    @confirm="confirm" @close="close"> 
 | 
    <div class="tabs fixed"> 
 | 
      <div class="tab" :class="{ active: activeTabs === 0 }">1、基本信息</div> 
 | 
      <div class="tab" :class="{ active: activeTabs === 1 }">2、费用条款</div> 
 | 
    </div> 
 | 
    <div v-show="activeTabs === 0"> 
 | 
      <div class="main"> 
 | 
        <div class="main_content"> 
 | 
          <el-form :model="form" ref="form" :rules="rules"> 
 | 
            <div class="m_title">基础信息</div> 
 | 
            <div class="list"> 
 | 
              <el-form-item label="合同类型" prop="type"> 
 | 
                <el-select v-model="form.type" placeholder="请选择" @change="changeType"> 
 | 
                  <el-option v-for="(item, index) in types" :key="index" :value="item.value" 
 | 
                    :label="item.name"></el-option> 
 | 
                </el-select> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="合同编号" prop="code"> 
 | 
                <el-input v-model="form.code" placeholder="请输入合同编号" v-trim /> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="经办人" prop="userId"> 
 | 
                <el-select v-model="form.userId" filterable placeholder="请选择"> 
 | 
                  <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" 
 | 
                    :label="item.realname"></el-option> 
 | 
                </el-select> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="合同签订日期" prop="signDate"> 
 | 
                <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" :clearable="false" 
 | 
                  placeholder="请选择" /> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="合同开始日期" prop="startDate"> 
 | 
                <el-date-picker type="date" v-model="form.startDate" @change="getHouseData" :clearable="false" 
 | 
                  value-format="yyyy-MM-dd" placeholder="请选择" /> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="合同结束日期" prop="endDate"> 
 | 
                <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" 
 | 
                  value-format="yyyy-MM-dd" placeholder="请选择" /> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="归属项目" prop="projectId"> 
 | 
                <el-select v-model="form.projectId" @change="getHouseTree" placeholder="请选择"> 
 | 
                  <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" 
 | 
                    :label="item.name"></el-option> 
 | 
                </el-select> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="结果取整(四舍五入)" prop="roundedUp"> 
 | 
                <el-select v-model="form.roundedUp" placeholder="请选择"> 
 | 
                  <el-option :value="0" label="否"></el-option> 
 | 
                  <el-option :value="1" label="是"></el-option> 
 | 
                </el-select> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="所属公司" prop="companyId"> 
 | 
                <el-select v-model="form.companyId" placeholder="请选择"> 
 | 
                  <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" 
 | 
                    :label="item.name"></el-option> 
 | 
                </el-select> 
 | 
              </el-form-item> 
 | 
            </div> 
 | 
            <div class="m_title">租客信息</div> 
 | 
            <div class="list"> 
 | 
              <el-form-item label="租客" prop="renterName"> 
 | 
                <div @click="handleRent"> 
 | 
                  <el-input v-model="form.renterName" readonly placeholder="请点击选择租客" /> 
 | 
                </div> 
 | 
              </el-form-item> 
 | 
              <el-form-item label="联系人" prop="memberId"> 
 | 
                <el-select v-model="form.memberId" placeholder="请选择"> 
 | 
                  <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" 
 | 
                    :label="item.name"></el-option> 
 | 
                </el-select> 
 | 
                <!--                <el-input v-model="form.memberName" readonly placeholder="请点击选择租客" />--> 
 | 
              </el-form-item> 
 | 
            </div> 
 | 
          </el-form> 
 | 
        </div> 
 | 
        <div class="main_house"> 
 | 
          <div class="title">请选择房源</div> 
 | 
          <el-tree :data="houseList" show-checkbox node-key="idd" @check="checkHouseRoom" :default-expanded-keys="ids" 
 | 
            :default-checked-keys="ids" :props="{ children: 'projectDataVOList', label: 'name' }"> 
 | 
            <span class="custom-tree-node" 
 | 
              style="width: 100%; display: flex; align-items: center; justify-content: space-between;" 
 | 
              slot-scope="{ node, data }"> 
 | 
              <span>{{ data.name }}</span> 
 | 
              <span style="color: #2080f7;" v-if="data.lv === 3"> 
 | 
                {{ data.area }}㎡ 
 | 
              </span> 
 | 
            </span> 
 | 
          </el-tree> 
 | 
        </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.fileList" stripe> 
 | 
          <el-table-column prop="originname" 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> 
 | 
    </div> 
 | 
    <div v-show="activeTabs === 1"> 
 | 
      <div class="tabs cost_tabs"> 
 | 
        <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0, 2].includes(form.type)"> 
 | 
          租赁条款 
 | 
        </div> 
 | 
        <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0, 1].includes(form.type)"> 
 | 
          物业条款 
 | 
        </div> 
 | 
      </div> 
 | 
      <!--   租赁条款   --> 
 | 
      <div v-show="cactiveTabs === 0"> 
 | 
        <div class="main"> 
 | 
          <div class="main_content"> 
 | 
            <el-form :model="form" ref="paramCostRef" :rules="rules"> 
 | 
              <div class="m_title">租赁信息</div> 
 | 
              <div class="list"> 
 | 
                <el-form-item label="押金金额(元)" prop="zlDeposit"> 
 | 
                  <el-input v-model="form.zlDeposit" @input="clearzl" placeholder="请输入" v-trim /> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="付款方式" prop="zlPayType"> 
 | 
                  <el-select v-model="form.zlPayType" @change="changePayType" placeholder="请选择"> 
 | 
                    <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" 
 | 
                      :label="item.name"></el-option> 
 | 
                  </el-select> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="免租期" prop="zlDate"> 
 | 
                  <el-date-picker type="daterange" v-model="form.zlDate" @change="getZLDate" value-format="yyyy-MM-dd" 
 | 
                    placeholder="请选择" /> 
 | 
                </el-form-item> 
 | 
              </div> 
 | 
              <div class="m_title"> 
 | 
                <span>租赁条款</span> 
 | 
                <el-button type="text" size="medium" @click="addZl">增加</el-button> 
 | 
              </div> 
 | 
              <div class="list"> 
 | 
                <div style="width: 100%; display: flex; flex-wrap: wrap;" 
 | 
                  v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> 
 | 
                  <el-form-item label="起始日期" :prop="'zlDetailList.' + index + '.time'" :rules="{ 
 | 
                    required: true, message: '请选择', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" 
 | 
                      value-format="yyyy-MM-dd" placeholder="请选择" /> 
 | 
                  </el-form-item> 
 | 
                  <el-form-item label="合同单价" :prop="'zlDetailList.' + index + '.price'" :rules="{ 
 | 
                    required: true, message: '请输入', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <el-input placeholder="请输入" v-model="zlDetailList.price" @input="clearzl" class="input-with-select"> 
 | 
                      <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" 
 | 
                        placeholder="请选择"> 
 | 
                        <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" 
 | 
                          :label="item.name"></el-option> 
 | 
                      </el-select> 
 | 
                    </el-input> 
 | 
                  </el-form-item> 
 | 
                  <el-form-item label="付款提前天数" :prop="'zlDetailList.' + index + '.advanceDays'" :rules="{ 
 | 
                    required: true, message: '请输入', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <div style="display: flex; align-items: center; justify-content: space-between;"> 
 | 
                      <el-input v-model="zlDetailList.advanceDays" @input="clearzl" placeholder="请输入" v-trim /> 
 | 
                      <el-link :underline="false" type="danger" @click="deleZl(index)" 
 | 
                        style="margin-left: 20px; flex-shrink: 0;">删除</el-link> 
 | 
                    </div> 
 | 
                  </el-form-item> 
 | 
                </div> 
 | 
              </div> 
 | 
            </el-form> 
 | 
          </div> 
 | 
        </div> 
 | 
        <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateZL">生成账单明细</el-button> 
 | 
        <el-table :data="zlList" class="mt20" stripe> 
 | 
          <el-table-column label="费用类型" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              <span v-if="row.costType === 0">租赁费</span> 
 | 
              <span v-if="row.costType === 1">物业费</span> 
 | 
              <span v-if="row.costType === 2">租赁押金</span> 
 | 
              <span v-if="row.costType === 3">物业押金</span> 
 | 
              <span v-if="row.costType === 4">水电费</span> 
 | 
              <span v-if="row.costType === 5">杂项费</span> 
 | 
              <span v-if="row.costType === 6">其他</span> 
 | 
              <span v-if="row.costType === 7">保证金</span> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column label="期数" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column label="区间" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{ row.startDate }} ~ {{ row.endDate }} 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="planPayDate" label="付款日" align="center" show-overflow-tooltip /> 
 | 
          <el-table-column label="应收" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{ row.receivableFee }}元 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
        </el-table> 
 | 
        <div class="total"> 
 | 
          <span>总计</span> 
 | 
          <div>费用应收总计:{{ zlPrice }}元,押金应收总计:{{ form.zlDeposit }}元</div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <!--   物业条款   --> 
 | 
      <div v-show="cactiveTabs === 1"> 
 | 
        <div class="main"> 
 | 
          <div class="main_content"> 
 | 
            <el-form :model="form" ref="paramCostRef1" :rules="rules"> 
 | 
              <div class="m_title">物业信息</div> 
 | 
              <div class="list"> 
 | 
                <el-form-item label="物业押金" prop="wyDeposit"> 
 | 
                  <el-input v-model="form.wyDeposit" @input="clearwy" placeholder="请输入" v-trim /> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="付款方式" prop="wyPayType"> 
 | 
                  <el-select v-model="form.wyPayType" @change="changePayType1" placeholder="请选择"> 
 | 
                    <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" 
 | 
                      :label="item.name"></el-option> 
 | 
                  </el-select> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="免租期" prop="wyDate"> 
 | 
                  <el-date-picker type="daterange" v-model="form.wyDate" @change="getWYDate" value-format="yyyy-MM-dd" 
 | 
                    placeholder="请选择" /> 
 | 
                </el-form-item> 
 | 
              </div> 
 | 
              <div class="m_title"> 
 | 
                <span>物业条款</span> 
 | 
                <el-button type="text" size="medium" @click="addWy">增加</el-button> 
 | 
              </div> 
 | 
              <div class="list"> 
 | 
                <div style="width: 100%; display: flex; flex-wrap: wrap;" 
 | 
                  v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> 
 | 
                  <el-form-item label="起始日期" :prop="'wyDetailList.' + index + '.time'" :rules="{ 
 | 
                    required: true, message: '请输入', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" 
 | 
                      value-format="yyyy-MM-dd" placeholder="请选择" /> 
 | 
                  </el-form-item> 
 | 
                  <el-form-item label="合同单价" :prop="'wyDetailList.' + index + '.price'" :rules="{ 
 | 
                    required: true, message: '请输入', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <el-input placeholder="请输入" @input="clearwy" v-model="wyDetailList.price"> 
 | 
                      <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" 
 | 
                        placeholder="请选择"> 
 | 
                        <el-option v-for="(item, index) in unitOps1" :key="index" :value="item.value" 
 | 
                          :label="item.name"></el-option> 
 | 
                      </el-select> 
 | 
                    </el-input> 
 | 
                  </el-form-item> 
 | 
                  <el-form-item label="付款提前天数" :prop="'wyDetailList.' + index + '.advanceDays'" :rules="{ 
 | 
                    required: true, message: '请输入', trigger: 'blur' 
 | 
                  }"> 
 | 
                    <div style="display: flex; align-items: center; justify-content: space-between;"> 
 | 
                      <el-input v-model="wyDetailList.advanceDays" @input="clearwy" placeholder="请输入" v-trim /> 
 | 
                      <el-link :underline="false" type="danger" @click="deleWy(index)" 
 | 
                        style="margin-left: 20px; flex-shrink: 0;">删除</el-link> 
 | 
                    </div> 
 | 
                  </el-form-item> 
 | 
                </div> 
 | 
              </div> 
 | 
            </el-form> 
 | 
          </div> 
 | 
        </div> 
 | 
        <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateWY">生成账单明细</el-button> 
 | 
        <el-table :data="wyList" class="mt20" stripe> 
 | 
          <el-table-column label="费用类型" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              <span v-if="row.costType === 0">租赁费</span> 
 | 
              <span v-if="row.costType === 1">物业费</span> 
 | 
              <span v-if="row.costType === 2">租赁押金</span> 
 | 
              <span v-if="row.costType === 3">物业押金</span> 
 | 
              <span v-if="row.costType === 4">水电费</span> 
 | 
              <span v-if="row.costType === 5">杂项费</span> 
 | 
              <span v-if="row.costType === 6">其他</span> 
 | 
              <span v-if="row.costType === 7">保证金</span> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column label="期数" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column label="区间" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{ row.startDate }} ~ {{ row.endDate }} 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="planPayDate" label="付款日" align="center" show-overflow-tooltip /> 
 | 
          <el-table-column prop="receivableFee" label="应收" align="center" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{ row.receivableFee }}元 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
        </el-table> 
 | 
        <div class="total"> 
 | 
          <span>总计</span> 
 | 
          <div>费用应收总计:{{ wyPrice }}元,押金应收总计:{{ form.wyDeposit }}元</div> 
 | 
        </div> 
 | 
      </div> 
 | 
    </div> 
 | 
    <div class="window__footer"> 
 | 
      <slot name="footer"> 
 | 
        <el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '下一步' : 
 | 
          '提交'}}</el-button> 
 | 
        <slot name="btns" /> 
 | 
        <el-button @click="close">{{ activeTabs === 0 ? '返回' : '上一步' }}</el-button> 
 | 
      </slot> 
 | 
    </div> 
 | 
    <!-- 选择租客 --> 
 | 
    <MemberSearch ref="MemberSearchRef" @select="getTenant" /> 
 | 
  </GlobalWindow> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import GlobalWindow from '@/components/common/GlobalWindow' 
 | 
import BaseOpera from '@/components/base/BaseOpera' 
 | 
import MemberSearch from '@/components/common/MemberSearch' 
 | 
import { rules } from './config' 
 | 
import { create, getBillList } from '@/api/contract' 
 | 
import { ywList } from '@/api/customer' 
 | 
import { getUserList } from '@/api/system/user' 
 | 
import { getProjectList, tree } from '@/api/project/ywProject' 
 | 
import {companyListConstract as companyList } from '@/api/company' 
 | 
import { Message, Loading } from 'element-ui' 
 | 
import { mapState } from 'vuex' 
 | 
export default { 
 | 
  components: { 
 | 
    GlobalWindow, 
 | 
    MemberSearch 
 | 
  }, 
 | 
  extends: BaseOpera, 
 | 
  computed: { 
 | 
    ...mapState(['userInfo']) 
 | 
  }, 
 | 
  data() { 
 | 
    return { 
 | 
      title: '创建合同', 
 | 
      activeTabs: 0, 
 | 
      form: { 
 | 
        type: '', 
 | 
        code: '', 
 | 
        userId: '', 
 | 
        signDate: '', 
 | 
        startDate: '', 
 | 
        endDate: '', 
 | 
        projectId: '', 
 | 
        roundedUp: 0, 
 | 
        companyId: '', 
 | 
        renterId: '', 
 | 
        renterName: '', 
 | 
        memberId: '', 
 | 
        memberName: '', 
 | 
        fileList: [], 
 | 
  
 | 
        zlDeposit: '', 
 | 
        zlPayType: '', 
 | 
        zlFreeStartDate: '', 
 | 
        zlFreeEndDate: '', 
 | 
        zlDate: [], 
 | 
        zlDetailList: [ 
 | 
          { 
 | 
            circleType: 0, 
 | 
            startDate: '', 
 | 
            endDate: '', 
 | 
            time: [], 
 | 
            price: '', 
 | 
            advanceDays: '' 
 | 
          } 
 | 
        ], 
 | 
  
 | 
  
 | 
        wyDeposit: '', 
 | 
        wyPayType: '', 
 | 
        wyFreeStartDate: '', 
 | 
        wyFreeEndDate: '', 
 | 
        wyDate: [], 
 | 
        wyDetailList: [ 
 | 
          { 
 | 
            circleType: 0, 
 | 
            startDate: '', 
 | 
            endDate: '', 
 | 
            time: [], 
 | 
            price: '', 
 | 
            advanceDays: '' 
 | 
          } 
 | 
        ], 
 | 
  
 | 
        roomIds: [] 
 | 
      }, 
 | 
  
 | 
      ids: [], 
 | 
  
 | 
      zlList: [], 
 | 
      wyList: [], 
 | 
  
 | 
      rules, 
 | 
  
 | 
      contactsList: [], 
 | 
  
 | 
      loadingInstance: null, 
 | 
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', 
 | 
      uploadData: { 
 | 
        folder: 'YW_CONTRACT_FILE' 
 | 
      }, 
 | 
  
 | 
      types: [ 
 | 
        { name: '物业+租赁合同', value: 0 }, 
 | 
        { name: '租赁合同', value: 2 }, 
 | 
        { name: '物业合同', value: 1 } 
 | 
      ], 
 | 
      agentList: [], // 经办人 
 | 
      projectList: [], 
 | 
      comparyList: [], // 公司 
 | 
      houseList: [], 
 | 
      cactiveTabs: 0, 
 | 
      payMethods: [ 
 | 
        { name: '一次性付款', value: 0 }, 
 | 
        { name: '3个月一付', value: 1 }, 
 | 
        { name: '6个月一付', value: 2 }, 
 | 
        { name: '1年一付', value: 3 }, 
 | 
      ], 
 | 
      unitOps: [ 
 | 
        { name: '元/m²·天', value: 0 }, 
 | 
        { name: '元/m²·月', value: 1 }, 
 | 
        { name: '元/天', value: 3 }, 
 | 
        { name: '元/月', value: 4 }, 
 | 
        { name: '元/年', value: 5 }, 
 | 
        { name: '元/m²·年', value: 2 }, 
 | 
        { name: '元/场', value: 6 }, 
 | 
      ], 
 | 
      unitOps1: [ 
 | 
        { name: '元/m²·天', value: 0 }, 
 | 
        { name: '元/m²·月', value: 1 }, 
 | 
        { name: '元/天', value: 3 }, 
 | 
        { name: '元/月', value: 4 }, 
 | 
        { name: '元/年', value: 5 }, 
 | 
        { name: '元/m²·年', value: 2 }, 
 | 
        { name: '元/场', value: 6 }, 
 | 
      ], 
 | 
  
 | 
  
 | 
      houseLvThree: [] 
 | 
    } 
 | 
  }, 
 | 
  methods: { 
 | 
    open(title, target) { 
 | 
      this.title = title 
 | 
      this.ids = [] 
 | 
      this.houseList = [] 
 | 
      this.zlPrice = '' 
 | 
      this.wyPrice = '' 
 | 
      this.getUser() 
 | 
      this.getProject() 
 | 
      this.getCompany() 
 | 
      this.visible = true 
 | 
      this.$nextTick(() => { 
 | 
        this.$refs.form.resetFields() 
 | 
        for (const key in this.form) { 
 | 
          if (['roomIds', 'fileList', 'wyDate', 'zlDate'].includes(key)) { 
 | 
            this.form[key] = [] 
 | 
          } else { 
 | 
            this.form[key] = '' 
 | 
          } 
 | 
        } 
 | 
        this.wyList = [] 
 | 
        this.zlList = [] 
 | 
        this.form.userId = this.userInfo.id 
 | 
        this.form.signDate = this.getDayTime() 
 | 
        this.form.startDate = this.getDayTime() 
 | 
        this.form.endDate = this.getDayTime(1) 
 | 
        this.form.zlDetailList = [ 
 | 
          { 
 | 
            circleType: 0, 
 | 
            startDate: this.form.startDate, 
 | 
            endDate: this.form.endDate, 
 | 
            time: [this.form.startDate, this.form.endDate], 
 | 
            price: '', 
 | 
            advanceDays: '' 
 | 
          } 
 | 
        ] 
 | 
        this.form.wyDetailList = [ 
 | 
          { 
 | 
            circleType: 0, 
 | 
            startDate: this.form.startDate, 
 | 
            endDate: this.form.endDate, 
 | 
            time: [this.form.startDate, this.form.endDate], 
 | 
            price: '', 
 | 
            advanceDays: '' 
 | 
          } 
 | 
        ] 
 | 
        this.form.roundedUp = 0 
 | 
        // this.getHouseTree() 
 | 
      }) 
 | 
    }, 
 | 
    changePayType(e) { 
 | 
      if (e === 0) { 
 | 
        this.unitOps = [ 
 | 
          { name: '元/m²·天', value: 0 }, 
 | 
          { name: '元/m²·月', value: 1 }, 
 | 
          { name: '元/天', value: 3 }, 
 | 
          { name: '元/月', value: 4 }, 
 | 
          { name: '元/年', value: 5 }, 
 | 
          { name: '元/m²·年', value: 2 }, 
 | 
          { name: '元/场', value: 6 }, 
 | 
        ] 
 | 
      } else { 
 | 
        this.form.zlDetailList.forEach(item => { 
 | 
          if (item.circleType === 6) { 
 | 
            item.circleType = 0 
 | 
          } 
 | 
        }) 
 | 
        this.unitOps = [ 
 | 
          { name: '元/m²·天', value: 0 }, 
 | 
          { name: '元/m²·月', value: 1 }, 
 | 
          { name: '元/天', value: 3 }, 
 | 
          { name: '元/月', value: 4 }, 
 | 
          { name: '元/年', value: 5 }, 
 | 
          { name: '元/m²·年', value: 2 } 
 | 
        ] 
 | 
      } 
 | 
      this.clearzl() 
 | 
    }, 
 | 
    changePayType1(e) { 
 | 
      if (e === 0) { 
 | 
        this.unitOps1 = [ 
 | 
          { name: '元/m²·天', value: 0 }, 
 | 
          { name: '元/m²·月', value: 1 }, 
 | 
          { name: '元/天', value: 3 }, 
 | 
          { name: '元/月', value: 4 }, 
 | 
          { name: '元/年', value: 5 }, 
 | 
          { name: '元/m²·年', value: 2 }, 
 | 
          { name: '元/场', value: 6 }, 
 | 
        ] 
 | 
      } else { 
 | 
        this.form.wyDetailList.forEach(item => { 
 | 
          if (item.circleType === 6) { 
 | 
            item.circleType = 0 
 | 
          } 
 | 
        }) 
 | 
        this.unitOps1 = [ 
 | 
          { name: '元/m²·天', value: 0 }, 
 | 
          { name: '元/m²·月', value: 1 }, 
 | 
          { name: '元/天', value: 3 }, 
 | 
          { name: '元/月', value: 4 }, 
 | 
          { name: '元/年', value: 5 }, 
 | 
          { name: '元/m²·年', value: 2 } 
 | 
        ] 
 | 
      } 
 | 
      this.clearwy() 
 | 
    }, 
 | 
    // 获取联系人 
 | 
    getYwList() { 
 | 
      ywList({ 
 | 
        customerId: this.form.renterId 
 | 
      }).then(res => { 
 | 
        this.contactsList = res 
 | 
      }) 
 | 
    }, 
 | 
    getHouseData() { 
 | 
      if (this.form.startDate && this.form.endDate) { 
 | 
        this.getHouseTree() 
 | 
        if (this.form.zlDetailList.length === 1) { 
 | 
          this.form.zlDetailList[0].startDate = this.form.startDate 
 | 
          this.form.zlDetailList[0].endDate = this.form.endDate 
 | 
          this.form.zlDetailList[0].time = [this.form.startDate, this.form.endDate] 
 | 
        } 
 | 
        if (this.form.wyDetailList.length === 1) { 
 | 
          this.form.wyDetailList[0].startDate = this.form.startDate 
 | 
          this.form.wyDetailList[0].endDate = this.form.endDate 
 | 
          this.form.wyDetailList[0].time = [this.form.startDate, this.form.endDate] 
 | 
        } 
 | 
      } 
 | 
    }, 
 | 
    changeType(e) { 
 | 
      if (e === 0 || e === 2) { 
 | 
        this.cactiveTabs = 0 
 | 
      } else if (e === 0 || e === 1) { 
 | 
        this.cactiveTabs = 1 
 | 
      } 
 | 
    }, 
 | 
    getDayTime(num) { 
 | 
      const today = new Date() 
 | 
      const year = today.getFullYear() 
 | 
      const month = today.getMonth() + 1 
 | 
      const day = today.getDate() 
 | 
      if (!num) { 
 | 
        return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` 
 | 
      } else { 
 | 
        return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}` 
 | 
      } 
 | 
    }, 
 | 
    clearzl() { 
 | 
      this.zlList = [] 
 | 
      this.zlPrice = '' 
 | 
    }, 
 | 
    clearwy() { 
 | 
      this.wyList = [] 
 | 
      this.wyPrice = '' 
 | 
    }, 
 | 
    confirm() { 
 | 
      var that = this 
 | 
      if (this.activeTabs === 0) { 
 | 
        this.$refs.form.validate((valid) => { 
 | 
          if (!valid) return 
 | 
          if (this.form.roomIds.length === 0) return this.$message.warning('请选择房源!') 
 | 
          this.activeTabs = 1 
 | 
        }) 
 | 
      } else if (this.activeTabs === 1) { 
 | 
        if (this.form.type === 0) { 
 | 
          this.$refs.paramCostRef.validate((valid1) => { 
 | 
            if (!valid1) { 
 | 
              return 
 | 
            } 
 | 
            this.$refs.paramCostRef1.validate((valid2) => { 
 | 
              if (!valid2) { 
 | 
                return 
 | 
              } 
 | 
              if (that.zlList.length === 0) return that.$message.warning('请先生成租赁账单!') 
 | 
              if (that.wyList.length === 0) return that.$message.warning('请先生成物业账单!') 
 | 
              this.submit() 
 | 
            }) 
 | 
          }) 
 | 
        } else if (this.form.type === 2) { 
 | 
          this.$refs.paramCostRef.validate((valid1) => { 
 | 
            if (!valid1) { 
 | 
              return 
 | 
            } 
 | 
            if (that.zlList.length === 0) return that.$message.warning('请先生成租赁账单!') 
 | 
            this.submit() 
 | 
          }) 
 | 
        } else if (this.form.type === 1) { 
 | 
          this.$refs.paramCostRef1.validate((valid2) => { 
 | 
            if (!valid2) { 
 | 
              return 
 | 
            } 
 | 
            if (that.wyList.length === 0) return that.$message.warning('请先生成物业账单!') 
 | 
            this.submit() 
 | 
          }) 
 | 
        } 
 | 
      } 
 | 
    }, 
 | 
    submit() { 
 | 
      // 调用新建接口 
 | 
      this.isWorking = true 
 | 
      create({ ...this.form }) 
 | 
        .then(res => { 
 | 
          this.visible = false 
 | 
          this.$tip.apiSuccess('创建成功') 
 | 
          this.$emit('success') 
 | 
        }) 
 | 
        .finally(() => { 
 | 
          this.isWorking = false 
 | 
        }) 
 | 
    }, 
 | 
    getDate1(e, index) { 
 | 
      this.form.zlDetailList[index].startDate = e[0] 
 | 
      this.form.zlDetailList[index].endDate = e[1] 
 | 
      this.clearzl() 
 | 
    }, 
 | 
    getDate2(e, index) { 
 | 
      this.form.wyDetailList[index].startDate = e[0] 
 | 
      this.form.wyDetailList[index].endDate = e[1] 
 | 
      this.clearwy() 
 | 
    }, 
 | 
    checkHouseRoom(a, b) { 
 | 
      this.ids = b.checkedKeys 
 | 
      let arr = b.checkedKeys.map(item => { 
 | 
        if (item.split('-')[0] == 3) { 
 | 
          return Number(item.split('-')[1]) 
 | 
        } 
 | 
      }) 
 | 
      this.form.roomIds = arr.filter(item => item !== undefined) 
 | 
    }, 
 | 
    getHouseTree() { 
 | 
      tree({ 
 | 
        startDate: this.form.startDate, 
 | 
        endDate: this.form.endDate, 
 | 
        projectId: this.form.projectId 
 | 
      }) 
 | 
        .then(res => { 
 | 
          res.forEach(item => { 
 | 
            item.disabled = true 
 | 
          }) 
 | 
          this.addParamToArray(res) 
 | 
          this.houseList = res 
 | 
        }) 
 | 
    }, 
 | 
    addParamToArray(arr) { 
 | 
      for (let i = 0; i < arr.length; i++) { 
 | 
        const currentItem = arr[i].projectDataVOList 
 | 
        arr[i].idd = arr[i].lv + '-' + arr[i].id 
 | 
        if (currentItem.length > 0) { 
 | 
          this.addParamToArray(currentItem) 
 | 
        } 
 | 
      } 
 | 
    }, 
 | 
    generateZL() { 
 | 
      getBillList({ ...this.form, billType: 0 }) 
 | 
        .then(res => { 
 | 
          let zlPrice = 0 
 | 
          let arr = [] 
 | 
          res.forEach(item => { 
 | 
            if (item.costType === 0) { 
 | 
              zlPrice += item.receivableFee 
 | 
            } 
 | 
            arr.push(item) 
 | 
          }) 
 | 
          this.zlPrice = zlPrice 
 | 
          this.zlList = arr 
 | 
        }) 
 | 
    }, 
 | 
    generateWY() { 
 | 
      getBillList({ ...this.form, billType: 1 }) 
 | 
        .then(res => { 
 | 
          this.wy = true 
 | 
          let zlPrice = 0 
 | 
          let arr = [] 
 | 
          res.forEach(item => { 
 | 
            if (item.costType === 1) { 
 | 
              zlPrice += item.receivableFee 
 | 
            } 
 | 
            arr.push(item) 
 | 
          }) 
 | 
          this.wyPrice = zlPrice 
 | 
          this.wyList = arr 
 | 
        }) 
 | 
    }, 
 | 
    addZl() { 
 | 
      this.form.zlDetailList.push({ 
 | 
        circleType: 0, 
 | 
        startDate: this.form.startDate, 
 | 
        endDate: this.form.endDate, 
 | 
        time: [this.form.startDate, this.form.endDate], 
 | 
        price: '', 
 | 
        advanceDays: '' 
 | 
      }) 
 | 
    }, 
 | 
    addWy() { 
 | 
      this.form.wyDetailList.push({ 
 | 
        circleType: 0, 
 | 
        startDate: this.form.startDate, 
 | 
        endDate: this.form.endDate, 
 | 
        time: [this.form.startDate, this.form.endDate], 
 | 
        price: '', 
 | 
        advanceDays: '' 
 | 
      }) 
 | 
    }, 
 | 
    deleZl(index) { 
 | 
      if (this.form.zlDetailList.length === 1) return Message.warning('至少保留一条!') 
 | 
      this.form.zlDetailList.splice(index, 1) 
 | 
      this.clearzl() 
 | 
    }, 
 | 
    deleWy(index) { 
 | 
      if (this.form.wyDetailList.length === 1) return Message.warning('至少保留一条!') 
 | 
      this.form.wyDetailList.splice(index, 1) 
 | 
      this.clearwy() 
 | 
    }, 
 | 
    getZLDate(e) { 
 | 
      this.form.zlFreeStartDate = e[0] 
 | 
      this.form.zlFreeEndDate = e[1] 
 | 
      this.clearzl() 
 | 
    }, 
 | 
    getWYDate(e) { 
 | 
      this.form.wyFreeStartDate = e[0] 
 | 
      this.form.wyFreeEndDate = e[1] 
 | 
      this.clearwy() 
 | 
    }, 
 | 
    getTenant(row) { 
 | 
      this.form.renterId = row.id 
 | 
      this.form.renterName = row.name 
 | 
      this.form.memberId = '' 
 | 
      this.form.memberName = '' 
 | 
      this.getYwList() 
 | 
    }, 
 | 
    dele(imgaddr) { 
 | 
      this.form.fileList.forEach((item, index) => { 
 | 
        if (imgaddr === item.imgaddr) { 
 | 
          this.form.fileList.splice(index, 1) 
 | 
        } 
 | 
      }) 
 | 
    }, 
 | 
    getUser() { 
 | 
      getUserList({}) 
 | 
        .then(res => { 
 | 
          this.agentList = res 
 | 
        }) 
 | 
    }, 
 | 
    getProject() { 
 | 
      getProjectList({}) 
 | 
        .then(res => { 
 | 
          this.projectList = res || [] 
 | 
          if (this.projectList.length > 0) { 
 | 
            this.$set(this.form, 'projectId', this.projectList[0].id) 
 | 
            this.getHouseTree() 
 | 
          } 
 | 
        }) 
 | 
    }, 
 | 
    getCompany() { 
 | 
      companyList({ type: 2 }) 
 | 
        .then(res => { 
 | 
          this.comparyList = res 
 | 
          this.form.companyId = res[0].id 
 | 
        }) 
 | 
    }, 
 | 
    tabsClick(val) { 
 | 
      this.activeTabs = val 
 | 
    }, 
 | 
    ctabsClick(val) { 
 | 
      this.cactiveTabs = val 
 | 
    }, 
 | 
    handleRent() { 
 | 
      this.$refs.MemberSearchRef.open() 
 | 
    }, 
 | 
    houseChange(e) { 
 | 
      console.log(e) 
 | 
    }, 
 | 
    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(() => { 
 | 
        if (this.loadingInstance) { 
 | 
          this.loadingInstance.close() 
 | 
        } 
 | 
      }) 
 | 
      const item = file.data[0] 
 | 
      this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) 
 | 
    }, 
 | 
    close() { 
 | 
      if (this.activeTabs === 0) { 
 | 
        this.$emit('close') 
 | 
        this.visible = false 
 | 
      } else { 
 | 
        this.activeTabs = 0 
 | 
        this.zlList = [] 
 | 
        this.wyList = [] 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
@import '@/assets/style/variables.scss'; 
 | 
  
 | 
.fixed { 
 | 
  background: #ffffff; 
 | 
  position: sticky; 
 | 
  top: 0; 
 | 
  left: 0; 
 | 
  z-index: 999; 
 | 
} 
 | 
.window__footer { 
 | 
  position: absolute; 
 | 
  width: 100%; 
 | 
  bottom: 0; 
 | 
  left: 0; 
 | 
  z-index: 9; 
 | 
  background: #ffffff; 
 | 
  user-select: none; 
 | 
  border-top: 1px solid #eee; 
 | 
  height: 60px; 
 | 
  line-height: 60px; 
 | 
  text-align: center; 
 | 
} 
 | 
.tabs { 
 | 
  border-bottom: 1px solid #DFE2E8; 
 | 
  display: flex; 
 | 
  margin-bottom: 20px; 
 | 
  display: flex; 
 | 
  justify-content: center; 
 | 
  
 | 
  .tab { 
 | 
    height: 58px; 
 | 
    line-height: 58px; 
 | 
    font-size: 16px; 
 | 
    color: #666666; 
 | 
    margin: 0 30px; 
 | 
    cursor: pointer; 
 | 
  } 
 | 
  
 | 
  .active { 
 | 
    font-weight: 500; 
 | 
    color: $primary-color; 
 | 
    border-bottom: 2px solid $primary-color; 
 | 
  } 
 | 
} 
 | 
  
 | 
.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; 
 | 
  
 | 
    .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; 
 | 
  display: flex; 
 | 
  align-items: center; 
 | 
  justify-content: space-between; 
 | 
  
 | 
  span { 
 | 
    font-weight: 500; 
 | 
    font-size: 14px; 
 | 
    margin-bottom: 15px; 
 | 
  } 
 | 
} 
 | 
</style> 
 |