diff --git a/frontend/App.vue b/frontend/App.vue
index ec12b25..03587fa 100644
--- a/frontend/App.vue
+++ b/frontend/App.vue
@@ -216,10 +216,28 @@
if (result.code === 1) {
console.log('[CCB] 登录成功');
- // 设置token和用户信息
- sheep.$store('user').setToken(result.data.token);
+ // 获取用户store
+ const userStore = sheep.$store('user');
+
+ // ⭐ 立即同步设置用户信息到store,避免页面显示延迟
+ if (result.data.user_info) {
+ userStore.userInfo = result.data.user_info;
+ console.log('[CCB] 用户信息已同步到store:', result.data.user_info.nickname);
+ }
+
+ // ⭐ 如果后端返回了订单数据,也立即同步(避免页面显示'--')
+ if (result.data.num_data) {
+ userStore.numData = result.data.num_data;
+ console.log('[CCB] 订单数据已同步到store:', result.data.num_data);
+ }
+
+ // 保存到本地存储
uni.setStorageSync('userInfo', result.data.user_info);
uni.setStorageSync('lastCcbParamSJ', ccbParamSJ);
+
+ // 设置token(这会触发loginAfter异步加载完整数据)
+ // 注意:不使用await,让它在后台加载,不阻塞UI
+ userStore.setToken(result.data.token);
// 显示欢迎提示
uni.showToast({
diff --git a/frontend/pages/activity/groupon/detail.vue b/frontend/pages/activity/groupon/detail.vue
index d4ac347..36fcd36 100644
--- a/frontend/pages/activity/groupon/detail.vue
+++ b/frontend/pages/activity/groupon/detail.vue
@@ -321,7 +321,7 @@
position: relative;
margin-bottom: 120rpx;
background: v-bind(headerBg) center/750rpx 100% no-repeat,
- linear-gradient(115deg, #f44739 0%, #ff6600 100%);
+ linear-gradient(115deg, #0081ff 0%, #4da6ff 100%);
border-radius: 0 0 5% 5%;
height: 100rpx;
@@ -362,7 +362,7 @@
padding: 0 4rpx;
margin-left: 16rpx;
height: 40rpx;
- background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
border-radius: 6rpx;
}
.countdown-num {
@@ -372,7 +372,7 @@
color: #ffffff;
width: 40rpx;
height: 40rpx;
- background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
border-radius: 6rpx;
}
}
@@ -399,7 +399,7 @@
}
.num {
- color: #ff6000;
+ color: #0081ff;
}
}
@@ -474,8 +474,8 @@
.join-btn {
width: 668rpx;
height: 70rpx;
- background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);
- box-shadow: 0px 8rpx 6rpx 0px rgba(255, 104, 4, 0.22);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
+ box-shadow: 0px 8rpx 6rpx 0px rgba(0, 129, 255, 0.22);
border-radius: 35rpx;
color: #fff;
font-weight: 500;
diff --git a/frontend/pages/activity/groupon/list.vue b/frontend/pages/activity/groupon/list.vue
index 20e471c..d5f9fcd 100644
--- a/frontend/pages/activity/groupon/list.vue
+++ b/frontend/pages/activity/groupon/list.vue
@@ -71,8 +71,9 @@
const { screenHeight, safeAreaInsets, screenWidth, safeArea } = sheep.$platform.device;
const sys_navBar = sheep.$platform.navbar;
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
+ // ⭐ 导航栏已全局隐藏,statusBarHeight和sys_navBar都为0
const pageHeight =
- (safeArea.height + safeAreaInsets.bottom) * 2 + statusBarHeight - sys_navBar - 350;
+ (safeArea.height + safeAreaInsets.bottom) * 2 - 350;
const headerBg = sheep.$url.css('/assets/addons/shopro/uniapp/goods/groupon-header.png');
const state = reactive({
@@ -252,7 +253,7 @@
border-radius: 25rpx;
font-size: 24rpx;
color: #fff;
- background: linear-gradient(90deg, #ff6600 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
}
}
}
diff --git a/frontend/pages/activity/groupon/order.vue b/frontend/pages/activity/groupon/order.vue
index b0cfea5..591e954 100644
--- a/frontend/pages/activity/groupon/order.vue
+++ b/frontend/pages/activity/groupon/order.vue
@@ -269,8 +269,8 @@
.invite-btn {
width: 210rpx;
height: 66rpx;
- background: linear-gradient(90deg, #fe832a, #ff6600);
- box-shadow: 0px 8rpx 6rpx 0px rgba(255, 104, 4, 0.22);
+ background: linear-gradient(90deg, #4da6ff, #0081ff);
+ box-shadow: 0px 8rpx 6rpx 0px rgba(0, 129, 255, 0.22);
border-radius: 33rpx;
color: #fff;
font-size: 26rpx;
diff --git a/frontend/pages/activity/index.vue b/frontend/pages/activity/index.vue
index 15c6641..cc06f25 100644
--- a/frontend/pages/activity/index.vue
+++ b/frontend/pages/activity/index.vue
@@ -174,13 +174,13 @@
.type-text {
font-size: 26rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
line-height: 42rpx;
}
.tip-content {
font-size: 26rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
line-height: 42rpx;
}
}
diff --git a/frontend/pages/activity/seckill/list.vue b/frontend/pages/activity/seckill/list.vue
index f2a1dcc..b7be52a 100644
--- a/frontend/pages/activity/seckill/list.vue
+++ b/frontend/pages/activity/seckill/list.vue
@@ -71,8 +71,9 @@
const { screenHeight, safeAreaInsets, screenWidth, safeArea } = sheep.$platform.device;
const sys_navBar = sheep.$platform.navbar;
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
+ // ⭐ 导航栏已全局隐藏,statusBarHeight和sys_navBar都为0
const pageHeight =
- (safeArea.height + safeAreaInsets.bottom) * 2 + statusBarHeight - sys_navBar - 350;
+ (safeArea.height + safeAreaInsets.bottom) * 2 - 350;
const headerBg = sheep.$url.css('/assets/addons/shopro/uniapp/goods/seckill-header.png');
const state = reactive({
@@ -251,7 +252,7 @@
border-radius: 25rpx;
font-size: 24rpx;
color: #fff;
- background: linear-gradient(90deg, #ff6600 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
}
}
}
diff --git a/frontend/pages/app/sign.vue b/frontend/pages/app/sign.vue
index 747a6e2..7ebbd08 100644
--- a/frontend/pages/app/sign.vue
+++ b/frontend/pages/app/sign.vue
@@ -304,7 +304,7 @@ const handleCalendar = (type) => {
.sign-num {
font-size: 30rpx;
font-weight: 600;
- color: #ff6000;
+ color: #0081ff;
padding: 0 10rpx;
font-family: OPPOSANS;
}
@@ -411,8 +411,8 @@ const handleCalendar = (type) => {
border-radius: 35rpx;
font-size: 30rpx;
font-weight: 500;
- box-shadow: 0 0.2em 0.5em rgba(#ff6000, 0.4);
- background: linear-gradient(90deg, #ff6000, #fe832a);
+ box-shadow: 0 0.2em 0.5em rgba(#0081ff, 0.4);
+ background: linear-gradient(90deg, #0081ff, #4da6ff);
color: #fff;
}
@@ -428,7 +428,7 @@ const handleCalendar = (type) => {
.model-box {
width: 520rpx;
// height: 590rpx;
- background: linear-gradient(177deg, #ff6000 0%, #fe832a 100%);
+ background: linear-gradient(177deg, #0081ff 0%, #4da6ff 100%);
// background: linear-gradient(177deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
border-radius: 10rpx;
@@ -474,11 +474,11 @@ const handleCalendar = (type) => {
.cancel-btn {
width: 220rpx;
height: 70rpx;
- border: 2rpx solid #ff6000;
+ border: 2rpx solid #0081ff;
border-radius: 35rpx;
font-size: 28rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
line-height: normal;
margin-right: 10rpx;
}
@@ -486,8 +486,8 @@ const handleCalendar = (type) => {
.confirm-btn {
width: 220rpx;
height: 70rpx;
- background: linear-gradient(90deg, #ff6000, #fe832a);
- box-shadow: 0 0.2em 0.5em rgba(#ff6000, 0.4);
+ background: linear-gradient(90deg, #0081ff, #4da6ff);
+ box-shadow: 0 0.2em 0.5em rgba(#0081ff, 0.4);
border-radius: 35rpx;
font-size: 28rpx;
font-weight: 500;
diff --git a/frontend/pages/chat/index.vue b/frontend/pages/chat/index.vue
index e55c540..1e028a8 100644
--- a/frontend/pages/chat/index.vue
+++ b/frontend/pages/chat/index.vue
@@ -317,7 +317,8 @@
const chatConfig = computed(() => sheep.$store('app').chat);
const { screenHeight, safeAreaInsets, safeArea, screenWidth } = sheep.$platform.device;
- const pageHeight = safeArea.height - 44 - 35 - 50;
+ // ⭐ 导航栏已全局隐藏,不需要减去导航栏高度(44)
+ const pageHeight = safeArea.height - 35 - 50;
const chatStatus = {
online: {
diff --git a/frontend/pages/commission/components/commission-condition.vue b/frontend/pages/commission/components/commission-condition.vue
index fd4635b..8953848 100644
--- a/frontend/pages/commission/components/commission-condition.vue
+++ b/frontend/pages/commission/components/commission-condition.vue
@@ -121,7 +121,7 @@
.progerss-active {
height: 24rpx;
- background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
border-radius: 12rpx;
}
diff --git a/frontend/pages/commission/components/commission-info.vue b/frontend/pages/commission/components/commission-info.vue
index ca93b5e..e18790d 100644
--- a/frontend/pages/commission/components/commission-info.vue
+++ b/frontend/pages/commission/components/commission-info.vue
@@ -102,7 +102,7 @@
.user-info-box {
.tag-box {
- background: #ff6000;
+ background: #0081ff;
border-radius: 18rpx;
line-height: 36rpx;
diff --git a/frontend/pages/goods/components/detail/detail-activity-tip.vue b/frontend/pages/goods/components/detail/detail-activity-tip.vue
index 7e90888..93e74d9 100644
--- a/frontend/pages/goods/components/detail/detail-activity-tip.vue
+++ b/frontend/pages/goods/components/detail/detail-activity-tip.vue
@@ -77,7 +77,7 @@
background: #ffffff;
border-radius: 16rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
font-size: 24rpx;
line-height: normal;
}
diff --git a/frontend/pages/goods/components/groupon/groupon-card-list.vue b/frontend/pages/goods/components/groupon/groupon-card-list.vue
index 0688a86..a64a34f 100644
--- a/frontend/pages/goods/components/groupon/groupon-card-list.vue
+++ b/frontend/pages/goods/components/groupon/groupon-card-list.vue
@@ -113,7 +113,7 @@
color: #666666;
.num {
- color: #ff6000;
+ color: #0081ff;
}
}
@@ -126,7 +126,7 @@
.go-btn {
width: 140rpx;
height: 60rpx;
- background: linear-gradient(90deg, #ff6000 0%, #fe832a 100%);
+ background: linear-gradient(90deg, #0081ff 0%, #4da6ff 100%);
border-radius: 30rpx;
color: #fff;
font-weight: 500;
diff --git a/frontend/pages/goods/components/list/list-goods-card.vue b/frontend/pages/goods/components/list/list-goods-card.vue
index 8858125..6427ca8 100644
--- a/frontend/pages/goods/components/list/list-goods-card.vue
+++ b/frontend/pages/goods/components/list/list-goods-card.vue
@@ -6,11 +6,11 @@
{{ title }}
- {{ subTitle }}
+ 至高90%积分抵扣
{{ price }}
{{ originPrice }}
- 已售{{ sales }}件
+ {{ maxScoreText }}
@@ -47,6 +47,16 @@
default: '',
},
});
+
+ // 计算最高可使用积分
+ const maxScoreText = computed(() => {
+ if (props.price && !isNaN(props.price)) {
+ const maxScore = (parseFloat(props.price) * 0.9).toFixed(3);
+ return `最高可使用${maxScore}积分`;
+ }
+ return '最高可使用0积分';
+ });
+
const emits = defineEmits(['click']);
const onClick = () => {
emits('click');
@@ -61,8 +71,12 @@
}
.sales-text {
+ display: inline-block;
font-size: 20rpx;
- color: #c4c4c4;
+ background: #FF3000;
+ color: #ffffff;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
}
.goods-origin-price {
@@ -90,9 +104,14 @@
color: #333;
}
.md-goods-subtitle {
- background-color: var(--ui-BG-Main-tag);
- color: var(--ui-BG-Main);
font-size: 20rpx;
+ font-weight: 400;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
}
.md-goods-price {
diff --git a/frontend/pages/goods/groupon.vue b/frontend/pages/goods/groupon.vue
index 1b6a7bb..fa85bf2 100644
--- a/frontend/pages/goods/groupon.vue
+++ b/frontend/pages/goods/groupon.vue
@@ -511,7 +511,7 @@
width: 236rpx;
height: 80rpx;
background: rgba(#ff5651, 0.1);
- color: #ff6000;
+ color: #0081ff;
border-radius: 40rpx 0px 0px 40rpx;
line-height: normal;
font-size: 24rpx;
@@ -539,7 +539,7 @@
}
.more-item-hover {
background: rgba(#ffefe5, 0.32);
- color: #ff6000;
+ color: #0081ff;
}
}
}
@@ -580,7 +580,7 @@
background: #ffffff;
border-radius: 16rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
font-size: 24rpx;
line-height: normal;
}
diff --git a/frontend/pages/goods/score.vue b/frontend/pages/goods/score.vue
index 9d1ffd4..1c5e316 100644
--- a/frontend/pages/goods/score.vue
+++ b/frontend/pages/goods/score.vue
@@ -341,7 +341,7 @@
background: #ffffff;
border-radius: 16rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
font-size: 24rpx;
line-height: normal;
}
diff --git a/frontend/pages/goods/seckill.vue b/frontend/pages/goods/seckill.vue
index 60093ca..6fae3e3 100644
--- a/frontend/pages/goods/seckill.vue
+++ b/frontend/pages/goods/seckill.vue
@@ -466,7 +466,7 @@
width: 236rpx;
height: 80rpx;
background: rgba(#ff5651, 0.1);
- color: #ff6000;
+ color: #0081ff;
border-radius: 40rpx 0px 0px 40rpx;
line-height: normal;
font-size: 24rpx;
@@ -517,7 +517,7 @@
background: #ffffff;
border-radius: 16rpx;
font-weight: 500;
- color: #ff6000;
+ color: #0081ff;
font-size: 24rpx;
line-height: normal;
}
diff --git a/frontend/pages/index/category.vue b/frontend/pages/index/category.vue
index be632e7..67bf059 100644
--- a/frontend/pages/index/category.vue
+++ b/frontend/pages/index/category.vue
@@ -2,7 +2,7 @@
-
@@ -194,7 +194,7 @@
- {{ salesAndStock }}
+ {{ maxScoreText }}
@@ -226,7 +226,7 @@
class="sl-goods-subtitle ss-m-t-16"
:style="[{ color: subTitleColor, background: subTitleBackground }]"
>
- {{ data.subtitle }}
+ 至高90%积分抵扣
@@ -256,7 +256,7 @@
- {{ salesAndStock }}
+ {{ maxScoreText }}
@@ -422,6 +422,17 @@
return text.join(' | ');
});
+ // 计算最高可使用积分
+ const maxScoreText = computed(() => {
+ // 计算价格的90%作为最高可使用积分
+ const price = isArray(props.data.price) ? props.data.price[0] : props.data.price;
+ if (price && !isNaN(price)) {
+ const maxScore = (parseFloat(price) * 0.9).toFixed(3);
+ return `最高可使用${maxScore}积分`;
+ }
+ return '最高可使用0积分';
+ });
+
// 返回事件
const emits = defineEmits(['click', 'getHeight']);
@@ -517,11 +528,12 @@
}
.sales-text {
- display: table;
- font-size: 24rpx;
- transform: scale(0.8);
- margin-left: 0rpx;
- color: #c4c4c4;
+ display: inline-block;
+ font-size: 20rpx;
+ background: #FF3000;
+ color: #ffffff;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
}
.activity-tag {
@@ -618,7 +630,13 @@
.md-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
+ width: 200rpx;
}
.md-goods-price {
@@ -630,7 +648,7 @@
.cart-box {
width: 54rpx;
height: 54rpx;
- background: linear-gradient(90deg, #fe8900, #ff5e00);
+ background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
border-radius: 50%;
position: absolute;
bottom: 50rpx;
@@ -669,7 +687,12 @@
.lg-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
// line-height: 30rpx;
// width: 410rpx;
}
@@ -687,7 +710,7 @@
z-index: 2;
width: 120rpx;
height: 50rpx;
- background: linear-gradient(90deg, #fe8900, #ff5e00);
+ background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
border-radius: 25rpx;
font-size: 24rpx;
color: #ffffff;
@@ -726,7 +749,12 @@
.sl-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
line-height: 30rpx;
}
@@ -743,7 +771,7 @@
z-index: 2;
width: 148rpx;
height: 50rpx;
- background: linear-gradient(90deg, #fe8900, #ff5e00);
+ background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
border-radius: 25rpx;
font-size: 24rpx;
color: #ffffff;
diff --git a/frontend/sheep/components/s-groupon-block/s-groupon-block.vue b/frontend/sheep/components/s-groupon-block/s-groupon-block.vue
index 3aea89c..c4a67de 100644
--- a/frontend/sheep/components/s-groupon-block/s-groupon-block.vue
+++ b/frontend/sheep/components/s-groupon-block/s-groupon-block.vue
@@ -96,12 +96,12 @@
let { mode, tagStyle, buyNowStyle, goodsFields, space } = props.data;
let { marginLeft, marginRight } = props.styles;
- // 购买按钮样式
+ // 购买按钮样式 - ⭐ 写死为蓝色,不再使用后端配置
const buyStyle = computed(() => {
let buyNowStyle = props.data.buyNowStyle;
if (buyNowStyle.mode == 1) {
return {
- background: `linear-gradient(to right, ${buyNowStyle.color1}, ${buyNowStyle.color2})`,
+ background: 'linear-gradient(to right, #0081ff, #4da6ff)',
};
}
diff --git a/frontend/sheep/components/s-score-block/s-score-block.vue b/frontend/sheep/components/s-score-block/s-score-block.vue
index 569f5d2..5c2ecb8 100644
--- a/frontend/sheep/components/s-score-block/s-score-block.vue
+++ b/frontend/sheep/components/s-score-block/s-score-block.vue
@@ -140,12 +140,12 @@
}
count++;
}
- // 购买按钮样式
+ // 购买按钮样式 - ⭐ 写死为蓝色,不再使用后端配置
const buyStyle = computed(() => {
if (buyNowStyle.mode == 1) {
- // button
+ // button - 固定使用蓝色渐变
return {
- background: `linear-gradient(to right, ${buyNowStyle.color1}, ${buyNowStyle.color2})`,
+ background: 'linear-gradient(to right, #0081ff, #4da6ff)',
};
}
diff --git a/frontend/sheep/components/s-score-card/s-score-card.vue b/frontend/sheep/components/s-score-card/s-score-card.vue
index e21d77e..5351376 100644
--- a/frontend/sheep/components/s-score-card/s-score-card.vue
+++ b/frontend/sheep/components/s-score-card/s-score-card.vue
@@ -24,7 +24,7 @@
class="md-goods-subtitle ss-m-t-16 ss-line-1"
:style="[{ color: subTitleColor }]"
>
- {{ data.subtitle }}
+ 至高90%积分抵扣
- {{ salesAndStock }}
+ {{ maxScoreText }}
@@ -81,7 +81,7 @@
class="lg-goods-subtitle ss-m-t-10 ss-line-1"
:style="[{ color: subTitleColor }]"
>
- {{ data.subtitle }}
+ 至高90%积分抵扣
@@ -108,7 +108,7 @@
- {{ salesAndStock }}
+ {{ maxScoreText }}
@@ -270,6 +270,22 @@
text.push(formatStock(props.data.stock_show_type, props.data.stock));
return text.join(' | ');
});
+
+ // 计算最高可使用积分(针对积分商品)
+ const maxScoreText = computed(() => {
+ // 优先使用商品的score字段(积分价格)
+ if (props.data.score && !isNaN(props.data.score)) {
+ const maxScore = (parseFloat(props.data.score) * 0.9).toFixed(3);
+ return `最高可使用${maxScore}积分`;
+ }
+ // 如果没有score字段,用价格计算
+ const price = Array.isArray(props.data.price) ? props.data.price[0] : props.data.price;
+ if (price && !isNaN(price)) {
+ const maxScore = (parseFloat(price) * 0.9).toFixed(3);
+ return `最高可使用${maxScore}积分`;
+ }
+ return '最高可使用0积分';
+ });
// 获取实时卡片高度
const { proxy } = getCurrentInstance();
const elId = `sheep_${Math.ceil(Math.random() * 10e5).toString(36)}`;
@@ -294,11 +310,12 @@
margin-right: -4px;
}
.sales-text {
- display: table;
- font-size: 24rpx;
- transform: scale(0.8);
- margin-left: -16rpx;
- color: #c4c4c4;
+ display: inline-block;
+ font-size: 20rpx;
+ background: #FF3000;
+ color: #ffffff;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
}
// md
@@ -322,7 +339,13 @@
.md-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
+ width: 200rpx;
}
.md-goods-price {
@@ -372,7 +395,12 @@
.lg-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
line-height: 30rpx;
// width: 410rpx;
}
@@ -420,7 +448,12 @@
.sl-goods-subtitle {
font-size: 24rpx;
font-weight: 400;
- color: #999999;
+ color: #FF3000 !important;
+ background: #ffffff;
+ border: 1px solid #FF3000;
+ border-radius: 8rpx;
+ padding: 4rpx 12rpx;
+ display: inline-block;
line-height: 30rpx;
width: 100%;
box-sizing: border-box;
@@ -438,7 +471,7 @@
z-index: 2;
width: 148rpx;
height: 50rpx;
- background: linear-gradient(90deg, #fe8900, #ff5e00);
+ background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
border-radius: 25rpx;
font-size: 24rpx;
color: #ffffff;
diff --git a/frontend/sheep/components/s-seckill-block/s-seckill-block.vue b/frontend/sheep/components/s-seckill-block/s-seckill-block.vue
index 111be29..bc6dd38 100644
--- a/frontend/sheep/components/s-seckill-block/s-seckill-block.vue
+++ b/frontend/sheep/components/s-seckill-block/s-seckill-block.vue
@@ -96,12 +96,12 @@
let { mode, tagStyle, buyNowStyle, goodsFields, space } = props.data;
let { marginLeft, marginRight } = props.styles;
- // 购买按钮样式
+ // 购买按钮样式 - ⭐ 写死为蓝色,不再使用后端配置
const buyStyle = computed(() => {
let buyNowStyle = props.data.buyNowStyle;
if (buyNowStyle.mode == 1) {
return {
- background: `linear-gradient(to right, ${buyNowStyle.color1}, ${buyNowStyle.color2})`,
+ background: 'linear-gradient(to right, #0081ff, #4da6ff)',
};
}
diff --git a/frontend/sheep/components/s-tabbar/s-tabbar.vue b/frontend/sheep/components/s-tabbar/s-tabbar.vue
index 917c92a..881bb15 100644
--- a/frontend/sheep/components/s-tabbar/s-tabbar.vue
+++ b/frontend/sheep/components/s-tabbar/s-tabbar.vue
@@ -6,7 +6,7 @@
:placeholder="true"
:safeAreaInsetBottom="true"
:inactiveColor="tabbar.inactiveColor"
- :activeColor="tabbar.activeColor"
+ activeColor="#0081ff"
:midTabBar="tabbar.mode === 2"
:customStyle="tabbarStyle"
>
diff --git a/frontend/sheep/platform/index.js b/frontend/sheep/platform/index.js
index 2c0d0c8..eb4d289 100644
--- a/frontend/sheep/platform/index.js
+++ b/frontend/sheep/platform/index.js
@@ -21,6 +21,9 @@ import Pay from './pay';
const device = uni.getSystemInfoSync();
+// ⭐ 强制设置状态栏高度为0(导航栏已全局隐藏)
+device.statusBarHeight = 0;
+
const os = device.platform;
let name = '';
diff --git a/frontend/sheep/platform/pay.js b/frontend/sheep/platform/pay.js
index e8493b8..1474899 100644
--- a/frontend/sheep/platform/pay.js
+++ b/frontend/sheep/platform/pay.js
@@ -348,17 +348,20 @@ export default class SheepPay {
// 获取订单ID(从订单号查询)
console.log('[建行支付] 步骤1: 查询订单信息...');
+ let orderId;
+ let paymentResult;
+
try {
const orderInfo = await sheep.$api.order.detail(this.orderSN);
console.log('[建行支付] 订单查询结果:', orderInfo);
- if (!orderInfo || orderInfo.code !== 1) {
+ if (!orderInfo || orderInfo.code !== 1 || !orderInfo.data) {
console.error('[建行支付] ❌ 获取订单信息失败:', orderInfo);
sheep.$helper.toast('获取订单信息失败');
return;
}
- const orderId = orderInfo.data.id;
+ orderId = orderInfo.data.id;
console.log('[建行支付] ✅ 订单ID:', orderId);
console.log('[建行支付] 订单金额:', orderInfo.data.pay_fee);
console.log('[建行支付] 订单状态:', orderInfo.data.status);
@@ -367,21 +370,28 @@ export default class SheepPay {
console.log('[建行支付] 步骤2: 调用后端生成支付串...');
console.log('[建行支付] 请求参数:', { order_id: orderId });
- const paymentResult = await ccbApi.createPayment(orderId);
+ paymentResult = await ccbApi.createPayment(orderId);
console.log('[建行支付] 支付串生成结果:', paymentResult);
- if (paymentResult.code !== 1) {
+ if (!paymentResult || paymentResult.code !== 1 || !paymentResult.data) {
console.error('[建行支付] ❌ 生成支付串失败:', paymentResult);
- console.error('[建行支付] 错误信息:', paymentResult.msg);
+ console.error('[建行支付] 错误信息:', paymentResult?.msg);
console.error('[建行支付] 完整响应:', JSON.stringify(paymentResult));
- sheep.$helper.toast(paymentResult.msg || '生成支付串失败');
+ sheep.$helper.toast(paymentResult?.msg || '生成支付串失败');
return;
}
console.log('[建行支付] ✅ 支付串生成成功');
- console.log('[建行支付] 支付串长度:', paymentResult.data.payment_string?.length);
- console.log('[建行支付] 支付流水号:', paymentResult.data.pay_flow_id);
- console.log('[建行支付] 支付金额:', paymentResult.data.amount);
+ console.log('[建行支付] 支付串长度:', paymentResult.data?.payment_string?.length);
+ console.log('[建行支付] 支付流水号:', paymentResult.data?.pay_flow_id);
+ console.log('[建行支付] 支付金额:', paymentResult.data?.amount);
+
+ // 验证支付串是否存在
+ if (!paymentResult.data.payment_string) {
+ console.error('[建行支付] ❌ 支付串为空');
+ sheep.$helper.toast('支付串生成失败');
+ return;
+ }
} catch (error) {
console.error('[建行支付] ❌ 异常:', error);
console.error('[建行支付] 错误堆栈:', error.stack);
@@ -406,7 +416,7 @@ export default class SheepPay {
const result = await CcbLifePlatform.payment(paymentParams);
console.log('[建行支付] 收银台调起结果:', result);
- if (result.code === 0) {
+ if (result && result.code === 0) {
// ✅ 支付调起成功,开始轮询查询订单状态
console.log('[建行支付] ✅ 支付调起成功,开始轮询查询订单状态');
@@ -429,7 +439,7 @@ export default class SheepPay {
const statusResult = await ccbApi.queryPaymentStatus(orderId);
console.log('[建行支付] 查询结果:', statusResult);
- if (statusResult.code === 1 && statusResult.data.is_paid) {
+ if (statusResult && statusResult.code === 1 && statusResult.data && statusResult.data.is_paid) {
// ✅ 支付成功
uni.hideLoading();
console.log('[建行支付] ✅ 订单已支付 order_id:' + orderId);
@@ -438,8 +448,8 @@ export default class SheepPay {
return;
}
- console.log('[建行支付] 订单状态:', statusResult.data.status);
- console.log('[建行支付] 是否已支付:', statusResult.data.is_paid);
+ console.log('[建行支付] 订单状态:', statusResult?.data?.status);
+ console.log('[建行支付] 是否已支付:', statusResult?.data?.is_paid);
// 未支付,继续轮询
if (pollCount < MAX_POLL_COUNT) {
@@ -481,12 +491,26 @@ export default class SheepPay {
} else {
// 支付失败或取消
console.error('[建行支付] ❌ 支付未成功:', result);
- if (result.msg && result.msg.includes('取消')) {
+
+ // 确保关闭可能存在的loading
+ uni.hideLoading();
+
+ if (result && result.msg && result.msg.includes('取消')) {
console.log('[建行支付] 用户取消支付');
sheep.$helper.toast('支付已取消');
+ // ⭐ 用户取消支付,返回支付页面(而不是跳转到失败页面)
+ setTimeout(() => {
+ uni.navigateBack({
+ delta: 1,
+ fail: () => {
+ // 如果返回失败,跳转到订单列表
+ sheep.$router.redirect('/pages/order/list');
+ }
+ });
+ }, 1500);
} else {
- console.error('[建行支付] 支付失败原因:', result.msg);
- sheep.$helper.toast(result.msg || '支付失败');
+ console.error('[建行支付] 支付失败原因:', result?.msg);
+ sheep.$helper.toast(result?.msg || '支付失败');
that.payResult('fail');
}
}
@@ -495,6 +519,10 @@ export default class SheepPay {
console.error('[建行支付] 错误类型:', error.name);
console.error('[建行支付] 错误信息:', error.message);
console.error('[建行支付] 错误堆栈:', error.stack);
+
+ // 确保关闭loading
+ uni.hideLoading();
+
sheep.$helper.toast('支付失败: ' + error.message);
that.payResult('fail');
}
diff --git a/frontend/sheep/platform/provider/ccblife/index.js b/frontend/sheep/platform/provider/ccblife/index.js
index 36703b1..755a846 100644
--- a/frontend/sheep/platform/provider/ccblife/index.js
+++ b/frontend/sheep/platform/provider/ccblife/index.js
@@ -487,10 +487,12 @@ const CcbLifePlatform = {
console.log('[建行收银台] 设备类型:', isIOS ? 'iOS' : 'Android');
if (isIOS) {
- // iOS: 使用 URL Scheme 调起支付
- console.log('[建行收银台] iOS: 使用URL Scheme调起');
- const payUrl = 'mbspay://direct?' + options.payment_string;
+ // ⭐ iOS: 使用官方文档的URL Scheme(5.3.1章节)
+ console.log('[建行收银台] iOS: 使用官方URL Scheme调起');
+ // 注意:需要对支付串进行encodeURIComponent编码
+ const payUrl = 'ccbpayment://openCashier?params=' + encodeURIComponent(options.payment_string);
console.log('[建行收银台] 跳转URL长度:', payUrl.length);
+ console.log('[建行收银台] URL前100字符:', payUrl.substring(0, 100));
window.location.href = payUrl;
@@ -503,14 +505,17 @@ const CcbLifePlatform = {
});
}, 500);
} else {
- // Android: 调用 JSBridge 方法
- console.log('[建行收银台] Android: 检查mbspay对象...');
- console.log('[建行收银台] window.mbspay存在:', !!window.mbspay);
- console.log('[建行收银台] mbspay.directpay存在:', !!(window.mbspay && window.mbspay.directpay));
+ // ⭐ Android: 使用官方文档的JSBridge方法(5.3.1章节)
+ console.log('[建行收银台] Android: 检查CCBAndroid对象...');
+ console.log('[建行收银台] window.CCBAndroid存在:', !!window.CCBAndroid);
+ console.log('[建行收银台] CCBAndroid.callCashier存在:', !!(window.CCBAndroid && window.CCBAndroid.callCashier));
- if (window.mbspay && typeof window.mbspay.directpay === 'function') {
- console.log('[建行收银台] 调用mbspay.directpay()...');
- window.mbspay.directpay(options.payment_string);
+ if (window.CCBAndroid && typeof window.CCBAndroid.callCashier === 'function') {
+ console.log('[建行收银台] 调用CCBAndroid.callCashier()...');
+ console.log('[建行收银台] 支付串长度:', options.payment_string.length);
+
+ // 调用官方文档指定的方法
+ window.CCBAndroid.callCashier(options.payment_string);
// Android调起后认为成功(实际支付结果通过异步通知获取)
setTimeout(() => {
@@ -521,12 +526,26 @@ const CcbLifePlatform = {
});
}, 500);
} else {
- console.error('[建行收银台] ❌ mbspay对象不存在或directpay方法不存在');
- console.error('[建行收银台] window对象键:', Object.keys(window).filter(k => k.toLowerCase().includes('pay') || k.toLowerCase().includes('ccb')));
- reject({
- code: -1,
- msg: '建行支付环境异常,请更新建行生活App'
- });
+ console.error('[建行收银台] ❌ CCBAndroid对象不存在或callCashier方法不存在');
+ console.error('[建行收银台] window对象包含的键:', Object.keys(window).filter(k => k.toLowerCase().includes('pay') || k.toLowerCase().includes('ccb') || k.toLowerCase().includes('android')));
+
+ // 降级尝试:旧版本可能使用mbspay
+ if (window.mbspay && typeof window.mbspay.directpay === 'function') {
+ console.warn('[建行收银台] ⚠️ 降级使用mbspay.directpay()(旧版本)');
+ window.mbspay.directpay(options.payment_string);
+ setTimeout(() => {
+ console.log('[建行收银台] ✅ Android收银台已调起(降级方式)');
+ resolve({
+ code: 0,
+ msg: '已调起建行支付'
+ });
+ }, 500);
+ } else {
+ reject({
+ code: -1,
+ msg: '建行支付环境异常,请更新建行生活App'
+ });
+ }
}
}
// #endif
diff --git a/frontend/sheep/store/sys.js b/frontend/sheep/store/sys.js
index f7151e0..fec12ac 100644
--- a/frontend/sheep/store/sys.js
+++ b/frontend/sheep/store/sys.js
@@ -4,7 +4,7 @@ import app from './app';
const sys = defineStore({
id: 'sys',
state: () => ({
- theme: '', // 主题,
+ theme: 'blue', // ⭐ 主题强制设置为蓝色
mode: 'light', // 明亮模式、暗黑模式(暂未支持)
modeAuto: false, // 跟随系统
fontSize: 1, // 设置默认字号等级(0-4)
@@ -12,11 +12,8 @@ const sys = defineStore({
getters: {},
actions: {
setTheme(theme = '') {
- if (theme === '') {
- this.theme = app().template?.basic.theme || 'orange';
- } else {
- this.theme = theme;
- }
+ // ⭐ 强制使用蓝色主题,忽略所有参数
+ this.theme = 'blue';
},
},
persist: {
diff --git a/frontend/sheep/store/user.js b/frontend/sheep/store/user.js
index fa7ac4a..08bb762 100644
--- a/frontend/sheep/store/user.js
+++ b/frontend/sheep/store/user.js
@@ -81,7 +81,9 @@ const user = defineStore({
const { code, data } = await userApi.data();
if (code === 1) {
this.numData = data;
+ console.log('[User Store] 订单数据已更新:', data);
}
+ return Promise.resolve(data);
},
// 添加分享记录
@@ -112,7 +114,7 @@ const user = defineStore({
const nowTime = new Date().getTime();
if (this.lastUpdateTime + 5000 > nowTime) return;
await this.getInfo();
- this.getNumData();
+ await this.getNumData(); // ⭐ 添加await,确保订单数据加载完成
this.lastUpdateTime = nowTime;
return this.userInfo;
},
diff --git a/frontend/sheep/ui/su-sticky/su-sticky.vue b/frontend/sheep/ui/su-sticky/su-sticky.vue
index a8831a2..431f2f0 100644
--- a/frontend/sheep/ui/su-sticky/su-sticky.vue
+++ b/frontend/sheep/ui/su-sticky/su-sticky.vue
@@ -34,7 +34,7 @@
type: [String, Number],
// #ifdef H5
// H5端的导航栏属于“自定义”导航栏的范畴,因为它是非原生的,与普通元素一致
- default: 44,
+ default: 0,
// #endif
// #ifndef H5
default: sheep.$platform.navbar,
diff --git a/public/assets/addons/shopro/libs/element-plus/index.css b/public/assets/addons/shopro/libs/element-plus/index.css
index 958625c..32187c5 100644
--- a/public/assets/addons/shopro/libs/element-plus/index.css
+++ b/public/assets/addons/shopro/libs/element-plus/index.css
@@ -131,7 +131,7 @@
--sa-title: #262626;
--sa-subtitle: #434343;
--sa-font: #595959;
- --sa-subfont: #8c8c8c;
+ --sa-subfont: #FF3000 !important;
--sa-place: #bfbfbf;
--sa-border: #d9d9d9;
@@ -17289,7 +17289,7 @@
--sa-title: #262626;
--sa-subtitle: #434343;
--sa-font: #595959;
- --sa-subfont: #8c8c8c;
+ --sa-subfont: #FF3000 !important;
--sa-place: #bfbfbf;
--sa-border: #d9d9d9;
--sa-border-secondary: #f0f0f0;
diff --git a/public/assets/js/backend/shopro/decorate/page.js b/public/assets/js/backend/shopro/decorate/page.js
index f82117f..c6f3623 100644
--- a/public/assets/js/backend/shopro/decorate/page.js
+++ b/public/assets/js/backend/shopro/decorate/page.js
@@ -789,8 +789,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
buyNowStyle: {
mode: 1,
text: '立即购买',
- color1: Controller.data().themeColor[theme].color1,
- color2: Controller.data().themeColor[theme].color2,
+ color1: '#0081ff',
+ color2: '#4da6ff',
src: '',
},
tagStyle: {
@@ -927,7 +927,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
},
subtitle: {
text: '副标题',
- color: '#8c8c8c',
+ color: '#FF3000',
textFontSize: 12,
other: [], // bold=加粗 italic=倾斜
},
@@ -1099,8 +1099,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
buyNowStyle: {
mode: 1,
text: '立即拼团',
- color1: Controller.data().themeColor[theme].color1,
- color2: Controller.data().themeColor[theme].color2,
+ color1: '#0081ff',
+ color2: '#4da6ff',
src: '',
},
borderRadiusTop: 0,
@@ -1158,8 +1158,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
buyNowStyle: {
mode: 1,
text: '去抢购',
- color1: Controller.data().themeColor[theme].color1,
- color2: Controller.data().themeColor[theme].color2,
+ color1: '#0081ff',
+ color2: '#4da6ff',
src: '',
},
borderRadiusTop: 0,
@@ -1208,8 +1208,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
buyNowStyle: {
mode: 1,
text: '去兑换',
- color1: Controller.data().themeColor[theme].color1,
- color2: Controller.data().themeColor[theme].color2,
+ color1: '#0081ff',
+ color2: '#4da6ff',
src: '',
},
borderRadiusTop: 0,