1348 lines
33 KiB
Vue
1348 lines
33 KiB
Vue
<template>
|
||
<view class="self-pay">
|
||
<uv-popup ref="popup" mode="bottom" @change="change">
|
||
<view class="salf-card">
|
||
<view class="pop-card" v-if="serviceType == 1">
|
||
<text class="syr-info-address">{{
|
||
reservationAddress.server_address
|
||
}}</text>
|
||
<text class="syr-info-phone">{{
|
||
reservationAddress.name + " " + reservationAddress.call_phone
|
||
}}</text>
|
||
</view>
|
||
<view class="pop-card" v-if="serviceType == 1">
|
||
<view class="salf-card-between mb-20">
|
||
<text class="salf-card-between-text1">到家时间</text>
|
||
<text class="salf-card-between-text2">{{
|
||
reservationTime.selectedTime
|
||
}}</text>
|
||
</view>
|
||
<view class="salf-card-between">
|
||
<text class="salf-card-between-text1">服务人员</text>
|
||
<view style="width: 425rpx; justify-content: flex-end" class="flex-row-center">
|
||
<image v-if="reservationSyr.head_photo" class="card-right-photo"
|
||
:src="reservationSyr.head_photo" />
|
||
<text class="salf-card-between-text2" style="width: auto">{{
|
||
reservationSyr.name
|
||
}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="pop-card">
|
||
<view class="serve-info">
|
||
<image :src="serviceInfo.photo[0]" class="serve-info-img" mode="aspectFill"></image>
|
||
<view class="serve-info-right">
|
||
<text class="serve-info-right-name">{{ serviceInfo.title }}</text>
|
||
<view class="serve-info-right-num flex-row-center-between">
|
||
<text class="serve-info-right-num-text1">服务数量</text>
|
||
<text class="serve-info-right-num-text2">X1</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="salf-card-between">
|
||
<view>
|
||
<view class="salf-card-between-box">
|
||
<text class="salf-card-between-text2-o">应付金额</text>
|
||
<text class="salf-card-between-text2-t">¥</text>
|
||
<text class="salf-card-between-text2-s">{{
|
||
isOriginalPrice ? serviceInfo.server_price : serviceInfo.team_buy.price }}</text>
|
||
<text class="salf-card-between-text2-f">3999</text>
|
||
</view>
|
||
<view class="border-b"></view>
|
||
|
||
</view>
|
||
|
||
</view>
|
||
<view class="conpon" @click="useconpon" v-if="selectCoupon">
|
||
<text class="conpon-l">平台优惠券</text>
|
||
<text class="conpon-r1">-</text>
|
||
<text class="conpon-r2">¥</text>
|
||
<text class="conpon-r3">300</text>
|
||
<image class="conpon-r4"
|
||
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/58b8f49b-41ef-4e92-8d7d-61ce136726ec.png"
|
||
mode="widthFix"></image>
|
||
</view>
|
||
<view class="conpon" @click="useconpon" v-if="!selectCoupon">
|
||
<text class="conpon-l">平台优惠券</text>
|
||
<text class="conpon-r1-no">暂不使用优惠券</text>
|
||
<image class="conpon-r4"
|
||
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/58b8f49b-41ef-4e92-8d7d-61ce136726ec.png"
|
||
mode="widthFix"></image>
|
||
</view>
|
||
|
||
</view>
|
||
<view class="pop-card" v-if="serviceType == 2">
|
||
<view class="serve-store">
|
||
<image :src="selectStore.head_photo" class="serve-store-img" mode="aspectFill"></image>
|
||
<view class="serve-store-right">
|
||
<text class="serve-store-right-name">{{ selectStore.name }}</text>
|
||
<view class="serve-store-right-num flex-row-center-between">
|
||
<view class="flex-row-center">
|
||
<text class="serve-store-right-num-text">营业时间:</text>
|
||
<text class="serve-store-right-num-text" style="color: #333333">{{
|
||
selectStore.business_time }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="serve-store-address flex-row-center">
|
||
<view class="serve-store-address-right">
|
||
<text class="serve-store-address-right-text">地址{{ selectStore.address }}</text>
|
||
<text class="serve-store-address-right-text">电话:{{ selectStore.account }}</text>
|
||
</view>
|
||
<view class="serve-store-address-left flex-row-center">
|
||
<image class="address-left-icon" src="/static/images/icons/adress.png"
|
||
@click="openMap(selectStore)"></image>
|
||
<image class="address-left-icon ml40" src="/static/images/icons/phone.png"
|
||
@click="contactService(selectStore.account)"></image>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="pop-card">
|
||
<text class="pop-card-title">选择支付方式</text>
|
||
<view class="method-list">
|
||
<view class="method-item flex-row-center-between"
|
||
:class="{ mb43: index != methodList.length - 1 }" v-for="(item, index) in methodList"
|
||
:key="index" @click="selectMethod(item)">
|
||
<view class="method-info flex-row-center">
|
||
<image :src="item.icon" mode="aspectFit" class="method-icon"></image>
|
||
<text class="method-name">{{ item.name }}</text>
|
||
</view>
|
||
<agree-radio :isAgree="item.selected" :yesImg="`/static/images/icons/yes_icon.png`"
|
||
:radioSize="`40rpx`" :noImg="`/static/images/icons/no_icon.png`"></agree-radio>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="pop-submit flex-row-center-between">
|
||
<view class="pop-submit-left">
|
||
<text class="pop-submit-left-text1">应付金额</text>
|
||
<text class="pop-submit-left-text2"><text style="font-size: 24rpx">¥</text>{{
|
||
isOriginalPrice ? serviceInfo.server_price : serviceInfo.team_buy.price }}</text>
|
||
</view>
|
||
<view class="pop-submit-btn flex-row-center-center">
|
||
<text class="pop-submit-btn-text" @click="submitOrder">立即支付</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</uv-popup>
|
||
<uv-popup round='40rpx' ref="popups" mode="bottom" @maskClick='closes'>
|
||
<text class="popups-title">平台优惠券</text>
|
||
<scroll-view scroll-y="true" class="popups-box">
|
||
<!-- 使用计算属性控制显示数量 -->
|
||
<view class="popups-card" v-for="item in displayCouponList" :key="item.id" @click="selectcoupon(item)">
|
||
<image class="popups-card-img"
|
||
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/ba6a1d6d-2fe9-45ce-8ee4-49895f7a2a68.png"
|
||
mode="widthFix"></image>
|
||
<view class="popups-card-list">
|
||
<view class="popups-card-list-t">
|
||
<text class="popups-card-list-t-price">{{ item.price }}</text>
|
||
<text class="popups-card-list-t-dw">元</text>
|
||
</view>
|
||
<view class="popups-card-list-b">
|
||
<text class="popups-card-list-b-can">{{ item.threshold }}</text>
|
||
</view>
|
||
</view>
|
||
<view class="popups-card-center">
|
||
<text class="popups-card-center-title">{{ item.title }}</text>
|
||
<text class="popups-card-center-content">{{ item.time }}</text>
|
||
</view>
|
||
<view class="popups-card-r-img">
|
||
<image class="popups-card-r-img-detail"
|
||
:src="selectedId === item.id ? item.selectedImg : item.normalImg" mode="widthFix"></image>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 展开/收起按钮 -->
|
||
<view class="popups-bottom" @click="toggleExpand">
|
||
<view class="popups-bottom-view">
|
||
<text class="popups-bottom-text">{{ isExpanded ? '收起全部' : '展开全部' }}</text>
|
||
</view>
|
||
<image class="popups-bottom-img"
|
||
:src="isExpanded ? 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/fe418cfb-99c5-43ca-8ffd-5c656fb1cd06.png' : 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/169e99f5-8181-43d9-b290-f0526690ff83.png'"
|
||
mode="widthFix"></image>
|
||
</view>
|
||
<view class="nouse" @click="nousecoupon()">
|
||
<text class="nouse-text">暂不使用优惠券</text>
|
||
<image class="nouse-img"
|
||
:src="selectnouse ? 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png' : 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png'"
|
||
mode="widthFix"></image>
|
||
</view>
|
||
<view class="zhanwei"></view>
|
||
<view class="pop-bot-confim">
|
||
<view class="confirm-button" @click="confim()">
|
||
<text class="confirm-button-text">确认</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
</uv-popup>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import request from "@/utils/request";
|
||
import _public from "@/utils/public";
|
||
import locationService from "@/utils/locationService";
|
||
import permissionUtils from "@/utils/per";
|
||
export default {
|
||
name: "AgreeRadio",
|
||
props: {
|
||
show: {
|
||
type: Boolean,
|
||
default: false,
|
||
},
|
||
serviceInfo: {
|
||
type: Object,
|
||
default: () => ({}),
|
||
},
|
||
serviceType: {
|
||
type: [String, Number],
|
||
default: 2,
|
||
},
|
||
isOriginalPrice: {
|
||
type: Boolean,
|
||
default: true,
|
||
},
|
||
},
|
||
computed: {
|
||
reservationAddress() {
|
||
return this.$store.state.reservationAddress;
|
||
},
|
||
reservationSyr() {
|
||
return this.$store.state.reservationSyr;
|
||
},
|
||
selectStore() {
|
||
return this.$store.state.selectStore;
|
||
},
|
||
reservationTime() {
|
||
return this.$store.state.reservationTime;
|
||
},
|
||
// 核心:控制优惠券显示数量(默认4条,展开显示全部)
|
||
displayCouponList() {
|
||
return this.isExpanded ? this.couponList : this.couponList.slice(0, 4);
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
isExpanded: false, // 展开/收起状态标识
|
||
selectedId: null,
|
||
couponList: [{
|
||
id: 1,
|
||
price: 10,
|
||
threshold: "满100可用",
|
||
title: "满减优惠券",
|
||
time: "2026-03-31到期",
|
||
selectedImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png",
|
||
normalImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png"
|
||
},
|
||
{
|
||
id: 2,
|
||
price: 20,
|
||
threshold: "满200可用",
|
||
title: "大额满减券",
|
||
time: "2026-04-30到期",
|
||
selectedImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png",
|
||
normalImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png"
|
||
},
|
||
{
|
||
id: 3,
|
||
price: 20,
|
||
threshold: "满200可用",
|
||
title: "大额满减券",
|
||
time: "2026-04-30到期",
|
||
selectedImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png",
|
||
normalImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png"
|
||
}, {
|
||
id: 4,
|
||
price: 20,
|
||
threshold: "满200可用",
|
||
title: "大额满减券",
|
||
time: "2026-04-30到期",
|
||
selectedImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png",
|
||
normalImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png"
|
||
},
|
||
{
|
||
id: 5,
|
||
price: 20,
|
||
threshold: "满200可用",
|
||
title: "大额满减券",
|
||
time: "2026-04-30到期",
|
||
selectedImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/dbbc70e5-5e96-46fc-9b1a-ffd825187975.png",
|
||
normalImg: "https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/bb950b95-5221-4d4e-abf1-4d3c830aa8f0.png"
|
||
},
|
||
],
|
||
selectCoupon: false,
|
||
popups: false,
|
||
isSubmit: false,
|
||
orderInfo: {
|
||
id: "",
|
||
pay_money: "",
|
||
number: "",
|
||
},
|
||
payType: false,
|
||
formData: {},
|
||
selectedPayment: "wechat",
|
||
methodList: [{
|
||
id: 1,
|
||
name: "微信",
|
||
payment: "wechat",
|
||
icon: "/static/images/wechat.png",
|
||
selected: true,
|
||
},
|
||
{
|
||
id: 2,
|
||
name: "支付宝",
|
||
payment: "alipay",
|
||
icon: "/static/images/alipay.png",
|
||
selected: false,
|
||
},
|
||
],
|
||
selectnouse: false
|
||
};
|
||
},
|
||
watch: {
|
||
show(newVal) {
|
||
if (newVal) {
|
||
this.open();
|
||
} else {
|
||
this.close();
|
||
}
|
||
},
|
||
},
|
||
methods: {
|
||
confim() {
|
||
this.$refs.popups.close();
|
||
},
|
||
nousecoupon() {
|
||
this.selectedId = null
|
||
this.selectnouse = false
|
||
this.selectnouse = true
|
||
this.selectCoupon = false
|
||
},
|
||
// 切换展开/收起状态
|
||
toggleExpand() {
|
||
this.isExpanded = !this.isExpanded;
|
||
},
|
||
selectcoupon(item) {
|
||
this.selectCoupon = true
|
||
this.selectnouse = false
|
||
this.selectedId = this.selectedId === item.id ? null : item.id;
|
||
if (this.selectedId) {
|
||
console.log("选中的优惠券:", item);
|
||
} else {
|
||
console.log("取消选中优惠券");
|
||
}
|
||
},
|
||
useconpon() {
|
||
console.log('123123123123123');
|
||
this.$refs.popups.open()
|
||
},
|
||
opens() { },
|
||
clearSubmit() {
|
||
this.isSubmit = false
|
||
},
|
||
selectMethod(item) {
|
||
this.selectedPayment = item.payment;
|
||
this.methodList.forEach((method) => {
|
||
method.selected = method.id === item.id;
|
||
});
|
||
},
|
||
open() {
|
||
this.$refs.popup.open();
|
||
},
|
||
close() {
|
||
this.$refs.popup.close();
|
||
},
|
||
change(e) {
|
||
this.$emit("change", e);
|
||
},
|
||
async submitOrder() {
|
||
if (this.isSubmit) return;
|
||
try {
|
||
uni.showLoading({
|
||
title: "提交中...",
|
||
});
|
||
let orderData = {};
|
||
if (this.serviceType == 2) {
|
||
orderData = {
|
||
server_id: this.serviceInfo.id,
|
||
order_kind: this.serviceType,
|
||
order_money: this.serviceInfo.server_price,
|
||
server_title: this.serviceInfo.title,
|
||
server_type_first_id: this.serviceInfo.first_class_id,
|
||
server_type_secod_id: this.serviceInfo.second_class_id,
|
||
order_type: 3,
|
||
};
|
||
} else if (this.serviceType == 1) {
|
||
orderData = {
|
||
server_id: this.serviceInfo.id,
|
||
order_money: this.serviceInfo.server_price,
|
||
reservation_time: `${this.reservationTime.selected_date} ${this.reservationTime.selected_time}:00`,
|
||
reservation_address_id: this.reservationAddress.id,
|
||
server_title: this.serviceInfo.title,
|
||
server_type_first_id: this.serviceInfo.first_class_id,
|
||
server_type_secod_id: this.serviceInfo.second_class_id,
|
||
order_type: 3,
|
||
};
|
||
|
||
if (this.reservationSyr.id_type == 1) {
|
||
orderData.order_kind = 1;
|
||
}
|
||
if (this.reservationSyr.id_type == 2) {
|
||
orderData.order_shopid_other = this.reservationSyr.id;
|
||
orderData.order_kind = 3;
|
||
}
|
||
}
|
||
if (!this.isOriginalPrice) {
|
||
orderData.team_buy_id = this.serviceInfo.team_buy.id
|
||
orderData.order_money = this.serviceInfo.team_buy.price
|
||
}
|
||
console.log("orderData", orderData);
|
||
this.isSubmit = true;
|
||
let res = await request.post("/user/creatorder", orderData);
|
||
console.log("creatorderres", res);
|
||
uni.hideLoading();
|
||
if (res.code == 200 || res.state == 1) {
|
||
this.orderInfo.id = res.data.id;
|
||
this.orderInfo.number = res.data.number;
|
||
this.orderInfo.pay_money = this.isOriginalPrice ? this.serviceInfo.server_price : this
|
||
.serviceInfo.team_buy.price;
|
||
console.log("orderInfo", this.orderInfo);
|
||
this.confirmPay();
|
||
} else {
|
||
uni.showToast({
|
||
title: res.msg || "提交失败",
|
||
icon: "none",
|
||
});
|
||
this.isSubmit = false;
|
||
}
|
||
} catch (error) {
|
||
uni.hideLoading();
|
||
uni.showToast({
|
||
title: "提交失败,请重试",
|
||
icon: "none",
|
||
});
|
||
console.error("提交订单失败:", error);
|
||
this.isSubmit = false;
|
||
}
|
||
},
|
||
async confirmPay() {
|
||
let that = this;
|
||
try {
|
||
uni.showLoading({
|
||
title: "支付中...",
|
||
});
|
||
console.log(that.selectedPayment);
|
||
switch (that.selectedPayment) {
|
||
case "wechat":
|
||
let wechatpayfor = await request.post(
|
||
"/user/wechatpayfor",
|
||
that.orderInfo
|
||
);
|
||
console.log("wechatpayfor", wechatpayfor);
|
||
if (wechatpayfor.code == 452) {
|
||
uni.showToast({
|
||
title: wechatpayfor.msg || "支付失败,请重试",
|
||
icon: "none",
|
||
duration: 2000,
|
||
});
|
||
this.cancelService();
|
||
return;
|
||
}
|
||
const systemInfo = uni.getSystemInfoSync();
|
||
if (systemInfo.platform === "ios") {
|
||
let appId = wechatpayfor.data.appid;
|
||
delete wechatpayfor.data.appid;
|
||
wechatpayfor.data["appId"] = appId;
|
||
console.log("wechatpayfor2", wechatpayfor);
|
||
}
|
||
console.log("================================");
|
||
uni.hideLoading();
|
||
uni.requestPayment({
|
||
provider: "wxpay",
|
||
orderInfo: wechatpayfor.data,
|
||
success: function (res) {
|
||
console.log("success:", res);
|
||
console.log(that.orderInfo.id, that.orderInfo.number);
|
||
that.isSubmit = false;
|
||
request
|
||
.post("/user/wechatsearchorder", {
|
||
id: that.orderInfo.id,
|
||
number: that.orderInfo.number,
|
||
})
|
||
.then((orderRes) => {
|
||
that.paySuccess();
|
||
})
|
||
.catch((err) => {
|
||
console.log("查询状态", err);
|
||
});
|
||
},
|
||
fail: function (err) {
|
||
that.isSubmit = false;
|
||
uni.showModal({
|
||
title: "提示",
|
||
content: "该订单未成功支付",
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
console.log("用户点击确定");
|
||
} else if (res.cancel) {
|
||
console.log("用户点击取消");
|
||
}
|
||
},
|
||
});
|
||
console.log("fail:", JSON.stringify(err));
|
||
},
|
||
});
|
||
break;
|
||
case "alipay":
|
||
let orderInfo = {
|
||
...that.orderInfo,
|
||
};
|
||
orderInfo.title = that.serviceInfo.title;
|
||
console.log("alipayorderInfo", orderInfo);
|
||
let alipayfor = await request.post("/user/alipayfor", orderInfo);
|
||
if (alipayfor.code == 452) {
|
||
uni.showToast({
|
||
title: alipayfor.msg || "支付失败,请重试",
|
||
icon: "none",
|
||
duration: 2000,
|
||
});
|
||
that.cancelService();
|
||
return;
|
||
}
|
||
console.log("alipayfor", alipayfor);
|
||
uni.hideLoading();
|
||
uni.requestPayment({
|
||
provider: "alipay",
|
||
orderInfo: alipayfor.data,
|
||
success: function (res) {
|
||
that.isSubmit = false;
|
||
console.log("success:", res);
|
||
console.log(
|
||
"id: ",
|
||
that.orderInfo.id,
|
||
"number: ",
|
||
that.orderInfo.number
|
||
);
|
||
console.log("ali支付成功了====================");
|
||
request
|
||
.post("/user/alisearchorder", {
|
||
id: that.orderInfo.id,
|
||
number: that.orderInfo.number,
|
||
})
|
||
.then((orderRes) => {
|
||
console.log("orderRes", orderRes, orderRes.trade_status);
|
||
that.paySuccess();
|
||
})
|
||
.catch((err) => {
|
||
console.log("ali报错了】】】】】】】】】】】】】】", err);
|
||
console.log("查询状态", err);
|
||
});
|
||
},
|
||
fail: function (err) {
|
||
that.isSubmit = false;
|
||
uni.showModal({
|
||
title: "提示",
|
||
content: "该订单未成功支付",
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
console.log("用户点击确定");
|
||
} else if (res.cancel) {
|
||
console.log("用户点击取消");
|
||
}
|
||
},
|
||
});
|
||
console.log("fail:", JSON.stringify(err));
|
||
},
|
||
});
|
||
break;
|
||
}
|
||
} catch (error) {
|
||
uni.hideLoading();
|
||
console.error("支付失败", error);
|
||
uni.showToast({
|
||
title: "支付失败,请重试",
|
||
icon: "none",
|
||
});
|
||
that.isSubmit = false;
|
||
}
|
||
},
|
||
async cancelService() {
|
||
this.isSubmit = false;
|
||
let id = "";
|
||
await request
|
||
.post("/user/getuser", {
|
||
type: 1,
|
||
})
|
||
.then((res) => {
|
||
console.log(res);
|
||
id = res.data.id;
|
||
});
|
||
let data = {
|
||
orderNo: this.orderInfo.number,
|
||
amount: this.orderInfo.pay_money,
|
||
cancel_state: 1,
|
||
cancel_id: id,
|
||
};
|
||
request
|
||
.post("/user/cancelorder", data)
|
||
.then((res) => {
|
||
console.log(22222, res);
|
||
})
|
||
.catch((err) => {
|
||
console.log(err);
|
||
})
|
||
.finally(() => {
|
||
setTimeout(() => {
|
||
uni.switchTab({
|
||
url: "/pages/order/userorder-list",
|
||
});
|
||
}, 2000);
|
||
});
|
||
},
|
||
paySuccess() {
|
||
uni.showToast({
|
||
title: "支付成功",
|
||
icon: "success",
|
||
});
|
||
setTimeout(() => {
|
||
uni.redirectTo({
|
||
url: `/pages/order/pay-success?orderId=${this.orderInfo.id}`,
|
||
});
|
||
}, 50);
|
||
this.isSubmit = true;
|
||
},
|
||
openMap(store) {
|
||
if (!store.latitude || !store.longitude) {
|
||
uni.showToast({
|
||
title: "该门店暂无定位信息",
|
||
icon: "none",
|
||
});
|
||
return;
|
||
}
|
||
|
||
// #ifdef MP-WEIXIN
|
||
uni.openLocation({
|
||
latitude: parseFloat(store.latitude),
|
||
longitude: parseFloat(store.longitude),
|
||
name: store.name,
|
||
address: store.address,
|
||
success: () => console.log("打开地图成功"),
|
||
fail: (err) => console.log("打开地图失败:", err),
|
||
});
|
||
// #endif
|
||
// #ifdef APP-PLUS
|
||
_public.goMap({
|
||
latitude: parseFloat(store.latitude),
|
||
longitude: parseFloat(store.longitude),
|
||
name: store.name,
|
||
address: store.address,
|
||
});
|
||
// #endif
|
||
},
|
||
async contactService(phone) {
|
||
if (!phone) {
|
||
uni.showToast({
|
||
title: "暂无联系电话",
|
||
icon: "none",
|
||
});
|
||
return;
|
||
}
|
||
|
||
const systemInfo = uni.getSystemInfoSync();
|
||
if (systemInfo.platform === "ios") {
|
||
uni.makePhoneCall({
|
||
phoneNumber: phone,
|
||
});
|
||
} else {
|
||
try {
|
||
const {
|
||
granted
|
||
} = await permissionUtils.checkPermission(
|
||
"phone",
|
||
"需要拨打电话权限,方便您联系商家"
|
||
);
|
||
if (granted) {
|
||
uni.makePhoneCall({
|
||
phoneNumber: phone,
|
||
});
|
||
return;
|
||
}
|
||
|
||
const confirm = await this.showPermissionDialog(
|
||
"拨打电话权限申请",
|
||
"我们需要获取拨打电话权限,以便您直接联系商家"
|
||
);
|
||
if (!confirm) return;
|
||
|
||
const result = await permissionUtils.requestPermission(
|
||
"phone",
|
||
"需要拨打电话权限,方便您联系商家"
|
||
);
|
||
if (result) {
|
||
uni.makePhoneCall({
|
||
phoneNumber: phone,
|
||
});
|
||
} else {
|
||
locationService.openAppSettings();
|
||
}
|
||
} catch (err) {
|
||
console.log("联系商家失败:", err);
|
||
uni.showToast({
|
||
title: "操作失败,请稍后重试",
|
||
icon: "none",
|
||
});
|
||
}
|
||
}
|
||
},
|
||
showPermissionDialog(title, content) {
|
||
return new Promise((resolve) => {
|
||
uni.showModal({
|
||
title,
|
||
content,
|
||
confirmText: "去设置",
|
||
cancelText: "取消",
|
||
success: (res) => resolve(res.confirm),
|
||
});
|
||
});
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="less">
|
||
.self-pay {
|
||
.salf-card {
|
||
width: 750rpx;
|
||
background: #f5f5f5;
|
||
border-radius: 30rpx 30rpx 0rpx 0rpx;
|
||
padding: 30rpx 20rpx 0rpx 20rpx;
|
||
box-sizing: border-box;
|
||
|
||
.syr-info-address {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
margin-bottom: 10rpx;
|
||
}
|
||
|
||
.syr-info-phone {
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #999999;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.salf-card-between {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
|
||
.salf-card-between-text1 {
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.salf-card-between-text2 {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.card-right-photo {
|
||
margin-right: 10rpx;
|
||
width: 60rpx;
|
||
height: 60rpx;
|
||
border-radius: 50%;
|
||
}
|
||
}
|
||
|
||
.serve-info {
|
||
display: flex;
|
||
flex-direction: row;
|
||
padding-bottom: 20rpx;
|
||
margin-bottom: 20rpx;
|
||
|
||
.serve-info-img {
|
||
width: 120rpx;
|
||
height: 120rpx;
|
||
border-radius: 30rpx;
|
||
}
|
||
|
||
.serve-info-right {
|
||
flex: 1;
|
||
margin-left: 13rpx;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
|
||
.serve-info-right-name {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.serve-info-right-num {
|
||
.serve-info-right-num-text1 {
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
color: #999999;
|
||
line-height: 37rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.serve-info-right-num-text2 {
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #333333;
|
||
line-height: 33rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.serve-store {
|
||
display: flex;
|
||
flex-direction: row;
|
||
padding-bottom: 20rpx;
|
||
border-bottom: 1rpx solid #f1f1f1;
|
||
margin-bottom: 20rpx;
|
||
|
||
.serve-store-img {
|
||
width: 90rpx;
|
||
height: 90rpx;
|
||
border-radius: 20rpx;
|
||
}
|
||
|
||
.serve-store-right {
|
||
flex: 1;
|
||
margin-left: 13rpx;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
|
||
.serve-store-right-name {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.serve-store-right-num {
|
||
.serve-store-right-num-text {
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #666666;
|
||
line-height: 33rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.serve-store-address {
|
||
.serve-store-address-right {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
|
||
.serve-store-address-right-text {
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #666666;
|
||
line-height: 33rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
width: 510rpx;
|
||
lines: 1;
|
||
text-overflow: ellipsis;
|
||
}
|
||
}
|
||
|
||
.serve-store-address-left {
|
||
.address-left-icon {
|
||
width: 43rpx;
|
||
height: 43rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
.pop-card {
|
||
background: #ffffff;
|
||
border-radius: 30rpx;
|
||
padding: 20rpx;
|
||
margin-bottom: 20rpx;
|
||
|
||
.pop-card-title {
|
||
margin-bottom: 30rpx;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 40rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
}
|
||
|
||
.pop-submit {
|
||
padding: 25rpx 25rpx 25rpx 45rpx;
|
||
margin: 0 -20rpx;
|
||
background: #fff;
|
||
|
||
.pop-submit-left {
|
||
display: flex;
|
||
flex-direction: column;
|
||
|
||
.pop-submit-left-text1 {
|
||
font-weight: 500;
|
||
font-size: 22rpx;
|
||
color: #333333;
|
||
line-height: 30rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.pop-submit-left-text2 {
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 52rpx;
|
||
color: #e8101e;
|
||
line-height: 67rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
}
|
||
|
||
.pop-submit-btn {
|
||
width: 226rpx;
|
||
height: 82rpx;
|
||
background: #e8101e;
|
||
border-radius: 41rpx;
|
||
|
||
.pop-submit-btn-text {
|
||
font-weight: 500;
|
||
font-size: 30rpx;
|
||
color: #ffffff;
|
||
line-height: 82rpx;
|
||
text-align: center;
|
||
font-style: normal;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.method-item {}
|
||
|
||
.method-info {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.method-icon {
|
||
width: 38rpx;
|
||
height: 38rpx;
|
||
margin-right: 20rpx;
|
||
}
|
||
|
||
.method-name {
|
||
font-weight: 500;
|
||
font-size: 30rpx;
|
||
color: #5b5b5b;
|
||
line-height: 42rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.mb-20 {
|
||
margin-bottom: 20rpx;
|
||
}
|
||
|
||
.mb43 {
|
||
margin-bottom: 43rpx;
|
||
}
|
||
|
||
.ml40 {
|
||
margin-left: 40rpx;
|
||
}
|
||
|
||
.flex-row-center-between {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.flex-row-center {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
}
|
||
|
||
.flex-row-center-center {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.salf-card-between-text2-o {
|
||
font-size: 22rpx;
|
||
height: 37rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
color: #333333;
|
||
line-height: 37rpx;
|
||
font-style: normal;
|
||
}
|
||
|
||
.salf-card-between-box {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
}
|
||
|
||
.salf-card-between-text2-t {
|
||
height: 28rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 22rpx;
|
||
color: #333333;
|
||
line-height: 28rpx;
|
||
font-style: normal;
|
||
margin-top: 5rpx;
|
||
}
|
||
|
||
.salf-card-between-text2-s {
|
||
height: 41rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 32rpx;
|
||
color: #333333;
|
||
line-height: 41rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
margin-top: -4rpx;
|
||
}
|
||
|
||
.salf-card-between-text2-f {
|
||
height: 36rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #999999;
|
||
line-height: 36rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
margin-left: 10rpx;
|
||
text-decoration: line-through;
|
||
}
|
||
|
||
.border-b {
|
||
width: 670rpx;
|
||
height: 1rpx;
|
||
background: #F1F1F1;
|
||
margin-top: 30rpx;
|
||
}
|
||
|
||
.conpon {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
margin-top: 33rpx;
|
||
}
|
||
|
||
.conpon-l {
|
||
height: 37rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
color: #333333;
|
||
line-height: 37rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.conpon-r1 {
|
||
width: 13rpx;
|
||
height: 38rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 30rpx;
|
||
color: #E8101E;
|
||
line-height: 38rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
margin-left: 410rpx;
|
||
margin-top: 6rpx;
|
||
}
|
||
|
||
.conpon-r2 {
|
||
margin-top: 6rpx;
|
||
height: 31rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 24rpx;
|
||
color: #E8101E;
|
||
line-height: 31rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.conpon-r3 {
|
||
height: 41rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 32rpx;
|
||
color: #E8101E;
|
||
line-height: 41rpx;
|
||
text-align: left;
|
||
font-style: normal;
|
||
}
|
||
|
||
.conpon-r4 {
|
||
width: 10rpx;
|
||
margin-top: 10rpx;
|
||
margin-left: 20rpx;
|
||
}
|
||
|
||
.conpon-r1-no {
|
||
height: 37rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
color: #333333;
|
||
line-height: 37rpx;
|
||
font-style: normal;
|
||
margin-left: 328rpx;
|
||
}
|
||
|
||
.popups-box {
|
||
width: 750rpx;
|
||
height: 1023rpx;
|
||
background: #FFFFFF;
|
||
border-radius: 40rpx 40rpx 0rpx 0rpx;
|
||
|
||
|
||
}
|
||
|
||
.popups-title {
|
||
width: 750rpx;
|
||
height: 100rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 500;
|
||
font-size: 36rpx;
|
||
color: #333333;
|
||
line-height: 50rpx;
|
||
font-style: normal;
|
||
padding-left: 285rpx;
|
||
padding-top: 30rpx;
|
||
}
|
||
|
||
.popups-card {
|
||
width: 690rpx;
|
||
height: 167rpx;
|
||
margin: 30rpx 30rpx 0 30rpx;
|
||
position: relative;
|
||
}
|
||
|
||
.popups-card-img {
|
||
position: absolute;
|
||
width: 690rpx;
|
||
}
|
||
|
||
.popups-card-list {
|
||
width: 690rpx;
|
||
height: 167rpx;
|
||
}
|
||
|
||
.popups-card-list-t {
|
||
display: flex;
|
||
flex-direction: row;
|
||
position: absolute;
|
||
top: 10rpx;
|
||
left: 37rpx;
|
||
}
|
||
|
||
.popups-card-list-t-price {
|
||
height: 69rpx;
|
||
font-family: DINPro, DINPro;
|
||
font-weight: 500;
|
||
font-size: 54rpx;
|
||
color: #FF3340;
|
||
font-style: normal;
|
||
margin-top: 12rpx;
|
||
}
|
||
|
||
.popups-card-list-t-dw {
|
||
height: 33rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 500;
|
||
font-size: 24rpx;
|
||
color: #FF3340;
|
||
line-height: 33rpx;
|
||
font-style: normal;
|
||
margin-top: 41rpx;
|
||
}
|
||
|
||
.popups-card-list-b {
|
||
height: 33rpx;
|
||
display: flex;
|
||
flex-direction: row;
|
||
margin-top: 99rpx;
|
||
}
|
||
|
||
.popups-card-list-b-can {
|
||
color: #FF3340;
|
||
height: 33rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
line-height: 33rpx;
|
||
font-style: normal;
|
||
position: absolute;
|
||
margin-left: 20rpx;
|
||
}
|
||
|
||
.popups-card-center {
|
||
position: absolute;
|
||
margin: 40rpx 0 0 199rpx;
|
||
}
|
||
|
||
.popups-card-center-title {
|
||
height: 42rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 500;
|
||
font-size: 30rpx;
|
||
color: #333333;
|
||
line-height: 42rpx;
|
||
font-style: normal;
|
||
}
|
||
|
||
.popups-card-center-content {
|
||
height: 33rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #777777;
|
||
line-height: 33rpx;
|
||
font-style: normal;
|
||
margin-top: 12rpx;
|
||
}
|
||
|
||
.popups-card-r-img {
|
||
position: absolute;
|
||
margin: 64rpx 0 0 620rpx;
|
||
}
|
||
|
||
.popups-card-r-img-detail {
|
||
width: 40rpx;
|
||
}
|
||
|
||
.popups-bottom {
|
||
display: flex;
|
||
flex-direction: row;
|
||
margin: 20rpx 0 0 295rpx;
|
||
}
|
||
|
||
.popups-bottom-view {
|
||
width: 161rpx;
|
||
height: 57rpx;
|
||
border-radius: 29rpx;
|
||
border: 2rpx solid #D6D6D6;
|
||
}
|
||
|
||
.popups-bottom-text {
|
||
height: 33rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #3F3B3A;
|
||
line-height: 33rpx;
|
||
font-style: normal;
|
||
margin: 12rpx 0 0 20rpx;
|
||
}
|
||
|
||
.popups-bottom-img {
|
||
width: 15rpx;
|
||
margin: 24rpx 0 0 -40rpx;
|
||
}
|
||
|
||
.zhanwei {
|
||
height: 200rpx;
|
||
}
|
||
|
||
.confirm-button {
|
||
width: 690rpx;
|
||
height: 98rpx;
|
||
background: #E8101E;
|
||
border-radius: 49rpx;
|
||
margin: 24rpx 0 0 30rpx;
|
||
}
|
||
|
||
.pop-bot-confim {
|
||
width: 750rpx;
|
||
height: 183rpx;
|
||
margin-top: 40rpx;
|
||
position: fixed;
|
||
bottom: 0rpx;
|
||
background-color: white;
|
||
}
|
||
|
||
.confirm-button-text {
|
||
height: 45rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 32rpx;
|
||
color: #FFFFFF;
|
||
line-height: 45rpx;
|
||
font-style: normal;
|
||
margin: 27rpx 0 0 313rpx;
|
||
}
|
||
|
||
.nouse {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
margin-top: 30rpx;
|
||
}
|
||
|
||
.nouse-text {
|
||
height: 42rpx;
|
||
font-family: PingFangSC, PingFang SC;
|
||
font-weight: 400;
|
||
font-size: 30rpx;
|
||
color: #333333;
|
||
line-height: 42rpx;
|
||
font-style: normal;
|
||
margin-left: 30rpx;
|
||
}
|
||
|
||
.nouse-img {
|
||
width: 40rpx;
|
||
margin-right: 60rpx;
|
||
}
|
||
</style> |