From e75ec0161493a46a920647c86b68c0dcb1c35c39 Mon Sep 17 00:00:00 2001 From: xiaoquan <838115837@qq.com> Date: Sun, 10 May 2026 10:45:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=AD=E4=BB=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 4 +- apps/merchant-admin/src/api/review.ts | 2 +- apps/miniapp/src/api/user/invite.ts | 22 +- apps/miniapp/src/components/RoomCard.vue | 361 ++++++----- .../src/components/base/BaseButton.vue | 315 +++++++++ apps/miniapp/src/components/base/BaseCard.vue | 198 ++++++ .../miniapp/src/components/base/BaseModal.vue | 253 ++++++++ .../src/components/base/EmptyState.vue | 220 +++++++ .../src/components/base/LoadingState.vue | 203 ++++++ .../src/components/base/StatusBadge.vue | 275 ++++++++ .../src/components/business/ActionSheet.vue | 219 +++++++ .../components/business/DateRangeSelector.vue | 189 ++++++ .../src/components/business/FilterBar.vue | 264 ++++++++ .../src/components/business/FormField.vue | 287 +++++++++ .../src/components/business/GuestSelector.vue | 127 ++++ .../src/components/business/ImageUploader.vue | 277 ++++++++ .../src/components/business/MenuList.vue | 105 +++ .../src/components/business/MerchantCard.vue | 289 +++++++++ .../components/business/MerchantHeader.vue | 234 +++++++ .../src/components/business/OrderCard.vue | 281 ++++++++ .../src/components/business/OrderQuickNav.vue | 149 +++++ .../src/components/business/PriceTag.vue | 207 ++++++ .../src/components/business/RatingStars.vue | 182 ++++++ .../src/components/business/ReviewCard.vue | 166 +++++ .../src/components/business/SearchBar.vue | 343 ++++++++++ .../src/components/business/SectionHeader.vue | 133 ++++ .../src/components/business/TagList.vue | 310 +++++++++ .../src/components/business/ToolGrid.vue | 111 ++++ .../src/components/business/UserProfile.vue | 92 +++ apps/miniapp/src/pages.json | 23 +- apps/miniapp/src/pages/about/index.vue | 164 ++--- apps/miniapp/src/pages/activity/index.vue | 212 ++++++ apps/miniapp/src/pages/agreement/index.vue | 69 +- apps/miniapp/src/pages/index/index.vue | 545 ++++++++-------- apps/miniapp/src/pages/invite/cashbacks.vue | 93 +-- apps/miniapp/src/pages/invite/index.vue | 165 ++--- apps/miniapp/src/pages/invite/poster.vue | 109 ++-- apps/miniapp/src/pages/invite/records.vue | 74 ++- apps/miniapp/src/pages/invite/withdraw.vue | 130 ++-- apps/miniapp/src/pages/invite/withdrawals.vue | 92 +-- .../src/pages/location-search/index.vue | 109 ++-- apps/miniapp/src/pages/login/index.vue | 18 +- .../src/pages/merchant-detail/index.vue | 605 +++++------------- apps/miniapp/src/pages/mine/index.vue | 299 ++++----- apps/miniapp/src/pages/order-create/index.vue | 270 ++++---- apps/miniapp/src/pages/order-detail/index.vue | 427 ++++++------ apps/miniapp/src/pages/order/index.vue | 306 ++++----- apps/miniapp/src/pages/room-detail/index.vue | 362 +++++++---- apps/miniapp/src/pages/search/index.vue | 283 ++++---- apps/miniapp/src/pages/seller/home.vue | 273 ++++---- .../miniapp/src/pages/seller/order-detail.vue | 209 +++--- apps/miniapp/src/pages/seller/orders.vue | 412 +++++++----- apps/miniapp/src/pages/seller/register.vue | 222 +++---- .../src/pages/seller/room-calendar.vue | 206 +++--- apps/miniapp/src/pages/seller/room-form.vue | 123 ++-- apps/miniapp/src/pages/seller/rooms.vue | 222 ++++--- apps/miniapp/src/pages/seller/shop-create.vue | 197 +++--- apps/miniapp/src/pages/seller/shop-edit.vue | 132 ++-- apps/miniapp/src/static/img/icon/activity.png | Bin 0 -> 6442 bytes .../src/static/img/icon/order-list.png | Bin 0 -> 5279 bytes apps/miniapp/src/static/img/icon/order.png | Bin 2871 -> 0 bytes apps/miniapp/src/static/styles/common.scss | 224 ++++--- .../src/static/styles/design-tokens.scss | 226 +++++++ apps/miniapp/src/static/styles/mixins.scss | 382 +++++++++++ apps/server/src/config/jwt.config.ts | 2 +- .../entities/mkt-user-invite-stats.entity.ts | 5 +- .../activity/activity-public.controller.ts | 67 ++ .../src/modules/activity/activity.module.ts | 3 +- .../review/review-seller.controller.ts | 6 +- database/migrations/001_init_schema.sql | 2 +- 70 files changed, 9783 insertions(+), 3303 deletions(-) create mode 100644 apps/miniapp/src/components/base/BaseButton.vue create mode 100644 apps/miniapp/src/components/base/BaseCard.vue create mode 100644 apps/miniapp/src/components/base/BaseModal.vue create mode 100644 apps/miniapp/src/components/base/EmptyState.vue create mode 100644 apps/miniapp/src/components/base/LoadingState.vue create mode 100644 apps/miniapp/src/components/base/StatusBadge.vue create mode 100644 apps/miniapp/src/components/business/ActionSheet.vue create mode 100644 apps/miniapp/src/components/business/DateRangeSelector.vue create mode 100644 apps/miniapp/src/components/business/FilterBar.vue create mode 100644 apps/miniapp/src/components/business/FormField.vue create mode 100644 apps/miniapp/src/components/business/GuestSelector.vue create mode 100644 apps/miniapp/src/components/business/ImageUploader.vue create mode 100644 apps/miniapp/src/components/business/MenuList.vue create mode 100644 apps/miniapp/src/components/business/MerchantCard.vue create mode 100644 apps/miniapp/src/components/business/MerchantHeader.vue create mode 100644 apps/miniapp/src/components/business/OrderCard.vue create mode 100644 apps/miniapp/src/components/business/OrderQuickNav.vue create mode 100644 apps/miniapp/src/components/business/PriceTag.vue create mode 100644 apps/miniapp/src/components/business/RatingStars.vue create mode 100644 apps/miniapp/src/components/business/ReviewCard.vue create mode 100644 apps/miniapp/src/components/business/SearchBar.vue create mode 100644 apps/miniapp/src/components/business/SectionHeader.vue create mode 100644 apps/miniapp/src/components/business/TagList.vue create mode 100644 apps/miniapp/src/components/business/ToolGrid.vue create mode 100644 apps/miniapp/src/components/business/UserProfile.vue create mode 100644 apps/miniapp/src/pages/activity/index.vue create mode 100644 apps/miniapp/src/static/img/icon/activity.png create mode 100644 apps/miniapp/src/static/img/icon/order-list.png delete mode 100644 apps/miniapp/src/static/img/icon/order.png create mode 100644 apps/miniapp/src/static/styles/design-tokens.scss create mode 100644 apps/miniapp/src/static/styles/mixins.scss create mode 100644 apps/server/src/modules/activity/activity-public.controller.ts diff --git a/.claude/settings.local.json b/.claude/settings.local.json index fe9d0de..0373277 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -25,7 +25,9 @@ "Bash(cat)", "Bash(node create-icons.js)", "Bash(curl -X POST http://localhost:3000/api/orders/1/pay -H \"Content-Type: application/json\" -H \"Authorization: Bearer test\" -d '{\"paymentMethod\":\"wechat\"}' -v)", - "Bash(curl -X POST http://localhost:3000/api/orders/1/pay -v)" + "Bash(curl -X POST http://localhost:3000/api/orders/1/pay -v)", + "Bash(xargs grep -l \"jwt\\\\|JWT\")", + "Bash(xargs grep -l \"invite\")" ] } } diff --git a/apps/merchant-admin/src/api/review.ts b/apps/merchant-admin/src/api/review.ts index 14cb5fd..9102776 100644 --- a/apps/merchant-admin/src/api/review.ts +++ b/apps/merchant-admin/src/api/review.ts @@ -1,4 +1,4 @@ -import request from './request'; +import request from '../utils/request'; export interface Review { id: number; diff --git a/apps/miniapp/src/api/user/invite.ts b/apps/miniapp/src/api/user/invite.ts index 75a2a00..2b4cd1f 100644 --- a/apps/miniapp/src/api/user/invite.ts +++ b/apps/miniapp/src/api/user/invite.ts @@ -1,25 +1,33 @@ -import { request } from '@/utils/request'; +import { get, post } from '@/utils/request'; + +// 获取活动列表 +export const getActivityList = () => + get('/activity/list'); + +// 获取邀请活动配置 +export const getInviteConfig = () => + get('/activity/invite/config'); // 获取我的邀请统计 export const getInviteStats = () => - request.get('/user/activity/invite/stats'); + get('/user/activity/invite/stats'); // 绑定邀请关系 export const bindInvitation = (inviteCode: string) => - request.post('/user/activity/invite/bind', { inviteCode }); + post('/user/activity/invite/bind', { inviteCode }); // 邀请记录列表 export const getInviteRecords = (params?: { page?: number; pageSize?: number }) => - request.get('/user/activity/invite/records', { params }); + get('/user/activity/invite/records', params); // 返现记录列表 export const getCashbackRecords = (params?: { page?: number; pageSize?: number }) => - request.get('/user/activity/invite/cashbacks', { params }); + get('/user/activity/invite/cashbacks', params); // 申请提现 export const createInviteWithdrawal = (amount: number) => - request.post('/user/activity/invite/withdraw', { amount }); + post('/user/activity/invite/withdraw', { amount }); // 提现记录列表 export const getInviteWithdrawals = (params?: { page?: number; pageSize?: number }) => - request.get('/user/activity/invite/withdrawals', { params }); + get('/user/activity/invite/withdrawals', params); diff --git a/apps/miniapp/src/components/RoomCard.vue b/apps/miniapp/src/components/RoomCard.vue index 865af9a..8ac6233 100644 --- a/apps/miniapp/src/components/RoomCard.vue +++ b/apps/miniapp/src/components/RoomCard.vue @@ -1,37 +1,76 @@ diff --git a/apps/miniapp/src/components/base/BaseButton.vue b/apps/miniapp/src/components/base/BaseButton.vue new file mode 100644 index 0000000..e0f7ee3 --- /dev/null +++ b/apps/miniapp/src/components/base/BaseButton.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/apps/miniapp/src/components/base/BaseCard.vue b/apps/miniapp/src/components/base/BaseCard.vue new file mode 100644 index 0000000..ca68a97 --- /dev/null +++ b/apps/miniapp/src/components/base/BaseCard.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/apps/miniapp/src/components/base/BaseModal.vue b/apps/miniapp/src/components/base/BaseModal.vue new file mode 100644 index 0000000..2b8dd6e --- /dev/null +++ b/apps/miniapp/src/components/base/BaseModal.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/apps/miniapp/src/components/base/EmptyState.vue b/apps/miniapp/src/components/base/EmptyState.vue new file mode 100644 index 0000000..b6adac9 --- /dev/null +++ b/apps/miniapp/src/components/base/EmptyState.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/apps/miniapp/src/components/base/LoadingState.vue b/apps/miniapp/src/components/base/LoadingState.vue new file mode 100644 index 0000000..eabead0 --- /dev/null +++ b/apps/miniapp/src/components/base/LoadingState.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/apps/miniapp/src/components/base/StatusBadge.vue b/apps/miniapp/src/components/base/StatusBadge.vue new file mode 100644 index 0000000..b9ae60f --- /dev/null +++ b/apps/miniapp/src/components/base/StatusBadge.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/apps/miniapp/src/components/business/ActionSheet.vue b/apps/miniapp/src/components/business/ActionSheet.vue new file mode 100644 index 0000000..5bf360a --- /dev/null +++ b/apps/miniapp/src/components/business/ActionSheet.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/apps/miniapp/src/components/business/DateRangeSelector.vue b/apps/miniapp/src/components/business/DateRangeSelector.vue new file mode 100644 index 0000000..11f1b93 --- /dev/null +++ b/apps/miniapp/src/components/business/DateRangeSelector.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/apps/miniapp/src/components/business/FilterBar.vue b/apps/miniapp/src/components/business/FilterBar.vue new file mode 100644 index 0000000..50347d2 --- /dev/null +++ b/apps/miniapp/src/components/business/FilterBar.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/apps/miniapp/src/components/business/FormField.vue b/apps/miniapp/src/components/business/FormField.vue new file mode 100644 index 0000000..39eda33 --- /dev/null +++ b/apps/miniapp/src/components/business/FormField.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/apps/miniapp/src/components/business/GuestSelector.vue b/apps/miniapp/src/components/business/GuestSelector.vue new file mode 100644 index 0000000..fc1aeba --- /dev/null +++ b/apps/miniapp/src/components/business/GuestSelector.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/apps/miniapp/src/components/business/ImageUploader.vue b/apps/miniapp/src/components/business/ImageUploader.vue new file mode 100644 index 0000000..75acf5b --- /dev/null +++ b/apps/miniapp/src/components/business/ImageUploader.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/apps/miniapp/src/components/business/MenuList.vue b/apps/miniapp/src/components/business/MenuList.vue new file mode 100644 index 0000000..b01ce96 --- /dev/null +++ b/apps/miniapp/src/components/business/MenuList.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/apps/miniapp/src/components/business/MerchantCard.vue b/apps/miniapp/src/components/business/MerchantCard.vue new file mode 100644 index 0000000..e503329 --- /dev/null +++ b/apps/miniapp/src/components/business/MerchantCard.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/apps/miniapp/src/components/business/MerchantHeader.vue b/apps/miniapp/src/components/business/MerchantHeader.vue new file mode 100644 index 0000000..829ae74 --- /dev/null +++ b/apps/miniapp/src/components/business/MerchantHeader.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/apps/miniapp/src/components/business/OrderCard.vue b/apps/miniapp/src/components/business/OrderCard.vue new file mode 100644 index 0000000..91e15af --- /dev/null +++ b/apps/miniapp/src/components/business/OrderCard.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/apps/miniapp/src/components/business/OrderQuickNav.vue b/apps/miniapp/src/components/business/OrderQuickNav.vue new file mode 100644 index 0000000..cf3e434 --- /dev/null +++ b/apps/miniapp/src/components/business/OrderQuickNav.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/apps/miniapp/src/components/business/PriceTag.vue b/apps/miniapp/src/components/business/PriceTag.vue new file mode 100644 index 0000000..5cf9d4a --- /dev/null +++ b/apps/miniapp/src/components/business/PriceTag.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/apps/miniapp/src/components/business/RatingStars.vue b/apps/miniapp/src/components/business/RatingStars.vue new file mode 100644 index 0000000..758e162 --- /dev/null +++ b/apps/miniapp/src/components/business/RatingStars.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/apps/miniapp/src/components/business/ReviewCard.vue b/apps/miniapp/src/components/business/ReviewCard.vue new file mode 100644 index 0000000..6657699 --- /dev/null +++ b/apps/miniapp/src/components/business/ReviewCard.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/apps/miniapp/src/components/business/SearchBar.vue b/apps/miniapp/src/components/business/SearchBar.vue new file mode 100644 index 0000000..41d05b2 --- /dev/null +++ b/apps/miniapp/src/components/business/SearchBar.vue @@ -0,0 +1,343 @@ + + + + + diff --git a/apps/miniapp/src/components/business/SectionHeader.vue b/apps/miniapp/src/components/business/SectionHeader.vue new file mode 100644 index 0000000..fddeed4 --- /dev/null +++ b/apps/miniapp/src/components/business/SectionHeader.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/apps/miniapp/src/components/business/TagList.vue b/apps/miniapp/src/components/business/TagList.vue new file mode 100644 index 0000000..a067eed --- /dev/null +++ b/apps/miniapp/src/components/business/TagList.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/apps/miniapp/src/components/business/ToolGrid.vue b/apps/miniapp/src/components/business/ToolGrid.vue new file mode 100644 index 0000000..5db6bad --- /dev/null +++ b/apps/miniapp/src/components/business/ToolGrid.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/apps/miniapp/src/components/business/UserProfile.vue b/apps/miniapp/src/components/business/UserProfile.vue new file mode 100644 index 0000000..31ef025 --- /dev/null +++ b/apps/miniapp/src/components/business/UserProfile.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/apps/miniapp/src/pages.json b/apps/miniapp/src/pages.json index ca28028..9006148 100644 --- a/apps/miniapp/src/pages.json +++ b/apps/miniapp/src/pages.json @@ -67,6 +67,13 @@ "navigationBarTitleText": "个人中心" } }, + { + "path": "pages/activity/index", + "style": { + "navigationBarTitleText": "活动", + "enablePullDownRefresh": true + } + }, { "path": "pages/seller/home", "style": { @@ -182,7 +189,7 @@ }, "tabBar": { "color": "#8a8a8a", - "selectedColor": "#6b4d9e", + "selectedColor": "#FF6B35", "backgroundColor": "#ffffff", "borderStyle": "white", "list": [ @@ -192,15 +199,21 @@ "iconPath": "static/img/icon/home.png", "selectedIconPath": "static/img/icon/home.png" }, + { + "pagePath": "pages/activity/index", + "text": "活动", + "iconPath": "static/img/icon/activity.png", + "selectedIconPath": "static/img/icon/activity.png" + }, { "pagePath": "pages/order/index", - "text": "服务", - "iconPath": "static/img/icon/order.png", - "selectedIconPath": "static/img/icon/order.png" + "text": "订单", + "iconPath": "static/img/icon/order-list.png", + "selectedIconPath": "static/img/icon/order-list.png" }, { "pagePath": "pages/mine/index", - "text": "会员", + "text": "我的", "iconPath": "static/img/icon/my.png", "selectedIconPath": "static/img/icon/my.png" } diff --git a/apps/miniapp/src/pages/about/index.vue b/apps/miniapp/src/pages/about/index.vue index 708f019..fed946e 100644 --- a/apps/miniapp/src/pages/about/index.vue +++ b/apps/miniapp/src/pages/about/index.vue @@ -168,9 +168,11 @@ function showAgreement(name: string) { diff --git a/apps/miniapp/src/pages/activity/index.vue b/apps/miniapp/src/pages/activity/index.vue new file mode 100644 index 0000000..3d1a61b --- /dev/null +++ b/apps/miniapp/src/pages/activity/index.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/apps/miniapp/src/pages/agreement/index.vue b/apps/miniapp/src/pages/agreement/index.vue index a1bbb87..d33a015 100644 --- a/apps/miniapp/src/pages/agreement/index.vue +++ b/apps/miniapp/src/pages/agreement/index.vue @@ -434,9 +434,11 @@ function goBack() { diff --git a/apps/miniapp/src/pages/index/index.vue b/apps/miniapp/src/pages/index/index.vue index be0a9e7..395d096 100644 --- a/apps/miniapp/src/pages/index/index.vue +++ b/apps/miniapp/src/pages/index/index.vue @@ -1,91 +1,122 @@