{filteredMembers.length > 0 ? (
@@ -112,7 +112,7 @@ function ProjectsPage() {
{member.role}
- navigate(`/console/projects/members/${member.id}/config`)}>配置
+ navigate(`/console/project/members/${member.id}/config`)}>配置
handleRemoveClick(member)}>移除
@@ -150,4 +150,4 @@ function ProjectsPage() {
);
}
-export default ProjectsPage;
\ No newline at end of file
+export default MembersPage;
\ No newline at end of file
diff --git a/src/pages/console/PermissionsPage.jsx b/src/pages/console/PermissionsPage.jsx
new file mode 100644
index 0000000..411e792
--- /dev/null
+++ b/src/pages/console/PermissionsPage.jsx
@@ -0,0 +1,21 @@
+import { FiShield } from 'react-icons/fi';
+import EmptyState from '../../components/common/EmptyState.jsx';
+
+function PermissionsPage() {
+ return (
+
+
+
+ }
+ message="权限配置功能开发中"
+ description="该功能即将上线,敬请期待"
+ />
+
+
+ );
+}
+
+export default PermissionsPage;
diff --git a/src/pages/console/SkillsConfigPage.jsx b/src/pages/console/SkillsConfigPage.jsx
new file mode 100644
index 0000000..47ee0f8
--- /dev/null
+++ b/src/pages/console/SkillsConfigPage.jsx
@@ -0,0 +1,21 @@
+import { FiSettings } from 'react-icons/fi';
+import EmptyState from '../../components/common/EmptyState.jsx';
+
+function SkillsConfigPage() {
+ return (
+
+
+
+ }
+ message="技能配置功能开发中"
+ description="该功能即将上线,敬请期待"
+ />
+
+
+ );
+}
+
+export default SkillsConfigPage;
diff --git a/src/styles/components/nav/_index.scss b/src/styles/components/nav/_index.scss
index 33ec698..7a5f1b2 100644
--- a/src/styles/components/nav/_index.scss
+++ b/src/styles/components/nav/_index.scss
@@ -46,3 +46,62 @@
font-size: $font-size-sm;
color: var(--color-text-3);
}
+
+// 可展开导航组
+.nav-group {
+ margin-bottom: 4px;
+}
+
+.nav-group__header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 10px 12px;
+ border-radius: var(--radius-md);
+ cursor: pointer;
+ transition: background 0.2s;
+ color: var(--color-text-2);
+ font-size: $font-size-base;
+ font-weight: $font-weight-medium;
+
+ &:hover {
+ background: var(--color-bg-2);
+ color: var(--color-text-1);
+ }
+}
+
+.nav-group__icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 20px;
+ height: 20px;
+ font-size: $font-size-lg;
+ flex-shrink: 0;
+}
+
+.nav-group__label {
+ flex: 1;
+}
+
+.nav-group__arrow {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ font-size: $font-size-sm;
+ color: var(--color-text-3);
+ transition: transform 0.2s;
+}
+
+.nav-group__children {
+ margin-top: 4px;
+ padding-left: 12px;
+}
+
+.nav-group--expanded {
+ .nav-group__header {
+ color: var(--color-text-1);
+ }
+}