diff --git a/server/routes/company.js b/server/routes/company.js index e33ba60..4d6f123 100644 --- a/server/routes/company.js +++ b/server/routes/company.js @@ -641,6 +641,13 @@ router.put('/:companyId', (req, res) => { res.json({ success: true, company }); }); +// DELETE /api/company/:companyId +router.delete('/:companyId', (req, res) => { + const company = companyService.delete(req.params.companyId); + if (!company) return res.status(404).json({ error: '公司不存在' }); + res.json({ success: true, company }); +}); + // POST /api/company/:companyId/shutdown router.post('/:companyId/shutdown', (req, res) => { const company = companyService.shutdown(req.params.companyId); diff --git a/server/services/company-service.js b/server/services/company-service.js index a4f003e..5b8530d 100644 --- a/server/services/company-service.js +++ b/server/services/company-service.js @@ -154,6 +154,23 @@ class CompanyService { return company; } + /** + * 删除公司 (仅删除 company.json 定义即可,暂时不清理目录数据) + */ + delete(companyId) { + const company = this.get(companyId); + if (!company) return null; + + const fp = path.join(DATA_DIR, companyId, 'company.json'); + if (fs.existsSync(fp)) { + // 通过重命名或者直接删除 company.json 来让 list 无法读取 + fs.renameSync(fp, path.join(DATA_DIR, companyId, 'company.deleted.json')); + } + + console.log(`[Company] 🗑️ 删除公司: ${companyId}`); + return company; + } + // ═══════════════════════════════════════ // Agent 招聘系统 (Hiring Pipeline) // ═══════════════════════════════════════ diff --git a/server/services/skill-db.js b/server/services/skill-db.js index 0b6b28e..34f6d6f 100644 --- a/server/services/skill-db.js +++ b/server/services/skill-db.js @@ -18,7 +18,7 @@ const config = require('../config'); const { initSkillDir, getTargetDir, resolveSkillDir } = require('./skill-dir-manager'); const DATA_DIR = path.resolve(__dirname, '../../../data'); -const DB_PATH = path.join(DATA_DIR, 'skills.sqlite'); +const DB_PATH = process.env.SKILLS_DB_PATH || path.join(DATA_DIR, 'skills.sqlite'); let db = null; diff --git a/web/src/components/AppNav.vue b/web/src/components/AppNav.vue index 8bf3962..e0e4f34 100644 --- a/web/src/components/AppNav.vue +++ b/web/src/components/AppNav.vue @@ -41,8 +41,8 @@
- @@ -79,12 +79,44 @@ + + + diff --git a/web/src/views/CompanyDashboard.vue b/web/src/views/CompanyDashboard.vue index 56af05a..050919e 100644 --- a/web/src/views/CompanyDashboard.vue +++ b/web/src/views/CompanyDashboard.vue @@ -105,6 +105,11 @@ {{ isStopping ? '⏳ 关闭中...' : '🛑 关闭公司' }} + @@ -1060,6 +1065,22 @@ async function stopCompany() { isStopping.value = false } +async function deleteCompany(companyId) { + if (!confirm('确认要删除该公司吗?该操作仅会从列表中移除公司声明。')) return + try { + await axios.delete(`/api/company/${companyId}`) + await loadCompanies() + if (companies.value.length > 0) { + router.push(`/${companies.value[0].id}/overview`) + } else { + router.push(`/company`) + } + } catch (e) { + console.error(e) + alert('删除失败: ' + (e.response?.data?.error || e.message)) + } +} + function formatDate(isoStr) { if (!isoStr) return '-' return new Date(isoStr).toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' })