feat: 增强知识库索引与设置页面模块化拆分

扩展知识库索引任务和 RAG 检索支持增量入库和文档去重,优
化本体检测和规则匹配精度,前端设置页面拆分为 LLM、邮件
和 Hermes 员工同步子面板并重构样式,新增日志详情组件和
知识入库日志模型,补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-22 23:47:28 +08:00
parent 88ff04bef8
commit 5b388d08c0
84 changed files with 10170 additions and 2599 deletions

View File

@@ -0,0 +1,136 @@
<template>
<div class="hermes-settings-container">
<!-- 主控制卡片 -->
<section class="settings-card hermes-hero-card" :class="{ active: hermesForm.masterEnabled }">
<div class="card-head">
<div class="card-title-with-icon">
<div class="model-icon-box" :class="{ active: hermesForm.masterEnabled }">
<i class="mdi mdi-robot"></i>
<span class="status-pulse-dot" :class="{ active: hermesForm.masterEnabled }"></span>
</div>
<div>
<h4>数字员工自动任务主控</h4>
<p>开启后系统将自动按计划调度后台数字员工执行知识同步规则待审风险扫描及数据统计任务</p>
</div>
</div>
<div class="card-head-actions">
<span class="status-badge" :class="{ active: hermesForm.masterEnabled }">
{{ hermesForm.masterEnabled ? '调度服务运行中' : '调度服务已禁用' }}
</span>
<button
class="switch-btn"
type="button"
:class="{ active: hermesForm.masterEnabled }"
aria-label="切换全局自动任务"
@click="$emit('toggle-master')"
>
<i></i>
</button>
</div>
</div>
</section>
<!-- 任务网格控制 -->
<section class="settings-card hermes-tasks-section" :class="{ disabled: !hermesForm.masterEnabled }">
<div class="card-head">
<div class="card-title-with-icon">
<div class="model-icon-box">
<i class="mdi mdi-clipboard-list-outline"></i>
</div>
<div>
<h4>自动任务项管理</h4>
<p>配置并调度具体的后台异步任务在设定的周期与执行时间定时运行</p>
</div>
</div>
<div class="card-head-actions">
<span class="section-badge">已启用 {{ activeTasksCount }} / {{ HERMES_SIMPLE_TASKS.length }} </span>
</div>
</div>
<ul class="hermes-task-grid">
<li
v-for="task in HERMES_SIMPLE_TASKS"
:key="task.id"
class="hermes-task-card"
:class="{ active: isTaskOn(task.id), disabled: !hermesForm.masterEnabled }"
>
<div class="task-card-header">
<div class="task-icon-box" :class="getTaskColorClass(task.id)">
<i class="mdi" :class="getTaskIcon(task.id)"></i>
</div>
<div class="task-meta-info">
<strong>{{ task.label }}</strong>
<small>{{ task.hint }}</small>
</div>
<button
class="switch-btn mini"
type="button"
:class="{ active: isTaskOn(task.id) }"
:disabled="!hermesForm.masterEnabled"
:aria-label="`${isTaskOn(task.id) ? '关闭' : '开启'}${task.label}`"
@click="$emit('toggle-task', task.id)"
>
<i></i>
</button>
</div>
<div class="task-card-footer">
<div class="frequency-badge" :class="{ active: isTaskOn(task.id) }">
<i class="mdi mdi-clock-outline"></i>
<span>{{ task.frequencyLabel }}</span>
</div>
<div v-if="isTaskOn(task.id)" class="time-picker-wrapper">
<input
:value="taskTime(task.id)"
type="time"
:disabled="!hermesForm.masterEnabled"
aria-label="设置执行时间"
@input="$emit('update-task-time', { taskId: task.id, time: $event.target.value })"
/>
</div>
<div v-else class="time-picker-placeholder">
<span>未开启</span>
</div>
</div>
</li>
</ul>
</section>
<!-- 额外设置 (任务告警通知) -->
<section class="settings-card hermes-extra-settings">
<div class="card-head">
<div class="card-title-with-icon">
<div class="model-icon-box">
<i class="mdi mdi-bell-ring-outline"></i>
</div>
<div>
<h4>任务告警通知</h4>
<p>配置自动任务运行出现故障限频或执行失败时的管理员实时提醒通知渠道</p>
</div>
</div>
</div>
<div class="switch-group">
<button
class="switch-row"
type="button"
:class="{ active: hermesForm.notifyOnFailure }"
aria-label="切换邮件通知"
@click="$emit('toggle-flag', 'notifyOnFailure')"
>
<span class="switch-copy">
<strong>任务失败时发送邮件通知管理员</strong>
<small>仅在自动任务执行出现故障或异常时触发告警保障后台服务的高可用性</small>
</span>
<span class="switch-btn" :class="{ active: hermesForm.notifyOnFailure }"><i></i></span>
</button>
</div>
</section>
</div>
</template>
<script src="./scripts/HermesEmployeeSettingsPanel.js"></script>
<style scoped src="../assets/styles/views/settings-view-form.css"></style>
<style scoped src="../assets/styles/views/settings-view.css"></style>
<style scoped src="../assets/styles/views/settings-view-hermes.css"></style>