南丁格尔饼图支持动态数据

qianming 3 years ago
parent a65f62ac95
commit ad350d3d4d

@ -4922,7 +4922,7 @@ const widgetTools = [
name: 'layerName', name: 'layerName',
required: false, required: false,
placeholder: '', placeholder: '',
value: '图', value: '南丁格尔玫瑰图',
}, },
{ {
type: 'vue-color', type: 'vue-color',

@ -6,7 +6,6 @@
</template> </template>
<script> <script>
import echarts from "echarts";
export default { export default {
name: "WidgetPieNightingaleRoseArea", // https://echarts.apache.org/examples/zh/editor.html?c=pie-roseType-simple name: "WidgetPieNightingaleRoseArea", // https://echarts.apache.org/examples/zh/editor.html?c=pie-roseType-simple
components: {}, components: {},
@ -28,7 +27,7 @@ export default {
}, },
series: [ series: [
{ {
name: "面积模式", //name: "",
type: "pie", type: "pie",
radius: ["10%", "50%"], radius: ["10%", "50%"],
center: ["50%", "50%"], center: ["50%", "50%"],
@ -36,21 +35,13 @@ export default {
itemStyle: { itemStyle: {
borderRadius: 8 borderRadius: 8
}, },
data: [ data: []
{ value: 40, name: "rose 1" },
{ value: 38, name: "rose 2" },
{ value: 32, name: "rose 3" },
{ value: 30, name: "rose 4" },
{ value: 28, name: "rose 5" },
{ value: 26, name: "rose 6" },
{ value: 22, name: "rose 7" },
{ value: 18, name: "rose 8" }
]
} }
] ]
}, },
optionsStyle: {}, // optionsStyle: {}, //
optionsData: {}, // optionsData: {}, //
optionsCollapse: {}, //
optionsSetup: {} optionsSetup: {}
}; };
}, },
@ -90,13 +81,10 @@ export default {
// options // options
editorOptions () { editorOptions () {
this.setOptionsTitle(); this.setOptionsTitle();
// this.setOptionsX() this.setOptionsValue();
// this.setOptionsY() this.setOptionsTooltip();
// this.setOptionsTop() this.setOptionsLegend();
// this.setOptionsTooltip() this.setOptionsColor();
// this.setOptionsMargin()
// this.setOptionsLegend()
// this.setOptionsColor()
this.setOptionsData(); this.setOptionsData();
}, },
// //
@ -117,104 +105,35 @@ export default {
fontWeight: optionsCollapse.subTextFontWeight, fontWeight: optionsCollapse.subTextFontWeight,
fontSize: optionsCollapse.subTextFontSize fontSize: optionsCollapse.subTextFontSize
}; };
this.options.title = title; this.options.title = title;
}, },
// X //
setOptionsX () { setOptionsValue() {
const optionsCollapse = this.optionsSetup;
const xAxis = {
type: "category",
show: optionsCollapse.hideX, //
name: optionsCollapse.xName, //
nameTextStyle: {
color: optionsCollapse.xNameColor,
fontSize: optionsCollapse.xNameFontSize
},
nameRotate: optionsCollapse.textAngle, //
inverse: optionsCollapse.reversalX, //
axisLabel: {
show: true,
interval: optionsCollapse.textInterval, //
rotate: optionsCollapse.textAngle, //
textStyle: {
color: optionsCollapse.Xcolor, // x
fontSize: optionsCollapse.fontSizeX
}
},
axisLine: {
show: true,
lineStyle: {
color: optionsCollapse.lineColorX
}
},
splitLine: {
show: optionsCollapse.isShowSplitLineX,
lineStyle: {
color: optionsCollapse.splitLineColorX
},
},
};
this.options.xAxis = xAxis;
},
// Y
setOptionsY () {
const optionsCollapse = this.optionsSetup;
const yAxis = {
type: "value",
show: optionsCollapse.isShowY, //
name: optionsCollapse.textNameY, //
nameTextStyle: {
color: optionsCollapse.NameColorY,
fontSize: optionsCollapse.NameFontSizeY
},
inverse: optionsCollapse.reversalY, //
axisLabel: {
show: true,
textStyle: {
color: optionsCollapse.colorY, // x
fontSize: optionsCollapse.fontSizeY
}
},
splitLine: {
show: false
},
axisLine: {
show: true,
lineStyle: {
color: optionsCollapse.lineColorY
}
},
splitLine: {
show: optionsCollapse.isShowSplitLineY,
lineStyle: {
color: optionsCollapse.splitLineColorY
},
},
};
this.options.yAxis = yAxis;
},
// or
setOptionsTop () {
const optionsCollapse = this.optionsSetup; const optionsCollapse = this.optionsSetup;
const series = this.options.series; const series = this.options.series;
const numberValue = optionsCollapse.numberValue ? "{c}" : "";
for (const key in series) { const percentage = optionsCollapse.percentage ? "({d})%" : "";
if (series[key].type == "bar") { const label = {
series[key].label = {
show: optionsCollapse.isShow, show: optionsCollapse.isShow,
position: "top", formatter: `{a|{b}${numberValue} ${percentage}}`,
distance: 10, rich: {
fontSize: optionsCollapse.fontSize, a: {
padding: [-30, 15, -20, 15],
color: optionsCollapse.subTextColor, color: optionsCollapse.subTextColor,
fontSize: optionsCollapse.fontSize,
fontWeight: optionsCollapse.fontWeight fontWeight: optionsCollapse.fontWeight
}
},
fontSize: optionsCollapse.fontSize,
fontWeight: optionsCollapse.optionsCollapse
}; };
series[key].barWidth = optionsCollapse.maxWidth; for (const key in series) {
series[key].barMinHeight = optionsCollapse.minHeight; if (series[key].type == "pie") {
series[key].label = label;
series[key].labelLine = { show: optionsCollapse.isShow };
} }
} }
this.options.series = series;
}, },
// tooltip // tooltip
setOptionsTooltip () { setOptionsTooltip () {
@ -267,19 +186,7 @@ export default {
for (let i = 0; i < customColor.length; i++) { for (let i = 0; i < customColor.length; i++) {
arrColor.push(customColor[i].color); arrColor.push(customColor[i].color);
} }
const itemStyle = { this.options.color = arrColor;
normal: {
color: params => {
return arrColor[params.dataIndex];
},
barBorderRadius: optionsCollapse.radius
}
};
for (const key in this.options.series) {
if (this.options.series[key].type == "bar") {
this.options.series[key].itemStyle = itemStyle;
}
}
this.options = Object.assign({}, this.options); this.options = Object.assign({}, this.options);
}, },
// //
@ -315,28 +222,41 @@ export default {
} }
} }
}, },
// setOptionsData() {
dynamicDataFn (val, optionsSetup) { const optionsData = this.optionsData; // or
console.log(val); optionsData.dataType == "staticData"
? this.staticDataFn(optionsData.staticData)
: this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
},
staticDataFn(val) {
const staticData = JSON.parse(val);
for (const key in this.options.series) {
if (this.options.series[key].type == "pie") {
this.options.series[key].data = staticData;
}
}
},
dynamicDataFn(val, refreshTime) {
if (!val) return; if (!val) return;
// x if (this.ispreview) {
if (optionsSetup.verticalShow) { this.getEchartData(val);
this.options.xAxis.data = []; this.flagInter = setInterval(() => {
this.options.yAxis.data = val.xAxis; this.getEchartData(val);
this.options.xAxis.type = "value"; }, refreshTime);
this.options.yAxis.type = "category";
} else { } else {
this.options.xAxis.data = val.xAxis; this.getEchartData(val);
this.options.yAxis.data = [];
this.options.xAxis.type = "category";
this.options.yAxis.type = "value";
} }
},
// series getEchartData(val) {
const series = this.options.series; const data = this.queryEchartsData(val);
for (const i in series) { data.then(res => {
if (series[i].type == "bar") { this.renderingFn(res);
series[i].data = val.series[i].data; });
},
renderingFn(val) {
for (const key in this.options.series) {
if (this.options.series[key].type == "pie") {
this.options.series[key].data = val;
} }
} }
} }

Loading…
Cancel
Save