diff --git a/src/apis.js b/src/apis.js
index eb20f8f..ae037b4 100644
--- a/src/apis.js
+++ b/src/apis.js
@@ -770,6 +770,21 @@ export const getGiftDetailAPI = (id) => {
);
};
+// 分页获取启用门店及当前用户在各店的会员状态。
+export const getStoreVipListAPI = ({page = 1, pageSize = 20} = {}) => {
+ return request("GET", "/store/list", {page, pageSize});
+};
+
+// 查询当前用户在指定门店的会员状态及权益剩余次数。
+export const getStoreBenefitAPI = (storeId) => {
+ return request("GET", "/store/benefit", {storeId});
+};
+
+// 获取体验中心 VIP 介绍纯文本,无需登录。
+export const getStoreVipIntroAPI = () => {
+ return request("GET", "/store/vip-intro");
+};
+
// 根据用户定位分页获取附近门店。
export const getNearbyStoresAPI = ({
longitude,
diff --git a/src/pages.json b/src/pages.json
index 87fe3da..a2184f4 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -1,5 +1,5 @@
-{
- "pages": [
+{
+ "pages": [
{
"path": "pages/index"
},
@@ -9,118 +9,136 @@
{
"path": "pages/friend-battle"
},
- {
- "path": "pages/point-book"
- },
- {
- "path": "pages/point-book-rank"
- },
- {
- "path": "pages/my-like-list"
- },
- {
- "path": "pages/audio-test"
- },
- {
- "path": "pages/about-us"
- },
- {
- "path": "pages/webview",
- "style": {
- "navigationBarTitleText": ""
- }
- },
- {
- "path": "pages/melee-battle"
- },
- {
- "path": "pages/battle-result"
- },
- {
- "path": "pages/friend-battle-result"
- },
- {
- "path": "pages/point-book-edit"
- },
- {
- "path": "pages/point-book-create"
- },
- {
- "path": "pages/point-book-list"
- },
- {
- "path": "pages/point-book-detail"
- },
- {
- "path": "pages/point-book-detail-share"
- },
- {
- "path": "pages/match-page"
- },
- {
- "path": "pages/user"
- },
- {
- "path": "pages/grade-intro"
- },
- {
- "path": "pages/rank-intro"
- },
- {
- "path": "pages/my-growth"
- },
- {
- "path": "pages/first-try"
- },
- {
- "path": "pages/practise"
- },
- {
- "path": "pages/practise-one"
- },
- {
- "path": "pages/practise-two"
- },
- {
- "path": "pages/battle-room"
- },
- {
- "path": "pages/ranking"
- },
- {
- "path": "pages/rank-list"
- },
- {
- "path": "pages/match-detail"
- },
- {
- "path": "pages/melee-bow-data"
- },
+ {
+ "path": "pages/point-book"
+ },
+ {
+ "path": "pages/point-book-rank"
+ },
+ {
+ "path": "pages/my-like-list"
+ },
+ {
+ "path": "pages/audio-test"
+ },
+ {
+ "path": "pages/calibration"
+ },
+ {
+ "path": "pages/about-us"
+ },
+ {
+ "path": "pages/webview",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/melee-battle"
+ },
+ {
+ "path": "pages/battle-result"
+ },
+ {
+ "path": "pages/friend-battle-result"
+ },
+ {
+ "path": "pages/point-book-edit"
+ },
+ {
+ "path": "pages/point-book-create"
+ },
+ {
+ "path": "pages/point-book-list"
+ },
+ {
+ "path": "pages/point-book-detail"
+ },
+ {
+ "path": "pages/point-book-detail-share"
+ },
+ {
+ "path": "pages/match-page"
+ },
+ {
+ "path": "pages/my-device"
+ },
+ {
+ "path": "pages/device-intro"
+ },
+ {
+ "path": "pages/user"
+ },
+ {
+ "path": "pages/grade-intro"
+ },
+ {
+ "path": "pages/rank-intro"
+ },
+ {
+ "path": "pages/my-growth"
+ },
+ {
+ "path": "pages/first-try"
+ },
+ {
+ "path": "pages/practise"
+ },
+ {
+ "path": "pages/practise-one"
+ },
+ {
+ "path": "pages/practise-two"
+ },
+ {
+ "path": "pages/battle-room"
+ },
+ {
+ "path": "pages/ranking"
+ },
+ {
+ "path": "pages/rank-list"
+ },
+ {
+ "path": "pages/match-detail"
+ },
+ {
+ "path": "pages/melee-bow-data"
+ },
{
"path": "pages/mine-bow-data"
+ },
+ {
+ "path": "pages/ota-wifi",
+ "style": {
+ "navigationStyle": "custom"
+ }
}
],
- "globalStyle": {
- "backgroundColor": "@bgColor",
- "backgroundColorBottom": "@bgColorBottom",
- "backgroundColorTop": "@bgColorTop",
- "backgroundTextStyle": "@bgTxtStyle",
- "navigationBarBackgroundColor": "#000000",
- "navigationBarTextStyle": "@navTxtStyle",
- "navigationBarTitleText": "Uni Creator",
- "navigationStyle": "custom",
- "enablePullDownRefresh": false
- },
- "easycom": {
- "autoscan": true,
- "custom": {
- "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
- }
- },
+ "globalStyle": {
+ "backgroundColor": "@bgColor",
+ "backgroundColorBottom": "@bgColorBottom",
+ "backgroundColorTop": "@bgColorTop",
+ "backgroundTextStyle": "@bgTxtStyle",
+ "navigationBarBackgroundColor": "#000000",
+ "navigationBarTextStyle": "@navTxtStyle",
+ "navigationBarTitleText": "Uni Creator",
+ "navigationStyle": "custom",
+ "enablePullDownRefresh": false
+ },
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
+ }
+ },
"subPackages": [
{
"root": "pages/coin",
"pages": [
+ {
+ "path": "vip-intro"
+ },
{
"path": "index"
},
@@ -178,48 +196,48 @@
},
{
"root": "pages/member",
- "pages": [
- {
- "path": "orders"
- },
- {
- "path": "order-detail"
- },
- {
- "path": "be-vip"
- },
- {
- "path": "vip-intro"
- },
- {
- "path": "agreement"
- }
- ]
- },
- {
- "root": "pages/team-battle",
- "pages": [
- {
- "path": "index"
- },
- {
- "path": "team-bow-data"
- }
- ]
- },
- {
- "root": "pages/training",
- "pages": [
- {
- "path": "index"
- },
- {
- "path": "difficulty"
- },
- {
- "path": "practise-one"
- }
- ]
- }
- ]
-}
+ "pages": [
+ {
+ "path": "orders"
+ },
+ {
+ "path": "order-detail"
+ },
+ {
+ "path": "be-vip"
+ },
+ {
+ "path": "vip-intro"
+ },
+ {
+ "path": "agreement"
+ }
+ ]
+ },
+ {
+ "root": "pages/team-battle",
+ "pages": [
+ {
+ "path": "index"
+ },
+ {
+ "path": "team-bow-data"
+ }
+ ]
+ },
+ {
+ "root": "pages/training",
+ "pages": [
+ {
+ "path": "index"
+ },
+ {
+ "path": "difficulty"
+ },
+ {
+ "path": "practise-one"
+ }
+ ]
+ }
+ ]
+}
diff --git a/src/pages/coin/components/CoinBalancePanel.vue b/src/pages/coin/components/CoinBalancePanel.vue
index 746a514..dea506e 100644
--- a/src/pages/coin/components/CoinBalancePanel.vue
+++ b/src/pages/coin/components/CoinBalancePanel.vue
@@ -38,13 +38,12 @@ defineProps({
display: flex;
align-items: center;
justify-content: center;
- width: 706rpx;
+ width: 100%;
height: 60rpx;
margin-top: 0;
- border: 2rpx solid rgba(255, 217, 71, 0.25);
border-radius: 12rpx;
box-sizing: border-box;
- background-color: rgba(255, 217, 71, 0.06);
+ background: linear-gradient(90deg, transparent, rgba(4, 4, 4, 0.7), transparent);
}
.balance-item {
@@ -69,7 +68,7 @@ defineProps({
.balance-list__line {
width: 2rpx;
- height: 28rpx;
+ height: 16rpx;
background-color: rgba(255, 255, 255, 0.5);
margin: 0 22rpx;
}
diff --git a/src/pages/coin/components/CoinHeader.vue b/src/pages/coin/components/CoinHeader.vue
index 284b68c..142328b 100644
--- a/src/pages/coin/components/CoinHeader.vue
+++ b/src/pages/coin/components/CoinHeader.vue
@@ -10,11 +10,13 @@ const props = defineProps({
type: String,
default: "",
},
+ switchable: { type: Boolean, default: false },
onBack: {
type: Function,
default: null,
},
});
+const emit = defineEmits(["select-store"]);
@@ -30,16 +32,20 @@ const props = defineProps({
>
{{ title }}
-
+
-
diff --git a/src/pages/coin/components/StoreSectionTabs.vue b/src/pages/coin/components/StoreSectionTabs.vue
new file mode 100644
index 0000000..4960cbd
--- /dev/null
+++ b/src/pages/coin/components/StoreSectionTabs.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
diff --git a/src/pages/coin/components/StoreVipCard.vue b/src/pages/coin/components/StoreVipCard.vue
new file mode 100644
index 0000000..598deec
--- /dev/null
+++ b/src/pages/coin/components/StoreVipCard.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+ {{ benefit.title }}
+
+ {{ membership.remaining[benefit.key] }}
+ 次
+
+
+
+
+ {{ membership.active ? `有效期至${membership.expiresAt}` : "未开通" }}
+
+
+ 查看更多关于体验中心VIP的介绍 >
+
+
+
+
+
diff --git a/src/pages/coin/components/StoreVipFooter.vue b/src/pages/coin/components/StoreVipFooter.vue
new file mode 100644
index 0000000..50053eb
--- /dev/null
+++ b/src/pages/coin/components/StoreVipFooter.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
diff --git a/src/pages/coin/data.js b/src/pages/coin/data.js
index 24f7efc..945fcc9 100644
--- a/src/pages/coin/data.js
+++ b/src/pages/coin/data.js
@@ -1,3 +1,4 @@
+// 金币快捷入口保持原有路由与图标配置。
export const quickMenus = [
{
key: "rules",
@@ -20,3 +21,30 @@ export const quickMenus = [
icon: "https://static.shelingxingqiu.com/shootmini/static/coin/icon-nearby-store.png",
},
];
+
+// 体验中心业务 Tab。
+export const storeSections = [
+ { key: "vip", label: "体验中心VIP" },
+ { key: "coin", label: "我的金币" },
+];
+
+export const storeVipBenefits = [
+ {
+ key: "trial",
+ title: "免费体验权益",
+ description: "使用该权益可免费体验智能弓箭30分钟1次,加入官方社群还可以额外获赠1次。",
+ icon: "https://static.shelingxingqiu.com/shootmini/static/coin/store-vip-benefit-trial.png",
+ },
+ {
+ key: "discount",
+ title: "特惠购买权益",
+ description: "使用该权益可以19.9元的特惠价格购买30分钟体验服务1次。",
+ icon: "https://static.shelingxingqiu.com/shootmini/static/coin/store-vip-benefit-discount.png",
+ },
+ {
+ key: "drink",
+ title: "到店赠饮权益",
+ description: "使用该权益每次到店后可获得免费赠送的指定饮品一支。",
+ icon: "https://static.shelingxingqiu.com/shootmini/static/coin/store-vip-benefit-drink.png",
+ },
+];
diff --git a/src/pages/coin/index.vue b/src/pages/coin/index.vue
index 019abcf..5ac9dce 100644
--- a/src/pages/coin/index.vue
+++ b/src/pages/coin/index.vue
@@ -1,14 +1,53 @@
-
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+ 会员信息加载中...
+ {{ vipError }}
+
+
+
+ 门店体验中心VIP是为热爱射箭运动的用户专属打造的VIP服务,开通后即可享受以下三大专属权益:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+ 加载失败,点击重试
+ {{ rewardProducts.length ? '没有更多商品了~' : '暂无兑换商品~' }}
+
-
diff --git a/src/pages/user.vue b/src/pages/user.vue
index 1aaef37..c79d088 100644
--- a/src/pages/user.vue
+++ b/src/pages/user.vue
@@ -1,5 +1,7 @@