<!-- * @Author: your name * @Date: 2022-04-11 15:07:47 * @LastEditTime: 2022-04-20 11:09:34 * @LastEditors: Please set LastEditors * @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>99次</span> </div> <div class="second all-flex"> <div class="left">泄露监测</div> <div class="right">防腐层监测</div> </div> <div class="third all-flex"> <div class="left">55</div> <div class="right">44</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: 20, color: "#604AFF" }, { name: "管道称重", value: 30, color: "#FFC337" }, { name: "其他", value: 40, color: "#86FF5B" }, { name: "腐蚀", value: 99, color: "#03C4F1" }, { name: "漏气", value: 18, 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: 21px; margin-bottom: 7px; } .two { // flex: 1; > .left { margin-right: 70px; .first { margin-bottom: 6px; } .second { width: 213px; height: 30px; line-height: 30px; box-sizing: border-box; box-shadow: 0px 0px 3px 1px #dddddd; margin-bottom: 19px; > div { // flex: 1; text-align: center; &.left { color: #1d8cf3; } &.right { color: #00c3f1; } } } .third { text-align: center; width: 213px; margin-bottom: 38px; } } > .right { .first { text-align: center !important; } .chars-box { width: 90px; height: 90px; margin: 0 auto; } } > div { font-size: 14px; 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: 14px; flex: 1; // background: red; .chars-box { flex: 1; } } </style>