auto-sync: 2026-05-20 20:44:50
This commit is contained in:
@@ -596,3 +596,57 @@ export default function EdictBoard() {
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 项目操作弹出菜单
|
||||
function ProjectActionPopup({ projectId, projectName, onAction, onClose }: {
|
||||
projectId: string; projectName: string;
|
||||
onAction: (action: 'archive' | 'delete', id: string) => void;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
return (
|
||||
<div style={{
|
||||
position: 'absolute', top: '100%', left: 0, zIndex: 100,
|
||||
background: '#1a2236', border: '1px solid var(--line)', borderRadius: 8,
|
||||
padding: 4, minWidth: 140, boxShadow: '0 4px 12px rgba(0,0,0,0.3)',
|
||||
}}>
|
||||
<button onClick={() => onAction('archive', projectId)} style={{
|
||||
display: 'block', width: '100%', textAlign: 'left', padding: '6px 12px',
|
||||
fontSize: 12, border: 'none', background: 'transparent', color: 'var(--fg)',
|
||||
cursor: 'pointer', borderRadius: 4,
|
||||
}}>📦 归档项目</button>
|
||||
<button onClick={() => onAction('delete', projectId)} style={{
|
||||
display: 'block', width: '100%', textAlign: 'left', padding: '6px 12px',
|
||||
fontSize: 12, border: 'none', background: 'transparent', color: '#ff4757',
|
||||
cursor: 'pointer', borderRadius: 4,
|
||||
}}>🗑️ 删除项目</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 新建项目对话框
|
||||
function NewProjectDialog({ onSubmit, onClose }: {
|
||||
onSubmit: (id: string, name: string) => void;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const [id, setId] = useState('');
|
||||
const [name, setName] = useState('');
|
||||
return (
|
||||
<div style={{ position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.5)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 }} onClick={onClose}>
|
||||
<div style={{ background: '#1a2236', border: '1px solid var(--line)', borderRadius: 12, padding: 24, minWidth: 360 }} onClick={e => e.stopPropagation()}>
|
||||
<div style={{ fontSize: 14, fontWeight: 600, marginBottom: 16 }}>➕ 新建项目</div>
|
||||
<div style={{ marginBottom: 12 }}>
|
||||
<label style={{ fontSize: 11, color: 'var(--muted)', display: 'block', marginBottom: 4 }}>项目 ID(英文,不可修改)</label>
|
||||
<input value={id} onChange={e => setId(e.target.value.replace(/[^a-zA-Z0-9_-]/g, ''))} placeholder="my-project" style={{ width: '100%', padding: '6px 10px', borderRadius: 6, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', fontSize: 12, boxSizing: 'border-box' }} />
|
||||
</div>
|
||||
<div style={{ marginBottom: 16 }}>
|
||||
<label style={{ fontSize: 11, color: 'var(--muted)', display: 'block', marginBottom: 4 }}>项目名称</label>
|
||||
<input value={name} onChange={e => setName(e.target.value)} placeholder="我的项目" style={{ width: '100%', padding: '6px 10px', borderRadius: 6, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', fontSize: 12, boxSizing: 'border-box' }} />
|
||||
</div>
|
||||
<div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>
|
||||
<button onClick={onClose} style={{ padding: '6px 16px', borderRadius: 6, fontSize: 12, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', cursor: 'pointer' }}>取消</button>
|
||||
<button disabled={!id || !name} onClick={() => onSubmit(id, name)} style={{ padding: '6px 16px', borderRadius: 6, fontSize: 12, border: 'none', background: 'var(--acc)', color: '#fff', cursor: id && name ? 'pointer' : 'not-allowed', opacity: id && name ? 1 : 0.5 }}>创建</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user