diff --git a/miniprogram/src/pages.json b/miniprogram/src/pages.json
new file mode 100644
index 0000000..1abfe94
--- /dev/null
+++ b/miniprogram/src/pages.json
@@ -0,0 +1,27 @@
+{
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
+ "^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
+ "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
+ }
+ },
+ "pages": [
+ {
+ "path": "pages/venue-select/index",
+ "style": {
+ "navigationBarTitleText": "选择场馆",
+ "navigationBarBackgroundColor": "#FFFFFF",
+ "navigationBarTextStyle": "black"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarBackgroundColor": "#FFFFFF",
+ "backgroundColor": "#F8FAFC",
+ "backgroundColorBottom": "#F8FAFC",
+ "backgroundColorTop": "#FFFFFF"
+ }
+}
diff --git a/miniprogram/src/pages/venue-select/index.vue b/miniprogram/src/pages/venue-select/index.vue
new file mode 100644
index 0000000..1952baa
--- /dev/null
+++ b/miniprogram/src/pages/venue-select/index.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ {{ venue.name }}
+ {{ venue.description }}
+
+
+ {{ venue.key === currentVenue ? '当前' : '进入' }}
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/src/stores/venue.js b/miniprogram/src/stores/venue.js
new file mode 100644
index 0000000..440d52e
--- /dev/null
+++ b/miniprogram/src/stores/venue.js
@@ -0,0 +1,26 @@
+import { defineStore } from 'pinia'
+import { getStoredVenue, getVenueOption, navigateToVenueHome, setStoredVenue } from '@/utils/venue'
+
+export const useVenueStore = defineStore('currentVenue', {
+ state: () => ({
+ currentVenue: ''
+ }),
+ getters: {
+ currentVenueOption: (state) => getVenueOption(state.currentVenue),
+ hasSelectedVenue: (state) => Boolean(getVenueOption(state.currentVenue))
+ },
+ actions: {
+ init() {
+ this.currentVenue = getStoredVenue()
+ return this.currentVenue
+ },
+ selectVenue(venueKey) {
+ this.currentVenue = setStoredVenue(venueKey)
+ return this.currentVenue
+ },
+ enterVenue(venueKey) {
+ const selectedVenue = this.selectVenue(venueKey)
+ navigateToVenueHome(selectedVenue)
+ }
+ }
+})
diff --git a/miniprogram/src/utils/venue.js b/miniprogram/src/utils/venue.js
new file mode 100644
index 0000000..6727b65
--- /dev/null
+++ b/miniprogram/src/utils/venue.js
@@ -0,0 +1,55 @@
+export const CURRENT_VENUE_KEY = 'CURRENT_VENUE'
+
+export const VENUE_KEYS = Object.freeze({
+ ICE: 'ice',
+ COMPREHENSIVE: 'comprehensive'
+})
+
+export const VENUE_OPTIONS = Object.freeze([
+ {
+ key: VENUE_KEYS.ICE,
+ name: '冰场馆',
+ description: '课程预约、会员卡与滑冰服务',
+ homePath: '/pages/ice/home/index'
+ },
+ {
+ key: VENUE_KEYS.COMPREHENSIVE,
+ name: '综合场馆',
+ description: '课程、包场、门票、订单与余额',
+ homePath: '/pages/comprehensive/home/index'
+ }
+])
+
+export const isVenueKey = (value) => {
+ return value === VENUE_KEYS.ICE || value === VENUE_KEYS.COMPREHENSIVE
+}
+
+export const getVenueOption = (venueKey) => {
+ return VENUE_OPTIONS.find((item) => item.key === venueKey) || null
+}
+
+export const getStoredVenue = () => {
+ const venue = uni.getStorageSync(CURRENT_VENUE_KEY)
+ return isVenueKey(venue) ? venue : ''
+}
+
+export const setStoredVenue = (venueKey) => {
+ if (!isVenueKey(venueKey)) {
+ uni.removeStorageSync(CURRENT_VENUE_KEY)
+ return ''
+ }
+
+ uni.setStorageSync(CURRENT_VENUE_KEY, venueKey)
+ return venueKey
+}
+
+export const navigateToVenueHome = (venueKey, options = {}) => {
+ const venue = getVenueOption(venueKey)
+ if (!venue) {
+ uni.reLaunch({ url: '/pages/venue-select/index' })
+ return
+ }
+
+ const navigate = options.redirect === true ? uni.redirectTo : uni.reLaunch
+ navigate({ url: venue.homePath })
+}