江夏图书馆大屏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

274 lines
7.9 KiB

<template>
<div style="height: calc(100% - 200px); display: flex; align-items: center; justify-content: flex-start;">
<div id="todayType" style="width:400px; height: 230px" />
</div>
</template>
<script>
export default {
props: {
todayAllNum: {
type: Object,
require: true,
default: function() {
return {}
}
}
},
data() {
return {
}
},
watch: {
'todayAllNum': {
handler(val) {
setTimeout(() => {
this.initTodayCircle()
}, 100)
},
immediate: true,
deep: true
}
},
created() {
},
beforeDestroy() {
},
mounted() {
this.initTodayCircle()
},
methods: {
initTodayCircle() {
const optionData = [
{ value: this.todayAllNum.headerLib || 0, name: '总馆' }
// { value: this.todayAllNum.branchLib || 0, name: '分馆' }
]
const myChart = this.$echarts.init(document.getElementById('todayType'))
function arrCount(arr) {
let count = 0
arr.forEach(item => {
count = count + item.value
})
return count
}
var centerImg = require('@/assets/images/circle-bg.png')
const option = {
baseOption: {
tooltip: {
show: false,
trigger: 'item',
position: 'bottom',
textStyle: {
color: '#EEF6FF',
fontSize: '18'
}
// backgroundColor: 'rgba(74, 144, 226, 0.84)',
// formatter: (params) => {
// return `<div>${params.seriesName} <br> ${params.data.name}:${this.$parent.formatter(params.data.value)} (${params.percent}%)</div>`
// }
},
legend: {
orient: 'vertical',
right: 70,
top: 125,
// textStyle: {
// color: '#EEF6FF',
// padding: [20, 0, 18, 4],
// fontSize: '14'
// },
itemWidth: 10,
itemHeight: 10,
icon: 'circle',
selectedMode: false,
data: ['总馆'],
formatter: (name) => {
// `${name} ${((flag.value / count).toFixed(2)) * 100 + '%'}`
const count = arrCount(optionData)
if (optionData) {
const flag = optionData?.find(item => name === item.name)
if (flag) {
const percentage = count > 0 ? ((flag.value / count) * 100).toFixed(0) + '%' : '0%'
return [`{name|${name}}`, `{num|${percentage}}`]
}
}
return name
},
textStyle: {
rich: {
name: {
fontSize: 18,
color: '#EEF6FF',
padding: [20, 0, 20, 4],
fontFamily: 'DingTalk_JinBuTi_Regular'
},
num: {
fontSize: 20,
fontWeight: 600,
padding: [20, 0, 20, 15],
color: '#4C90FF',
fontFamily: 'DingTalk_JinBuTi_Regular'
}
}
}
},
// 中心图片配置(关键代码)
graphic: [
{
type: 'image',
id: 'logo',
left: '8.5%', // 调整图片位置
top: '22%', // 调整图片位置
z: -10,
bounding: 'raw',
rotation: 0, // 旋转
origin: [64.5, 32.5], // 中心点
scale: [1.0, 1.0], // 缩放
// 设置图片样式
style: {
image: centerImg,
width: 132,
height: 131,
opacity: 1
}
}
],
series: [
{
name: '今日累计借阅',
type: 'pie',
left: '-50%',
radius: ['60%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: true
},
itemStyle: {
borderWidth: 2,
borderColor: 'rgba(16,16,21,0.4)'
},
emphasis: {
label: {
show: true,
// 自定义文字显示,函数默认params接受当前指向所有属性
formatter: function(params) {
const { value, name } = params
return [
`{c| ${value}}`,
`{b| ${name}}`
].join('\n') // 换行
},
rich: {
c: {
fontSize: 24,
fontWeight: 600,
color: '#317FFF',
fontFamily: 'DingTalk_JinBuTi_Regular',
lineHeight: 34
},
b: {
fontSize: 18,
color: '#fff',
fontFamily: 'DingTalk_JinBuTi_Regular'
}
}
}
},
color: ['#317FFF'],
data: optionData
}
]
},
media: [
{
query: {
maxWidth: 317
},
option: {
legend: {
right: 30,
top: 'center',
textStyle: {
rich: {
name: {
fontSize: 14
},
num: {
fontSize: 16
}
}
}
},
// 中心图片配置(关键代码)
graphic: [
{
left: '8%', // 调整图片位置
top: '26%', // 调整图片位置
z: -10,
bounding: 'raw',
rotation: 0, // 旋转
origin: [64.5, 32.5], // 中心点
scale: [1.0, 1.0], // 缩放
// 设置图片样式
style: {
image: centerImg,
width: 110,
height: 110,
opacity: 1
}
}
],
series: [
{
type: 'pie',
radius: ['50%', '55%'],
emphasis: {
label: {
rich: {
c: {
fontSize: 22,
lineHeight: 28
},
b: {
fontSize: 16
}
}
}
}
}
]
}
}
]
}
myChart.setOption(option)
// // 然后可以通过定时器来旋转背景图
// var step = 0
// setInterval(function() {
// // 每秒旋转1度
// myChart.setOption({
// graphic: {
// id: 'logo',
// style: {
// transform: 'rotate(' + (step++ % 360) + 'deg)' // 持续旋转
// }
// }
// })
// }, 1000)
this.$LoopShowTooltip(myChart, option.baseOption, { loopSeries: true, interval: 4000 })
}
}
}
</script>
<style lang="scss">
@import "~@/assets/styles/index.scss";
@import "~@/assets/styles/font-some.css";
</style>