吸收数字员工运营预览台

This commit is contained in:
baiyanyun
2026-06-12 19:57:38 +08:00
parent 871bd715c4
commit 1a8e0fb51f
23 changed files with 3344 additions and 277 deletions

View File

@@ -3,7 +3,7 @@ import GlassCard from '@/components/digital/GlassCard';
import CardTitleBar from '@/components/digital/CardTitleBar';
import { adaptSkillSummaries, type SkillSummary } from '@/lib/consoleDataAdapter';
import { getSkills, pullSkillPolicies, setSkillEnabled } from '@/lib/api';
import { domSafeId } from './navigation';
import { domSafeId, type DigitalNavigationTarget } from './navigation';
type TaskCadence = 'daily' | 'weekly' | 'monthly' | 'adhoc';
type SkillSection = {
@@ -107,6 +107,7 @@ function SkillCard({
updating = false,
onSelect,
onToggle,
onAudit,
}: {
skill: SkillSummary;
recommended?: boolean;
@@ -115,6 +116,7 @@ function SkillCard({
updating?: boolean;
onSelect?: (skill: SkillSummary) => void;
onToggle?: (skill: SkillSummary) => void;
onAudit?: (skill: SkillSummary) => void;
}) {
const cadence = getCadence(skill);
const status = learningStatus(skill, recommended, advanced);
@@ -163,12 +165,22 @@ function SkillCard({
>
{updating ? '处理中...' : skill.enabled ? '暂不使用' : '恢复使用'}
</button>
<button
className="de-skill-btn"
title="查看该技能的调用审计。"
onClick={(event) => {
event.stopPropagation();
onAudit?.(skill);
}}
>
</button>
</div>
</div>
);
}
export default function SkillLibrary({ focusSkillId }: { focusSkillId?: string | null }) {
export default function SkillLibrary({ focusSkillId, onNavigate }: { focusSkillId?: string | null; onNavigate?: (target: DigitalNavigationTarget) => void }) {
const [skills, setSkills] = useState<SkillSummary[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(false);
@@ -332,6 +344,7 @@ export default function SkillLibrary({ focusSkillId }: { focusSkillId?: string |
updating={updatingSkillId === s.id}
onSelect={(skill) => setSelectedSkillId(skill.id)}
onToggle={toggleSkill}
onAudit={(skill) => onNavigate?.({ tab: 'skill-audit', auditSkillId: skill.id })}
/>
))}
</div>