Commit e743c4af authored by spc's avatar spc

fixed

parent 3add8d9d
......@@ -55,23 +55,23 @@
<view v-else-if="item.type === 'display'" class="form-input-box">
<view class="form-input" style="color: #222">{{
formData[item.name] || item.placeholder
}}</view>
}}</view>
</view>
<view v-else-if="item.type === 'display-obj'" class="form-input-box">
<view class="form-input" style="color: #222">{{
getLabelByValue(item, formData[item.name])
}}</view>
}}</view>
</view>
<!-- 选择器类型 -->
<picker-custom v-else-if="item.type === 'picker'" :mode="item.mode" :range="item.range" :value="item.mode === 'date'
? formData[item.name]
: getPickerIndex(item)
? formData[item.name]
: getPickerIndex(item)
" :onPickerChange="(e) => onPickerChange(e, item.name)"
:onLayerVisibleChange="(e) => (pageStatus.btnStatus = !e)" :onStatusChange="onDateStatusChange">
<view class="form-input-box">
<view class="form-input">{{
getLabelByValue(item, formData[item.name]) || item.placeholder
}}</view>
}}</view>
<image class="form-input-icon" :src="$baseUrl + 'person/icon_arrow_yellow_right.png'" />
</view>
</picker-custom>
......@@ -280,15 +280,7 @@ const formItems = ref([
range: babyGenderMap.map((i) => i.label),
mode: "custom",
},
{
label: "喂养方式",
name: "feedingType",
required: false,
placeholder: "未选择",
type: "picker",
range: ["奶粉喂养", "母乳喂养", "母乳奶粉混合喂养"],
mode: "custom",
},
{ label: "喂养方式", name: "feedingType", required: true, placeholder: "未选择", type: "picker", range: ["奶粉喂养", "母乳喂养", "母乳奶粉混合喂养"], mode: "custom", },
{
label: "孕周",
name: "gestationalWeeks",
......@@ -543,7 +535,7 @@ const checkAndUpdateTaskResult = async () => {
await integralStore.queryTodoResultServer();
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.taskCompletePoints = integralStore.queryTodoResult.data[0]?.actualCredits;
globalStore.taskCompleteTitle = integralStore.queryTodoResult.data[0]?.taskName;
......
......@@ -4,7 +4,7 @@
<view class="form-item">
<text class="label">收货人</text>
<input class="input" v-model="formData.name" placeholder="请输入收货人姓名" maxlength="30"
@input="limitNameInput" />
@input="limitNameInput" placeholder-style="color: #BFBFBF;" />
<view class="wechat-import" @tap="importFromWechat">
<image class="wechat-icon" :src="$baseUrl + 'homepage/Q3Res/wechatIcon.png'" mode="aspectFit">
</image>
......@@ -14,14 +14,15 @@
<view class="form-item">
<text class="label">手机号码</text>
<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>
</view>
<view class="form-item">
<text class="label">所在地区</text>
<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" />
</view>
</view>
......@@ -29,20 +30,20 @@
<view class="form-item">
<text class="label">详细地址</text>
<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>
</view>
<view class="form-item">
<text class="label">门牌号</text>
<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>
</view>
<view class="default-switch" @tap="toggleDefault">
<view class="default-switch">
<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>
</view>
......@@ -356,13 +357,13 @@ export default {
isItemSelected(item, index) {
switch (this.currentLevel) {
case 0:
return this.selectedProvince && this.selectedProvince.id === item.code;
return this.selectedProvince && this.selectedProvince.code === item.code;
case 1:
return this.selectedCity && this.selectedCity.id === item.code;
return this.selectedCity && this.selectedCity.code === item.code;
case 2:
return this.selectedDistrict && this.selectedDistrict.id === item.code;
return this.selectedDistrict && this.selectedDistrict.code === item.code;
case 3:
return this.selectedStreet && this.selectedStreet.id === item.code;
return this.selectedStreet && this.selectedStreet.code === item.code;
default:
return false;
}
......@@ -398,9 +399,9 @@ export default {
this.districts = [];
this.streets = [];
// 更新picker值并加载城市
// 更新picker值并加载城市,使用code而不是id
this.pickerValue = [provinceIndex, 0, 0, 0];
await this.loadCities(this.selectedProvince.id);
await this.loadCities(this.selectedProvince.code);
}
// 城市变化
......@@ -412,9 +413,9 @@ export default {
this.districts = [];
this.streets = [];
// 更新picker值并加载区县
// 更新picker值并加载区县,使用code而不是id
this.pickerValue = [provinceIndex, cityIndex, 0, 0];
await this.loadDistricts(this.selectedCity.id);
await this.loadDistricts(this.selectedCity.code);
}
// 区县变化
......@@ -424,9 +425,9 @@ export default {
this.selectedStreet = null;
this.streets = [];
// 更新picker值并加载街道
// 更新picker值并加载街道,使用code而不是id
this.pickerValue = [provinceIndex, cityIndex, districtIndex, 0];
await this.loadStreets(this.selectedDistrict.id);
await this.loadStreets(this.selectedDistrict.code);
}
// 街道变化
......@@ -682,7 +683,7 @@ export default {
uni.showToast({
title: '已设为默认地址',
icon: 'success'
icon: 'none'
});
} catch (error) {
console.error('设置默认地址失败:', error);
......@@ -946,17 +947,14 @@ export default {
<style scoped>
.address-edit-container {
padding-bottom: 200rpx;
/* background-color: #F8F8F8; */
min-height: 100vh;
background: var(--B10, #FAFAFA);
top: 0;
height: 100vh;
}
.form-container {
padding: 10rpx;
/* background-color: #FFFFFF; */
border-radius: 20rpx;
margin: 20rpx;
background: var(--B10, #FAFAFA);
overflow: hidden;
}
......@@ -975,34 +973,42 @@ export default {
font-size: 24rpx;
color: #999999;
margin-left: 20rpx;
margin-right: 40rpx;
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 0;
padding: 20rpx;
padding: 0 20rpx;
height: 104rpx;
border-bottom: 1rpx solid #f0f0f0;
width: 100%;
box-sizing: border-box;
}
.label {
font-size: 30rpx;
color: #333333;
font-size: 26rpx;
color: #000;
width: 120rpx;
flex-shrink: 0;
margin-right: 20rpx;
margin-left: 54rpx;
margin-right: 80rpx;
font-weight: 400;
}
.input {
flex: 1;
font-size: 30rpx;
font-size: 24rpx;
color: #000;
padding: 0;
border: none;
outline: none;
}
/* 占位符样式已通过placeholder-style属性设置 */
.wechat-import {
display: flex;
align-items: center;
......@@ -1019,7 +1025,7 @@ export default {
.textarea {
flex: 1;
font-size: 30rpx;
font-size: 24rpx;
min-height: 80rpx;
padding: 0;
resize: none;
......@@ -1039,28 +1045,35 @@ export default {
}
.region-text {
font-size: 30rpx;
color: #999999;
font-size: 24rpx;
color: #000;
}
.region-text.placeholder-color {
color: #BFBFBF;
}
.arrow {
width: 14rpx;
height: 23rpx;
margin-right: 40rpx;
}
.default-switch {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx;
padding: 0 20rpx;
height: 104rpx;
border-bottom: 1rpx solid #f0f0f0;
width: 100%;
box-sizing: border-box;
}
.switch-text {
font-size: 30rpx;
color: #333333;
font-size: 26rpx;
color: #000;
margin-left: 54rpx;
}
.switch {
......@@ -1069,6 +1082,7 @@ export default {
background-color: #E5E5E5;
border-radius: 48rpx;
position: relative;
margin-right: 40rpx;
transition: background-color 0.3s ease;
}
......
......@@ -190,7 +190,7 @@ export default {
if (this.isSubmitting) return;
// 检查地址数量限制
if (this.addressList.length >= 21) {
if (this.addressList.length >= 20) {
uni.showToast({
title: '地址添加已经达到上限啦~',
icon: 'none',
......
......@@ -50,7 +50,7 @@
<text class="detail-title">详情信息</text>
<view class="detail-banner" v-if="goodsData.goodsContent">
<rich-text style="width: 100%; /* 或设置为具体的像素值 */ overflow-x: hidden;" class="banner-text"
:nodes="formatRichText(goodsData.goodsContent)"></rich-text>
:nodes="formatRichText(goodsData.goodsContent)"></rich-text>
</view>
</view>
</view>
......@@ -86,7 +86,7 @@
</view>
<view class="product-details">
<text class="product-points">{{ goodsData.points }}{{ goodsData.creditsTypeName || '积分'
}}</text>
}}</text>
<text class="product-stock">库存 {{ formatCount(goodsData.exchangeCount) }}</text>
</view>
</view>
......@@ -109,7 +109,7 @@
<text class="quantity-label">选择数量 <text class="limit-text" v-if="goodsData.goodsLimit">(限购{{
goodsData.goodsLimit }}件)</text></text>
<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>
<view class="quantity-btn " @click="decreaseQuantity" :disabled="quantity <= 1">-</view>
<text class="quantity-value">{{ quantity }}</text>
......@@ -599,16 +599,16 @@ export default {
};
return levelMap[memberLevelName] || 1;
},
// 富文本格式化处理函数
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(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
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%;');
return match;
});
......@@ -841,16 +841,19 @@ export default {
break;
case 'canExchange':
default:
message = '可以兑换';
// message = '可以兑换';
break;
}
}
uni.showToast({
title: message,
icon: 'none',
duration: 2000
});
if (message) {
uni.showToast({
title: message,
icon: 'none',
duration: 2000
});
}
},
// 关闭规格选择弹窗
......@@ -1493,8 +1496,8 @@ page {
}
.service-icon {
width: 60rpx;
height: 60rpx;
width: 96rpx;
height: 96rpx;
}
.exchange-btn {
......@@ -1713,7 +1716,7 @@ page {
font-size: 40rpx;
font-weight: bold;
display: flex;
align-items: center;
/* align-items: center; */
justify-content: center;
z-index: 2;
border-right: none;
......
......@@ -83,10 +83,7 @@ export default {
doTerminate().then(res => {
uni.hideLoading();
if (res.ok) {
uni.showToast({
title: '注销申请已提交',
icon: 'success'
});
// 可以跳转到登录页面或首页
setTimeout(() => {
uni.reLaunch({
......
This diff is collapsed.
......@@ -50,20 +50,20 @@
<!-- 配送方式 -->
<view class="delivery-section">
<text class="delivery-label">配送方式</text>
<text class="delivery-label" style="font-weight: bold;">配送方式</text>
<text class="delivery-method">快递邮寄</text>
</view>
<!-- 订单备注 -->
<view class="notes-section">
<text class="notes-label">订单备注</text>
<text class="notes-label" style="font-weight: bold;">订单备注</text>
<text class="notes-hint">选填:对本次交易的说明(最多40字)</text>
<input class="notes-input" placeholder="请输入订单备注" maxlength="40" v-model="orderNotes" />
</view>
<!-- 订单汇总 -->
<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 }}{{
goodsInfo.creditsTypeName }}</text>
</view>
......@@ -79,7 +79,7 @@
<!-- 底部提交栏 -->
<view class="bottom-bar">
<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>
</view>
......@@ -155,35 +155,35 @@ import { jump, JumpType } from '../../utils';
export default {
data() {
return {
orderNotes: '',
// 订单来源子渠道
orderSubSource: '',
// 订单参数
orderParams: {},
priceData: null,
// 地址信息
selectedAddress: null,
hasAddress: false,
fullAddress: '',
recipientName: '',
recipientPhone: '',
// 商品信息
goodsInfo: {
name: '',
spec: '',
points: 0,
quantity: 1
},
// 商店信息
homeStore: null,
// 弹窗状态
showConfirmModal: false,
showAddressModal: false,
showSelectAddressModal: false,
// 用于防连点
isSubmitting: false
}
return {
orderNotes: '',
// 订单来源子渠道
orderSubSource: '',
// 订单参数
orderParams: {},
priceData: null,
// 地址信息
selectedAddress: null,
hasAddress: false,
fullAddress: '',
recipientName: '',
recipientPhone: '',
// 商品信息
goodsInfo: {
name: '',
spec: '',
points: 0,
quantity: 1
},
// 商店信息
homeStore: null,
// 弹窗状态
showConfirmModal: false,
showAddressModal: false,
showSelectAddressModal: false,
// 用于防连点
isSubmitting: false
}
},
onLoad(options) {
console.log('结算页面参数:', options);
......@@ -345,12 +345,12 @@ export default {
closeAddressModal() {
this.showAddressModal = false;
},
// 关闭选择地址提示弹窗
closeSelectAddressModal() {
this.showSelectAddressModal = false;
},
// 处理选择地址
handleGoSelectAddress() {
this.closeSelectAddressModal();
......@@ -578,34 +578,39 @@ export default {
}
.modal-content {
background-color: #fff;
border-radius: 30rpx;
padding: 40rpx;
width: 80%;
max-width: 600rpx;
box-sizing: border-box;
width: 546rpx;
height: 418rpx;
flex-shrink: 0;
border-radius: 38rpx;
background: linear-gradient(180deg, #FFE9C5 0%, #FFF 52.87%);
}
.modal-title {
font-size: 36rpx;
font-weight: bold;
color: #333;
color: #D3A458;
text-align: center;
margin-bottom: 30rpx;
font-size: 40rpx;
font-style: normal;
font-weight: 600;
line-height: normal;
margin-top: 62rpx;
}
.modal-message {
font-size: 28rpx;
color: #666;
color: var(--B900, #000);
text-align: center;
margin-bottom: 40rpx;
line-height: 1.5;
font-size: 28rpx;
font-style: normal;
font-weight: 400;
line-height: normal;
margin-top: 22rpx;
}
.modal-buttons {
display: flex;
gap: 20rpx;
margin-bottom: 30rpx;
margin-top: 60rpx;
justify-content: center;
}
......@@ -634,6 +639,7 @@ export default {
color: #999;
text-align: center;
line-height: 1.4;
margin-top: 40rpx;
}
.modal-close-btn {
......@@ -697,11 +703,13 @@ export default {
margin-bottom: 10rpx;
display: block;
overflow: hidden;
font-weight: bold;
}
.address-text.no-address {
color: #999;
font-style: italic;
font-weight: 500;
}
.recipient-info {
......@@ -837,7 +845,7 @@ export default {
.delivery-label {
font-size: 28rpx;
color: #333;
color: #A8A8A8;
}
.delivery-method {
......@@ -862,7 +870,7 @@ export default {
.notes-hint {
font-size: 24rpx;
color: #999;
color: #A8A8A8;
margin-bottom: 10rpx;
margin-left: 20rpx;
display: inline-block;
......@@ -888,12 +896,13 @@ export default {
margin-bottom: 0;
display: flex;
align-items: center;
justify-content: space-between;
justify-content: flex-end;
}
.summary-label {
font-size: 28rpx;
color: #333;
margin-right: 20rpx;
}
.summary-price {
......@@ -909,7 +918,6 @@ export default {
right: 30rpx;
width: 96rpx;
height: 96rpx;
background-color: #D3A458;
border-radius: 50%;
display: flex;
align-items: center;
......@@ -919,8 +927,8 @@ export default {
}
.service-icon {
width: 60rpx;
height: 60rpx;
width: 96rpx;
height: 96rpx;
}
/* 底部提交栏 */
......@@ -943,13 +951,15 @@ export default {
width: 60%;
display: flex;
flex-direction: row;
margin-left: 20rpx;
margin-right: 20rpx;
align-items: center;
}
.total-label {
font-size: 24rpx;
color: #666;
color: #000;
font-weight: bold;
}
.total-price {
......@@ -965,11 +975,12 @@ export default {
height: 74rpx;
background-color: #D3A458;
color: #fff;
font-size: 28rpx;
font-size: 30rpx;
border-radius: 37rpx;
border: none;
line-height: 74rpx;
padding: 0;
font-weight: bold;
}
.submit-btn:active {
......
......@@ -2617,13 +2617,13 @@ export default {
.gold-coin {
position: absolute;
width: 167rpx;
height: 162rpx;
width: 333rpx;
height: 333rpx;
animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.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;
}
......@@ -2650,59 +2650,17 @@ export default {
}
}
/* 单个金币从中间飞向底部导航"我的"图标的动画 - 自然延续的曲线波动 */
/* 单个金币从上方中间飞向底部导航"我的"图标的动画 - 简化为贝塞尔曲线直线运动 */
@keyframes goldCoinFly {
0% {
transform: translate(0, 0) scale(1.3) rotate(0deg);
transform: translate(-50%, -50%) scale(1.3) rotate(0deg);
opacity: 1;
left: 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% {
transform: translate(220rpx, 550rpx) scale(0) rotate(45deg);
transform: translate(145rpx, 480rpx) scale(0) rotate(45deg);
opacity: 0;
left: 50%;
top: 50%;
......
......@@ -191,8 +191,8 @@
buttonName: '隐私协议',
}" @click="handleHot" data-type="privacy"></view>
</view> -->
<RegisterLayer v-model="showRegisterLayer" @confirm="onRegisterConfirm" />
</view>
<RegisterLayer v-model="showRegisterLayer" @confirm="onRegisterConfirm" @cancel="onRegisterCancel" />
<!-- 生日弹窗 type 3 钻石、4 星光、5 星耀 -->
<!-- <popup-shengri v-if="isTip" type="3" @close="isTip = false"></popup-shengri> -->
......@@ -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;
};
......@@ -650,7 +656,6 @@ const getRealtimePhoneNumber = async (e) => {
return;
}
await userStore.phoneCallback(e.detail, async () => {
showRegisterLayer.value = true;
// 简化回调,避免重复调用接口
showLoading();
await pageCfgStore.fetchCfg();
......@@ -689,6 +694,9 @@ const handleChangeBaby = (e) => {
showBabySwitcher.value = true;
};
async function onSelectBaby(baby) {
// 处理宝宝切换逻辑
showBabySwitcher.value = false;
......@@ -707,12 +715,8 @@ async function onSelectBaby(baby) {
}
function handleAddBabyInfoClick() {
md.sensorLogTake({
xcxClick: "我的页面点击",
pageName: "我的页面",
buttonName: "去添加宝宝信息",
});
navigateTo("/pages/person/person?type=add");
// 显示RegisterLayer弹窗
showRegisterLayer.value = true;
}
function onAddBaby() {
......@@ -1258,4 +1262,4 @@ defineExpose({});
}
}
}
</style>
</style>
\ No newline at end of file
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