This commit is contained in:
fengchuanhn@gmail.com
2026-05-16 02:16:49 +08:00
parent 9f7f80e04e
commit 491231bdd5
4 changed files with 198 additions and 36 deletions

View File

@@ -184,7 +184,8 @@ function onOpenIpBrain() {
:min="50" :min="50"
:max="1500" :max="1500"
size="small" size="small"
class="w-12 shrink-0"
input-class="text-center"
/> />
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
import { createApp } from "vue"; import { createApp } from "vue";
import { createPinia } from "pinia"; import { createPinia } from "pinia";
import PrimeVue from "primevue/config"; import PrimeVue from "primevue/config";
import Aura from "@primeuix/themes/aura"; import { AiclientPreset } from "./theme/aiclient-preset.js";
import Button from "primevue/button"; import Button from "primevue/button";
import InputText from "primevue/inputtext"; import InputText from "primevue/inputtext";
import Password from "primevue/password"; import Password from "primevue/password";
@@ -31,7 +31,7 @@ app.use(createPinia());
app.use(router); app.use(router);
app.use(PrimeVue, { app.use(PrimeVue, {
theme: { theme: {
preset: Aura, preset: AiclientPreset,
options: { options: {
darkModeSelector: ".dark", darkModeSelector: ".dark",
cssLayer: false, cssLayer: false,

View File

@@ -4,14 +4,16 @@
--color-bg-deep: #050810; --color-bg-deep: #050810;
--color-bg-base: #0b1220; --color-bg-base: #0b1220;
--color-bg-elevated: #111827; --color-bg-elevated: #111827;
--color-accent-cyan: #00e5ff; --color-accent-blue: #3b82f6;
--color-accent-cyan-dim: #22d3ee; --color-accent-blue-dim: #60a5fa;
--color-accent-indigo: #6366f1; --color-accent-indigo: #6366f1;
--color-accent-violet: #8b5cf6; --color-accent-violet: #8b5cf6;
--color-border-glow: rgba(0, 229, 255, 0.25); --color-border-glow: rgba(59, 130, 246, 0.25);
--color-text-muted: #94a3b8; --color-text-muted: #94a3b8;
--font-display: ui-sans-serif, system-ui, sans-serif; --font-display: ui-sans-serif, system-ui, sans-serif;
--font-mono: ui-monospace, "Cascadia Code", "Segoe UI Mono", monospace; --font-mono: ui-monospace, "Cascadia Code", "Segoe UI Mono", monospace;
--btn-primary-gradient: linear-gradient(135deg, #a855f7, #d946ef);
--btn-primary-gradient-hover: linear-gradient(135deg, #9333ea, #c026d3);
} }
html, html,
@@ -33,7 +35,7 @@ body {
position: relative; position: relative;
min-height: 100%; min-height: 100%;
background: background:
radial-gradient(ellipse 80% 50% at 50% -20%, rgba(0, 229, 255, 0.12), transparent), radial-gradient(ellipse 80% 50% at 50% -20%, rgba(59, 130, 246, 0.12), transparent),
radial-gradient(ellipse 60% 40% at 100% 100%, rgba(99, 102, 241, 0.1), transparent), radial-gradient(ellipse 60% 40% at 100% 100%, rgba(99, 102, 241, 0.1), transparent),
linear-gradient(180deg, var(--color-bg-deep) 0%, var(--color-bg-base) 50%, var(--color-bg-deep) 100%); linear-gradient(180deg, var(--color-bg-deep) 0%, var(--color-bg-base) 50%, var(--color-bg-deep) 100%);
} }
@@ -43,8 +45,8 @@ body {
position: absolute; position: absolute;
inset: 0; inset: 0;
background-image: background-image:
linear-gradient(rgba(0, 229, 255, 0.04) 1px, transparent 1px), linear-gradient(rgba(59, 130, 246, 0.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 229, 255, 0.04) 1px, transparent 1px); linear-gradient(90deg, rgba(59, 130, 246, 0.04) 1px, transparent 1px);
background-size: 48px 48px; background-size: 48px 48px;
mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black 20%, transparent 75%); mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, black 20%, transparent 75%);
pointer-events: none; pointer-events: none;
@@ -58,7 +60,7 @@ body {
width: 320px; width: 320px;
height: 320px; height: 320px;
transform: translateX(-50%); transform: translateX(-50%);
background: radial-gradient(circle, rgba(0, 229, 255, 0.08) 0%, transparent 70%); background: radial-gradient(circle, rgba(59, 130, 246, 0.08) 0%, transparent 70%);
filter: blur(40px); filter: blur(40px);
pointer-events: none; pointer-events: none;
animation: pulse-glow 6s ease-in-out infinite; animation: pulse-glow 6s ease-in-out infinite;
@@ -87,20 +89,20 @@ body {
} }
.gradient-text { .gradient-text {
background: linear-gradient(135deg, var(--color-accent-cyan) 0%, var(--color-accent-indigo) 55%, var(--color-accent-violet) 100%); background: linear-gradient(135deg, var(--color-accent-blue) 0%, var(--color-accent-indigo) 55%, var(--color-accent-violet) 100%);
-webkit-background-clip: text; -webkit-background-clip: text;
background-clip: text; background-clip: text;
color: transparent; color: transparent;
} }
.auth-link { .auth-link {
color: var(--color-accent-cyan-dim); color: var(--color-accent-blue-dim);
text-decoration: none; text-decoration: none;
transition: color 0.2s; transition: color 0.2s;
} }
.auth-link:hover { .auth-link:hover {
color: var(--color-accent-cyan); color: var(--color-accent-blue);
} }
.sidebar-nav { .sidebar-nav {
@@ -140,9 +142,9 @@ body {
.sidebar-item--active { .sidebar-item--active {
color: #e2e8f0; color: #e2e8f0;
border: 1px solid rgba(0, 229, 255, 0.45); border: 1px solid rgba(59, 130, 246, 0.45);
background: rgba(0, 229, 255, 0.06); background: rgba(59, 130, 246, 0.06);
box-shadow: 0 0 12px rgba(0, 229, 255, 0.08); box-shadow: 0 0 12px rgba(59, 130, 246, 0.08);
} }
.sidebar-icon { .sidebar-icon {
@@ -166,14 +168,14 @@ body {
.main-content { .main-content {
background: background:
radial-gradient(ellipse 60% 40% at 50% 0%, rgba(0, 229, 255, 0.06), transparent), radial-gradient(ellipse 60% 40% at 50% 0%, rgba(59, 130, 246, 0.06), transparent),
var(--color-bg-base); var(--color-bg-base);
} }
/* 首页工作台 */ /* 首页工作台 */
.custom-scrollbar { .custom-scrollbar {
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: rgba(0, 229, 255, 0.25) transparent; scrollbar-color: rgba(59, 130, 246, 0.25) transparent;
} }
.custom-scrollbar::-webkit-scrollbar { .custom-scrollbar::-webkit-scrollbar {
@@ -182,7 +184,7 @@ body {
} }
.custom-scrollbar::-webkit-scrollbar-thumb { .custom-scrollbar::-webkit-scrollbar-thumb {
background: rgba(0, 229, 255, 0.2); background: rgba(59, 130, 246, 0.2);
border-radius: 3px; border-radius: 3px;
} }
@@ -216,8 +218,8 @@ body {
} }
.dashboard-card:hover { .dashboard-card:hover {
border-color: rgba(0, 229, 255, 0.2); border-color: rgba(59, 130, 246, 0.2);
box-shadow: 0 0 16px rgba(0, 229, 255, 0.06); box-shadow: 0 0 16px rgba(59, 130, 246, 0.06);
} }
.dashboard-card--grow { .dashboard-card--grow {
@@ -255,7 +257,7 @@ body {
.dashboard-chevron { .dashboard-chevron {
width: 16px; width: 16px;
height: 16px; height: 16px;
color: var(--color-accent-cyan-dim); color: var(--color-accent-blue-dim);
transition: transform 0.25s; transition: transform 0.25s;
} }
@@ -325,31 +327,97 @@ body {
background: rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.08);
} }
/* PrimeVue 主要按钮(默认 primary紫粉渐变 */
.p-button.p-component:not(.p-button-secondary):not(.p-button-outlined):not(
.p-button-text
):not(.p-button-danger):not(.p-button-help):not(.p-button-warn):not(
.p-button-info
):not(.p-button-success):not(.p-button-link):not(.p-button-plain):not(:disabled):not(
[data-p-disabled="true"]
) {
background: var(--btn-primary-gradient) !important;
border-color: transparent !important;
color: #fff !important;
}
.p-button.p-component:not(.p-button-secondary):not(.p-button-outlined):not(
.p-button-text
):not(.p-button-danger):not(.p-button-help):not(.p-button-warn):not(
.p-button-info
):not(.p-button-success):not(.p-button-link):not(.p-button-plain):not(:disabled):not(
[data-p-disabled="true"]
):enabled:hover {
background: var(--btn-primary-gradient-hover) !important;
border-color: transparent !important;
color: #fff !important;
box-shadow: 0 4px 16px rgba(168, 85, 247, 0.35);
}
.p-button.p-component:not(.p-button-secondary):not(.p-button-outlined):not(
.p-button-text
):not(.p-button-danger):not(.p-button-help):not(.p-button-warn):not(
.p-button-info
):not(.p-button-success):not(.p-button-link):not(.p-button-plain):not(:disabled):not(
[data-p-disabled="true"]
):enabled:active {
filter: brightness(0.92);
}
.dashboard-one-click { .dashboard-one-click {
width: 100%; width: 100%;
padding: 12px; padding: 12px;
border-radius: 10px; border-radius: 10px;
border: 1px solid rgba(0, 229, 255, 0.35); border: 1px solid transparent;
background: linear-gradient( background: linear-gradient(135deg, #a855f7, #d946ef) !important;
135deg, color: #fff;
rgba(0, 229, 255, 0.12) 0%,
rgba(99, 102, 241, 0.15) 100%
);
color: #e2e8f0;
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
cursor: pointer; cursor: pointer;
transition: box-shadow 0.2s, border-color 0.2s; transition:
box-shadow 0.2s,
filter 0.2s;
} }
.dashboard-one-click:hover { .dashboard-one-click:hover {
border-color: rgba(0, 229, 255, 0.55); background: linear-gradient(135deg, #9333ea, #c026d3) !important;
box-shadow: 0 0 20px rgba(0, 229, 255, 0.15); box-shadow: 0 4px 16px rgba(168, 85, 247, 0.35);
}
/* 复选框选中:无实心 primary 底,保持深色背景 + 蓝色描边/勾 */
:root {
--p-checkbox-checked-background: rgba(255, 255, 255, 0.05);
--p-checkbox-checked-hover-background: rgba(255, 255, 255, 0.08);
--p-checkbox-checked-border-color: rgba(59, 130, 246, 0.55);
--p-checkbox-checked-hover-border-color: rgba(59, 130, 246, 0.75);
--p-checkbox-checked-focus-border-color: rgba(59, 130, 246, 0.75);
--p-checkbox-icon-checked-color: #60a5fa;
--p-checkbox-icon-checked-hover-color: #3b82f6;
}
.p-checkbox-checked .p-checkbox-box,
.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box,
.p-checkbox-checked.p-variant-filled .p-checkbox-box,
.p-checkbox-checked.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover)
.p-checkbox-box {
background: rgba(255, 255, 255, 0.05) !important;
border-color: rgba(59, 130, 246, 0.55) !important;
}
.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box,
.p-checkbox-checked.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover)
.p-checkbox-box {
background: rgba(255, 255, 255, 0.08) !important;
border-color: rgba(59, 130, 246, 0.75) !important;
}
.p-checkbox-checked .p-checkbox-icon,
.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-icon {
color: #60a5fa !important;
} }
.elegant-tip-box { .elegant-tip-box {
background: rgba(0, 229, 255, 0.06); background: rgba(59, 130, 246, 0.06);
border: 1px solid rgba(0, 229, 255, 0.12); border: 1px solid rgba(59, 130, 246, 0.12);
} }
.ip-brain-dialog :deep(.p-dialog-header) { .ip-brain-dialog :deep(.p-dialog-header) {
@@ -384,8 +452,8 @@ body {
} }
.benchmark-item--active { .benchmark-item--active {
border-color: rgba(0, 229, 255, 0.4); border-color: rgba(59, 130, 246, 0.4);
background: rgba(0, 229, 255, 0.08); background: rgba(59, 130, 246, 0.08);
} }
.dashboard-textarea-mono :deep(textarea) { .dashboard-textarea-mono :deep(textarea) {
@@ -394,3 +462,57 @@ body {
line-height: 1.6; line-height: 1.6;
min-height: 200px; min-height: 200px;
} }
/* PrimeVue InputNumberTailwind w-* 只作用于根节点,需同步约束内部 input */
.p-inputnumber.w-12,
.p-inputnumber.w-16,
.p-inputnumber.w-20,
.p-inputnumber.w-24,
.p-inputnumber.w-28 {
display: inline-flex;
overflow: hidden;
flex: 0 0 auto;
}
.p-inputnumber.w-12 {
width: 3rem;
min-width: 3rem;
max-width: 3rem;
}
.p-inputnumber.w-16 {
width: 4rem;
min-width: 4rem;
max-width: 4rem;
}
.p-inputnumber.w-20 {
width: 5rem;
min-width: 5rem;
max-width: 5rem;
}
.p-inputnumber.w-24 {
width: 6rem;
min-width: 6rem;
max-width: 6rem;
}
.p-inputnumber.w-28 {
width: 7rem;
min-width: 7rem;
max-width: 7rem;
}
.p-inputnumber.w-12 .p-inputnumber-input,
.p-inputnumber.w-16 .p-inputnumber-input,
.p-inputnumber.w-20 .p-inputnumber-input,
.p-inputnumber.w-24 .p-inputnumber-input,
.p-inputnumber.w-28 .p-inputnumber-input {
width: 100%;
max-width: 100%;
min-width: 0;
flex: 1 1 0%;
box-sizing: border-box;
padding-inline: 0.25rem;
}

View File

@@ -0,0 +1,39 @@
import Aura from "@primeuix/themes/aura";
import { definePreset } from "@primeuix/themes";
/**
* Aura 默认 primary 为 emerald绿色
* 使用科技蓝hue ~217色阶区别于青色/cyan。
*/
export const AiclientPreset = definePreset(Aura, {
primitive: {
techblue: {
50: "#eff6ff",
100: "#dbeafe",
200: "#bfdbfe",
300: "#93c5fd",
400: "#60a5fa",
500: "#3b82f6",
600: "#2563eb",
700: "#1d4ed8",
800: "#1e40af",
900: "#1e3a8a",
950: "#172554",
},
},
semantic: {
primary: {
50: "{techblue.50}",
100: "{techblue.100}",
200: "{techblue.200}",
300: "{techblue.300}",
400: "{techblue.400}",
500: "{techblue.500}",
600: "{techblue.600}",
700: "{techblue.700}",
800: "{techblue.800}",
900: "{techblue.900}",
950: "{techblue.950}",
},
},
});