fix(小宝预警): 移除风险快捷筛选
This commit is contained in:
@@ -9,11 +9,9 @@ import { useXiaobaoWarningRisks } from '@/hooks/useXiaobaoWarningRisks';
|
|||||||
import type { XiaobaoRiskLevel, XiaobaoVersionRisk } from '@/lib/xiaobao-risk';
|
import type { XiaobaoRiskLevel, XiaobaoVersionRisk } from '@/lib/xiaobao-risk';
|
||||||
import { buildRiskInsightSignature, findPreviousRiskSnapshot, getReusableInsight, requestRiskInsight, shouldRequestRiskInsightWithCacheGate } from '@/lib/xiaobao-risk-ai';
|
import { buildRiskInsightSignature, findPreviousRiskSnapshot, getReusableInsight, requestRiskInsight, shouldRequestRiskInsightWithCacheGate } from '@/lib/xiaobao-risk-ai';
|
||||||
import { buildRiskSignature, findLatestDailySnapshot, shouldSaveRiskSnapshot } from '@/lib/xiaobao-risk-trend';
|
import { buildRiskSignature, findLatestDailySnapshot, shouldSaveRiskSnapshot } from '@/lib/xiaobao-risk-trend';
|
||||||
import { filterXiaobaoRiskWarnings, formatRemainingWork, sanitizeRiskInsight, type XiaobaoWarningRiskFilter } from '@/lib/xiaobao-warning-view';
|
import { filterXiaobaoRiskWarnings, formatRemainingWork, sanitizeRiskInsight } from '@/lib/xiaobao-warning-view';
|
||||||
import { formatDateTime } from '@/lib/format';
|
import { formatDateTime } from '@/lib/format';
|
||||||
|
|
||||||
const HIGH_RISK_LEVELS = new Set<XiaobaoRiskLevel>(['at_risk', 'likely_delayed', 'blocked']);
|
|
||||||
|
|
||||||
const RISK_LEVEL_LABEL: Record<XiaobaoRiskLevel, string> = {
|
const RISK_LEVEL_LABEL: Record<XiaobaoRiskLevel, string> = {
|
||||||
on_track: '按期',
|
on_track: '按期',
|
||||||
attention: '关注',
|
attention: '关注',
|
||||||
@@ -45,7 +43,6 @@ function XiaobaoWarningContent() {
|
|||||||
const canManage = useHasPermission('xiaobao.warning:manage');
|
const canManage = useHasPermission('xiaobao.warning:manage');
|
||||||
const { risks, snapshots, insights, riskDataLoaded, saveSnapshot, saveInsight, today } = useXiaobaoWarningRisks({ loadRiskCache: true });
|
const { risks, snapshots, insights, riskDataLoaded, saveSnapshot, saveInsight, today } = useXiaobaoWarningRisks({ loadRiskCache: true });
|
||||||
const [selectedRiskId, setSelectedRiskId] = useState<string | null>(null);
|
const [selectedRiskId, setSelectedRiskId] = useState<string | null>(null);
|
||||||
const [riskFilter, setRiskFilter] = useState<XiaobaoWarningRiskFilter>('all');
|
|
||||||
const [selectedProductId, setSelectedProductId] = useState('');
|
const [selectedProductId, setSelectedProductId] = useState('');
|
||||||
const [selectedProjectId, setSelectedProjectId] = useState('');
|
const [selectedProjectId, setSelectedProjectId] = useState('');
|
||||||
const savedSnapshotKeysRef = useRef(new Set<string>());
|
const savedSnapshotKeysRef = useRef(new Set<string>());
|
||||||
@@ -112,10 +109,9 @@ function XiaobaoWarningContent() {
|
|||||||
}, [projectOptions, selectedProjectId]);
|
}, [projectOptions, selectedProjectId]);
|
||||||
|
|
||||||
const filteredRisks = useMemo(() => filterXiaobaoRiskWarnings(risksWithInsight, {
|
const filteredRisks = useMemo(() => filterXiaobaoRiskWarnings(risksWithInsight, {
|
||||||
riskFilter,
|
|
||||||
productId: selectedProductId || undefined,
|
productId: selectedProductId || undefined,
|
||||||
projectId: selectedProjectId || undefined,
|
projectId: selectedProjectId || undefined,
|
||||||
}), [riskFilter, risksWithInsight, selectedProductId, selectedProjectId]);
|
}), [risksWithInsight, selectedProductId, selectedProjectId]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (filteredRisks.length === 0) {
|
if (filteredRisks.length === 0) {
|
||||||
@@ -184,11 +180,6 @@ function XiaobaoWarningContent() {
|
|||||||
onChange={setSelectedProjectId}
|
onChange={setSelectedProjectId}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-3 inline-flex rounded-lg border border-[var(--line)] bg-[var(--bg)] p-1">
|
|
||||||
<FilterButton active={riskFilter === 'all'} onClick={() => setRiskFilter('all')}>全部</FilterButton>
|
|
||||||
<FilterButton active={riskFilter === 'attention'} onClick={() => setRiskFilter('attention')}>需关注</FilterButton>
|
|
||||||
<FilterButton active={riskFilter === 'high'} onClick={() => setRiskFilter('high')}>高风险</FilterButton>
|
|
||||||
</div>
|
|
||||||
<p className="mt-3 text-[11px] text-[var(--ink-muted)]">
|
<p className="mt-3 text-[11px] text-[var(--ink-muted)]">
|
||||||
当前显示 {filteredRisks.length} 个风险版本,系统会自动隐藏无风险版本。
|
当前显示 {filteredRisks.length} 个风险版本,系统会自动隐藏无风险版本。
|
||||||
</p>
|
</p>
|
||||||
@@ -413,22 +404,6 @@ function SelectFilter({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FilterButton({ active, onClick, children }: { active: boolean; onClick: () => void; children: React.ReactNode }) {
|
|
||||||
return (
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={onClick}
|
|
||||||
className={`h-7 rounded-md px-3 text-[12px] transition-colors ${
|
|
||||||
active
|
|
||||||
? 'bg-[var(--accent)] text-white'
|
|
||||||
: 'text-[var(--ink-soft)] hover:bg-[var(--bg-subtle)] hover:text-[var(--ink)]'
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
</button>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function TabButton({ active, onClick, children }: { active: boolean; onClick: () => void; children: React.ReactNode }) {
|
function TabButton({ active, onClick, children }: { active: boolean; onClick: () => void; children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
|
|||||||
Reference in New Issue
Block a user