diff --git a/src/App.vue b/src/App.vue index 6828f57..9c47302 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,10 +15,6 @@ else { navigateToInterceptor.invoke({ url: '/' }) } - - // 微信静默授权 - // await snsapiBaseAuthorize() - // await initJweixinSDK() }) onShow((options) => { console.log('App Show', options) diff --git a/src/api/pay.ts b/src/api/pay.ts new file mode 100644 index 0000000..b92170b --- /dev/null +++ b/src/api/pay.ts @@ -0,0 +1,16 @@ +import { http } from '@/http/alova' + +/** + * 给茶艺师打赏 + */ +interface ITipTeaSpecialistParams { + id: number + tip_price: number + pay_type: number +} + +export function payTipTeaSpecialist(data: ITipTeaSpecialistParams) { + return http.Post('/api/Teamaster/giveTeamasterTipAmount', + data + ) +} \ No newline at end of file diff --git a/src/api/tea.ts b/src/api/tea.ts index b4b2da3..5d5670d 100644 --- a/src/api/tea.ts +++ b/src/api/tea.ts @@ -6,9 +6,9 @@ import type { ITeaSpecialistDetailsResult } from '@/api/types/tea' */ export interface ITeaSpecialistDetailsParams { id: number - longitude: number - latitude: number - user_id: number + longitude: number | '' + latitude: number | '' + user_id: number | '' } export function getTeaSpecialistDetails(data: ITeaSpecialistDetailsParams) { @@ -32,4 +32,11 @@ export function collectTeaSpecialist(data: ICollectTeaSpecialistParams) { return http.Post('/api/Teamaster/teamasterCollect', data ) +} + +/** + * 获取打赏金额 + */ +export function getTeaSpecialistRewardAmounts() { + return http.Post('/api/Teamaster/teamasterTipAmount') } \ No newline at end of file diff --git a/src/api/types/tea.ts b/src/api/types/tea.ts index 4610a77..cc0d2eb 100644 --- a/src/api/types/tea.ts +++ b/src/api/types/tea.ts @@ -27,4 +27,13 @@ export interface ITeaSpecialistDetailsFields { price: number fare_price: number collect: number -} \ No newline at end of file +} + +/** + * 茶艺师打赏金额 + */ +export interface ITeaSpecialistRewardAmountsResult { + id: number + status: number + tip_price: number +} diff --git a/src/api/types/user.ts b/src/api/types/user.ts new file mode 100644 index 0000000..bf34fd6 --- /dev/null +++ b/src/api/types/user.ts @@ -0,0 +1,42 @@ +/** + * 用户信息结果类型 + */ +export interface IUserInfoResult { + account: string + avatar: string + create_time: string + has_auth: boolean + has_password: boolean + id: number + mobile: string + nickname: string + real_name: string + sex: string + sn: number + user_money: string + version: number +} + +/** + * 地址列表 + */ +export interface IUserAddressListResult { + id: number + contact: string + telephone: string + province: string + province_id: number + city: string + city_id: number + district: string + district_id: number + address: string + is_default: number +} + +/** + * 地址详情 + */ +export interface IUserAddressDetailsResult extends IUserAddressListResult { + address_details: IUserAddressListResult +} \ No newline at end of file diff --git a/src/api/user.ts b/src/api/user.ts new file mode 100644 index 0000000..8c27885 --- /dev/null +++ b/src/api/user.ts @@ -0,0 +1,75 @@ +import { http } from '@/http/alova' +import type { IUserAddressListResult, IUserAddressDetailsResult } from '@/api/types/user' + + +/** + * 获取用户个人信息 + */ +export function getUserInfo() { + return http.Post('/api/user/info') +} + +/** + * 获取优惠券列表 + */ +export function getUserCoupons() { + return http.Post('/api/UserCoupon/UserCoupinList') +} + +/** + * 获取用户地址 + */ +export function getUserAddress() { + return http.Post('/api/user/addressList') +} + +/** + * 用户添加地址 + */ +export interface IAddUserAddressParams { + contact: string + telephone: string + province: string + province_id?: number + city: string + city_id?: number + district: string + district_id?: number + address: string + is_default: number +} + +export function addUserAddress(data: IAddUserAddressParams) { + return http.Post('/api/user/addAddress', data) +} + +/** + * 编辑用户地址 + */ +export interface IEditUserAddressParams extends IAddUserAddressParams { + id: number +} + +export function editUserAddress(data: IAddUserAddressParams) { + return http.Post('/api/user/editAddress', data) +} + +/** + * 删除用户地址 + */ +export interface IDeleteUserAddressParams { + id: number +} + +export function deleteUserAddress(data: IDeleteUserAddressParams) { + return http.Post('/api/user/delAddress', data) +} + +/** + * 获取地址详情 + */ + +export interface IUserAddressDetailsParams extends IDeleteUserAddressParams {} +export function userAddressDetails(data: IUserAddressDetailsParams) { + return http.Post('/api/user/addressDetails', data) +} diff --git a/src/components/Pay.vue b/src/components/Pay.vue index b916c78..6415727 100644 --- a/src/components/Pay.vue +++ b/src/components/Pay.vue @@ -12,7 +12,7 @@ {{ item.name }} - 可用202.22 + 可用{{ userInfo.user_money }} @@ -24,12 +24,37 @@ * Pay 支付组件 * @description 用于展示支付 */ - import { PayList as OriginPayList, PayCategory, PayValue } from '@/utils/pay' + import { IUserInfoResult } from '@/api/types/user' + import { getUserInfo } from '@/api/user' const OSS = inject('OSS') const pay = ref() // 支付方式 + // 当前用户信息 + const userInfo = reactive({ + account: '', + avatar: '', + create_time: '', + has_auth: false, + has_password: false, + id: 0, + mobile: '', + nickname: '', + real_name: '', + sex: '', + sn: 0, + user_money: '', + version: 0 + }) + + onMounted(async () => { + // 获取个人用户信息 + const userRes = await getUserInfo() + Object.assign(userInfo, userRes || {}) + + }) + const props = defineProps({ // 是否隐藏平台余额支付 hidePlatformBalance: { @@ -52,6 +77,7 @@ // 定义emit事件 const emit = defineEmits(['pay']) + const Pay = { // 支付方式改变 handleChangePay(e: {value: number}) { @@ -71,6 +97,7 @@ watch(PayList, (list) => { if (list.length > 0) { pay.value = list[0].value + emit('pay', pay.value ) } else { pay.value = undefined } diff --git a/src/hooks/useWeiXin.ts b/src/hooks/useWeiXin.ts index 087363d..692f142 100644 --- a/src/hooks/useWeiXin.ts +++ b/src/hooks/useWeiXin.ts @@ -1,7 +1,7 @@ import {wxSnsapiBaseLogin} from '@/api/login' import { useUserStore } from '@/store' import type { IUserInfoVo } from '@/api/types/login' -import { jump, NAVIGATE_TO } from '@/utils/tools' +import { router } from '@/utils/tools' import { toast } from '@/utils/toast' /** @@ -27,17 +27,17 @@ export const getUrlCode = (): { [key: string]: string | undefined } => { */ export async function snsapiBaseAuthorize() { // TODO 测试代码 - // wxSnsapiBaseLogin({code: '001Vgi0w3dwIP538nE1w32v6j83Vgi0X'}).then((res: IUserInfoVo) => { - // console.log("登录成功 ~ snsapiBaseAuthorize ~ res:", res) - // // 映射 IUserLogin 到 IUserInfoVo - // useUserStore().setUserInfo(res) - // }).catch(err => { - // // 失败就重新授权 - // uni.setStorageSync('wechatCode', 0) - // console.log('请求失败', err) - // }) + wxSnsapiBaseLogin({code: '0617Y41007CraV1LKJ300cvi1P27Y41I'}).then((res: IUserInfoVo) => { + console.log("登录成功 ~ snsapiBaseAuthorize ~ res:", res) + // 映射 IUserLogin 到 IUserInfoVo + useUserStore().setUserInfo(res) + }).catch(err => { + // 失败就重新授权 + uni.setStorageSync('wechatCode', 0) + console.log('请求失败', err) + }) - // return + return let local = window.location.href // 获取页面url let appid = import.meta.env.VITE_WX_SERVICE_ACCOUNT_APPID // 公众号的APPID @@ -66,7 +66,7 @@ export async function snsapiBaseAuthorize() { if (!res.mobile) { // 如果没有绑定手机号的话需要去绑定手机号 toast.info('请先绑定手机号') - jump('/pages/login/mobile', NAVIGATE_TO, 500) + router.navigateTo('/pages/login/mobile', 500) } else { uni.$emit('loginSuccess') } diff --git a/src/http/alova.ts b/src/http/alova.ts index 2dc5fb3..4004b9f 100644 --- a/src/http/alova.ts +++ b/src/http/alova.ts @@ -7,7 +7,7 @@ import VueHook from 'alova/vue' import { toast } from '@/utils/toast' import { ContentTypeEnum, ResultEnum, ShowMessage } from './tools/enum' import { useUserStore } from '@/store' -import { jump, SWITCH_TAB, NAVIGATE_TO } from '@/utils/tools' +import { router } from '@/utils/tools' // 配置动态Tag export const API_DOMAINS = { @@ -72,13 +72,13 @@ const alovaInstance = createAlova({ if (!token) { toast.info('请先登录') - jump('/pages/my/my', SWITCH_TAB, 500) + router.switchTab('/pages/my/my', 500) throw new Error('[请求错误]:未登录') } if (!mobile) { toast.info('请先绑定手机号') - jump('/pages/login/mobile', NAVIGATE_TO, 500) + router.navigateTo('/pages/login/mobile', 500) throw new Error('[请求错误]:未绑定手机号') } @@ -121,15 +121,13 @@ const alovaInstance = createAlova({ // 处理业务逻辑错误 const { code, msg, data } = rawData as IResponse - // if (code === ResultEnum.Unauthorized) { - // if (config.meta?.toast !== false) { - // toast.info(msg) - // setTimeout(() => { - // uni.navigateTo({ url: '/pages/login/mobile' }) - // }) - // } - // throw new Error(`登录超时[${code}]:${msg}`) - // } + if (code === ResultEnum.Unauthorized) { + if (config.meta?.toast !== false) { + toast.info(msg) + router.switchTab('/pages/my/my') + } + throw new Error(`登录超时[${code}]:${msg}`) + } if (code === ResultEnum.Success) { if (config.meta?.toast !== false && msg) { diff --git a/src/pages.json b/src/pages.json index 5b91710..e4be616 100644 --- a/src/pages.json +++ b/src/pages.json @@ -143,8 +143,7 @@ "type": "page", "layout": "default", "style": { - "navigationBarTitleText": "", - "navigationBarBackgroundColor": "#fff" + "navigationStyle": "custom" } }, { diff --git a/src/pages/address/add.vue b/src/pages/address/add.vue index cfd7c43..8ebfbd9 100644 --- a/src/pages/address/add.vue +++ b/src/pages/address/add.vue @@ -11,7 +11,7 @@ diff --git a/src/pages/address/list.vue b/src/pages/address/list.vue index 67c830a..b9cc02f 100644 --- a/src/pages/address/list.vue +++ b/src/pages/address/list.vue @@ -11,12 +11,12 @@ diff --git a/src/pages/cashier/cashier.vue b/src/pages/cashier/cashier.vue index 05c0b3c..e36f684 100644 --- a/src/pages/cashier/cashier.vue +++ b/src/pages/cashier/cashier.vue @@ -6,25 +6,23 @@ } } - - diff --git a/src/pages/index/detail.vue b/src/pages/index/detail.vue index 58dd84b..fd93072 100644 --- a/src/pages/index/detail.vue +++ b/src/pages/index/detail.vue @@ -31,10 +31,10 @@ - + - - 其他金额 + + 其他金额 打赏 @@ -42,10 +42,9 @@ @@ -60,8 +59,8 @@ 打赏金额将给到茶艺师,是您自愿对于茶艺师的赠与 - 在想想 - 打赏 + 在想想 + 打赏 @@ -79,9 +78,9 @@ - + @@ -265,7 +264,7 @@ 打赏 - 立即预定 + 立即预定 @@ -274,13 +273,14 @@ diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 17ea554..0fdad77 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -160,6 +160,7 @@ import {getDecorate, getTeaSpecialistLevels, getTeaSpecialist} from '@/api/home' import {getCity} from '@/api/city' import type { IIndexListResult } from '@/api/types/home' + import { router } from '@/utils/tools' const OSS = inject('OSS') @@ -259,9 +260,7 @@ // 跳转到预约茶艺师页面 handleToReserveTeaSpecialist: (id: number = 1) => { - uni.navigateTo({ - url: `/pages/index/detail?id=${id}&lat=${latitude.value}&lng=${longitude.value}` - }) + router.navigateTo(`/pages/index/detail?id=${id}&lat=${latitude.value}&lng=${longitude.value}`) }, // 选择茶艺师等级 @@ -280,9 +279,7 @@ // 跳转到团体预约页面 handleToGroupReserve: () => { - uni.navigateTo({ - url: '/pages/reserve/group-tea-specialist' - }) + router.navigateTo('/pages/reserve/group-tea-specialist') } } diff --git a/src/pages/my/my.vue b/src/pages/my/my.vue index 63c3cf2..c356bd3 100644 --- a/src/pages/my/my.vue +++ b/src/pages/my/my.vue @@ -182,7 +182,7 @@ import { toast } from '@/utils/toast' import { useUserStore } from '@/store' import { getUrlCode, snsapiBaseAuthorize } from '@/hooks/useWeiXin' - import { jump, NAVIGATE_TO } from '@/utils/tools' + import { router, NAVIGATE_TO } from '@/utils/tools' const OSS = inject('OSS') const navbarHeight = inject('navbarHeight') diff --git a/src/pages/notice/reserve.vue b/src/pages/notice/reserve.vue index 06ae354..9690fcd 100644 --- a/src/pages/notice/reserve.vue +++ b/src/pages/notice/reserve.vue @@ -1,8 +1,7 @@ { "layout": "default", "style": { - "navigationBarTitleText": "", - "navigationBarBackgroundColor": "#fff" + "navigationStyle": "custom" } } @@ -28,13 +27,25 @@ + + + + + + diff --git a/src/pages/reserve/tea-room.vue b/src/pages/reserve/tea-room.vue index 2eff0b9..e4d2611 100644 --- a/src/pages/reserve/tea-room.vue +++ b/src/pages/reserve/tea-room.vue @@ -244,7 +244,7 @@ - + @@ -255,15 +255,15 @@ - 茶艺师昵称 + {{ info.name }} 90后茶艺师 - + - 已预约 10+ + 已预约 {{ info.reservation_num > 10 ? info.reservation_num + '+' : info.reservation_num }} @@ -392,10 +392,14 @@