Files
im-uniapp/pages/workbench/cost/components/Pie.vue

74 lines
1.4 KiB
Vue
Raw Normal View History

2025-10-13 17:51:27 +08:00
<template>
<view class="charts-box">
<qiun-data-charts type="pie" :chartData="chartData" :opts="chartOpts" />
</view>
</template>
<script>
export default {
props: {
projectList: {
required: true,
type: Array
}
},
data() {
return {
2025-10-14 13:58:33 +08:00
chartData: {
series: []
},
2025-10-13 17:51:27 +08:00
chartOpts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"],
padding: [5, 5, 5, 5],
2025-10-14 13:58:33 +08:00
legend: {
show: false
},
dataLabel: false, // 不显示数据标签
2025-10-13 17:51:27 +08:00
enableScroll: false,
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
}
}
}
}
},
watch: {
projectList: {
handler(newVal) {
const pieData = this.projectList
2025-10-14 13:58:33 +08:00
.filter(p => {
// 过滤 totalPrice 非数字/小于等于0的项
const price = Number(p.totalPrice);
return !isNaN(price) && price > 0;
})
2025-10-13 17:51:27 +08:00
.map(p => ({
name: p.projectName,
2025-10-14 13:58:33 +08:00
value: parseInt(p.totalPrice)
2025-10-13 17:51:27 +08:00
}));
2025-10-14 13:58:33 +08:00
// this.chartData = {
// series: [{
// data: pieData
// }]
// }
let res = {
2025-10-13 17:51:27 +08:00
series: [{
data: pieData
}]
2025-10-14 13:58:33 +08:00
};
this.chartData = JSON.parse(JSON.stringify(res));
2025-10-13 17:51:27 +08:00
},
immediate: true,
},
}
}
</script>
<style>
</style>