From d3220a040990892a4856a378b80537b5f1fbbc4e Mon Sep 17 00:00:00 2001 From: ADKCodeXD <790532173@qq.com> Date: Fri, 8 Mar 2024 17:43:38 +0800 Subject: [PATCH] feat: update view and reaction --- components/CommentItem.vue | 2 +- components/MMGC/Header.vue | 37 +- components/MemberPop.vue | 2 +- components/MovieListCard.vue | 2 +- components/MovieShowItem.vue | 5 +- components/MyCustom/AvatarUpload.vue | 2 +- components/MyInfo.vue | 98 +++-- components/MyInfoEdit.vue | 2 +- components/ReviewItem.vue | 83 ++++ composables/apis/activity.ts | 2 +- composables/apis/comment.ts | 2 +- composables/apis/movie.ts | 2 +- composables/useActivity.ts | 2 +- composables/useFormRules.ts | 2 +- composables/useLoginpage.ts | 103 +++++ composables/useMembers.ts | 6 +- composables/useMovieOper.ts | 2 +- composables/useXFecth.ts | 2 +- i18n/i18n.ts | 9 +- i18n/locales/cn.json | 4 +- i18n/locales/en.json | 4 +- i18n/locales/jp.json | 4 +- pages/activity/[activityId]/about.vue | 2 +- pages/activity/[activityId]/history.vue | 207 +++++---- pages/activity/[activityId]/main.vue | 37 +- pages/activity/[activityId]/support.vue | 234 ++++------ pages/login.vue | 104 +---- pages/mobile/login.vue | 188 ++++++++ pages/movie/[movieId].vue | 553 ++++++++++++------------ stores/global.ts | 2 +- stores/user.ts | 2 +- types/comment.type.ts | 2 +- types/global.ts | 2 +- types/movie.type.ts | 257 +++++------ 34 files changed, 1151 insertions(+), 816 deletions(-) create mode 100644 components/ReviewItem.vue create mode 100644 composables/useLoginpage.ts create mode 100644 pages/mobile/login.vue diff --git a/components/CommentItem.vue b/components/CommentItem.vue index 1c3aa0e..b9fd7a8 100644 --- a/components/CommentItem.vue +++ b/components/CommentItem.vue @@ -107,7 +107,7 @@ + + diff --git a/composables/apis/activity.ts b/composables/apis/activity.ts index 33ca3fe..870e793 100644 --- a/composables/apis/activity.ts +++ b/composables/apis/activity.ts @@ -1,4 +1,4 @@ -import { ActivityVo, DayVo } from 'Activity' +import type { ActivityVo, DayVo } from 'Activity' export const getActivityDetail = async (activityId: number) => { const { data, refresh } = await xFetch( diff --git a/composables/apis/comment.ts b/composables/apis/comment.ts index d1a6cec..211c9ca 100644 --- a/composables/apis/comment.ts +++ b/composables/apis/comment.ts @@ -1,4 +1,4 @@ -import { CommentParams, CommentVo } from 'Comment' +import type { CommentParams, CommentVo } from 'Comment' export const getCommentList = async (pageParams: PageParams & { movieId: number }) => { const { data, refresh } = await xFetch>( diff --git a/composables/apis/movie.ts b/composables/apis/movie.ts index a6349dd..2e761f3 100644 --- a/composables/apis/movie.ts +++ b/composables/apis/movie.ts @@ -1,4 +1,4 @@ -import { MovieVo } from 'Movie' +import type { MovieVo } from 'Movie' export const getMovieByActivityId = async (activityId: number, day: number) => { const { data, refresh } = await xFetch>( diff --git a/composables/useActivity.ts b/composables/useActivity.ts index a68c7c8..0658d18 100644 --- a/composables/useActivity.ts +++ b/composables/useActivity.ts @@ -1,4 +1,4 @@ -import { ActivityVo } from 'Activity' +import type { ActivityVo } from 'Activity' import _ from 'lodash' import { getActivityDetail, getActivityList } from './apis/activity' export const useActivityList = () => { diff --git a/composables/useFormRules.ts b/composables/useFormRules.ts index 8d5185f..08d3461 100644 --- a/composables/useFormRules.ts +++ b/composables/useFormRules.ts @@ -1,4 +1,4 @@ -import { MemberParams } from 'Member' +import type { MemberParams } from 'Member' export const genral = (name: string, t: any) => { return [ diff --git a/composables/useLoginpage.ts b/composables/useLoginpage.ts new file mode 100644 index 0000000..747ed12 --- /dev/null +++ b/composables/useLoginpage.ts @@ -0,0 +1,103 @@ +import type { MemberParams } from 'Member' +import { useUserStore } from '~~/stores/user' +import { UserApi } from '~~/composables/apis/user' +import { getCode } from '~~/composables/apis/email' +import _ from 'lodash' + +export const useLoginPage = () => { + const isRegister = ref(false) + const isSend = ref(false) + const time = ref(60) + const registerRef = ref() + const loginRef = ref() + const isLoading = ref(false) + + const loginForm = reactive<{ username: string; password: string }>({ + username: '', + password: '' + }) + + const registerForm = reactive({ + username: '', + password: '', + verifyCode: undefined, + memberName: '', + rePassword: '', + email: '' + }) + + const localeRoute = useLocaleRoute() + const { t } = useI18n() + const { createMessage } = useMessage() + const { rulesRegister, ruleslogin } = useLoginRules(registerForm, t) + + const goWelcome = () => { + const route = localeRoute('/welcome') + navigateTo(route?.fullPath) + } + + const getCodeFn = async () => { + try { + await registerRef.value.validateField('email') + isLoading.value = true + await getCode(registerForm.email) + isSend.value = true + const myInternal = setInterval(() => { + time.value-- + }, 1000) + setTimeout(() => { + isSend.value = false + clearInterval(myInternal) + time.value = 60 + }, 60000) + createMessage(t('getCodeSuccess')) + } catch (error) { + // + } finally { + isLoading.value = false + } + } + + const submitFn = async () => { + if (isRegister.value) { + await registerRef.value.validate() + registerForm.verifyCode = parseInt(registerForm.verifyCode!.toString()) + const form = _.cloneDeep(registerForm) + const { data: token } = await UserApi.register(form) + if (token) { + const userStore = useUserStore() + await userStore.setToken(token) + await userStore.getUserInfo() + const router = useRouter() + router.push('/') + } + } else { + await loginRef.value.validate() + const form = _.cloneDeep(loginForm) + const { data: token } = await UserApi.login(form) + if (token) { + const userStore = useUserStore() + userStore.setToken(token) + await userStore.getUserInfo() + const router = useRouter() + router.push('/') + } + } + } + + return { + getCodeFn, + submitFn, + goWelcome, + ruleslogin, + rulesRegister, + loginForm, + registerForm, + isLoading, + loginRef, + registerRef, + time, + isSend, + isRegister + } +} diff --git a/composables/useMembers.ts b/composables/useMembers.ts index ce9be45..ddcf8aa 100644 --- a/composables/useMembers.ts +++ b/composables/useMembers.ts @@ -1,13 +1,17 @@ -import { MemberVo } from 'Member' +import type { MemberVo } from 'Member' import { useOpenLink } from './useLink' export const useMemberPop = (memberVO: MemberVo) => { const noAvatar = computed(() => { + if (!memberVO.avatar && !memberVO.memberName) { + return 'Null' + } if (!memberVO.avatar) { return memberVO.memberName.slice(0, 1) } return undefined }) + const snsSites = computed(() => { return useSnsSites(memberVO.snsSite) }) diff --git a/composables/useMovieOper.ts b/composables/useMovieOper.ts index 2052366..55d880c 100644 --- a/composables/useMovieOper.ts +++ b/composables/useMovieOper.ts @@ -1,4 +1,4 @@ -import { MovieVo } from 'Movie' +import type { MovieVo } from 'Movie' import { cancelVideoLike, likeVideo, pollVideo } from './apis/oper' export const useMovieOperate = () => { diff --git a/composables/useXFecth.ts b/composables/useXFecth.ts index 88666ed..eb3bb1e 100644 --- a/composables/useXFecth.ts +++ b/composables/useXFecth.ts @@ -26,7 +26,7 @@ export const xFetch = async ( }, onResponse({ response }) { const data = response._data - if (data.code !== 200) { + if (data && data.code !== 200) { if (process.client) { if (data.msg) { ElMessage({ diff --git a/i18n/i18n.ts b/i18n/i18n.ts index cffdeae..65cf8a6 100644 --- a/i18n/i18n.ts +++ b/i18n/i18n.ts @@ -1,12 +1,13 @@ import cn from './locales/cn.json' import en from './locales/en.json' import jp from './locales/jp.json' - export const message = { cn, en, jp } -export const i18n = { + +export default defineI18nConfig(() => ({ legacy: false, globalInjection: true, locale: 'cn', warnHtmlMessage: false, - messages: message -} + messages: message, + fallbackLocale: 'cn' +})) diff --git a/i18n/locales/cn.json b/i18n/locales/cn.json index 48ac529..2c6beec 100644 --- a/i18n/locales/cn.json +++ b/i18n/locales/cn.json @@ -112,5 +112,7 @@ "clickup": "点击上页", "pollTip": "你确定要给该作品投票吗?(当日内的作品一个用户只能投两票)", "tip": "提示", - "more": "更多" + "more": "更多", + "delete": "删除", + "gotoView": "前往查看" } diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 79ad04f..95636a8 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -111,5 +111,7 @@ "clickup": "Click Up", "pollTip": "Are you sure you want to vote for this work? (One user can only vote for two works within the day)", "tip": "Tip", - "more": "See More" + "more": "See More", + "delete": "Delete", + "gotoView": "Go to View" } diff --git a/i18n/locales/jp.json b/i18n/locales/jp.json index 7c29856..626e7a9 100644 --- a/i18n/locales/jp.json +++ b/i18n/locales/jp.json @@ -109,5 +109,7 @@ "clickDown": "Click Down", "clickup": "Click Up", "pollTip": "この作品に票を入れますか? (1ユーザーが1日に入れる作品は2作品までです)", - "tip": "注意" + "tip": "注意", + "delete": "削除", + "gotoView": "見に行く" } diff --git a/pages/activity/[activityId]/about.vue b/pages/activity/[activityId]/about.vue index 27ec85d..441a057 100644 --- a/pages/activity/[activityId]/about.vue +++ b/pages/activity/[activityId]/about.vue @@ -132,7 +132,7 @@ diff --git a/pages/activity/[activityId]/main.vue b/pages/activity/[activityId]/main.vue index fd84486..c7673aa 100644 --- a/pages/activity/[activityId]/main.vue +++ b/pages/activity/[activityId]/main.vue @@ -58,7 +58,9 @@ > -

Day {{ currentDay }}

+

+ Day {{ currentDay }} +

diff --git a/pages/login.vue b/pages/login.vue index ccdd0f7..f5ab34f 100644 --- a/pages/login.vue +++ b/pages/login.vue @@ -21,7 +21,6 @@ :rules="ruleslogin" class="mt-5 flex-1" @submit.native.prevent - @validate="validateLogin" v-if="!isRegister" > @@ -38,7 +37,6 @@ status-icon :rules="rulesRegister" @submit.native.prevent - @validate="validateLogin" ref="registerRef" v-else > @@ -54,7 +52,7 @@ - + @@ -92,97 +90,29 @@ + diff --git a/pages/movie/[movieId].vue b/pages/movie/[movieId].vue index 811f1f9..6feaa73 100644 --- a/pages/movie/[movieId].vue +++ b/pages/movie/[movieId].vue @@ -1,232 +1,227 @@