diff --git a/src/mock/data.js b/src/mock/data.js
index 90ae0b3..2498961 100644
--- a/src/mock/data.js
+++ b/src/mock/data.js
@@ -1,9 +1,9 @@
// 南京场地示例仅供交互演示,不代表实时价格或可订状态。
export const venues = [
- { id: 'lining', name: '李宁迪拓运动馆', district: '雨花台', address: '雨花台区示意路 1 号', distance: '1.2km', surface: '室内木地板', price: 80, rating: '4.9', courts: 6, band: 'main', note: '室内木地板 · 配套更衣室', color: 'green', mapX: 55, mapY: 55, features: ['室内木地板', '更衣室', '停车场', '饮水区'] },
- { id: 'olympic', name: '奥体全民健身园', district: '建邺', address: '建邺区示意路 2 号', distance: '3.8km', surface: '户外塑胶', price: 30, rating: '4.7', courts: 4, band: 'budget', note: '户外塑胶 · 配套夜间照明', color: 'mint', mapX: 23, mapY: 39, features: ['户外塑胶', '夜间照明', '公共交通'] },
- { id: 'honey', name: '蜜糖体育中心', district: '雨花台', address: '雨花台区示意路 3 号', distance: '2.5km', surface: '4 人包场', price: 75, rating: '4.8', courts: 4, band: 'main', note: '室内场地 · 配套休息区', color: 'deep', mapX: 72, mapY: 76, features: ['室内场地', '更衣室', '休息区'] },
- { id: 'sky', name: '金鹰 51FLOOR 空中馆', district: '建邺', address: '建邺区示意路 4 号', distance: '4.2km', surface: '云端景观', price: 129, rating: '5.0', courts: 11, band: 'premium', note: '室内场地 · 配套淋浴', color: 'gold', mapX: 38, mapY: 21, features: ['室内场地', '淋浴', '休息区', '停车场'] }
+ { id: 'lining', name: '李宁迪拓运动馆', district: '雨花台', address: '雨花台区示意路 1 号', distance: '1.2km', surface: '室内木地板', price: 80, rating: '4.9', courts: 6, band: 'main', note: '室内木地板 · 配套更衣室', color: 'green', image: '/static/visuals/indoor-court.jpg', mapX: 55, mapY: 55, features: ['室内木地板', '更衣室', '停车场', '饮水区'] },
+ { id: 'olympic', name: '奥体全民健身园', district: '建邺', address: '建邺区示意路 2 号', distance: '3.8km', surface: '户外塑胶', price: 30, rating: '4.7', courts: 4, band: 'budget', note: '户外塑胶 · 配套夜间照明', color: 'mint', image: '/static/visuals/outdoor-court.jpg', mapX: 23, mapY: 39, features: ['户外塑胶', '夜间照明', '公共交通'] },
+ { id: 'honey', name: '蜜糖体育中心', district: '雨花台', address: '雨花台区示意路 3 号', distance: '2.5km', surface: '4 人包场', price: 75, rating: '4.8', courts: 4, band: 'main', note: '室内场地 · 配套休息区', color: 'deep', image: '/static/visuals/indoor-court.jpg', mapX: 72, mapY: 76, features: ['室内场地', '更衣室', '休息区'] },
+ { id: 'sky', name: '金鹰 51FLOOR 空中馆', district: '建邺', address: '建邺区示意路 4 号', distance: '4.2km', surface: '云端景观', price: 129, rating: '5.0', courts: 11, band: 'premium', note: '室内场地 · 配套淋浴', color: 'gold', image: '/static/visuals/indoor-court.jpg', mapX: 38, mapY: 21, features: ['室内场地', '淋浴', '休息区', '停车场'] }
];
// 根据指定的演示时间生成客户端当地日期。
diff --git a/src/mock/shop.js b/src/mock/shop.js
index 7203839..70fb2ba 100644
--- a/src/mock/shop.js
+++ b/src/mock/shop.js
@@ -1,6 +1,6 @@
// 商品数据来自演示配置,真实项目可替换为小程序商城或一件代发服务的接口。
export const shopProducts = [
- { id: 'starter-kit', name: '新球友入门礼包', category: 'all', tag: '官方补贴', price: 9.9, originalPrice: 29.9, stock: 99, sales: '已售 2,480', color: 'teal', icon: 'P', desc: '木拍 ×1 · 匹克球 ×2 · 护腕 · 入门手册' },
+ { id: 'starter-kit', name: '新球友入门礼包', category: 'all', tag: '官方补贴', price: 9.9, originalPrice: 29.9, stock: 99, sales: '已售 2,480', color: 'teal', icon: 'P', image: '/static/visuals/starter-kit.jpg', desc: '木拍 ×1 · 匹克球 ×2 · 护腕 · 入门手册' },
{ id: 'indoor-balls', name: '户外专用匹克球 · 40孔 × 3 只装', category: 'ball', tag: '耗材回购', price: 19.9, originalPrice: 35, stock: 35, sales: '已售 1,246', color: 'green', icon: 'O', desc: '耐打耐磨 · 适合日常训练与户外对局' },
{ id: 'paddle', name: '玻纤入门拍 · 蓝白 235g', category: 'paddle', tag: '官方补贴', price: 49, originalPrice: 89, stock: 18, sales: '已售 860', color: 'blue', icon: '◐', desc: '轻量玻纤面 · 新手好上手 · 含拍套' },
{ id: 'grip', name: '吸汗手胶 3 条装', category: 'accessory', tag: '新 人 专享', price: 12.9, originalPrice: 19.9, stock: 50, sales: '已售 738', color: 'amber', icon: '≈', desc: '防滑吸汗 · 适配主流球拍手柄' },
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
index a82eb3a..0365779 100644
--- a/src/pages/index/index.vue
+++ b/src/pages/index/index.vue
@@ -37,10 +37,10 @@ function openTab(url) { uni.switchTab({ url }); }
+
赛事报名中 南京站
拍立方杯 CPC 积分赛
分级别公开赛 · 冠军直通年度总决赛
- P
@@ -64,8 +64,7 @@ function openTab(url) { uni.switchTab({ url }); }
没有找到符合条件的场地
- {{ venue.courts }} 片⊕
+ {{ venue.courts }} 片 · 示意
{{ venue.name }} {{ venue.district }}
⌖ {{ venue.distance }} · {{ venue.surface }}
@@ -131,7 +130,14 @@ function openTab(url) { uni.switchTab({ url }); }
padding: 29rpx;
border-radius: 18rpx;
color: #fff;
- background: linear-gradient(120deg, #216c37, #4cae5d);
+ background: #075059;
+}
+
+.event-image {
+ position: absolute;
+ inset: 0;
+ width: 100%;
+ height: 100%;
}
.event-top {
@@ -164,16 +170,6 @@ function openTab(url) { uni.switchTab({ url }); }
margin-top: 12rpx;
}
-.event-mark {
- position: absolute;
- right: -18rpx;
- bottom: -70rpx;
- font-weight: 900;
- font-size: 300rpx;
- line-height: 1;
- color: rgba(255, 255, 255, .12);
-}
-
.quick-grid {
display: flex;
justify-content: space-around;
@@ -227,6 +223,7 @@ function openTab(url) { uni.switchTab({ url }); }
.venue-art {
position: relative;
width: 152rpx;
+ height: 148rpx;
flex: none;
border-radius: 13rpx;
display: flex;
@@ -235,6 +232,12 @@ function openTab(url) { uni.switchTab({ url }); }
color: #fff;
}
+.venue-art image {
+ width: 100%;
+ height: 100%;
+ border-radius: inherit;
+}
+
.venue-art.green {
background: #55aa5d;
}
@@ -261,11 +264,6 @@ function openTab(url) { uni.switchTab({ url }); }
font-size: 19rpx;
}
-.court-symbol {
- font-size: 69rpx;
- font-weight: 200;
-}
-
.venue-main {
flex: 1;
min-width: 0;
diff --git a/src/pages/shop/shop.vue b/src/pages/shop/shop.vue
index 5576038..e992b61 100644
--- a/src/pages/shop/shop.vue
+++ b/src/pages/shop/shop.vue
@@ -101,8 +101,8 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
- {{ product.tag }}{{ product.icon }}
+ {{ product.tag }}{{ product.icon }}
{{ product.name }}
{{ product.desc }}
@@ -119,7 +119,7 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
- {{ selectedProduct.icon }}
+ {{ selectedProduct.icon }}
{{ selectedProduct.name }}
¥{{ selectedProduct.price }} ¥{{ selectedProduct.originalPrice }}
库存 {{ selectedProduct.stock }} · {{ selectedProduct.tag }}
@@ -133,7 +133,7 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
购物车还是空的
- {{ line.product.icon }}
+ {{ line.product.icon }}
{{ line.product.name }}
¥{{ line.product.price }}
@@ -373,6 +373,18 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
color: rgba(255, 255, 255, .9);
}
+.product-art image,
+.detail-art image,
+.cart-thumb image {
+ width: 100%;
+ height: 100%;
+}
+
+.product-art image {
+ position: absolute;
+ inset: 0;
+}
+
.product-art.teal, .cart-thumb.teal, .detail-art.teal {
background: #49b3ad;
}
@@ -532,6 +544,7 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
border-radius: 12rpx;
color: #fff;
font-size: 43rpx;
+ overflow: hidden;
}
.cart-main {
@@ -607,6 +620,7 @@ function openOrders() { uni.navigateTo({ url: '/pages/shop/orders' }); }
justify-content: center;
border-radius: 18rpx;
color: rgba(255, 255, 255, .9);
+ overflow: hidden;
}
.detail-art text {
diff --git a/src/static/visuals/indoor-court.jpg b/src/static/visuals/indoor-court.jpg
new file mode 100644
index 0000000..2c9ce47
Binary files /dev/null and b/src/static/visuals/indoor-court.jpg differ
diff --git a/src/static/visuals/outdoor-court.jpg b/src/static/visuals/outdoor-court.jpg
new file mode 100644
index 0000000..fb1b3f3
Binary files /dev/null and b/src/static/visuals/outdoor-court.jpg differ
diff --git a/src/static/visuals/starter-kit.jpg b/src/static/visuals/starter-kit.jpg
new file mode 100644
index 0000000..953dd4b
Binary files /dev/null and b/src/static/visuals/starter-kit.jpg differ
diff --git a/src/static/visuals/tournament.jpg b/src/static/visuals/tournament.jpg
new file mode 100644
index 0000000..dd66bc7
Binary files /dev/null and b/src/static/visuals/tournament.jpg differ
diff --git a/src/subpackages/venue/detail.vue b/src/subpackages/venue/detail.vue
index 67341fb..9486341 100644
--- a/src/subpackages/venue/detail.vue
+++ b/src/subpackages/venue/detail.vue
@@ -47,9 +47,7 @@ function startMatch() {
-
-
-
+
场地示意 · {{ venue.courts }} 片球场
@@ -116,6 +114,11 @@ function startMatch() {
align-items: center;
}
+.court-art image {
+ width: 100%;
+ height: 100%;
+}
+
.court-art.green {
background: #448d52;
}
@@ -132,41 +135,6 @@ function startMatch() {
background: #d6a345;
}
-.court-lines {
- position: relative;
- width: 59%;
- height: 64%;
- border: 5rpx solid rgba(255, 255, 255, .82);
- box-sizing: border-box;
-}
-
-.court-lines::before {
- content: '';
- position: absolute;
- left: 50%;
- top: 0;
- bottom: 0;
- border-left: 4rpx solid rgba(255, 255, 255, .82);
-}
-
-.court-lines::after {
- content: '';
- position: absolute;
- left: 0;
- right: 0;
- top: 29%;
- border-top: 4rpx solid rgba(255, 255, 255, .82);
-}
-
-.court-net {
- position: absolute;
- left: -9%;
- right: -9%;
- top: 50%;
- border-top: 6rpx dashed rgba(255, 255, 255, .95);
- z-index: 1;
-}
-
.art-label {
position: absolute;
left: 22rpx;