diff --git a/src/pages/console/ChatPage.jsx b/src/pages/console/ChatPage.jsx
index 9c34c7a..48c74ca 100644
--- a/src/pages/console/ChatPage.jsx
+++ b/src/pages/console/ChatPage.jsx
@@ -1,10 +1,13 @@
import { useEffect, useRef } from 'react';
+import { useParams } from 'react-router-dom';
import { getChatScenes } from '../../data/conversations.js';
import { FiPaperclip, FiCode, FiSend } from 'react-icons/fi';
-function ChatPage({ scene }) {
+function ChatPage() {
+ const { scene } = useParams();
+ const currentScene = scene || 'welcome';
const chatScenes = getChatScenes();
- const html = chatScenes[scene] || '';
+ const html = chatScenes[currentScene] || '';
const chatMessagesRef = useRef(null);
useEffect(() => {
diff --git a/src/pages/console/ConsoleReviewDetailPage.jsx b/src/pages/console/ConsoleReviewDetailPage.jsx
index 624fc7f..efecb4c 100644
--- a/src/pages/console/ConsoleReviewDetailPage.jsx
+++ b/src/pages/console/ConsoleReviewDetailPage.jsx
@@ -1,14 +1,17 @@
import { useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
import { FiFile } from 'react-icons/fi';
import { pendingVersionReviews, pendingUnlistReviews, skillFiles } from '../../data/skills.js';
import Toast from '../../components/common/Toast.jsx';
-function ConsoleReviewDetailPage({ type, reviewId, onBack }) {
+function ConsoleReviewDetailPage() {
+ const { type, reviewId } = useParams();
+ const navigate = useNavigate();
const [showToast, setShowToast] = useState(false);
const [toastMessage, setToastMessage] = useState('');
- const versionReview = type === 'version' ? pendingVersionReviews.find(r => r.id === reviewId) : null;
- const unlistReview = type === 'unlist' ? pendingUnlistReviews.find(r => r.id === reviewId) : null;
+ const versionReview = type === 'version' ? pendingVersionReviews.find(r => r.id === Number(reviewId)) : null;
+ const unlistReview = type === 'unlist' ? pendingUnlistReviews.find(r => r.id === Number(reviewId)) : null;
const review = versionReview || unlistReview;
@@ -20,7 +23,7 @@ function ConsoleReviewDetailPage({ type, reviewId, onBack }) {
setToastMessage('审核通过');
setShowToast(true);
setTimeout(() => {
- onBack && onBack();
+ onBack && navigate('/admin/reviews');
}, 1000);
};
@@ -28,13 +31,13 @@ function ConsoleReviewDetailPage({ type, reviewId, onBack }) {
setToastMessage('已拒绝');
setShowToast(true);
setTimeout(() => {
- onBack && onBack();
+ onBack && navigate('/admin/reviews');
}, 1000);
};
return (
<>
-
+
navigate('/admin/reviews')}>
←
返回审核列表
diff --git a/src/pages/console/ConsoleReviewListPage.jsx b/src/pages/console/ConsoleReviewListPage.jsx
index 761b9fa..40e4877 100644
--- a/src/pages/console/ConsoleReviewListPage.jsx
+++ b/src/pages/console/ConsoleReviewListPage.jsx
@@ -1,7 +1,9 @@
import { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
import { pendingVersionReviews, pendingUnlistReviews } from '../../data/skills.js';
-function ConsoleReviewListPage({ onReviewClick }) {
+function ConsoleReviewListPage() {
+ const navigate = useNavigate();
const [activeTab, setActiveTab] = useState('version');
return (
@@ -50,7 +52,7 @@ function ConsoleReviewListPage({ onReviewClick }) {
@@ -84,7 +86,7 @@ function ConsoleReviewListPage({ onReviewClick }) {
|
diff --git a/src/pages/console/MemberConfigPage.jsx b/src/pages/console/MemberConfigPage.jsx
index 5f04b88..7eb276f 100644
--- a/src/pages/console/MemberConfigPage.jsx
+++ b/src/pages/console/MemberConfigPage.jsx
@@ -1,7 +1,12 @@
-function MemberConfigPage({ onBack }) {
+import { useNavigate, useParams } from 'react-router-dom';
+
+function MemberConfigPage() {
+ const { memberId } = useParams();
+ const navigate = useNavigate();
+
return (
<>
-
+ navigate('/console/projects')}>
←
返回成员列表
@@ -10,11 +15,11 @@ function MemberConfigPage({ onBack }) {
成员配置
- 成员配置页面内容
+ 成员配置页面内容 (成员 ID: {memberId})
>
);
}
-export default MemberConfigPage;
\ No newline at end of file
+export default MemberConfigPage;
diff --git a/src/pages/console/MySkillsPage.jsx b/src/pages/console/MySkillsPage.jsx
index 8d9c629..be5cdc0 100644
--- a/src/pages/console/MySkillsPage.jsx
+++ b/src/pages/console/MySkillsPage.jsx
@@ -1,4 +1,5 @@
import { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
import { FiSearch } from 'react-icons/fi';
import { FaBoxOpen } from 'react-icons/fa';
import { skills, userSubscriptions } from '../../data/skills.js';
@@ -6,7 +7,8 @@ import EmptyState from '../../components/common/EmptyState.jsx';
import Modal from '../../components/common/Modal.jsx';
import Toast from '../../components/common/Toast.jsx';
-function MySkillsPage({ onConfig, onBack }) {
+function MySkillsPage() {
+ const navigate = useNavigate();
const [filters, setFilters] = useState({ keyword: '', category: '', status: '' });
const [subscriptions, setSubscriptions] = useState(userSubscriptions);
const [actionTarget, setActionTarget] = useState(null);
@@ -249,7 +251,7 @@ function MySkillsPage({ onConfig, onBack }) {
)}
diff --git a/src/pages/console/ProjectsPage.jsx b/src/pages/console/ProjectsPage.jsx
index a041ac3..850a18c 100644
--- a/src/pages/console/ProjectsPage.jsx
+++ b/src/pages/console/ProjectsPage.jsx
@@ -1,10 +1,12 @@
import { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
import { FiUsers, FiSearch } from 'react-icons/fi';
import { projectMembers } from '../../data/members.js';
import EmptyState from '../../components/common/EmptyState.jsx';
import Modal from '../../components/common/Modal.jsx';
-function ProjectsPage({ onAddMember }) {
+function ProjectsPage() {
+ const navigate = useNavigate();
const [members, setMembers] = useState(projectMembers);
const [removeTarget, setRemoveTarget] = useState(null);
const [filters, setFilters] = useState({
@@ -82,7 +84,7 @@ function ProjectsPage({ onAddMember }) {
成员列表
-
+
{filteredMembers.length > 0 ? (
@@ -110,7 +112,7 @@ function ProjectsPage({ onAddMember }) {
{member.role} |
-
+
|
diff --git a/src/pages/console/SkillConfigPage.jsx b/src/pages/console/SkillConfigPage.jsx
index 9b1d303..3758128 100644
--- a/src/pages/console/SkillConfigPage.jsx
+++ b/src/pages/console/SkillConfigPage.jsx
@@ -1,9 +1,12 @@
import { useState, useEffect } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
import { FiPlus, FiX, FiUsers, FiStar, FiPackage } from 'react-icons/fi';
import { skills, userSubscriptions } from '../../data/skills.js';
import Toast from '../../components/common/Toast.jsx';
-function SkillConfigPage({ subscriptionId, onBack }) {
+function SkillConfigPage() {
+ const { subscriptionId } = useParams();
+ const navigate = useNavigate();
const [subscriptions, setSubscriptions] = useState(userSubscriptions);
const [subscription, setSubscription] = useState(null);
const [skill, setSkill] = useState(null);
@@ -12,7 +15,7 @@ function SkillConfigPage({ subscriptionId, onBack }) {
const [toast, setToast] = useState({ visible: false, type: 'success', message: '' });
useEffect(() => {
- const sub = subscriptions.find(s => s.id === subscriptionId);
+ const sub = subscriptions.find(s => s.id === Number(subscriptionId));
if (sub) {
setSubscription(sub);
const skillData = skills.find(s => s.id === sub.skillId);
@@ -82,7 +85,7 @@ function SkillConfigPage({ subscriptionId, onBack }) {
// 延迟返回
setTimeout(() => {
- onBack();
+ navigate('/console/my-skills');
}, 500);
};
@@ -94,7 +97,7 @@ function SkillConfigPage({ subscriptionId, onBack }) {
return (
<>
-
+ navigate('/console/my-skills')}>
←
返回我的技能
@@ -207,7 +210,7 @@ function SkillConfigPage({ subscriptionId, onBack }) {
)}
- |
diff --git a/src/pages/developer/DevOverviewPage.jsx b/src/pages/developer/DevOverviewPage.jsx
index 003708d..adb6ef2 100644
--- a/src/pages/developer/DevOverviewPage.jsx
+++ b/src/pages/developer/DevOverviewPage.jsx
@@ -1,7 +1,9 @@
+import { useNavigate } from 'react-router-dom';
import { FiAlertTriangle, FiInfo } from 'react-icons/fi';
import { api } from '../../services/api.js';
-function DevOverviewPage({ onSkillClick }) {
+function DevOverviewPage() {
+ const navigate = useNavigate();
const data = api.developer.getOverview();
return (
@@ -36,7 +38,7 @@ function DevOverviewPage({ onSkillClick }) {
key={index}
className={`anomaly-item ${item.status === 'rejected' ? 'anomaly-warning' : 'anomaly-info'}`}
style={{ cursor: 'pointer' }}
- onClick={() => onSkillClick && onSkillClick(item.skillId)}
+ onClick={() => navigate(`/developer/my-skills/${item.skillId}/editor`)}
>
{item.status === 'rejected' ? : }
diff --git a/src/pages/developer/MySkillsPage.jsx b/src/pages/developer/MySkillsPage.jsx
index df569a9..38a1eb5 100644
--- a/src/pages/developer/MySkillsPage.jsx
+++ b/src/pages/developer/MySkillsPage.jsx
@@ -1,4 +1,5 @@
import { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
import { api } from '../../services/api.js';
import Modal from '../../components/common/Modal.jsx';
import Toast from '../../components/common/Toast.jsx';
@@ -10,7 +11,8 @@ const skillStatusMap = {
unlisted: { text: '已下架', className: 'status-stopped' }
};
-function MySkillsPage({ onSkillClick }) {
+function MySkillsPage() {
+ const navigate = useNavigate();
const sourceData = api.developer.getMySkills();
const [filters, setFilters] = useState({ keyword: '', status: '' });
const [deleteTarget, setDeleteTarget] = useState(null);
@@ -100,7 +102,7 @@ function MySkillsPage({ onSkillClick }) {
{filteredList.map(skill => (
- onSkillClick(skill.id)}>
+
navigate(`/developer/my-skills/${skill.id}/editor`)}>
| {skill.name} |
{skill.desc} |
@@ -110,7 +112,7 @@ function MySkillsPage({ onSkillClick }) {
|
- { e.stopPropagation(); onSkillClick(skill.id); }}>
+ { e.stopPropagation(); navigate(`/developer/my-skills/${skill.id}/editor`); }}>
编辑
{skill.status === 'published' && (
diff --git a/src/pages/developer/NewVersionPage.jsx b/src/pages/developer/NewVersionPage.jsx
deleted file mode 100644
index c272130..0000000
--- a/src/pages/developer/NewVersionPage.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useState } from 'react';
-import { FiUpload } from 'react-icons/fi';
-import Toast from '../../components/common/Toast.jsx';
-
-function NewVersionPage({ skillName, onBack }) {
- const [showToast, setShowToast] = useState(false);
-
- const handleSubmit = () => {
- setShowToast(true);
- setTimeout(() => {
- onBack();
- }, 1000);
- };
-
- return (
- <>
-
- ←
- 返回技能详情
-
-
-
-
-
-
-
-
-
-
-
-
- 点击或拖拽文件到此处上传
- 支持 .zip 格式
-
-
-
- 取消
- 提交审核
-
-
-
- setShowToast(false)}
- />
- >
- );
-}
-
-export default NewVersionPage;
diff --git a/src/pages/developer/SkillEditorPage.jsx b/src/pages/developer/SkillEditorPage.jsx
index c0ce267..f6d5353 100644
--- a/src/pages/developer/SkillEditorPage.jsx
+++ b/src/pages/developer/SkillEditorPage.jsx
@@ -1,4 +1,5 @@
import { useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
import { FiUpload, FiUsers, FiPackage, FiStar, FiRotateCcw } from 'react-icons/fi';
import { api } from '../../services/api.js';
import Modal from '../../components/common/Modal.jsx';
@@ -18,8 +19,10 @@ const skillStatusMap = {
unlisted: { text: '已下架', className: 'status-stopped' }
};
-function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo }) {
- const skill = api.developer.getSkillById(skillId);
+function SkillEditorPage() {
+ const { skillId } = useParams();
+ const navigate = useNavigate();
+ const skill = api.developer.getSkillById(Number(skillId));
const [deleteSkillModal, setDeleteSkillModal] = useState(false);
const [unlistSkillModal, setUnlistSkillModal] = useState(false);
const [deleteVersionTarget, setDeleteVersionTarget] = useState(null);
@@ -50,7 +53,7 @@ function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo })
return (
<>
-
+ navigate('/developer/my-skills')}>
←
返回我的技能
@@ -64,7 +67,7 @@ function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo })
{skillStatusMap[skill.status]?.text || skill.status}
- onUpdateInfo && onUpdateInfo(skill.id)}>编辑内部信息
+ navigate(`/developer/my-skills/${skillId}/update-info`)}>编辑内部信息
@@ -121,7 +124,7 @@ function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo })
版本历史
onUploadNewVersion(skill)}
+ onClick={() => navigate(`/developer/my-skills/${skillId}/new-version`)}
disabled={skill.status === 'unlisting' || skill.status === 'unlisted' || skill.hasPendingReview}
title={skill.status === 'unlisted' ? '已下架的技能不能上传新版本' : (skill.status === 'unlisting' ? '下架审核中的技能不能上传新版本' : (skill.hasPendingReview ? '存在审核中的版本,请先撤回后再上传新版本' : ''))}
>
diff --git a/src/pages/developer/UpdateSkillInfoPage.jsx b/src/pages/developer/UpdateSkillInfoPage.jsx
index cf17f29..dff7d5d 100644
--- a/src/pages/developer/UpdateSkillInfoPage.jsx
+++ b/src/pages/developer/UpdateSkillInfoPage.jsx
@@ -1,7 +1,12 @@
import { useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
+import { api } from '../../services/api.js';
import Toast from '../../components/common/Toast.jsx';
-function UpdateSkillInfoPage({ skill, onBack }) {
+function UpdateSkillInfoPage() {
+ const { skillId } = useParams();
+ const navigate = useNavigate();
+ const skill = api.developer.getSkillById(Number(skillId));
const [name, setName] = useState(skill?.name || '');
const [desc, setDesc] = useState(skill?.desc || '');
const [showToast, setShowToast] = useState(false);
@@ -9,13 +14,13 @@ function UpdateSkillInfoPage({ skill, onBack }) {
const handleSave = () => {
setShowToast(true);
setTimeout(() => {
- onBack();
+ navigate(`/developer/my-skills/${skillId}/editor`);
}, 1000);
};
return (
<>
-
+ navigate(`/developer/my-skills/${skillId}/editor`)}>
←
返回技能详情
@@ -48,7 +53,7 @@ function UpdateSkillInfoPage({ skill, onBack }) {
/>
- 取消
+ navigate(`/developer/my-skills/${skillId}/editor`)}>取消
保存修改
diff --git a/src/pages/developer/UploadSkillPage.jsx b/src/pages/developer/UploadSkillPage.jsx
index 09b5520..52443ae 100644
--- a/src/pages/developer/UploadSkillPage.jsx
+++ b/src/pages/developer/UploadSkillPage.jsx
@@ -1,7 +1,9 @@
import { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
import Toast from '../../components/common/Toast.jsx';
-function UploadSkillPage({ onBack }) {
+function UploadSkillPage() {
+ const navigate = useNavigate();
const [showToast, setShowToast] = useState(false);
const handleCreate = () => {
@@ -10,7 +12,7 @@ function UploadSkillPage({ onBack }) {
return (
<>
-
+ navigate('/developer/my-skills')}>
←
返回技能管理
@@ -31,7 +33,7 @@ function UploadSkillPage({ onBack }) {
- 取消
+ navigate('/developer/my-skills')}>取消
创建技能
diff --git a/src/pages/developer/UploadVersionPage.jsx b/src/pages/developer/UploadVersionPage.jsx
index df212b6..3480666 100644
--- a/src/pages/developer/UploadVersionPage.jsx
+++ b/src/pages/developer/UploadVersionPage.jsx
@@ -1,11 +1,15 @@
import { FiUpload, FiX } from 'react-icons/fi';
import { useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
import { api } from '../../services/api.js';
import Toast from '../../components/common/Toast.jsx';
const ICON_OPTIONS = ['🌤️', '📊', '📝', '🔧', '💻', '📋', '🔍', '📈', '🎯', '⚡', '🌐', '🤖'];
-function UploadVersionPage({ skill, onBack }) {
+function UploadVersionPage() {
+ const { skillId } = useParams();
+ const navigate = useNavigate();
+ const skill = api.developer.getSkillById(Number(skillId));
const categories = api.developer.getCategories();
const [showToast, setShowToast] = useState(false);
@@ -38,13 +42,13 @@ function UploadVersionPage({ skill, onBack }) {
const handleSubmit = () => {
setShowToast(true);
setTimeout(() => {
- onBack();
+ navigate(`/developer/my-skills/${skillId}/editor`);
}, 1000);
};
return (
<>
-
+ navigate(`/developer/my-skills/${skillId}/editor`)}>
←
返回技能详情
@@ -162,7 +166,7 @@ function UploadVersionPage({ skill, onBack }) {
- 取消
+ navigate(`/developer/my-skills/${skillId}/editor`)}>取消
提交审核
|