xto-fronted 0.6.3 → 0.8.0

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 (33) hide show
  1. package/dist/{index-DydABgae.js → index-D73_-C9m.js} +13 -13
  2. package/dist/index-DBjV4kzh.js +249 -0
  3. package/dist/{index-IOKG7Gwo.js → index-DJ1oHe08.js} +973 -918
  4. package/dist/{index-BKO6Hzba.js → index-D_TGEwDg.js} +192 -140
  5. package/dist/{index-BZSZ3bx2.js → index-DauAWAHG.js} +28 -28
  6. package/dist/index.js +1 -1
  7. package/dist/style.css +1 -1
  8. package/package.json +9 -9
  9. package/src/App.vue +4 -4
  10. package/src/assets/styles/_dark.scss +176 -176
  11. package/src/assets/styles/_reset.scss +8 -8
  12. package/src/assets/styles/_root.scss +131 -125
  13. package/src/assets/styles/_variables.scss +17 -17
  14. package/src/assets/styles/index.scss +39 -39
  15. package/src/components/Layout/Footer.vue +1 -1
  16. package/src/components/Layout/Header.vue +59 -60
  17. package/src/components/Layout/MixTopMenu.vue +42 -43
  18. package/src/components/Layout/Sidebar.vue +8 -8
  19. package/src/components/Layout/SidebarMenuItem.vue +2 -2
  20. package/src/components/Layout/Tabs.vue +6 -6
  21. package/src/components/Layout/TopMenu.vue +42 -43
  22. package/src/components/Layout/index.vue +4 -4
  23. package/src/stores/app.ts +26 -2
  24. package/src/style.scss +2 -2
  25. package/src/views/dashboard/index.vue +125 -104
  26. package/src/views/error/403.vue +13 -13
  27. package/src/views/error/404.vue +14 -14
  28. package/src/views/login/index.vue +21 -54
  29. package/src/views/system/menu/index.vue +30 -30
  30. package/src/views/system/role/index.vue +20 -20
  31. package/src/views/system/user/index.vue +23 -23
  32. package/vite.config.ts +4 -1
  33. package/dist/index-BXHwCe22.js +0 -189
@@ -142,8 +142,6 @@ const handleLogin = async () => {
142
142
  <!-- 背景装饰 -->
143
143
  <div class="brand-bg">
144
144
  <div class="bg-grid"></div>
145
- <div class="bg-glow"></div>
146
- <div class="bg-pattern"></div>
147
145
  </div>
148
146
  </div>
149
147
 
@@ -252,17 +250,17 @@ const handleLogin = async () => {
252
250
  width: 100%;
253
251
  min-height: 100vh;
254
252
  display: flex;
255
- background: var(--xto-bg-color-page, #F5F7FA);
253
+ background: var(--xto-bg-color-page, #F7F8FA);
256
254
  }
257
255
 
258
- // 左侧品牌区域(淡紫蓝渐变网格背景,纯 CSS 无图片资源)
256
+ // 左侧品牌区域(企业级纯色品牌底 + 细网格纹理)
259
257
  .login-brand {
260
258
  flex: 1;
261
259
  position: relative;
262
260
  display: flex;
263
261
  align-items: center;
264
262
  justify-content: center;
265
- background: linear-gradient(135deg, #172E6E 0%, #1E3A8A 45%, #1D4ED8 100%);
263
+ background: var(--xto-color-primary-dark-1, #4338CA);
266
264
  overflow: hidden;
267
265
 
268
266
  @media (max-width: 992px) {
@@ -323,14 +321,12 @@ const handleLogin = async () => {
323
321
  align-items: flex-start;
324
322
  gap: 16px;
325
323
  padding: 16px;
326
- background: rgba(255, 255, 255, 0.1);
327
- border-radius: var(--xto-border-radius-large, 8px);
328
- backdrop-filter: blur(10px);
329
- transition: all 0.3s ease;
324
+ background: rgba(255, 255, 255, 0.08);
325
+ border-radius: var(--xto-border-radius-large, 12px);
326
+ transition: background-color 0.2s ease;
330
327
 
331
328
  &:hover {
332
- background: rgba(255, 255, 255, 0.15);
333
- transform: translateX(8px);
329
+ background: rgba(255, 255, 255, 0.14);
334
330
  }
335
331
  }
336
332
 
@@ -408,33 +404,9 @@ const handleLogin = async () => {
408
404
  linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
409
405
  background-size: 28px 28px, 56px 56px, 56px 56px;
410
406
  }
411
-
412
- .bg-glow {
413
- position: absolute;
414
- top: -20%;
415
- right: -10%;
416
- width: 60%;
417
- height: 60%;
418
- background: radial-gradient(circle, rgba(147, 197, 253, 0.35) 0%, transparent 70%);
419
- animation: glow-pulse 8s ease-in-out infinite;
420
- }
421
-
422
- .bg-pattern {
423
- position: absolute;
424
- bottom: -10%;
425
- left: -10%;
426
- width: 40%;
427
- height: 40%;
428
- background: radial-gradient(circle, rgba(196, 181, 253, 0.28) 0%, transparent 60%);
429
- }
430
407
  }
431
408
  }
432
409
 
433
- @keyframes glow-pulse {
434
- 0%, 100% { opacity: 0.6; transform: scale(1); }
435
- 50% { opacity: 1; transform: scale(1.1); }
436
- }
437
-
438
410
  // 右侧登录区域
439
411
  .login-form-section {
440
412
  width: 500px;
@@ -462,13 +434,13 @@ const handleLogin = async () => {
462
434
  h2 {
463
435
  font-size: 28px;
464
436
  font-weight: 600;
465
- color: var(--xto-color-text-primary, #0F172A);
437
+ color: var(--xto-color-text-primary, #1F2329);
466
438
  margin-bottom: 8px;
467
439
  }
468
440
 
469
441
  p {
470
442
  font-size: 14px;
471
- color: var(--xto-color-text-secondary, #64748B);
443
+ color: var(--xto-color-text-secondary, #86909C);
472
444
  }
473
445
  }
474
446
 
@@ -481,7 +453,7 @@ const handleLogin = async () => {
481
453
  display: block;
482
454
  font-size: 14px;
483
455
  font-weight: 500;
484
- color: var(--xto-color-text-regular, #334155);
456
+ color: var(--xto-color-text-regular, #4E5566);
485
457
  margin-bottom: 8px;
486
458
  }
487
459
 
@@ -495,7 +467,7 @@ const handleLogin = async () => {
495
467
 
496
468
  :deep(.x-input__prefix) {
497
469
  margin-right: 12px;
498
- color: var(--xto-color-text-placeholder, #94A3B8);
470
+ color: var(--xto-color-text-placeholder, #A9AEB8);
499
471
  }
500
472
  }
501
473
 
@@ -507,12 +479,12 @@ const handleLogin = async () => {
507
479
 
508
480
  .forgot-link {
509
481
  font-size: 14px;
510
- color: var(--xto-color-primary, #1D4ED8);
482
+ color: var(--xto-color-primary, #4F46E5);
511
483
  text-decoration: none;
512
484
  transition: color 0.2s;
513
485
 
514
486
  &:hover {
515
- color: var(--xto-color-primary-dark-1, #1E40AF);
487
+ color: var(--xto-color-primary-dark-1, #4338CA);
516
488
  }
517
489
  }
518
490
  }
@@ -527,24 +499,19 @@ const handleLogin = async () => {
527
499
  transition: all 0.3s ease;
528
500
 
529
501
  &:hover:not(:disabled) {
530
- transform: translateY(-2px);
531
- box-shadow: 0 4px 12px rgba(29, 78, 216, 0.35);
532
- }
533
-
534
- &:active:not(:disabled) {
535
- transform: translateY(0);
502
+ background-color: var(--xto-color-primary-light-1, #6158E7);
536
503
  }
537
504
  }
538
505
 
539
506
  .form-footer {
540
507
  margin-top: 32px;
541
508
  padding-top: 24px;
542
- border-top: 1px solid var(--xto-border-color-lighter, #EDF2F7);
509
+ border-top: 1px solid var(--xto-border-color-lighter, #EDEEF1);
543
510
  text-align: center;
544
511
 
545
512
  p {
546
513
  font-size: 13px;
547
- color: var(--xto-color-text-placeholder, #94A3B8);
514
+ color: var(--xto-color-text-placeholder, #A9AEB8);
548
515
  margin-bottom: 16px;
549
516
  }
550
517
 
@@ -560,12 +527,12 @@ const handleLogin = async () => {
560
527
  display: flex;
561
528
  align-items: center;
562
529
  justify-content: center;
563
- background: var(--xto-fill-color, #F1F5F9);
530
+ background: var(--xto-fill-color, #F2F3F5);
564
531
  border: none;
565
532
  border-radius: 50%;
566
533
  cursor: pointer;
567
534
  transition: all 0.2s ease;
568
- color: var(--xto-color-text-secondary, #64748B);
535
+ color: var(--xto-color-text-secondary, #86909C);
569
536
 
570
537
  svg {
571
538
  width: 20px;
@@ -573,8 +540,8 @@ const handleLogin = async () => {
573
540
  }
574
541
 
575
542
  &:hover {
576
- background: var(--xto-color-primary-light-8, #DBEAFE);
577
- color: var(--xto-color-primary, #1D4ED8);
543
+ background: var(--xto-color-primary-light-8, #DCDAFC);
544
+ color: var(--xto-color-primary, #4F46E5);
578
545
  transform: translateY(-2px);
579
546
  }
580
547
  }
@@ -586,7 +553,7 @@ const handleLogin = async () => {
586
553
 
587
554
  p {
588
555
  font-size: 12px;
589
- color: var(--xto-color-text-placeholder, #94A3B8);
556
+ color: var(--xto-color-text-placeholder, #A9AEB8);
590
557
  }
591
558
  }
592
559
  }
@@ -191,14 +191,14 @@ const handleSubmit = async () => {
191
191
  // 菜单图标
192
192
  const getMenuIcon = (icon?: string) => {
193
193
  const iconMap: Record<string, string> = {
194
- dashboard: '📊',
195
- system: '⚙️',
196
- user: '👤',
197
- role: '👥',
198
- menu: '📋',
199
- setting: '🔧'
194
+ dashboard: 'M4 5h16v11H4zM9 20h6M12 16v4',
195
+ system: 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm7.4-3c0-.4 0-.8-.1-1.2l2-1.6-2-3.4-2.4 1a7.6 7.6 0 0 0-2-1.2L14.5 3h-5l-.4 2.6a7.6 7.6 0 0 0-2 1.2l-2.4-1-2 3.4 2 1.6a7.4 7.4 0 0 0 0 2.4l-2 1.6 2 3.4 2.4-1a7.6 7.6 0 0 0 2 1.2l.4 2.6h5l.4-2.6a7.6 7.6 0 0 0 2-1.2l2.4 1 2-3.4-2-1.6c.1-.4.1-.8.1-1.2Z',
196
+ user: 'M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm-7 8a7 7 0 0 1 14 0',
197
+ role: 'M8 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm8 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2 19a6 6 0 0 1 12 0m2-6a6 6 0 0 1 6 6',
198
+ menu: 'M4 6h16M4 12h16M4 18h10',
199
+ setting: 'M4 6h16M4 12h16M4 18h16'
200
200
  }
201
- return iconMap[icon || ''] || '📄'
201
+ return iconMap[icon || ''] || 'M4 6h16M4 12h16M4 18h10'
202
202
  }
203
203
 
204
204
  // 获取类型标签类型
@@ -275,9 +275,9 @@ onMounted(() => {
275
275
  <svg viewBox="0 0 64 41" fill="none">
276
276
  <g transform="translate(0 1)">
277
277
  <ellipse fill="#f5f5f5" cx="32" cy="33" rx="32" ry="7"/>
278
- <g stroke="var(--xto-color-text-placeholder, #9CA3AF)" stroke-width="2">
278
+ <g stroke="var(--xto-color-text-placeholder, #A9AEB8)" stroke-width="2">
279
279
  <path d="M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"/>
280
- <path d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35H11.95C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z" fill="var(--xto-fill-color, #F3F4F6)"/>
280
+ <path d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35H11.95C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z" fill="var(--xto-fill-color, #F2F3F5)"/>
281
281
  </g>
282
282
  </g>
283
283
  </svg>
@@ -289,12 +289,12 @@ onMounted(() => {
289
289
  <tr class="data-row tree-row--level-0">
290
290
  <td class="col-name">
291
291
  <div class="menu-info">
292
- <span class="menu-icon-wrapper">{{ getMenuIcon(menu.icon) }}</span>
292
+ <span class="menu-icon-wrapper"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path :d="getMenuIcon(menu.icon)" /></svg></span>
293
293
  <span class="menu-title" @click="handleEdit(menu)">{{ menu.title }}</span>
294
294
  </div>
295
295
  </td>
296
296
  <td class="col-icon">
297
- <span class="icon-text">{{ getMenuIcon(menu.icon) }}</span>
297
+ <span class="icon-text"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path :d="getMenuIcon(menu.icon)" /></svg></span>
298
298
  </td>
299
299
  <td class="col-path">
300
300
  <code class="path-code">{{ menu.path }}</code>
@@ -341,12 +341,12 @@ onMounted(() => {
341
341
  <div class="menu-info">
342
342
  <span class="tree-indent"></span>
343
343
  <span class="tree-line"></span>
344
- <span class="menu-icon-wrapper">{{ getMenuIcon(child.icon) }}</span>
344
+ <span class="menu-icon-wrapper"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path :d="getMenuIcon(child.icon)" /></svg></span>
345
345
  <span class="menu-title" @click="handleEdit(child)">{{ child.title }}</span>
346
346
  </div>
347
347
  </td>
348
348
  <td class="col-icon">
349
- <span class="icon-text">{{ getMenuIcon(child.icon) }}</span>
349
+ <span class="icon-text"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path :d="getMenuIcon(child.icon)" /></svg></span>
350
350
  </td>
351
351
  <td class="col-path">
352
352
  <code class="path-code">{{ child.path }}</code>
@@ -446,7 +446,7 @@ onMounted(() => {
446
446
  <style lang="scss" scoped>
447
447
  .menu-page {
448
448
  padding: 24px;
449
- background: var(--xto-bg-color-page, #F9FAFB);
449
+ background: var(--xto-bg-color-page, #F7F8FA);
450
450
  min-height: 100%;
451
451
  }
452
452
 
@@ -463,7 +463,7 @@ onMounted(() => {
463
463
  justify-content: space-between;
464
464
  align-items: center;
465
465
  padding: 16px 24px;
466
- border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
466
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F2F3F5);
467
467
 
468
468
  .toolbar-left {
469
469
  display: flex;
@@ -472,7 +472,7 @@ onMounted(() => {
472
472
 
473
473
  .table-count {
474
474
  font-size: 14px;
475
- color: var(--xto-color-text-secondary, #6B7280);
475
+ color: var(--xto-color-text-secondary, #86909C);
476
476
  }
477
477
  }
478
478
 
@@ -488,14 +488,14 @@ onMounted(() => {
488
488
  th, td {
489
489
  padding: 14px 16px;
490
490
  text-align: left;
491
- border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
491
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F2F3F5);
492
492
  }
493
493
 
494
494
  th {
495
495
  font-size: 14px;
496
496
  font-weight: 500;
497
- color: var(--xto-color-text-secondary, #6B7280);
498
- background: var(--xto-fill-color-light, #F9FAFB);
497
+ color: var(--xto-color-text-secondary, #86909C);
498
+ background: var(--xto-fill-color-light, #F7F8FA);
499
499
  white-space: nowrap;
500
500
  }
501
501
 
@@ -503,7 +503,7 @@ onMounted(() => {
503
503
  transition: background-color 0.2s;
504
504
 
505
505
  &:hover {
506
- background: var(--xto-color-primary-light-6, #C7D2FE);
506
+ background: var(--xto-color-primary-light-6, #CAC7F9);
507
507
  }
508
508
  }
509
509
 
@@ -522,7 +522,7 @@ onMounted(() => {
522
522
  flex-direction: column;
523
523
  align-items: center;
524
524
  gap: 16px;
525
- color: var(--xto-color-text-placeholder, #9CA3AF);
525
+ color: var(--xto-color-text-placeholder, #A9AEB8);
526
526
 
527
527
  svg {
528
528
  width: 64px;
@@ -533,7 +533,7 @@ onMounted(() => {
533
533
  .loading-spinner {
534
534
  width: 32px;
535
535
  height: 32px;
536
- border: 3px solid var(--xto-border-color-lighter, #F3F4F6);
536
+ border: 3px solid var(--xto-border-color-lighter, #F2F3F5);
537
537
  border-top-color: var(--xto-color-primary, #4F46E5);
538
538
  border-radius: 50%;
539
539
  animation: spin 0.8s linear infinite;
@@ -561,7 +561,7 @@ onMounted(() => {
561
561
  display: inline-block;
562
562
  width: 16px;
563
563
  height: 1px;
564
- background: var(--xto-border-color-light, #E5E7EB);
564
+ background: var(--xto-border-color-light, #E5E6EB);
565
565
  margin-right: 8px;
566
566
  vertical-align: middle;
567
567
  }
@@ -583,7 +583,7 @@ onMounted(() => {
583
583
  display: flex;
584
584
  align-items: center;
585
585
  justify-content: center;
586
- background: var(--xto-fill-color-light, #F9FAFB);
586
+ background: var(--xto-fill-color-light, #F7F8FA);
587
587
  border-radius: var(--xto-border-radius-base, 6px);
588
588
  font-size: 14px;
589
589
  }
@@ -591,7 +591,7 @@ onMounted(() => {
591
591
  .menu-title {
592
592
  font-size: 14px;
593
593
  font-weight: 500;
594
- color: var(--xto-color-text-primary, #1F2937);
594
+ color: var(--xto-color-text-primary, #1F2329);
595
595
  cursor: pointer;
596
596
  transition: color 0.2s;
597
597
 
@@ -616,9 +616,9 @@ onMounted(() => {
616
616
  font-family: 'SF Mono', Monaco, Consolas, monospace;
617
617
  font-size: 12px;
618
618
  padding: 4px 8px;
619
- background: var(--xto-fill-color-light, #F9FAFB);
619
+ background: var(--xto-fill-color-light, #F7F8FA);
620
620
  border-radius: var(--xto-border-radius-small, 4px);
621
- color: var(--xto-color-text-secondary, #6B7280);
621
+ color: var(--xto-color-text-secondary, #86909C);
622
622
  }
623
623
 
624
624
  .col-type {
@@ -636,10 +636,10 @@ onMounted(() => {
636
636
  min-width: 24px;
637
637
  height: 24px;
638
638
  padding: 0 8px;
639
- background: var(--xto-fill-color, #F3F4F6);
639
+ background: var(--xto-fill-color, #F2F3F5);
640
640
  border-radius: 12px;
641
641
  font-size: 12px;
642
- color: var(--xto-color-text-secondary, #6B7280);
642
+ color: var(--xto-color-text-secondary, #86909C);
643
643
  }
644
644
 
645
645
  .col-status {
@@ -684,7 +684,7 @@ onMounted(() => {
684
684
 
685
685
  .status-label {
686
686
  font-size: 14px;
687
- color: var(--xto-color-text-secondary, #6B7280);
687
+ color: var(--xto-color-text-secondary, #86909C);
688
688
  }
689
689
  }
690
690
  </style>
@@ -237,9 +237,9 @@ onMounted(() => {
237
237
  <svg viewBox="0 0 64 41" fill="none">
238
238
  <g transform="translate(0 1)">
239
239
  <ellipse fill="#f5f5f5" cx="32" cy="33" rx="32" ry="7"/>
240
- <g stroke="var(--xto-color-text-placeholder, #9CA3AF)" stroke-width="2">
240
+ <g stroke="var(--xto-color-text-placeholder, #A9AEB8)" stroke-width="2">
241
241
  <path d="M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"/>
242
- <path d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35H11.95C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z" fill="var(--xto-fill-color, #F3F4F6)"/>
242
+ <path d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35H11.95C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z" fill="var(--xto-fill-color, #F2F3F5)"/>
243
243
  </g>
244
244
  </g>
245
245
  </svg>
@@ -351,7 +351,7 @@ onMounted(() => {
351
351
  <style lang="scss" scoped>
352
352
  .role-page {
353
353
  padding: 24px;
354
- background: var(--xto-bg-color-page, #F9FAFB);
354
+ background: var(--xto-bg-color-page, #F7F8FA);
355
355
  min-height: 100%;
356
356
  }
357
357
 
@@ -392,7 +392,7 @@ onMounted(() => {
392
392
  justify-content: space-between;
393
393
  align-items: center;
394
394
  padding: 16px 24px;
395
- border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
395
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F2F3F5);
396
396
 
397
397
  .toolbar-left {
398
398
  display: flex;
@@ -401,7 +401,7 @@ onMounted(() => {
401
401
 
402
402
  .table-count {
403
403
  font-size: 14px;
404
- color: var(--xto-color-text-secondary, #6B7280);
404
+ color: var(--xto-color-text-secondary, #86909C);
405
405
  }
406
406
  }
407
407
 
@@ -417,14 +417,14 @@ onMounted(() => {
417
417
  th, td {
418
418
  padding: 14px 16px;
419
419
  text-align: left;
420
- border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
420
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F2F3F5);
421
421
  }
422
422
 
423
423
  th {
424
424
  font-size: 14px;
425
425
  font-weight: 500;
426
- color: var(--xto-color-text-secondary, #6B7280);
427
- background: var(--xto-fill-color-light, #F9FAFB);
426
+ color: var(--xto-color-text-secondary, #86909C);
427
+ background: var(--xto-fill-color-light, #F7F8FA);
428
428
  white-space: nowrap;
429
429
  }
430
430
 
@@ -432,7 +432,7 @@ onMounted(() => {
432
432
  transition: background-color 0.2s;
433
433
 
434
434
  &:hover {
435
- background: var(--xto-color-primary-light-6, #C7D2FE);
435
+ background: var(--xto-color-primary-light-6, #CAC7F9);
436
436
  }
437
437
  }
438
438
 
@@ -451,7 +451,7 @@ onMounted(() => {
451
451
  flex-direction: column;
452
452
  align-items: center;
453
453
  gap: 16px;
454
- color: var(--xto-color-text-placeholder, #9CA3AF);
454
+ color: var(--xto-color-text-placeholder, #A9AEB8);
455
455
 
456
456
  svg {
457
457
  width: 64px;
@@ -462,7 +462,7 @@ onMounted(() => {
462
462
  .loading-spinner {
463
463
  width: 32px;
464
464
  height: 32px;
465
- border: 3px solid var(--xto-border-color-lighter, #F3F4F6);
465
+ border: 3px solid var(--xto-border-color-lighter, #F2F3F5);
466
466
  border-top-color: var(--xto-color-primary, #4F46E5);
467
467
  border-radius: 50%;
468
468
  animation: spin 0.8s linear infinite;
@@ -482,11 +482,11 @@ onMounted(() => {
482
482
  display: inline-block;
483
483
  min-width: 32px;
484
484
  padding: 4px 10px;
485
- background: var(--xto-fill-color, #F3F4F6);
485
+ background: var(--xto-fill-color, #F2F3F5);
486
486
  border-radius: 12px;
487
487
  font-size: 12px;
488
488
  font-weight: 500;
489
- color: var(--xto-color-text-secondary, #6B7280);
489
+ color: var(--xto-color-text-secondary, #86909C);
490
490
  text-align: center;
491
491
  }
492
492
 
@@ -497,7 +497,7 @@ onMounted(() => {
497
497
  .role-name {
498
498
  font-size: 14px;
499
499
  font-weight: 500;
500
- color: var(--xto-color-text-primary, #1F2937);
500
+ color: var(--xto-color-text-primary, #1F2329);
501
501
  }
502
502
 
503
503
  .col-code {
@@ -510,7 +510,7 @@ onMounted(() => {
510
510
 
511
511
  .desc-text {
512
512
  font-size: 14px;
513
- color: var(--xto-color-text-secondary, #6B7280);
513
+ color: var(--xto-color-text-secondary, #86909C);
514
514
  }
515
515
 
516
516
  .col-status {
@@ -525,10 +525,10 @@ onMounted(() => {
525
525
 
526
526
  .status-text {
527
527
  font-size: 13px;
528
- color: var(--xto-color-text-secondary, #6B7280);
528
+ color: var(--xto-color-text-secondary, #86909C);
529
529
 
530
530
  &.enabled {
531
- color: var(--xto-color-success, #10B981);
531
+ color: var(--xto-color-success, #2BC48A);
532
532
  }
533
533
  }
534
534
 
@@ -538,7 +538,7 @@ onMounted(() => {
538
538
 
539
539
  .time-text {
540
540
  font-size: 13px;
541
- color: var(--xto-color-text-secondary, #6B7280);
541
+ color: var(--xto-color-text-secondary, #86909C);
542
542
  }
543
543
 
544
544
  .col-actions {
@@ -562,7 +562,7 @@ onMounted(() => {
562
562
  display: flex;
563
563
  justify-content: flex-end;
564
564
  padding: 16px 24px;
565
- border-top: 1px solid var(--xto-border-color-lighter, #F3F4F6);
565
+ border-top: 1px solid var(--xto-border-color-lighter, #F2F3F5);
566
566
  }
567
567
 
568
568
  // 弹窗表单
@@ -577,7 +577,7 @@ onMounted(() => {
577
577
 
578
578
  .status-label {
579
579
  font-size: 14px;
580
- color: var(--xto-color-text-secondary, #6B7280);
580
+ color: var(--xto-color-text-secondary, #86909C);
581
581
  }
582
582
  }
583
583
  </style>