diff --git a/Cunkebao/app/workspace/auto-like/[id]/page.tsx b/Cunkebao/app/workspace/auto-like/[id]/page.tsx new file mode 100644 index 00000000..04cb2b30 --- /dev/null +++ b/Cunkebao/app/workspace/auto-like/[id]/page.tsx @@ -0,0 +1,333 @@ +"use client" + +import { useState, useEffect } from "react" +import { ChevronLeft, Search, Filter, RefreshCw } from "lucide-react" +import { Card } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { Avatar } from "@/components/ui/avatar" +import { useRouter } from "next/navigation" +import { Skeleton } from "@/components/ui/skeleton" +import { format } from "date-fns" +import { Badge } from "@/components/ui/badge" +import { Separator } from "@/components/ui/separator" +import Image from "next/image" +import { cn } from "@/lib/utils" + +// 模拟数据接口 +interface LikeRecord { + id: number + user: { + avatar: string + nickname: string + } + likedBy: { + avatar: string + nickname: string + } + likeTime: string + content: { + type: 'text' | 'image' | 'text-image' + text?: string + images?: string[] + } +} + +// 模拟数据 +const mockLikeRecords: LikeRecord[] = [ + { + id: 1, + user: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Alice", + nickname: "小红花" + }, + likedBy: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Bob", + nickname: "蓝色海洋" + }, + likeTime: "2023-12-15T10:30:00", + content: { + type: "text", + text: "今天天气真好,阳光明媚!想出去走走看看这个美丽的世界。" + } + }, + { + id: 2, + user: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Charlie", + nickname: "绿野仙踪" + }, + likedBy: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=David", + nickname: "快乐精灵" + }, + likeTime: "2023-12-14T15:45:00", + content: { + type: "image", + images: ["https://picsum.photos/id/237/300/200", "https://picsum.photos/id/238/300/200"] + } + }, + { + id: 3, + user: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Eve", + nickname: "紫色梦想" + }, + likedBy: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Frank", + nickname: "阳光男孩" + }, + likeTime: "2023-12-13T09:15:00", + content: { + type: "text-image", + text: "分享一下我的旅行照片,希望大家喜欢!", + images: ["https://picsum.photos/id/239/300/200"] + } + }, + { + id: 4, + user: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Grace", + nickname: "月光星辰" + }, + likedBy: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Henry", + nickname: "风之子" + }, + likeTime: "2023-12-12T18:20:00", + content: { + type: "text", + text: "学习编程真的很有趣,每天都有新发现。希望能和大家一起进步!" + } + }, + { + id: 5, + user: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Ivy", + nickname: "彩虹糖果" + }, + likedBy: { + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=Jack", + nickname: "幸运草" + }, + likeTime: "2023-12-11T11:05:00", + content: { + type: "text-image", + text: "今天做了一道新菜,味道超级赞!分享食谱:先准备好所有食材...", + images: ["https://picsum.photos/id/240/300/200", "https://picsum.photos/id/241/300/200"] + } + } +]; + +export default function LikeRecordsPage() { + const router = useRouter() + const [loading, setLoading] = useState(false) + const [searchTerm, setSearchTerm] = useState("") + const [records, setRecords] = useState(mockLikeRecords) + const [currentPage, setCurrentPage] = useState(1) + const [total, setTotal] = useState(mockLikeRecords.length) + const pageSize = 10 + + // 模拟加载数据 + const fetchRecords = async (page: number, searchTerm?: string) => { + setLoading(true) + // 模拟API请求延迟 + await new Promise(resolve => setTimeout(resolve, 800)) + + // 实际项目中这里应该调用真实API + let filteredRecords = [...mockLikeRecords] + if (searchTerm) { + filteredRecords = mockLikeRecords.filter(record => + record.user.nickname.includes(searchTerm) || + record.likedBy.nickname.includes(searchTerm) || + (record.content.text && record.content.text.includes(searchTerm)) + ) + } + + setRecords(filteredRecords) + setTotal(filteredRecords.length) + setLoading(false) + } + + useEffect(() => { + fetchRecords(currentPage, searchTerm) + }, [currentPage]) + + const handleSearch = () => { + setCurrentPage(1) + fetchRecords(1, searchTerm) + } + + const handleRefresh = () => { + fetchRecords(currentPage, searchTerm) + } + + return ( +
+
+
+
+ +

点赞记录

+
+
+
+ +
+ +
+
+ + setSearchTerm(e.target.value)} + onKeyDown={(e) => e.key === 'Enter' && handleSearch()} + /> +
+ + +
+
+ + {loading ? ( + // 加载状态 +
+ {Array.from({ length: 3 }).map((_, index) => ( + +
+ +
+ + +
+
+ +
+ + +
+ + +
+
+
+ ))} +
+ ) : ( + // 记录列表 +
+ {records.length === 0 ? ( + + 暂无点赞记录 + + ) : ( + records.map(record => ( + +
+
+ + {record.user.nickname} + +
+
{record.user.nickname}
+
内容发布者
+
+
+ + {format(new Date(record.likeTime), 'yyyy-MM-dd HH:mm')} + +
+ + + +
+ {record.content.text && ( +

+ {record.content.text} +

+ )} + + {record.content.images && record.content.images.length > 0 && ( +
+ {record.content.images.map((image, idx) => ( +
+ {`内容图片 +
+ ))} +
+ )} +
+ +
+ + {record.likedBy.nickname} + +
+ {record.likedBy.nickname} + 点赞了这条内容 +
+
+
+ )) + )} +
+ )} + + {!loading && total > pageSize && ( +
+ + + 第 {currentPage} 页,共 {Math.ceil(total / pageSize)} 页 + + +
+ )} +
+
+ ) +} \ No newline at end of file diff --git a/Server/application/cunkebao/controller/ContentLibraryController.php b/Server/application/cunkebao/controller/ContentLibraryController.php index 20adb47e..7443edd6 100644 --- a/Server/application/cunkebao/controller/ContentLibraryController.php +++ b/Server/application/cunkebao/controller/ContentLibraryController.php @@ -447,6 +447,18 @@ class ContentLibraryController extends Controller ->field('wa.nickname, wa.avatar') ->find(); $item['senderNickname'] = $friendInfo['nickname'] ?: ''; + $item['senderAvatar'] = $friendInfo['avatar'] ?: ''; + }else{ + // $friendInfo = Db::name('wechat_group_member') + // ->alias('wgm') + // ->join('wechat_account wa', 'wgm.identifier = wa.wechatId') + // ->where('wgm.identifier', $item['wechatId']) + // ->field('wa.nickname, wa.avatar') + // ->find(); + // print_r($friendInfo); + // exit; + // $item['senderNickname'] = $friendInfo['nickname'] ?: ''; + // $item['senderAvatar'] = $friendInfo['avatar'] ?: ''; } } unset($item);