From 1fdb81a91f5f4092e927d2d9a7cc9ff4d231fca4 Mon Sep 17 00:00:00 2001 From: 819527061@qq.com <123456> Date: 星期二, 07 一月 2025 16:43:41 +0800 Subject: [PATCH] 月付页面细节 --- src/components/page/MonthFeePay.vue | 387 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 355 insertions(+), 32 deletions(-) diff --git a/src/components/page/MonthFeePay.vue b/src/components/page/MonthFeePay.vue index 3dff2b8..ca75d51 100644 --- a/src/components/page/MonthFeePay.vue +++ b/src/components/page/MonthFeePay.vue @@ -1,57 +1,155 @@ <template> - <div class="weizhang-box"> - <div class="weizhang-main-box"> - <div class="weizhang-main-top"> - <h1>鏈堢杞﹀姙鐞�</h1> - </div> + <div class="weizhang-box yuezucard-wrap"> +<!-- <div class="weizhang-main-top"> + <h1 class="title">鏈堢杞﹀姙鐞�</h1> + </div>--> + <div class="weizhang-main-box"> <div class="weizhang-main-bootom"> <div class="weizhang-main-form"> - <el-form label-width="100px" :model="statisticData" label-position="left"> - <el-form-item label="杞︾墝鍙凤細" style="margin-left: 25px;"> - <el-input v-model="statisticData.carNo" ></el-input> + <el-form label-width="100px" :model="statisticData" ref="statisticData" :rules="rules" label-position="left"> + <el-form-item label="杞︾墝鍙凤細" style="margin-left: 25px;" prop="carNo"> + <el-input readonly @focus="isShow=true" v-model="statisticData.carNo" ></el-input> </el-form-item> - <el-form-item label="鎵嬫満鍙凤細" style="margin-left: 25px;"> + <el-form-item label="鎵嬫満鍙凤細" style="margin-left: 25px;" prop="phone"> <el-input v-model="statisticData.phone" ></el-input> </el-form-item> - <el-form-item label="濮撳悕锛�" style="margin-left: 25px;"> + <el-form-item label="杞︿富濮撳悕锛�" style="margin-left: 25px;" prop="name"> <el-input v-model="statisticData.name" ></el-input> </el-form-item> - <el-form-item label="閫夋嫨鍏ㄩ儴锛�" style="margin-left: 25px;"> + <el-form-item label="閫夋嫨鍏ㄩ儴锛�" style="margin-left: 25px;" prop="allFlag"> <el-select v-model="statisticData.allFlag" :onchange="changeAll"> <el-option label="鍗曚釜" :value=0></el-option> <el-option label="鍏ㄩ儴" :value=1></el-option> </el-select> </el-form-item> - <el-form-item v-if="statisticData.allFlag == 0" label="鍋滆溅鍦猴細" style="margin-left: 25px;"> - <el-select v-model="statisticData.parkId" :onchange="changePark"> - <el-option v-for="item in table1" :key="item.id" :label="item.name" :value="item.id" ></el-option> + <el-form-item v-if="statisticData.allFlag == 0" label="鍋滆溅鍦猴細" style="margin-left: 25px;" prop="parkId"> + <el-select v-model="statisticData.parkId" @change="changePark"> + <el-option v-for="item in table1" :key="item.id" :label="item.name" :value="item.id + ''" ></el-option> </el-select> </el-form-item> <el-form-item class="weizhang-footer-box" style="display: flex;justify-content: center;margin-top: 4.498vh" label-width="0" v-if="showFlag"> - <el-button class="jiaofei-btn" type="primary" @click="pay()" >鏌ヨ</el-button> + <el-button :disabled="isDisabled" class="jiaofei-btn" type="primary" @click="pay()" >鏌ヨ</el-button> </el-form-item> </el-form> + </div> + <div class="yuezu-box" v-if="searchShow"> + <div> + <div class="current-box" v-if="startTime && endTime">鍓╀綑浣跨敤鏃堕棿锛�<span class="utilTime">{{untilToday}}澶╋紙{{endTime}}缁撴潫锛�</span></div> + <div class="current-box" v-else>鍓╀綑浣跨敤鏃堕棿锛氭殏鏈紑閫氭湀绁�</div> + </div> +<!-- <div class="current-box" v-if="startTime && endTime"> + <span class="title">褰撳墠浣跨敤鏃堕棿锛�</span> + {{startTime}} - {{endTime}} + </div>--> + <div class="yuezuCard"> + <div class="yuezu-line"> + <div class="title"> + 閫夋嫨鏃堕棿娈碉細 + </div> + <div class="yuezu-line-right"> + <el-menu + :default-active="activeIndex" + @select="handleSelect" + class="el-menu-demo" + mode="horizontal"> + <el-menu-item index="1">涓�涓湀</el-menu-item> + <el-menu-item index="2">涓変釜鏈�</el-menu-item> + <el-menu-item index="3">鍏釜鏈�</el-menu-item> + <el-menu-item index="4">涓�骞�</el-menu-item> + </el-menu> + </div> + </div> + </div> + <div class="current-box"> + <span class="title">寮�濮嬫椂闂达細</span> + {{compStartTime}} + </div> + <div class="current-box"> + <span class="title">缁撴潫鏃堕棿锛�</span> + {{compEndTime}} + </div> + <div class="money-box" v-if="money"> + <div class="money">锟{money}}</div> + <div class="money-content">缂磋垂閲戦</div> + </div> + <div class="yuezu-footer"> + <el-button v-if="startTime && endTime" class="jiaofei-btn2" type="danger">缁垂</el-button> + <el-button v-else class="jiaofei-btn2" type="danger">寮�閫�</el-button> + </div> </div> </div> </div> - + <t-keyword + :isShow="isShow" + @ok="isShow=false" + @cancel="isShow=false" + @inputchange="inputchange" + :finalValue="statisticData.carNo" + /> </div> </template> <script> - export default { +import {isMobile} from "@/utils/validate"; +import TKeyword from "@/components/page/components/TKeyword"; + +export default { name: 'dashboard', + components: { + TKeyword, + }, data() { return { + isShow: false, ticketId:"", table1:[], statisticData:{ - allFlag:0 + allFlag:0, + carNo:'', + parkId:'', + phone:'', + name:'', }, showFlag:true, + activeIndex:'', + searchShow:false, + startTime:'', + endTime:'', + compStartTime:'', + compEndTime:'', + isDisabled: false, + money: null, + yueZuObj:{}, + rules: { + carNo: [ + { required: true, message: '璇疯緭鍏ヨ溅鐗屽彿', trigger: ['blur','change'] }, + ], + phone: [ + { required: true, message: '璇疯緭鍏ユ墜鏈哄彿', trigger: 'blur' }, + { validator: isMobile, trigger: 'blur' } + ], + name: [ + { required: true, message: '璇疯緭鍏ュ鍚�', trigger: 'blur' }, + ], + allFlag: [ + { required: true, message: '璇烽�夋嫨鍋滆溅鍦轰釜鏁�', trigger: 'change' }, + ], + parkId: [ + { required: true, message: '璇烽�夋嫨鍋滆溅鍦�', trigger: 'change' }, + ] + } } + }, + computed: { + untilToday() { + if(this.endTime) { + let toady = new Date() + let cur = this.$moment(toady).format('YYYY-MM-DD') + return this.getDayDifference(cur,this.endTime) + } + } }, created(){ var url = window.location.href; @@ -63,27 +161,151 @@ } this.statisticData.parkId = cs.id; this.$byutil.postData(this, this.$systemconfig.basePath+'/ffzf/park/findAll', null, res => { - this.table1 = res.data; - - this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/whiteListRule/getByParkId', {parkId:cs.id}, res => { - this.statisticData.parkId = res.data.id; - }) + this.table1 = res.data; }) }, methods: { - pay(){ - this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/pay', this.statisticData, res => { - if(res.code == 0){ - //鏈煡璇㈠埌鏈堢エ锛屽彲姝e父缂磋垂 + pay(){ + this.$refs.statisticData.validate((valid) => { + if(valid) { + this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/pay', this.statisticData, res => { + console.log(res,'res====') + if(res.code == 0){ + this.searchShow = true + this.activeIndex = '' //閲嶇疆 + this.money = null + this.compStartTime = '' + this.compEndTime = '' + //鏈煡璇㈠埌鏈堢エ锛屽彲姝e父缂磋垂 + if(res.data) { + this.startTime = res.data.startTime + this.endTime = res.data.endTime + }else { + this.startTime = '' + this.endTime = '' + } + }else { - }else { - //鏌ヨ鍒版湀绁紝缁垂 + } + }) + this.getYuezuMoney() } }) }, - changePark(){ + getYuezuMoney() { //鑾峰彇闇�瑕佺殑鏈堢鐨刴oney + let params = { + parkId:this.statisticData.parkId, + type:this.statisticData.allFlag + } + this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/whiteListRule/getByPark', params, res => { + if(res.code == 0){ + this.yueZuObj = res.data + }else { + } + }) + }, + handleSelect(key) { + this.activeIndex = key + if(key == 1) { + this.money = this.yueZuObj.monthMoney + if(this.startTime && this.endTime) { + let tomorrow = new Date(this.endTime) + tomorrow.setDate(tomorrow.getDate() + 1) + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,1) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + }else { + let today = new Date() + let tomorrow = new Date(today); + tomorrow.setDate(tomorrow.getDate() + 1); + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,1) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + } + }else if(key == 2) { + this.money = this.yueZuObj.threeMonthMoney + if(this.startTime && this.endTime) { + let tomorrow = new Date(this.endTime) + tomorrow.setDate(tomorrow.getDate() + 1) + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,3) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + }else { + let today = new Date() + let tomorrow = new Date(today); + tomorrow.setDate(tomorrow.getDate() + 1); + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,3) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + } + }else if(key == 3) { + this.money = this.yueZuObj.sixMonthMoney + if(this.startTime && this.endTime) { + let tomorrow = new Date(this.endTime) + tomorrow.setDate(tomorrow.getDate() + 1) + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,6) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + }else { + let today = new Date() + let tomorrow = new Date(today); + tomorrow.setDate(tomorrow.getDate() + 1); + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,6) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + } + }else if(key == 4) { + this.money = this.yueZuObj.yearMoney + if(this.startTime && this.endTime) { + let tomorrow = new Date(this.endTime) + tomorrow.setDate(tomorrow.getDate() + 1) + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,12) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + }else { + let today = new Date() + let tomorrow = new Date(today); + tomorrow.setDate(tomorrow.getDate() + 1); + this.compStartTime = this.$moment(tomorrow).format('YYYY-MM-DD') + let a = this.getNewDate(tomorrow,12) + this.compEndTime = this.$moment(a).format('YYYY-MM-DD') + } + } + }, + // 杈撳叆杞︾墝鍙� + inputchange(val, maxLength) { + console.log(val,'0000',maxLength) + if (this.statisticData.carNo && this.statisticData.carNo.length >= maxLength && val !== 'delete') { + return false + } + if (val === 'delete') { + this.statisticData.carNo = this.statisticData.carNo.slice(0, this.statisticData.carNo.length - 1) + } else { + this.statisticData.carNo += val.toUpperCase() + } + }, + getNewDate(date, n) {//date 鏃ユ湡 n 鍓嶅悗鐩稿樊鏈堜唤 锛堢浉宸殑鏈堜唤锛� + let curDate = new Date(date),newDate = new Date(date),diff,remainder //curDate褰撳墠鏃ユ湡 newDate璁$畻鍚庢棩鏈� diff鏃ユ湡鐩稿樊鏈堜唤 remainder n瀵�12鐨勪綑鏁� + newDate.setMonth(curDate.getMonth() + n); //璁剧疆鏈堜唤+n + diff = newDate.getMonth() - curDate.getMonth(); //璁$畻鍚庢湀涓庝箣鍓嶆湀宸�� + diff < 0 ? diff += 12: diff; //濡傛灉宸�煎皬浜�12 瀵瑰叾+12 + n > 0 ? remainder = n % 12 : remainder = n + 12 * Math.ceil((Math.abs(n) /12 )) //n>0鏃剁洿鎺ュ12鍙栦綑 n<0鏃讹紝灏嗗叾鍔犱笂 n鍙栫粷瀵瑰�煎悗鐨勫勾浠斤紙鍚戜笂鍙栨暣锛�* 12 + if(diff != remainder){ + return new Date(newDate.setMonth(newDate.getMonth(),0)) //濡傛灉diff涓巖emainder涓嶇浉绛夛紝姝ゆ椂鐨勬儏鍐垫槸Date.setMonth()鏂规硶鑷姩澶勭悊浜嗘湀鏈棩鏈熷悜鍚庨『寤跺埌涓嬩釜鏈堬紝灏嗗叾璁剧疆涓轰笂涓湀鐨勬渶鍚庝竴澶╋紝鍚﹀垯涓嶈繘琛屽鐞� + } + return newDate; + }, + getDayDifference(date1, date2) { //鐩稿樊鐨勫ぉ鏁� + const millisecondsPerDay = 24 * 60 * 60 * 1000; // 涓�澶╃殑姣鏁� + const timeDifference = Math.abs(new Date(date2).getTime() - new Date(date1).getTime()); // 鑾峰彇涓や釜鏃ユ湡鐨勬绉掓暟宸�� + const dayDifference = Math.round(timeDifference / millisecondsPerDay); // 灏嗘绉掓暟宸�艰浆鎹负澶╂暟 + return dayDifference; + }, + changePark(val){ + console.log(val,'鏀瑰彉鍋滆溅鍦�---') + this.statisticData.parkId = val }, changeAll(){ @@ -96,6 +318,14 @@ <style lang="scss"> +.yuezucard-wrap{ + .el-form-item{ + margin-bottom: 2.5vw!important; + } + .el-input__inner{ + height: 5.33vw /* 40/7.5 */; + } +} .weizhang-main-bootom{ .el-input__inner{ border:none; @@ -119,6 +349,32 @@ </style> <style lang="scss" scoped> +.yuezu-line{ + ::v-deep{ + .el-menu.el-menu--horizontal{ + border-bottom: none; + } + .el-menu--horizontal>.el-menu-item{ + height: 6.4vw /* 48/7.5 */; + line-height: 6.4vw /* 48/7.5 */; + margin: 1.33vw /* 10/7.5 */; + color: #409eff; + background: #ecf5ff; + border-color: #b3d8ff; + border-radius: 1.07vw /* 8/7.5 */; + } + .el-menu-item{ + font-size: 2.93vw /* 22/7.5 */; + } + .el-menu--horizontal>.el-menu-item.is-active{ + color: #fff; + margin: 1.33vw /* 10/7.5 */; + border-radius: 1.07vw /* 8/7.5 */; + border-bottom: none; + background: #409eff; + } + } +} h1,h2,h3,h4,h5{ font-family: '鑻规柟 涓瓑'; font-weight: normal; @@ -150,15 +406,25 @@ width: 100%; display: flex; flex-direction: column; - padding:5.33vw /* 40/7.5 */; + padding: 0 5.33vw /* 40/7.5 */ 5.33vw /* 40/7.5 */ 5.33vw /* 40/7.5 */; } .weizhang-main-top{ - height: 22.489vh /* 300/13.34 */; display: flex; flex-direction: column; justify-content: center; align-items: center; border-bottom: 1px solid #f0f0f0; + position: sticky; + top: 0; + left: 0; + z-index: 9999; + background: #fff; + .title{ + font-size: 4.27vw /* 32/7.5 */; + font-weight: bolder; + height: 10.67vw /* 80/7.5 */; + line-height: 10.67vw /* 80/7.5 */; + } .money{ font-size: 6.93vw /* 52/7.5 */; font-weight: 550; @@ -173,6 +439,59 @@ } .weizhang-main-form{ } + .yuezu-box{ + width: 100%; + display: flex; + flex-direction: column; + margin-top: 8vw /* 30/7.5 */; + .current-box{ + margin-left: 3.33vw /* 25/7.5 */; + .utilTime{ + font-weight: bolder; + color: #ff423b; + } + font-size: 3.73vw /* 28/7.5 */; + color: #000; + margin-top: 4vw /* 30/7.5 */; + } + .yuezuCard{ + .yuezu-line{ + .title{ + margin-left: 3.33vw /* 25/7.5 */; + font-size: 3.73vw /* 28/7.5 */; + color: #000; + font-weight: bolder; + width: 100%; + } + .yuezu-line-right{ + margin-top: 2.67vw /* 20/7.5 */; + } + margin-top: 4vw /* 30/7.5 */; + } + } + .money-box{ + margin: 5.33vw /* 40/7.5 */ auto 2.67vw /* 20/7.5 */; + .money{ + font-size:5.33vw /* 40/7.5 */; + color: #000; + font-weight: bolder; + text-align: center; + } + .money-content{ + font-size: 3.2vw /* 24/7.5 */; + color: #888; + text-align: center; + } + } + .yuezu-footer{ + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + margin-top: 6vw /* 30/7.5 */; + margin-bottom: 6vw; + } + } .weizhang-tiaokuan{ margin-top: 2.67vw /* 20/7.5 */; h1{ @@ -187,6 +506,10 @@ border-radius: 5.33vw /* 40/7.5 */; background-image: linear-gradient(to right,#33b1fe,#0679dc); } + .jiaofei-btn2{ + width: 64.53vw /* 484/7.5 */; + border-radius: 5.33vw /* 40/7.5 */; + } .logoPhone{ margin-top: 0.67vw; width: 1.333rem /* 100/75 */; -- Gitblit v1.9.1