大屏初稿
Showing
5 changed files
with
783 additions
and
402 deletions
| ... | @@ -23,7 +23,7 @@ import {AppMain, AppHeader, AppBottom} from './components' | ... | @@ -23,7 +23,7 @@ import {AppMain, AppHeader, AppBottom} from './components' |
| 23 | width: 100vw; | 23 | width: 100vw; |
| 24 | height: 100vh; | 24 | height: 100vh; |
| 25 | min-width: 1000px; | 25 | min-width: 1000px; |
| 26 | //overflow: hidden; | 26 | overflow: hidden; |
| 27 | //background: rgba(0,0,0,0.75) | 27 | //background: rgba(0,0,0,0.75) |
| 28 | background: url("@/assets/image/bg@2x.png") no-repeat top center; | 28 | background: url("@/assets/image/bg@2x.png") no-repeat top center; |
| 29 | background-size: 100% 100%; | 29 | background-size: 100% 100%; | ... | ... |
| 1 | import { login, logout, getInfo, loginByPhone } from '@/api/login' | 1 | import {login, logout, getInfo, loginByPhone} from '@/api/login' |
| 2 | import { getToken, setToken, removeToken } from '@/utils/auth' | 2 | import {getToken, setToken, removeToken} from '@/utils/auth' |
| 3 | import { getMyOwnMemberInfo } from '@/api/system/userInfo.js' | 3 | import {getMyOwnMemberInfo} from '@/api/system/userInfo.js' |
| 4 | import { defineStore } from 'pinia' | 4 | import {defineStore} from 'pinia' |
| 5 | import aes from '@/utils/aes' | 5 | import aes from '@/utils/aes' |
| 6 | import { loginDance } from '@/apiPc/login.js' | 6 | import {loginDance} from '@/apiPc/login.js' |
| 7 | import { getRemindCount } from '@/api/system/user' | 7 | import {getRemindCount} from '@/api/system/user' |
| 8 | import { ElMessageBox } from 'element-plus' | 8 | import {ElMessageBox} from 'element-plus' |
| 9 | 9 | ||
| 10 | const useUserStore = defineStore( | 10 | const useUserStore = defineStore( |
| 11 | 'user', | 11 | 'user', |
| ... | @@ -29,10 +29,10 @@ const useUserStore = defineStore( | ... | @@ -29,10 +29,10 @@ const useUserStore = defineStore( |
| 29 | isExam: '1', // 是否为考点,0:是;1:否, | 29 | isExam: '1', // 是否为考点,0:是;1:否, |
| 30 | genFlag: '', // 是否是自动的协会 | 30 | genFlag: '', // 是否是自动的协会 |
| 31 | badge: {}, | 31 | badge: {}, |
| 32 | reLogin: {show:false,query:{}}, | 32 | reLogin: {show: false, query: {}}, |
| 33 | visitor: false, | 33 | visitor: false, |
| 34 | language: 0, | 34 | language: 0, |
| 35 | activeName:"5" | 35 | activeName: "5" |
| 36 | }), | 36 | }), |
| 37 | actions: { | 37 | actions: { |
| 38 | // 登录 | 38 | // 登录 |
| ... | @@ -101,10 +101,6 @@ const useUserStore = defineStore( | ... | @@ -101,10 +101,6 @@ const useUserStore = defineStore( |
| 101 | this.showPrice = ['1', '2', '3'].indexOf(this.deptType) > -1 | 101 | this.showPrice = ['1', '2', '3'].indexOf(this.deptType) > -1 |
| 102 | this.dept = user.dept | 102 | this.dept = user.dept |
| 103 | this.avatar = avatar | 103 | this.avatar = avatar |
| 104 | if (personInfo) { | ||
| 105 | this.perId = aes.encrypt(personInfo.perId) | ||
| 106 | this.personInfo = personInfo | ||
| 107 | } | ||
| 108 | resolve(res.data) | 104 | resolve(res.data) |
| 109 | }).catch(error => { | 105 | }).catch(error => { |
| 110 | reject(error) | 106 | reject(error) |
| ... | @@ -147,9 +143,9 @@ const useUserStore = defineStore( | ... | @@ -147,9 +143,9 @@ const useUserStore = defineStore( |
| 147 | }, | 143 | }, |
| 148 | setReLogin(query) { | 144 | setReLogin(query) { |
| 149 | console.log(query) | 145 | console.log(query) |
| 150 | this.reLogin = {show:true,query:query} | 146 | this.reLogin = {show: true, query: query} |
| 151 | setTimeout(() => { | 147 | setTimeout(() => { |
| 152 | this.reLogin = {show:false,query:query} | 148 | this.reLogin = {show: false, query: query} |
| 153 | }, 1000) | 149 | }, 1000) |
| 154 | }, | 150 | }, |
| 155 | checkAndLogin() { | 151 | checkAndLogin() { |
| ... | @@ -164,8 +160,8 @@ const useUserStore = defineStore( | ... | @@ -164,8 +160,8 @@ const useUserStore = defineStore( |
| 164 | return true | 160 | return true |
| 165 | } | 161 | } |
| 166 | }, | 162 | }, |
| 167 | updataActiveName(v){ | 163 | updataActiveName(v) { |
| 168 | this.activeName=v | 164 | this.activeName = v |
| 169 | } | 165 | } |
| 170 | } | 166 | } |
| 171 | }) | 167 | }) | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div class="center"> | 2 | <div class="center"> |
| 3 | 3 | <div ref="textRef" class="top"> | |
| 4 | <div class="top"> | ||
| 5 | <div class="left"> | 4 | <div class="left"> |
| 6 | <div class="titleTop">懂事会得分</div> | 5 | <div class="titleTop">懂事会得分</div> |
| 7 | <div class="titleCenter">预计得分 <span class="tex1">5</span></div> | 6 | <div class="titleCenter">预计得分 <span class="tex1">5</span></div> |
| ... | @@ -25,100 +24,69 @@ | ... | @@ -25,100 +24,69 @@ |
| 25 | </div> | 24 | </div> |
| 26 | </div> | 25 | </div> |
| 27 | 26 | ||
| 28 | |||
| 29 | <div class="bottom"> | 27 | <div class="bottom"> |
| 30 | <div ref="boardRef1" style="width: 100%;height: 20vh;"> | 28 | <div class="father"> |
| 31 | 看板11 | 29 | <div style="display: flex"> |
| 30 | <div class="bing" style="width: 30%"> | ||
| 31 | <div class="bingTitle"> | ||
| 32 | <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> | ||
| 33 | 营业收入 | ||
| 32 | </div> | 34 | </div> |
| 33 | <div ref="boardRef2" style="width: 100%;height: 20vh;"> | 35 | <div ref="bing1" style="width: 100%;height:13vh;"> |
| 34 | 看板11 | ||
| 35 | </div> | 36 | </div> |
| 36 | <div ref="boardRef3" style="width: 100%;height: 20vh;"> | 37 | <div class="bingBottom"> |
| 37 | 看板11 | 38 | <div>2025年营业收入</div> |
| 39 | <div>(万元)</div> | ||
| 38 | </div> | 40 | </div> |
| 39 | <div ref="boardRef4" style="width: 100%;height: 20vh;"> | ||
| 40 | 看板11 | ||
| 41 | </div> | 41 | </div> |
| 42 | <div ref="zhuRef1" class="zhu" style="width:70%;height: 17vh"/> | ||
| 42 | </div> | 43 | </div> |
| 43 | 44 | ||
| 44 | <!-- <!– –>--> | 45 | <hr> |
| 45 | <!-- <div class="partB">--> | 46 | </div> |
| 46 | <!-- <div class="q1box qqbox">--> | 47 | <div class="father"> |
| 47 | <!-- <!– 液体球–>--> | 48 | <div style="display: flex"> |
| 48 | <!-- <div ref="q1" style="width: 100%;height: calc(90*100vw/1920);"></div>--> | 49 | <div class="bing" style="width: 30%"> |
| 49 | <!-- <svg :height="`calc(100*100vw/1920)`" width="100%">--> | 50 | <div class="bingTitle"> |
| 50 | <!-- <linearGradient id="gradient" x1="100%" x2="100%" y1="0%" y2="100%">--> | 51 | <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> |
| 51 | <!-- <stop offset="0%" stop-color="#03AEFD"/>--> | 52 | 应收余额 |
| 52 | <!-- <stop offset="10%" stop-color="#AEFFF3"/>--> | 53 | </div> |
| 53 | <!-- </linearGradient>--> | 54 | <div ref="bing2" style="width: 100%;height:13vh;"> |
| 54 | <!-- <text :font-size="`calc(14*100vw/1920)`" :y="`calc(15*100vw/1920)`" fill="#fff" text-anchor="middle" x="50%">--> | 55 | </div> |
| 55 | <!-- 非常满意--> | 56 | <div class="bingBottom"> |
| 56 | <!-- </text>--> | 57 | <div>2025年3月前 累计应收余额</div> |
| 57 | <!-- <text :font-size="`calc(16*100vw/1920)`" :y="`calc(40*100vw/1920)`" fill="url(#gradient)" font-weight="bold"--> | 58 | <div>(万元)</div> |
| 58 | <!-- text-anchor="middle" x="50%">{{ list['非常满意'] }}--> | 59 | </div> |
| 59 | <!-- </text>--> | 60 | </div> |
| 60 | <!-- </svg>--> | 61 | <div ref="zhuRef2" class="zhu" style="width:70%;height: 17vh"/> |
| 61 | <!-- </div>--> | 62 | </div> |
| 62 | <!-- <div class="q2box qqbox">--> | 63 | |
| 63 | <!-- <!– 液体球–>--> | 64 | <hr> |
| 64 | <!-- <div ref="q2" style="width: 100%;height: calc(90*100vw/1920);"></div>--> | 65 | </div> |
| 65 | <!-- <svg :height="`calc(100*100vw/1920)`" width="100%">--> | 66 | <div class="father"> |
| 66 | <!-- <linearGradient id="gradient" x1="100%" x2="100%" y1="0%" y2="100%">--> | 67 | <div style="display: flex"> |
| 67 | <!-- <stop offset="0%" stop-color="#03AEFD"/>--> | 68 | <div class="bing" style="width: 30%"> |
| 68 | <!-- <stop offset="10%" stop-color="#AEFFF3"/>--> | 69 | <div class="bingTitle"> |
| 69 | <!-- </linearGradient>--> | 70 | <span><img alt="" class="titleImg" src="@/assets/image/title_bg.png"></span> |
| 70 | <!-- <text :font-size="`calc(14*100vw/1920)`" :y="`calc(15*100vw/1920)`" fill="#fff" text-anchor="middle" x="50%">--> | 71 | 现金余额 |
| 71 | <!-- 满意--> | 72 | </div> |
| 72 | <!-- </text>--> | 73 | <div ref="bing3" style="width: 100%;height:13vh;"> |
| 73 | <!-- <text :font-size="`calc(16*100vw/1920)`" :y="`calc(40*100vw/1920)`" fill="url(#gradient)" font-weight="bold"--> | 74 | </div> |
| 74 | <!-- text-anchor="middle" x="50%">{{ list['满意'] }}--> | 75 | <div class="bingBottom"> |
| 75 | <!-- </text>--> | 76 | <div>2025年3月前 累计现金余额</div> |
| 76 | <!-- </svg>--> | 77 | <div>(万元)</div> |
| 77 | <!-- </div>--> | 78 | </div> |
| 78 | <!-- <!– <div class="q3box qqbox">–>--> | 79 | </div> |
| 79 | <!-- <!– <!– 液体球–>–>--> | 80 | <div ref="zhuRef3" class="zhu" style="width:70%;height: 17vh"/> |
| 80 | <!-- <!– <div ref="q3" style="width: 100%;height:calc(90*100vw/1920);"></div>–>--> | 81 | </div> |
| 81 | <!-- <!– <svg width="100%" :height="`calc(100*100vw/1920)`">–>--> | 82 | <hr> |
| 82 | <!-- <!– <linearGradient id="gradient" y1="0%" x1="100%" x2="100%" y2="100%">–>--> | 83 | </div> |
| 83 | <!-- <!– <stop offset="0%" stop-color="#03AEFD"/>–>--> | 84 | <div> |
| 84 | <!-- <!– <stop offset="10%" stop-color="#AEFFF3"/>–>--> | 85 | <div ref="zhuRef4" style="width: 100%;height: 17vh"> |
| 85 | <!-- <!– </linearGradient>–>--> | 86 | 1234 |
| 86 | <!-- <!– <text x="50%" :y="`calc(15*100vw/1920)`" font-family="PingFang SC" text-anchor="middle" fill="#fff"–>--> | 87 | </div> |
| 87 | <!-- <!– :font-size="`calc(14*100vw/1920)`">基本满意–>--> | 88 | </div> |
| 88 | <!-- <!– </text>–>--> | 89 | </div> |
| 89 | <!-- <!– <text x="50%" :y="`calc(40*100vw/1920)`" font-family="DIN Alternate" text-anchor="middle" font-weight="bold"–>--> | ||
| 90 | <!-- <!– :font-size="`calc(16*100vw/1920)`" fill="url(#gradient)">{{ list['基本满意'] }}–>--> | ||
| 91 | <!-- <!– </text>–>--> | ||
| 92 | <!-- <!– </svg>–>--> | ||
| 93 | <!-- <!– </div>–>--> | ||
| 94 | <!-- <div class="q4box qqbox">--> | ||
| 95 | <!-- <!– 液体球–>--> | ||
| 96 | <!-- <div ref="q4" style="width: 100%;height:calc(90*100vw/1920);"></div>--> | ||
| 97 | <!-- <svg :height="`calc(100*100vw/1920)`" width="100%">--> | ||
| 98 | <!-- <linearGradient id="gradient" x1="100%" x2="100%" y1="0%" y2="100%">--> | ||
| 99 | <!-- <stop offset="0%" stop-color="#03AEFD"/>--> | ||
| 100 | <!-- <stop offset="10%" stop-color="#AEFFF3"/>--> | ||
| 101 | <!-- </linearGradient>--> | ||
| 102 | <!-- <text :font-size="`calc(14*100vw/1920)`" :y="`calc(15*100vw/1920)`" fill="#fff" text-anchor="middle" x="50%">--> | ||
| 103 | <!-- 不满意--> | ||
| 104 | <!-- </text>--> | ||
| 105 | <!-- <text :font-size="`calc(16*100vw/1920)`" :y="`calc(40*100vw/1920)`" fill="url(#gradient)" font-weight="bold"--> | ||
| 106 | <!-- text-anchor="middle" x="50%">{{ list['不满意'] }}--> | ||
| 107 | <!-- </text>--> | ||
| 108 | <!-- </svg>--> | ||
| 109 | <!-- </div>--> | ||
| 110 | <!-- <!– <div class="q5box qqbox">–>--> | ||
| 111 | <!-- <!– <div ref="q5" style="width: 100%;height: 90px;"></div>–>--> | ||
| 112 | <!-- <!– <svg width="100%" height="100">–>--> | ||
| 113 | <!-- <!– <linearGradient id="gradient" y1="0%" x1="100%" x2="100%" y2="100%">–>--> | ||
| 114 | <!-- <!– <stop offset="0%" stop-color="#03AEFD" />–>--> | ||
| 115 | <!-- <!– <stop offset="10%" stop-color="#AEFFF3" />–>--> | ||
| 116 | <!-- <!– </linearGradient>–>--> | ||
| 117 | <!-- <!– <text x="50%" y="15" text-anchor="middle" fill="#fff" font-size="14">非常不满意</text>–>--> | ||
| 118 | <!-- <!– <text x="50%" y="40" text-anchor="middle" font-weight="bold" font-size="16" fill="url(#gradient)">{{list['非常不满意']}}</text>–>--> | ||
| 119 | <!-- <!– </svg>–>--> | ||
| 120 | <!-- <!– </div>–>--> | ||
| 121 | <!-- </div>--> | ||
| 122 | 90 | ||
| 123 | </div> | 91 | </div> |
| 124 | 92 | ||
| ... | @@ -126,36 +94,46 @@ | ... | @@ -126,36 +94,46 @@ |
| 126 | </template> | 94 | </template> |
| 127 | 95 | ||
| 128 | <script setup> | 96 | <script setup> |
| 129 | import {onMounted, ref, watch} from 'vue' | 97 | import {autoToolTip} from "@/plugins/auto-toolTip"; |
| 130 | import 'echarts-liquidfill' | ||
| 131 | import * as echarts from "echarts"; | 98 | import * as echarts from "echarts"; |
| 132 | import * as api from "@/apiPc/common" | 99 | import * as api from "@/apiPc/common" |
| 100 | import {onMounted, ref} from 'vue' | ||
| 101 | |||
| 102 | const zhuRef1 = ref(null) | ||
| 103 | const zhuRef2 = ref(null) | ||
| 104 | const zhuRef3 = ref(null) | ||
| 105 | const zhuRef4 = ref(null) | ||
| 106 | const bing1 = ref(null) | ||
| 107 | const bing2 = ref(null) | ||
| 108 | const bing3 = ref(null) | ||
| 109 | const textRef = ref(null) | ||
| 110 | |||
| 111 | let chart1 | ||
| 112 | let chart11 | ||
| 113 | let chart2 | ||
| 114 | let chart22 | ||
| 115 | let chart3 | ||
| 116 | let chart33 | ||
| 117 | let chart44 | ||
| 133 | 118 | ||
| 134 | const statisticStyle = ref({'color': '#fff'}) | ||
| 135 | |||
| 136 | const boardRef1 = ref(null) | ||
| 137 | const boardRef2 = ref(null) | ||
| 138 | const boardRef3 = ref(null) | ||
| 139 | const boardRef4 = ref(null) | ||
| 140 | |||
| 141 | const q1 = ref(null) | ||
| 142 | const q2 = ref(null) | ||
| 143 | const q3 = ref(null) | ||
| 144 | const q4 = ref(null) | ||
| 145 | const q5 = ref(null) | ||
| 146 | const list = ref([]) | 119 | const list = ref([]) |
| 147 | let liquid1 | 120 | |
| 148 | let liquid2 | ||
| 149 | let liquid3 | ||
| 150 | let liquid4 | ||
| 151 | let liquid5 | ||
| 152 | let total = 0 | 121 | let total = 0 |
| 153 | let intervalA = null | 122 | let intervalA = null |
| 154 | 123 | ||
| 155 | onMounted(() => { | 124 | onMounted(() => { |
| 156 | // init() | 125 | // init() |
| 157 | window.addEventListener('resize', handleResize); | 126 | window.addEventListener('resize', handleResize); |
| 127 | handelBing1() | ||
| 128 | handelZhu1() | ||
| 129 | handelBing2() | ||
| 130 | handelZhu2() | ||
| 131 | handelBing3() | ||
| 132 | handelZhu3() | ||
| 133 | handelZhu4() | ||
| 158 | }) | 134 | }) |
| 135 | |||
| 136 | |||
| 159 | const init = () => { | 137 | const init = () => { |
| 160 | if (!intervalA) { | 138 | if (!intervalA) { |
| 161 | getdata() | 139 | getdata() |
| ... | @@ -170,104 +148,558 @@ function getdata() { | ... | @@ -170,104 +148,558 @@ function getdata() { |
| 170 | for (let n in list.value) { | 148 | for (let n in list.value) { |
| 171 | total = total + (list.value[n] || 0) | 149 | total = total + (list.value[n] || 0) |
| 172 | } | 150 | } |
| 173 | liquid1 = setQ1(q1.value, [list.value['非常满意'] / total, list.value['非常满意'] / total]) | ||
| 174 | liquid2 = setQ1(q2.value, [list.value['满意'] / total, list.value['满意'] / total]) | ||
| 175 | // liquid3 = setQ1(q3.value, [list.value['基本满意'] / total, list.value['基本满意'] / total]) | ||
| 176 | liquid4 = setQ1(q4.value, [list.value['不满意'] / total, list.value['不满意'] / total]) | ||
| 177 | // liquid5 = setQ1(q5.value, [list.value['非常不满意'] / total, list.value['非常不满意'] / total]) | ||
| 178 | }) | 151 | }) |
| 179 | } | 152 | } |
| 180 | 153 | ||
| 181 | function handleResize() { | 154 | function handleResize() { |
| 182 | liquid1?.resize() | 155 | chart1?.resize() |
| 183 | liquid2?.resize() | 156 | chart11?.resize() |
| 184 | // liquid3.resize() | 157 | chart2?.resize() |
| 185 | liquid4?.resize() | 158 | chart22?.resize() |
| 186 | // liquid5.resize() | 159 | chart3?.resize() |
| 160 | chart33?.resize() | ||
| 161 | chart44?.resize() | ||
| 187 | } | 162 | } |
| 188 | 163 | ||
| 189 | const setQ1 = (ref, data) => { | 164 | const handelBing1 = () => { |
| 190 | let dom = echarts.init(ref) | 165 | chart1 = echarts.init(bing1.value) |
| 191 | const option = { | 166 | const option = { |
| 167 | tooltip: { | ||
| 168 | trigger: '' | ||
| 169 | }, | ||
| 170 | |||
| 192 | series: [ | 171 | series: [ |
| 193 | { | 172 | { |
| 194 | type: 'liquidFill', | 173 | name: '1', |
| 195 | radius: '100%', | 174 | type: 'pie', |
| 196 | center: ['50%', '50%'], | 175 | radius: ['99%', '100%'], |
| 197 | color: [ | 176 | center: ['50%', '70%'], |
| 177 | label: { | ||
| 178 | show: false | ||
| 179 | }, | ||
| 180 | itemStyle: { | ||
| 181 | borderWidth: 2 | ||
| 182 | }, | ||
| 183 | emphasis: { | ||
| 184 | scale: false | ||
| 185 | }, | ||
| 186 | startAngle: 180, | ||
| 187 | endAngle: 360, | ||
| 188 | data: [ | ||
| 189 | {value: 48, name: '1'}, | ||
| 190 | {value: 1, name: '1'}, | ||
| 191 | {value: 48, name: '1'} | ||
| 192 | ] | ||
| 193 | }, | ||
| 198 | { | 194 | { |
| 199 | type: "linear", | 195 | name: '2', |
| 200 | x: 0, | 196 | type: 'pie', |
| 201 | y: 1, | 197 | radius: ['75%', '95%'], |
| 202 | x2: 0, | 198 | center: ['50%', '70%'], |
| 203 | y2: 0, | 199 | label: { |
| 204 | colorStops: [ | 200 | show: false |
| 201 | }, | ||
| 202 | // adjust the start and end angle | ||
| 203 | startAngle: 180, | ||
| 204 | endAngle: 360, | ||
| 205 | emphasis: { | ||
| 206 | scale: false | ||
| 207 | }, | ||
| 208 | data: [ | ||
| 209 | {value: 1048, name: 'Search Engine'}, | ||
| 210 | {value: 735, name: 'Direct'} | ||
| 211 | ] | ||
| 212 | }, | ||
| 205 | { | 213 | { |
| 206 | offset: 1, | 214 | name: '3', |
| 207 | color: ["#2897FE"], // 0% 处的颜色 | 215 | type: 'pie', |
| 216 | radius: ['55%', '70%'], | ||
| 217 | center: ['50%', '70%'], | ||
| 218 | label: { | ||
| 219 | show: true, | ||
| 220 | position: 'center', | ||
| 221 | formatter: '{b}' | ||
| 222 | }, | ||
| 223 | emphasis: { | ||
| 224 | scale: false | ||
| 225 | }, | ||
| 226 | // adjust the start and end angle | ||
| 227 | startAngle: 180, | ||
| 228 | endAngle: 360, | ||
| 229 | data: [ | ||
| 230 | {value: 1048, name: '2025'}, | ||
| 231 | {value: 735, name: '2025'} | ||
| 232 | ] | ||
| 208 | }, | 233 | }, |
| 209 | { | 234 | { |
| 210 | offset: 0, | 235 | name: '4', |
| 211 | color: ["rgba(0,149,255,0)"], // 100% 处的颜色 | 236 | type: 'pie', |
| 237 | radius: ['38%', '50%'], | ||
| 238 | center: ['50%', '70%'], | ||
| 239 | label: { | ||
| 240 | show: false | ||
| 212 | }, | 241 | }, |
| 213 | ], | 242 | emphasis: { |
| 214 | global: false, // 缺省为 false | 243 | scale: false |
| 244 | }, | ||
| 245 | // adjust the start and end angle | ||
| 246 | startAngle: 180, | ||
| 247 | endAngle: 360, | ||
| 248 | data: [{value: 1048, name: ''}] | ||
| 249 | } | ||
| 250 | ] | ||
| 251 | } | ||
| 252 | |||
| 253 | chart1.setOption(option) | ||
| 254 | autoHover(chart1, option, 3, 2000) | ||
| 255 | } | ||
| 256 | const handelBing2 = () => { | ||
| 257 | chart2 = echarts.init(bing2.value) | ||
| 258 | const option = { | ||
| 259 | tooltip: { | ||
| 260 | trigger: '' | ||
| 261 | }, | ||
| 262 | |||
| 263 | series: [ | ||
| 264 | { | ||
| 265 | name: '1', | ||
| 266 | type: 'pie', | ||
| 267 | radius: ['99%', '100%'], | ||
| 268 | center: ['50%', '70%'], | ||
| 269 | label: { | ||
| 270 | show: false | ||
| 215 | }, | 271 | }, |
| 216 | ], | ||
| 217 | data: data, // data个数代表波浪数 | ||
| 218 | amplitude: 5, | ||
| 219 | // 图形样式 | ||
| 220 | itemStyle: { | 272 | itemStyle: { |
| 221 | opacity: 0.5, // 波浪的透明度 | 273 | borderWidth: 2 |
| 222 | shadowBlur: 2, // 波浪的阴影范围 | 274 | }, |
| 223 | }, | 275 | emphasis: { |
| 224 | backgroundStyle: { | 276 | scale: false |
| 225 | borderWidth: 2, | 277 | }, |
| 226 | borderColor: 'transparent', | 278 | startAngle: 180, |
| 227 | color: { | 279 | endAngle: 360, |
| 228 | type: 'radial', | 280 | data: [ |
| 229 | x: 0.5, | 281 | {value: 48, name: '1'}, |
| 230 | y: 0.5, | 282 | {value: 1, name: '1'}, |
| 231 | r: 0.5, | 283 | {value: 48, name: '1'} |
| 232 | colorStops: [{ | 284 | ] |
| 233 | offset: 0, color: 'transparent' // 0% 处的颜色 | 285 | }, |
| 234 | }, { | 286 | { |
| 235 | offset: 1, color: '#144C8A' // 100% 处的颜色 | 287 | name: '2', |
| 236 | }], | 288 | type: 'pie', |
| 237 | global: false // 缺省为 false | 289 | radius: ['75%', '95%'], |
| 290 | center: ['50%', '70%'], | ||
| 291 | label: { | ||
| 292 | show: false | ||
| 293 | }, | ||
| 294 | // adjust the start and end angle | ||
| 295 | startAngle: 180, | ||
| 296 | endAngle: 360, | ||
| 297 | emphasis: { | ||
| 298 | scale: false | ||
| 299 | }, | ||
| 300 | data: [ | ||
| 301 | {value: 1048, name: 'Search Engine'}, | ||
| 302 | {value: 735, name: 'Direct'} | ||
| 303 | ] | ||
| 304 | }, | ||
| 305 | { | ||
| 306 | name: '3', | ||
| 307 | type: 'pie', | ||
| 308 | radius: ['55%', '70%'], | ||
| 309 | center: ['50%', '70%'], | ||
| 310 | label: { | ||
| 311 | show: true, | ||
| 312 | position: 'center', | ||
| 313 | formatter: '{b}' | ||
| 314 | }, | ||
| 315 | emphasis: { | ||
| 316 | scale: false | ||
| 317 | }, | ||
| 318 | // adjust the start and end angle | ||
| 319 | startAngle: 180, | ||
| 320 | endAngle: 360, | ||
| 321 | data: [ | ||
| 322 | {value: 1048, name: '2025'}, | ||
| 323 | {value: 735, name: '2025'} | ||
| 324 | ] | ||
| 325 | }, | ||
| 326 | ] | ||
| 238 | } | 327 | } |
| 328 | |||
| 329 | chart2.setOption(option) | ||
| 330 | autoHover(chart2, option, 2, 2000) | ||
| 331 | } | ||
| 332 | const handelBing3 = () => { | ||
| 333 | chart3 = echarts.init(bing3.value) | ||
| 334 | const option = { | ||
| 335 | tooltip: { | ||
| 336 | trigger: '' | ||
| 239 | }, | 337 | }, |
| 338 | |||
| 339 | series: [ | ||
| 340 | { | ||
| 341 | name: '1', | ||
| 342 | type: 'pie', | ||
| 343 | radius: ['99%', '100%'], | ||
| 344 | center: ['50%', '70%'], | ||
| 345 | label: { | ||
| 346 | show: false | ||
| 347 | }, | ||
| 348 | itemStyle: { | ||
| 349 | borderWidth: 2 | ||
| 350 | }, | ||
| 351 | emphasis: { | ||
| 352 | scale: false | ||
| 353 | }, | ||
| 354 | startAngle: 180, | ||
| 355 | endAngle: 360, | ||
| 356 | data: [ | ||
| 357 | {value: 48, name: '1'}, | ||
| 358 | {value: 1, name: '1'}, | ||
| 359 | {value: 48, name: '1'} | ||
| 360 | ] | ||
| 361 | }, | ||
| 362 | { | ||
| 363 | name: '2', | ||
| 364 | type: 'pie', | ||
| 365 | radius: ['75%', '95%'], | ||
| 366 | center: ['50%', '70%'], | ||
| 367 | label: { | ||
| 368 | show: false | ||
| 369 | }, | ||
| 370 | // adjust the start and end angle | ||
| 371 | startAngle: 180, | ||
| 372 | endAngle: 360, | ||
| 373 | emphasis: { | ||
| 374 | scale: false | ||
| 375 | }, | ||
| 376 | data: [ | ||
| 377 | {value: 1048, name: 'Search Engine'}, | ||
| 378 | {value: 735, name: 'Direct'} | ||
| 379 | ] | ||
| 380 | }, | ||
| 381 | { | ||
| 382 | name: '3', | ||
| 383 | type: 'pie', | ||
| 384 | radius: ['55%', '70%'], | ||
| 385 | center: ['50%', '70%'], | ||
| 240 | label: { | 386 | label: { |
| 241 | show: true, | 387 | show: true, |
| 388 | position: 'center', | ||
| 389 | formatter: '{b}' | ||
| 390 | }, | ||
| 391 | emphasis: { | ||
| 392 | scale: false | ||
| 393 | }, | ||
| 394 | // adjust the start and end angle | ||
| 395 | startAngle: 180, | ||
| 396 | endAngle: 360, | ||
| 397 | data: [ | ||
| 398 | {value: 1048, name: '2025'}, | ||
| 399 | {value: 735, name: '2025'} | ||
| 400 | ] | ||
| 401 | }, | ||
| 402 | ] | ||
| 403 | } | ||
| 404 | |||
| 405 | chart3.setOption(option) | ||
| 406 | autoHover(chart3, option, 2, 2000) | ||
| 407 | } | ||
| 408 | |||
| 409 | const handelZhu1 = () => { | ||
| 410 | chart11 = echarts.init(zhuRef1.value) | ||
| 411 | const option = { | ||
| 412 | tooltip: { | ||
| 413 | trigger: 'axis', | ||
| 414 | axisPointer: { | ||
| 415 | type: 'shadow' | ||
| 416 | } | ||
| 417 | }, | ||
| 418 | legend: { | ||
| 419 | top: '0', | ||
| 420 | textStyle: { | ||
| 421 | color: '#FFF' | ||
| 422 | }, | ||
| 423 | }, | ||
| 424 | grid: { | ||
| 425 | left: '3%', | ||
| 426 | right: '4%', | ||
| 427 | bottom: '3%', | ||
| 428 | containLabel: true | ||
| 429 | }, | ||
| 430 | xAxis: [ | ||
| 431 | { | ||
| 432 | type: 'category', | ||
| 433 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] | ||
| 434 | } | ||
| 435 | ], | ||
| 436 | yAxis: [ | ||
| 437 | { | ||
| 438 | type: 'value', | ||
| 439 | name: '单位(万)', | ||
| 440 | } | ||
| 441 | ], | ||
| 442 | series: [ | ||
| 443 | { | ||
| 444 | name: '2025年', | ||
| 445 | type: 'bar', | ||
| 446 | emphasis: { | ||
| 447 | focus: 'series' | ||
| 448 | }, | ||
| 449 | data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,] | ||
| 450 | }, | ||
| 451 | { | ||
| 452 | name: '2024年', | ||
| 453 | type: 'bar', | ||
| 454 | emphasis: { | ||
| 455 | focus: 'series' | ||
| 456 | }, | ||
| 457 | data: [150, 232, 201, 154, 190, 330, 410, 201, 154, 190, 330, 410] | ||
| 458 | }, | ||
| 459 | ] | ||
| 460 | } | ||
| 461 | chart11.setOption(option) | ||
| 462 | autoHover(chart11, option, 0, 2000) | ||
| 463 | } | ||
| 464 | const handelZhu2 = () => { | ||
| 465 | chart22 = echarts.init(zhuRef2.value) | ||
| 466 | const option = { | ||
| 467 | tooltip: { | ||
| 468 | trigger: 'axis', | ||
| 469 | axisPointer: { | ||
| 470 | type: 'shadow' | ||
| 471 | } | ||
| 472 | }, | ||
| 473 | legend: { | ||
| 474 | top: '0', | ||
| 475 | textStyle: { | ||
| 476 | color: '#FFF' | ||
| 477 | }, | ||
| 478 | }, | ||
| 479 | grid: { | ||
| 480 | left: '3%', | ||
| 481 | right: '4%', | ||
| 482 | bottom: '3%', | ||
| 483 | containLabel: true | ||
| 484 | }, | ||
| 485 | xAxis: [ | ||
| 486 | { | ||
| 487 | type: 'category', | ||
| 488 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] | ||
| 489 | } | ||
| 490 | ], | ||
| 491 | yAxis: [ | ||
| 492 | { | ||
| 493 | type: 'value', | ||
| 494 | name: '单位(万)', | ||
| 495 | } | ||
| 496 | ], | ||
| 497 | series: [ | ||
| 498 | { | ||
| 499 | name: '2025年', | ||
| 500 | type: 'bar', | ||
| 501 | emphasis: { | ||
| 502 | focus: 'series' | ||
| 503 | }, | ||
| 504 | data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,] | ||
| 505 | }, | ||
| 506 | { | ||
| 507 | name: '2024年', | ||
| 508 | type: 'bar', | ||
| 509 | emphasis: { | ||
| 510 | focus: 'series' | ||
| 511 | }, | ||
| 512 | data: [150, 232, 201, 154, 190, 330, 410, 201, 154, 190, 330, 410] | ||
| 513 | }, | ||
| 514 | ] | ||
| 515 | } | ||
| 516 | chart22.setOption(option) | ||
| 517 | autoHover(chart22, option, 0, 2000) | ||
| 518 | } | ||
| 519 | const handelZhu3 = () => { | ||
| 520 | chart33 = echarts.init(zhuRef3.value) | ||
| 521 | const option = { | ||
| 522 | color: ['#80FFA5', '#00DDFF', '#37A2FF', '#FF0087', '#FFBF00'], | ||
| 523 | title: { | ||
| 524 | text: '2025年' | ||
| 525 | }, | ||
| 526 | tooltip: { | ||
| 527 | trigger: 'axis', | ||
| 528 | axisPointer: { | ||
| 529 | type: 'cross', | ||
| 530 | label: { | ||
| 531 | backgroundColor: '#6a7985' | ||
| 532 | } | ||
| 533 | } | ||
| 534 | }, | ||
| 535 | legend: { | ||
| 536 | data: ['2024年', '2025年',], | ||
| 537 | textStyle: { | ||
| 538 | color: "#00DDFF" | ||
| 539 | } | ||
| 540 | }, | ||
| 541 | toolbox: { | ||
| 542 | feature: { | ||
| 543 | saveAsImage: {} | ||
| 544 | } | ||
| 545 | }, | ||
| 546 | grid: { | ||
| 547 | left: '3%', | ||
| 548 | right: '4%', | ||
| 549 | bottom: '3%', | ||
| 550 | containLabel: true | ||
| 551 | }, | ||
| 552 | xAxis: [ | ||
| 553 | { | ||
| 554 | type: 'category', | ||
| 555 | boundaryGap: false, | ||
| 556 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] | ||
| 557 | } | ||
| 558 | ], | ||
| 559 | yAxis: [ | ||
| 560 | { | ||
| 561 | type: 'value' | ||
| 562 | } | ||
| 563 | ], | ||
| 564 | series: [ | ||
| 565 | { | ||
| 566 | name: '2024年', | ||
| 567 | type: 'line', | ||
| 568 | stack: 'Total', | ||
| 569 | smooth: false, | ||
| 570 | lineStyle: { | ||
| 571 | width: 0 | ||
| 572 | }, | ||
| 573 | showSymbol: false, | ||
| 574 | areaStyle: { | ||
| 575 | opacity: 0.5, | ||
| 576 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | ||
| 577 | { | ||
| 578 | offset: 0, | ||
| 579 | color: 'rgb(128, 255, 165)' | ||
| 580 | }, | ||
| 581 | { | ||
| 582 | offset: 0.3, | ||
| 583 | color: 'rgb(1, 191, 236)' | ||
| 584 | } | ||
| 585 | ]) | ||
| 586 | }, | ||
| 587 | emphasis: { | ||
| 588 | focus: 'series' | ||
| 589 | }, | ||
| 590 | data: [140, 232, 301, 264, 200, 340, 250, 301, 264, 200, 340, 250] | ||
| 591 | }, | ||
| 592 | { | ||
| 593 | name: '2025年', | ||
| 594 | type: 'line', | ||
| 595 | stack: 'Total', | ||
| 596 | smooth: false, | ||
| 597 | lineStyle: { | ||
| 598 | width: 0 | ||
| 599 | }, | ||
| 600 | showSymbol: false, | ||
| 601 | areaStyle: { | ||
| 602 | opacity: 0.5, | ||
| 603 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | ||
| 604 | { | ||
| 605 | offset: 0, | ||
| 606 | color: 'rgb(0, 221, 255)' | ||
| 607 | }, | ||
| 608 | { | ||
| 609 | offset: 0.3, | ||
| 610 | color: 'rgb(77, 119, 255)' | ||
| 611 | } | ||
| 612 | ]) | ||
| 613 | }, | ||
| 614 | emphasis: { | ||
| 615 | focus: 'series' | ||
| 616 | }, | ||
| 617 | data: [120, 282, 211, 234, 220, 340, 310, 120, 282, 211, 234, 220] | ||
| 618 | }, | ||
| 619 | ] | ||
| 620 | } | ||
| 621 | chart33.setOption(option) | ||
| 622 | autoHover(chart33, option, 0, 2000) | ||
| 623 | } | ||
| 624 | const handelZhu4 = () => { | ||
| 625 | chart44 = echarts.init(zhuRef4.value) | ||
| 626 | const option = { | ||
| 627 | tooltip: { | ||
| 628 | trigger: 'axis', | ||
| 629 | axisPointer: { | ||
| 630 | type: 'shadow' | ||
| 631 | } | ||
| 632 | }, | ||
| 633 | legend: { | ||
| 242 | textStyle: { | 634 | textStyle: { |
| 243 | color: '#fff', | 635 | color: '#FFF' |
| 244 | shadowColor: '#000', | ||
| 245 | shadowBlur: 10, | ||
| 246 | fontSize: '2rem', | ||
| 247 | }, | 636 | }, |
| 248 | formatter: (params) => { | ||
| 249 | return `${(params.value * 100).toFixed(2)}%`; | ||
| 250 | }, | 637 | }, |
| 638 | grid: { | ||
| 639 | left: '3%', | ||
| 640 | right: '4%', | ||
| 641 | bottom: '3%', | ||
| 642 | containLabel: true | ||
| 251 | }, | 643 | }, |
| 252 | outline: { | 644 | xAxis: [ |
| 253 | show: false, | 645 | { |
| 646 | type: 'category', | ||
| 647 | stack: 'Ad', | ||
| 648 | data: ['山西', '陕西', '新疆', '伊拉克', '塘沽', '深圳', '湛江', '汉南', '上海'] | ||
| 649 | } | ||
| 650 | ], | ||
| 651 | yAxis: [ | ||
| 652 | { | ||
| 653 | type: 'value', | ||
| 654 | name: '金额(万元)', | ||
| 655 | } | ||
| 656 | ], | ||
| 657 | series: [ | ||
| 658 | { | ||
| 659 | name: '海陆', | ||
| 660 | type: 'bar', | ||
| 661 | stack: 'Ad', | ||
| 662 | emphasis: { | ||
| 663 | focus: 'series' | ||
| 254 | }, | 664 | }, |
| 665 | data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390] | ||
| 255 | }, | 666 | }, |
| 256 | ] | 667 | ] |
| 257 | } | 668 | } |
| 258 | dom.setOption(option) | 669 | chart44.setOption(option) |
| 259 | return dom | 670 | autoHover(chart44, option, 0, 2000) |
| 260 | } | 671 | } |
| 261 | 672 | ||
| 673 | function autoHover(myChart, option, index, time) { | ||
| 674 | autoToolTip(myChart, option, { | ||
| 675 | interval: time,// 轮播间隔时间 默认2s | ||
| 676 | loopSeries: false,// 是否循环轮播所有序列 | ||
| 677 | seriesIndex: index, // 第1个被轮播的序列下标 | ||
| 678 | }); | ||
| 679 | } | ||
| 262 | </script> | 680 | </script> |
| 263 | 681 | ||
| 264 | <style lang="scss" scoped> | 682 | <style lang="scss" scoped> |
| 683 | :deep(.el-radio-button--small .el-radio-button__inner) { | ||
| 684 | font-size: calc(12 * 100vw / 1920); | ||
| 685 | padding: calc(5 * 100vw / 1920) calc(11 * 100vw / 1920); | ||
| 686 | } | ||
| 687 | |||
| 688 | |||
| 265 | .center { | 689 | .center { |
| 690 | width: 100%; | ||
| 691 | |||
| 692 | .father { | ||
| 693 | position: relative; | ||
| 694 | } | ||
| 695 | |||
| 266 | .top { | 696 | .top { |
| 267 | padding-top: calc(20 * 100vw / 1920); | 697 | padding-top: calc(20 * 100vw / 1920); |
| 268 | display: flex; | 698 | display: flex; |
| 269 | justify-content: space-between; | 699 | justify-content: space-between; |
| 270 | align-items: center; | 700 | align-items: center; |
| 701 | position: relative; | ||
| 702 | overflow: hidden; | ||
| 271 | 703 | ||
| 272 | .left { | 704 | .left { |
| 273 | background: url("@/assets/image/box02@2x.png") no-repeat center; | 705 | background: url("@/assets/image/box02@2x.png") no-repeat center; |
| ... | @@ -359,8 +791,6 @@ const setQ1 = (ref, data) => { | ... | @@ -359,8 +791,6 @@ const setQ1 = (ref, data) => { |
| 359 | } | 791 | } |
| 360 | } | 792 | } |
| 361 | } | 793 | } |
| 362 | |||
| 363 | |||
| 364 | } | 794 | } |
| 365 | } | 795 | } |
| 366 | 796 | ||
| ... | @@ -368,44 +798,48 @@ const setQ1 = (ref, data) => { | ... | @@ -368,44 +798,48 @@ const setQ1 = (ref, data) => { |
| 368 | background: url("@/assets/image/box04@2x.png") no-repeat center; | 798 | background: url("@/assets/image/box04@2x.png") no-repeat center; |
| 369 | background-size: 100% 100%; | 799 | background-size: 100% 100%; |
| 370 | margin-top: calc(20 * 100vw / 1920); | 800 | margin-top: calc(20 * 100vw / 1920); |
| 371 | height: 76vh; | ||
| 372 | padding: calc(10 * 100vw / 1920); | 801 | padding: calc(10 * 100vw / 1920); |
| 373 | } | ||
| 374 | } | ||
| 375 | |||
| 376 | |||
| 377 | .partA { | ||
| 378 | min-height: 340px; | ||
| 379 | height: 70vh; | ||
| 380 | background: url("@/assets/img/pan.png") no-repeat bottom; | ||
| 381 | background-size: 100% auto; | ||
| 382 | position: relative; | 802 | position: relative; |
| 383 | } | 803 | overflow: hidden; |
| 384 | 804 | ||
| 385 | .gif_bg { | 805 | .bing { |
| 386 | width: 100%; | 806 | text-align: center; |
| 387 | position: absolute; | ||
| 388 | bottom: calc(-100 * 100vw / 1920);; | ||
| 389 | 807 | ||
| 390 | img { | 808 | .bingTitle { |
| 391 | width: 100%; | 809 | font-family: PingFang SC, serif; |
| 392 | transform: rotate3d(1, 0, 0, 70deg); | 810 | font-weight: 500; |
| 811 | font-size: calc(18 * 100vw / 1920); | ||
| 812 | color: #D1D6DF; | ||
| 813 | text-shadow: 0px 2px 3px rgba(17, 20, 22, 0.41); | ||
| 814 | background: linear-gradient(0deg, #FFFFFF 0%, #41F2FF 65.2587890625%); | ||
| 815 | -webkit-background-clip: text; | ||
| 816 | -webkit-text-fill-color: transparent; | ||
| 817 | display: flex; | ||
| 818 | margin-top: calc(10 * 100vw / 1920); | ||
| 819 | |||
| 820 | .titleImg { | ||
| 821 | display: block; | ||
| 822 | width: calc(50 * 100vw / 1920); | ||
| 823 | height: calc(20 * 100vw / 1920); | ||
| 824 | } | ||
| 393 | } | 825 | } |
| 394 | } | ||
| 395 | 826 | ||
| 396 | .partB { | 827 | .bingBottom { |
| 397 | display: flex; | 828 | position: absolute; |
| 398 | justify-content: space-around; | 829 | z-index: 99; |
| 399 | } | 830 | bottom: 0; |
| 831 | left: 0; | ||
| 832 | width: 30%; | ||
| 400 | 833 | ||
| 401 | .qqbox { | 834 | div { |
| 402 | width: 33%; | 835 | font-family: PingFang SC; |
| 403 | position: relative; | 836 | font-weight: 400; |
| 404 | top: calc(-20 * 100vw / 1920); | 837 | font-size: calc(14 * 100vw / 1920); |
| 405 | background: url("@/assets/img/q1.png") no-repeat bottom center; | 838 | color: #FFFFFF; |
| 406 | background-size: 70%; | 839 | } |
| 840 | } | ||
| 841 | } | ||
| 842 | } | ||
| 407 | } | 843 | } |
| 408 | 844 | ||
| 409 | //.q1box,.q5box{top: -60px} | ||
| 410 | //.q2box,.q4box{top: -30px} | ||
| 411 | </style> | 845 | </style> | ... | ... |
| ... | @@ -167,8 +167,7 @@ const setA = () => { | ... | @@ -167,8 +167,7 @@ const setA = () => { |
| 167 | center: ['25%', '50%'], | 167 | center: ['25%', '50%'], |
| 168 | radius: '5%', | 168 | radius: '5%', |
| 169 | emphasis: { | 169 | emphasis: { |
| 170 | radius: '5%', | 170 | scale: false |
| 171 | show: false, | ||
| 172 | }, | 171 | }, |
| 173 | data: [ | 172 | data: [ |
| 174 | {value: 110, name: ''}, | 173 | {value: 110, name: ''}, |
| ... | @@ -188,9 +187,10 @@ const setA = () => { | ... | @@ -188,9 +187,10 @@ const setA = () => { |
| 188 | avoidLabelOverlap: false, | 187 | avoidLabelOverlap: false, |
| 189 | label: { | 188 | label: { |
| 190 | show: false, | 189 | show: false, |
| 190 | |||
| 191 | }, | ||
| 191 | emphasis: { | 192 | emphasis: { |
| 192 | show: false | 193 | scale: false |
| 193 | } | ||
| 194 | }, | 194 | }, |
| 195 | data: [ | 195 | data: [ |
| 196 | {value: 12, name: ''}, | 196 | {value: 12, name: ''}, |
| ... | @@ -204,6 +204,7 @@ const setA = () => { | ... | @@ -204,6 +204,7 @@ const setA = () => { |
| 204 | avoidLabelOverlap: false, | 204 | avoidLabelOverlap: false, |
| 205 | itemStyle: { | 205 | itemStyle: { |
| 206 | borderWidth: 2, | 206 | borderWidth: 2, |
| 207 | opacity: 0.8, | ||
| 207 | // borderColor: '#fff', | 208 | // borderColor: '#fff', |
| 208 | }, | 209 | }, |
| 209 | label: { | 210 | label: { | ... | ... |
| 1 | <template> | 1 | <template> |
| 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"/> |
| ... | @@ -10,11 +10,11 @@ | ... | @@ -10,11 +10,11 @@ |
| 10 | </el-radio-group> | 10 | </el-radio-group> |
| 11 | </div> | 11 | </div> |
| 12 | 12 | ||
| 13 | <div ref="zhuRef" style="width: 100%; height: 40vh;"></div> | 13 | <div ref="zhuRef" style="width: 100%; height: 24vh;"></div> |
| 14 | </div> | 14 | </div> |
| 15 | 15 | ||
| 16 | <div class="chartCard mt30"> | 16 | <div class="chartCard mt30"> |
| 17 | <div class="title">档案接收总览</div> | 17 | <div class="title">回款</div> |
| 18 | <div class="po_right"> | 18 | <div class="po_right"> |
| 19 | <!-- <el-radio-group v-model="radioB" size="small" @change="radioBChange">--> | 19 | <!-- <el-radio-group v-model="radioB" size="small" @change="radioBChange">--> |
| 20 | <!-- <el-radio-button label="本月" value="month" />--> | 20 | <!-- <el-radio-button label="本月" value="month" />--> |
| ... | @@ -23,7 +23,11 @@ | ... | @@ -23,7 +23,11 @@ |
| 23 | <!-- </el-radio-group>--> | 23 | <!-- </el-radio-group>--> |
| 24 | </div> | 24 | </div> |
| 25 | 25 | ||
| 26 | <div ref="lineRef" style="width: 100%; height: 40vh;"></div> | 26 | <div ref="lineRef" style="width: 100%; height: 24vh;"></div> |
| 27 | </div> | ||
| 28 | <div class="chartCard mt30"> | ||
| 29 | <div class="title">逾期360天以上未开票</div> | ||
| 30 | <div ref="overdueRef" style="width: 100%; height: 25vh;"></div> | ||
| 27 | </div> | 31 | </div> |
| 28 | </div> | 32 | </div> |
| 29 | </template> | 33 | </template> |
| ... | @@ -37,16 +41,20 @@ import * as api from "@/apiPc/common" | ... | @@ -37,16 +41,20 @@ import * as api from "@/apiPc/common" |
| 37 | 41 | ||
| 38 | const zhuRef = ref(null) | 42 | const zhuRef = ref(null) |
| 39 | const lineRef = ref(null) | 43 | const lineRef = ref(null) |
| 44 | const overdueRef = ref(null) | ||
| 40 | const kindList = ref(['文书', '婚姻', '图书', '档案', '司法', '环保', '音频', '视频', '会计', '其他']) | 45 | const kindList = ref(['文书', '婚姻', '图书', '档案', '司法', '环保', '音频', '视频', '会计', '其他']) |
| 41 | const dataA = ref([80, 60, 55, 62, 50, 55, 60, 62, 48, 53]) | 46 | const dataA = ref([80, 60, 55, 62, 50, 55, 60, 62, 48, 53]) |
| 42 | const radioA = ref('month') | 47 | const radioA = ref('month') |
| 43 | const radioB = ref('month') | ||
| 44 | let chartA | 48 | let chartA |
| 45 | let chartB | 49 | let chartB |
| 50 | let chartC | ||
| 46 | let intervalA = null | 51 | let intervalA = null |
| 47 | onMounted(() => { | 52 | onMounted(() => { |
| 48 | // init() | 53 | // init() |
| 49 | window.addEventListener('resize', handleResize); | 54 | window.addEventListener('resize', handleResize); |
| 55 | setA() | ||
| 56 | setB() | ||
| 57 | setC() | ||
| 50 | }) | 58 | }) |
| 51 | const init = () => { | 59 | const init = () => { |
| 52 | clear() | 60 | clear() |
| ... | @@ -77,98 +85,51 @@ const getA = () => { | ... | @@ -77,98 +85,51 @@ const getA = () => { |
| 77 | const setA = () => { | 85 | const setA = () => { |
| 78 | chartA = echarts.init(zhuRef.value) | 86 | chartA = echarts.init(zhuRef.value) |
| 79 | const option = { | 87 | const option = { |
| 80 | animation: true, | 88 | tooltip: { |
| 81 | // dataZoom: [ | 89 | trigger: 'axis', |
| 82 | // { | 90 | axisPointer: { |
| 83 | // show: false, | 91 | // Use axis to trigger tooltip |
| 84 | // start: 0, | 92 | type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow' |
| 85 | // end: 100 | ||
| 86 | // }, | ||
| 87 | // { | ||
| 88 | // type: 'inside', | ||
| 89 | // start: 0, | ||
| 90 | // end: 100 | ||
| 91 | // } | ||
| 92 | // ], | ||
| 93 | xAxis: [{ | ||
| 94 | data: kindList.value, | ||
| 95 | axisLabel: { | ||
| 96 | inside: false, | ||
| 97 | color: '#7ECEF4', | ||
| 98 | fontSize: '1.1rem' | ||
| 99 | }, | ||
| 100 | axisTick: { | ||
| 101 | show: false | ||
| 102 | }, | ||
| 103 | axisLine: { | ||
| 104 | show: true, | ||
| 105 | lineStyle: { | ||
| 106 | color: 'RGBA(38, 81, 128, 1)' | ||
| 107 | } | 93 | } |
| 108 | }, | 94 | }, |
| 109 | z: 10 | 95 | legend: { |
| 110 | }], | 96 | top: "3%" |
| 111 | yAxis: { | ||
| 112 | name: '单位(次)', | ||
| 113 | nameTextStyle: { | ||
| 114 | color: '#7ECEF4', | ||
| 115 | fontSize: '1.2rem' | ||
| 116 | }, | 97 | }, |
| 117 | axisLine: { | 98 | grid: { |
| 118 | show: false | 99 | left: '3%', |
| 100 | right: '4%', | ||
| 101 | bottom: '3%', | ||
| 102 | containLabel: true | ||
| 119 | }, | 103 | }, |
| 120 | axisTick: { | 104 | xAxis: { |
| 121 | show: false | 105 | type: 'value' |
| 122 | }, | 106 | }, |
| 123 | axisLabel: { | 107 | yAxis: { |
| 124 | color: '#7ECEF4', | 108 | type: 'category', |
| 125 | fontSize: '1.3rem' | 109 | data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'] |
| 126 | }, | 110 | }, |
| 127 | splitLine: { | 111 | series: [ |
| 128 | show: true, | 112 | { |
| 129 | lineStyle: { | 113 | name: 'Direct', |
| 130 | color: 'RGBA(38, 81, 128, 1)', | 114 | type: 'bar', |
| 131 | type: 'dashed' | 115 | label: { |
| 132 | } | 116 | show: true |
| 133 | } | ||
| 134 | }, | 117 | }, |
| 135 | tooltip: { | 118 | emphasis: { |
| 136 | alwaysShowContent: true, | 119 | focus: 'series' |
| 137 | formatter: '<div style="font-size: 1.5rem">{c}</div>', | 120 | }, |
| 138 | backgroundColor: 'transparent', | 121 | data: [320, 302, 301, 334, 390, 330, 320, 330, 320] |
| 139 | borderWidth: 0, | ||
| 140 | extraCssText: 'box-shadow:none', | ||
| 141 | position: 'top', | ||
| 142 | textStyle: { | ||
| 143 | color: '#fff', | ||
| 144 | fontWeight: 'bold', | ||
| 145 | fontSize: '1.5rem' | ||
| 146 | } | ||
| 147 | }, | 122 | }, |
| 148 | series: [ | ||
| 149 | { | 123 | { |
| 150 | type: 'pictorialBar', | 124 | name: 'Direct', |
| 151 | barGap: '0%', | 125 | type: 'bar', |
| 152 | symbol: 'path://M0,10 L10,10 C8,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z', | 126 | label: { |
| 153 | showBackground: false, | 127 | show: true |
| 154 | itemStyle: { | ||
| 155 | borderWidth: 0, | ||
| 156 | borderColor: '#B8FFF4', | ||
| 157 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | ||
| 158 | {offset: 1, color: 'rgba(184, 255, 244, 0.1)'}, | ||
| 159 | {offset: 0, color: 'rgba(184, 255, 244, 0.8)'} | ||
| 160 | ]) | ||
| 161 | }, | 128 | }, |
| 162 | emphasis: { | 129 | emphasis: { |
| 163 | svgPath: 'M0,0 L5,0 L5,5 L0,5 Z', | 130 | focus: 'series' |
| 164 | itemStyle: { | ||
| 165 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | ||
| 166 | {offset: 1, color: '#2378f7'}, | ||
| 167 | {offset: 0, color: '#83bff6'} | ||
| 168 | ]) | ||
| 169 | } | ||
| 170 | }, | 131 | }, |
| 171 | data: dataA.value | 132 | data: [320, 302, 301, 334, 390, 330, 320, 330, 320] |
| 172 | } | 133 | } |
| 173 | ] | 134 | ] |
| 174 | } | 135 | } |
| ... | @@ -192,124 +153,112 @@ const getB = () => { | ... | @@ -192,124 +153,112 @@ const getB = () => { |
| 192 | const setB = () => { | 153 | const setB = () => { |
| 193 | chartB = echarts.init(lineRef.value) | 154 | chartB = echarts.init(lineRef.value) |
| 194 | const option = { | 155 | const option = { |
| 195 | animation: true, | ||
| 196 | grid: { | ||
| 197 | top: '15%', | ||
| 198 | left: '15%', | ||
| 199 | right: '10%', | ||
| 200 | bottom: '12%' | ||
| 201 | }, | ||
| 202 | // dataZoom: [ | ||
| 203 | // { | ||
| 204 | // show: false, | ||
| 205 | // start: 0, | ||
| 206 | // end: 100 | ||
| 207 | // }, | ||
| 208 | // { | ||
| 209 | // type: 'inside', | ||
| 210 | // start: 0, | ||
| 211 | // end: 100 | ||
| 212 | // } | ||
| 213 | // ], | ||
| 214 | tooltip: { | 156 | tooltip: { |
| 215 | trigger: 'item', | 157 | trigger: 'axis', |
| 216 | formatter: '<div style="font-size: 1.5rem">{c}</div>', | 158 | axisPointer: { |
| 217 | renderModer: 'html', | 159 | // Use axis to trigger tooltip |
| 218 | className: 'downDot', | 160 | type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow' |
| 219 | backgroundColor: 'transparent', | ||
| 220 | borderWidth: 0, | ||
| 221 | extraCssText: 'box-shadow:none', | ||
| 222 | position: 'top', | ||
| 223 | textStyle: { | ||
| 224 | color: '#fff', | ||
| 225 | fontWeight: 'bold', | ||
| 226 | fontSize: '1.5rem' | ||
| 227 | } | 161 | } |
| 228 | }, | 162 | }, |
| 163 | legend: { | ||
| 164 | top: "3%" | ||
| 165 | }, | ||
| 166 | grid: { | ||
| 167 | left: '3%', | ||
| 168 | right: '4%', | ||
| 169 | bottom: '3%', | ||
| 170 | containLabel: true | ||
| 171 | }, | ||
| 229 | xAxis: { | 172 | xAxis: { |
| 173 | type: 'value' | ||
| 174 | }, | ||
| 175 | yAxis: { | ||
| 230 | type: 'category', | 176 | type: 'category', |
| 231 | boundaryGap: false, | 177 | data: ['塘沽', '深圳', '漳江', '上海', '海南', '山西', '陕西', '新疆', '伊拉克'] |
| 232 | data: kindList.value, | 178 | }, |
| 233 | axisTick: { | 179 | series: [ |
| 234 | show: false | 180 | { |
| 181 | name: 'Direct', | ||
| 182 | type: 'bar', | ||
| 183 | label: { | ||
| 184 | show: true | ||
| 235 | }, | 185 | }, |
| 236 | axisLabel: { | 186 | emphasis: { |
| 237 | color: '#7ECEF4', | 187 | focus: 'series' |
| 238 | fontSize: '1.1rem', | ||
| 239 | interval: 0 | ||
| 240 | }, | 188 | }, |
| 241 | axisLine: { | 189 | data: [320, 302, 301, 334, 390, 330, 320, 330, 320] |
| 242 | show: true, | 190 | } |
| 243 | lineStyle: { | 191 | ] |
| 244 | color: 'RGBA(38, 81, 128, 1)' | 192 | } |
| 193 | chartB.setOption(option) | ||
| 194 | autoHover(chartB, option, 0, 2000) | ||
| 195 | } | ||
| 196 | const setC = () => { | ||
| 197 | chartC = echarts.init(overdueRef.value) | ||
| 198 | const option = { | ||
| 199 | tooltip: { | ||
| 200 | trigger: 'axis', | ||
| 201 | axisPointer: { | ||
| 202 | type: 'shadow' | ||
| 245 | } | 203 | } |
| 246 | }, | 204 | }, |
| 205 | legend: { | ||
| 206 | top: '10%', | ||
| 207 | textStyle: { | ||
| 208 | color: '#FFF' | ||
| 247 | }, | 209 | }, |
| 248 | yAxis: { | ||
| 249 | name: '单位(卷/件)', | ||
| 250 | nameTextStyle: { | ||
| 251 | color: '#7ECEF4', | ||
| 252 | fontSize: '1.2rem' | ||
| 253 | }, | ||
| 254 | type: 'value', | ||
| 255 | axisLabel: { | ||
| 256 | fontSize: '1.3rem' | ||
| 257 | }, | 210 | }, |
| 258 | axisLine: { | 211 | grid: { |
| 259 | lineStyle: { | 212 | left: '3%', |
| 260 | color: '#03DAFD', | 213 | right: '4%', |
| 261 | } | 214 | bottom: '3%', |
| 215 | containLabel: true | ||
| 262 | }, | 216 | }, |
| 263 | splitLine: { | 217 | xAxis: [ |
| 264 | show: true, | 218 | { |
| 265 | lineStyle: { | 219 | type: 'category', |
| 266 | color: 'RGBA(38, 81, 128, 1)', | 220 | stack: 'Ad', |
| 267 | type: 'dashed' | 221 | data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] |
| 268 | } | 222 | } |
| 223 | ], | ||
| 224 | yAxis: [ | ||
| 225 | { | ||
| 226 | type: 'value', | ||
| 227 | name: '金额(万元)', | ||
| 269 | } | 228 | } |
| 270 | }, | 229 | ], |
| 271 | series: [ | 230 | series: [ |
| 272 | { | 231 | { |
| 273 | data: dataA.value, | 232 | name: '0-180天未开票', |
| 274 | type: 'line', | 233 | type: 'bar', |
| 275 | itemStyle: { | 234 | stack: 'Ad', |
| 276 | borderWidth: '0', | ||
| 277 | color: '#3A80D5', | ||
| 278 | }, | ||
| 279 | emphasis: { | 235 | emphasis: { |
| 280 | itemStyle: { | 236 | focus: 'series' |
| 281 | color: '#fff', | ||
| 282 | borderColor: '#fff', | ||
| 283 | borderWidth: '4', | ||
| 284 | shadowColor: '#fff', | ||
| 285 | shadowBlur: '4', | ||
| 286 | } | ||
| 287 | }, | 237 | }, |
| 288 | label: { | 238 | data: [320, 332, 301, 334, 390, 330, 320, 320, 332, 301, 334, 390] |
| 289 | show: false, | ||
| 290 | position: 'bottom', | ||
| 291 | formatter: '{c}', | ||
| 292 | fontSize: 12, | ||
| 293 | color: '#03DAFD' | ||
| 294 | }, | 239 | }, |
| 295 | areaStyle: { | ||
| 296 | opacity: 0.8, | ||
| 297 | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ | ||
| 298 | { | 240 | { |
| 299 | offset: 0, | 241 | name: '180-360天未开票', |
| 300 | color: 'rgba(128, 255, 165,0.5)' | 242 | type: 'bar', |
| 243 | stack: 'Ad', | ||
| 244 | emphasis: { | ||
| 245 | focus: 'series' | ||
| 246 | }, | ||
| 247 | data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210] | ||
| 301 | }, | 248 | }, |
| 302 | { | 249 | { |
| 303 | offset: 1, | 250 | name: '逾期360天以上', |
| 304 | color: 'rgba(1, 191, 236,0.5)' | 251 | type: 'bar', |
| 305 | } | 252 | stack: 'Ad', |
| 306 | ]) | 253 | emphasis: { |
| 307 | } | 254 | focus: 'series' |
| 308 | } | 255 | }, |
| 256 | data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290,] | ||
| 257 | }, | ||
| 309 | ] | 258 | ] |
| 310 | } | 259 | } |
| 311 | chartB.setOption(option) | 260 | chartC.setOption(option) |
| 312 | autoHover(chartB, option, 0, 2000) | 261 | autoHover(chartC, option, 0, 2000) |
| 313 | } | 262 | } |
| 314 | const radioAChange = (e) => { | 263 | const radioAChange = (e) => { |
| 315 | getA() | 264 | getA() |
| ... | @@ -335,6 +284,7 @@ function autoHover(myChart, option, index, time) { | ... | @@ -335,6 +284,7 @@ function autoHover(myChart, option, index, time) { |
| 335 | function handleResize() { | 284 | function handleResize() { |
| 336 | chartA?.resize() | 285 | chartA?.resize() |
| 337 | chartB?.resize() | 286 | chartB?.resize() |
| 287 | chartC?.resize() | ||
| 338 | } | 288 | } |
| 339 | 289 | ||
| 340 | onUnmounted(() => { | 290 | onUnmounted(() => { |
| ... | @@ -386,7 +336,7 @@ onUnmounted(() => { | ... | @@ -386,7 +336,7 @@ onUnmounted(() => { |
| 386 | } | 336 | } |
| 387 | 337 | ||
| 388 | .chartCard { | 338 | .chartCard { |
| 389 | background: url("@/assets/img/box_bg.png") no-repeat top left; | 339 | background: url("@/assets/image/box01@2x.png") no-repeat top left; |
| 390 | background-size: 100% 100%; | 340 | background-size: 100% 100%; |
| 391 | position: relative; | 341 | position: relative; |
| 392 | overflow: hidden; | 342 | overflow: hidden; | ... | ... |
-
Please register or sign in to post a comment