From a3284f4532d9ac53358b90adf3ebb6ba53627575 Mon Sep 17 00:00:00 2001 From: longdayi <13477510+longdayilongdayi@user.noreply.gitee.com> Date: Thu, 27 Feb 2025 22:37:09 +0800 Subject: [PATCH 1/7] 02272209 --- .../main/layout/BasePost/FilterSection.tsx | 2 +- .../main/layout/BasePost/SearchModeRadio.tsx | 8 +++---- apps/web/src/app/main/layout/MainHeader.tsx | 2 +- .../src/app/main/layout/NavigationMenu.tsx | 4 ++-- .../components/common/editor/MindEditor.tsx | 22 +++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apps/web/src/app/main/layout/BasePost/FilterSection.tsx b/apps/web/src/app/main/layout/BasePost/FilterSection.tsx index 25575d1..9742e47 100755 --- a/apps/web/src/app/main/layout/BasePost/FilterSection.tsx +++ b/apps/web/src/app/main/layout/BasePost/FilterSection.tsx @@ -14,7 +14,7 @@ export default function FilterSection() { }); }; return ( -
+
{showSearchMode && } {taxonomies?.map((tax, index) => { const items = Object.entries(selectedTerms).find( diff --git a/apps/web/src/app/main/layout/BasePost/SearchModeRadio.tsx b/apps/web/src/app/main/layout/BasePost/SearchModeRadio.tsx index 692bfe2..507e94f 100644 --- a/apps/web/src/app/main/layout/BasePost/SearchModeRadio.tsx +++ b/apps/web/src/app/main/layout/BasePost/SearchModeRadio.tsx @@ -11,14 +11,14 @@ export default function SearchModeRadio() { return ( -

搜索模式

+

只搜索

- 课程 - 路径 - 全部 + 视频课程 + 思维导图 + 所有资源
); diff --git a/apps/web/src/app/main/layout/MainHeader.tsx b/apps/web/src/app/main/layout/MainHeader.tsx index 1735bbd..c2e383a 100755 --- a/apps/web/src/app/main/layout/MainHeader.tsx +++ b/apps/web/src/app/main/layout/MainHeader.tsx @@ -86,7 +86,7 @@ export function MainHeader() { window.location.href = "/path/editor"; }} icon={}> - 创建学习路径 + 创建思维导图 )} {isAuthenticated ? ( diff --git a/apps/web/src/app/main/layout/NavigationMenu.tsx b/apps/web/src/app/main/layout/NavigationMenu.tsx index d7aa53f..8cca859 100755 --- a/apps/web/src/app/main/layout/NavigationMenu.tsx +++ b/apps/web/src/app/main/layout/NavigationMenu.tsx @@ -11,8 +11,8 @@ export const NavigationMenu = () => { const menuItems = useMemo(() => { const baseItems = [ { key: "home", path: "/", label: "首页" }, - { key: "path", path: "/path", label: "学习路径" }, - { key: "courses", path: "/courses", label: "全部课程" }, + { key: "path", path: "/path", label: "思维导图" }, + { key: "courses", path: "/courses", label: "所有课程" }, ]; if (!isAuthenticated) { diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index fb07164..162cd60 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -65,7 +65,7 @@ export default function MindEditor({ id }: { id?: string }) { }); const canEdit: boolean = useMemo(() => { //登录了且是作者、超管、无id新建模式 - const isAuth = isAuthenticated && user?.id == post?.author.id + const isAuth = isAuthenticated && user?.id == post?.author.id return !Boolean(id) || isAuth || hasSomePermissions(RolePerms.MANAGE_ANY_POST); }, [user]) const navigate = useNavigate(); @@ -96,8 +96,8 @@ export default function MindEditor({ id }: { id?: string }) { const mind = new MindElixir({ ...MIND_OPTIONS, el: containerRef.current, - before:{ - beginEdit(){ + before: { + beginEdit() { return canEdit } }, @@ -107,7 +107,7 @@ export default function MindEditor({ id }: { id?: string }) { nodeMenu: canEdit, // 禁用节点右键菜单 keypress: canEdit, // 禁用键盘快捷键 }); - mind.init(MindElixir.new("新学习路径")); + mind.init(MindElixir.new("新思维导图")); containerRef.current.hidden = true; setInstance(mind); }, [canEdit]); @@ -181,14 +181,14 @@ export default function MindEditor({ id }: { id?: string }) { `mind-thumb-${new Date().toString()}` ); }; - useEffect(()=>{ - containerRef.current.style.height = `${Math.floor(window.innerHeight/1.25)}px` - },[]) - + useEffect(() => { + containerRef.current.style.height = `${Math.floor(window.innerHeight / 1.25)}px` + }, []) + return ( - +
- + {canEdit && taxonomies && (
)} -
e.preventDefault()}/> +
e.preventDefault()} /> {canEdit && instance && } {isLoading && (
Date: Thu, 27 Feb 2025 22:39:31 +0800 Subject: [PATCH 2/7] add. LI --- .../src/components/common/editor/MindEditor.tsx | 16 +++++++++++++--- .../editor/context/CourseEditorContext.tsx | 3 ++- .../course/editor/form/CourseBasicForm.tsx | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index 88d745b..44530b1 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -19,6 +19,8 @@ import MindElixir from "mind-elixir"; import { useTusUpload } from "@web/src/hooks/useTusUpload"; import { useNavigate } from "react-router-dom"; import { useAuth } from "@web/src/providers/auth-provider"; + +// 定义 MindElixir 插件 的配置 const MIND_OPTIONS = { direction: MindElixir.SIDE, draggable: true, @@ -53,6 +55,7 @@ const MIND_OPTIONS = { }, }; export default function MindEditor({ id }: { id?: string }) { + //containerRef 容器ref instance 实例 const containerRef = useRef(null); const [instance, setInstance] = useState(null); const { isAuthenticated, user, hasSomePermissions } = useAuth(); @@ -71,14 +74,18 @@ export default function MindEditor({ id }: { id?: string }) { }, [user]) const navigate = useNavigate(); const { create, update } = usePost(); + //拿到slug数组 const { data: taxonomies } = api.taxonomy.getAll.useQuery({ type: ObjectType.COURSE, }); + const { handleFileUpload } = useTusUpload(); + //antd表单自带钩子 const [form] = Form.useForm(); + //post 信息 //instance 实例 useEffect(() => { if (post && form && instance && id) { - console.log(post); + console.log('你好',taxonomies); instance.refresh((post as any).meta); const deptIds = (post?.depts || [])?.map((dept) => dept.id); const formData = { @@ -86,8 +93,8 @@ export default function MindEditor({ id }: { id?: string }) { deptIds: deptIds, }; post.terms?.forEach((term) => { - formData[term.taxonomyId] = term.id; // 假设 taxonomyName 是您在 Form.Item 中使用的 name - }); + formData[term.taxonomyId] = term.id // 假设 taxonomyName是您在 Form.Item 中使用的name + }) form.setFieldsValue(formData); } }, [post, form, instance, id]); @@ -108,8 +115,10 @@ export default function MindEditor({ id }: { id?: string }) { nodeMenu: canEdit, // 禁用节点右键菜单 keypress: canEdit, // 禁用键盘快捷键 }); + //初始化 mind.init(MindElixir.new("新学习路径")); containerRef.current.hidden = true; + //挂载实例 setInstance(mind); }, [canEdit]); useEffect(() => { @@ -119,6 +128,7 @@ export default function MindEditor({ id }: { id?: string }) { instance.refresh((post as any)?.meta); } }, [id, post, instance]); + //保存 按钮 函数 const handleSave = async () => { if (!instance) return; const values = form.getFieldsValue(); diff --git a/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx b/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx index bc84b18..90bcd04 100755 --- a/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx +++ b/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx @@ -82,7 +82,7 @@ export function CourseFormProvider({ }, [course, form]); const onSubmit = async (values: any) => { - console.log(values); + const sections = values?.sections || []; const deptIds = values?.deptIds || []; const termIds = taxonomies @@ -149,6 +149,7 @@ export function CourseFormProvider({ } }; + return ( ({ label: value, From 1605cea0aabf48c55e12fc0e5dd00c71dabec0e6 Mon Sep 17 00:00:00 2001 From: longdayi <13477510+longdayilongdayi@user.noreply.gitee.com> Date: Thu, 27 Feb 2025 22:58:42 +0800 Subject: [PATCH 3/7] 02272258 --- apps/server/src/models/post/post.service.ts | 27 +------ apps/web/src/app/main/course/detail/page.tsx | 1 - .../app/main/home/components/HeroSection.tsx | 2 +- apps/web/src/app/main/layout/MainHeader.tsx | 70 ++++++++++--------- .../src/app/main/layout/NavigationMenu.tsx | 9 +-- .../components/MyDutyPathContainer.tsx | 30 ++++++++ apps/web/src/app/main/my-duty-path/page.tsx | 17 +++++ .../components/common/editor/MindEditor.tsx | 16 ++++- .../models/course/detail/CourseDetail.tsx | 6 +- .../course/detail/CourseDetailDisplayArea.tsx | 15 ---- .../course/detail/CourseDetailLayout.tsx | 4 -- .../course/detail/CourseDetailTitle.tsx | 2 +- .../course/detail/course-objectives.tsx | 29 -------- apps/web/src/routes/index.tsx | 8 +++ 14 files changed, 116 insertions(+), 120 deletions(-) create mode 100644 apps/web/src/app/main/my-duty-path/components/MyDutyPathContainer.tsx create mode 100755 apps/web/src/app/main/my-duty-path/page.tsx delete mode 100755 apps/web/src/components/models/course/detail/course-objectives.tsx diff --git a/apps/server/src/models/post/post.service.ts b/apps/server/src/models/post/post.service.ts index 57b2962..5e9a116 100755 --- a/apps/server/src/models/post/post.service.ts +++ b/apps/server/src/models/post/post.service.ts @@ -184,32 +184,7 @@ export class PostService extends BaseTreeService { where?: Prisma.PostWhereInput; orderBy?: OrderByArgs<(typeof db.post)['findMany']>; select?: Prisma.PostSelect; - }): Promise<{ - items: { - id: string; - type: string | null; - level: string | null; - state: string | null; - title: string | null; - subTitle: string | null; - content: string | null; - important: boolean | null; - domainId: string | null; - order: number | null; - duration: number | null; - rating: number | null; - createdAt: Date; - views: number; - publishedAt: Date | null; - updatedAt: Date; - deletedAt: Date | null; - authorId: string | null; - parentId: string | null; - hasChildren: boolean | null; - meta: Prisma.JsonValue | null; - }[]; - totalPages: number; - }> { + }) { // super.updateOrder; return super.findManyWithPagination(args); } diff --git a/apps/web/src/app/main/course/detail/page.tsx b/apps/web/src/app/main/course/detail/page.tsx index 16f7173..82dd7ae 100755 --- a/apps/web/src/app/main/course/detail/page.tsx +++ b/apps/web/src/app/main/course/detail/page.tsx @@ -3,6 +3,5 @@ import { useParams } from "react-router-dom"; export function CourseDetailPage() { const { id, lectureId } = useParams(); - console.log("Course ID:", id); return ; } diff --git a/apps/web/src/app/main/home/components/HeroSection.tsx b/apps/web/src/app/main/home/components/HeroSection.tsx index 4073109..8f6b7a8 100755 --- a/apps/web/src/app/main/home/components/HeroSection.tsx +++ b/apps/web/src/app/main/home/components/HeroSection.tsx @@ -57,7 +57,7 @@ const HeroSection = () => { { icon: , value: statistics.reads, - label: "观看次数", + label: "播放次数", }, ]; }, [statistics]); diff --git a/apps/web/src/app/main/layout/MainHeader.tsx b/apps/web/src/app/main/layout/MainHeader.tsx index c2e383a..deb6b62 100755 --- a/apps/web/src/app/main/layout/MainHeader.tsx +++ b/apps/web/src/app/main/layout/MainHeader.tsx @@ -30,44 +30,44 @@ export function MainHeader() {
- {/* 中间搜索区域 - 允许适当收缩但保持可用性 */} -
- - } - placeholder="搜索课程" - className="w-full md:w-96 rounded-full" - value={searchValue} - onClick={(e) => { - if (!window.location.pathname.startsWith("/search")) { - navigate(`/search`); - window.scrollTo({ - top: 0, - behavior: "smooth", - }); - } - }} - onChange={(e) => setSearchValue(e.target.value)} - onPressEnter={(e) => { - if (!window.location.pathname.startsWith("/search")) { - navigate(`/search`); - window.scrollTo({ - top: 0, - behavior: "smooth", - }); - } - }} - /> -
{/* 右侧区域 - 可以灵活收缩 */}
+ + } + placeholder="搜索课程" + className="w-full md:w-96 rounded-full" + value={searchValue} + onClick={(e) => { + if (!window.location.pathname.startsWith("/search")) { + navigate(`/search`); + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + } + }} + onChange={(e) => setSearchValue(e.target.value)} + onPressEnter={(e) => { + if (!window.location.pathname.startsWith("/search")) { + navigate(`/search`); + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + } + }} + /> {isAuthenticated && ( <> @@ -93,8 +96,11 @@ export function MainHeader() { ) : ( diff --git a/apps/web/src/app/main/layout/NavigationMenu.tsx b/apps/web/src/app/main/layout/NavigationMenu.tsx index 8cca859..3b159e2 100755 --- a/apps/web/src/app/main/layout/NavigationMenu.tsx +++ b/apps/web/src/app/main/layout/NavigationMenu.tsx @@ -11,7 +11,7 @@ export const NavigationMenu = () => { const menuItems = useMemo(() => { const baseItems = [ { key: "home", path: "/", label: "首页" }, - { key: "path", path: "/path", label: "思维导图" }, + { key: "path", path: "/path", label: "全部思维导图" }, { key: "courses", path: "/courses", label: "所有课程" }, ]; @@ -20,9 +20,10 @@ export const NavigationMenu = () => { } else { return [ ...baseItems, - { key: "my-duty", path: "/my-duty", label: "我的授课" }, - { key: "my-learning", path: "/my-learning", label: "我的课程" }, - { key: "my-path", path: "/my-path", label: "我的路径" }, + { key: "my-duty", path: "/my-duty", label: "我创建的课程" }, + { key: "my-learning", path: "/my-learning", label: "我学习的课程" }, + { key: "my-duty-path", path: "/my-duty-path", label: "我创建的思维导图" }, + { key: "my-path", path: "/my-path", label: "我学习的思维导图" }, ]; } }, [isAuthenticated]); diff --git a/apps/web/src/app/main/my-duty-path/components/MyDutyPathContainer.tsx b/apps/web/src/app/main/my-duty-path/components/MyDutyPathContainer.tsx new file mode 100644 index 0000000..148706e --- /dev/null +++ b/apps/web/src/app/main/my-duty-path/components/MyDutyPathContainer.tsx @@ -0,0 +1,30 @@ +import PostList from "@web/src/components/models/course/list/PostList"; +import { useAuth } from "@web/src/providers/auth-provider"; +import { useMainContext } from "../../layout/MainProvider"; +import { PostType } from "@nice/common"; +import PathCard from "@web/src/components/models/post/SubPost/PathCard"; + +export default function MyLearningListContainer() { + const { user } = useAuth(); + const { searchCondition, termsCondition } = useMainContext(); + return ( + <> + } + params={{ + pageSize: 12, + where: { + type: PostType.PATH, + students: { + some: { + id: user?.id, + }, + }, + ...termsCondition, + ...searchCondition, + }, + }} + cols={4}> + + ); +} diff --git a/apps/web/src/app/main/my-duty-path/page.tsx b/apps/web/src/app/main/my-duty-path/page.tsx new file mode 100755 index 0000000..24d7931 --- /dev/null +++ b/apps/web/src/app/main/my-duty-path/page.tsx @@ -0,0 +1,17 @@ +import { useEffect } from "react"; +import BasePostLayout from "../layout/BasePost/BasePostLayout"; +import { useMainContext } from "../layout/MainProvider"; +import { PostType } from "@nice/common"; +import MyDutyPathContainer from "./components/MyDutyPathContainer"; + +export default function MyDutyPathPage() { + const { setSearchMode } = useMainContext(); + useEffect(() => { + setSearchMode(PostType.PATH); + }, [setSearchMode]); + return ( + + + + ); +} diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index 432e3cd..5693436 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -1,6 +1,6 @@ import { Button, Card, Empty, Form, Space, Spin, message, theme } from "antd"; import NodeMenu from "./NodeMenu"; -import { api, usePost } from "@nice/client"; +import { api, usePost, useVisitor } from "@nice/client"; import { ObjectType, PathDto, @@ -8,6 +8,7 @@ import { PostType, Prisma, RolePerms, + VisitType, } from "@nice/common"; import TermSelect from "../../models/term/term-select"; import DepartmentSelect from "../../models/department/department-select"; @@ -23,6 +24,7 @@ export default function MindEditor({ id }: { id?: string }) { const containerRef = useRef(null); const [instance, setInstance] = useState(null); const { isAuthenticated, user, hasSomePermissions } = useAuth(); + const { read } = useVisitor() const { data: post, isLoading }: { data: PathDto; isLoading: boolean } = api.post.findFirst.useQuery({ where: { @@ -42,9 +44,19 @@ export default function MindEditor({ id }: { id?: string }) { }); const { handleFileUpload } = useTusUpload(); const [form] = Form.useForm(); + useEffect(() => { + if (post?.id) { + read.mutateAsync({ + data: { + visitorId: user?.id || null, + postId: post?.id, + type: VisitType.READED, + }, + }); + } + }, [post]); useEffect(() => { if (post && form && instance && id) { - console.log(post); instance.refresh((post as any).meta); const deptIds = (post?.depts || [])?.map((dept) => dept.id); const formData = { diff --git a/apps/web/src/components/models/course/detail/CourseDetail.tsx b/apps/web/src/components/models/course/detail/CourseDetail.tsx index 353ec4f..c33c268 100755 --- a/apps/web/src/components/models/course/detail/CourseDetail.tsx +++ b/apps/web/src/components/models/course/detail/CourseDetail.tsx @@ -8,11 +8,7 @@ export default function CourseDetail({ id?: string; lectureId?: string; }) { - const iframeStyle = { - width: "50%", - height: "100vh", - border: "none", - }; + return ( <> diff --git a/apps/web/src/components/models/course/detail/CourseDetailDisplayArea.tsx b/apps/web/src/components/models/course/detail/CourseDetailDisplayArea.tsx index cfcea17..7d89f1a 100755 --- a/apps/web/src/components/models/course/detail/CourseDetailDisplayArea.tsx +++ b/apps/web/src/components/models/course/detail/CourseDetailDisplayArea.tsx @@ -7,25 +7,10 @@ import { Course, LectureType, PostType } from "@nice/common"; import { CourseDetailContext } from "./CourseDetailContext"; import CollapsibleContent from "@web/src/components/common/container/CollapsibleContent"; import { Skeleton } from "antd"; -import { CoursePreview } from "./CoursePreview/CoursePreview"; import ResourcesShower from "@web/src/components/common/uploader/ResourceShower"; -import { - BookOutlined, - CalendarOutlined, - EditTwoTone, - EyeOutlined, - ReloadOutlined, -} from "@ant-design/icons"; -import dayjs from "dayjs"; import { useNavigate } from "react-router-dom"; import CourseDetailTitle from "./CourseDetailTitle"; -// interface CourseDetailDisplayAreaProps { -// // course: Course; -// // videoSrc?: string; -// // videoPoster?: string; -// // isLoading?: boolean; -// } export const CourseDetailDisplayArea: React.FC = () => { // 创建滚动动画效果 diff --git a/apps/web/src/components/models/course/detail/CourseDetailLayout.tsx b/apps/web/src/components/models/course/detail/CourseDetailLayout.tsx index 56831e4..4ac0d73 100755 --- a/apps/web/src/components/models/course/detail/CourseDetailLayout.tsx +++ b/apps/web/src/components/models/course/detail/CourseDetailLayout.tsx @@ -19,11 +19,7 @@ export default function CourseDetailLayout() { const [isSyllabusOpen, setIsSyllabusOpen] = useState(true); return (
- {/* */} - {/* 添加 Header 组件 */} - {/* 主内容区域 */} - {/* 为了防止 Header 覆盖内容,添加上边距 */}
{" "} {/* 添加这个包装 div */} diff --git a/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx b/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx index cc984e1..90228ad 100755 --- a/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx +++ b/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx @@ -44,7 +44,7 @@ export default function CourseDetailTitle() {
-
{`观看次数${course?.meta?.views || 0}`}
+
{`播放次数${course?.meta?.views || 0}`}
diff --git a/apps/web/src/components/models/course/detail/course-objectives.tsx b/apps/web/src/components/models/course/detail/course-objectives.tsx deleted file mode 100755 index b849eac..0000000 --- a/apps/web/src/components/models/course/detail/course-objectives.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { CheckOutlined } from '@ant-design/icons'; -import React from 'react'; -interface CourseObjectivesProps { - objectives: string[]; - title?: string; -} -const CourseObjectives: React.FC = ({ - objectives, - title = "您将会学到" -}) => { - return ( -
-

{title}

-
- {objectives.map((objective, index) => ( -
- - {objective} -
- ))} -
-
- ); -}; - -export default CourseObjectives; \ No newline at end of file diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 0899fd2..aaab203 100755 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -86,6 +86,14 @@ export const routes: CustomRouteObject[] = [ ), }, + { + path: "my-duty-path", + element: ( + + + + ), + }, { path: "my-duty", element: ( From 52fa9a031a8efbbcde443d3232a0fa79acb05d8b Mon Sep 17 00:00:00 2001 From: longdayi <13477510+longdayilongdayi@user.noreply.gitee.com> Date: Thu, 27 Feb 2025 23:05:12 +0800 Subject: [PATCH 4/7] 02272305 --- apps/web/src/components/common/editor/MindEditor.tsx | 10 +++++++--- apps/web/src/routes/index.tsx | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index d49a126..466026f 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -20,6 +20,7 @@ import { useTusUpload } from "@web/src/hooks/useTusUpload"; import { useNavigate } from "react-router-dom"; import { useAuth } from "@web/src/providers/auth-provider"; import { MIND_OPTIONS } from "./constant"; +import { SaveOutlined } from "@ant-design/icons"; export default function MindEditor({ id }: { id?: string }) { //containerRef 容器ref instance 实例 const containerRef = useRef(null); @@ -170,7 +171,7 @@ export default function MindEditor({ id }: { id?: string }) { return (
- {canEdit && taxonomies && ( + {taxonomies && (
@@ -181,6 +182,7 @@ export default function MindEditor({ id }: { id?: string }) { // rules={[{ required: true }]} noStyle>
- + }
)} diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index aaab203..e04740b 100755 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -70,7 +70,9 @@ export const routes: CustomRouteObject[] = [ }, { path: "editor/:id?", - element: , + element: + + , }, ], }, From 7aea9426463006eccf990898f07b51aeaa0568dd Mon Sep 17 00:00:00 2001 From: Rao <1227431568@qq.com> Date: Thu, 27 Feb 2025 23:06:17 +0800 Subject: [PATCH 5/7] rht --- .../src/app/main/home/components/CoursesSection.tsx | 11 +++++++---- apps/web/src/app/main/home/page.tsx | 12 ++++++++++++ apps/web/src/components/common/editor/MindEditor.tsx | 2 +- apps/web/src/routes/index.tsx | 4 +++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/web/src/app/main/home/components/CoursesSection.tsx b/apps/web/src/app/main/home/components/CoursesSection.tsx index 3280945..40814f4 100755 --- a/apps/web/src/app/main/home/components/CoursesSection.tsx +++ b/apps/web/src/app/main/home/components/CoursesSection.tsx @@ -1,12 +1,10 @@ -import React, { useState, useMemo } from "react"; +import React, { useState, useMemo, ReactNode } from "react"; import { Typography, Skeleton } from "antd"; import { TaxonomySlug, TermDto } from "@nice/common"; import { api } from "@nice/client"; import { CoursesSectionTag } from "./CoursesSectionTag"; import LookForMore from "./LookForMore"; import PostList from "@web/src/components/models/course/list/PostList"; -import PostCard from "@web/src/components/models/post/PostCard"; -import CourseCard from "@web/src/components/models/post/SubPost/CourseCard"; interface GetTaxonomyProps { categories: string[]; isLoading: boolean; @@ -35,11 +33,15 @@ interface CoursesSectionProps { title: string; description: string; initialVisibleCoursesCount?: number; + postType:string; + render?:(post)=>ReactNode } const CoursesSection: React.FC = ({ title, description, initialVisibleCoursesCount = 8, + postType, + render }) => { const [selectedCategory, setSelectedCategory] = useState("全部"); const gateGory: GetTaxonomyProps = useGetTaxonomy({ @@ -83,7 +85,7 @@ const CoursesSection: React.FC = ({ )}
} + renderItem={(post) => render(post)} params={{ page: 1, pageSize: initialVisibleCoursesCount, @@ -95,6 +97,7 @@ const CoursesSection: React.FC = ({ }, } : {}, + type: postType }, }} showPagination={false} diff --git a/apps/web/src/app/main/home/page.tsx b/apps/web/src/app/main/home/page.tsx index 0cf5123..c7db111 100755 --- a/apps/web/src/app/main/home/page.tsx +++ b/apps/web/src/app/main/home/page.tsx @@ -1,6 +1,9 @@ import HeroSection from "./components/HeroSection"; import CategorySection from "./components/CategorySection"; import CoursesSection from "./components/CoursesSection"; +import { PostType } from "@nice/common"; +import PathCard from "@web/src/components/models/post/SubPost/PathCard"; +import CourseCard from "@web/src/components/models/post/SubPost/CourseCard"; const HomePage = () => { @@ -8,10 +11,19 @@ const HomePage = () => { return (
+ } + /> } /> +
); diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index fb07164..087830d 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -187,7 +187,7 @@ export default function MindEditor({ id }: { id?: string }) { return ( -
+
{canEdit && taxonomies && (
, + element: + + , }, ], }, From 30032616163ec7d834c50e6b42f56690ff8297da Mon Sep 17 00:00:00 2001 From: longdayi <13477510+longdayilongdayi@user.noreply.gitee.com> Date: Thu, 27 Feb 2025 23:07:57 +0800 Subject: [PATCH 6/7] 02272307 --- .../components/common/editor/MindEditor.tsx | 2 +- .../src/components/common/editor/NodeMenu.tsx | 5 - apps/web/src/components/common/editor/i18n.ts | 152 ------------------ 3 files changed, 1 insertion(+), 158 deletions(-) delete mode 100755 apps/web/src/components/common/editor/i18n.ts diff --git a/apps/web/src/components/common/editor/MindEditor.tsx b/apps/web/src/components/common/editor/MindEditor.tsx index 466026f..c000d38 100755 --- a/apps/web/src/components/common/editor/MindEditor.tsx +++ b/apps/web/src/components/common/editor/MindEditor.tsx @@ -1,4 +1,4 @@ -import { Button, Card, Empty, Form, Space, Spin, message, theme } from "antd"; +import { Button, Empty, Form, Spin } from "antd"; import NodeMenu from "./NodeMenu"; import { api, usePost, useVisitor } from "@nice/client"; import { diff --git a/apps/web/src/components/common/editor/NodeMenu.tsx b/apps/web/src/components/common/editor/NodeMenu.tsx index a73603f..f762967 100755 --- a/apps/web/src/components/common/editor/NodeMenu.tsx +++ b/apps/web/src/components/common/editor/NodeMenu.tsx @@ -35,23 +35,18 @@ const NodeMenu: React.FC = ({ mind }) => { useEffect(() => { const handleSelectNode = (nodeObj: NodeObj) => { setIsOpen(true); - const style = nodeObj.style || {}; setSelectedFontColor(style.color || ''); setSelectedBgColor(style.background || ''); - setSelectedSize(style.fontSize || '24'); setIsBold(style.fontWeight === 'bold'); setUrl(nodeObj.hyperLink || ''); }; - const handleUnselectNode = () => { setIsOpen(false); }; - mind.bus.addListener('selectNode', handleSelectNode); mind.bus.addListener('unselectNode', handleUnselectNode); - }, [mind]); useEffect(() => { diff --git a/apps/web/src/components/common/editor/i18n.ts b/apps/web/src/components/common/editor/i18n.ts deleted file mode 100755 index ad60d5f..0000000 --- a/apps/web/src/components/common/editor/i18n.ts +++ /dev/null @@ -1,152 +0,0 @@ -interface I18n { - addChild: string - addParent: string - addSibling: string - removeNode: string - focus: string - cancelFocus: string - moveUp: string - moveDown: string - link: string - clickTips: string - font: string - background: string - tag: string - icon: string - tagsSeparate: string - iconsSeparate: string - url: string - memo?: string -} - -const cn: I18n = { - addChild: '插入子节点', - addParent: '插入父节点', - addSibling: '插入同级节点', - removeNode: '删除节点', - focus: '专注', - cancelFocus: '取消专注', - moveUp: '上移', - moveDown: '下移', - link: '连接', - clickTips: '请点击目标节点', - font: '文字', - background: '背景', - tag: '标签', - icon: '图标', - tagsSeparate: '多个标签半角逗号分隔', - iconsSeparate: '多个图标半角逗号分隔', - url: 'URL', -} - -interface I18nCollection { - cn: I18n - zh_CN: I18n - zh_TW: I18n - en: I18n - ru: I18n - ja: I18n - pt: I18n -} - -const i18n: I18nCollection = { - cn, - zh_CN: cn, - zh_TW: { - addChild: '插入子節點', - addParent: '插入父節點', - addSibling: '插入同級節點', - removeNode: '刪除節點', - focus: '專注', - cancelFocus: '取消專注', - moveUp: '上移', - moveDown: '下移', - link: '連接', - clickTips: '請點擊目標節點', - font: '文字', - background: '背景', - tag: '標簽', - icon: '圖標', - tagsSeparate: '多個標簽半角逗號分隔', - iconsSeparate: '多個圖標半角逗號分隔', - url: 'URL', - }, - en: { - addChild: 'Add child', - addParent: 'Add parent', - addSibling: 'Add sibling', - removeNode: 'Remove node', - focus: 'Focus Mode', - cancelFocus: 'Cancel Focus Mode', - moveUp: 'Move up', - moveDown: 'Move down', - link: 'Link', - clickTips: 'Please click the target node', - font: 'Font', - background: 'Background', - tag: 'Tag', - icon: 'Icon', - tagsSeparate: 'Separate tags by comma', - iconsSeparate: 'Separate icons by comma', - url: 'URL', - }, - ru: { - addChild: 'Добавить дочерний элемент', - addParent: 'Добавить родительский элемент', - addSibling: 'Добавить на этом уровне', - removeNode: 'Удалить узел', - focus: 'Режим фокусировки', - cancelFocus: 'Отменить режим фокусировки', - moveUp: 'Поднять выше', - moveDown: 'Опустить ниже', - link: 'Ссылка', - clickTips: 'Пожалуйста, нажмите на целевой узел', - font: 'Цвет шрифта', - background: 'Цвет фона', - tag: 'Тег', - icon: 'Иконка', - tagsSeparate: 'Разделяйте теги запятой', - iconsSeparate: 'Разделяйте иконки запятой', - url: 'URL', - }, - ja: { - addChild: '子ノードを追加する', - addParent: '親ノードを追加します', - addSibling: '兄弟ノードを追加する', - removeNode: 'ノードを削除', - focus: '集中', - cancelFocus: '集中解除', - moveUp: '上へ移動', - moveDown: '下へ移動', - link: 'コネクト', - clickTips: 'ターゲットノードをクリックしてください', - font: 'フォント', - background: 'バックグラウンド', - tag: 'タグ', - icon: 'アイコン', - tagsSeparate: '複数タグはカンマ区切り', - iconsSeparate: '複数アイコンはカンマ区切り', - url: 'URL', - }, - pt: { - addChild: 'Adicionar item filho', - addParent: 'Adicionar item pai', - addSibling: 'Adicionar item irmao', - removeNode: 'Remover item', - focus: 'Modo Foco', - cancelFocus: 'Cancelar Modo Foco', - moveUp: 'Mover para cima', - moveDown: 'Mover para baixo', - link: 'Link', - clickTips: 'Favor clicar no item alvo', - font: 'Fonte', - background: 'Cor de fundo', - tag: 'Tag', - icon: 'Icone', - tagsSeparate: 'Separe tags por virgula', - iconsSeparate: 'Separe icones por virgula', - url: 'URL', - }, -} - -export default i18n \ No newline at end of file From f1d4733d2a4bed7ec3e11dc4dd687b638336f316 Mon Sep 17 00:00:00 2001 From: Rao <1227431568@qq.com> Date: Thu, 27 Feb 2025 23:11:37 +0800 Subject: [PATCH 7/7] rht --- apps/web/src/app/main/home/components/CoursesSection.tsx | 8 +++++--- apps/web/src/app/main/home/components/LookForMore.tsx | 5 ++++- apps/web/src/app/main/home/page.tsx | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/web/src/app/main/home/components/CoursesSection.tsx b/apps/web/src/app/main/home/components/CoursesSection.tsx index 40814f4..cc68bd0 100755 --- a/apps/web/src/app/main/home/components/CoursesSection.tsx +++ b/apps/web/src/app/main/home/components/CoursesSection.tsx @@ -34,14 +34,16 @@ interface CoursesSectionProps { description: string; initialVisibleCoursesCount?: number; postType:string; - render?:(post)=>ReactNode + render?:(post)=>ReactNode; + to:string } const CoursesSection: React.FC = ({ title, description, initialVisibleCoursesCount = 8, postType, - render + render, + to }) => { const [selectedCategory, setSelectedCategory] = useState("全部"); const gateGory: GetTaxonomyProps = useGetTaxonomy({ @@ -102,7 +104,7 @@ const CoursesSection: React.FC = ({ }} showPagination={false} cols={4}> - +
); diff --git a/apps/web/src/app/main/home/components/LookForMore.tsx b/apps/web/src/app/main/home/components/LookForMore.tsx index 88e1b41..2bd74cc 100755 --- a/apps/web/src/app/main/home/components/LookForMore.tsx +++ b/apps/web/src/app/main/home/components/LookForMore.tsx @@ -11,7 +11,10 @@ export default function LookForMore({to}:{to:string}) {