diff --git a/web/src/assets/styles/components/enterprise-page-shell.css b/web/src/assets/styles/components/enterprise-page-shell.css new file mode 100644 index 0000000..d098090 --- /dev/null +++ b/web/src/assets/styles/components/enterprise-page-shell.css @@ -0,0 +1,438 @@ +.enterprise-list-page { + min-height: 0; + overflow: hidden; + display: flex; + flex-direction: column; + padding: 16px 18px; +} + +.enterprise-list-page .status-tabs { + flex: 0 0 auto; + display: flex; + gap: 28px; + margin-top: 14px; + border-bottom: 1px solid #dbe4ee; + overflow-x: auto; +} + +.enterprise-list-page .status-tabs button { + position: relative; + min-height: 36px; + border: 0; + background: transparent; + color: #64748b; + font-size: 14px; + font-weight: 750; + white-space: nowrap; +} + +.enterprise-list-page .status-tabs button.active { + color: var(--theme-primary-active); +} + +.enterprise-list-page .status-tabs button.active::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: -1px; + height: 3px; + border-radius: 2px 2px 0 0; + background: var(--theme-primary); +} + +.enterprise-list-page .list-toolbar { + flex: 0 0 auto; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-top: 14px; +} + +.enterprise-list-page .table-wrap { + flex: 1 1 auto; + min-height: 0; +} + +.enterprise-list-page .toolbar-actions, +.enterprise-list-page .document-actions { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; + margin-left: auto; +} + +.enterprise-list-page .filter-set { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; + min-width: 0; +} + +.enterprise-list-page .list-search { + position: relative; + width: min(280px, 100%); +} + +.enterprise-list-page .list-search .mdi { + position: absolute; + left: 12px; + top: 50%; + transform: translateY(-50%); + color: #64748b; + font-size: 15px; +} + +.enterprise-list-page .list-search input { + width: 100%; + height: 38px; + padding: 0 12px 0 36px; + border: 1px solid #d7e0ea; + border-radius: 4px; + background: #fff; + color: #0f172a; + font-size: 13px; + transition: border-color 160ms ease, box-shadow 160ms ease; +} + +.enterprise-list-page .list-search input::placeholder { + color: #8da0b4; +} + +.enterprise-list-page .list-search input:focus { + border-color: var(--theme-primary); + box-shadow: 0 0 0 3px var(--theme-focus-ring); + outline: none; +} + +.enterprise-list-page .filter-btn { + min-width: 104px; + min-height: 38px; + display: inline-flex; + align-items: center; + justify-content: space-between; + gap: 9px; + padding: 0 14px; + border: 1px solid #d7e0ea; + border-radius: 4px; + background: #fff; + color: #334155; + font-size: 14px; + font-weight: 750; + white-space: nowrap; +} + +.enterprise-list-page .filter-btn:hover, +.enterprise-list-page .document-filter.open .filter-btn { + border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.32); + color: var(--theme-primary-active); +} + +.enterprise-list-page .create-request-btn, +.enterprise-list-page .create-btn, +.enterprise-list-page .export-btn, +.enterprise-list-page .template-btn { + min-height: 40px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 0 18px; + border: 0; + border-radius: 4px; + background: var(--theme-gradient-primary); + color: #fff; + font-size: 14px; + font-weight: 800; + white-space: nowrap; + box-shadow: 0 10px 24px var(--theme-primary-shadow); + transition: transform 160ms ease, box-shadow 160ms ease, filter 160ms ease; +} + +.enterprise-list-page .create-request-btn.secondary, +.enterprise-list-page .ghost-filter-btn, +.enterprise-list-page .template-btn, +.enterprise-list-page .export-btn { + border: 1px solid #d7e0ea; + background: #fff; + color: #334155; + box-shadow: none; +} + +.enterprise-list-page .create-request-btn:hover:not(:disabled), +.enterprise-list-page .create-btn:hover:not(:disabled), +.enterprise-list-page .export-btn:hover:not(:disabled), +.enterprise-list-page .template-btn:hover:not(:disabled) { + transform: translateY(-1px); + box-shadow: 0 14px 28px var(--theme-primary-shadow); + filter: saturate(1.02); +} + +.enterprise-list-page .create-request-btn.secondary:hover:not(:disabled), +.enterprise-list-page .ghost-filter-btn:hover:not(:disabled), +.enterprise-list-page .template-btn:hover:not(:disabled), +.enterprise-list-page .export-btn:hover:not(:disabled) { + border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.32); + color: var(--theme-primary-active); + box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08); +} + +.enterprise-list-page .create-request-btn:disabled, +.enterprise-list-page .create-btn:disabled, +.enterprise-list-page .export-btn:disabled, +.enterprise-list-page .template-btn:disabled { + cursor: not-allowed; + opacity: 0.72; + transform: none; +} + +.enterprise-list-page .hint { + display: inline-flex; + align-items: center; + gap: 7px; + margin-top: 10px; + color: #64748b; + font-size: 13px; +} + +.enterprise-list-page .hint .mdi { + color: #64748b; +} + +.enterprise-list-page .table-wrap { + min-height: 400px; + margin-top: 10px; + overflow: auto; + border: 1px solid #edf2f7; + border-radius: 4px; + background: linear-gradient(180deg, #fcfeff 0%, var(--theme-primary-light-9) 100%); + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: flex-start; +} + +.enterprise-list-page .table-wrap.is-empty { + align-items: center; + justify-content: center; +} + +.enterprise-list-page .table-state { + width: 100%; + min-height: 220px; + align-self: center; +} + +.enterprise-list-page .table-state.error { + display: grid; + place-items: center; + gap: 10px; + padding: 32px; + text-align: center; +} + +.enterprise-list-page .table-state.error > .mdi { + color: var(--danger); + font-size: 30px; +} + +.enterprise-list-page .table-state.error strong { + color: var(--ink); + font-size: 15px; +} + +.enterprise-list-page .table-state.error p { + max-width: 520px; + color: var(--muted); + font-size: 13px; + line-height: 1.6; +} + +.enterprise-list-page .state-action, +.enterprise-list-page .retry-btn { + min-height: 34px; + padding: 0 12px; + border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.22); + border-radius: 4px; + background: var(--theme-primary-soft); + color: var(--theme-primary-active); + font-size: 12px; + font-weight: 750; +} + +.enterprise-list-page table { + width: 100%; + min-width: 1080px; + align-self: flex-start; + border-collapse: collapse; + table-layout: fixed; +} + +.enterprise-list-page th, +.enterprise-list-page td { + padding: 13px 12px; + border-bottom: 1px solid #edf2f7; + color: #24324a; + font-size: 14px; + line-height: 1.35; + text-align: center; + vertical-align: middle; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.enterprise-list-page th { + position: sticky; + top: 0; + z-index: 1; + background: #f7fafc; + color: #64748b; + font-size: 13px; + font-weight: 800; +} + +.enterprise-list-page tbody tr { + cursor: pointer; +} + +.enterprise-list-page tbody tr:hover, +.enterprise-list-page tbody tr.spotlight { + background: linear-gradient(90deg, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08), rgba(var(--theme-primary-rgb, 58, 124, 165), 0.03)); +} + +.enterprise-list-page tbody tr:last-child td { + border-bottom: 0; +} + +.enterprise-list-page .doc-id { + color: var(--theme-primary-active); + font-weight: 800; +} + +.enterprise-pagination { + flex: 0 0 auto; +} + +.enterprise-list-page .list-foot { + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + gap: 16px; + margin-top: 12px; +} + +.enterprise-list-page .page-summary { + color: #64748b; + font-size: 14px; + font-weight: 650; +} + +.enterprise-list-page .pager { + display: inline-flex; + justify-content: center; + gap: 6px; + padding: 4px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #f8fafc; +} + +.enterprise-list-page .pager button { + width: 32px; + height: 32px; + border: 0; + border-radius: 4px; + background: transparent; + color: #334155; + font-size: 14px; + font-weight: 800; + transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease; +} + +.enterprise-list-page .pager button:hover:not(.active) { + background: #fff; + color: var(--theme-primary-active); + box-shadow: 0 1px 4px rgba(15, 23, 42, 0.08); +} + +.enterprise-list-page .pager button.active { + background: var(--theme-primary); + color: #fff; + box-shadow: 0 8px 16px var(--theme-primary-shadow); +} + +.enterprise-list-page .pager button:disabled { + cursor: not-allowed; + opacity: 0.45; + box-shadow: none; +} + +.enterprise-list-page .page-ellipsis, +.enterprise-list-page .pager span { + color: #64748b; + font-weight: 800; +} + +.enterprise-list-page .page-size-select { + width: 112px; + justify-self: end; +} + +.enterprise-detail-page { + min-height: 0; + height: 100%; + display: grid; + grid-template-rows: minmax(0, 1fr) auto; +} + +.enterprise-detail-page .detail-scroll { + min-height: 0; + overflow: auto; +} + +.enterprise-detail-card .card-head { + align-items: flex-start; +} + +@media (max-width: 760px) { + .enterprise-list-page { + padding: 16px; + } + + .enterprise-list-page .status-tabs { + gap: 18px; + } + + .enterprise-list-page .toolbar-actions, + .enterprise-list-page .document-actions { + width: 100%; + margin-left: 0; + } + + .enterprise-list-page .filter-set, + .enterprise-list-page .list-search, + .enterprise-list-page .filter-btn, + .enterprise-list-page .create-request-btn, + .enterprise-list-page .create-btn, + .enterprise-list-page .export-btn, + .enterprise-list-page .template-btn, + .enterprise-list-page .page-size-select { + width: 100%; + } + + .enterprise-list-page .list-toolbar, + .enterprise-list-page .list-foot { + display: grid; + grid-template-columns: 1fr; + justify-items: stretch; + } + + .enterprise-list-page .pager, + .enterprise-list-page .page-size-select { + justify-self: stretch; + } +} diff --git a/web/src/assets/styles/views/approval-center-view.css b/web/src/assets/styles/views/approval-center-view.css index 842b164..f50a61d 100644 --- a/web/src/assets/styles/views/approval-center-view.css +++ b/web/src/assets/styles/views/approval-center-view.css @@ -11,9 +11,6 @@ .approval-list { min-height: 0; - display: grid; - grid-template-rows: auto auto auto minmax(0, 1fr) auto; - padding: 16px 18px; overflow: hidden; } diff --git a/web/src/assets/styles/views/logs-view.css b/web/src/assets/styles/views/logs-view.css index 077aeed..b6ec537 100644 --- a/web/src/assets/styles/views/logs-view.css +++ b/web/src/assets/styles/views/logs-view.css @@ -1,16 +1,16 @@ .logs-view { - display: grid; - grid-template-rows: minmax(0, 1fr); height: 100%; min-height: 0; + display: grid; + grid-template-rows: minmax(0, 1fr); background: transparent; } .logs-empty { + min-height: 0; display: grid; align-content: center; justify-items: center; - min-height: 0; padding: 28px 20px; text-align: center; } @@ -29,9 +29,6 @@ .system-logs-list.panel { min-height: 0; - display: grid; - grid-template-rows: auto auto minmax(0, 1fr) auto; - padding: 16px 18px; overflow: hidden; border: 0; border-radius: var(--radius); @@ -39,84 +36,14 @@ box-shadow: 0 1px 3px rgba(0, 0, 0, .10), 0 1px 2px rgba(0, 0, 0, .06); } -.system-logs-list .document-toolbar { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; -} - -.system-logs-list .filter-set, -.system-logs-list .document-actions { - display: flex; - align-items: center; - gap: 12px; - flex-wrap: wrap; -} - .system-logs-list .list-search { - position: relative; width: 280px; } -.system-logs-list .list-search .mdi { - position: absolute; - left: 12px; - top: 50%; - transform: translateY(-50%); - color: #64748b; - font-size: 15px; -} - -.system-logs-list .list-search input { - width: 100%; - height: 38px; - padding: 0 12px 0 36px; - border: 1px solid #d7e0ea; - border-radius: 4px; - background: #fff; - color: #0f172a; - font-size: 13px; - transition: border-color 160ms ease, box-shadow 160ms ease; -} - -.system-logs-list .list-search input::placeholder { - color: #8da0b4; -} - -.system-logs-list .list-search input:focus { - border-color: var(--theme-primary); - box-shadow: 0 0 0 3px rgba(58, 124, 165, 0.14); - outline: none; -} - .system-logs-list .document-filter { position: relative; } -.system-logs-list .filter-btn { - min-width: 120px; - min-height: 38px; - display: inline-flex; - align-items: center; - justify-content: space-between; - gap: 9px; - padding: 0 14px; - border: 1px solid #d7e0ea; - border-radius: 4px; - background: #fff; - color: #334155; - font-size: 14px; - font-weight: 750; - white-space: nowrap; -} - -.system-logs-list .filter-btn:hover, -.system-logs-list .document-filter.open .filter-btn { - border-color: rgba(58, 124, 165, .32); - color: var(--theme-primary-active); -} - .system-logs-list .status-dropdown-filter, .system-logs-list .status-filter-trigger, .system-logs-list .status-filter-menu { @@ -143,9 +70,9 @@ } .system-logs-list .document-filter-menu button { - display: block; width: 100%; min-height: 36px; + display: block; padding: 0 12px; border: 0; border-radius: 4px; @@ -159,148 +86,22 @@ .system-logs-list .document-filter-menu button:hover, .system-logs-list .document-filter-menu button.active { - background: rgba(58, 124, 165, 0.1); + background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.1); color: var(--theme-primary-active); } -.system-logs-list .create-request-btn { - min-height: 40px; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 0 18px; - border: 0; - border-radius: 4px; - background: linear-gradient(135deg, var(--theme-primary), var(--theme-primary-active)); - color: #fff; - font-size: 14px; - font-weight: 800; - white-space: nowrap; - box-shadow: 0 10px 24px var(--theme-primary-shadow); - transition: transform 160ms ease, box-shadow 160ms ease, filter 160ms ease; -} - -.system-logs-list .create-request-btn.secondary { - border: 1px solid #d7e0ea; - background: #fff; - color: #334155; - box-shadow: none; -} - -.system-logs-list .create-request-btn:hover:not(:disabled) { - transform: translateY(-1px); - box-shadow: 0 14px 28px var(--theme-primary-shadow); - filter: saturate(1.02); -} - -.system-logs-list .create-request-btn.secondary:hover:not(:disabled) { - border-color: rgba(58, 124, 165, .32); - color: var(--theme-primary-active); - box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08); -} - -.system-logs-list .create-request-btn:disabled { - cursor: not-allowed; - opacity: .72; - transform: none; -} - -.system-logs-list .hint { - display: inline-flex; - align-items: center; - gap: 7px; - margin: 10px 0 0; - color: #64748b; - font-size: 13px; -} - -.system-logs-list .table-wrap { - min-height: 400px; - margin-top: 10px; - display: flex; - flex-direction: column; - overflow: auto; - border: 1px solid #edf2f7; - border-radius: 10px; - background: linear-gradient(180deg, #fcfefd 0%, #f4f8f6 100%); -} - -.system-logs-list .table-wrap.is-empty { - align-items: center; - justify-content: center; -} - -.system-logs-list .table-state { - width: 100%; - min-height: 260px; - display: grid; - place-items: center; - gap: 10px; - padding: 28px 20px; - text-align: center; - color: #64748b; - background: linear-gradient(180deg, #fcfffd 0%, #f5f9f7 100%); -} - .system-logs-list .system-log-table { - width: 100%; min-width: 1260px; - align-self: flex-start; - border-collapse: collapse; - table-layout: fixed; } .system-logs-list .col-time { width: 13%; } - .system-logs-list .col-level { width: 8%; } - .system-logs-list .col-event { width: 13%; } - .system-logs-list .col-module { width: 15%; } - .system-logs-list .col-outcome { width: 8%; } - .system-logs-list .col-summary { width: 27%; } - .system-logs-list .col-request { width: 16%; } -.system-logs-list th, -.system-logs-list td { - padding: 13px 12px; - border-bottom: 1px solid #edf2f7; - color: #24324a; - font-size: 14px; - line-height: 1.35; - text-align: center; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.system-logs-list th { - position: sticky; - top: 0; - z-index: 1; - background: #f7fafc; - color: #64748b; - font-size: 13px; - font-weight: 800; -} - -.system-logs-list tbody tr { - cursor: pointer; -} - -.system-logs-list tbody tr:hover { - background: linear-gradient(90deg, rgba(58, 124, 165, .08), rgba(58, 124, 165, .03)); -} - -.system-logs-list tbody tr:last-child td { - border-bottom: 0; -} - .system-logs-list .summary-cell { text-align: left; white-space: normal; @@ -342,7 +143,7 @@ justify-content: center; padding: 0 9px; border: 1px solid transparent; - border-radius: 6px; + border-radius: 4px; font-size: 12px; font-weight: 750; white-space: nowrap; @@ -389,111 +190,12 @@ text-align: center; } -.system-logs-list .list-foot { - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: center; - gap: 16px; - margin-top: 12px; -} - -.system-logs-list .page-summary { - color: #64748b; - font-size: 14px; - font-weight: 650; -} - -.system-logs-list .pager { - display: inline-flex; - justify-content: center; - gap: 6px; - padding: 4px; - border: 1px solid #e2e8f0; - border-radius: 12px; - background: #f8fafc; -} - -.system-logs-list .pager button, -.system-logs-list .page-ellipsis { - width: 32px; - height: 32px; - display: inline-grid; - place-items: center; -} - -.system-logs-list .pager button { - border: 0; - border-radius: 9px; - background: transparent; - color: #334155; - font-size: 14px; - font-weight: 800; -} - -.system-logs-list .page-ellipsis { - color: #94a3b8; - font-size: 13px; - font-weight: 800; -} - -.system-logs-list .pager button:hover:not(.active):not(:disabled) { - background: #fff; - color: var(--theme-primary-active); - box-shadow: 0 1px 4px rgba(15, 23, 42, .08); -} - -.system-logs-list .pager button.active { - background: var(--theme-primary-active); - color: #fff; - box-shadow: 0 8px 16px var(--theme-primary-shadow); -} - -.system-logs-list .pager button:disabled { - color: #cbd5e1; - cursor: not-allowed; - opacity: 1; -} - -.system-logs-list .page-size-select { - width: 118px; - justify-self: end; -} - -@media (max-width: 1200px) { - .system-logs-list .document-toolbar { - align-items: stretch; - flex-direction: column; - } - - .system-logs-list .document-actions { - justify-content: flex-start; - } - - .system-logs-list .list-foot { - grid-template-columns: 1fr; - } -} - @media (max-width: 760px) { .logs-view { padding: 0; } - .system-logs-list.panel { - padding: 16px; - } - - .system-logs-list .filter-set, - .system-logs-list .document-actions, - .system-logs-list .list-search, - .system-logs-list .filter-btn, - .system-logs-list .page-size-select { - width: 100%; - } - .system-logs-list .document-filter-menu { width: 100%; } } - - diff --git a/web/src/assets/styles/views/requests-view.css b/web/src/assets/styles/views/requests-view.css index 81e5d39..7a06204 100644 --- a/web/src/assets/styles/views/requests-view.css +++ b/web/src/assets/styles/views/requests-view.css @@ -4,146 +4,15 @@ display: grid; grid-template-rows: minmax(0, 1fr); gap: 14px; - animation: fadeUp 220ms var(--ease) both; overflow: hidden; + animation: fadeUp 220ms var(--ease) both; } .travel-list { min-height: 0; - display: grid; - grid-template-rows: auto auto auto minmax(0, 1fr) auto; - padding: 16px 18px; overflow: hidden; } -.list-search { - position: relative; - width: 220px; -} - -.list-search .mdi { - position: absolute; - left: 12px; - top: 50%; - transform: translateY(-50%); - color: #64748b; - font-size: 15px; -} - -.list-search input { - width: 100%; - height: 38px; - padding: 0 12px 0 36px; - border: 1px solid #d7e0ea; - border-radius: 8px; - background: #fff; - color: #0f172a; - font-size: 13px; - transition: border-color 160ms ease, box-shadow 160ms ease; -} - -.list-search input::placeholder { - color: #8da0b4; -} - -.list-search input:focus { - border-color: var(--theme-primary); - box-shadow: 0 0 0 3px var(--theme-focus-ring); - outline: none; -} - -.status-tabs { - display: flex; - gap: 28px; - margin-top: 14px; - border-bottom: 1px solid #dbe4ee; -} - -.status-tabs button { - position: relative; - min-height: 36px; - border: 0; - background: transparent; - color: #64748b; - font-size: 14px; - font-weight: 750; -} - -.status-tabs button.active { - color: var(--theme-primary-active); -} - -.status-tabs button.active::after { - content: ""; - position: absolute; - left: 0; - right: 0; - bottom: -1px; - height: 3px; - border-radius: 999px 999px 0 0; - background: var(--theme-primary); -} - -.list-toolbar { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - margin-top: 14px; -} - -.filter-set { - display: flex; - align-items: center; - gap: 12px; - flex-wrap: wrap; -} - -.create-request-btn { - min-height: 40px; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 0 18px; - border: 0; - border-radius: 10px; - background: var(--theme-gradient-primary); - color: #fff; - font-size: 14px; - font-weight: 800; - white-space: nowrap; - box-shadow: 0 10px 24px var(--theme-primary-shadow); - transition: transform 160ms ease, box-shadow 160ms ease, filter 160ms ease; -} - -.create-request-btn:hover { - transform: translateY(-1px); - box-shadow: 0 14px 28px rgba(var(--theme-primary-rgb), 0.24); - filter: saturate(1.02); -} - -.filter-btn { - min-height: 38px; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 9px; - padding: 0 14px; - border-radius: 8px; - font-size: 14px; - font-weight: 750; - white-space: nowrap; - border: 1px solid #d7e0ea; - background: #fff; - color: #334155; -} - -.filter-btn { - min-width: 120px; - justify-content: space-between; -} - .date-range-filter { position: relative; } @@ -153,25 +22,25 @@ } .date-range-label { + max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - max-width: 110px; } .date-range-popover { position: absolute; top: calc(100% + 8px); left: 0; - width: 320px; z-index: 40; + width: 320px; display: grid; gap: 14px; padding: 16px; border: 1px solid #d7e0ea; - border-radius: 12px; + border-radius: 4px; background: #fff; - box-shadow: 0 18px 42px rgba(15, 23, 42, .16); + box-shadow: 0 18px 42px rgba(15, 23, 42, 0.16); } .date-range-popover header, @@ -193,7 +62,7 @@ display: grid; place-items: center; border: 0; - border-radius: 8px; + border-radius: 4px; background: transparent; color: #64748b; } @@ -225,7 +94,7 @@ height: 38px; padding: 0 9px; border: 1px solid #d7e0ea; - border-radius: 8px; + border-radius: 4px; color: #0f172a; font-size: 13px; } @@ -240,7 +109,7 @@ .apply-btn { height: 36px; padding: 0 14px; - border-radius: 8px; + border-radius: 4px; font-size: 13px; font-weight: 750; } @@ -262,158 +131,20 @@ background: #cbd5e1; } -.filter-btn:hover { - border-color: rgba(var(--theme-primary-rgb), .32); - color: var(--theme-primary-active); -} - -.hint { - display: inline-flex; - align-items: center; - gap: 7px; - margin-top: 10px; - color: #64748b; - font-size: 13px; -} - -.hint .mdi { - color: #64748b; -} - -.table-wrap { - min-height: 400px; - margin-top: 10px; - overflow-x: auto; - overflow-y: auto; - border: 1px solid #edf2f7; - border-radius: 10px; - background: linear-gradient(180deg, #fcfefd 0%, var(--theme-primary-light-9) 100%); - display: flex; - flex-direction: column; - align-items: stretch; - justify-content: flex-start; -} - -.table-wrap.is-empty { - align-items: center; - justify-content: center; -} - -/* 让表格在flex容器中正常显示 */ -.table-wrap table { - width: 100%; - align-self: flex-start; -} - -.table-state { - width: 100%; - min-height: 260px; - display: grid; - place-items: center; - gap: 10px; - padding: 28px 20px; - text-align: center; - color: #64748b; - background: linear-gradient(180deg, #fcfffd 0%, var(--theme-primary-light-9) 100%); - align-self: center; -} - -.table-state .mdi { - font-size: 28px; - color: var(--theme-primary); -} - -.table-state strong { - color: #0f172a; - font-size: 15px; -} - -.table-state p { - max-width: 420px; - margin: 0; - font-size: 13px; - line-height: 1.6; -} - -.table-state.error { - background: linear-gradient(180deg, #fffdfd 0%, #fff6f6 100%); -} - -.table-state.error .mdi { - color: #ef4444; -} - -.retry-btn { - height: 36px; - padding: 0 14px; - border: 1px solid #f1c5c5; - border-radius: 8px; - background: #fff; - color: #b91c1c; - font-size: 13px; - font-weight: 750; -} - -table { - width: 100%; - min-width: 1080px; - border-collapse: collapse; - table-layout: fixed; -} - -colgroup col { - width: 10%; -} - -th, -td { - padding: 13px 12px; - border-bottom: 1px solid #edf2f7; - color: #24324a; - font-size: 14px; - line-height: 1.35; - text-align: center; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -th { - position: sticky; - top: 0; - z-index: 1; - background: #f7fafc; - color: #64748b; - font-size: 13px; - font-weight: 800; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -tbody tr { - cursor: pointer; -} - -tbody tr:hover { - background: linear-gradient(90deg, rgba(var(--theme-primary-rgb), .08), rgba(var(--theme-primary-rgb), .03)); -} - -tbody tr:last-child td { - border-bottom: 0; -} - -.doc-id { - color: var(--theme-primary-active); - font-weight: 800; -} +.col-id { width: 13%; } +.col-type { width: 12%; } +.col-title { width: 19%; } +.col-occurred, +.col-apply { width: 13%; } +.col-amount { width: 11%; } +.col-node { width: 11%; } +.col-approval { width: 8%; } .type-tag { + min-height: 26px; display: inline-flex; align-items: center; justify-content: center; - min-height: 26px; padding: 0 10px; border-radius: 999px; font-size: 12px; @@ -421,7 +152,9 @@ tbody tr:last-child td { white-space: nowrap; } -.type-tag.travel { +.type-tag.travel, +.type-tag.hotel, +.type-tag.transport { background: var(--theme-primary-light-9); color: var(--theme-primary-active); } @@ -431,12 +164,6 @@ tbody tr:last-child td { color: #ea580c; } -.type-tag.hotel, -.type-tag.transport { - background: var(--theme-primary-light-9); - color: var(--theme-primary-active); -} - .type-tag.meal { background: #fef3c7; color: #b45309; @@ -464,7 +191,7 @@ tbody tr:last-child td { align-items: center; padding: 0 9px; border: 1px solid transparent; - border-radius: 6px; + border-radius: 4px; font-size: 12px; font-weight: 750; white-space: nowrap; @@ -506,96 +233,13 @@ tbody tr:last-child td { color: #475569; } -.list-foot { - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: center; - gap: 16px; - margin-top: 12px; -} - -.page-summary { - color: #64748b; - font-size: 14px; - font-weight: 650; -} - -.pager { - display: inline-flex; - justify-content: center; - gap: 6px; - padding: 4px; - border: 1px solid #e2e8f0; - border-radius: 12px; - background: #f8fafc; -} - -.pager button { - width: 32px; - height: 32px; - border: 0; - border-radius: 9px; - background: transparent; - color: #334155; - font-size: 14px; - font-weight: 800; - transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease; -} - -.pager button:hover:not(.active) { - background: #fff; - color: var(--theme-primary-active); - box-shadow: 0 1px 4px rgba(15, 23, 42, .08); -} - -.pager button.active { - background: var(--theme-primary); - color: #fff; - box-shadow: 0 8px 16px var(--theme-primary-shadow); -} - -.page-nav { - color: #64748b; -} - -.page-size-select { - width: 112px; - justify-self: end; -} - -@media (max-width: 1200px) { - .list-toolbar, - .list-foot { - grid-template-columns: 1fr; - } -} - @media (max-width: 760px) { - .travel-list { - padding: 16px; - } - - .status-tabs { - gap: 18px; - overflow-x: auto; - } - - .filter-btn, - .page-size-select { + .date-range-filter, + .date-range-trigger { width: 100%; } - .filter-set { - width: 100%; - } - - .list-foot { - display: grid; - justify-items: stretch; - } - - .pager, - .page-size-select { - justify-self: stretch; + .date-range-popover { + width: min(320px, calc(100vw - 48px)); } } diff --git a/web/src/components/shared/EnterpriseDetailCard.vue b/web/src/components/shared/EnterpriseDetailCard.vue new file mode 100644 index 0000000..c69c56d --- /dev/null +++ b/web/src/components/shared/EnterpriseDetailCard.vue @@ -0,0 +1,22 @@ + + + diff --git a/web/src/components/shared/EnterpriseDetailPage.vue b/web/src/components/shared/EnterpriseDetailPage.vue new file mode 100644 index 0000000..47bd5a3 --- /dev/null +++ b/web/src/components/shared/EnterpriseDetailPage.vue @@ -0,0 +1,71 @@ + + + diff --git a/web/src/components/shared/EnterpriseListPage.vue b/web/src/components/shared/EnterpriseListPage.vue new file mode 100644 index 0000000..14892b6 --- /dev/null +++ b/web/src/components/shared/EnterpriseListPage.vue @@ -0,0 +1,197 @@ + + + diff --git a/web/src/components/shared/EnterprisePagination.vue b/web/src/components/shared/EnterprisePagination.vue new file mode 100644 index 0000000..9e14b29 --- /dev/null +++ b/web/src/components/shared/EnterprisePagination.vue @@ -0,0 +1,107 @@ + + + diff --git a/web/src/main.js b/web/src/main.js index 88e1231..760e167 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -10,6 +10,7 @@ import { installThemeSkin } from './composables/useThemeSkin.js' import { installSessionNavigation } from './composables/useSystemState.js' import './assets/styles/element-plus-theme.css' import './assets/styles/detail-page-corners.css' +import './assets/styles/components/enterprise-page-shell.css' const app = createApp(App) diff --git a/web/src/views/ApprovalCenterView.vue b/web/src/views/ApprovalCenterView.vue index 93e72ce..6604f65 100644 --- a/web/src/views/ApprovalCenterView.vue +++ b/web/src/views/ApprovalCenterView.vue @@ -10,66 +10,43 @@ @request-deleted="handleDetailDeleted" /> -
-