diff --git a/src/api/index.js b/src/api/index.js
index e832123..7d5ee4e 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -123,6 +123,14 @@ export const getStoreDetail = (id) => get('/store/get', { id })
// 更新店铺
export const updateStore = (data) => put('/store/update', data)
+// 门店日程(某日预约 + 手动占用)
+export const getScheduleDay = (storeId, date) => get('/schedule/day', { storeId, date })
+
+/** blockType: walk_in | blocked;slotStart: ISO 本地时间 */
+export const createScheduleBlock = (data) => post('/schedule/block', data)
+
+export const deleteScheduleBlock = (id) => del(`/schedule/block?id=${id}`)
+
// 上传图片(uniapp 版:使用 uni.uploadFile)
export const uploadImage = (filePath) =>
new Promise((resolve, reject) => {
diff --git a/src/components/AppIcon.vue b/src/components/AppIcon.vue
index 6e4113f..7f6a874 100644
--- a/src/components/AppIcon.vue
+++ b/src/components/AppIcon.vue
@@ -40,6 +40,12 @@ const ICON_MAP = {
pin: [
'M15 10.5a3 3 0 11-6 0 3 3 0 016 0z',
'M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z'
+ ],
+ calendar: [
+ 'M7.5 4H16.5C17.33 4 18 4.67 18 5.5V18.5C18 19.33 17.33 20 16.5 20H7.5C6.67 20 6 19.33 6 18.5V5.5C6 4.67 6.67 4 7.5 4Z',
+ 'M8 2.5V5',
+ 'M16 2.5V5',
+ 'M6 9H18'
]
}
diff --git a/src/pages.json b/src/pages.json
index 152c649..129ea9a 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -9,6 +9,7 @@
{"path": "pages/mine/Staff"},
{"path": "pages/mine/ServiceType"},
{"path": "pages/mine/Store"},
+ {"path": "pages/mine/Schedule"},
{"path": "pages/mine/MyReports"},
{"path": "pages/mine/MyOrders"},
{"path": "pages/mine/MyPets"},
diff --git a/src/pages/mine/Mine.vue b/src/pages/mine/Mine.vue
index 808ee3c..46c8cc7 100644
--- a/src/pages/mine/Mine.vue
+++ b/src/pages/mine/Mine.vue
@@ -34,6 +34,11 @@
+
@@ -46,6 +51,11 @@
+
@@ -91,6 +101,7 @@ const { goPage, openAppPage } = useNavigator()
const goStaffPage = () => uni.navigateTo({ url: '/pages/mine/Staff' })
const goServiceTypePage = () => uni.navigateTo({ url: '/pages/mine/ServiceType' })
const goStorePage = () => uni.navigateTo({ url: '/pages/mine/Store' })
+const goSchedulePage = () => uni.navigateTo({ url: '/pages/mine/Schedule' })
const openProfile = () => uni.navigateTo({ url: '/pages/mine/Profile' })
const goMyPetsPage = () => uni.navigateTo({ url: '/pages/mine/MyPets' })
const goMyOrdersPage = () => uni.navigateTo({ url: '/pages/mine/MyOrders' })
diff --git a/src/pages/mine/Schedule.vue b/src/pages/mine/Schedule.vue
new file mode 100644
index 0000000..3a83ec1
--- /dev/null
+++ b/src/pages/mine/Schedule.vue
@@ -0,0 +1,450 @@
+
+
+
+
+ 门店日程
+
+
+
+
+ 仅店长与员工可查看门店日程
+
+
+
+
+
+
+
+
+ 时段一览
+ 绿色为客户预约;橙色为到店占用;灰色为暂停线上预约。点空白格可手动占用,点占用可取消。
+
+
+
+
+ ‹
+
+
+ {{ dateStr }}
+ {{ weekdayText }}
+
+
+ ›
+
+
+ 加载中…
+
+
+
+
+ {{ row.time }}
+ {{ slotRangeLabel(row) }}
+
+
+
+ {{ row.appointment.petName || '宠物' }} · {{ row.appointment.serviceType || '服务' }}
+ {{ apptStatusText(row.appointment.status) }}
+
+
+ {{ blockTitle(row.block) }}
+ {{ row.block.note }}
+
+
+ {{ row.past ? '已过去' : '空闲 · 点击占用' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/utils/globalState.js b/src/utils/globalState.js
index 2b8e612..fa2a2d4 100644
--- a/src/utils/globalState.js
+++ b/src/utils/globalState.js
@@ -13,7 +13,8 @@ const SUB_ROUTE_MAP = {
profile: '/pages/mine/Profile',
myReports: '/pages/mine/MyReports',
myOrders: '/pages/mine/MyOrders',
- myPets: '/pages/mine/MyPets'
+ myPets: '/pages/mine/MyPets',
+ schedule: '/pages/mine/Schedule'
}
/**