Ver código fonte

refactor(home): 优化评论点赞逻辑

EvilDragon 5 meses atrás
pai
commit
0d9b1cfd13

+ 6 - 9
packages/app/src/core/libs/requests.ts

@@ -232,15 +232,12 @@ export const getCircleReviews = (query: { circleId: string }) =>
       ownDel: boolean
     }>[]
   }>('/app-api/member/circle-review/getCircleReviewByCircleId', query)
-export const createCircleReviewUpvote = (
-  data:
-    | {
-        circleId: number
-        userId: number
-        userName: string
-      }
-    | Partial<{ reviewId: number }>,
-) => httpPost('/app-api/member/circle-review-upvote/create', data)
+export const createCircleReviewUpvote = (data: {
+  circleId: number
+  userId: number
+  userName: string
+  reviewId: number
+}) => httpPost('/app-api/member/circle-review-upvote/create', data)
 export const refreshToken = (refreshToken: string) =>
   httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
 export const httpGetMock = <T>(data: T) =>

+ 18 - 2
packages/app/src/pages/home/components/comment-item.vue

@@ -1,9 +1,12 @@
 <script setup lang="ts">
+import { useUserStore } from '../../../store'
+import { createCircleReviewUpvote } from '../../../core/libs/requests'
 import { thumbsUp } from '../../../core/libs/svgs'
 import { Comment } from '../../../core/models/moment'
 import { dayjs } from 'wot-design-uni'
+import { storeToRefs } from 'pinia'
 
-defineProps({
+const props = defineProps({
   options: {
     type: Object as PropType<Comment>,
     default: () => ({}),
@@ -13,6 +16,19 @@ defineProps({
     default: false,
   },
 })
+const emits = defineEmits<{ upvote: [] }>()
+const userStore = useUserStore()
+const { userInfo } = storeToRefs(userStore)
+const handleUpvote = async () => {
+  const { code, msg } = await createCircleReviewUpvote({
+    circleId: props.options.circleId,
+    userId: userInfo.value.userId,
+    userName: userInfo.value.nickname,
+    reviewId: props.options.id,
+  })
+  code === 0 && uni.showToast({ title: '点赞成功', icon: 'none' })
+  emits('upvote')
+}
 </script>
 <template>
   <view class="grid grid-cols-[28px_1fr_28px] gap-2.5" :class="isChild ? 'ml-9' : ''">
@@ -38,7 +54,7 @@ defineProps({
         </view>
       </view>
     </view>
-    <view class="col-start-3 row-start-1 flex flex-col items-center">
+    <view class="col-start-3 row-start-1 flex flex-col items-center" @click="handleUpvote">
       <div class="w-[18px] h-[18px] relative">
         <wd-img :src="thumbsUp" width="18" height="18"></wd-img>
       </div>

+ 1 - 1
packages/app/src/pages/home/moment/index.vue

@@ -153,7 +153,7 @@ onLoad(async (query: { id: string }) => {
       <view>
         <template v-if="reviews?.list.length">
           <template v-for="it of reviews?.list" :key="it.id">
-            <CommentItem :options="it" :isChild="false"></CommentItem>
+            <CommentItem :options="it" :isChild="false" @upvote="runGetReviews()"></CommentItem>
             <template v-for="child of it.childrens" :key="child.id">
               <CommentItem :options="child" :isChild="true"></CommentItem>
             </template>