From a0a1c206612de9a3e9d64f3d45564c0ff03f93f6 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 02 一月 2025 15:22:13 +0800
Subject: [PATCH] 环境

---
 admin/src/views/contract/components/contractEdit.vue |  219 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 164 insertions(+), 55 deletions(-)

diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue
index 6dd8331..a441200 100644
--- a/admin/src/views/contract/components/contractEdit.vue
+++ b/admin/src/views/contract/components/contractEdit.vue
@@ -82,6 +82,12 @@
             :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>
@@ -118,10 +124,10 @@
               <div class="m_title">绉熻祦淇℃伅</div>
               <div class="list">
                 <el-form-item label="鎶奸噾閲戦(鍏�)" prop="zlDeposit">
-                  <el-input v-model="form.zlDeposit" placeholder="璇疯緭鍏�" v-trim />
+                  <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" placeholder="璇烽�夋嫨">
+                  <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>
@@ -135,20 +141,26 @@
                 <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="(item, index) in form.zlDetailList" :key="index">
-                  <el-form-item label="璧峰鏃ユ湡" prop="time">
-                    <el-date-picker type="daterange" v-model="item.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+                <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="price">
-                    <el-input placeholder="璇疯緭鍏�" v-model="item.price" class="input-with-select">
-                      <el-select v-model="item.circleType" style="width: 150px;" slot="append" placeholder="璇烽�夋嫨">
+                  <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="advanceDays">
+                  <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="item.advanceDays" placeholder="璇疯緭鍏�" v-trim />
+                      <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>
@@ -173,7 +185,7 @@
           </el-table-column>
           <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
             <template slot-scope="{row}">
-              <el-tag type="success">{{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>
@@ -201,10 +213,10 @@
               <div class="m_title">鐗╀笟淇℃伅</div>
               <div class="list">
                 <el-form-item label="鐗╀笟鎶奸噾" prop="wyDeposit">
-                  <el-input v-model="form.wyDeposit" placeholder="璇疯緭鍏�" v-trim />
+                  <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" placeholder="璇烽�夋嫨">
+                  <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>
@@ -218,20 +230,26 @@
                 <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="(item, index) in form.wyDetailList" :key="index">
-                  <el-form-item label="璧峰鏃ユ湡" prop="time">
-                    <el-date-picker type="daterange" v-model="item.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+                <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="price">
-                    <el-input placeholder="璇疯緭鍏�" v-model="item.price">
-                      <el-select v-model="item.circleType" 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-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="advanceDays">
+                  <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="item.advanceDays" placeholder="璇疯緭鍏�" v-trim />
+                      <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>
@@ -256,7 +274,7 @@
           </el-table-column>
           <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
             <template slot-scope="{row}">
-              <el-tag type="success">{{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>
@@ -277,7 +295,7 @@
         </div>
       </div>
     </div>
-    <div class="window__footer" style="position: sticky; bottom: 0; left: 0; z-index: 9; background: #ffffff;">
+    <div class="window__footer">
       <slot name="footer">
         <el-button @click="confirm" :loading="confirmWorking" type="primary">{{activeTabs === 0 ? '涓嬩竴姝�' : '鎻愪氦'}}</el-button>
         <slot name="btns" />
@@ -322,7 +340,7 @@
         startDate: '',
         endDate: '',
         projectId: '',
-        roundedUp: '',
+        roundedUp: 0,
         companyId: '',
         renterId: '',
         renterName: '',
@@ -405,6 +423,15 @@
         { 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: []
     }
@@ -414,6 +441,8 @@
       this.title = title
       this.ids = []
       this.houseList = []
+      this.zlPrice = ''
+      this.wyPrice = ''
       this.getUser()
       this.getProject()
       this.getCompany()
@@ -427,6 +456,12 @@
             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,
@@ -447,14 +482,65 @@
             advanceDays: ''
           }
         ]
-        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.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 () {
@@ -467,6 +553,16 @@
     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) {
@@ -479,42 +575,28 @@
     getDayTime (num) {
       const today = new Date();
       const year = today.getFullYear();
-      const month = today.getMonth() + 1; // 鏈堜唤鏄粠 0 寮�濮嬬殑锛屽洜姝ら渶瑕佸姞 1
+      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 : day}`;
+        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 () {
+      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.clearData()
           this.activeTabs = 1
         })
       } else if (this.activeTabs === 1) {
@@ -527,6 +609,8 @@
               if (!valid2) {
                 return
               }
+              if (that.zlList.length === 0) return that.$message.warning('璇峰厛鐢熸垚绉熻祦璐﹀崟锛�')
+              if (that.wyList.length === 0) return that.$message.warning('璇峰厛鐢熸垚鐗╀笟璐﹀崟锛�')
               this.submit()
             })
           })
@@ -535,6 +619,7 @@
             if (!valid1) {
               return
             }
+            if (that.zlList.length === 0) return that.$message.warning('璇峰厛鐢熸垚绉熻祦璐﹀崟锛�')
             this.submit()
           })
         } else if (this.form.type === 1) {
@@ -542,6 +627,7 @@
             if (!valid2) {
               return
             }
+            if (that.wyList.length === 0) return that.$message.warning('璇峰厛鐢熸垚鐗╀笟璐﹀崟锛�')
             this.submit()
           })
         }
@@ -563,10 +649,12 @@
     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
@@ -618,6 +706,7 @@
     generateWY () {
       getBillList({ ...this.form, billType: 1 })
         .then(res => {
+          this.wy = true
           let zlPrice = 0
           let arr = []
           res.forEach(item => {
@@ -653,18 +742,22 @@
     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
@@ -748,8 +841,11 @@
     close () {
       if (this.activeTabs === 0) {
         this.$emit('close')
+        this.visible = false
       } else {
         this.activeTabs = 0
+        this.zlList = []
+        this.wyList = []
       }
     }
   }
@@ -765,6 +861,19 @@
   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;

--
Gitblit v1.9.3