<template> 
 | 
  <GlobalWindow 
 | 
    :title="title" 
 | 
    :visible.sync="visible" 
 | 
    :withFooter="false" 
 | 
    :confirm-working="isWorking" 
 | 
    @close="close" 
 | 
    @confirm="confirm"> 
 | 
    <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;"> 
 | 
      <div class="home_title" v-if="info"> 
 | 
        <div class="left"> 
 | 
          <span class="mr10">单位名称:{{info.renterName}}</span> 
 | 
          <el-tag type="success" v-if="info.status === 0">待执行</el-tag> 
 | 
          <el-tag type="success" v-if="info.status === 1">正常执行中</el-tag> 
 | 
          <el-tag type="info" v-if="info.status === 2">已到期</el-tag> 
 | 
          <el-tag type="info" v-if="info.status === 3">退租结算中</el-tag> 
 | 
          <el-tag type="info" v-if="info.status === 4">已退租</el-tag> 
 | 
        </div> 
 | 
        <div> 
 | 
          <el-button type="primary" @click="$refs.pendingBills.open('待处理账单', id)" v-if="info.status === 3">查看待处理账单</el-button> 
 | 
          <el-button @click="$refs.terminationAgreement.open('退租协议', id)" v-if="[3,4].includes(info.status)">查看退租协议</el-button> 
 | 
          <el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">退租</el-button> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="remark" v-if="info">{{info.remark}}</div> 
 | 
      <div class="remark" v-if="info && info.status === 3">{{info.btRemark}}</div> 
 | 
      <div class="tabs"> 
 | 
        <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">合同信息</div> 
 | 
        <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">关联账单</div> 
 | 
        <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">操作记录</div> 
 | 
      </div> 
 | 
    </div> 
 | 
    <div class="main" v-if="activeTabs === 0 && info"> 
 | 
      <div class="title">基础信息</div> 
 | 
      <div class="list"> 
 | 
        <div class="item"> 
 | 
          <div class="la">合同编号</div> 
 | 
          <div class="val">{{ info.code }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">经办人</div> 
 | 
          <div class="val">{{ info.userName }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">创建人</div> 
 | 
          <div class="val">{{ info.creatorName }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">合同租赁面积</div> 
 | 
          <div class="val">{{ info.totalArea }}㎡</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">所属公司</div> 
 | 
          <div class="val">{{ info.companyName }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">签订日期</div> 
 | 
          <div class="val">{{ info.signDate }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">开始日期</div> 
 | 
          <div class="val">{{ info.startDate }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">结束日期</div> 
 | 
          <div class="val">{{ info.endDate }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">所属项目</div> 
 | 
          <div class="val">{{ info.projectName }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">结果取整(四舍五入)</div> 
 | 
          <div class="val">{{ info.roundedUp === 1 ? '是' : '否' }}</div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="title">房源信息</div> 
 | 
      <div class="list"> 
 | 
        <el-table :data="info.roomList" stripe> 
 | 
          <el-table-column prop="projectName" label="项目名称" show-overflow-tooltip /> 
 | 
          <el-table-column prop="buildingName" label="楼宇名称" show-overflow-tooltip /> 
 | 
          <el-table-column prop="" label="楼层/房号" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{row.floorName}}/{{row.roomNum}} 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="area" label="面积" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              {{row.rentArea}}㎡ 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
        </el-table> 
 | 
      </div> 
 | 
      <div class="title">租客信息</div> 
 | 
      <div class="list"> 
 | 
        <div class="item"> 
 | 
          <div class="la">租客</div> 
 | 
          <div class="val">{{ info.renterName }}</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">经办人</div> 
 | 
          <div class="val">{{ info.userName }}</div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="title" v-if="info.type === 2 || info.type === 0">租赁条款</div> 
 | 
      <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 2 || info.type === 0"> 
 | 
        <div class="item"> 
 | 
          <div class="la">押金金额</div> 
 | 
          <div class="val">{{ info.zlDeposit }}元</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">付款方式</div> 
 | 
          <div class="val" v-if="info.zlPayType === 0">一次性付款</div> 
 | 
          <div class="val" v-if="info.zlPayType === 1">每三个月一付</div> 
 | 
          <div class="val" v-if="info.zlPayType === 2">六个月一付</div> 
 | 
          <div class="val" v-if="info.zlPayType === 3">一年一付</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">免租期</div> 
 | 
          <div class="val" v-if="info.zlFreeStartDate && info.zlFreeEndDate"> 
 | 
            {{ info.zlFreeStartDate }} ~ {{ info.zlFreeEndDate }} 
 | 
          </div> 
 | 
          <div class="val" v-else> 
 | 
            - 
 | 
          </div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <el-table :data="info.zlDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 2 || info.type === 0"> 
 | 
        <el-table-column prop="startDate" label="开始日期" :key="Date.now()" min-width="100" show-overflow-tooltip /> 
 | 
        <el-table-column prop="endDate" label="结束日期" :key="Date.now()" min-width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="合同单价" min-width="100" show-overflow-tooltip> 
 | 
          <template slot-scope="{row}"> 
 | 
            {{row.price}} {{returnUnit(row.circleType)}} 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column label="付款提前天数" min-width="100" show-overflow-tooltip> 
 | 
          <template slot-scope="{row}"> 
 | 
            <template v-if="row.advanceDays"> 
 | 
              {{row.advanceDays}}天 
 | 
            </template> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
      <div class="title" v-if="info.type === 1 || info.type === 0">物业费条款</div> 
 | 
      <div class="list" style="background: #F7F7F7; padding: 15px 20px;" v-if="info.type === 1 || info.type === 0"> 
 | 
        <div class="item"> 
 | 
          <div class="la">押金金额</div> 
 | 
          <div class="val">{{ info.wyDeposit }}元</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">付款方式</div> 
 | 
          <div class="val" v-if="info.wyPayType === 0">一次性付款</div> 
 | 
          <div class="val" v-if="info.wyPayType === 1">每三个月一付</div> 
 | 
          <div class="val" v-if="info.wyPayType === 2">六个月一付</div> 
 | 
          <div class="val" v-if="info.wyPayType === 3">一年一付</div> 
 | 
        </div> 
 | 
        <div class="item"> 
 | 
          <div class="la">免租期</div> 
 | 
          <div class="val">{{ info.wyFreeStartDate }} ~ {{ info.wyFreeEndDate }}</div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <el-table :data="info.wyDetailList" stripe style="margin-bottom: 20px;" v-if="info.type === 1 || info.type === 0"> 
 | 
        <el-table-column prop="startDate" label="开始日期" :key="Date.now()" min-width="100" show-overflow-tooltip /> 
 | 
        <el-table-column prop="endDate" label="结束日期" :key="Date.now()" min-width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="合同单价" min-width="100" show-overflow-tooltip> 
 | 
          <template slot-scope="{row}"> 
 | 
            {{row.price}} {{returnUnit(row.circleType)}} 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column label="付款提前天数" min-width="100" show-overflow-tooltip> 
 | 
          <template slot-scope="{row}"> 
 | 
            {{row.advanceDays}}天 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
      <div class="title">合同附件</div> 
 | 
      <div class="list"> 
 | 
        <el-table :data="info.fileList" stripe> 
 | 
          <el-table-column label="附件名称" show-overflow-tooltip> 
 | 
            <template slot-scope="{row}"> 
 | 
              <u style="color: #0c6ce3; cursor: pointer;" @click="xiazai(row.fileurlFull)">{{row.name}}</u> 
 | 
            </template> 
 | 
          </el-table-column> 
 | 
          <el-table-column prop="userName" label="操作人" show-overflow-tooltip /> 
 | 
          <el-table-column prop="createDate" label="操作时间" show-overflow-tooltip /> 
 | 
        </el-table> 
 | 
      </div> 
 | 
    </div> 
 | 
    <div class="main" v-if="activeTabs === 1 && info"> 
 | 
      <el-radio-group v-model="type" @change="changeType" style="margin-bottom: 20px;"> 
 | 
        <el-radio-button :label="0">收款账单</el-radio-button> 
 | 
        <el-radio-button :label="1">付款账单</el-radio-button> 
 | 
      </el-radio-group> 
 | 
      <el-table 
 | 
        :data="tableData" 
 | 
        border 
 | 
        v-loading="loading" 
 | 
        style="width: 100%"> 
 | 
        <el-table-column 
 | 
          width="150" 
 | 
          label="账单编号"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <el-button type="text" @click="openBill(row.id)">{{row.code}}</el-button> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          label="费用类型"> 
 | 
          <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 
 | 
          prop="totleFee" 
 | 
          label="账单金额"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          :key="Date.now()" 
 | 
          prop="receivableFee" 
 | 
          :label="`应${type === 0 ? '收' : '付'}金额`"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          prop="actReceivableFee" 
 | 
          :label="`实${type === 0 ? '收' : '付'}金额`"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          :label="`需${type === 0 ? '收' : '付'}金额`"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <template v-if="type === 0"> 
 | 
              <el-tag type="success" v-if="row.needReceivableFee > 0">收</el-tag> 
 | 
              <el-tag type="warning" v-else-if="row.needReceivableFee < 0">付</el-tag> 
 | 
            </template> 
 | 
            <template v-else> 
 | 
              <el-tag type="warning" v-if="row.needReceivableFee !== 0">付</el-tag> 
 | 
            </template> 
 | 
            <span style="margin-left: 10px;">{{Math.abs(row.needReceivableFee)}}</span> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          label="账单来源"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <span v-if="row.type === 0">合同账单</span> 
 | 
            <span v-else>自建账单</span> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          width="200" 
 | 
          label="计费周期"> 
 | 
          <template slot-scope="{row}"> 
 | 
            {{ row.startDate }} ~ {{ row.endDate }} 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          prop="planPayDate" 
 | 
          label="应收日期"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          label="是否逾期"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <span v-if="row.isOverdue === 0">否</span> 
 | 
            <span v-if="row.isOverdue === 1">是</span> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          fixed="right" 
 | 
          label="状态"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <span v-if="row.payStatus === 0">待收款</span> 
 | 
            <span v-if="row.payStatus === 1">已结清</span> 
 | 
            <span v-if="row.payStatus === 2">部分结清</span> 
 | 
            <span v-if="row.payStatus === 3">待付款</span> 
 | 
            <span v-if="row.payStatus === 4">待退款</span> 
 | 
            <span v-if="row.payStatus === 5">已关闭</span> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
      <el-pagination 
 | 
        @size-change="handleSizeChange" 
 | 
        @current-change="handleCurrentChange" 
 | 
        :current-page="page" 
 | 
        :page-sizes="[10, 15, 20, 25]" 
 | 
        :page-size="pageSize" 
 | 
        layout="total, sizes, prev, pager, next, jumper" 
 | 
        :total="total"> 
 | 
      </el-pagination> 
 | 
    </div> 
 | 
    <div class="main" v-if="activeTabs === 2 && info"> 
 | 
      <div class="title">操作记录</div> 
 | 
      <el-table 
 | 
        :data="info.logList" 
 | 
        border 
 | 
        style="width: 100%"> 
 | 
        <el-table-column 
 | 
          :key="Date.now()" 
 | 
          width="200" 
 | 
          prop="param1" 
 | 
          label="操作人"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          :key="Date.now()" 
 | 
          width="200" 
 | 
          prop="createDate" 
 | 
          label="操作时间"> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          :key="Date.now()" 
 | 
          width="150" 
 | 
          label="操作"> 
 | 
          <template slot-scope="{row}"> 
 | 
            <span v-if="row.objType === 0">工单创建</span> 
 | 
            <span v-if="row.objType === 1">指派</span> 
 | 
            <span v-if="row.objType === 2">处理</span> 
 | 
            <span v-if="row.objType === 3">合同创建</span> 
 | 
            <span v-if="row.objType === 4">合同变更</span> 
 | 
            <span v-if="row.objType === 5">合同退租</span> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
        <el-table-column 
 | 
          :key="Date.now()" 
 | 
          prop="content" 
 | 
          label="操作内容"> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
    </div> 
 | 
    <!--  退租  --> 
 | 
    <TerminateLease ref="terminateLease" @success="getData" /> 
 | 
    <!--  待处理账单  --> 
 | 
    <PendingBills ref="pendingBills" /> 
 | 
    <!--  退租协议  --> 
 | 
    <TerminationAgreement ref="terminationAgreement" /> 
 | 
    <!--  账单详情  --> 
 | 
    <BullDetail ref="bullDetail" /> 
 | 
  </GlobalWindow> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import GlobalWindow from '@/components/common/GlobalWindow' 
 | 
import BaseOpera from '@/components/base/BaseOpera' 
 | 
import TerminateLease from './terminateLease' 
 | 
import PendingBills from './pendingBills' 
 | 
import TerminationAgreement from './terminationAgreement' 
 | 
import BullDetail from '../../finance/components/bullDetail' 
 | 
import { getById } from '@/api/contract' 
 | 
import { fetchList } from '@/api/bill' 
 | 
export default { 
 | 
  components: { 
 | 
    GlobalWindow, 
 | 
    TerminateLease, 
 | 
    PendingBills, 
 | 
    TerminationAgreement, 
 | 
    BullDetail 
 | 
  }, 
 | 
  extends: BaseOpera, 
 | 
  data() { 
 | 
    return { 
 | 
      id: '', 
 | 
      visible: false, 
 | 
      activeTabs: 0, 
 | 
      type: 0, 
 | 
      info: null, 
 | 
      pageSize: 10, 
 | 
      page: 1, 
 | 
      total: 0, 
 | 
      tableData: [], 
 | 
  
 | 
      loading: false 
 | 
    } 
 | 
  }, 
 | 
  methods: { 
 | 
    open (title, id) { 
 | 
      this.title = title 
 | 
      this.activeTabs = 0 
 | 
      this.type = 0 
 | 
      this.page = 1 
 | 
      this.pageSize = 10 
 | 
      this.tableData = [] 
 | 
      this.id = id 
 | 
      this.getData() 
 | 
    }, 
 | 
    xiazai (url) { 
 | 
      window.open(url) 
 | 
    }, 
 | 
    openBill(id) { 
 | 
      this.$refs.bullDetail.open('账单详情', id) 
 | 
    }, 
 | 
    returnUnit (type) { 
 | 
      switch (type) { 
 | 
        case 0: 
 | 
          return '元/m²·天' 
 | 
        case 1: 
 | 
          return '元/m²·月' 
 | 
        case 2: 
 | 
          return '元/m²·年' 
 | 
        case 3: 
 | 
          return '元/天' 
 | 
        case 4: 
 | 
          return '元/月' 
 | 
        case 5: 
 | 
          return '元/年' 
 | 
        case 6: 
 | 
          return '元/场' 
 | 
      } 
 | 
    }, 
 | 
    getData () { 
 | 
      getById(this.id) 
 | 
        .then(res => { 
 | 
          this.info = res 
 | 
          this.getList() 
 | 
          this.visible = true 
 | 
        }) 
 | 
    }, 
 | 
    refund () { 
 | 
      this.$refs.terminateLease.open('新建退租协议', JSON.parse(JSON.stringify(this.info))) 
 | 
    }, 
 | 
    getList () { 
 | 
      this.loading = true 
 | 
      fetchList({ 
 | 
        capacity: this.pageSize, 
 | 
        page: this.page, 
 | 
        model: { 
 | 
          status: 0, 
 | 
          billType: this.type, 
 | 
          contractId: this.info.id 
 | 
        } 
 | 
      }).then(res => { 
 | 
        this.loading = false 
 | 
        this.tableData = res.records 
 | 
        this.total = res.total 
 | 
      }) 
 | 
    }, 
 | 
    changeType (e) { 
 | 
      this.type = e 
 | 
      this.page = 1 
 | 
      this.pageSize = 10 
 | 
      this.tableData = [] 
 | 
      this.getList() 
 | 
    }, 
 | 
    tabsClick(val) { 
 | 
      this.activeTabs = val 
 | 
    }, 
 | 
    getDetail() { 
 | 
  
 | 
    }, 
 | 
    handleSizeChange (e) { 
 | 
      this.pageSize = e 
 | 
      this.getList() 
 | 
    }, 
 | 
    handleCurrentChange (e) { 
 | 
      this.page = e 
 | 
      this.getList() 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
@import '@/assets/style/variables.scss'; 
 | 
.home_title { 
 | 
  display: flex; 
 | 
  justify-content: space-between; 
 | 
  align-items: center; 
 | 
  
 | 
  .left { 
 | 
    font-weight: 500; 
 | 
    font-size: 16px; 
 | 
    margin-right: 10px; 
 | 
    display: flex; 
 | 
    align-items: center; 
 | 
  
 | 
    .status { 
 | 
      padding: 0 6px; 
 | 
      height: 22px; 
 | 
      line-height: 22px; 
 | 
      border-radius: 2px; 
 | 
      border: 1px solid #00BA92; 
 | 
      color: #00BA92; 
 | 
      font-weight: 400; 
 | 
      font-size: 12px; 
 | 
      color: #00BA92; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
.remark { 
 | 
  background: #E8EBF7; 
 | 
  border-radius: 2px; 
 | 
  padding: 10px 20px; 
 | 
  font-size: 16px; 
 | 
  margin: 20px 0 
 | 
} 
 | 
  
 | 
.tabs { 
 | 
  border-bottom: 1px solid #DFE2E8; 
 | 
  display: flex; 
 | 
  margin-bottom: 20px; 
 | 
  .tab { 
 | 
    height: 58px; 
 | 
    line-height: 58px; 
 | 
    font-size: 16px; 
 | 
    color: #666666; 
 | 
    margin-right: 30px; 
 | 
    cursor: pointer; 
 | 
  } 
 | 
  
 | 
  .active { 
 | 
    font-weight: 500; 
 | 
    color: $primary-color; 
 | 
    border-bottom: 2px solid $primary-color; 
 | 
  } 
 | 
} 
 | 
  
 | 
.main { 
 | 
  .title { 
 | 
    font-weight: 500; 
 | 
    font-size: 18px; 
 | 
    color: $primary-color; 
 | 
    margin-bottom: 15px; 
 | 
  } 
 | 
  
 | 
  .list { 
 | 
    display: flex; 
 | 
    flex-wrap: wrap; 
 | 
    /*background: #F7F7F7;*/ 
 | 
    border-radius: 2px; 
 | 
    /*padding: 15px 20px;*/ 
 | 
    margin-bottom: 20px; 
 | 
  
 | 
    .item { 
 | 
      width: 25%; 
 | 
      margin-bottom: 16px; 
 | 
  
 | 
      .la { 
 | 
        color: #7f7f7f; 
 | 
        margin-bottom: 10px; 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |