|
1 | 1 | import { useEffect, useState } from "react";
|
2 | 2 | import { Table } from "antd";
|
3 | 3 | import { Radio, Button } from "antd";
|
| 4 | +import { ExposeParam, MdEditor } from "md-editor-rt"; |
4 | 5 | import { EditableMessage, Input, TextArea } from "@lobehub/ui";
|
5 | 6 | import { UploadFile } from "@/services/StorageService";
|
6 | 7 | import { CreateWikiDetails } from "@/services/WikiService";
|
7 | 8 | import { ProcessMode, TrainingPattern } from './index.d';
|
| 9 | +import { useUserStore } from "@/store/user"; |
| 10 | +import 'md-editor-rt/lib/style.css'; |
| 11 | +import { userGeneralSettingsSelectors } from "@/store/user/selectors"; |
8 | 12 |
|
9 | 13 | interface IUploadWikiDataProps {
|
10 | 14 | id: string;
|
11 | 15 | onChagePath(key: any): void;
|
12 | 16 | }
|
13 | 17 |
|
| 18 | +let isUploading = false; |
14 | 19 | export default function UploadWikiData(props: IUploadWikiDataProps) {
|
15 | 20 | const [editing, setEdit] = useState(true)
|
16 | 21 | const [content, setContent] = useState('');
|
17 |
| - |
| 22 | + |
| 23 | + const themeMode = useUserStore(userGeneralSettingsSelectors.currentThemeMode); |
18 | 24 | const [processMode, setProcessMode] = useState(ProcessMode.Auto);
|
19 | 25 | const [trainingPattern, setTrainingPattern] = useState(TrainingPattern.Subsection);
|
20 | 26 | const [maxTokensPerParagraph, setMaxTokensPerParagraph] = useState(1000); // 每个段落标记的最大数量。当对文档进行分区时,每个分区通常包含一个段落。
|
@@ -57,44 +63,78 @@ export default function UploadWikiData(props: IUploadWikiDataProps) {
|
57 | 63 | props.onChagePath('data-item');
|
58 | 64 | }
|
59 | 65 |
|
| 66 | + |
| 67 | + function getTheme() { |
| 68 | + if (themeMode === 'dark') { |
| 69 | + return 'dark' |
| 70 | + } else if (themeMode === 'light') { |
| 71 | + return 'light' |
| 72 | + } |
| 73 | + else if (themeMode === 'auto') { |
| 74 | + // 得到系统的主题 |
| 75 | + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { |
| 76 | + return 'dark' |
| 77 | + } |
| 78 | + return 'light' |
| 79 | + } |
| 80 | + |
| 81 | + return 'light' |
| 82 | + } |
| 83 | + |
| 84 | + |
60 | 85 | return (
|
61 | 86 | <>
|
62 | 87 |
|
63 | 88 | <div >
|
64 | 89 | <Button onClick={() => {
|
65 | 90 | props.onChagePath('data-item')
|
66 | 91 | }}>返回</Button>
|
| 92 | + <Button |
| 93 | + type="primary" |
| 94 | + onClick={save} style={{ |
| 95 | + marginLeft: 10 |
| 96 | + }}>保存</Button> |
| 97 | + |
67 | 98 | </div>
|
68 | 99 |
|
69 | 100 | <div style={{
|
70 | 101 | display: 'flex',
|
71 | 102 | padding: '20px',
|
72 | 103 | }}>
|
73 |
| - <EditableMessage |
74 |
| - styles={{ |
75 |
| - input: { |
76 |
| - width: '100%', |
77 |
| - height: '100%' |
78 |
| - }, |
79 |
| - markdown: { |
80 |
| - width: '100%', |
81 |
| - height: '100%' |
82 |
| - } |
83 |
| - }} |
84 |
| - editing={editing} |
85 |
| - text={{ |
86 |
| - cancel: "取消", |
87 |
| - confirm: "保存", |
88 |
| - edit: "编辑", |
| 104 | + |
| 105 | + <MdEditor |
| 106 | + showCodeRowNumber={true} |
| 107 | + style={{ |
| 108 | + height: '100%', |
| 109 | + borderRadius: 8, |
| 110 | + overflow: 'auto', |
| 111 | + maxHeight: '500px', |
89 | 112 | }}
|
90 |
| - placeholder="请输入您的内容" |
91 |
| - onEditingChange={() => { |
92 |
| - // |
93 |
| - save(); |
| 113 | + autoFocus={true} |
| 114 | + onUploadImg={(files, callback) => { |
| 115 | + if (isUploading) return; |
| 116 | + isUploading = true; |
| 117 | + for (let i = 0; i < files.length; i++) { |
| 118 | + const file = files[i]; |
| 119 | + UploadFile(file).then((data) => { |
| 120 | + callback([ |
| 121 | + { |
| 122 | + url: data.path, |
| 123 | + alt: file.name, |
| 124 | + title: file.name |
| 125 | + } |
| 126 | + ]); |
| 127 | + isUploading = false; |
| 128 | + }) |
| 129 | + |
| 130 | + } |
94 | 131 | }}
|
95 |
| - value={content} |
96 |
| - onChange={setContent} |
97 |
| - /> |
| 132 | + autoDetectCode={true} |
| 133 | + theme={getTheme()} |
| 134 | + modelValue={content} |
| 135 | + onChange={(v) => { |
| 136 | + setContent(v); |
| 137 | + }} /> |
98 | 138 | </div>
|
99 | 139 |
|
100 | 140 | <div style={{
|
|
0 commit comments