diff --git a/apps/frontend/src/views/admin/AdminFulfillmentBindings.css b/apps/frontend/src/views/admin/AdminFulfillmentBindings.css new file mode 100644 index 00000000..a6898ddb --- /dev/null +++ b/apps/frontend/src/views/admin/AdminFulfillmentBindings.css @@ -0,0 +1,415 @@ +.admin-panel { + display: grid; + gap: 12px; +} + +.panel-header, +.section-title-row { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: flex-start; +} + +.panel-header h1, +.section-title-row h3 { + margin: 0; + color: var(--text-primary); +} + +.panel-header p, +.section-title-row p { + margin: 6px 0 0; + color: var(--text-secondary); +} + +.panel-header { + align-items: flex-start; + flex-wrap: wrap; +} + +.panel-header-copy { + min-width: 280px; + flex: 1; +} + +.header-tags { + display: flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; +} + +.header-tag, +.section-note-chip, +.mini-stat-chip, +.summary-label, +.overview-label { + display: inline-flex; + align-items: center; + min-height: 28px; + padding: 0 10px; + border-radius: var(--radius-full); + background: rgba(37, 89, 167, 0.08); + border: 1px solid rgba(37, 89, 167, 0.12); + color: var(--color-primary-dark); + font-size: var(--text-xs); + font-weight: 700; + letter-spacing: 0.04em; +} + +.header-actions { + display: flex; + gap: 10px; +} + +.overview-card, +.table-card, +.empty-block, +.error-copy { + padding: 16px; + border-radius: var(--radius-xl); + background: rgba(255, 255, 255, 0.94); + border: 1px solid rgba(86, 108, 138, 0.1); +} + +.table-card--dense { + padding: 14px 16px 16px; +} + +.overview-card { + display: grid; + gap: 12px; +} + +.overview-file { + display: grid; + gap: 6px; +} + +.overview-file code { + display: inline-flex; + width: 100%; + max-width: 100%; + padding: 8px 12px; + border-radius: 14px; + background: rgba(15, 23, 42, 0.05); + color: var(--text-primary); + word-break: break-all; +} + +.overview-stats { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 10px; +} + +.overview-stat { + display: grid; + gap: 4px; + padding: 12px 14px; + border-radius: var(--radius-lg); + background: #f8fafc; + border: 1px solid rgba(148, 163, 184, 0.14); +} + +.overview-stat span { + color: var(--text-secondary); + font-size: var(--text-xs); + font-weight: 700; +} + +.overview-stat strong { + color: var(--text-primary); + font-size: 22px; + line-height: 1.1; +} + +.overview-notes { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.overview-note { + display: inline-flex; + align-items: center; + min-height: 32px; + padding: 0 12px; + border-radius: var(--radius-full); + background: rgba(15, 23, 42, 0.04); + color: var(--text-secondary); + font-size: var(--text-xs); + font-weight: 600; +} + +.section-title-row--tight { + align-items: center; +} + +.section-header-tools { + display: flex; + flex-wrap: wrap; + gap: 12px; + justify-content: flex-end; + align-items: center; +} + +.section-mini-stats, +.section-action-group { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.lookup-toolbar, +.lookup-summary { + display: grid; + gap: 12px; +} + +.lookup-toolbar { + grid-template-columns: 96px 110px minmax(140px, 1fr) minmax(180px, 1.2fr) 136px; + align-items: end; +} + +.field-block--action :deep(.el-button) { + width: 100%; +} + +.toolbar-hint { + margin: 10px 0 0; + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.lookup-summary { + margin-top: 14px; + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.lookup-summary-item { + display: grid; + gap: 6px; + padding: 12px 14px; + border-radius: var(--radius-lg); + background: #f8fafc; + border: 1px solid rgba(148, 163, 184, 0.14); +} + +.lookup-summary-item strong { + color: var(--text-primary); +} + +.binding-card { + margin-top: 12px; + padding: 14px; + border-radius: var(--radius-lg); + background: #f8fafc; + border: 1px solid rgba(148, 163, 184, 0.18); +} + +.binding-card--invalid { + border-color: rgba(220, 38, 38, 0.3); + box-shadow: 0 0 0 4px rgba(254, 226, 226, 0.85); +} + +.binding-header { + display: flex; + justify-content: space-between; + gap: 12px; + align-items: flex-start; + margin-bottom: 10px; +} + +.binding-summary { + display: grid; + gap: 4px; +} + +.binding-title-row { + display: flex; + gap: 10px; + align-items: center; + flex-wrap: wrap; + color: var(--text-primary); +} + +.binding-subtle { + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.binding-status-chip { + display: inline-flex; + align-items: center; + border-radius: var(--radius-full); + padding: 2px 10px; + background: #fff1f2; + color: #be123c; + font-size: var(--text-xs); + font-weight: 700; +} + +.binding-status-chip--done { + background: #ecfdf3; + color: #027a48; +} + +.collapse-button { + border: 1px solid rgba(86, 108, 138, 0.18); + background: rgba(255, 255, 255, 0.96); + color: var(--text-primary); + border-radius: var(--radius-full); + padding: 7px 12px; + font: inherit; + cursor: pointer; +} + +.binding-collapsed-preview { + display: grid; + gap: 6px; + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.binding-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px 12px; +} + +.validation-banner { + margin: 12px 0 0; + padding: 10px 12px; + border-radius: 14px; + background: #fff4f2; + border: 1px solid rgba(244, 63, 94, 0.18); + color: var(--color-danger); + font-weight: 600; +} + +.field-block { + display: grid; + gap: 6px; +} + +.field-block span { + color: var(--text-secondary); + font-size: var(--text-xs); + font-weight: 700; +} + +.field-help { + color: var(--text-secondary); + font-size: var(--text-xs); + line-height: 1.5; +} + +.field-wide { + grid-column: 1 / -1; +} + +.text-input { + width: 100%; + min-height: 40px; + padding: 0 12px; + border-radius: 14px; + border: 1px solid rgba(86, 108, 138, 0.18); + background: rgba(255, 255, 255, 0.96); +} + +.text-input--invalid { + border-color: rgba(220, 38, 38, 0.45); + background: #fff8f8; +} + +.text-input--invalid:focus { + outline: none; + border-color: rgba(220, 38, 38, 0.6); + box-shadow: 0 0 0 3px rgba(254, 226, 226, 0.95); +} + +.text-input--readonly { + color: var(--text-secondary); + background: rgba(148, 163, 184, 0.08); +} + +.binding-inline-error { + margin: 10px 0 0; + color: var(--color-danger); + font-size: var(--text-sm); + font-weight: 600; +} + +.binding-actions { + margin-top: 10px; + display: flex; + justify-content: space-between; + gap: 12px; + align-items: center; +} + +.checkbox-line { + display: inline-flex; + gap: 8px; + align-items: center; + color: var(--text-secondary); +} + +.data-table { + width: 100%; + border-collapse: collapse; + margin-top: 12px; +} + +.data-table th, +.data-table td { + padding: 12px 10px; + text-align: left; + border-bottom: 1px solid rgba(86, 108, 138, 0.08); + color: var(--text-primary); + vertical-align: top; +} + +.data-table th { + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.cell-stack { + display: grid; + gap: 4px; +} + +.cell-subtle { + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.empty-block, +.empty-inline { + color: var(--text-secondary); +} + +.error-copy { + color: var(--color-danger); +} + +@media (max-width: 900px) { + .panel-header, + .section-title-row, + .section-header-tools, + .binding-actions, + .binding-header { + flex-direction: column; + align-items: stretch; + } + + .overview-stats, + .lookup-toolbar, + .lookup-summary, + .binding-grid { + grid-template-columns: 1fr; + } +} diff --git a/apps/frontend/src/views/admin/AdminFulfillmentBindingsView.vue b/apps/frontend/src/views/admin/AdminFulfillmentBindingsView.vue index 4cebc7c5..93a4d806 100644 --- a/apps/frontend/src/views/admin/AdminFulfillmentBindingsView.vue +++ b/apps/frontend/src/views/admin/AdminFulfillmentBindingsView.vue @@ -902,420 +902,4 @@ onMounted(loadConfigs) - + diff --git a/apps/frontend/src/views/admin/AdminInventoryView.vue b/apps/frontend/src/views/admin/AdminInventoryView.vue index 41348d2d..a889b329 100644 --- a/apps/frontend/src/views/admin/AdminInventoryView.vue +++ b/apps/frontend/src/views/admin/AdminInventoryView.vue @@ -281,20 +281,15 @@ onMounted(async () => { await Promise.all([loadInventoryItems(), loadInventorySk
-
@@ -314,12 +309,11 @@ onMounted(async () => { await Promise.all([loadInventoryItems(), loadInventorySk
- @@ -385,42 +379,39 @@ onMounted(async () => { await Promise.all([loadInventoryItems(), loadInventorySk - - + + + + - + - + diff --git a/apps/frontend/src/views/admin/AdminOrdersView.vue b/apps/frontend/src/views/admin/AdminOrdersView.vue index 77c9e7f1..7d908e57 100644 --- a/apps/frontend/src/views/admin/AdminOrdersView.vue +++ b/apps/frontend/src/views/admin/AdminOrdersView.vue @@ -114,28 +114,22 @@ onMounted(loadOrders) -
+ +
- - + + - + 查询
- + -
当前页 已支付 {{ summary.paidCount }} @@ -160,7 +153,7 @@ onMounted(loadOrders) -
+ @@ -171,78 +164,74 @@ onMounted(loadOrders) 第 {{ pagination.page }} 页,当前展示 {{ items.length }} 条
-
-
-
-
- - {{ item.platformOrderId }} + + + + + + + + + + + + + + + + + + + + - +
@@ -262,41 +251,33 @@ onMounted(loadOrders) .orders-page { display: grid; gap: 0; } .total-badge { - min-height: 34px; - padding: 0 14px; - border-radius: var(--radius-full); - background: var(--bg-surface); - border: 1px solid var(--border-default); - color: var(--text-secondary); - font-size: var(--text-xs); - font-weight: 700; display: inline-flex; align-items: center; + min-height: 32px; + padding: 0 12px; + border: 1px solid rgba(37, 89, 167, 0.14); + border-radius: var(--radius-full); + background: rgba(37, 89, 167, 0.08); + color: #2559a7; + font-size: var(--text-xs); + font-weight: 700; } -.filter-panel { - margin-top: var(--space-4); - padding: 0; -} +.section-card { margin-top: var(--space-4); } + +.card-header { display: flex; justify-content: space-between; gap: var(--space-3); align-items: flex-end; } +.card-title { color: var(--text-primary); font-size: var(--text-lg); font-weight: 600; } +.card-desc { color: var(--text-secondary); font-size: var(--text-sm); } .filter-grid { display: grid; - grid-template-columns: minmax(220px, 1.25fr) minmax(136px, 0.6fr) minmax(220px, 1fr) minmax(390px, 1.55fr) auto; + grid-template-columns: minmax(200px, 1fr) minmax(130px, 0.6fr) minmax(180px, 0.9fr) minmax(320px, 1.4fr) minmax(150px, 0.55fr); gap: var(--space-3); align-items: center; } .filter-control { width: 100%; min-width: 0; } -.date-range-filter { - width: 100%; - min-width: 0; -} -.filter-buttons { - display: flex; - gap: 10px; - min-width: 156px; - justify-content: flex-end; -} +.filter-buttons { display: flex; gap: 10px; min-width: 156px; justify-content: flex-end; } .summary-strip { display: flex; @@ -308,13 +289,7 @@ onMounted(loadOrders) flex-wrap: wrap; } -.summary-title { - color: var(--text-secondary); - font-size: var(--text-xs); - font-weight: 700; - margin-right: 2px; -} - +.summary-title { color: var(--text-secondary); font-size: var(--text-xs); font-weight: 700; margin-right: 2px; } .summary-metric { display: inline-flex; align-items: center; @@ -328,7 +303,6 @@ onMounted(loadOrders) font-size: var(--text-xs); font-weight: 700; } - .summary-metric strong { color: var(--text-primary); font-size: var(--text-base); line-height: 1; } .summary-metric[data-tone='success'] { color: var(--color-success-dark); background: var(--color-success-light); border-color: #bbf7d0; } .summary-metric[data-tone='danger'] { color: var(--color-danger-dark); background: var(--color-danger-light); border-color: #fecaca; } @@ -336,47 +310,35 @@ onMounted(loadOrders) .summary-metric[data-tone='warning'] { color: var(--color-warning-dark); background: var(--color-warning-light); border-color: #fed7aa; } .summary-metric[data-tone='muted'] { color: var(--text-secondary); background: #f8fafc; border-color: var(--border-default); } -.orders-section { - margin-top: var(--space-4); - overflow: visible; -} - .orders-toolbar { margin-bottom: var(--space-3); } .orders-toolbar strong { display: block; color: var(--text-primary); font-size: var(--text-base); } .orders-toolbar span { display: block; margin-top: 4px; color: var(--text-secondary); font-size: var(--text-xs); } -.order-list { display: grid; gap: var(--space-3); } - -.order-card { - display: grid; - gap: 12px; - padding: 12px 14px; - border-radius: var(--radius-md); - background: rgba(247, 250, 255, 0.42); +.orders-table { + width: 100%; + overflow: hidden; border: 1px solid var(--border-default); - transition: border-color 0.16s ease, box-shadow 0.16s ease; + border-radius: var(--radius-sm); + --el-table-bg-color: transparent; + --el-table-tr-bg-color: transparent; + --el-table-header-bg-color: rgba(239, 246, 255, 0.72); + --el-table-row-hover-bg-color: rgba(239, 246, 255, 0.72); + --el-table-border-color: rgba(86, 108, 138, 0.1); +} +.orders-table :deep(.el-table__inner-wrapper::before) { display: none; } +.orders-table :deep(th.el-table__cell) { + height: 42px; + background: var(--el-table-header-bg-color); + color: var(--text-secondary); + font-weight: 700; } -.order-card:hover { - border-color: var(--border-hover); - background: rgba(247, 250, 255, 0.68); - box-shadow: 0 1px 4px rgba(30, 49, 78, 0.04); -} - -.order-card-top { - display: flex; - align-items: center; - justify-content: space-between; - gap: var(--space-3); -} - -.order-identity { min-width: 0; display: grid; gap: var(--space-2); } +.cell-stack { display: grid; gap: 5px; } .order-no { display: inline-block; max-width: 100%; - font-size: var(--text-xl); - line-height: 1.1; + font-size: var(--text-base); font-weight: 800; color: var(--text-primary); overflow: hidden; @@ -386,30 +348,7 @@ onMounted(loadOrders) } .order-no:hover { color: var(--color-primary-dark); } -.order-meta-row { display: flex; flex-wrap: wrap; gap: var(--space-2); } - -.order-top-actions { - display: flex; - align-items: center; - gap: var(--space-2); - flex-shrink: 0; -} - -.detail-link { - display: inline-flex; - align-items: center; - min-height: 26px; - padding: 0 10px; - border-radius: var(--radius-full); - border: 1px solid var(--border-default); - color: var(--color-primary-dark); - background: var(--color-primary-light); - font-size: var(--text-xs); - font-weight: 700; - text-decoration: none; -} - -.detail-link:hover { border-color: var(--border-hover); background: #dbeafe; } +.cell-meta-row { display: flex; flex-wrap: wrap; gap: var(--space-2); } .compact-chip { display: inline-flex; @@ -424,43 +363,21 @@ onMounted(loadOrders) font-size: var(--text-xs); font-weight: 600; } - .compact-chip--muted { color: var(--text-muted); } -.order-row-grid { - display: grid; - grid-template-columns: minmax(150px, 0.95fr) minmax(190px, 1.25fr) minmax(230px, 1.35fr) minmax(170px, 1fr) minmax(150px, 0.9fr); - column-gap: var(--space-4); - row-gap: var(--space-3); - min-width: 0; - align-items: start; -} - -.order-field { - display: grid; - gap: 6px; - min-width: 0; - padding-top: 10px; - border-top: 1px solid rgba(86, 108, 138, 0.1); -} - -.section-label { - color: var(--text-muted); - font-size: 11px; - font-weight: 700; - letter-spacing: 0.06em; - text-transform: uppercase; -} - -.info-cell { display: grid; gap: 5px; min-width: 0; } -.info-title { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-primary); font-weight: 700; } -.info-subline { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #475467; font-size: var(--text-xs); } +.cell-title { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-primary); font-weight: 700; } +.cell-subline { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #475467; font-size: var(--text-xs); } .amount-text { white-space: nowrap; } .status-stack { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; } .status-stack :deep(.el-tag) { max-width: 100%; } -.task-progress-inline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } +.progress-row-stack { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); + margin-top: 2px; +} .progress-chip, .follow-up-chip { @@ -474,7 +391,6 @@ onMounted(loadOrders) border: 1px solid transparent; white-space: nowrap; } - .progress-chip[data-tone='success'] { color: #0f766e; background: var(--color-success-light); border-color: #a6f4c5; } .progress-chip[data-tone='primary'] { color: var(--color-primary-dark); background: var(--color-primary-light); border-color: #b2ddff; } .progress-chip[data-tone='warning'] { color: #b54708; background: var(--color-warning-light); border-color: #fedf89; } @@ -482,27 +398,32 @@ onMounted(loadOrders) .follow-up-chip[data-tone='warning'] { color: #b54708; background: var(--color-warning-light); border-color: #fedf89; } .follow-up-chip[data-tone='danger'] { color: var(--color-danger-dark); background: var(--color-danger-light); border-color: #fecaca; } +.detail-link { + display: inline-flex; + align-items: center; + min-height: 28px; + padding: 0 10px; + border-radius: var(--radius-full); + border: 1px solid var(--border-default); + color: var(--color-primary-dark); + background: var(--color-primary-light); + font-size: var(--text-xs); + font-weight: 700; + text-decoration: none; +} +.detail-link:hover { border-color: var(--border-hover); background: #dbeafe; } + @media (max-width: 1200px) { - .filter-grid { - grid-template-columns: minmax(200px, 1fr) minmax(132px, 0.56fr) minmax(200px, 0.9fr) minmax(340px, 1.25fr) auto; - } - .filter-buttons { justify-content: flex-end; } - .order-row-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } + .filter-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } } @media (max-width: 900px) { .filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .date-range-filter { grid-column: span 2; } .filter-buttons { justify-content: flex-start; } - .order-row-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 640px) { .filter-grid { grid-template-columns: 1fr; } - .date-range-filter { grid-column: auto; } .filter-buttons { width: 100%; } .filter-buttons :deep(.el-button) { flex: 1 1 auto; } - .order-card-top { flex-direction: column; align-items: flex-start; } - .order-top-actions { width: 100%; justify-content: space-between; } - .order-row-grid { grid-template-columns: 1fr; } - .order-no { font-size: 18px; } + .order-no { font-size: var(--text-base); } } diff --git a/apps/frontend/src/views/admin/AdminTaskDetail.css b/apps/frontend/src/views/admin/AdminTaskDetail.css new file mode 100644 index 00000000..17ea470c --- /dev/null +++ b/apps/frontend/src/views/admin/AdminTaskDetail.css @@ -0,0 +1,487 @@ +.admin-panel { + display: grid; + gap: var(--space-4); +} + +.claim-link { + color: var(--color-primary); + text-decoration: none; + word-break: break-all; +} + +.info-card, +.hero-card, +.error-copy { + padding: 18px; + border-radius: var(--radius-lg); + background: var(--bg-surface); + border: 1px solid var(--border-default); +} + +.info-card p { + margin: 10px 0 0; + color: var(--text-primary); +} + +.info-card h3 { + margin: 0 0 var(--space-3); + color: var(--text-primary); +} + +.hero-card { + display: grid; + gap: var(--space-4); + background: + radial-gradient(circle at top right, rgba(14, 165, 233, 0.12), transparent 26%), + linear-gradient(135deg, rgba(255,255,255,.98), rgba(239,246,255,.96)); +} + +.hero-copy { + display: grid; + gap: 6px; +} + +.hero-copy h2 { + margin: 0; + color: var(--text-primary); + font-size: 30px; + line-height: 1.1; +} + +.hero-copy p, +.hero-inline span, +.hero-link-row span { + color: var(--text-secondary); +} + +.hero-eyebrow { + color: var(--color-primary); + font-size: var(--text-xs); + font-weight: 700; + letter-spacing: .08em; + text-transform: uppercase; +} + +.hero-meta-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: var(--space-3); +} + +.hero-metric { + padding: 14px var(--space-4); + border-radius: 18px; + border: 1px solid var(--border-default); + background: rgba(255,255,255,.82); +} + +.hero-metric span { + display: block; + margin-bottom: var(--space-2); + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.hero-metric strong { + color: var(--text-primary); + font-size: var(--text-lg); + line-height: 1.3; + word-break: break-word; +} + +.hero-metric--blue { box-shadow: inset 0 0 0 1px rgba(59,130,246,.08); } +.hero-metric--green { box-shadow: inset 0 0 0 1px rgba(16,185,129,.08); } +.hero-metric--amber { box-shadow: inset 0 0 0 1px rgba(245,158,11,.08); } +.hero-metric--slate { box-shadow: inset 0 0 0 1px rgba(100,116,139,.08); } + +.hero-inline, +.hero-link-row { + display: flex; + flex-wrap: wrap; + gap: var(--space-3); + align-items: center; +} + +.error-copy { + color: var(--color-danger); +} + +.action-row { + display: flex; + flex-wrap: wrap; + gap: var(--space-3); +} + +.section-copy { + margin: 0 0 var(--space-3); + color: var(--text-secondary); +} + +.auto-delivery-tag-line { + display: flex; + align-items: center; +} + +.auto-delivery-note { + margin-top: 14px; + padding: 14px var(--space-4); + border-radius: var(--radius-md); + background: rgba(248,250,252,.92); + border: 1px solid var(--border-default); +} + +.auto-delivery-note p { + margin: 0 0 var(--space-2); + color: var(--text-primary); +} + +.auto-delivery-note p:last-child { + margin-bottom: 0; +} + +.data-table { + width: 100%; + border-collapse: collapse; +} + +.data-table th, +.data-table td { + padding: var(--space-3) 10px; + text-align: left; + border-bottom: 1px solid var(--border-default); +} + +.data-table th { + width: 160px; + color: var(--text-secondary); +} + +.status-stack { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); +} + +.redeem-summary-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: var(--space-3); + margin-bottom: 14px; +} + +.redeem-summary-card, +.redeem-attempt-card { + padding: 14px var(--space-4); + border-radius: var(--radius-md); + border: 1px solid var(--border-default); + background: rgba(248,250,252,.92); +} + +.redeem-summary-card span, +.redeem-attempt-grid span { + display: block; + color: var(--text-secondary); + font-size: var(--text-xs); + margin-bottom: 6px; +} + +.redeem-summary-card strong, +.redeem-attempt-grid strong { + color: var(--text-primary); +} + +.redeem-attempts { + display: grid; + gap: var(--space-3); +} + +.redeem-attempt-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-3); +} + +.redeem-outcome { + color: var(--color-primary); + font-size: var(--text-sm); + font-weight: 600; +} + +.redeem-attempt-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: var(--space-3); + margin-top: var(--space-3); +} + +.redeem-attempt-copy { + margin: var(--space-3) 0 0; + color: var(--text-primary); + line-height: 1.6; +} + +.table-empty { + text-align: center; + color: var(--text-secondary); +} + +.binding-primary { + margin-top: 4px; + color: var(--color-success); + font-size: var(--text-xs); + font-weight: 600; +} + +.binding-meta { + margin-top: 4px; + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.manual-grid { + display: grid; + gap: 14px; +} + +.field-block { + display: grid; + gap: var(--space-2); + color: var(--text-primary); + font-weight: 600; +} + +.manual-hint { + margin: 14px 0 0; + color: var(--text-secondary); +} + +.manual-summary { + margin-top: var(--space-4); + padding: 14px; + border-radius: var(--radius-md); + background: rgba(248,250,252,.9); +} + +.manual-summary p { + margin: 0 0 var(--space-2); + color: var(--text-primary); +} + +.manual-summary p:last-child { + margin-bottom: 0; +} + +.flow-card { + display: grid; + gap: var(--space-4); + background: + radial-gradient(circle at top right, rgba(37, 99, 235, 0.08), transparent 28%), + linear-gradient(180deg, rgba(255,255,255,.96), rgba(248,250,252,.96)); +} + +.flow-card-head { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 14px; +} + +.flow-head-actions { + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.kuaishou-focus-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: 14px; +} + +.flow-block { + padding: var(--space-4); + border-radius: 18px; + border: 1px solid var(--border-default); + background: rgba(248,250,252,.9); +} + +.flow-block--spotlight { + background: + linear-gradient(160deg, rgba(255,255,255,.98), rgba(239,246,255,.95)), + rgba(248,250,252,.9); +} + +.flow-block h4 { + margin: 0; + color: var(--text-primary); +} + +.flow-block p { + margin: 10px 0 0; + color: var(--text-secondary); + line-height: 1.6; +} + +.flow-meta-list { + display: grid; + gap: 10px; + margin-top: 14px; +} + +.flow-meta-list div { + display: grid; + gap: 4px; +} + +.flow-meta-list span { + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.flow-meta-list strong { + color: var(--text-primary); + word-break: break-all; +} + +.flow-meta-list--dense { + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); +} + +.flow-meta-list--two-column { + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); +} + +.spotlight-head { + display: flex; + justify-content: space-between; + gap: var(--space-3); + align-items: flex-start; +} + +.spotlight-actions { + display: flex; + align-items: center; + gap: 10px; +} + +.flow-copy { + margin: var(--space-2) 0 0; + color: var(--text-secondary); + line-height: 1.6; +} + +.flow-collapse { + display: grid; + gap: var(--space-3); +} + +.checklist-grid { + display: grid; + gap: var(--space-3); + margin-top: var(--space-4); +} + +.checklist-item { + padding: 14px var(--space-4); + border-radius: var(--radius-md); + background: rgba(255,255,255,.84); + border: 1px solid var(--border-default); +} + +.checklist-item-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-3); + margin-bottom: var(--space-2); +} + +.checklist-item-head span { + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.checklist-item strong { + color: var(--text-primary); + line-height: 1.5; +} + +.role-hero { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: var(--space-3); + margin-top: var(--space-4); +} + +.role-hero div { + padding: 14px var(--space-4); + border-radius: var(--radius-md); + background: rgba(255,255,255,.88); + border: 1px solid var(--border-default); +} + +.role-hero span { + display: block; + margin-bottom: 6px; + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.role-hero strong { + color: var(--text-primary); + font-size: var(--text-lg); + line-height: 1.35; + word-break: break-word; +} + +.role-warning { + margin: 14px 0 0; + padding: var(--space-3) 14px; + border-radius: 14px; + background: var(--color-warning-light); + color: #b54708; +} + +.event-copy { + color: var(--text-primary); +} + +.event-time { + margin-top: 6px; + color: var(--text-secondary); + font-size: var(--text-xs); +} + +.screenshot-link { + display: inline-block; + margin-bottom: var(--space-3); + color: var(--color-primary); + text-decoration: none; +} + +.screenshot-empty { + margin: 0 0 var(--space-3); + color: var(--text-secondary); +} + +.screenshot-preview { + display: block; + width: min(100%, 720px); + border-radius: 18px; + border: 1px solid var(--border-default); + box-shadow: 0 20px 48px rgba(15,23,42,.08); +} + +@media (max-width: 900px) { + .hero-inline, + .hero-link-row, + .flow-card-head, + .flow-head-actions, + .spotlight-head, + .spotlight-actions, + .checklist-item-head { + display: grid; + } +} diff --git a/apps/frontend/src/views/admin/AdminTaskDetailView.vue b/apps/frontend/src/views/admin/AdminTaskDetailView.vue index da4a381c..da783b23 100644 --- a/apps/frontend/src/views/admin/AdminTaskDetailView.vue +++ b/apps/frontend/src/views/admin/AdminTaskDetailView.vue @@ -1100,492 +1100,4 @@ onBeforeUnmount(clearScreenshotPreview) - + diff --git a/apps/frontend/src/views/admin/AdminTasksView.vue b/apps/frontend/src/views/admin/AdminTasksView.vue index 4f9064eb..3914e7e6 100644 --- a/apps/frontend/src/views/admin/AdminTasksView.vue +++ b/apps/frontend/src/views/admin/AdminTasksView.vue @@ -133,7 +133,13 @@ function resetFilters() { -
+ +
@@ -149,12 +155,12 @@ function resetFilters() { 查询
- + -
+ @@ -165,115 +171,106 @@ function resetFilters() { 第 {{ pagination.page }} 页,当前展示 {{ items.length }} 条
-
-
-
-
- - {{ item.taskNo }} + + + + + + + + + + + + + + + + + - +
@@ -293,19 +290,23 @@ function resetFilters() { .tasks-page { display: grid; gap: 0; } .total-badge { - min-height: 34px; - padding: 0 14px; - border-radius: var(--radius-full); - background: var(--bg-surface); - border: 1px solid var(--border-default); - color: var(--text-secondary); - font-size: var(--text-xs); - font-weight: 700; display: inline-flex; align-items: center; + min-height: 32px; + padding: 0 12px; + border: 1px solid rgba(37, 89, 167, 0.14); + border-radius: var(--radius-full); + background: rgba(37, 89, 167, 0.08); + color: #2559a7; + font-size: var(--text-xs); + font-weight: 700; } -.filter-panel { margin-top: var(--space-4); } +.section-card { margin-top: var(--space-4); } + +.card-header { display: flex; justify-content: space-between; gap: var(--space-3); align-items: flex-end; } +.card-title { color: var(--text-primary); font-size: var(--text-lg); font-weight: 600; } +.card-desc { color: var(--text-secondary); font-size: var(--text-sm); } .filter-grid { display: grid; @@ -313,54 +314,39 @@ function resetFilters() { gap: var(--space-3); align-items: center; } - .filter-grid :deep(.el-date-editor) { width: 100%; } -.filter-buttons { - display: flex; - gap: 10px; - justify-content: flex-end; - min-width: 156px; -} - -.tasks-section { margin-top: var(--space-4); overflow: visible; } +.filter-buttons { display: flex; gap: 10px; justify-content: flex-end; min-width: 156px; } .tasks-toolbar { margin-bottom: var(--space-3); } .tasks-toolbar strong { display: block; color: var(--text-primary); font-size: var(--text-base); } .tasks-toolbar span { display: block; margin-top: 4px; color: var(--text-secondary); font-size: var(--text-xs); } -.task-list { display: grid; gap: var(--space-3); } - -.task-card { - display: grid; - gap: 14px; - padding: 14px; - border-radius: var(--radius-md); - background: rgba(247, 250, 255, 0.42); +.tasks-table { + width: 100%; + overflow: hidden; border: 1px solid var(--border-default); - transition: border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease; + border-radius: var(--radius-sm); + --el-table-bg-color: transparent; + --el-table-tr-bg-color: transparent; + --el-table-header-bg-color: rgba(239, 246, 255, 0.72); + --el-table-row-hover-bg-color: rgba(239, 246, 255, 0.72); + --el-table-border-color: rgba(86, 108, 138, 0.1); +} +.tasks-table :deep(.el-table__inner-wrapper::before) { display: none; } +.tasks-table :deep(th.el-table__cell) { + height: 42px; + background: var(--el-table-header-bg-color); + color: var(--text-secondary); + font-weight: 700; } -.task-card:hover { - border-color: var(--border-hover); - background: rgba(247, 250, 255, 0.68); - box-shadow: 0 1px 4px rgba(30, 49, 78, 0.04); -} - -.task-card-top { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: var(--space-3); -} - -.task-identity { min-width: 0; display: grid; gap: var(--space-2); } +.cell-stack { display: grid; gap: 5px; } .task-no { display: inline-block; max-width: 100%; - font-size: var(--text-xl); - line-height: 1.1; + font-size: var(--text-base); font-weight: 800; color: var(--text-primary); overflow: hidden; @@ -370,14 +356,14 @@ function resetFilters() { } .task-no:hover { color: var(--color-primary-dark); } -.task-meta-row { display: flex; flex-wrap: wrap; gap: var(--space-2); } +.cell-meta-row { display: flex; flex-wrap: wrap; gap: var(--space-2); } .compact-chip { display: inline-flex; align-items: center; - min-height: 28px; + min-height: 24px; max-width: 100%; - padding: 0 10px; + padding: 0 9px; border-radius: var(--radius-full); background: #f4f7fb; border: 1px solid var(--border-default); @@ -385,51 +371,16 @@ function resetFilters() { font-size: var(--text-xs); font-weight: 600; } - .compact-chip--muted { color: var(--text-muted); } -.task-grid { - display: grid; - grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.35fr) minmax(0, 1fr) minmax(0, 1.15fr); - gap: var(--space-3); - min-width: 0; -} +.cell-title { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-primary); font-weight: 700; } +.cell-subline { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #475467; font-size: var(--text-xs); } +.cell-subline--strong { color: var(--text-primary); font-weight: 600; } -.task-section { - display: grid; - gap: 6px; - min-width: 0; - padding-top: 10px; - border-top: 1px solid rgba(86, 108, 138, 0.1); -} - -.task-section--actions { - grid-column: 1 / -1; - grid-template-columns: 112px minmax(0, 1fr); - align-items: center; - gap: var(--space-3); -} - -.section-label { - color: var(--text-muted); - font-size: 11px; - font-weight: 700; - letter-spacing: 0.06em; - text-transform: uppercase; -} - -.progress-cell { display: grid; gap: var(--space-2); min-width: 0; } .progress-row { display: flex; align-items: center; gap: var(--space-2); min-width: 0; } -.progress-row :deep(.el-tag) { - min-width: 0; - max-width: calc(100% - 42px); -} -.progress-row :deep(.el-tag__content) { - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} +.progress-row :deep(.el-tag) { min-width: 0; max-width: calc(100% - 42px); } +.progress-row :deep(.el-tag__content) { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .progress-label { display: inline-flex; align-items: center; @@ -446,56 +397,22 @@ function resetFilters() { flex: 0 0 auto; } -.goods-cell, .role-cell, .time-cell { display: grid; gap: 5px; min-width: 0; } -.time-line { min-width: 0; color: #475467; font-size: var(--text-xs); line-height: 1.5; } -.goods-title, .role-title { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-primary); font-weight: 700; } -.goods-subline, .role-subline { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #475467; font-size: var(--text-xs); } -.goods-subline-strong { color: var(--text-primary); font-weight: 600; } - .cell-error { display: block; min-width: 0; line-height: 1.55; color: #475467; word-break: break-word; font-size: var(--text-xs); } -.task-end { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - gap: var(--space-3); - align-items: center; - min-width: 0; -} -.action-cell { - display: flex; - flex-wrap: wrap; - gap: var(--space-2); - align-items: center; - justify-content: flex-end; - max-width: 360px; -} -.action-cell :deep(.el-button) { - flex: 0 0 auto; - margin-left: 0; -} +.action-stack { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; } +.action-stack :deep(.el-button) { flex: 0 0 auto; margin-left: 0; } @media (max-width: 1200px) { - .task-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } - .task-section--actions { - grid-template-columns: 1fr; - align-items: start; - } - .task-end { grid-template-columns: 1fr; } - .action-cell { justify-content: flex-start; max-width: none; } .filter-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .filter-buttons { justify-content: flex-start; } } @media (max-width: 900px) { - .task-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .filter-buttons { justify-content: flex-start; } } @media (max-width: 640px) { - .task-grid, .filter-grid { grid-template-columns: 1fr; } .filter-buttons { width: 100%; } .filter-buttons :deep(.el-button) { flex: 1 1 auto; } - .task-card-top { flex-direction: column; align-items: flex-start; } - .task-no { font-size: 18px; } + .task-no { font-size: var(--text-base); } }