重构模型平台前后端并移除Redis依赖
This commit is contained in:
@@ -0,0 +1 @@
|
||||
.dashboard-page,.admin-page{height:100%;padding:24px;overflow:auto;background:#f3f6f9}.dashboard-hero{display:flex;align-items:center;justify-content:space-between;padding:34px;border-radius:12px;color:#fff;background:linear-gradient(125deg,#0b3d69,#1978d4);box-shadow:0 12px 30px rgb(19 80 137/18%)}.dashboard-hero span{font-size:10px;letter-spacing:.12em;opacity:.82}.dashboard-hero h2{margin:8px 0 5px;font-size:25px}.dashboard-hero p{margin:0;font-size:12px;opacity:.88}.dashboard-hero__badge{padding:8px 12px;border-radius:20px;background:rgb(255 255 255/16%)}.dashboard-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:18px}.dashboard-metrics article{display:flex;align-items:center;gap:14px;padding:20px;border:1px solid #e0e8ef;border-radius:9px;background:#fff}.dashboard-metrics svg{color:#1978d4}.dashboard-metrics span{display:flex;flex-direction:column}.dashboard-metrics b{color:#20364c;font-size:21px}.dashboard-metrics small{color:#8796a6}.dashboard-actions{display:flex;gap:12px;margin-top:18px}.dashboard-actions button{display:flex;align-items:center;gap:8px;padding:13px 18px;border:1px solid #d8e4ef;border-radius:7px;color:#346587;background:#fff;cursor:pointer}.admin-page__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px;padding:20px 22px;border:1px solid #dee7ef;border-radius:9px;background:#fff}.admin-page__header span{color:#1978d4;font-size:10px;font-weight:800}.admin-page__header h2{margin:4px 0;color:#20364c}.admin-page__header p{margin:0;color:#8a99a8;font-size:11px}.admin-readonly{margin-bottom:12px;padding:10px 13px;border:1px solid #f1d79c;border-radius:6px;color:#8a6416;background:#fff8e8;font-size:11px}.employee-table{overflow:hidden;border:1px solid #dfe7ee;border-radius:9px;background:#fff}.employee-table__head,.employee-row{display:grid;grid-template-columns:1.5fr 1fr .7fr .65fr .8fr;align-items:center;gap:12px;padding:12px 17px}.employee-table__head{color:#748598;background:#f5f8fb;font-size:10px;font-weight:700}.employee-row{min-height:64px;border-top:1px solid #edf1f5;color:#44576a;font-size:11px}.employee-name{display:flex;align-items:center;gap:10px}.employee-name .avatar{display:grid;width:32px;height:32px;place-items:center}.employee-name>span{display:flex;min-width:0;flex-direction:column}.employee-name strong{color:#23384e}.employee-name small{margin-top:3px;color:#93a0ae}.employee-row code{color:#60758b}.role-pill,.status-pill{width:max-content;padding:4px 8px;border-radius:12px}.role-pill{color:#1d6ab3;background:#eaf4ff}.role-pill.is-admin{color:#87580f;background:#fff2d6}.status-pill{color:#138657;background:#e8f8f1}.status-pill.is-disabled,.status-pill.is-locked{color:#a64b4b;background:#ffeded}.employee-actions{display:flex;gap:6px}.employee-actions button{padding:5px 9px;border:1px solid #d9e3ec;border-radius:4px;color:#4c6c88;background:#fff;cursor:pointer}.employee-actions button.is-danger{color:#c14a4a}.employee-actions button:disabled{cursor:not-allowed;opacity:.45}.admin-empty{padding:25px;text-align:center;color:#8796a6}
|
||||
@@ -0,0 +1,185 @@
|
||||
.dashboard-grid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.6fr) minmax(310px, .9fr);
|
||||
gap: 14px;
|
||||
margin-top: 18px;
|
||||
padding-bottom: 25px;
|
||||
}
|
||||
.dashboard-panel {
|
||||
border: 1px solid #dfe7ee;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
box-shadow: 0 5px 16px rgb(33 65 97 / 5%);
|
||||
}
|
||||
.dashboard-panel > header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 17px 20px;
|
||||
border-bottom: 1px solid #edf1f5;
|
||||
}
|
||||
.dashboard-panel header span {
|
||||
color: #7890a6;
|
||||
font-size: 9px;
|
||||
font-weight: 800;
|
||||
letter-spacing: .09em;
|
||||
}
|
||||
.dashboard-panel h3 {
|
||||
margin: 4px 0 0;
|
||||
color: #263b50;
|
||||
font-size: 14px;
|
||||
}
|
||||
.dashboard-panel--trend > header > b {
|
||||
padding: 5px 9px;
|
||||
border-radius: 13px;
|
||||
color: #16855a;
|
||||
background: #e8f8f1;
|
||||
font-size: 10px;
|
||||
}
|
||||
.trend-chart {
|
||||
display: flex;
|
||||
height: 190px;
|
||||
align-items: flex-end;
|
||||
gap: 18px;
|
||||
padding: 26px 28px 17px;
|
||||
background: repeating-linear-gradient(to bottom, #fff 0, #fff 44px, #eef3f7 45px);
|
||||
}
|
||||
.trend-column {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
flex: 1;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
}
|
||||
.trend-column i {
|
||||
display: block;
|
||||
width: min(36px, 72%);
|
||||
min-height: 12px;
|
||||
border-radius: 5px 5px 2px 2px;
|
||||
background: linear-gradient(#49a0eb, #207bd1);
|
||||
box-shadow: 0 4px 9px rgb(32 123 209 / 18%);
|
||||
}
|
||||
.trend-column__value, .trend-column small {
|
||||
color: #7890a3;
|
||||
font-size: 9px;
|
||||
}
|
||||
.dashboard-panel--trend footer {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 22px;
|
||||
padding: 10px;
|
||||
color: #708397;
|
||||
font-size: 9px;
|
||||
}
|
||||
.dashboard-panel footer span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
.legend-dot {
|
||||
display: inline-block;
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.legend-dot.is-success { background: #27b87c; }
|
||||
.legend-dot.is-failed { background: #ed7777; }
|
||||
.legend-dot.is-notebook { background: #318de0; }
|
||||
.legend-dot.is-python { background: #72c9b0; }
|
||||
.legend-dot.is-version { background: #f3b75c; }
|
||||
.donut-layout {
|
||||
display: flex;
|
||||
min-height: 226px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 28px;
|
||||
padding: 20px;
|
||||
}
|
||||
.donut-chart {
|
||||
position: relative;
|
||||
display: grid;
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
flex: 0 0 auto;
|
||||
place-items: center;
|
||||
border-radius: 50%;
|
||||
background: conic-gradient(#318de0 0 67%, #72c9b0 67% 86%, #f3b75c 86% 100%);
|
||||
}
|
||||
.donut-chart::after {
|
||||
position: absolute;
|
||||
width: 78px;
|
||||
height: 78px;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
content: "";
|
||||
}
|
||||
.donut-chart span {
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
.donut-chart b { color: #273d53; font-size: 20px; }
|
||||
.donut-chart small { color: #8a9aaa; font-size: 8px; }
|
||||
.donut-legend { display: flex; flex-direction: column; gap: 15px; }
|
||||
.donut-legend > span {
|
||||
display: grid;
|
||||
grid-template-columns: 8px 1fr;
|
||||
align-items: center;
|
||||
column-gap: 7px;
|
||||
}
|
||||
.donut-legend b { color: #40566c; font-size: 10px; }
|
||||
.donut-legend small { grid-column: 2; color: #8a9baa; font-size: 8px; }
|
||||
.dashboard-panel--activity { grid-column: 1 / -1; }
|
||||
.dashboard-panel--activity > header > button {
|
||||
border: 0;
|
||||
color: #257bcb;
|
||||
background: transparent;
|
||||
font-size: 10px;
|
||||
}
|
||||
.activity-table__head, .activity-row {
|
||||
display: grid;
|
||||
grid-template-columns: 2fr .7fr .55fr .5fr;
|
||||
align-items: center;
|
||||
gap: 15px;
|
||||
padding: 11px 20px;
|
||||
}
|
||||
.activity-table__head {
|
||||
color: #8595a5;
|
||||
background: #f7f9fb;
|
||||
font-size: 9px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.activity-row {
|
||||
border-top: 1px solid #edf1f5;
|
||||
color: #607488;
|
||||
font-size: 10px;
|
||||
}
|
||||
.activity-row > span:first-child {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 9px;
|
||||
color: #344c63;
|
||||
}
|
||||
.activity-icon {
|
||||
display: grid;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
place-items: center;
|
||||
border-radius: 6px;
|
||||
color: #277fcc;
|
||||
background: #eaf4ff;
|
||||
}
|
||||
.activity-row b {
|
||||
padding: 3px 7px;
|
||||
border-radius: 10px;
|
||||
color: #16855a;
|
||||
background: #e9f8f2;
|
||||
font-size: 9px;
|
||||
}
|
||||
@media (max-width: 1200px) {
|
||||
.dashboard-grid { grid-template-columns: 1fr; }
|
||||
.dashboard-panel--activity { grid-column: auto; }
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user