From 2742b796c3181607b19f0c2b63c4465fd76193ee Mon Sep 17 00:00:00 2001
From: 819527061@qq.com <123456>
Date: 星期二, 07 一月 2025 16:58:52 +0800
Subject: [PATCH] 月卡
---
src/components/page/MonthFeePay.vue | 388 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 356 insertions(+), 32 deletions(-)
diff --git a/src/components/page/MonthFeePay.vue b/src/components/page/MonthFeePay.vue
index 3dff2b8..b4fc484 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,15 @@
<style lang="scss">
+.yuezucard-wrap{
+ .el-form-item{
+ margin-bottom: 2.5vw!important;
+ }
+ .el-input__inner{
+ height: 5.33vw /* 40/7.5 */;
+ line-height: 5.33vw;
+ }
+}
.weizhang-main-bootom{
.el-input__inner{
border:none;
@@ -119,6 +350,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 +407,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: 11.73vw /* 88/7.5 */;
+ line-height: 11.73vw /* 88/7.5 */;
+ }
.money{
font-size: 6.93vw /* 52/7.5 */;
font-weight: 550;
@@ -173,6 +440,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 +507,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