update:1.更新readme文档 2.更新项目版本号

This commit is contained in:
xiamuceer
2025-12-15 16:38:41 +08:00
parent a753c75b9c
commit da7610f2dc
8 changed files with 48 additions and 24 deletions
+28 -4
View File
@@ -2,7 +2,7 @@
<div align="center">
![Version](https://img.shields.io/badge/version-1.1.2-blue.svg)
![Version](https://img.shields.io/badge/version-1.1.3-blue.svg)
![Python](https://img.shields.io/badge/python-3.11-blue.svg)
![FastAPI](https://img.shields.io/badge/FastAPI-0.109.0-green.svg)
![React](https://img.shields.io/badge/react-18.3.1-blue.svg)
@@ -41,18 +41,42 @@
- 💾 **PostgreSQL** - 生产级数据库,多用户数据隔离
- 🐳 **Docker 部署** - 一键启动,开箱即用
## 📸 项目预览
<div align="center">
### 登录界面
![登录界面](images/1.png)
### 主界面
![主界面](images/2.png)
### 项目管理
![项目管理](images/3.png)
### 赞助我 💖
![赞助我](images/4.png)
</div>
## 📋 TODO List
### ✅ 已完成功能
- [x] **灵感模式** - 创作灵感和点子生成
- [x] **自定义写作风格** - 支持自定义 AI 写作风格
- [x] **数据导入导出** - 项目数据的导入导出
- [ ] **Prompt 调整界面** - 可视化编辑 Prompt 模板
- [x] **Prompt 调整界面** - 可视化编辑 Prompt 模板
- [x] **章节字数限制** - 用户可设置生成字数
- [ ] **设定追溯与矛盾检测** - 自动检测设定冲突
- [ ] **思维链与章节关系图谱** - 可视化章节逻辑关系
- [x] **思维链与章节关系图谱** - 可视化章节逻辑关系
- [x] **根据分析一键重写** - 根据分析建议重新生成
- [x] **Linux DO 自动创建账号** - OAuth 登录自动生成账号
### 📝 规划中功能
- [ ] **职业等级体系** - 小说世界观中的职业和等级系统
- [ ] **角色/组织卡片导入导出** - 单独导出角色和组织数据
> 💡 欢迎提交 Issue 或 Pull Request
## 🚀 快速开始
+1 -1
View File
@@ -8,7 +8,7 @@
# 应用配置
# ==========================================
APP_NAME=MuMuAINovel
APP_VERSION=1.1.2
APP_VERSION=1.1.3
APP_HOST=0.0.0.0
APP_PORT=8000
DEBUG=false
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "frontend",
"private": true,
"version": "1.1.2",
"version": "1.1.3",
"type": "module",
"scripts": {
"dev": "vite",
+18 -18
View File
@@ -21,13 +21,13 @@ export default function AuthCallback() {
// 后端会通过 Cookie 自动设置认证信息
// 这里只需要验证登录状态
await authApi.getCurrentUser();
// 检查密码状态
const pwdStatus = await authApi.getPasswordStatus();
setPasswordStatus(pwdStatus);
setStatus('success');
// 只有在用户完全没有密码时才显示密码设置提示
// 如果已经有密码(无论是默认密码还是自定义密码),都不再提示
if (!pwdStatus.has_password) {
@@ -36,16 +36,16 @@ export default function AuthCallback() {
}, 1000);
return;
}
// 从 sessionStorage 获取重定向地址
const redirect = sessionStorage.getItem('login_redirect') || '/';
sessionStorage.removeItem('login_redirect');
// 检查是否永久隐藏公告或今日已隐藏
const hideForever = localStorage.getItem('announcement_hide_forever');
const hideToday = localStorage.getItem('announcement_hide_today');
const today = new Date().toDateString();
if (hideForever === 'true' || hideToday === today) {
// 延迟一下再跳转,让用户看到成功提示
setTimeout(() => {
@@ -74,7 +74,7 @@ export default function AuthCallback() {
justifyContent: 'center',
alignItems: 'center',
minHeight: '100vh',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
background: 'linear-gradient(135deg, #4D8088 0%, #5F9EA8 100%)',
}}>
<div style={{ textAlign: 'center' }}>
<Spin size="large" />
@@ -93,7 +93,7 @@ export default function AuthCallback() {
justifyContent: 'center',
alignItems: 'center',
minHeight: '100vh',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
background: 'linear-gradient(135deg, #4D8088 0%, #5F9EA8 100%)',
}}>
<Result
status="error"
@@ -147,15 +147,15 @@ export default function AuthCallback() {
await authApi.setPassword(newPassword);
message.success('密码设置成功');
setShowPasswordModal(false);
// 继续后续流程
const redirect = sessionStorage.getItem('login_redirect') || '/';
sessionStorage.removeItem('login_redirect');
const hideForever = localStorage.getItem('announcement_hide_forever');
const hideToday = localStorage.getItem('announcement_hide_today');
const today = new Date().toDateString();
if (hideForever === 'true' || hideToday === today) {
setTimeout(() => {
navigate(redirect);
@@ -174,15 +174,15 @@ export default function AuthCallback() {
const handleSkipPasswordSetting = () => {
setShowPasswordModal(false);
// 继续后续流程
const redirect = sessionStorage.getItem('login_redirect') || '/';
sessionStorage.removeItem('login_redirect');
const hideForever = localStorage.getItem('announcement_hide_forever');
const hideToday = localStorage.getItem('announcement_hide_today');
const today = new Date().toDateString();
if (hideForever === 'true' || hideToday === today) {
setTimeout(() => {
navigate(redirect);
@@ -202,7 +202,7 @@ export default function AuthCallback() {
onDoNotShowToday={handleDoNotShowToday}
onNeverShow={handleNeverShow}
/>
<Modal
title="设置账号密码"
open={showPasswordModal}
@@ -224,7 +224,7 @@ export default function AuthCallback() {
borderRadius: 4,
marginTop: 12
}}>
<strong></strong>{passwordStatus.username}<br/>
<strong></strong>{passwordStatus.username}<br />
<strong></strong><code style={{
background: '#fff',
padding: '2px 8px',
@@ -235,7 +235,7 @@ export default function AuthCallback() {
</div>
)}
</div>
<div style={{ marginTop: 20 }}>
<div style={{ marginBottom: 12 }}>
<label>6</label>
@@ -263,7 +263,7 @@ export default function AuthCallback() {
justifyContent: 'center',
alignItems: 'center',
minHeight: '100vh',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
background: 'linear-gradient(135deg, #4D8088 0%, #5F9EA8 100%)',
}}>
<Result
status="success"
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 644 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB