feat(steady): 重构稳态校验功能并优化界面布局

- 更新 API 接口路径从 /steady/data-view/checksquare/* 到 /steady/checksquare/*
- 修改校验任务状态枚举值 FAILED 为 FAIL 并更新相关处理逻辑
- 移除缺失率和最大连续缺失分钟数字段,简化数据完整性计算
- 添加新的创建结果面板组件 ChecksquareCreateResultPanel.vue
- 调整创建对话框布局,采用两行搜索控件设计
- 更新任务表头部按钮文字为"新增"并调整搜索列配置为5列
- 修改详情面板显示开始时间和结束时间字段
- 重构工作台界面布局,使用 flex 布局替代 grid 布局
- 更新设备类型相关 API 接口和数据结构定义
- 添加设备类型字典常量并更新路由配置
- 优化搜索表单展开收起逻辑的计算方式
- 调整创建流程不再轮询获取任务详情,改为直接显示摘要信息
- 更新数据完整性格式化函数参数和调用方式
- 修改创建对话框样式类名和尺寸配置
- 添加设备类型管理相关的接口定义和实现方法
This commit is contained in:
2026-06-15 08:40:44 +08:00
parent 81f90ce0f2
commit ef80aff151
38 changed files with 4165 additions and 1254 deletions

View File

@@ -2,8 +2,10 @@
<section class="mapping-panel config-panel">
<div class="panel-header">
<div>
<h2 class="panel-title">人工索引配置</h2>
<p class="panel-description">展示现有的人工索引配置并允许继续编辑</p>
<div class="panel-title-tabs">
<span class="panel-title-tab">索引配置</span>
</div>
<p v-if="showDescription" class="panel-description">展示现有的索引配置并允许继续编辑</p>
</div>
<div class="panel-actions">
<el-button
@@ -23,7 +25,7 @@
:disabled="!canGenerate"
@click="emit('generate')"
>
生成JSON映射
JSON映射
</el-button>
</div>
</div>
@@ -39,7 +41,7 @@
:disabled="isSubmitting"
:rows="18"
resize="none"
placeholder="人工索引配置完成后,这里会自动回填索引配置,仍可继续直接编辑。"
placeholder="索引配置完成后,这里会自动回填索引配置,仍可继续直接编辑。"
@update:model-value="value => emit('update:indexSelectionJson', String(value || ''))"
/>
</div>
@@ -56,7 +58,7 @@ defineOptions({
name: 'MappingConfigPanel'
})
defineProps<{
withDefaults(defineProps<{
indexSelectionJson: string
isSubmitting: boolean
isGenerating: boolean
@@ -68,7 +70,10 @@ defineProps<{
canConfirm: boolean
hasDefaultJson: boolean
emptyDescription: string
}>()
showDescription?: boolean
}>(), {
showDescription: true
})
const emit = defineEmits<{
(event: 'update:indexSelectionJson', value: string): void
@@ -110,12 +115,34 @@ const emit = defineEmits<{
white-space: nowrap;
}
.panel-title {
margin: 0;
font-size: 22px;
font-weight: 600;
line-height: 1.4;
color: #1f2937;
.panel-actions :deep(.el-button + .el-button) {
margin-left: 0;
}
.panel-title-tabs {
display: inline-flex;
align-items: center;
border-bottom: 1px solid var(--el-border-color-light);
}
.panel-title-tab {
position: relative;
height: 36px;
padding: 0 2px;
font-size: 13px;
line-height: 36px;
color: var(--el-color-primary);
white-space: nowrap;
}
.panel-title-tab::after {
position: absolute;
right: 0;
bottom: -1px;
left: 0;
height: 2px;
background-color: var(--el-color-primary);
content: '';
}
.panel-description {