diff --git a/apps/server/src/models/post/post.service.ts b/apps/server/src/models/post/post.service.ts index 8812ea0..97a3a6b 100755 --- a/apps/server/src/models/post/post.service.ts +++ b/apps/server/src/models/post/post.service.ts @@ -9,6 +9,7 @@ import { ObjectType, PostType, PostState, + PostMeta, } from '@nice/common'; import { MessageService } from '../message/message.service'; import { BaseService } from '../base/base.service'; @@ -52,6 +53,15 @@ export class PostService extends BaseService { return result; } async update(args: Prisma.PostUpdateArgs, staff?: UserProfile) { + // 确保 meta 字段是一个对象 + if (args.data.reTime) { + // 处理不同类型的 reTime 输入 + if (typeof args.data.reTime === 'string' || args.data.reTime instanceof Date) { + args.data.reTime = { + set: new Date(args.data.reTime) + }; + } + } args.data.authorId = staff?.id; args.data.updatedAt = new Date(); const result = await super.update(args); diff --git a/apps/web/src/components/layout/main/useNavItem.tsx b/apps/web/src/components/layout/main/useNavItem.tsx index c339fa9..e020c41 100755 --- a/apps/web/src/components/layout/main/useNavItem.tsx +++ b/apps/web/src/components/layout/main/useNavItem.tsx @@ -50,8 +50,9 @@ export function useNavItem() { icon: , }, help: { - to: env.LIB_URL || "27.57.72.38", - label: "意见建议", + // to: env.LIB_URL || "27.57.72.38", + to: "/help", + label: "心理锦囊", icon: , }, }; diff --git a/apps/web/src/components/models/post/detail/PostHeader/Header.tsx b/apps/web/src/components/models/post/detail/PostHeader/Header.tsx index 10886e0..cdca8c8 100755 --- a/apps/web/src/components/models/post/detail/PostHeader/Header.tsx +++ b/apps/web/src/components/models/post/detail/PostHeader/Header.tsx @@ -1,4 +1,4 @@ -import { useContext } from "react"; +import { useContext, useEffect } from "react"; import { PostDetailContext } from "../context/PostDetailContext"; import { Space, Typography } from "antd"; import { PostBadge } from "../badge/PostBadge"; @@ -15,7 +15,13 @@ import dayjs from "dayjs"; import { LetterBadge } from "../../LetterBadge"; const { Title, Paragraph, Text } = Typography; export default function Header() { - const { post, user } = useContext(PostDetailContext); + const { post, user, staff } = useContext(PostDetailContext); + // 添加更详细的日志 + console.log('Post Data:', { + post, + reTime: post?.reTime, + reTimeType: post?.reTime ? typeof post.reTime : 'undefined' + }); return (
@@ -73,7 +79,25 @@ export default function Header() { {post?.isPublic ? "公开" : "保密"} - + + 联系电话 + + {staff?.phoneNumber || "暂无联系方式"} + + + + 预约时间 + + {post?.reTime ? ( + <> + {/* */} + {dayjs(post.reTime).format("YYYY-MM-DD HH:mm")} + + ) : ( + "暂无预约" + )} + + {/* First Row - Basic Info */}
{/* Author Info Badge */} @@ -82,7 +106,6 @@ export default function Header() { {post?.meta?.tags?.length > 0 && (
{/* Tags Badges */} - {(post?.terms || [])?.map((term, index) => { return ( diff --git a/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx b/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx index 4f2c7c9..0dd7ffb 100755 --- a/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx +++ b/apps/web/src/components/models/post/detail/context/PostDetailContext.tsx @@ -4,6 +4,7 @@ import { postDetailSelect, PostDto, RolePerms, + StaffDto, UserProfile, } from "@nice/common"; import { useAuth } from "@web/src/providers/auth-provider"; @@ -23,6 +24,7 @@ interface PostDetailContextType { user?: UserProfile; setKeyCode?: React.Dispatch>; canSee?: boolean; + staff?: StaffDto; } interface PostFormProviderProps { children: ReactNode; @@ -36,27 +38,53 @@ export function PostDetailProvider({ editId, }: PostFormProviderProps) { const { user, hasSomePermissions } = useAuth(); - const postParams = PostParams.getInstance(); const queryParams = { where: { id: editId }, - select: postDetailSelect, + select: { + ...postDetailSelect, + meta: true, // 确保包含 meta 字段 + createdAt: true, + updatedAt: true, + title: true, + reTime: true, + isPublic: true, + author: { + select: { + id: true, + showname: true, + phoneNumber: true + } + }, + receivers: { + select: { + id: true, + showname: true, + meta: true + } + } + } }; const [keyCode, setKeyCode] = useState(""); useEffect(() => { if (editId) { postParams.addDetailItem(queryParams); } + return () => { if (editId) { postParams.removeDetailItem(queryParams); } }; }, [editId]); - const { data: post, isLoading }: { data: PostDto; isLoading: boolean } = ( api.post.findFirst as any ).useQuery(queryParams, { enabled: Boolean(editId) }); + + const { data: staff } : { data: StaffDto}= api.staff.findFirst.useQuery( + { where: { id: post?.authorId } }, + { enabled: !!post?.authorId } + ); const canSee = useMemo(() => { if (hasSomePermissions(RolePerms.READ_ANY_POST)) { return true; @@ -83,6 +111,7 @@ export function PostDetailProvider({ isLoading, canSee, setKeyCode, + staff, }}> {children} diff --git a/apps/web/src/components/models/post/editor/form/LetterBasicForm.tsx b/apps/web/src/components/models/post/editor/form/LetterBasicForm.tsx index b606e9b..63c70b7 100755 --- a/apps/web/src/components/models/post/editor/form/LetterBasicForm.tsx +++ b/apps/web/src/components/models/post/editor/form/LetterBasicForm.tsx @@ -1,4 +1,4 @@ -import { Form, Input, Button, Checkbox, Select, Tabs } from "antd"; +import { Form, Input, Button, Checkbox, Select, Tabs, DatePicker } from "antd"; import { useLetterEditor } from "../context/LetterEditorContext"; import { SendOutlined } from "@ant-design/icons"; import QuillEditor from "@web/src/components/common/editor/quill/QuillEditor"; @@ -98,6 +98,25 @@ export function LetterBasicForm() {
+
+ {/* 添加预约时间字段 */} + + { + // 禁用过去的日期 + return current && current.valueOf() < Date.now(); + }} + /> + +
{/* Tags Input */} {/*