}
onClick={() => setCollapsed(false)}
style={{
- color: token.colorWhite,
+ color: shell.siderText,
width: '100%',
height: '100%',
padding: 0,
@@ -549,39 +557,53 @@ export default function ProjectList() {
/>
) : (
<>
-
+
-
- 墨木灵思
-
+
+
+ {VERSION_INFO.projectName}
+
+
+ 铜墨编辑部
+
+
}
onClick={() => setCollapsed(true)}
style={{
- color: token.colorWhite,
+ color: shell.siderMuted,
width: 32,
height: 32,
padding: 0,
@@ -594,13 +616,14 @@ export default function ProjectList() {
);
-}
+}
\ No newline at end of file
diff --git a/frontend/src/pages/PromptTemplates.tsx b/frontend/src/pages/PromptTemplates.tsx
index a656d77..e46176d 100644
--- a/frontend/src/pages/PromptTemplates.tsx
+++ b/frontend/src/pages/PromptTemplates.tsx
@@ -248,8 +248,7 @@ export default function PromptTemplates() {
};
const currentTemplates = getCurrentTemplates();
- const pageBackground = `linear-gradient(180deg, ${token.colorBgLayout} 0%, ${token.colorFillSecondary} 100%)`;
- const headerBackground = `linear-gradient(135deg, ${token.colorPrimary} 0%, ${token.colorPrimaryHover} 100%)`;
+ const pageBackground = token.colorBgLayout;
return (
<>
@@ -269,73 +268,37 @@ export default function PromptTemplates() {
display: 'flex',
flexDirection: 'column',
}}>
- {/* 顶部导航卡片 */}
+ {/* 顶部标题区 */}
- {/* 装饰性背景元素 */}
-
-
-
-
-
+
-
-
+
+
提示词模板管理
-
- 自定义AI生成提示词,打造个性化创作体验
+
+ 自定义 AI 生成提示词,打造个性化创作体验
- }
- onClick={handleExport}
- size={isMobile ? 'small' : 'middle'}
- style={{
- borderRadius: 12,
- background: token.colorWhite,
- border: `1px solid ${token.colorWhite}`,
- boxShadow: token.boxShadow,
- color: token.colorPrimary,
- fontWeight: 600,
- backdropFilter: 'blur(10px)',
- transition: 'all 0.3s ease'
- }}
- >
+ } onClick={handleExport} size={isMobile ? 'small' : 'middle'}>
导出配置
-
- }
- size={isMobile ? 'small' : 'middle'}
- style={{
- borderRadius: 12,
- background: token.colorWhite,
- border: `1px solid ${token.colorWhite}`,
- boxShadow: token.boxShadow,
- color: token.colorPrimary,
- fontWeight: 600,
- backdropFilter: 'blur(10px)',
- }}
- >
+
+ } size={isMobile ? 'small' : 'middle'}>
导入配置
@@ -343,7 +306,6 @@ export default function PromptTemplates() {
- {/* 使用提示 */}
@@ -354,20 +316,20 @@ export default function PromptTemplates() {
description={
- • 系统默认模板(灰色头部):始终启用,无需手动开关。点击"编辑"后将创建您的自定义副本。
+ • 系统默认模板(灰底标题):始终启用,无需手动开关。点击「编辑」后将创建您的自定义副本。
- • 已自定义模板(紫色头部):可通过开关控制启用/禁用,使用 {'{variable_name}'} 格式表示变量占位符。点击"重置"可恢复为系统默认。
+ • 已自定义模板(赭石标题):可通过开关控制启用/禁用,使用 {'{variable_name}'} 格式表示变量占位符。点击「重置」可恢复为系统默认。
}
type="info"
showIcon={false}
style={{
- marginTop: isMobile ? 16 : 24,
- borderRadius: 12,
- background: token.colorInfoBg,
- border: `1px solid ${token.colorInfoBorder}`
+ marginTop: isMobile ? 16 : 20,
+ borderRadius: 2,
+ background: token.colorFillTertiary,
+ border: `1px solid ${token.colorBorder}`,
}}
/>
@@ -381,8 +343,9 @@ export default function PromptTemplates() {
variant="borderless"
style={{
background: token.colorBgContainer,
- borderRadius: isMobile ? 12 : 16,
- boxShadow: token.boxShadowSecondary,
+ borderRadius: 2,
+ border: `1px solid ${token.colorBorder}`,
+ boxShadow: 'none',
marginBottom: isMobile ? 16 : 24
}}
styles={{ body: { padding: isMobile ? '12px' : '16px' } }}
@@ -407,8 +370,9 @@ export default function PromptTemplates() {
variant="borderless"
style={{
background: token.colorBgContainer,
- borderRadius: isMobile ? 12 : 16,
- boxShadow: token.boxShadowSecondary,
+ borderRadius: 2,
+ border: `1px solid ${token.colorBorder}`,
+ boxShadow: 'none',
}}
>
}
onClick={() => handleEdit(template)}
size={isMobile ? 'small' : 'middle'}
- style={{ borderRadius: 6 }}
+ style={{ borderRadius: 2 }}
>
编辑
@@ -498,7 +462,7 @@ export default function PromptTemplates() {
icon={
}
onClick={() => handleReset(template.template_key)}
size={isMobile ? 'small' : 'middle'}
- style={{ borderRadius: 6 }}
+ style={{ borderRadius: 2 }}
>
重置
diff --git a/frontend/src/pages/Settings.tsx b/frontend/src/pages/Settings.tsx
index 5326015..569cb68 100644
--- a/frontend/src/pages/Settings.tsx
+++ b/frontend/src/pages/Settings.tsx
@@ -4,6 +4,7 @@ import { SaveOutlined, DeleteOutlined, ReloadOutlined, InfoCircleOutlined, Check
import { settingsApi, mcpPluginApi } from '../services/api';
import type { SettingsUpdate, APIKeyPreset, PresetCreateRequest, APIKeyPresetConfig } from '../types';
import { eventBus, EventNames } from '../store/eventBus';
+import { VERSION_INFO } from '../config/version';
const { Title, Text } = Typography;
const { Option } = Select;
@@ -284,25 +285,29 @@ export default function SettingsPage() {
});
};
- const mumuTextDefaultUrl = 'https://api.mumuverse.space/v1';
- const mumuRegisterUrl = 'https://api.mumuverse.space/register?aff=4NN8';
- const mumuCoverBaseUrlOptions = [
- { value: 'https://api.mumuverse.space/v1beta', label: 'https://api.mumuverse.space/v1beta', defaultModel: 'gemini-3.1-flash-image-preview' },
- { value: 'https://api.mumuverse.space/v1', label: 'https://api.mumuverse.space/v1', defaultModel: 'gpt-image-1.5' },
+ const xinmiApiHost = VERSION_INFO.xinmiApiBaseUrl.replace(/\/$/, '');
+ const xinmiTextDefaultUrl = `${xinmiApiHost}/v1`;
+ const officialApiDocUrl = VERSION_INFO.officialApiDocUrl;
+ const openOfficialApiDoc = () => {
+ window.open(officialApiDocUrl, '_blank', 'noopener,noreferrer');
+ };
+ const xinmiCoverBaseUrlOptions = [
+ { value: `${xinmiApiHost}/v1beta`, label: 'v1beta', defaultModel: 'gemini-3.1-flash-image-preview' },
+ { value: `${xinmiApiHost}/v1`, label: 'v1', defaultModel: 'gpt-image-1.5' },
];
const defaultCoverSettings = {
cover_enabled: false,
- cover_api_provider: 'mumu',
+ cover_api_provider: 'xinmi',
cover_api_key: '',
- cover_api_base_url: mumuCoverBaseUrlOptions[0].value,
- cover_image_model: mumuCoverBaseUrlOptions[0].defaultModel,
+ cover_api_base_url: xinmiCoverBaseUrlOptions[0].value,
+ cover_image_model: xinmiCoverBaseUrlOptions[0].defaultModel,
};
const apiProviders = [
{
- value: 'mumu',
- label: 'MuMuのAPI',
- defaultUrl: mumuTextDefaultUrl,
+ value: 'xinmi',
+ label: 'XinMi API',
+ defaultUrl: xinmiTextDefaultUrl,
defaultModel: 'gemini-3-flash-preview'
},
{ value: 'openai', label: 'OpenAI Compatible', defaultUrl: 'https://api.openai.com/v1' },
@@ -321,7 +326,7 @@ export default function SettingsPage() {
if (provider.defaultUrl) {
nextValues.api_base_url = provider.defaultUrl;
}
- if (provider.value === 'mumu') {
+ if (provider.value === 'xinmi') {
nextValues.api_key = '';
nextValues.llm_model = provider.defaultModel || 'gemini-3-flash-preview';
}
@@ -334,10 +339,10 @@ export default function SettingsPage() {
const coverApiProviders = [
{
- value: 'mumu',
- label: 'MuMuのAPI',
- defaultUrl: mumuCoverBaseUrlOptions[0].value,
- defaultModel: mumuCoverBaseUrlOptions[0].defaultModel,
+ value: 'xinmi',
+ label: 'XinMi API',
+ defaultUrl: xinmiCoverBaseUrlOptions[0].value,
+ defaultModel: xinmiCoverBaseUrlOptions[0].defaultModel,
},
{ value: 'gemini', label: 'Google Gemini', defaultUrl: 'https://generativelanguage.googleapis.com/v1beta' },
{ value: 'grok', label: 'Grok', defaultUrl: 'https://api.x.ai/v1' },
@@ -354,20 +359,20 @@ export default function SettingsPage() {
if (provider.defaultUrl) {
nextValues.cover_api_base_url = provider.defaultUrl;
}
- if (provider.value === 'mumu') {
+ if (provider.value === 'xinmi') {
nextValues.cover_api_key = '';
- nextValues.cover_image_model = provider.defaultModel || mumuCoverBaseUrlOptions[0].defaultModel;
+ nextValues.cover_image_model = provider.defaultModel || xinmiCoverBaseUrlOptions[0].defaultModel;
}
form.setFieldsValue(nextValues);
setCoverTestResult(null);
};
- const handleMumuCoverBaseUrlChange = (value: string) => {
- const option = mumuCoverBaseUrlOptions.find(item => item.value === value);
+ const handleXinmiCoverBaseUrlChange = (value: string) => {
+ const option = xinmiCoverBaseUrlOptions.find(item => item.value === value);
form.setFieldsValue({
cover_api_base_url: value,
- cover_image_model: option?.defaultModel || mumuCoverBaseUrlOptions[0].defaultModel,
+ cover_image_model: option?.defaultModel || xinmiCoverBaseUrlOptions[0].defaultModel,
});
setCoverTestResult(null);
};
@@ -611,7 +616,7 @@ export default function SettingsPage() {
if (provider.defaultUrl) {
nextValues.api_base_url = provider.defaultUrl;
}
- if (provider.value === 'mumu') {
+ if (provider.value === 'xinmi') {
nextValues.api_key = '';
nextValues.llm_model = provider.defaultModel || 'gemini-3-flash-preview';
}
@@ -923,7 +928,7 @@ export default function SettingsPage() {
// return 'purple';
case 'gemini':
return 'green';
- case 'mumu':
+ case 'xinmi':
return 'magenta';
default:
return 'default';
@@ -1228,11 +1233,11 @@ export default function SettingsPage() {
- {selectedProvider === 'mumu' && (
+ {selectedProvider === 'xinmi' && (
@@ -1241,9 +1246,9 @@ export default function SettingsPage() {
@@ -1740,22 +1745,22 @@ export default function SettingsPage() {
- {selectedCoverProvider === 'mumu' && (
+ {selectedCoverProvider === 'xinmi' && (
- 已固定提供 MuMuのAPI 图片接口地址选项,切换地址时会自动带出推荐模型。API Key 需前往 MuMuのAPI 站点注册获取。
+ 已固定提供墨木灵思 API 图片接口地址选项,切换地址时会自动带出推荐模型。API Key 请按文档在控制台获取。
@@ -1765,15 +1770,15 @@ export default function SettingsPage() {
)}
-
+
- {selectedCoverProvider === 'mumu' ? (
+ {selectedCoverProvider === 'xinmi' ? (