From 9fcd8cd7cd8b09b7b065e98002c8706de5d3143c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=81=E5=86=9C=E9=98=BF=E6=A5=A0?= Date: Fri, 11 Sep 2026 01:03:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E7=A7=BB=E9=99=A4=E5=88=86?= =?UTF-8?q?=E5=B1=8F=E9=A2=84=E8=A7=88=EF=BC=8C=E7=BC=96=E8=BE=91=E9=A1=B5?= =?UTF-8?q?=E6=94=B9=E7=94=A8=E6=BA=90=E7=A0=81=E6=A8=A1=E5=BC=8F=E5=BC=80?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AdminEdit:删除 showPreview 分屏块与 MarkdownViewer 引入;顶栏按钮语义改为 「源码模式 / 退出源码」,作为即时渲染的逃生舱(方案 §4.7),工具栏提示随模式切换 - index.css:移除随分屏预览一并废弃的 .pn-ae-preview 样式 编辑态与阅读态已同构(同一套 --md-* 契约),分屏预览失去存在意义;保留一键源码模式, 装饰层万一出问题用户仍可退回可用的纯源码编辑。 --- web/src/index.css | 8 -------- web/src/pages/AdminEdit.tsx | 21 ++++++++------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/web/src/index.css b/web/src/index.css index a320a70..96548bd 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -1749,14 +1749,6 @@ button.pn-ae-tool svg { min-height: 420px; border-radius: var(--radius-sm); } -.pn-ae-preview { - margin-top: 20px; - padding: 4px 2px 0; - border-top: 1px solid var(--border); -} -.pn-ae-preview .pn-note-body { - margin-top: 20px; -} .pn-ae-upload-alert { margin-top: 10px; } diff --git a/web/src/pages/AdminEdit.tsx b/web/src/pages/AdminEdit.tsx index 29b50c6..adc1fab 100644 --- a/web/src/pages/AdminEdit.tsx +++ b/web/src/pages/AdminEdit.tsx @@ -3,7 +3,7 @@ import { useNavigate, useParams } from 'react-router' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import dayjs from 'dayjs' import { - Bold, Code, Eye, EyeOff, Italic, Link2, List, Quote, + Bold, Code, Eye, FileCode2, Italic, Link2, List, Quote, Save, Table, Trash2, } from 'lucide-react' import { Alert, Badge, Button, Card, DatePicker, Divider, Input, Select, Spin, Switch } from 'antd' @@ -11,7 +11,6 @@ import { api, ApiError } from '../lib/api' import type { NoteItem } from '../lib/api' import { invalidatePublic } from '../lib/invalidate' import { useDocumentTitle } from '../features/site' -import MarkdownViewer from '../components/MarkdownViewer' import { AdminTopbar } from '../components/Layout' import { useToast } from '@/hooks/use-toast' import { slugPreview } from '../lib/utils' @@ -71,7 +70,7 @@ export default function AdminEdit() { const [form, setForm] = useState
(emptyForm) const [errorMsg, setErrorMsg] = useState(null) const [slugFieldError, setSlugFieldError] = useState(null) - const [showPreview, setShowPreview] = useState(false) + const [sourceMode, setSourceMode] = useState(false) const [uploadMsg, setUploadMsg] = useState<{ kind: 'busy' | 'error'; text: string } | null>(null) const dirtyRef = useRef(false) const slugTouchedRef = useRef(false) @@ -202,10 +201,11 @@ export default function AdminEdit() {