@svadmin/lite 0.27.0 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/components/LiteAbacPolicyMatrix.svelte +128 -0
  2. package/dist/components/LiteAbacPolicyMatrix.svelte.d.ts +16 -0
  3. package/dist/components/LiteApiPlayground.svelte +103 -0
  4. package/dist/components/LiteApiPlayground.svelte.d.ts +10 -0
  5. package/dist/components/LiteApprovalChainBuilder.svelte +120 -0
  6. package/dist/components/LiteApprovalChainBuilder.svelte.d.ts +15 -0
  7. package/dist/components/LiteAuditTrailInspector.svelte +166 -0
  8. package/dist/components/LiteAuditTrailInspector.svelte.d.ts +23 -0
  9. package/dist/components/LiteBillingInvoiceDrawer.svelte +100 -0
  10. package/dist/components/LiteBillingInvoiceDrawer.svelte.d.ts +16 -0
  11. package/dist/components/LiteChartAnnotationOverlay.svelte +101 -0
  12. package/dist/components/LiteChartAnnotationOverlay.svelte.d.ts +16 -0
  13. package/dist/components/LiteColumnMappingTable.svelte +105 -0
  14. package/dist/components/LiteColumnMappingTable.svelte.d.ts +14 -0
  15. package/dist/components/LiteDashboardGridLayout.svelte +108 -0
  16. package/dist/components/LiteDashboardGridLayout.svelte.d.ts +16 -0
  17. package/dist/components/LiteDashboardLayoutStorage.svelte +88 -0
  18. package/dist/components/LiteDashboardLayoutStorage.svelte.d.ts +16 -0
  19. package/dist/components/LiteDataImportDropzone.svelte +89 -0
  20. package/dist/components/LiteDataImportDropzone.svelte.d.ts +10 -0
  21. package/dist/components/LiteDataLineageGraph.svelte +100 -0
  22. package/dist/components/LiteDataLineageGraph.svelte.d.ts +15 -0
  23. package/dist/components/LiteDataMaskPolicyEngine.svelte +131 -0
  24. package/dist/components/LiteDataMaskPolicyEngine.svelte.d.ts +16 -0
  25. package/dist/components/LiteDataScreenContainer.svelte +34 -0
  26. package/dist/components/LiteDataScreenContainer.svelte.d.ts +9 -0
  27. package/dist/components/LiteElectronicSealStamp.svelte +56 -0
  28. package/dist/components/LiteElectronicSealStamp.svelte.d.ts +9 -0
  29. package/dist/components/LiteEnvVariableEditor.svelte +114 -0
  30. package/dist/components/LiteEnvVariableEditor.svelte.d.ts +15 -0
  31. package/dist/components/LiteFormulaField.svelte +44 -0
  32. package/dist/components/LiteFormulaField.svelte.d.ts +11 -0
  33. package/dist/components/LiteGeoScatterMap.svelte +117 -0
  34. package/dist/components/LiteGeoScatterMap.svelte.d.ts +16 -0
  35. package/dist/components/LiteHmacSignatureCalculator.svelte +84 -0
  36. package/dist/components/LiteHmacSignatureCalculator.svelte.d.ts +10 -0
  37. package/dist/components/LiteImportPreviewValidator.svelte +136 -0
  38. package/dist/components/LiteImportPreviewValidator.svelte.d.ts +16 -0
  39. package/dist/components/LiteLiveStreamLogViewer.svelte +84 -0
  40. package/dist/components/LiteLiveStreamLogViewer.svelte.d.ts +14 -0
  41. package/dist/components/LiteOmnibarCommandPalette.svelte +111 -0
  42. package/dist/components/LiteOmnibarCommandPalette.svelte.d.ts +15 -0
  43. package/dist/components/LitePeriodComparisonCard.svelte +60 -0
  44. package/dist/components/LitePeriodComparisonCard.svelte.d.ts +11 -0
  45. package/dist/components/LitePermissionSimulator.svelte +90 -0
  46. package/dist/components/LitePermissionSimulator.svelte.d.ts +14 -0
  47. package/dist/components/LitePivotMatrix.svelte +138 -0
  48. package/dist/components/LitePivotMatrix.svelte.d.ts +18 -0
  49. package/dist/components/LitePlanUsageQuotaBar.svelte +96 -0
  50. package/dist/components/LitePlanUsageQuotaBar.svelte.d.ts +15 -0
  51. package/dist/components/LiteQueryAiExplainer.svelte +85 -0
  52. package/dist/components/LiteQueryAiExplainer.svelte.d.ts +10 -0
  53. package/dist/components/LiteScheduledJobManager.svelte +116 -0
  54. package/dist/components/LiteScheduledJobManager.svelte.d.ts +16 -0
  55. package/dist/components/LiteScreenAntiLeakGuard.svelte +56 -0
  56. package/dist/components/LiteScreenAntiLeakGuard.svelte.d.ts +8 -0
  57. package/dist/components/LiteSecureDataExporter.svelte +101 -0
  58. package/dist/components/LiteSecureDataExporter.svelte.d.ts +12 -0
  59. package/dist/components/LiteSqlConsole.svelte +128 -0
  60. package/dist/components/LiteSqlConsole.svelte.d.ts +16 -0
  61. package/dist/components/LiteSystemCapacityForecastCard.svelte +88 -0
  62. package/dist/components/LiteSystemCapacityForecastCard.svelte.d.ts +11 -0
  63. package/dist/components/LiteSystemHealthCheckDashboard.svelte +142 -0
  64. package/dist/components/LiteSystemHealthCheckDashboard.svelte.d.ts +18 -0
  65. package/dist/components/LiteTableAggregationFooter.svelte +76 -0
  66. package/dist/components/LiteTableAggregationFooter.svelte.d.ts +14 -0
  67. package/dist/components/LiteTenantContextSwitcher.svelte +173 -0
  68. package/dist/components/LiteTenantContextSwitcher.svelte.d.ts +27 -0
  69. package/dist/components/LiteTenantQuotasMatrix.svelte +117 -0
  70. package/dist/components/LiteTenantQuotasMatrix.svelte.d.ts +17 -0
  71. package/dist/components/LiteThreadedCommentDrawer.svelte +60 -0
  72. package/dist/components/LiteThreadedCommentDrawer.svelte.d.ts +15 -0
  73. package/dist/components/LiteTierFeatureComparison.svelte +97 -0
  74. package/dist/components/LiteTierFeatureComparison.svelte.d.ts +18 -0
  75. package/dist/components/LiteWebhookSimulator.svelte +120 -0
  76. package/dist/components/LiteWebhookSimulator.svelte.d.ts +11 -0
  77. package/dist/components/LiteWorkflowNodeInspector.svelte +79 -0
  78. package/dist/components/LiteWorkflowNodeInspector.svelte.d.ts +11 -0
  79. package/dist/index.d.ts +40 -0
  80. package/dist/index.js +47 -0
  81. package/package.json +2 -2
@@ -0,0 +1,138 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ title?: string;
4
+ rowDimensionLabel?: string;
5
+ colDimensionLabel?: string;
6
+ measureLabel?: string;
7
+ cols?: string[];
8
+ rows?: { name: string; cells: (number | string)[]; total: number | string }[];
9
+ grandTotals?: (number | string)[];
10
+ grandTotalAll?: number | string;
11
+ class?: string;
12
+ }
13
+
14
+ let {
15
+ title = '多维交叉透视分析矩阵',
16
+ rowDimensionLabel = '区域 / 部门',
17
+ colDimensionLabel = '季度',
18
+ measureLabel = '销售额 (SUM)',
19
+ cols = ['2026 Q1', '2026 Q2', '2026 Q3', '2026 Q4'],
20
+ rows = [
21
+ { name: '华东大区 / 软件业务部', cells: ['¥ 1,280,000', '¥ 1,540,000', '¥ 1,120,000', '¥ 1,350,000'], total: '¥ 5,290,000' },
22
+ { name: '华南大区 / 跨境电商部', cells: ['¥ 950,000', '¥ 1,020,000', '¥ 1,480,000', '¥ 1,890,000'], total: '¥ 5,340,000' },
23
+ { name: '华北大区 / 政府业务线', cells: ['¥ 820,000', '¥ 780,000', '¥ 910,000', '¥ 1,320,000'], total: '¥ 3,830,000' }
24
+ ],
25
+ grandTotals = ['¥ 3,050,000', '¥ 3,340,000', '¥ 3,510,000', '¥ 4,560,000'],
26
+ grandTotalAll = '¥ 14,460,000',
27
+ class: className = '',
28
+ }: Props = $props();
29
+ </script>
30
+
31
+ <div
32
+ class="lite-pivot-matrix {className}"
33
+ data-svadmin-component="LitePivotMatrix"
34
+ role="region"
35
+ aria-label="Pivot Matrix"
36
+ >
37
+ <header class="lite-pivot-header">
38
+ <div class="lite-pivot-title-wrap">
39
+ <h4 class="lite-pivot-title">{title}</h4>
40
+ <span class="lite-pivot-meta">行: {rowDimensionLabel} ✕ 列: {colDimensionLabel}</span>
41
+ </div>
42
+ <span class="lite-pivot-measure">{measureLabel}</span>
43
+ </header>
44
+
45
+ <div class="lite-pivot-table-wrap">
46
+ <table class="lite-pivot-table">
47
+ <thead>
48
+ <tr>
49
+ <th class="lite-th-rowdim">{rowDimensionLabel}</th>
50
+ {#each cols as col (col)}
51
+ <th class="lite-th-coldim">{col}</th>
52
+ {/each}
53
+ <th class="lite-th-rowtotal">行汇总</th>
54
+ </tr>
55
+ </thead>
56
+ <tbody>
57
+ {#each rows as row (row.name)}
58
+ <tr>
59
+ <td class="lite-td-rowname">{row.name}</td>
60
+ {#each row.cells as cell, idx (idx)}
61
+ <td class="lite-td-cell">{cell}</td>
62
+ {/each}
63
+ <td class="lite-td-rowtotal">{row.total}</td>
64
+ </tr>
65
+ {/each}
66
+ </tbody>
67
+ <tfoot>
68
+ <tr class="lite-tr-grandtotal">
69
+ <td class="lite-td-grandlabel">列汇总</td>
70
+ {#each grandTotals as gTotal, idx (idx)}
71
+ <td class="lite-td-coltotal">{gTotal}</td>
72
+ {/each}
73
+ <td class="lite-td-grandall">{grandTotalAll}</td>
74
+ </tr>
75
+ </tfoot>
76
+ </table>
77
+ </div>
78
+ </div>
79
+
80
+ <style>
81
+ .lite-pivot-matrix {
82
+ border: 1px solid #e5e6eb;
83
+ border-radius: 6px;
84
+ background: #ffffff;
85
+ font-size: 12px;
86
+ overflow: hidden;
87
+ }
88
+ .lite-pivot-header {
89
+ display: flex;
90
+ justify-content: space-between;
91
+ align-items: center;
92
+ padding: 10px 14px;
93
+ background: #f7f8fa;
94
+ border-bottom: 1px solid #e5e6eb;
95
+ }
96
+ .lite-pivot-title-wrap { display: block; }
97
+ .lite-pivot-title { margin: 0; font-size: 13px; font-weight: 600; color: #1d2129; }
98
+ .lite-pivot-meta { font-size: 11px; color: #86909c; display: block; margin-top: 2px; }
99
+ .lite-pivot-measure {
100
+ font-size: 11px;
101
+ font-weight: 600;
102
+ color: #165dff;
103
+ background: #e8f3ff;
104
+ padding: 2px 8px;
105
+ border-radius: 4px;
106
+ }
107
+ .lite-pivot-table-wrap { overflow-x: auto; }
108
+ .lite-pivot-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 11px; }
109
+ .lite-pivot-table th {
110
+ padding: 8px 12px;
111
+ background: #f2f3f5;
112
+ border-bottom: 1px solid #e5e6eb;
113
+ border-right: 1px solid #e5e6eb;
114
+ color: #4e5969;
115
+ font-weight: 600;
116
+ }
117
+ .lite-th-coldim, .lite-th-rowtotal, .lite-td-cell, .lite-td-rowtotal, .lite-td-coltotal, .lite-td-grandall {
118
+ text-align: right;
119
+ }
120
+ .lite-th-rowtotal { background: #e8f3ff; color: #165dff; }
121
+ .lite-pivot-table td {
122
+ padding: 8px 12px;
123
+ border-bottom: 1px solid #f2f3f5;
124
+ border-right: 1px solid #f2f3f5;
125
+ color: #1d2129;
126
+ }
127
+ .lite-td-rowname { font-weight: 600; background: #fafbfc; }
128
+ .lite-td-cell { font-family: monospace; }
129
+ .lite-td-rowtotal { font-family: monospace; font-weight: 600; background: #fafbfc; }
130
+ .lite-tr-grandtotal td {
131
+ border-top: 2px solid #e5e6eb;
132
+ background: #f7f8fa;
133
+ font-weight: 700;
134
+ }
135
+ .lite-td-grandlabel { color: #1d2129; }
136
+ .lite-td-coltotal { font-family: monospace; }
137
+ .lite-td-grandall { font-family: monospace; color: #165dff; font-size: 12px; }
138
+ </style>
@@ -0,0 +1,18 @@
1
+ interface Props {
2
+ title?: string;
3
+ rowDimensionLabel?: string;
4
+ colDimensionLabel?: string;
5
+ measureLabel?: string;
6
+ cols?: string[];
7
+ rows?: {
8
+ name: string;
9
+ cells: (number | string)[];
10
+ total: number | string;
11
+ }[];
12
+ grandTotals?: (number | string)[];
13
+ grandTotalAll?: number | string;
14
+ class?: string;
15
+ }
16
+ declare const LitePivotMatrix: import("svelte").Component<Props, {}, "">;
17
+ type LitePivotMatrix = ReturnType<typeof LitePivotMatrix>;
18
+ export default LitePivotMatrix;
@@ -0,0 +1,96 @@
1
+ <script lang="ts">
2
+ interface Quota {
3
+ label: string;
4
+ current: number;
5
+ limit: number;
6
+ unit?: string;
7
+ }
8
+
9
+ interface Props {
10
+ planName?: string;
11
+ quotas?: Quota[];
12
+ resetDateText?: string;
13
+ class?: string;
14
+ }
15
+
16
+ let {
17
+ planName = 'Enterprise Scale',
18
+ quotas = [
19
+ { label: 'API Requests', current: 75000, limit: 100000, unit: 'req' },
20
+ { label: 'Storage', current: 18, limit: 20, unit: 'GB' },
21
+ ],
22
+ resetDateText = '2026-12-01',
23
+ class: className = '',
24
+ }: Props = $props();
25
+
26
+ function calcPct(current: number, limit: number): number {
27
+ if (limit <= 0) return 0;
28
+ return Math.max(0, Math.min(100, Math.round((current / limit) * 100)));
29
+ }
30
+ </script>
31
+
32
+ <div
33
+ class="lite-plan-quota {className}"
34
+ data-svadmin-component="LitePlanUsageQuotaBar"
35
+ role="region"
36
+ aria-label="Plan Usage Quotas"
37
+ >
38
+ <header class="lite-quota-header">
39
+ <div>
40
+ <h4 class="lite-quota-title">{planName}</h4>
41
+ {#if resetDateText}
42
+ <span class="lite-quota-reset">重置周期: {resetDateText}</span>
43
+ {/if}
44
+ </div>
45
+ </header>
46
+
47
+ <div class="lite-quota-body">
48
+ {#each quotas as q (q.label)}
49
+ {@const pct = calcPct(q.current, q.limit)}
50
+ <div class="lite-quota-item">
51
+ <div class="lite-quota-labels">
52
+ <span class="lite-quota-name">{q.label}</span>
53
+ <span class="lite-quota-values">{q.current} / {q.limit} {q.unit ?? ''} ({pct}%)</span>
54
+ </div>
55
+ <div class="lite-quota-track">
56
+ <div
57
+ class="lite-quota-bar"
58
+ class:lite-bar-warn={pct >= 80 && pct < 95}
59
+ class:lite-bar-danger={pct >= 95}
60
+ style="width: {pct}%;"
61
+ ></div>
62
+ </div>
63
+ </div>
64
+ {/each}
65
+ </div>
66
+ </div>
67
+
68
+ <style>
69
+ .lite-plan-quota {
70
+ border: 1px solid #e5e6eb;
71
+ border-radius: 6px;
72
+ background: #ffffff;
73
+ font-size: 12px;
74
+ overflow: hidden;
75
+ }
76
+ .lite-quota-header {
77
+ display: flex;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ padding: 10px 14px;
81
+ background: #f7f8fa;
82
+ border-bottom: 1px solid #e5e6eb;
83
+ }
84
+ .lite-quota-title { margin: 0; font-size: 13px; font-weight: 600; color: #1d2129; }
85
+ .lite-quota-reset { font-size: 11px; color: #86909c; font-family: monospace; display: block; margin-top: 2px; }
86
+ .lite-quota-body { padding: 12px 14px; }
87
+ .lite-quota-item { margin-bottom: 10px; }
88
+ .lite-quota-item:last-child { margin-bottom: 0; }
89
+ .lite-quota-labels { display: flex; justify-content: space-between; margin-bottom: 4px; font-size: 11px; font-family: monospace; }
90
+ .lite-quota-name { font-weight: 500; color: #4e5969; font-family: sans-serif; }
91
+ .lite-quota-values { color: #1d2129; font-weight: 600; }
92
+ .lite-quota-track { height: 6px; background: #f2f3f5; border-radius: 3px; overflow: hidden; }
93
+ .lite-quota-bar { height: 100%; background: #165dff; border-radius: 3px; }
94
+ .lite-bar-warn { background: #ff7d00; }
95
+ .lite-bar-danger { background: #f53f3f; }
96
+ </style>
@@ -0,0 +1,15 @@
1
+ interface Quota {
2
+ label: string;
3
+ current: number;
4
+ limit: number;
5
+ unit?: string;
6
+ }
7
+ interface Props {
8
+ planName?: string;
9
+ quotas?: Quota[];
10
+ resetDateText?: string;
11
+ class?: string;
12
+ }
13
+ declare const LitePlanUsageQuotaBar: import("svelte").Component<Props, {}, "">;
14
+ type LitePlanUsageQuotaBar = ReturnType<typeof LitePlanUsageQuotaBar>;
15
+ export default LitePlanUsageQuotaBar;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ title?: string;
4
+ queryText?: string;
5
+ contextName?: string;
6
+ explanation?: string;
7
+ class?: string;
8
+ }
9
+
10
+ let {
11
+ title = 'AI 规则语义解释卡片',
12
+ queryText = "WHERE region = 'East' AND amount >= 50000",
13
+ contextName = '大额核销清单',
14
+ explanation = '该查询用于筛选属于华东大区且结算金额不低于 5 万元的所有合规单据。',
15
+ class: className = '',
16
+ }: Props = $props();
17
+ </script>
18
+
19
+ <div
20
+ class="lite-query-explainer {className}"
21
+ data-svadmin-component="LiteQueryAiExplainer"
22
+ role="region"
23
+ aria-label="Query AI Explainer"
24
+ >
25
+ <header class="lite-explainer-header">
26
+ <div class="lite-explainer-title-wrap">
27
+ <span class="lite-explainer-icon">✨</span>
28
+ <h4 class="lite-explainer-title">{title}</h4>
29
+ <span class="lite-explainer-ctx">({contextName})</span>
30
+ </div>
31
+ </header>
32
+
33
+ <div class="lite-explainer-body">
34
+ <div class="lite-query-code">
35
+ <code>{queryText}</code>
36
+ </div>
37
+
38
+ <div class="lite-explanation-box">
39
+ <div class="lite-explanation-title">业务通俗口径解释:</div>
40
+ <div class="lite-explanation-content">{explanation}</div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <style>
46
+ .lite-query-explainer {
47
+ border: 1px solid #e5e6eb;
48
+ border-radius: 6px;
49
+ background: #ffffff;
50
+ font-size: 12px;
51
+ overflow: hidden;
52
+ }
53
+ .lite-explainer-header {
54
+ display: flex;
55
+ justify-content: space-between;
56
+ align-items: center;
57
+ padding: 10px 14px;
58
+ background: #f7f8fa;
59
+ border-bottom: 1px solid #e5e6eb;
60
+ }
61
+ .lite-explainer-title-wrap { display: flex; align-items: center; }
62
+ .lite-explainer-title-wrap > * + * { margin-left: 6px; }
63
+ .lite-explainer-icon { color: #165dff; font-size: 12px; }
64
+ .lite-explainer-title { margin: 0; font-size: 13px; font-weight: 600; color: #1d2129; }
65
+ .lite-explainer-ctx { font-size: 11px; color: #86909c; }
66
+ .lite-explainer-body { padding: 12px 14px; }
67
+ .lite-query-code {
68
+ background: #f2f3f5;
69
+ padding: 8px 12px;
70
+ border-radius: 4px;
71
+ font-family: monospace;
72
+ font-size: 11px;
73
+ color: #1d2129;
74
+ margin-bottom: 10px;
75
+ overflow-x: auto;
76
+ }
77
+ .lite-explanation-box {
78
+ background: #e8f3ff;
79
+ border: 1px solid #bedaff;
80
+ border-radius: 6px;
81
+ padding: 10px 12px;
82
+ }
83
+ .lite-explanation-title { font-weight: 600; color: #165dff; font-size: 11px; margin-bottom: 4px; }
84
+ .lite-explanation-content { color: #1d2129; line-height: 1.5; font-size: 12px; }
85
+ </style>
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ title?: string;
3
+ queryText?: string;
4
+ contextName?: string;
5
+ explanation?: string;
6
+ class?: string;
7
+ }
8
+ declare const LiteQueryAiExplainer: import("svelte").Component<Props, {}, "">;
9
+ type LiteQueryAiExplainer = ReturnType<typeof LiteQueryAiExplainer>;
10
+ export default LiteQueryAiExplainer;
@@ -0,0 +1,116 @@
1
+ <script lang="ts">
2
+ interface Job {
3
+ id: string;
4
+ name: string;
5
+ cronExpression: string;
6
+ status: 'running' | 'idle' | 'disabled' | 'failed';
7
+ lastRunAt?: string;
8
+ nextRunAt?: string;
9
+ }
10
+
11
+ interface Props {
12
+ title?: string;
13
+ jobs?: Job[];
14
+ class?: string;
15
+ }
16
+
17
+ let {
18
+ title = '定时任务与计划调度管理',
19
+ jobs = [
20
+ { id: 'job_01', name: '每日数据汇总快照', cronExpression: '0 2 * * *', status: 'idle', lastRunAt: '2026-11-11 02:00:00', nextRunAt: '2026-11-12 02:00:00' },
21
+ { id: 'job_02', name: '离线账单自动结算', cronExpression: '0 0 1 * *', status: 'idle', lastRunAt: '2026-11-01 00:00:00', nextRunAt: '2026-12-01 00:00:00' },
22
+ { id: 'job_03', name: '审计日志冷备归档', cronExpression: '0 */6 * * *', status: 'running', lastRunAt: '2026-11-11 18:00:00', nextRunAt: '2026-11-12 00:00:00' },
23
+ { id: 'job_04', name: '临时测试数据清理', cronExpression: '0 4 * * 0', status: 'disabled', lastRunAt: '2026-11-08 04:00:00', nextRunAt: '—' }
24
+ ],
25
+ class: className = '',
26
+ }: Props = $props();
27
+
28
+ function getStatusStyle(st: string): { label: string; color: string; bg: string } {
29
+ switch (st) {
30
+ case 'running': return { label: '运行中', color: '#165dff', bg: '#e8f3ff' };
31
+ case 'failed': return { label: '执行失败', color: '#f53f3f', bg: '#ffece8' };
32
+ case 'disabled': return { label: '已停用', color: '#86909c', bg: '#f2f3f5' };
33
+ default: return { label: '就绪等待', color: '#00b42a', bg: '#e8ffea' };
34
+ }
35
+ }
36
+ </script>
37
+
38
+ <div
39
+ class="lite-scheduler-matrix {className}"
40
+ data-svadmin-component="LiteScheduledJobManager"
41
+ role="region"
42
+ aria-label="Scheduled Job Manager"
43
+ >
44
+ <header class="lite-scheduler-header">
45
+ <h4 class="lite-scheduler-title">{title}</h4>
46
+ <span class="lite-scheduler-count">{jobs.length} 项定时作业</span>
47
+ </header>
48
+
49
+ <div class="lite-scheduler-table-wrap">
50
+ <table class="lite-scheduler-table">
51
+ <thead>
52
+ <tr>
53
+ <th>任务名称</th>
54
+ <th>Cron 调度表达式</th>
55
+ <th>状态</th>
56
+ <th>上次执行</th>
57
+ <th>下次预定</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+ {#each jobs as j (j.id)}
62
+ {@const st = getStatusStyle(j.status)}
63
+ <tr>
64
+ <td class="lite-job-name">{j.name}</td>
65
+ <td><code class="lite-cron-exp">{j.cronExpression}</code></td>
66
+ <td>
67
+ <span class="lite-job-status" style="color: {st.color}; background: {st.bg};">
68
+ {st.label}
69
+ </span>
70
+ </td>
71
+ <td class="lite-time-text">{j.lastRunAt ?? '—'}</td>
72
+ <td class="lite-time-text">{j.nextRunAt ?? '—'}</td>
73
+ </tr>
74
+ {/each}
75
+ </tbody>
76
+ </table>
77
+ </div>
78
+ </div>
79
+
80
+ <style>
81
+ .lite-scheduler-matrix {
82
+ border: 1px solid #e5e6eb;
83
+ border-radius: 6px;
84
+ background: #ffffff;
85
+ font-size: 12px;
86
+ overflow: hidden;
87
+ }
88
+ .lite-scheduler-header {
89
+ display: flex;
90
+ justify-content: space-between;
91
+ align-items: center;
92
+ padding: 10px 14px;
93
+ background: #f7f8fa;
94
+ border-bottom: 1px solid #e5e6eb;
95
+ }
96
+ .lite-scheduler-title { margin: 0; font-size: 13px; font-weight: 600; color: #1d2129; }
97
+ .lite-scheduler-count { font-size: 11px; color: #86909c; }
98
+ .lite-scheduler-table-wrap { overflow-x: auto; }
99
+ .lite-scheduler-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 11px; }
100
+ .lite-scheduler-table th {
101
+ padding: 8px 12px;
102
+ background: #f2f3f5;
103
+ border-bottom: 1px solid #e5e6eb;
104
+ color: #4e5969;
105
+ font-weight: 600;
106
+ }
107
+ .lite-scheduler-table td {
108
+ padding: 8px 12px;
109
+ border-bottom: 1px solid #f2f3f5;
110
+ color: #1d2129;
111
+ }
112
+ .lite-job-name { font-weight: 600; }
113
+ .lite-cron-exp { font-family: monospace; font-size: 11px; background: #f2f3f5; padding: 2px 4px; border-radius: 3px; color: #165dff; }
114
+ .lite-job-status { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 3px; display: inline-block; }
115
+ .lite-time-text { font-family: monospace; color: #4e5969; font-size: 10px; }
116
+ </style>
@@ -0,0 +1,16 @@
1
+ interface Job {
2
+ id: string;
3
+ name: string;
4
+ cronExpression: string;
5
+ status: 'running' | 'idle' | 'disabled' | 'failed';
6
+ lastRunAt?: string;
7
+ nextRunAt?: string;
8
+ }
9
+ interface Props {
10
+ title?: string;
11
+ jobs?: Job[];
12
+ class?: string;
13
+ }
14
+ declare const LiteScheduledJobManager: import("svelte").Component<Props, {}, "">;
15
+ type LiteScheduledJobManager = ReturnType<typeof LiteScheduledJobManager>;
16
+ export default LiteScheduledJobManager;
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ text?: string;
4
+ subtext?: string;
5
+ class?: string;
6
+ }
7
+
8
+ let {
9
+ text = '机密数据 · 严禁拍照',
10
+ subtext = '保密审计中 · 泄漏追责',
11
+ class: className = '',
12
+ }: Props = $props();
13
+ </script>
14
+
15
+ <div
16
+ class="lite-watermark-overlay {className}"
17
+ data-svadmin-component="LiteScreenAntiLeakGuard"
18
+ role="region"
19
+ aria-label="Security Watermark"
20
+ >
21
+ <div class="lite-watermark-grid">
22
+ {#each Array(12) as _, idx (idx)}
23
+ <div class="lite-watermark-item">
24
+ <span class="lite-wm-text">{text}</span>
25
+ {#if subtext}
26
+ <span class="lite-wm-sub">{subtext}</span>
27
+ {/if}
28
+ </div>
29
+ {/each}
30
+ </div>
31
+ </div>
32
+
33
+ <style>
34
+ .lite-watermark-overlay {
35
+ position: relative;
36
+ padding: 16px;
37
+ background: #f7f8fa;
38
+ border: 1px dashed #c9cdd4;
39
+ border-radius: 6px;
40
+ overflow: hidden;
41
+ }
42
+ .lite-watermark-grid {
43
+ display: block;
44
+ text-align: center;
45
+ }
46
+ .lite-watermark-item {
47
+ display: inline-block;
48
+ margin: 12px 18px;
49
+ transform: rotate(-15deg);
50
+ color: #86909c;
51
+ font-family: monospace;
52
+ opacity: 0.6;
53
+ }
54
+ .lite-wm-text { display: block; font-size: 11px; font-weight: bold; }
55
+ .lite-wm-sub { display: block; font-size: 9px; margin-top: 2px; }
56
+ </style>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ text?: string;
3
+ subtext?: string;
4
+ class?: string;
5
+ }
6
+ declare const LiteScreenAntiLeakGuard: import("svelte").Component<Props, {}, "">;
7
+ type LiteScreenAntiLeakGuard = ReturnType<typeof LiteScreenAntiLeakGuard>;
8
+ export default LiteScreenAntiLeakGuard;
@@ -0,0 +1,101 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ title?: string;
4
+ fingerprint?: string;
5
+ operator?: string;
6
+ rowCount?: number;
7
+ format?: string;
8
+ generatedAt?: string;
9
+ class?: string;
10
+ }
11
+
12
+ let {
13
+ title = '安全数据导出与审计水印溯源',
14
+ fingerprint = 'FP-202611-9842A',
15
+ operator = 'admin@example.com',
16
+ rowCount = 1250,
17
+ format = 'CSV (UTF-8 with BOM)',
18
+ generatedAt = '2026-11-12 06:00:00',
19
+ class: className = '',
20
+ }: Props = $props();
21
+ </script>
22
+
23
+ <div
24
+ class="lite-secure-exporter {className}"
25
+ data-svadmin-component="LiteSecureDataExporter"
26
+ role="region"
27
+ aria-label="Secure Data Exporter"
28
+ >
29
+ <header class="lite-exporter-header">
30
+ <div class="lite-exporter-title-wrap">
31
+ <span class="lite-exporter-shield">🛡️ 安全审计</span>
32
+ <h4 class="lite-exporter-title">{title}</h4>
33
+ </div>
34
+ <span class="lite-fp-tag">指纹: {fingerprint}</span>
35
+ </header>
36
+
37
+ <div class="lite-exporter-body">
38
+ <div class="lite-meta-grid">
39
+ <div class="lite-meta-item">
40
+ <span class="lite-meta-label">导出操作员</span>
41
+ <span class="lite-meta-val">{operator}</span>
42
+ </div>
43
+ <div class="lite-meta-item">
44
+ <span class="lite-meta-label">记录行数</span>
45
+ <span class="lite-meta-val">{rowCount} 条</span>
46
+ </div>
47
+ <div class="lite-meta-item">
48
+ <span class="lite-meta-label">文件格式</span>
49
+ <span class="lite-meta-val">{format}</span>
50
+ </div>
51
+ <div class="lite-meta-item">
52
+ <span class="lite-meta-label">生成时间</span>
53
+ <span class="lite-meta-val font-mono">{generatedAt}</span>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="lite-exporter-watermark-note">
58
+ 导出的文件头部已内嵌数字隐形防伪指纹,严禁向外部未经授权机构分发传输。
59
+ </div>
60
+ </div>
61
+ </div>
62
+
63
+ <style>
64
+ .lite-secure-exporter {
65
+ border: 1px solid #e5e6eb;
66
+ border-radius: 6px;
67
+ background: #ffffff;
68
+ font-size: 12px;
69
+ overflow: hidden;
70
+ }
71
+ .lite-exporter-header {
72
+ display: flex;
73
+ justify-content: space-between;
74
+ align-items: center;
75
+ padding: 10px 14px;
76
+ background: #f7f8fa;
77
+ border-bottom: 1px solid #e5e6eb;
78
+ }
79
+ .lite-exporter-title-wrap { display: flex; align-items: center; }
80
+ .lite-exporter-title-wrap > * + * { margin-left: 8px; }
81
+ .lite-exporter-shield { font-size: 11px; font-weight: 600; color: #00b42a; }
82
+ .lite-exporter-title { margin: 0; font-size: 13px; font-weight: 600; color: #1d2129; }
83
+ .lite-fp-tag { font-size: 10px; font-family: monospace; color: #165dff; background: #e8f3ff; padding: 2px 6px; border-radius: 3px; }
84
+ .lite-exporter-body { padding: 12px 14px; }
85
+ .lite-meta-grid { margin-bottom: 10px; overflow: hidden; }
86
+ .lite-meta-grid .lite-meta-item { float: left; width: 50%; box-sizing: border-box; margin-bottom: 10px; padding-right: 5px; }
87
+ .lite-meta-grid .lite-meta-item:nth-child(2n) { padding-right: 0; padding-left: 5px; }
88
+ .lite-meta-item { display: flex; flex-direction: column; }
89
+ .lite-meta-item > * + * { margin-top: 2px; }
90
+ .lite-meta-label { font-size: 10px; color: #86909c; }
91
+ .lite-meta-val { font-size: 11px; font-weight: 500; color: #1d2129; }
92
+ .font-mono { font-family: monospace; }
93
+ .lite-exporter-watermark-note {
94
+ background: #f2f3f5;
95
+ padding: 8px 10px;
96
+ border-radius: 4px;
97
+ font-size: 10px;
98
+ color: #4e5969;
99
+ border-left: 3px solid #165dff;
100
+ }
101
+ </style>
@@ -0,0 +1,12 @@
1
+ interface Props {
2
+ title?: string;
3
+ fingerprint?: string;
4
+ operator?: string;
5
+ rowCount?: number;
6
+ format?: string;
7
+ generatedAt?: string;
8
+ class?: string;
9
+ }
10
+ declare const LiteSecureDataExporter: import("svelte").Component<Props, {}, "">;
11
+ type LiteSecureDataExporter = ReturnType<typeof LiteSecureDataExporter>;
12
+ export default LiteSecureDataExporter;