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