|
|
@@ -1,64 +1,63 @@
|
|
|
<template>
|
|
|
- <div ref="nightPageRef" :class="prefixCls" class="night-page">
|
|
|
- <div class="page-header">
|
|
|
- <div class="page-title">夜间联系</div>
|
|
|
- <div class="page-subtitle">识别与对象在夜间联系频繁的人员或号码,并支持下钻查看时段趋势。</div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="filter-bar">
|
|
|
- <div class="filter-item filter-item--target">
|
|
|
- <span class="filter-label">选择对象:</span>
|
|
|
- <Select
|
|
|
- v-model:value="filters.target"
|
|
|
- mode="multiple"
|
|
|
- allow-clear
|
|
|
- max-tag-count="responsive"
|
|
|
- class="filter-input"
|
|
|
- :options="targetOptions"
|
|
|
- placeholder="全部"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div class="filter-item filter-item--month">
|
|
|
- <span class="filter-label">联系月数:</span>
|
|
|
- <Input v-model:value="filters.monthValue" class="filter-input" :status="monthValueStatus" />
|
|
|
- </div>
|
|
|
- <div class="filter-item filter-item--date">
|
|
|
- <span class="filter-label">联系日期:</span>
|
|
|
- <RangePicker
|
|
|
- v-model:value="filters.dateRange"
|
|
|
- class="filter-input filter-date"
|
|
|
- :format="DATE_FORMAT"
|
|
|
- :value-format="DATE_FORMAT"
|
|
|
- :placeholder="['开始日期', '结束日期']"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div class="filter-item filter-item--night">
|
|
|
- <span class="filter-label">夜间时间段:</span>
|
|
|
- <Select v-model:value="filters.nightStart" class="filter-op" :options="nightHourOptions" />
|
|
|
- <span class="filter-label">至</span>
|
|
|
- <Select v-model:value="filters.nightEnd" class="filter-op" :options="nightHourOptions" />
|
|
|
- </div>
|
|
|
- <div class="filter-item">
|
|
|
- <span class="filter-label">对方姓名:</span>
|
|
|
- <Input v-model:value="filters.otherName" class="filter-input" placeholder="请输入对方姓名" />
|
|
|
- </div>
|
|
|
- <div class="filter-item">
|
|
|
- <span class="filter-label">对方号码:</span>
|
|
|
- <Input v-model:value="filters.otherPhone" class="filter-input" placeholder="请输入对方号码" />
|
|
|
+ <div ref="nightPageRef" :class="prefixCls" class="night-page qj-night-page">
|
|
|
+ <section class="qj-filter-card">
|
|
|
+ <div class="qj-filter-head">
|
|
|
+ <div class="qj-card-title">查询条件</div>
|
|
|
+ <div class="qj-filter-actions">
|
|
|
+ <Button class="qj-btn-primary" type="primary" :loading="queryLoading" @click="handleSearch">查询</Button>
|
|
|
+ <Button class="qj-btn-reset" @click="handleReset">重置</Button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="filter-actions">
|
|
|
- <Button type="primary" :loading="queryLoading" @click="handleSearch">查询</Button>
|
|
|
- <Button @click="handleReset">重置</Button>
|
|
|
+ <div class="qj-filter-grid">
|
|
|
+ <div class="qj-field qj-field--target">
|
|
|
+ <span class="qj-field__label">选择对象</span>
|
|
|
+ <Select
|
|
|
+ v-model:value="filters.target"
|
|
|
+ mode="multiple"
|
|
|
+ allow-clear
|
|
|
+ max-tag-count="responsive"
|
|
|
+ class="filter-input"
|
|
|
+ :options="targetOptions"
|
|
|
+ placeholder="全部"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="qj-field">
|
|
|
+ <span class="qj-field__label">对方姓名</span>
|
|
|
+ <Input v-model:value="filters.otherName" class="filter-input" placeholder="请输入对方姓名" />
|
|
|
+ </div>
|
|
|
+ <div class="qj-field">
|
|
|
+ <span class="qj-field__label">对方号码</span>
|
|
|
+ <Input v-model:value="filters.otherPhone" class="filter-input" placeholder="请输入对方号码" />
|
|
|
+ </div>
|
|
|
+ <div class="qj-field">
|
|
|
+ <span class="qj-field__label">联系日期</span>
|
|
|
+ <RangePicker
|
|
|
+ v-model:value="filters.dateRange"
|
|
|
+ class="filter-input filter-date"
|
|
|
+ :format="DATE_FORMAT"
|
|
|
+ :value-format="DATE_FORMAT"
|
|
|
+ :placeholder="['开始日期', '结束日期']"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="qj-field">
|
|
|
+ <span class="qj-field__label">联系月数</span>
|
|
|
+ <Input v-model:value="filters.monthValue" class="filter-input filter-month" :status="monthValueStatus" />
|
|
|
+ </div>
|
|
|
+ <div class="qj-field">
|
|
|
+ <span class="qj-field__label">夜间时间段</span>
|
|
|
+ <Select v-model:value="filters.nightStart" class="filter-op" :options="nightHourOptions" />
|
|
|
+ <span class="qj-field__sep">至</span>
|
|
|
+ <Select v-model:value="filters.nightEnd" class="filter-op" :options="nightHourOptions" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </section>
|
|
|
|
|
|
<div class="content-panel">
|
|
|
- <div class="summary-panel">
|
|
|
- <div class="panel-header">
|
|
|
- <div class="panel-title-wrap">
|
|
|
- <div class="panel-title">夜间联系对象汇总</div>
|
|
|
- <div class="panel-desc">汇总满足当前筛选条件的对象的夜间联系情况,可点击单条下方显示趋势。</div>
|
|
|
- </div>
|
|
|
+ <section class="qj-summary-card">
|
|
|
+ <div class="qj-card-head">
|
|
|
+ <div class="qj-card-title">夜间联系对象汇总</div>
|
|
|
+ <div class="qj-card-sub">汇总满足当前筛选条件的对象的夜间联系情况,点击单条查看时段趋势</div>
|
|
|
+ <div class="qj-card-meta">共 {{ (hasSearched ? total : 0).toLocaleString('zh-CN') }} 条</div>
|
|
|
</div>
|
|
|
|
|
|
<div v-if="!hasSearched" class="query-state-panel">
|
|
|
@@ -100,14 +99,13 @@
|
|
|
@change="handlePaginationChange"
|
|
|
/>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </section>
|
|
|
|
|
|
- <div class="trend-panel">
|
|
|
- <div class="panel-header">
|
|
|
- <div class="panel-title-wrap">
|
|
|
- <div class="panel-title">时段联系趋势</div>
|
|
|
- <div class="panel-desc">上方选中对象时段趋势,可点击图表查看详情。</div>
|
|
|
- </div>
|
|
|
+ <section class="qj-trend-card">
|
|
|
+ <div class="qj-card-head">
|
|
|
+ <div class="qj-card-title">时段联系趋势</div>
|
|
|
+ <div class="qj-card-sub">选中对象的夜间时段分布,可点击图表节点查看通信明细</div>
|
|
|
+ <div v-if="selectedRow" class="qj-card-meta"> {{ selectedRow.selfName }} · {{ selectedRow.otherName }} </div>
|
|
|
</div>
|
|
|
<div class="trend-panel-body">
|
|
|
<div class="trend-chart-shell">
|
|
|
@@ -116,13 +114,13 @@
|
|
|
variant="compact"
|
|
|
title="暂无趋势数据"
|
|
|
:description="trendEmptyDescription"
|
|
|
- :min-height="220"
|
|
|
+ :min-height="160"
|
|
|
/>
|
|
|
</div>
|
|
|
<div v-show="trendVisible" ref="chartRef" class="trend-chart"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </section>
|
|
|
</div>
|
|
|
|
|
|
<CallRecordModal v-model:open="callRecordModalOpen" title="通信记录" :base-query="callRecordBaseQuery" />
|
|
|
@@ -147,7 +145,6 @@
|
|
|
import { getPersonOptions } from '@/person/api/personApi';
|
|
|
import CallRecordModal from '@/call/views/components/CallRecordModal.vue';
|
|
|
import type { EChartsOption } from 'echarts';
|
|
|
- import * as echarts from 'echarts';
|
|
|
import type { CallNightDTO } from '@/call/api/types/dto';
|
|
|
import type { CallNightQuery, CallRecordQuery } from '@/call/api/types/query';
|
|
|
|
|
|
@@ -716,22 +713,22 @@
|
|
|
const countValue = formatTooltipCount(node.callCount ?? current?.value ?? 0);
|
|
|
|
|
|
return [
|
|
|
- '<div style="padding:14px 16px; min-width:208px; background:linear-gradient(180deg, rgba(19,33,62,0.98) 0%, rgba(15,23,42,0.98) 100%); border:1px solid rgba(148,163,184,0.22); border-radius:14px; box-shadow:0 16px 34px rgba(2,6,23,0.32);">',
|
|
|
- '<div style="display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:10px;">',
|
|
|
- `<span style="font-size:14px; line-height:20px; color:#f8fafc; font-weight:600;">${axisLabel}</span>`,
|
|
|
- `<span style="font-size:12px; line-height:18px; color:#8ac5ff; cursor:pointer;" onclick='window.${NIGHT_TREND_TOOLTIP_HANDLER}(${dataIndex})'>查看详情</span>`,
|
|
|
+ '<div style="padding:11px 13px; min-width:188px; background:#ffffff; border:1px solid #e7ebf3; border-radius:10px; box-shadow:0 8px 24px rgba(16,24,40,0.12);">',
|
|
|
+ '<div style="display:flex; align-items:center; justify-content:space-between; gap:14px; margin-bottom:8px;">',
|
|
|
+ `<span style="font-size:12px; line-height:18px; color:#111827; font-weight:600;">${axisLabel}</span>`,
|
|
|
+ `<span style="font-size:11px; line-height:16px; color:#2a50ec; cursor:pointer;" onclick='window.${NIGHT_TREND_TOOLTIP_HANDLER}(${dataIndex})'>查看详情</span>`,
|
|
|
'</div>',
|
|
|
'<div style="display:flex; align-items:center; justify-content:space-between; gap:16px;">',
|
|
|
- '<span style="display:flex; align-items:center; gap:8px; font-size:13px; line-height:20px; color:#cbd5e1;">',
|
|
|
- '<span style="width:10px; height:10px; border-radius:50%; background:#62c4ff; box-shadow:0 0 0 4px rgba(255,255,255,0.06); display:inline-block;"></span>',
|
|
|
+ '<span style="display:flex; align-items:center; gap:7px; font-size:12px; line-height:18px; color:#5b6577;">',
|
|
|
+ '<span style="width:7px; height:7px; border-radius:50%; background:#2a50ec; display:inline-block;"></span>',
|
|
|
'联系次数',
|
|
|
'</span>',
|
|
|
- `<span style="font-size:13px; line-height:20px; color:#eff6ff; font-weight:600;">${countValue} 次</span>`,
|
|
|
+ `<span style="font-size:12px; line-height:18px; color:#111827; font-weight:600;">${countValue} 次</span>`,
|
|
|
'</div>',
|
|
|
- '<div style="height:8px;"></div>',
|
|
|
+ '<div style="height:6px;"></div>',
|
|
|
'<div style="display:flex; align-items:center; justify-content:space-between; gap:16px;">',
|
|
|
- '<span style="font-size:13px; line-height:20px; color:#94a3b8;">联系对象</span>',
|
|
|
- `<span style="font-size:13px; line-height:20px; color:#eff6ff; font-weight:600; max-width:120px; text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">${safeOtherName}</span>`,
|
|
|
+ '<span style="font-size:12px; line-height:18px; color:#98a2b3;">联系对象</span>',
|
|
|
+ `<span style="font-size:12px; line-height:18px; color:#111827; font-weight:600; max-width:130px; text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">${safeOtherName}</span>`,
|
|
|
'</div>',
|
|
|
'</div>',
|
|
|
].join('');
|
|
|
@@ -798,7 +795,7 @@
|
|
|
axisPointer: {
|
|
|
type: 'line',
|
|
|
lineStyle: {
|
|
|
- color: 'rgba(63, 93, 230, 0.22)',
|
|
|
+ color: 'rgba(42, 80, 236, 0.32)',
|
|
|
width: 2,
|
|
|
},
|
|
|
},
|
|
|
@@ -834,7 +831,7 @@
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
- grid: { left: '3%', right: '3%', top: 24, bottom: 8, outerBoundsMode: 'same', outerBoundsContain: 'axisLabel' },
|
|
|
+ grid: { left: '2%', right: '2%', top: 20, bottom: 4, outerBoundsMode: 'same', outerBoundsContain: 'axisLabel' },
|
|
|
series: [
|
|
|
{
|
|
|
data: values,
|
|
|
@@ -842,30 +839,22 @@
|
|
|
smooth: true,
|
|
|
showSymbol: true,
|
|
|
symbol: 'circle',
|
|
|
- symbolSize: 4,
|
|
|
- lineStyle: { color: '#1677ff', width: 3 },
|
|
|
+ symbolSize: 6,
|
|
|
+ lineStyle: { color: '#2a50ec', width: 2.5 },
|
|
|
itemStyle: {
|
|
|
- color: '#1677ff',
|
|
|
+ color: '#2a50ec',
|
|
|
borderColor: '#ffffff',
|
|
|
borderWidth: 2,
|
|
|
- shadowBlur: 4,
|
|
|
- shadowColor: 'rgba(22, 119, 255, 0.16)',
|
|
|
},
|
|
|
areaStyle: {
|
|
|
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
|
- { offset: 0, color: 'rgba(22, 119, 255, 0.18)' },
|
|
|
- { offset: 1, color: 'rgba(22, 119, 255, 0.02)' },
|
|
|
- ]),
|
|
|
+ color: 'rgba(42, 80, 236, 0.10)',
|
|
|
},
|
|
|
emphasis: {
|
|
|
focus: 'series',
|
|
|
- scale: true,
|
|
|
itemStyle: {
|
|
|
- color: '#003eb3',
|
|
|
+ color: '#1e3ed0',
|
|
|
borderColor: '#ffffff',
|
|
|
- borderWidth: 5,
|
|
|
- shadowBlur: 26,
|
|
|
- shadowColor: 'rgba(0, 62, 179, 0.58)',
|
|
|
+ borderWidth: 4,
|
|
|
},
|
|
|
lineStyle: {
|
|
|
width: 4,
|
|
|
@@ -873,12 +862,11 @@
|
|
|
label: {
|
|
|
show: true,
|
|
|
position: 'top',
|
|
|
- color: '#003eb3',
|
|
|
+ color: '#1e3ed0',
|
|
|
fontSize: 12,
|
|
|
- fontWeight: 700,
|
|
|
+ fontWeight: 600,
|
|
|
formatter: '{c}',
|
|
|
},
|
|
|
- scaleSize: 16,
|
|
|
},
|
|
|
},
|
|
|
],
|
|
|
@@ -911,376 +899,654 @@
|
|
|
|
|
|
@prefix-cls: ~'jeesite-night';
|
|
|
|
|
|
- .@{prefix-cls}.night-page {
|
|
|
- .trans-analysis-table-ui();
|
|
|
- background: #fff;
|
|
|
- padding: 0 8px 2px;
|
|
|
- min-height: 100%;
|
|
|
- height: 100%;
|
|
|
+ /* ==========================================================================
|
|
|
+ * 夜间联系:与「持续联系」统一的卡片语言
|
|
|
+ * 背景 #f4f6fa · 卡片圆角 14 · 细边框 #e7ebf3 · 卡片间距 8px · 主色 #2a50ec
|
|
|
+ * ========================================================================== */
|
|
|
+ .@{prefix-cls}.night-page.qj-night-page {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
- overflow: hidden;
|
|
|
- box-sizing: border-box;
|
|
|
+ gap: 8px;
|
|
|
width: calc(100% + 24px);
|
|
|
+ height: 100%;
|
|
|
+ min-height: 0;
|
|
|
margin: 0 -12px;
|
|
|
- padding-left: 0;
|
|
|
- padding-right: 0;
|
|
|
|
|
|
- :deep(.ant-btn) {
|
|
|
- border-radius: 8px;
|
|
|
+ /* 共享 mixin 用 !important 把左右 padding 归零,这里以更高层级还原卡片两侧留白 */
|
|
|
+ padding: 8px 10px !important;
|
|
|
+ background: #f4f6fa;
|
|
|
+ box-sizing: border-box;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ /* ---------------- 查询条件卡 ---------------- */
|
|
|
+ .qj-filter-card {
|
|
|
+ flex: 0 0 auto;
|
|
|
+ border: 1px solid #e7ebf3;
|
|
|
+ border-radius: 14px;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: 0 1px 2px rgb(16 24 40 / 4%);
|
|
|
+ box-sizing: border-box;
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
|
|
|
- :deep(.ant-btn-primary) {
|
|
|
- box-shadow: none;
|
|
|
+ .qj-filter-head {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+ min-height: 42px;
|
|
|
+ padding: 0 14px;
|
|
|
+ border-bottom: 1px solid #eff2f7;
|
|
|
}
|
|
|
|
|
|
- :deep(.ant-input),
|
|
|
- :deep(.ant-input-affix-wrapper),
|
|
|
- :deep(.ant-picker),
|
|
|
- :deep(.ant-select-selector) {
|
|
|
- border-radius: 8px;
|
|
|
+ .qj-card-title {
|
|
|
+ position: relative;
|
|
|
+ padding-left: 11px;
|
|
|
+ color: #111827;
|
|
|
+ font-size: 15px;
|
|
|
+ font-weight: 600;
|
|
|
+ line-height: 22px;
|
|
|
+ white-space: nowrap;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 4px;
|
|
|
+ bottom: 4px;
|
|
|
+ width: 3px;
|
|
|
+ border-radius: 2px;
|
|
|
+ background: #2a50ec;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .page-header {
|
|
|
- display: none;
|
|
|
- margin-bottom: 0;
|
|
|
- flex-shrink: 0;
|
|
|
+ .qj-filter-actions {
|
|
|
+ display: flex;
|
|
|
+ flex: 0 0 auto;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ margin-left: auto;
|
|
|
}
|
|
|
|
|
|
- .page-title {
|
|
|
- font-size: 16px;
|
|
|
- font-weight: 600;
|
|
|
- color: #111827;
|
|
|
- padding-bottom: 8px;
|
|
|
- border-bottom: 1px solid #e5e7eb;
|
|
|
+ .qj-btn-primary.ant-btn {
|
|
|
+ height: 30px;
|
|
|
+ padding: 0 18px;
|
|
|
+ border: 1px solid #2a50ec;
|
|
|
+ border-radius: 8px;
|
|
|
+ background: #2a50ec;
|
|
|
+ box-shadow: none;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 500;
|
|
|
+
|
|
|
+ &:hover,
|
|
|
+ &:focus {
|
|
|
+ border-color: #4b6bf0;
|
|
|
+ background: #4b6bf0;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ border-color: #1e3ed0;
|
|
|
+ background: #1e3ed0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .page-subtitle {
|
|
|
- margin-top: 8px;
|
|
|
- color: #6b7280;
|
|
|
+ .qj-btn-reset.ant-btn {
|
|
|
+ height: 30px;
|
|
|
+ padding: 0 14px;
|
|
|
+ border: 1px solid #e7ebf3;
|
|
|
+ border-radius: 8px;
|
|
|
+ background: #fff;
|
|
|
+ color: #5b6577;
|
|
|
font-size: 12px;
|
|
|
- line-height: 20px;
|
|
|
+ font-weight: 500;
|
|
|
+ box-shadow: none;
|
|
|
+
|
|
|
+ &:hover,
|
|
|
+ &:focus {
|
|
|
+ border-color: #bfcdfb;
|
|
|
+ background: #f8faff;
|
|
|
+ color: #2a50ec;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .filter-bar {
|
|
|
+ /* 行内表单:label 在左、控件在右,控件统一 32px 高、白底 */
|
|
|
+ .qj-filter-grid {
|
|
|
display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
align-items: center;
|
|
|
- gap: 10px;
|
|
|
- padding: 6px;
|
|
|
- min-height: 40px;
|
|
|
- border: 0;
|
|
|
- border-radius: 0;
|
|
|
- background: transparent;
|
|
|
- flex-wrap: nowrap;
|
|
|
- flex-shrink: 0;
|
|
|
- overflow: hidden;
|
|
|
+ gap: 8px 14px;
|
|
|
+ padding: 10px 14px 12px;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
|
|
|
- .filter-item {
|
|
|
- display: flex;
|
|
|
+ .qj-field {
|
|
|
+ display: inline-flex;
|
|
|
+ flex: 0 0 auto;
|
|
|
align-items: center;
|
|
|
- gap: 4px;
|
|
|
- flex: 0 1 auto;
|
|
|
+ gap: 6px;
|
|
|
min-width: 0;
|
|
|
}
|
|
|
|
|
|
- .filter-label {
|
|
|
- color: #6b7280;
|
|
|
+ .qj-field__label {
|
|
|
+ flex: 0 0 auto;
|
|
|
+ color: #5b6577;
|
|
|
font-size: 12px;
|
|
|
+ line-height: 32px;
|
|
|
white-space: nowrap;
|
|
|
}
|
|
|
|
|
|
- .filter-input {
|
|
|
- width: 126px;
|
|
|
- min-width: 0;
|
|
|
+ .qj-field__sep {
|
|
|
+ color: #98a2b3;
|
|
|
+ font-size: 12px;
|
|
|
+ white-space: nowrap;
|
|
|
}
|
|
|
|
|
|
- .filter-item--target .filter-input {
|
|
|
- width: 142px;
|
|
|
+ /* 尺寸与「持续联系」对齐:普通输入/下拉 150,多选对象 200,日期区间 240 */
|
|
|
+ .filter-input {
|
|
|
+ width: 150px;
|
|
|
+ min-width: 0;
|
|
|
}
|
|
|
|
|
|
- .filter-item--month .filter-input {
|
|
|
- width: 112px;
|
|
|
+ .filter-month {
|
|
|
+ width: 75px;
|
|
|
}
|
|
|
|
|
|
.filter-date {
|
|
|
- width: 252px;
|
|
|
+ width: 240px;
|
|
|
}
|
|
|
|
|
|
.filter-op {
|
|
|
- width: 78px;
|
|
|
- min-width: 78px;
|
|
|
+ width: 75px;
|
|
|
+ min-width: 75px;
|
|
|
}
|
|
|
|
|
|
- .filter-actions {
|
|
|
- display: flex;
|
|
|
+ .qj-field.qj-field--target .filter-input,
|
|
|
+ .qj-field.qj-field--target .ant-select {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-input,
|
|
|
+ .qj-field .ant-input-affix-wrapper,
|
|
|
+ .qj-field .ant-picker {
|
|
|
+ height: 32px;
|
|
|
+ padding: 0 10px;
|
|
|
+ border: 1px solid #e7ebf3;
|
|
|
+ border-radius: 8px;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: none;
|
|
|
+ font-size: 12px;
|
|
|
+ transition:
|
|
|
+ border-color 0.2s ease,
|
|
|
+ box-shadow 0.2s ease;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-input-affix-wrapper {
|
|
|
+ display: inline-flex;
|
|
|
align-items: center;
|
|
|
- gap: 8px;
|
|
|
- margin-left: auto;
|
|
|
- flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
- .filter-input,
|
|
|
- .filter-date,
|
|
|
- .filter-op,
|
|
|
- .filter-actions :deep(.ant-btn) {
|
|
|
- align-self: center;
|
|
|
+ .qj-field .ant-input-affix-wrapper > .ant-input {
|
|
|
+ height: 100%;
|
|
|
+ padding: 0;
|
|
|
+ border: 0;
|
|
|
+ border-radius: 0;
|
|
|
+ background: transparent;
|
|
|
+ box-shadow: none;
|
|
|
}
|
|
|
|
|
|
- .content-panel {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- flex: 1 1 auto;
|
|
|
- gap: 2px;
|
|
|
- padding-left: 2px;
|
|
|
- padding-right: 2px;
|
|
|
- min-height: 0;
|
|
|
- overflow: hidden;
|
|
|
- background: #edf2f7;
|
|
|
- box-sizing: border-box;
|
|
|
+ .qj-field .ant-picker .ant-picker-input > input {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
|
|
|
- &::before,
|
|
|
- &::after {
|
|
|
- content: '';
|
|
|
- display: block;
|
|
|
- flex: 0 0 2px;
|
|
|
- min-height: 2px;
|
|
|
- background: #edf2f7;
|
|
|
- }
|
|
|
+ .qj-field .ant-input:hover,
|
|
|
+ .qj-field .ant-input-affix-wrapper:hover,
|
|
|
+ .qj-field .ant-picker:hover,
|
|
|
+ .qj-field .ant-select:hover .ant-select-selector {
|
|
|
+ border-color: #bfcdfb;
|
|
|
+ background: #fff;
|
|
|
}
|
|
|
|
|
|
- .summary-panel,
|
|
|
- .trend-panel {
|
|
|
- flex: 1 1 0;
|
|
|
- min-height: 0;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- overflow: hidden;
|
|
|
- max-height: none;
|
|
|
- padding: 8px;
|
|
|
- border: 0;
|
|
|
- border-radius: 12px;
|
|
|
+ .qj-field .ant-input:focus,
|
|
|
+ .qj-field .ant-input-affix-wrapper-focused,
|
|
|
+ .qj-field .ant-picker-focused,
|
|
|
+ .qj-field .ant-select-focused .ant-select-selector {
|
|
|
+ border-color: #2a50ec !important;
|
|
|
background: #fff;
|
|
|
- box-shadow: inset 0 0 0 1px #e2e8f0;
|
|
|
- box-sizing: border-box;
|
|
|
+ box-shadow: 0 0 0 2px rgb(42 80 236 / 12%) !important;
|
|
|
}
|
|
|
|
|
|
- .summary-panel {
|
|
|
- gap: 0;
|
|
|
- min-height: 0;
|
|
|
+ .qj-field .ant-input-status-error,
|
|
|
+ .qj-field .ant-input-affix-wrapper-status-error {
|
|
|
+ border-color: #e5484d;
|
|
|
}
|
|
|
|
|
|
- .query-state-panel {
|
|
|
- flex: 1 1 auto;
|
|
|
- min-height: 0;
|
|
|
- height: 100%;
|
|
|
+ .qj-field .ant-select {
|
|
|
+ width: 150px;
|
|
|
+ height: 32px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .filter-op.ant-select {
|
|
|
+ width: 75px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field.qj-field--target .ant-select {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select .ant-select-selector {
|
|
|
+ height: 32px !important;
|
|
|
+ padding: 0 10px;
|
|
|
+ border: 1px solid #e7ebf3;
|
|
|
+ border-radius: 8px;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-single .ant-select-selection-item,
|
|
|
+ .qj-field .ant-select-single .ant-select-selection-placeholder {
|
|
|
+ line-height: 30px;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-multiple .ant-select-selector {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
- padding: 12px 0 0;
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
|
|
|
- .table-panel {
|
|
|
+ .qj-field .ant-select-multiple .ant-select-selection-overflow {
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-multiple .ant-select-selection-item {
|
|
|
+ height: 22px;
|
|
|
+ margin: 0 4px 0 0;
|
|
|
+ padding: 0 7px;
|
|
|
+ border-radius: 4px;
|
|
|
+ background: #eef2ff;
|
|
|
+ color: #2448c9;
|
|
|
+ font-size: 11px;
|
|
|
+ line-height: 22px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-multiple .ant-select-selection-search {
|
|
|
+ margin-inline-start: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-multiple .ant-select-selection-placeholder {
|
|
|
+ left: 10px;
|
|
|
+ line-height: 30px;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select-arrow {
|
|
|
+ color: #98a2b3;
|
|
|
+ font-size: 11px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* ---------------- 内容区 ---------------- */
|
|
|
+ .content-panel {
|
|
|
+ display: flex;
|
|
|
flex: 1 1 auto;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 8px;
|
|
|
min-height: 0;
|
|
|
+ padding: 0;
|
|
|
+ background: transparent;
|
|
|
+ box-sizing: border-box;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-summary-card,
|
|
|
+ .qj-trend-card {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
+ min-height: 0;
|
|
|
+ border: 1px solid #e7ebf3;
|
|
|
+ border-radius: 14px;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: 0 1px 2px rgb(16 24 40 / 4%);
|
|
|
+ box-sizing: border-box;
|
|
|
overflow: hidden;
|
|
|
- padding: 0;
|
|
|
}
|
|
|
|
|
|
- .summary-panel .table-wrapper {
|
|
|
+ .qj-summary-card {
|
|
|
flex: 1 1 auto;
|
|
|
- min-height: 0;
|
|
|
- border: 0;
|
|
|
- border-radius: 0;
|
|
|
- overflow: hidden;
|
|
|
}
|
|
|
|
|
|
- .summary-panel .night-summary-table .ant-table-wrapper {
|
|
|
- padding: 0;
|
|
|
+ .qj-trend-card {
|
|
|
+ flex: 0 0 268px;
|
|
|
}
|
|
|
|
|
|
- .panel-title-wrap {
|
|
|
+ .qj-card-head {
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
- gap: 4px;
|
|
|
- min-width: 0;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+ flex: 0 0 auto;
|
|
|
+ min-height: 42px;
|
|
|
+ padding: 0 14px;
|
|
|
+ border-bottom: 1px solid #eff2f7;
|
|
|
}
|
|
|
|
|
|
- .panel-title {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 600;
|
|
|
- color: #111827;
|
|
|
+ .qj-card-sub {
|
|
|
+ color: #98a2b3;
|
|
|
+ font-size: 11px;
|
|
|
+ line-height: 16px;
|
|
|
}
|
|
|
|
|
|
- .panel-desc {
|
|
|
- color: #6b7280;
|
|
|
- font-size: 12px;
|
|
|
- line-height: 20px;
|
|
|
+ .qj-card-meta {
|
|
|
+ margin-left: auto;
|
|
|
+ color: #98a2b3;
|
|
|
+ font-size: 11px;
|
|
|
+ line-height: 16px;
|
|
|
+ white-space: nowrap;
|
|
|
+ font-variant-numeric: tabular-nums;
|
|
|
}
|
|
|
|
|
|
- .panel-header {
|
|
|
+ .query-state-panel {
|
|
|
display: flex;
|
|
|
- align-items: flex-start;
|
|
|
- justify-content: space-between;
|
|
|
- gap: 12px;
|
|
|
- padding: 0 0 8px;
|
|
|
- width: 100%;
|
|
|
+ flex: 1 1 auto;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ min-height: 0;
|
|
|
+ padding: 8px 0 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-panel {
|
|
|
+ display: flex;
|
|
|
+ flex: 1 1 auto;
|
|
|
+ flex-direction: column;
|
|
|
+ min-height: 0;
|
|
|
+ padding: 0;
|
|
|
box-sizing: border-box;
|
|
|
- border-bottom: 1px solid #f1f5f9;
|
|
|
- flex: 0 0 auto;
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
|
|
|
+ /* 表头固定 + body 内部滚动;逐层传递高度,避免 body 的 max-height 偏小留下空白 */
|
|
|
.table-wrapper {
|
|
|
- min-height: 0;
|
|
|
display: flex;
|
|
|
+ flex: 1 1 auto;
|
|
|
flex-direction: column;
|
|
|
+ min-height: 0;
|
|
|
+ overflow: hidden;
|
|
|
+ border: 0;
|
|
|
+ background: transparent;
|
|
|
+ box-shadow: none;
|
|
|
}
|
|
|
|
|
|
.table-wrapper .jeesite-basic-table {
|
|
|
- height: 100%;
|
|
|
- min-height: 0;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
+ height: 100%;
|
|
|
+ min-height: 0;
|
|
|
}
|
|
|
|
|
|
.table-wrapper .night-summary-table > div:first-child {
|
|
|
display: none;
|
|
|
}
|
|
|
|
|
|
- .table-wrapper .night-summary-table > .ant-table-wrapper,
|
|
|
+ .table-wrapper .ant-table-wrapper,
|
|
|
.table-wrapper .ant-spin-nested-loading,
|
|
|
- .table-wrapper .ant-spin-container,
|
|
|
- .table-wrapper .ant-table,
|
|
|
- .table-wrapper .ant-table-container {
|
|
|
- flex: 1 1 auto;
|
|
|
- min-height: 0;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
-
|
|
|
.table-wrapper .ant-spin-container,
|
|
|
.table-wrapper .ant-table,
|
|
|
.table-wrapper .ant-table-container {
|
|
|
display: flex;
|
|
|
+ flex: 1 1 auto;
|
|
|
flex-direction: column;
|
|
|
+ height: 100%;
|
|
|
+ min-height: 0;
|
|
|
}
|
|
|
|
|
|
.table-wrapper .ant-table-body {
|
|
|
+ flex: 1 1 auto;
|
|
|
+ min-height: 0;
|
|
|
max-height: 100% !important;
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-header {
|
|
|
+ flex: 0 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-thead > tr > th {
|
|
|
+ height: 40px;
|
|
|
+ padding: 0 12px;
|
|
|
+ border-right: 0;
|
|
|
+ border-bottom: 1px solid #eff2f7;
|
|
|
+ background: #f8fafc;
|
|
|
+ color: #5b6577;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-thead > tr > th::before {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-thead > tr:first-child > th:first-child {
|
|
|
+ border-top-left-radius: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-thead > tr:first-child > th:last-child {
|
|
|
+ border-top-right-radius: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr > td {
|
|
|
+ height: 40px;
|
|
|
+ padding: 0 12px;
|
|
|
+ border-right: 0;
|
|
|
+ border-bottom: 1px solid #f4f6fa !important;
|
|
|
+ color: #1f2937;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr:last-child > td {
|
|
|
+ border-bottom: 0 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr {
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr:hover > td {
|
|
|
+ background: #f8faff !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr.summary-row-selected > td,
|
|
|
+ .table-wrapper .ant-table-tbody > tr.active-row > td {
|
|
|
+ background: #dbe7ff !important;
|
|
|
+ color: #1e3ed0;
|
|
|
+ font-weight: 600;
|
|
|
+ box-shadow: none;
|
|
|
+ border-radius: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr.summary-row-selected:hover > td,
|
|
|
+ .table-wrapper .ant-table-tbody > tr.active-row:hover > td {
|
|
|
+ background: #d1e0ff !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr.summary-row-selected > td:first-child,
|
|
|
+ .table-wrapper .ant-table-tbody > tr.active-row > td:first-child {
|
|
|
+ color: #1e3ed0;
|
|
|
+ font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.pagination-bar {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: flex-end;
|
|
|
- gap: 8px;
|
|
|
flex: 0 0 auto;
|
|
|
- flex-wrap: wrap;
|
|
|
- padding: 8px 0 0;
|
|
|
- width: 100%;
|
|
|
+ padding: 8px 14px 10px;
|
|
|
+ border-top: 1px solid #eff2f7;
|
|
|
+ background: transparent;
|
|
|
box-sizing: border-box;
|
|
|
- color: #6b7280;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pagination-bar .analysis-pagination {
|
|
|
+ color: #98a2b3;
|
|
|
+ font-size: 11px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pagination-bar .ant-pagination-item,
|
|
|
+ .pagination-bar .ant-pagination-prev,
|
|
|
+ .pagination-bar .ant-pagination-next {
|
|
|
+ min-width: 26px;
|
|
|
+ height: 26px;
|
|
|
+ border-radius: 6px;
|
|
|
+ border-color: #e7ebf3;
|
|
|
+ line-height: 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pagination-bar .ant-pagination-item a {
|
|
|
+ color: #5b6577;
|
|
|
font-size: 12px;
|
|
|
- border-top: 1px solid #f1f5f9;
|
|
|
+ line-height: 24px;
|
|
|
}
|
|
|
|
|
|
- .pagination-total {
|
|
|
- margin-right: 0;
|
|
|
- white-space: nowrap;
|
|
|
+ .pagination-bar .ant-pagination-item-active {
|
|
|
+ border-color: #2a50ec;
|
|
|
+ background: #eef2ff;
|
|
|
}
|
|
|
|
|
|
- .pagination-size,
|
|
|
- .pagination-actions,
|
|
|
- .pagination-jump {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 6px;
|
|
|
- white-space: nowrap;
|
|
|
+ .pagination-bar .ant-pagination-item-active a {
|
|
|
+ color: #2a50ec;
|
|
|
+ font-weight: 600;
|
|
|
}
|
|
|
|
|
|
- .pagination-input {
|
|
|
- width: 48px;
|
|
|
+ .pagination-bar .ant-pagination-options {
|
|
|
+ margin-inline-start: 8px;
|
|
|
}
|
|
|
|
|
|
- .trend-panel {
|
|
|
- gap: 12px;
|
|
|
- min-height: 0;
|
|
|
+ .pagination-bar .ant-select-selector {
|
|
|
+ border-radius: 6px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .pagination-bar .ant-pagination-options-quick-jumper input {
|
|
|
+ height: 26px;
|
|
|
+ border-radius: 6px;
|
|
|
}
|
|
|
|
|
|
+ /* ---------------- 趋势卡 ---------------- */
|
|
|
.trend-panel-body {
|
|
|
- flex: 1 1 auto;
|
|
|
- min-height: 0;
|
|
|
display: flex;
|
|
|
+ flex: 1 1 auto;
|
|
|
flex-direction: column;
|
|
|
- gap: 12px;
|
|
|
- padding: 8px 0 0;
|
|
|
- width: 100%;
|
|
|
+ min-height: 0;
|
|
|
+ padding: 10px 14px 12px;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
|
|
|
.trend-chart-shell {
|
|
|
- flex: 1 1 auto;
|
|
|
- min-height: 0;
|
|
|
- padding: 0;
|
|
|
- border: 0;
|
|
|
- border-radius: 0;
|
|
|
- background: transparent;
|
|
|
- box-shadow: none;
|
|
|
display: flex;
|
|
|
+ flex: 1 1 auto;
|
|
|
flex-direction: column;
|
|
|
+ min-height: 0;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.trend-empty {
|
|
|
- height: 100%;
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
+ flex: 1 1 auto;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- gap: 10px;
|
|
|
- border: 1px dashed #d7e3f4;
|
|
|
- border-radius: 10px;
|
|
|
- background: #fafcff;
|
|
|
- }
|
|
|
-
|
|
|
- .trend-empty-title {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 600;
|
|
|
- color: #111827;
|
|
|
- }
|
|
|
-
|
|
|
- .trend-empty-tip {
|
|
|
- color: #6b7280;
|
|
|
- font-size: 12px;
|
|
|
- line-height: 20px;
|
|
|
- text-align: center;
|
|
|
+ min-height: 0;
|
|
|
}
|
|
|
|
|
|
.trend-chart {
|
|
|
flex: 1 1 auto;
|
|
|
- min-height: 180px;
|
|
|
width: 100%;
|
|
|
+ min-height: 0;
|
|
|
}
|
|
|
|
|
|
- @media screen and (max-width: 1280px) {
|
|
|
- .filter-bar {
|
|
|
- flex-wrap: wrap;
|
|
|
- overflow: visible;
|
|
|
+ /* ---------------- 响应式 ---------------- */
|
|
|
+ @media screen and (max-width: 1440px) {
|
|
|
+ .qj-trend-card {
|
|
|
+ flex-basis: 232px;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- .filter-actions {
|
|
|
- width: 100%;
|
|
|
- margin-left: 0;
|
|
|
+ @media screen and (max-width: 1280px) {
|
|
|
+ .qj-trend-card {
|
|
|
+ flex-basis: 210px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media screen and (max-width: 992px) {
|
|
|
+ .qj-card-sub {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field,
|
|
|
+ .qj-field--target {
|
|
|
+ flex: 1 1 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-select,
|
|
|
+ .qj-field .filter-op.ant-select,
|
|
|
+ .qj-field.qj-field--target .ant-select,
|
|
|
.filter-input,
|
|
|
.filter-date {
|
|
|
width: 100%;
|
|
|
}
|
|
|
+
|
|
|
+ .qj-field .filter-op.ant-select {
|
|
|
+ flex: 1 1 0;
|
|
|
+ width: auto;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* ---------------- 暗色主题 ---------------- */
|
|
|
+ html[data-theme='dark'] & {
|
|
|
+ background: #0f172a;
|
|
|
+
|
|
|
+ .qj-filter-card,
|
|
|
+ .qj-summary-card,
|
|
|
+ .qj-trend-card {
|
|
|
+ border-color: #1f2937;
|
|
|
+ background: #111827;
|
|
|
+ box-shadow: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-card-title {
|
|
|
+ color: #e5e7eb;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field__label,
|
|
|
+ .qj-card-sub,
|
|
|
+ .qj-card-meta {
|
|
|
+ color: #94a3b8;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-filter-head,
|
|
|
+ .qj-card-head,
|
|
|
+ .pagination-bar {
|
|
|
+ border-color: #1f2937;
|
|
|
+ }
|
|
|
+
|
|
|
+ .qj-field .ant-input,
|
|
|
+ .qj-field .ant-input-affix-wrapper,
|
|
|
+ .qj-field .ant-picker,
|
|
|
+ .qj-field .ant-select .ant-select-selector {
|
|
|
+ border-color: #1f2937;
|
|
|
+ background: #0f172a;
|
|
|
+ color: #e5e7eb;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-thead > tr > th {
|
|
|
+ border-color: #1f2937;
|
|
|
+ background: #0f172a;
|
|
|
+ color: #94a3b8;
|
|
|
+ }
|
|
|
+
|
|
|
+ .table-wrapper .ant-table-tbody > tr > td {
|
|
|
+ border-color: #1f2937;
|
|
|
+ color: #e5e7eb;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|