xto-fronted 0.4.113 → 0.5.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 (114) hide show
  1. package/dist/assets/404-BYUyVmEj.js +1 -0
  2. package/dist/assets/404-CcAc5uFh.css +1 -0
  3. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  4. package/dist/assets/index-4oN1au3P.css +1 -0
  5. package/dist/assets/index-BEwGthu5.js +1 -0
  6. package/dist/assets/index-BG5gsGCY.js +1 -0
  7. package/dist/assets/index-BHABoX0X.css +1 -0
  8. package/dist/assets/index-BRR97dc6.js +1 -0
  9. package/dist/assets/index-BUqGJdah.css +1 -0
  10. package/dist/assets/index-BvN8lC5q.js +1 -0
  11. package/dist/assets/index-C6ibP7SB.css +1 -0
  12. package/dist/assets/index-CJGmoNxx.css +1 -0
  13. package/dist/assets/index-DPrbBY2e.css +1 -0
  14. package/dist/assets/index-DUV7VLAm.js +2 -0
  15. package/dist/assets/index-DcPnYH2c.js +1 -0
  16. package/dist/assets/index-DhwBftHU.css +1 -0
  17. package/dist/assets/index-oc3LDwZZ.js +1 -0
  18. package/dist/assets/index-vuy5HH8m.js +1 -0
  19. package/dist/assets/vendor-CWD9azq9.js +16 -0
  20. package/dist/assets/vue-vendor-sSbh4bdR.js +29 -0
  21. package/dist/assets/xto-base-Bv2ek7Ha.css +1 -0
  22. package/dist/assets/xto-base-kM8Cl-e6.js +1 -0
  23. package/dist/assets/xto-business-CW6DXcvI.css +1 -0
  24. package/dist/assets/xto-core-DsKtn1lm.js +1 -0
  25. package/dist/assets/xto-data-CDPTH0CA.js +1 -0
  26. package/dist/assets/xto-data-CEFTtli6.css +1 -0
  27. package/dist/assets/xto-feedback-Di1AeKNY.css +1 -0
  28. package/dist/assets/xto-feedback-Dp_1dES5.js +1 -0
  29. package/dist/assets/xto-form-Bl3jCZ4e.js +1 -0
  30. package/dist/assets/xto-form-DC11rd9L.css +1 -0
  31. package/dist/assets/xto-layout-BR7iLA0e.css +1 -0
  32. package/dist/assets/xto-navigation-Bl-kwgN_.css +1 -0
  33. package/dist/assets/xto-navigation-Brox2Ork.js +1 -0
  34. package/dist/index.html +28 -0
  35. package/package.json +18 -19
  36. package/src/App.vue +9 -9
  37. package/src/assets/styles/_dark.scss +181 -181
  38. package/src/assets/styles/_reset.scss +14 -14
  39. package/src/assets/styles/_root.scss +153 -132
  40. package/src/assets/styles/_transition.scss +10 -10
  41. package/src/assets/styles/_variables.scss +26 -25
  42. package/src/assets/styles/index.scss +62 -62
  43. package/src/components/Layout/Footer.vue +1 -1
  44. package/src/components/Layout/Header.vue +69 -69
  45. package/src/components/Layout/MixTopMenu.vue +66 -66
  46. package/src/components/Layout/Sidebar.vue +6 -6
  47. package/src/components/Layout/SidebarMenuItem.vue +3 -3
  48. package/src/components/Layout/Tabs.vue +6 -6
  49. package/src/components/Layout/TopMenu.vue +66 -66
  50. package/src/components/Layout/index.vue +7 -7
  51. package/src/stores/app.ts +4 -4
  52. package/src/style.scss +14 -14
  53. package/src/views/dashboard/index.vue +54 -54
  54. package/src/views/error/403.vue +18 -18
  55. package/src/views/error/404.vue +23 -23
  56. package/src/views/login/index.vue +20 -20
  57. package/src/views/system/menu/index.vue +26 -26
  58. package/src/views/system/role/index.vue +27 -27
  59. package/src/views/system/user/index.vue +30 -30
  60. package/dist/App.vue.d.ts +0 -2
  61. package/dist/api/auth.d.ts +0 -8
  62. package/dist/api/index.d.ts +0 -6
  63. package/dist/api/index.js +0 -26
  64. package/dist/api/system.d.ts +0 -16
  65. package/dist/api/user.d.ts +0 -13
  66. package/dist/api.d.ts +0 -2
  67. package/dist/components/Layout/Footer.vue.d.ts +0 -2
  68. package/dist/components/Layout/Header.vue.d.ts +0 -5
  69. package/dist/components/Layout/MixTopMenu.vue.d.ts +0 -10
  70. package/dist/components/Layout/Sidebar.vue.d.ts +0 -13
  71. package/dist/components/Layout/SidebarMenuItem.vue.d.ts +0 -5
  72. package/dist/components/Layout/Tabs.vue.d.ts +0 -2
  73. package/dist/components/Layout/TopMenu.vue.d.ts +0 -10
  74. package/dist/components/Layout/index.vue.d.ts +0 -7
  75. package/dist/composables/useApp.d.ts +0 -30
  76. package/dist/composables/useAuth.d.ts +0 -6
  77. package/dist/composables/useForm.d.ts +0 -20
  78. package/dist/composables/useI18n.d.ts +0 -30
  79. package/dist/composables/useTable.d.ts +0 -29
  80. package/dist/directives/permission.d.ts +0 -4
  81. package/dist/enums/index.d.ts +0 -32
  82. package/dist/index-11ZvkUE8.js +0 -641
  83. package/dist/index-BVEs9eIP.js +0 -3171
  84. package/dist/index-BuVnk-Ka.js +0 -189
  85. package/dist/index-CPUyTvNq.js +0 -479
  86. package/dist/index-CaIet-zn.js +0 -515
  87. package/dist/index.d.ts +0 -63
  88. package/dist/index.js +0 -99
  89. package/dist/main.d.ts +0 -0
  90. package/dist/router/dynamicRoutes.d.ts +0 -30
  91. package/dist/router/guards.d.ts +0 -17
  92. package/dist/router/index.d.ts +0 -6
  93. package/dist/router/layoutRoute.d.ts +0 -23
  94. package/dist/router/staticRoutes.d.ts +0 -2
  95. package/dist/stores/app.d.ts +0 -99
  96. package/dist/stores/auth.d.ts +0 -41
  97. package/dist/stores/index.d.ts +0 -10
  98. package/dist/stores/locale.d.ts +0 -42
  99. package/dist/stores/menu.d.ts +0 -83
  100. package/dist/stores/user.d.ts +0 -101
  101. package/dist/style.css +0 -1
  102. package/dist/user-ChcAx-5W.js +0 -1186
  103. package/dist/utils/auth.d.ts +0 -27
  104. package/dist/utils/config.d.ts +0 -51
  105. package/dist/utils/permission.d.ts +0 -17
  106. package/dist/utils/request.d.ts +0 -34
  107. package/dist/utils/storage.d.ts +0 -24
  108. package/dist/views/dashboard/index.vue.d.ts +0 -2
  109. package/dist/views/error/403.vue.d.ts +0 -2
  110. package/dist/views/error/404.vue.d.ts +0 -2
  111. package/dist/views/login/index.vue.d.ts +0 -4
  112. package/dist/views/system/menu/index.vue.d.ts +0 -4
  113. package/dist/views/system/role/index.vue.d.ts +0 -4
  114. package/dist/views/system/user/index.vue.d.ts +0 -4
@@ -252,7 +252,7 @@ const handleLogin = async () => {
252
252
  width: 100%;
253
253
  min-height: 100vh;
254
254
  display: flex;
255
- background: var(--bg-color-page);
255
+ background: var(--xto-bg-color-page, #F9FAFB);
256
256
  }
257
257
 
258
258
  // 左侧品牌区域
@@ -262,7 +262,7 @@ const handleLogin = async () => {
262
262
  display: flex;
263
263
  align-items: center;
264
264
  justify-content: center;
265
- background: linear-gradient(135deg, #002c8c 0%, #0958d9 50%, #1677ff 100%);
265
+ background: linear-gradient(135deg, #312E81 0%, #4338CA 50%, #4F46E5 100%);
266
266
  overflow: hidden;
267
267
 
268
268
  @media (max-width: 992px) {
@@ -324,7 +324,7 @@ const handleLogin = async () => {
324
324
  gap: 16px;
325
325
  padding: 16px;
326
326
  background: rgba(255, 255, 255, 0.1);
327
- border-radius: var(--border-radius-large);
327
+ border-radius: var(--xto-border-radius-large, 8px);
328
328
  backdrop-filter: blur(10px);
329
329
  transition: all 0.3s ease;
330
330
 
@@ -341,7 +341,7 @@ const handleLogin = async () => {
341
341
  align-items: center;
342
342
  justify-content: center;
343
343
  background: rgba(255, 255, 255, 0.2);
344
- border-radius: var(--border-radius-base);
344
+ border-radius: var(--xto-border-radius-base, 6px);
345
345
  flex-shrink: 0;
346
346
 
347
347
  svg {
@@ -442,7 +442,7 @@ const handleLogin = async () => {
442
442
  flex-direction: column;
443
443
  justify-content: center;
444
444
  padding: 60px 80px;
445
- background: var(--bg-color);
445
+ background: var(--xto-bg-color, #FFFFFF);
446
446
 
447
447
  @media (max-width: 768px) {
448
448
  width: 100%;
@@ -461,13 +461,13 @@ const handleLogin = async () => {
461
461
  h2 {
462
462
  font-size: 28px;
463
463
  font-weight: 600;
464
- color: var(--color-text-primary);
464
+ color: var(--xto-color-text-primary, #1F2937);
465
465
  margin-bottom: 8px;
466
466
  }
467
467
 
468
468
  p {
469
469
  font-size: 14px;
470
- color: var(--color-text-secondary);
470
+ color: var(--xto-color-text-secondary, #6B7280);
471
471
  }
472
472
  }
473
473
 
@@ -480,7 +480,7 @@ const handleLogin = async () => {
480
480
  display: block;
481
481
  font-size: 14px;
482
482
  font-weight: 500;
483
- color: var(--color-text-regular);
483
+ color: var(--xto-color-text-regular, #4B5563);
484
484
  margin-bottom: 8px;
485
485
  }
486
486
 
@@ -494,7 +494,7 @@ const handleLogin = async () => {
494
494
 
495
495
  :deep(.x-input__prefix) {
496
496
  margin-right: 12px;
497
- color: var(--color-text-placeholder);
497
+ color: var(--xto-color-text-placeholder, #9CA3AF);
498
498
  }
499
499
  }
500
500
 
@@ -506,12 +506,12 @@ const handleLogin = async () => {
506
506
 
507
507
  .forgot-link {
508
508
  font-size: 14px;
509
- color: var(--color-primary);
509
+ color: var(--xto-color-primary, #4F46E5);
510
510
  text-decoration: none;
511
511
  transition: color 0.2s;
512
512
 
513
513
  &:hover {
514
- color: var(--color-primary-dark-1);
514
+ color: var(--xto-color-primary-dark-1, #4338CA);
515
515
  }
516
516
  }
517
517
  }
@@ -521,13 +521,13 @@ const handleLogin = async () => {
521
521
  height: 44px;
522
522
  font-size: 16px;
523
523
  font-weight: 500;
524
- border-radius: 8px;
524
+ border-radius: var(--xto-border-radius-large, 8px);
525
525
  letter-spacing: 4px;
526
526
  transition: all 0.3s ease;
527
527
 
528
528
  &:hover:not(:disabled) {
529
529
  transform: translateY(-2px);
530
- box-shadow: 0 4px 12px rgba(22, 119, 255, 0.4);
530
+ box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);
531
531
  }
532
532
 
533
533
  &:active:not(:disabled) {
@@ -538,12 +538,12 @@ const handleLogin = async () => {
538
538
  .form-footer {
539
539
  margin-top: 32px;
540
540
  padding-top: 24px;
541
- border-top: 1px solid var(--color-border-lighter);
541
+ border-top: 1px solid var(--xto-border-color-lighter, #F3F4F6);
542
542
  text-align: center;
543
543
 
544
544
  p {
545
545
  font-size: 13px;
546
- color: var(--color-text-placeholder);
546
+ color: var(--xto-color-text-placeholder, #9CA3AF);
547
547
  margin-bottom: 16px;
548
548
  }
549
549
 
@@ -559,12 +559,12 @@ const handleLogin = async () => {
559
559
  display: flex;
560
560
  align-items: center;
561
561
  justify-content: center;
562
- background: var(--color-fill);
562
+ background: var(--xto-fill-color, #F3F4F6);
563
563
  border: none;
564
564
  border-radius: 50%;
565
565
  cursor: pointer;
566
566
  transition: all 0.2s ease;
567
- color: var(--color-text-secondary);
567
+ color: var(--xto-color-text-secondary, #6B7280);
568
568
 
569
569
  svg {
570
570
  width: 20px;
@@ -572,8 +572,8 @@ const handleLogin = async () => {
572
572
  }
573
573
 
574
574
  &:hover {
575
- background: var(--color-primary-light-6);
576
- color: var(--color-primary);
575
+ background: var(--xto-color-primary-light-6, #C7D2FE);
576
+ color: var(--xto-color-primary, #4F46E5);
577
577
  transform: translateY(-2px);
578
578
  }
579
579
  }
@@ -585,7 +585,7 @@ const handleLogin = async () => {
585
585
 
586
586
  p {
587
587
  font-size: 12px;
588
- color: var(--color-text-placeholder);
588
+ color: var(--xto-color-text-placeholder, #9CA3AF);
589
589
  }
590
590
  }
591
591
  }
@@ -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(--color-text-placeholder)" stroke-width="2">
278
+ <g stroke="var(--xto-color-text-placeholder, #9CA3AF)" 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(--color-fill)"/>
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)"/>
281
281
  </g>
282
282
  </g>
283
283
  </svg>
@@ -446,15 +446,15 @@ onMounted(() => {
446
446
  <style lang="scss" scoped>
447
447
  .menu-page {
448
448
  padding: 24px;
449
- background: var(--bg-color-page);
449
+ background: var(--xto-bg-color-page, #F9FAFB);
450
450
  min-height: 100%;
451
451
  }
452
452
 
453
453
  // 表格区域
454
454
  .table-section {
455
- background: var(--bg-color);
456
- border-radius: var(--border-radius-large);
457
- box-shadow: var(--box-shadow-card);
455
+ background: var(--xto-bg-color, #FFFFFF);
456
+ border-radius: var(--xto-border-radius-large, 8px);
457
+ box-shadow: var(--xto-shadow-subtle, 0 1px 2px 0 rgba(0,0,0,0.05));
458
458
  overflow: hidden;
459
459
  }
460
460
 
@@ -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(--color-border-lighter);
466
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
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(--color-text-secondary);
475
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-border-lighter);
491
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
492
492
  }
493
493
 
494
494
  th {
495
495
  font-size: 14px;
496
496
  font-weight: 500;
497
- color: var(--color-text-secondary);
498
- background: var(--color-fill-light);
497
+ color: var(--xto-color-text-secondary, #6B7280);
498
+ background: var(--xto-fill-color-light, #F9FAFB);
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(--color-primary-light-6);
506
+ background: var(--xto-color-primary-light-6, #C7D2FE);
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(--color-text-placeholder);
525
+ color: var(--xto-color-text-placeholder, #9CA3AF);
526
526
 
527
527
  svg {
528
528
  width: 64px;
@@ -533,8 +533,8 @@ onMounted(() => {
533
533
  .loading-spinner {
534
534
  width: 32px;
535
535
  height: 32px;
536
- border: 3px solid var(--color-border-lighter);
537
- border-top-color: var(--color-primary);
536
+ border: 3px solid var(--xto-border-color-lighter, #F3F4F6);
537
+ border-top-color: var(--xto-color-primary, #4F46E5);
538
538
  border-radius: 50%;
539
539
  animation: spin 0.8s linear infinite;
540
540
  }
@@ -561,7 +561,7 @@ onMounted(() => {
561
561
  display: inline-block;
562
562
  width: 16px;
563
563
  height: 1px;
564
- background: var(--color-border-light);
564
+ background: var(--xto-border-color-light, #E5E7EB);
565
565
  margin-right: 8px;
566
566
  vertical-align: middle;
567
567
  }
@@ -583,20 +583,20 @@ onMounted(() => {
583
583
  display: flex;
584
584
  align-items: center;
585
585
  justify-content: center;
586
- background: var(--color-fill-light);
587
- border-radius: 6px;
586
+ background: var(--xto-fill-color-light, #F9FAFB);
587
+ border-radius: var(--xto-border-radius-base, 6px);
588
588
  font-size: 14px;
589
589
  }
590
590
 
591
591
  .menu-title {
592
592
  font-size: 14px;
593
593
  font-weight: 500;
594
- color: var(--color-text-primary);
594
+ color: var(--xto-color-text-primary, #1F2937);
595
595
  cursor: pointer;
596
596
  transition: color 0.2s;
597
597
 
598
598
  &:hover {
599
- color: var(--color-primary);
599
+ color: var(--xto-color-primary, #4F46E5);
600
600
  }
601
601
  }
602
602
 
@@ -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(--color-fill-light);
620
- border-radius: 4px;
621
- color: var(--color-text-secondary);
619
+ background: var(--xto-fill-color-light, #F9FAFB);
620
+ border-radius: var(--xto-border-radius-small, 4px);
621
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-fill);
639
+ background: var(--xto-fill-color, #F3F4F6);
640
640
  border-radius: 12px;
641
641
  font-size: 12px;
642
- color: var(--color-text-secondary);
642
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-text-secondary);
687
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-text-placeholder)" stroke-width="2">
240
+ <g stroke="var(--xto-color-text-placeholder, #9CA3AF)" 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(--color-fill)"/>
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)"/>
243
243
  </g>
244
244
  </g>
245
245
  </svg>
@@ -351,17 +351,17 @@ onMounted(() => {
351
351
  <style lang="scss" scoped>
352
352
  .role-page {
353
353
  padding: 24px;
354
- background: var(--bg-color-page);
354
+ background: var(--xto-bg-color-page, #F9FAFB);
355
355
  min-height: 100%;
356
356
  }
357
357
 
358
358
  // 搜索区域
359
359
  .search-section {
360
- background: var(--bg-color);
361
- border-radius: var(--border-radius-large);
360
+ background: var(--xto-bg-color, #FFFFFF);
361
+ border-radius: var(--xto-border-radius-large, 8px);
362
362
  padding: 20px 24px;
363
363
  margin-bottom: 16px;
364
- box-shadow: var(--box-shadow-card);
364
+ box-shadow: var(--xto-shadow-subtle, 0 1px 2px 0 rgba(0,0,0,0.05));
365
365
 
366
366
  .search-form {
367
367
  display: flex;
@@ -381,9 +381,9 @@ onMounted(() => {
381
381
 
382
382
  // 表格区域
383
383
  .table-section {
384
- background: var(--bg-color);
385
- border-radius: var(--border-radius-large);
386
- box-shadow: var(--box-shadow-card);
384
+ background: var(--xto-bg-color, #FFFFFF);
385
+ border-radius: var(--xto-border-radius-large, 8px);
386
+ box-shadow: var(--xto-shadow-subtle, 0 1px 2px 0 rgba(0,0,0,0.05));
387
387
  overflow: hidden;
388
388
  }
389
389
 
@@ -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(--color-border-lighter);
395
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
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(--color-text-secondary);
404
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-border-lighter);
420
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
421
421
  }
422
422
 
423
423
  th {
424
424
  font-size: 14px;
425
425
  font-weight: 500;
426
- color: var(--color-text-secondary);
427
- background: var(--color-fill-light);
426
+ color: var(--xto-color-text-secondary, #6B7280);
427
+ background: var(--xto-fill-color-light, #F9FAFB);
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(--color-primary-light-6);
435
+ background: var(--xto-color-primary-light-6, #C7D2FE);
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(--color-text-placeholder);
454
+ color: var(--xto-color-text-placeholder, #9CA3AF);
455
455
 
456
456
  svg {
457
457
  width: 64px;
@@ -462,8 +462,8 @@ onMounted(() => {
462
462
  .loading-spinner {
463
463
  width: 32px;
464
464
  height: 32px;
465
- border: 3px solid var(--color-border-lighter);
466
- border-top-color: var(--color-primary);
465
+ border: 3px solid var(--xto-border-color-lighter, #F3F4F6);
466
+ border-top-color: var(--xto-color-primary, #4F46E5);
467
467
  border-radius: 50%;
468
468
  animation: spin 0.8s linear infinite;
469
469
  }
@@ -482,11 +482,11 @@ onMounted(() => {
482
482
  display: inline-block;
483
483
  min-width: 32px;
484
484
  padding: 4px 10px;
485
- background: var(--color-fill);
485
+ background: var(--xto-fill-color, #F3F4F6);
486
486
  border-radius: 12px;
487
487
  font-size: 12px;
488
488
  font-weight: 500;
489
- color: var(--color-text-secondary);
489
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-text-primary);
500
+ color: var(--xto-color-text-primary, #1F2937);
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(--color-text-secondary);
513
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-text-secondary);
528
+ color: var(--xto-color-text-secondary, #6B7280);
529
529
 
530
530
  &.enabled {
531
- color: var(--color-success);
531
+ color: var(--xto-color-success, #10B981);
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(--color-text-secondary);
541
+ color: var(--xto-color-text-secondary, #6B7280);
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(--color-border-lighter);
565
+ border-top: 1px solid var(--xto-border-color-lighter, #F3F4F6);
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(--color-text-secondary);
580
+ color: var(--xto-color-text-secondary, #6B7280);
581
581
  }
582
582
  }
583
583
  </style>
@@ -247,9 +247,9 @@ onMounted(() => {
247
247
  <svg viewBox="0 0 64 41" fill="none">
248
248
  <g transform="translate(0 1)">
249
249
  <ellipse fill="#f5f5f5" cx="32" cy="33" rx="32" ry="7"/>
250
- <g stroke="var(--color-text-placeholder)" stroke-width="2">
250
+ <g stroke="var(--xto-color-text-placeholder, #9CA3AF)" stroke-width="2">
251
251
  <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"/>
252
- <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(--color-fill)"/>
252
+ <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)"/>
253
253
  </g>
254
254
  </g>
255
255
  </svg>
@@ -377,17 +377,17 @@ onMounted(() => {
377
377
  <style lang="scss" scoped>
378
378
  .user-page {
379
379
  padding: 24px;
380
- background: var(--bg-color-page);
380
+ background: var(--xto-bg-color-page, #F9FAFB);
381
381
  min-height: 100%;
382
382
  }
383
383
 
384
384
  // 搜索区域
385
385
  .search-section {
386
- background: var(--bg-color);
387
- border-radius: var(--border-radius-large);
386
+ background: var(--xto-bg-color, #FFFFFF);
387
+ border-radius: var(--xto-border-radius-large, 8px);
388
388
  padding: 20px 24px;
389
389
  margin-bottom: 16px;
390
- box-shadow: var(--box-shadow-card);
390
+ box-shadow: var(--xto-shadow-subtle, 0 1px 2px rgba(0, 0, 0, 0.05));
391
391
 
392
392
  .search-form {
393
393
  display: flex;
@@ -407,9 +407,9 @@ onMounted(() => {
407
407
 
408
408
  // 表格区域
409
409
  .table-section {
410
- background: var(--bg-color);
411
- border-radius: var(--border-radius-large);
412
- box-shadow: var(--box-shadow-card);
410
+ background: var(--xto-bg-color, #FFFFFF);
411
+ border-radius: var(--xto-border-radius-large, 8px);
412
+ box-shadow: var(--xto-shadow-subtle, 0 1px 2px rgba(0, 0, 0, 0.05));
413
413
  overflow: hidden;
414
414
  }
415
415
 
@@ -418,7 +418,7 @@ onMounted(() => {
418
418
  justify-content: space-between;
419
419
  align-items: center;
420
420
  padding: 16px 24px;
421
- border-bottom: 1px solid var(--color-border-lighter);
421
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
422
422
 
423
423
  .toolbar-left {
424
424
  display: flex;
@@ -427,7 +427,7 @@ onMounted(() => {
427
427
 
428
428
  .table-count {
429
429
  font-size: 14px;
430
- color: var(--color-text-secondary);
430
+ color: var(--xto-color-text-secondary, #6B7280);
431
431
  }
432
432
  }
433
433
 
@@ -443,14 +443,14 @@ onMounted(() => {
443
443
  th, td {
444
444
  padding: 14px 16px;
445
445
  text-align: left;
446
- border-bottom: 1px solid var(--color-border-lighter);
446
+ border-bottom: 1px solid var(--xto-border-color-lighter, #F3F4F6);
447
447
  }
448
448
 
449
449
  th {
450
450
  font-size: 14px;
451
451
  font-weight: 500;
452
- color: var(--color-text-secondary);
453
- background: var(--color-fill-light);
452
+ color: var(--xto-color-text-secondary, #6B7280);
453
+ background: var(--xto-fill-color-light, #F9FAFB);
454
454
  white-space: nowrap;
455
455
  }
456
456
 
@@ -458,7 +458,7 @@ onMounted(() => {
458
458
  transition: background-color 0.2s;
459
459
 
460
460
  &:hover {
461
- background: var(--color-primary-light-6);
461
+ background: var(--xto-color-primary-light-6, #A5B4FC);
462
462
  }
463
463
  }
464
464
 
@@ -477,7 +477,7 @@ onMounted(() => {
477
477
  flex-direction: column;
478
478
  align-items: center;
479
479
  gap: 16px;
480
- color: var(--color-text-placeholder);
480
+ color: var(--xto-color-text-placeholder, #9CA3AF);
481
481
 
482
482
  svg {
483
483
  width: 64px;
@@ -488,8 +488,8 @@ onMounted(() => {
488
488
  .loading-spinner {
489
489
  width: 32px;
490
490
  height: 32px;
491
- border: 3px solid var(--color-border-lighter);
492
- border-top-color: var(--color-primary);
491
+ border: 3px solid var(--xto-border-color-lighter, #F3F4F6);
492
+ border-top-color: var(--xto-color-primary, #4F46E5);
493
493
  border-radius: 50%;
494
494
  animation: spin 0.8s linear infinite;
495
495
  }
@@ -508,11 +508,11 @@ onMounted(() => {
508
508
  display: inline-block;
509
509
  min-width: 32px;
510
510
  padding: 4px 10px;
511
- background: var(--color-fill);
511
+ background: var(--xto-fill-color, #F3F4F6);
512
512
  border-radius: 12px;
513
513
  font-size: 12px;
514
514
  font-weight: 500;
515
- color: var(--color-text-secondary);
515
+ color: var(--xto-color-text-secondary, #6B7280);
516
516
  text-align: center;
517
517
  }
518
518
 
@@ -532,7 +532,7 @@ onMounted(() => {
532
532
  display: flex;
533
533
  align-items: center;
534
534
  justify-content: center;
535
- background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light-1) 100%);
535
+ background: linear-gradient(135deg, var(--xto-color-primary, #4F46E5) 0%, var(--xto-color-primary-light-1, #5B54E8) 100%);
536
536
  border-radius: 50%;
537
537
  font-size: 16px;
538
538
  font-weight: 500;
@@ -549,12 +549,12 @@ onMounted(() => {
549
549
  .user-nickname {
550
550
  font-size: 14px;
551
551
  font-weight: 500;
552
- color: var(--color-text-primary);
552
+ color: var(--xto-color-text-primary, #1F2937);
553
553
  }
554
554
 
555
555
  .user-username {
556
556
  font-size: 12px;
557
- color: var(--color-text-placeholder);
557
+ color: var(--xto-color-text-placeholder, #9CA3AF);
558
558
  }
559
559
 
560
560
  .col-contact {
@@ -570,11 +570,11 @@ onMounted(() => {
570
570
  .contact-email,
571
571
  .contact-phone {
572
572
  font-size: 13px;
573
- color: var(--color-text-regular);
573
+ color: var(--xto-color-text-regular, #4B5563);
574
574
  }
575
575
 
576
576
  .contact-phone {
577
- color: var(--color-text-secondary);
577
+ color: var(--xto-color-text-secondary, #6B7280);
578
578
  }
579
579
 
580
580
  .col-roles {
@@ -598,10 +598,10 @@ onMounted(() => {
598
598
 
599
599
  .status-text {
600
600
  font-size: 13px;
601
- color: var(--color-text-secondary);
601
+ color: var(--xto-color-text-secondary, #6B7280);
602
602
 
603
603
  &.enabled {
604
- color: var(--color-success);
604
+ color: var(--xto-color-success, #10B981);
605
605
  }
606
606
  }
607
607
 
@@ -611,7 +611,7 @@ onMounted(() => {
611
611
 
612
612
  .time-text {
613
613
  font-size: 13px;
614
- color: var(--color-text-secondary);
614
+ color: var(--xto-color-text-secondary, #6B7280);
615
615
  }
616
616
 
617
617
  .col-actions {
@@ -635,7 +635,7 @@ onMounted(() => {
635
635
  display: flex;
636
636
  justify-content: flex-end;
637
637
  padding: 16px 24px;
638
- border-top: 1px solid var(--color-border-lighter);
638
+ border-top: 1px solid var(--xto-border-color-lighter, #F3F4F6);
639
639
  }
640
640
 
641
641
  // 弹窗表单
@@ -650,7 +650,7 @@ onMounted(() => {
650
650
 
651
651
  .status-label {
652
652
  font-size: 14px;
653
- color: var(--color-text-secondary);
653
+ color: var(--xto-color-text-secondary, #6B7280);
654
654
  }
655
655
  }
656
656
  </style>