<!-- * @Author: your name * @Date: 2022-04-11 15:07:47 * @LastEditTime: 2022-08-25 15:07:26 * @LastEditors: 纪泽龙 jizelong@qq.com * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath: /gassafety-progress/gassafetyprogress-web/src/views/operationMonitor/xunjianxuncha/topChars/left.vue --> <template> <div class="charsCom all-flex-h"> <div class="title">隐患整改</div> <div class="two all-flex"> <div class="left"> <div class="first"> <span class="text">隐患发现情况</span> <span>20次</span> </div> <div class="second all-flex"> <div class="left">隐患总数</div> <div class="right">隐患已整改数</div> </div> <div class="third all-flex"> <div class="left">13次</div> <div class="right">7次</div> </div> </div> <div class="right"> <div class="first"> <span class="text">隐患整改率</span> </div> <div class="chars-box"> <Chars color="#604AFF"></Chars> </div> </div> </div> <div class="three all-flex-h"> <div class="first">隐患原因</div> <div ref="myChartWidth" class="chars-box"> <Chars :options="bottomOptions()" /> </div> </div> </div> </template> <script> import Chars from "@/components/allCharsCom/Chars"; export default { components: { Chars, }, data() { return { bottomData: [ [ { name: "裂缝", value: 8, color: "#604AFF" }, { name: "管道称重", value: 16, color: "#FFC337" }, { name: "其他", value: 13, color: "#86FF5B" }, { name: "腐蚀", value: 7, color: "#03C4F1" }, { name: "漏气", value: 5, color: "#1F8DF3" }, ], ], }; }, methods: { bottomOptions() { return { series: this.bottomData.map((data, idx) => { const rich = {}; data .map((item) => ({ fontsize: 12, color: item.color, })) .forEach((item, index) => { rich[`dataIndex${index}`] = item; }); return { type: "pie", radius: ["68%", "80%"], color: data.map((item) => item.color), itemStyle: { borderWidth: 2, borderRadius: 10, borderColor: "#fff", }, label: { alignTo: "edge", // formatter: "{name|{b}}\n{num|{c} 个}", formatter: (parm) => { return `{dataIndex${parm.dataIndex}|${parm.data.name}}\n{dataIndex${parm.dataIndex}|${parm.data.value}}`; }, minMargin: 5, edgeDistance: 10, lineHeight: 15, rich, }, labelLine: { length: 15, length2: 0, maxSurfaceAngle: 80, }, labelLayout: (params) => { const { width } = this.$refs.myChartWidth.getBoundingClientRect(); const isLeft = params.labelRect.x < width / 2; const points = params.labelLinePoints; console.log("points",points) // Update the end point. points[2][0] = isLeft ? params.labelRect.x : params.labelRect.x + params.labelRect.width; return { labelLinePoints: points, }; }, data: data, }; }), }; }, }, }; </script> <style lang="scss" scoped> .charsCom { width: 100%; height: 100%; color: #333333; } .title { text-align: center; font-size: 18px; margin-bottom: 7px; } .two { // flex: 1; > .left { // margin-right: 70px; margin-left:10px; .first { margin-bottom: 6px; width: 150px; font-size: 10px; } .second { width: 140px; height: 20px; line-height: 20px; box-sizing: border-box; box-shadow: 0px 0px 3px 1px #dddddd; margin-bottom: 10px; font-size: 10px; > div { // flex: 1; text-align: center; &.left { color: #1d8cf3; } &.right { color: #00c3f1; } } } .third { text-align: center; width: 150px; margin-bottom: 10px; font-size: 10px; } } > .right { .first { text-align: center !important; font-size: 10px; } .chars-box { width: 70px; height: 70px; margin: 0 auto; } } > div { font-size: 16px; flex: 1; // display: flex; // flex-direction: column; } .left, .right { // display: flex; // flex-direction: column; // justify-content: space-between; .first { text-align: left; .text { display: inline-block; margin-right: 8px; } } } } .three { font-size: 16px; flex: 1; // background: red; .chars-box { flex: 1; } } </style>