Commit e743c4af authored by spc's avatar spc

fixed

parent 3add8d9d
...@@ -280,15 +280,7 @@ const formItems = ref([ ...@@ -280,15 +280,7 @@ const formItems = ref([
range: babyGenderMap.map((i) => i.label), range: babyGenderMap.map((i) => i.label),
mode: "custom", mode: "custom",
}, },
{ { label: "喂养方式", name: "feedingType", required: true, placeholder: "未选择", type: "picker", range: ["奶粉喂养", "母乳喂养", "母乳奶粉混合喂养"], mode: "custom", },
label: "喂养方式",
name: "feedingType",
required: false,
placeholder: "未选择",
type: "picker",
range: ["奶粉喂养", "母乳喂养", "母乳奶粉混合喂养"],
mode: "custom",
},
{ {
label: "孕周", label: "孕周",
name: "gestationalWeeks", name: "gestationalWeeks",
...@@ -543,7 +535,7 @@ const checkAndUpdateTaskResult = async () => { ...@@ -543,7 +535,7 @@ const checkAndUpdateTaskResult = async () => {
await integralStore.queryTodoResultServer(); await integralStore.queryTodoResultServer();
console.log('queryTodoResult:', integralStore.queryTodoResult); console.log('queryTodoResult:', integralStore.queryTodoResult);
if(integralStore.queryTodoResult?.success && integralStore.queryTodoResult?.data?.length > 0) { if (integralStore.queryTodoResult?.success && integralStore.queryTodoResult?.data?.length > 0) {
globalStore.isShowTaskComplete = true; globalStore.isShowTaskComplete = true;
globalStore.taskCompletePoints = integralStore.queryTodoResult.data[0]?.actualCredits; globalStore.taskCompletePoints = integralStore.queryTodoResult.data[0]?.actualCredits;
globalStore.taskCompleteTitle = integralStore.queryTodoResult.data[0]?.taskName; globalStore.taskCompleteTitle = integralStore.queryTodoResult.data[0]?.taskName;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<view class="form-item"> <view class="form-item">
<text class="label">收货人</text> <text class="label">收货人</text>
<input class="input" v-model="formData.name" placeholder="请输入收货人姓名" maxlength="30" <input class="input" v-model="formData.name" placeholder="请输入收货人姓名" maxlength="30"
@input="limitNameInput" /> @input="limitNameInput" placeholder-style="color: #BFBFBF;" />
<view class="wechat-import" @tap="importFromWechat"> <view class="wechat-import" @tap="importFromWechat">
<image class="wechat-icon" :src="$baseUrl + 'homepage/Q3Res/wechatIcon.png'" mode="aspectFit"> <image class="wechat-icon" :src="$baseUrl + 'homepage/Q3Res/wechatIcon.png'" mode="aspectFit">
</image> </image>
...@@ -14,14 +14,15 @@ ...@@ -14,14 +14,15 @@
<view class="form-item"> <view class="form-item">
<text class="label">手机号码</text> <text class="label">手机号码</text>
<input class="input" :class="{ 'error': phoneError }" v-model="formData.phone" placeholder="请输入手机号码" <input class="input" :class="{ 'error': phoneError }" v-model="formData.phone" placeholder="请输入手机号码"
type="number" maxlength="11" @input="validatePhone" /> type="number" maxlength="11" @input="validatePhone" placeholder-style="color: #BFBFBF;" />
<text v-if="phoneError" class="error-text">请输入正确的手机号码</text> <text v-if="phoneError" class="error-text">请输入正确的手机号码</text>
</view> </view>
<view class="form-item"> <view class="form-item">
<text class="label">所在地区</text> <text class="label">所在地区</text>
<view class="region-select" @tap="showRegionPicker"> <view class="region-select" @tap="showRegionPicker">
<text class="region-text">{{ formData.region || '请选择省/市/区' }}</text> <text class="region-text" :class="{ 'placeholder-color': !formData.region }">{{ formData.region ||
'请选择省/市/区' }}</text>
<image class="arrow" :src="$baseUrl + 'homepage/Q3Res/rightArrowBtn.png'" mode="aspectFit" /> <image class="arrow" :src="$baseUrl + 'homepage/Q3Res/rightArrowBtn.png'" mode="aspectFit" />
</view> </view>
</view> </view>
...@@ -29,20 +30,20 @@ ...@@ -29,20 +30,20 @@
<view class="form-item"> <view class="form-item">
<text class="label">详细地址</text> <text class="label">详细地址</text>
<input class="textarea" v-model="formData.detailAddress" placeholder="请填写详细地址" maxlength="100" <input class="textarea" v-model="formData.detailAddress" placeholder="请填写详细地址" maxlength="100"
@input="limitDetailAddress" /> @input="limitDetailAddress" placeholder-style="color: #BFBFBF;" />
<text class="char-count">{{ formData.detailAddress.length }}/100</text> <text class="char-count">{{ formData.detailAddress.length }}/100</text>
</view> </view>
<view class="form-item"> <view class="form-item">
<text class="label">门牌号</text> <text class="label">门牌号</text>
<input class="input" v-model="formData.houseNumber" placeholder="街道、门牌号等" maxlength="50" <input class="input" v-model="formData.houseNumber" placeholder="街道、门牌号等" maxlength="50"
@input="limitHouseNumber" /> @input="limitHouseNumber" placeholder-style="color: #BFBFBF;" />
<text class="char-count">{{ formData.houseNumber.length }}/50</text> <text class="char-count">{{ formData.houseNumber.length }}/50</text>
</view> </view>
<view class="default-switch" @tap="toggleDefault"> <view class="default-switch">
<text class="switch-text">设为默认地址</text> <text class="switch-text">设为默认地址</text>
<view class="switch" :class="{ 'active': formData.isDefault }"> <view class="switch" @tap="toggleDefault" :class="{ 'active': formData.isDefault }">
<view class="switch-dot" :class="{ 'active': formData.isDefault }"></view> <view class="switch-dot" :class="{ 'active': formData.isDefault }"></view>
</view> </view>
</view> </view>
...@@ -356,13 +357,13 @@ export default { ...@@ -356,13 +357,13 @@ export default {
isItemSelected(item, index) { isItemSelected(item, index) {
switch (this.currentLevel) { switch (this.currentLevel) {
case 0: case 0:
return this.selectedProvince && this.selectedProvince.id === item.code; return this.selectedProvince && this.selectedProvince.code === item.code;
case 1: case 1:
return this.selectedCity && this.selectedCity.id === item.code; return this.selectedCity && this.selectedCity.code === item.code;
case 2: case 2:
return this.selectedDistrict && this.selectedDistrict.id === item.code; return this.selectedDistrict && this.selectedDistrict.code === item.code;
case 3: case 3:
return this.selectedStreet && this.selectedStreet.id === item.code; return this.selectedStreet && this.selectedStreet.code === item.code;
default: default:
return false; return false;
} }
...@@ -398,9 +399,9 @@ export default { ...@@ -398,9 +399,9 @@ export default {
this.districts = []; this.districts = [];
this.streets = []; this.streets = [];
// 更新picker值并加载城市 // 更新picker值并加载城市,使用code而不是id
this.pickerValue = [provinceIndex, 0, 0, 0]; this.pickerValue = [provinceIndex, 0, 0, 0];
await this.loadCities(this.selectedProvince.id); await this.loadCities(this.selectedProvince.code);
} }
// 城市变化 // 城市变化
...@@ -412,9 +413,9 @@ export default { ...@@ -412,9 +413,9 @@ export default {
this.districts = []; this.districts = [];
this.streets = []; this.streets = [];
// 更新picker值并加载区县 // 更新picker值并加载区县,使用code而不是id
this.pickerValue = [provinceIndex, cityIndex, 0, 0]; this.pickerValue = [provinceIndex, cityIndex, 0, 0];
await this.loadDistricts(this.selectedCity.id); await this.loadDistricts(this.selectedCity.code);
} }
// 区县变化 // 区县变化
...@@ -424,9 +425,9 @@ export default { ...@@ -424,9 +425,9 @@ export default {
this.selectedStreet = null; this.selectedStreet = null;
this.streets = []; this.streets = [];
// 更新picker值并加载街道 // 更新picker值并加载街道,使用code而不是id
this.pickerValue = [provinceIndex, cityIndex, districtIndex, 0]; this.pickerValue = [provinceIndex, cityIndex, districtIndex, 0];
await this.loadStreets(this.selectedDistrict.id); await this.loadStreets(this.selectedDistrict.code);
} }
// 街道变化 // 街道变化
...@@ -682,7 +683,7 @@ export default { ...@@ -682,7 +683,7 @@ export default {
uni.showToast({ uni.showToast({
title: '已设为默认地址', title: '已设为默认地址',
icon: 'success' icon: 'none'
}); });
} catch (error) { } catch (error) {
console.error('设置默认地址失败:', error); console.error('设置默认地址失败:', error);
...@@ -946,17 +947,14 @@ export default { ...@@ -946,17 +947,14 @@ export default {
<style scoped> <style scoped>
.address-edit-container { .address-edit-container {
padding-bottom: 200rpx; background: var(--B10, #FAFAFA);
/* background-color: #F8F8F8; */ top: 0;
min-height: 100vh; height: 100vh;
} }
.form-container { .form-container {
padding: 10rpx; background: var(--B10, #FAFAFA);
/* background-color: #FFFFFF; */
border-radius: 20rpx;
margin: 20rpx;
overflow: hidden; overflow: hidden;
} }
...@@ -975,34 +973,42 @@ export default { ...@@ -975,34 +973,42 @@ export default {
font-size: 24rpx; font-size: 24rpx;
color: #999999; color: #999999;
margin-left: 20rpx; margin-left: 20rpx;
margin-right: 40rpx;
} }
.form-item { .form-item {
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 0; margin-bottom: 0;
padding: 20rpx; padding: 0 20rpx;
height: 104rpx;
border-bottom: 1rpx solid #f0f0f0; border-bottom: 1rpx solid #f0f0f0;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
.label { .label {
font-size: 30rpx; font-size: 26rpx;
color: #333333; color: #000;
width: 120rpx; width: 120rpx;
flex-shrink: 0; flex-shrink: 0;
margin-right: 20rpx; margin-left: 54rpx;
margin-right: 80rpx;
font-weight: 400;
} }
.input { .input {
flex: 1; flex: 1;
font-size: 30rpx; font-size: 24rpx;
color: #000;
padding: 0; padding: 0;
border: none; border: none;
outline: none; outline: none;
} }
/* 占位符样式已通过placeholder-style属性设置 */
.wechat-import { .wechat-import {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -1019,7 +1025,7 @@ export default { ...@@ -1019,7 +1025,7 @@ export default {
.textarea { .textarea {
flex: 1; flex: 1;
font-size: 30rpx; font-size: 24rpx;
min-height: 80rpx; min-height: 80rpx;
padding: 0; padding: 0;
resize: none; resize: none;
...@@ -1039,28 +1045,35 @@ export default { ...@@ -1039,28 +1045,35 @@ export default {
} }
.region-text { .region-text {
font-size: 30rpx; font-size: 24rpx;
color: #999999; color: #000;
}
.region-text.placeholder-color {
color: #BFBFBF;
} }
.arrow { .arrow {
width: 14rpx; width: 14rpx;
height: 23rpx; height: 23rpx;
margin-right: 40rpx;
} }
.default-switch { .default-switch {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 20rpx; padding: 0 20rpx;
height: 104rpx;
border-bottom: 1rpx solid #f0f0f0; border-bottom: 1rpx solid #f0f0f0;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
.switch-text { .switch-text {
font-size: 30rpx; font-size: 26rpx;
color: #333333; color: #000;
margin-left: 54rpx;
} }
.switch { .switch {
...@@ -1069,6 +1082,7 @@ export default { ...@@ -1069,6 +1082,7 @@ export default {
background-color: #E5E5E5; background-color: #E5E5E5;
border-radius: 48rpx; border-radius: 48rpx;
position: relative; position: relative;
margin-right: 40rpx;
transition: background-color 0.3s ease; transition: background-color 0.3s ease;
} }
......
...@@ -190,7 +190,7 @@ export default { ...@@ -190,7 +190,7 @@ export default {
if (this.isSubmitting) return; if (this.isSubmitting) return;
// 检查地址数量限制 // 检查地址数量限制
if (this.addressList.length >= 21) { if (this.addressList.length >= 20) {
uni.showToast({ uni.showToast({
title: '地址添加已经达到上限啦~', title: '地址添加已经达到上限啦~',
icon: 'none', icon: 'none',
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
<text class="quantity-label">选择数量 <text class="limit-text" v-if="goodsData.goodsLimit">(限购{{ <text class="quantity-label">选择数量 <text class="limit-text" v-if="goodsData.goodsLimit">(限购{{
goodsData.goodsLimit }}件)</text></text> goodsData.goodsLimit }}件)</text></text>
<view class="quantity-selector"> <view class="quantity-selector">
<image class="quantity-bg" :src="$baseUrl + 'homepage/Q3Res/objectSelectConBg.png'" <image class="quantity-bg" :src="$baseUrl + 'homepage/Q3Res/objectSelectConBg2.png'"
mode="aspectFill"></image> mode="aspectFill"></image>
<view class="quantity-btn " @click="decreaseQuantity" :disabled="quantity <= 1">-</view> <view class="quantity-btn " @click="decreaseQuantity" :disabled="quantity <= 1">-</view>
<text class="quantity-value">{{ quantity }}</text> <text class="quantity-value">{{ quantity }}</text>
...@@ -602,13 +602,13 @@ export default { ...@@ -602,13 +602,13 @@ export default {
// 富文本格式化处理函数 // 富文本格式化处理函数
formatRichText(html) { formatRichText(html) {
let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) { let newContent = html.replace(/<img[^>]*>/gi, function (match, capture) {
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, ''); match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, ''); match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, ''); match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match; return match;
}); });
newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) { newContent = newContent.replace(/style="[^"]+"/gi, function (match, capture) {
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;'); match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
return match; return match;
}); });
...@@ -841,16 +841,19 @@ export default { ...@@ -841,16 +841,19 @@ export default {
break; break;
case 'canExchange': case 'canExchange':
default: default:
message = '可以兑换'; // message = '可以兑换';
break; break;
} }
} }
if (message) {
uni.showToast({ uni.showToast({
title: message, title: message,
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
}); });
}
}, },
// 关闭规格选择弹窗 // 关闭规格选择弹窗
...@@ -1493,8 +1496,8 @@ page { ...@@ -1493,8 +1496,8 @@ page {
} }
.service-icon { .service-icon {
width: 60rpx; width: 96rpx;
height: 60rpx; height: 96rpx;
} }
.exchange-btn { .exchange-btn {
...@@ -1713,7 +1716,7 @@ page { ...@@ -1713,7 +1716,7 @@ page {
font-size: 40rpx; font-size: 40rpx;
font-weight: bold; font-weight: bold;
display: flex; display: flex;
align-items: center; /* align-items: center; */
justify-content: center; justify-content: center;
z-index: 2; z-index: 2;
border-right: none; border-right: none;
......
...@@ -83,10 +83,7 @@ export default { ...@@ -83,10 +83,7 @@ export default {
doTerminate().then(res => { doTerminate().then(res => {
uni.hideLoading(); uni.hideLoading();
if (res.ok) { if (res.ok) {
uni.showToast({
title: '注销申请已提交',
icon: 'success'
});
// 可以跳转到登录页面或首页 // 可以跳转到登录页面或首页
setTimeout(() => { setTimeout(() => {
uni.reLaunch({ uni.reLaunch({
......
...@@ -26,18 +26,26 @@ ...@@ -26,18 +26,26 @@
</view> </view>
</view> </view>
</view> </view>
<text class="address-arrow">{{ ">" }}</text> <!-- <view class="arrow-icon">
<image :src="$baseUrl + 'homepage/Q3Res/rightArrowBtn.png'" mode="aspectFill"></image>
</view> -->
</view> </view>
<!-- 模块1: 商品信息和券码 --> <!-- 模块1: 商品信息和券码 -->
<view class="module-product-info"> <view class="module-product-info">
<view class="product-detail"> <view class="product-detail">
<view class="product-image"> <view class="product-image">
<!-- 优先使用后端返回的goodsImage -->
<image v-if="orderData.goodsImage && orderData.goodsImage.length > 0" <image v-if="orderData.goodsImage && orderData.goodsImage.length > 0"
:src="orderData.goodsImage[0]" mode="aspectFill" class="product-img" /> :src="orderData.goodsImage[0]" mode="aspectFill" class="product-img" />
<!-- 使用goodsIcon作为备选图片源 -->
<image v-else-if="orderData.goodsIcon" :src="orderData.goodsIcon" mode="aspectFill"
class="product-img" />
<!-- 其次使用二维码图片(针对虚拟商品) -->
<image <image
v-else-if="orderData.productType === 'virtual' && orderData.coupon && orderData.coupon.qrImage" v-else-if="orderData.productType === 'virtual' && orderData.coupon && orderData.coupon.qrImage"
:src="orderData.coupon.qrImage" mode="aspectFill" class="product-img" /> :src="orderData.coupon.qrImage" mode="aspectFill" class="product-img" />
<!-- 最后显示占位文本 -->
<text v-else class="image-placeholder">{{ orderData.productType === 'virtual' ? '优惠券' : '商品' <text v-else class="image-placeholder">{{ orderData.productType === 'virtual' ? '优惠券' : '商品'
}}</text> }}</text>
</view> </view>
...@@ -58,28 +66,30 @@ ...@@ -58,28 +66,30 @@
<view <view
v-if="orderData.virtualType === 'card' && orderData.coupon && orderData.coupon.cards && orderData.coupon.cards.length > 0 && orderData.coupon.cards[0].code" v-if="orderData.virtualType === 'card' && orderData.coupon && orderData.coupon.cards && orderData.coupon.cards.length > 0 && orderData.coupon.cards[0].code"
class="coupon-code-item"> class="coupon-code-item">
<!-- 当只有code没有pwd时显示券码,否则显示卡号 --> <!-- 当只有code没有pwd时显示券码,否则显示卡号 - label和value在同一行 -->
<div class="coupon-field">
<text class="coupon-label">{{ orderData.coupon.cards[0].pwd ? '卡号' : '券码' }}</text> <text class="coupon-label">{{ orderData.coupon.cards[0].pwd ? '卡号' : '券码' }}</text>
<view class="coupon-code-content"> <div class="coupon-code-content">
<text class="coupon-code">{{ orderData.coupon.cards[0].code }}</text> <text class="coupon-code">{{ orderData.coupon.cards[0].code }}</text>
<text class="copy-btn" @click="copyCouponCode(orderData.coupon.cards[0].code)">复制</text> <text class="copy-btn" @click="copyCouponCode(orderData.coupon.cards[0].code)">复制</text>
</view> </div>
</div>
<!-- 卡密展示 - 如果存在pwd字段,换行显示 --> <!-- 卡密展示 - 如果存在pwd字段,在独立行中显示 -->
<view v-if="orderData.coupon.cards[0].pwd" class="pwd-section"> <div v-if="orderData.coupon.cards[0].pwd" class="coupon-field">
<text class="coupon-label">卡密</text> <text class="coupon-label">卡密</text>
<view class="coupon-code-content"> <div class="coupon-code-content">
<text class="coupon-code">{{ orderData.coupon.cards[0].pwd }}</text> <text class="coupon-code">{{ orderData.coupon.cards[0].pwd }}</text>
<text class="copy-btn" @click="copyCouponCode(orderData.coupon.cards[0].pwd)">复制</text> <text class="copy-btn" @click="copyCouponCode(orderData.coupon.cards[0].pwd)">复制</text>
</view> </div>
</view> </div>
</view> </view>
<!-- 过期时间 --> <!-- 过期时间 -->
<view v-if="orderData.expireTime" class="expire-time-item"> <div v-if="orderData.expireTime" class="coupon-field">
<text class="coupon-label">{{ orderData.virtualType === 'coupon' ? '优惠券时间' : '过期时间' }}</text> <text class="coupon-label">{{ orderData.virtualType === 'coupon' ? '优惠券时间' : '过期时间' }}</text>
<text class="expire-time">{{ orderData.expireTime }}</text> <text class="expire-time">{{ orderData.expireTime }}</text>
</view> </div>
</view> </view>
</view> </view>
...@@ -141,27 +151,36 @@ ...@@ -141,27 +151,36 @@
<!-- 物流信息 - 仅实物商品且已发货/已完成时显示 --> <!-- 物流信息 - 仅实物商品且已发货/已完成时显示 -->
<view <view
v-if="orderData.productType === 'physical' && (orderData.status === 'shipped' || orderData.status === 'completed' || orderData.status === '已发货' || orderData.status === '已完成')" v-if="orderData.productType === 'physical' && (orderData.status === 'shipped' || orderData.status === 'completed' || orderData.status === '已发货' || orderData.status === '已完成') && orderData.logisticsList && orderData.logisticsList.length > 0"
class="module-logistics" @click="viewLogistics"> class="module-logistics">
<view class="logistics-content"> <view v-for="(logistics, index) in orderData.logisticsList" :key="index" class="logistics-content"
@click="viewLogistics(index)">
<!-- 显示包裹序号 -->
<view v-if="orderData.logisticsList.length > 1" class="package-number">
<text>包裹 {{ index + 1 }}</text>
</view>
<view class="logistics-row"> <view class="logistics-row">
<text class="logistics-label">物流公司</text> <text class="logistics-label">物流公司</text>
<text class="logistics-value">{{ orderData.logisticsCompany }}</text> <text class="logistics-value">{{ logistics.company }}</text>
</view> </view>
<view class="logistics-row"> <view class="logistics-row">
<text class="logistics-label">物流单号</text> <text class="logistics-label">物流单号</text>
<view class="logistics-right"> <view class="logistics-right">
<text class="logistics-value">{{ orderData.trackingNumber }}</text> <text class="logistics-value">{{ logistics.trackingNumber }}</text>
<text class="copy-btn" @click.stop="copyTrackingNumber">复制</text> <text class="copy-btn" @click.stop="copyTrackingNumber(logistics.trackingNumber)">复制</text>
</view> </view>
</view> </view>
<text class="arrow-icon">{{ ">" }}</text> <view class="arrow-icon">
<image class="arrow-image" :src="$baseUrl + 'homepage/Q3Res/rightArrowBtn.png'"
mode="aspectFill"></image>
</view>
</view> </view>
</view> </view>
<!-- 操作按钮 - 实物订单退货按钮在右下角 --> <!-- 操作按钮 - 实物订单退货按钮在右下角 -->
<view v-if="showActionButton" class="action-container"> <view v-if="showActionButton" class="action-container">
<view v-if="orderData.productType === 'virtual' && orderData.virtualType === 'coupon'" class="action-btn btn-use" @click="handleAction"> <view v-if="orderData.productType === 'virtual' && orderData.virtualType === 'coupon'"
class="action-btn btn-use" @click="handleAction">
<image :src="$baseUrl + 'homepage/Q3Res/orderDetailToUseBtn.png'" mode="aspectFill"></image> <image :src="$baseUrl + 'homepage/Q3Res/orderDetailToUseBtn.png'" mode="aspectFill"></image>
</view> </view>
<button v-else class="action-btn" :class="{ <button v-else class="action-btn" :class="{
...@@ -216,6 +235,7 @@ export default { ...@@ -216,6 +235,7 @@ export default {
return { return {
// 订单数据 // 订单数据
orderData: { orderData: {
logisticsList: [],
productType: '', // 'physical' | 'virtual' productType: '', // 'physical' | 'virtual'
virtualType: '', // 'coupon' | 'card' - 区分优选券和异业卡券 virtualType: '', // 'coupon' | 'card' - 区分优选券和异业卡券
status: '', // 实物: '等待商家发货' | '已发货' | '已完成' | 虚拟: '交易成功' | '交易关闭' status: '', // 实物: '等待商家发货' | '已发货' | '已完成' | 虚拟: '交易成功' | '交易关闭'
...@@ -527,10 +547,38 @@ export default { ...@@ -527,10 +547,38 @@ export default {
this.orderData.actualPayment = `${creditsValue}${creditsType}`; this.orderData.actualPayment = `${creditsValue}${creditsType}`;
// 设置物流信息(仅实物商品) // 设置物流信息(仅实物商品)
if (this.orderData.productType === 'physical' && this.orderData.express && Object.keys(this.orderData.express).length > 0) { if (this.orderData.productType === 'physical') {
this.orderData.logisticsCompany = this.orderData.express.company || ''; // 处理多物流信息
// 优先从trackingNumber获取,如果不存在则尝试从order_no获取 if (this.orderData.express && Object.keys(this.orderData.express).length > 0) {
this.orderData.trackingNumber = this.orderData.express.trackingNumber || this.orderData.express.order_no || ''; // 检查是否有多个物流信息
if (this.orderData.express.logisticsList && Array.isArray(this.orderData.express.logisticsList) && this.orderData.express.logisticsList.length > 0) {
// 有多物流列表
this.orderData.logisticsList = this.orderData.express.logisticsList.map(item => ({
company: item.company || '',
trackingNumber: item.trackingNumber || item.order_no || ''
}));
} else if (this.orderData.express.trackingNumber || this.orderData.express.order_no) {
// 只有单个物流信息
this.orderData.logisticsList = [{
company: this.orderData.express.company || '',
trackingNumber: this.orderData.express.trackingNumber || this.orderData.express.order_no || ''
}];
} else {
// 兼容旧数据格式或逗号分隔的物流信息
const companies = (this.orderData.logisticsCompany || '').split(',');
const trackingNumbers = (this.orderData.express.trackingNumber || this.orderData.express.order_no || this.orderData.trackingNumber || '').split(',');
this.orderData.logisticsList = [];
for (let i = 0; i < Math.max(companies.length, trackingNumbers.length); i++) {
this.orderData.logisticsList.push({
company: companies[i] || companies[0] || '',
trackingNumber: trackingNumbers[i] || ''
});
}
}
} else {
this.orderData.logisticsList = [];
}
} }
// 设置有效期和使用说明(非实物商品) // 设置有效期和使用说明(非实物商品)
...@@ -612,7 +660,7 @@ export default { ...@@ -612,7 +660,7 @@ export default {
success: () => { success: () => {
uni.showToast({ uni.showToast({
title: '订单编号已复制', title: '订单编号已复制',
icon: 'success' icon: 'none'
}); });
} }
}); });
...@@ -627,13 +675,13 @@ export default { ...@@ -627,13 +675,13 @@ export default {
}, },
// 复制物流单号 // 复制物流单号
copyTrackingNumber() { copyTrackingNumber(trackingNumber) {
uni.setClipboardData({ uni.setClipboardData({
data: this.orderData.trackingNumber, data: trackingNumber,
success: () => { success: () => {
uni.showToast({ uni.showToast({
title: '物流单号已复制', title: '物流单号已复制',
icon: 'success' icon: 'none'
}); });
} }
}); });
...@@ -646,17 +694,18 @@ export default { ...@@ -646,17 +694,18 @@ export default {
success: () => { success: () => {
uni.showToast({ uni.showToast({
title: '券码已复制', title: '券码已复制',
icon: 'success' icon: 'none'
}); });
} }
}); });
}, },
// 查看物流详情 // 查看物流详情
viewLogistics() { viewLogistics(index) {
// 跳转到物流页面并传递订单ID const logistics = this.orderData.logisticsList[index];
// 跳转到物流页面并传递订单ID和物流信息
uni.navigateTo({ uni.navigateTo({
url: '/v3/logisticsPage/logisticsPage?orderId=' + (this.orderData.orderNo || this.orderData.orderNumber) url: `/v3/logisticsPage/logisticsPage?orderId=${this.orderData.orderNo || this.orderData.orderNumber}&company=${encodeURIComponent(logistics.company)}&trackingNumber=${encodeURIComponent(logistics.trackingNumber)}`
}); });
}, },
...@@ -691,7 +740,7 @@ export default { ...@@ -691,7 +740,7 @@ export default {
if (response.ok && response.data) { if (response.ok && response.data) {
uni.showToast({ uni.showToast({
title: '申请退货成功', title: '申请退货成功',
icon: 'success' icon: 'none'
}); });
// 刷新订单状态 // 刷新订单状态
this.loadOrderDetail(this.orderData.orderNo || this.orderData.orderNumber); this.loadOrderDetail(this.orderData.orderNo || this.orderData.orderNumber);
...@@ -734,7 +783,7 @@ export default { ...@@ -734,7 +783,7 @@ export default {
success: () => { success: () => {
uni.showToast({ uni.showToast({
title: '订单编号已复制', title: '订单编号已复制',
icon: 'success' icon: 'none'
}); });
} }
}); });
...@@ -782,13 +831,13 @@ export default { ...@@ -782,13 +831,13 @@ export default {
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: 200rpx; height: 240rpx;
background: linear-gradient(180deg, #ECC990 0%, rgba(211, 164, 88, 0) 100%); background: linear-gradient(180deg, #ECC990 0%, rgba(211, 164, 88, 0) 100%);
} }
/* 订单状态 */ /* 订单状态 */
.status-section { .status-section {
padding: 20rpx 80rpx; padding: 20rpx 60rpx;
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
...@@ -798,14 +847,14 @@ export default { ...@@ -798,14 +847,14 @@ export default {
} }
.status-icon { .status-icon {
width: 44rpx; width: 34rpx;
height: 44rpx; height: 34rpx;
margin-right: 20rpx; margin-right: 20rpx;
flex-shrink: 0; flex-shrink: 0;
} }
.status-text { .status-text {
font-size: 36rpx; font-size: 28rpx;
font-weight: bold; font-weight: bold;
color: #fff; color: #fff;
flex-shrink: 0; flex-shrink: 0;
...@@ -824,7 +873,7 @@ export default { ...@@ -824,7 +873,7 @@ export default {
} }
.failure-reason { .failure-reason {
font-size: 26rpx; font-size: 24rpx;
color: #fff; color: #fff;
margin-left: 20rpx; margin-left: 20rpx;
flex-shrink: 0; flex-shrink: 0;
...@@ -881,11 +930,7 @@ export default { ...@@ -881,11 +930,7 @@ export default {
color: #666; color: #666;
} }
.address-arrow {
font-size: 32rpx;
color: #999;
margin-left: 20rpx;
}
/* 商品详情 - 现在是模块2的一部分 */ /* 商品详情 - 现在是模块2的一部分 */
.product-section { .product-section {
...@@ -898,8 +943,8 @@ export default { ...@@ -898,8 +943,8 @@ export default {
} }
.product-image { .product-image {
width: 100rpx; width: 180rpx;
height: 100rpx; height: 180rpx;
background-color: #f0e6d2; background-color: #f0e6d2;
border-radius: 10rpx; border-radius: 10rpx;
display: flex; display: flex;
...@@ -925,7 +970,7 @@ export default { ...@@ -925,7 +970,7 @@ export default {
} }
.product-name { .product-name {
font-size: 30rpx; font-size: 28rpx;
color: #333; color: #333;
line-height: 1.4; line-height: 1.4;
margin-bottom: 12rpx; margin-bottom: 12rpx;
...@@ -959,13 +1004,13 @@ export default { ...@@ -959,13 +1004,13 @@ export default {
} }
.product-price { .product-price {
font-size: 34rpx; font-size: 32rpx;
color: #d3a458; color: #d3a458;
font-weight: bold; font-weight: bold;
} }
.product-quantity { .product-quantity {
font-size: 26rpx; font-size: 24rpx;
color: #999; color: #999;
} }
...@@ -982,13 +1027,14 @@ export default { ...@@ -982,13 +1027,14 @@ export default {
} }
.payment-label { .payment-label {
font-size: 30rpx; font-size: 28rpx;
color: #333; color: var(--B700, #1C1C1C);
font-weight: bold;
} }
.payment-value { .payment-value {
font-size: 30rpx; font-size: 28rpx;
color: #333; color: #A8A8A8;
} }
.payment-total { .payment-total {
...@@ -1003,6 +1049,7 @@ export default { ...@@ -1003,6 +1049,7 @@ export default {
font-size: 30rpx; font-size: 30rpx;
color: #333; color: #333;
margin-right: 10rpx; margin-right: 10rpx;
font-weight: bold;
} }
.total-value { .total-value {
...@@ -1020,7 +1067,7 @@ export default { ...@@ -1020,7 +1067,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20rpx; margin-bottom: 30rpx;
} }
.info-row:last-child { .info-row:last-child {
...@@ -1028,8 +1075,9 @@ export default { ...@@ -1028,8 +1075,9 @@ export default {
} }
.info-label { .info-label {
font-size: 30rpx; font-size: 28rpx;
color: #333; color: #333;
font-weight: bold;
} }
.info-right { .info-right {
...@@ -1039,8 +1087,8 @@ export default { ...@@ -1039,8 +1087,8 @@ export default {
} }
.info-value { .info-value {
font-size: 30rpx; font-size: 28rpx;
color: #666; color: #A8A8A8;
} }
/* 已统一到上方的.copy-btn样式 */ /* 已统一到上方的.copy-btn样式 */
...@@ -1059,9 +1107,32 @@ export default { ...@@ -1059,9 +1107,32 @@ export default {
.module-logistics { .module-logistics {
background-color: #fff; background-color: #fff;
padding: 30rpx 20rpx; border-radius: 20rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
padding: 20rpx;
}
.logistics-content {
position: relative;
padding: 10rpx 0;
}
.logistics-content:not(:last-child) {
border-bottom: 1rpx solid #f0f0f0;
margin-bottom: 20rpx;
}
.package-number {
background-color: #f5f5f5;
padding: 8rpx 20rpx;
border-radius: 20rpx; border-radius: 20rpx;
margin-bottom: 16rpx;
display: inline-block;
}
.package-number text {
font-size: 24rpx;
color: #666;
} }
.logistics-row { .logistics-row {
...@@ -1069,7 +1140,8 @@ export default { ...@@ -1069,7 +1140,8 @@ export default {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20rpx; margin-bottom: 20rpx;
width: 100%; /* 限制最大宽度,为右箭头留出空间 */
max-width: calc(100% - 60rpx);
} }
.logistics-row:last-child { .logistics-row:last-child {
...@@ -1079,26 +1151,44 @@ export default { ...@@ -1079,26 +1151,44 @@ export default {
.logistics-label { .logistics-label {
font-size: 30rpx; font-size: 30rpx;
color: #333; color: #333;
/* 固定标签宽度,确保对齐 */
width: 140rpx;
font-weight: bold;
} }
.logistics-right { .logistics-right {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 20rpx; gap: 20rpx;
/* 内容区域不换行 */
flex-shrink: 0;
} }
.logistics-value { .logistics-value {
font-size: 30rpx; font-size: 30rpx;
color: #666; color: #666;
/* 限制值的最大宽度,防止过长 */
max-width: 400rpx;
/* 文本超出时省略 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
} }
.arrow-icon { .arrow-icon {
font-size: 32rpx;
color: #999;
position: absolute; position: absolute;
right: 30rpx; right: 10rpx;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
/* 确保箭头在最上层 */
z-index: 1;
}
.arrow-icon image {
width: 14rpx;
height: 23rpx;
} }
/* 操作按钮容器 */ /* 操作按钮容器 */
...@@ -1108,8 +1198,9 @@ export default { ...@@ -1108,8 +1198,9 @@ export default {
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
height: 180rpx;
background-color: #fff; background-color: #fff;
padding: 80rpx 30rpx; padding: 0rpx 30rpx;
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1); box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1);
z-index: 100; z-index: 100;
/* 虚拟商品按钮居中显示,实物商品按钮推到右侧 */ /* 虚拟商品按钮居中显示,实物商品按钮推到右侧 */
...@@ -1117,6 +1208,8 @@ export default { ...@@ -1117,6 +1208,8 @@ export default {
justify-content: center; justify-content: center;
} }
/* 实物商品按钮容器特殊样式 */ /* 实物商品按钮容器特殊样式 */
.action-container:has(.btn-refund) { .action-container:has(.btn-refund) {
justify-content: flex-end; justify-content: flex-end;
...@@ -1127,26 +1220,26 @@ export default { ...@@ -1127,26 +1220,26 @@ export default {
width: 100%; width: 100%;
height: 88rpx; height: 88rpx;
border-radius: 44rpx; border-radius: 44rpx;
font-size: 32rpx; font-size: 30rpx;
font-weight: bold; font-weight: 500;
text-align: center; text-align: center;
} }
/* 实物商品申请退货按钮样式 - 右下角 */ /* 实物商品申请退货按钮样式 - 右下角 */
.action-btn.corner-btn { .action-btn.corner-btn {
width: 200rpx; width: 248rpx;
height: 80rpx; height: 74rpx;
border-radius: 40rpx; border-radius: 50rpx;
background-color: #fff; background-color: #fff;
color: #333; color: #000;
border: 1rpx solid #ddd; border: 1rpx solid #000;
/* 调整位置,使其在右下角 */ /* 调整位置,使其在右下角 */
position: fixed; position: fixed;
bottom: 30rpx; right: 26rpx;
right: 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1); box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
/* 确保按钮显示在客服按钮上方 */ /* 确保按钮显示在客服按钮上方 */
z-index: 101; z-index: 101;
margin-top: 30rpx;
} }
/* 去使用图片按钮样式 */ /* 去使用图片按钮样式 */
...@@ -1173,31 +1266,34 @@ export default { ...@@ -1173,31 +1266,34 @@ export default {
/* 券码和过期时间样式 - 现在是模块1的一部分 */ /* 券码和过期时间样式 - 现在是模块1的一部分 */
.coupon-section { .coupon-section {
margin-top: 30rpx; margin-top: 30rpx;
padding-top: 30rpx; /* padding-top: 30rpx; */
border-top: 1rpx solid #f0f0f0; /* border-top: 1rpx solid #f0f0f0; */
} }
.coupon-code-item { .coupon-code-item {
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
.expire-time-item {
.coupon-field {
margin-bottom: 25rpx;
width: 100%;
padding: 0rpx;
/* background-color: #f5f5f5; */
border-radius: 10rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20rpx;
}
/* 卡号和卡密之间的间距 */
.pwd-section {
margin-top: 20rpx;
} }
.coupon-label { .coupon-label {
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #333;
text-align: left; text-align: left;
white-space: nowrap; white-space: nowrap;
font-weight: 600;
margin-right: 20rpx;
} }
.coupon-code-content { .coupon-code-content {
...@@ -1215,27 +1311,34 @@ export default { ...@@ -1215,27 +1311,34 @@ export default {
} }
.coupon-code { .coupon-code {
font-size: 26rpx; font-size: 28rpx;
color: #333; color: #A8A8A8;
letter-spacing: 2rpx; letter-spacing: 2rpx;
} }
.expire-time { .expire-time {
flex: 1; flex: 1;
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #A8A8A8;
text-align: right; text-align: right;
} }
/* 复制按钮样式 - 统一调整为与图2一致 */ /* 复制按钮样式 - 统一调整为与图2一致 */
.copy-btn { .copy-btn {
font-size: 26rpx; font-size: 20rpx;
color: #666;
white-space: nowrap; white-space: nowrap;
padding: 8rpx 24rpx; color: #A8A8A8;
border: 1rpx solid #ddd; text-align: center;
border-radius: 18rpx; font-style: normal;
background-color: #f5f5f5; font-weight: 500;
line-height: 32rpx;
border-radius: 24rpx;
border: 1px solid #A8A8A8;
width: 74rpx;
height: 32rpx;
flex-shrink: 0;
background: #FFF;
/* 120% */
} }
/* 模块样式 */ /* 模块样式 */
...@@ -1260,7 +1363,7 @@ export default { ...@@ -1260,7 +1363,7 @@ export default {
} }
.section-title { .section-title {
font-size: 30rpx; font-size: 28rpx;
color: #333; color: #333;
font-weight: bold; font-weight: bold;
margin-bottom: 24rpx; margin-bottom: 24rpx;
...@@ -1270,7 +1373,7 @@ export default { ...@@ -1270,7 +1373,7 @@ export default {
.instruction-content, .instruction-content,
.instruction-text { .instruction-text {
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #A8A8A8;
line-height: 44rpx; line-height: 44rpx;
} }
...@@ -1315,38 +1418,44 @@ export default { ...@@ -1315,38 +1418,44 @@ export default {
} }
.modal-content { .modal-content {
background-color: #fff; width: 546rpx;
border-radius: 20rpx; height: 418rpx;
width: 80%; flex-shrink: 0;
max-width: 500rpx; border-radius: 38rpx;
padding: 40rpx; background: linear-gradient(180deg, #FFE9C5 0%, #FFF 52.87%);
position: relative;
} }
.modal-title { .modal-title {
font-size: 36rpx; color: #D3A458;
font-weight: bold;
color: #333;
text-align: center; text-align: center;
margin-bottom: 30rpx; font-size: 40rpx;
font-style: normal;
font-weight: 600;
line-height: normal;
margin-top: 62rpx;
} }
.modal-message { .modal-message {
font-size: 28rpx; color: var(--B900, #000);
color: #666;
text-align: center; text-align: center;
line-height: 44rpx; font-size: 28rpx;
margin-bottom: 40rpx; font-style: normal;
font-weight: 400;
line-height: normal;
margin-top: 22rpx;
} }
.modal-buttons { .modal-buttons {
display: flex; display: flex;
justify-content: space-between; gap: 20rpx;
gap: 30rpx; margin-top: 70rpx;
justify-content: center;
} }
.modal-btn { .modal-btn {
height: 78rpx; width: 220rpx !important;
height: 78rpx !important;
position: relative;
} }
.modal-btn image { .modal-btn image {
...@@ -1355,10 +1464,11 @@ export default { ...@@ -1355,10 +1464,11 @@ export default {
} }
.cancel-btn { .cancel-btn {
margin-right: 20rpx; border: none;
} }
.confirm-btn { .confirm-btn {
border: none;
margin-left: 20rpx; margin-left: 20rpx;
} }
...@@ -1366,7 +1476,8 @@ export default { ...@@ -1366,7 +1476,8 @@ export default {
font-size: 24rpx; font-size: 24rpx;
color: #999; color: #999;
text-align: center; text-align: center;
margin-top: 20rpx; line-height: 1.4;
margin-top: 40rpx;
} }
.modal-close-btn { .modal-close-btn {
...@@ -1378,9 +1489,4 @@ export default { ...@@ -1378,9 +1489,4 @@ export default {
justify-content: center; justify-content: center;
margin-top: 80rpx; margin-top: 80rpx;
} }
.modal-close-btn {
width: 56rpx;
height: 56rpx;
}
</style> </style>
...@@ -50,20 +50,20 @@ ...@@ -50,20 +50,20 @@
<!-- 配送方式 --> <!-- 配送方式 -->
<view class="delivery-section"> <view class="delivery-section">
<text class="delivery-label">配送方式</text> <text class="delivery-label" style="font-weight: bold;">配送方式</text>
<text class="delivery-method">快递邮寄</text> <text class="delivery-method">快递邮寄</text>
</view> </view>
<!-- 订单备注 --> <!-- 订单备注 -->
<view class="notes-section"> <view class="notes-section">
<text class="notes-label">订单备注</text> <text class="notes-label" style="font-weight: bold;">订单备注</text>
<text class="notes-hint">选填:对本次交易的说明(最多40字)</text> <text class="notes-hint">选填:对本次交易的说明(最多40字)</text>
<input class="notes-input" placeholder="请输入订单备注" maxlength="40" v-model="orderNotes" /> <input class="notes-input" placeholder="请输入订单备注" maxlength="40" v-model="orderNotes" />
</view> </view>
<!-- 订单汇总 --> <!-- 订单汇总 -->
<view class="summary-section"> <view class="summary-section">
<text class="summary-label">{{ goodsInfo.quantity }}</text> <text class="summary-label" style="font-weight: bold;">{{ goodsInfo.quantity }}</text>
<text class="summary-price">小计:{{ goodsInfo.points * goodsInfo.quantity }}{{ <text class="summary-price">小计:{{ goodsInfo.points * goodsInfo.quantity }}{{
goodsInfo.creditsTypeName }}</text> goodsInfo.creditsTypeName }}</text>
</view> </view>
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
<!-- 底部提交栏 --> <!-- 底部提交栏 -->
<view class="bottom-bar"> <view class="bottom-bar">
<view class="total-info"> <view class="total-info">
<text class="total-label">商品积分</text> <text class="total-label" style="font-weight: bold;">商品积分</text>
<text class="total-price">{{ goodsInfo.points * goodsInfo.quantity }}{{ goodsInfo.creditsTypeName <text class="total-price">{{ goodsInfo.points * goodsInfo.quantity }}{{ goodsInfo.creditsTypeName
}}</text> }}</text>
</view> </view>
...@@ -578,34 +578,39 @@ export default { ...@@ -578,34 +578,39 @@ export default {
} }
.modal-content { .modal-content {
background-color: #fff; width: 546rpx;
border-radius: 30rpx; height: 418rpx;
padding: 40rpx; flex-shrink: 0;
width: 80%; border-radius: 38rpx;
max-width: 600rpx; background: linear-gradient(180deg, #FFE9C5 0%, #FFF 52.87%);
box-sizing: border-box;
} }
.modal-title { .modal-title {
font-size: 36rpx;
font-weight: bold;
color: #333; color: #D3A458;
text-align: center; text-align: center;
margin-bottom: 30rpx; font-size: 40rpx;
font-style: normal;
font-weight: 600;
line-height: normal;
margin-top: 62rpx;
} }
.modal-message { .modal-message {
font-size: 28rpx; color: var(--B900, #000);
color: #666;
text-align: center; text-align: center;
margin-bottom: 40rpx; font-size: 28rpx;
line-height: 1.5; font-style: normal;
font-weight: 400;
line-height: normal;
margin-top: 22rpx;
} }
.modal-buttons { .modal-buttons {
display: flex; display: flex;
gap: 20rpx; gap: 20rpx;
margin-bottom: 30rpx; margin-top: 60rpx;
justify-content: center; justify-content: center;
} }
...@@ -634,6 +639,7 @@ export default { ...@@ -634,6 +639,7 @@ export default {
color: #999; color: #999;
text-align: center; text-align: center;
line-height: 1.4; line-height: 1.4;
margin-top: 40rpx;
} }
.modal-close-btn { .modal-close-btn {
...@@ -697,11 +703,13 @@ export default { ...@@ -697,11 +703,13 @@ export default {
margin-bottom: 10rpx; margin-bottom: 10rpx;
display: block; display: block;
overflow: hidden; overflow: hidden;
font-weight: bold;
} }
.address-text.no-address { .address-text.no-address {
color: #999; color: #999;
font-style: italic; font-style: italic;
font-weight: 500;
} }
.recipient-info { .recipient-info {
...@@ -837,7 +845,7 @@ export default { ...@@ -837,7 +845,7 @@ export default {
.delivery-label { .delivery-label {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #A8A8A8;
} }
.delivery-method { .delivery-method {
...@@ -862,7 +870,7 @@ export default { ...@@ -862,7 +870,7 @@ export default {
.notes-hint { .notes-hint {
font-size: 24rpx; font-size: 24rpx;
color: #999; color: #A8A8A8;
margin-bottom: 10rpx; margin-bottom: 10rpx;
margin-left: 20rpx; margin-left: 20rpx;
display: inline-block; display: inline-block;
...@@ -888,12 +896,13 @@ export default { ...@@ -888,12 +896,13 @@ export default {
margin-bottom: 0; margin-bottom: 0;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: flex-end;
} }
.summary-label { .summary-label {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
margin-right: 20rpx;
} }
.summary-price { .summary-price {
...@@ -909,7 +918,6 @@ export default { ...@@ -909,7 +918,6 @@ export default {
right: 30rpx; right: 30rpx;
width: 96rpx; width: 96rpx;
height: 96rpx; height: 96rpx;
background-color: #D3A458;
border-radius: 50%; border-radius: 50%;
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -919,8 +927,8 @@ export default { ...@@ -919,8 +927,8 @@ export default {
} }
.service-icon { .service-icon {
width: 60rpx; width: 96rpx;
height: 60rpx; height: 96rpx;
} }
/* 底部提交栏 */ /* 底部提交栏 */
...@@ -943,13 +951,15 @@ export default { ...@@ -943,13 +951,15 @@ export default {
width: 60%; width: 60%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
margin-left: 20rpx;
margin-right: 20rpx; margin-right: 20rpx;
align-items: center; align-items: center;
} }
.total-label { .total-label {
font-size: 24rpx; font-size: 24rpx;
color: #666; color: #000;
font-weight: bold;
} }
.total-price { .total-price {
...@@ -965,11 +975,12 @@ export default { ...@@ -965,11 +975,12 @@ export default {
height: 74rpx; height: 74rpx;
background-color: #D3A458; background-color: #D3A458;
color: #fff; color: #fff;
font-size: 28rpx; font-size: 30rpx;
border-radius: 37rpx; border-radius: 37rpx;
border: none; border: none;
line-height: 74rpx; line-height: 74rpx;
padding: 0; padding: 0;
font-weight: bold;
} }
.submit-btn:active { .submit-btn:active {
......
...@@ -2617,13 +2617,13 @@ export default { ...@@ -2617,13 +2617,13 @@ export default {
.gold-coin { .gold-coin {
position: absolute; position: absolute;
width: 167rpx; width: 333rpx;
height: 162rpx; height: 333rpx;
animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
} }
.gold-coin-1 { .gold-coin-1 {
animation: goldCoinFly 1.5s ease-out 1; animation: goldCoinFly 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) 1s 1;
z-index: 5; z-index: 5;
} }
...@@ -2650,59 +2650,17 @@ export default { ...@@ -2650,59 +2650,17 @@ export default {
} }
} }
/* 单个金币从中间飞向底部导航"我的"图标的动画 - 自然延续的曲线波动 */ /* 单个金币从上方中间飞向底部导航"我的"图标的动画 - 简化为贝塞尔曲线直线运动 */
@keyframes goldCoinFly { @keyframes goldCoinFly {
0% { 0% {
transform: translate(0, 0) scale(1.3) rotate(0deg); transform: translate(-50%, -50%) scale(1.3) rotate(0deg);
opacity: 1; opacity: 1;
left: 50%; left: 50%;
top: 50%; top: 50%;
} }
20% {
transform: translate(100rpx, 120rpx) scale(1.25) rotate(10deg);
opacity: 1;
left: 50%;
top: 50%;
}
40% {
transform: translate(160rpx, 280rpx) scale(1.2) rotate(15deg);
opacity: 1;
left: 50%;
top: 50%;
}
60% {
transform: translate(190rpx, 380rpx) scale(1.1) rotate(25deg);
opacity: 0.95;
left: 50%;
top: 50%;
}
70% {
transform: translate(200rpx, 420rpx) scale(0.9) rotate(30deg);
opacity: 0.8;
left: 50%;
top: 50%;
}
80% {
transform: translate(208rpx, 460rpx) scale(0.7) rotate(38deg);
opacity: 0.6;
left: 50%;
top: 50%;
}
90% {
transform: translate(215rpx, 500rpx) scale(0.3) rotate(42deg);
opacity: 0.3;
left: 50%;
top: 50%;
}
100% { 100% {
transform: translate(220rpx, 550rpx) scale(0) rotate(45deg); transform: translate(145rpx, 480rpx) scale(0) rotate(45deg);
opacity: 0; opacity: 0;
left: 50%; left: 50%;
top: 50%; top: 50%;
......
...@@ -191,8 +191,8 @@ ...@@ -191,8 +191,8 @@
buttonName: '隐私协议', buttonName: '隐私协议',
}" @click="handleHot" data-type="privacy"></view> }" @click="handleHot" data-type="privacy"></view>
</view> --> </view> -->
<RegisterLayer v-model="showRegisterLayer" @confirm="onRegisterConfirm" />
</view> </view>
<RegisterLayer v-model="showRegisterLayer" @confirm="onRegisterConfirm" @cancel="onRegisterCancel" />
<!-- 生日弹窗 type 3 钻石、4 星光、5 星耀 --> <!-- 生日弹窗 type 3 钻石、4 星光、5 星耀 -->
<!-- <popup-shengri v-if="isTip" type="3" @close="isTip = false"></popup-shengri> --> <!-- <popup-shengri v-if="isTip" type="3" @close="isTip = false"></popup-shengri> -->
...@@ -515,7 +515,13 @@ const handleEditProfile = (e) => { ...@@ -515,7 +515,13 @@ const handleEditProfile = (e) => {
} }
}; };
const onRegisterConfirm = (data) => { const onRegisterConfirm = async () => {
await pageCfgStore.fetchCfg();
// 只调用一次initData,loadMemberInfo已在initData内部处理
initData();
showRegisterLayer.value = false;
};
const onRegisterCancel = () => {
showRegisterLayer.value = false; showRegisterLayer.value = false;
}; };
...@@ -650,7 +656,6 @@ const getRealtimePhoneNumber = async (e) => { ...@@ -650,7 +656,6 @@ const getRealtimePhoneNumber = async (e) => {
return; return;
} }
await userStore.phoneCallback(e.detail, async () => { await userStore.phoneCallback(e.detail, async () => {
showRegisterLayer.value = true;
// 简化回调,避免重复调用接口 // 简化回调,避免重复调用接口
showLoading(); showLoading();
await pageCfgStore.fetchCfg(); await pageCfgStore.fetchCfg();
...@@ -689,6 +694,9 @@ const handleChangeBaby = (e) => { ...@@ -689,6 +694,9 @@ const handleChangeBaby = (e) => {
showBabySwitcher.value = true; showBabySwitcher.value = true;
}; };
async function onSelectBaby(baby) { async function onSelectBaby(baby) {
// 处理宝宝切换逻辑 // 处理宝宝切换逻辑
showBabySwitcher.value = false; showBabySwitcher.value = false;
...@@ -707,12 +715,8 @@ async function onSelectBaby(baby) { ...@@ -707,12 +715,8 @@ async function onSelectBaby(baby) {
} }
function handleAddBabyInfoClick() { function handleAddBabyInfoClick() {
md.sensorLogTake({ // 显示RegisterLayer弹窗
xcxClick: "我的页面点击", showRegisterLayer.value = true;
pageName: "我的页面",
buttonName: "去添加宝宝信息",
});
navigateTo("/pages/person/person?type=add");
} }
function onAddBaby() { function onAddBaby() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment