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 | 221 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 165 insertions(+), 56 deletions(-) diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue index e7c7356..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 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 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: '', @@ -394,9 +412,18 @@ { 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: 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 }, @@ -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