From a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 06 六月 2025 19:19:34 +0800
Subject: [PATCH] 开发更新

---
 admin/src/views/contract/components/contractEdit.vue |  444 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 300 insertions(+), 144 deletions(-)

diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue
index 3fa3f50..6867919 100644
--- a/admin/src/views/contract/components/contractEdit.vue
+++ b/admin/src/views/contract/components/contractEdit.vue
@@ -1,12 +1,6 @@
 <template>
-  <GlobalWindow
-    width="100%"
-    :title="title"
-    :withFooter="false"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-    @close="close">
+  <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>
@@ -19,7 +13,8 @@
             <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-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">
@@ -27,21 +22,26 @@
               </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-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-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-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-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-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">
@@ -52,7 +52,8 @@
               </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-option v-for="(item, index) in comparyList" :key="index" :value="item.id"
+                    :label="item.name"></el-option>
                 </el-select>
               </el-form-item>
             </div>
@@ -65,24 +66,21 @@
               </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-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-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 }">
+          <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 }}銕�
@@ -113,8 +111,12 @@
     </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 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">
@@ -127,8 +129,9 @@
                   <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="clearzl" placeholder="璇烽�夋嫨">
-                    <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option>
+                  <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">
@@ -141,18 +144,22 @@
                 <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">
+                <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-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 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>
@@ -161,7 +168,8 @@
                   }">
                     <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>
+                      <el-link :underline="false" type="danger" @click="deleZl(index)"
+                        style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link>
                     </div>
                   </el-form-item>
                 </div>
@@ -170,8 +178,15 @@
           </div>
         </div>
         <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateZL">鐢熸垚璐﹀崟鏄庣粏</el-button>
+        <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;" v-if="zlList.length > 0">
+          <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+          <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+            <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+          </el-popconfirm>
+          <el-button type="primary" v-if="isShow" @click="changeNum(1)">淇濆瓨</el-button>
+        </div>
         <el-table :data="zlList" class="mt20" stripe>
-          <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+          <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <span v-if="row.costType === 0">绉熻祦璐�</span>
               <span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -183,26 +198,32 @@
               <span v-if="row.costType === 7">淇濊瘉閲�</span>
             </template>
           </el-table-column>
-          <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+          <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag>
+              <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>
+          <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.startDate}} ~ {{row.endDate}}
+              {{ 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>
+          <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" :key="Date.now()" show-overflow-tooltip />
+          <el-table-column label="搴旀敹" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.receivableFee}}鍏�
+              <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+              <template v-else>
+                <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+                <div style="display: flex; align-items: center;" v-if="isShow">
+                  <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+                </div>
+              </template>
             </template>
           </el-table-column>
         </el-table>
         <div class="total">
           <span>鎬昏</span>
-          <div>璐圭敤搴旀敹鎬昏锛歿{zlPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.zlDeposit}}鍏�</div>
+          <div>璐圭敤搴旀敹鎬昏锛歿{ zlPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.zlDeposit }}鍏�</div>
         </div>
       </div>
       <!--   鐗╀笟鏉℃   -->
@@ -216,8 +237,9 @@
                   <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="clearwy" placeholder="璇烽�夋嫨">
-                    <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option>
+                  <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">
@@ -230,18 +252,22 @@
                 <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">
+                <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-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 unitOps" :key="index" :value="item.value" :label="item.name"></el-option>
+                      <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>
@@ -250,7 +276,8 @@
                   }">
                     <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>
+                      <el-link :underline="false" type="danger" @click="deleWy(index)"
+                        style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link>
                     </div>
                   </el-form-item>
                 </div>
@@ -259,8 +286,15 @@
           </div>
         </div>
         <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateWY">鐢熸垚璐﹀崟鏄庣粏</el-button>
+        <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;">
+          <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+          <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+            <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+          </el-popconfirm>
+          <el-button type="primary" v-if="isShow" @click="changeNum(2)">淇濆瓨</el-button>
+        </div>
         <el-table :data="wyList" class="mt20" stripe>
-          <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+          <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <span v-if="row.costType === 0">绉熻祦璐�</span>
               <span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -272,34 +306,42 @@
               <span v-if="row.costType === 7">淇濊瘉閲�</span>
             </template>
           </el-table-column>
-          <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+          <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag>
+              <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>
+          <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.startDate}} ~ {{row.endDate}}
+              {{ 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>
+          <el-table-column prop="planPayDate" label="浠樻鏃�" :key="Date.now()" align="center" show-overflow-tooltip />
+          <el-table-column label="搴旀敹" :key="Date.now()" align="center" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.receivableFee}}鍏�
+              <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+              <template v-else>
+                <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+                <div style="display: flex; align-items: center;" v-if="isShow">
+                  <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+                </div>
+              </template>
             </template>
           </el-table-column>
         </el-table>
         <div class="total">
           <span>鎬昏</span>
-          <div>璐圭敤搴旀敹鎬昏锛歿{wyPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.wyDeposit}}鍏�</div>
+          <div>璐圭敤搴旀敹鎬昏锛歿{ wyPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.wyDeposit }}鍏�</div>
         </div>
       </div>
     </div>
-    <div class="window__footer" style="position: sticky; bottom: 0; left: 0; z-index: 9; background: #ffffff;">
+    <div style="width: 100%; height: 50px;"></div>
+    <div class="window__footer">
       <slot name="footer">
-        <el-button @click="confirm" :loading="confirmWorking" type="primary">{{activeTabs === 0 ? '涓嬩竴姝�' : '鎻愪氦'}}</el-button>
+        <el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '涓嬩竴姝�' :
+          '鎻愪氦'}}</el-button>
         <slot name="btns" />
-        <el-button @click="close">{{activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�'}}</el-button>
+        <el-button @click="close">{{ activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�' }}</el-button>
       </slot>
     </div>
     <!-- 閫夋嫨绉熷 -->
@@ -316,7 +358,7 @@
 import { ywList } from '@/api/customer'
 import { getUserList } from '@/api/system/user'
 import { getProjectList, tree } from '@/api/project/ywProject'
-import { companyList } from '@/api/company'
+import {companyListConstract as companyList } from '@/api/company'
 import { Message, Loading } from 'element-ui'
 import { mapState } from 'vuex'
 export default {
@@ -328,7 +370,7 @@
   computed: {
     ...mapState(['userInfo'])
   },
-  data () {
+  data() {
     return {
       title: '鍒涘缓鍚堝悓',
       activeTabs: 0,
@@ -340,14 +382,14 @@
         startDate: '',
         endDate: '',
         projectId: '',
-        roundedUp: '',
+        roundedUp: 0,
         companyId: '',
         renterId: '',
         renterName: '',
         memberId: '',
         memberName: '',
         fileList: [],
-  
+
         zlDeposit: '',
         zlPayType: '',
         zlFreeStartDate: '',
@@ -363,7 +405,7 @@
             advanceDays: ''
           }
         ],
-  
+
         wyDeposit: '',
         wyPayType: '',
         wyFreeStartDate: '',
@@ -379,17 +421,17 @@
             advanceDays: ''
           }
         ],
-  
+
         roomIds: []
       },
-      
+
       ids: [],
-  
+
       zlList: [],
       wyList: [],
-      
+
       rules,
-  
+
       contactsList: [],
 
       loadingInstance: null,
@@ -423,12 +465,23 @@
         { name: '鍏�/m虏路骞�', value: 2 },
         { name: '鍏�/鍦�', value: 6 },
       ],
-      
-      houseLvThree: []
+      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: [],
+      isShow: false
     }
   },
   methods: {
-    open (title, target) {
+    open(title, target) {
       this.title = title
       this.ids = []
       this.houseList = []
@@ -473,71 +526,149 @@
             advanceDays: ''
           }
         ]
+        this.form.roundedUp = 0
         // this.getHouseTree()
       })
     },
+    changeEdit(type) {
+      if (type === 1) {
+        this.zlList.forEach(item => {
+          item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
+        })
+        this.isShow = true
+      } else if (type === 2) {
+        this.isShow = false
+      }
+    },
+    changeNum(type) {
+      // 绉熻祦璁$畻
+      if (type === 1) {
+        let num = 0
+        this.zlList.forEach(item => {
+          if (item.costType !== 2) {
+            num += Number(item.totleFeeCopy)
+            item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+          }
+        })
+        this.zlPrice = num
+      } else if (type === 2) {
+        let num = 0
+        this.wyList.forEach(item => {
+          if (item.costType !== 3) {
+            num += Number(item.totleFeeCopy)
+            item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+          }
+        })
+        this.wyPrice = num
+      }
+      this.isShow = false
+    },
+    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 () {
+    getYwList() {
       ywList({
         customerId: this.form.renterId
       }).then(res => {
         this.contactsList = res
       })
     },
-    getHouseData () {
+    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) {
+    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; // 鏈堜唤鏄粠 0 寮�濮嬬殑锛屽洜姝ら渶瑕佸姞 1
-      const day = today.getDate();
+    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}`;
+        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}`;
+        return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}`
       }
     },
-    clearData () {
-      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: ''
-        }
-      ]
-    },
-    clearzl () {
+    clearzl() {
       this.zlList = []
       this.zlPrice = ''
     },
-    clearwy () {
+    clearwy() {
       this.wyList = []
       this.wyPrice = ''
     },
-    confirm () {
+    confirm() {
       var that = this
       if (this.activeTabs === 0) {
         this.$refs.form.validate((valid) => {
@@ -579,10 +710,10 @@
         }
       }
     },
-    submit () {
+    submit() {
       // 璋冪敤鏂板缓鎺ュ彛
       this.isWorking = true
-      create({ ...this.form })
+      create({ ...this.form, ywContractBillDTOList: [...this.wyList, ...this.zlList] })
         .then(res => {
           this.visible = false
           this.$tip.apiSuccess('鍒涘缓鎴愬姛')
@@ -592,26 +723,26 @@
           this.isWorking = false
         })
     },
-    getDate1 (e, index) {
+    getDate1(e, index) {
       this.form.zlDetailList[index].startDate = e[0]
       this.form.zlDetailList[index].endDate = e[1]
       this.clearzl()
     },
-    getDate2 (e, index) {
+    getDate2(e, index) {
       this.form.wyDetailList[index].startDate = e[0]
       this.form.wyDetailList[index].endDate = e[1]
       this.clearwy()
     },
-    checkHouseRoom (a, b) {
+    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);
+      this.form.roomIds = arr.filter(item => item !== undefined)
     },
-    getHouseTree () {
+    getHouseTree() {
       tree({
         startDate: this.form.startDate,
         endDate: this.form.endDate,
@@ -627,21 +758,22 @@
     },
     addParamToArray(arr) {
       for (let i = 0; i < arr.length; i++) {
-        const currentItem = arr[i].projectDataVOList;
+        const currentItem = arr[i].projectDataVOList
         arr[i].idd = arr[i].lv + '-' + arr[i].id
         if (currentItem.length > 0) {
-          this.addParamToArray(currentItem);
+          this.addParamToArray(currentItem)
         }
       }
     },
-    generateZL () {
+    generateZL() {
       getBillList({ ...this.form, billType: 0 })
         .then(res => {
           let zlPrice = 0
           let arr = []
           res.forEach(item => {
+            item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
             if (item.costType === 0) {
-              zlPrice += item.receivableFee
+              zlPrice += item.totleFee
             }
             arr.push(item)
           })
@@ -649,7 +781,7 @@
           this.zlList = arr
         })
     },
-    generateWY () {
+    generateWY() {
       getBillList({ ...this.form, billType: 1 })
         .then(res => {
           this.wy = true
@@ -657,7 +789,8 @@
           let arr = []
           res.forEach(item => {
             if (item.costType === 1) {
-              zlPrice += item.receivableFee
+              zlPrice += item.totleFee
+              item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
             }
             arr.push(item)
           })
@@ -665,7 +798,7 @@
           this.wyList = arr
         })
     },
-    addZl () {
+    addZl() {
       this.form.zlDetailList.push({
         circleType: 0,
         startDate: this.form.startDate,
@@ -675,7 +808,7 @@
         advanceDays: ''
       })
     },
-    addWy () {
+    addWy() {
       this.form.wyDetailList.push({
         circleType: 0,
         startDate: this.form.startDate,
@@ -695,62 +828,67 @@
       this.form.wyDetailList.splice(index, 1)
       this.clearwy()
     },
-    getZLDate (e) {
+    getZLDate(e) {
       this.form.zlFreeStartDate = e[0]
       this.form.zlFreeEndDate = e[1]
       this.clearzl()
     },
-    getWYDate (e) {
+    getWYDate(e) {
       this.form.wyFreeStartDate = e[0]
       this.form.wyFreeEndDate = e[1]
       this.clearwy()
     },
-    getTenant (row) {
+    getTenant(row) {
       this.form.renterId = row.id
       this.form.renterName = row.name
       this.form.memberId = ''
       this.form.memberName = ''
       this.getYwList()
     },
-    dele (imgaddr) {
+    dele(imgaddr) {
       this.form.fileList.forEach((item, index) => {
         if (imgaddr === item.imgaddr) {
           this.form.fileList.splice(index, 1)
         }
       })
     },
-    getUser () {
+    getUser() {
       getUserList({})
         .then(res => {
           this.agentList = res
         })
     },
-    getProject () {
+    getProject() {
       getProjectList({})
         .then(res => {
-          this.projectList = res
+          this.projectList = res || []
+          if (this.projectList.length > 0) {
+            this.$set(this.form, 'projectId', this.projectList[0].id)
+            this.getHouseTree()
+          }
         })
     },
-    getCompany () {
+    getCompany() {
       companyList({ type: 2 })
         .then(res => {
           this.comparyList = res
           this.form.companyId = res[0].id
         })
     },
-    tabsClick (val) {
+    tabsClick(val) {
       this.activeTabs = val
     },
-    ctabsClick (val) {
+    ctabsClick(val) {
+      this.isShow = false
       this.cactiveTabs = val
     },
-    handleRent () {
+    handleRent() {
       this.$refs.MemberSearchRef.open()
     },
-    houseChange (e) {
+    houseChange(e) {
       console.log(e)
     },
-    beforeUpload (file) {
+    beforeUpload(file) {
       this.loadingInstance = Loading.service({
         lock: true,
         text: 'Loading',
@@ -758,14 +896,14 @@
         background: 'rgba(0, 0, 0, 0.7)'
       })
     },
-    uploadError () {
+    uploadError() {
       this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
         if (this.loadingInstance) {
           this.loadingInstance.close()
         }
       })
     },
-    getDay () {
+    getDay() {
       const now = new Date()
       const year = now.getFullYear()
       const month = now.getMonth() + 1 // 鍔�1浣垮叾浠�1寮�濮�
@@ -773,9 +911,9 @@
       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')}`;
+      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) {
+    uploadAvatarSuccess(file) {
       this.$nextTick(() => {
         if (this.loadingInstance) {
           this.loadingInstance.close()
@@ -784,11 +922,14 @@
       const item = file.data[0]
       this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() })
     },
-    close () {
+    close() {
       if (this.activeTabs === 0) {
         this.$emit('close')
+        this.visible = false
       } else {
         this.activeTabs = 0
+        this.zlList = []
+        this.wyList = []
       }
     }
   }
@@ -797,12 +938,26 @@
 
 <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;
@@ -906,6 +1061,7 @@
   display: flex;
   align-items: center;
   justify-content: space-between;
+
   span {
     font-weight: 500;
     font-size: 14px;

--
Gitblit v1.9.3