提交 8f531fe8 authored 作者: 刘宇琪's avatar 刘宇琪

fix:2.23BUG部分修复

上级 f8252418
......@@ -179,11 +179,6 @@ export function getPostMemberList() {
}
<<<<<<< HEAD
=======
>>>>>>> master
/**
* 获取筛选项配置 - 行业列表
* GET /api/billImpactAnalysis/industry/hylyList
......
......@@ -151,24 +151,12 @@ const fieldAnalysis = ref('人工智能与信息技术占据最大份额,反
const radarAnalysis = ref('研究型大学在基础科学领域(生物医学、材料科学)占据主导地位;科技企业高度集中于人工智能和信息技术领域;国家实验室在能源技术和国家安全相关领域有显著优势;国防承包商的研究高度集中于航空航天和国家安全领域。')
// 切换视图
<<<<<<< HEAD
function switchView(view: string) {
console.log('[v0] switchView 被调用, view:', view, ', currentView:', currentView.value)
if (currentView.value !== view) {
currentView.value = view
if (view === 'ranking') {
console.log('[v0] 切换到排名视图,调用 handleGetOverallRanking')
handleGetOverallRanking()
} else {
console.log('[v0] 切换到研究布局视图,调用 handleGetResearchField 和 handleGetResearchFieldSubjectType')
=======
function switchView(view: string) {
if (currentView.value !== view) {
currentView.value = view
if (view === 'ranking') {
handleGetOverallRanking()
} else {
>>>>>>> master
handleGetResearchField()
handleGetResearchFieldSubjectType()
}
......@@ -183,12 +171,7 @@ const handleGetOverallRanking = async () => {
subjectTypeId: props.activeCate1,
year: releaseTime.value
}
<<<<<<< HEAD
const res = await getOverallRanking(params)
console.log('[v0] 综合排名', res)
=======
const res = await getOverallRanking(params)
>>>>>>> master
if (res.code === 200 && res.data) {
innoItemList.value = res.data
}
......@@ -205,12 +188,7 @@ const handleGetResearchField = async () => {
const params = {
year: releaseTime.value
}
<<<<<<< HEAD
const res = await getResearchField(params)
console.log('[v0] 研究领域布局情况', res)
=======
const res = await getResearchField(params)
>>>>>>> master
if (res.code === 200 && res.data) {
const names = res.data.map(item => item.areaName)
const values = res.data.map(item => item.amount)
......@@ -232,12 +210,7 @@ const handleGetResearchFieldSubjectType = async () => {
const params = {
year: releaseTime.value
}
<<<<<<< HEAD
const res = await getResearchFieldSubjectType(params)
console.log('[v0] 研究领域主体类型', res)
=======
const res = await getResearchFieldSubjectType(params)
>>>>>>> master
if (res.code === 200 && res.data) {
raderOptionData.value = res.data
}
......
<template>
<div class="chart-summary">
<svg class="summary-icon" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="10" cy="10" r="9" stroke="#055FC2" stroke-width="2" fill="none"/>
<path d="M7 10L9 12L13 8" stroke="#055FC2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<p class="summary-text">{{ text }}</p>
<svg class="arrow-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"
@click="$emit('more')">
<path d="M9 18L15 12L9 6" stroke="#055FC2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<div class="chart-summary-wrapper">
<div class="btn-box" @mouseenter="handleSwitchAiContentShow(true)">
<AiButton />
</div>
<div class="content-box" v-if="isShowAiContent" @mouseleave="handleSwitchAiContentShow(false)">
<AiPane :aiContent="text" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import AiButton from '@/components/base/Ai/AiButton/index.vue'
import AiPane from '@/components/base/Ai/AiPane/index.vue'
defineProps({
text: {
type: String,
......@@ -21,40 +22,35 @@ defineProps({
})
defineEmits(['more'])
const isShowAiContent = ref(false)
const handleSwitchAiContentShow = (isShow) => {
isShowAiContent.value = isShow
}
</script>
<style lang="scss" scoped>
.chart-summary {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 16px;
margin: 0 16px 16px;
background: #F6FAFF;
border: 1px solid #E7F3FF;
border-radius: 4px;
.summary-icon {
flex-shrink: 0;
margin-top: 2px;
}
.chart-summary-wrapper {
position: absolute;
right: 0;
bottom: 0;
left: 0;
pointer-events: none;
.summary-text {
flex: 1;
font-size: 16px;
line-height: 24px;
color: #055FC2;
margin: 0;
.btn-box {
position: absolute;
right: 0;
bottom: 0;
pointer-events: auto;
}
.arrow-icon {
flex-shrink: 0;
cursor: pointer;
transition: opacity 0.2s;
&:hover {
opacity: 0.7;
}
.content-box {
position: absolute;
left: 0;
right: 0;
bottom: 0;
pointer-events: auto;
}
}
</style>
......@@ -61,19 +61,9 @@
<!-- 科研实力Tab -->
<ResearchStrength v-else-if="activeTab === '科研实力'" />
<<<<<<< HEAD
<!-- 合作情况Tab -->
<Cooperation v-else-if="activeTab === '合作情况'" />
<!-- 其他Tab内容占位 -->
<div class="placeholder-content" v-else>
<div class="placeholder-text">{{ activeTab }}内容开发中...</div>
</div>
=======
<Cooperation v-else-if="activeTab === '合作情况'" />
<OtherInfo v-else-if="activeTab === '其他情况'" />
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
</div>
</div>
</div>
......@@ -85,10 +75,7 @@ import AreaTag from '@/components/base/AreaTag/index.vue'
import SchoolDetail from './tabs/SchoolDetail.vue'
import ResearchStrength from './tabs/ResearchStrength.vue'
import Cooperation from './tabs/Cooperation.vue'
<<<<<<< HEAD
=======
import OtherInfo from './tabs/OtherInfo.vue'
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
// 大学基本信息
const universityInfo = ref({
......@@ -235,11 +222,7 @@ const latestDynamics = ref([
date: '9月15日',
title: '艾伦·M·加伯接任临时校长',
content: '原教务长艾伦·加伯(Alan M. Garber)出任哈佛第30任校长(临时),并完整复学术诚信与校园团结。',
<<<<<<< HEAD
tags: [{ name: '集成��路', type: 'tag6' }],
=======
tags: [{ name: '集成电路', type: 'tag6' }],
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
isHighlight: true
},
{
......@@ -356,18 +339,12 @@ const handleVisitWebsite = () => {
}
.header-section {
<<<<<<< HEAD
padding: 80px 160px 30px;
.header-content {
=======
padding: 80px;
display: flex;
justify-content: center;
.header-content {
width: 1600px;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
display: flex;
align-items: flex-start;
gap: 24px;
......@@ -452,22 +429,15 @@ const handleVisitWebsite = () => {
.nav-tabs {
display: flex;
<<<<<<< HEAD
margin: 0 160px 16px;
=======
justify-content: center;
margin: 0 auto 16px;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
background: rgba(255, 255, 255, 0.65);
border-radius: 10px;
padding: 5px;
box-shadow: 0px 0px 20px rgba(25, 69, 130, 0.1);
<<<<<<< HEAD
=======
width: 1600px;
margin-left: auto;
margin-right: auto;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.nav-tab {
flex: 1;
......@@ -498,16 +468,12 @@ const handleVisitWebsite = () => {
}
.main-content {
<<<<<<< HEAD
padding: 0 160px;
=======
display: flex;
justify-content: center;
> * {
width: 1600px;
}
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
}
.placeholder-content {
......
<template>
<div class="cooperation-content">
<<<<<<< HEAD
<!-- 悬浮提示框 -->
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<Teleport to="body">
<div v-if="tooltipVisible" class="chart-tooltip"
:style="{ left: tooltipPosition.x + 10 + 'px', top: tooltipPosition.y - 30 + 'px' }">
......@@ -12,13 +8,7 @@
</div>
</Teleport>
<<<<<<< HEAD
<!-- 第一行:数量变化 + 类型变化 -->
<div class="chart-row">
<!-- 与中国合作数量变化 - 面积图 -->
=======
<div class="chart-row">
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<AnalysisBox title="与中国合作数量变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
<div class="chart-container">
<div class="area-chart">
......@@ -39,10 +29,6 @@
</defs>
<path :d="quantityAreaPath" fill="url(#coopAreaGradient1)" />
<path :d="quantityLinePath" fill="none" stroke="#FF954D" stroke-width="2" />
<<<<<<< HEAD
<!-- 8px圆圈节点 -->
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<g class="data-points">
<circle v-for="(point, idx) in quantityPoints" :key="idx"
:cx="point.x" :cy="point.y" r="4"
......@@ -60,67 +46,23 @@
</div>
<ChartSummary text="近十年哈佛大学与中国合作项目数量呈'前期稳步增多、2020年后敏感领域收缩、非敏感领域小幅复苏'的趋势。" />
</AnalysisBox>
<<<<<<< HEAD
<!-- 与中国合作类型变化 - 半环形饼图 -->
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<AnalysisBox title="与中国合作类型变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
<template #header-btn>
<el-select v-model="selectedYear" size="small" style="width: 80px;">
<el-option v-for="year in yearOptions" :key="year" :label="year" :value="year" />
</el-select>
</template>
<<<<<<< HEAD
<div class="chart-container">
<div class="semi-donut-chart">
<div class="donut-wrapper">
<svg viewBox="0 0 200 140" class="donut-svg">
<!-- 半环形:蓝色57% + 橙色25% + 浅蓝绿18% -->
<path :d="getDonutPath(0, 57)" fill="rgba(105, 177, 255, 1)" />
<path :d="getDonutPath(57, 82)" fill="rgba(255, 192, 105, 1)" />
<path :d="getDonutPath(82, 100)" fill="rgba(135, 232, 222, 1)" />
</svg>
</div>
<div class="donut-legend">
<div class="legend-item">
<span class="legend-dot" style="background: rgba(105, 177, 255, 1);"></span>
<span class="legend-label">项目合作</span>
<span class="legend-value">57%</span>
</div>
<div class="legend-item">
<span class="legend-dot" style="background: rgba(255, 192, 105, 1);"></span>
<span class="legend-label">论文合作</span>
<span class="legend-value">25%</span>
</div>
<div class="legend-item">
<span class="legend-dot" style="background: rgba(135, 232, 222, 1);"></span>
<span class="legend-label">专利合作</span>
<span class="legend-value">18%</span>
</div>
</div>
</div>
</div>
=======
<SemiDonutChart :data="{
names: ['项目合作', '论文合作', '专利合作'],
values: [57, 25, 18]
}" />
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<ChartSummary text="哈佛大学与中国的合作当中,大部分是以项目合作为主" />
</AnalysisBox>
</div>
<<<<<<< HEAD
<!-- 第二行:领域变化 + 经费变化 -->
<div class="chart-row">
<!-- 与中国合作领域变化 - 堆叠柱状图 -->
<AnalysisBox title="与中国合作领域变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
=======
<div class="chart-row">
<AnalysisBox title="与中国合作领域变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<div class="chart-container">
<div class="stacked-bar-chart">
<!-- 图例 -->
......@@ -155,12 +97,7 @@
<ChartSummary text="近十年哈佛大学与中国合作项目中,各领域分布均匀,其中以人工智能与能源领域为主。" />
</AnalysisBox>
<<<<<<< HEAD
<!-- 与中国合作经费变化 - 面积图 -->
<AnalysisBox title="与中国合作经费变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
=======
<AnalysisBox title="与中国合作经费变化" width="100%" height="500px" :show-all-btn="false" class="chart-box">
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
<div class="chart-container">
<div class="area-chart">
<div class="y-axis">
......@@ -200,50 +137,8 @@
</AnalysisBox>
</div>
<<<<<<< HEAD
<!-- 第三行:与中国合作事例 -->
<AnalysisBox title="与中国合作事例" width="100%" height="auto" :show-all-btn="false" class="cases-box">
<div class="cases-timeline">
<!-- 日期行 -->
<div class="timeline-dates">
<span v-for="(item, index) in visibleCases" :key="index" class="date-label">{{ item.date }}</span>
</div>
<!-- 时间轴:彩虹渐变线 + 绿色圆形节点 -->
<div class="timeline-track">
<div class="timeline-line"></div>
<div class="timeline-nodes">
<div v-for="(item, index) in visibleCases" :key="index" class="node-wrapper">
<div class="node-dot"></div>
</div>
</div>
</div>
<!-- 卡片行 -->
<div class="cases-carousel">
<button class="carousel-btn prev" @click="prevCases">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M15 18L9 12L15 6" stroke="#055FC2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<div class="cases-cards">
<div v-for="(item, index) in visibleCases" :key="index" class="case-card">
<div class="case-tag" :class="item.tagType">{{ item.tag }}</div>
<div class="case-partner">合作主体:{{ item.partner }}</div>
<div class="case-title">{{ item.title }}</div>
</div>
</div>
<button class="carousel-btn next" @click="nextCases">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M9 18L15 12L9 6" stroke="#055FC2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</div>
</div>
=======
<AnalysisBox title="与中国合作事例" width="100%" height="auto" :show-all-btn="false" class="cases-box">
<CooperationCases />
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
</AnalysisBox>
</div>
</template>
......@@ -252,11 +147,8 @@
import { ref, computed } from 'vue'
import AnalysisBox from '@/components/base/boxBackground/analysisBox.vue'
import ChartSummary from '../components/ChartSummary.vue'
<<<<<<< HEAD
=======
import SemiDonutChart from '../components/SemiDonutChart.vue'
import CooperationCases from '../components/CooperationCases.vue'
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
// Tooltip 状态
const tooltipVisible = ref(false)
......@@ -348,36 +240,6 @@ const fieldData = [
]}
]
<<<<<<< HEAD
// 合作事例数据
const casesData = ref([
{ date: '2025年3月12日', tag: '项目合作', tagType: 'project', partner: '清华大学', title: '"气候变化、碳中和与能源智联"(CNEST)研讨会' },
{ date: '2025年5月7日', tag: '专利合作', tagType: 'patent', partner: '北京航空航天大学', title: '北航-哈佛 Wood 实验室联合研制鲤鱼仿生吸盘机器人' },
{ date: '2025年6月23日', tag: '论��合作', tagType: 'paper', partner: '山西省古建筑与彩塑壁画保护研究院', title: '山西古建院-哈佛中国艺术实验室合作' },
{ date: '2025年10月19日', tag: '项目合作', tagType: 'project', partner: '复旦大学、四川大学', title: '哈佛中国健康伙伴计划多机构合作' }
])
const caseStartIndex = ref(0)
const activeCaseIndex = ref(0)
const visibleCases = computed(() => {
return casesData.value.slice(caseStartIndex.value, caseStartIndex.value + 4)
})
const prevCases = () => {
if (caseStartIndex.value > 0) {
caseStartIndex.value--
}
}
const nextCases = () => {
if (caseStartIndex.value < casesData.value.length - 4) {
caseStartIndex.value++
}
}
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
// 面积图路径计算
const createAreaPath = (data, maxValue = 400) => {
const width = 700
......@@ -422,32 +284,6 @@ const getDataPoints = (data, maxValue = 400) => {
const quantityPoints = computed(() => getDataPoints(quantityData))
const fundingPoints = computed(() => getDataPoints(fundingData))
<<<<<<< HEAD
// 半环形饼图路径计算
const getDonutPath = (startPercent, endPercent) => {
const cx = 100
const cy = 100
const outerR = 80
const innerR = 50
const startAngle = Math.PI * (1 + startPercent / 100)
const endAngle = Math.PI * (1 + endPercent / 100)
const x1 = cx + outerR * Math.cos(startAngle)
const y1 = cy + outerR * Math.sin(startAngle)
const x2 = cx + outerR * Math.cos(endAngle)
const y2 = cy + outerR * Math.sin(endAngle)
const x3 = cx + innerR * Math.cos(endAngle)
const y3 = cy + innerR * Math.sin(endAngle)
const x4 = cx + innerR * Math.cos(startAngle)
const y4 = cy + innerR * Math.sin(startAngle)
const largeArc = (endPercent - startPercent) > 50 ? 1 : 0
return `M${x1},${y1} A${outerR},${outerR} 0 ${largeArc} 1 ${x2},${y2} L${x3},${y3} A${innerR},${innerR} 0 ${largeArc} 0 ${x4},${y4} Z`
}
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
</script>
<style lang="scss" scoped>
......@@ -464,6 +300,7 @@ const getDonutPath = (startPercent, endPercent) => {
.chart-box {
flex: 1;
min-width: 0;
position: relative;
}
}
......@@ -473,12 +310,7 @@ const getDonutPath = (startPercent, endPercent) => {
display: flex;
flex-direction: column;
}
<<<<<<< HEAD
// 面积图样式
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.area-chart {
flex: 1;
display: flex;
......@@ -522,64 +354,7 @@ const getDonutPath = (startPercent, endPercent) => {
}
}
}
<<<<<<< HEAD
// 半环形饼图样式
.semi-donut-chart {
flex: 1;
display: flex;
align-items: flex-start;
justify-content: center;
gap: 60px;
padding-top: 40px;
.donut-wrapper {
width: 240px;
height: 160px;
.donut-svg {
width: 100%;
height: 100%;
}
}
.donut-legend {
display: flex;
flex-direction: column;
gap: 20px;
padding-top: 20px;
.legend-item {
display: flex;
align-items: center;
gap: 10px;
.legend-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.legend-label {
font-size: 16px;
color: #3B414B;
width: 60px;
}
.legend-value {
font-size: 16px;
font-weight: 700;
color: #3B414B;
margin-left: 16px;
}
}
}
}
// 堆叠柱状图样式
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.stacked-bar-chart {
flex: 1;
display: flex;
......@@ -635,17 +410,10 @@ const getDonutPath = (startPercent, endPercent) => {
.bar-stack {
display: flex;
<<<<<<< HEAD
flex-direction: column-reverse; // 从底部开始堆叠
align-items: center;
width: 20px;
height: 240px; // 必须设置高度,子元素百分比才能生效
=======
flex-direction: column-reverse;
align-items: center;
width: 20px;
height: 240px;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
position: relative;
.bar-segment {
......@@ -669,163 +437,10 @@ const getDonutPath = (startPercent, endPercent) => {
}
}
}
<<<<<<< HEAD
// 合作事例样式
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.cases-box {
:deep(.wrapper-main) {
overflow: visible;
}
}
<<<<<<< HEAD
.cases-timeline {
padding: 24px;
// 日期行
.timeline-dates {
display: flex;
justify-content: space-around;
padding: 0 56px;
margin-bottom: 8px;
.date-label {
font-size: 14px;
font-weight: 700;
color: #055FC2;
text-align: center;
flex: 1;
}
}
// 时间轴行
.timeline-track {
position: relative;
height: 24px;
margin-bottom: 16px;
.timeline-line {
position: absolute;
top: 50%;
left: 56px;
right: 56px;
height: 0;
// 单色虚线
border-top: 4px dashed #055FC2;
transform: translateY(-50%);
}
.timeline-nodes {
display: flex;
justify-content: space-around;
padding: 0 56px;
position: relative;
z-index: 1;
height: 100%;
align-items: center;
.node-wrapper {
flex: 1;
display: flex;
justify-content: center;
.node-dot {
width: 16px;
height: 16px;
border-radius: 50%;
background: #22C55E;
border: 3px solid #FFFFFF;
box-shadow: 0 0 0 2px #22C55E;
}
}
}
}
// 卡片行
.cases-carousel {
display: flex;
align-items: stretch;
gap: 8px;
.carousel-btn {
width: 32px;
height: auto;
min-height: 120px;
display: flex;
align-items: center;
justify-content: center;
background: transparent;
border: none;
cursor: pointer;
color: #055FC2;
&:hover {
background: #F6FAFF;
border-radius: 4px;
}
}
.cases-cards {
flex: 1;
display: flex;
gap: 16px;
.case-card {
width: 273px;
min-height: 210px;
flex-shrink: 0;
padding: 16px;
background: #FFFFFF;
border: 1px solid #E5E7EB;
border-radius: 4px;
display: flex;
flex-direction: column;
gap: 8px;
.case-tag {
display: inline-block;
padding: 2px 8px;
border-radius: 4px;
font-size: 12px;
width: fit-content;
&.project {
background: #FFF1F0;
color: #F5222D;
border: 1px solid #FFA39E;
}
&.patent {
background: #FFFBE6;
color: #FAAD14;
border: 1px solid #FFE58F;
}
&.paper {
background: #F0F5FF;
color: #2F54EB;
border: 1px solid #ADC6FF;
}
}
.case-partner {
font-size: 14px;
color: #5F656C;
}
.case-title {
font-size: 16px;
font-weight: 700;
color: #3B414B;
line-height: 24px;
}
}
}
}
}
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
</style>
......@@ -288,11 +288,7 @@ const paperPoints = computed(() => getDataPoints(paperData))
const fundingPoints = computed(() => getDataPoints(fundingData))
// 雷达图数据和计算
<<<<<<< HEAD
const radarValues = [0.7, 0.9, 0.85, 0.6, 0.75, 0.65] // 各领域相对��
=======
const radarValues = [0.7, 0.9, 0.85, 0.6, 0.75, 0.65] // 各领域
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
const getHexagonPoints = (cx, cy, r) => {
const points = []
......@@ -396,6 +392,7 @@ const getPatentBarGradient = () => {
.chart-box {
flex: 1;
min-width: 0;
position: relative;
}
}
......@@ -648,6 +645,5 @@ const getPatentBarGradient = () => {
}
}
// 图表底部摘要
</style>
......@@ -203,12 +203,7 @@ const infoList = computed(() => [
<style lang="scss" scoped>
.school-detail-content {
display: flex;
<<<<<<< HEAD
gap: 16px;
// align-items 默认 stretch,使左右等高
=======
gap: 16px;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
align-items: stretch;
.left-section {
......@@ -216,12 +211,7 @@ const infoList = computed(() => [
min-width: 0;
display: flex;
flex-direction: column;
<<<<<<< HEAD
// 让内部 AnalysisBox 撑满整列高度
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
:deep(.dynamics-box),
:deep(.analysis-box-wrapper) {
flex: 1;
......@@ -234,12 +224,7 @@ const infoList = computed(() => [
flex-direction: column;
}
}
<<<<<<< HEAD
// dynamics-list 填满剩余空间,分页固定在底部
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
:deep(.dynamics-box) {
height: 100%;
}
......@@ -252,13 +237,7 @@ const infoList = computed(() => [
flex-direction: column;
gap: 16px;
}
<<<<<<< HEAD
}
// 节点尺寸变量
=======
}
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
$node-size: 24px;
$axis-width: 2px;
......@@ -271,22 +250,12 @@ $axis-width: 2px;
display: flex;
align-items: stretch;
gap: 0;
<<<<<<< HEAD
// 左侧日期列
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.time-col {
width: 70px;
flex-shrink: 0;
text-align: right;
<<<<<<< HEAD
padding-right: 16px;
// 日期与节点圆顶部对齐
=======
padding-right: 16px;
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
padding-top: calc(#{$node-size} / 2 - 12px);
.year, .date {
......@@ -297,12 +266,7 @@ $axis-width: 2px;
line-height: 24px;
}
}
<<<<<<< HEAD
// 中间轴线列:上段线 + 圆形节点 + 下段线,完全垂直居中对齐
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.axis-col {
width: $node-size;
flex-shrink: 0;
......@@ -349,12 +313,7 @@ $axis-width: 2px;
}
}
}
<<<<<<< HEAD
// 右侧内容列
=======
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
.content-col {
flex: 1;
min-width: 0;
......@@ -512,24 +471,6 @@ $axis-width: 2px;
color: rgb(59, 65, 75);
margin-bottom: 12px;
}
<<<<<<< HEAD
// 最多展示 2 行 (每行2个),超出可滚动
.people-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
// 每个卡片高度约 64px,2行 = 128px + 1个gap16 = 144px
max-height: 144px;
overflow-y: auto;
// 低于 2 行时不留白,自适应收缩
&.single-row {
max-height: 64px;
}
// 滚动条样式
=======
.people-grid {
display: grid;
......@@ -542,7 +483,6 @@ $axis-width: 2px;
max-height: 64px;
}
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
&::-webkit-scrollbar {
width: 4px;
}
......
......@@ -52,21 +52,6 @@ export default defineConfig({
changeOrigin: true,
rewrite: (path) => path.replace(/^\/reportData/, '')
},
<<<<<<< HEAD
'/api': {
target: 'http://8.140.26.4:9085/',
// target: 'http://192.168.0.4:28080/',
// target: 'http://172.20.10.3:28080/',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
// '/api': {
// target: 'http://10.134.117.162:28080/',
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, '')
// '/api': {
=======
'/api': {
target: 'http://8.140.26.4:9085/',
......@@ -74,7 +59,6 @@ export default defineConfig({
rewrite: (path) => path.replace(/^\/api/, '')
// '/api': {
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
// target: 'http://10.119.133.162:28080/',
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, '')
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论