diff --git a/src/bundle/order/after-sales/after-sales.vue b/src/bundle/order/after-sales/after-sales.vue
index feb34aa..47b0084 100644
--- a/src/bundle/order/after-sales/after-sales.vue
+++ b/src/bundle/order/after-sales/after-sales.vue
@@ -17,7 +17,15 @@
请耐心等待,我们会尽快处理您的请求
- 退款成功¥128.00
+
+
+ 退款成功¥128.00
+
+
+ 退款成功¥128.00
+
+
+
谢谢您的信任,我们一定会做的更好
2025年4月13日 18:22
@@ -31,14 +39,25 @@
-
+
+
这是团购套餐的可以点击进
+
+
+ 这是茶艺师名称
+ ¥324.22
+
3小时
x1
+
+
+ 车马费(¥3.00元/公里)
+ ¥30.90
+
实付
¥29.32
@@ -74,36 +93,11 @@
售后订单
-
+
售后原因
买多了/买错了
-
- 退款金额
- ¥159.22
-
-
- 申请时间
- 2019-05-16 13:20:26
-
-
- 退款编号
-
- 7327328627526903
-
- 复制
-
-
-
-
-
-
- 售后订单
-
- 售后原因
- 买多了/买错了
-
-
+
退款金额
¥159.22
@@ -122,19 +116,23 @@
-
-
-
-
- 联系商家
- 联系平台
-
+
+
+
+
+ 联系商家
+ 联系平台
+
-
-
- 提交
+
+
+ 提交
+
-
@@ -165,11 +163,142 @@
确定
+
+
+
+
+
+
+
+ 费用明细
+
+
+
+
+
+
+
+ 茶艺师总费用
+
+ ¥640.00
+
+
+
+
+
+
+
+
+
+
+
+ 服务费
+ ¥640.00
+
+
+ 服务费(¥160元/小时)
+ x4
+
+
+
+
+ 车马费
+ ¥640.00
+
+
+ 车马费(¥160元/公里)
+ 10.3公里
+
+
+
+
+ 茶艺服务
+ ¥640.00
+
+
+ 红茶/绿茶/福鼎白茶/铁观音
+ ¥158
+
+
+ 茶具使用
+ ¥20
+
+
+
+
+ 优惠
+ -¥20.00
+
+
+ 优惠券
+ -¥20.00
+
+
+
+
+
+
+
+
+
+ 扣除费用
+
+ ¥640.00
+
+
+
+
+
+
+
+
+
+
+
+ 50%服务费
+ ¥640.00
+
+
+
+
+ 车马费
+ ¥640.00
+
+
+
+
+ 优惠券
+ -¥20.00
+
+
+
+
+
+
+
+ 扣款规则说明
+
+ 1)茶艺师未出发,100%退款;
+ 2)茶艺师已出发未到达目的地,不退车马费;
+ 3)茶艺师出发并到达目的地,不退车马费,并且支付茶艺师50%服务费。
+
+
+
+
+
+
+
+
+ 实际退款
+ ¥698.90
+
+
+
@@ -243,4 +383,18 @@
background-repeat: no-repeat;
background-size: 100% 100%;
}
+
+ .collapse {
+ :deep() {
+ .wd-collapse-item::after,
+ .wd-collapse-item__header.is-expanded::after {
+ background: none !important;
+ }
+
+ .wd-collapse-item__body {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+ }
+ }
+ }
diff --git a/src/bundle/order/tea-specialist/order-detail.vue b/src/bundle/order/tea-specialist/order-detail.vue
index a7e48df..a5e14b1 100644
--- a/src/bundle/order/tea-specialist/order-detail.vue
+++ b/src/bundle/order/tea-specialist/order-detail.vue
@@ -19,8 +19,7 @@
使用过程中有任何问题,请联系客服
-
-
+
@@ -62,6 +61,7 @@
+
地图显示
@@ -77,7 +77,7 @@
-
+
服务方式
@@ -87,12 +87,12 @@
服务方式
到店服务
-
+
服务门店
茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称
- 门店地址
+ {{ orderStatus === ReserveCategoryOrderStatus.Serving ? '门店地址' : '服务地址' }}
青浦区仓桥路478号
@@ -100,7 +100,7 @@
-
+
@@ -133,19 +133,17 @@
-
-
-
+
确认订单
再次预定
+
+
+ 申请退款
+ 联系客服
+
@@ -155,40 +153,58 @@
+
续订包间
-
- 续订时间
-
-
- {{ item.time }}
+
+
+ 续订时间
+
+
+ {{ item.time }}
+
-
-
- 支付方式
-
-
-
-
-
- {{ item.name }}
-
-
-
- 可用202.22
-
-
+
+ 续订茶叶
+ 支持多选
+
+
+
+ {{item.title}}
+ {{item.price}}
-
+
-
-
+
+ 支付方式
+
+
+
+
+
+ {{ item.name }}
+
+
+
+ 可用202.22
+
+
+
+
+
+
+
+
+
@@ -218,11 +234,29 @@
- 包间续订成功
+ 茶艺师续订成功
可以刷新页面查看预约时间
好的
+
+
+
+
+ 确定申请退款吗?
+ 退款按照如下规则,请谨慎操作。
+
+ 1)茶艺师未出发,100%退款;
+ 2)茶艺师已出发未到达目的地,不退车马费;
+ 3)茶艺师出发并到达目的地,不退车马费,并且支付茶艺师50%服务费。
+
+
+
+ 取消
+ 确定退款
+
+
+
@@ -234,8 +268,11 @@
const title = ref('')
const orderStatus = ref('') // 订单状态:待使用、退款等
+ const showRefundRule = ref(false) // 退款规则弹窗
- /** 续订包间 **/
+
+
+ /** 续订 **/
const showRenewPopup = ref(false)
const timeList = [
{id: 1, time: '1小时'},
@@ -264,6 +301,16 @@
}
])
+ const teaList = [
+ {id: 1, title: '红茶(3泡)', price: '¥128.00'},
+ {id: 2, title: '铁观音(3泡)', price: '¥128.00'},
+ {id: 3, title: '红茶(3泡)', price: '¥128.00'},
+ {id: 4, title: '红茶(3泡)', price: '¥128.00'},
+ {id: 5, title: '红茶(3泡)', price: '¥128.00'},
+ ]
+ const selectedRenewTea = ref>([]) // 选择的续订时间
+
+
const showRenewSuccessPopup = ref(false)
/** 结束 **/
@@ -273,16 +320,35 @@
})
const orderDetail = {
-
// 确认订单
handleConfirmOrder: () => {
},
+ // 续订茶艺师
+ handleToggleRenewTea: (id: number) => {
+ const idx = selectedRenewTea.value.indexOf(id)
+ if (idx > -1) {
+ selectedRenewTea.value.splice(idx, 1) // 已选中则移除
+ } else {
+ selectedRenewTea.value.push(id) // 未选中则添加
+ }
+ },
+
// 再次预定
handleAgainReeserve: () => {
showRenewSuccessPopup.value = true
showRenewPopup.value = false
- }
+ },
+
+ // 申请退款
+ handleConfirmRefund: () => {
+ },
+
+
+ // 联系客服
+ handleService: () => {
+
+ },
}
diff --git a/src/bundle/profile/profile.vue b/src/bundle/profile/profile.vue
new file mode 100644
index 0000000..1b7b117
--- /dev/null
+++ b/src/bundle/profile/profile.vue
@@ -0,0 +1,173 @@
+
+{
+ "layout": "default",
+ "style": {
+ "navigationStyle": "custom"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+ 头像
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 昵称
+
+
+
+ 王小伟
+
+
+
+
+
+
+
+
+
+
+ 修改手机号
+
+
+
+ +86 155****5456
+
+
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+ 修改昵称
+
+
+
+
+
+ 昵称
+
+
+
+
+
+ 昵称限制1-10字符,一个汉字为一个字符
+
+ 保存
+
+
+
+
+
+
+ 您确定要退出该账号吗?
+
+
+ 退出登录
+
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/bundle/reserve-room/room.vue b/src/bundle/reserve-room/room.vue
index 80fe60b..7ac6242 100644
--- a/src/bundle/reserve-room/room.vue
+++ b/src/bundle/reserve-room/room.vue
@@ -23,7 +23,7 @@
-
+
+
@@ -104,6 +105,7 @@
点击二维码添加客服
+
diff --git a/src/bundle/vip-benefits/vip-benefits.vue b/src/bundle/vip-benefits/vip-benefits.vue
new file mode 100644
index 0000000..a9b4ad5
--- /dev/null
+++ b/src/bundle/vip-benefits/vip-benefits.vue
@@ -0,0 +1,151 @@
+
+{
+ // "needLogin": true,
+ "layout": "default",
+ "style": {
+ "navigationStyle": "custom"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 会员权益
+ 合伙人权益
+
+ 2026.03.06到期
+
+
+
+ 成为会员可以享受以下权益
+
+
+
+ 本月消费
+ ¥23014.02
+
+
+
+
+
+
+
+
+
+
+ 会员权益
+
+
+
+
+
+
+ 茶室预定
+ 预定茶室享受八折优惠
+
+
+
+
+
+
+
+
+ 优惠券
+ 当月消费满一定额度,次月可以领取等级优惠券
+
+
+
+
+
+ 消费金额
+ 优惠券
+
+
+ ¥10000
+ 150元优惠券
+
+
+ ¥20000
+ 350元优惠券
+
+
+
+
+
+
+
+
+ 服务权益
+ ✓.尊享20个VIP名额(价值7980元)
+ ✓.下级VIP消费金额5%永久提成,构建持续收益管道
+
+
+
+
+
+
+ 立即成为会员 ¥499/年
+
+
+
+
+
+
+
+
+
diff --git a/src/components/navbar.vue b/src/components/navbar.vue
index 5dc6b31..a1e6e4f 100644
--- a/src/components/navbar.vue
+++ b/src/components/navbar.vue
@@ -3,7 +3,9 @@
-
+
+
+
{{ title }}
@@ -65,6 +67,12 @@
zIndex: {
type: Number,
default: 10
+ },
+
+ // icon left 的颜色
+ iconLeftColor: {
+ type: String,
+ default: '#121212'
}
})
diff --git a/src/pages.json b/src/pages.json
index b208ede..e977a27 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -179,6 +179,14 @@
"navigationBarTitleText": "分包页面"
}
},
+ {
+ "path": "profile/profile",
+ "type": "page",
+ "layout": "default",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "reserve-room/choose-room-reserve",
"type": "page",
@@ -219,6 +227,14 @@
"navigationStyle": "custom"
}
},
+ {
+ "path": "vip-benefits/vip-benefits",
+ "type": "page",
+ "layout": "default",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "order/after-sales/after-sales",
"type": "page",
diff --git a/src/pages/login/mobile.vue b/src/pages/login/mobile.vue
index e58c6a4..3dd46a7 100644
--- a/src/pages/login/mobile.vue
+++ b/src/pages/login/mobile.vue
@@ -10,9 +10,9 @@
- 其他手机号登录
+ {{ page.title }}
- 请输入你要登录的手机号
+ {{ page.desc }}
@@ -59,7 +59,7 @@
登录
-
+
@@ -67,6 +67,20 @@
我已阅读并同意 《服务协议》 和《隐私政策》
+
+
+
+
+
+
+
+
+
+ 手机号修改成功
+ {{ page.desc }}
+ 好的
+
+
@@ -75,15 +89,24 @@
import {mobile as testMobile} from '@/utils/test'
import { useToast } from 'wot-design-uni'
+ const OSS = inject('OSS')
const toast = useToast()
const disabled = ref(true)
- // 验证码倒计时
+ /** 页面 **/
+ let pageType = 'login' // 页面类型 login:登录 edit:修改手机号
+ const page = ref<{title: string, desc: string}>({title: '其他手机号登录', desc: '请输入你要登录的手机号'})
+ const showEditSuccessPopup = ref(false) // 显示手机号修改成功弹窗
+ const userId = ref(0) // 用户ID,修改手机号时需要传
+ /** 结束 **/
+
+ /** 验证码倒计时 **/
const countDownTime = ref(1 * 60 * 1000) // 60s倒计时
const startCountDown = ref(false) // 是否开始倒计时
const countDown = ref(null) // 倒计时组件
+ /** 结束 **/
- // 表单相关
+ /** 表单相关 **/
const model = reactive<{
mobile: string
code: string
@@ -91,9 +114,22 @@
mobile: '',
code: ''
})
+ /** 结束 **/
- // 服务协议和隐私政策
+ /** 服务协议和隐私政策 **/
const agree = ref(false)
+ /** 结束 **/
+
+ onLoad((args) => {
+ // 从个人登录页面进入
+ if (args.type === 'edit') {
+ userId.value = Number(args.userId) || 0 // userId仅做测试使用,实际请传真实用户ID
+
+ page.value.title = '修改手机号'
+ page.value.desc = '手机号一年内可修改2次'
+ pageType = 'edit'
+ }
+ })
const mobile = {
// 验证手机号
@@ -128,6 +164,17 @@
// 登录
handleToLogin: () => {
+ // TODO 如果是edit的话就是修改手机号
+
+ if (pageType === 'login' && !agree.value) {
+ toast.show({
+ iconClass: 'info-circle',
+ msg: '请同意服务协议和隐私政策',
+ direction: 'vertical'
+ })
+ return
+ }
+
if (!testMobile(model.mobile)) {
toast.show({
iconClass: 'info-circle',
@@ -166,6 +213,11 @@
handleToPrivacy: () => {
},
+
+ // 修改手机成功后返回
+ handleToBack: () => {
+ uni.navigateBack()
+ }
}
diff --git a/src/pages/my/my.vue b/src/pages/my/my.vue
index 1ce83f0..811af80 100644
--- a/src/pages/my/my.vue
+++ b/src/pages/my/my.vue
@@ -1,16 +1,18 @@
-{
- "layout": "tabbar",
- "style": {
- "navigationStyle": "custom"
+
+ {
+ "layout": "tabbar",
+ "style": {
+ "navigationStyle": "custom"
+ }
}
-}
+
-
+
@@ -20,16 +22,16 @@
-
+
-
+
{{ isLogin ? '王大帅' : '立即登录' }}
-
-
+
+
茶址会员
@@ -37,9 +39,9 @@
-
-
-
+
+
+
推广码
@@ -80,7 +82,7 @@
-
+
2026.03.06到期
@@ -109,8 +111,9 @@
20
满200可用
-
- 立即领取
+
+ {{ isClaimCoupon ? '已领取' : '立即领取' }}
@@ -202,17 +205,45 @@
+
+
+
+
+
+
+
+
+
+
+
+ 我的推广码
+ 3486
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/reserve/reserve.vue b/src/pages/reserve/reserve.vue
index f5cbeec..dca75ec 100644
--- a/src/pages/reserve/reserve.vue
+++ b/src/pages/reserve/reserve.vue
@@ -166,9 +166,11 @@
.home-bg {
background-color: $cz-page-background;
background-image: url(#{$OSS}images/home/home_bg.png);
- background-size: 100% 280rpx;
+ // background-size: 100% 300rpx;
+ background-size: cover;
background-repeat: no-repeat;
- background-position: top center;
+ padding-bottom: 20rpx;
+ // background-position: top center;
}
.search-box {
diff --git a/src/router/interceptor.ts b/src/router/interceptor.ts
index dc6ca40..3842f8a 100644
--- a/src/router/interceptor.ts
+++ b/src/router/interceptor.ts
@@ -12,66 +12,66 @@ import { needLoginPages as _needLoginPages, getLastPage, getNeedLoginPages } fro
const loginRoute = import.meta.env.VITE_LOGIN_URL
function isLogined() {
- const userStore = useUserStore()
- return !!userStore.userInfo.username
+ const userStore = useUserStore()
+ return !!userStore.userInfo.username
}
const isDev = import.meta.env.DEV
// 黑名单登录拦截器 - (适用于大部分页面不需要登录,少部分页面需要登录)
export const navigateToInterceptor = {
- // 注意,这里的url是 '/' 开头的,如 '/pages/index/index',跟 'pages.json' 里面的 path 不同
- // 增加对相对路径的处理,BY 网友 @ideal
- invoke({ url }: { url: string }) {
- // console.log(url) // /pages/route-interceptor/index?name=feige&age=30
- let path = url.split('?')[0]
+ // 注意,这里的url是 '/' 开头的,如 '/pages/index/index',跟 'pages.json' 里面的 path 不同
+ // 增加对相对路径的处理,BY 网友 @ideal
+ invoke({ url }: { url: string }) {
+ // console.log(url) // /pages/route-interceptor/index?name=feige&age=30
+ let path = url.split('?')[0]
- // 处理相对路径
- if (!path.startsWith('/')) {
- const currentPath = getLastPage().route
- const normalizedCurrentPath = currentPath.startsWith('/') ? currentPath : `/${currentPath}`
- const baseDir = normalizedCurrentPath.substring(0, normalizedCurrentPath.lastIndexOf('/'))
- path = `${baseDir}/${path}`
- }
+ // 处理相对路径
+ if (!path.startsWith('/')) {
+ const currentPath = getLastPage().route
+ const normalizedCurrentPath = currentPath.startsWith('/') ? currentPath : `/${currentPath}`
+ const baseDir = normalizedCurrentPath.substring(0, normalizedCurrentPath.lastIndexOf('/'))
+ path = `${baseDir}/${path}`
+ }
- let needLoginPages: string[] = []
- // 为了防止开发时出现BUG,这里每次都获取一下。生产环境可以移到函数外,性能更好
- if (isDev) {
- needLoginPages = getNeedLoginPages()
- }
- else {
- needLoginPages = _needLoginPages
- }
- const isNeedLogin = needLoginPages.includes(path)
- if (!isNeedLogin) {
- return true
- }
- const hasLogin = isLogined()
- if (hasLogin) {
- return true
- }
- tabbarStore.restorePrevIdx()
- const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
- uni.navigateTo({ url: redirectRoute })
- return false
- },
+ let needLoginPages: string[] = []
+ // 为了防止开发时出现BUG,这里每次都获取一下。生产环境可以移到函数外,性能更好
+ if (isDev) {
+ needLoginPages = getNeedLoginPages()
+ }
+ else {
+ needLoginPages = _needLoginPages
+ }
+ const isNeedLogin = needLoginPages.includes(path)
+ if (!isNeedLogin) {
+ return true
+ }
+ const hasLogin = isLogined()
+ if (hasLogin) {
+ return true
+ }
+ tabbarStore.restorePrevIdx()
+ const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
+ uni.navigateTo({ url: redirectRoute })
+ return false
+ },
}
export const routeInterceptor = {
- install() {
- uni.addInterceptor('navigateTo', navigateToInterceptor)
- uni.addInterceptor('reLaunch', navigateToInterceptor)
- uni.addInterceptor('redirectTo', navigateToInterceptor)
- uni.addInterceptor('switchTab', navigateToInterceptor)
+ install() {
+ uni.addInterceptor('navigateTo', navigateToInterceptor)
+ uni.addInterceptor('reLaunch', navigateToInterceptor)
+ uni.addInterceptor('redirectTo', navigateToInterceptor)
+ uni.addInterceptor('switchTab', navigateToInterceptor)
- // // #ifdef H5
- // // 一个粗糙的实现方式,不满意可以自行修改:https://github.com/unibest-tech/unibest/issues/192
- // // H5环境路由拦截,监听hashchange事件
- // window.addEventListener('hashchange', () => {
- // // 获取当前路径
- // const currentPath = `/${window.location.hash.split('#/')[1]?.split('?')[0]}`
- // navigateToInterceptor.invoke({ url: currentPath })
- // })
- // // #endif
- },
+ // // #ifdef H5
+ // // 一个粗糙的实现方式,不满意可以自行修改:https://github.com/unibest-tech/unibest/issues/192
+ // // H5环境路由拦截,监听hashchange事件
+ // window.addEventListener('hashchange', () => {
+ // // 获取当前路径
+ // const currentPath = `/${window.location.hash.split('#/')[1]?.split('?')[0]}`
+ // navigateToInterceptor.invoke({ url: currentPath })
+ // })
+ // // #endif
+ },
}