<template> <view class="handle-monthly"> <view class="handle-monthly-item"> <view>车牌选择</view> <view class="choose-license" @click="isShowCarLicense = true"> <view>{{ form.carLicense.label || '未选车牌' }}</view> <u-icon name="arrow-down" color="#7B7B7B" size="30"></u-icon> </view> </view> <u-select v-model="isShowCarLicense" :list="carLicenseList" :default-value="carLicenseDefaultValue" @confirm="carLicenseListConfirm"></u-select> <view class="handle-monthly-item"> <view>车辆信息</view> <view>{{ form.carLicense.value | verifyStatusFilter }}</view> </view> <view class="handle-monthly-item"> <view>包月金额</view> <view class="handle-monthly-money">{{ form.monthAmount || 0 }}元</view> </view> <view class="handle-monthly-item" v-if="monthlyRuleObj.giveFlag && Number(monthlyRuleObj.giveFlag) === 1" :class="{ pb20: monthlyRuleObj.minMonth && form.month >= monthlyRuleObj.minMonth && Number(monthlyRuleObj.giveFlag) === 1 }" > <view>包月时长</view> <view class="handle-monthly-time-long"> <button @click="reduceMonthNum()">-</button> <view>{{ form.month || 0 }}个月</view> <button @click="addMonthNum()">+</button> </view> <view class="handle-monthly-time-tips" v-if="monthlyRuleObj.minMonth && form.month >= monthlyRuleObj.minMonth && Number(monthlyRuleObj.giveFlag) === 1" > 赠送提示:可获得{{ freeMonthNum || 0 }}个月的免费停车时长 </view> </view> <view class="handle-monthly-item" v-else> <view>包月时长</view> <view class="handle-monthly-time-long"> <button @click="reduceMonthNum()">-</button> <view>{{ form.month || 0 }}个月</view> <button @click="addMonthNum()">+</button> </view> </view> <view class="handle-monthly-item"> <view>有效期限</view> <view>{{ dateRange || '-' }}</view> </view> <view class="handle-monthly-explain"> <u-parse :html="monthlyContent"></u-parse> </view> <view class="handle-monthly-confirm-button"> <template v-if="carLicenseList.length && form.carLicense && form.carLicense.label"> <u-button type="primary" :loading="loading" @click="submit()">确认包月</u-button> </template> <template v-else> <u-button>未选车牌</u-button> </template> </view> <!-- 选择支付 --> <choose-payment ref="choosePayment" :monthId="monthId" :jumpUrl="jumpUrl" :isMonthPay="true" @closePaymentMethod="closePaymentMethod" /> <u-toast ref="uToast" /> </view> </template> <script> import ChoosePayment from '../choosePayment/choosePayment.vue'; export default { components: { ChoosePayment }, data() { return { startTime: '', endTime: '', payUrl: '', monthId: '', vehicleNo: '', monthEndTime: '', monthStartTime: '', lastActiveDate: null, roadNo: null, parkNo: null, carLicenseList: [], isShowCarLicense: false, form: { energyType: [], monthAmount: 0, carLicense: {}, month: 1, dateRange: '' }, payWayPop: false, jumpUrl: undefined, monthlyContent: '', carLicenseDefaultValue: [0], wxEnv: false, loading: false, type: 'road', monthlyRuleObj: {}, freeMonthNum: 0, radioCurrent: '', orderMoney: '' }; }, watch: { 'form.month': { handler(val) { this.calcFreeMonthNum(val); }, deep: true, immediate: false } }, onLoad(page) { this.getSystems(0); if (page.vehicleNo && page.roadNo) { this.roadNo = page.roadNo; this.vehicleNo = page.vehicleNo; this.type = 'road'; this.getMonthInfo(); } else if (page.roadNo) { this.roadNo = page.roadNo; this.type = 'road'; this.getMonthInfo(); } else if (page.vehicleNo && page.parkNo) { this.parkNo = page.parkNo; this.vehicleNo = page.vehicleNo; this.type = 'park'; this.getMonthInfo(); } else if (page.parkNo) { this.parkNo = page.parkNo; this.type = 'park'; this.getMonthInfo(); } if (page.monthId) { this.monthId = page.monthId; // this.payWayPop = true; } if (page.roadNo) { this.monthlyRuleDetails(); } this.jumpUrl = location.origin + '/#/pages/center/monthly/monthly?type=' + this.type; }, methods: { /** * 获取几个月的日期范围 * {date} Date 起始日期,往后推一天 * {monthNum} Number 往后月数 * */ getMonthRange(date, monthNum) { let Date1 = this.lastActiveDate; Date1 = new Date(date || Date1); const year = Date1.getFullYear(); const month = Date1.getMonth() + 1; const day = Date1.getDate(); const hours = Date1.getHours(); const minutes = Date1.getMinutes(); const seconds = Date1.getSeconds(); let days = new Date(year, month, 0); days = days.getDate(); //获取当前日期中的月的天数 let year2 = year; let month2 = parseInt(month) + parseInt(monthNum); if (month2 > 12) { year2 = parseInt(year2) + parseInt(parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12); month2 = parseInt(month2) % 12; } let day2 = day; let days2 = new Date(year2, month2, 0); days2 = days2.getDate(); if (day2 > days2) { day2 = days2; } if (month2 < 10) { month2 = '0' + month2; } const t1 = year + '.' + (month > 9 ? month : '0' + month) + '.' + (day > 9 ? day : '0' + day); const t2 = year2 + '.' + month2 + '.' + (day2 > 9 ? day2 : '0' + day2); this.startTime = t1; this.endTime = t2; this.monthStartTime = year + '-' + (month > 9 ? month : '0' + month) + '-' + (day > 9 ? day : '0' + day) + ' ' + hours + ':' + minutes + ':' + seconds; this.monthEndTime = year2 + '-' + month2 + '-' + day2 + ' ' + hours + ':' + minutes + ':' + seconds; return t1 + '-' + t2; }, /** * 月操作 减1 * */ reduceMonthNum() { if (this.form.month > 1) { this.form.month -= 1; this.form.dateRange = this.getMonthRange(new Date(), this.form.month + this.freeMonthNum); } }, /** * 月操作 加1 * */ addMonthNum() { if (this.form.month >= 24) { this.$refs.uToast.show({ title: '最多24月', type: 'warning' }); return; } this.form.month += 1; this.form.dateRange = this.getMonthRange(new Date(), this.form.month + this.freeMonthNum); }, carLicenseListConfirm(item) { this.form.carLicense = item[0]; this.vehicleNo = item[0].label; this.getMonthInfo(); }, /** * 获取包月信息 * @date 2022-10-09 * @returns {any} */ getMonthInfo() { let paramsObj = { park: 'parkNo', road: 'roadNo' }, params = { vehicleNo: this.vehicleNo }; params[paramsObj[this.type]] = this[paramsObj[this.type]]; this.$u.api .monthInfo(params) .then((res) => { if (res.code === 200 && res.data.vehicleList && res.data.vehicleList.length) { this.lastActiveDate = res.data.lastActiveDate; this.form.monthAmount = res.data.monthAmount; this.orderMoney = (Number(this.form.monthAmount) * Number(this.form.month)).toFixed(2); this.carLicenseList = []; let vehicleNoItem = null; res.data.vehicleList.forEach((item, index) => { const obj = { value: item.energyType, label: item.vehicleNo, energyType: item.energyType }; if (this.vehicleNo == item.vehicleNo) { vehicleNoItem = obj; this.carLicenseDefaultValue = [index]; } this.carLicenseList.push(obj); }); // 判断是否url存在车牌号,存在则选中项默认选中 if (vehicleNoItem) { this.form.carLicense = vehicleNoItem; } else { this.form.carLicense = this.carLicenseList[0]; } if (this.monthId) { this.$nextTick(() => { this.$refs['choosePayment'].openPopup({ payAmount: Number(this.orderMoney) }, 'single', this.type); }); } } }) .catch((err) => { console.log(err); }); }, /** * 获取包月规则详情 * @date 2022-12-20 * @returns {any} */ monthlyRuleDetails() { let paramsObj = { park: 'parkNo', road: 'roadNo' }, params = {}; params[paramsObj[this.type]] = this[paramsObj[this.type]]; this.$u.api.monthlyRuleDetailsApi(params).then((res) => { if (res.code === 200) { this.monthlyRuleObj = res?.rows[0] ?? {}; this.calcFreeMonthNum(this.form.month); } }); }, /** * @description: 计算免费的包月数量 * @param {*} val * @return {*} */ calcFreeMonthNum(val) { if (this.monthlyRuleObj.giveFlag && Number(this.monthlyRuleObj.giveFlag) === 1) { let timesNum = parseInt(Number(val) / Number(this.monthlyRuleObj.minMonth)); if (timesNum > 0) { this.freeMonthNum = Number(timesNum) * Number(this.monthlyRuleObj.giveMonth); } else { this.freeMonthNum = 0; } } }, /** * 提交包月信息 * @date 2022-10-09 * @returns {any} */ submit() { this.loading = true; let paramsObj = { park: 'parkNo', road: 'roadNo' }, params = { vehicleNo: this.form.carLicense.label, energyType: this.form.carLicense.energyType, monthStartTime: this.monthStartTime, monthEndTime: this.monthEndTime, monthCount: this.form.month }; params[paramsObj[this.type]] = this[paramsObj[this.type]]; this.$u.api .createMonth(params) .then((res) => { if (res.code === 200) { this.monthId = res.data.monthId; this.orderMoney = (Number(this.form.monthAmount) * Number(this.form.month)).toFixed(2); // this.payWayPop = true; this.$nextTick(() => { this.$refs['choosePayment'].openPopup({ payAmount: Number(this.orderMoney) }, 'single', this.type); }); } else { this.$refs.uToast.show({ title: res.msg, type: 'error' }); } this.loading = false; }) .catch((err) => { this.loading = false; }); }, /** * 获取包月说明 * @date 2022-10-09 * @param {any} termsType * @returns {any} */ getSystems(termsType) { this.$u.api .getSystems({ termsType: termsType }) .then((res) => { if (res.code === 200) { this.monthlyContent = res.data?.content; } else { this.$refs.uToast.show({ title: res.msg, type: 'error' }); } }) .catch((err) => { this.$refs.uToast.show({ title: '系统错误!', type: 'error' }); }); }, /** * @description: 调整到包月列表页面 * @return {*} */ jumpMonthList() { this.$u.route({ url: '/pages/center/monthly/monthly', type: 'redirect', params: { type: this.type } }); }, /** * @description: 关闭支付弹框 * @return {*} */ closePaymentMethod() { if (this.monthId) this.jumpMonthList(); } }, computed: { dateRange: function () { return this.getMonthRange(this.lastActiveDate, this.form.month + this.freeMonthNum); } }, filters: { verifyStatusFilter(value) { if (value === 0) { return '-'; } else if (value === 1) { return '汽油车'; } else if (value === 2) { return '新能源'; } else { return '-'; } } } }; </script> <style lang="scss" scoped> @import './handleMonthly.scss'; @import '../paymentMethod/paymentMethod.scss'; </style>