From 1c1dc56be93441e39da19d8de2e65ebb7f6704c2 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期一, 09 十二月 2024 23:06:54 +0800
Subject: [PATCH] ll
---
admin/src/views/contract/components/contractEdit.vue | 942 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 739 insertions(+), 203 deletions(-)
diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue
index 13e6378..a2ae60c 100644
--- a/admin/src/views/contract/components/contractEdit.vue
+++ b/admin/src/views/contract/components/contractEdit.vue
@@ -1,75 +1,94 @@
<template>
- <GlobalWindow width="1000px" :title="title" :visible.sync="showModal" :confirm-working="isWorking" @close="close"
- @confirm="confirm">
- <div class="tabs">
- <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">1銆佸熀鏈俊鎭�</div>
- <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">2銆佽垂鐢ㄦ潯娆�</div>
+ <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>
- <template v-if="activeTabs == 0">
+ <div v-show="activeTabs === 0">
<div class="main">
<div class="main_content">
- <el-form :model="param" ref="paramRef" :rules="rules">
+ <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="param.type" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in types" :value="item.value" :label="item.name"></el-option>
+ <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="param.code" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�" v-trim />
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�" v-trim />
</el-form-item>
- <el-form-item label="缁忓姙浜�" prop="aaa">
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option>
+ <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="">
- <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+ <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="">
- <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+ <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="">
- <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+ <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="">
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in projectList" :value="item.id" :label="item.name"></el-option>
+ <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="">
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
+ <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="">
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in comparyList" :value="item.id" :label="item.name"></el-option>
+ <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="">
- <el-button @click="handleRent" type="primary">閫夋嫨绉熷</el-button>
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in renterList" :value="item.id" :label="item.name"></el-option>
- </el-select>
+ <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="">
- <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in contacts" :value="item.id" :label="item.name"></el-option>
+ <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-cascader style="width: 300px" v-model="value" @change="houseChange" :options="options"
- :props="{ multiple: true }" collapse-tags clearable />
+ <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">
@@ -80,75 +99,211 @@
<el-button icon="el-icon-plus" plain>娣诲姞闄勪欢</el-button>
</el-upload>
</div>
- <el-table :data="param.list" stripe>
- <el-table-column prop="" label="闄勪欢鍚嶇О" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="鎿嶄綔浜�" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="鎿嶄綔鏃堕棿" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="鎿嶄綔" align="center" min-width="100">
- <template v-slot="scope">
- <span class="cu red">鍒犻櫎</span>
+ <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>
- </template>
- <template v-if="activeTabs == 1">
+ </div>
+ <div v-show="activeTabs === 1">
<div class="tabs cost_tabs">
- <div class="tab" :class="{ active: cactiveTabs == 0 }" @click="ctabsClick(0)">绉熻祦鏉℃</div>
- <div class="tab" :class="{ active: cactiveTabs == 1 }" @click="ctabsClick(1)">鐗╀笟鏉℃</div>
+ <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 class="main">
- <div class="main_content">
- <el-form :model="paramCost" ref="paramCostRef" :rules="rules">
- <div class="m_title">绉熻祦淇℃伅</div>
- <div class="list">
- <el-form-item label="鎶奸噾閲戦(鍏�)" prop="type">
- <el-input v-model="paramCost.code" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- <el-form-item label="浠樻鏂瑰紡" prop="code">
- <el-select v-model="paramCost.type" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in payMethods" :value="item.value" :label="item.name"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鍏嶇鏈�" prop="aaa">
- <el-date-picker type="daterange" v-model="paramCost.getDate" value-format="yyyy-MM-dd"
- placeholder="璇烽�夋嫨" />
- </el-form-item>
- </div>
- <div class="m_title">绉熻祦鏉℃</div>
- <div class="list">
- <el-form-item label="璧峰鏃ユ湡" prop="">
- <el-date-picker type="date" v-model="paramCost.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
- </el-form-item>
- <el-form-item label="鍚堝悓鍗曚环" prop="">
- <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="paramCost.aaa">
- <el-select v-model="paramCost.ddd" slot="append" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in unitOps" :value="item.value" :label="item.name"></el-option>
+ <!-- 绉熻祦鏉℃ -->
+ <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-input>
- </el-form-item>
- <el-form-item label="浠樻鎻愬墠澶╂暟" prop="">
- <el-input v-model="paramCost.aaa" placeholder="璇疯緭鍏�" v-trim />
- </el-form-item>
- </div>
- </el-form>
+ </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>
- <el-button style="width: 100%;height: 48px;" type="primary" plain>鐢熸垚璐﹀崟鏄庣粏</el-button>
- <el-table :data="paramCost.list" class="mt20" stripe>
- <el-table-column prop="" label="璐圭敤绫诲瀷" align="center" width="160px" show-overflow-tooltip />
- <el-table-column prop="" label="鎸囨暟" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="鍖洪棿" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="浠樻鏃�" align="center" min-width="100" show-overflow-tooltip />
- <el-table-column prop="" label="搴旀敹" align="center" min-width="100" show-overflow-tooltip />
- </el-table>
- <div class="total">
- <span>鎬昏</span>
- <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>
- </template>
- <!-- -->
- <MemberSearch ref="MemberSearchRef" />
+ </div>
+ <div class="window__footer" style="position: sticky; bottom: 0; left: 0; z-index: 9; background: #ffffff;">
+ <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>
@@ -157,131 +312,499 @@
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 { companyList } from '@/api/company'
import { Message, Loading } from 'element-ui'
+import { mapState } from 'vuex'
export default {
components: {
GlobalWindow,
MemberSearch
},
extends: BaseOpera,
- data() {
+ computed: {
+ ...mapState(['userInfo'])
+ },
+ data () {
return {
- showModal: false,
title: '鍒涘缓鍚堝悓',
- activeTabs: '0',
- param: {},
+ 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',
- fileList: [],
uploadData: {
- folder: 'HIDDEN_DANGER_FILE'
+ folder: 'YW_CONTRACT_FILE'
},
types: [
{ name: '鐗╀笟+绉熻祦鍚堝悓', value: 0 },
- { name: '绉熻祦鍚堝悓', value: 1 },
- { name: '鐗╀笟鍚堝悓', value: 2 },
+ { name: '绉熻祦鍚堝悓', value: 2 },
+ { name: '鐗╀笟鍚堝悓', value: 1 }
],
- agentList: [], //缁忓姙浜�
+ agentList: [], // 缁忓姙浜�
projectList: [],
comparyList: [], // 鍏徃
- renterList: [], // 绉熷
- contacts: [], // 鑱旂郴浜�
- value: [],
- options: [
- {
- value: 1,
- label: '涓滃崡',
- children: [{
- value: 2,
- label: '涓婃捣',
- children: [
- { value: 3, label: '鏅檧' },
- { value: 4, label: '榛勫煍' },
- { value: 5, label: '寰愭眹' }
- ]
- }, {
- value: 7,
- label: '姹熻嫃',
- children: [
- { value: 8, label: '鍗椾含' },
- { value: 9, label: '鑻忓窞' },
- { value: 10, label: '鏃犻敗' }
- ]
- }, {
- value: 12,
- label: '娴欐睙',
- children: [
- { value: 13, label: '鏉窞' },
- { value: 14, label: '瀹佹尝' },
- { value: 15, label: '鍢夊叴' }
- ]
- }]
- },
- {
- value: 17,
- label: '瑗垮寳',
- children: [{
- value: 18,
- label: '闄曡タ',
- children: [
- { value: 19, label: '瑗垮畨' },
- { value: 20, label: '寤跺畨' }
- ]
- }, {
- value: 21,
- label: '鏂扮枂缁村惥灏旀棌鑷不鍖�',
- children: [
- { value: 22, label: '涔岄瞾鏈ㄩ綈' },
- { value: 23, label: '鍏嬫媺鐜涗緷' }
- ]
- }]
- }
- ],
+ houseList: [],
cactiveTabs: 0,
- paramCost: {},
payMethods: [
{ name: '涓�娆℃�т粯娆�', value: 0 },
{ name: '3涓湀涓�浠�', value: 1 },
{ name: '6涓湀涓�浠�', value: 2 },
- { name: '1骞翠竴浠�', value: 2 },
+ { name: '1骞翠竴浠�', value: 3 },
],
unitOps: [
{ name: '鍏�/m虏路澶�', value: 0 },
{ name: '鍏�/m虏路鏈�', value: 1 },
- { name: '鍏�/澶�', value: 2 },
- { name: '鍏�/鏈�', value: 3 },
- { name: '鍏�/骞�', value: 4 },
- { name: '鍏�/m虏路骞�', value: 5 },
+ { 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: {
- tabsClick(val) {
+ 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
+ })
+ },
+ getCompany () {
+ companyList({ type: 2 })
+ .then(res => {
+ this.comparyList = res
+ this.form.companyId = res[0].id
+ })
+ },
+ tabsClick (val) {
this.activeTabs = val
},
- ctabsClick(val) {
+ ctabsClick (val) {
this.cactiveTabs = val
},
- getDetail() {
-
+ handleRent () {
+ this.$refs.MemberSearchRef.open()
},
- handleRent() {
- this.$refs.MemberSearchRef.openModal()
- },
- houseChange(e) {
+ houseChange (e) {
console.log(e)
- console.log(this.value)
-
},
- beforeUpload(file) {
- // if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) {
- // this.$message.error('璇蜂笂浼犳纭殑瑙嗛/鍥剧墖鏍煎紡')
- // return false
- // }
+ beforeUpload (file) {
this.loadingInstance = Loading.service({
lock: true,
text: 'Loading',
@@ -289,41 +812,40 @@
background: 'rgba(0, 0, 0, 0.7)'
})
},
- uploadError() {
+ uploadError () {
this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
if (this.loadingInstance) {
this.loadingInstance.close()
}
})
},
- uploadAvatarSuccess(file) {
- this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+ 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()
}
})
- console.log('file', file)
const item = file.data[0]
- if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) {
- this.fileList.push({
- type: 1,
- fileurl: item.imgaddr,
- fileurlFull: item.url
- })
- } else {
- this.fileList.push({
- type: 0,
- fileurl: item.imgaddr,
- fileurlFull: item.url
- })
- }
- console.log('file', this.fileList)
- // this.$set(this.param, 'faceImg', file.imgurl)
- // this.$set(this.param, 'faceImgUrl', file.imgurlfull)
+ this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() })
},
- close() {
- this.showModal = false
- this.$emit('close')
+ close () {
+ if (this.activeTabs === 0) {
+ this.$emit('close')
+ } else {
+ this.activeTabs = 0
+ this.zlList = []
+ this.wyList = []
+ }
}
}
}
@@ -331,7 +853,13 @@
<style lang="scss" scoped>
@import '@/assets/style/variables.scss';
-
+.fixed {
+ background: #ffffff;
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 999;
+}
.tabs {
border-bottom: 1px solid #DFE2E8;
display: flex;
@@ -431,5 +959,13 @@
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>
--
Gitblit v1.9.3