55 lines
2.7 KiB
JavaScript
55 lines
2.7 KiB
JavaScript
const MOCK_DEVELOPERS = [
|
|
{ id: 'DEV-001', name: '玄泓', streak: 8, el: 6, pca: { exe: 75, tec: 68, sys: 82, col: 79, ini: 85 }, totalScore: 78, status: 'doing', module: 'M-CORE', lastActive: '2026-03-11T10:30:00Z' },
|
|
{ id: 'DEV-002', name: '苍钺', streak: 5, el: 5, pca: { exe: 82, tec: 71, sys: 65, col: 90, ini: 72 }, totalScore: 76, status: 'pending', module: 'M-UI', lastActive: '2026-03-11T09:15:00Z' },
|
|
{ id: 'DEV-003', name: '桔子', streak: 13, el: 8, pca: { exe: 88, tec: 85, sys: 92, col: 78, ini: 90 }, totalScore: 87, status: 'doing', module: 'M-ORCHESTRATOR', lastActive: '2026-03-11T11:20:00Z' },
|
|
{ id: 'DEV-004', name: '之之', streak: 12, el: 8, pca: { exe: 70, tec: 32, sys: 80, col: 80, ini: 83 }, totalScore: 66, status: 'doing', module: 'M-DEVBOARD', lastActive: '2026-03-11T12:05:00Z' },
|
|
{ id: 'DEV-005', name: '琉光', streak: 7, el: 6, pca: { exe: 79, tec: 74, sys: 71, col: 88, ini: 77 }, totalScore: 78, status: 'done', module: 'M-TEST', lastActive: '2026-03-10T16:40:00Z' },
|
|
{ id: 'DEV-006', name: '墨羽', streak: 4, el: 4, pca: { exe: 65, tec: 60, sys: 55, col: 92, ini: 68 }, totalScore: 68, status: 'doing', module: 'M-DOC', lastActive: '2026-03-11T08:50:00Z' },
|
|
{ id: 'DEV-007', name: '霜砚', streak: 10, el: 7, pca: { exe: 84, tec: 79, sys: 81, col: 75, ini: 82 }, totalScore: 80, status: 'blocked', module: 'M-API', lastActive: '2026-03-11T07:30:00Z' },
|
|
{ id: 'DEV-008', name: '岚茵', streak: 6, el: 5, pca: { exe: 73, tec: 70, sys: 68, col: 85, ini: 74 }, totalScore: 74, status: 'pending', module: 'M-DESIGN', lastActive: '2026-03-10T14:20:00Z' }
|
|
];
|
|
|
|
function getTopStreak(developers) {
|
|
if (!developers || developers.length === 0) return { name: '无', count: 0 };
|
|
let top = developers[0];
|
|
for (let i = 1; i < developers.length; i++) {
|
|
if (developers[i].streak > top.streak) {
|
|
top = developers[i];
|
|
}
|
|
}
|
|
return { name: top.name, count: top.streak };
|
|
}
|
|
|
|
async function getDevStatus() {
|
|
return MOCK_DEVELOPERS;
|
|
}
|
|
|
|
async function getPCA(devId) {
|
|
const dev = MOCK_DEVELOPERS.find(d => d.id === devId);
|
|
if (!dev) return null;
|
|
return {
|
|
exe: dev.pca.exe,
|
|
tec: dev.pca.tec,
|
|
sys: dev.pca.sys,
|
|
col: dev.pca.col,
|
|
ini: dev.pca.ini,
|
|
total: dev.totalScore,
|
|
level: getPCAColor(dev.totalScore).level
|
|
};
|
|
}
|
|
|
|
async function getAllStats() {
|
|
const activeDevs = MOCK_DEVELOPERS.filter(d => d.status === 'doing').length;
|
|
const topStreak = getTopStreak(MOCK_DEVELOPERS);
|
|
return {
|
|
totalDevs: 8,
|
|
activeDevs: activeDevs,
|
|
totalCodeLines: 85600,
|
|
totalModules: 24,
|
|
modulesCompleted: 8,
|
|
modulesInProgress: 12,
|
|
modulesPending: 4,
|
|
topStreak: topStreak
|
|
};
|
|
}
|