Просмотр исходного кода

优化标段概况显示效果

ellisran 3 часов назад
Родитель
Сommit
2b3b7bd7fb
2 измененных файлов с 349 добавлено и 197 удалено
  1. 190 0
      app/public/css/main.css
  2. 159 197
      app/view/tender/detail.ejs

+ 190 - 0
app/public/css/main.css

@@ -2563,3 +2563,193 @@ animation:shake 1s .2s ease both;}
 .project-screen-live-grid section { padding: 14px; border: 1px solid #1b568f; background: rgba(8,33,65,.76); }
 .project-screen-live-grid section { padding: 14px; border: 1px solid #1b568f; background: rgba(8,33,65,.76); }
 .project-screen-live-grid h6 { color: #78bafa; }
 .project-screen-live-grid h6 { color: #78bafa; }
 .project-screen-live-grid section div { height: calc(100% - 25px); background: linear-gradient(180deg,rgba(30,99,156,.22),rgba(9,42,77,.06)); }
 .project-screen-live-grid section div { height: calc(100% - 25px); background: linear-gradient(180deg,rgba(30,99,156,.22),rgba(9,42,77,.06)); }
+
+/* 标段概况:指标卡片与图表布局 */
+/* Scoped to the tender overview; preserve the user's day/night display setting. */
+.tender-overview #big-data{--ov-bg:#2c3237;--ov-card:#343a40;--ov-line:#48515a;--ov-text:#edf3fa;--ov-muted:#aab6c3;background:var(--ov-bg)}
+.tender-overview #big-data:has(.c-body-white){--ov-bg:#eef3f8;--ov-card:#fff;--ov-line:#dce5ee;--ov-text:#25394d;--ov-muted:#657b90}
+.tender-overview .c-body{background:var(--ov-bg)!important;color:var(--ov-text)}
+.tender-overview .main-height-one>.m-3,.tender-overview .main-height-two>.m-3{margin:20px!important}
+.tender-overview .overview-metrics{margin:0 0 18px!important}
+.tender-overview .overview-metrics>.col-12{padding:0}
+.tender-overview .overview-metrics>.col-12>.row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}
+.tender-overview .overview-metrics .col-auto{padding:0;width:auto;min-width:0}
+.tender-overview .card{background:var(--ov-card);border:1px solid var(--ov-line);border-radius:6px;box-shadow:none;color:var(--ov-text)}
+.tender-overview .overview-metrics .card{height:100%;text-align:left!important;border-top:3px solid #469eff;background:linear-gradient(140deg,rgba(70,158,255,.10),transparent),var(--ov-card)}
+.tender-overview .overview-metrics .col-auto:nth-of-type(n+5) .card{border-top-color:#38bf82;background:linear-gradient(140deg,rgba(56,191,130,.09),transparent),var(--ov-card)}
+.tender-overview .overview-metrics .card-body{padding:16px;display:flex;flex-direction:column-reverse;gap:12px}
+.tender-overview .overview-metrics .card-title{font-size:clamp(17px,1.45vw,26px);font-weight:600;letter-spacing:-.5px;font-variant-numeric:tabular-nums;margin:0;overflow-wrap:anywhere}
+.tender-overview .overview-metrics .card-text{font-size:12px;margin:0;color:var(--ov-muted)!important}
+.tender-overview .card-big-title small{position:static;font-size:12px;margin-left:4px;color:#efb66d!important}
+.tender-overview .overview-progress{padding:16px;background:var(--ov-card);border:1px solid var(--ov-line);border-radius:6px}
+.tender-overview .overview-progress-label{display:flex;justify-content:space-between;gap:12px;margin-bottom:12px;font-size:12px;color:var(--ov-muted);flex-wrap:wrap}
+.tender-overview .overview-progress-label strong{color:var(--ov-text);font-size:14px;font-weight:500}
+.tender-overview .overview-dot{display:inline-block;width:7px;height:7px;margin:0 5px 1px 12px;border-radius:50%}
+.tender-overview .previous{background:#38bf82}.tender-overview .current{background:#469eff}.tender-overview .remaining{background:#718293}
+.tender-overview .progress{height:14px;border-radius:4px;background:#48515a}
+.tender-overview .progress .bg-red{background:#718293!important}.tender-overview .progress .bg-green{background:#38bf82!important}.tender-overview .progress .bg-blue{background:#469eff!important}
+.tender-overview .overview-charts{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.65fr) minmax(0,1.15fr);gap:16px;margin:0}
+.tender-overview .overview-charts>.col-3,.tender-overview .overview-charts>.col-6{max-width:none;width:auto;padding:0;min-width:0}
+.tender-overview .overview-charts>.col-3{display:flex;flex-direction:column;gap:16px}
+.tender-overview .overview-charts>.col-3>.card{flex:1;margin:0!important}
+.tender-overview .overview-charts>.col-6>.card{height:100%;margin:0!important}
+.tender-overview .overview-charts>.col-6:nth-child(4){grid-column:span 2}
+.tender-overview .card-header{padding:16px;background:transparent;border-bottom:0}
+.tender-overview .card-header h6{border-left:3px solid #469eff;padding-left:10px;font-size:14px;font-weight:600}
+.tender-overview .overview-charts .card-body{padding:16px}
+.tender-overview #jlchart1,.tender-overview #jlchart2,.tender-overview #bgchart{height:145px!important;min-width:0}
+.tender-overview #jlchart3{height:375px!important}
+.tender-overview .panel-card-tabs{margin:0;gap:12px;flex-wrap:wrap;border:0}
+.tender-overview .panel-card-tabs .nav-link{padding:0 0 7px!important;font-size:13px;color:var(--ov-muted);border:0;border-bottom:2px solid transparent;background:transparent}
+.tender-overview .panel-card-tabs .nav-link.active{color:#67b7ff;border-bottom-color:#67b7ff;background:transparent}
+.tender-overview .border-secondary{border-color:var(--ov-line)!important}
+.tender-overview #big-data:fullscreen{overflow:auto;width:100%;height:100vh}
+@media(max-width:1450px){
+ .tender-overview .overview-charts{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr)}
+ .tender-overview .overview-charts>.col-3:nth-child(3){grid-column:span 2;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
+ .tender-overview .overview-charts>.col-6:nth-child(4){grid-column:auto}
+}
+@media(max-width:900px){
+ .tender-overview .overview-metrics>.col-12>.row{grid-template-columns:repeat(2,minmax(0,1fr))}
+ .tender-overview .overview-charts{grid-template-columns:minmax(0,1fr)}
+ .tender-overview .overview-charts>.col-3:nth-child(3){grid-column:auto;display:flex}
+ .tender-overview .main-height-one>.m-3,.tender-overview .main-height-two>.m-3{margin:12px!important}
+}
+@media(min-width:1451px){
+ .tender-overview .overview-charts{grid-template-columns:repeat(12,minmax(0,1fr))}
+ .tender-overview .overview-charts>.col-3:first-child{grid-column:span 3}
+ .tender-overview .overview-charts>.col-6:nth-child(2){grid-column:span 5}
+ .tender-overview .overview-charts>.col-3:nth-child(3){grid-column:span 4}
+ .tender-overview .overview-charts>.col-6:nth-child(n+4){grid-column:span 6}
+}
+.tender-overview #big-data:fullscreen{overflow:hidden}
+.tender-overview #big-data:fullscreen .sjs-height-0{height:calc(100vh - 70px)!important;overflow:auto}
+/* Desktop overview fits the viewport, with both trend charts visible. */
+@media(min-width:1451px) and (min-height:760px){
+ .tender-overview .sjs-height-0{display:flex;flex-direction:column;overflow:hidden;padding:12px;gap:12px;box-sizing:border-box}
+ .tender-overview .main-height-one{flex:none}
+ .tender-overview .main-height-one>.m-3,.tender-overview .main-height-two>.m-3{margin:0!important}
+ .tender-overview .overview-metrics{margin-bottom:10px!important}
+ .tender-overview .overview-metrics>.col-12>.row{gap:8px}
+ .tender-overview .overview-metrics .card-body{padding:10px 14px;gap:6px}
+ .tender-overview .overview-metrics .card-title{font-size:22px}
+ .tender-overview .overview-progress{padding:10px 14px}
+ .tender-overview .overview-progress-label{margin-bottom:7px}
+ .tender-overview .progress{height:10px}
+ .tender-overview .main-height-two{flex:1;min-height:0}
+ .tender-overview .main-height-two>.m-3{height:100%}
+ .tender-overview .overview-charts{height:100%;grid-template-rows:minmax(0,1.35fr) minmax(0,1fr);gap:12px}
+ .tender-overview .overview-charts>.col-3{gap:12px;min-height:0}
+ .tender-overview .overview-charts>.col-6{min-height:0}
+ .tender-overview .overview-charts .card{min-height:0;display:flex;flex-direction:column}
+ .tender-overview .overview-charts .card-header{flex:none;padding:10px 12px}
+ .tender-overview .overview-charts .card-body{flex:1;min-height:0;padding:10px 12px}
+ .tender-overview #jlchart1,.tender-overview #jlchart2,.tender-overview #jlchart3,.tender-overview #bgchart,.tender-overview #chartContainer3,.tender-overview #chartContainer4{height:100%!important}
+ .tender-overview .overview-charts .tab-content,.tender-overview .overview-charts .tab-pane{height:100%}
+ .tender-overview .overview-charts>.col-6:nth-child(2)>.card>div[style]{height:100%!important;min-height:0}
+ .tender-overview .overview-charts>.col-6:nth-child(2) img{height:100%!important;object-fit:contain}
+ .tender-overview #big-data:fullscreen #exitfull-div{height:34px!important}
+ .tender-overview #big-data:fullscreen .sjs-height-0{height:calc(100vh - 34px)!important;overflow:hidden}
+}
+@media(min-width:1451px) and (min-height:760px){
+ .tender-overview .sjs-height-0{height:calc(100vh - 36px)!important}
+}
+
+/* 顶部金额整体卡片:与下方图表共用颜色及标题样式。 */
+.tender-overview .overview-summary{background:var(--ov-card);border:1px solid var(--ov-line);border-radius:6px;color:var(--ov-text);overflow:hidden}
+.tender-overview .overview-summary-heading{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:0}
+.tender-overview .overview-summary-heading h6{margin:0;border-left:3px solid #469eff;padding-left:10px;font-size:14px;font-weight:600}
+.tender-overview .overview-summary-heading>span{font-size:11px;color:var(--ov-muted)}
+.tender-overview .overview-payment-heading{display:flex;align-items:center;justify-content:space-between}
+.tender-overview .overview-payment-heading>span{font-size:12px;color:var(--ov-muted)}
+.tender-overview .overview-charts .overview-payment{display:flex;flex-direction:column;justify-content:space-around;gap:12px;min-height:145px}
+.tender-overview .overview-payment-label{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px;font-size:12px;color:var(--ov-muted)}
+.tender-overview .overview-payment-label strong{color:var(--ov-text);font-weight:500;font-variant-numeric:tabular-nums}
+.tender-overview .overview-payment-track{height:8px;border-radius:5px;background:var(--ov-line);overflow:hidden}
+.tender-overview .overview-payment-track>span{display:block;height:100%;border-radius:inherit}
+.tender-overview .overview-charts .overview-completion{display:flex;flex-direction:column;gap:4px;min-height:145px}
+.tender-overview .overview-completion-main{display:grid;grid-template-columns:36% 64%;align-items:center;flex:1;min-height:0}
+.tender-overview .overview-completion-legend{display:flex;flex-direction:column;gap:14px;font-size:12px;color:var(--ov-muted)}
+.tender-overview .overview-completion-legend>div{display:flex;align-items:center;gap:6px}
+.tender-overview .overview-completion-legend i{width:8px;height:8px;border-radius:2px;flex:none}
+.tender-overview .overview-completion-ring{position:relative;height:100%;min-height:110px;min-width:0}
+.tender-overview .overview-completion-ring #jlchart1{width:100%;height:calc(100% + 32px)!important;position:absolute;top:-16px;left:0}
+.tender-overview .overview-completion-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;pointer-events:none;text-align:center;white-space:nowrap}
+.tender-overview .overview-completion-center strong{font-size:var(--completion-value-size,16px);line-height:1.2;margin:0;font-weight:500;color:var(--ov-text);font-variant-numeric:tabular-nums}
+.tender-overview .overview-completion-center span,.tender-overview .overview-completion-amount{font-size:12px;color:var(--ov-muted)}
+.tender-overview .overview-completion-center span{font-size:var(--completion-label-size,10px);line-height:1.2;margin:0}
+.tender-overview .overview-completion-amount{flex:none}
+.tender-overview .overview-approval-money{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;margin:10px 0 0;padding-top:10px;border-top:1px solid var(--ov-line);font-size:12px;line-height:1.4}
+.tender-overview .overview-approval-money>div{padding:0;max-width:none;width:auto;margin:0!important}
+.tender-overview .overview-approval-money>.col-7{color:var(--ov-muted)}
+.tender-overview .overview-approval-money>.col-5{color:var(--ov-text);font-weight:500;font-variant-numeric:tabular-nums}
+.tender-overview .overview-material-summary{grid-template-columns:minmax(0,1fr) minmax(140px,1fr)}
+.tender-overview .overview-material-values{display:flex;justify-content:flex-end;align-items:baseline;gap:6px}
+.tender-overview .overview-material-values>span{overflow-wrap:anywhere}
+/* 审批卡片共用底部对齐,嵌套的调差容器不额外占用留白。 */
+@media(min-width:1451px) and (min-height:760px){
+ .tender-overview .overview-charts .card-body:has(>div>.overview-approval-money){display:flex;flex-direction:column}
+ .tender-overview .overview-charts .card-body>div:has(>.overview-approval-money){display:flex;flex-direction:column;flex:1;min-height:0}
+ .tender-overview .overview-charts #taizhangxiuding>.card-body{height:100%;box-sizing:border-box}
+ .tender-overview .overview-charts .overview-approval-money{margin-top:auto;padding-top:10px;padding-bottom:6px}
+ .tender-overview .overview-charts .card-body>div:has(>.overview-approval-money)>.row:not(.overview-approval-money){margin-bottom:10px}
+ .tender-overview #big-data:fullscreen .card-body>div:has(>.overview-approval-money)>.btn-group{margin-top:auto!important;flex-shrink:0}
+ .tender-overview #big-data:fullscreen .card-body>div:has(>.overview-approval-money)>.row:not(.overview-approval-money){margin-bottom:0;flex-shrink:0}
+}
+.tender-overview .overview-material-values>small{font-size:12px;font-weight:400;color:var(--ov-muted)}
+.tender-overview .overview-material-money{width:100%;table-layout:fixed;background:transparent;color:var(--ov-text);margin-top:4px;border:0;font-size:12px;line-height:1.4}
+.tender-overview .overview-material-money th,.tender-overview .overview-material-money td{border:0;padding:3px 8px;background:transparent;vertical-align:middle;overflow-wrap:anywhere}
+.tender-overview .overview-material-money th{color:var(--ov-muted);font-weight:400}
+.tender-overview .overview-material-money th:first-child{width:22%;padding-left:0;text-align:left}
+.tender-overview .overview-material-money thead th{text-align:right;padding-top:0;padding-bottom:3px;border-bottom:1px solid var(--ov-line);font-size:12px}
+.tender-overview .overview-material-money tr>:last-child{padding-right:0}
+.tender-overview .overview-material-money td{font-size:12px;font-weight:500;text-align:right;font-variant-numeric:tabular-nums}
+.tender-overview .overview-charts .card-body:has(>#taizhangshenpi.active),
+.tender-overview .overview-charts .card-body:has(>.tab-content>#taizhangshenpi.active){padding-top:0}
+.tender-overview .overview-change-counts{display:grid;grid-template-rows:repeat(2,minmax(0,1fr));height:100%;min-height:120px}
+.tender-overview .overview-change-group{display:flex;align-items:flex-start;padding:4px 0 12px;min-height:0}
+.tender-overview .overview-change-group+.overview-change-group{border-top:1px solid var(--ov-line);align-items:center;padding:12px 0 4px}
+.tender-overview .overview-change-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;width:100%}
+.tender-overview .overview-change-item{display:flex;flex-direction:column;gap:5px;text-align:center;min-width:0}
+.tender-overview .overview-change-item>span{font-size:12px;line-height:1.3;font-weight:400;color:var(--ov-muted)}
+.tender-overview .overview-change-item>strong{font-size:22px;line-height:1.15;font-weight:400;font-variant-numeric:tabular-nums;color:var(--ov-text)}
+.tender-overview .overview-change-group:first-child .overview-change-item:nth-child(1)>span{color:#67b7ff}
+.tender-overview .overview-change-group:first-child .overview-change-item:nth-child(2)>span{color:#53cc98}
+.tender-overview .overview-change-group:first-child .overview-change-item:nth-child(3)>span{color:#ffb568}
+.tender-overview .overview-change-group:last-child .overview-change-item:nth-child(1)>span{color:#ad9aff}
+.tender-overview .overview-change-group:last-child .overview-change-item:nth-child(2)>span{color:#62cedb}
+.tender-overview .overview-change-group:last-child .overview-change-item:nth-child(3)>span{color:#f58091}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:first-child .overview-change-item:nth-child(1)>span{color:#176eb4}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:first-child .overview-change-item:nth-child(2)>span{color:#21815b}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:first-child .overview-change-item:nth-child(3)>span{color:#a45c16}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:last-child .overview-change-item:nth-child(1)>span{color:#7356b5}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:last-child .overview-change-item:nth-child(2)>span{color:#197c88}
+.tender-overview #big-data:has(.c-body-white) .overview-change-group:last-child .overview-change-item:nth-child(3)>span{color:#b44359}
+.tender-overview .overview-summary .overview-metrics{margin:0!important;padding:0 12px}
+.tender-overview .overview-summary .overview-metrics>.col-12>.row{gap:0}
+.tender-overview .overview-summary .overview-metrics .col-auto{position:relative}
+.tender-overview .overview-summary .overview-metrics .col-auto:nth-of-type(n+5){border-top:1px solid var(--ov-line)}
+.tender-overview .overview-summary .overview-metrics .col-auto:not(:nth-of-type(4n+1)):before{content:'';position:absolute;left:0;top:14px;bottom:14px;width:1px;background:var(--ov-line)}
+.tender-overview .overview-summary .overview-metrics .card{border:0;border-radius:0;background:transparent!important;box-shadow:none}
+.tender-overview .overview-summary .overview-metrics .card-body{padding:12px 16px;gap:7px}
+.tender-overview .overview-summary .overview-metrics .card-title{font-size:22px;font-weight:500}
+.tender-overview .overview-summary .overview-metrics .col-auto:nth-of-type(3) .card-title,
+.tender-overview .overview-summary .overview-metrics .col-auto:nth-of-type(6) .card-title{font-weight:600}
+.tender-overview .overview-summary .overview-progress{border:0;border-top:1px solid var(--ov-line);border-radius:0;padding:10px 28px;background:transparent}
+.tender-overview .overview-summary .overview-progress-label{align-items:center;margin-bottom:8px;gap:8px 16px}
+.tender-overview .overview-summary .overview-progress-label strong{font-size:12px;color:var(--ov-muted)}
+.tender-overview .overview-summary .overview-progress-label>div{display:flex;align-items:center;flex-wrap:wrap;gap:4px}
+.tender-overview .overview-summary .overview-dot{flex:none;margin:0 2px 0 12px}
+.tender-overview .overview-summary .overview-dot:first-child{margin-left:0}
+@media(min-width:1451px) and (min-height:760px){
+ .tender-overview .overview-summary .overview-metrics .card-body{padding:7px 16px;gap:4px}
+ .tender-overview .overview-summary-heading{padding:7px 16px}
+ .tender-overview .overview-summary .overview-progress{padding:8px 28px}
+}
+@media(max-width:900px){
+ .tender-overview .overview-summary .overview-progress{padding:10px 24px}
+ .tender-overview .overview-summary .overview-metrics .col-auto:nth-of-type(n+3){border-top:1px solid var(--ov-line)}
+ .tender-overview .overview-summary .overview-metrics .col-auto:nth-of-type(odd):before{display:none}
+ .tender-overview .overview-summary .overview-metrics .card-body{padding:12px;gap:6px}
+ .tender-overview .overview-summary .overview-metrics .card-title{font-size:18px}
+}

Разница между файлами не показана из-за своего большого размера
+ 159 - 197
app/view/tender/detail.ejs