饼图
Showing
4 changed files
with
260 additions
and
193 deletions
| ... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
| 7 | <LoginDialog ref="pcloginDialog" @submitForm="reFlash"/> | 7 | <LoginDialog ref="pcloginDialog" @submitForm="reFlash"/> |
| 8 | <!-- <img alt="" src="@/assets/image/top.png" style="width: 100%">--> | 8 | <!-- <img alt="" src="@/assets/image/top.png" style="width: 100%">--> |
| 9 | <h1 class="text-top pd20"> | 9 | <h1 class="text-top pd20"> |
| 10 | 数据统计截至2025-03-20 12:00:30 | 10 | 数据统计截至{{ dayjs().format('YYYY-MM-DD HH:mm:ss') }} |
| 11 | </h1> | 11 | </h1> |
| 12 | <div class="date"> | 12 | <div class="date"> |
| 13 | <svg :height="`calc(100*100vw/1920)`" :width="`calc(300*100vw/1920)`" xmlns="http://www.w3.org/2000/svg"> | 13 | <svg :height="`calc(100*100vw/1920)`" :width="`calc(300*100vw/1920)`" xmlns="http://www.w3.org/2000/svg"> |
| ... | @@ -30,7 +30,6 @@ | ... | @@ -30,7 +30,6 @@ |
| 30 | import {computed, ref, watch} from 'vue' | 30 | import {computed, ref, watch} from 'vue' |
| 31 | import {useRoute, useRouter} from 'vue-router' | 31 | import {useRoute, useRouter} from 'vue-router' |
| 32 | import useUserStore from '@/store/modules/user' | 32 | import useUserStore from '@/store/modules/user' |
| 33 | import {Search, UserFilled} from '@element-plus/icons-vue' | ||
| 34 | import {getCurrentInstance, onMounted} from '@vue/runtime-core' | 33 | import {getCurrentInstance, onMounted} from '@vue/runtime-core' |
| 35 | import _ from 'lodash' | 34 | import _ from 'lodash' |
| 36 | import LoginDialog from '@/viewsPc/login' | 35 | import LoginDialog from '@/viewsPc/login' |
| ... | @@ -91,10 +90,9 @@ watch(() => useUserStore().visitor, (val) => { | ... | @@ -91,10 +90,9 @@ watch(() => useUserStore().visitor, (val) => { |
| 91 | 90 | ||
| 92 | <style lang="scss" scoped> | 91 | <style lang="scss" scoped> |
| 93 | h1 { | 92 | h1 { |
| 94 | font-family: 'YouSheBiaoTiHei'; | 93 | font-family: 'YouSheBiaoTiHei', serif; |
| 95 | position: relative; | 94 | position: relative; |
| 96 | top: calc(15 * 100vw / 1920); | 95 | top: calc(15 * 100vw / 1920); |
| 97 | //background: linear-gradient(180deg, #fff 10%, #9CD2FF 100%); | ||
| 98 | font-size: calc(32 * 100vw / 1920); | 96 | font-size: calc(32 * 100vw / 1920); |
| 99 | //-webkit-background-clip: text; | 97 | //-webkit-background-clip: text; |
| 100 | //-webkit-text-fill-color: transparent; | 98 | //-webkit-text-fill-color: transparent; | ... | ... |
| ... | @@ -22,6 +22,7 @@ import {AppMain, AppHeader, AppBottom} from './components' | ... | @@ -22,6 +22,7 @@ import {AppMain, AppHeader, AppBottom} from './components' |
| 22 | .bg { | 22 | .bg { |
| 23 | width: 100vw; | 23 | width: 100vw; |
| 24 | height: 100vh; | 24 | height: 100vh; |
| 25 | //overflow: hidden; | ||
| 25 | //background: rgba(0,0,0,0.75) | 26 | //background: rgba(0,0,0,0.75) |
| 26 | background: url("@/assets/image/bg@2x.png") no-repeat top center; | 27 | background: url("@/assets/image/bg@2x.png") no-repeat top center; |
| 27 | background-size: 100% 100%; | 28 | background-size: 100% 100%; | ... | ... |
| ... | @@ -19,16 +19,7 @@ | ... | @@ -19,16 +19,7 @@ |
| 19 | import LeftPage from "@/viewsPc/vip/leftPage" | 19 | import LeftPage from "@/viewsPc/vip/leftPage" |
| 20 | import CenterPage from "@/viewsPc/vip/centerPage" | 20 | import CenterPage from "@/viewsPc/vip/centerPage" |
| 21 | import RightPage from "@/viewsPc/vip/rightPage" | 21 | import RightPage from "@/viewsPc/vip/rightPage" |
| 22 | import {onBeforeUnmount, ref} from "vue"; | ||
| 23 | import {useStorage} from "@vueuse/core/index"; | ||
| 24 | import {getCurrentInstance, onMounted, onUnmounted} from "@vue/runtime-core"; | ||
| 25 | 22 | ||
| 26 | const {proxy} = getCurrentInstance() | ||
| 27 | |||
| 28 | |||
| 29 | onMounted(() => { | ||
| 30 | |||
| 31 | }) | ||
| 32 | </script> | 23 | </script> |
| 33 | 24 | ||
| 34 | <style lang="scss" scoped> | 25 | <style lang="scss" scoped> | ... | ... |
| ... | @@ -2,27 +2,65 @@ | ... | @@ -2,27 +2,65 @@ |
| 2 | <div class="pd20"> | 2 | <div class="pd20"> |
| 3 | <div class="chartCard"> | 3 | <div class="chartCard"> |
| 4 | <div class="title">应收款余额</div> | 4 | <div class="title">应收款余额</div> |
| 5 | <div class="po_right"> | 5 | <!-- <div class="po_right">--> |
| 6 | <el-radio-group v-model="radioA" size="small" @change="radioAChange"> | 6 | <!-- <el-radio-group v-model="radioA" size="small" @change="radioAChange">--> |
| 7 | <el-radio-button label="本月" value="month"/> | 7 | <!-- <el-radio-button label="本月" value="month"/>--> |
| 8 | <el-radio-button label="本季度" value="quarter"/> | 8 | <!-- <el-radio-button label="本季度" value="quarter"/>--> |
| 9 | <el-radio-button label="本年" value="year"/> | 9 | <!-- <el-radio-button label="本年" value="year"/>--> |
| 10 | </el-radio-group> | 10 | <!-- </el-radio-group>--> |
| 11 | <!-- </div>--> | ||
| 12 | <div ref="zhuRef" style="width: 100%; height: 24vh;"></div> | ||
| 11 | </div> | 13 | </div> |
| 12 | <div ref="zhuRef" style="width: 100%; height: 40vh;"></div> | 14 | |
| 15 | <div class="chartCard mt30"> | ||
| 16 | <div> | ||
| 17 | <div class="title">应收账款余额与收入</div> | ||
| 18 | <!-- <div class="title">--> | ||
| 19 | <!-- <el-select>--> | ||
| 20 | <!-- <el-option label="全部基地(可多选)" value="month"/>--> | ||
| 21 | <!-- </el-select>--> | ||
| 22 | <!-- </div>--> | ||
| 23 | <!-- <div class="title">--> | ||
| 24 | <!-- <el-select>--> | ||
| 25 | <!-- <el-option label="数据因素(可多选)" value="month"/>--> | ||
| 26 | <!-- </el-select>--> | ||
| 27 | <!-- </div>--> | ||
| 28 | |||
| 13 | </div> | 29 | </div> |
| 30 | <!-- <div class="po_right">--> | ||
| 31 | <!-- <el-radio-group v-model="radioB" size="small" @change="radioBChange">--> | ||
| 32 | <!-- <el-radio-button label="本月" value="month"/>--> | ||
| 33 | <!-- <el-radio-button label="本季度" value="quarter"/>--> | ||
| 34 | <!-- <el-radio-button label="本年" value="year"/>--> | ||
| 35 | <!-- </el-radio-group>--> | ||
| 36 | <!-- </div>--> | ||
| 14 | 37 | ||
| 38 | <div ref="lineRef" style="width: 100%; height: 24vh;"></div> | ||
| 39 | </div> | ||
| 15 | <div class="chartCard mt30"> | 40 | <div class="chartCard mt30"> |
| 16 | <div class="title">档案检索情况</div> | 41 | <div> |
| 17 | <div class="po_right"> | 42 | <div class="title">应收账款余额组成</div> |
| 18 | <el-radio-group v-model="radioB" size="small" @change="radioBChange"> | 43 | <!-- <div class="title">--> |
| 19 | <el-radio-button label="本月" value="month"/> | 44 | <!-- <el-select>--> |
| 20 | <el-radio-button label="本季度" value="quarter"/> | 45 | <!-- <el-option label="全部基地(可多选)" value="month"/>--> |
| 21 | <el-radio-button label="本年" value="year"/> | 46 | <!-- </el-select>--> |
| 22 | </el-radio-group> | 47 | <!-- </div>--> |
| 48 | <!-- <div class="title">--> | ||
| 49 | <!-- <el-select>--> | ||
| 50 | <!-- <el-option label="数据因素(可多选)" value="month"/>--> | ||
| 51 | <!-- </el-select>--> | ||
| 52 | <!-- </div>--> | ||
| 53 | |||
| 23 | </div> | 54 | </div> |
| 55 | <!-- <div class="po_right">--> | ||
| 56 | <!-- <el-radio-group v-model="radioB" size="small" @change="radioBChange">--> | ||
| 57 | <!-- <el-radio-button label="本月" value="month"/>--> | ||
| 58 | <!-- <el-radio-button label="本季度" value="quarter"/>--> | ||
| 59 | <!-- <el-radio-button label="本年" value="year"/>--> | ||
| 60 | <!-- </el-radio-group>--> | ||
| 61 | <!-- </div>--> | ||
| 24 | 62 | ||
| 25 | <div ref="lineRef" style="width: 100%; height: 40vh;"></div> | 63 | <div ref="payeeRef" style="width: 100%; height: 24vh;"></div> |
| 26 | </div> | 64 | </div> |
| 27 | </div> | 65 | </div> |
| 28 | </template> | 66 | </template> |
| ... | @@ -30,25 +68,29 @@ | ... | @@ -30,25 +68,29 @@ |
| 30 | <script setup> | 68 | <script setup> |
| 31 | import {onMounted, ref, onUnmounted} from 'vue' | 69 | import {onMounted, ref, onUnmounted} from 'vue' |
| 32 | 70 | ||
| 33 | import _ from 'lodash' | ||
| 34 | import {autoToolTip} from "@/plugins/auto-toolTip"; | 71 | import {autoToolTip} from "@/plugins/auto-toolTip"; |
| 35 | import * as echarts from "echarts"; | 72 | import * as echarts from "echarts"; |
| 36 | import * as api from "@/apiPc/common" | 73 | import * as api from "@/apiPc/common" |
| 37 | 74 | ||
| 38 | const zhuRef = ref(null) | 75 | const zhuRef = ref(null) |
| 39 | const lineRef = ref(null) | 76 | const lineRef = ref(null) |
| 77 | const payeeRef = ref(null) | ||
| 40 | const kindList = ref([]) | 78 | const kindList = ref([]) |
| 41 | const dataA = ref([]) | 79 | const dataA = ref([]) |
| 42 | const radioA = ref('month') | 80 | const radioA = ref('month') |
| 43 | const radioB = ref('month') | 81 | const radioB = ref('month') |
| 44 | let chartA | 82 | let chartA |
| 45 | let chartB | 83 | let chartB |
| 84 | let chartC | ||
| 46 | 85 | ||
| 47 | let intervalA = null; | 86 | let intervalA = null; |
| 48 | 87 | ||
| 49 | onMounted(() => { | 88 | onMounted(() => { |
| 50 | // init() | 89 | // init() |
| 51 | window.addEventListener('resize', handleResize); | 90 | window.addEventListener('resize', handleResize); |
| 91 | setA() | ||
| 92 | setB() | ||
| 93 | setC() | ||
| 52 | }) | 94 | }) |
| 53 | 95 | ||
| 54 | const init = () => { | 96 | const init = () => { |
| ... | @@ -95,210 +137,243 @@ const getBdata = () => { | ... | @@ -95,210 +137,243 @@ const getBdata = () => { |
| 95 | const setA = () => { | 137 | const setA = () => { |
| 96 | chartA = echarts.init(zhuRef.value) | 138 | chartA = echarts.init(zhuRef.value) |
| 97 | const option = { | 139 | const option = { |
| 98 | animation: true, | 140 | tooltip: { |
| 99 | // dataset: dataA.value, | 141 | trigger: 'item' |
| 100 | // dataZoom: [ | 142 | }, |
| 101 | // { | 143 | legend: { |
| 102 | // show: false, | 144 | orient: 'vertical', |
| 103 | // start: 0, | 145 | right: 20, |
| 104 | // end: 100 | 146 | top: '12%', |
| 105 | // }, | 147 | bottom: 20, |
| 106 | // { | 148 | textStyle: { |
| 107 | // type: 'inside', | 149 | color: '#FFF' |
| 108 | // start: 0, | ||
| 109 | // end: 100 | ||
| 110 | // } | ||
| 111 | // ], | ||
| 112 | xAxis: [{ | ||
| 113 | data: kindList.value, | ||
| 114 | axisLabel: { | ||
| 115 | inside: false, | ||
| 116 | color: '#7ECEF4', | ||
| 117 | fontSize: '1.1rem' | ||
| 118 | }, | ||
| 119 | axisTick: { | ||
| 120 | show: false | ||
| 121 | }, | 150 | }, |
| 122 | axisLine: { | 151 | formatter: function (name) { |
| 123 | show: true, | 152 | let value = 0 |
| 124 | lineStyle: { | 153 | for (let i = 0; i < option.series[2].data.length; i++) { |
| 125 | color: 'RGBA(38, 81, 128, 1)' | 154 | if (option.series[2].data[i].name === name) { |
| 155 | value = option.series[2].data[i].value; | ||
| 156 | break; | ||
| 126 | } | 157 | } |
| 158 | } | ||
| 159 | // 计算百分比 | ||
| 160 | let percentage = ((value / option.series[2].data.reduce((a, b) => a + b.value, 0)) * 100).toFixed(2) + '%'; | ||
| 161 | return name + ' ' + percentage; | ||
| 127 | }, | 162 | }, |
| 128 | z: 10 | ||
| 129 | }], | ||
| 130 | yAxis: { | ||
| 131 | name: '单位(次)', | ||
| 132 | nameTextStyle: { | ||
| 133 | color: '#7ECEF4', | ||
| 134 | fontSize: '1.2rem' | ||
| 135 | }, | 163 | }, |
| 136 | axisLine: { | 164 | series: [ |
| 137 | show: false | 165 | { |
| 166 | type: 'pie', | ||
| 167 | center: ['25%', '50%'], | ||
| 168 | radius: '5%', | ||
| 169 | emphasis: { | ||
| 170 | radius: '5%', | ||
| 171 | show: false, | ||
| 138 | }, | 172 | }, |
| 139 | axisTick: { | 173 | data: [ |
| 174 | {value: 110, name: ''}, | ||
| 175 | ], | ||
| 176 | label: { | ||
| 177 | show: false, | ||
| 178 | emphasis: { | ||
| 140 | show: false | 179 | show: false |
| 141 | }, | ||
| 142 | axisLabel: { | ||
| 143 | color: '#7ECEF4', | ||
| 144 | fontSize: '1.3rem' | ||
| 145 | }, | ||
| 146 | splitLine: { | ||
| 147 | show: true, | ||
| 148 | lineStyle: { | ||
| 149 | color: 'RGBA(38, 81, 128, 1)', | ||
| 150 | type: 'dashed' | ||
| 151 | } | 180 | } |
| 152 | } | 181 | } |
| 153 | }, | 182 | }, |
| 154 | tooltip: { | 183 | { |
| 155 | alwaysShowContent: true, | 184 | type: 'pie', |
| 156 | formatter: `<div style="text-align: center;font-size: 1.5rem">{b}<br/>{c}</div>`, | 185 | // selectedMode: 'single', |
| 157 | backgroundColor: 'transparent', | 186 | center: ['25%', '50%'], |
| 158 | borderWidth: 0, | 187 | radius: ['8%', '10%'], |
| 159 | extraCssText: 'box-shadow:none', | 188 | avoidLabelOverlap: false, |
| 160 | position: 'top', | 189 | label: { |
| 161 | textStyle: { | 190 | show: false, |
| 162 | color: '#fff', | 191 | emphasis: { |
| 163 | fontWeight: 'bold', | 192 | show: false |
| 164 | fontSize: '1rem' | ||
| 165 | } | 193 | } |
| 166 | }, | 194 | }, |
| 167 | series: [ | 195 | data: [ |
| 196 | {value: 12, name: ''}, | ||
| 197 | ] | ||
| 198 | }, | ||
| 168 | { | 199 | { |
| 169 | type: 'bar', | 200 | name: '应收款余额', |
| 170 | barWidth: '10', | 201 | type: 'pie', |
| 171 | showBackground: false, | 202 | center: ['25%', '50%'], |
| 203 | radius: ['30%', '70%'], | ||
| 204 | avoidLabelOverlap: false, | ||
| 172 | itemStyle: { | 205 | itemStyle: { |
| 173 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | 206 | borderWidth: 2, |
| 174 | {offset: 1, color: '#037FC9'}, | 207 | // borderColor: '#fff', |
| 175 | {offset: 0, color: '#0C3C7E'} | 208 | }, |
| 176 | ]) | 209 | label: { |
| 210 | show: false, | ||
| 211 | // position: 'center' | ||
| 177 | }, | 212 | }, |
| 178 | emphasis: { | 213 | emphasis: { |
| 179 | itemStyle: { | 214 | label: { |
| 180 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | 215 | show: false, |
| 181 | {offset: 1, color: '#2378f7'}, | 216 | fontSize: 20, |
| 182 | {offset: 0, color: '#83bff6'} | 217 | fontWeight: 'bold' |
| 183 | ]) | ||
| 184 | } | 218 | } |
| 185 | }, | 219 | }, |
| 186 | data: dataA.value | 220 | labelLine: { |
| 187 | } | 221 | show: false |
| 222 | }, | ||
| 223 | data: [ | ||
| 224 | {value: 1048, name: '山西'}, | ||
| 225 | {value: 735, name: '深圳'}, | ||
| 226 | {value: 580, name: '上海'}, | ||
| 227 | {value: 484, name: '海南'}, | ||
| 228 | {value: 484, name: '郑州'}, | ||
| 229 | {value: 484, name: '合肥'}, | ||
| 230 | {value: 484, name: '武汉'}, | ||
| 231 | {value: 300, name: '新疆'} | ||
| 188 | ] | 232 | ] |
| 189 | } | 233 | } |
| 234 | ] | ||
| 235 | }; | ||
| 190 | chartA.setOption(option) | 236 | chartA.setOption(option) |
| 191 | autoHover(chartA, option, 0, 2000) | 237 | autoHover(chartA, option, 2, 2000) |
| 192 | } | 238 | } |
| 193 | 239 | ||
| 194 | const setB = () => { | 240 | const setB = () => { |
| 195 | chartB = echarts.init(lineRef.value) | 241 | chartB = echarts.init(lineRef.value) |
| 196 | const option = { | 242 | const option = { |
| 197 | animation: true, | ||
| 198 | grid: { | ||
| 199 | top: '15%', | ||
| 200 | left: '12%', | ||
| 201 | right: '12%', | ||
| 202 | bottom: '12%' | ||
| 203 | }, | ||
| 204 | // dataZoom: [ | ||
| 205 | // { | ||
| 206 | // show: false, | ||
| 207 | // start: 0, | ||
| 208 | // end: 50 | ||
| 209 | // }, | ||
| 210 | // { | ||
| 211 | // type: 'inside', | ||
| 212 | // start: 0, | ||
| 213 | // end: 50 | ||
| 214 | // } | ||
| 215 | // ], | ||
| 216 | tooltip: { | 243 | tooltip: { |
| 217 | trigger: 'item', | 244 | trigger: 'axis', |
| 218 | formatter: `<div style="text-align: center;font-size: 1.5rem">{b}<br/>{c}</div>`, | 245 | axisPointer: { |
| 219 | renderModer: 'html', | 246 | type: 'shadow' |
| 220 | // alignItems: 'center', | ||
| 221 | className: 'downDot', | ||
| 222 | backgroundColor: 'rgba(8,13,86,0.2)', | ||
| 223 | borderWidth: 0, | ||
| 224 | extraCssText: 'box-shadow:none', | ||
| 225 | position: 'top', | ||
| 226 | textStyle: { | ||
| 227 | color: '#fff', | ||
| 228 | fontWeight: 'bold', | ||
| 229 | fontSize: '10rem' | ||
| 230 | } | 247 | } |
| 231 | }, | 248 | }, |
| 232 | xAxis: { | 249 | legend: { |
| 233 | type: 'category', | 250 | top: '10%', |
| 234 | boundaryGap: false, | 251 | textStyle: { |
| 235 | data: kindList.value, | 252 | color: '#FFF' |
| 236 | axisTick: { | 253 | }, |
| 237 | show: false | ||
| 238 | }, | 254 | }, |
| 239 | axisLabel: { | 255 | grid: { |
| 240 | color: '#7ECEF4', | 256 | left: '3%', |
| 241 | fontSize: '1.1rem' | 257 | right: '4%', |
| 258 | bottom: '3%', | ||
| 259 | containLabel: true | ||
| 242 | }, | 260 | }, |
| 243 | axisLine: { | 261 | xAxis: [ |
| 244 | show: true, | 262 | { |
| 245 | lineStyle: { | 263 | type: 'category', |
| 246 | color: 'RGBA(38, 81, 128, 1)' | 264 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] |
| 247 | } | 265 | } |
| 266 | ], | ||
| 267 | yAxis: [ | ||
| 268 | { | ||
| 269 | type: 'value', | ||
| 270 | name: '金额(万元)', | ||
| 271 | } | ||
| 272 | ], | ||
| 273 | series: [ | ||
| 274 | { | ||
| 275 | name: '2025年应收账款余额', | ||
| 276 | type: 'bar', | ||
| 277 | emphasis: { | ||
| 278 | focus: 'series' | ||
| 248 | }, | 279 | }, |
| 280 | data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390] | ||
| 249 | }, | 281 | }, |
| 250 | yAxis: { | 282 | { |
| 251 | name: '单位(次)', | 283 | name: '2024年应收账款余额', |
| 252 | nameTextStyle: { | 284 | type: 'bar', |
| 253 | color: '#7ECEF4', | 285 | emphasis: { |
| 254 | fontSize: '1.2rem' | 286 | focus: 'series' |
| 255 | }, | 287 | }, |
| 256 | type: 'value', | 288 | data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210] |
| 257 | axisLabel: { | ||
| 258 | fontSize: '1.3rem' | ||
| 259 | }, | 289 | }, |
| 260 | axisLine: { | 290 | { |
| 261 | lineStyle: { | 291 | name: '2025年收入', |
| 262 | color: '#03DAFD', | 292 | type: 'bar', |
| 263 | } | 293 | emphasis: { |
| 294 | focus: 'series' | ||
| 295 | }, | ||
| 296 | data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,] | ||
| 297 | }, | ||
| 298 | { | ||
| 299 | name: '2024年收入', | ||
| 300 | type: 'bar', | ||
| 301 | emphasis: { | ||
| 302 | focus: 'series' | ||
| 264 | }, | 303 | }, |
| 265 | splitLine: { | 304 | data: [150, 232, 201, 154, 190, 330, 410, 201, 154, 190, 330, 410] |
| 266 | show: true, | 305 | }, |
| 267 | lineStyle: { | 306 | ] |
| 268 | color: 'RGBA(38, 81, 128, 1)', | ||
| 269 | type: 'dashed' | ||
| 270 | } | 307 | } |
| 308 | chartB.setOption(option) | ||
| 309 | autoHover(chartB, option, 0, 2000) | ||
| 310 | } | ||
| 311 | const setC = () => { | ||
| 312 | chartC = echarts.init(payeeRef.value) | ||
| 313 | const option = { | ||
| 314 | tooltip: { | ||
| 315 | trigger: 'axis', | ||
| 316 | axisPointer: { | ||
| 317 | type: 'shadow' | ||
| 271 | } | 318 | } |
| 272 | }, | 319 | }, |
| 320 | legend: { | ||
| 321 | top: '10%', | ||
| 322 | textStyle: { | ||
| 323 | color: '#FFF' | ||
| 324 | }, | ||
| 325 | }, | ||
| 326 | grid: { | ||
| 327 | left: '3%', | ||
| 328 | right: '4%', | ||
| 329 | bottom: '3%', | ||
| 330 | containLabel: true | ||
| 331 | }, | ||
| 332 | xAxis: [ | ||
| 333 | { | ||
| 334 | type: 'category', | ||
| 335 | stack: 'Ad', | ||
| 336 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] | ||
| 337 | } | ||
| 338 | ], | ||
| 339 | yAxis: [ | ||
| 340 | { | ||
| 341 | type: 'value', | ||
| 342 | name: '金额(万元)', | ||
| 343 | } | ||
| 344 | ], | ||
| 273 | series: [ | 345 | series: [ |
| 274 | { | 346 | { |
| 275 | data: dataA.value, | 347 | name: '代收款', |
| 276 | type: 'line', | 348 | type: 'bar', |
| 277 | itemStyle: { | 349 | stack: 'Ad', |
| 278 | borderWidth: '0', | 350 | emphasis: { |
| 279 | color: '#03DAFD', | 351 | focus: 'series' |
| 280 | }, | 352 | }, |
| 353 | data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390] | ||
| 354 | }, | ||
| 355 | { | ||
| 356 | name: '收费单待签', | ||
| 357 | type: 'bar', | ||
| 358 | stack: 'Ad', | ||
| 281 | emphasis: { | 359 | emphasis: { |
| 282 | itemStyle: { | 360 | focus: 'series' |
| 283 | color: '#fff', | 361 | }, |
| 284 | borderColor: '#fff', | 362 | data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210] |
| 285 | borderWidth: '4', | 363 | }, |
| 286 | shadowColor: '#fff', | 364 | { |
| 287 | shadowBlur: '4', | 365 | name: '合同待签', |
| 288 | } | 366 | type: 'bar', |
| 367 | stack: 'Ad', | ||
| 368 | emphasis: { | ||
| 369 | focus: 'series' | ||
| 370 | }, | ||
| 371 | data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,] | ||
| 289 | }, | 372 | }, |
| 290 | label: { | ||
| 291 | show: false, | ||
| 292 | position: 'bottom', | ||
| 293 | formatter: '{c}', | ||
| 294 | fontSize: '1rem', | ||
| 295 | color: '#03DAFD' | ||
| 296 | } | ||
| 297 | } | ||
| 298 | ] | 373 | ] |
| 299 | } | 374 | } |
| 300 | chartB.setOption(option) | 375 | chartC.setOption(option) |
| 301 | autoHover(chartB, option, 0, 2000) | 376 | autoHover(chartC, option, 0, 2000) |
| 302 | } | 377 | } |
| 303 | 378 | ||
| 304 | const radioAChange = (e) => { | 379 | const radioAChange = (e) => { |
| ... | @@ -328,6 +403,7 @@ function autoHover(myChart, option, index, time) { | ... | @@ -328,6 +403,7 @@ function autoHover(myChart, option, index, time) { |
| 328 | function handleResize() { | 403 | function handleResize() { |
| 329 | chartA?.resize() | 404 | chartA?.resize() |
| 330 | chartB?.resize() | 405 | chartB?.resize() |
| 406 | chartC?.resize() | ||
| 331 | } | 407 | } |
| 332 | 408 | ||
| 333 | onUnmounted(() => { | 409 | onUnmounted(() => { |
| ... | @@ -345,14 +421,15 @@ onUnmounted(() => { | ... | @@ -345,14 +421,15 @@ onUnmounted(() => { |
| 345 | } | 421 | } |
| 346 | 422 | ||
| 347 | .title { | 423 | .title { |
| 348 | padding: calc(12 * 100vw / 1920) calc(50 * 100vw / 1920) 0; | 424 | font-family: PingFang SC, serif; |
| 349 | font-family: 'YouSheBiaoTiHei'; | 425 | font-weight: 600; |
| 350 | color: #FFFFFF; | 426 | color: #FFFFFF; |
| 351 | //text-shadow: 0px 4px 3px #003F85; | 427 | text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); |
| 352 | font-size: calc(17 * 100vw / 1920); | 428 | background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%); |
| 353 | background: linear-gradient(180deg, #fff 50%, #9CD2FF 100%); | ||
| 354 | -webkit-background-clip: text; | 429 | -webkit-background-clip: text; |
| 355 | -webkit-text-fill-color: transparent; | 430 | -webkit-text-fill-color: transparent; |
| 431 | padding: calc(12 * 100vw / 1920) calc(50 * 100vw / 1920) 0; | ||
| 432 | font-size: calc(20 * 100vw / 1920); | ||
| 356 | position: relative; | 433 | position: relative; |
| 357 | 434 | ||
| 358 | &::after { | 435 | &::after { |
| ... | @@ -380,7 +457,7 @@ onUnmounted(() => { | ... | @@ -380,7 +457,7 @@ onUnmounted(() => { |
| 380 | } | 457 | } |
| 381 | 458 | ||
| 382 | .chartCard { | 459 | .chartCard { |
| 383 | background: url("@/assets/img/box_bg.png") no-repeat top left; | 460 | background: url("@/assets/image/box01@2x.png") no-repeat top left; |
| 384 | background-size: 100% 100%; | 461 | background-size: 100% 100%; |
| 385 | position: relative; | 462 | position: relative; |
| 386 | overflow: hidden; | 463 | overflow: hidden; | ... | ... |
-
Please register or sign in to post a comment