| | |
| | | import Pagination from '@/components/common/Pagination.vue' |
| | | import { useBoolean } from '@/hooks' |
| | | import LogTimeline from './components/LogTimeline.vue' |
| | | import type { CreateTaskParams, DetailFilterParams, LogLevel, LogModule, ModuleStatusSummary, PaginationState, QueryRecord, RecordDetailResult, RecordListParams, RelatedOrder } from './order-log.types' |
| | | import type { CreateTaskParams, DetailFilterParams, ModuleStatusSummary, PaginationState, QueryRecord, RecordDetailResult, RecordListParams, RelatedOrder } from './order-log.types' |
| | | import { |
| | | DEFAULT_PAGE_SIZE, |
| | | LEVEL_OPTIONS, |
| | |
| | | width: 90, |
| | | fixed: 'right', |
| | | render: row => ( |
| | | <NButton text type="primary" size="small" onClick={() => openDetail(row.recordId, { keyword: row.keyword, modules: row.queryModules })}> |
| | | <NButton text type="primary" size="small" onClick={() => openDetail(row.recordId)}> |
| | | 查看详情 |
| | | </NButton> |
| | | ), |
| | |
| | | closeCreateModal() |
| | | window.$message?.success(`排查任务已创建(记录 #${data.recordId})`) |
| | | await loadRecords() |
| | | await openDetail(data.recordId, { keyword: createParams.value.keyword, modules: [...createParams.value.modules] }) |
| | | await openDetail(data.recordId) |
| | | } |
| | | catch (e) { |
| | | console.error('[OrderLog] create task failed:', e) |
| | |
| | | const detail = ref<RecordDetailResult | null>(null) |
| | | |
| | | const initialDetailFilter: DetailFilterParams = { |
| | | // 默认全选 = 不过滤;不想看哪个级别在筛选器里去掉即可,请求只带选中的级别 |
| | | levels: ['ERROR', 'WARN', 'INFO', 'DEBUG'], |
| | | modules: ['CLOUD', 'CDU', 'XPU', 'MINI_PROGRAM'], |
| | | keyword: '', |
| | |
| | | } |
| | | } |
| | | |
| | | async function openDetail(recordId: number, preset?: { keyword?: string, modules?: LogModule[] }) { |
| | | async function openDetail(recordId: number) { |
| | | currentRecordId.value = recordId |
| | | detailFilter.value = { ...initialDetailFilter } |
| | | // 预填来源/关键字:首次请求就带上,避免先默认查一次再重查(二次请求) |
| | | if (preset?.keyword) |
| | | detailFilter.value.keyword = preset.keyword |
| | | if (preset?.modules && preset.modules.length > 0 && preset.modules.length < 4) |
| | | detailFilter.value.modules = [...preset.modules] |
| | | viewMode.value = 'detail' |
| | | await fetchDetail() |
| | | // 无 preset 兼容(后端列表未返回预填字段时):拿到详情后再预填重取一次 |
| | | if (!preset && detail.value) { |
| | | // 用记录新建时的来源/关键字预填详情筛选(仅首次进入) |
| | | if (detail.value) { |
| | | const kw = detail.value.keyword |
| | | const mods = detail.value.queryModules |
| | | let changed = false |
| | |
| | | path: 'levels', |
| | | render: () => ( |
| | | <n-select |
| | | value={detailFilter.value.levels} |
| | | v-model:value={detailFilter.value.levels} |
| | | options={LEVEL_OPTIONS} |
| | | multiple |
| | | clearable |
| | | placeholder="全部级别" |
| | | max-tag-count="responsive" |
| | | onUpdateValue={(v: LogLevel[] | null) => { |
| | | // 先写入新值再发请求,避免 v-model/onUpdateValue 双回调导致滞后一拍 |
| | | detailFilter.value.levels = v ?? [] |
| | | handleFilterChange() |
| | | }} |
| | | onUpdateValue={handleFilterChange} |
| | | /> |
| | | ), |
| | | }, |
| | |
| | | path: 'modules', |
| | | render: () => ( |
| | | <n-select |
| | | value={detailFilter.value.modules} |
| | | v-model:value={detailFilter.value.modules} |
| | | options={MODULE_OPTIONS} |
| | | multiple |
| | | clearable |
| | | placeholder="全部模块" |
| | | max-tag-count="responsive" |
| | | onUpdateValue={(v: LogModule[] | null) => { |
| | | detailFilter.value.modules = v ?? [] |
| | | handleFilterChange() |
| | | }} |
| | | onUpdateValue={handleFilterChange} |
| | | /> |
| | | ), |
| | | }, |