diff --git a/src/App.vue b/src/App.vue index 5ee48b8..8ef2c54 100644 --- a/src/App.vue +++ b/src/App.vue @@ -42,11 +42,15 @@ const { } .light { - @apply bg-gradient-to-br from-blue-50 via-indigo-50 to-white; + background: + linear-gradient(135deg, #dfe9eb 0%, #edf3f2 46%, #f7f8f5 100%), + linear-gradient(90deg, rgba(103, 135, 145, 0.12), rgba(162, 172, 154, 0.1)); } .dark { - @apply bg-gradient-to-br from-gray-900 via-indigo-900 to-black; + background: + linear-gradient(135deg, #10191e 0%, #17252b 48%, #223036 100%), + linear-gradient(90deg, rgba(113, 153, 168, 0.12), rgba(117, 143, 132, 0.08)); } .fade-enter-active, @@ -100,7 +104,7 @@ const { width: 50px; height: 50px; border: 3px solid #fff; - border-top: 3px solid #3498db; + border-top: 3px solid #6f98a6; border-radius: 50%; animation: spin 1s linear infinite; } diff --git a/src/assets/style/main.css b/src/assets/style/main.css index 81e78b4..eaab068 100644 --- a/src/assets/style/main.css +++ b/src/assets/style/main.css @@ -154,3 +154,263 @@ linear-gradient(135deg, rgba(42, 62, 72, 0.98), rgba(29, 48, 58, 0.96)), radial-gradient(circle at 0% 0%, rgba(117, 166, 184, 0.22), transparent 36%); } + +.bg-indigo-50, +.bg-blue-50 { + background-color: #dce8eb !important; +} + +.bg-indigo-100, +.bg-blue-100 { + background-color: #d1e0e3 !important; +} + +.bg-indigo-500, +.bg-blue-500, +.bg-cyan-500 { + background-color: #6f98a6 !important; +} + +.bg-indigo-600, +.bg-blue-600, +.bg-cyan-600 { + background-color: #5f8796 !important; +} + +.bg-indigo-700, +.bg-blue-700, +.bg-cyan-700 { + background-color: #527887 !important; +} + +.bg-green-50 { + background-color: #e1eee8 !important; +} + +.bg-green-100 { + background-color: #d4e5dd !important; +} + +.bg-green-500, +.bg-green-600 { + background-color: #6f9688 !important; +} + +.bg-green-700 { + background-color: #5f8377 !important; +} + +.bg-red-50 { + background-color: #f1e2e5 !important; +} + +.bg-red-100 { + background-color: #e8d3d7 !important; +} + +.bg-red-500, +.bg-red-600 { + background-color: #9b6a72 !important; +} + +.bg-red-700 { + background-color: #895c63 !important; +} + +.bg-purple-50 { + background-color: #e7e2ea !important; +} + +.bg-purple-100 { + background-color: #ddd6e2 !important; +} + +.bg-purple-500, +.bg-pink-500 { + background-color: #8c8294 !important; +} + +.bg-purple-600, +.bg-pink-600 { + background-color: #7b7284 !important; +} + +.text-indigo-200, +.text-blue-200 { + color: #d8e8eb !important; +} + +.text-indigo-300, +.text-blue-300 { + color: #b8d4dc !important; +} + +.text-indigo-400, +.text-blue-400, +.text-cyan-400 { + color: #8fb2bf !important; +} + +.text-indigo-500, +.text-blue-500, +.text-cyan-500 { + color: #6f98a6 !important; +} + +.text-indigo-600, +.text-blue-600, +.text-cyan-600 { + color: #5f8796 !important; +} + +.text-indigo-700, +.text-blue-700 { + color: #3f6a77 !important; +} + +.text-green-300, +.text-green-400 { + color: #b6d6ca !important; +} + +.text-green-500, +.text-green-600, +.text-green-700 { + color: #5f8377 !important; +} + +.text-red-200, +.text-red-300, +.text-red-400 { + color: #e5c5ca !important; +} + +.text-red-500, +.text-red-600, +.text-red-700 { + color: #8b5962 !important; +} + +.text-purple-300, +.text-purple-400 { + color: #d4c8dc !important; +} + +.text-purple-500, +.text-purple-600, +.text-purple-700 { + color: #6f6379 !important; +} + +.border-indigo-100, +.border-blue-100 { + border-color: #cfe1e4 !important; +} + +.border-indigo-300, +.border-blue-300 { + border-color: #9db6bd !important; +} + +.border-indigo-400, +.border-indigo-500, +.border-blue-500 { + border-color: #8fb2bf !important; +} + +.border-indigo-600 { + border-color: #5f8796 !important; +} + +.border-red-100 { + border-color: #e8d3d7 !important; +} + +.border-red-200, +.border-red-500 { + border-color: #c9a4aa !important; +} + +.focus\:ring-indigo-500:focus, +.focus\:ring-blue-500:focus, +.focus\:ring-cyan-500:focus, +.focus\:ring-purple-500:focus { + --tw-ring-color: #8fb2bf !important; +} + +.focus\:border-indigo-500:focus, +.focus\:border-cyan-500:focus { + border-color: #8fb2bf !important; +} + +.hover\:bg-indigo-100:hover, +.hover\:bg-blue-100:hover { + background-color: #cfe1e4 !important; +} + +.hover\:bg-indigo-500:hover, +.hover\:bg-blue-500:hover, +.hover\:bg-cyan-500:hover { + background-color: #6f98a6 !important; +} + +.hover\:bg-indigo-600:hover, +.hover\:bg-blue-600:hover, +.hover\:bg-cyan-600:hover { + background-color: #527887 !important; +} + +.hover\:bg-indigo-700:hover, +.hover\:bg-blue-700:hover, +.hover\:bg-cyan-700:hover { + background-color: #466b78 !important; +} + +.hover\:bg-green-100:hover { + background-color: #d4e5dd !important; +} + +.hover\:bg-green-400:hover, +.hover\:bg-green-600:hover, +.hover\:bg-green-700:hover { + background-color: #5f8377 !important; +} + +.hover\:bg-red-100:hover { + background-color: #e8d3d7 !important; +} + +.hover\:bg-red-400:hover, +.hover\:bg-red-600:hover, +.hover\:bg-red-700:hover { + background-color: #895c63 !important; +} + +.hover\:border-indigo-500:hover { + border-color: #8fb2bf !important; +} + +.from-indigo-500, +.from-indigo-600, +.from-cyan-500, +.from-cyan-600 { + --tw-gradient-from: #5f8796 var(--tw-gradient-from-position) !important; + --tw-gradient-to: rgba(95, 135, 150, 0) var(--tw-gradient-to-position) !important; + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; +} + +.via-purple-500, +.via-purple-600 { + --tw-gradient-to: rgba(140, 130, 148, 0) var(--tw-gradient-to-position) !important; + --tw-gradient-stops: + var(--tw-gradient-from), + #8c8294 var(--tw-gradient-via-position), + var(--tw-gradient-to) !important; +} + +.to-purple-500, +.to-purple-600, +.to-pink-500, +.to-pink-600 { + --tw-gradient-to: #6f9688 var(--tw-gradient-to-position) !important; +} diff --git a/src/components/common/AlertComponent.vue b/src/components/common/AlertComponent.vue index 3684490..f677275 100644 --- a/src/components/common/AlertComponent.vue +++ b/src/components/common/AlertComponent.vue @@ -56,10 +56,10 @@ const { alerts } = storeToRefs(alertStore) const { removeAlert, startProgressTimer, stopProgressTimer } = alertStore const gradientClasses = { - success: 'from-green-500 to-green-600', - error: 'from-red-500 to-red-600', - warning: 'from-yellow-500 to-yellow-600', - info: 'from-blue-500 to-blue-600' + success: 'from-[#6f9688] to-[#5f8377]', + error: 'from-[#9b6a72] to-[#895c63]', + warning: 'from-[#b2a16f] to-[#9b8b5e]', + info: 'from-[#5f8796] to-[#527887]' } const alertIcons = { diff --git a/src/components/common/BaseButton.vue b/src/components/common/BaseButton.vue index e4b1995..b81b1a4 100644 --- a/src/components/common/BaseButton.vue +++ b/src/components/common/BaseButton.vue @@ -56,27 +56,27 @@ const variantClasses = computed(() => { const baseClasses = 'focus:ring-2 focus:ring-offset-2' if (props.variant === 'primary') { - return `${baseClasses} bg-indigo-600 text-white hover:bg-indigo-700 focus:ring-indigo-500` + return `${baseClasses} bg-[#5f8796] text-white shadow-[#9fb8bf]/35 hover:bg-[#527887] focus:ring-[#8fb2bf]` } if (props.variant === 'secondary') { return isDarkMode.value - ? `${baseClasses} bg-gray-700 text-gray-300 hover:bg-gray-600 focus:ring-gray-500 border border-gray-600` - : `${baseClasses} bg-gray-100 text-gray-700 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300` + ? `${baseClasses} border border-[#40545c] bg-[#263941] text-[#d8e3e5] hover:border-[#7199a8] hover:bg-[#2d4751] focus:ring-[#7199a8]` + : `${baseClasses} border border-[#c8d8dc] bg-[#edf4f5] text-[#415d66] hover:border-[#9db6bd] hover:bg-[#e2ecee] focus:ring-[#8fb2bf]` } if (props.variant === 'danger') { - return `${baseClasses} bg-red-600 text-white hover:bg-red-700 focus:ring-red-500` + return `${baseClasses} bg-[#9b6a72] text-white shadow-[#c9a4aa]/35 hover:bg-[#895c63] focus:ring-[#b98f97]` } if (props.variant === 'success') { - return `${baseClasses} bg-green-600 text-white hover:bg-green-700 focus:ring-green-500` + return `${baseClasses} bg-[#6f9688] text-white shadow-[#aac4ba]/35 hover:bg-[#5f8377] focus:ring-[#92b3a7]` } if (props.variant === 'outline') { return isDarkMode.value - ? `${baseClasses} border border-gray-600 text-gray-300 hover:bg-gray-700 focus:ring-gray-500` - : `${baseClasses} border border-gray-300 text-gray-700 hover:bg-gray-50 focus:ring-gray-500` + ? `${baseClasses} border border-[#40545c] text-[#d8e3e5] hover:border-[#7199a8] hover:bg-[#263941] focus:ring-[#7199a8]` + : `${baseClasses} border border-[#c8d8dc] text-[#415d66] hover:border-[#9db6bd] hover:bg-[#edf4f5] focus:ring-[#8fb2bf]` } return '' diff --git a/src/components/common/BorderProgressBar.vue b/src/components/common/BorderProgressBar.vue index a9ef269..b3adc70 100644 --- a/src/components/common/BorderProgressBar.vue +++ b/src/components/common/BorderProgressBar.vue @@ -29,9 +29,9 @@ const drawProgress = () => { // 创建渐变 const gradient = ctx.createLinearGradient(0, 0, width, height); - gradient.addColorStop(0, '#4f46e5'); // 靛蓝色 - gradient.addColorStop(0.5, '#7c3aed'); // 紫色 - gradient.addColorStop(1, '#db2777'); // 粉色 + gradient.addColorStop(0, '#5f8796'); + gradient.addColorStop(0.5, '#6f9688'); + gradient.addColorStop(1, '#8c8294'); // 绘制背景 ctx.strokeStyle = 'rgba(229, 231, 235, 0.2)'; // 淡灰色半透明 @@ -151,4 +151,4 @@ watch(() => props.progress, drawProgress); height: 100%; transition: all 0.3s ease; } - \ No newline at end of file + diff --git a/src/components/common/DataPagination.vue b/src/components/common/DataPagination.vue index eae2e05..283aa18 100644 --- a/src/components/common/DataPagination.vue +++ b/src/components/common/DataPagination.vue @@ -1,7 +1,7 @@