feat: 增加点赞功能

This commit is contained in:
2026-09-12 16:27:12 +08:00
parent 69e3fd1365
commit d49d62cc5e
3 changed files with 54 additions and 29 deletions

View File

@@ -63,7 +63,10 @@
<view class="flex items-center gap-5 border-t border-[#f0f0f0] px-3 py-2"> <view class="flex items-center gap-5 border-t border-[#f0f0f0] px-3 py-2">
<view class="flex items-center gap-1" @click="toggleLike(item)"> <view class="flex items-center gap-1" @click="toggleLike(item)">
<wd-icon name="heart" color="#999"/> <wd-icon
:name="item.liked ? 'heart-fill' : 'heart'"
:color="item.liked ? '#f87171' : '#999'"
/>
<text class="text-[24rpx] text-gray-400"> <text class="text-[24rpx] text-gray-400">
{{ item.like_count }} {{ item.like_count }}
</text> </text>
@@ -154,8 +157,14 @@ function getUserInfo() {
} }
} }
function toggleLike(item: IRecord) { async function toggleLike(item: IRecord) {
if (item.liked) {
await recordStore.deleteRecordLikeApi(item.id, userStore.currentUser.id)
} else {
await recordStore.addRecordLikeApi(item.id, userStore.currentUser.id)
}
paging.value.refresh()
} }
function gridCols(count: number): string { function gridCols(count: number): string {
@@ -177,7 +186,7 @@ function queryList(pageNo, pageSize) {
mask: true mask: true
}) })
recordStore.getRecordListByPageApi(pageNo, pageSize).then(res => { recordStore.getRecordListByPageApi(pageNo, pageSize, userStore.currentUser.id).then(res => {
paging.value.complete(res.records); paging.value.complete(res.records);
}).catch(res => { }).catch(res => {
paging.value.complete(false); paging.value.complete(false);

View File

@@ -31,9 +31,6 @@ export const useRecordStore = defineStore('record', {
this.isRefresh = !this.isRefresh this.isRefresh = !this.isRefresh
}, },
async refreshRecord() {
this.recordList = await this.getRecordListApi()
},
getEmptyForm(): IRecordForm { getEmptyForm(): IRecordForm {
return { return {
user_id: 0, user_id: 0,
@@ -42,34 +39,14 @@ export const useRecordStore = defineStore('record', {
video_list: [] video_list: []
} }
}, },
async getRecordListApi() { async getRecordListByPageApi(page: number, size: number, userId: number) {
return new Promise((resolve, reject) => {
wx.request({
url: `${this.baseUrl}/family-api/records`,
method: 'GET',
header: { 'Content-Type': 'application/json' },
data: {
skip: 0,
limit: 20
},
success: (res) => {
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data)
} else {
reject({ status: res.statusCode, data: res.data })
}
},
fail: (err) => reject(err),
})
})
},
async getRecordListByPageApi(page: number, size: number) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
wx.request({ wx.request({
url: `${this.baseUrl}/family-api/records/page`, url: `${this.baseUrl}/family-api/records/page`,
method: 'GET', method: 'GET',
header: { 'Content-Type': 'application/json' }, header: { 'Content-Type': 'application/json' },
data: { data: {
user_id: userId,
page: page, page: page,
size: size size: size
}, },
@@ -136,6 +113,44 @@ export const useRecordStore = defineStore('record', {
fail: (err) => reject(err), fail: (err) => reject(err),
}) })
}) })
} },
async addRecordLikeApi(recordId: number, userId: number) {
return new Promise((resolve, reject) => {
wx.request({
url: `${this.baseUrl}/family-api/likes`,
method: 'POST',
header: { 'Content-Type': 'application/json' },
data: {
record_id: recordId,
user_id: userId
},
success: (res) => {
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data)
} else {
reject({ status: res.statusCode, data: res.data })
}
},
fail: (err) => reject(err),
})
})
},
async deleteRecordLikeApi(recordId: number, userId: number) {
return new Promise((resolve, reject) => {
wx.request({
url: `${this.baseUrl}/family-api/likes?record_id=${recordId}&user_id=${userId}`,
method: 'DELETE',
header: { 'Content-Type': 'application/json' },
success: (res) => {
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data)
} else {
reject({ status: res.statusCode, data: res.data })
}
},
fail: (err) => reject(err),
})
})
},
}, },
}) })

View File

@@ -22,6 +22,7 @@ export interface IRecord {
image_list: string[] image_list: string[]
video_list: string[] video_list: string[]
like_count: number like_count: number
liked: boolean
comment_count: number comment_count: number
comments: IComment[] comments: IComment[]
create_time: string create_time: string