diff --git a/src/components/JbcGuess.vue b/src/components/JbcGuess.vue index 3877a74..3003c95 100644 --- a/src/components/JbcGuess.vue +++ b/src/components/JbcGuess.vue @@ -70,7 +70,7 @@ onBeforeMount(() => { // 暴露方法 defineExpose({ resetData, - getMore: getGuessList, + getMore: getGuessList, // 重命名 }) @@ -111,7 +111,7 @@ defineExpose({ justify-content: space-between; padding: 0 20rpx; .guess-item { - width: calc(375rpx - 60rpx); + width: calc(375rpx - 20rpx - 10rpx); padding: 24rpx 20rpx 20rpx; margin-bottom: 20rpx; border-radius: 10rpx; diff --git a/src/composables/index.ts b/src/composables/index.ts new file mode 100644 index 0000000..a8476b5 --- /dev/null +++ b/src/composables/index.ts @@ -0,0 +1,14 @@ +import type { JbcGuessInstance } from '@/types/components' +import { ref } from 'vue' + +/** + * 猜你喜欢滚动到底加载更多 + * @returns + */ +export const useGuessList = () => { + const guessRef = ref() + const onScrollToLower = () => { + guessRef.value?.getMore() + } + return { guessRef, onScrollToLower } +} diff --git a/src/pages.json b/src/pages.json index 37c6311..4738b7a 100644 --- a/src/pages.json +++ b/src/pages.json @@ -39,6 +39,7 @@ "path": "pages/my/my", "style": { "navigationStyle": "custom", + "navigationBarTextStyle": "white", "navigationBarTitleText": "我的" } }, @@ -102,5 +103,36 @@ "selectedIconPath": "static/tabs/user_selected.png" } ] + }, + + // 分包 + "subPackages": [ + { + "root": "pagesMember", + "pages": [ + { + "path": "settings/settings", + "style": { + "navigationBarTitleText": "设置" + } + }, + { + "path": "profile/profile", + "style": { + "navigationStyle": "custom", // 隐藏顶部默认导航 + "navigationBarTextStyle": "white", + "navigationBarTitleText": "个人信息" + } + } + ] + } + ], + + // 预下载 + "preloadRule": { + "pages/my/my": { + "network": "all", + "packages": ["pagesMember"] + } } } diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index ea7f22b..4c2ebba 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -35,8 +35,8 @@ import { getCategoryAPI, getHomeBannerAPI, getHomeHotAPI } from '@/services/home import { onLoad } from '@dcloudio/uni-app' import CategoryPanel from './components/CategoryPanel.vue' import HotPanel from './components/HotPanel.vue' -import type { JbcGuessInstance } from '@/types/components' import PageSkeleton from './components/PageSkeleton.vue' +import { useGuessList } from '@/composables' // 数据加载状态 const isLoading = ref(true) @@ -63,12 +63,8 @@ const getHotList = async () => { } // 猜你喜欢滚动到底加载更多 -// 获取实例 -const guessRef = ref() -// 调用子组件的方法 -const onScrollToLower = () => { - guessRef.value?.getMore() -} +// 滚动到底部 +const { guessRef, onScrollToLower } = useGuessList() // 下拉刷新 const isRefreshing = ref(false) diff --git a/src/pages/my/my.vue b/src/pages/my/my.vue index 21992ae..99066a2 100644 --- a/src/pages/my/my.vue +++ b/src/pages/my/my.vue @@ -1,66 +1,232 @@ diff --git a/src/pagesMember/address/address.vue b/src/pagesMember/address/address.vue new file mode 100644 index 0000000..0f05ffb --- /dev/null +++ b/src/pagesMember/address/address.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/pagesMember/profile/profile.vue b/src/pagesMember/profile/profile.vue new file mode 100644 index 0000000..0978861 --- /dev/null +++ b/src/pagesMember/profile/profile.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/src/pagesMember/settings/settings.vue b/src/pagesMember/settings/settings.vue new file mode 100644 index 0000000..957893f --- /dev/null +++ b/src/pagesMember/settings/settings.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/services/profile.ts b/src/services/profile.ts new file mode 100644 index 0000000..df32b4e --- /dev/null +++ b/src/services/profile.ts @@ -0,0 +1,19 @@ +import { http } from '@/utils/http' +import type { ProfileDetail, ProfileParams } from '@/types/member' + +// 获取个人信息详情 +export const getProfileAPI = () => { + return http({ + url: '/member/profile', + method: 'GET', + }) +} + +// 修改个人信息 +export const putProfileAPI = (data: ProfileParams) => { + return http({ + url: '/member/profile', + method: 'PUT', + data, + }) +} diff --git a/src/stores/modules/member.ts b/src/stores/modules/member.ts index 963e1d6..8adc24f 100644 --- a/src/stores/modules/member.ts +++ b/src/stores/modules/member.ts @@ -1,4 +1,4 @@ -import type { LoginResult } from '@/types/member' +import type { LoginResult, ProfileDetail, ProfileParams } from '@/types/member' import { defineStore } from 'pinia' import { ref } from 'vue' @@ -19,11 +19,30 @@ export const useMemberStore = defineStore( profile.value = undefined } + // 更新头像 + const updateAvatar = (avatar: string) => { + if (profile.value) { + profile.value.avatar = avatar + } + } + + // 更新个人信息 + const updateProfile = ( + val: Pick, + ) => { + console.log('调用action updateProfile', val) + if (profile.value) { + Object.assign(profile.value, val) + } + } + // 记得 return return { profile, setProfile, clearProfile, + updateAvatar, + updateProfile, } }, { diff --git a/src/styles/base.scss b/src/styles/base.scss index 648d0ea..dbf346c 100644 --- a/src/styles/base.scss +++ b/src/styles/base.scss @@ -18,7 +18,7 @@ scroll-view { image { width: 100%; - height: 100%; + // height: 100%; vertical-align: middle; } diff --git a/src/utils/http.ts b/src/utils/http.ts index 8211efc..a0d2fb4 100644 --- a/src/utils/http.ts +++ b/src/utils/http.ts @@ -52,7 +52,7 @@ uni.addInterceptor('uploadFile', interceptorOptions) * 3.3 网络错误 -> 提示用户换网络 */ type Data = { - code: number + code: string msg: string result: T }