From 3d6f8555080a424d08d8b44c2ae99f57c448d7c2 Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 5 Nov 2021 16:13:42 +0800 Subject: [PATCH 01/37] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-barchart.js | 1262 ++++++++-------- .../echartsConfigJson/widget-linechart.js | 1286 +++++++++-------- .../widget/{ => bar}/widgetBarchart.vue | 27 +- .../widget/{ => line}/widgetLinechart.vue | 155 +- .../report/bigscreen/designer/widget/temp.vue | 4 +- .../bigscreen/designer/widget/widget.vue | 4 +- 6 files changed, 1380 insertions(+), 1358 deletions(-) rename report-ui/src/views/report/bigscreen/designer/widget/{ => bar}/widgetBarchart.vue (95%) rename report-ui/src/views/report/bigscreen/designer/widget/{ => line}/widgetLinechart.vue (61%) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js index b324631b..a8c784ee 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js @@ -7,656 +7,662 @@ * @LastEditTime: 2021-09-28 14:08:29 */ export const widgetBarchart = { - code: 'widget-barchart', - type: 'chart', - label: '柱形图', - icon: 'iconzhuzhuangtu', - options: { - // 配置 - setup: [ + code: 'widget-barchart', + type: 'chart', + label: '柱形图', + icon: 'iconzhuzhuangtu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '柱状图', + }, + { + type: 'el-switch', + label: '竖展示', + name: 'verticalShow', + required: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ { - type: 'el-input-text', - label: '图层名称', - name: 'layerName', - required: false, - placeholder: '', - value: '柱状图', - }, - { - type: 'el-switch', - label: '竖展示', - name: 'verticalShow', - required: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '背景颜色', - name: 'background', - required: false, - placeholder: '', - value: '' + name: '柱体设置', + list: [ + { + type: 'el-slider', + label: '最大宽度', + name: 'maxWidth', + required: false, + placeholder: '', + value: 10, + }, + { + type: 'el-slider', + label: '圆角', + name: 'radius', + require: false, + placeholder: '', + value: 5, + }, + { + type: 'el-slider', + label: '最小高度', + name: 'minHeight', + require: false, + placeholder: '', + value: 0, + }, + ], }, - [ - { - name: '柱体设置', - list: [ - { - type: 'el-slider', - label: '最大宽度', - name: 'maxWidth', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-slider', - label: '圆角', - name: 'radius', - require: false, - placeholder: '', - value: 5, - }, - { - type: 'el-slider', - label: '最小高度', - name: 'minHeight', - require: false, - placeholder: '', - value: 0, - }, - ], - }, - { - name: '标题设置', - list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '', - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'textColor', - required: false, - placeholder: '', - value: '#FFD700' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'textFontSize', - required: false, - placeholder: '', - value: 20 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'center' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: 'rgba(30, 144, 255, 1)' - }, - { - type: 'el-input-text', - label: '字体粗细', - name: 'subTextFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: 20 - }, - ], - }, - { - name: 'X轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'hideX', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'xName', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorX', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'nameFontSizeX', - required: false, - placeholder: '', - value: 14 - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'Xcolor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'textAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-input-number', - label: '数值间隔', - name: 'textInterval', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalX', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineX', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorX', - required: false, - placeholder: '', - value: '#fff', - - } - ], - }, - { - name: 'Y轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowY', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'textNameY', - require: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'nameFontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'colorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'ytextAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-switch', - label: '缩放', - name: 'scale', - require: false, - placeholder: '', - value: false, - }, - { - type: 'el-input-number', - label: '均分', - name: 'splitNumber', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalY', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorY', - required: false, - placeholder: '', - value: '#fff', - }, { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineY', - require: false, - placeholder: '', - value: false, - }, { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorY', - required: false, - placeholder: '', - value: '#fff', - - } - ], - }, - { - name: '数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - required: false, - placeholder: '', - value: true - }, - { - type: 'el-input-number', - label: '距离', - name: 'distance', - required: false, - placeholder: '', - value: 5 - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'fontSize', - required: false, - placeholder: '', - value: 14 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-number', - label: '字体字号', - name: 'tipFontSize', - required: false, - placeholder: '', - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lineColor', - required: false, - placeholder: '', - }, - ], - }, - { - name: '坐标轴边距设置', - list: [ - { - type: 'el-slider', - label: '左边距(像素)', - name: 'marginLeft', - required: false, - placeholder: '', - value: 10, - }, { - type: 'el-slider', - label: '顶边距(像素)', - name: 'marginTop', - required: false, - placeholder: '', - value: 50, - }, { - type: 'el-slider', - label: '右边距(像素)', - name: 'marginRight', - required: false, - placeholder: '', - value: 40, - }, { - type: 'el-slider', - label: '底边距(像素)', - name: 'marginBottom', - required: false, - placeholder: '', - value: 10, - }, - ], - }, - { - name: '图例操作', - list: [ - { - type: 'el-switch', - label: '图例', - name: 'isShowLegend', - required: false, - placeholder: '', - value: true, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lengedColor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'lengedFontSize', - required: false, - placeholder: '', - value: 16, - }, - { - type: 'el-input-number', - label: '图例宽度', - name: 'lengedWidth', - required: false, - placeholder: '', - value: 15, - }, - { - type: 'el-select', - label: '横向位置', - name: 'lateralPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: '' - }, - { - type: 'el-select', - label: '纵向位置', - name: 'longitudinalPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'top', name: '顶部'}, - {code: 'bottom', name: '底部'}, - ], - value: '' - }, - { - type: 'el-select', - label: '布局前置', - name: 'layoutFront', - required: false, - placeholder: '', - selectOptions: [ - {code: 'vertical', name: '竖排'}, - {code: 'horizontal', name: '横排'}, - ], - value: '' - }, - ], - }, - { - name: '自定义配色', - list: [ - { - type: 'customColor', - label: '', - name: 'customColor', - required: false, - value: [{color: '#ff7f50'}, {color: '#87cefa'}, {color: '#da70d6'}, {color: '#32cd32'}, {color: '#6495ed'}], - }, - ], - }, - ], - ], - // 数据 - data: [ { - type: 'el-radio-group', - label: '数据类型', - name: 'dataType', - require: false, - placeholder: '', - selectValue: true, - selectOptions: [ + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: true, + }, { - code: 'staticData', - name: '静态数据', + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '', }, { - code: 'dynamicData', - name: '动态数据', + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '#FFD700' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'textFontSize', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'center' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: 'rgba(30, 144, 255, 1)' + }, + { + type: 'el-input-text', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: 20 }, ], - value: 'staticData', }, { - type: 'el-input-number', - label: '刷新时间(毫秒)', - name: 'refreshTime', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - value: 5000 + name: 'X轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'hideX', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'xName', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorX', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'nameFontSizeX', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'Xcolor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'textAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-input-number', + label: '数值间隔', + name: 'textInterval', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalX', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineX', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorX', + required: false, + placeholder: '', + value: '#fff', + + } + ], }, { - type: 'el-button', - label: '静态数据', - name: 'staticData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'staticData', - value: {"categories": ["苹果","三星","小米","oppo","vivo"],"series": [{"name": "手机品牌","data": [1000,2229,3879,2379,4079]}]}, + name: 'Y轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShowY', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'textNameY', + require: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'nameFontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'colorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'ytextAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-switch', + label: '缩放', + name: 'scale', + require: false, + placeholder: '', + value: false, + }, + { + type: 'el-input-number', + label: '均分', + name: 'splitNumber', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalY', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorY', + required: false, + placeholder: '', + value: '#fff', + }, { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineY', + require: false, + placeholder: '', + value: false, + }, { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorY', + required: false, + placeholder: '', + value: '#fff', + + } + ], }, { - type: 'dycustComponents', - label: '', - name: 'dynamicData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - chartType: 'widget-barchart', - dictKey: 'BAR_PROPERTIES', - value: '', + name: '数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-number', + label: '距离', + name: 'distance', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'fontSize', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], }, - ], - // 坐标 - position: [ { - type: 'el-input-number', - label: '左边距', - name: 'left', - required: false, - placeholder: '', - value: 0, + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体字号', + name: 'tipFontSize', + required: false, + placeholder: '', + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lineColor', + required: false, + placeholder: '', + }, + ], }, { - type: 'el-input-number', - label: '上边距', - name: 'top', - required: false, - placeholder: '', - value: 0, + name: '坐标轴边距设置', + list: [ + { + type: 'el-slider', + label: '左边距(像素)', + name: 'marginLeft', + required: false, + placeholder: '', + value: 10, + }, { + type: 'el-slider', + label: '顶边距(像素)', + name: 'marginTop', + required: false, + placeholder: '', + value: 50, + }, { + type: 'el-slider', + label: '右边距(像素)', + name: 'marginRight', + required: false, + placeholder: '', + value: 40, + }, { + type: 'el-slider', + label: '底边距(像素)', + name: 'marginBottom', + required: false, + placeholder: '', + value: 10, + }, + ], }, { - type: 'el-input-number', - label: '宽度', - name: 'width', - required: false, - placeholder: '该容器在1920px大屏中的宽度', - value: 400, + name: '图例操作', + list: [ + { + type: 'el-switch', + label: '图例', + name: 'isShowLegend', + required: false, + placeholder: '', + value: true, + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lengedColor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'lengedFontSize', + required: false, + placeholder: '', + value: 16, + }, + { + type: 'el-input-number', + label: '图例宽度', + name: 'lengedWidth', + required: false, + placeholder: '', + value: 15, + }, + { + type: 'el-select', + label: '横向位置', + name: 'lateralPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: '' + }, + { + type: 'el-select', + label: '纵向位置', + name: 'longitudinalPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'top', name: '顶部'}, + {code: 'bottom', name: '底部'}, + ], + value: '' + }, + { + type: 'el-select', + label: '布局前置', + name: 'layoutFront', + required: false, + placeholder: '', + selectOptions: [ + {code: 'vertical', name: '竖排'}, + {code: 'horizontal', name: '横排'}, + ], + value: '' + }, + ], }, { - type: 'el-input-number', - label: '高度', - name: 'height', - required: false, - placeholder: '该容器在1080px大屏中的高度', - value: 200, + name: '自定义配色', + list: [ + { + type: 'customColor', + label: '', + name: 'customColor', + required: false, + value: [{color: '#ff7f50'}, {color: '#87cefa'}, {color: '#da70d6'}, {color: '#32cd32'}, {color: '#6495ed'}], + }, + ], }, ], - } + ], + // 数据 + data: [ + { + type: 'el-radio-group', + label: '数据类型', + name: 'dataType', + require: false, + placeholder: '', + selectValue: true, + selectOptions: [ + { + code: 'staticData', + name: '静态数据', + }, + { + code: 'dynamicData', + name: '动态数据', + }, + ], + value: 'staticData', + }, + { + type: 'el-input-number', + label: '刷新时间(毫秒)', + name: 'refreshTime', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + value: 5000 + }, + { + type: 'el-button', + label: '静态数据', + name: 'staticData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'staticData', + value: [ + {"axis": "苹果", "data": 1000}, + {"axis": "三星", "data": 2229}, + {"axis": "小米", "data": 3879}, + {"axis": "oppo", "data": 2379}, + {"axis": "vivo", "data": 4079}, + ], + }, + { + type: 'dycustComponents', + label: '', + name: 'dynamicData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + chartType: 'widget-barchart', + dictKey: 'BAR_PROPERTIES', + value: '', + }, + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 200, + }, + ], } +} diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-linechart.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-linechart.js index c4dfb0db..3614ded3 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-linechart.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-linechart.js @@ -7,668 +7,674 @@ * @LastEditTime: 2021-09-28 14:17:10 */ export const widgetLinechart = { - code: 'widget-linechart', - type: 'chart', - label: '折线图', - icon: 'icontubiaozhexiantu', - options: { - // 配置 - setup: [ + code: 'widget-linechart', + type: 'chart', + label: '折线图', + icon: 'icontubiaozhexiantu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '折线图', + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ { - type: 'el-input-text', - label: '图层名称', - name: 'layerName', - required: false, - placeholder: '', - value: '折线图', - }, - { - type: 'vue-color', - label: '背景颜色', - name: 'background', - required: false, - placeholder: '', - value: '' + name: '折线设置', + list: [ + { + type: 'el-switch', + label: '标记点', + name: 'markPoint', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-slider', + label: '点大小', + name: 'pointSize', + required: false, + placeholder: '', + value: 10, + }, + { + type: 'el-switch', + label: '平滑曲线', + name: 'smoothCurve', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-switch', + label: '面积堆积', + name: 'area', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-slider', + label: '面积厚度', + name: 'areaThickness', + required: false, + placeholder: '', + value: 5, + }, + { + type: 'el-slider', + label: '线条宽度', + name: 'lineWidth', + required: false, + placeholder: '', + value: 4, + }, + ], }, - [ - { - name: '折线设置', - list: [ - { - type: 'el-switch', - label: '标记点', - name: 'markPoint', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-slider', - label: '点大小', - name: 'pointSize', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-switch', - label: '平滑曲线', - name: 'smoothCurve', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-switch', - label: '面积堆积', - name: 'area', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-slider', - label: '面积厚度', - name: 'areaThickness', - required: false, - placeholder: '', - value: 5, - }, - { - type: 'el-slider', - label: '线条宽度', - name: 'lineWidth', - required: false, - placeholder: '', - value: 4, - }, - ], - }, - { - name: '标题设置', - list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: false - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '', - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'textColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'textFontSize', - required: false, - placeholder: '', - value: 20 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'center' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'subTextFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: 20 - }, - ], - }, - { - name: 'X轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'hideX', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'xName', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'nameFontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'Xcolor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'textAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-input-number', - label: '数值间隔', - name: 'textInterval', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalX', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineX', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorX', - required: false, - placeholder: '', - value: '#fff', - } - ], - }, - { - name: 'Y轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowY', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'textNameY', - require: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'namefontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'colorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'ytextAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-switch', - label: '缩放', - name: 'scale', - require: false, - placeholder: '', - value: false, - }, - { - type: 'el-input-number', - label: '均分', - name: 'splitNumber', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalY', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineY', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorY', - required: false, - placeholder: '', - value: '#fff', - } - ], - }, - { - name: '数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - required: false, - placeholder: '', - value: false - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: 12 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-text', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lineColor', - required: false, - placeholder: '', - value: '' - }, - ], - }, - { - name: '坐标轴边距设置', - list: [ - { - type: 'el-slider', - label: '左边距(像素)', - name: 'marginLeft', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-slider', - label: '顶边距(像素)', - name: 'marginTop', - required: false, - placeholder: '', - value: 50, - }, - { - type: 'el-slider', - label: '右边距(像素)', - name: 'marginRight', - required: false, - placeholder: '', - value: 40, - }, - { - type: 'el-slider', - label: '底边距(像素)', - name: 'marginBottom', - required: false, - placeholder: '', - value: 10, - }, - ], - }, - { - name: '图例操作', - list: [ - { - type: 'el-switch', - label: '图例', - name: 'isShowLegend', - required: false, - placeholder: '', - value: true, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lengedColor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'lengedFontSize', - required: false, - placeholder: '', - value: 16, - }, - { - type: 'el-input-number', - label: '图例宽度', - name: 'lengedWidth', - required: false, - placeholder: '', - value: 15, - }, - { - type: 'el-select', - label: '横向位置', - name: 'lateralPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'left' - }, - { - type: 'el-select', - label: '纵向位置', - name: 'longitudinalPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'top', name: '顶部'}, - {code: 'bottom', name: '底部'}, - ], - value: '' - }, - { - type: 'el-select', - label: '布局前置', - name: 'layoutFront', - required: false, - placeholder: '', - selectOptions: [ - {code: 'vertical', name: '竖排'}, - {code: 'horizontal', name: '横排'}, - ], - value: '' - }, - ], - }, - { - name: '自定义配色', - list: [ - { - type: 'customColor', - label: '', - name: 'customColor', - required: false, - value: [{color: '#1E90FF'}], - }, - ], - }, - ], - ], - // 数据 - data: [ { - type: 'el-radio-group', - label: '数据类型', - name: 'dataType', - require: false, - placeholder: '', - selectValue: true, - selectOptions: [ + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: false + }, { - code: 'staticData', - name: '静态数据', + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '', }, { - code: 'dynamicData', - name: '动态数据', + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'textFontSize', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'center' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: 20 }, ], - value: 'staticData', }, { - type: 'el-input-number', - label: '刷新时间(毫秒)', - name: 'refreshTime', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - value: 5000 + name: 'X轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'hideX', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'xName', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'nameFontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'Xcolor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'textAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-input-number', + label: '数值间隔', + name: 'textInterval', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalX', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineX', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorX', + required: false, + placeholder: '', + value: '#fff', + } + ], }, { - type: 'el-button', - label: '静态数据', - name: 'staticData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'staticData', - value: {"categories": ["苹果","三星","小米","oppo","vivo"],"series": [{"name": "手机品牌","data": [1009,3409,2309,5409,3409]}]}, + name: 'Y轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShowY', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'textNameY', + require: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'namefontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'colorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'ytextAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-switch', + label: '缩放', + name: 'scale', + require: false, + placeholder: '', + value: false, + }, + { + type: 'el-input-number', + label: '均分', + name: 'splitNumber', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalY', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineY', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorY', + required: false, + placeholder: '', + value: '#fff', + } + ], }, { - type: 'dycustComponents', - label: '', - name: 'dynamicData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - chartType: 'widget-linechart', - dictKey: 'LINE_PROPERTIES', - relactiveDomValue: 'dynamicData', + name: '数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + required: false, + placeholder: '', + value: false + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: 12 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], }, - ], - // 坐标 - position: [ { - type: 'el-input-number', - label: '左边距', - name: 'left', - required: false, - placeholder: '', - value: 0, + name: '提示语设置', + list: [ + { + type: 'el-input-text', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lineColor', + required: false, + placeholder: '', + value: '' + }, + ], }, { - type: 'el-input-number', - label: '上边距', - name: 'top', - required: false, - placeholder: '', - value: 0, + name: '坐标轴边距设置', + list: [ + { + type: 'el-slider', + label: '左边距(像素)', + name: 'marginLeft', + required: false, + placeholder: '', + value: 10, + }, + { + type: 'el-slider', + label: '顶边距(像素)', + name: 'marginTop', + required: false, + placeholder: '', + value: 50, + }, + { + type: 'el-slider', + label: '右边距(像素)', + name: 'marginRight', + required: false, + placeholder: '', + value: 40, + }, + { + type: 'el-slider', + label: '底边距(像素)', + name: 'marginBottom', + required: false, + placeholder: '', + value: 10, + }, + ], }, { - type: 'el-input-number', - label: '宽度', - name: 'width', - required: false, - placeholder: '该容器在1920px大屏中的宽度', - value: 400, + name: '图例操作', + list: [ + { + type: 'el-switch', + label: '图例', + name: 'isShowLegend', + required: false, + placeholder: '', + value: true, + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lengedColor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'lengedFontSize', + required: false, + placeholder: '', + value: 16, + }, + { + type: 'el-input-number', + label: '图例宽度', + name: 'lengedWidth', + required: false, + placeholder: '', + value: 15, + }, + { + type: 'el-select', + label: '横向位置', + name: 'lateralPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'left' + }, + { + type: 'el-select', + label: '纵向位置', + name: 'longitudinalPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'top', name: '顶部'}, + {code: 'bottom', name: '底部'}, + ], + value: '' + }, + { + type: 'el-select', + label: '布局前置', + name: 'layoutFront', + required: false, + placeholder: '', + selectOptions: [ + {code: 'vertical', name: '竖排'}, + {code: 'horizontal', name: '横排'}, + ], + value: '' + }, + ], }, { - type: 'el-input-number', - label: '高度', - name: 'height', - required: false, - placeholder: '该容器在1080px大屏中的高度', - value: 200, + name: '自定义配色', + list: [ + { + type: 'customColor', + label: '', + name: 'customColor', + required: false, + value: [{color: '#1E90FF'}], + }, + ], }, ], - } + ], + // 数据 + data: [ + { + type: 'el-radio-group', + label: '数据类型', + name: 'dataType', + require: false, + placeholder: '', + selectValue: true, + selectOptions: [ + { + code: 'staticData', + name: '静态数据', + }, + { + code: 'dynamicData', + name: '动态数据', + }, + ], + value: 'staticData', + }, + { + type: 'el-input-number', + label: '刷新时间(毫秒)', + name: 'refreshTime', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + value: 5000 + }, + { + type: 'el-button', + label: '静态数据', + name: 'staticData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'staticData', + value: [ + {"axis": "苹果", "data": 1000}, + {"axis": "三星", "data": 2229}, + {"axis": "小米", "data": 3879}, + {"axis": "oppo", "data": 2379}, + {"axis": "vivo", "data": 4079}, + ], + }, + { + type: 'dycustComponents', + label: '', + name: 'dynamicData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + chartType: 'widget-linechart', + dictKey: 'LINE_PROPERTIES', + relactiveDomValue: 'dynamicData', + }, + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 200, + }, + ], } +} diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetBarchart.vue b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarchart.vue similarity index 95% rename from report-ui/src/views/report/bigscreen/designer/widget/widgetBarchart.vue rename to report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarchart.vue index e02437fe..ed8a08bd 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetBarchart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarchart.vue @@ -299,32 +299,37 @@ export default { const optionsSetup = this.optionsSetup; const optionsData = this.optionsData; // 数据类型 静态 or 动态 optionsData.dataType == "staticData" - ? this.staticDataFn(optionsData.staticData, optionsSetup) + ? this.staticDataFn(optionsData.staticData) : this.dynamicDataFn( - optionsData.dynamicData, - optionsData.refreshTime, - optionsSetup + optionsData.dynamicData, + optionsData.refreshTime, + optionsSetup ); }, // 静态数据 - staticDataFn(val, optionsSetup) { - const staticData = typeof val == "string" ? JSON.parse(val) : val; + 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 = staticData.categories; + this.options.yAxis.data = axis; this.options.xAxis.type = "value"; this.options.yAxis.type = "category"; } else { - this.options.xAxis.data = staticData.categories; + this.options.xAxis.data = axis; this.options.yAxis.data = []; this.options.xAxis.type = "category"; this.options.yAxis.type = "value"; } - // series - const series = this.options.series; if (series[0].type == "bar") { - series[0].data = staticData.series[0].data; + series[0].data = data; } }, // 动态数据 diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetLinechart.vue b/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLinechart.vue similarity index 61% rename from report-ui/src/views/report/bigscreen/designer/widget/widgetLinechart.vue rename to report-ui/src/views/report/bigscreen/designer/widget/line/widgetLinechart.vue index 615d97c3..87ad9b28 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetLinechart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLinechart.vue @@ -1,6 +1,6 @@ @@ -110,56 +110,56 @@ export default { }, // 标题修改 setOptionsTitle() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const title = {}; - title.text = optionsCollapse.titleText; - title.show = optionsCollapse.isNoTitle; - title.left = optionsCollapse.textAlign; + title.text = optionsSetup.titleText; + title.show = optionsSetup.isNoTitle; + title.left = optionsSetup.textAlign; title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight + color: optionsSetup.textColor, + fontSize: optionsSetup.textFontSize, + fontWeight: optionsSetup.textFontWeight }; - title.subtext = optionsCollapse.subText; + title.subtext = optionsSetup.subText; title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize + color: optionsSetup.subTextColor, + fontWeight: optionsSetup.subTextFontWeight, + fontSize: optionsSetup.subTextFontSize }; this.options.title = title; }, // X轴设置 setOptionsX() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const xAxis = { type: "category", - show: optionsCollapse.hideX, // 坐标轴是否显示 - name: optionsCollapse.xName, // 坐标轴名称 + show: optionsSetup.hideX, // 坐标轴是否显示 + name: optionsSetup.xName, // 坐标轴名称 nameTextStyle: { - color: optionsCollapse.nameColorX, - fontSize: optionsCollapse.nameFontSizeX + color: optionsSetup.nameColorX, + fontSize: optionsSetup.nameFontSizeX }, - nameRotate: optionsCollapse.textAngle, // 文字角度 - inverse: optionsCollapse.reversalX, // 轴反转 + nameRotate: optionsSetup.textAngle, // 文字角度 + inverse: optionsSetup.reversalX, // 轴反转 axisLabel: { show: true, - interval: optionsCollapse.textInterval, // 文字间隔 - rotate: optionsCollapse.textAngle, // 文字角度 + interval: optionsSetup.textInterval, // 文字间隔 + rotate: optionsSetup.textAngle, // 文字角度 textStyle: { - color: optionsCollapse.Xcolor, // x轴 坐标文字颜色 - fontSize: optionsCollapse.fontSizeX + color: optionsSetup.Xcolor, // x轴 坐标文字颜色 + fontSize: optionsSetup.fontSizeX } }, axisLine: { show: true, lineStyle: { - color: optionsCollapse.lineColorX + color: optionsSetup.lineColorX } }, splitLine: { - show: optionsCollapse.isShowSplitLineX, + show: optionsSetup.isShowSplitLineX, lineStyle: { - color: optionsCollapse.splitLineColorX + color: optionsSetup.splitLineColorX } } }; @@ -167,36 +167,36 @@ export default { }, // Y轴设置 setOptionsY() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const yAxis = { type: "value", - scale : optionsCollapse.scale, - splitNumber: optionsCollapse.splitNumber,// 均分 - show: optionsCollapse.isShowY, // 坐标轴是否显示 - name: optionsCollapse.textNameY, // 坐标轴名称 + scale: optionsSetup.scale, + splitNumber: optionsSetup.splitNumber,// 均分 + show: optionsSetup.isShowY, // 坐标轴是否显示 + name: optionsSetup.textNameY, // 坐标轴名称 nameTextStyle: { // 别名 - color: optionsCollapse.nameColorY, - fontSize: optionsCollapse.namefontSizeY + color: optionsSetup.nameColorY, + fontSize: optionsSetup.namefontSizeY }, - inverse: optionsCollapse.reversalY, // 轴反转 + inverse: optionsSetup.reversalY, // 轴反转 axisLabel: { show: true, - rotate: optionsCollapse.ytextAngle, // 文字角度 + rotate: optionsSetup.ytextAngle, // 文字角度 textStyle: { - color: optionsCollapse.colorY, // y轴 坐标文字颜色 - fontSize: optionsCollapse.fontSizeY + color: optionsSetup.colorY, // y轴 坐标文字颜色 + fontSize: optionsSetup.fontSizeY } }, axisLine: { show: true, lineStyle: { - color: optionsCollapse.lineColorY + color: optionsSetup.lineColorY } }, splitLine: { - show: optionsCollapse.isShowSplitLineY, + show: optionsSetup.isShowSplitLineY, lineStyle: { - color: optionsCollapse.splitLineColorY + color: optionsSetup.splitLineColorY } } }; @@ -204,16 +204,16 @@ export default { }, // 折线设置 setOptionsTop() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const series = this.options.series; for (const key in series) { if (series[key].type == "line") { - series[key].showSymbol = optionsCollapse.markPoint; - series[key].symbolSize = optionsCollapse.pointSize; - series[key].smooth = optionsCollapse.smoothCurve; - if (optionsCollapse.area) { + series[key].showSymbol = optionsSetup.markPoint; + series[key].symbolSize = optionsSetup.pointSize; + series[key].smooth = optionsSetup.smoothCurve; + if (optionsSetup.area) { series[key].areaStyle = { - opacity: optionsCollapse.areaThickness / 100 + opacity: optionsSetup.areaThickness / 100 }; } else { series[key].areaStyle = { @@ -222,15 +222,15 @@ export default { } series[key].lineStyle = { - width: optionsCollapse.lineWidth + width: optionsSetup.lineWidth }; series[key].label = { - show: optionsCollapse.isShow, + show: optionsSetup.isShow, position: "top", distance: 10, - fontSize: optionsCollapse.fontSize, - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.fontWeight + fontSize: optionsSetup.fontSize, + color: optionsSetup.subTextColor, + fontWeight: optionsSetup.fontWeight }; } } @@ -238,50 +238,50 @@ export default { }, // tooltip 设置 setOptionsTooltip() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const tooltip = { trigger: "item", show: true, textStyle: { - color: optionsCollapse.lineColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lineColor, + fontSize: optionsSetup.fontSize } }; this.options.tooltip = tooltip; }, // 边距设置 setOptionsMargin() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const grid = { - left: optionsCollapse.marginLeft, - right: optionsCollapse.marginRight, - bottom: optionsCollapse.marginBottom, - top: optionsCollapse.marginTop, + left: optionsSetup.marginLeft, + right: optionsSetup.marginRight, + bottom: optionsSetup.marginBottom, + top: optionsSetup.marginTop, containLabel: true }; this.options.grid = grid; }, // 图例操作 legend setOptionsLegend() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const legend = this.options.legend; - legend.show = optionsCollapse.isShowLegend; - legend.left = optionsCollapse.lateralPosition == "left" ? 0 : "auto"; - legend.right = optionsCollapse.lateralPosition == "right" ? 0 : "auto"; - legend.top = optionsCollapse.longitudinalPosition == "top" ? 0 : "auto"; + legend.show = optionsSetup.isShowLegend; + legend.left = optionsSetup.lateralPosition == "left" ? 0 : "auto"; + legend.right = optionsSetup.lateralPosition == "right" ? 0 : "auto"; + legend.top = optionsSetup.longitudinalPosition == "top" ? 0 : "auto"; legend.bottom = - optionsCollapse.longitudinalPosition == "bottom" ? 0 : "auto"; - legend.orient = optionsCollapse.layoutFront; + optionsSetup.longitudinalPosition == "bottom" ? 0 : "auto"; + legend.orient = optionsSetup.layoutFront; legend.textStyle = { - color: optionsCollapse.lengedColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lengedColor, + fontSize: optionsSetup.fontSize }; - legend.itemWidth = optionsCollapse.lengedWidth; + legend.itemWidth = optionsSetup.lengedWidth; }, // 图例颜色修改 setOptionsColor() { - const optionsCollapse = this.optionsSetup; - const customColor = optionsCollapse.customColor; + const optionsSetup = this.optionsSetup; + const customColor = optionsSetup.customColor; if (!customColor) return; const arrColor = []; for (let i = 0; i < customColor.length; i++) { @@ -298,14 +298,19 @@ export default { : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime); }, staticDataFn(val) { - const staticData = typeof val == "string" ? JSON.parse(val) : val; + 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轴 - this.options.xAxis.data = staticData.categories; + this.options.xAxis.data = axis; // series - const series = this.options.series; for (const i in series) { if (series[i].type == "line") { - series[i].data = staticData.series[0].data; + series[i].data = data; } } }, diff --git a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue index f0b126d4..d2088fe9 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue @@ -19,8 +19,8 @@ import widgetImage from "./widgetImage.vue"; import widgetSlider from "./widgetSlider.vue"; import widgetVideo from "./widgetVideo.vue"; import WidgetIframe from "./widgetIframe.vue"; -import widgetBarchart from "./widgetBarchart.vue"; -import widgetLinechart from "./widgetLinechart.vue"; +import widgetBarchart from "./bar/widgetBarchart.vue"; +import widgetLinechart from "./line/widgetLinechart.vue"; import widgetBarlinechart from "./widgetBarlinechart"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; import WidgetPiechart from "./widgetPiechart.vue"; diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue index ba4b3552..46f98a8b 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue @@ -30,9 +30,9 @@ import widgetImage from "./widgetImage.vue"; import widgetSlider from "./widgetSlider.vue"; import widgetVideo from "./widgetVideo.vue"; import WidgetIframe from "./widgetIframe.vue"; -import widgetBarchart from "./widgetBarchart.vue"; +import widgetBarchart from "./bar/widgetBarchart.vue"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; -import widgetLinechart from "./widgetLinechart.vue"; +import widgetLinechart from "./line/widgetLinechart.vue"; import widgetBarlinechart from "./widgetBarlinechart"; import WidgetPiechart from "./widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; From 3a5137a569fab985b0ca796e35acd05ee7ee9dde Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 5 Nov 2021 16:18:08 +0800 Subject: [PATCH 02/37] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget-gradient-barchart.js | 1156 +++++++++-------- .../bar/widgetGradientColorBarchart.vue | 27 +- 2 files changed, 597 insertions(+), 586 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gradient-barchart.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gradient-barchart.js index 7d1c1d16..7a6c7696 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gradient-barchart.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gradient-barchart.js @@ -6,601 +6,607 @@ * @LastEditors: qianlishi * @LastEditTime: 2021-09-28 14:14:08 */ -export const widgetGradientBarchart = { - code: 'widget-gradient-color-barchart', - type: 'chart', - label: '柱形图-渐变色', - icon: 'iconzhuzhuangtu', - options: { - // 配置 - setup: [ +export const widgetGradientBarchart = { + code: 'widget-gradient-color-barchart', + type: 'chart', + label: '柱形图-渐变色', + icon: 'iconzhuzhuangtu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '柱形图-渐变色', + }, + { + type: 'el-switch', + label: '竖展示', + name: 'verticalShow', + required: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ { - type: 'el-input-text', - label: '图层名称', - name: 'layerName', - required: false, - placeholder: '', - value: '柱形图-渐变色', - }, - { - type: 'el-switch', - label: '竖展示', - name: 'verticalShow', - required: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '背景颜色', - name: 'background', - required: false, - placeholder: '', - value: '' - }, - [ - { - name: '柱体设置', - list: [ - { - type: 'el-slider', - label: '最大宽度', - name: 'maxWidth', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-slider', - label: '圆角', - name: 'radius', - require: false, - placeholder: '', - value: 5, - }, - ], - }, - { - name: '标题设置', - list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '', - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'textColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'textFontSize', - required: false, - placeholder: '', - value: 22 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'center' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#90979c' - }, - { - type: 'el-input-text', - label: '字体粗细', - name: 'subTextFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: 20 - }, - ], - }, - { - name: 'X轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'hideX', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'xName', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'nameFontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'Xcolor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'textAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-input-number', - label: '数值间隔', - name: 'textInterval', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalX', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineX', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorX', - required: false, - placeholder: '', - value: '#fff', - } - ], - }, - { - name: 'Y轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowY', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'textNameY', - require: false, - placeholder: '', - value: '' - },{ - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'namefontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'colorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'ytextAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-switch', - label: '缩放', - name: 'scale', - require: false, - placeholder: '', - value: false, - }, - { - type: 'el-input-number', - label: '均分', - name: 'splitNumber', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalY', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineY', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorY', - required: false, - placeholder: '', - value: '#fff', - } - ], - }, - { - name: '数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - required: false, - placeholder: '', - value: true - }, - { - type: 'el-input-number', - label: '距离', - name: 'distance', - required: false, - placeholder: '', - value: 5 - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: 14 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-number', - label: '字体大小', - name: 'tipsFontSize', - required: false, - placeholder: '', - value: 16 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lineColor', - required: false, - placeholder: '#ff7f50', - }, - ], - }, - { - name: '坐标轴边距设置', - list: [ - { - type: 'el-slider', - label: '左边距(像素)', - name: 'marginLeft', - required: false, - placeholder: '', - value: 10, - }, { - type: 'el-slider', - label: '顶边距(像素)', - name: 'marginTop', - required: false, - placeholder: '', - value: 50, - }, { - type: 'el-slider', - label: '右边距(像素)', - name: 'marginRight', - required: false, - placeholder: '', - value: 40, - }, { - type: 'el-slider', - label: '底边距(像素)', - name: 'marginBottom', - required: false, - placeholder: '', - value: 10, - }, - ], - }, - { - name: '渐变色', - list: [ - { - type: 'vue-color', - label: '0%处', - name: 'bar0color', - required: false, - placeholder: '', - value: 'rgba(0,244,255,1)' - }, - { - type: 'vue-color', - label: '100%处', - name: 'bar100color', - required: false, - placeholder: '', - value: 'rgba(0,77,167,1)' - }, - { - type: 'vue-color', - label: '阴影颜色', - name: 'shadowColor', - required: false, - placeholder: '', - value: 'rgba(0,160,221,1)' - }, - { - type: 'el-input-number', - label: '模糊系数', - name: 'shadowBlur', - required: false, - placeholder: '', - value: 4, - }, - ], - }, - ], - ], - // 数据 - data: [ - { - type: 'el-radio-group', - label: '数据类型', - name: 'dataType', - require: false, - placeholder: '', - selectValue: true, - selectOptions: [ + name: '柱体设置', + list: [ { - code: 'staticData', - name: '静态数据', + type: 'el-slider', + label: '最大宽度', + name: 'maxWidth', + required: false, + placeholder: '', + value: 10, }, { - code: 'dynamicData', - name: '动态数据', + type: 'el-slider', + label: '圆角', + name: 'radius', + require: false, + placeholder: '', + value: 5, }, ], - value: 'staticData', }, { - type: 'el-input-number', - label: '刷新时间(毫秒)', - name: 'refreshTime', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - value: 5000 + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '', + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'textFontSize', + required: false, + placeholder: '', + value: 22 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'center' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#90979c' + }, + { + type: 'el-input-text', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: 20 + }, + ], }, { - type: 'el-button', - label: '静态数据', - name: 'staticData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'staticData', - value: {"categories": ["苹果","三星","小米","oppo","vivo"],"series": [{"name": "手机品牌","data": [1000,2229,3879,2379,4079]}]}, + name: 'X轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'hideX', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'xName', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'nameFontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'Xcolor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'textAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-input-number', + label: '数值间隔', + name: 'textInterval', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalX', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineX', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorX', + required: false, + placeholder: '', + value: '#fff', + } + ], }, { - type: 'dycustComponents', - label: '', - name: 'dynamicData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - chartType: 'widget-barchart', - dictKey: 'BAR_PROPERTIES', - value: '', + name: 'Y轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShowY', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'textNameY', + require: false, + placeholder: '', + value: '' + }, { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'namefontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'colorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'ytextAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-switch', + label: '缩放', + name: 'scale', + require: false, + placeholder: '', + value: false, + }, + { + type: 'el-input-number', + label: '均分', + name: 'splitNumber', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalY', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineY', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorY', + required: false, + placeholder: '', + value: '#fff', + } + ], }, - ], - // 坐标 - position: [ { - type: 'el-input-number', - label: '左边距', - name: 'left', - required: false, - placeholder: '', - value: 0, + name: '数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-number', + label: '距离', + name: 'distance', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], }, { - type: 'el-input-number', - label: '上边距', - name: 'top', - required: false, - placeholder: '', - value: 0, + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体大小', + name: 'tipsFontSize', + required: false, + placeholder: '', + value: 16 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lineColor', + required: false, + placeholder: '#ff7f50', + }, + ], }, { - type: 'el-input-number', - label: '宽度', - name: 'width', - required: false, - placeholder: '该容器在1920px大屏中的宽度', - value: 400, + name: '坐标轴边距设置', + list: [ + { + type: 'el-slider', + label: '左边距(像素)', + name: 'marginLeft', + required: false, + placeholder: '', + value: 10, + }, { + type: 'el-slider', + label: '顶边距(像素)', + name: 'marginTop', + required: false, + placeholder: '', + value: 50, + }, { + type: 'el-slider', + label: '右边距(像素)', + name: 'marginRight', + required: false, + placeholder: '', + value: 40, + }, { + type: 'el-slider', + label: '底边距(像素)', + name: 'marginBottom', + required: false, + placeholder: '', + value: 10, + }, + ], }, { - type: 'el-input-number', - label: '高度', - name: 'height', - required: false, - placeholder: '该容器在1080px大屏中的高度', - value: 200, + name: '渐变色', + list: [ + { + type: 'vue-color', + label: '0%处', + name: 'bar0color', + required: false, + placeholder: '', + value: 'rgba(0,244,255,1)' + }, + { + type: 'vue-color', + label: '100%处', + name: 'bar100color', + required: false, + placeholder: '', + value: 'rgba(0,77,167,1)' + }, + { + type: 'vue-color', + label: '阴影颜色', + name: 'shadowColor', + required: false, + placeholder: '', + value: 'rgba(0,160,221,1)' + }, + { + type: 'el-input-number', + label: '模糊系数', + name: 'shadowBlur', + required: false, + placeholder: '', + value: 4, + }, + ], }, ], - } + ], + // 数据 + data: [ + { + type: 'el-radio-group', + label: '数据类型', + name: 'dataType', + require: false, + placeholder: '', + selectValue: true, + selectOptions: [ + { + code: 'staticData', + name: '静态数据', + }, + { + code: 'dynamicData', + name: '动态数据', + }, + ], + value: 'staticData', + }, + { + type: 'el-input-number', + label: '刷新时间(毫秒)', + name: 'refreshTime', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + value: 5000 + }, + { + type: 'el-button', + label: '静态数据', + name: 'staticData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'staticData', + value: [ + {"axis": "苹果", "data": 1000}, + {"axis": "三星", "data": 2229}, + {"axis": "小米", "data": 3879}, + {"axis": "oppo", "data": 2379}, + {"axis": "vivo", "data": 4079}, + ], + }, + { + type: 'dycustComponents', + label: '', + name: 'dynamicData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + chartType: 'widget-barchart', + dictKey: 'BAR_PROPERTIES', + value: '', + }, + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 200, + }, + ], } +} diff --git a/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetGradientColorBarchart.vue b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetGradientColorBarchart.vue index eed79f71..9daadfc5 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetGradientColorBarchart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetGradientColorBarchart.vue @@ -384,32 +384,37 @@ export default { const optionsSetup = this.optionsSetup; const optionsData = this.optionsData; // 数据类型 静态 or 动态 optionsData.dataType == "staticData" - ? this.staticDataFn(optionsData.staticData, optionsSetup) + ? this.staticDataFn(optionsData.staticData) : this.dynamicDataFn( - optionsData.dynamicData, - optionsData.refreshTime, - optionsSetup + optionsData.dynamicData, + optionsData.refreshTime, + optionsSetup ); }, // 静态数据 - staticDataFn(val, optionsSetup) { - const staticData = typeof val == "string" ? JSON.parse(val) : val; + 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 = staticData.categories; + this.options.yAxis.data = axis; this.options.xAxis.type = "value"; this.options.yAxis.type = "category"; } else { - this.options.xAxis.data = staticData.categories; + this.options.xAxis.data = axis; this.options.yAxis.data = []; this.options.xAxis.type = "category"; this.options.yAxis.type = "value"; } - // series - const series = this.options.series; if (series[0].type == "bar") { - series[0].data = staticData.series[0].data; + series[0].data = data; } }, // 动态数据 From 508e3c86b5742c91e5a96365659ee430ef7fe0d4 Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 5 Nov 2021 16:33:17 +0800 Subject: [PATCH 03/37] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-barlinechart.js | 1403 ++++++++--------- .../widget/{ => bar}/widgetBarlinechart.vue | 190 ++- .../report/bigscreen/designer/widget/temp.vue | 10 +- .../bigscreen/designer/widget/widget.vue | 19 +- 4 files changed, 779 insertions(+), 843 deletions(-) rename report-ui/src/views/report/bigscreen/designer/widget/{ => bar}/widgetBarlinechart.vue (59%) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barlinechart.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barlinechart.js index b2f5a922..d6b030e0 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barlinechart.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barlinechart.js @@ -7,762 +7,701 @@ * @LastEditTime: 2021-09-28 14:11:57 */ export const widgetBarlinechart = { - code: 'widget-barlinechart', - type: 'chart', - label: '柱线图', - icon: 'iconzhuxiantu', - options: { - // 配置 - setup: [ + code: 'widget-barlinechart', + type: 'chart', + label: '柱线图', + icon: 'iconzhuxiantu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '柱线图', + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ { - type: 'el-input-text', - label: '图层名称', - name: 'layerName', - required: false, - placeholder: '', - value: '柱线图', + name: '折线设置', + list: [ + { + type: 'el-switch', + label: '标记点', + name: 'markPoint', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-slider', + label: '点大小', + name: 'pointSize', + required: false, + placeholder: '', + value: 5, + }, + { + type: 'el-switch', + label: '平滑曲线', + name: 'smoothCurve', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-switch', + label: '面积堆积', + name: 'area', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-slider', + label: '面积厚度', + name: 'areaThickness', + required: false, + placeholder: '', + value: 5, + }, + { + type: 'el-slider', + label: '线条宽度', + name: 'lineWidth', + required: false, + placeholder: '', + value: 3, + }, + ], }, { - type: 'vue-color', - label: '背景颜色', - name: 'background', - required: false, - placeholder: '', - value: '' + name: '柱体设置', + list: [ + { + type: 'el-slider', + label: '最大宽度', + name: 'maxWidth', + required: false, + placeholder: '', + value: 10, + }, + { + type: 'el-slider', + label: '圆角', + name: 'radius', + require: false, + placeholder: '', + value: 5, + }, + { + type: 'el-slider', + label: '最小高度', + name: 'minHeight', + require: false, + placeholder: '', + value: 0, + }, + ], }, - [ - { - name: '折线设置', - list: [ - { - type: 'el-switch', - label: '标记点', - name: 'markPoint', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-slider', - label: '点大小', - name: 'pointSize', - required: false, - placeholder: '', - value: 5, - }, - { - type: 'el-switch', - label: '平滑曲线', - name: 'smoothCurve', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-switch', - label: '面积堆积', - name: 'area', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-slider', - label: '面积厚度', - name: 'areaThickness', - required: false, - placeholder: '', - value: 5, - }, - { - type: 'el-slider', - label: '线条宽度', - name: 'lineWidth', - required: false, - placeholder: '', - value: 3, - }, - ], - }, - { - name: '柱体设置', - list: [ - { - type: 'el-slider', - label: '最大宽度', - name: 'maxWidth', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-slider', - label: '圆角', - name: 'radius', - require: false, - placeholder: '', - value: 5, - }, - { - type: 'el-slider', - label: '最小高度', - name: 'minHeight', - require: false, - placeholder: '', - value: 0, - }, - ], - }, - { - name: '标题设置', - list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: true - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'textColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'textFontSize', - required: false, - placeholder: '', - value: 20 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'left' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'subTextFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: 20 - }, - ], - }, - { - name: 'X轴设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'hideX', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '坐标名', - name: 'xName', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '坐标名颜色', - name: 'nameColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '坐标字号', - name: 'nameFontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'Xcolor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeX', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-slider', - label: '数值角度', - name: 'textAngle', - required: false, - placeholder: '', - value: 0 - }, - { - type: 'el-input-number', - label: '数值间隔', - name: 'textInterval', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalX', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorX', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-switch', - label: '分割线显示', - name: 'isShowSplitLineX', - require: false, - placeholder: '', - value: false, - }, - { - type: 'vue-color', - label: '分割线颜色', - name: 'splitLineColorX', - required: false, - placeholder: '', - value: '#fff', - } - ], - }, - { - name: 'Y轴设置', - list: [ - { - type: 'el-switch', - label: '左显示', - name: 'isShowYLeft', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '左坐标名', - name: 'textNameYLeft', - require: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '左坐标名颜色', - name: 'nameColorYLeft', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '左坐标字号', - name: 'namefontSizeYLeft', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-input-number', - label: '左均分', - name: 'splitNumberLeft', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-switch', - label: '右显示', - name: 'isShowYRight', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-text', - label: '右坐标名', - name: 'textNameYRight', - require: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '右坐标名颜色', - name: 'nameColorYRight', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '右坐标字号', - name: 'namefontSizeYRight', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-input-number', - label: '右均分', - name: 'splitNumberRight', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '数值颜色', - name: 'colorY', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '数值字号', - name: 'fontSizeY', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'el-switch', - label: '轴反转', - name: 'reversalY', - required: false, - placeholder: '', - value: false - }, - { - type: 'vue-color', - label: '轴颜色', - name: 'lineColorY', - required: false, - placeholder: '', - value: '#fff', - }, - ], - }, - { - name: '折线数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowLine', - required: false, - placeholder: '', - value: false - }, - { - type: 'el-input-number', - label: '距离', - name: 'distanceLine', - required: false, - placeholder: '', - value: 5 - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'fontSizeLine', - required: false, - placeholder: '', - value: 14 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColorLine', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeightLine', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '柱体数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowBar', - required: false, - placeholder: '', - value: false - }, - { - type: 'el-input-number', - label: '距离', - name: 'distanceBar', - required: false, - placeholder: '', - value: 5 - }, - { - type: 'el-input-number', - label: '字体字号', - name: 'fontSizeBar', - required: false, - placeholder: '', - value: 14 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColorBar', - required: false, - placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeightBar', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-number', - label: '字体大小', - name: 'tipFontSize', - required: false, - placeholder: '', - value: 12 - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lineColor', - required: false, - placeholder: '', - value: '#e68b55' - }, - ], - }, - { - name: '坐标轴边距设置', - list: [ - { - type: 'el-slider', - label: '左边距(像素)', - name: 'marginLeft', - required: false, - placeholder: '', - value: 10, - }, { - type: 'el-slider', - label: '顶边距(像素)', - name: 'marginTop', - required: false, - placeholder: '', - value: 50, - }, { - type: 'el-slider', - label: '右边距(像素)', - name: 'marginRight', - required: false, - placeholder: '', - value: 40, - }, { - type: 'el-slider', - label: '底边距(像素)', - name: 'marginBottom', - required: false, - placeholder: '', - value: 10, - }, - ], - }, - /*{ - name: '图例操作', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShowLegend', - required: false, - placeholder: '', - value: true, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lengedColor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'lengedFontSize', - required: false, - placeholder: '', - value: 16, - }, - { - type: 'el-input-number', - label: '图例宽度', - name: 'lengedWidth', - required: false, - placeholder: '', - value: 15, - }, - { - type: 'el-select', - label: '横向位置', - name: 'lateralPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'center' - }, - { - type: 'el-select', - label: '纵向位置', - name: 'longitudinalPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'top', name: '顶部'}, - {code: 'bottom', name: '底部'}, - ], - value: 'top' - }, - { - type: 'el-select', - label: '布局前置', - name: 'layoutFront', - required: false, - placeholder: '', - selectOptions: [ - {code: 'vertical', name: '竖排'}, - {code: 'horizontal', name: '横排'}, - ], - value: 'horizontal' - }, - ], - },*/ - { - name: '自定义配色', - list: [ - { - type: 'customColor', - label: '', - name: 'customColor', - required: false, - value: [{color: '#00F4FFFF'}, {color: '#e68b55'}], - }, - ], - }, - ], - ], - // 数据 - data: [ { - type: 'el-radio-group', - label: '数据类型', - name: 'dataType', - require: false, - placeholder: '', - selectValue: true, - selectOptions: [ + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '#fff' + }, { - code: 'staticData', - name: '静态数据', + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' }, { - code: 'dynamicData', - name: '动态数据', + type: 'el-input-number', + label: '字体大小', + name: 'textFontSize', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'left' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: 20 }, ], - value: 'staticData', }, { - type: 'el-input-number', - label: '刷新时间(毫秒)', - name: 'refreshTime', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - value: 5000 + name: 'X轴设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'hideX', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '坐标名', + name: 'xName', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '坐标名颜色', + name: 'nameColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '坐标字号', + name: 'nameFontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'Xcolor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeX', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-slider', + label: '数值角度', + name: 'textAngle', + required: false, + placeholder: '', + value: 0 + }, + { + type: 'el-input-number', + label: '数值间隔', + name: 'textInterval', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalX', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorX', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-switch', + label: '分割线显示', + name: 'isShowSplitLineX', + require: false, + placeholder: '', + value: false, + }, + { + type: 'vue-color', + label: '分割线颜色', + name: 'splitLineColorX', + required: false, + placeholder: '', + value: '#fff', + } + ], }, { - type: 'el-button', - label: '静态数据', - name: 'staticData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'staticData', - value: {"xAxis": ["1月", "2月", "3月", "4月", "5月","6月", "7月", "8月","9月","10月","11月","12月"],"series": [{"type": "bar","name": "货运量","data": [2.6,5.9,9,26.4,28.7,70.7,175.6,182.2,48.7,18.8,6,2.3]},{"type": "line","name": "货运总量","yAxisIndex": 1,"data": [2,2.2,3.3,4.5,6.3,10.2,20.3,23.4,23,16.5,12,6.2]}]}, + name: 'Y轴设置', + list: [ + { + type: 'el-switch', + label: '左显示', + name: 'isShowYLeft', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '左坐标名', + name: 'textNameYLeft', + require: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '左坐标名颜色', + name: 'nameColorYLeft', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '左坐标字号', + name: 'namefontSizeYLeft', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-input-number', + label: '左均分', + name: 'splitNumberLeft', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-switch', + label: '右显示', + name: 'isShowYRight', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-text', + label: '右坐标名', + name: 'textNameYRight', + require: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '右坐标名颜色', + name: 'nameColorYRight', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '右坐标字号', + name: 'namefontSizeYRight', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-input-number', + label: '右均分', + name: 'splitNumberRight', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '数值颜色', + name: 'colorY', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '数值字号', + name: 'fontSizeY', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'el-switch', + label: '轴反转', + name: 'reversalY', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '轴颜色', + name: 'lineColorY', + required: false, + placeholder: '', + value: '#fff', + }, + ], }, { - type: 'dycustComponents', - label: '', - name: 'dynamicData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - chartType: 'widget-barlinechart', - dictKey: 'BAR_LINE_PROPERTIES', - relactiveDomValue: 'dynamicData', + name: '折线数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShowLine', + required: false, + placeholder: '', + value: false + }, + { + type: 'el-input-number', + label: '距离', + name: 'distanceLine', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'fontSizeLine', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColorLine', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeightLine', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], }, - ], - // 坐标 - position: [ { - type: 'el-input-number', - label: '左边距', - name: 'left', - required: false, - placeholder: '', - value: 0, + name: '柱体数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShowBar', + required: false, + placeholder: '', + value: false + }, + { + type: 'el-input-number', + label: '距离', + name: 'distanceBar', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '字体字号', + name: 'fontSizeBar', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColorBar', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeightBar', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], }, { - type: 'el-input-number', - label: '上边距', - name: 'top', - required: false, - placeholder: '', - value: 0, + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体大小', + name: 'tipFontSize', + required: false, + placeholder: '', + value: 12 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lineColor', + required: false, + placeholder: '', + value: '#e68b55' + }, + ], }, { - type: 'el-input-number', - label: '宽度', - name: 'width', - required: false, - placeholder: '该容器在1920px大屏中的宽度', - value: 400, + name: '坐标轴边距设置', + list: [ + { + type: 'el-slider', + label: '左边距(像素)', + name: 'marginLeft', + required: false, + placeholder: '', + value: 10, + }, { + type: 'el-slider', + label: '顶边距(像素)', + name: 'marginTop', + required: false, + placeholder: '', + value: 50, + }, { + type: 'el-slider', + label: '右边距(像素)', + name: 'marginRight', + required: false, + placeholder: '', + value: 40, + }, { + type: 'el-slider', + label: '底边距(像素)', + name: 'marginBottom', + required: false, + placeholder: '', + value: 10, + }, + ], }, { - type: 'el-input-number', - label: '高度', - name: 'height', - required: false, - placeholder: '该容器在1080px大屏中的高度', - value: 200, + name: '自定义配色', + list: [ + { + type: 'customColor', + label: '', + name: 'customColor', + required: false, + value: [{color: '#00F4FFFF'}, {color: '#e68b55'}], + }, + ], }, ], - } + ], + // 数据 + data: [ + { + type: 'el-radio-group', + label: '数据类型', + name: 'dataType', + require: false, + placeholder: '', + selectValue: true, + selectOptions: [ + { + code: 'staticData', + name: '静态数据', + }, + { + code: 'dynamicData', + name: '动态数据', + }, + ], + value: 'staticData', + }, + { + type: 'el-input-number', + label: '刷新时间(毫秒)', + name: 'refreshTime', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + value: 5000 + }, + { + type: 'el-button', + label: '静态数据', + name: 'staticData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'staticData', + value: [ + {"axis": "1月", "bar": 2.6, "line": 2}, + {"axis": "2月", "bar": 5.9, "line": 2.2}, + {"axis": "3月", "bar": 9, "line": 3.3}, + {"axis": "4月", "bar": 26.4, "line": 4.5}, + {"axis": "5月", "bar": 28.7, "line": 6.3}, + {"axis": "6月", "bar": 70.7, "line": 10.2}, + {"axis": "7月", "bar": 175.6, "line": 20.3}, + {"axis": "8月", "bar": 182.2, "line": 23.4}, + {"axis": "9月", "bar": 48.7, "line": 23}, + {"axis": "10月", "bar": 18.8, "line": 16.5}, + {"axis": "11月", "bar": 6, "line": 12}, + {"axis": "12月", "bar": 2.3, "line": 6.2}, + ] + }, + { + type: 'dycustComponents', + label: '', + name: 'dynamicData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + chartType: 'widget-barlinechart', + dictKey: 'BAR_LINE_PROPERTIES', + relactiveDomValue: 'dynamicData', + }, + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 200, + }, + ], } +} diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetBarlinechart.vue b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarlinechart.vue similarity index 59% rename from report-ui/src/views/report/bigscreen/designer/widget/widgetBarlinechart.vue rename to report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarlinechart.vue index 2102e0ba..1a937a09 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetBarlinechart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarlinechart.vue @@ -143,57 +143,57 @@ export default { }, // 标题修改 setOptionsTitle() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const title = {}; - title.text = optionsCollapse.titleText; - title.show = optionsCollapse.isNoTitle; - title.left = optionsCollapse.textAlign; + title.text = optionsSetup.titleText; + title.show = optionsSetup.isNoTitle; + title.left = optionsSetup.textAlign; title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight + color: optionsSetup.textColor, + fontSize: optionsSetup.textFontSize, + fontWeight: optionsSetup.textFontWeight }; - title.subtext = optionsCollapse.subText; + title.subtext = optionsSetup.subText; title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize + color: optionsSetup.subTextColor, + fontWeight: optionsSetup.subTextFontWeight, + fontSize: optionsSetup.subTextFontSize }; this.options.title = title; }, // X轴设置 setOptionsX() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const xAxis = { type: "category", - show: optionsCollapse.hideX, // 坐标轴是否显示 - name: optionsCollapse.xName, // 坐标轴名称 + show: optionsSetup.hideX, // 坐标轴是否显示 + name: optionsSetup.xName, // 坐标轴名称 nameTextStyle: { - color: optionsCollapse.nameColorX, - fontSize: optionsCollapse.nameFontSizeX + color: optionsSetup.nameColorX, + fontSize: optionsSetup.nameFontSizeX }, - nameRotate: optionsCollapse.textAngle, // 文字角度 - inverse: optionsCollapse.reversalX, // 轴反转 + nameRotate: optionsSetup.textAngle, // 文字角度 + inverse: optionsSetup.reversalX, // 轴反转 axisLabel: { show: true, - interval: optionsCollapse.textInterval, // 文字间隔 - rotate: optionsCollapse.textAngle, // 文字角度 + interval: optionsSetup.textInterval, // 文字间隔 + rotate: optionsSetup.textAngle, // 文字角度 textStyle: { - color: optionsCollapse.Xcolor, // x轴 坐标文字颜色 - fontSize: optionsCollapse.fontSizeX + color: optionsSetup.Xcolor, // x轴 坐标文字颜色 + fontSize: optionsSetup.fontSizeX } }, axisLine: { show: true, lineStyle: { - color: optionsCollapse.lineColorX + color: optionsSetup.lineColorX } }, splitLine: { - show: optionsCollapse.isShowSplitLineX, + show: optionsSetup.isShowSplitLineX, lineStyle: { - color: optionsCollapse.splitLineColorX + color: optionsSetup.splitLineColorX } } }; @@ -201,29 +201,29 @@ export default { }, // Y轴设置 setOptionsY() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const yAxis = [ { type: "value", - splitNumber: optionsCollapse.splitNumberLeft,// 均分 - show: optionsCollapse.isShowYLeft, // 坐标轴是否显示 - name: optionsCollapse.textNameYLeft, // 坐标轴名称 + splitNumber: optionsSetup.splitNumberLeft,// 均分 + show: optionsSetup.isShowYLeft, // 坐标轴是否显示 + name: optionsSetup.textNameYLeft, // 坐标轴名称 nameTextStyle: { // 别名 - color: optionsCollapse.nameColorYLeft, - fontSize: optionsCollapse.namefontSizeYLeft + color: optionsSetup.nameColorYLeft, + fontSize: optionsSetup.namefontSizeYLeft }, - inverse: optionsCollapse.reversalY, // 轴反转 + inverse: optionsSetup.reversalY, // 轴反转 axisLabel: { show: true, textStyle: { - color: optionsCollapse.colorY, // y轴 坐标文字颜色 - fontSize: optionsCollapse.fontSizeY + color: optionsSetup.colorY, // y轴 坐标文字颜色 + fontSize: optionsSetup.fontSizeY } }, axisLine: { show: true, lineStyle: { - color: optionsCollapse.lineColorY + color: optionsSetup.lineColorY } }, splitLine: { @@ -232,25 +232,25 @@ export default { }, { type: "value", - splitNumber: optionsCollapse.splitNumberRight,// 均分 - show: optionsCollapse.isShowYRight, // 坐标轴是否显示 - name: optionsCollapse.textNameYRight, // 坐标轴名称 + splitNumber: optionsSetup.splitNumberRight,// 均分 + show: optionsSetup.isShowYRight, // 坐标轴是否显示 + name: optionsSetup.textNameYRight, // 坐标轴名称 nameTextStyle: { // 别名 - color: optionsCollapse.nameColorYRight, - fontSize: optionsCollapse.namefontSizeYRight + color: optionsSetup.nameColorYRight, + fontSize: optionsSetup.namefontSizeYRight }, - inverse: optionsCollapse.reversalY, // 轴反转 + inverse: optionsSetup.reversalY, // 轴反转 axisLabel: { show: true, textStyle: { - color: optionsCollapse.colorY, // y轴 坐标文字颜色 - fontSize: optionsCollapse.fontSizeY + color: optionsSetup.colorY, // y轴 坐标文字颜色 + fontSize: optionsSetup.fontSizeY } }, axisLine: { show: true, lineStyle: { - color: optionsCollapse.lineColorY + color: optionsSetup.lineColorY } }, splitLine: { @@ -262,16 +262,16 @@ export default { }, // 折线设置 数值设置 setOptionsTop() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const series = this.options.series; for (const key in series) { if (series[key].type == "line") { - series[key].showSymbol = optionsCollapse.markPoint; - series[key].symbolSize = optionsCollapse.pointSize; - series[key].smooth = optionsCollapse.smoothCurve; - if (optionsCollapse.area) { + series[key].showSymbol = optionsSetup.markPoint; + series[key].symbolSize = optionsSetup.pointSize; + series[key].smooth = optionsSetup.smoothCurve; + if (optionsSetup.area) { series[key].areaStyle = { - opacity: optionsCollapse.areaThickness / 100 + opacity: optionsSetup.areaThickness / 100 }; } else { series[key].areaStyle = { @@ -279,16 +279,16 @@ export default { }; } series[key].lineStyle = { - width: optionsCollapse.lineWidth + width: optionsSetup.lineWidth }; - series[key].itemStyle.borderRadius = optionsCollapse.radius; + series[key].itemStyle.borderRadius = optionsSetup.radius; series[key].label = { - show: optionsCollapse.isShowLine, + show: optionsSetup.isShowLine, position: "top", - distance: optionsCollapse.distanceLine, - fontSize: optionsCollapse.fontSizeLine, - color: optionsCollapse.subTextColorLine, - fontWeight: optionsCollapse.fontWeightLine + distance: optionsSetup.distanceLine, + fontSize: optionsSetup.fontSizeLine, + color: optionsSetup.subTextColorLine, + fontWeight: optionsSetup.fontWeightLine }; } } @@ -296,71 +296,54 @@ export default { }, // 柱体设置 数值设置 setOptionsBar() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const series = this.options.series; for (const key in series) { if (series[key].type == "bar") { series[key].label = { - show: optionsCollapse.isShowBar, + show: optionsSetup.isShowBar, position: "top", - distance: optionsCollapse.distanceBar, - fontSize: optionsCollapse.fontSizeBar, - color: optionsCollapse.subTextColorBar, - fontWeight: optionsCollapse.fontWeightBar + distance: optionsSetup.distanceBar, + fontSize: optionsSetup.fontSizeBar, + color: optionsSetup.subTextColorBar, + fontWeight: optionsSetup.fontWeightBar }; - series[key].barWidth = optionsCollapse.maxWidth; - series[key].barMinHeight = optionsCollapse.minHeight; - series[key].itemStyle.barBorderRadius = optionsCollapse.radius; + series[key].barWidth = optionsSetup.maxWidth; + series[key].barMinHeight = optionsSetup.minHeight; + series[key].itemStyle.barBorderRadius = optionsSetup.radius; } } this.options.series = series; }, // tooltip 设置 setOptionsTooltip() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const tooltip = { trigger: "item", show: true, textStyle: { - color: optionsCollapse.lineColor, - fontSize: optionsCollapse.tipFontSize + color: optionsSetup.lineColor, + fontSize: optionsSetup.tipFontSize } }; this.options.tooltip = tooltip; }, // 边距设置 setOptionsMargin() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const grid = { - left: optionsCollapse.marginLeft, - right: optionsCollapse.marginRight, - bottom: optionsCollapse.marginBottom, - top: optionsCollapse.marginTop, + left: optionsSetup.marginLeft, + right: optionsSetup.marginRight, + bottom: optionsSetup.marginBottom, + top: optionsSetup.marginTop, containLabel: true }; this.options.grid = grid; }, -/* // 图例操作 legend - setOptionsLegend() { - const optionsCollapse = this.optionsSetup; - const legend = this.options.legend; - legend.show = optionsCollapse.isShowLegend; - legend.left = optionsCollapse.lateralPosition; - legend.top = optionsCollapse.longitudinalPosition == "top" ? 0 : "auto"; - legend.bottom = - optionsCollapse.longitudinalPosition == "bottom" ? 0 : "auto"; - legend.orient = optionsCollapse.layoutFront; - legend.textStyle = { - color: optionsCollapse.lengedColor, - fontSize: optionsCollapse.lengedFontSize - }; - legend.itemWidth = optionsCollapse.lengedWidth; - console.log(legend); - },*/ // 图例颜色修改 setOptionsColor() { - const optionsCollapse = this.optionsSetup; - const customColor = optionsCollapse.customColor; + const optionsSetup = this.optionsSetup; + const customColor = optionsSetup.customColor; if (!customColor) return; const arrColor = []; for (let i = 0; i < customColor.length; i++) { @@ -377,16 +360,23 @@ export default { : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime); }, staticDataFn(val) { - const staticData = typeof val == "string" ? JSON.parse(val) : val; + const series = this.options.series; + let axis = []; + let bar = []; + let line = []; + for (const i in val) { + axis[i] = val[i].axis; + bar[i] = val[i].bar; + line[i] = val[i].line; + } // x轴 - this.options.xAxis.data = staticData.xAxis; + this.options.xAxis.data = axis; // series - const series = this.options.series; for (const i in series) { - for (const j in staticData.series) { - if (series[i].type == staticData.series[j].type) { - series[i].data = staticData.series[j].data; - } + if (series[i].type == "bar") { + series[i].data = bar; + } else { + series[i].data = line; } } }, diff --git a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue index d2088fe9..edd7587f 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue @@ -6,7 +6,7 @@ !--> @@ -21,7 +21,7 @@ import widgetVideo from "./widgetVideo.vue"; import WidgetIframe from "./widgetIframe.vue"; import widgetBarchart from "./bar/widgetBarchart.vue"; import widgetLinechart from "./line/widgetLinechart.vue"; -import widgetBarlinechart from "./widgetBarlinechart"; +import widgetBarlinechart from "./bar/widgetBarlinechart"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; import WidgetPiechart from "./widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; @@ -72,13 +72,15 @@ export default { type: String, value: { type: [Object], - default: () => {} + default: () => { + } } }, data() { return {}; }, - mounted() {}, + mounted() { + }, methods: {} }; diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue index 46f98a8b..840901b6 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue @@ -17,7 +17,7 @@ @focus="handleFocus" @blur="handleBlur" > - + @@ -33,7 +33,7 @@ import WidgetIframe from "./widgetIframe.vue"; import widgetBarchart from "./bar/widgetBarchart.vue"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; import widgetLinechart from "./line/widgetLinechart.vue"; -import widgetBarlinechart from "./widgetBarlinechart"; +import widgetBarlinechart from "./bar/widgetBarlinechart"; import WidgetPiechart from "./widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; import WidgetGauge from "./widgetGauge.vue"; @@ -89,7 +89,8 @@ export default { bigscreen: Object, value: { type: [Object], - default: () => {} + default: () => { + } }, step: Number }, @@ -119,11 +120,13 @@ export default { return this.value.position.zIndex || 1; } }, - mounted() {}, + mounted() { + }, methods: { - handleFocus({ index, left, top, width, height }) {}, - handleBlur({ index, left, top, width, height }) { - this.$emit("onActivated", { index, left, top, width, height }); + handleFocus({index, left, top, width, height}) { + }, + handleBlur({index, left, top, width, height}) { + this.$emit("onActivated", {index, left, top, width, height}); this.$refs.draggable.setActive(true); } } @@ -134,11 +137,13 @@ export default { .vue-draggalbe { position: absolute; } + .widget-active { cursor: move; border: 1px dashed #09f; background-color: rgba(115, 170, 229, 0.5); } + .avue-draggable { padding: 0 !important; } From f3d2ea765f9921f2d48f6ae94a63028d8def3aea Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 5 Nov 2021 17:10:19 +0800 Subject: [PATCH 04/37] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/{ => pie}/widgetPiechart.vue | 74 +++++++++---------- .../report/bigscreen/designer/widget/temp.vue | 2 +- .../bigscreen/designer/widget/widget.vue | 2 +- 3 files changed, 39 insertions(+), 39 deletions(-) rename report-ui/src/views/report/bigscreen/designer/widget/{ => pie}/widgetPiechart.vue (72%) diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetPiechart.vue b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiechart.vue similarity index 72% rename from report-ui/src/views/report/bigscreen/designer/widget/widgetPiechart.vue rename to report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiechart.vue index de26b6f1..1124a94c 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetPiechart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiechart.vue @@ -1,6 +1,6 @@ @@ -103,86 +103,86 @@ export default { }, // 标题设置 setOptionsTitle() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const title = {}; - title.show = optionsCollapse.isNoTitle; - title.text = optionsCollapse.titleText; - title.left = optionsCollapse.textAlign; + title.show = optionsSetup.isNoTitle; + title.text = optionsSetup.titleText; + title.left = optionsSetup.textAlign; title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight + color: optionsSetup.textColor, + fontSize: optionsSetup.textFontSize, + fontWeight: optionsSetup.textFontWeight }; - title.subtext = optionsCollapse.subText; + title.subtext = optionsSetup.subText; title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize + color: optionsSetup.subTextColor, + fontWeight: optionsSetup.subTextFontWeight, + fontSize: optionsSetup.subTextFontSize }; this.options.title = title; }, // 数值设定 setOptionsValue() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const series = this.options.series; - const numberValue = optionsCollapse.numberValue ? "{c}" : ""; - const percentage = optionsCollapse.percentage ? "({d})%" : ""; + const numberValue = optionsSetup.numberValue ? "{c}" : ""; + const percentage = optionsSetup.percentage ? "({d})%" : ""; const label = { - show: optionsCollapse.isShow, + show: optionsSetup.isShow, formatter: `{a|{b}:${numberValue} ${percentage}}`, rich: { a: { padding: [-30, 15, -20, 15], - color: optionsCollapse.subTextColor, - fontSize: optionsCollapse.fontSize, - fontWeight: optionsCollapse.fontWeight + color: optionsSetup.subTextColor, + fontSize: optionsSetup.fontSize, + fontWeight: optionsSetup.fontWeight } }, - fontSize: optionsCollapse.fontSize, + fontSize: optionsSetup.fontSize, - fontWeight: optionsCollapse.optionsCollapse + fontWeight: optionsSetup.optionsSetup }; for (const key in series) { if (series[key].type == "pie") { series[key].label = label; - series[key].labelLine = { show: optionsCollapse.isShow }; + series[key].labelLine = {show: optionsSetup.isShow}; } } }, // 提示语设置 tooltip setOptionsTooltip() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const tooltip = { trigger: "item", show: true, textStyle: { - color: optionsCollapse.lineColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lineColor, + fontSize: optionsSetup.fontSize } }; this.options.tooltip = tooltip; }, // 图例操作 legend setOptionsLegend() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const legend = this.options.legend; - legend.show = optionsCollapse.isShowLegend; - legend.left = optionsCollapse.lateralPosition == "left" ? 0 : "auto"; - legend.right = optionsCollapse.lateralPosition == "right" ? 0 : "auto"; - legend.top = optionsCollapse.longitudinalPosition == "top" ? 0 : "auto"; + legend.show = optionsSetup.isShowLegend; + legend.left = optionsSetup.lateralPosition == "left" ? 0 : "auto"; + legend.right = optionsSetup.lateralPosition == "right" ? 0 : "auto"; + legend.top = optionsSetup.longitudinalPosition == "top" ? 0 : "auto"; legend.bottom = - optionsCollapse.longitudinalPosition == "bottom" ? 0 : "auto"; - legend.orient = optionsCollapse.layoutFront; + optionsSetup.longitudinalPosition == "bottom" ? 0 : "auto"; + legend.orient = optionsSetup.layoutFront; legend.textStyle = { - color: optionsCollapse.lengedColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lengedColor, + fontSize: optionsSetup.fontSize }; - legend.itemWidth = optionsCollapse.lengedWidth; + legend.itemWidth = optionsSetup.lengedWidth; }, // 图例颜色修改 setOptionsColor() { - const optionsCollapse = this.optionsSetup; - const customColor = optionsCollapse.customColor; + const optionsSetup = this.optionsSetup; + const customColor = optionsSetup.customColor; if (!customColor) return; const arrColor = []; for (let i = 0; i < customColor.length; i++) { diff --git a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue index edd7587f..b0efa8bd 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue @@ -23,7 +23,7 @@ import widgetBarchart from "./bar/widgetBarchart.vue"; import widgetLinechart from "./line/widgetLinechart.vue"; import widgetBarlinechart from "./bar/widgetBarlinechart"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; -import WidgetPiechart from "./widgetPiechart.vue"; +import WidgetPiechart from "./pie/widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; import WidgetGauge from "./widgetGauge.vue"; import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose"; diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue index 840901b6..00a827c0 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue @@ -34,7 +34,7 @@ import widgetBarchart from "./bar/widgetBarchart.vue"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; import widgetLinechart from "./line/widgetLinechart.vue"; import widgetBarlinechart from "./bar/widgetBarlinechart"; -import WidgetPiechart from "./widgetPiechart.vue"; +import WidgetPiechart from "./pie/widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; import WidgetGauge from "./widgetGauge.vue"; import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose"; From 5f1c9c414a46c327c685cd4decd9057668f8e7bd Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 10:45:53 +0800 Subject: [PATCH 05/37] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + doc/docs/guide/dataset.md | 42 ++++++++++++++++++++++------- doc/docs/picture/dateset/img_3.png | Bin 0 -> 33061 bytes doc/docs/picture/dateset/img_4.png | Bin 0 -> 26687 bytes 4 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 doc/docs/picture/dateset/img_3.png create mode 100644 doc/docs/picture/dateset/img_4.png diff --git a/README.md b/README.md index 1915e59f..1b352bad 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,7 @@ sql文件的目录在:report-core --> src --> main --> resources -- > db.migra - http数据源调整 - 大屏工具栏使用二级菜单显示 - Execl报表功能增加与bug修复 +- 使用vue3 + ts ## 已知问题 diff --git a/doc/docs/guide/dataset.md b/doc/docs/guide/dataset.md index 8e9cba2e..50a430b4 100644 --- a/doc/docs/guide/dataset.md +++ b/doc/docs/guide/dataset.md @@ -1,11 +1,35 @@ -## Mysql数据集 -在数据源处添加了mysql的数据源后,即可使用。 -![img_1.png](../picture/dateset/img_1.png) -**注**:目前,查询参数和数据转化功能待补全中,建议等完善了再使用。 +## 常见数据集 -## ES数据集 -**注**:es是通过调用xpack-sql,注意写法 -![es.png](../picture/dateset/img.png) +### Mysql数据集 -## Kudu数据集 -![kudu.png](../picture/dateset/img_2.png) \ No newline at end of file +在数据源处添加了mysql的数据源后,即可使用。
+![img_1.png](../picture/dateset/img_1.png)
+ +### ES数据集 + +**注**:es是通过调用xpack-sql,注意写法
+![es.png](../picture/dateset/img.png)
+ +### Kudu数据集 + +![kudu.png](../picture/dateset/img_2.png)
+ +## 功能栏 + +**可以看在线环境,有示例参考**
+ +### 查询参数 + +![img3](../picture/dateset/img_3.png)
+注意参数名要和sql(请求体)中变量名保持一致,sql(请求体)中的变量用 ${} 表示
+高级规则是用js进行数据装换。 + +### 数据转换 + +#### js脚本 +**注**:这里的JS是java的scriptengine执行的,很多es6的语法不支持
+![img4](../picture/dateset/img_4.png)
+入参是data,返回值也必须是data,中间是JS的处理过程,注意入参返回都是List,记得保存。
+ +#### 字典项 +场景有限,待补充。 diff --git a/doc/docs/picture/dateset/img_3.png b/doc/docs/picture/dateset/img_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ebced469400e42ac78f4e9bb419fd5dfc55d11d6 GIT binary patch literal 33061 zcmeFZcUaTew=c}-D2^zM9i$DSA}x{LK}A4~kO2e)0w@R=swDK5u_9fhgqkQ2IwFP^ zLQy&df+PY`0#ZT<9YPB&@7I~}cYgPM&Ux>9?>+aN^T*-&K0Hs7UDjUTwO9G9wRiaM zMg~U@pFPaQ#dY-Njq4^{TtCyexb}THv=8{^{UQ~_#q|f*&Ffe1_}k9W+~3Ps1c(NP ztcQK$cRQYYOVlILv`)@z^2~A5?3Wq8UWu`LblhS8PbZ0;YjKxjjuC3wzR(*Ig{628 zY6uM_ypNjy*$bBt<1fiL?D1~jF=e5Tsy7VyRrlFvKiwyErNWl0aaf5pXX!lOtAGz$ zOc|l#$%_`yj8qyG_;dB?-hys)5+=`Jm!n)Ud#h;eT_%{_jtyRh?lh^d0hDv8WDW+#~3lEeZ3+;O0Q9xA3Uqu|Fk!cZH;nhu9S%m1r|B<{=dmkaevP!8O$;O}0N zKAJx5^;@N)vqok=TE*l}ntUJe`>;bYggbu@4|G7%<+~@reh}x9_8-^W{UX|yHKVf=$z8uS!WWX0ipd$?AaG-Yx=>8* z>wm8Ss;u*fagr0ZRP?oMqe{8k4)P!5OBy{E^68RQ5v6 zrhe~*M%@xFEVe@E2e)X0S3ri3Wt%GwVZFw^KfnZdCmu`6wO}PzaKBpX+`H)9?=6nG z#OS;uc`2vWR#`)fC__&oD0Z3aTz#wlY3OJfQ!+-#EAcOWxfsm0b5@f0hL?3v+c^p} zBBe<~dy6f)J5cGfIAbcnuLPdrsJURC2tnJ}z-Z;?q%6*x{YCQ~md`Fq9m%l^R@)8w)}-58O;E(Lq6D3_ zL+hZRc}(f;<;9AP&_K&WbC?73m=;*F*u;*D+667C;s;n*YWHpu*x6^v{I9p2Ur~7L z?Q9r@)YpwuYirIYy^M6^EtsY*S!gI^;npU2mJuDvHr=H! zv;P*0>KjtdJ<-o7chKooD{NZ+uC(5#^e)PLZ|(`wBYw$MfRe34I^rjD^+_z;a!qeO z8KGnjYqg#l3$}PRwt%QM{ab8j>ha!=862x5%G2MMqY0 z;~*?OJZTd7)~jzdazjUmIzbpe`7i~-iWQ?9thM9JgsaRgvFM_|$8-NOjex^e&JyIF zzygk!A756obKc$>ueY&Gh8IdB9NJaKq0r6bed19QpXYH9fVr|G5 zz(#k)yPVR2CY%gmHS+n? zc@L~rsy%3dQ|t%}Pw9wr&!b@O66h`^L;3H6U$shVNv&cF{>^_@a6n1JdCCTpMP+DY3#gsq?8%c+qwK&TO ztK5MLJVesJ3LLAnjZK6t6#o6P4Dz}rDL0;q=@An?n=>ey9BjrmYmWgD2kHBEMatGo zruJv2`dh|99B7p2UP4)_h#xLH)m&9pf;O#f{zKax16FZX?Q+8d?Vx~rpe{b0IiDJ~ zv6no)+EyiVB5YyHZDY=nj9aEto<~Ms@J7NlZ644xbu}&6R)5oROZaVH7mm<@M;o-^ z7HwA2^eqL>kW!EpQQ^l7s4jQnlo0Tp?JYLyP2hdz^ObN9%x;0{+81_r%`1<(ADXro zubc!SDPYymNgFK!aU!#^%pm(N%NYn~rwbZF!1@X<9yqb2^bAjLF(MczW zV8g$caR)ni7o_z+JE8)=Iav{+Vz-&05z@6?EeFz+?yKh_BsgLWbE!FAr>`m>l0@& zb1+{a8)Uq3oWHOnm|lq0KykFNY8)mKYcb<5wO09M)?~DhDDL2xmlabVl^+ui8+=k$ znN6Dl_R~^%Nl0y7Y$WurLB=k37~S~v+l6N=yWnqNk)4(Od?9-I6Zv08O-djkP(|7= zFVx+h%k_G_hFCvZsAIvg`MC%$h|M{ls6eTxZU%W2JAPF~`I66(#4X#I$3D3af{*xo zJ?Bs`A%?E_HYd@|-h6dy=6Jrt7t{N}3+&DS=UcrMQfswe_Rku%Z}QK)*K4`csta=e z)T-mTrL#61 z>{)Ho8(tWyEh}YK?KP8BnbVqc!P`0VR`=baHWS}drzvv2 zaUJ4N_1m}-=mZkyV`QckwD#)McWMTkVX3~9vPk;VE7chr3y4;1XN(kc^Y?{q zT1Sv;XSx*a65m-;(>{xC1xY7s|4Xy&8fS-a+#>r4t53kA-qgmDAR8?o`S2qtF}ZRk zHEY6)QH`!b9|}t?luU|v``}aljW;&xwrQ2QYIeJY^+~*++5E!LxCL2JpWldwd6@iJ zKIsN&?V9es+*yQ``x54Fgp^wF-mP%~W~6X2li7x0;wxA|g>_aJ4i(UE!&kRMx8uw? z7cxr?7`oTDR2n7+h&nxnA!eZB7Jjzr$|ioRE#I0RDhx;7Z&q(=D7mC9ZtXR!`syDn zzoWjYv-IRlb{40x-v+&Bh%#5mc6g}1kb5MBce=8M?#|R#|7LD5>3wo<4aE^;ch902 z8|JYmb!&*(5y@8OoIhMF?u!XKJgY#I<&y(Iw+Ui=*63(emVDv!1XKskrPAdYVRe>I zbLlgfv+@)i(5_n&>QewP%T!5su%7Zs3;|dFJ=@{hpqzt>%tl{j?JnO67LHMUFGIrh zwwg$j-CJyW{hj3Pu9a`2TQi??Cq0Mu(1oMtDf?p|!>T3fxxICgVVleM)qa(UCG-kJ zE$nw7uf9_K)qR*JcgsYxg%7+cyH_m4_^}H9~Udda9gp2WwkvD z^?8`xf+N8W7=MJX*DW>O3oUN6fE9#&-iiHbt5NVN$NdDwp$|O}zwDDM{^7-U@!XU! zn0lgq7(6O@gp1OH8oMVKbKT-3Yin1B!@@|gcYYlNHe^L z(E`2i5WX0Q1itvB!?5@HXcdg=0}EEGm-4Q4Z3^A*B_97Um3J#Z&=;-SpQnCsY%^9l z;Cw1Kiq!IC`FcKOp-*^Czj;%>- zt$k)!<|p1SKBV;)O7$s+eY{)ffF zMzfIbs@LW%h3pHhoASA%u-%O=S_jSmn7vGi46C-9^P=r8L=0>@rMy9CT5oPYppOhH zw8_Ha9k+v?l?Hp(Jk6cBoocdM*Ydb8zyLCIUU<}qtbJioqz`cY7c}Ghasz*Hz2xur#&}*z4c&tMbE|jzPpB!?2eN~` zydc_S-){7aubc7b&{N$fshQQD=O1Lv@UO~!?zxD7k9Za6;5Eyv_@j``7=An*W+ht? z_)B3s&V^WxBq;J806e4`ap-8UGj~LrCfi-bcPJhYxl0oA|G*kB6?xTkq!*jmE2a!q zLtXM++len?rxfr6><+T0nsY5)~@jCfwb;MeeCGq&hQo=Ik;l16!Qn0>r056 z_F4TKk-85=dW%B^?@qlZcCZIHdU3o+ua}xioMN{06uM}VOMrz<$9)RE(N$6@B*Z`~ zhq$KGDOD=(CJeiM8q+*)w^F^^Vgkmc(CwKptC2K|-*{(BFVffNI7t;q?cgbg{Jj-$ zy}2ROl(MR^sBUezsP5K!Z?@VXDq6^Wg}1KAzEtjOmxiZ|nBnap@4byC8Ijg~q-A;? zS`P4jrQtfkQxlxEb-v;C(Gkvq&d!A5g@s$6z=k(Z{c?F~=NpQ1BlWfY{nVAX*bphF zw%A+99Dxy59S3tU2gPaC+Q1PDntica?{&=h6CHeIJQVs;5>8|~HHeh#faC^_rx)$Hll-iuG@9ua=mbZz{`>oduH z5`1ds?3%sAPxtOdxxHP2j&pUp{W_^;M+pSQ{Xtx+VdyieGrplVxI_ z<}xgLn#91OUPcQX7XyqKuL_k@`Djmkk$I_4ct#fa)#ie&UchfLj0k3~vz7?yzUISC5L@4>ShWe^ zb1`4!aO%S9r$G+hnYH5tVv;>_CE`q%(iR!laxvycaGM_B5$Q;c?wHH&!Ox{s>6H@zzwlL)P(UZbSL9Zd$K zQdm-2zt>c+I$K%Yj>0u>6|T855X=XmSKUSgSo6uY3n8T%t(V2;i~AQj?1fl>!`+R0H?cmzHW+h`{BkBX!q|YF$Nvl_ zw{2@80A}S~OcK(~z~k*un)RHGBnsB+TBdsDi@Pa`9AQ69IJLOc9FXv{h@F_e{c0z_ zD^jjn`=mJgNi@<}=mDwmmUdI?dl?YEePgQBO8a!{z6s)Kuk6Syv#3L7>dd@_eJ#}N zn#lZ%EhiEyCpN8Vm+XQFuWov=J?f6}6d@ekQsVJYZqi#{HRsUyw%7>vM3rb^oNF`D zX}?I|^cY;R))ky;q|3CS{+^oCj|U;X#(e5K>Q$ESo8owi7$B6ol2C|F2X~QTC6~Vz z-R`HaI>x+$kgg=}-4>H=co3j3=UC(69d+FTgXsKe?eQ*p5Ja4-fH|d)L|q;zR@4e( zARZsPiq!jA7W*#vUY$)bwER)I(L4;)wTO|JVu&HjA{(!bWJ&0OqKWp&af@AHaluQL zHUaf9Y+{@|2E^y%;m{7VB%6yTThRjqC4{6>?g`UV1%g`Hhq z!2~T9KXDYg0$tR}1po!RNy<#uZ!v`BlXMMBA?Jyu437l9aFrL_j5wtV=g>QeHr8tl z)ZWK!&L%lFc=ZH|jkbeua)#iyw5Z3!=J}&OwZtlye${*xVf;;rWp_o=uO%LzCt%?Y z)8eVNDCxwp!wbZF-?pU2mm}fnh@DAn21HFZ)9P8b2M9o4sy)^puOXQGS#PXu-P2t4 zK=U9=5X~N7@=>}re~_cl&nBLTbj5(Rl!&jDg?CNtHSJ*4$Jq+0ztw&n@(8kEudrt4>(*sn z+@#&Vt)}%tpW*zpB_6@75H99MTtYBEjaS9T%CIwji)E}_)e-G-*yQIfmrlZdQq|%> z-;IxG7Rii?ZK=+^JI+1euSNnkUqyukV-)HC$oCfyOsLDAR?<%0YrDY#qbss!1cwUJ zAQRDI+GnDe@oYg|p)AvDF+MSktIPqEgRqC~dBGeJ!nQB~<26 zh#5rfQ*MEJqP3hxo^G`M?=|l0jn@`ApHq~OaCQ_ABlsSNPn_;tlryS9+{gY1v(lcaV0WwL zM}HyHDUsAGiw}>Tfr8Wp1tyZJLPFQYf<$^{c7|o0`wJNioI@!)EI>D^e0*y}@kRdW zL?n}WfurXl2X1wFBXZ*=5a3=R-r7j6x+Y+t%a$8^P*FBBOe$w_>J<^pr+7OoY4N9c zHk;B`$o6d-JXC!mjG1_FhX1{#0SQN&b&Acc*q(EF2?V_j_eXnH!k8qfmh*CXcQ-#G zJ|9oPr<+8CP13Ii%PP2^{jGL>9`$Qv^jl*xmVJV~5)9vAtOsxSfBB7e~1fBeB& zCt$(VZaYvbG1B^!l@hJz_ncLD8Pbx_%K4 zT{CgM@g2+9(&op0hf+3zr-CE6$*BbsMSme6|1!c~Ac$bxdJ-@(l-LCT7A4hf(mqeW z2nbyn5R>E&Uf9`{6bs%OW+bX(ZtcphslW9O#Ax4tC(L3oV~)G=$4ayor?QqB3+Ph9s7!Lu`3 zhSu&V-}(pS!^QRW*NOSJ?Ks)@ST3%QkD@BW`m8`&s6C$knmM|2_ejW!iXCc=$1b?L zcEffXQlh@Q$Cu4yc6)Ds;uh^t$YomWd_l5mnZ9Nc@3z=wd5Ed9uihHFf_$Bk9rhKb zl{HFxw~;N^#wEwc#JWuPQnCjqop5`r8>wnq*)@I#wtwN`I@0PN^styt5t=`T9@&cV z(@!oMx6ebs6OU6n)zCSLY4YwWRZ|^u@;b%^3vR~DaKv#CROA!$4P@fahfNivYr9f)o~P?^s&ywbE74k?a?-rEk~oiQXQ?|)>-O% zzayiwJ4?U0R+@~~@2ef_QYpSs!vk&i9e@G|rfSQOuB$8>qzSQXAE}hr0_)q>Wg1tPf~EMmW96U_WzY^*WPj;$!Dj zb}eAuJD-7|xaAWhwspkY5|N>)xxq=^8rt=3rXB9Db8>@-u4aaI%0n~6iy1)^4}#W= zZ&bKxpvTA7zQmM;Cw2KEe8aD5`BY3kr~bq>STW_Fw!b_HBGIf=$sQc!A8&Omm2mFg zNa`P+f}Q;(H^^Q=B3*k-VbsUh*VseltlolE1(3|jENZ*VBkZfAb{XDkMSpZ$@O?o# z)cz@>Fop=1*kv#Hjbd_g75V+lmM?;JF8Y?Fk_$@%)qrr)yd7y$lm4ZNx&GngV1|ju zJ9%XW!)lZ9pxsv*FeGaqO(7Z;&13UdsjuUIi1m{hIwZr{`(&vmD9*Cp6)SD?cYlZpjL-`|~qrQ*F)kMo5;!(T?o zc$e*-KR(DD=zSljQVk6ZZ9i2*3q}NTE|m8k`5xDQ-+uw(P0=o6Y%v}ryqi9GyI0FD z)oiw6NvTEori#g>Xky1JbMn%+IjLcPHhW}cp!@WhU;MDr6&$wZR`h8?rfTnKxtoRo z*3y_@SDfdsC+Dnb5$aZUt&;W=7wDjYpeNPtDWUAFive#`0zXrc`vt!*7Q>({I3P9K z_OCkj8m5(Y?q_r|ZjgH0z~{$5J?151z3t#;^?TK$FQbH|f1gTu`6SLHskQ}{J0<#4 z(^_R^-9(0$hjQ&q*?sZ%dUvEn6Q|S$09*qk@x)FANQ)Rb$;oT2$7pnC3)rXhs<-lV z3KVT;W?D2IDg9WrT7ATgJuo4;Vgsae+>H2(R1mgMXSXToyg00O>d4@Fc;> zo#FJ!o%8oa?zT>AwhYUC1}{d3Go0;qW_eeMr^LhEZv`ELX_4u~OGz;UL zghLWu;@!W3vo!@%p!5t7`Arfj;62N=thB4}w=*|azRcaWQ9+ATrGF*&{7O%E-oS#3 zt?*l~XHGS5Kv=G^&Wlr& z$zKirG<#Yww}?7lR>3S!$A*X;0|$(~2DF#&vt{KliWMkhPBfTdyxl&aVnkIXcK#w4 z6Z_zJS#YQ~mR zl=S=K#&JZWZt@%r*`bTn5voJ=lnfs*Gk*zIi_E8hg%b#0TKk)KUH+iCsZbXUPR~8ID>C_IKIb$pA8$ z14+gVshMj-iz>`)Lr<5KVyaPrZtV6NAP>RyZQT3sRYkA9K5>IrA>g4%)_Oc^^bbOy zZ>r){cbq&}YM*X-=iO@p_r@hV9QE^5d(_wgE}?a+cj`ISS%I7K24A7o%nJpbH;#3V zlhOlT_>ZxJ;e>Q5D?W*S4N(U3Q<(7;D2Gl3(*jzT~`0^ID zJDo5)NcOX&Ciu@F)Xbb9sJd^@!BXHtvO)quF~OAVS66Gfm(t85xoz8fn%jfnX#ccn z-ce4&Vzu%V*bqqEfs73JJ&~6Ha|}4$+c%q%Z%8_x&2Q+{+PIC~U6sM28Rzlxrh09i zk+NC$QXqw^cXK}XlEV2Tv*yfoMeGbAV2gaPN$kuYWZNaZ7*=zAP(DCoTpLI&1HR2mM`%GHY?x zCReWF_rN3nvFX?UdB)ZK6Ha4c=qIk}Vi8DJNGqQWJA*U#e0g!SdWV48ZVeqnv4c31 zL{R;?-EF_n9lgG5&l$q2Fq=&hb>oR8)23^`rbh!=)ZazpeGNm34shKg z1j;CFRDw7ui<@sxjP5l#=b||M5*+X9I7Gk0UJsR8k78}3-V%cL1!^W>v)B-og zmp&0XnY%|mfs((_ExMP_(Rxnt-Y(VIoKsvD-JN7njsU1`=tWxM-n1?za*s}8scE?ph zsE|5l8b*V->{-7o$f2vCSoI-I;<61gp6n!N6ibD(WVh`K_Ma55=UCS((Kfk9 zw~FB%-8w6A5+ZAP&L~o4Q#$9HDChI&_O{N_Gl{)>I{{2FtbKLffczQI&SpDK9LQw9 z8G-wDjUk!R*hjRKT*KLr*xkCVx~p1y1r|1Seh=rxOBg96>~{JV*S^Zj6E^I5= zx$ZoWK?r%%TC>_owN+33O?3*E+BdJ&uS3Kf=DMs(@IL<+cV1{QJ6ua@SD4-Y%gq@O zaE2cB%x)Sy!+&bDc+vWsTI_D30@U9{EAarZ8-el&N*oXc|GuawxR!kaueznB%b;Ly zN`gQEA%k^ARpTaKJwO@ypK71a=@_%!yF*5U$Kp9zSPdIpmA~NuX7LsuB%svLb1l8@0VebGrA+OyL1)E2t;NCOIS`%yd z=c6kTcX4_piY4u@m2MaMjhQt;Mz*u=wmlE$xD$>7K1uUC(YkiL$tGAwmwSo8&2m*0s_HcKS8qkWYh*B$kErL0H z94uA)@l4H~eij*|&gP0He!fvis16fgA2!o43-I}5Z9b@E!$?9b10gZXJ+QiqkMo-ngoGN`ZbIn^uVP;PzFb}3~ z(-15SlBw|)vt6)mly3rc;b`**xyo*Xgu{IfrmO(qXky0k(48 zo@&&0q4!i2lO+B0==hB9k%}aGDh#Y?H)zxT+^mK6XSsn}DMp}t1peakBaq=b`9f0v zthSHuDOXD%;jtm(_^g(>dZB+>L>n#AG7cLgoF$x4jZKGa*nJpkw+KPP8IRc=Lp({7 zlz~;L2MgV}NQ-+X2;Q7qBC_bD{!@MvAg<590c=)Ihv4Nwn5r3u-BQCDSxr~<6uVDp z;MA^j6?&K`9R0%e9cii!VacWA1FZVcjgEFvI&Au5MT(|mUm*;1$)C=gCrYR&`+wp9`+?O5okv6P_j5_yMEmEq8*%YN+ zv%*Kgc2EDIT4@xTTffUBl(LgS5qe)ZS+f+(e853FP579N{uWJd>TC0B#{L;y%2VrU zXo6KO^~l&J0=}C;@pzS1xQ{W%lM?xQsIJg?!}3>Q73WV4XQn8sRO`@sZ{O`hgtDE( z4^>=+wb10#Ro^1fjx*9AE>Ovf;(FI={{tO~Kp+RokQf>Wr|w6>y*m6pRm^0&a=kG| zFmJf2qNhsi-@Qxd0x~7hUK)DkZJu$<=id4t;pLObBU-ck_F|@1!n?+b4vo7)# zLqSL$y+AKb*?^&TpZF8>LABoCS@QgWibFm@>lsVw+WivIuE=kBkd&cQ6~>T^O1e+l8j| z0cLXmRhRI1j_B_rzHZmb!}UJsyQY*vCyC(;0Jg2MDJGMZha%`cH9+Es0J*Js4J3O4 z!G0x$_AL|?Ckl#%QO-aAvucMTUHhG(`&$bzm|d_^@8KfzMMa`MNb8_(@O=}&VfW2| zsUO#+Q^eE3Hb9-^i<-`r?qpf)kPP*nrmqi37CDhWK9mhtgTL_Bz{uJ5d`HbdIv})p z26!H{KFIXsg^HTF$D86kN9wjLP_k12kJfF5rJaVH2Lir10-K}14c90cit`->@5&&i zzo_2@$%6KSj;_Ffz}pbe6K@f4fzE;g1pKg5e)X|Zb?2`(PLp5L&lh%xU2d>7qa~k3 z6lf~d=cr&VV6?P)h@&AvesC`ftN5DN$0SK@snD`1G_XOYm>^b!UVUNN@3qvq)HWO! z*Q#+W?(S1ybx$WLm~)#M$-6C3ZM#&x79gaCTJnFb9>W90xC#lJ#D|9?{DuQA_Q_^? z1_b&Juqmq%wtzaI$EPpvBSC^EE;MztvMDQ34}tEvt9Jkf=4kir<9ZL%O0qxtmk{V5 zpPl+xu;N(g=#=Jd6bjNP95C=3OH4-~n+*BFhuB4MTOb?G9%|p?n3Z?7n#Z_Z|In30E!!!3vd1I z$ZU&jhpc_MUyE2rB^2#|Z;G%e3TT}THQ>A8A>`;r*(_OeEPrja?p@VhEt6iu*mCao zbL*5AT{{{Nsat*#h*+79l}+E9_DqK%+Fyscjn2_wE2Reg)NSI}G4yS_Z{nwA?AaBA z>A5wNdi^_{4m0^$)9kRa8l|uWHfmzsbGld0*=AYLgChvcvezPBuV^#&9FqL5vB8M< zJ@Q|im3126-joL!Y3A1(>MPz47m(==(Zu`4QqeZ@{8ZcUAajAu&*_bMdw|AZAS9M_&l)DwKIwV|S)ctYw zs1vYdw5X5Q4kp!KAC#dz_p9jT>g&L9KO_K_M7(=brKEZ%Xg1#_qi^_bx6TcQX)Mz~ zHqFYvzkyocxS-9|dh-Vr3ds@~{F4cA=l5x01$fxj7Zux3z)i(TaTDQlf+r%soh5}+ zWwyJ^vgu8oTKc^Z!+w{&>}CY0sC`GE-m|XZ%uF#W{dbv3T+sf(vcYX#ykxW(ZnF)$B|k= zCR<^2TR~#o^Q-RNLWbQmq6fMD?%=3jgb%wNaAa#gvm=?*k2`I(+B?$&N7O99R`G=A zgp+TCfeqINL_&V4pN=Fza&IEE?_@|K;Ua@Zo@YLJYM;+&X{aq-9J%aQk;jzZ*f-=2 zr~7X_lyJ`B0k=@koKEhqxf@@rqv0GK@jSt`e1q}&)DVi|fBGpk9e*Yb0~#f!pan!w zW)UjjfM6{`?hV(`rBVZ#!%jT<4EUEJ;lof_O}oHG@s-9%9`TKkV;-CX@nPC_R>j>i zN3y@F30CDcPnD-$469YGzGv(@MQOE5tmG)Z(VmdRrvYA0vU;r+Hn+OA2UeZU$Q>e7 zE-rfRU)xbVoBjMG@uQns+AJI2MXbz^9e<^z!}to>I6&I`eX4<5F{rk3&Y`v&Z4R|s z9UItTy{mg*xY9Uj^2Yri{CKPx5Gb&yP?w9T`H71BgZj2V_)SV{*7m`ifZOTvj0UfH z@3}PYChDBJph~V_^Cd$3z(eFw=tRIp@)v`?J#jw5(=d5k1-+2*b0odbz51l8_uyGr;Gu7U_C2 zZ91B&pF)k?4^HQ@Oog18>~^FQvnIvw%By2T(B(C$URVF9xyQM-KC7i}7YFG_r66Z* zS_RjQB>L));uS9#b&-{9__slAI1)M1Ljny7Xh{iSj=y&rMRXb?qZklpV}*^c>Lt8A zEDf98YarU4Zo3Wjk|}r6@v^&x%)2#K?E}zy8MPFJ zkj-)87M;>n)0q#yWTW#n`=@2^pEWhQOj_{0ULKsKYLNlEvwYzCL;d3DB)$Pus}-Sa zo3d^_yN#p5)OGw+cp%b9W>Nci=eo>ik2h@4-C@>-&*Fdpi6_MK4W?cO?eUHQEoKo7 z-lDp(zTXaLA-zDd)n4f%!}mZo6&I1)U`y_YF+a?vQ&vvBPg(b`c5)du2<<TyENBBn#_6f-QReysEf|!{ z?lU|k+mDuyb!IB1#6upp`~#`DH!D&*UH_=YyM4Mw&vnYg*X*g59q7PWi68I%vAZ>< z1N3^az^Cq~w&u5=FgiMCDS8J(2Zdkh3|(FJIlrOhWp=P8n5OMU`S|ao zEB*^h#s4G}{7)2t|5mX7K8EVQh3|i-tnUAyUhbcZ_<)o3cI*xd9lyQqMRq3}irua; zae12PTUds~*%Xb;0t!ZKc8a2CZvR)fuy7;~VW?ho^#Gzc&OaDLL_L^bb&6U9lsrDa*Y zray7LIW;?F5gP`j}?y*}N$@u*$S?FH0k1Gc-$3$aDrp0d0o zJD&?R6y2=Q$pF1g5ZSA#oF_`}rg`K(&kf5)sn~ZJdT-GD?6x8GJD+v=YB{^2{`0OV zS;Lz^!MWXL!x`HZiYuj_-uYKfDRr;NS&Q*uaSKxb;(QXlwb9ZE7lZ%86r+VPByX-= zhhtWq1KrfRQ~O4*_uFi|XrDWk2v&A~e0RQv96-KRv!vL_3SD3?uXt+vKnQuOOV5WC z40Ze#6qfT4r0g&Q2ltNDv_o86Ep8-&;`5J-ocX8HuU(9i<1PP~BPU78zPIu>BKU>) zZskd(>Ys~7O|(2nvf#vWK6qC66cNHN;;T+sD((uZT-4*2P9%8ixkT%*GC!n0CWZHA z7JN*?kE#QN1&}7Qg$sAXp~2^#w`eTZC`hy@S_l5p+sI0~N!g)G-!k26#$z&6tg5A* z`(194aXdOFr?r`Hi|WIHJbqb4It1dCB!8gc4#~(u-}|;PJ_3ESqmXHQOlHDYrCguh znnU+qjHaVa5&YVzN-D;Q`?E|onV8SS<(9M#9b(V)2R56M&{e?XEbG)s(##B_&cpUB zUyQxH@7hxQe(GXsXXE|AQ}9HS!-kcn=WLQ8;)>>vgU78iPWDMzw9Xy^&M5SdNm`D0>$ zrAa@+zBcOP_TWS<%J;cTono1$s|99q4ppZ(ZtCO7>xrw$JFj)#;KOqXkyxiL!vyG# z{zF&>a1PPJdtn&Bd9CmiobKunlgXdK}tA%QgV$-^cZb+zm@#Ly8Z`a;8U+)|M6f|C!4Jo!@Z77e9eIfeETb4|}3p)sQYWo8q^_K1^KQ9s4B!SAwl&7mDPiv@QP6lq3R6^)Ww*g%?Vt0l3T z&4Z(93PI11g14e0>)QhFx_V^Zc;ToAR2=#PFU_K*LFm=F5L|(X^=_~SIg_Rk%H9Y? zGzlX?wL$9|)s;X!FuJol^&J^k+Te)kEXliLG?xN#kWP$!4HPEaD=(d-NQs(Xm0JZ+ ztsPRet8nubt99n3i|@Y5cCmd`@_8N%PbnC()QB1*ke_f|Pxz*6e&_ zYs5il_ZI<}6}PPf>yg zkTJyXCa*|22{s5^SCYE9I7-}9AHjn5{8DaYtHl^iF)M>JV}pIGJ8SZSl{{ewVMdm% zscDxkY44Qx()(S;0m^$L?go&Y5;6d%aje|3NBha49+jFj3vDSVA!uE=e+?S% z1aM2fIu|vOIgD8A5TJC}1@v~~)}SS&9r4Fh#VM`(NwBl_)Z(@=_>0+hLArHS>P0B? zfG)t$a5*SPzy?kCY%&uhNUU@*(6B73@6u#^DNmNCz}0%xx_GTuqG$CnXVd=r1ixLw zJNlnVP7LKyoo!EtbC!t$GEe%7E9=DRnNlc_W+{7cTzw>Hu~voRsRT`gP<8EJ5E=DP z(ioZ_lvH|X_(*@M6z-@ACQn8MA^>xs(wS=5*6=<@LfP$!(pM`d9=B_L$RQ${y8Mb! zecpf3R{@-59X~wsVZ4Subb7Z$_Lz7UVnqhU55F&TloPm)ZAv&Zo1;3I@xe*a26>{^ z7x?CmSgyteI!@5DM$&}t(_bq_`QrNhB$+7!Buk$Zs062lWUY}k7H>n(5~RCRkThRi zi}UUBFJJVNjcoL@yGt%*I@z*T!~*QCzICy%F9JC`oE|1dJX*+_Y&ml3L{`DN`V%D; zz-mVgBq5p2AHN%Iz>*&V+=F)9Q~YI|CI?zgw+Z^+K86v*)@R7 z0@1$4p1v^Q%y7XRufHAv!I0Nt(-yjb?_gM2zu63~-8)*JX8Q1aui^#6(T(KLn15sL zbtHU;-!nMPdslQyYjEqm?!UH*PF!W}?E0pHQA!J)IQxv!ZruN`&kj@uurfV4PyHrU z2W9J9N!L=V?w_sv^Ff#PNC-R$RVtgGq@;NU1g(+uy*d=@%+FTF`i`$YoNeUoX*x=+ z`s;~`)^7iGweYRG7`jETrWY)jNGMCQ+SX{;dT;%&5NO>79B=_HHzMKas8jeo&cnd6 zHG$Zw2DLipZPchY#77Q!c)p*rkVZ);du#H7(;321=t>g#Fn$ENx3JKI*gG^Ic*3~{ zxU%4e``IpGL-Pe5IL4*FtzIbUG-6V;MC7fU%EH_Ax`)HTixG>G*#@{)eU-e^i6WRG zEm47vTMG5Nd?UvqBg)Srq5Q}R5dIM!ofuo#6T`#T5YHZhVF+7u{|rrB`?k!+XjLU}AeI`Yi1b6p4icUshoXs+Dt-vK_X`*MOFG3bZR%$36y-pT zP6NdxUrlOVn~u;0f8U#nx?O)Z6{dbz`gOajlLPgnjy>61=;r=$#Wyz%;yGLIHnIho zhY+ke>ITf~Zg`xRN@)`^I`|N=Ax7B?=k~!L+oqf3@jARR$#18=GEvm*PH)S0Ynxyt zV`KyC5$d|95K03aLD}43f8TZD;k*D5f_EoEcQW?;#pXBfg(iJ;+NNX9_!$Az);$~# zzMBV}B|1fXG)KzEPTC&hP8pgKwXg6h6HV2&#H6%ox!gxbvXLs*Ubl2dsozy@3`B@G zDH?pHr62JvtyP~+?C-)WXqG-xUGQ$4;T>4JNUmjq8F8=+`BKWD(IZQ^uTr7C_;JwUPySl<@WKiH$nO9kh)m3(}AZI1wg{kqo^ zn-L8=n;|h36=a9}q7oAsp{)iK$#|Em3MF!v>g;4uOI)X2iVSJ;=a5kmT8w{V^R2go z?HlU{1NClN5)u9eVD>Jpf}rip%W}zHb*qX^{Yk$CFccX$`amPCWqpQRTS+~QJS1MM zEzhZOyybeyYa^)N1hsGNHBfEkEoa@4cNjMjvgfm;{!}llOYrB*+@pfaslrN$koAoj zr>S^p1f6awI_d9J@pdvM=G{n*oi$ngSX~Ag*UfKb^TQd?UdS^F&)gcF@ zmYv5%Cwv)gzf&*VoX)>`#lXLsJ2)WG&SZ3;j9GlN9n_7R*ByI)0pQt-77fSz>)N4U^S-c2TtE_`u>Q`kE`ukQ8wT1t%O$T^|aNh z$gN_p)G{^;-N44)xsZ(KeTtDs+Kw(v)ZbAk9fvKfX)*+6()IPivg_37c?GLUr#Vjz z<7HHq^4#mQ21xJHXNQOEZ*M6$8y>A=I;L%t&kR=2Rv0;XM7nzAO60|{*Q6-)u!`%A z!5+`NP@YBy>4aRzULqRS>O20CFG0iH%N)iNfpJ-z^NV3&W1<1U$_gE?_S_6asukBy zx$70t702%tADD7v+&jJ)(U>xy+L(J$qO94fLJIl*;;LAMLbg#+I9mnCi8%5yLCK~~ zd!Nh8NzZf&#D8(-bcl@k#_lQGi97HPkwvced^52rK1j$bAbbleMcz>`6CcbTPP)W? zeeCB#0cGy+UUNMfNl!vBKomLt6SVB$%Q*p9D<_^gGAMC?DKD!!j^$Yu zj(nUe`zWAO>s%1_at!t&Fd&HS`b<4-(-l%&ybqC=0yI3jt(mt0Q4Pfe|gUZ#le6vDTJk2WD>?3w1gI5X9F4N91gehko zb7%Oe`xsQ-)j@bWoGt{X<(j@cdtKoCu*xN^5?CwmS*$Jd!VL+*f-|G->pfD)&(_Tm z@C+>AMkKFJt#J}-yXXnXNFM2{nP`BE-{3u#4m@Eab_4as5-odYC)vji@iT_17A-T( zl7OX~22FZI{FqV8z;Jj}sZ&I8YE1VtJ~b47SC@5a!_8>m2%d1gB@pA@&8f?uzLm0> z3o)I6bJn>R*>AbXgbFW71ZPR|n%z}Oa7=I*766spU}o6U76vFc4n(lZ$nxOYJC}~? zZXUG<23?g5nPMn}Dqth#N|x0Acza{OLm;Lp)x|MM=G;azM&_DBQTE+TS;)j0_2kE1 zhIOs7l)EoSHp;qLpU{zW`90T~D_ajM`7c6u^S{;CTV^d%uEi}I6K}g)a5lF+Ke5E* z;k*&ho*U%3{W?_XSzghXp04yLsVC#2QHLCYly^zYg{fH@`i5{r%@mx+tG*0Kx72uR zOOW2#C)9JhP;(Q`a9TqXLFKZh)FB&FrM`sNtx^tX^*iz+;LA(K*+X+K z=nI@n^BtxnA%n=n_q0=*1uqUOSpH-b+{|V6KVC`bCJbx)W z5O)XD$JG@~`ZJ7qP2wOMW7pE(6W2@v-rH zU*E4evg?N@+%D=5KOBC}<#Ocka0{1|#wqp}A#ZjM7a=bU#M(SmdbR$fg6f7RmX0N4 z#h0h|gZhnSnJGG5=ybc!-6ojyT=IbF=^WmnyU(1(w9xej-Hu$moNJJZe0N#HLbCGX z)<87>_*sMdV3Za>^Favu;ZyUifz$HMH`9JD(}@6wRUUS!*;l+Zpb3eK(f$b*%ZEJ{ zcxpI|3$is3PP{A>($(6h+6|Zmco-Yr>EPVI%tNV(O1#joRuHF5Aaj=_rcRJE{KBV zOIAbA5yGn`IzK6d9*Z-{{AdA)Mc#vbRPoxVBxDahr9DvInjo%DUBg0POF5^XolTy1 zeoW+iD*KF!lXdGI-S{o}`x=+pKN{MN2Fh84DQn9dxs7%|&cze9X(Vp`vqbLd`1Y~j zb@PLfzdi~y*fZR+;&k(m*B&bdXf^Q)Y@5~`1NNDzwngt#kYqbO>>A&87=mfG-&bs5 zD`SfmyO0BZ_Db@~ul5Ev{}_U14LvoNkmjotN1li{LD?Uc&68?#;QN!?fYChCCr?Wt zPaGV2)$}aLxyeS$Dya0y@KlZci2$o#3_MzMAS8q}bR9h=m3oTEdT!j%^0z*_<%!nLiEQ819W@B+CKV$lN-M6=D}tp)B}`BGHt)a8CVJuF?(YI$ ztX!hKi=yYcxUl4o_{s}F81RWVvy>@OSt zQ%h^9h^slW$=R@Q(22Mw|7Ly*1!pWxGAiyZ*K7)Z&MXrJ9iIR$t^5d{0$7;Zs+S&> zG`PI&^t40WgV8!5cSeDY*KF>2d27L5g<@L!ePIgX4h#+d?3uq2z^UTu>L%Uu>1*~{ zqC6|?q=`bqQ^QenjOD)Bv77kLj<>GV^>0J7{5}Sq(cIRu3iY0`CwVDP9ZOe!N(wqw z7NsA^!4rX2uT7I^Ojt-?HqMMpoDex^2x&@5@snJ1%0cRIc_bO$jS02~cuY50+Sr&* zRJAm`K}zUP#~&c0+9&-H52fZ+uPDTOyCRnj9{W&a%H@pXOJK{2%p(COEln_q8OTPj z*}F{zu4@Y^CMbRka_Z4~k{5}wa#Y{8A4m!`_No4AX*V_iq4AWA98jtE9%(5q^uW=A z)kgY0oql zE&|qmoqmKztpLeh`iNFU)k+tHmL>I>Fu;n%dULA3SSjdbdjT>hHf0P0&RQ=>-O2o5 zgp)R!xAo#n^2vmUSf24%5j5b-JRqJ26&|FZ{I7x%kDJ^`)=jzH@AL(@)TF{t#TKTY zgJ()0`=!!I4WRk>2H#0}ZW;aF`%H7^x6?Kp6alkK!+p zDz5YOJGe3zS^Du{q{wJ)JO2b&?Y*umr9iaZxnEVMv$7CYnoc#JCiVg}7=Ij7+@nMjPZc+R`m$y`E zp7nN%5*aRC&&e2Odv7~{+~?!qY=c}2cEulu>Z?Kvy=>TJysLX;x65Qg+R)URSIMIY zuY&pM@SLN#Nh$@^=Sn)-_~QPAa5$~MWu{K52-*OVN|mgdtq^Q$tjI1EM7G3(<1bsI7GO|fjWt5I*^I<*Cq5nDo8gT0gHMy?5DQxtZC7$ z6UXb@rVav&5*nYDEq!fH$WO?L|A7%nMFiiaXilQ+uL5Kz-(Gj_lU7ask}BY(Jj9a! zK9}%iSs>MbX<3W=)~sUwjo@Lu5O5O|zw@Awq-Vr-F+YC?4dIzx&Yp+J^@Iz7)XhRq(bK52#fL8Z-Q872`c9@WqSI>?GT#6A z9d$JpQ)wzn;#8;4jm?UA%fGkNV7O(`FPNsIkd9|i$mP_r7G=wG{)l1vSwn(;S`!B}WhW zWcEK6TJV=TeSEHvZMr~h*HrmkAOLjso``=4MzXYav*zygx{^(x#-}az7xNbor)_5f0@>MPRALI6UfDL{%hgu##f0ZZ9qvLZ0E_n0?@M6R|B4PidQ+6M;ZGjPtCQgtYln^a(EID zJ3WV@A7*+_PvEY6ReNx?`A7CBUY4=9U<7NCoKJS6fHo+dgNRn{xk9TA)m}v9*TA2B zlQEi|pt?jtX~fn7zI$(xK2BJ|#pBlFR%ADxav}rIg$yL!v%<^xH{%{7-XgQ|uC&a8Xl*h{>lw=p1fZZz$ z6v$pUhD`l7)Nr;FoMlLvoS6d19G<0c(lgA`?na>imVDXVdN#rJSWP9<$>dcM)*jqlC<@~2d z0%H2@#*2I%0mcxs&&P0F4W6pL-mX>@W_}SFD#jqM^$#MM5zghuRDCWkJp2=hy=SFM z6aEC8{^`{ww=J-|;#SVTa+0#Rom?)zAnPsoEKTG-X7U>(o{BsTuw^lU@5p)!KGz=b z+EYUaZyx&nrN#J`4xnquWWIwo*##D z-tg0c3E_G6^*F-UZDzH}Ol*Cq1s+q+%DRM<@*3)`wFQoZ!KfXFU49C17881EKF=#h zG%lcpFyIj0M;(^SXP9??VFKAbz&kR3BYbW*Ny8r;)}A9$j-d)!Z0z9QWn+`53kSGN zwpb$f8H>@NZQj!cyuLmDUG-@1u&wXlmn0@H3^1k9>Nhh?J z{ao~TEu*Ec;921H4Zl&#i+i?7E-Pn@zz@fYmWitzCb|Ac2ZHA}!&$>hh>gp|Wvi=@ zx3da#)u0%ndbsPdmNM&BO<9|5Udzg%V!fnjo<8S`3n$xH$FH+`E2fBB&L-iu$M*M{Cwn+hBNE|Z~2^j4INt@$rM!_9d# z#m?l6!A9}-VPC&M{nPO$*E|t6y*pql#M$}P>^<;}bX%27TZN)xP5tYZc$vPon9v? zhZ513*AgF%-O2Z5rX=R(fX%Pa^5&5c;Z4V?rXAk(fV zAYsdi5vA&KH$V3>iXGo4PRaEb+rzlN6IVLm+rlm_vyzsUdy8)Y0)Ji5?HcMSdz2bP&?N4enT!u1HrGJ5?r^|OV!h`UgEAEB>^nKnZABs(#2fXbYBT|0&ff>|B#dGC!c%fPjVTQmD$^>hn}vL_*)BO)@0;; zx)Na}s}H>rkCo|xm*x`Imc$0kL5hfR3o(_SWH-9N5h!Y>(&r3fBeu|v_5 z-iFDSc1(5xN!Qo;GOOmEw`<$jhx)CpcmkF)GahY#mjqGcKPdGpTb7!X57}yVZ!EP0w%|h!yws}~M(3T&q*2=_+ zi1QKCVI>tCvLJj77e8XuI{PXIv)9HU1NZ*b6udD5*{b3`*+>*xT#`NP zuC21-3~j(;jV`Td4Oej#AnA1~{$k5f#ZQXcIhRVFUb=3p9&qCs$ZEU6c#|)uJgIon zuVkf0vpdw%g$4Xc__ewFt&bCT`Wcl?g9~9+lK(FH9nGSV3&uoiNYpBw?~0-d7vBNX zNuIXzB?(R9&~d@DEU%~u%&(=xMH!+McgNfgyQ%z+2E|;kD3*3#>+weN&lq{+s(J;V z=+v8yCsvA#5j8 zlyLcX4WKY*4@iqQ>a~*l%&4@b6`%RvCWMbNuQF$Q&y8cp3MjUvlc(|Bk6QWdB8`-d&HS zewo1=fYr8^#kj%OV|c#~&icn>)J9&QP<7fQ$}En=E|9Ph#D)dQ{H{mI&M7|--HL4* zEM#(GjN}oXg211OrE-u;YVjUhw=l%fDQ$V;qt^)eJ@wzyUU13 zBjhxaLvOeEk!{*K6@Lpf*_b|!@@b?JQ4L=tM1kccKC`F#jFt=|tp!&NH$)Lriz{l$ zC9v|<{>*qwa7pbPVD{Qt+^zIrPW|(5mkp9!Z`dIanR=Syd1eFD8*kjQots_*2vFUw zG~~k^NqFY8(?;ByBUX7^T_LT>am@9ISKz)GqmKUE5n6Q|)<{^k6KAg4{G)-!Gtz_Y z%5p;4!Vd~*6AS5AVX2ZrOHH1~(la#u+9#4lGNOau4PH3DXnC9X#jpHVt#c&8gKi!Q zg!({S1ps@iuL73v2**|5<7H{r6^S6J&SKt^V47?oYBa@=Yu4B5d1{c(dn0 zkJY>Ffm)5t&GoEr3PQn~f6;me?@{cr&EJ>L`)qE<-*NvIb@NYD?)W+GFHZnLPY8XV zRObI|(!VU#|1<$PNO*vO7?RpF!VXW4E$gTk=^yV#F@9ir#54Z; z$*E%Br}4=0wIUZryRbF8xod8@_IA2nEc8;6oD}3oSY*z&x>KE*3lXRet=fZ^@on7S zB~>&o&vWmqNADb0DA|sV48!!s;&T7>)>2A2Lut^%Y7n3NLl?$-zC9JbEJSaa8x11D z$D2(}y;*$QCY1Ob*LV#h=517}$A3cpXPesK#Fjxl*>u2D{CS{1wXcY<%)}^oW%e%W zt$Y*ut;j8f4;*<2L93PFdndY#9NwDg6a|)mMG>+68%HHlH|6{y(5}pChXeeiRt*!< z%_WLik1LhD*!}nky`*_EY%6%*=p~6-9$jjWNlc`yrH^T{QL*nuNAW8TEx+}|c}2@9e@}PHUcMSNT}3Zh z!!19rJ=dZSHpQrsj&uV92v1mFhNjg;#g_c`M%#f^1FXwvJ)EKgG98wfZ(;h9;micz zBXdN~5##*zC94(_6A>)608j}xj(XDf8}HkuBX#x=Uce?mUb(r#NZbH?kd0!eW79CA zubhb!InP`~JyKG$%qm{$@IpP&G4v4A7GzoC+u1DTv_bAN#ot8Dgv9U?fJm^sm$k>( zBnD1`1~#zd=yL*ia8t2}6Fju`tul0fN0Mj?o{=2K+8Uuw&szJCTDz9lp5Ka`nwZxi zxN{pFhrA|%gSSi5P4_HcRfo8CZAM3$nJ#kyiL2dX44qyzV9a;wZM*o?K|@5j5&XU7 zRh!VehKQkB>XWhDoFHL*zr+7cHpsu)3T@>ZCfgOvW6Ef?w%y^(2z%VbuTfa1Hb|#W zXSbIN-euK{uQxTW8V$9-t{-pE3Ig(!x*&RXNDKTXx2Zf6dP%B@k7Z*I#!#^DI{e@3s>Q#(u68il a9)?(aK=f9z4jA0Au&;lX3Z{p|o+rKgP-shfu?)l@6;TRx!*Lqi(YtH9+=3IHBud9BF;Q|8< z4b3Ty`*#g#XpZ~P&>T%Uc@+4|qSI;M1N##icW)a%v0NFCjO3aRoF@?ZPdyYJ7SL(4 zVR49xRVusd*k~<$mS1bD^F7BY{*c}+0bKn9^HUsQuM=HfJpV#>vT@?Fpa@N4vlA7Q&aGZ#B58i>(yjT!1>d6If_r$J@Se<|2*k{*R37@%t z`0d;;WKP=Cs;U5+{!l$o2YQ8EiZ(cV@9%%x%V45F*vG5C|2eYW!~FR@%rUze{Lgb8 zX9@p2g-pBx`KJeIqZyGupXAzx!Txl77ONeF{=3_-k4Zu}wm+X3OZ^XCVjhde;00BT zXUoBZR|5_s-CT&Pk>uNl-XnFm$wLJ!NrJrXN3{6og;vIRf+qh*h%II}UPYOVn3N5d z5gM;KJXaPRc1!pqA$Ta`LKirD{Nh*r9WnjCr-_Y7QYt4+H13ic1}ArA^BTidNT|^C z!|XbT*bCB-ymuMVjaMIke{}_s*@{CrfPd!H!=Mq};p+F6vf4bspJ&WJ{5=4qbm>m` zE_r#9WPHdqa?|8q7r30fKqvV#S0@N#$XMKU)%n)Q7!lzp%eeF?g}L~jmBtQu_8K3$ zm%_JT(odzO;ZO6lGt{#!_qNhT3A^Q4rOj%=SulyINoZR`nN6R(&w#qf#+JQP~;u5Wb(z;+CxG3 zP9_;wTen)fMR!n3K&c$!dEU@pKK%N1cb(|tgDF1J&Xgrj8Symah<$4p7&j{lCuxSa zZ~ZYz9naO*%f}>0Eac5~5{bun&i@yDpO>vLB~2R5VjM2RI9zLNZOV?rW3S@DY#Q1) zBaS~7xSG2P!-TYhcT-8VJ z04q#dsq}&OT`eWRpvyfIqvTCEc>);c+j0z{=|B|^cEplug-ZWw2M1L|t0sEdmOE#1 zm>e3Pc3mJM-oe@0J@(@z4F4<`0&9!I))8eV2`zf?9bhk2MhnPz@{S;su!I%Hbl=T_|}T z5`^EaI|wB&N`RUPcphTvDFcC@30yu0kwKT{L$uo_i5r5*exy_%)V9b5-r`+W^1u;f zS?5=>H~;ws@g&$_^5>D@KZ6Z7N^Su=`fN;+Ln)?_sDSS8BL7k$Bm8ex!(u};bdbrZ zw37JyNa&BT=`KjPAx^hoia#XNc;o54f80^nhz&+qgmB46s$pigs02h3$Z6~V`|fLT zH>y;_+REU9mGek>D8b0?A=mxCJzD<*X-CXcz?JURL&$s8@cr)xy5zJvY+Pk+t0nT> zyBkqBgjeMU$isE@zgrmhUl4*EzMTvps}O(g29fZPn)1y+xKqsqk$<^K7q?Sg;7Ibo zwhEzy=WzO59gze%-1~--J!JkfWrKc_!M|4cthDC;m;Uqr&`Af)#seXZ=9$2IH09?9 zju{ckPx})DO7Npex{aZPyl1xm|Nl614#iBFii@Ys&$jU{Wsi-1sa>vsmF~>iNNzZB zs%26i<=7X(crGn)XV?;*6BI;fgQTUWgBj<$(p9|X+T$@>Svl!JW~GW`B0f?P_j-k} zkQte#;MW_9yOnY~we6epip+GGL4p=r3kCvy`)hp9*GaO>^A#O7E-I6WIQ#cx{!Akq5fEd6I2(k&F8?yrIS&hmC@u%7b7SEilWkLnY*3r1I1C ziy%7X%C5Y?Q04sPUscM!-e_Sz_Lb8gH+Ak}l1wi$oj42;Dz7y_^%Z^WWDT{XkF2rAAtJ<=QLawUE_9S$II!cTh zuAp<;UJPCdvse*8boUpJL!U7BmnfN}p?~oEnr1SvFemf>xFkCm*L%60T>_FtFUF~} zbC}R zbbWGvxp?v;KY~Y_V3(i`^3RB%Y~klxV8Djg@dzDF|Jp~LyKQ*HDz8zZrSEsck5(k) z#u;v}Yv>w}atmF$L0+5S<=H#A_(kITj;z-NR72bHun>k7d8^x&& zQ}Wp3zAG;+i_W|KFu%$aeJZWiYCxyP{!;JRNw=%p4k5m~ytw1?$HhFbZ`qN*gw?kEN2w2aw zJxOHFLCl~T9K?le20vHVF`hw9vns!uMTK?g$2e#<)hM`*0Z#mUTU3Yyk0OEdz;2$$ zeGd zuss;knLi_(n43Nq;wymzsV>c-!u|pkwRC}tb1Yo=AdB=o$#kzeA+&bSC4)xj-+eG| zfCgl?LuR9|E@vjlRq~ih+G;25Xm;^+e8*9OI5xMSJLCSkm!FF9~ zATcQ^sik?<$UwE(Bc&fkK=OvCzqy*3nLWj|2uAX#6b4 zw@)W+<;-64?R);xkvul9Y{z07e+44VmxAs!wqEN&wu5oLLh(U1_imn+BM2`Ft=DPB zH?@MNCoW4p=Es4OPH6|Ep&80K{l#q0*p?79$IPX_5fN+^#4ZgT$=aI|H%u@L<8VaX z(=(@`m{x&~=r^L9cRG&<>VVQ8haOPQhw+?c{`YjH4@>n8nMmc0da@c~`04bp11NNU z%fhhXP{5)M5AwsPTzwr^e3YQ6$g&ZFeT)Yu!Hm^5Ek(Jp46D-`!5VA=t;K2qioa$> zyb9AT-)CRB{qyo)4hLqBNt$bh2`G&K$ixg0 z33-qQ{JN{pwwvrN)&>5`o=Z9admI;M?k}K3w(j?9cIh{_no9s9!s3WTVxOMMVY^h9 z_nmT!yf}(UDR-WXc>|;E&*|$lnb>!w_1YsjL3)6&#N=6{Fho+aerlH4yHzL0siosq!$@`m|h3Q zzM0j_+uv&s0y$!d9H{SJbZhA<#1?gCq$K>(vMNul7GijO#hwImk z+kmUp3{?E|OltzZJz94-ipS%-ln+)2_<4zk72Pds-->skdDzT@-P+F^PU$MXlWvMz zU;9{;Hl~MTkkF%UtydseXxcOj;C{ZmsUbUhcx*OD@#-lPJ~6Q1#6<%jag~Inm6ffZ zk%2Z2YkfJ&K6`_9IiR-V6S4O&$hVXL@@yvx54P(}S=@fQG;bZLl+7+bOhl-lXSZN8 zQR)$ElYYdBV@o*%)Q|aQxV-$%~=~44I;%pwS0KQ&*jK5!<3p@oJ05fDXSas<`j>s3O-U z4vv5XbON^~l#nyl$HtWe&6j~gmZ5TAY+0kd(ZvFjq)@eGTJ z;%~AxZ$)18jT?0EU>25Q!8yuk4s{ z`0SWV)&=sS3c2;TvXs7~KW3?O_W(a`;{gB_n>L-1Vpx`^@gp3vWcRL&Kb9koA6agK z-xYHzT4iH2ye433-H>At2cVm44E|(nZ*R1}?uRhLIT>NV4!z2;-&s_M-PY-eU+qq4 z0*A1--7{7wUkq?jS8h3U4O?qP_c-iQe?@BZOhIh9=qKz+O{vv>C8Dj>#SU3 zJl&J0f$_7Y%+m$^WQ6FSUM_07$SEJFA1{{=uXiO`lEi_Y&d1}4w-6s9xa6$ZFY2Uyv6Knf9#*## z^k;Cg!eR3aDv+u>p|^KD8XIS&Z*&!X|;-{yHSIu`|&!;xL!Y& z#9?EDn(w&{xVZjcpAnhA@>P4vtXO~Z$S_PWX z^vfP02-AbFr#V0V(FK0al@+qqjEwlJe!(gp`o@wL>d^GwJhi@!{Z*j}m)=H5tMKG0 zpcU^mIC<%p)Bz}w9S`&E!xd!)fI5^3^q_1zkM$Pp4vbCip-L; z-kmo8_G(8qoK0mG>EfZu%zv)6nHieeHUey!ek1V^6=1iEl5|*FQ{vHwnyu|`ppi>K zOPR3#@@L@ zHt%rat<-MkzJ)LXKEfG2Xr!`jbVM(m%01L~*AE19R1RkB*5R8gEt5}eY)SQcx$O9_ zxA1pwlOv%zv2pV#vA<*?A>v0@Vke>yIZ4IQN~?O6e;Joy9sC--M?|Rax#@54(bihaUw&%5*U<;d1@Ngv>e()Z=yMAjzdpj)L0zJI^sEO0nI@Yn=o z@XK-erve-obZzu1m$p32xY)RnvT_pOfy#Vtplhh`9D0t2_`^*}GV{tnX1em3ly3~A z+I;%kfP+z=r7+76r`hmez+F8d?Fll&S9oo2AFiCu`TPPd;dJLcdg%&;0{O2sgMBDK z6Bz6as;U_b{9+&KHQ!mObDoue6sJTknvtJ?NqZ$<69C5c+lim}^ASxj40P_d|Lxg< zNsn?qXxo2G4Cnpb_edJrb3BCfL1oe>*@^nM58MDVn+({mQ`)je9}Elj$_wf7AJ*1? zW$3ye&siN^Ow!`1eMTc!r$FjJS1gGgDBDsMh|m1N7@We^j&I7MldvQhbnycgVoyAJ zn>s@p>lZkXonwZ|g0ynzJ?cvzY3l<7E5h^5rN5_#gCQni4TqE!qPgPaj~O}oU#|tQ z3Dm$q^Ys!0`*(l;-ICKV{U=LneFsNzs^^)239Y@_r|u2SyEo0?aRTX4<>2o%e(i7+ zhwZ-u5kzrNXYwr9EFHatcz#H5&G}7b{{oNVvH7|ni`u)?iTwqx#v|H|e-GZHR36f? za{@EVQEsmE`%h{pJm?6XI?ZVyH2zr)T})WWZ@&9~FeSiR1`9jES`z78BfU2d&Op)7 zk+!mk`)kUr`l<&vxnJ$j0fhQE@Y+&f6oRp=M0V9uaQrI!ibNB=_(8aBJx`NE)UN}^ zPS3=Qz!YZH10XIvI!cL$-(Wt2TWi5t=8?)V)v&Mnw-B$GNx0 zp*X`cnjV?YyfA{U*1MLKJd_rLrYd-;gS4iSM>uv;l;$p`k=P{NZ18pWM;p0_UIF7f z+0H-99WWOxHYYmmx1x->gGuC%S?8()#(V*Ywhxmo?dCbzCgmDBQYH?`!`F1vcl3J+ z@~8yF_Z4s9iWY;5U2e+qJrTpAl>0JPa$?hrUbXsuR++W*#5#EUZYqEy1;B@@$c22D zpB(;`(Kjx(gBx$&Rw8gSo;st^B2gz}f^e=pYQi%hrM2>0$a?(DoEy(1g?*>Ha zNs8|<&kvr*KR|Z=3(X3u4j5r+HH>D^a=*VnR_IBlOw`*K$R>_otgr1KlsUvQgNMxr z+7`)fKa^iR!Wc>{$sVQoybKug$VV8+b8bH6gpN{t%EiUb?|1~O?yFbF`|8(b<5vU@ z;tyj3G<2=EQ8(K%@sKR%Qs-fpvv?Y<298K#mBc}9Gv3S(6gu;T{N8Kq&gb>_pTvBU`4PeNGW|FE=v?o7?I9cMLhKUeAXL`wJo+JcNxm(Z$z8P~Txst7N>lQ-Ms~qU zGmf)mG8^wX{V19=-Pa}zFVV2utvyEbxs5WfBp4fUeqzR(&l`8c3?mtL*J@K_$SW2! zYPe&xbDeRA?J&bRb7ft2LN7@8@hM{ zelw(V-(Hp6Gz*8CjEk@wp&9aJeUHXfqn~z62A19t5?aOE>`$ndtKM_0FC*E>D zyjVbD|CS#76V5%H&|rNMc2p9wD)ewL9=;vIWHJ*7rTvZpkc#h@vU!mVg~`a%MF2oR zq_`o{Z@I}p2(!CfP;7+hrqPafTxwKsIP{o23fg8{T4mF<1hunShkbbhLMVBBu`74H zo%U)j-fR(h^VE16j9+hgRy<>&H}7T)bDd7WP{6TsJR{hTU$yv*WJB~uPrl2n6D>Et zUEn5_iqR6;DhfDCuBB5!xnne$CDQAVLHBlL>oHs1ll+OPVe1Cqiv`EXOCEx4}bHxHf zo(&I?!r|yswvxq&c=#En84SWMar8a9RX1C;=N@BS2(CO4^R{yOyOib$*>4h2-I?L< z`=VVly6%n=%S~b1(UIf7=1|35!YOD5i2iU>v)$!l#aXzU)=dVc^Y_P7 zu*FbF!$3yxlkf=+|Df3+4gae2l(*}tK?cWZ2;=-E>^O6ooX*aNnn7iUo{y_;)fDo& zSLM^<5em*z?-a-72P7P^qy3?~6<%*FTBg+Y_?eWRv@|W>XXcH)FH3fL8l#BI>R5Xo z>|w1jY{%9Pu9xWXtn08kdNv)Qc!D6FedIi=pmJ1{!gX zQ)^RBr|6LOd|ytPWaiiY3YRE*2`O~%U~8Ox*i%04J6vu`-1^8}lNLX!!Ev7E8TU&d zKCg9v?c*xMMOxq8KFAtOSbeSMwi}e(uzZa36c}fvA^?EJtN&;Crm&y|?3WJT-CAB3 z^l?eA_TU0EX#e$Axf~ClKx=F3K&-2I2c%0{N;WAds&J$_!6YSb2Ifc{9ZZX zrmV!x=VO&mlu`f@{p(sE1x~-cP$+L6joxZ_4j3(%38NAy>?EzB-Q~xhZ28yauPQ}a z*#-F-&mW6+!G0B#*FA=;j)C23x3P?#2M>-4_PvcS(VEAtWLQNm*`j%z6k~>>VtQ7a z_?6ZAu11K(bp3pNTPzDxVPH0sPNoIc zZZ$mi*f|XJ7{W5>V89%5Fisa1s5YOfy?j3=O=P)bX)AUxg)TYm>2PvNo+|Uzd9=v@ z^xJ8>jf~;TSbK$c#KZuC=6u%Hy#|BC1iO*hsF}8wdEQ>#g_AmGuOE){a>+qve`J{S z3C(sYWGJ2)_<{bBOAr=RD+98cElmp;BMOXO?OB5%9&+7W$YOm^B5b#PE<4P^@of^C z$&Ix1Mip&yTO`9Oq1i&lXwh}J-(&;QA-1b6&nI^*4w-$S7nWsL6m63wak@RHq;WP) z8&%@#@x|BaXR%VC@I!xF^iey5S^7fxz%IS~wn7$BF1xF>XPH*td*TsK*@_%l^4(t& zqMBd+`VriHk zbuqX?KJC~P+HAEJu(ij0zHzssD+&3eHjaJPrs{(tgbj`1WY-NFv^gQamjXkm7+*6= zL`S3Ma0HS0s@v-{WtSoReOA(VEc>BmGi-Jiub}Y(N8*@{kd*-6H_{*@;Yfh`RBHqD zp;GyCazUvusL9ko1eX3ha+V-mDWGr3lOQH* zr+`EFSA^7%HAO>#aZSPz$|*`6#!pQZRl13J>8(#pW-OUZw59#MN(B38<*}cd9tq?F zL@m`_aFyV3qO+mllE6;$mKDx&N_+g2am&MS^1wF&QuK-abKd-RuLFWC|>})tE)>FI91oraxxft(XHo6#gelTMw7EI)bh1TI4BJ* zth@Jd1{Fa(0C#>Lj*(jI4L%(P?yFpE(A4u6(aUx!LFZlxtr%5@dz&64spLhsM)1`o zY&4FTU9a6EAU7^bC-X4Gf6oejiAU^muungSzXTD432YZ6-oJ}Me`$r&-oHT*d7N#d zzNgfFBMSXOs)a()Mlufx!ewGWY9?>*0KDdW%UNFQoxIU=`4oakZ52U_6iv?~!D;Nl zI?@?EL-d&b7~kDE58=wC(0qFqfM`|=LK5-6zB)W?DFt~X$i4q6Bw%&5Q=8q5hBGwL zlS|?u_DSVJdufDqhzS1iK-gP;@{u@gM*#F#yaD2aYb!YQn@alpAkt-ZhONwa^F>v` zeT8W@r>rRMJIbGnCT6e=eyyspl^mie7{HUc-T@Sec&Z{n)AMg6_+AItfDRyhG~J@W zs0?`Z`|Bx^#0@|*1NWai>$9O_{*++j?$7v+hr;q-0UVW0`sh9GnyE*-oAHsl04eMo>!I+rFc--u$5mgmI$UTG z%Up*-`bn{?%=7yEb(D6w18Xp>#R5y%KI3yH11-uR+#QxGV@ zmDkNGDnIclE=E<`ezR@I!)zv^4C>8x5HY&oTudhvX&Se}1T->Eeh14EL?^+ELrznc zS|3HA_gLm~MS#z*?#zM(dZ5KSr=vJfdkac;hGGu73-s)7 zzJ4;f$Gpk7AJv#wem`hn);6F4;K+Zsfvb~fCpV{`L6ls zih^xLpV^(%{%x(!GDy`hd7dYD!vj|If;e5cCkhqVX9>Kq7MCC`tATQ^`O;I`lAibd|BO(x!o@!O z;6!FK|4U3Ws1zyBR}{soTNj7|BkwvN9J?Nc&803vh_=sC61{HWcenQ1AQwn+E*{Zg z{834JUL-lHm_vB{s(4phZv?|-jkK1kQ`KSX(+b1K_|=}6+`TM{2!H6zGAEMP{hXRP z(jLVl((0BZw0(MG0YOsH`d;`g1G;sacw!>0M{PRB4G#^ z1%tO<_F{dMaz2e52Fju+p?#V&3C(bhBO37WG=Fuk!LrcwXZuX#t)xjO>#0K?$#ZIn z?O*zm@J={6$58;%vdCMVbR3CjlN|(~8!RjoOR4}BMiE4?X*@r>38)!0$pD>8R2lH3 zBOD{FtkT^Ml@_8{?vpDTCOL&IQ=jmlrv)Dpn;pd={C?ss2k72eK1cz-?9GCQwUt5G zhvGv_QSR->gzsWBjZzYuTk)VvXIqjhfE+GWsf4X|g1G|#EO89A>Hgbyx$<=#Yv(zW zyC{d+n*O?o5ATFH)aPvQhucbPNHjFj57?lO86VN8)sM@J780^PEcSxLRd`=hxS!g@ z#7)~m(JW8e2V%m+sRt|xD5|6_^x>mu(O&>D`}ZNVR|8?92URsGk@T4_pfpnB1Xo8l zLD=Weu=h%#qPHL#*Gc`D{hyD4o^O=^QaN>Z{+p2H4m?QH@uyi0hMMQQvptaExHeJI z6KS`VmTEOW6;ZDSF_pz$9J{gQBVxSeCj;675`gwVM*MdaY?@6MIS@0XHoK_Wa5?cj z@Ar3;R-_*}6J6wub<}@{h zgMHQE#;LVYpn4(v;%L*lqIV2gchrLml)G%X836Nr;7& zc?NV|G^$ppW68cQM3A7ho%xhDnk*Z6pIog<62C(ZKl|Fcn?J&R{Y?}du$9$jZIq0@ zn>B*jtW8Qcbf4;z8JA`xZun>EikGyYA_DF_wCAX5S)AJ4<$Q~(z62S@$tH$es+1m* z8d~6#j{udG=37L&br&YF6Z%{cjGcQS*cn-urIn)7#i67Z7ga`;e$JpOGi6M4l>B;i ztCnVOm@K}O`nGpZ9sU34oG|fH6ze)_;&qF3=I%qN{B@ zWvpE9c#VA$BrN%Jo!e9nlqIP`0nyvNLs=keq_ulKq@8 zA8gz;Guks5zn66P+2ZR<#@cuHL9fEsh2LFMoC(DvnuAjB%mBM6*1r$KLYnnHrebaH zQoKx8t`WAot~J2Vh9EeJ`!Rlfzp}Ki9&-O|ArGrv?jja4_esW0Wk@M1buO&LQSP-O zuU|Z>DZ|G-g_0FN2*VCLQV}UC7@^OAfJlhV+p`n@{RPJM}3oi-V**`MkG>^j*X}x zMs6Q3wF}elDIn)j3WP-L*1i`j1Ah%!ZUD~8% z!vR`2==!^FhhRygJSgi%?=Oz%J_`K?(uz>=(>I=$I3_M1=Nk3UnfNwx$kTdvMh1(;4d2)r8xcQHWiziKh^!uvEnoWOR~F}jylAtfX6J7YhnLAK>g6O_Z&`C~@p(EaV41oO(>2ufs%wTxh679+j!+^)=nBe@@n zaTZhvvuLDghq7R+Z=)n3Z@ldBDNOKNnbU_!I;MB7*6_m7Q=@*sil{kk#iv>jPZQ&G zTXGDPj2j$V1njc=H8i0qFzDRtUXQKf*OQ*Z9R3b9uvv^fV&>bod@sq`IMSU6sguAV z3jxaXw(!FxZO1t4B)eZzaMN1qh^?kTDN$-WT51k9T$aFUY6`86&1bij`(f&N6Vftj ztDC|t1Lt>5HsD3+pFV%>Cs)R7jgVc;s4?-ui&Zu;RZdQ>zK4)`yXdLnNvpWo=W*0@d(TMt1Rb%&|=sIP*dt? zEPYcATRxdQ4O;nf91N{CW!}kGE-jd-5))QX$S7mXwY=hU zo)=~Zrp%ewFb%%nt^*+{?(*Lu3HGo)rYCFK=7ocYLbygmnJSYKpNe90+*GJ_)0Wmw zQJXDxaq5PAatb>f<-k;$V|1Nlqt(C&;%a36BEozI(7ojUxAElv5QbjFPR}NDg27`0 z=S>D>UGv4N3Pu6U<7c>TAqO7voE(I#!UG&26C2%$<|r>a{I>nrxslxwNAkeA^)}8} zK&{h_JOH37gE_4q1>RIGV^NJfLult#egY*1XivpbkLpPA~+1|3*cT;Dy}~Z;UWs zEf*!L`$))aCIqYeFX8N~1X!u3&-Vuqol#I5 zP_6sasmQ{`RPVrbrd}JGgAyq#8R^+63pdLoAh%A&58&c&s4v`8NE8MtOajF@^?IpTZ)66$7dq_)(@nNeHf!7^+ei$ck-IcHlOo37f zf_BV%^pA=`Z2wwY-J{6v2Hp#?dciob2VCaJ)_OD$x$I{>)K`F!tgE0U(vn(Mq3zD(B*6zE5~FhY?GIG22i&+9VtiT+a z$m>0aUU58=YchbvE$#0+UMPRpF((rB`h~~UO71qb?C5K1lw3R&Hq8B8amem%0~9R; zAIfOZ#=VyyTx-&;ZG-IqHyq?2UF2^8n@Va36bs`)p7iM)V~SoMB_ZJ`;z`C`$navt zcAL|3d`v)5VPQ@@qkv2z`qhN^?Dz*zBHEjV)z5bm#t3+oiV;9X_8MYzZfzx#KrjCb zye&P47L9^`TWq+SosS=RPY@|_&PV4yDxoDHjh+O3Sbbm90W;CT^ljomLAB|DzW0En zQj}1@`6(yWIdr?HOmWzQj3cVlLWSg>I9O>Q_5AT7uj8<~)Z&97N}U7MQckl`4Nd0uL{jOA`(nTsxBHz44q;UsWRz#k4s@b%d0uDXEz?cJECyWKy(G-1wp(^Wg{8<#oJ zORd}3+`bdS;Ird~wlRkYtxczHh8Fspo3%CRRQ~FJWEBa2>A=-mXx$#EUZXSmU{l7$ zy7=(}3`5{6$Cuk|2bU`@_qBluO$eS>Trxh=Dr)4`ueKJjd1f&EQJQCEjvAQO3WD%G z3`38`B0_dechDrqC03r;_=U;Llm~(KE`EADeeT@ush*tepp_n>hPl5|K|dU79q2o9 zpCo3m`jLdaUuG*Q)zkz!xF{(+;x_A5jSgOzUD2s*Q^kSyq;Al6d}%wfYO-Fk^fFYK z@TJSbUjk6bK4}fE*Z74z1LB4mpk@A68SiAv`*a)^9Hd@%uwBde+iAsVCqE%%oENTn zXYAR?)5tpgeOGrIIHc?HmZ?u;3s|1`E(Oip5qN+l6?{>HZ`~uF1aS0coj-3G)V0vc{$!HV zU}HS2h#evbXQH!N&vmXA6Hrr8c0bHTPFa`YKx#GbfSQcU|T7M%x>j4FJ^kMa$E@+1} zJ!9|2(Q|*jQby_Cg!p?wPEdq&8fQy$pmveLgjN8WSofO$MtU*THE_1zY4D-P9iMgz z*WPsBCko7?!}M}X>~=y>i+5usyPP*GMVm>?_znE2!9fE2{;8sWizN%R;uWw5c}!u zy9}FGNR6L$a4eHJGr+qG)c%&__Iv@^xSSS9KfILCWC%+f0}h}s%^#0devE*`h_!${ zNUfhQ#E2X_LUXJ7kN5f?;wB6|PzmLoEa@0C<`{oyL5$Nm@A3Y0wNK+BMf{BY2MKzm za9LR)cywQwwm~jtIm7ev$H6^)a5k!DeV+TjWd26cA@Z|}4X$FSM{u}Y?sV4SIfl5^ zhhqwEo3g;B(5M0_9E!#V@K$qs^KO?nvmBKfLR9~pl{c@e9JC`2ln4JVtI86Q^knL| zoUK&xwq&Jz&pc}>E$A(JdP+p*cTWP4MJ_CW!PxK!&4)nsS@F$G8EBgh)wzqWD4kBJ zksk_FOspwJ8pXIoK@av+4m*Qpf7u?Q%!$mHDbzu7J4GYDRuwlRg2;@1kfmzuK@yfN z;es+y_0oUI;SGQsPDnUDT|PwG$#M3GI}9mSvjeJ&%8s|Ko766?Q@Sy>2RzJsv<#rW z$4Bb$c$;gjHwzcj|6mcEvonfi(tgyFL4yQT5li zJ*su)6bnAM*$S|WM@Hk8Vif_Odkl(NzyrgdB$GR4kS>7f(5T6B5F9mCX0CKkyrjx( zZ@#gL9``eB>$)ftGsNt_ZdDD@EniB%&6do?rgW%7Dx$1bX7V!_;w9?5UfDJ3i=3e6 zC>a)?n*PUNb!R`bxH}#q6)gs3Ei2Mroad(}){eXu1Dbtx2ZYF|?;t@>iVA13$+RZO7ybs@gSH zck&urQorYPsKv>$Huq^d#8QD_!vN5>IBo7`uz7GeO89y*%qj}7EJNsG zu4v5Ad0s77wm=Iua}gOi;io5L6C0-lfagD4_+y8^JbR;JZnYkLGpVeJ@w99M7qwjQ z`zyz58%PJyJd6Cl7t{Y;nDawYlyJ&Txcc6aj#Jiw4dZ2{$Os##h4dtF?QT>xt;+L2 zcWIyBFH>Y4cF=0HrUs19In!hoh?($f=eKO{^*Ose66<<>>NoPk7=^z_Go`u^jZ3({ zsh?>F^RMfwXD^={ALtCOI~W-)pU_SyT@iR=qkp;+wh=_c|cBH>;|e} zsc8?45rXe8$W5$s==F$CGvl;)Y{+C$(NdyY&Gt@t8vOI;L<+O{{0l(*!12_`PZ9#s zkcm(nV(Ui+cp_baeAj(@4Zofiba?n_LdpB)YSB9Fc)e?qGGg_@=VD9|#@7@g?}x{Q zX`Wqz55}!zYd>~X|Kj%gc(G&h>dD0Gh8+*Qj~CNLhodKZ!fG#cCn9hWHrM^vN3b>i zvq)|kA3V;gO6)!QV#P*5IcBGt<&)FfF8Jzz(>Zo19hHnk^hLuEdCg!)BlzQ1mjVgf z<6#OFx|%?}gI`sdyh~>PPuXl}ck6yGEGq`fD8GMpcbosQ#=Wz7QSnPG#b=)_v8+;UfXs$h`yJKcFsPtdRaJ}ukwD#M;oMI z2Uu6FxQK5#u9@|9tKgN!CoP}&us1tv9n!g?kU`JxN^Z}vB-duXk- z)ei7e_BKA09p-X&$&J4!{ja*=-=cczO0-JJrNZ65K?d7FI%F#zQIYo9%pVgC9yrwo zCeivNH-nQOLBO9BBp|et_YGG6a1;vp3{Cz3!zP+7usjX#dQ26T|1EBVqyUBJuWCT^ zV2J-Ir)d~&Jw_0@4Pi~-eio1Z*acx*uM>VKZcn`}?3+T(9vXaGV{js1)4dffp5YZ(j8H|rf*;f#aXM^#4q|7&4~|# z=Uc)5Fp|H3Q8qbgVWQ#l!jBD2g7DZ&niWe_9Y{8M{>U5)eg9Sp=&8rl7C~(u-K)cK zT59FkuCXjuZj1Q!l)^4TB^5n1ah$Mm%m3xiCeAo64UhMy1odZCXG^>?VAv=)x%Cv7 zo4U5l{r~UnEIh{pSno?QdUgl6&ZK6`yVXesg7{z}MG5kk9 z;Mn$Jq8F0jDck=$`&K>_PH62`Uz^W;gy{`mwjAVx(0=co#zU&N2Sz7PItz^h9)M=E z6bP%wDPc7PxMyb3R(p}aU@nq^egS|$;M)q<*gtc-Lz$U`C`HLKZ`{mi* zIJ1PL%MiBzbw)0(8673kt}IqK-fV_n$>0Q~BT%;AJ4*TcFvV%UrDDU(gel3mArdvE zh~H5=egYio0r&^sp*6l_Kq$~Fjdy7a?U0#s8(`4_yoA^rP}gspOasWryL5DWjfw0q zAdYtbmq_34^)%)(KdYqtqfb$)c1Tg%PZ@3bVal&GFEzkQt6Z%So!3l93>3n~dOuH1 z3Cv}!PUqqZG6<-z`usfLdk?7mf8`bs8%yLtK7BefBB9O3IfaQ+GXS9&TOQoue=83e z*5)7i9$o#eCOO;K@QlzM+UOe>_yO)7RWt66N3;rB&A?F1w!C`g7BIm8&%2Jz$M{|Z zpJR;;NTFteH2T(H{8DTL;ja&IcI-d4gZ9npSN3m#{4r++StD+B&GR{nUXS#Be;0%M zmM}ZR?h*31)wM$w5n1N&yuKC&dSXGf@=p#vm?V%>8i2EaYA8yf!i0u{0%!ax&pr_+=~&I43O@Wd_-xXJ<818V`6fP6+kec&@qtr7^1=>#v9 zzOcQ5a>bk}zt4s~)(%q7)_0}Pj!IEL^yk9d6F(3cPc}7!p>z)~#!-2>g1$KpAq$$# z0!l6(;1s_SFF#L8E76o-PEoFFA&6|kR05S!PjZBy4rcITM;E_YK2Go{7eZYNN^)di znZ_U0*7;el8k&(jE^@vvc2-&Vv-^8Oasey|sDz_bo|TCTLTP;gbNtHgpoJMxrq0m- zGRy?BmN^|KQv_%cG#7w^kl!irCF&i9TYu7JT-z@9Fc%1$oWSMs)E#~*Z(#iczbUxs zpURN`Ob-AqOijxm+$rA+fI4xP``_9AzaxYHq%TJhoG7ndltI4W1$@{sX8wjs3v!S(J_V?`tEM;(+?y{UgDO>6E)Z zw-f;+R#Hop5%EHUqKn%hKO}!w#ZoBE?|B09PMO}nM*Gi-QddOgeTIMb@U9mf-deUFnDYHSlu||V$m(CDWx1?Nl*O=3 zYOQR9x{g{#U8ykQiiNAweBt6by|e@`bA{Q*-xvQ{F)C}B>=E5-&z|}mlnLp)w3G9t zlASW(ih+OB<4S^NdDCmq@5J3dWjn(&i0^OMgL>Vq-tn2gaA=xb%3YJ0M#AnL^ht~k zn=<pllLp0nfUi6NO06ZvSUNxpgMMSl;g3{ww?wi1=2u)*9rPSCbFgBd9bDYb7_>!&bg!U_1H7i z8Xf+$N0$*gj&i0SbuUB(5O|M=?=5BbOfE^#!CQmBIBPXfP`q{pkm|+#ogmbURjU7J zW2iO5UhN3i%>2@HkBJnXLkc0LpF-G-UqEvBu0Ad8Vp*p_Bd2hPg2NierNSymY!WMQs#Vkb{K8=BeB+nGbhDw;?@?4koFzZEh6jX7lHO)ts(>aHT9q zOqXZWa(vp)JvQ7Kl&S zVunW+<)vj*>iz$8cimAquy$b;p5a~4_ zU<9N|0tBVE&_odo)u8kyy-6T}g!ax2&Zys;wcfYZ_kHWF_x`#o+?S7w4p4&qnw7C$@3j1 zt)O~Mo*TIfmKD!Ta1OcFI_?UkpYS?Pt68G<`00~idygX1iId}6)YCmW+Pba1iuBWU zGiDgE-lVVHL-9q6B3}xkSo^R0s=(-{N+H4VKcDh9@R@*}rnwvJ15!9M({!Yb`B5i1 zq0fAw4$kwzzNxNpQYb0xtZk|uNpawoZPLe>Xo&@kE_>$HROu3DHBo_}vDapeRBVrQ z5M07c+#IFwh4AI7s%4}`d@1uogs6IfDbic7fpj-bdg%jg+B~D>ay>)Ki^bE&v5{`v z=2SeFI0S*T-l6M=(SL;*HFrw9YJAQ=oERP$DR(4-*cBLQL78IcfIcf9^#)X7GsTtr z7~@@W^j*AsQor-nUvF2i09D3euQQ9K)kI4wYw2!l3Ka#g1}U+x4gBw_|-7OJ+$QTelsj-h>r2m{rvHPQ$MM$@DL zhD%fAwd@D6kAE2PEms3#_~;($s?bd5IXlfU)8}qEJ@9j{m0H70M^Vt6e^+Z2udtL|S8C5a{^c|_QACzE* z?D2=6u8A3Rwwn|49T@m~GA*~GoW+*x-_f{fH+NF8S?6#Y}m)m{ZSr@Dm zeGYCD+I^Y5rrY^5P_vi+!PrQ&Nlg{Gu-0WI3=h#n>Xf{CWpmG>`F!A-8$Cy#dTZCv~O076k!i9f#g&U=Nh2;PS*vqBptUI`aWLa6wqXZki61(ki; z;U~}C2(t5?_v`p$!_8k^QR0vJsHm8lTDnG9A<7;vM$Gn@@VzMzyqCQ=O(lN5W?W*9 z5wluQ7>(Sfv3$jM#13dz8`x1mM{rsoeR?Vn|^H)Vk5z_7Vk`)X`ttUJr$9dj!5o`59fY#W%M8}C1-w!p?5Sm8= zjX0GK>c{7o;T{IC?&Li@jd%W=nQI ziG+W+|C?%Egxv#|g$DXCA&}(Vce>)Il&l|0)Zg4mEgqV7i25VdXClb;Mf0}Er3u&wOF&8exnXtUG zRBWLx-uh6&&HXW5ZYMTq$JjhK9W5i9h!-gNi1hOaAhA1+jUuuBzW^!azot!vQx9?o zD%~9;Bm9QH?RN?brv@W7254`kE#6+S2K}Ar3H79{V;Nsmq@sM>~xrk&@_t zyqT7yKF&-@meX+=Rn;59f$oh5jSxbvaS(m>|MX5t3k$(LD)pP}Qnqv*UpLs1|LWF-^wq#~@)*T2VB;OtUE9Oefai$uv*o%=d{CPHBB0}G zl6L}W5zlg{5Z!+PZyvB2I^p=AI~W*_5CUepntO^yEuj&!t8)b)SU6yAmf1|hLeBQG z{mng*;1tqk8ek2xkha=DT-YZ60RAqgtn&2@wQhE7TFX$fG%!@2+(`(&e315TD05k& z$BlGpLL?<`fTTr&Kt{{KlpIYDnSk539#|MC+FNX3c|cE~#A2=WzhbpivvxhhVt6jC zH*m-mL5|&k@w`wbDQ4|cK42PEW3PENpC9QUqFX-K!@U8D|FR?UPC`$GB|H-sI+W`; zwv0_Z)`pY(UkK{fbJw4bM$r zHb~8g{FBJjc2MGO(i+IYK!{Gtq=P3Tb#p&{y%$5M`3+KsJd{ylV*@=jvcN+lS*1=R z%o7DrSX>bdrA8b{#fuGxf_!rzk(A^Gk9}r+XNBdzPCzpyOtzxGp$DL;H-oS(Wj)t1 zfYv3osH2+VXrMhVbZ-E4m(=2%6L|A%k8_7tcFAU7UcQcRK@5x2*|R$Hr3r2piB9sVs`mNj@=0Ca;;+5)4m35 z=*bu9N63YtntQ!cgL?s0QsE{%C+&GZ9!1Z3bzF~{TjS>D!rO=3_vnkF+3KS#Km0Q&XT3uOn5IAj)B+*r>kKO}FMq(xw^8=&!SoQP!&b{-qpzZ6+^1=I z8}SXC0;LQiDVN*E{obZ}58UTPgFS5Q(nNI+^DI!}2Kz5M4@`v|5Xf>FncwJPBy~sJ z#lXebm@yDQ1`y8Cq?J~L!f^FyB7Jn8`G(FbznS4?P{)&*}$59K{HB9w%-LG)Vss0&cCJp`}vB*ZUMmTj?d{8$v7y}RSb>_JMUlHB0PM5 zPDK)kSNO&5e?kPsZ6V|csDU-@iAy2j2T%kRJPM6=p9^t%c^fH4C$>!}ATu!(yi0v= z6oyt+G(IW+G!J^dOy7iwDk=2mwC<&P;{;m}=-wif)WnN)1|=hLJY<{eNf~awdq}wX zx%+8_24d3$b*IdrkR?2$`Q~8Ao1hF6Kz0o^M2&d>jKu?#JQKBif)KXIo#8N8vJ+vK z!bD{;mMfUz53kPt!aebJLV<(iusU11ga}I8@c56df@1EZnnjaxJMs#lkSuoY!N#|X zCRLn`IP??}S9Fkx8men?27c~=xjYk}pgS!zJgiq*cz+EPFqd6|#CIw+VlNTyiWmTY zk-q$Q0?krJpovE~A>|15g(SW9DkS$`5{YLnx)>BO)nc=BrP^1)IG+_v(ul#&v<_-r zbkAPt2Lg;fd=TXk+T4Q04smP+i8MO#?ie9yE+8#9qfARFy?-Ln>)oC`YUIWlTO=7* zRBCISE)CGolRP;si0yC{v4ZR!hlo9gC0;-przh>YoRl{X9#;mMTk0k?tt4?xly&@l6J4M1qEn6r$9gIfMY zt?jv)0Ai$SD&h)xy-8DGGPrCg`AbU(5`I|HR)06{fZ;_P;AoZ`9jtwJ?vqQ{S ziX+vTjMddq*^vNe|eye=r5?ESl6XZTzMuCibNG`Rj-vNrc!@wg-)F5 z`+2s;*_w*4(hUVyrWZUupDMVbQd8(J248?X^XOez)Awgl?Bq>M&|EvaI4FycPfQq} z{VEaYttLx6W+RljO-cOc&)ly(Pbt?#Osu?QCbcmVGh$`61(HW0_T^0Nl0=QIs4T%q z+XcE@v!}hygMVi8Ms(Tj8BJjkTo9JqYC|Bq!{A%;;g!Xpi!IBUI4u0**f9Ymlg_~o zl!JG02XnPzK_=4{O?_syS`Z<*5&aXl_bX2#yUW-5x~xRKQ@8Tb0=}wW&-g0wtf|yB zJL|O`W(}6CzB&0b!e$K?=>24?Y}^upmPYQ~Uc>DjAK~HH`41~y`DPWq(v9DKSm!ju zg0Nk!Q!_2#*~ys9keixot5&oe-t;BBgBCg-7C705M$puMP)5m=di|so!s5Uzhz zt@=7&%qWMMUH-Sy5a1Sd)%|wc* z(B|5a7>lF!h!y34%Y$fyD|!voot`>=3#Vc5b*`k^4l*>8NIwEyb*yE#qF^N4t`o-J zMy2)&Toob(FCk_pv~l*uweQ2*>6=q_mwRx#rpIU)9Ou`xJGJUm-7ABVRn2bwnPEzT zI1$^|MogEF-whlfuc63dx;yXB{E2LV}-n&06<1BC(ieX9gDJxez_!v_I(0Lw4akKDjyL{g!gfc0w2|2y53P2Uo5>R+t;eAh1y;9`66E7$r3ob|DZFCP}U%;?+Q7#RhAvE7hU Ly_R)F|IvQ|yW{vK literal 0 HcmV?d00001 From d4689d6055d65739eeb3409588f739e92f258ae6 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 10:46:27 +0800 Subject: [PATCH 06/37] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/docs/guide/dataset.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/docs/guide/dataset.md b/doc/docs/guide/dataset.md index 50a430b4..e43f8044 100644 --- a/doc/docs/guide/dataset.md +++ b/doc/docs/guide/dataset.md @@ -27,9 +27,11 @@ ### 数据转换 #### js脚本 + **注**:这里的JS是java的scriptengine执行的,很多es6的语法不支持
![img4](../picture/dateset/img_4.png)
入参是data,返回值也必须是data,中间是JS的处理过程,注意入参返回都是List,记得保存。
#### 字典项 + 场景有限,待补充。 From 0437157eddefd97a923ac5f5565de07726280788 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 14:25:45 +0800 Subject: [PATCH 07/37] =?UTF-8?q?=E6=BC=8F=E6=96=97=E5=9B=BE=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/echartsConfigJson/widget-funnel.js | 722 +++++++++--------- .../designer/widget/widgetFunnel.vue | 78 +- 2 files changed, 432 insertions(+), 368 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js index e554263b..10424168 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js @@ -1,383 +1,389 @@ /* * @Descripttion: 漏斗图 json - * @version: + * @version: * @Author: qianlishi * @Date: 2021-08-29 07:29:23 * @LastEditors: qianlishi * @LastEditTime: 2021-09-28 14:12:37 */ export const widgetFunnel = { - code: 'widget-funnel', - type: 'chart', - label: '漏斗图', - icon: 'iconloudoutu', - options: { - // 配置 - setup: [ + code: 'widget-funnel', + type: 'chart', + label: '漏斗图', + icon: 'iconloudoutu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '漏斗图', + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ { - type: 'el-input-text', - label: '图层名称', - name: 'layerName', - required: false, - placeholder: '', - value: '漏斗图', - }, - { - type: 'vue-color', - label: '背景颜色', - name: 'background', - required: false, - placeholder: '', - value: '' - }, - [ - { - name: '文字设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - require: false, - placeholder: '', - value: 12, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'color', - require: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - require: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-switch', - label: '反转', - name: 'reversal', - require: false, - placeholder: '', - value: 0 - }, - ], - }, - { - name: '标题设置', - list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: true - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'textColor', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'textFontSize', - required: false, - placeholder: '', - value: 12 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'left' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'subTextFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: '' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: '' - }, - { - type: 'vue-color', - label: '网格线颜色', - name: 'lineColor', - required: false, - placeholder: '', - value: '' - }, - ], - }, - { - name: '图例操作', - list: [ - { - type: 'el-switch', - label: '图例', - name: 'isShowLegend', - required: false, - placeholder: '', - value: true, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lengedColor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'lengedFontSize', - required: false, - placeholder: '', - value: 16, - }, - { - type: 'el-input-number', - label: '图例宽度', - name: 'lengedWidth', - required: false, - placeholder: '', - value: 10, - }, - { - type: 'el-select', - label: '横向位置', - name: 'lateralPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: '' - }, - { - type: 'el-select', - label: '纵向位置', - name: 'longitudinalPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'top', name: '顶部'}, - {code: 'bottom', name: '底部'}, - ], - value: '' - }, - { - type: 'el-select', - label: '布局前置', - name: 'layoutFront', - required: false, - placeholder: '', - selectOptions: [ - {code: 'vertical', name: '竖排'}, - {code: 'horizontal', name: '横排'}, - ], - value: '' - }, - ], - }, - { - name: '自定义配色', - list: [ - { - type: 'customColor', - label: '', - name: 'customColor', - required: false, - value: [{color: '#0CD2E6'}, {color: '#00BFA5'}, {color: '#FFC722'}, {color: '#886EFF'}, {color: '#008DEC'}], - }, - ], - }, - ], - ], - // 数据 - data: [ - { - type: 'el-radio-group', - label: '数据类型', - name: 'dataType', - require: false, - placeholder: '', - selectValue: true, - selectOptions: [ + name: '文字设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + require: false, + placeholder: '', + value: 12, + }, { - code: 'staticData', - name: '静态数据', + type: 'vue-color', + label: '字体颜色', + name: 'color', + require: false, + placeholder: '', + value: '#fff', }, { - code: 'dynamicData', - name: '动态数据', + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + require: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-switch', + label: '反转', + name: 'reversal', + require: false, + placeholder: '', + value: 0 }, ], - value: 'staticData', - }, - { - type: 'el-input-number', - label: '刷新时间(毫秒)', - name: 'refreshTime', - relactiveDom: 'dataType', - relactiveDomValue: 'dynamicData', - value: 5000 - }, - { - type: 'el-button', - label: '静态数据', - name: 'staticData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - relactiveDomValue: 'staticData', - value: [{"value": 60,"name": "访问"},{"value": 40, "name": "咨询"},{"value": 20, "name": "订单"},{"value": 80,"name":"点击"},{"value":100,"name":"展现"}], }, { - type: 'dycustComponents', - label: '', - name: 'dynamicData', - required: false, - placeholder: '', - relactiveDom: 'dataType', - chartType: 'widget-funnel', - relactiveDomValue: 'dynamicData', - dictKey: 'PIE_PROPERTIES', - value: '', - }, - ], - // 坐标 - position: [ - { - type: 'el-input-number', - label: '左边距', - name: 'left', - required: false, - placeholder: '', - value: 0, + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'textFontSize', + required: false, + placeholder: '', + value: 12 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'left' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: '' + }, + ], }, { - type: 'el-input-number', - label: '上边距', - name: 'top', - required: false, - placeholder: '', - value: 0, + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '网格线颜色', + name: 'lineColor', + required: false, + placeholder: '', + value: '' + }, + ], }, { - type: 'el-input-number', - label: '宽度', - name: 'width', - required: false, - placeholder: '该容器在1920px大屏中的宽度', - value: 400, + name: '图例操作', + list: [ + { + type: 'el-switch', + label: '图例', + name: 'isShowLegend', + required: false, + placeholder: '', + value: true, + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lengedColor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'lengedFontSize', + required: false, + placeholder: '', + value: 16, + }, + { + type: 'el-input-number', + label: '图例宽度', + name: 'lengedWidth', + required: false, + placeholder: '', + value: 10, + }, + { + type: 'el-select', + label: '横向位置', + name: 'lateralPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: '' + }, + { + type: 'el-select', + label: '纵向位置', + name: 'longitudinalPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'top', name: '顶部'}, + {code: 'bottom', name: '底部'}, + ], + value: '' + }, + { + type: 'el-select', + label: '布局前置', + name: 'layoutFront', + required: false, + placeholder: '', + selectOptions: [ + {code: 'vertical', name: '竖排'}, + {code: 'horizontal', name: '横排'}, + ], + value: '' + }, + ], }, { - type: 'el-input-number', - label: '高度', - name: 'height', - required: false, - placeholder: '该容器在1080px大屏中的高度', - value: 200, + name: '自定义配色', + list: [ + { + type: 'customColor', + label: '', + name: 'customColor', + required: false, + value: [{color: '#0CD2E6'}, {color: '#00BFA5'}, {color: '#FFC722'}, {color: '#886EFF'}, {color: '#008DEC'}], + }, + ], }, ], - } + ], + // 数据 + data: [ + { + type: 'el-radio-group', + label: '数据类型', + name: 'dataType', + require: false, + placeholder: '', + selectValue: true, + selectOptions: [ + { + code: 'staticData', + name: '静态数据', + }, + { + code: 'dynamicData', + name: '动态数据', + }, + ], + value: 'staticData', + }, + { + type: 'el-input-number', + label: '刷新时间(毫秒)', + name: 'refreshTime', + relactiveDom: 'dataType', + relactiveDomValue: 'dynamicData', + value: 5000 + }, + { + type: 'el-button', + label: '静态数据', + name: 'staticData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + relactiveDomValue: 'staticData', + value: [ + {"value": 2, "name": "访问"}, + {"value": 5, "name": "咨询"}, + {"value": 12, "name": "订单"}, + {"value": 40, "name": "点击"}, + {"value": 125, "name": "展现"} + ], + }, + { + type: 'dycustComponents', + label: '', + name: 'dynamicData', + required: false, + placeholder: '', + relactiveDom: 'dataType', + chartType: 'widget-funnel', + relactiveDomValue: 'dynamicData', + dictKey: 'PIE_PROPERTIES', + value: '', + }, + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 200, + }, + ], } +} diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue index f9ef6a55..a46f6f10 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue @@ -24,18 +24,64 @@ export default { }, tooltip: { trigger: "item", - formatter: "{a}
{b} : {c}%" + formatter: "{a}
{b} : {c}" }, legend: { + x : 'center', + y : '92%', textStyle: { color: "#fff" } }, series: [ + { + name: '', + type: 'funnel', + left: 'center', + width: '90%', + sort: 'ascending', + label: { + normal: { + formatter: '{b}', + backgroundColor:'#6D480E', + borderRadius :3, + padding :[5,5,1,5], + shadowBlur: 0, + shadowOffsetX: 2, + shadowOffsetY: 2, + shadowColor: '#9E853A' + }, + + }, + labelLine: { + normal: { + show: true, + length: 15, + lineStyle: { + type: 'solid', + //color: "#6D480E" + }, + } + }, + itemStyle: { + normal: { + opacity: 0.5, + borderColor: '#000', + borderWidth: 2, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 10, + shadowColor: 'rgba(0, 0, 0, .6)' + } + }, + tooltip: { + show: false + }, + }, { name: "", type: "funnel", - left: "10%", + left: "center", top: 60, bottom: 60, width: "80%", @@ -46,8 +92,18 @@ export default { sort: "descending", gap: 2, label: { - show: true, - position: "inside" + normal: { + position: 'inside', + formatter: '{c}', + textStyle: { + color: '#fff', + fontSize:14, + } + }, + emphasis: { + position: 'inside', + formatter: '{b}: {c}' + } }, labelLine: { length: 10, @@ -57,12 +113,14 @@ export default { } }, itemStyle: { - borderColor: "#fff", - borderWidth: 1 - }, - emphasis: { - label: { - fontSize: 20 + normal: { + opacity: 0.8, + borderColor: 'rgba(12, 13, 43, .9)', + borderWidth: 3, + shadowBlur: 5, + shadowOffsetX: 0, + shadowOffsetY: 5, + shadowColor: 'rgba(0, 0, 0, .6)' } }, data: [] From cfd3d7f2c24304776bf54d3cdac78755587a5572 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 16:15:31 +0800 Subject: [PATCH 08/37] =?UTF-8?q?=E6=BC=8F=E6=96=97=E5=9B=BE=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/echartsConfigJson/widget-funnel.js | 23 ++++-- .../widget/line/widgetLineCompareChart.vue | 2 +- .../designer/widget/widgetFunnel.vue | 73 ++----------------- 3 files changed, 25 insertions(+), 73 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js index 10424168..5208b930 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js @@ -30,6 +30,14 @@ export const widgetFunnel = { placeholder: '', value: '' }, + { + type: 'el-switch', + label: '翻转', + name: 'cending', + require: false, + placeholder: '', + value: false, + }, [ { name: '文字设置', @@ -210,7 +218,7 @@ export const widgetFunnel = { list: [ { type: 'el-switch', - label: '图例', + label: '显示', name: 'isShowLegend', required: false, placeholder: '', @@ -238,7 +246,7 @@ export const widgetFunnel = { name: 'lengedWidth', required: false, placeholder: '', - value: 10, + value: 15, }, { type: 'el-select', @@ -247,10 +255,11 @@ export const widgetFunnel = { required: false, placeholder: '', selectOptions: [ + {code: 'center', name: '居中'}, {code: 'left', name: '左对齐'}, {code: 'right', name: '右对齐'}, ], - value: '' + value: 'center' }, { type: 'el-select', @@ -262,7 +271,7 @@ export const widgetFunnel = { {code: 'top', name: '顶部'}, {code: 'bottom', name: '底部'}, ], - value: '' + value: 'top' }, { type: 'el-select', @@ -274,7 +283,7 @@ export const widgetFunnel = { {code: 'vertical', name: '竖排'}, {code: 'horizontal', name: '横排'}, ], - value: '' + value: 'horizontal' }, ], }, @@ -332,7 +341,7 @@ export const widgetFunnel = { value: [ {"value": 2, "name": "访问"}, {"value": 5, "name": "咨询"}, - {"value": 12, "name": "订单"}, + {"value": 20, "name": "订单"}, {"value": 40, "name": "点击"}, {"value": 125, "name": "展现"} ], @@ -382,7 +391,7 @@ export const widgetFunnel = { name: 'height', required: false, placeholder: '该容器在1080px大屏中的高度', - value: 200, + value: 500, }, ], } diff --git a/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLineCompareChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLineCompareChart.vue index 3d157b6a..b7c057e6 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLineCompareChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/line/widgetLineCompareChart.vue @@ -252,7 +252,7 @@ export default { handler(val) { this.optionsStyle = val.position; this.optionsData = val.data; - this.optionsSetup = val.setup; + this.optionsCollapse = val.setup; this.optionsSetup = val.setup; this.editorOptions(); }, diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue index a46f6f10..60855e10 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue @@ -34,63 +34,13 @@ export default { } }, series: [ - { - name: '', - type: 'funnel', - left: 'center', - width: '90%', - sort: 'ascending', - label: { - normal: { - formatter: '{b}', - backgroundColor:'#6D480E', - borderRadius :3, - padding :[5,5,1,5], - shadowBlur: 0, - shadowOffsetX: 2, - shadowOffsetY: 2, - shadowColor: '#9E853A' - }, - - }, - labelLine: { - normal: { - show: true, - length: 15, - lineStyle: { - type: 'solid', - //color: "#6D480E" - }, - } - }, - itemStyle: { - normal: { - opacity: 0.5, - borderColor: '#000', - borderWidth: 2, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 10, - shadowColor: 'rgba(0, 0, 0, .6)' - } - }, - tooltip: { - show: false - }, - }, { name: "", type: "funnel", left: "center", - top: 60, - bottom: 60, width: "80%", - min: 0, - max: 100, - minSize: "0%", - maxSize: "100%", + //maxSize: '80%', sort: "descending", - gap: 2, label: { normal: { position: 'inside', @@ -105,21 +55,14 @@ export default { formatter: '{b}: {c}' } }, - labelLine: { - length: 10, - lineStyle: { - width: 1, - type: "solid" - } - }, itemStyle: { normal: { opacity: 0.8, borderColor: 'rgba(12, 13, 43, .9)', - borderWidth: 3, - shadowBlur: 5, + borderWidth: 1, + shadowBlur: 4, shadowOffsetX: 0, - shadowOffsetY: 5, + shadowOffsetY: 0, shadowColor: 'rgba(0, 0, 0, .6)' } }, @@ -231,11 +174,11 @@ export default { const optionsCollapse = this.optionsSetup; const legend = this.options.legend; legend.show = optionsCollapse.isShowLegend; - legend.left = optionsCollapse.lateralPosition == "left" ? 0 : "auto"; - legend.right = optionsCollapse.lateralPosition == "right" ? 0 : "auto"; - legend.top = optionsCollapse.longitudinalPosition == "top" ? 0 : "auto"; + legend.left = optionsCollapse.lateralPosition; + legend.right = optionsCollapse.lateralPosition; + legend.top = optionsCollapse.longitudinalPosition; legend.bottom = - optionsCollapse.longitudinalPosition == "bottom" ? 0 : "auto"; + optionsCollapse.longitudinalPosition; legend.orient = optionsCollapse.layoutFront; legend.textStyle = { color: optionsCollapse.lengedColor, From 4a24e621da1262f9d18558db951c09092d1eac48 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 16:20:02 +0800 Subject: [PATCH 09/37] =?UTF-8?q?=E6=BC=8F=E6=96=97=E5=9B=BE=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/widget/widgetFunnel.vue | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue index 60855e10..6b6e696b 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue @@ -119,17 +119,17 @@ export default { }, // 文字设置 setOptionsText() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const series = this.options.series; for (const key in series) { if (series[key].type == "funnel") { - series[key].label.show = optionsCollapse.isShow; - series[key].label.fontSize = optionsCollapse.fontSize; - series[key].label.color = optionsCollapse.color; - series[key].label.fontWeight = optionsCollapse.fontWeight; + series[key].label.show = optionsSetup.isShow; + series[key].label.fontSize = optionsSetup.fontSize; + series[key].label.color = optionsSetup.color; + series[key].label.fontWeight = optionsSetup.fontWeight; - series[key].sort = optionsCollapse.reversal + series[key].sort = optionsSetup.reversal ? "ascending" : "descending"; } @@ -137,59 +137,59 @@ export default { }, // 标题修改 setOptionsTitle() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const title = {}; - title.show = optionsCollapse.isNoTitle; - title.text = optionsCollapse.titleText; - title.left = optionsCollapse.textAlign; + title.show = optionsSetup.isNoTitle; + title.text = optionsSetup.titleText; + title.left = optionsSetup.textAlign; title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight + color: optionsSetup.textColor, + fontSize: optionsSetup.textFontSize, + fontWeight: optionsSetup.textFontWeight }; - title.subtext = optionsCollapse.subText; + title.subtext = optionsSetup.subText; title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize + color: optionsSetup.subTextColor, + fontWeight: optionsSetup.subTextFontWeight, + fontSize: optionsSetup.subTextFontSize }; this.options.title = title; }, // 提示语设置 tooltip setOptionsTooltip() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const tooltip = { trigger: "item", show: true, textStyle: { - color: optionsCollapse.lineColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lineColor, + fontSize: optionsSetup.fontSize } }; this.options.tooltip = tooltip; }, // 图例操作 legend setOptionsLegend() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const legend = this.options.legend; - legend.show = optionsCollapse.isShowLegend; - legend.left = optionsCollapse.lateralPosition; - legend.right = optionsCollapse.lateralPosition; - legend.top = optionsCollapse.longitudinalPosition; + legend.show = optionsSetup.isShowLegend; + legend.left = optionsSetup.lateralPosition; + legend.right = optionsSetup.lateralPosition; + legend.top = optionsSetup.longitudinalPosition; legend.bottom = - optionsCollapse.longitudinalPosition; - legend.orient = optionsCollapse.layoutFront; + optionsSetup.longitudinalPosition; + legend.orient = optionsSetup.layoutFront; legend.textStyle = { - color: optionsCollapse.lengedColor, - fontSize: optionsCollapse.fontSize + color: optionsSetup.lengedColor, + fontSize: optionsSetup.fontSize }; - legend.itemWidth = optionsCollapse.lengedWidth; + legend.itemWidth = optionsSetup.lengedWidth; }, // 图例颜色修改 setOptionsColor() { - const optionsCollapse = this.optionsSetup; - const customColor = optionsCollapse.customColor; + const optionsSetup = this.optionsSetup; + const customColor = optionsSetup.customColor; if (!customColor) return; const arrColor = []; for (let i = 0; i < customColor.length; i++) { From 444aeffafd8360746c8d780f7fc8d0d34d978f3d Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 16:45:30 +0800 Subject: [PATCH 10/37] =?UTF-8?q?=E6=BC=8F=E6=96=97=E5=9B=BE=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/echartsConfigJson/widget-funnel.js | 12 +---- .../designer/widget/widgetFunnel.vue | 45 +++++++++++-------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js index 5208b930..279f7095 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js @@ -56,7 +56,7 @@ export const widgetFunnel = { name: 'fontSize', require: false, placeholder: '', - value: 12, + value: 14, }, { type: 'vue-color', @@ -80,14 +80,6 @@ export const widgetFunnel = { ], value: 'normal' }, - { - type: 'el-switch', - label: '反转', - name: 'reversal', - require: false, - placeholder: '', - value: 0 - }, ], }, { @@ -198,7 +190,7 @@ export const widgetFunnel = { { type: 'el-input-number', label: '字体大小', - name: 'fontSize', + name: 'tipFontSize', required: false, placeholder: '', value: '' diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue index 6b6e696b..d8c80267 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue @@ -1,6 +1,6 @@ @@ -27,8 +27,8 @@ export default { formatter: "{a}
{b} : {c}" }, legend: { - x : 'center', - y : '92%', + x: 'center', + y: '92%', textStyle: { color: "#fff" } @@ -43,11 +43,12 @@ export default { sort: "descending", label: { normal: { + show: true, position: 'inside', formatter: '{c}', textStyle: { color: '#fff', - fontSize:14, + fontSize: 14, } }, emphasis: { @@ -110,6 +111,7 @@ export default { methods: { // 修改图标options属性 editorOptions() { + this.setCending(); this.setOptionsText(); this.setOptionsTitle(); this.setOptionsTooltip(); @@ -117,23 +119,30 @@ export default { this.setOptionsColor(); this.setOptionsData(); }, + // 翻转 + setCending(){ + const optionsSetup = this.optionsSetup; + const series = this.options.series; + if (optionsSetup.cending) { + series[0].sort = "ascending"; + } else { + series[0].sort = "descending"; + } + }, // 文字设置 setOptionsText() { const optionsSetup = this.optionsSetup; - const series = this.options.series; - - for (const key in series) { - if (series[key].type == "funnel") { - series[key].label.show = optionsSetup.isShow; - series[key].label.fontSize = optionsSetup.fontSize; - series[key].label.color = optionsSetup.color; - series[key].label.fontWeight = optionsSetup.fontWeight; - - series[key].sort = optionsSetup.reversal - ? "ascending" - : "descending"; + const normal = { + show: optionsSetup.isShow, + position: 'inside', + formatter: '{c}', + textStyle: { + color: optionsSetup.color, + fontSize: optionsSetup.fontSize, + fontWeight: optionsSetup.fontWeight, } } + this.options.series[0].label['normal'] = normal; }, // 标题修改 setOptionsTitle() { @@ -164,7 +173,7 @@ export default { show: true, textStyle: { color: optionsSetup.lineColor, - fontSize: optionsSetup.fontSize + fontSize: optionsSetup.tipFontSize } }; this.options.tooltip = tooltip; @@ -182,7 +191,7 @@ export default { legend.orient = optionsSetup.layoutFront; legend.textStyle = { color: optionsSetup.lengedColor, - fontSize: optionsSetup.fontSize + fontSize: optionsSetup.lengedFontSize }; legend.itemWidth = optionsSetup.lengedWidth; }, From c28978ebe3c1f230871d2b6cf2c3b870146cfa1b Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 17:25:07 +0800 Subject: [PATCH 11/37] =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-barchart.js | 2 +- .../tools/echartsConfigJson/widget-funnel.js | 126 +++++++++--------- .../designer/widget/widgetFunnel.vue | 10 +- 3 files changed, 69 insertions(+), 69 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js index a8c784ee..076423ea 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-barchart.js @@ -147,7 +147,7 @@ export const widgetBarchart = { value: 'rgba(30, 144, 255, 1)' }, { - type: 'el-input-text', + type: 'el-select', label: '字体粗细', name: 'subTextFontWeight', required: false, diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js index 279f7095..f1c9ab6c 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-funnel.js @@ -33,55 +33,12 @@ export const widgetFunnel = { { type: 'el-switch', label: '翻转', - name: 'cending', + name: 'ending', require: false, placeholder: '', value: false, }, [ - { - name: '文字设置', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - require: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'color', - require: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - require: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, { name: '标题设置', list: [ @@ -91,7 +48,7 @@ export const widgetFunnel = { name: 'isNoTitle', required: false, placeholder: '', - value: true + value: false, }, { type: 'el-input-text', @@ -99,7 +56,7 @@ export const widgetFunnel = { name: 'titleText', required: false, placeholder: '', - value: '' + value: '', }, { type: 'vue-color', @@ -107,7 +64,7 @@ export const widgetFunnel = { name: 'textColor', required: false, placeholder: '', - value: '' + value: '#FFD700' }, { type: 'el-select', @@ -125,11 +82,11 @@ export const widgetFunnel = { }, { type: 'el-input-number', - label: '字体大小', + label: '字体字号', name: 'textFontSize', required: false, placeholder: '', - value: 12 + value: 20 }, { type: 'el-select', @@ -142,7 +99,7 @@ export const widgetFunnel = { {code: 'left', name: '左对齐'}, {code: 'right', name: '右对齐'}, ], - value: 'left' + value: 'center' }, { type: 'el-input-text', @@ -158,7 +115,7 @@ export const widgetFunnel = { name: 'subTextColor', required: false, placeholder: '', - value: '' + value: 'rgba(30, 144, 255, 1)' }, { type: 'el-select', @@ -176,32 +133,54 @@ export const widgetFunnel = { }, { type: 'el-input-number', - label: '字体大小', + label: '字体字号', name: 'subTextFontSize', required: false, placeholder: '', - value: '' + value: 16 }, ], }, { - name: '提示语设置', + name: '数值设置', list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + require: false, + placeholder: '', + value: true, + }, { type: 'el-input-number', - label: '字体大小', - name: 'tipFontSize', - required: false, + label: '字体字号', + name: 'fontSize', + require: false, placeholder: '', - value: '' + value: 14, }, { type: 'vue-color', - label: '网格线颜色', - name: 'lineColor', - required: false, + label: '字体颜色', + name: 'color', + require: false, placeholder: '', - value: '' + value: '#fff', + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + require: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' }, ], }, @@ -226,7 +205,7 @@ export const widgetFunnel = { }, { type: 'el-input-number', - label: '字体大小', + label: '字体字号', name: 'lengedFontSize', required: false, placeholder: '', @@ -279,6 +258,27 @@ export const widgetFunnel = { }, ], }, + { + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体字号', + name: 'tipFontSize', + required: false, + placeholder: '', + value: 14 + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lineColor', + required: false, + placeholder: '', + value: '' + }, + ], + }, { name: '自定义配色', list: [ diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue index d8c80267..9ef5f5f3 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetFunnel.vue @@ -111,7 +111,7 @@ export default { methods: { // 修改图标options属性 editorOptions() { - this.setCending(); + this.setEnding(); this.setOptionsText(); this.setOptionsTitle(); this.setOptionsTooltip(); @@ -120,16 +120,16 @@ export default { this.setOptionsData(); }, // 翻转 - setCending(){ + setEnding() { const optionsSetup = this.optionsSetup; const series = this.options.series; - if (optionsSetup.cending) { + if (optionsSetup.ending) { series[0].sort = "ascending"; } else { series[0].sort = "descending"; } }, - // 文字设置 + // 数值设置 setOptionsText() { const optionsSetup = this.optionsSetup; const normal = { @@ -148,8 +148,8 @@ export default { setOptionsTitle() { const optionsSetup = this.optionsSetup; const title = {}; - title.show = optionsSetup.isNoTitle; title.text = optionsSetup.titleText; + title.show = optionsSetup.isNoTitle; title.left = optionsSetup.textAlign; title.textStyle = { color: optionsSetup.textColor, From b296b456356e2dfc7fb78b698ed4989d8b0dd182 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 11 Nov 2021 17:27:07 +0800 Subject: [PATCH 12/37] =?UTF-8?q?=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bigscreen/designer/widget/bar/widgetBarCompareChart.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarCompareChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarCompareChart.vue index 18142593..b757c8d3 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarCompareChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/bar/widgetBarCompareChart.vue @@ -256,7 +256,7 @@ export default { handler(val) { this.optionsStyle = val.position; this.optionsData = val.data; - this.optionsSetup = val.setup; + this.optionsCollapse = val.setup; this.optionsSetup = val.setup; this.editorOptions(); }, From f9679b475ce72e158cfddf78efef27259cc03361 Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 12 Nov 2021 16:25:22 +0800 Subject: [PATCH 13/37] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A3=85=E9=A5=B0?= =?UTF-8?q?=E9=A5=BC=E5=9B=BE=E5=88=9D=E5=A7=8B=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 339 +++++++++++++++ .../report/bigscreen/designer/tools/main.js | 54 +-- .../decorate/widgetDecoratePieChart.vue | 399 ++++++++++++++++++ .../widget/pie/widgetPieNightingaleRose.vue | 1 - .../report/bigscreen/designer/widget/temp.vue | 4 +- .../bigscreen/designer/widget/widget.vue | 4 +- 6 files changed, 772 insertions(+), 29 deletions(-) create mode 100644 report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js create mode 100644 report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js new file mode 100644 index 00000000..cf713149 --- /dev/null +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -0,0 +1,339 @@ +/* + * @Descripttion: 装饰饼图 + * @version: + * @Author: foming + * @Date: + * @LastEditors: + * @LastEditTime: + */ +export const widgetDecoratePie = { + code: 'widgetDecoratePieChart', + type: 'chart', + label: '装饰饼图', + icon: 'iconicon_tubiao_bingtu', + options: { + // 配置 + setup: [ + { + type: 'el-input-text', + label: '图层名称', + name: 'layerName', + required: false, + placeholder: '', + value: '装饰饼图', + }, + { + type: 'vue-color', + label: '背景颜色', + name: 'background', + required: false, + placeholder: '', + value: '' + }, + [ + { + name: '标题设置', + list: [ + { + type: 'el-switch', + label: '标题', + name: 'isNoTitle', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-text', + label: '标题', + name: 'titleText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'textColor', + required: false, + placeholder: '', + value: '#fff' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'textFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'textFontSize', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-select', + label: '字体位置', + name: 'textAlign', + required: false, + placeholder: '', + selectOptions: [ + {code: 'center', name: '居中'}, + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: 'left' + }, + { + type: 'el-input-text', + label: '副标题', + name: 'subText', + required: false, + placeholder: '', + value: '' + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'subTextFontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'subTextFontSize', + required: false, + placeholder: '', + value: 12 + }, + ], + }, + { + name: '数值设定', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + required: false, + placeholder: '', + value: true, + }, + { + type: 'el-switch', + label: '数值', + name: 'numberValue', + require: false, + placeholder: '', + value: true, + }, + { + type: 'el-switch', + label: '百分比', + name: 'percentage', + require: false, + placeholder: '', + value: false, + }, + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: 14, + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'subTextColor', + required: false, + placeholder: '', + value: '' + }, + { + type: 'el-select', + label: '字体粗细', + name: 'fontWeight', + required: false, + placeholder: '', + selectOptions: [ + {code: 'normal', name: '正常'}, + {code: 'bold', name: '粗体'}, + {code: 'bolder', name: '特粗体'}, + {code: 'lighter', name: '细体'} + ], + value: 'normal' + }, + ], + }, + { + name: '提示语设置', + list: [ + { + type: 'el-input-number', + label: '字体大小', + name: 'fontSize', + required: false, + placeholder: '', + value: 12 + }, + { + type: 'vue-color', + label: '网格线颜色', + name: 'lineColor', + required: false, + placeholder: '', + value: '' + }, + ], + }, + { + name: '图例操作', + list: [ + { + type: 'el-switch', + label: '图例', + name: 'isShowLegend', + required: false, + placeholder: '', + value: true, + }, + { + type: 'vue-color', + label: '字体颜色', + name: 'lengedColor', + required: false, + placeholder: '', + value: '#fff', + }, + { + type: 'el-input-text', + label: '字体大小', + name: 'lengedFontSize', + required: false, + placeholder: '', + value: 16, + }, + { + type: 'el-input-number', + label: '图例宽度', + name: 'lengedWidth', + required: false, + placeholder: '', + value: 15, + }, + { + type: 'el-select', + label: '横向位置', + name: 'lateralPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'left', name: '左对齐'}, + {code: 'right', name: '右对齐'}, + ], + value: '' + }, + { + type: 'el-select', + label: '纵向位置', + name: 'longitudinalPosition', + required: false, + placeholder: '', + selectOptions: [ + {code: 'top', name: '顶部'}, + {code: 'bottom', name: '底部'}, + ], + value: '' + }, + { + type: 'el-select', + label: '布局前置', + name: 'layoutFront', + required: false, + placeholder: '', + selectOptions: [ + {code: 'vertical', name: '竖排'}, + {code: 'horizontal', name: '横排'}, + ], + value: '' + }, + ], + }, + { + name: '自定义配色', + list: [ + { + type: 'customColor', + label: '', + name: 'customColor', + required: false, + value: [{color: '#0CD2E6'}, {color: '#00BFA5'}, {color: '#FFC722'}, {color: '#886EFF'}, {color: '#008DEC'}], + }, + ], + }, + ], + ], + // 坐标 + position: [ + { + type: 'el-input-number', + label: '左边距', + name: 'left', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '上边距', + name: 'top', + required: false, + placeholder: '', + value: 0, + }, + { + type: 'el-input-number', + label: '宽度', + name: 'width', + required: false, + placeholder: '该容器在1920px大屏中的宽度', + value: 400, + }, + { + type: 'el-input-number', + label: '高度', + name: 'height', + required: false, + placeholder: '该容器在1080px大屏中的高度', + value: 300, + }, + ], + } +} diff --git a/report-ui/src/views/report/bigscreen/designer/tools/main.js b/report-ui/src/views/report/bigscreen/designer/tools/main.js index 2bce8560..d0e81f0f 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/main.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/main.js @@ -7,31 +7,32 @@ * @LastEditTime: 2021-09-28 13:33:47 */ -import { widgetText } from "./echartsConfigJson/widget-text" -import { widgetMarquee } from "./echartsConfigJson/widget-marquee" -import { widgetHref } from "./echartsConfigJson/widget-href" -import { widgetTime } from "./echartsConfigJson/widget-time" -import { widgetImage } from "./echartsConfigJson/widget-image" -import { widgetSliders } from "./echartsConfigJson/widget-slider" -import { widgetVideo } from "./echartsConfigJson/widget-video" -import { widgetTable } from "./echartsConfigJson/widget-table" -import { widgetIframe } from "./echartsConfigJson/widget-iframe" -import { widgetUniversal } from "./echartsConfigJson/widget-universal" -import { widgetBarchart } from "./echartsConfigJson/widget-barchart" -import { widgetGradientBarchart } from "./echartsConfigJson/widget-gradient-barchart" -import { widgetLinechart } from "./echartsConfigJson/widget-linechart" -import { widgetBarlinechart } from "./echartsConfigJson/widget-barlinechart" -import { widgetPiechart } from "./echartsConfigJson/widget-piechart" -import { widgetFunnel } from "./echartsConfigJson/widget-funnel" -import { widgetGauge } from "./echartsConfigJson/widget-gauge" -import { widgetMap } from "./echartsConfigJson/widget-map" -import { WidgetPieNightingale } from "./echartsConfigJson/widget-pie-nightingale" -import { widgetPiePercentage } from "./echartsConfigJson/widget-pie-percentage" -import { widgetAirbubbleMap } from "./echartsConfigJson/widget-airbubble-map" -import { widgetBarStack } from "./echartsConfigJson/widget-bar-stack" -import { widgetLineStack } from "./echartsConfigJson/widget-line-stack" -import { widgetBarCompare } from "./echartsConfigJson/widget-bar-compare" -import { widgetLineCompare } from "./echartsConfigJson/widget-line-compare" +import {widgetText} from "./echartsConfigJson/widget-text" +import {widgetMarquee} from "./echartsConfigJson/widget-marquee" +import {widgetHref} from "./echartsConfigJson/widget-href" +import {widgetTime} from "./echartsConfigJson/widget-time" +import {widgetImage} from "./echartsConfigJson/widget-image" +import {widgetSliders} from "./echartsConfigJson/widget-slider" +import {widgetVideo} from "./echartsConfigJson/widget-video" +import {widgetTable} from "./echartsConfigJson/widget-table" +import {widgetIframe} from "./echartsConfigJson/widget-iframe" +import {widgetUniversal} from "./echartsConfigJson/widget-universal" +import {widgetBarchart} from "./echartsConfigJson/widget-barchart" +import {widgetGradientBarchart} from "./echartsConfigJson/widget-gradient-barchart" +import {widgetLinechart} from "./echartsConfigJson/widget-linechart" +import {widgetBarlinechart} from "./echartsConfigJson/widget-barlinechart" +import {widgetPiechart} from "./echartsConfigJson/widget-piechart" +import {widgetFunnel} from "./echartsConfigJson/widget-funnel" +import {widgetGauge} from "./echartsConfigJson/widget-gauge" +import {widgetMap} from "./echartsConfigJson/widget-map" +import {WidgetPieNightingale} from "./echartsConfigJson/widget-pie-nightingale" +import {widgetPiePercentage} from "./echartsConfigJson/widget-pie-percentage" +import {widgetAirbubbleMap} from "./echartsConfigJson/widget-airbubble-map" +import {widgetBarStack} from "./echartsConfigJson/widget-bar-stack" +import {widgetLineStack} from "./echartsConfigJson/widget-line-stack" +import {widgetBarCompare} from "./echartsConfigJson/widget-bar-compare" +import {widgetLineCompare} from "./echartsConfigJson/widget-line-compare" +import {widgetDecoratePie} from "./echartsConfigJson/widget-decorate-pie"; export const widgetTool = [ // type=html类型的组件 @@ -59,5 +60,6 @@ export const widgetTool = [ widgetBarStack, widgetLineStack, widgetBarCompare, - widgetLineCompare + widgetLineCompare, + widgetDecoratePie ] diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue new file mode 100644 index 00000000..7f3b2937 --- /dev/null +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPieNightingaleRose.vue b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPieNightingaleRose.vue index fabaa6f4..fccb7274 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPieNightingaleRose.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPieNightingaleRose.vue @@ -59,7 +59,6 @@ export default { watch: { value: { handler(val) { - console.log(val); this.optionsStyle = val.position; this.optionsData = val.data; this.optionsCollapse = val.setup; diff --git a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue index b0efa8bd..3029be83 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue @@ -35,6 +35,7 @@ import widgetBarStackChart from "./bar/widgetBarStackChart"; import widgetLineStackChart from "./line/widgetLineStackChart"; import widgetBarCompareChart from "./bar/widgetBarCompareChart"; import widgetLineCompareChart from "./line/widgetLineCompareChart"; +import widgetDecoratePieChart from "./decorate/widgetDecoratePieChart"; export default { name: "WidgetTemp", @@ -62,7 +63,8 @@ export default { widgetBarStackChart, widgetLineStackChart, widgetBarCompareChart, - widgetLineCompareChart + widgetLineCompareChart, + widgetDecoratePieChart }, model: { prop: "value", diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue index 00a827c0..94e73be4 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue @@ -46,6 +46,7 @@ import widgetBarStackChart from "./bar/widgetBarStackChart"; import widgetLineStackChart from "./line/widgetLineStackChart"; import widgetBarCompareChart from "./bar/widgetBarCompareChart"; import widgetLineCompareChart from "./line/widgetLineCompareChart"; +import widgetDecoratePieChart from "./decorate/widgetDecoratePieChart"; export default { name: "Widget", @@ -73,7 +74,8 @@ export default { widgetBarStackChart, widgetLineStackChart, widgetBarCompareChart, - widgetLineCompareChart + widgetLineCompareChart, + widgetDecoratePieChart }, model: { prop: "value", From 2f47895ce57530fc86b3e7a9c2c6563f0ccf3521 Mon Sep 17 00:00:00 2001 From: qianming Date: Fri, 12 Nov 2021 17:26:12 +0800 Subject: [PATCH 14/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E9=A5=BC=E5=9B=BE?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 186 ++---------------- .../decorate/widgetDecoratePieChart.vue | 4 +- 2 files changed, 24 insertions(+), 166 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index cf713149..9b53f57c 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -31,6 +31,27 @@ export const widgetDecoratePie = { value: '' }, [ + { + name: '最外环设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'vue-color', + label: '最外环颜色', + name: 'ring1Color', + required: false, + placeholder: '', + value: '#46d3f3' + }, + ] + }, { name: '标题设置', list: [ @@ -133,171 +154,6 @@ export const widgetDecoratePie = { }, ], }, - { - name: '数值设定', - list: [ - { - type: 'el-switch', - label: '显示', - name: 'isShow', - required: false, - placeholder: '', - value: true, - }, - { - type: 'el-switch', - label: '数值', - name: 'numberValue', - require: false, - placeholder: '', - value: true, - }, - { - type: 'el-switch', - label: '百分比', - name: 'percentage', - require: false, - placeholder: '', - value: false, - }, - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: 14, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'fontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' - }, - ], - }, - { - name: '提示语设置', - list: [ - { - type: 'el-input-number', - label: '字体大小', - name: 'fontSize', - required: false, - placeholder: '', - value: 12 - }, - { - type: 'vue-color', - label: '网格线颜色', - name: 'lineColor', - required: false, - placeholder: '', - value: '' - }, - ], - }, - { - name: '图例操作', - list: [ - { - type: 'el-switch', - label: '图例', - name: 'isShowLegend', - required: false, - placeholder: '', - value: true, - }, - { - type: 'vue-color', - label: '字体颜色', - name: 'lengedColor', - required: false, - placeholder: '', - value: '#fff', - }, - { - type: 'el-input-text', - label: '字体大小', - name: 'lengedFontSize', - required: false, - placeholder: '', - value: 16, - }, - { - type: 'el-input-number', - label: '图例宽度', - name: 'lengedWidth', - required: false, - placeholder: '', - value: 15, - }, - { - type: 'el-select', - label: '横向位置', - name: 'lateralPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: '' - }, - { - type: 'el-select', - label: '纵向位置', - name: 'longitudinalPosition', - required: false, - placeholder: '', - selectOptions: [ - {code: 'top', name: '顶部'}, - {code: 'bottom', name: '底部'}, - ], - value: '' - }, - { - type: 'el-select', - label: '布局前置', - name: 'layoutFront', - required: false, - placeholder: '', - selectOptions: [ - {code: 'vertical', name: '竖排'}, - {code: 'horizontal', name: '横排'}, - ], - value: '' - }, - ], - }, - { - name: '自定义配色', - list: [ - { - type: 'customColor', - label: '', - name: 'customColor', - required: false, - value: [{color: '#0CD2E6'}, {color: '#00BFA5'}, {color: '#FFC722'}, {color: '#886EFF'}, {color: '#008DEC'}], - }, - ], - }, ], ], // 坐标 diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index 7f3b2937..cc416303 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -18,12 +18,14 @@ export default { title: {}, series: [ { + name: '外环1', type: 'pie', zlevel: 1, silent: true, radius: ['98%', '97%'], hoverAnimation: false, - color: "rgba(88,142,197,0.5)", + color: "#46d3f3", + //color: "rgba(88,142,197,0.5)", // animation:false, //charts3 no label: { normal: { From 89e91d2a6f69f185bf9dd6a5e9dbaf61b187911d Mon Sep 17 00:00:00 2001 From: qianming Date: Mon, 15 Nov 2021 09:48:35 +0800 Subject: [PATCH 15/37] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++------- doc/docs/guide/README.md | 31 +++++++++++++++++++++---------- doc/docs/guide/quicklySeparate.md | 6 +++--- doc/docs/guide/quicklySource.md | 6 +++--- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 1b352bad..8375b85a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## 简介     AJ-Report是全开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。
-    多数据源支持,内置mysql、elasticsearch、kudu驱动,支持自定义数据集省去数据接口开发,支持17+种大屏组件,不会开发,照着设计稿也可以制作大屏。
+    多数据源支持,内置mysql、elasticsearch、kudu驱动,支持自定义数据集省去数据接口开发,目前已支持20种大屏组件/图表,不会开发,照着设计稿也可以制作大屏。
    三步轻松完成大屏设计:配置数据源---->写SQL配置数据集---->拖拽配置大屏---->保存发布。欢迎体验。 ## 在线体验 @@ -65,8 +65,8 @@ ### 依赖 -- [Mysql] 5.7+ -- [Jdk] 1.8+ +- [Mysql] 5.7 +- [Jdk] 1.8 ### 后端 @@ -93,9 +93,9 @@ 在Linux上先准备好maven、node.js、jdk -- [Apache Maven] 3.5 +
-- [Node.js] v14.16.0+
-- [Jdk] 1.8+ +- [Apache Maven] 3.5
+- [Node.js] v14.16.0
+- [Jdk] 1.8 ``` git clone https://gitee.com/anji-plus/report.git @@ -113,6 +113,8 @@ bin/start.bat Windows修改第4行的JAVA_HOME后(去掉rem注释),双击启 http://serverip:9095 ``` +**开发环境参考文档:**
+https://report.anji-plus.com/report-doc/guide/quicklyDevelop.html
**源码编译部署参考文档:**
https://report.anji-plus.com/report-doc/guide/quicklySource.html
**发行版部署参考文档:**
@@ -191,6 +193,5 @@ AJ-Report使用[Apache2.0开源协议](http://www.apache.org/licenses/LICENSE-2. 个人企业微信:
- #### 开源不易,劳烦各位star ☺ diff --git a/doc/docs/guide/README.md b/doc/docs/guide/README.md index ec76fde6..a439081f 100644 --- a/doc/docs/guide/README.md +++ b/doc/docs/guide/README.md @@ -1,31 +1,41 @@ -    AJ-Report是一个完全开源的BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。
-    多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发,支持17+种大屏组件,不会开发,照着设计稿也可以制作大屏。
-    三步轻松完成大屏设计:配置数据源---->写SQL配置数据集---->拖拽配置大屏---->保存发布。欢迎体验。 +    AJ-Report是一个完全开源的BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。
+    多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发,目前已支持20种大屏组件/图表,不会开发,照着设计稿也可以制作大屏。
+    三步轻松完成大屏设计:配置数据源---->写SQL配置数据集---->拖拽配置大屏---->保存发布。欢迎体验。 ## 系统特性 + 1. 最新最稳定的技术栈; 2. 支持多数据源配置 3. 丰富的大屏组件。拖拽配置实现动态大屏 ## 在线体验 -####   电脑在线体验: [https://report.anji-plus.com/index.html](https://report.anji-plus.com/index.html "链接")  体验账号:guest 密码:guest -####   在线文档: [https://report.anji-plus.com/report-doc/](https://report.anji-plus.com/report-doc/ "doc")
-####   在线提问: [https://gitee.com/anji-plus/report/issues](https://gitee.com/anji-plus/report/issues "issue")
+ +####   电脑在线体验: [https://report.anji-plus.com/index.html](https://report.anji-plus.com/index.html "链接")  体验账号:guest 密码:guest + +####   在线文档: [https://report.anji-plus.com/report-doc/](https://report.anji-plus.com/report-doc/ "doc")
+ +####   在线提问: [https://gitee.com/anji-plus/report/issues](https://gitee.com/anji-plus/report/issues "issue")
## 发行版本 -####   下载链接:[https://gitee.com/anji-plus/report/releases](https://gitee.com/anji-plus/report/releases "下载链接")
+ +####   下载链接:[https://gitee.com/anji-plus/report/releases](https://gitee.com/anji-plus/report/releases "下载链接")
## 功能概述 -####   组件介绍 -   大屏设计(AJ-Report)是一个可视化拖拽编辑的,直观,酷炫,具有科技感的图表工具全开源项目。 -内置的基础功能包括数据源,数据集,报表管理,项目部分截图如下。
+ +####   组件介绍 + +   大屏设计(AJ-Report)是一个可视化拖拽编辑的,直观,酷炫,具有科技感的图表工具全开源项目。 内置的基础功能包括数据源,数据集,报表管理,项目部分截图如下。
**在线案例还在努力创造中,敬请期待!!!** ![操作](../picture/shipin.gif) +![更多案例](https://report.anji-plus.com/report-doc/static/Rhea.mp4)
+ ## 数据流程图 + ![流程.png](../picture/liucheng.png) ## 打包目录 + ``` ├── bin 启动命令脚本 │ ├── restart.sh @@ -40,6 +50,7 @@ ``` ## 系统目录 + ``` ├── doc 文档源码 │ ├── docs diff --git a/doc/docs/guide/quicklySeparate.md b/doc/docs/guide/quicklySeparate.md index cd12fa79..5a8d85be 100644 --- a/doc/docs/guide/quicklySeparate.md +++ b/doc/docs/guide/quicklySeparate.md @@ -20,11 +20,11 @@ npm run build ### 编译环境 -- [Apache Maven] 3.5 +
-- [Node.js] v14.16.0+
+- [Apache Maven] 3.5
+- [Node.js] v14.16.0
- [Jdk] 1.8
请在你的Windows上先准备好maven、node.js、jdk
- **注**:已知**Jdk11**存在兼容性问题,请不要使用openJdk,环境问题请看**常见问题**大类
+ **注**:已知**Jdk11**存在兼容性问题,请不要使用openJdk,环境问题请看 **常见问题** 大类
### 克隆源码 diff --git a/doc/docs/guide/quicklySource.md b/doc/docs/guide/quicklySource.md index 8a0da0cf..3fe07052 100644 --- a/doc/docs/guide/quicklySource.md +++ b/doc/docs/guide/quicklySource.md @@ -17,10 +17,10 @@ http://serverip:9095 请在Linux上先准备好maven、node.js、jdk -- [Apache Maven] 3.5 +
-- [Node.js] v14.16.0 +
+- [Apache Maven] 3.5
+- [Node.js] v14.16.0
- [Jdk] 1.8
- **注**:已知**Jdk11**存在兼容性问题,请不要使用openJdk,环境问题请看**常见问题**大类
+ **注**:已知**Jdk11**存在兼容性问题,请不要使用openJdk,环境问题请看 **常见问题** 大类
## 克隆源码 From b1ace9f2d5894a40aeeafdd030997e87b3253990 Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Mon, 15 Nov 2021 13:11:48 +0800 Subject: [PATCH 16/37] =?UTF-8?q?druid=E9=99=8D=E8=87=B31.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report-core/pom.xml b/report-core/pom.xml index 69abc8c3..c54d40ac 100644 --- a/report-core/pom.xml +++ b/report-core/pom.xml @@ -79,7 +79,7 @@ com.alibaba druid - 1.2.6 + 1.2.0 org.flywaydb From 92147e81c8fa835f6ecb52d64a505b17e2806c82 Mon Sep 17 00:00:00 2001 From: qianming Date: Mon, 15 Nov 2021 14:11:22 +0800 Subject: [PATCH 17/37] =?UTF-8?q?=E9=A5=BC=E5=9B=BE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 16 ++- .../widget-pie-percentage.js | 8 +- .../decorate/widgetDecoratePieChart.vue | 97 +++++++++++++------ .../widget/pie/widgetPiePercentageChart.vue | 14 +-- 4 files changed, 89 insertions(+), 46 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index 9b53f57c..6ae1677d 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -37,18 +37,26 @@ export const widgetDecoratePie = { { type: 'el-switch', label: '显示', - name: 'isShow', + name: 'isLastRingShow', required: false, placeholder: '', value: true }, { type: 'vue-color', - label: '最外环颜色', - name: 'ring1Color', + label: '0%颜色', + name: 'lastRing0Color', required: false, placeholder: '', - value: '#46d3f3' + value: '#4FADFD' + }, + { + type: 'vue-color', + label: '100%颜色', + name: 'lastRing100Color', + required: false, + placeholder: '', + value: 'rgba(235, 10, 10, 1)' }, ] }, diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js index 32dcdf33..34c22e40 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js @@ -1,6 +1,6 @@ /* * @Descripttion: 百分比图 json - * @version: + * @version: * @Author: qianlishi * @Date: 2021-08-29 07:34:01 * @LastEditors: qianlishi @@ -113,7 +113,7 @@ export const widgetPiePercentage = { name: 'lineLength', required: false, placeholder: '', - value: 15 + value: 19 }, { type: 'el-input-number', @@ -121,7 +121,7 @@ export const widgetPiePercentage = { name: 'lineWidth', required: false, placeholder: '', - value: 5 + value: 2 }, { type: 'vue-color', @@ -248,7 +248,7 @@ export const widgetPiePercentage = { name: 'height', required: false, placeholder: '该容器在1080px大屏中的高度', - value: 200, + value: 300, }, ], } diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index cc416303..b6ab9e14 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -18,15 +18,10 @@ export default { title: {}, series: [ { - name: '外环1', + name: '最外环', type: 'pie', - zlevel: 1, silent: true, radius: ['98%', '97%'], - hoverAnimation: false, - color: "#46d3f3", - //color: "rgba(88,142,197,0.5)", - // animation:false, //charts3 no label: { normal: { show: false @@ -37,7 +32,23 @@ export default { show: false } }, - data: [1] + itemStyle: { + normal: { + color: { + colorStops: [ + { + offset: 0, + color: '#4FADFD', // 0% 处的颜色 + }, + { + offset: 1, + color: 'rgba(235, 10, 10, 1)', // 100% 处的颜色 + }, + ], + }, + }, + }, + data: [0] }, { type: 'pie', @@ -303,7 +314,7 @@ export default { methods: { pie2() { let dataArr = []; - for (var i = 0; i < 8; i++) { + for (let i = 0; i < 8; i++) { if (i % 2 === 0) { dataArr.push({ name: (i + 1).toString(), @@ -329,13 +340,12 @@ export default { } }) } - } return dataArr }, pie3() { let dataArr = []; - for (var i = 0; i < 100; i++) { + for (let i = 0; i < 100; i++) { if (i % 2 === 0) { dataArr.push({ name: (i + 1).toString(), @@ -361,34 +371,59 @@ export default { } }) } - } return dataArr }, editorOptions() { + this.setOptionsLastRing(); //this.setOptionsTitle(); }, - // 标题修改 - setOptionsTitle() { - const optionsCollapse = this.optionsSetup; - const title = {}; - title.text = optionsCollapse.titleText; - title.show = optionsCollapse.isNoTitle; - title.left = optionsCollapse.textAlign; - title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight - }; - title.subtext = optionsCollapse.subText; - title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize + // 最外外环1 + setOptionsLastRing() { + const optionsSetup = this.optionsSetup; + const series = this.options.series[0]; + if (optionsSetup.isLastRingShow) { + series.data = [0] + }else { + series.data = '' + } + const normal = { + color: { + colorStops: [ + { + offset: 0, + color: optionsSetup.lastRing0Color, + }, + { + offset: 1, + color: optionsSetup.lastRing100Color, + }, + ], + }, }; - this.options.title = title; - }, - } + series.itemStyle['normal'] = normal; + }, + // 标题修改 + setOptionsTitle() { + const optionsCollapse = this.optionsSetup; + const title = {}; + title.text = optionsCollapse.titleText; + title.show = optionsCollapse.isNoTitle; + title.left = optionsCollapse.textAlign; + title.textStyle = { + color: optionsCollapse.textColor, + fontSize: optionsCollapse.textFontSize, + fontWeight: optionsCollapse.textFontWeight + }; + title.subtext = optionsCollapse.subText; + title.subtextStyle = { + color: optionsCollapse.subTextColor, + fontWeight: optionsCollapse.subTextFontWeight, + fontSize: optionsCollapse.subTextFontSize + }; + this.options.title = title; + }, +} } diff --git a/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue index fe819189..51df152c 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue @@ -361,20 +361,20 @@ export default { this.setOptionSurplusColor(); }, setOptionsTitle() { - const optionsCollapse = this.optionsSetup; + const optionsSetup = this.optionsSetup; const title = this.options.title; title.x = "center"; title.y = "center"; const rich = { nums: { - fontSize: optionsCollapse.textNumFontSize, - color: optionsCollapse.textNumColor, - fontWeight: optionsCollapse.textNumFontWeight + fontSize: optionsSetup.textNumFontSize, + color: optionsSetup.textNumColor, + fontWeight: optionsSetup.textNumFontWeight }, percent: { - fontSize: optionsCollapse.textPerFontSize, - color: optionsCollapse.textPerColor, - fontWeight: optionsCollapse.textPerFontWeight + fontSize: optionsSetup.textPerFontSize, + color: optionsSetup.textPerColor, + fontWeight: optionsSetup.textPerFontWeight } }; title.textStyle['rich'] = rich; From c729c8a4503f665b30a766645be35715f77d7a48 Mon Sep 17 00:00:00 2001 From: qianming Date: Mon, 15 Nov 2021 16:30:23 +0800 Subject: [PATCH 18/37] =?UTF-8?q?=E9=A5=BC=E5=9B=BE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 102 ++-------- .../decorate/widgetDecoratePieChart.vue | 179 +++++++++--------- 2 files changed, 104 insertions(+), 177 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index 6ae1677d..f8dfe390 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -56,111 +56,43 @@ export const widgetDecoratePie = { name: 'lastRing100Color', required: false, placeholder: '', - value: 'rgba(235, 10, 10, 1)' + value: '#28E8FA' }, ] }, { - name: '标题设置', + name: '八分环设置', list: [ - { - type: 'el-switch', - label: '标题', - name: 'isNoTitle', - required: false, - placeholder: '', - value: true - }, - { - type: 'el-input-text', - label: '标题', - name: 'titleText', - required: false, - placeholder: '', - value: '' - }, { type: 'vue-color', - label: '字体颜色', - name: 'textColor', + label: '颜色', + name: 'eightColor', required: false, placeholder: '', - value: '#fff' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'textFontWeight', - required: false, - placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' + value: '#4FADFD' }, + ] + }, + { + name: '虚线环设置', + list: [ { type: 'el-input-number', - label: '字体大小', - name: 'textFontSize', + label: '虚线数量', + name: 'dottedNum', required: false, placeholder: '', - value: 20 - }, - { - type: 'el-select', - label: '字体位置', - name: 'textAlign', - required: false, - placeholder: '', - selectOptions: [ - {code: 'center', name: '居中'}, - {code: 'left', name: '左对齐'}, - {code: 'right', name: '右对齐'}, - ], - value: 'left' - }, - { - type: 'el-input-text', - label: '副标题', - name: 'subText', - required: false, - placeholder: '', - value: '' + value: 40 }, { type: 'vue-color', - label: '字体颜色', - name: 'subTextColor', - required: false, - placeholder: '', - value: '' - }, - { - type: 'el-select', - label: '字体粗细', - name: 'subTextFontWeight', + label: '颜色', + name: 'dottedColor', required: false, placeholder: '', - selectOptions: [ - {code: 'normal', name: '正常'}, - {code: 'bold', name: '粗体'}, - {code: 'bolder', name: '特粗体'}, - {code: 'lighter', name: '细体'} - ], - value: 'normal' + value: '#28E8FA' }, - { - type: 'el-input-number', - label: '字体大小', - name: 'subTextFontSize', - required: false, - placeholder: '', - value: 12 - }, - ], + ] }, ], ], diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index b6ab9e14..d6deb124 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -34,30 +34,19 @@ export default { }, itemStyle: { normal: { - color: { - colorStops: [ - { - offset: 0, - color: '#4FADFD', // 0% 处的颜色 - }, - { - offset: 1, - color: 'rgba(235, 10, 10, 1)', // 100% 处的颜色 - }, - ], - }, + show: false, }, }, data: [0] }, { + name: '外四环', type: 'pie', zlevel: 2, silent: true, radius: ['90%', '91%'], startAngle: 50, hoverAnimation: false, - // animation:false, //charts3 no label: { normal: { show: false @@ -68,9 +57,10 @@ export default { show: false } }, - data: this.pie2() + data: [0] }, { + name: '里四环', type: 'pie', zlevel: 3, silent: true, @@ -85,9 +75,10 @@ export default { show: false } }, - data: this.pie2() + data: [0] }, { + name: '虚线环', type: 'pie', zlevel: 4, silent: true, @@ -102,9 +93,10 @@ export default { show: false } }, - data: this.pie3() + data: [0] }, { + name: '三分环', type: 'pie', zlevel: 5, silent: true, @@ -121,7 +113,7 @@ export default { data: [50, 20, 40] }, { - name: "", + name: "刻度环", type: 'gauge', splitNumber: 30, //刻度数量 min: 0, @@ -167,7 +159,7 @@ export default { }, }, { - //name: '统计', + name: '刻度环', type: 'gauge', splitNumber: 30, //刻度数量 min: 0, @@ -223,21 +215,6 @@ export default { }, data: [] }, - { - type: 'pie', - zlevel: 20, - silent: true, - radius: ['60%', '59%'], - hoverAnimation: false, - color: '#2dc0c9', - // animation:false, - //data: [1], - labelLine: { - normal: { - show: false - } - } - }, { name: '中间环形图', type: 'pie', @@ -312,7 +289,42 @@ export default { this.editorOptions(); }, methods: { - pie2() { + editorOptions() { + this.setOptionsLastRing(); + this.setOptionsEightRing(); + this.setOptionsDottedRing(); + }, + // 最外外环1 + setOptionsLastRing() { + const optionsSetup = this.optionsSetup; + const series = this.options.series[0]; + if (optionsSetup.isLastRingShow) { + series.data = [0] + } else { + series.data = '' + } + const normal = { + color: { + colorStops: [ + { + offset: 0, + color: optionsSetup.lastRing0Color, + }, + { + offset: 1, + color: optionsSetup.lastRing100Color, + }, + ], + }, + }; + series.itemStyle['normal'] = normal; + }, + setRingPie2() { + const optionsSetup = this.optionsSetup; + let eightColor = optionsSetup.eightColor; + if (eightColor == "") { + eightColor = 'rgba(0,0,0,0)'; + } let dataArr = []; for (let i = 0; i < 8; i++) { if (i % 2 === 0) { @@ -321,9 +333,9 @@ export default { value: 25, itemStyle: { normal: { - color: "rgba(88,142,197,0.5)", + color: optionsSetup.eightColor, borderWidth: 0, - borderColor: "rgba(0,0,0,0)" + borderColor: 'rgba(0,0,0,0)' } } }) @@ -333,9 +345,7 @@ export default { value: 20, itemStyle: { normal: { - color: "rgba(0,0,0,0)", - borderWidth: 0, - borderColor: "rgba(0,0,0,0)" + color: 'rgba(0,0,0,0)' } } }) @@ -343,18 +353,28 @@ export default { } return dataArr }, - pie3() { + setOptionsEightRing() { + const series = this.options.series; + series[1].data = this.setRingPie2(); + series[2].data = this.setRingPie2(); + }, + setRingPie3() { + const optionsSetup = this.optionsSetup; + let dottedColor = optionsSetup.dottedColor; + if (dottedColor == "") { + dottedColor = 'rgba(0,0,0,0)'; + } let dataArr = []; - for (let i = 0; i < 100; i++) { + for (let i = 0; i < (optionsSetup.dottedNum * 2); i++) { if (i % 2 === 0) { dataArr.push({ name: (i + 1).toString(), value: 25, itemStyle: { normal: { - color: "rgb(126,190,255)", + color: dottedColor, borderWidth: 0, - borderColor: "rgba(0,0,0,0)" + borderColor: 'rgba(0,0,0,0)' } } }) @@ -364,7 +384,7 @@ export default { value: 20, itemStyle: { normal: { - color: "rgba(0,0,0,0)", + color: 'rgba(0,0,0,0)', borderWidth: 0, borderColor: "rgba(0,0,0,0)" } @@ -374,56 +394,31 @@ export default { } return dataArr }, - editorOptions() { - this.setOptionsLastRing(); - //this.setOptionsTitle(); + setOptionsDottedRing(){ + const series = this.options.series; + series[3].data = this.setRingPie3() }, - // 最外外环1 - setOptionsLastRing() { - const optionsSetup = this.optionsSetup; - const series = this.options.series[0]; - if (optionsSetup.isLastRingShow) { - series.data = [0] - }else { - series.data = '' - } - const normal = { - color: { - colorStops: [ - { - offset: 0, - color: optionsSetup.lastRing0Color, - }, - { - offset: 1, - color: optionsSetup.lastRing100Color, - }, - ], - }, + // 标题修改 + setOptionsTitle() { + const optionsCollapse = this.optionsSetup; + const title = {}; + title.text = optionsCollapse.titleText; + title.show = optionsCollapse.isNoTitle; + title.left = optionsCollapse.textAlign; + title.textStyle = { + color: optionsCollapse.textColor, + fontSize: optionsCollapse.textFontSize, + fontWeight: optionsCollapse.textFontWeight }; - series.itemStyle['normal'] = normal; - }, - // 标题修改 - setOptionsTitle() { - const optionsCollapse = this.optionsSetup; - const title = {}; - title.text = optionsCollapse.titleText; - title.show = optionsCollapse.isNoTitle; - title.left = optionsCollapse.textAlign; - title.textStyle = { - color: optionsCollapse.textColor, - fontSize: optionsCollapse.textFontSize, - fontWeight: optionsCollapse.textFontWeight - }; - title.subtext = optionsCollapse.subText; - title.subtextStyle = { - color: optionsCollapse.subTextColor, - fontWeight: optionsCollapse.subTextFontWeight, - fontSize: optionsCollapse.subTextFontSize - }; - this.options.title = title; - }, -} + title.subtext = optionsCollapse.subText; + title.subtextStyle = { + color: optionsCollapse.subTextColor, + fontWeight: optionsCollapse.subTextFontWeight, + fontSize: optionsCollapse.subTextFontSize + }; + this.options.title = title; + }, + } } From 104c455f3f7e65b1172d4fe92296483eea56f1ca Mon Sep 17 00:00:00 2001 From: qianming Date: Mon, 15 Nov 2021 16:34:07 +0800 Subject: [PATCH 19/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/decorate/widgetDecoratePieChart.vue | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index d6deb124..c38ed9f2 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -303,16 +303,24 @@ export default { } else { series.data = '' } + let lastRing0Color = optionsSetup.lastRing0Color; + let lastRing100Color = optionsSetup.lastRing100Color; + if (lastRing0Color == "") { + lastRing0Color = 'rgba(0,0,0,0)' + } + if (lastRing100Color == "") { + lastRing100Color = 'rgba(0,0,0,0)' + } const normal = { color: { colorStops: [ { offset: 0, - color: optionsSetup.lastRing0Color, + color: lastRing0Color, }, { offset: 1, - color: optionsSetup.lastRing100Color, + color: lastRing100Color, }, ], }, From 6b20f7c04379ce1413307da65fa214257e698302 Mon Sep 17 00:00:00 2001 From: qianming Date: Mon, 15 Nov 2021 17:14:59 +0800 Subject: [PATCH 20/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 29 +++++++++++ .../decorate/widgetDecoratePieChart.vue | 52 ++++++++++--------- 2 files changed, 56 insertions(+), 25 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index f8dfe390..d0392c29 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -94,6 +94,35 @@ export const widgetDecoratePie = { }, ] }, + { + name: '三分环设置', + list: [ + { + type: 'vue-color', + label: '一段颜色', + name: 'three1Color', + required: false, + placeholder: '', + value: '#fc8d89' + }, + { + type: 'vue-color', + label: '二段颜色', + name: 'three2Color', + required: false, + placeholder: '', + value: '#46d3f3' + }, + { + type: 'vue-color', + label: '三段颜色', + name: 'three3Color', + required: false, + placeholder: '', + value: 'rgba(203,203,203,.2)' + }, + ] + }, ], ], // 坐标 diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index c38ed9f2..2cf1c3f0 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -5,6 +5,8 @@ From c90bbf4a5364fc63d1d65fb24cacdc5990ad7a51 Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 16 Nov 2021 13:49:25 +0800 Subject: [PATCH 21/37] =?UTF-8?q?SQL=20FROM=20=E6=8F=90=E7=A4=BA=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/report/resultset/components/util/sql-completion.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/report-ui/src/views/report/resultset/components/util/sql-completion.js b/report-ui/src/views/report/resultset/components/util/sql-completion.js index 537057be..9ebcc029 100644 --- a/report-ui/src/views/report/resultset/components/util/sql-completion.js +++ b/report-ui/src/views/report/resultset/components/util/sql-completion.js @@ -34,7 +34,7 @@ const hints = [ "PREPARE", "EXECUTE", "DESCRIBE", - "FORM", + "FROM", "ORDER BY"] function createCompleter(getExtraHints) { const createSuggestions = function (model, textUntilPosition) { @@ -79,4 +79,4 @@ function createCompleter(getExtraHints) { } } } -export default createCompleter; \ No newline at end of file +export default createCompleter; From 8fa2f683110c3c625bec4f771aa95425f7b961f1 Mon Sep 17 00:00:00 2001 From: qianming Date: Tue, 16 Nov 2021 13:54:28 +0800 Subject: [PATCH 22/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 220 +++++++++++++++++- .../decorate/widgetDecoratePieChart.vue | 203 ++++++++++------ 2 files changed, 350 insertions(+), 73 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index d0392c29..bff9ed91 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -9,7 +9,7 @@ export const widgetDecoratePie = { code: 'widgetDecoratePieChart', type: 'chart', - label: '装饰饼图', + label: '静态装饰饼图', icon: 'iconicon_tubiao_bingtu', options: { // 配置 @@ -123,6 +123,224 @@ export const widgetDecoratePie = { }, ] }, + { + name: '外指标环设置', + list: [ + { + type: 'el-switch', + label: '环显示', + name: 'isOutRingShow', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '环颜色', + name: 'outRingColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + { + type: 'el-input-number', + label: '环宽度', + name: 'outRingWidth', + required: false, + placeholder: '', + value: 1 + }, + { + type: 'el-switch', + label: '指标线显示', + name: 'isOutSplitShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-number', + label: '指标线数量', + name: 'outSplitNum', + required: false, + placeholder: '', + value: 30 + }, + { + type: 'el-input-number', + label: '指标线长度', + name: 'outSplitLength', + required: false, + placeholder: '', + value: 32 + }, + { + type: 'el-input-number', + label: '指标线宽度', + name: 'outSplitWidth', + required: false, + placeholder: '', + value: 2 + }, + { + type: 'vue-color', + label: '指标线颜色', + name: 'outSplitColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + { + type: 'el-switch', + label: '刻度线显示', + name: 'isOutTickShow', + required: false, + placeholder: '', + value: false + }, + { + type: 'el-input-number', + label: '刻度线数量', + name: 'outTickNum', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '刻度线长度', + name: 'outTickLength', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-input-number', + label: '刻度线宽度', + name: 'outTickWidth', + required: false, + placeholder: '', + value: 2 + }, + { + type: 'vue-color', + label: '刻度线颜色', + name: 'outTickColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + ] + }, + { + name: '里指标环设置', + list: [ + { + type: 'el-switch', + label: '环显示', + name: 'isInRingShow', + required: false, + placeholder: '', + value: false + }, + { + type: 'vue-color', + label: '环颜色', + name: 'inRingColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + { + type: 'el-input-number', + label: '环宽度', + name: 'inRingWidth', + required: false, + placeholder: '', + value: 1 + }, + { + type: 'el-switch', + label: '指标线显示', + name: 'isInSplitShow', + required: false, + placeholder: '', + value: false + }, + { + type: 'el-input-number', + label: '指标线数量', + name: 'inSplitNum', + required: false, + placeholder: '', + value: 30 + }, + { + type: 'el-input-number', + label: '指标线长度', + name: 'inSplitLength', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-input-number', + label: '指标线宽度', + name: 'inSplitWidth', + required: false, + placeholder: '', + value: 2 + }, + { + type: 'vue-color', + label: '指标线颜色', + name: 'inSplitColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + { + type: 'el-switch', + label: '刻度线显示', + name: 'isInTickShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'el-input-number', + label: '刻度线数量', + name: 'inTickNum', + required: false, + placeholder: '', + value: 5 + }, + { + type: 'el-input-number', + label: '刻度线长度', + name: 'inTickLength', + required: false, + placeholder: '', + value: 20 + }, + { + type: 'el-input-number', + label: '刻度线宽度', + name: 'inTickWidth', + required: false, + placeholder: '', + value: 2 + }, + { + type: 'vue-color', + label: '刻度线颜色', + name: 'inTickColor', + required: false, + placeholder: '', + value: '#28E8FA' + }, + ] + }, ], ], // 坐标 diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index 2cf1c3f0..3699d770 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -5,7 +5,6 @@ From a5e9312f86d707f8bd633a34035c0c3879d8665f Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 16 Nov 2021 15:57:18 +0800 Subject: [PATCH 23/37] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gaea/business/enums/SetTypeEnum.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/enums/SetTypeEnum.java diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/enums/SetTypeEnum.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/enums/SetTypeEnum.java new file mode 100644 index 00000000..a0242f37 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/enums/SetTypeEnum.java @@ -0,0 +1,56 @@ +package com.anjiplus.template.gaea.business.enums; + +public enum SetTypeEnum { + SQL("sql", "sql"), + HTTP("http", "http"), + ; + + private String codeValue; + private String codeDesc; + + private SetTypeEnum(String codeValue, String codeDesc) { + this.codeValue = codeValue; + this.codeDesc = codeDesc; + } + + public String getCodeValue() { + return this.codeValue; + } + + public String getCodeDesc() { + return this.codeDesc; + } + + //根据codeValue获取枚举 + public static SetTypeEnum parseFromCodeValue(String codeValue) { + for (SetTypeEnum e : SetTypeEnum.values()) { + if (e.codeValue == codeValue) { + return e; + } + } + return null; + } + + //根据codeValue获取描述 + public static String getCodeDescByCodeBalue(String codeValue) { + SetTypeEnum enumItem = parseFromCodeValue(codeValue); + return enumItem == null ? "" : enumItem.getCodeDesc(); + } + + //验证codeValue是否有效 + public static boolean validateCodeValue(String codeValue) { + return parseFromCodeValue(codeValue) != null; + } + + //列出所有值字符串 + public static String getString() { + StringBuffer buffer = new StringBuffer(); + for (SetTypeEnum e : SetTypeEnum.values()) { + buffer.append(e.codeValue).append("--").append(e.getCodeDesc()).append(", "); + } + buffer.deleteCharAt(buffer.lastIndexOf(",")); + return buffer.toString().trim(); + } + + +} From 795200efd921d759ef4e3742d9600017e53d226f Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 16 Nov 2021 15:58:32 +0800 Subject: [PATCH 24/37] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9B=86=E7=B1=BB=E5=9E=8Bhttp/sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/modules/dataset/controller/dto/DataSetDto.java | 4 ++++ .../modules/dataset/controller/param/DataSetParam.java | 4 ++++ .../dataset/controller/param/DataSetTestTransformParam.java | 4 +++- .../gaea/business/modules/dataset/dao/entity/DataSet.java | 3 +++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/dto/DataSetDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/dto/DataSetDto.java index c0722be1..2647a91f 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/dto/DataSetDto.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/dto/DataSetDto.java @@ -29,6 +29,10 @@ public class DataSetDto extends GaeaBaseDTO implements Serializable { /** 数据集描述 */ private String setDesc; + /** 数据集类型 */ + private String setType; + + /** 数据源编码 */ private String sourceCode; diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetParam.java index 0cdca5c5..9730302e 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetParam.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetParam.java @@ -27,4 +27,8 @@ public class DataSetParam extends PageParam implements Serializable{ /** 数据源编码 */ @Query(QueryEnum.EQ) private String sourceCode; + + /** 数据集类型 */ + @Query(QueryEnum.EQ) + private String setType; } diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetTestTransformParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetTestTransformParam.java index 0bf50f18..8b131817 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetTestTransformParam.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/param/DataSetTestTransformParam.java @@ -19,12 +19,14 @@ import java.util.List; public class DataSetTestTransformParam implements Serializable{ /** 数据源编码 */ - @NotBlank(message = "sourceCode not empty") private String sourceCode; /** 动态查询sql或者接口中的请求体 */ private String dynSentence; + /** 数据集类型 */ + private String setType; + /** 请求参数集合 */ private List dataSetParamDtoList; diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/dao/entity/DataSet.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/dao/entity/DataSet.java index dfebbb07..d9313b51 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/dao/entity/DataSet.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/dao/entity/DataSet.java @@ -26,6 +26,9 @@ public class DataSet extends GaeaBaseEntity { @ApiModelProperty(value = "数据集描述") private String setDesc; + @ApiModelProperty(value = "数据集类型") + private String setType; + @ApiModelProperty(value = "数据源编码") private String sourceCode; From 9cf5d1f1b817df5387a0abab7d1bd17fd1d57e4c Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 16 Nov 2021 16:21:16 +0800 Subject: [PATCH 25/37] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=85=BC?= =?UTF-8?q?=E5=AE=B9http?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DataSetServiceImpl.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java index d6ef6248..481bbc83 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java @@ -8,6 +8,7 @@ import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; import com.anji.plus.gaea.exception.BusinessExceptionBuilder; import com.anji.plus.gaea.utils.GaeaBeanUtils; import com.anjiplus.template.gaea.business.code.ResponseCode; +import com.anjiplus.template.gaea.business.enums.SetTypeEnum; import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.OriginalDataDto; import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.DataSetDto; import com.anjiplus.template.gaea.business.modules.dataset.dao.DataSetMapper; @@ -22,6 +23,7 @@ import com.anjiplus.template.gaea.business.modules.datasettransform.service.Data import com.anjiplus.template.gaea.business.modules.datasource.controller.dto.DataSourceDto; import com.anjiplus.template.gaea.business.modules.datasource.dao.entity.DataSource; import com.anjiplus.template.gaea.business.modules.datasource.service.DataSourceService; +import com.anjiplus.template.gaea.business.util.JdbcConstants; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -218,12 +220,30 @@ public class DataSetServiceImpl implements DataSetService { */ @Override public OriginalDataDto getData(DataSetDto dto) { + String dynSentence = dto.getDynSentence(); + OriginalDataDto originalDataDto = new OriginalDataDto(); String setCode = dto.getSetCode(); //1.获取数据集、参数替换、数据转换 DataSetDto dataSetDto = detailSet(setCode); //2.获取数据源 - DataSource dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode()); + DataSource dataSource; + if (dto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) { + //http不需要数据源,兼容已有的逻辑,将http所需要的数据塞进DataSource + dataSource = new DataSource(); + dataSource.setSourceConfig(dynSentence); + dataSource.setSourceType(JdbcConstants.HTTP); + String body = JSONObject.parseObject(dynSentence).getString("body"); + if (StringUtils.isNotBlank(body)) { + dynSentence = body; + }else { + dynSentence = "{}"; + } + + }else { + dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode()); + } + //3.参数替换 //3.1参数校验 log.debug("参数校验替换前:{}", dto.getContextData()); @@ -231,7 +251,7 @@ public class DataSetServiceImpl implements DataSetService { if (!verification) { throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR); } - String dynSentence = dataSetParamService.transform(dto.getContextData(), dataSetDto.getDynSentence()); + dynSentence = dataSetParamService.transform(dto.getContextData(), dynSentence); log.debug("参数校验替换后:{}", dto.getContextData()); //4.获取数据 DataSourceDto dataSourceDto = new DataSourceDto(); @@ -258,10 +278,28 @@ public class DataSetServiceImpl implements DataSetService { */ @Override public OriginalDataDto testTransform(DataSetDto dto) { + String dynSentence = dto.getDynSentence(); + OriginalDataDto originalDataDto = new OriginalDataDto(); String sourceCode = dto.getSourceCode(); //1.获取数据源 - DataSource dataSource = dataSourceService.selectOne("source_code", sourceCode); + DataSource dataSource; + if (dto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) { + //http不需要数据源,兼容已有的逻辑,将http所需要的数据塞进DataSource + dataSource = new DataSource(); + dataSource.setSourceConfig(dynSentence); + dataSource.setSourceType(JdbcConstants.HTTP); + String body = JSONObject.parseObject(dynSentence).getString("body"); + if (StringUtils.isNotBlank(body)) { + dynSentence = body; + }else { + dynSentence = "{}"; + } + + }else { + dataSource = dataSourceService.selectOne("source_code", sourceCode); + } + //3.参数替换 //3.1参数校验 boolean verification = dataSetParamService.verification(dto.getDataSetParamDtoList(), null); @@ -269,7 +307,7 @@ public class DataSetServiceImpl implements DataSetService { throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR); } - String dynSentence = dataSetParamService.transform(dto.getDataSetParamDtoList(), dto.getDynSentence()); + dynSentence = dataSetParamService.transform(dto.getDataSetParamDtoList(), dynSentence); //4.获取数据 DataSourceDto dataSourceDto = new DataSourceDto(); BeanUtils.copyProperties(dataSource, dataSourceDto); From 8cd49a8083efb855b4548b3df46970da7c92aae2 Mon Sep 17 00:00:00 2001 From: qianming Date: Tue, 16 Nov 2021 16:23:14 +0800 Subject: [PATCH 26/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../echartsConfigJson/widget-decorate-pie.js | 79 ++++++++- .../decorate/widgetDecoratePieChart.vue | 150 ++++++++---------- 2 files changed, 141 insertions(+), 88 deletions(-) diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js index bff9ed91..ab42f351 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-decorate-pie.js @@ -9,7 +9,7 @@ export const widgetDecoratePie = { code: 'widgetDecoratePieChart', type: 'chart', - label: '静态装饰饼图', + label: '装饰饼图', icon: 'iconicon_tubiao_bingtu', options: { // 配置 @@ -20,7 +20,7 @@ export const widgetDecoratePie = { name: 'layerName', required: false, placeholder: '', - value: '装饰饼图', + value: '静态装饰饼图', }, { type: 'vue-color', @@ -140,7 +140,7 @@ export const widgetDecoratePie = { name: 'outRingColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' }, { type: 'el-input-number', @@ -188,7 +188,7 @@ export const widgetDecoratePie = { name: 'outSplitColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' }, { type: 'el-switch', @@ -228,7 +228,7 @@ export const widgetDecoratePie = { name: 'outTickColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' }, ] }, @@ -249,7 +249,7 @@ export const widgetDecoratePie = { name: 'inRingColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' }, { type: 'el-input-number', @@ -297,7 +297,7 @@ export const widgetDecoratePie = { name: 'inSplitColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' }, { type: 'el-switch', @@ -337,7 +337,70 @@ export const widgetDecoratePie = { name: 'inTickColor', required: false, placeholder: '', - value: '#28E8FA' + value: '#0dc2fe' + }, + ] + }, + { + name: '环外环设置', + list: [ + { + type: 'el-switch', + label: '显示', + name: 'isRingOnRingShow', + required: false, + placeholder: '', + value: true + }, + { + type: 'vue-color', + label: '颜色', + name: 'ringOnRingColor', + required: false, + placeholder: '', + value: '#4FADFD' + }, + ] + }, + { + name: '中饼图设置', + list: [ + { + type: 'el-input-number', + label: '半径', + name: 'pieWidth', + required: false, + placeholder: '', + value: 40 + }, + { + type: 'vue-color', + label: '颜色', + name: 'pieColor', + required: false, + placeholder: '', + value: '#0dc2fe' + }, + { + type: 'vue-color', + label: '边框颜色', + name: 'pieBorderColor', + required: false, + placeholder: '', + value: '#3D4268' + }, + { + type: 'el-select', + label: '分块', + name: 'pieBlocks', + required: false, + placeholder: '', + selectOptions: [ + {code: 'four', name: '十字星'}, + {code: 'five', name: '五角星'}, + {code: 'six', name: '六芒星'}, + ], + value: 'six' }, ] }, diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index 3699d770..92cbb97a 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -104,6 +104,7 @@ export default { radius: ['80%', '78%'], color: ["#fc8d89", "#46d3f3", "rgba(203,203,203,.2)"], startAngle: 50, + avoidLabelOverlap: true, hoverAnimation: false, label: { normal: { @@ -159,7 +160,6 @@ export default { silent: true, radius: ['60%', '59%'], hoverAnimation: false, - data: [1], label: { normal: { show: false @@ -170,17 +170,11 @@ export default { show: false } }, - itemStyle: { - normal: { - color: '#28E8FA', - show: false, - }, - }, }, { name: '中间环形图', type: 'pie', - radius: ['35%', '55%'], + radius: ['40%', '55%'], avoidLabelOverlap: false, hoverAnimation: false, itemStyle: { @@ -258,6 +252,16 @@ export default { this.setOptionsThreeRing(); this.setOptionsOutRing(); this.setOptionsInRing(); + this.setOptionsRingOnRing(); + this.setOptionsPie(); + }, + // 颜色设置 + setColor(color) { + const nullColor = 'rgba(0,0,0,0)' + if (color == "") { + color = nullColor + } + return color }, // 最外外环1 setOptionsLastRing() { @@ -268,24 +272,16 @@ export default { } else { series.data = '' } - let lastRing0Color = optionsSetup.lastRing0Color; - let lastRing100Color = optionsSetup.lastRing100Color; - if (lastRing0Color == "") { - lastRing0Color = 'rgba(0,0,0,0)' - } - if (lastRing100Color == "") { - lastRing100Color = 'rgba(0,0,0,0)' - } const normal = { color: { colorStops: [ { offset: 0, - color: lastRing0Color, + color: this.setColor(optionsSetup.lastRing0Color), }, { offset: 1, - color: lastRing100Color, + color: this.setColor(optionsSetup.lastRing100Color), }, ], }, @@ -294,10 +290,6 @@ export default { }, setRingPie2() { const optionsSetup = this.optionsSetup; - let eightColor = optionsSetup.eightColor; - if (eightColor == "") { - eightColor = 'rgba(0,0,0,0)'; - } let dataArr = []; for (let i = 0; i < 8; i++) { if (i % 2 === 0) { @@ -306,7 +298,7 @@ export default { value: 25, itemStyle: { normal: { - color: eightColor, + color: this.setColor(optionsSetup.eightColor), borderWidth: 0, borderColor: 'rgba(0,0,0,0)' } @@ -334,10 +326,6 @@ export default { }, setRingPie3() { const optionsSetup = this.optionsSetup; - let dottedColor = optionsSetup.dottedColor; - if (dottedColor == "") { - dottedColor = 'rgba(0,0,0,0)'; - } let dataArr = []; for (let i = 0; i < (optionsSetup.dottedNum * 2); i++) { if (i % 2 === 0) { @@ -346,7 +334,7 @@ export default { value: 25, itemStyle: { normal: { - color: dottedColor, + color: this.setColor(optionsSetup.dottedColor), borderWidth: 0, borderColor: 'rgba(0,0,0,0)' } @@ -359,8 +347,6 @@ export default { itemStyle: { normal: { color: 'rgba(0,0,0,0)', - borderWidth: 0, - borderColor: "rgba(0,0,0,0)" } } }) @@ -376,62 +362,38 @@ export default { // 三分环 setOptionsThreeRing() { const optionsSetup = this.optionsSetup; - const series = this.options.series; - let three1Color = optionsSetup.three1Color; - let three2Color = optionsSetup.three2Color; - let three3Color = optionsSetup.three3Color; - if (three1Color == "") { - three1Color = 'rgba(0,0,0,0)' - } - if (three2Color == "") { - three2Color = 'rgba(0,0,0,0)' - } - if (three3Color == "") { - three3Color = 'rgba(0,0,0,0)' - } - series[4].color = [three1Color, three2Color, three3Color] + const series = this.options.series[4]; + series.color = [this.setColor(optionsSetup.three1Color), this.setColor(optionsSetup.three2Color), this.setColor(optionsSetup.three3Color)] }, // 外指标环 setOptionsOutRing() { const optionsSetup = this.optionsSetup; const series = this.options.series; - let outRingColor = optionsSetup.outRingColor - if (outRingColor == "") { - outRingColor = 'rgba(0,0,0,0)'; - } const axisLine = { show: optionsSetup.isOutRingShow, lineStyle: { width: optionsSetup.outRingWidth, shadowBlur: 0, color: [ - [1, outRingColor] + [1, this.setColor(optionsSetup.outRingColor)] ] } }; - let outTickColor = optionsSetup.outTickColor - if (outTickColor == "") { - outTickColor = 'rgba(0,0,0,0)'; - } const axisTick = { show: optionsSetup.isOutTickShow, lineStyle: { - color: outTickColor, + color: this.setColor(optionsSetup.outTickColor), width: optionsSetup.outTickWidth }, length: optionsSetup.outTickLength, splitNumber: optionsSetup.outTickWidth }; series[5].splitNumber = optionsSetup.outSplitNum - let outSplitColor = optionsSetup.outSplitColor - if (outSplitColor == "") { - outSplitColor = 'rgba(0,0,0,0)' - } const splitLine = { show: optionsSetup.isOutSplitShow, length: optionsSetup.outSplitLength, lineStyle: { - color: outSplitColor, + color: this.setColor(optionsSetup.outSplitColor), width: optionsSetup.outSplitWidth, } }; @@ -443,43 +405,31 @@ export default { setOptionsInRing() { const optionsSetup = this.optionsSetup; const series = this.options.series; - let inRingColor = optionsSetup.inRingColor - if (inRingColor == "") { - inRingColor = 'rgba(0,0,0,0)' - } const axisLine = { show: optionsSetup.isInRingShow, - lineStyle: { + lineStyle: { width: optionsSetup.inRingWidth, - shadowBlur: 0, - color: [ - [1, inRingColor], + shadowBlur: 0, + color: [ + [1, this.setColor(optionsSetup.inRingColor)], ], }, }; - let inTickColor = optionsSetup.inTickColor - if (inTickColor == "") { - inTickColor = 'rgba(0,0,0,0)' - } const axisTick = { show: optionsSetup.isInTickShow, - lineStyle: { - color: inTickColor, - width: optionsSetup.inTickWidth, + lineStyle: { + color: this.setColor(optionsSetup.inTickColor), + width: optionsSetup.inTickWidth, }, length: optionsSetup.inTickLength, - splitNumber: optionsSetup.inTickNum, + splitNumber: optionsSetup.inTickNum, }; series[6].splitNumber = optionsSetup.inSplitNum - let inSplitColor = optionsSetup.inSplitColor - if (inSplitColor == "") { - inSplitColor = 'rgba(0,0,0,0)' - } const splitLine = { show: optionsSetup.isInSplitShow, length: optionsSetup.inSplitLength, lineStyle: { - color: inSplitColor, + color: this.setColor(optionsSetup.inSplitColor), width: optionsSetup.inSplitWidth } }; @@ -487,6 +437,46 @@ export default { series[6].axisTick = axisTick series[6].splitLine = splitLine }, + // 环外环设置 + setOptionsRingOnRing() { + const optionsSetup = this.optionsSetup; + const series = this.options.series[7]; + if (optionsSetup.isRingOnRingShow) { + series.data = [0] + } else { + series.data = '' + } + const itemStyle = { + normal: { + color: this.setColor(optionsSetup.ringOnRingColor), + } + } + series.itemStyle = itemStyle + }, + // 中饼图设置 + setOptionsPie() { + const optionsSetup = this.optionsSetup; + const series = this.options.series[8]; + let width = optionsSetup.pieWidth + const pieWidth = width + "%" + series.radius = [pieWidth, '55%'] + + let pieBlocks = optionsSetup.pieBlocks + if (pieBlocks == "six") { + series.data = [25, 25, 25, 25, 25, 25] + } else if (pieBlocks == "five") { + series.data = [30, 30, 30, 30, 30] + } else { + series.data = [40, 40, 40, 40] + } + const itemStyle = { + normal: { + color: this.setColor(optionsSetup.pieColor), + borderColor: this.setColor(optionsSetup.pieBorderColor), + } + } + series.itemStyle = itemStyle + } } } From 4160b3b1ac15b282ac59e5357d8ef99928a52b55 Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 16 Nov 2021 16:36:29 +0800 Subject: [PATCH 27/37] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0http=EF=BC=8C=E5=8D=95=E7=8B=AC=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V1.0.13__update_set.sql | 14 +++++ .../resultset/components/EditDataSet.vue | 54 ++++++++++++++-- .../src/views/report/resultset/index.vue | 62 ++++++++++++++----- 3 files changed, 108 insertions(+), 22 deletions(-) create mode 100644 report-core/src/main/resources/db/migration/V1.0.13__update_set.sql diff --git a/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql b/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql new file mode 100644 index 00000000..37f591bb --- /dev/null +++ b/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql @@ -0,0 +1,14 @@ +use +aj_report; + +-- 增加字段 +ALTER TABLE `gaea_report_data_set` DROP COLUMN `set_type`; +-- 将该字段值全更新为sql +update gaea_report_data_set set set_type = 'sql'; + +-- 字典 +INSERT INTO `gaea_dict`(`id`, `dict_name`, `dict_code`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default, '数据集类型', 'SET_TYPE', '数据集类型', 'admin', '2021-11-16 14:43:12', 'admin', '2021-11-16 14:43:12', 1); +INSERT INTO `gaea_dict_item`(`id`, `dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default , 'SET_TYPE', 'sql', 'sql', NULL, 1, 'zh', NULL, NULL, 'admin', '2021-11-16 14:43:42', 'admin', '2021-11-16 14:43:42', 1); +INSERT INTO `gaea_dict_item`(`id`, `dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default , 'SET_TYPE', 'http', 'http', NULL, 1, 'zh', NULL, NULL, 'admin', '2021-11-16 14:43:51', 'admin', '2021-11-16 14:43:51', 1); + + diff --git a/report-ui/src/views/report/resultset/components/EditDataSet.vue b/report-ui/src/views/report/resultset/components/EditDataSet.vue index 4d747fad..27cb9a4d 100644 --- a/report-ui/src/views/report/resultset/components/EditDataSet.vue +++ b/report-ui/src/views/report/resultset/components/EditDataSet.vue @@ -15,7 +15,7 @@ label-width="130px" > - + + + + - +
+ + + + + + + + + + + + + + + + + + + @@ -508,7 +530,13 @@ export default { setName: "", setCode: "" }, - + setType: '', //数据集类型,主要用于区分http addSql addHttp edit + httpForm: { //http数据源相关数据 + apiUrl: '', + method: 'GET', + header: '{"Content-Type":"application/json;charset=UTF-8"}', + body: '', + }, //待删除 dictionaryOptions: [], // 数据源类型 list: null, @@ -541,7 +569,11 @@ export default { mounted() {}, methods: { // 编辑数据集,获取单条数据详情 - async addOrEditDataSet(row) { + async addOrEditDataSet(row, type) { + this.setType = type + if (type == 'http' && row.dynSentence) { + this.httpForm = JSON.parse(row.dynSentence) + } //获取数据源下拉 const { code, data } = await queryAllDataSourceSet(); if (code != "200") return; @@ -636,12 +668,18 @@ export default { // 测试预览 async handleClickTabs(tab, event) { + if (this.setType == 'http') { + //针对http数据源 + console.log("http数据集" + this.httpForm); + this.formData.dynSentence = JSON.stringify(this.httpForm) + } if (tab.paneName == "third") { const params = { sourceCode: this.formData.sourceCode, dynSentence: this.formData.dynSentence, dataSetParamDtoList: this.tableData, - dataSetTransformDtoList: this.itemFilterList + dataSetTransformDtoList: this.itemFilterList, + setType: this.setType }; const { code, data } = await testTransformSet(params); if (code != "200") return; @@ -831,6 +869,12 @@ export default { }); }, async submit(formName) { + if (this.setType == 'http') { + //针对http数据源 + console.log("http数据集" + this.httpForm); + this.formData.dynSentence = JSON.stringify(this.httpForm) + } + this.formData.setType = this.setType this.$refs[formName].validate(async (valid, obj) => { if (valid) { if (this.testMassageCode == 200) { diff --git a/report-ui/src/views/report/resultset/index.vue b/report-ui/src/views/report/resultset/index.vue index cb5aaf4f..82fe522d 100644 --- a/report-ui/src/views/report/resultset/index.vue +++ b/report-ui/src/views/report/resultset/index.vue @@ -1,13 +1,19 @@ @@ -95,7 +101,15 @@ export default { }, label: "数据源", field: "sourceCode" - } + }, + { + inputType: "anji-select", //form表单类型 input|input-number|anji-select(传递url或者dictCode)|anji-tree(左侧树)|date|datetime|datetimerange + anjiSelectOption: { + dictCode: "SET_TYPE" + }, + label: "数据集类型", + field: "setType" + }, ], // 操作按钮 buttons: { @@ -143,7 +157,7 @@ export default { editField: "setCode", inputType: "input", rules: [ - { min: 1, max: 50, message: "不超过50个字符", trigger: "blur" } + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} ], disabled: false }, @@ -154,7 +168,7 @@ export default { editField: "setName", inputType: "input", rules: [ - { min: 1, max: 100, message: "不超过100个字符", trigger: "blur" } + {min: 1, max: 100, message: "不超过100个字符", trigger: "blur"} ], disabled: false }, @@ -165,7 +179,7 @@ export default { editField: "setDesc", inputType: "input", rules: [ - { min: 1, max: 255, message: "不超过255个字符", trigger: "blur" } + {min: 1, max: 255, message: "不超过255个字符", trigger: "blur"} ], disabled: false }, @@ -176,7 +190,18 @@ export default { editField: "sourceCode", inputType: "input", rules: [ - { min: 1, max: 50, message: "不超过50个字符", trigger: "blur" } + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} + ], + disabled: false + }, + { + label: "数据集类型", //数据源编码 + placeholder: "", + field: "setType", + editField: "setType", + inputType: "input", + rules: [ + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} ], disabled: false }, @@ -245,16 +270,19 @@ export default { }; }, - created() {}, + created() { + }, methods: { operateDataset(type, prop) { + debugger this.dialogVisibleSetDataSet = true; - if (prop) { + if (prop && prop.msg) { this.dataSet = prop.msg; + type = prop.msg.setType; } else { this.dataSet = {}; } - this.$refs.EditDataSet.addOrEditDataSet(this.dataSet); + this.$refs.EditDataSet.addOrEditDataSet(this.dataSet, type); }, refreshList() { this.$refs.listPage.handleQueryForm("query"); From 174bb9f6578e78bea9630bef43f9ee49e16aa3a7 Mon Sep 17 00:00:00 2001 From: qianming Date: Tue, 16 Nov 2021 17:00:42 +0800 Subject: [PATCH 28/37] =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/widget/decorate/widgetDecoratePieChart.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue index 92cbb97a..58224866 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/decorate/widgetDecoratePieChart.vue @@ -104,7 +104,7 @@ export default { radius: ['80%', '78%'], color: ["#fc8d89", "#46d3f3", "rgba(203,203,203,.2)"], startAngle: 50, - avoidLabelOverlap: true, + avoidLabelOverlap: false, hoverAnimation: false, label: { normal: { From 4b8d8d1fce4c6de127bc56148cce8c531f494c37 Mon Sep 17 00:00:00 2001 From: qianming Date: Tue, 16 Nov 2021 17:38:34 +0800 Subject: [PATCH 29/37] =?UTF-8?q?logo=E5=92=8C=E7=99=BE=E5=88=86=E7=99=BE?= =?UTF-8?q?=E5=9B=BE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- doc/docs/guide/briefUsing.md | 1 + .../bigscreen/designer/widget/{ => percent}/widgetGauge.vue | 0 .../widget/{pie => percent}/widgetPiePercentageChart.vue | 0 report-ui/src/views/report/bigscreen/designer/widget/temp.vue | 4 ++-- .../src/views/report/bigscreen/designer/widget/widget.vue | 4 ++-- 6 files changed, 8 insertions(+), 5 deletions(-) rename report-ui/src/views/report/bigscreen/designer/widget/{ => percent}/widgetGauge.vue (100%) rename report-ui/src/views/report/bigscreen/designer/widget/{pie => percent}/widgetPiePercentageChart.vue (100%) diff --git a/README.md b/README.md index 8375b85a..2fdf64a7 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,9 @@ sql文件的目录在:report-core --> src --> main --> resources -- > db.migra - +
+ + ## 未来计划 diff --git a/doc/docs/guide/briefUsing.md b/doc/docs/guide/briefUsing.md index 8c2d938e..53be87e1 100644 --- a/doc/docs/guide/briefUsing.md +++ b/doc/docs/guide/briefUsing.md @@ -4,4 +4,5 @@ + diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetGauge.vue b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue similarity index 100% rename from report-ui/src/views/report/bigscreen/designer/widget/widgetGauge.vue rename to report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue diff --git a/report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue similarity index 100% rename from report-ui/src/views/report/bigscreen/designer/widget/pie/widgetPiePercentageChart.vue rename to report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue diff --git a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue index 3029be83..f2225df4 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/temp.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/temp.vue @@ -25,11 +25,11 @@ import widgetBarlinechart from "./bar/widgetBarlinechart"; import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; import WidgetPiechart from "./pie/widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; -import WidgetGauge from "./widgetGauge.vue"; +import WidgetGauge from "./percent/widgetGauge.vue"; import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose"; import widgetTable from "./widgetTable.vue"; import widgetMap from "./widgetMap.vue"; -import widgetPiePercentageChart from "./pie/widgetPiePercentageChart"; +import widgetPiePercentageChart from "./percent/widgetPiePercentageChart"; import widgetAirBubbleMap from "./map/widgetAirBubbleMap"; import widgetBarStackChart from "./bar/widgetBarStackChart"; import widgetLineStackChart from "./line/widgetLineStackChart"; diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue index 94e73be4..0dcaf2af 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widget.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widget.vue @@ -36,11 +36,11 @@ import widgetLinechart from "./line/widgetLinechart.vue"; import widgetBarlinechart from "./bar/widgetBarlinechart"; import WidgetPiechart from "./pie/widgetPiechart.vue"; import WidgetFunnel from "./widgetFunnel.vue"; -import WidgetGauge from "./widgetGauge.vue"; +import WidgetGauge from "./percent/widgetGauge.vue"; import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose"; import widgetTable from "./widgetTable.vue"; import widgetMap from "./widgetMap.vue"; -import widgetPiePercentageChart from "./pie/widgetPiePercentageChart"; +import widgetPiePercentageChart from "./percent/widgetPiePercentageChart"; import widgetAirBubbleMap from "./map/widgetAirBubbleMap"; import widgetBarStackChart from "./bar/widgetBarStackChart"; import widgetLineStackChart from "./line/widgetLineStackChart"; From ea452ca285843928402815da9042ac41be642b9d Mon Sep 17 00:00:00 2001 From: qianming Date: Wed, 17 Nov 2021 10:56:48 +0800 Subject: [PATCH 30/37] =?UTF-8?q?=E7=99=BE=E5=88=86=E7=99=BE=E5=9B=BE?= =?UTF-8?q?=E5=8A=A8=E9=9D=99=E6=95=B0=E6=8D=AE=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 --- .../designer/tools/echartsConfigJson/widget-gauge.js | 4 +++- .../tools/echartsConfigJson/widget-pie-percentage.js | 4 +++- .../bigscreen/designer/widget/percent/widgetGauge.vue | 3 ++- .../designer/widget/percent/widgetPiePercentageChart.vue | 7 ++++--- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2fdf64a7..7fa7b036 100644 --- a/README.md +++ b/README.md @@ -169,9 +169,6 @@ sql文件的目录在:report-core --> src --> main --> resources -- > db.migra - Jdk 11 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题) -AJ-Report 使用Druid,版本为1.2.6,如果你觉得你配置都是正常但是数据源测试不过,请尝试修改pom文件降低Druid版本。
-例如:MSSQLSERVER 2014,请将Druid版本降低为1.2.1以下(需要修改源码)。
- 常见问题:https://report.anji-plus.com/report-doc/guide/question.html
## 商业授权 diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gauge.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gauge.js index 9ebbdd32..473b6854 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gauge.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-gauge.js @@ -324,7 +324,9 @@ export const widgetGauge = { placeholder: '', relactiveDom: 'dataType', relactiveDomValue: 'staticData', - value: 50, + value: [ + {"num":50} + ], }, { type: 'dycustComponents', diff --git a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js index 34c22e40..22221703 100644 --- a/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js +++ b/report-ui/src/views/report/bigscreen/designer/tools/echartsConfigJson/widget-pie-percentage.js @@ -201,7 +201,9 @@ export const widgetPiePercentage = { placeholder: '', relactiveDom: 'dataType', relactiveDomValue: 'staticData', - value: 60, + value: [ + {"num":60} + ], }, { type: 'dycustComponents', diff --git a/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue index 6c26c7d8..74e07d31 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetGauge.vue @@ -259,9 +259,10 @@ export default { staticDataFn(val) { const optionsSetup = this.optionsSetup; const series = this.options.series; + const num = val[0]['num']; const data = [ { - value: val + value: num } ] const detail = { diff --git a/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue index 51df152c..bed2427f 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/percent/widgetPiePercentageChart.vue @@ -445,9 +445,10 @@ export default { }, staticDataFn(val) { const title = this.options.title; - title.text = '{nums|' + val + '}{percent|%}'; - this.options.series[6]['data'][0]['value'] = val; - this.options.series[6]['data'][1]['value'] = 100 - val; + const num = val[0]['num']; + title.text = '{nums|' + num + '}{percent|%}'; + this.options.series[6]['data'][0]['value'] = num; + this.options.series[6]['data'][1]['value'] = 100 - num; }, dynamicDataFn(val, refreshTime) { if (!val) return; From 90447862b38f38ae7ea035939b240887c700ca09 Mon Sep 17 00:00:00 2001 From: qianming Date: Wed, 17 Nov 2021 14:49:23 +0800 Subject: [PATCH 31/37] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/docs/guide/dataset.md | 8 +++++++- doc/docs/picture/dateset/img_5.png | Bin 0 -> 14334 bytes 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 doc/docs/picture/dateset/img_5.png diff --git a/doc/docs/guide/dataset.md b/doc/docs/guide/dataset.md index e43f8044..76b37d2e 100644 --- a/doc/docs/guide/dataset.md +++ b/doc/docs/guide/dataset.md @@ -1,4 +1,6 @@ -## 常见数据集 +![img5](../picture/dateset/img_5.png) + +## SQL数据集 ### Mysql数据集 @@ -35,3 +37,7 @@ #### 字典项 场景有限,待补充。 + +## HTTP数据集 + +即原有http数据源的功能,原有http数据源不动 \ No newline at end of file diff --git a/doc/docs/picture/dateset/img_5.png b/doc/docs/picture/dateset/img_5.png new file mode 100644 index 0000000000000000000000000000000000000000..33f84f2001803b35cb08c0d5501fad3fbc31454e GIT binary patch literal 14334 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 WSTASkIq+TI4MkZsnNq1&@Ba^^FeaP; literal 0 HcmV?d00001 From 5499f073e320c2d85393d6653b7840ff56d5a0fa Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Fri, 19 Nov 2021 10:04:35 +0800 Subject: [PATCH 32/37] debug --- .../modules/dataset/service/impl/DataSetServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java index 481bbc83..216b3228 100644 --- a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java @@ -220,15 +220,16 @@ public class DataSetServiceImpl implements DataSetService { */ @Override public OriginalDataDto getData(DataSetDto dto) { - String dynSentence = dto.getDynSentence(); OriginalDataDto originalDataDto = new OriginalDataDto(); String setCode = dto.getSetCode(); //1.获取数据集、参数替换、数据转换 DataSetDto dataSetDto = detailSet(setCode); + String dynSentence = dataSetDto.getDynSentence(); //2.获取数据源 DataSource dataSource; - if (dto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) { + if (StringUtils.isNotBlank(dataSetDto.getSetType()) + && dataSetDto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) { //http不需要数据源,兼容已有的逻辑,将http所需要的数据塞进DataSource dataSource = new DataSource(); dataSource.setSourceConfig(dynSentence); From e748fec854e4978c93eb7b269ae8848214eb1a05 Mon Sep 17 00:00:00 2001 From: qianming Date: Tue, 23 Nov 2021 10:24:12 +0800 Subject: [PATCH 33/37] update --- report-core/src/main/resources/bootstrap.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report-core/src/main/resources/bootstrap.yml b/report-core/src/main/resources/bootstrap.yml index 639edde1..b694ce45 100644 --- a/report-core/src/main/resources/bootstrap.yml +++ b/report-core/src/main/resources/bootstrap.yml @@ -66,7 +66,7 @@ logging: customer: # 开发测试用本地文件,如果是生产,请考虑使用对象存储 file: - #上传对应本地全路径 + #上传对应本地全路径,路径必须是真实存在的 dist-path: /app/disk/upload/ white-list: .png|.jpg|.gif|.icon|.pdf|.xlsx|.xls|.csv|.mp4|.avi excelSuffix: .xlsx|.xls|.csv From 840c7db5c8ba69c4bd89d81c8677a63477e3d62a Mon Sep 17 00:00:00 2001 From: qianming Date: Wed, 24 Nov 2021 17:53:59 +0800 Subject: [PATCH 34/37] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/docs/guide/question.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/docs/guide/question.md b/doc/docs/guide/question.md index ed248ab6..f6b2ef73 100644 --- a/doc/docs/guide/question.md +++ b/doc/docs/guide/question.md @@ -48,6 +48,13 @@ - 使用IDEA进行源码编译时提示:“*** openjdk-***”
请使用jdk1.8 +### 启动服务报错 + +- 提示“xxx The driver has not received any packets from the server”
+ 1、确保软件打包正常
+ 2、mysql版本不兼容,详细看上面关于版本兼容性
+ 3、bootstrap.yml中配置的mysql地址ip不对
+ From 216ed9701cb891363d6577dd40938f3c6d14ef4e Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 25 Nov 2021 09:51:23 +0800 Subject: [PATCH 35/37] update --- doc/docs/guide/question.md | 2 +- .../views/report/bigscreen/designer/widget/widgetTable.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/docs/guide/question.md b/doc/docs/guide/question.md index f6b2ef73..4645e2fa 100644 --- a/doc/docs/guide/question.md +++ b/doc/docs/guide/question.md @@ -29,7 +29,6 @@ - 数据源数据集用法总结
[链接](https://my.oschina.net/u/4517014/blog/5270828)
- **注**:http数据源未来会挪到数据集那边
### 执行源码编译脚本(build.sh)报错 @@ -51,6 +50,7 @@ ### 启动服务报错 - 提示“xxx The driver has not received any packets from the server”
+ 连不上mysql。
1、确保软件打包正常
2、mysql版本不兼容,详细看上面关于版本兼容性
3、bootstrap.yml中配置的mysql地址ip不对
diff --git a/report-ui/src/views/report/bigscreen/designer/widget/widgetTable.vue b/report-ui/src/views/report/bigscreen/designer/widget/widgetTable.vue index 0cdcda66..620ea3c6 100644 --- a/report-ui/src/views/report/bigscreen/designer/widget/widgetTable.vue +++ b/report-ui/src/views/report/bigscreen/designer/widget/widgetTable.vue @@ -143,12 +143,12 @@ export default { const tableData = this.optionsData; tableData.dataType == "staticData" ? this.handlerStaticData(tableData.staticData) - : this.handlerDymaicData(tableData.dynamicData, tableData.refreshTime); + : this.handlerDynamicData(tableData.dynamicData, tableData.refreshTime); }, handlerStaticData(data) { this.list = data; }, - handlerDymaicData(data, refreshTime) { + handlerDynamicData(data, refreshTime) { if (!data) return; if (this.ispreview) { this.getEchartData(data); From 6f5348af88c128e3e56254f29e59ff61b119b4a8 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 25 Nov 2021 09:57:28 +0800 Subject: [PATCH 36/37] update --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 7fa7b036..c47d0e1a 100644 --- a/README.md +++ b/README.md @@ -142,8 +142,7 @@ sql文件的目录在:report-core --> src --> main --> resources -- > db.migra -
- + ## 未来计划 From a16f70ab8d112972e64ae100134042dd8d7a9285 Mon Sep 17 00:00:00 2001 From: qianming Date: Thu, 25 Nov 2021 10:00:09 +0800 Subject: [PATCH 37/37] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c47d0e1a..6ac595e9 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ sql文件的目录在:report-core --> src --> main --> resources -- > db.migra - + ## 未来计划