bonus-ui/src/views/home/components/ProvincialChart.vue

219 lines
3.9 KiB
Vue
Raw Normal View History

2026-01-22 09:24:00 +08:00
<template>
2026-01-25 15:31:18 +08:00
<div class="viewport">
<div class="screen" :style="screenStyle">
<div class="app-container">
<div style="height: 90px"></div>
<div class="top">
<div class="top-1">
<Top1 />
</div>
<div class="top-2">
<Top2 />
</div>
<div class="top-3">
<Top3 />
</div>
</div>
2026-01-22 09:24:00 +08:00
2026-01-25 15:31:18 +08:00
<div class="center">
<div class="center-1">
<Center1 />
</div>
<div class="center-2">
<Center2 />
</div>
2026-01-22 09:24:00 +08:00
</div>
2026-01-25 15:31:18 +08:00
<div class="bottom">
<div class="bottom-1">
<div class="bottom-1-1">
<Bottom11 />
</div>
<div class="bottom-1-2">
<Bottom12 />
</div>
</div>
<div class="bottom-2">
<Bottom2 />
</div>
2026-01-22 09:24:00 +08:00
</div>
</div>
</div>
</div>
</template>
<script>
2026-01-22 09:31:15 +08:00
import Top1 from './provincial/Top1'
2026-01-22 15:56:24 +08:00
import Top2 from './provincial/Top2'
2026-01-22 09:31:15 +08:00
import Top3 from './provincial/Top3'
import Center1 from './provincial/Center1'
import Center2 from './provincial/Center2'
import Bottom11 from './provincial/Bottom1-1'
import Bottom12 from './provincial/Bottom1-2'
import Bottom2 from './provincial/Bottom2'
2026-01-22 09:24:00 +08:00
export default {
name: 'provincialChart',
components: {
Top1,
2026-01-22 15:56:24 +08:00
Top2,
2026-01-22 09:24:00 +08:00
Top3,
Center1,
Center2,
Bottom11,
Bottom12,
Bottom2,
},
data() {
2026-01-25 15:31:18 +08:00
return {
scale: 1,
}
},
computed: {
screenStyle() {
return {
width: '1920px',
height: '1080px',
2026-01-29 09:38:49 +08:00
transform: `scale(${this.scale})`,
2026-01-25 15:31:18 +08:00
transformOrigin: '0 0',
}
},
},
mounted() {
this.calcScale()
window.addEventListener('resize', this.calcScale)
},
beforeDestroy() {
window.removeEventListener('resize', this.calcScale)
},
methods: {
calcScale() {
const baseW = 1920
const vw = document.documentElement.clientWidth
2026-01-29 09:38:49 +08:00
// ✅ 永远以当前可视宽度为准
this.scale = vw / baseW
2026-01-25 15:31:18 +08:00
},
2026-01-22 09:24:00 +08:00
},
}
</script>
<style lang="scss" scoped>
2026-01-25 15:31:18 +08:00
/* 外层视口:锁满屏 */
.viewport {
position: fixed;
inset: 0;
2026-01-29 09:38:49 +08:00
overflow-x: hidden;
overflow-y: auto;
background: #e1ebf7;
2026-01-25 15:31:18 +08:00
}
/* 被缩放的 1920×1080 画布 */
.screen {
position: absolute;
top: 0;
left: 0;
}
2026-01-22 18:32:51 +08:00
.app-container {
2026-01-25 15:31:18 +08:00
width: 1920px;
height: 1080px;
2026-01-22 09:24:00 +08:00
background: #e1ebf7;
}
2026-01-25 15:31:18 +08:00
2026-01-22 09:24:00 +08:00
.top {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.top-1,
.top-2,
.top-3 {
padding: 24px;
background: rgba(255, 255, 255, 0.91);
border-radius: 5px;
}
.top-1,
.top-3 {
width: 480px;
height: 518px;
}
.top-2 {
flex: 1;
margin: 0 15px;
height: 518px;
2026-01-22 15:56:24 +08:00
background-image: url('~@/assets/images/map-img.png');
background-size: 100% 100%;
2026-01-22 09:24:00 +08:00
}
}
.center {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.center-1,
.center-2 {
2026-01-25 15:31:18 +08:00
width: 928px;
2026-02-03 15:39:22 +08:00
height: 405px;
2026-01-22 09:24:00 +08:00
padding: 24px;
background: rgba(255, 255, 255, 0.91);
border-radius: 5px;
}
.center-1 {
margin-right: 7.5px;
}
.center-2 {
margin-left: 7.5px;
}
}
.bottom {
display: flex;
align-items: center;
justify-content: space-between;
.bottom-1 {
2026-01-25 15:31:18 +08:00
width: 928px;
2026-01-22 09:24:00 +08:00
height: 350px;
display: flex;
align-items: center;
justify-content: space-between;
.bottom-1-1,
.bottom-1-2 {
padding: 24px;
width: 50%;
height: 350px;
background: rgba(255, 255, 255, 0.91);
border-radius: 5px;
2026-02-03 17:44:06 +08:00
overflow: hidden;
2026-01-22 09:24:00 +08:00
}
.bottom-1-1 {
margin-right: 7.5px;
}
.bottom-1-2 {
margin-left: 7.5px;
}
}
.bottom-2 {
2026-01-25 15:31:18 +08:00
width: 928px;
2026-01-22 09:24:00 +08:00
height: 350px;
padding: 24px;
background: rgba(255, 255, 255, 0.91);
border-radius: 5px;
}
.bottom-1 {
margin-right: 7.5px;
}
.bottom-2 {
margin-left: 7.5px;
}
}
</style>