|
|
@@ -4,29 +4,30 @@
|
|
|
<view class="block">
|
|
|
<view class="station">
|
|
|
<ChargeMachine
|
|
|
- :title="'NO.' + data.equipment.shortId"
|
|
|
- :list="data.equipment.connectorInfos"
|
|
|
- :time="priceInfo.useTime"
|
|
|
- :parkingNo="data.equipment.parkingNo"
|
|
|
+ :title="'NO.' + data.equipment.shortId"
|
|
|
+ :list="data.equipment.connectorInfos"
|
|
|
+ :time="priceInfo.useTime"
|
|
|
+ :parkingNo="data.equipment.parkingNo"
|
|
|
></ChargeMachine>
|
|
|
</view>
|
|
|
<view class="pt-20 pb-20 pl-30 pr-30 flex-align-center">
|
|
|
<image
|
|
|
- src="/pages-charge/static/machines-banner-address.png"
|
|
|
- mode="widthFix"
|
|
|
- class="flex-shrink mr-12 width-40"
|
|
|
+ src="/pages-charge/static/machines-banner-address.png"
|
|
|
+ mode="widthFix"
|
|
|
+ class="flex-shrink mr-12 width-40"
|
|
|
/>
|
|
|
<view class="fs-26 color-666">{{ data.station.address }}</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
-<!-- <view class="mt-40 ml-30 color-999 fs-32 fw-500">费用说明</view>-->
|
|
|
+ <!-- <view class="mt-40 ml-30 color-999 fs-32 fw-500">费用说明</view>-->
|
|
|
<view
|
|
|
- class="mt-20 block height-96 flex-align-center pl-30 pr-30"
|
|
|
- @click="openPriceDesc"
|
|
|
+ class="mt-20 block height-96 flex-align-center pl-30 pr-30"
|
|
|
+ @click="openPriceDesc"
|
|
|
>
|
|
|
<view class="fs-28 color-000">充电费用</view>
|
|
|
<view class="ml-64 fs-26 color-333"
|
|
|
- >{{ priceInfo.minPrice }}~{{ priceInfo.maxPrice }}元/度</view
|
|
|
+ >{{ priceInfo.minPrice }}~{{ priceInfo.maxPrice }}元/度
|
|
|
+ </view
|
|
|
>
|
|
|
<view class="ml-auto">
|
|
|
<uni-icons type="right" size="16" color="rgba(0,0,0,0.4)"></uni-icons>
|
|
|
@@ -36,55 +37,60 @@
|
|
|
<view class="mt-40 color-999 fs-32 fw-500">已预约充电</view>
|
|
|
<view class="mt-20 block flex-align-center" style="height: 180rpx">
|
|
|
<image
|
|
|
- class="width-56 ml-30"
|
|
|
- src="/pages-charge/static/icon-alarm.png"
|
|
|
- mode="widthFix"
|
|
|
+ class="width-56 ml-30"
|
|
|
+ src="/pages-charge/static/icon-alarm.png"
|
|
|
+ mode="widthFix"
|
|
|
></image>
|
|
|
<view class="ml-24">
|
|
|
<view class="flex" v-if="appointmentCountDown">
|
|
|
<view class="fs-28 color-000">将在</view>
|
|
|
<view class="fs-44 lh-36 color-primary ml-8 mr-8">{{
|
|
|
- appointmentCountDown
|
|
|
- }}</view>
|
|
|
+ appointmentCountDown
|
|
|
+ }}
|
|
|
+ </view>
|
|
|
<view class="fs-28 color-000">后开始充电</view>
|
|
|
</view>
|
|
|
<view class="fs-24 color-999 mt-8"
|
|
|
- >请在{{ appointmentData.startTime }}前到达充电桩并开始充电</view
|
|
|
+ >请在{{ appointmentData.startTime }}前到达充电桩并开始充电
|
|
|
+ </view
|
|
|
>
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="mt-40 flex-center">
|
|
|
<view
|
|
|
- class="flex-center height-68 br-68 fs-26 color-666"
|
|
|
- style="width: 184rpx; border: 1px solid rgba(0, 0, 0, 0.3)"
|
|
|
- @click="cancelAppointment"
|
|
|
- >取消预约</view
|
|
|
+ class="flex-center height-68 br-68 fs-26 color-666"
|
|
|
+ style="width: 184rpx; border: 1px solid rgba(0, 0, 0, 0.3)"
|
|
|
+ @click="cancelAppointment"
|
|
|
+ >取消预约
|
|
|
+ </view
|
|
|
>
|
|
|
</view>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
-<!-- <view class="mt-40 ml-30 color-999 fs-32 fw-500">选择充电方式</view>-->
|
|
|
+ <!-- <view class="mt-40 ml-30 color-999 fs-32 fw-500">选择充电方式</view>-->
|
|
|
<view class="mt-20 block pl-30 pr-30">
|
|
|
<view
|
|
|
- v-for="(type, index) in chargeTypes"
|
|
|
- :key="index"
|
|
|
- :class="['pt-40', 'pb-40', 'flex-align-center']"
|
|
|
- :style="{
|
|
|
+ v-for="(type, index) in chargeTypes"
|
|
|
+ :key="index"
|
|
|
+ :class="['pt-40', 'pb-40', 'flex-align-center']"
|
|
|
+ :style="{
|
|
|
borderTop: index === 0 ? '' : '1rpx solid rgba(0, 0, 0, 0.10)',
|
|
|
}"
|
|
|
- @click="changeType(index)"
|
|
|
+ @click="changeType(index)"
|
|
|
>
|
|
|
<view>
|
|
|
<view class="fs-28 lh-28 color-000 fw-500">{{ type.title }}</view>
|
|
|
<view
|
|
|
- class="fs-24 lh-24 mt-16"
|
|
|
- style="color: #f8386a"
|
|
|
- v-if="chargeType === index"
|
|
|
- >{{ type.checkTip }}</view
|
|
|
+ class="fs-24 lh-24 mt-16"
|
|
|
+ style="color: #f8386a"
|
|
|
+ v-if="chargeType === index"
|
|
|
+ >{{ type.checkTip }}
|
|
|
+ </view
|
|
|
>
|
|
|
<view class="fs-24 color-999 lh-24 mt-16" v-else>{{
|
|
|
- type.tip
|
|
|
- }}</view>
|
|
|
+ type.tip
|
|
|
+ }}
|
|
|
+ </view>
|
|
|
</view>
|
|
|
<view class="ml-auto">
|
|
|
<style-checkbox :checked="chargeType === index"></style-checkbox>
|
|
|
@@ -93,9 +99,9 @@
|
|
|
</view>
|
|
|
<view class="mt-20 block pl-30 pr-30" v-if="chargeType === 0">
|
|
|
<view
|
|
|
- class="pt-40 pb-40 flex-between"
|
|
|
- style="border-bottom: 1rpx solid rgba(0, 0, 0, 0.1)"
|
|
|
- @click="selectTime"
|
|
|
+ class="pt-40 pb-40 flex-between"
|
|
|
+ style="border-bottom: 1rpx solid rgba(0, 0, 0, 0.1)"
|
|
|
+ @click="selectTime"
|
|
|
>
|
|
|
<view class="fs-28 color-000 fw-500">充电时间</view>
|
|
|
<view class="flex-align-center lh-28">
|
|
|
@@ -104,12 +110,14 @@
|
|
|
</block>
|
|
|
<block v-else>
|
|
|
<view
|
|
|
- v-if="chargeTime.format"
|
|
|
- class="fs-28 color-333 fw-500 mr-16"
|
|
|
- >{{ chargeTime.format }}</view
|
|
|
+ v-if="chargeTime.format"
|
|
|
+ class="fs-28 color-333 fw-500 mr-16"
|
|
|
+ >{{ chargeTime.format }}
|
|
|
+ </view
|
|
|
>
|
|
|
<view v-else class="fs-26 mr-16" style="color: #cacaca"
|
|
|
- >请选择</view
|
|
|
+ >请选择
|
|
|
+ </view
|
|
|
>
|
|
|
<uni-icons type="right" size="16" color="#CACACA"></uni-icons>
|
|
|
</block>
|
|
|
@@ -120,63 +128,68 @@
|
|
|
<view class="flex-align-center lh-28">
|
|
|
<block v-if="chargeTime.isPowerSaving">
|
|
|
<view class="fs-28 color-333 fw-500"
|
|
|
- >低至{{ priceInfo.minPrice }}元/kwh</view
|
|
|
+ >低至{{ priceInfo.minPrice }}元/kwh
|
|
|
+ </view
|
|
|
>
|
|
|
</block>
|
|
|
<block v-else>
|
|
|
<view
|
|
|
- v-if="chargeTime.formatPrice"
|
|
|
- class="fs-28 color-333 fw-500"
|
|
|
- >{{ chargeTime.formatPrice }}</view
|
|
|
+ v-if="chargeTime.formatPrice"
|
|
|
+ class="fs-28 color-333 fw-500"
|
|
|
+ >{{ chargeTime.formatPrice }}
|
|
|
+ </view
|
|
|
>
|
|
|
<view v-else class="fs-26 mr-16" style="color: #cacaca"
|
|
|
- >选择时间后显示</view
|
|
|
+ >选择时间后显示
|
|
|
+ </view
|
|
|
>
|
|
|
</block>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
+
|
|
|
<view
|
|
|
- class="mt-20 block flex-align-center pl-30 pr-30 pt-30 pb-30"
|
|
|
- @click="
|
|
|
- to(
|
|
|
- `/pages-charge/discount/discount?index=${discountIndex}${
|
|
|
- activity && activity.id ? `&id=${activity.id}` : ''
|
|
|
- }`
|
|
|
- )
|
|
|
- "
|
|
|
+ class="mt-20 block flex-align-center pl-30 pr-30 pt-30 pb-30"
|
|
|
+ @click="handleShowStationChargeCoupon"
|
|
|
>
|
|
|
+ <!-- to(-->
|
|
|
+ <!-- `/pages-charge/discount/discountV2?rightsId=${userRechargeRightsId}&couponId=${userCouponId}&stationId=${stationId}`-->
|
|
|
+ <!-- )-->
|
|
|
<view class="fs-28 lh-28 color-000 fw-500">优惠</view>
|
|
|
- <block v-if="discountList.length > 0">
|
|
|
+ <block v-if="checkedUserRightsOrCoupon&&checkedUserRightsOrCoupon.userRights">
|
|
|
<view class="fs-28 lh-28 ml-auto" style="color: #f43636"
|
|
|
- >{{ discountList[discountIndex].discountFormat.toFixed(1) }}折</view
|
|
|
+ >{{ ((checkedUserRightsOrCoupon?.userRights?.discount||0)/10).toFixed(1) }}折
|
|
|
+ </view
|
|
|
>
|
|
|
<uni-icons type="right" size="16" color="#CACACA"></uni-icons>
|
|
|
</block>
|
|
|
- <block v-else-if="activity">
|
|
|
+ <block v-else-if="checkedUserRightsOrCoupon&&checkedUserRightsOrCoupon.userCoupon">
|
|
|
<view class="fs-28 lh-28 ml-auto" style="color: #f43636"
|
|
|
- >{{ activity.minDiscount }}折</view
|
|
|
+ >{{ ((checkedUserRightsOrCoupon?.userCoupon?.discount||0)/100).toFixed(2) }}元
|
|
|
+ </view
|
|
|
>
|
|
|
- <view class="fs-28 lh-28 color-666 ml-8">权益待领取</view>
|
|
|
+ <!-- <view class="fs-28 lh-28 color-666 ml-8">权益待领取</view>-->
|
|
|
<uni-icons type="right" size="16" color="#CACACA"></uni-icons>
|
|
|
</block>
|
|
|
<view v-else class="fs-28 lh-28 color-666 ml-auto">无</view>
|
|
|
</view>
|
|
|
+
|
|
|
<view
|
|
|
- class="mt-20 block flex-align-center pl-30 pr-30 pt-30 pb-30"
|
|
|
- v-if="chargeType === 0"
|
|
|
+ class="mt-20 block flex-align-center pl-30 pr-30 pt-30 pb-30"
|
|
|
+ v-if="chargeType === 0"
|
|
|
>
|
|
|
<view class="flex-column">
|
|
|
<view class="fs-28 lh-28 color-000 fw-500">省钱模式</view>
|
|
|
<view class="fs-24 lh-30 color-999 mt-8"
|
|
|
- >处于00:00-08:00时,电费低至{{ priceInfo.minPrice }}元/kwh</view
|
|
|
+ >处于00:00-08:00时,电费低至{{ priceInfo.minPrice }}元/kwh
|
|
|
+ </view
|
|
|
>
|
|
|
</view>
|
|
|
<view class="ml-auto">
|
|
|
<switch
|
|
|
- :checked="chargeTime.isPowerSaving"
|
|
|
- color="#2d9e95"
|
|
|
- @change="changePowerSaving"
|
|
|
+ :checked="chargeTime.isPowerSaving"
|
|
|
+ color="#2d9e95"
|
|
|
+ @change="changePowerSaving"
|
|
|
/>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -187,78 +200,84 @@
|
|
|
<template v-if="appointmentData">
|
|
|
<view class="mr-10" style="width: 50%">
|
|
|
<style-button size="small" @click="selectTime"
|
|
|
- >修改时间</style-button
|
|
|
- ></view
|
|
|
+ >修改时间
|
|
|
+ </style-button
|
|
|
+ >
|
|
|
+ </view
|
|
|
>
|
|
|
<view class="ml-10" style="width: 50%">
|
|
|
<style-button type="primary" size="small" @click="submitNow"
|
|
|
- >立即开始</style-button
|
|
|
+ >立即开始
|
|
|
+ </style-button
|
|
|
>
|
|
|
</view>
|
|
|
</template>
|
|
|
<style-button v-else type="primary" size="small" @click="submit">{{
|
|
|
- chargeType === 0 ? "提交预约" : "马上充电"
|
|
|
- }}</style-button>
|
|
|
+ chargeType === 0 ? "提交预约" : "马上充电"
|
|
|
+ }}
|
|
|
+ </style-button>
|
|
|
</view>
|
|
|
</style-bottom-view>
|
|
|
</view>
|
|
|
<style-dialog
|
|
|
- v-if="chargeTimeDialog"
|
|
|
- @close="closeTime"
|
|
|
- :title="
|
|
|
+ v-if="chargeTimeDialog"
|
|
|
+ @close="closeTime"
|
|
|
+ :title="
|
|
|
'请选择' + (chargeTime.isPowerSaving ? '省电模式' : '') + '充电时间'
|
|
|
"
|
|
|
>
|
|
|
<view class="flex" style="border-top: 1rpx solid rgba(0, 0, 0, 0.1)">
|
|
|
<view
|
|
|
- class="flex-shrink"
|
|
|
- style="height: 840rpx; width: 256rpx; background-color: #f0f0f0"
|
|
|
+ class="flex-shrink"
|
|
|
+ style="height: 840rpx; width: 256rpx; background-color: #f0f0f0"
|
|
|
>
|
|
|
<view
|
|
|
- class="flex-align-center pl-32 height-90"
|
|
|
- v-for="(day, index) in timesInfo.day"
|
|
|
- :key="index"
|
|
|
- :style="{
|
|
|
+ class="flex-align-center pl-32 height-90"
|
|
|
+ v-for="(day, index) in timesInfo.day"
|
|
|
+ :key="index"
|
|
|
+ :style="{
|
|
|
backgroundColor:
|
|
|
day.format === chargeTime.day ? '#fff' : 'transparent',
|
|
|
}"
|
|
|
- @click="changeDay(index)"
|
|
|
+ @click="changeDay(index)"
|
|
|
>
|
|
|
<view
|
|
|
- :class="[
|
|
|
+ :class="[
|
|
|
'fs-32',
|
|
|
'fw-500',
|
|
|
day.format === chargeTime.day ? 'color-primary' : 'color-000',
|
|
|
]"
|
|
|
- >{{ day.format }}</view
|
|
|
+ >{{ day.format }}
|
|
|
+ </view
|
|
|
>
|
|
|
<view
|
|
|
- class="fs-24 color-666 ml-12 br-8 width-60 height-40 flex-center"
|
|
|
- style="background-color: rgba(0, 0, 0, 0.07)"
|
|
|
- v-if="day.year && day.format !== chargeTime.day"
|
|
|
- >{{ day.year }}年</view
|
|
|
+ class="fs-24 color-666 ml-12 br-8 width-60 height-40 flex-center"
|
|
|
+ style="background-color: rgba(0, 0, 0, 0.07)"
|
|
|
+ v-if="day.year && day.format !== chargeTime.day"
|
|
|
+ >{{ day.year }}年
|
|
|
+ </view
|
|
|
>
|
|
|
</view>
|
|
|
</view>
|
|
|
<scroll-view
|
|
|
- scroll-y
|
|
|
- class="flex-grow"
|
|
|
- style="height: 840rpx"
|
|
|
- :scroll-into-view="chargeTime.scrollId"
|
|
|
+ scroll-y
|
|
|
+ class="flex-grow"
|
|
|
+ style="height: 840rpx"
|
|
|
+ :scroll-into-view="chargeTime.scrollId"
|
|
|
>
|
|
|
<view
|
|
|
- :id="`hour-${hour.format}`"
|
|
|
- class="flex-align-center pl-40 height-90 fs-32"
|
|
|
- v-for="(hour, index) in timesInfo.hour"
|
|
|
- :key="index"
|
|
|
- :style="{
|
|
|
+ :id="`hour-${hour.format}`"
|
|
|
+ class="flex-align-center pl-40 height-90 fs-32"
|
|
|
+ v-for="(hour, index) in timesInfo.hour"
|
|
|
+ :key="index"
|
|
|
+ :style="{
|
|
|
color: hour.disabled
|
|
|
? '#999'
|
|
|
: hour.format === chargeTime.hour
|
|
|
? 'var(--color-primary)'
|
|
|
: '#000',
|
|
|
}"
|
|
|
- @click="changeHour(index)"
|
|
|
+ @click="changeHour(index)"
|
|
|
>
|
|
|
{{ hour.format }}
|
|
|
</view>
|
|
|
@@ -267,30 +286,26 @@
|
|
|
</view>
|
|
|
</style-dialog>
|
|
|
<PriceDesc
|
|
|
- v-if="priceDescVisible"
|
|
|
- :desc="priceInfo.policyInfos || []"
|
|
|
- @close="closePriceDesc"
|
|
|
+ v-if="priceDescVisible"
|
|
|
+ :desc="priceInfo.policyInfos || []"
|
|
|
+ @close="closePriceDesc"
|
|
|
></PriceDesc>
|
|
|
+
|
|
|
+ <StationChargeCoupon ref="station_charge_coupon_ref" @on-change="handleCheckedUserRightsAndCoupon"></StationChargeCoupon>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import {
|
|
|
- fetchChargeStatus,
|
|
|
- fetchStationByConnectorIdOrShortId,
|
|
|
- fetchStationPriceDesc,
|
|
|
- startCharge,
|
|
|
- startAppointmentCharge,
|
|
|
- cancelAppointmentCharge,
|
|
|
- changeAppointmentTime,
|
|
|
-} from "@/api/charge";
|
|
|
-import { fetchProfile } from "@/api/user";
|
|
|
-import { onLoad, onShow } from "@dcloudio/uni-app";
|
|
|
-import { ref } from "vue";
|
|
|
+import {cancelAppointmentCharge, changeAppointmentTime, fetchChargeStatus, fetchStationByConnectorIdOrShortId, fetchStationPriceDesc, startAppointmentCharge, startCharge,} from "@/api/charge";
|
|
|
+import {fetchProfile} from "@/api/user";
|
|
|
+import {onLoad, onShow} from "@dcloudio/uni-app";
|
|
|
+import {ref} from "vue";
|
|
|
import ChargeMachine from "../machines/charge-machine/charge-machine.vue";
|
|
|
import PriceDesc from "../machines/price-desc/price-desc.vue";
|
|
|
-import { format } from "@/utils/date";
|
|
|
-import { to,redirect } from "../../utils/navigate";
|
|
|
+import StationChargeCoupon from "@/components/station-charge-coupon/station-charge-coupon.vue";
|
|
|
+import {format} from "@/utils/date";
|
|
|
+import {redirect} from "../../utils/navigate";
|
|
|
+
|
|
|
|
|
|
const DAY = 24 * 60 * 60 * 1000;
|
|
|
const options = ref<any>();
|
|
|
@@ -301,6 +316,15 @@ const timesInfo = ref<any>({
|
|
|
day: [],
|
|
|
time: [],
|
|
|
});
|
|
|
+const checkedUserRightsOrCoupon = ref<any>({
|
|
|
+ rightsId: null,
|
|
|
+ couponId: null,
|
|
|
+ stationId: null,
|
|
|
+ userRights: null,
|
|
|
+ userCoupon: null
|
|
|
+});
|
|
|
+
|
|
|
+const station_charge_coupon_ref = ref();
|
|
|
|
|
|
const chargeType = ref(1);
|
|
|
const chargeTypes = ref([
|
|
|
@@ -330,6 +354,18 @@ const discountIndex = ref(-1);
|
|
|
const discountList = ref<any[]>([]);
|
|
|
const activity = ref();
|
|
|
|
|
|
+const stationId = ref();
|
|
|
+
|
|
|
+const handleShowStationChargeCoupon = () => {
|
|
|
+ let {rightsId,couponId} = checkedUserRightsOrCoupon.value;
|
|
|
+ station_charge_coupon_ref.value?.open(stationId.value,rightsId,couponId);
|
|
|
+}
|
|
|
+
|
|
|
+const handleCheckedUserRightsAndCoupon = (data: any) => {
|
|
|
+ // console.log("handleCheckedUserRightsAndCoupon", data);
|
|
|
+ checkedUserRightsOrCoupon.value = data;
|
|
|
+}
|
|
|
+
|
|
|
const changeType = (index: number) => {
|
|
|
chargeType.value = index;
|
|
|
};
|
|
|
@@ -375,8 +411,8 @@ const buildHours = (hour: number, day: Date) => {
|
|
|
format: `${hourTemp}:${index * 5 >= 10 ? index * 5 : `0${index * 5}`}`,
|
|
|
formatPrice: priceTemp,
|
|
|
disabled: isPassTime(
|
|
|
- `${hourTemp}:${index * 5 >= 10 ? index * 5 : `0${index * 5}`}`,
|
|
|
- chargeTime.value.time ? chargeTime.value.time : day.getTime()
|
|
|
+ `${hourTemp}:${index * 5 >= 10 ? index * 5 : `0${index * 5}`}`,
|
|
|
+ chargeTime.value.time ? chargeTime.value.time : day.getTime()
|
|
|
),
|
|
|
});
|
|
|
}
|
|
|
@@ -399,8 +435,8 @@ const selectTime = () => {
|
|
|
return;
|
|
|
}
|
|
|
const now = appointmentData.value
|
|
|
- ? new Date(appointmentData.value.startTime.replace(/-/g, "/"))
|
|
|
- : new Date();
|
|
|
+ ? new Date(appointmentData.value.startTime.replace(/-/g, "/"))
|
|
|
+ : new Date();
|
|
|
const year = format("y", now.getTime());
|
|
|
const nextyear = format("y", now.getTime() + DAY);
|
|
|
|
|
|
@@ -438,12 +474,12 @@ const selectTime = () => {
|
|
|
chargeTime.value.time = timesInfo.value.day[0].time;
|
|
|
chargeTime.value.day = timesInfo.value.day[0].format;
|
|
|
const findIndex = timesInfo.value.hour.findIndex(
|
|
|
- (item: any) => item.format === format("h:m:s", now.getTime())
|
|
|
+ (item: any) => item.format === format("h:m:s", now.getTime())
|
|
|
);
|
|
|
if (findIndex >= 0) {
|
|
|
chargeTime.value.hour = timesInfo.value.hour[findIndex].format;
|
|
|
chargeTime.value.formatPrice =
|
|
|
- timesInfo.value.hour[findIndex].formatPrice;
|
|
|
+ timesInfo.value.hour[findIndex].formatPrice;
|
|
|
}
|
|
|
}
|
|
|
chargeTimeDialog.value = true;
|
|
|
@@ -485,26 +521,26 @@ const changeHour = (index: number) => {
|
|
|
mask: true,
|
|
|
});
|
|
|
changeAppointmentTime(
|
|
|
- appointmentData.value.startChargeSeq,
|
|
|
- `${format("y-M-d", chargeTime.value.time)} ${
|
|
|
- timesInfo.value.hour[index].format
|
|
|
- }:00`
|
|
|
+ appointmentData.value.startChargeSeq,
|
|
|
+ `${format("y-M-d", chargeTime.value.time)} ${
|
|
|
+ timesInfo.value.hour[index].format
|
|
|
+ }:00`
|
|
|
)
|
|
|
- .then(() => {
|
|
|
- return fetchChargeStatus();
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- uni.hideLoading();
|
|
|
- if (res && res.isAppointment) {
|
|
|
- uni.showToast({
|
|
|
- icon: "success",
|
|
|
- title: "修改成功",
|
|
|
- });
|
|
|
- closeTime();
|
|
|
- appointmentData.value = res;
|
|
|
- startAppointmentCountDown();
|
|
|
- }
|
|
|
- });
|
|
|
+ .then(() => {
|
|
|
+ return fetchChargeStatus();
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ if (res && res.isAppointment) {
|
|
|
+ uni.showToast({
|
|
|
+ icon: "success",
|
|
|
+ title: "修改成功",
|
|
|
+ });
|
|
|
+ closeTime();
|
|
|
+ appointmentData.value = res;
|
|
|
+ startAppointmentCountDown();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
},
|
|
|
});
|
|
|
@@ -512,7 +548,7 @@ const changeHour = (index: number) => {
|
|
|
}
|
|
|
chargeTime.value.hour = timesInfo.value.hour[index].format;
|
|
|
chargeTime.value.format = `${format("y年M月d日", chargeTime.value.time)} ${
|
|
|
- chargeTime.value.hour
|
|
|
+ chargeTime.value.hour
|
|
|
}`;
|
|
|
chargeTime.value.formatPrice = timesInfo.value.hour[index].formatPrice;
|
|
|
closeTime();
|
|
|
@@ -571,18 +607,18 @@ const cancelAppointment = () => {
|
|
|
mask: true,
|
|
|
});
|
|
|
cancelAppointmentCharge()
|
|
|
- .then(() => {
|
|
|
- uni.hideLoading();
|
|
|
- uni.showToast({
|
|
|
- icon: "success",
|
|
|
- title: "已取消",
|
|
|
+ .then(() => {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showToast({
|
|
|
+ icon: "success",
|
|
|
+ title: "已取消",
|
|
|
+ });
|
|
|
+ appointmentData.value = undefined;
|
|
|
+ startAppointmentCountDown();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ uni.hideLoading();
|
|
|
});
|
|
|
- appointmentData.value = undefined;
|
|
|
- startAppointmentCountDown();
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- uni.hideLoading();
|
|
|
- });
|
|
|
}
|
|
|
},
|
|
|
});
|
|
|
@@ -597,7 +633,7 @@ const startAppointmentCountDown = () => {
|
|
|
return;
|
|
|
}
|
|
|
appointmentCountDown.value = formatAppointmentCountDown(
|
|
|
- appointmentData.value.startTime
|
|
|
+ appointmentData.value.startTime
|
|
|
);
|
|
|
if (appointmentCountDown.value) {
|
|
|
appointmentCountDownTimer = setTimeout(() => {
|
|
|
@@ -634,15 +670,15 @@ const formatAppointmentCountDown = (time: string) => {
|
|
|
}
|
|
|
}
|
|
|
return `${hourTime < 10 ? "0" + hourTime : hourTime}:${
|
|
|
- minuteTime < 10 ? "0" + minuteTime : minuteTime
|
|
|
+ minuteTime < 10 ? "0" + minuteTime : minuteTime
|
|
|
}:${secondTime < 10 ? "0" + secondTime : secondTime}`;
|
|
|
};
|
|
|
|
|
|
const submit = () => {
|
|
|
if (
|
|
|
- chargeType.value === 0 &&
|
|
|
- !chargeTime.value.isPowerSaving &&
|
|
|
- !chargeTime.value.hour
|
|
|
+ chargeType.value === 0 &&
|
|
|
+ !chargeTime.value.isPowerSaving &&
|
|
|
+ !chargeTime.value.hour
|
|
|
) {
|
|
|
uni.showToast({
|
|
|
title: "请选择充电时间",
|
|
|
@@ -656,8 +692,8 @@ const submit = () => {
|
|
|
startTime = now.getTime();
|
|
|
// 省电模式
|
|
|
if (
|
|
|
- now.getHours() >= 8 &&
|
|
|
- now.getDate() === Number(format("d", chargeTime.value.time))
|
|
|
+ now.getHours() >= 8 &&
|
|
|
+ now.getDate() === Number(format("d", chargeTime.value.time))
|
|
|
) {
|
|
|
startTime += DAY;
|
|
|
}
|
|
|
@@ -666,9 +702,9 @@ const submit = () => {
|
|
|
if (chargeType.value === 0) {
|
|
|
query += "isBooking=true";
|
|
|
query += `&startTime=${format("y-M-d", startTime)} ${
|
|
|
- chargeTime.value.isPowerSaving
|
|
|
- ? "00:00:00"
|
|
|
- : `${chargeTime.value.hour}:00`
|
|
|
+ chargeTime.value.isPowerSaving
|
|
|
+ ? "00:00:00"
|
|
|
+ : `${chargeTime.value.hour}:00`
|
|
|
}`;
|
|
|
if (chargeTime.value.isPowerSaving) {
|
|
|
query += `&endTime=${format("y-M-d", startTime)} 08:00:00`;
|
|
|
@@ -677,8 +713,12 @@ const submit = () => {
|
|
|
if (chargeType.value === 1) {
|
|
|
query += "isBooking=false";
|
|
|
}
|
|
|
- if (discountIndex.value >= 0) {
|
|
|
- query += `&rechargeRightsId=${discountList.value[discountIndex.value].id}`;
|
|
|
+ let {rightsId,couponId} = checkedUserRightsOrCoupon.value;
|
|
|
+ if (rightsId &&rightsId >= 0) {
|
|
|
+ query += `&userRechargeRightsId=${rightsId}`;
|
|
|
+ }
|
|
|
+ if (couponId &&couponId >= 0) {
|
|
|
+ query += `&userCouponId=${couponId}`;
|
|
|
}
|
|
|
console.log(query)
|
|
|
uni.showLoading({
|
|
|
@@ -686,35 +726,35 @@ const submit = () => {
|
|
|
mask: true,
|
|
|
});
|
|
|
startCharge(options.value.sn, query)
|
|
|
- .then(() => {
|
|
|
- if (chargeType.value === 0) {
|
|
|
- fetchChargeStatus()
|
|
|
- .then((res) => {
|
|
|
- if (res && res.isAppointment) {
|
|
|
- uni.hideLoading();
|
|
|
- uni.showToast({
|
|
|
- icon: "success",
|
|
|
- title: "预约成功",
|
|
|
+ .then(() => {
|
|
|
+ if (chargeType.value === 0) {
|
|
|
+ fetchChargeStatus()
|
|
|
+ .then((res) => {
|
|
|
+ if (res && res.isAppointment) {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showToast({
|
|
|
+ icon: "success",
|
|
|
+ title: "预约成功",
|
|
|
+ });
|
|
|
+ appointmentData.value = res;
|
|
|
+ startAppointmentCountDown();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ uni.navigateBack();
|
|
|
});
|
|
|
- appointmentData.value = res;
|
|
|
- startAppointmentCountDown();
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- uni.navigateBack();
|
|
|
- });
|
|
|
- }
|
|
|
- if (chargeType.value === 1) {
|
|
|
- redirect(`/pages-charge/ordering/ordering?sn=${options.value.sn}&start=1`)
|
|
|
- }
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- uni.hideLoading();
|
|
|
- uni.showModal({
|
|
|
- content: `${err.errMsg}`,
|
|
|
- showCancel: false,
|
|
|
+ }
|
|
|
+ if (chargeType.value === 1) {
|
|
|
+ redirect(`/pages-charge/ordering/ordering?sn=${options.value.sn}&start=1`)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showModal({
|
|
|
+ content: `${err.errMsg}`,
|
|
|
+ showCancel: false,
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
};
|
|
|
|
|
|
const submitNow = () => {
|
|
|
@@ -723,16 +763,16 @@ const submitNow = () => {
|
|
|
mask: true,
|
|
|
});
|
|
|
startAppointmentCharge(options.value.sn)
|
|
|
- .then(() => {
|
|
|
- _checkStartCharge();
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- uni.hideLoading();
|
|
|
- uni.showModal({
|
|
|
- content: `${err.errMsg}`,
|
|
|
- showCancel: false,
|
|
|
+ .then(() => {
|
|
|
+ _checkStartCharge();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showModal({
|
|
|
+ content: `${err.errMsg}`,
|
|
|
+ showCancel: false,
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
};
|
|
|
|
|
|
const _checkStartCharge = () => {
|
|
|
@@ -754,36 +794,38 @@ onLoad((_options: any) => {
|
|
|
title: "加载中",
|
|
|
});
|
|
|
fetchStationByConnectorIdOrShortId(sn)
|
|
|
- .then((res) => {
|
|
|
- console.log(res);
|
|
|
- if (
|
|
|
- res.equipment &&
|
|
|
- res.equipment.connectorInfos &&
|
|
|
- res.equipment.connectorInfos.length
|
|
|
- ) {
|
|
|
- sn = res.equipment.connectorInfos[0].connectorId;
|
|
|
- _options.sn = res.equipment.connectorInfos[0].connectorId;
|
|
|
- }
|
|
|
- options.value = _options;
|
|
|
- data.value = res;
|
|
|
- return fetchStationPriceDesc(sn);
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- // console.log(res);
|
|
|
- uni.hideLoading();
|
|
|
- priceInfo.value = res;
|
|
|
- return fetchChargeStatus(false, true);
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- if (res && res.isAppointment) {
|
|
|
- appointmentData.value = res;
|
|
|
- startAppointmentCountDown();
|
|
|
- }
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- console.log(err);
|
|
|
- uni.hideLoading();
|
|
|
- });
|
|
|
+ .then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ let {station, equipment} = res;
|
|
|
+ if (station) {
|
|
|
+ stationId.value = station.StationID;
|
|
|
+ }
|
|
|
+ if (equipment && equipment.connectorInfos && equipment.connectorInfos.length) {
|
|
|
+ sn = equipment.connectorInfos[0].connectorId;
|
|
|
+ _options.sn = equipment.connectorInfos[0].connectorId;
|
|
|
+ }
|
|
|
+ options.value = _options;
|
|
|
+ data.value = res;
|
|
|
+ return fetchStationPriceDesc(sn);
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ // console.log(res);
|
|
|
+ uni.hideLoading();
|
|
|
+ priceInfo.value = res;
|
|
|
+ return fetchChargeStatus(false, true);
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res && res.isAppointment) {
|
|
|
+ appointmentData.value = res;
|
|
|
+ startAppointmentCountDown();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log(err);
|
|
|
+ uni.hideLoading();
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
fetchProfile().then((res) => {
|
|
|
if (res.userRechargeRightsList.length) {
|
|
|
res.userRechargeRightsList.forEach((item: any) => {
|
|
|
@@ -799,12 +841,13 @@ onLoad((_options: any) => {
|
|
|
});
|
|
|
activity.value = res.activityList[0];
|
|
|
activity.value.minDiscount = Number(
|
|
|
- (
|
|
|
- Number(res.activityList[0].rechargeRightsList[0].discount) / 10
|
|
|
- ).toFixed(1)
|
|
|
+ (
|
|
|
+ Number(res.activityList[0].rechargeRightsList[0].discount) / 10
|
|
|
+ ).toFixed(1)
|
|
|
);
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
});
|
|
|
|
|
|
onShow(() => {
|
|
|
@@ -822,10 +865,12 @@ onShow(() => {
|
|
|
padding: 20rpx;
|
|
|
background-color: #f6f7fa;
|
|
|
}
|
|
|
+
|
|
|
.block {
|
|
|
border-radius: 20rpx;
|
|
|
background: #fff;
|
|
|
}
|
|
|
+
|
|
|
.station {
|
|
|
height: 148rpx;
|
|
|
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
|