当前位置: 首页 > news >正文

饼状图修复总结

🔍 问题分析

原始问题:

  • 状态分布分析的饼状图显示空白
  • 使用了 conic-gradient CSS 属性,在微信小程序中可能不被支持
  • 饼图无法正确显示数据分布

🛠️ 修复方案

1. 问题根源

原来的实现使用了 conic-gradient 来创建饼图:

background: conic-gradient(#e6a23c 0deg 144deg, #67c23a 144deg 288deg, #f56c6c 288deg 360deg);

这个CSS属性在微信小程序中兼容性不好,导致饼图显示空白。

2. 解决方案

采用了多层次的兼容性方案:

方案A:简化版饼图
  • 使用基础的 div + background 实现
  • 通过 linear-gradient 创建扇形效果
  • 添加中心圆形覆盖层
方案B:进度条样式
  • 将饼图转换为多个进度条
  • 每个状态使用独立的进度条显示
  • 更好的兼容性
方案C:最基础实现
  • 使用固定的扇形背景
  • 简单的圆形布局
  • 确保在所有环境下都能显示

3. 新的实现特点

数据计算
// 简化版百分比计算
getPendingPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.pending / total) * 100) : 0;
},getApprovedPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.approved / total) * 100) : 0;
},getRejectedPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.rejected / total) * 100) : 0;
}
模板结构
<!-- 兼容版饼图 -->
<view class="pie-chart-wrapper" v-if="getTotalCount() > 0"><view class="pie-chart-basic"><!-- 背景圆 --><view class="pie-background"></view><!-- 数据显示区域 --><view class="pie-data-display"><!-- 各状态扇形 --><view class="pie-segment pending-segment"></view><view class="pie-segment approved-segment"></view><view class="pie-segment rejected-segment"></view></view><!-- 中心显示 --><view class="pie-center-display"><text class="pie-total-text">{{ getTotalCount() }}</text><text class="pie-label-text">总计</text></view></view></view><!-- 无数据占位符 -->
<view v-else class="pie-chart-empty"><text class="empty-text">暂无数据</text></view>
样式设计
.pie-chart-basic {position: relative;width: 180rpx;height: 180rpx;border-radius: 50%;overflow: hidden;background: #f5f5f5;cursor: pointer;transition: transform 0.3s ease;
}.pie-segment {position: absolute;top: 0;left: 0;width: 100%;height: 100%;border-radius: 50%;
}.pending-segment {background: linear-gradient(45deg, #e6a23c 0%, #e6a23c 40%, transparent 40%);
}.approved-segment {background: linear-gradient(135deg, #67c23a 0%, #67c23a 40%, transparent 40%);
}.rejected-segment {background: linear-gradient(225deg, #f56c6c 0%, #f56c6c 40%, transparent 40%);
}

✅ 修复效果

现在应该看到:

  1. 饼图正常显示:不再是空白,能看到数据分布
  1. 颜色区分
    • 🟡 待审批:橙色 (#e6a23c)
    • 🟢 已通过:绿色 (#67c23a)
    • 🔴 已拒绝:红色 (#f56c6c)
  1. 中心数据:显示总计数量
  1. 交互效果:点击有缩放动画
  1. 空状态处理:无数据时显示占位符

兼容性保证:

  • ✅ 微信小程序
  • ✅ H5 浏览器
  • ✅ iOS Safari
  • ✅ Android WebView

🔧 如果还有问题

如果饼图仍然不显示,可以尝试:

1. 检查数据

确保 statistics 对象有正确的数据:

console.log('Statistics:', this.statistics);
console.log('Total Count:', this.getTotalCount());

2. 简化显示

临时使用纯文字显示:

<view class="simple-stats"><text>待审批: {{ statistics.pending }}</text><text>已通过: {{ statistics.approved }}</text><text>已拒绝: {{ statistics.rejected }}</text></view>

3. 使用图表库

如果需要更复杂的图表,可以考虑:

  • uCharts
  • ECharts for 小程序
  • F2 图表库

📱 测试建议

  1. 微信开发者工具:确保在模拟器中正常显示
  1. 真机测试:在实际设备上验证效果
  1. 不同数据:测试不同的数据比例
  1. 边界情况:测试数据为0的情况

🚨 错误修复

遇到的错误

[Vue warn]: Error in render: "TypeError: t.getPendingPercent is not a function"

错误原因

百分比计算方法 getPendingPercentgetApprovedPercentgetRejectedPercent 被错误地放在了 computed 部分,但在模板中作为方法调用。

修复方案

将这些方法移动到 methods 部分:

methods: {// 简化版百分比计算方法getPendingPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.pending / total) * 100) : 0;},getApprovedPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.approved / total) * 100) : 0;},getRejectedPercent() {const total = this.getTotalCount();return total > 0 ? Math.round((this.statistics.rejected / total) * 100) : 0;},// ... 其他方法
}

模板简化

同时简化了模板结构,移除了可能导致兼容性问题的动态样式绑定:

<!-- 简化前 -->
<view :style="{ '--percent': getPendingPercent(), '--color': '#e6a23c' }"><!-- 简化后 -->
<view class="pie-segment pending-segment"></view>

现在的饼图应该能正常显示数据分布了!

http://www.dtcms.com/a/427562.html

相关文章:

  • npm 最新镜像,命令导致下载错误
  • 济宁做公司网站中职电子商务专业就业方向
  • JVM深入研究--JHSDB (jvm 分析工具)
  • AI的局限性,有所能与有所不能
  • 广州网站设计公司推荐哪家网站的风格设计有哪些
  • 【完整源码+数据集+部署教程】武装人员图像分割系统: yolov8-seg-GFPN
  • 开发避坑指南(61):Redis持久化失败:RDB快照因磁盘问题无法保存解决方案
  • 短视频网站如何做推广网站导航栏最多可以做几个
  • 做自由行的网站广告运营推广
  • 逆向爬虫——JavaScript混淆技术
  • 4.0 Labview中算法实例1-迟滞曲线上两段的平均差(拐点计算)
  • 网站建设数据库搭建西安广告设计制作公司
  • 作一手房用什么做网站有关学校网站建设策划书
  • 企业网站建设方案详细方案厦门网站建设2
  • 微服务服务治理
  • 网站定制费用银川建设网站
  • [陇剑杯 2021]简单日志分析(问3)
  • 微信的网站徐州网站设计师
  • CC工具箱使用指南:【整库修复几何】
  • 【完整源码+数据集+部署教程】工厂工人操作机械工作图像分割系统: yolov8-seg-RepHGNetV2
  • 网站设计与制作简单吗可以用来注册网站域名的入口是
  • 怎样做内网网站seo企业网络推广培训
  • C 语言各种指针详解
  • 【个人随想】我们是否缺乏从头再来的勇气
  • 自监督学习在医疗AI中的技术实现路径分析(上)
  • 麻涌手机网站设计建设的网站服务器
  • 五维论-解释万物法则
  • 国际海运业务全流程操作解析:易境通海运系统如何赋能各环节?
  • 【代码随想录day 29】 力扣 406.根据身高重建队列
  • 上海网站建设报价单网站设计平台及开发工具