update
parent
a758578156
commit
941001f46d
@ -0,0 +1,179 @@
|
||||
export const handlerLayerWidget = (val, getToolByCode) => {
|
||||
const layerWidgetArr = [];
|
||||
for (let i = 0; i < val.length; i++) {
|
||||
const obj = {};
|
||||
obj.icon = getToolByCode(val[i].type).icon;
|
||||
const options = val[i].options["setup"];
|
||||
options.forEach(el => {
|
||||
if (el.name == "layerName") {
|
||||
obj.label = el.value;
|
||||
}
|
||||
});
|
||||
layerWidgetArr.push(obj);
|
||||
}
|
||||
return layerWidgetArr;
|
||||
}
|
||||
|
||||
export const handleBigScreen = (data, getToolByCode, callBcak) => {
|
||||
const optionScreen = getToolByCode("screen").options;
|
||||
const setup = optionScreen.setup;
|
||||
for (const key in data) {
|
||||
for (let i = 0; i < setup.length; i++) {
|
||||
if (key == setup[i].name) {
|
||||
setup[i].value = data[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
callBcak();
|
||||
return {
|
||||
backgroundColor: (data && data.backgroundColor) || "",
|
||||
backgroundImage: (data && data.backgroundImage) || "",
|
||||
height: (data && data.height) || "1080",
|
||||
title: (data && data.title) || "",
|
||||
width: (data && data.width) || "1920"
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export const handleInitEchartsData = (data, getToolByCode) => {
|
||||
const widgets = data.dashboard ? data.dashboard.widgets : [];
|
||||
const widgetsData = [];
|
||||
for (let i = 0; i < widgets.length; i++) {
|
||||
let obj = {};
|
||||
obj.type = widgets[i].type;
|
||||
obj.value = {
|
||||
setup: widgets[i].value.setup,
|
||||
data: widgets[i].value.data,
|
||||
position: widgets[i].value.position
|
||||
};
|
||||
const tool = deepClone(getToolByCode(widgets[i].type))
|
||||
const option = tool.options;
|
||||
const options = handleOptionsData(widgets[i].value, option);
|
||||
obj.options = options;
|
||||
widgetsData.push(obj);
|
||||
}
|
||||
return widgetsData;
|
||||
}
|
||||
|
||||
|
||||
export const handleOptionsData = (data, option) => {
|
||||
for (const key in data.setup) {
|
||||
for (let i = 0; i < option.setup.length; i++) {
|
||||
let item = option.setup[i];
|
||||
if (Object.prototype.toString.call(item) == "[object Object]") {
|
||||
if (key == option.setup[i].name) {
|
||||
option.setup[i].value = data.setup[key];
|
||||
}
|
||||
} else if (Object.prototype.toString.call(item) == "[object Array]") {
|
||||
for (let j = 0; j < item.length; j++) {
|
||||
const list = item[j].list;
|
||||
list.forEach(el => {
|
||||
if (key == el.name) {
|
||||
el.value = data.setup[key];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// position
|
||||
for (const key in data.position) {
|
||||
for (let i = 0; i < option.position.length; i++) {
|
||||
if (key == option.position[i].name) {
|
||||
option.position[i].value = data.position[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
// data
|
||||
for (const key in data.data) {
|
||||
for (let i = 0; i < option.data.length; i++) {
|
||||
if (key == option.data[i].name) {
|
||||
option.data[i].value = data.data[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return option;
|
||||
}
|
||||
|
||||
// 在缩放模式下的大小
|
||||
export const getPXUnderScale = (bigscreenScaleInWorkbench, px) => {
|
||||
return bigscreenScaleInWorkbench * px;
|
||||
}
|
||||
|
||||
// 对组件默认值处理
|
||||
export const handleDefaultValue = (widgetJson) => {
|
||||
for (const key in widgetJson) {
|
||||
if (key == "options") {
|
||||
// collapse、data、position、setup
|
||||
// setup 处理
|
||||
for (let i = 0; i < widgetJson.options.setup.length; i++) {
|
||||
const item = widgetJson.options.setup[i];
|
||||
if (Object.prototype.toString.call(item) == "[object Object]") {
|
||||
widgetJson.value.setup[item.name] = item.value;
|
||||
} else if (
|
||||
Object.prototype.toString.call(item) == "[object Array]"
|
||||
) {
|
||||
for (let j = 0; j < item.length; j++) {
|
||||
const list = item[j].list;
|
||||
list.forEach(el => {
|
||||
widgetJson.value.setup[el.name] = el.value;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// position
|
||||
for (let i = 0; i < widgetJson.options.position.length; i++) {
|
||||
const item = widgetJson.options.position[i];
|
||||
if (item.value) {
|
||||
widgetJson.value.position[item.name] = item.value;
|
||||
}
|
||||
}
|
||||
// data 处理
|
||||
if (widgetJson.options.data && widgetJson.options.data.length > 0) {
|
||||
for (let i = 0; i < widgetJson.options.data.length; i++) {
|
||||
const item = widgetJson.options.data[i];
|
||||
if (item.value) {
|
||||
widgetJson.value.data[item.name] = item.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return widgetJson;
|
||||
}
|
||||
|
||||
// 设置默认
|
||||
export const setDefaultValue = (options, val) => {
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
if (Object.prototype.toString.call(options[i]) == "[object Object]") {
|
||||
for (const k in val) {
|
||||
if (options[i].name == k) {
|
||||
options[i].value = val[k];
|
||||
}
|
||||
}
|
||||
} else if (
|
||||
Object.prototype.toString.call(options[i]) == "[object Array]"
|
||||
) {
|
||||
for (let j = 0; j < options[i].length; j++) {
|
||||
const list = options[i][j].list;
|
||||
for (let z = 0; z < list.length; z++) {
|
||||
for (const k in val) {
|
||||
if (list[z].name == k) {
|
||||
list[z].value = val[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 数组 元素互换位置
|
||||
export const swapArr = (arr, oldIndex, newIndex) => {
|
||||
arr[oldIndex] = arr.splice(newIndex, 1, arr[oldIndex])[0];
|
||||
return arr;
|
||||
}
|
||||
|
||||
export const deepClone = (obj) => {
|
||||
return JSON.parse(JSON.stringify(obj))
|
||||
}
|
@ -0,0 +1,367 @@
|
||||
<template>
|
||||
<div :style="styleObj">
|
||||
<v-chart :options="options" autoresize />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "WidgetBarchart",
|
||||
components: {},
|
||||
props: {
|
||||
value: Object,
|
||||
ispreview: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
options: {
|
||||
grid: {},
|
||||
legend: {
|
||||
textStyle: {
|
||||
color: "#fff"
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: [],
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: "#fff"
|
||||
}
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
data: [],
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: "#fff"
|
||||
}
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: [],
|
||||
type: "bar",
|
||||
barGap: "0%",
|
||||
itemStyle: {
|
||||
borderRadius: null
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
optionsStyle: {}, // 样式
|
||||
optionsData: {}, // 数据
|
||||
optionsSetup: {},
|
||||
flagInter: null
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
styleObj() {
|
||||
return {
|
||||
position: this.ispreview ? "absolute" : "static",
|
||||
width: this.optionsStyle.width + "px",
|
||||
height: this.optionsStyle.height + "px",
|
||||
left: this.optionsStyle.left + "px",
|
||||
top: this.optionsStyle.top + "px",
|
||||
background: this.optionsSetup.background
|
||||
};
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value: {
|
||||
handler(val) {
|
||||
this.optionsStyle = val.position;
|
||||
this.optionsData = val.data;
|
||||
this.optionsCollapse = val.setup;
|
||||
this.optionsSetup = val.setup;
|
||||
this.editorOptions();
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.optionsStyle = this.value.position;
|
||||
this.optionsData = this.value.data;
|
||||
this.optionsCollapse = this.value.setup;
|
||||
this.optionsSetup = this.value.setup;
|
||||
this.editorOptions();
|
||||
},
|
||||
methods: {
|
||||
// 修改图标options属性
|
||||
editorOptions() {
|
||||
this.setOptionsTitle();
|
||||
this.setOptionsX();
|
||||
this.setOptionsY();
|
||||
this.setOptionsTop();
|
||||
this.setOptionsTooltip();
|
||||
this.setOptionsMargin();
|
||||
this.setOptionsColor();
|
||||
this.setOptionsData();
|
||||
},
|
||||
// 标题修改
|
||||
setOptionsTitle() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const title = {};
|
||||
title.text = optionsSetup.titleText;
|
||||
title.show = optionsSetup.isNoTitle;
|
||||
title.left = optionsSetup.textAlign;
|
||||
title.textStyle = {
|
||||
color: optionsSetup.textColor,
|
||||
fontSize: optionsSetup.textFontSize,
|
||||
fontWeight: optionsSetup.textFontWeight
|
||||
};
|
||||
title.subtext = optionsSetup.subText;
|
||||
title.subtextStyle = {
|
||||
color: optionsSetup.subTextColor,
|
||||
fontWeight: optionsSetup.subTextFontWeight,
|
||||
fontSize: optionsSetup.subTextFontSize
|
||||
};
|
||||
|
||||
this.options.title = title;
|
||||
},
|
||||
// X轴设置
|
||||
setOptionsX() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const xAxis = {
|
||||
type: "category",
|
||||
show: optionsSetup.hideX, // 坐标轴是否显示
|
||||
name: optionsSetup.xName, // 坐标轴名称
|
||||
nameTextStyle: {
|
||||
color: optionsSetup.xNameColor,
|
||||
fontSize: optionsSetup.xNameFontSize
|
||||
},
|
||||
nameRotate: optionsSetup.textAngle, // 文字角度
|
||||
inverse: optionsSetup.reversalX, // 轴反转
|
||||
axisLabel: {
|
||||
show: true,
|
||||
interval: optionsSetup.textInterval, // 文字角度
|
||||
rotate: optionsSetup.textAngle, // 文字角度
|
||||
textStyle: {
|
||||
color: optionsSetup.Xcolor, // x轴 坐标文字颜色
|
||||
fontSize: optionsSetup.fontSizeX
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: optionsSetup.lineColorX
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
show: optionsSetup.isShowSplitLineX,
|
||||
lineStyle: {
|
||||
color: optionsSetup.splitLineColorX
|
||||
}
|
||||
}
|
||||
};
|
||||
this.options.xAxis = xAxis;
|
||||
},
|
||||
// Y轴设置
|
||||
setOptionsY() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const yAxis = {
|
||||
type: "value",
|
||||
scale: optionsSetup.scale,
|
||||
splitNumber: optionsSetup.splitNumber, // 均分
|
||||
show: optionsSetup.isShowY, // 坐标轴是否显示
|
||||
name: optionsSetup.textNameY, // 坐标轴名称
|
||||
nameTextStyle: {
|
||||
color: optionsSetup.nameColorY,
|
||||
fontSize: optionsSetup.nameFontSizeY
|
||||
},
|
||||
inverse: optionsSetup.reversalY, // 轴反转
|
||||
axisLabel: {
|
||||
show: true,
|
||||
rotate: optionsSetup.ytextAngle, // 文字角度
|
||||
textStyle: {
|
||||
color: optionsSetup.colorY, // x轴 坐标文字颜色
|
||||
fontSize: optionsSetup.fontSizeY
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: optionsSetup.lineColorY
|
||||
}
|
||||
},
|
||||
splitLine: {
|
||||
show: optionsSetup.isShowSplitLineY,
|
||||
lineStyle: {
|
||||
color: optionsSetup.splitLineColorY
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.options.yAxis = yAxis;
|
||||
},
|
||||
// 数值设定 or 柱体设置
|
||||
setOptionsTop() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const series = this.options.series;
|
||||
if (series[0].type == "bar") {
|
||||
if (optionsSetup.verticalShow) {
|
||||
series[0].label = {
|
||||
show: optionsSetup.isShow,
|
||||
position: "right",
|
||||
distance: optionsSetup.distance,
|
||||
textStyle: {
|
||||
fontSize: optionsSetup.fontSize,
|
||||
color: optionsSetup.subTextColor,
|
||||
fontWeight: optionsSetup.fontWeight
|
||||
}
|
||||
};
|
||||
} else {
|
||||
series[0].label = {
|
||||
show: optionsSetup.isShow,
|
||||
position: "top",
|
||||
distance: optionsSetup.distance,
|
||||
fontSize: optionsSetup.fontSize,
|
||||
color: optionsSetup.subTextColor,
|
||||
fontWeight: optionsSetup.fontWeight
|
||||
};
|
||||
}
|
||||
}
|
||||
series[0].barWidth = optionsSetup.maxWidth;
|
||||
series[0].barMinHeight = optionsSetup.minHeight;
|
||||
},
|
||||
// tooltip 设置
|
||||
setOptionsTooltip() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const tooltip = {
|
||||
trigger: "item",
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: optionsSetup.lineColor,
|
||||
fontSize: optionsSetup.tipsFontSize
|
||||
}
|
||||
};
|
||||
this.options.tooltip = tooltip;
|
||||
},
|
||||
// 边距设置
|
||||
setOptionsMargin() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const grid = {
|
||||
left: optionsSetup.marginLeft,
|
||||
right: optionsSetup.marginRight,
|
||||
bottom: optionsSetup.marginBottom,
|
||||
top: optionsSetup.marginTop,
|
||||
containLabel: true
|
||||
};
|
||||
this.options.grid = grid;
|
||||
},
|
||||
// 图例颜色修改
|
||||
setOptionsColor() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const customColor = optionsSetup.customColor;
|
||||
if (!customColor) return;
|
||||
const arrColor = [];
|
||||
for (let i = 0; i < customColor.length; i++) {
|
||||
arrColor.push(customColor[i].color);
|
||||
}
|
||||
const itemStyle = {
|
||||
normal: {
|
||||
color: params => {
|
||||
return arrColor[params.dataIndex];
|
||||
},
|
||||
barBorderRadius: optionsSetup.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);
|
||||
},
|
||||
// 数据解析
|
||||
setOptionsData() {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const optionsData = this.optionsData; // 数据类型 静态 or 动态
|
||||
optionsData.dataType == "staticData"
|
||||
? this.staticDataFn(optionsData.staticData)
|
||||
: this.dynamicDataFn(
|
||||
optionsData.dynamicData,
|
||||
optionsData.refreshTime,
|
||||
optionsSetup
|
||||
);
|
||||
},
|
||||
// 静态数据
|
||||
staticDataFn(val) {
|
||||
const optionsSetup = this.optionsSetup;
|
||||
const series = this.options.series;
|
||||
let axis = [];
|
||||
let data = [];
|
||||
for (const i in val) {
|
||||
axis[i] = val[i].axis;
|
||||
data[i] = val[i].data;
|
||||
}
|
||||
// x轴
|
||||
if (optionsSetup.verticalShow) {
|
||||
this.options.xAxis.data = [];
|
||||
this.options.yAxis.data = axis;
|
||||
this.options.xAxis.type = "value";
|
||||
this.options.yAxis.type = "category";
|
||||
} else {
|
||||
this.options.xAxis.data = axis;
|
||||
this.options.yAxis.data = [];
|
||||
this.options.xAxis.type = "category";
|
||||
this.options.yAxis.type = "value";
|
||||
}
|
||||
if (series[0].type == "bar") {
|
||||
series[0].data = data;
|
||||
}
|
||||
},
|
||||
// 动态数据
|
||||
dynamicDataFn(val, refreshTime, optionsSetup) {
|
||||
if (!val) return;
|
||||
if (this.ispreview) {
|
||||
this.getEchartData(val, optionsSetup);
|
||||
this.flagInter = setInterval(() => {
|
||||
this.getEchartData(val, optionsSetup);
|
||||
}, refreshTime);
|
||||
} else {
|
||||
this.getEchartData(val, optionsSetup);
|
||||
}
|
||||
},
|
||||
getEchartData(val, optionsSetup) {
|
||||
const data = this.queryEchartsData(val);
|
||||
data.then(res => {
|
||||
this.renderingFn(optionsSetup, res);
|
||||
});
|
||||
},
|
||||
renderingFn(optionsSetup, val) {
|
||||
// x轴
|
||||
if (optionsSetup.verticalShow) {
|
||||
this.options.xAxis.data = [];
|
||||
this.options.yAxis.data = val.xAxis;
|
||||
this.options.xAxis.type = "value";
|
||||
this.options.yAxis.type = "category";
|
||||
} else {
|
||||
this.options.xAxis.data = val.xAxis;
|
||||
this.options.yAxis.data = [];
|
||||
this.options.xAxis.type = "category";
|
||||
this.options.yAxis.type = "value";
|
||||
}
|
||||
// series
|
||||
const series = this.options.series;
|
||||
for (const i in series) {
|
||||
if (series[i].type == "bar") {
|
||||
series[i].name = val.series[i].name;
|
||||
series[i].data = val.series[i].data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.echarts {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue