1765 lines
50 KiB
HTML
1765 lines
50 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Issue Hub AI 中心调度平台界面设计图</title>
|
|
<style>
|
|
:root {
|
|
color-scheme: light;
|
|
--bg: #edf1f4;
|
|
--paper: #fbfcfc;
|
|
--paper-2: #f5f7f8;
|
|
--ink: #17212b;
|
|
--muted: #64717d;
|
|
--line: #d8e0e6;
|
|
--line-strong: #b9c6cf;
|
|
--teal: #0f8f83;
|
|
--teal-soft: #dff5f2;
|
|
--blue: #2f6df6;
|
|
--blue-soft: #e7eefc;
|
|
--amber: #b46a0a;
|
|
--amber-soft: #fff1d6;
|
|
--red: #c94545;
|
|
--red-soft: #ffe5e5;
|
|
--green: #247c48;
|
|
--green-soft: #e1f4e8;
|
|
--shadow: 0 24px 80px rgba(24, 36, 48, 0.12);
|
|
--radius: 8px;
|
|
font-family:
|
|
Inter, "Segoe UI", "Microsoft YaHei", "PingFang SC", Arial,
|
|
sans-serif;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
background: var(--bg);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.page {
|
|
width: min(1480px, calc(100vw - 36px));
|
|
margin: 0 auto;
|
|
padding: 32px 0 56px;
|
|
}
|
|
|
|
.board-head {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
gap: 24px;
|
|
align-items: end;
|
|
margin-bottom: 24px;
|
|
}
|
|
|
|
.board-head h1 {
|
|
margin: 0 0 8px;
|
|
font-size: clamp(30px, 4vw, 56px);
|
|
line-height: 1;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.board-head p {
|
|
max-width: 760px;
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 16px;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
.board-links {
|
|
display: flex;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.board-links a {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
min-height: 36px;
|
|
padding: 0 12px;
|
|
color: var(--ink);
|
|
text-decoration: none;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: var(--paper);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.principles {
|
|
display: grid;
|
|
grid-template-columns: repeat(5, 1fr);
|
|
border: 1px solid var(--line);
|
|
background: var(--paper);
|
|
border-radius: var(--radius);
|
|
overflow: hidden;
|
|
margin-bottom: 28px;
|
|
}
|
|
|
|
.principle {
|
|
min-height: 94px;
|
|
padding: 16px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.principle:last-child {
|
|
border-right: 0;
|
|
}
|
|
|
|
.principle strong {
|
|
display: block;
|
|
margin-bottom: 8px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.principle span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.55;
|
|
}
|
|
|
|
.shot {
|
|
margin: 0 0 34px;
|
|
}
|
|
|
|
.shot-title {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.shot-title h2 {
|
|
margin: 0;
|
|
font-size: 20px;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.shot-title span {
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.app-shell {
|
|
overflow: hidden;
|
|
min-height: 760px;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: var(--radius);
|
|
background: var(--paper);
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.dispatch-app {
|
|
display: grid;
|
|
grid-template-columns: 228px 1fr 356px;
|
|
min-height: 760px;
|
|
}
|
|
|
|
.sidebar {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 18px;
|
|
padding: 22px 18px;
|
|
border-right: 1px solid var(--line);
|
|
background: #f7f9fa;
|
|
}
|
|
|
|
.brand {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
min-height: 36px;
|
|
font-weight: 760;
|
|
}
|
|
|
|
.mark {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 7px;
|
|
background: var(--ink);
|
|
color: white;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.nav {
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.nav-item {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
min-height: 36px;
|
|
padding: 0 10px;
|
|
border-radius: 7px;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.nav-item.active {
|
|
color: var(--ink);
|
|
background: white;
|
|
box-shadow: inset 0 0 0 1px var(--line);
|
|
}
|
|
|
|
.count {
|
|
min-width: 24px;
|
|
height: 20px;
|
|
padding: 0 7px;
|
|
border-radius: 999px;
|
|
background: #e7ecef;
|
|
color: var(--muted);
|
|
text-align: center;
|
|
line-height: 20px;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.sync-box {
|
|
margin-top: auto;
|
|
padding: 12px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: white;
|
|
}
|
|
|
|
.sync-box strong,
|
|
.section-label {
|
|
display: block;
|
|
margin-bottom: 8px;
|
|
font-size: 12px;
|
|
color: var(--muted);
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.sync-box p {
|
|
margin: 0 0 10px;
|
|
font-size: 13px;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.meter {
|
|
height: 6px;
|
|
overflow: hidden;
|
|
border-radius: 999px;
|
|
background: #e7ecef;
|
|
}
|
|
|
|
.meter i {
|
|
display: block;
|
|
width: 72%;
|
|
height: 100%;
|
|
background: var(--teal);
|
|
}
|
|
|
|
.workspace {
|
|
display: grid;
|
|
grid-template-rows: auto auto 1fr;
|
|
min-width: 0;
|
|
}
|
|
|
|
.topbar {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
gap: 18px;
|
|
align-items: center;
|
|
min-height: 78px;
|
|
padding: 20px 24px 14px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.topbar h3 {
|
|
margin: 0 0 6px;
|
|
font-size: 22px;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.topbar p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
button,
|
|
.button {
|
|
min-height: 34px;
|
|
padding: 0 12px;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 7px;
|
|
background: white;
|
|
color: var(--ink);
|
|
font: inherit;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.button.primary,
|
|
button.primary {
|
|
border-color: var(--teal);
|
|
background: var(--teal);
|
|
color: white;
|
|
}
|
|
|
|
.button.ghost,
|
|
button.ghost {
|
|
border-color: transparent;
|
|
background: transparent;
|
|
}
|
|
|
|
.metrics {
|
|
display: grid;
|
|
grid-template-columns: repeat(5, 1fr);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.metric {
|
|
min-height: 84px;
|
|
padding: 14px 18px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.metric:last-child {
|
|
border-right: 0;
|
|
}
|
|
|
|
.metric b {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
font-size: 24px;
|
|
letter-spacing: 0;
|
|
}
|
|
|
|
.metric span {
|
|
display: block;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.metric .trend {
|
|
margin-top: 8px;
|
|
font-size: 12px;
|
|
color: var(--teal);
|
|
}
|
|
|
|
.queue-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 280px;
|
|
min-height: 596px;
|
|
}
|
|
|
|
.queue-main {
|
|
min-width: 0;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.filter-row {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
min-height: 58px;
|
|
padding: 12px 18px;
|
|
border-bottom: 1px solid var(--line);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
min-height: 28px;
|
|
padding: 0 10px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 999px;
|
|
background: white;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.chip.active {
|
|
border-color: var(--ink);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.issue-table {
|
|
display: grid;
|
|
}
|
|
|
|
.table-head,
|
|
.issue-row {
|
|
display: grid;
|
|
grid-template-columns: minmax(260px, 1.6fr) 150px 112px 112px 104px;
|
|
gap: 12px;
|
|
align-items: center;
|
|
padding: 0 18px;
|
|
}
|
|
|
|
.table-head {
|
|
min-height: 38px;
|
|
color: var(--muted);
|
|
border-bottom: 1px solid var(--line);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.issue-row {
|
|
min-height: 82px;
|
|
border-bottom: 1px solid var(--line);
|
|
background: white;
|
|
}
|
|
|
|
.issue-row.selected {
|
|
background: #f6fbfa;
|
|
box-shadow: inset 3px 0 0 var(--teal);
|
|
}
|
|
|
|
.issue-title {
|
|
min-width: 0;
|
|
}
|
|
|
|
.issue-title strong {
|
|
display: block;
|
|
overflow: hidden;
|
|
margin-bottom: 7px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.issue-title small {
|
|
display: block;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
min-height: 24px;
|
|
padding: 0 8px;
|
|
border-radius: 999px;
|
|
font-size: 12px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.tag.teal {
|
|
background: var(--teal-soft);
|
|
color: var(--teal);
|
|
}
|
|
|
|
.tag.blue {
|
|
background: var(--blue-soft);
|
|
color: var(--blue);
|
|
}
|
|
|
|
.tag.amber {
|
|
background: var(--amber-soft);
|
|
color: var(--amber);
|
|
}
|
|
|
|
.tag.red {
|
|
background: var(--red-soft);
|
|
color: var(--red);
|
|
}
|
|
|
|
.tag.green {
|
|
background: var(--green-soft);
|
|
color: var(--green);
|
|
}
|
|
|
|
.confidence {
|
|
display: grid;
|
|
gap: 6px;
|
|
}
|
|
|
|
.confidence span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.mini-meter {
|
|
height: 5px;
|
|
overflow: hidden;
|
|
border-radius: 999px;
|
|
background: #e7ecef;
|
|
}
|
|
|
|
.mini-meter i {
|
|
display: block;
|
|
height: 100%;
|
|
background: var(--blue);
|
|
}
|
|
|
|
.side-list {
|
|
padding: 18px;
|
|
background: #fafbfb;
|
|
}
|
|
|
|
.side-list h4,
|
|
.inspector h4 {
|
|
margin: 0 0 12px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.event {
|
|
display: grid;
|
|
grid-template-columns: 10px 1fr;
|
|
gap: 10px;
|
|
padding: 10px 0;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
margin-top: 6px;
|
|
border-radius: 50%;
|
|
background: var(--teal);
|
|
}
|
|
|
|
.event strong {
|
|
display: block;
|
|
margin-bottom: 4px;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.event span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.inspector {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr auto;
|
|
min-width: 0;
|
|
padding: 22px;
|
|
background: #f7f9fa;
|
|
}
|
|
|
|
.ai-panel {
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: white;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.ai-head {
|
|
padding: 16px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.ai-head b {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
font-size: 15px;
|
|
}
|
|
|
|
.ai-head span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.route {
|
|
display: grid;
|
|
gap: 12px;
|
|
padding: 16px;
|
|
}
|
|
|
|
.route-step {
|
|
display: grid;
|
|
grid-template-columns: 24px 1fr;
|
|
gap: 10px;
|
|
align-items: start;
|
|
}
|
|
|
|
.route-step i {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: 50%;
|
|
background: var(--teal-soft);
|
|
color: var(--teal);
|
|
font-style: normal;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.route-step strong {
|
|
display: block;
|
|
margin-bottom: 4px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.route-step span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.factor-list {
|
|
display: grid;
|
|
gap: 8px;
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.factor {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.inspector-actions {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 8px;
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.split-board {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) 380px;
|
|
gap: 22px;
|
|
}
|
|
|
|
.client-app {
|
|
display: grid;
|
|
grid-template-columns: 212px 1fr;
|
|
min-height: 640px;
|
|
}
|
|
|
|
.client-main {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr;
|
|
min-width: 0;
|
|
}
|
|
|
|
.work-list {
|
|
display: grid;
|
|
grid-template-columns: 360px 1fr;
|
|
min-height: 542px;
|
|
}
|
|
|
|
.work-column {
|
|
border-right: 1px solid var(--line);
|
|
background: #fafbfb;
|
|
}
|
|
|
|
.compact-item {
|
|
padding: 14px 16px;
|
|
border-bottom: 1px solid var(--line);
|
|
background: white;
|
|
}
|
|
|
|
.compact-item.active {
|
|
background: #f6fbfa;
|
|
box-shadow: inset 3px 0 0 var(--teal);
|
|
}
|
|
|
|
.compact-item strong {
|
|
display: block;
|
|
margin: 7px 0;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.compact-item p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.detail-preview {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr auto;
|
|
min-width: 0;
|
|
padding: 18px;
|
|
}
|
|
|
|
.detail-preview h3 {
|
|
margin: 0 0 8px;
|
|
font-size: 22px;
|
|
}
|
|
|
|
.detail-preview .meta {
|
|
display: flex;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.summary-block {
|
|
padding: 14px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: #fafbfb;
|
|
}
|
|
|
|
.summary-block p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.task-steps {
|
|
display: grid;
|
|
gap: 10px;
|
|
margin-top: 18px;
|
|
}
|
|
|
|
.task-step {
|
|
display: grid;
|
|
grid-template-columns: 28px 1fr auto;
|
|
gap: 12px;
|
|
align-items: center;
|
|
min-height: 48px;
|
|
padding: 0 12px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
}
|
|
|
|
.task-step i {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: 50%;
|
|
background: var(--paper-2);
|
|
color: var(--muted);
|
|
font-style: normal;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.task-step.done i {
|
|
background: var(--green-soft);
|
|
color: var(--green);
|
|
}
|
|
|
|
.task-step strong {
|
|
display: block;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.task-step span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.phone {
|
|
min-height: 640px;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 24px;
|
|
padding: 14px;
|
|
background: #101820;
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.phone-screen {
|
|
height: 100%;
|
|
overflow: hidden;
|
|
border-radius: 18px;
|
|
background: var(--paper);
|
|
}
|
|
|
|
.mobile-head {
|
|
padding: 18px 18px 14px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.mobile-head strong {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
font-size: 19px;
|
|
}
|
|
|
|
.mobile-head span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.mobile-form {
|
|
display: grid;
|
|
gap: 12px;
|
|
padding: 16px;
|
|
}
|
|
|
|
.field {
|
|
display: grid;
|
|
gap: 6px;
|
|
}
|
|
|
|
.field label {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.input {
|
|
min-height: 42px;
|
|
padding: 10px 12px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: white;
|
|
color: var(--ink);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.input.large {
|
|
min-height: 118px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.upload-zone {
|
|
display: grid;
|
|
place-items: center;
|
|
min-height: 82px;
|
|
border: 1px dashed var(--line-strong);
|
|
border-radius: var(--radius);
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.ai-hint {
|
|
padding: 12px;
|
|
border: 1px solid var(--blue-soft);
|
|
border-radius: var(--radius);
|
|
background: #f4f8ff;
|
|
}
|
|
|
|
.ai-hint strong {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
color: var(--blue);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.ai-hint span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.detail-app {
|
|
display: grid;
|
|
grid-template-columns: 300px 1fr 330px;
|
|
min-height: 720px;
|
|
}
|
|
|
|
.issue-summary-pane {
|
|
padding: 22px;
|
|
border-right: 1px solid var(--line);
|
|
background: #f7f9fa;
|
|
}
|
|
|
|
.issue-summary-pane h3 {
|
|
margin: 14px 0 10px;
|
|
font-size: 24px;
|
|
line-height: 1.18;
|
|
}
|
|
|
|
.issue-summary-pane p {
|
|
margin: 0 0 18px;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.kv {
|
|
display: grid;
|
|
gap: 10px;
|
|
margin-top: 18px;
|
|
}
|
|
|
|
.kv div {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
padding-bottom: 10px;
|
|
border-bottom: 1px solid var(--line);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.kv span {
|
|
color: var(--muted);
|
|
}
|
|
|
|
.timeline-pane {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr;
|
|
min-width: 0;
|
|
}
|
|
|
|
.timeline-head {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
align-items: center;
|
|
min-height: 72px;
|
|
padding: 18px 22px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.timeline-head h3 {
|
|
margin: 0;
|
|
font-size: 20px;
|
|
}
|
|
|
|
.timeline {
|
|
padding: 22px;
|
|
}
|
|
|
|
.timeline-item {
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns: 92px 1fr;
|
|
gap: 18px;
|
|
padding: 0 0 24px;
|
|
}
|
|
|
|
.timeline-item::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: 106px;
|
|
top: 8px;
|
|
bottom: 0;
|
|
width: 1px;
|
|
background: var(--line);
|
|
}
|
|
|
|
.timeline-item:last-child::before {
|
|
display: none;
|
|
}
|
|
|
|
.time {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.timeline-body {
|
|
position: relative;
|
|
padding-left: 22px;
|
|
}
|
|
|
|
.timeline-body::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: -1px;
|
|
top: 4px;
|
|
width: 9px;
|
|
height: 9px;
|
|
border: 2px solid white;
|
|
border-radius: 50%;
|
|
background: var(--teal);
|
|
box-shadow: 0 0 0 1px var(--teal);
|
|
}
|
|
|
|
.timeline-body strong {
|
|
display: block;
|
|
margin-bottom: 7px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.timeline-body p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
}
|
|
|
|
.control-pane {
|
|
padding: 22px;
|
|
border-left: 1px solid var(--line);
|
|
background: #fafbfb;
|
|
}
|
|
|
|
.control-group {
|
|
margin-bottom: 18px;
|
|
}
|
|
|
|
.control-group h4 {
|
|
margin: 0 0 10px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.control-list {
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
.control-list button {
|
|
width: 100%;
|
|
text-align: left;
|
|
}
|
|
|
|
.dept-app {
|
|
display: grid;
|
|
grid-template-columns: 240px 1fr;
|
|
min-height: 660px;
|
|
}
|
|
|
|
.dept-main {
|
|
display: grid;
|
|
grid-template-rows: auto auto 1fr;
|
|
min-width: 0;
|
|
}
|
|
|
|
.load-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, 1fr);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.load-cell {
|
|
min-height: 92px;
|
|
padding: 16px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.load-cell:last-child {
|
|
border-right: 0;
|
|
}
|
|
|
|
.load-cell b {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
font-size: 24px;
|
|
}
|
|
|
|
.load-cell span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.member-load {
|
|
display: grid;
|
|
grid-template-columns: 1.2fr 1fr;
|
|
min-height: 474px;
|
|
}
|
|
|
|
.member-list {
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.member-row {
|
|
display: grid;
|
|
grid-template-columns: 34px 1fr auto;
|
|
gap: 12px;
|
|
align-items: center;
|
|
min-height: 64px;
|
|
padding: 0 18px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.avatar {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 34px;
|
|
height: 34px;
|
|
border-radius: 50%;
|
|
background: var(--paper-2);
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.member-row strong {
|
|
display: block;
|
|
margin-bottom: 4px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.member-row span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.heatmap {
|
|
padding: 18px;
|
|
}
|
|
|
|
.heatmap-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(7, 1fr);
|
|
gap: 8px;
|
|
}
|
|
|
|
.heat {
|
|
aspect-ratio: 1;
|
|
border-radius: 6px;
|
|
background: var(--paper-2);
|
|
}
|
|
|
|
.heat.low {
|
|
background: var(--green-soft);
|
|
}
|
|
|
|
.heat.mid {
|
|
background: var(--amber-soft);
|
|
}
|
|
|
|
.heat.high {
|
|
background: var(--red-soft);
|
|
}
|
|
|
|
.flow-strip {
|
|
display: grid;
|
|
grid-template-columns: repeat(6, 1fr);
|
|
gap: 1px;
|
|
overflow: hidden;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius);
|
|
background: var(--line);
|
|
margin-bottom: 34px;
|
|
}
|
|
|
|
.flow-step {
|
|
min-height: 96px;
|
|
padding: 16px;
|
|
background: var(--paper);
|
|
}
|
|
|
|
.flow-step b {
|
|
display: block;
|
|
margin-bottom: 8px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.flow-step span {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
@media (max-width: 1160px) {
|
|
.board-head,
|
|
.split-board {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.board-links {
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.principles,
|
|
.metrics,
|
|
.flow-strip,
|
|
.load-grid {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
|
|
.dispatch-app,
|
|
.detail-app {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.sidebar,
|
|
.inspector,
|
|
.issue-summary-pane,
|
|
.control-pane {
|
|
border-right: 0;
|
|
border-left: 0;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.queue-grid,
|
|
.work-list,
|
|
.member-load {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.queue-main,
|
|
.work-column,
|
|
.member-list {
|
|
border-right: 0;
|
|
}
|
|
|
|
.table-head {
|
|
display: none;
|
|
}
|
|
|
|
.issue-row {
|
|
grid-template-columns: 1fr;
|
|
gap: 10px;
|
|
min-height: auto;
|
|
padding: 14px 18px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
.page {
|
|
width: min(100vw - 20px, 1480px);
|
|
padding-top: 18px;
|
|
}
|
|
|
|
.principles,
|
|
.metrics,
|
|
.flow-strip,
|
|
.load-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.client-app,
|
|
.dept-app {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.topbar,
|
|
.timeline-head {
|
|
grid-template-columns: 1fr;
|
|
align-items: start;
|
|
}
|
|
|
|
.actions {
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.timeline-item {
|
|
grid-template-columns: 72px 1fr;
|
|
}
|
|
|
|
.timeline-item::before {
|
|
left: 86px;
|
|
}
|
|
}
|
|
|
|
html.capture-mode .page {
|
|
padding: 18px 0;
|
|
}
|
|
|
|
html.capture-mode .board-head,
|
|
html.capture-mode .principles,
|
|
html.capture-mode .flow-strip,
|
|
html.capture-mode .shot:not(.capture-target) {
|
|
display: none;
|
|
}
|
|
|
|
html.capture-mode .shot.capture-target {
|
|
margin: 0;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main class="page">
|
|
<header class="board-head">
|
|
<div>
|
|
<h1>Issue Hub AI 中心调度平台</h1>
|
|
<p>
|
|
从提交、AI 分析、中心派发、部门分派、个人处理到验收关闭的界面方案。主界面优先服务调度效率、状态透明和责任追踪。
|
|
</p>
|
|
</div>
|
|
<nav class="board-links" aria-label="设计产物链接">
|
|
<a href="./ai-dispatch-issue-platform-prd.md">PRD</a>
|
|
<a href="./ai-dispatch-flowcharts.md">流程图</a>
|
|
</nav>
|
|
</header>
|
|
|
|
<section class="principles" aria-label="设计原则">
|
|
<div class="principle">
|
|
<strong>工作台优先</strong>
|
|
<span>第一屏直接进入队列、风险、派单建议和处理动作。</span>
|
|
</div>
|
|
<div class="principle">
|
|
<strong>AI 可解释</strong>
|
|
<span>每个建议都显示理由、置信度和可修改入口。</span>
|
|
</div>
|
|
<div class="principle">
|
|
<strong>过程可追踪</strong>
|
|
<span>状态变化、评论、转派和提醒全部写入时间线。</span>
|
|
</div>
|
|
<div class="principle">
|
|
<strong>角色分层</strong>
|
|
<span>中心看全局,部门看负载,个人看待办。</span>
|
|
</div>
|
|
<div class="principle">
|
|
<strong>低干扰提醒</strong>
|
|
<span>风险醒目呈现,但不让常规问题淹没操作区。</span>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="flow-strip" aria-label="MVP 主流程">
|
|
<div class="flow-step">
|
|
<b>1. 提交</b>
|
|
<span>标题、描述、附件、影响范围进入中心。</span>
|
|
</div>
|
|
<div class="flow-step">
|
|
<b>2. AI 分析</b>
|
|
<span>摘要、分类、严重程度、责任部门建议。</span>
|
|
</div>
|
|
<div class="flow-step">
|
|
<b>3. 中心派发</b>
|
|
<span>采纳 AI 或人工调整后派到个人或部门。</span>
|
|
</div>
|
|
<div class="flow-step">
|
|
<b>4. 部门分派</b>
|
|
<span>负责人按技能、负载和 SLA 指派处理人。</span>
|
|
</div>
|
|
<div class="flow-step">
|
|
<b>5. 处理协作</b>
|
|
<span>接单、评论、转派、请求协作、完成。</span>
|
|
</div>
|
|
<div class="flow-step">
|
|
<b>6. 验收复盘</b>
|
|
<span>提交人确认,AI 生成总结和知识沉淀建议。</span>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="shot" id="dispatch-console">
|
|
<div class="shot-title">
|
|
<h2>01 中心调度台</h2>
|
|
<span>调度员确认 AI 建议、处理待派发和高风险问题</span>
|
|
</div>
|
|
<div class="app-shell dispatch-app">
|
|
<aside class="sidebar">
|
|
<div class="brand"><span class="mark">IH</span> Issue Hub AI</div>
|
|
<div class="nav">
|
|
<div class="nav-item active"><span>中心调度</span><span class="count">18</span></div>
|
|
<div class="nav-item"><span>问题池</span><span class="count">76</span></div>
|
|
<div class="nav-item"><span>部门队列</span><span class="count">24</span></div>
|
|
<div class="nav-item"><span>提醒升级</span><span class="count">9</span></div>
|
|
<div class="nav-item"><span>知识复盘</span><span class="count">12</span></div>
|
|
<div class="nav-item"><span>规则配置</span><span class="count">6</span></div>
|
|
</div>
|
|
<div class="sync-box">
|
|
<strong>AI 调度模式</strong>
|
|
<p>建议确认模式,低风险问题可批量采纳。</p>
|
|
<div class="meter"><i></i></div>
|
|
</div>
|
|
</aside>
|
|
|
|
<section class="workspace">
|
|
<header class="topbar">
|
|
<div>
|
|
<h3>中心调度台</h3>
|
|
<p>今日新增 42 个问题,9 个即将超时,AI 推荐采纳率 78%。</p>
|
|
</div>
|
|
<div class="actions">
|
|
<button class="ghost">筛选</button>
|
|
<button>批量派发</button>
|
|
<button class="primary">新建问题</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="metrics">
|
|
<div class="metric"><b>18</b><span>待派发</span><div class="trend">较昨日 -6</div></div>
|
|
<div class="metric"><b>9</b><span>SLA 风险</span><div class="trend" style="color: var(--amber)">4 个高优先级</div></div>
|
|
<div class="metric"><b>76</b><span>处理中</span><div class="trend">平均响应 23 分钟</div></div>
|
|
<div class="metric"><b>12</b><span>跨部门协作</span><div class="trend" style="color: var(--blue)">需中心关注</div></div>
|
|
<div class="metric"><b>78%</b><span>AI 建议采纳率</span><div class="trend">近 7 日稳定</div></div>
|
|
</div>
|
|
|
|
<div class="queue-grid">
|
|
<div class="queue-main">
|
|
<div class="filter-row">
|
|
<span class="chip active">全部待派发</span>
|
|
<span class="chip">高风险</span>
|
|
<span class="chip">信息不足</span>
|
|
<span class="chip">跨部门</span>
|
|
<span class="chip">AI 高置信</span>
|
|
</div>
|
|
<div class="issue-table">
|
|
<div class="table-head">
|
|
<span>问题</span><span>AI 建议</span><span>SLA</span><span>置信度</span><span>动作</span>
|
|
</div>
|
|
<div class="issue-row selected">
|
|
<div class="issue-title">
|
|
<strong>客户批量导入后订单状态未同步</strong>
|
|
<small>#IH-2026-0148 · 客服提交 · 12 分钟前</small>
|
|
</div>
|
|
<span class="tag teal">研发 / 订单组</span>
|
|
<span class="tag red">2 小时</span>
|
|
<div class="confidence"><span>92%</span><div class="mini-meter"><i style="width: 92%"></i></div></div>
|
|
<button class="primary">派发</button>
|
|
</div>
|
|
<div class="issue-row">
|
|
<div class="issue-title">
|
|
<strong>门店日报导出缺少库存损耗字段</strong>
|
|
<small>#IH-2026-0147 · 实施提交 · 31 分钟前</small>
|
|
</div>
|
|
<span class="tag blue">产品 / 报表</span>
|
|
<span class="tag amber">4 小时</span>
|
|
<div class="confidence"><span>81%</span><div class="mini-meter"><i style="width: 81%"></i></div></div>
|
|
<button>确认</button>
|
|
</div>
|
|
<div class="issue-row">
|
|
<div class="issue-title">
|
|
<strong>审批消息重复推送到同一用户</strong>
|
|
<small>#IH-2026-0146 · 运维提交 · 44 分钟前</small>
|
|
</div>
|
|
<span class="tag teal">平台 / 消息</span>
|
|
<span class="tag red">1 小时</span>
|
|
<div class="confidence"><span>88%</span><div class="mini-meter"><i style="width: 88%"></i></div></div>
|
|
<button>确认</button>
|
|
</div>
|
|
<div class="issue-row">
|
|
<div class="issue-title">
|
|
<strong>财务月结凭证生成失败,缺少异常明细</strong>
|
|
<small>#IH-2026-0145 · 财务提交 · 1 小时前</small>
|
|
</div>
|
|
<span class="tag amber">需人工分诊</span>
|
|
<span class="tag amber">8 小时</span>
|
|
<div class="confidence"><span>56%</span><div class="mini-meter"><i style="width: 56%; background: var(--amber)"></i></div></div>
|
|
<button>分诊</button>
|
|
</div>
|
|
<div class="issue-row">
|
|
<div class="issue-title">
|
|
<strong>新员工账号已建但无法访问移动端</strong>
|
|
<small>#IH-2026-0144 · 人事提交 · 2 小时前</small>
|
|
</div>
|
|
<span class="tag blue">运维 / 账号</span>
|
|
<span class="tag amber">6 小时</span>
|
|
<div class="confidence"><span>74%</span><div class="mini-meter"><i style="width: 74%"></i></div></div>
|
|
<button>确认</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<aside class="side-list">
|
|
<h4>提醒升级</h4>
|
|
<div class="event"><span class="dot" style="background: var(--red)"></span><div><strong>审批消息重复推送</strong><span>还有 18 分钟超时,已提醒平台负责人。</span></div></div>
|
|
<div class="event"><span class="dot" style="background: var(--amber)"></span><div><strong>财务月结凭证失败</strong><span>AI 置信度低,建议人工分诊。</span></div></div>
|
|
<div class="event"><span class="dot" style="background: var(--blue)"></span><div><strong>报表字段缺失</strong><span>相似问题 3 个,可合并查看历史方案。</span></div></div>
|
|
</aside>
|
|
</div>
|
|
</section>
|
|
|
|
<aside class="inspector">
|
|
<div>
|
|
<span class="section-label">AI 推荐</span>
|
|
<div class="ai-panel">
|
|
<div class="ai-head">
|
|
<b>派发到研发部 / 订单组 / 陈远</b>
|
|
<span>置信度 92%,预计首次响应 20 分钟。</span>
|
|
</div>
|
|
<div class="route">
|
|
<div class="route-step"><i>1</i><div><strong>分类判断</strong><span>订单状态同步异常,匹配订单服务与批量导入模块。</span></div></div>
|
|
<div class="route-step"><i>2</i><div><strong>历史匹配</strong><span>近 30 日有 2 个相似问题,均由订单组解决。</span></div></div>
|
|
<div class="route-step"><i>3</i><div><strong>负载判断</strong><span>陈远当前 3 个处理中,低于组内平均负载。</span></div></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="factor-list">
|
|
<div class="factor"><span>部门职责匹配</span><strong>96%</strong></div>
|
|
<div class="factor"><span>相似问题命中</span><strong>89%</strong></div>
|
|
<div class="factor"><span>人员负载适配</span><strong>84%</strong></div>
|
|
<div class="factor"><span>SLA 风险</span><strong style="color: var(--red)">高</strong></div>
|
|
</div>
|
|
</div>
|
|
<div></div>
|
|
<div class="inspector-actions">
|
|
<button>退回补充</button>
|
|
<button class="primary">采纳派发</button>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="shot" id="handler-client">
|
|
<div class="shot-title">
|
|
<h2>02 处理人客户端 + 移动提交</h2>
|
|
<span>个人客户端专注待办,移动端用于快速提交和补充</span>
|
|
</div>
|
|
<div class="split-board">
|
|
<div class="app-shell client-app">
|
|
<aside class="sidebar">
|
|
<div class="brand"><span class="mark">IH</span> 我的工作台</div>
|
|
<div class="nav">
|
|
<div class="nav-item active"><span>我的待办</span><span class="count">7</span></div>
|
|
<div class="nav-item"><span>我提交的</span><span class="count">14</span></div>
|
|
<div class="nav-item"><span>待我补充</span><span class="count">2</span></div>
|
|
<div class="nav-item"><span>已完成</span><span class="count">31</span></div>
|
|
</div>
|
|
<div class="sync-box">
|
|
<strong>今日节奏</strong>
|
|
<p>3 个问题临近 SLA,1 个协作请求未响应。</p>
|
|
<div class="meter"><i style="width: 58%"></i></div>
|
|
</div>
|
|
</aside>
|
|
|
|
<section class="client-main">
|
|
<header class="topbar">
|
|
<div>
|
|
<h3>我的待办</h3>
|
|
<p>按 SLA、优先级和依赖状态排序,默认显示需要动作的问题。</p>
|
|
</div>
|
|
<div class="actions">
|
|
<button>同步</button>
|
|
<button class="primary">提交问题</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="work-list">
|
|
<div class="work-column">
|
|
<div class="filter-row">
|
|
<span class="chip active">待动作</span>
|
|
<span class="chip">处理中</span>
|
|
<span class="chip">等待协作</span>
|
|
</div>
|
|
<div class="compact-item active">
|
|
<span class="tag red">高优先级</span>
|
|
<strong>客户批量导入后订单状态未同步</strong>
|
|
<p>#IH-2026-0148 · 首次响应剩余 18 分钟</p>
|
|
</div>
|
|
<div class="compact-item">
|
|
<span class="tag amber">等待协作</span>
|
|
<strong>审批消息重复推送到同一用户</strong>
|
|
<p>平台组请求协助排查消息幂等。</p>
|
|
</div>
|
|
<div class="compact-item">
|
|
<span class="tag blue">待补充</span>
|
|
<strong>报表导出缺少库存损耗字段</strong>
|
|
<p>产品需要确认字段口径。</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="detail-preview">
|
|
<div>
|
|
<h3>客户批量导入后订单状态未同步</h3>
|
|
<div class="meta">
|
|
<span class="tag red">SLA 2 小时</span>
|
|
<span class="tag teal">订单组</span>
|
|
<span class="tag blue">AI 命中相似问题 2 个</span>
|
|
</div>
|
|
<div class="summary-block">
|
|
<p>AI 摘要:客户通过批量导入创建订单后,前端列表显示已导入,但订单状态没有进入待审核。影响 3 家门店,可能与导入任务回调或状态同步队列有关。</p>
|
|
</div>
|
|
<div class="task-steps">
|
|
<div class="task-step done"><i>1</i><div><strong>中心派发</strong><span>研发部 / 订单组 / 陈远</span></div><span class="tag green">完成</span></div>
|
|
<div class="task-step"><i>2</i><div><strong>接单并确认影响范围</strong><span>需在 18 分钟内首次响应</span></div><span class="tag red">待动作</span></div>
|
|
<div class="task-step"><i>3</i><div><strong>排查导入回调与状态队列</strong><span>AI 推荐优先检查任务 ID 关联</span></div><span class="tag blue">建议</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="actions" style="justify-content: flex-start; align-self: end">
|
|
<button>转派</button>
|
|
<button>请求协作</button>
|
|
<button class="primary">接单处理</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<aside class="phone" aria-label="移动提交界面">
|
|
<div class="phone-screen">
|
|
<div class="mobile-head">
|
|
<strong>提交问题</strong>
|
|
<span>AI 会在提交后生成摘要和缺失信息。</span>
|
|
</div>
|
|
<div class="mobile-form">
|
|
<div class="field">
|
|
<label>标题</label>
|
|
<div class="input">门店日报导出缺少库存损耗字段</div>
|
|
</div>
|
|
<div class="field">
|
|
<label>描述</label>
|
|
<div class="input large">今天导出的门店日报缺少库存损耗字段,财务无法核对日结数据。截图已上传。</div>
|
|
</div>
|
|
<div class="field">
|
|
<label>影响范围</label>
|
|
<div class="input">华东 12 家门店 · 当日结算</div>
|
|
</div>
|
|
<div class="upload-zone">截图 2 张,日志 1 份</div>
|
|
<div class="ai-hint">
|
|
<strong>AI 预检查</strong>
|
|
<span>可能属于报表字段配置问题,建议补充报表模板版本。</span>
|
|
</div>
|
|
<button class="primary" style="width: 100%; min-height: 44px">提交到中心</button>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="shot" id="issue-detail">
|
|
<div class="shot-title">
|
|
<h2>03 问题详情页</h2>
|
|
<span>把问题上下文、处理时间线和下一步动作放在同一屏</span>
|
|
</div>
|
|
<div class="app-shell detail-app">
|
|
<aside class="issue-summary-pane">
|
|
<span class="tag red">高优先级 · SLA 2 小时</span>
|
|
<h3>客户批量导入后订单状态未同步</h3>
|
|
<p>影响 3 家门店的导入订单,列表显示已导入但状态未进入待审核。</p>
|
|
<div class="kv">
|
|
<div><span>编号</span><strong>#IH-2026-0148</strong></div>
|
|
<div><span>提交人</span><strong>客服 · 林悦</strong></div>
|
|
<div><span>当前负责人</span><strong>研发 · 陈远</strong></div>
|
|
<div><span>当前状态</span><strong>待接单</strong></div>
|
|
<div><span>首次响应</span><strong style="color: var(--red)">剩余 18 分钟</strong></div>
|
|
</div>
|
|
</aside>
|
|
|
|
<section class="timeline-pane">
|
|
<header class="timeline-head">
|
|
<h3>处理时间线</h3>
|
|
<div class="actions">
|
|
<button>添加评论</button>
|
|
<button class="primary">接单处理</button>
|
|
</div>
|
|
</header>
|
|
<div class="timeline">
|
|
<div class="timeline-item">
|
|
<div class="time">09:42</div>
|
|
<div class="timeline-body">
|
|
<strong>提交人创建问题</strong>
|
|
<p>上传订单导入截图 2 张,补充影响门店 3 家。</p>
|
|
</div>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<div class="time">09:43</div>
|
|
<div class="timeline-body">
|
|
<strong>AI 完成分析</strong>
|
|
<p>识别为订单状态同步异常,推荐研发部订单组,置信度 92%。</p>
|
|
</div>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<div class="time">09:46</div>
|
|
<div class="timeline-body">
|
|
<strong>中心端采纳派发</strong>
|
|
<p>派发到研发部订单组陈远,SLA 设置为 2 小时。</p>
|
|
</div>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<div class="time">10:02</div>
|
|
<div class="timeline-body">
|
|
<strong>系统提醒首次响应</strong>
|
|
<p>距离首次响应阈值还有 18 分钟,已推送到处理人客户端。</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<aside class="control-pane">
|
|
<div class="control-group">
|
|
<h4>AI 处理建议</h4>
|
|
<div class="summary-block">
|
|
<p>优先检查批量导入任务回调状态、订单状态写入事务和同步队列消费延迟。</p>
|
|
</div>
|
|
</div>
|
|
<div class="control-group">
|
|
<h4>下一步动作</h4>
|
|
<div class="control-list">
|
|
<button class="primary">接单处理</button>
|
|
<button>请求平台组协作</button>
|
|
<button>转派给订单负责人</button>
|
|
<button>退回提交人补充</button>
|
|
</div>
|
|
</div>
|
|
<div class="control-group">
|
|
<h4>相似问题</h4>
|
|
<div class="event"><span class="dot"></span><div><strong>#IH-2026-0091</strong><span>导入后订单状态延迟 6 分钟同步。</span></div></div>
|
|
<div class="event"><span class="dot" style="background: var(--blue)"></span><div><strong>#IH-2026-0118</strong><span>批量任务回调失败导致状态未更新。</span></div></div>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="shot" id="department-pool">
|
|
<div class="shot-title">
|
|
<h2>04 部门问题池</h2>
|
|
<span>部门负责人按人员负载、技能和 SLA 分派问题</span>
|
|
</div>
|
|
<div class="app-shell dept-app">
|
|
<aside class="sidebar">
|
|
<div class="brand"><span class="mark">RD</span> 研发部</div>
|
|
<div class="nav">
|
|
<div class="nav-item active"><span>部门问题池</span><span class="count">24</span></div>
|
|
<div class="nav-item"><span>未分派</span><span class="count">6</span></div>
|
|
<div class="nav-item"><span>处理中</span><span class="count">18</span></div>
|
|
<div class="nav-item"><span>超时风险</span><span class="count">3</span></div>
|
|
<div class="nav-item"><span>成员负载</span><span class="count">8</span></div>
|
|
</div>
|
|
</aside>
|
|
|
|
<section class="dept-main">
|
|
<header class="topbar">
|
|
<div>
|
|
<h3>研发部问题池</h3>
|
|
<p>按组别、人员负载、技能标签和 SLA 风险分派。</p>
|
|
</div>
|
|
<div class="actions">
|
|
<button>只看未分派</button>
|
|
<button class="primary">批量分派</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="load-grid">
|
|
<div class="load-cell"><b>24</b><span>部门问题</span></div>
|
|
<div class="load-cell"><b>6</b><span>未分派</span></div>
|
|
<div class="load-cell"><b>3</b><span>超时风险</span></div>
|
|
<div class="load-cell"><b>71%</b><span>AI 分派建议命中</span></div>
|
|
</div>
|
|
|
|
<div class="member-load">
|
|
<div class="member-list">
|
|
<div class="member-row">
|
|
<span class="avatar">陈</span>
|
|
<div><strong>陈远 · 订单组</strong><span>3 个处理中,适合订单同步类</span></div>
|
|
<span class="tag green">低负载</span>
|
|
</div>
|
|
<div class="member-row">
|
|
<span class="avatar">周</span>
|
|
<div><strong>周清 · 平台组</strong><span>6 个处理中,含 2 个高优先级</span></div>
|
|
<span class="tag amber">中负载</span>
|
|
</div>
|
|
<div class="member-row">
|
|
<span class="avatar">许</span>
|
|
<div><strong>许然 · 报表组</strong><span>8 个处理中,今日已超 1 个</span></div>
|
|
<span class="tag red">高负载</span>
|
|
</div>
|
|
<div class="member-row">
|
|
<span class="avatar">李</span>
|
|
<div><strong>李舟 · 运维组</strong><span>4 个处理中,账号类响应快</span></div>
|
|
<span class="tag green">可接单</span>
|
|
</div>
|
|
</div>
|
|
|
|
<aside class="heatmap">
|
|
<h4 style="margin: 0 0 14px">本周负载热度</h4>
|
|
<div class="heatmap-grid" aria-label="负载热度">
|
|
<span class="heat low"></span><span class="heat low"></span><span class="heat mid"></span><span class="heat mid"></span><span class="heat high"></span><span class="heat mid"></span><span class="heat low"></span>
|
|
<span class="heat low"></span><span class="heat mid"></span><span class="heat high"></span><span class="heat high"></span><span class="heat mid"></span><span class="heat low"></span><span class="heat low"></span>
|
|
<span class="heat mid"></span><span class="heat mid"></span><span class="heat low"></span><span class="heat mid"></span><span class="heat high"></span><span class="heat high"></span><span class="heat mid"></span>
|
|
<span class="heat low"></span><span class="heat low"></span><span class="heat mid"></span><span class="heat low"></span><span class="heat mid"></span><span class="heat high"></span><span class="heat mid"></span>
|
|
</div>
|
|
<div class="factor-list">
|
|
<div class="factor"><span>订单组可接单</span><strong>2 人</strong></div>
|
|
<div class="factor"><span>平台组协作请求</span><strong>4 个</strong></div>
|
|
<div class="factor"><span>建议升级</span><strong style="color: var(--red)">1 个</strong></div>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
<script>
|
|
(() => {
|
|
const shotId = new URLSearchParams(window.location.search).get("shot");
|
|
if (!shotId) return;
|
|
document.documentElement.classList.add("capture-mode");
|
|
const markTarget = () => {
|
|
const target = document.getElementById(shotId);
|
|
if (target) target.classList.add("capture-target");
|
|
};
|
|
if (document.readyState === "loading") {
|
|
document.addEventListener("DOMContentLoaded", markTarget);
|
|
} else {
|
|
markTarget();
|
|
}
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|