- {/* Placeholder Avatar */}
-
+ {/* Avatar */}
+ {user?.avatar ?

:
}
- 张老师
+ {user?.nickName || user?.userName || '加载中...'}
- 高级教师
+ 管理员
diff --git a/src/pages/assets/AssetLibrary.tsx b/src/pages/assets/AssetLibrary.tsx
index 44426e3..547c5f2 100644
--- a/src/pages/assets/AssetLibrary.tsx
+++ b/src/pages/assets/AssetLibrary.tsx
@@ -1,18 +1,19 @@
import { useState, useEffect } from 'react'
-import { Filter, Download, Eye, Heart } from 'lucide-react'
+import { Filter, Download, Eye, Heart, Loader2 } from 'lucide-react'
import { Button } from '@/components/ui/button'
import { Card, CardContent, CardFooter } from '@/components/ui/card'
import { cn } from '@/lib/utils'
+import { getSimulationUploadList } from '@/api/simulation'
+import { SimulationResource } from '@/api/simulationTypes'
+import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'
+import { Badge } from '@/components/ui/badge'
+import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
// 模拟数据
const tabs = [
"全部", "地形", "天气", "特效", "高亮", "视频", "VR", "动画", "前端", "后端", "特殊"
]
-import { getSimulationUploadList } from '@/api/simulation'
-import { SimulationResource } from '@/api/simulationTypes'
-import { Loader2 } from 'lucide-react'
-
export default function AssetLibrary() {
const [activeTab, setActiveTab] = useState("全部")
const [assets, setAssets] = useState
([])
@@ -27,7 +28,6 @@ export default function AssetLibrary() {
const response = await getSimulationUploadList({
pageNum: 1,
pageSize: 20, // Fetch more initially
- // If "全部" is selected, don't filter by type (or handle specific types if needed)
types: activeTab === "全部" ? undefined : activeTab
})
@@ -46,98 +46,117 @@ export default function AssetLibrary() {
}, [activeTab])
return (
-
- {/* Top Tabs & Filter Bar */}
-
-
- {tabs.map((tab) => (
-
- ))}
+
+
+ {/* Top Tabs & Filter Bar */}
+
+
+
+ {tabs.map((tab) => (
+
+ {tab}
+
+ ))}
+
+
+
+
+ 共 {total} 个资源
+
+
-
+ {/* Asset Grid */}
+
+ {loading ? (
+
+
+
+ ) : assets.length === 0 ? (
+
+ 暂无资源数据
+
+ ) : (
+
+ {assets.map((asset) => (
+
+ {/* Image Area */}
+
+ {/* Placeholder Gradient */}
+
+
+ {/* Hover Actions Overlay */}
+
+
+
+
+
+ 查看详情
+
+
+
+
+
+
+ 收藏
+
+
+
+
+
+
+ 下载资源
+
+
+
+
+
+
+ {asset.name}
+
+
+
+ {asset.tag && asset.tag.split(/[,,]/).map(tag => (
+
+ {tag.trim()}
+
+ ))}
+
+
+
+
+
+ {asset.remark || asset.createdBy || 'Unknown'}
+ |
+ {asset.createdTime ? asset.createdTime.split(' ')[0] : '-'}
+
+
+
+ 0
+
+
+
+ ))}
+
+ )}
+
-
- {/* Asset Grid */}
-
- {loading ? (
-
-
-
- ) : assets.length === 0 ? (
-
- 暂无资源数据
-
- ) : (
-
- {assets.map((asset) => (
-
- {/* Image Area */}
-
- {/* Placeholder Gradient */}
-
-
- {/* Hover Actions Overlay */}
-
-
-
-
-
-
-
-
-
- {asset.name}
-
-
-
- {asset.tag && asset.tag.split(/[,,]/).map(tag => (
-
- {tag.trim()}
-
- ))}
-
-
-
-
-
- {asset.createdBy || 'Unknown'}
- |
- {asset.createdTime ? asset.createdTime.split(' ')[0] : '-'}
-
-
-
- 0
-
-
-
- ))}
-
- )}
-
-
+
)
}
diff --git a/src/pages/assets/UploadResource.tsx b/src/pages/assets/UploadResource.tsx
index 2aacd17..3fcb85a 100644
--- a/src/pages/assets/UploadResource.tsx
+++ b/src/pages/assets/UploadResource.tsx
@@ -1,13 +1,23 @@
-import { useState, type ChangeEvent, useContext } from 'react'
+import { useState, useEffect, type ChangeEvent, useContext } from 'react'
import { useNavigate } from 'react-router-dom'
import { ArrowLeft, Upload, X, CheckCircle2, Loader2 } from 'lucide-react'
+import { Badge } from '@/components/ui/badge'
+import { Checkbox } from '@/components/ui/checkbox'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'
import { Textarea } from '@/components/ui/textarea'
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue
+} from '@/components/ui/select'
import { cn } from '@/lib/utils'
import { addSimulationResource } from '@/api/simulation'
import { AddSimulationResourceRequest, ProUploadItem } from '@/api/simulationTypes'
import { ToastContext } from '@/components/ui/toast-provider'
+import { useUser } from '@/contexts/UserContext'
const RESOURCE_LIBRARIES: Record
= {
'插件库': ["地形", "天气", "特效", "高亮", "视频", "VR", "动画", "前端", "后端", "特殊"],
@@ -37,10 +47,21 @@ export default function UploadResource() {
urls: 'http://example.com',
versions: 'v1.0.0',
env: 'Windows 10/Linux',
- createdBy: 'Admin',
+ createdBy: '',
files: [] as File[],
+ thumbnail: null as File | null,
+ thumbnailUrl: '' as string,
})
+ const { user } = useUser()
+
+ // 当用户信息加载后,自动设置上传人
+ useEffect(() => {
+ if (user?.nickName) {
+ setFormData(prev => ({ ...prev, createdBy: user.nickName }))
+ }
+ }, [user])
+
// Mock file upload progress
const [uploadProgress, setUploadProgress] = useState(0)
const [isUploading, setIsUploading] = useState(false)
@@ -78,6 +99,14 @@ export default function UploadResource() {
}
}
+ const handleThumbnailChange = (e: ChangeEvent) => {
+ if (e.target.files && e.target.files.length > 0) {
+ const file = e.target.files[0];
+ const url = URL.createObjectURL(file);
+ setFormData((prev) => ({ ...prev, thumbnail: file, thumbnailUrl: url }))
+ }
+ }
+
const handleSubmit = async () => {
try {
setIsUploading(true)
@@ -200,35 +229,42 @@ export default function UploadResource() {
-
+
+
+
+
+ {Object.keys(RESOURCE_LIBRARIES).map(store => (
+ {store}
+ ))}
+
+
-
+
+
+
+
+ {RESOURCE_LIBRARIES[formData.stores]?.map(type => (
+ {type}
+ ))}
+
+
@@ -239,20 +275,42 @@ export default function UploadResource() {
/>
+
+
+
+
+
{formData.tags.map(tag => (
-
+
{tag}
-
-
+
+
))}
{['交互插件', '渲染效果', '数据采集', '虚拟实验室', '教学模板'].map((tag: string) => (
-
+
))}
@@ -313,14 +371,32 @@ export default function UploadResource() {
资源缩略图(可选)
-
-
-
点击上传缩略图
-
支持格式:JPG/PNG | 建议尺寸:800x600px | 最大文件大小:5MB
+
+
+
+ {formData.thumbnailUrl ? (
+
+

+
+
+ ) : (
+ <>
+
+
点击上传缩略图
+
支持格式:JPG/PNG | 建议尺寸:800x600px | 最大文件大小:5MB
+ >
+ )}
@@ -437,7 +513,11 @@ export default function UploadResource() {
资源简介:
- 1
+ {formData.description}
+
+
+ 上传人:
+ {formData.createdBy}
@@ -454,8 +534,11 @@ export default function UploadResource() {
-
-
+
+
diff --git a/src/pages/files/FileLibrary.tsx b/src/pages/files/FileLibrary.tsx
index 77e0496..578436b 100644
--- a/src/pages/files/FileLibrary.tsx
+++ b/src/pages/files/FileLibrary.tsx
@@ -17,6 +17,21 @@ import {
} from 'lucide-react'
import { Button } from '@/components/ui/button'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
+import { Badge } from '@/components/ui/badge'
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow
+} from '@/components/ui/table'
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger
+} from '@/components/ui/tooltip'
// Mock Data for Directory Tree
const directoryData = [
@@ -104,14 +119,18 @@ export default function FileLibrary() {
{node.name}
{node.tag && (
-
+
{node.tag}
-
+
)}
{node.children && expandedNodes.includes(node.id) && (
@@ -124,206 +143,184 @@ export default function FileLibrary() {
}
return (
-
- {/* Left Sidebar: Directory Tree */}
-
-
-
- 文档目录
-
-
-
-
-
- {/* Quick Use Templates Section */}
-
-
-
- 快速使用模版
-
-
- {['项目计划书', '需求规格说明书', '用户操作手册', '技术文档', '测试报告', '课程教案'].map((name) => (
-
- ))}
-
+
+
+ {/* Left Sidebar: Directory Tree */}
+
+
+
+
+ 目录结构
+
+
-
- {/* Recursive Tree */}
-
+
{renderTree(directoryData)}
-
-
-
- {/* Main Content Area */}
-
- {/* Top Header/Breadcrumbs and Actions */}
-
-
- 物理仿真项目
-
- 光学实验仿真
-
-
-
-
-
- {/* Document Preview Card */}
-
-
-
-
-
-
-
- 光学实验仿真系统用户手册.md
-
-
-
-
-
-
-
-
-
-
- 光学实验仿真系统用户手册
-
-
- 版本: V1.0
-
-
- 更新日期: 2024-07-20
-
-
- 适用范围: 本科物理实验教学
-
-
-
-
-
-
1.系统概述
-
光学实验仿真系统是基于Unity引擎开发的虚拟仿真教学平台,旨在为高校物理实验教学提供沉浸式、交互式的光学实验体验。系统涵盖了几何光学、物理光学等多个实验模块,支持光线追踪、折射计算、干涉衍射模拟等核心功能。
-
-
-
-
2.安装要求
-
- - 硬件要求: CPU i5及以上,内存 8GB及以上,独立显卡 GTX1050及以上
- - 软件环境: Windows 10/11 64位操作系统,Unity Runtime 2021.3
- - 屏幕分辨率: 建议 1920x1080 及以上
-
-
-
-
-
3.快速上手
-
-
3.1 启动系统:双击桌面快捷方式“光学实验仿真系统.exe”,等待加载完成后进入登录界面。
-
3.2 选择实验:在主界面左侧实验列表中选择需要进行的光学实验类型。
-
3.3 实验操作:
- • 使用鼠标拖拽调整光学元件位置
- • 通过右侧参数面板调整光源强度、波长等参数
- • 点击“开始仿真”按钮运行实验并观察结果
- • 支持截图、数据导出等功能
+ {/* Right Content Area */}
+
+ {/* Upper Header Card */}
+
+
+
+
+
+
+
+
光学实验仿真文档
+
+ 最后更新: 2024-07-20 14:30 | 编辑人: 张建国
-
-
-
4.核心功能模块
-
这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文
+
+
+
-
-
-
-
- {/* Bottom Associated Files Table */}
-
-
-
-
- 文档文件列表
-
-
-
-
-
-
- | 文件名 |
- 文件类型 |
- 大小 |
- 最后修改 |
- 操作 |
-
-
-
+
+
+
+
+
+
+ 1.项目背景与目标
+
+
本课程文档主要针对“光学实验虚拟仿真系统”的设计与实现进行详细说明。目标是通过高度真实的3D光路模拟,帮助学生在进入实验室前掌握基本的光学调试技巧,减少昂贵精密器材的误操作损坏风险。
+
+
+
+
+
+ 2.仿真原理说明
+
+
+
+
+
+ 光线追踪引擎
+
+
基于物理精确的Ray Tracing算法,模拟光的反射、折射及色散效果。
+
+
+
+
+ 实时干涉计算
+
+
支持双缝干涉、薄膜干涉等波动光学现象的实时数学解析与视觉呈现。
+
+
+
+
+
+
+
+ 3.快速上手
+
+
+
3.1 启动系统:双击桌面快捷方式“光学实验仿真系统.exe”,等待加载完成后进入登录界面。
+
3.2 选择实验:在主界面左侧实验列表中选择需要进行的光学实验类型。
+
3.3 实验操作:
+ • 使用鼠标拖拽调整光学元件位置
+ • 通过右侧参数面板调整光源强度、波长等参数
+ • 点击“开始仿真”按钮运行实验并观察结果
+ • 支持截图、数据导出等功能
+
+
+
+
+
+
+
+ 4.核心功能模块
+
+
这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文这是原文
+
+
+
+
+
+ {/* Bottom Associated Files Table */}
+
+
+
+
+ 相关资源列表
+
+
+
+
+
+
+ 文件名
+ 文件类型
+ 大小
+ 最后修改
+ 操作
+
+
+
{associatedFiles.map((file, idx) => (
-
- |
+
+
|
- {file.type} |
- {file.size} |
- {file.date} |
-
-
-
-
+
+
+ {file.type}
+
+ {file.size}
+ {file.date}
+
+
+
+
+
+
+ 下载
+
+
+
+
+
+ 更多
+
- |
-
+
+
))}
-
-
+
+
-
+
)
}
diff --git a/vite.config.ts b/vite.config.ts
index 97042d3..28c61bd 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -62,7 +62,7 @@ export default defineConfig({
},
// 代理仿真资源 API
'/zichan-api': {
- target: 'http://172.16.1.144:8081',
+ target: 'http://172.16.1.144:8082',
changeOrigin: true,
secure: false,
rewrite: (path) => path.replace(/^\/zichan-api/, ''),