diff --git a/imeeting-h5/src/components/preview/MeetingPreviewView.css b/imeeting-h5/src/components/preview/MeetingPreviewView.css index 0c9c051..b68901e 100644 --- a/imeeting-h5/src/components/preview/MeetingPreviewView.css +++ b/imeeting-h5/src/components/preview/MeetingPreviewView.css @@ -72,7 +72,6 @@ } .meeting-preview-collapsible-section, -.meeting-preview-share-settings, .meeting-preview-content-card { background: var(--bg-surface); border-radius: 20px; @@ -155,29 +154,53 @@ font-weight: 600; } -.meeting-preview-share-settings { - padding: 20px; +.meeting-preview-share-settings-compact { + padding: 16px 20px; margin-bottom: 20px; -} - -.meeting-preview-share-settings-title { - font-size: 18px; - font-weight: 800; - margin-bottom: 4px; -} - -.meeting-preview-share-settings-desc { - color: var(--text-secondary); - margin-bottom: 16px; -} - -.meeting-preview-share-settings-row { + background: var(--bg-surface); + border-radius: 20px; + border: 1px solid var(--border-color); + box-shadow: var(--card-shadow); display: flex; - gap: 12px; + align-items: center; + justify-content: center; } -.meeting-preview-share-settings-row .ant-input-affix-wrapper { +.share-password-display { + display: flex; + align-items: center; + gap: 12px; + width: 100%; +} + +.share-password-label { + color: var(--text-secondary); + font-weight: 600; + display: flex; + align-items: center; + flex-shrink: 0; +} + +.share-password-value { + font-family: monospace; + font-weight: 800; + font-size: 15px; + background: #f8faff; + padding: 4px 12px; + border-radius: 8px; + border: 1px dashed var(--primary-blue); + color: var(--primary-blue); + flex: 1; + text-align: center; +} + +.set-password-btn { + width: 100%; border-radius: 14px; + height: 48px; + font-weight: 600; + color: var(--primary-blue); + border-color: var(--primary-blue); } .meeting-preview-share-bar { @@ -539,14 +562,11 @@ } .meeting-preview-share-bar, - .meeting-preview-share-settings-row, .meeting-preview-catalog-item-title-row { flex-direction: column; } - .meeting-preview-share-bar .ant-btn, - .meeting-preview-share-settings-row .ant-btn, - .meeting-preview-share-settings-row .ant-input-affix-wrapper { + .meeting-preview-share-bar .ant-btn { width: 100%; } diff --git a/imeeting-h5/src/components/preview/MeetingPreviewView.tsx b/imeeting-h5/src/components/preview/MeetingPreviewView.tsx index 78ff32f..bac65f9 100644 --- a/imeeting-h5/src/components/preview/MeetingPreviewView.tsx +++ b/imeeting-h5/src/components/preview/MeetingPreviewView.tsx @@ -16,7 +16,7 @@ import { UpOutlined, UserOutlined, } from "@ant-design/icons"; -import {Alert, Button, Empty, Input, Tabs, message} from "antd"; +import {Alert, Button, Empty, Input, Tabs, message, Modal} from "antd"; import dayjs from "dayjs"; import ReactMarkdown from "react-markdown"; @@ -45,7 +45,7 @@ interface MeetingPreviewViewProps { sharePasswordDraft?: string; shareSaving?: boolean; onSharePasswordDraftChange?: (value: string) => void; - onSaveSharePassword?: () => void; + onSaveSharePassword?: () => void | Promise; onCopyShareLink?: () => void | Promise; } @@ -174,6 +174,7 @@ export default function MeetingPreviewView({ const [isMetricsExpanded, setIsMetricsExpanded] = useState(false); const [linkedTranscriptIds, setLinkedTranscriptIds] = useState([]); const [linkedChapterKey, setLinkedChapterKey] = useState(null); + const [isPasswordModalVisible, setIsPasswordModalVisible] = useState(false); const analysis = useMemo( () => buildMeetingAnalysis(meeting?.analysis, meeting?.summaryContent, meeting?.tags || ""), @@ -397,20 +398,34 @@ export default function MeetingPreviewView({ {editableShare ? ( -
-
{TEXT.shareSettings}
-
{TEXT.shareSettingsHint}
-
- } - onChange={(event) => onSharePasswordDraftChange?.(event.target.value)} - /> - +
+ ) : ( + -
+ )} ) : null} @@ -566,6 +581,36 @@ export default function MeetingPreviewView({ + { + if (onSaveSharePassword) { + await onSaveSharePassword(); + } + setIsPasswordModalVisible(false); + }} + onCancel={() => { + setIsPasswordModalVisible(false); + onSharePasswordDraftChange?.(meeting.accessPassword || ""); + }} + confirmLoading={shareSaving} + okText="保存" + cancelText="取消" + destroyOnClose + > +
+ {TEXT.shareSettingsHint} +
+ } + onChange={(event) => onSharePasswordDraftChange?.(event.target.value)} + allowClear + /> +
+ {playbackAudioUrl ? (