Commit 4bad9ea327fd14c21d8a84ce470d69a39f57f381
1 parent
c05b85a6
1、上下移动问题处理
2、datav饼图处理 3、动态地址打包问题处理 4、折线图处理 5、添加echar空心饼图(自动悬浮,待开发)
Showing
14 changed files
with
1197 additions
and
136 deletions
config/dev.env.js
| ... | ... | @@ -4,8 +4,8 @@ const prodEnv = require('./prod.env') |
| 4 | 4 | //是否开发状态 |
| 5 | 5 | const isDev = true; |
| 6 | 6 | //开发API地址 |
| 7 | - const devAdrress='"http://weberp.xlyprint.cn/xlyReport"'; | |
| 8 | -//const devAdrress='"http://127.0.0.1:8080/xlyReport"'; | |
| 7 | +const devAdrress='"http://weberp.xlyprint.cn/xlyReport"'; | |
| 8 | +// const devAdrress='"http://127.0.0.1:8080/xlyReport"'; | |
| 9 | 9 | //正式打包API地址 |
| 10 | 10 | const ipAdrress='"http://"+location.host+"/xlyReport"'; |
| 11 | 11 | ... | ... |
package.json
| ... | ... | @@ -13,6 +13,7 @@ |
| 13 | 13 | }, |
| 14 | 14 | "dependencies": { |
| 15 | 15 | "@ckeditor/ckeditor5-build-decoupled-document": "^23.1.0", |
| 16 | + "@jiaminghi/c-render": "^0.4.3", | |
| 16 | 17 | "@jiaminghi/data-view": "^2.10.0", |
| 17 | 18 | "@smallwei/avue": "^2.8.23", |
| 18 | 19 | "axios": "0.18.0", |
| ... | ... | @@ -48,6 +49,7 @@ |
| 48 | 49 | "vuex": "3.0.1" |
| 49 | 50 | }, |
| 50 | 51 | "devDependencies": { |
| 52 | + "@jiaminghi/charts": "^0.2.18", | |
| 51 | 53 | "autoprefixer": "8.5.0", |
| 52 | 54 | "babel-core": "6.26.0", |
| 53 | 55 | "babel-helper-vue-jsx-merge-props": "2.0.3", | ... | ... |
src/views/bigscreenDesigner/designer/components/LabelTag.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="label-tag"> | |
| 3 | + <template v-if="mergedConfig"> | |
| 4 | + <div class="label-item" v-for="(label, i) in mergedConfig.data" :key="label" :style="mergedConfig.labelStyle"> | |
| 5 | + <div :style="`background-color: ${mergedConfig.colors[i % mergedConfig.colors.length]};margin-right:5px`" />{{ label }} | |
| 6 | + </div> | |
| 7 | + </template> | |
| 8 | + </div> | |
| 9 | +</template> | |
| 10 | + | |
| 11 | +<script> | |
| 12 | +import { deepMerge } from '@jiaminghi/charts/lib/util/index' | |
| 13 | + | |
| 14 | +import { deepClone } from '@jiaminghi/c-render/lib/plugin/util' | |
| 15 | + | |
| 16 | +export default { | |
| 17 | + name: 'LabelTag', | |
| 18 | + props: { | |
| 19 | + config: { | |
| 20 | + type: Object, | |
| 21 | + default: () => ([]) | |
| 22 | + } | |
| 23 | + }, | |
| 24 | + data () { | |
| 25 | + return { | |
| 26 | + defaultConfig: { | |
| 27 | + /** | |
| 28 | + * @description Label data | |
| 29 | + * @type {Array<String>} | |
| 30 | + * @default data = [] | |
| 31 | + * @example data = ['label1', 'label2'] | |
| 32 | + */ | |
| 33 | + data: [], | |
| 34 | + /** | |
| 35 | + * @description Label color (Hex|Rgb|Rgba|color keywords) | |
| 36 | + * @type {Array<String>} | |
| 37 | + * @default colors = ['#00baff', '#3de7c9', '#fff', '#ffc530', '#469f4b'] | |
| 38 | + * @example colors = ['#666', 'rgb(0, 0, 0)', 'rgba(0, 0, 0, 1)', 'red'] | |
| 39 | + */ | |
| 40 | + colors: ['#00baff', '#3de7c9', '#fff', '#ffc530', '#469f4b'] | |
| 41 | + }, | |
| 42 | + | |
| 43 | + mergedConfig: null | |
| 44 | + } | |
| 45 | + }, | |
| 46 | + watch: { | |
| 47 | + config () { | |
| 48 | + const { mergeConfig } = this | |
| 49 | + | |
| 50 | + mergeConfig() | |
| 51 | + } | |
| 52 | + }, | |
| 53 | + methods: { | |
| 54 | + mergeConfig () { | |
| 55 | + let { config, defaultConfig } = this | |
| 56 | + | |
| 57 | + this.mergedConfig = deepMerge(deepClone(defaultConfig, true), config || {}) | |
| 58 | + } | |
| 59 | + }, | |
| 60 | + mounted () { | |
| 61 | + const { mergeConfig } = this | |
| 62 | + | |
| 63 | + mergeConfig() | |
| 64 | + } | |
| 65 | +} | |
| 66 | +</script> | |
| 67 | + | |
| 68 | +<style scoped lang="scss"> | |
| 69 | +.label-tag { | |
| 70 | + display: flex; | |
| 71 | + justify-content: center; | |
| 72 | + align-items: center; | |
| 73 | + | |
| 74 | + .label-item { | |
| 75 | + margin: 5px; | |
| 76 | + font-size: 25px; | |
| 77 | + display: flex; | |
| 78 | + align-items: center; | |
| 79 | + div { | |
| 80 | + width: 12px; | |
| 81 | + height: 12px; | |
| 82 | + margin-left: 5px; | |
| 83 | + } | |
| 84 | + } | |
| 85 | +} | |
| 86 | +</style> | ... | ... |
src/views/bigscreenDesigner/designer/tools/configure/lineCharts/widget-line-stack.js
| ... | ... | @@ -794,8 +794,8 @@ export const widgetLineStack = { |
| 794 | 794 | placeholder: '', |
| 795 | 795 | relactiveDom: 'dataType', |
| 796 | 796 | relactiveDomValue: 'dynamicData', |
| 797 | - chartType: 'widget-stackchart', | |
| 798 | - dictKey: 'STACK_PROPERTIES', | |
| 797 | + chartType: 'widget-linechart_stack', | |
| 798 | + dictKey: 'LINE_STACK_PROPERTIES', | |
| 799 | 799 | value: '', |
| 800 | 800 | }, |
| 801 | 801 | ], | ... | ... |
src/views/bigscreenDesigner/designer/tools/configure/pieCharts/widget-active-ring-chart.js
| ... | ... | @@ -90,20 +90,127 @@ export const widgetActiveRingChart= { |
| 90 | 90 | placeholder: '', |
| 91 | 91 | value: '' |
| 92 | 92 | }, |
| 93 | - [{ | |
| 94 | - name: '环颜色', | |
| 95 | - list: [ | |
| 96 | - { | |
| 97 | - type: 'customColor', | |
| 98 | - label: '', | |
| 99 | - name: 'customColor', | |
| 100 | - required: false, | |
| 101 | - value: [{ color: '#0CD2E6' }, { color: '#00BFA5' }, { color: '#FFC722' }, { color: '#886EFF' }, { color: '#008DEC' }], | |
| 102 | - }, | |
| 103 | - ], | |
| 104 | - }], | |
| 105 | 93 | [ |
| 106 | 94 | { |
| 95 | + name: '标题设置', | |
| 96 | + list: [ | |
| 97 | + { | |
| 98 | + type: 'el-switch', | |
| 99 | + label: '标题显示', | |
| 100 | + name: 'isNoTitle', | |
| 101 | + required: false, | |
| 102 | + placeholder: '', | |
| 103 | + value: false, | |
| 104 | + }, | |
| 105 | + { | |
| 106 | + type: 'el-input-text', | |
| 107 | + label: '标题名', | |
| 108 | + name: 'titleText', | |
| 109 | + required: false, | |
| 110 | + placeholder: '', | |
| 111 | + value: '标题名', | |
| 112 | + }, | |
| 113 | + { | |
| 114 | + type: 'vue-color', | |
| 115 | + label: '字体颜色', | |
| 116 | + name: 'textColor', | |
| 117 | + required: false, | |
| 118 | + placeholder: '', | |
| 119 | + value: '#FFD700' | |
| 120 | + }, | |
| 121 | + { | |
| 122 | + type: 'el-input-number', | |
| 123 | + label: '字体字号', | |
| 124 | + name: 'textFontSize', | |
| 125 | + required: false, | |
| 126 | + placeholder: '', | |
| 127 | + value: 20 | |
| 128 | + }, | |
| 129 | + { | |
| 130 | + type: 'el-select', | |
| 131 | + label: '字体粗细', | |
| 132 | + name: 'textFontWeight', | |
| 133 | + required: false, | |
| 134 | + placeholder: '', | |
| 135 | + selectOptions: [ | |
| 136 | + { code: 'normal', name: '正常' }, | |
| 137 | + { code: 'bold', name: '粗体' }, | |
| 138 | + { code: 'bolder', name: '特粗体' }, | |
| 139 | + { code: 'lighter', name: '细体' } | |
| 140 | + ], | |
| 141 | + value: 'normal' | |
| 142 | + }, | |
| 143 | + { | |
| 144 | + type: 'el-select', | |
| 145 | + label: '字体风格', | |
| 146 | + name: 'textFontStyle', | |
| 147 | + required: false, | |
| 148 | + placeholder: '', | |
| 149 | + selectOptions: [ | |
| 150 | + { code: 'normal', name: '正常' }, | |
| 151 | + { code: 'italic', name: 'italic斜体' }, | |
| 152 | + { code: 'oblique', name: 'oblique斜体' }, | |
| 153 | + ], | |
| 154 | + value: 'normal' | |
| 155 | + }, | |
| 156 | + { | |
| 157 | + type: 'el-select', | |
| 158 | + label: '字体位置', | |
| 159 | + name: 'textAlign', | |
| 160 | + required: false, | |
| 161 | + placeholder: '', | |
| 162 | + selectOptions: [ | |
| 163 | + { code: 'center', name: '居中' }, | |
| 164 | + { code: 'left', name: '左对齐' }, | |
| 165 | + { code: 'right', name: '右对齐' }, | |
| 166 | + ], | |
| 167 | + value: 'center' | |
| 168 | + } | |
| 169 | + ], | |
| 170 | + }, | |
| 171 | + { | |
| 172 | + name: '提示语设置', | |
| 173 | + list: [ | |
| 174 | + { | |
| 175 | + type: 'el-switch', | |
| 176 | + label: '提示语显示', | |
| 177 | + name: 'isNoTipTitle', | |
| 178 | + required: false, | |
| 179 | + placeholder: '', | |
| 180 | + value: false, | |
| 181 | + }, | |
| 182 | + { | |
| 183 | + type: 'el-input-number', | |
| 184 | + label: '字体字号', | |
| 185 | + name: 'tipFontSize', | |
| 186 | + required: false, | |
| 187 | + placeholder: '', | |
| 188 | + value: 16 | |
| 189 | + }, | |
| 190 | + { | |
| 191 | + type: 'vue-color', | |
| 192 | + label: '字体颜色', | |
| 193 | + name: 'tipsColor', | |
| 194 | + required: false, | |
| 195 | + placeholder: '', | |
| 196 | + value: '#00FEFF' | |
| 197 | + }, | |
| 198 | + { | |
| 199 | + type: 'el-select', | |
| 200 | + label: '字体位置', | |
| 201 | + name: 'tipsAlign', | |
| 202 | + required: false, | |
| 203 | + placeholder: '', | |
| 204 | + selectOptions: [ | |
| 205 | + { code: 'up', name: '头部' }, | |
| 206 | + { code: 'down', name: '底部' } | |
| 207 | + | |
| 208 | + ], | |
| 209 | + value: 'down' | |
| 210 | + } | |
| 211 | + ], | |
| 212 | + }, | |
| 213 | + { | |
| 107 | 214 | name: '数字翻牌器样式', |
| 108 | 215 | list: [ |
| 109 | 216 | { |
| ... | ... | @@ -137,12 +244,22 @@ export const widgetActiveRingChart= { |
| 137 | 244 | value: 'normal' |
| 138 | 245 | }, |
| 139 | 246 | ], |
| 247 | + }, | |
| 248 | + { | |
| 249 | + name: '环颜色', | |
| 250 | + list: [ | |
| 251 | + { | |
| 252 | + type: 'customColor', | |
| 253 | + label: '', | |
| 254 | + name: 'customColor', | |
| 255 | + required: false, | |
| 256 | + value: [{ color: '#0CD2E6' }, { color: '#00BFA5' }, { color: '#FFC722' }, { color: '#886EFF' }, { color: '#008DEC' }], | |
| 257 | + }, | |
| 258 | + ], | |
| 140 | 259 | } |
| 141 | 260 | ] |
| 142 | - | |
| 143 | 261 | ], |
| 144 | 262 | // 数据 |
| 145 | - // 数据 | |
| 146 | 263 | data: [ |
| 147 | 264 | { |
| 148 | 265 | type: 'el-radio-group', | ... | ... |
src/views/bigscreenDesigner/designer/tools/configure/pieCharts/widget-radio-piechart.js
0 → 100644
| 1 | +/* | |
| 2 | + * @Descripttion: 空心饼图 | |
| 3 | + */ | |
| 4 | +export const widgetRadioPiechart= { | |
| 5 | + code: 'widget-radio-piechart', | |
| 6 | + type: 'pieChart', | |
| 7 | + tabName: '饼图', | |
| 8 | + label: '空心饼图(待开发)', | |
| 9 | + icon: 'iconicon_tubiao_bingtu', | |
| 10 | + options: { | |
| 11 | + // 配置 | |
| 12 | + setup: [ | |
| 13 | + { | |
| 14 | + type: 'el-input-text', | |
| 15 | + label: '图层名称', | |
| 16 | + name: 'layerName', | |
| 17 | + required: false, | |
| 18 | + placeholder: '', | |
| 19 | + value: '空心饼图', | |
| 20 | + }, | |
| 21 | + { | |
| 22 | + type: 'vue-color', | |
| 23 | + label: '背景颜色', | |
| 24 | + name: 'background', | |
| 25 | + required: false, | |
| 26 | + placeholder: '', | |
| 27 | + value: '' | |
| 28 | + }, | |
| 29 | + { | |
| 30 | + type: 'el-select', | |
| 31 | + label: '饼图样式', | |
| 32 | + name: 'piechartStyle', | |
| 33 | + required: false, | |
| 34 | + placeholder: '', | |
| 35 | + selectOptions: [ | |
| 36 | + { code: 'shixin', name: '实心饼图' }, | |
| 37 | + { code: 'kongxin', name: '空心饼图' }, | |
| 38 | + ], | |
| 39 | + value: 'shixin' | |
| 40 | + }, | |
| 41 | + [ | |
| 42 | + { | |
| 43 | + name: '标题设置', | |
| 44 | + list: [ | |
| 45 | + { | |
| 46 | + type: 'el-switch', | |
| 47 | + label: '标题显示', | |
| 48 | + name: 'isNoTitle', | |
| 49 | + required: false, | |
| 50 | + placeholder: '', | |
| 51 | + value: true, | |
| 52 | + }, | |
| 53 | + { | |
| 54 | + type: 'el-input-text', | |
| 55 | + label: '标题名', | |
| 56 | + name: 'titleText', | |
| 57 | + required: false, | |
| 58 | + placeholder: '', | |
| 59 | + value: '', | |
| 60 | + }, | |
| 61 | + { | |
| 62 | + type: 'vue-color', | |
| 63 | + label: '字体颜色', | |
| 64 | + name: 'textColor', | |
| 65 | + required: false, | |
| 66 | + placeholder: '', | |
| 67 | + value: '#FFD700' | |
| 68 | + }, | |
| 69 | + { | |
| 70 | + type: 'el-input-number', | |
| 71 | + label: '字体字号', | |
| 72 | + name: 'textFontSize', | |
| 73 | + required: false, | |
| 74 | + placeholder: '', | |
| 75 | + value: 20 | |
| 76 | + }, | |
| 77 | + { | |
| 78 | + type: 'el-select', | |
| 79 | + label: '字体粗细', | |
| 80 | + name: 'textFontWeight', | |
| 81 | + required: false, | |
| 82 | + placeholder: '', | |
| 83 | + selectOptions: [ | |
| 84 | + { code: 'normal', name: '正常' }, | |
| 85 | + { code: 'bold', name: '粗体' }, | |
| 86 | + { code: 'bolder', name: '特粗体' }, | |
| 87 | + { code: 'lighter', name: '细体' } | |
| 88 | + ], | |
| 89 | + value: 'normal' | |
| 90 | + }, | |
| 91 | + { | |
| 92 | + type: 'el-select', | |
| 93 | + label: '字体风格', | |
| 94 | + name: 'textFontStyle', | |
| 95 | + required: false, | |
| 96 | + placeholder: '', | |
| 97 | + selectOptions: [ | |
| 98 | + { code: 'normal', name: '正常' }, | |
| 99 | + { code: 'italic', name: 'italic斜体' }, | |
| 100 | + { code: 'oblique', name: 'oblique斜体' }, | |
| 101 | + ], | |
| 102 | + value: 'normal' | |
| 103 | + }, | |
| 104 | + { | |
| 105 | + type: 'el-select', | |
| 106 | + label: '字体位置', | |
| 107 | + name: 'textAlign', | |
| 108 | + required: false, | |
| 109 | + placeholder: '', | |
| 110 | + selectOptions: [ | |
| 111 | + { code: 'center', name: '居中' }, | |
| 112 | + { code: 'left', name: '左对齐' }, | |
| 113 | + { code: 'right', name: '右对齐' }, | |
| 114 | + ], | |
| 115 | + value: 'center' | |
| 116 | + }, | |
| 117 | + { | |
| 118 | + type: 'el-input-text', | |
| 119 | + label: '副标题名', | |
| 120 | + name: 'subText', | |
| 121 | + required: false, | |
| 122 | + placeholder: '', | |
| 123 | + value: '' | |
| 124 | + }, | |
| 125 | + { | |
| 126 | + type: 'vue-color', | |
| 127 | + label: '字体颜色', | |
| 128 | + name: 'subTextColor', | |
| 129 | + required: false, | |
| 130 | + placeholder: '', | |
| 131 | + value: 'rgba(30, 144, 255, 1)' | |
| 132 | + }, | |
| 133 | + { | |
| 134 | + type: 'el-input-number', | |
| 135 | + label: '字体字号', | |
| 136 | + name: 'subTextFontSize', | |
| 137 | + required: false, | |
| 138 | + placeholder: '', | |
| 139 | + value: 20 | |
| 140 | + }, | |
| 141 | + { | |
| 142 | + type: 'el-select', | |
| 143 | + label: '字体粗细', | |
| 144 | + name: 'subTextFontWeight', | |
| 145 | + required: false, | |
| 146 | + placeholder: '', | |
| 147 | + selectOptions: [ | |
| 148 | + { code: 'normal', name: '正常' }, | |
| 149 | + { code: 'bold', name: '粗体' }, | |
| 150 | + { code: 'bolder', name: '特粗体' }, | |
| 151 | + { code: 'lighter', name: '细体' } | |
| 152 | + ], | |
| 153 | + value: 'normal' | |
| 154 | + }, | |
| 155 | + { | |
| 156 | + type: 'el-select', | |
| 157 | + label: '字体风格', | |
| 158 | + name: 'subTextFontStyle', | |
| 159 | + required: false, | |
| 160 | + placeholder: '', | |
| 161 | + selectOptions: [ | |
| 162 | + { code: 'normal', name: '正常' }, | |
| 163 | + { code: 'italic', name: 'italic斜体' }, | |
| 164 | + { code: 'oblique', name: 'oblique斜体' }, | |
| 165 | + ], | |
| 166 | + value: 'normal' | |
| 167 | + }, | |
| 168 | + ], | |
| 169 | + }, | |
| 170 | + { | |
| 171 | + name: '数值设定', | |
| 172 | + list: [ | |
| 173 | + { | |
| 174 | + type: 'el-switch', | |
| 175 | + label: '显示', | |
| 176 | + name: 'isShow', | |
| 177 | + required: false, | |
| 178 | + placeholder: '', | |
| 179 | + value: true, | |
| 180 | + }, | |
| 181 | + { | |
| 182 | + type: 'el-switch', | |
| 183 | + label: '标题', | |
| 184 | + name: 'isShowTitle', | |
| 185 | + require: false, | |
| 186 | + placeholder: '', | |
| 187 | + value: true, | |
| 188 | + }, | |
| 189 | + { | |
| 190 | + type: 'el-switch', | |
| 191 | + label: '数值', | |
| 192 | + name: 'numberValue', | |
| 193 | + require: false, | |
| 194 | + placeholder: '', | |
| 195 | + value: true, | |
| 196 | + }, | |
| 197 | + { | |
| 198 | + type: 'el-switch', | |
| 199 | + label: '百分比', | |
| 200 | + name: 'percentage', | |
| 201 | + require: false, | |
| 202 | + placeholder: '', | |
| 203 | + value: false, | |
| 204 | + }, | |
| 205 | + { | |
| 206 | + type: 'el-input-number', | |
| 207 | + label: '字体字号', | |
| 208 | + name: 'fontSize', | |
| 209 | + required: false, | |
| 210 | + placeholder: '', | |
| 211 | + value: 12, | |
| 212 | + }, | |
| 213 | + { | |
| 214 | + type: 'vue-color', | |
| 215 | + label: '字体颜色', | |
| 216 | + name: 'subTextColor', | |
| 217 | + required: false, | |
| 218 | + placeholder: '', | |
| 219 | + value: '' | |
| 220 | + }, | |
| 221 | + { | |
| 222 | + type: 'el-select', | |
| 223 | + label: '字体粗细', | |
| 224 | + name: 'fontWeight', | |
| 225 | + required: false, | |
| 226 | + placeholder: '', | |
| 227 | + selectOptions: [ | |
| 228 | + { code: 'normal', name: '正常' }, | |
| 229 | + { code: 'bold', name: '粗体' }, | |
| 230 | + { code: 'bolder', name: '特粗体' }, | |
| 231 | + { code: 'lighter', name: '细体' } | |
| 232 | + ], | |
| 233 | + value: 'normal' | |
| 234 | + }, | |
| 235 | + ], | |
| 236 | + }, | |
| 237 | + { | |
| 238 | + name: '提示语设置', | |
| 239 | + list: [ | |
| 240 | + { | |
| 241 | + type: 'el-input-number', | |
| 242 | + label: '字体字号', | |
| 243 | + name: 'tipFontSize', | |
| 244 | + required: false, | |
| 245 | + placeholder: '', | |
| 246 | + value: 16 | |
| 247 | + }, | |
| 248 | + { | |
| 249 | + type: 'vue-color', | |
| 250 | + label: '字体颜色', | |
| 251 | + name: 'tipsColor', | |
| 252 | + required: false, | |
| 253 | + placeholder: '', | |
| 254 | + value: '#00FEFF' | |
| 255 | + }, | |
| 256 | + ], | |
| 257 | + }, | |
| 258 | + { | |
| 259 | + name: '图例操作', | |
| 260 | + list: [ | |
| 261 | + { | |
| 262 | + type: 'el-switch', | |
| 263 | + label: '图例', | |
| 264 | + name: 'isShowLegend', | |
| 265 | + required: false, | |
| 266 | + placeholder: '', | |
| 267 | + value: true, | |
| 268 | + }, | |
| 269 | + { | |
| 270 | + type: 'el-slider', | |
| 271 | + label: '图例占比', | |
| 272 | + name: 'piechartSize', | |
| 273 | + required: false, | |
| 274 | + placeholder: '', | |
| 275 | + value: 70, | |
| 276 | + }, | |
| 277 | + { | |
| 278 | + type: 'el-slider', | |
| 279 | + label: '环形宽度', | |
| 280 | + name: 'randWidth', | |
| 281 | + required: false, | |
| 282 | + placeholder: '', | |
| 283 | + value: 40, | |
| 284 | + }, | |
| 285 | + { | |
| 286 | + type: 'vue-color', | |
| 287 | + label: '字体颜色', | |
| 288 | + name: 'legendColor', | |
| 289 | + required: false, | |
| 290 | + placeholder: '', | |
| 291 | + value: '#fff', | |
| 292 | + }, | |
| 293 | + { | |
| 294 | + type: 'el-input-number', | |
| 295 | + label: '字体字号', | |
| 296 | + name: 'legendFontSize', | |
| 297 | + required: false, | |
| 298 | + placeholder: '', | |
| 299 | + value: 16, | |
| 300 | + }, | |
| 301 | + { | |
| 302 | + type: 'el-input-number', | |
| 303 | + label: '图例宽度', | |
| 304 | + name: 'legendWidth', | |
| 305 | + required: false, | |
| 306 | + placeholder: '', | |
| 307 | + value: 15, | |
| 308 | + }, | |
| 309 | + { | |
| 310 | + type: 'el-select', | |
| 311 | + label: '横向位置', | |
| 312 | + name: 'lateralPosition', | |
| 313 | + required: false, | |
| 314 | + placeholder: '', | |
| 315 | + selectOptions: [ | |
| 316 | + { code: 'center', name: '居中' }, | |
| 317 | + { code: 'left', name: '左对齐' }, | |
| 318 | + { code: 'right', name: '右对齐' }, | |
| 319 | + ], | |
| 320 | + value: 'center' | |
| 321 | + }, | |
| 322 | + { | |
| 323 | + type: 'el-select', | |
| 324 | + label: '纵向位置', | |
| 325 | + name: 'longitudinalPosition', | |
| 326 | + required: false, | |
| 327 | + placeholder: '', | |
| 328 | + selectOptions: [ | |
| 329 | + { code: 'top', name: '顶部' }, | |
| 330 | + { code: 'center', name: '居中' }, | |
| 331 | + { code: 'bottom', name: '底部' }, | |
| 332 | + ], | |
| 333 | + value: 'top' | |
| 334 | + }, | |
| 335 | + { | |
| 336 | + type: 'el-select', | |
| 337 | + label: '布局前置', | |
| 338 | + name: 'layoutFront', | |
| 339 | + required: false, | |
| 340 | + placeholder: '', | |
| 341 | + selectOptions: [ | |
| 342 | + { code: 'vertical', name: '竖排' }, | |
| 343 | + { code: 'horizontal', name: '横排' }, | |
| 344 | + ], | |
| 345 | + value: 'horizontal' | |
| 346 | + }, | |
| 347 | + ], | |
| 348 | + }, | |
| 349 | + { | |
| 350 | + name: '自定义配色', | |
| 351 | + list: [ | |
| 352 | + { | |
| 353 | + type: 'customColor', | |
| 354 | + label: '', | |
| 355 | + name: 'customColor', | |
| 356 | + required: false, | |
| 357 | + value: [{ color: '#0CD2E6' }, { color: '#00BFA5' }, { color: '#FFC722' }, { color: '#886EFF' }, { color: '#008DEC' }], | |
| 358 | + }, | |
| 359 | + ], | |
| 360 | + }, | |
| 361 | + ], | |
| 362 | + ], | |
| 363 | + // 数据 | |
| 364 | + data: [ | |
| 365 | + { | |
| 366 | + type: 'el-radio-group', | |
| 367 | + label: '数据类型', | |
| 368 | + name: 'dataType', | |
| 369 | + require: false, | |
| 370 | + placeholder: '', | |
| 371 | + selectValue: true, | |
| 372 | + selectOptions: [ | |
| 373 | + { | |
| 374 | + code: 'staticData', | |
| 375 | + name: '静态数据', | |
| 376 | + }, | |
| 377 | + { | |
| 378 | + code: 'dynamicData', | |
| 379 | + name: '动态数据', | |
| 380 | + }, | |
| 381 | + ], | |
| 382 | + value: 'staticData', | |
| 383 | + }, | |
| 384 | + { | |
| 385 | + type: 'el-input-number', | |
| 386 | + label: '刷新时间(毫秒)', | |
| 387 | + name: 'refreshTime', | |
| 388 | + relactiveDom: 'dataType', | |
| 389 | + relactiveDomValue: 'dynamicData', | |
| 390 | + value: 3600000 | |
| 391 | + }, | |
| 392 | + { | |
| 393 | + type: 'el-button', | |
| 394 | + label: '静态数据', | |
| 395 | + name: 'staticData', | |
| 396 | + required: false, | |
| 397 | + placeholder: '', | |
| 398 | + relactiveDom: 'dataType', | |
| 399 | + relactiveDomValue: 'staticData', | |
| 400 | + value: [{ "value": 1048, "name": "搜索引擎" }, { "value": 735, "name": "直接访问" }, { "value": 580, "name": "邮件营销" }, { "value": 484, "name": "联盟广告" }, { "value": 300, "name": "视频广告" }] | |
| 401 | + }, | |
| 402 | + { | |
| 403 | + type: 'dycustComponents', | |
| 404 | + label: '', | |
| 405 | + name: 'dynamicData', | |
| 406 | + required: false, | |
| 407 | + placeholder: '', | |
| 408 | + relactiveDom: 'dataType', | |
| 409 | + chartType: 'widget-piechart', | |
| 410 | + relactiveDomValue: 'dynamicData', | |
| 411 | + dictKey: 'PIE_PROPERTIES', | |
| 412 | + value: '', | |
| 413 | + }, | |
| 414 | + ], | |
| 415 | + // 坐标 | |
| 416 | + position: [ | |
| 417 | + { | |
| 418 | + type: 'el-input-number', | |
| 419 | + label: '左边距', | |
| 420 | + name: 'left', | |
| 421 | + required: false, | |
| 422 | + placeholder: '', | |
| 423 | + value: 0, | |
| 424 | + }, | |
| 425 | + { | |
| 426 | + type: 'el-input-number', | |
| 427 | + label: '上边距', | |
| 428 | + name: 'top', | |
| 429 | + required: false, | |
| 430 | + placeholder: '', | |
| 431 | + value: 0, | |
| 432 | + }, | |
| 433 | + { | |
| 434 | + type: 'el-input-number', | |
| 435 | + label: '宽度', | |
| 436 | + name: 'width', | |
| 437 | + required: false, | |
| 438 | + placeholder: '该容器在1920px大屏中的宽度', | |
| 439 | + value: 400, | |
| 440 | + }, | |
| 441 | + { | |
| 442 | + type: 'el-input-number', | |
| 443 | + label: '高度', | |
| 444 | + name: 'height', | |
| 445 | + required: false, | |
| 446 | + placeholder: '该容器在1080px大屏中的高度', | |
| 447 | + value: 200, | |
| 448 | + }, | |
| 449 | + ], | |
| 450 | + } | |
| 451 | +} | ... | ... |
src/views/bigscreenDesigner/designer/tools/configure/texts/widget-digital-flop-single.js
| ... | ... | @@ -36,14 +36,6 @@ export const widgetDigitalFlopSingle= { |
| 36 | 36 | value: '', |
| 37 | 37 | }, |
| 38 | 38 | { |
| 39 | - type: 'el-input-text', | |
| 40 | - label: '内容模版', | |
| 41 | - name: 'content', | |
| 42 | - required: false, | |
| 43 | - placeholder: '', | |
| 44 | - value: '数字{nt}', | |
| 45 | - }, | |
| 46 | - { | |
| 47 | 39 | type: 'el-switch', |
| 48 | 40 | label: '千位符显示', |
| 49 | 41 | name: 'isFormatterNum', |
| ... | ... | @@ -54,31 +46,38 @@ export const widgetDigitalFlopSingle= { |
| 54 | 46 | { |
| 55 | 47 | type: 'el-input-number', |
| 56 | 48 | label: '小数位数', |
| 57 | - name: 'toFixed', | |
| 49 | + name: 'decimals', | |
| 58 | 50 | required: false, |
| 59 | 51 | placeholder: '', |
| 60 | - value: 0, | |
| 52 | + value: 2, | |
| 61 | 53 | }, |
| 62 | 54 | { |
| 63 | - type: 'el-select', | |
| 64 | - label: '水平对齐方式', | |
| 65 | - name: 'textAlign', | |
| 55 | + type: 'el-input-number', | |
| 56 | + label: '动效帧数', | |
| 57 | + name: 'duration', | |
| 66 | 58 | required: false, |
| 67 | 59 | placeholder: '', |
| 68 | - selectOptions: [ | |
| 69 | - {code: 'center', name: '居中'}, | |
| 70 | - {code: 'left', name: '左对齐'}, | |
| 71 | - {code: 'right', name: '右对齐'} | |
| 72 | - ], | |
| 73 | - value: 'center' | |
| 60 | + value: 3000, | |
| 74 | 61 | }, |
| 75 | 62 | { |
| 76 | - type: 'el-input-number', | |
| 77 | - label: '动效帧数', | |
| 78 | - name: 'animationFrame', | |
| 63 | + type: 'el-input-text', | |
| 64 | + label: '文本', | |
| 65 | + name: 'numberText', | |
| 79 | 66 | required: false, |
| 80 | 67 | placeholder: '', |
| 81 | - value: 100, | |
| 68 | + value: '', | |
| 69 | + }, | |
| 70 | + { | |
| 71 | + type: 'el-select', | |
| 72 | + label: '文本位置', | |
| 73 | + name: 'numberTextFix', | |
| 74 | + required: false, | |
| 75 | + placeholder: '', | |
| 76 | + selectOptions: [ | |
| 77 | + {code: 'prefix', name: '前缀'}, | |
| 78 | + {code: 'suffix', name: '后缀'} | |
| 79 | + ], | |
| 80 | + value: 'prefix' | |
| 82 | 81 | }, |
| 83 | 82 | [ |
| 84 | 83 | { |
| ... | ... | @@ -87,7 +86,7 @@ export const widgetDigitalFlopSingle= { |
| 87 | 86 | { |
| 88 | 87 | type: 'vue-color', |
| 89 | 88 | label: '颜色', |
| 90 | - name: 'fill', | |
| 89 | + name: 'color', | |
| 91 | 90 | required: false, |
| 92 | 91 | placeholder: '', |
| 93 | 92 | value: '#3de7c9' | ... | ... |
src/views/bigscreenDesigner/designer/tools/main.js
| ... | ... | @@ -17,6 +17,7 @@ import { widgetGradientBarchart } from "./configure/barCharts/widget-gradient-ba |
| 17 | 17 | import { widgetLinechart } from "./configure/lineCharts/widget-linechart" |
| 18 | 18 | import { widgetBarlinechart } from "./configure/barlineCharts/widget-barlinechart" |
| 19 | 19 | import { widgetPiechart } from "./configure/pieCharts/widget-piechart" |
| 20 | +import {widgetRadioPiechart} from "./configure/pieCharts/widget-radio-piechart" | |
| 20 | 21 | import { widgetFunnel } from "./configure/funnelCharts/widget-funnel" |
| 21 | 22 | import { widgetGauge } from "./configure/percentCharts/widget-gauge" |
| 22 | 23 | import { widgetLineMap } from "./configure/mapCharts/widget-line-map" |
| ... | ... | @@ -93,5 +94,6 @@ export const widgetTool = [ |
| 93 | 94 | widgetBorderBoxFloat, |
| 94 | 95 | widgetDigitalFlopSingle, |
| 95 | 96 | widgetSvg, |
| 96 | - widgetRotateRanking | |
| 97 | + widgetRotateRanking, | |
| 98 | + widgetRadioPiechart | |
| 97 | 99 | ] | ... | ... |
src/views/bigscreenDesigner/designer/widget/line/widgetLineStackChart.vue
| ... | ... | @@ -276,20 +276,24 @@ export default { |
| 276 | 276 | const optionsSetup = this.optionsSetup; |
| 277 | 277 | const dataZoom ={}; |
| 278 | 278 | const dataZoomList =[]; |
| 279 | - dataZoom.type= 'slider'; | |
| 280 | - dataZoom.show= optionsSetup.isShowZoom;//显示滚动条 | |
| 281 | - dataZoom.zoomLock=false;//锁定滚动条缩放,(固定滚动条长度) | |
| 282 | - dataZoom.left=optionsSetup.bottomLeft+'%';//离左边的百分比距离 | |
| 283 | - dataZoom.bottom=optionsSetup.bottomZoom;//距离底部距离 | |
| 284 | - dataZoom.start=optionsSetup.startZoom;//开始位置 | |
| 285 | - dataZoom.end=optionsSetup.endZoom;//结束位置 | |
| 286 | - dataZoom.showDataShadow=true; //屏蔽折线图,true为显示折线图 | |
| 287 | - // dataZoom.barBorderRadius=optionsSetup.borderRadiusZoom; | |
| 288 | - dataZoom.borderColor=optionsSetup.borderColorZoom; | |
| 289 | - dataZoom.height=optionsSetup.heightZoom; | |
| 290 | - dataZoom.backgroundColor=optionsSetup.backgroundColorZoom; | |
| 291 | - dataZoomList.push(dataZoom); | |
| 292 | - this.options.dataZoom=dataZoomList; | |
| 279 | + if(this.isNotBlank(optionsSetup.isShowZoom) && optionsSetup.isShowZoom){ | |
| 280 | + dataZoom.type= 'slider'; | |
| 281 | + dataZoom.show= optionsSetup.isShowZoom;//显示滚动条 | |
| 282 | + dataZoom.zoomLock=false;//锁定滚动条缩放,(固定滚动条长度) | |
| 283 | + dataZoom.left=optionsSetup.bottomLeft+'%';//离左边的百分比距离 | |
| 284 | + dataZoom.bottom=optionsSetup.bottomZoom;//距离底部距离 | |
| 285 | + dataZoom.start=optionsSetup.startZoom;//开始位置 | |
| 286 | + dataZoom.end=optionsSetup.endZoom;//结束位置 | |
| 287 | + dataZoom.showDataShadow=true; //屏蔽折线图,true为显示折线图 | |
| 288 | + // dataZoom.barBorderRadius=optionsSetup.borderRadiusZoom; | |
| 289 | + dataZoom.borderColor=optionsSetup.borderColorZoom; | |
| 290 | + dataZoom.height=optionsSetup.heightZoom; | |
| 291 | + dataZoom.backgroundColor=optionsSetup.backgroundColorZoom; | |
| 292 | + dataZoomList.push(dataZoom); | |
| 293 | + this.options.dataZoom=dataZoomList; | |
| 294 | + }else{ | |
| 295 | + this.options.dataZoom=null; | |
| 296 | + } | |
| 293 | 297 | this.options={...this.options}; |
| 294 | 298 | }, |
| 295 | 299 | // 图例名称设置 |
| ... | ... | @@ -440,64 +444,65 @@ export default { |
| 440 | 444 | }); |
| 441 | 445 | }, |
| 442 | 446 | renderingFn(optionsSetup, val) { |
| 447 | + this.staticDataFn(val); | |
| 443 | 448 | //颜色 |
| 444 | - const customColor = optionsSetup.customColor; | |
| 445 | - const arrColor = []; | |
| 446 | - for (let i = 0; i < customColor.length; i++) { | |
| 447 | - arrColor.push(customColor[i].color); | |
| 448 | - } | |
| 449 | - // x轴 | |
| 450 | - if (optionsSetup.verticalShow) { | |
| 451 | - this.options.xAxis.data = []; | |
| 452 | - this.options.yAxis.data = val.xAxis; | |
| 453 | - this.options.xAxis.type = "value"; | |
| 454 | - this.options.yAxis.type = "category"; | |
| 455 | - } else { | |
| 456 | - this.options.xAxis.data = val.xAxis; | |
| 457 | - this.options.yAxis.data = []; | |
| 458 | - this.options.xAxis.type = "category"; | |
| 459 | - this.options.yAxis.type = "value"; | |
| 460 | - } | |
| 461 | - const series = []; | |
| 462 | - const legendName = []; | |
| 463 | - for (const i in val.series) { | |
| 464 | - if (val.series[i].type == "line") { | |
| 465 | - series.push({ | |
| 466 | - name: val.series[i].name, | |
| 467 | - type: "line", | |
| 468 | - data: val.series[i].data, | |
| 469 | - width: optionsSetup.lineWidth, | |
| 470 | - symbol: optionsSetup.symbol, | |
| 471 | - showSymbol: optionsSetup.markPoint, | |
| 472 | - symbolSize: optionsSetup.pointSize, | |
| 473 | - symbolColor: arrColor[i], | |
| 474 | - smooth: optionsSetup.smoothCurve, | |
| 475 | - // 线条 | |
| 476 | - lineStyle: { | |
| 477 | - color: arrColor[i], | |
| 478 | - width: optionsSetup.lineWidth, | |
| 479 | - }, | |
| 480 | - //点 | |
| 481 | - itemStyle: { | |
| 482 | - color: arrColor[i], | |
| 483 | - }, | |
| 484 | - areaStyle: this.getOptionArea(), | |
| 485 | - // 标题部分 | |
| 486 | - label: { | |
| 487 | - show: optionsSetup.isShow, | |
| 488 | - position: "top", | |
| 489 | - distance: 10, | |
| 490 | - fontSize: optionsSetup.fontSize, | |
| 491 | - color: optionsSetup.subTextColor, | |
| 492 | - fontWeight: optionsSetup.fontWeight, | |
| 493 | - }, | |
| 494 | - }) | |
| 495 | - } | |
| 496 | - legendName.push(val.series[i].name); | |
| 497 | - } | |
| 498 | - this.options.series = series; | |
| 499 | - this.options.legend['data'] = legendName; | |
| 500 | - this.setOptionsLegendName(legendName); | |
| 449 | + // const customColor = optionsSetup.customColor; | |
| 450 | + // const arrColor = []; | |
| 451 | + // for (let i = 0; i < customColor.length; i++) { | |
| 452 | + // arrColor.push(customColor[i].color); | |
| 453 | + // } | |
| 454 | + // // x轴 | |
| 455 | + // if (optionsSetup.verticalShow) { | |
| 456 | + // this.options.xAxis.data = []; | |
| 457 | + // this.options.yAxis.data = val.xAxis; | |
| 458 | + // this.options.xAxis.type = "value"; | |
| 459 | + // this.options.yAxis.type = "category"; | |
| 460 | + // } else { | |
| 461 | + // this.options.xAxis.data = val.xAxis; | |
| 462 | + // this.options.yAxis.data = []; | |
| 463 | + // this.options.xAxis.type = "category"; | |
| 464 | + // this.options.yAxis.type = "value"; | |
| 465 | + // } | |
| 466 | + // const series = []; | |
| 467 | + // const legendName = []; | |
| 468 | + // for (const i in val.series) { | |
| 469 | + // if (val.series[i].type == "line") { | |
| 470 | + // series.push({ | |
| 471 | + // name: val.series[i].name, | |
| 472 | + // type: "line", | |
| 473 | + // data: val.series[i].data, | |
| 474 | + // width: optionsSetup.lineWidth, | |
| 475 | + // symbol: optionsSetup.symbol, | |
| 476 | + // showSymbol: optionsSetup.markPoint, | |
| 477 | + // symbolSize: optionsSetup.pointSize, | |
| 478 | + // symbolColor: arrColor[i], | |
| 479 | + // smooth: optionsSetup.smoothCurve, | |
| 480 | + // // 线条 | |
| 481 | + // lineStyle: { | |
| 482 | + // color: arrColor[i], | |
| 483 | + // width: optionsSetup.lineWidth, | |
| 484 | + // }, | |
| 485 | + // //点 | |
| 486 | + // itemStyle: { | |
| 487 | + // color: arrColor[i], | |
| 488 | + // }, | |
| 489 | + // areaStyle: this.getOptionArea(), | |
| 490 | + // // 标题部分 | |
| 491 | + // label: { | |
| 492 | + // show: optionsSetup.isShow, | |
| 493 | + // position: "top", | |
| 494 | + // distance: 10, | |
| 495 | + // fontSize: optionsSetup.fontSize, | |
| 496 | + // color: optionsSetup.subTextColor, | |
| 497 | + // fontWeight: optionsSetup.fontWeight, | |
| 498 | + // }, | |
| 499 | + // }) | |
| 500 | + // } | |
| 501 | + // legendName.push(val.series[i].name); | |
| 502 | + // } | |
| 503 | + // this.options.series = series; | |
| 504 | + // this.options.legend['data'] = legendName; | |
| 505 | + // this.setOptionsLegendName(legendName); | |
| 501 | 506 | } |
| 502 | 507 | } |
| 503 | 508 | }; | ... | ... |
src/views/bigscreenDesigner/designer/widget/pie/widgetActiveRingChart.vue
| ... | ... | @@ -2,23 +2,29 @@ |
| 2 | 2 | 动态环图 |
| 3 | 3 | --> |
| 4 | 4 | <template> |
| 5 | -<!-- <div id="widget-active-ring-chart" :style="styleObj">--> | |
| 6 | - <dv-active-ring-chart :config="options" :style="styleObj"/> | |
| 7 | -<!-- </div>--> | |
| 5 | + <div class="bc-chart-item" :style="styleObj" v-if="isRouterAlive" > | |
| 6 | + <div class="bcci-header" :style="titleConfig.titleStyle" v-if="titleConfig.isNoTitle" >{{titleConfig.titleText}}</div> | |
| 7 | + <Label-Tag :config="labelConfig" v-if="labelConfig.isNoTipTitle && labelConfig.tipsAlign=='up'"/> | |
| 8 | + <dv-active-ring-chart :config="options" :style="styleRingChart"/> | |
| 9 | + <Label-Tag :config="labelConfig" v-if="labelConfig.isNoTipTitle && labelConfig.tipsAlign=='down'"/> | |
| 10 | + </div> | |
| 8 | 11 | </template> |
| 9 | 12 | <script> |
| 10 | 13 | import Vue from "vue"; |
| 14 | +import LabelTag from '../../components/LabelTag' | |
| 11 | 15 | import activeRingChart from "@jiaminghi/data-view/lib/components/activeRingChart"; |
| 12 | 16 | Vue.use(activeRingChart) |
| 13 | 17 | export default { |
| 14 | - name: "WidgetActiveRingChart", | |
| 18 | + name: "widgetActiveRingChart", | |
| 15 | 19 | props: { |
| 16 | 20 | value: Object, |
| 17 | 21 | ispreview: Boolean, |
| 18 | 22 | }, |
| 23 | + components: { | |
| 24 | + LabelTag | |
| 25 | + }, | |
| 19 | 26 | data() { |
| 20 | 27 | return { |
| 21 | - //返回图标数据 | |
| 22 | 28 | options: { |
| 23 | 29 | radius:'75%',//环半径 |
| 24 | 30 | activeRadius:'85%',//环半径(动态) |
| ... | ... | @@ -27,8 +33,8 @@ export default { |
| 27 | 33 | activeTimeGap:3000,//切换间隔(ms) |
| 28 | 34 | color:[],//环颜色 |
| 29 | 35 | digitalFlopStyle: { |
| 30 | - fontSize: 30, | |
| 31 | - fill: '#3de7c9' | |
| 36 | + fontSize: 30, | |
| 37 | + fill: '#3de7c9' | |
| 32 | 38 | },//数字翻牌器样式 |
| 33 | 39 | digitalFlopToFixed :0,//数字翻牌器小数位数 |
| 34 | 40 | digitalFlopUnit :'',//数字翻牌器单位 |
| ... | ... | @@ -38,8 +44,30 @@ export default { |
| 38 | 44 | optionsStyle: {}, // 样式 |
| 39 | 45 | optionsData: {}, // 数据 |
| 40 | 46 | optionsCollapse: {}, // 图标属性 |
| 41 | - optionsSetup: {} | |
| 42 | - }; | |
| 47 | + optionsSetup: {}, | |
| 48 | + labelConfig: { | |
| 49 | + data: [], | |
| 50 | + colors:[], | |
| 51 | + labelStyle:{}, | |
| 52 | + isNoTipTitle:false, | |
| 53 | + tipsAlign:'down', | |
| 54 | + }, | |
| 55 | + titleConfig:{ | |
| 56 | + titleStyle:{}, | |
| 57 | + isNoTitle:false, | |
| 58 | + titleText:"测试标题" | |
| 59 | + }, | |
| 60 | + flagInter: null, | |
| 61 | + isRouterAlive:true, | |
| 62 | + } | |
| 63 | + }, | |
| 64 | + provide(){ | |
| 65 | + return{ | |
| 66 | + reload:this.reload | |
| 67 | + } | |
| 68 | + }, | |
| 69 | + beforeDestroy() { | |
| 70 | + clearInterval(this.flagInter); | |
| 43 | 71 | }, |
| 44 | 72 | computed: { |
| 45 | 73 | styleObj() { |
| ... | ... | @@ -53,6 +81,17 @@ export default { |
| 53 | 81 | }; |
| 54 | 82 | return style; |
| 55 | 83 | }, |
| 84 | + styleRingChart() { | |
| 85 | + const style ={ | |
| 86 | + width: this.optionsStyle.width + "px", | |
| 87 | + height: this.optionsStyle.height+ "px", | |
| 88 | + left: this.optionsStyle.left + "px", | |
| 89 | + top: this.optionsStyle.top-20 + "px", | |
| 90 | + position: "static", | |
| 91 | + display: 'flex' | |
| 92 | + }; | |
| 93 | + return style; | |
| 94 | + } | |
| 56 | 95 | }, |
| 57 | 96 | watch: { |
| 58 | 97 | value: { |
| ... | ... | @@ -61,6 +100,7 @@ export default { |
| 61 | 100 | this.optionsData = val.data; |
| 62 | 101 | this.optionsSetup = val.setup; |
| 63 | 102 | this.editorOptions(); |
| 103 | + this.reload(); | |
| 64 | 104 | }, |
| 65 | 105 | deep: true |
| 66 | 106 | } |
| ... | ... | @@ -80,8 +120,44 @@ export default { |
| 80 | 120 | this.setOptionsColor(); |
| 81 | 121 | //数字翻牌器样式 |
| 82 | 122 | this.setFontStyle(); |
| 123 | + //设置提示语 | |
| 124 | + this.setLabelConfig(); | |
| 125 | + //标题设置 | |
| 126 | + this.setTitleConfig(); | |
| 83 | 127 | //基础数据修改 |
| 84 | 128 | this.setOptionsConfig(); |
| 129 | + | |
| 130 | + }, | |
| 131 | + //提示语设置 | |
| 132 | + setLabelConfig(){ | |
| 133 | + const optionsSetup = this.optionsSetup; | |
| 134 | + let labelStyle = {}; | |
| 135 | + if(optionsSetup.isNoTipTitle){ | |
| 136 | + this.labelConfig.isNoTipTitle = optionsSetup.isNoTipTitle; | |
| 137 | + this.labelConfig.tipsAlign = optionsSetup.tipsAlign; | |
| 138 | + labelStyle.color = optionsSetup.tipsColor; | |
| 139 | + labelStyle['font-size'] = optionsSetup.tipFontSize+'px'; | |
| 140 | + this.labelConfig.labelStyle = labelStyle; | |
| 141 | + }else{ | |
| 142 | + this.labelConfig.isNoTipTitle = false; | |
| 143 | + } | |
| 144 | + }, | |
| 145 | + //标题设置 | |
| 146 | + setTitleConfig(){ | |
| 147 | + const optionsSetup = this.optionsSetup; | |
| 148 | + let titleStyle = {}; | |
| 149 | + if(optionsSetup.isNoTitle){ | |
| 150 | + this.titleConfig.isNoTitle = optionsSetup.isNoTitle; | |
| 151 | + this.titleConfig.titleText = optionsSetup.titleText; | |
| 152 | + titleStyle.color = optionsSetup.textColor; | |
| 153 | + titleStyle['font-size'] = optionsSetup.textFontSize+'px'; | |
| 154 | + titleStyle['font-style'] = optionsSetup.textFontStyle; | |
| 155 | + titleStyle['font-weight'] = optionsSetup.textFontWeight; | |
| 156 | + titleStyle['text-align'] = optionsSetup.textAlign; | |
| 157 | + this.titleConfig.titleStyle = titleStyle; | |
| 158 | + }else{ | |
| 159 | + this.titleConfig.isNoTitle = false; | |
| 160 | + } | |
| 85 | 161 | }, |
| 86 | 162 | // 颜色修改 |
| 87 | 163 | setOptionsColor() { |
| ... | ... | @@ -93,6 +169,7 @@ export default { |
| 93 | 169 | arrColor.push(customColor[i].color); |
| 94 | 170 | } |
| 95 | 171 | this.options.color = arrColor; |
| 172 | + this.labelConfig.colors = arrColor; | |
| 96 | 173 | }, |
| 97 | 174 | //字体修改 |
| 98 | 175 | setFontStyle() { |
| ... | ... | @@ -116,7 +193,7 @@ export default { |
| 116 | 193 | this.options.showOriginValue = optionsSetup.showOriginValue; |
| 117 | 194 | //改变options |
| 118 | 195 | // console.log("配置修改:",this.styleObj); |
| 119 | - this.options={...this.options}; | |
| 196 | + // this.options={...this.options}; | |
| 120 | 197 | }, |
| 121 | 198 | //数据类型 |
| 122 | 199 | setOptionsData() { |
| ... | ... | @@ -129,6 +206,7 @@ export default { |
| 129 | 206 | // console.log("设置静态数据",this.options) |
| 130 | 207 | const staticData = typeof val == "string" ? JSON.parse(val) : val; |
| 131 | 208 | this.options.data=staticData; |
| 209 | + this.setLabelConfigData(val); | |
| 132 | 210 | }, |
| 133 | 211 | dynamicDataFn(val, refreshTime) { |
| 134 | 212 | if (!val) return; |
| ... | ... | @@ -150,17 +228,62 @@ export default { |
| 150 | 228 | renderingFn(val) { |
| 151 | 229 | // console.log("设置静态数据",val) |
| 152 | 230 | this.options.data=val; |
| 153 | - this.options={...this.options}; | |
| 154 | - } | |
| 231 | + this.setLabelConfigData(val); | |
| 232 | + this.reload(); | |
| 233 | + }, | |
| 234 | + setLabelConfigData(val){ | |
| 235 | + const data = []; | |
| 236 | + if(this.isNotBlankArray(val)){ | |
| 237 | + for(let i = 0;i<val.length;i++){ | |
| 238 | + const oneVal = val[i]; | |
| 239 | + data.push(oneVal['name']); | |
| 240 | + } | |
| 241 | + this.labelConfig.data = data; | |
| 242 | + } | |
| 243 | + }, | |
| 244 | + // vue hack 之强制刷新组件 | |
| 245 | + reload(){ | |
| 246 | + this.isRouterAlive=false; | |
| 247 | + this.$nextTick(function(){ | |
| 248 | + this.isRouterAlive=true; | |
| 249 | + }) | |
| 250 | + }, | |
| 155 | 251 | |
| 156 | 252 | } |
| 157 | 253 | }; |
| 158 | 254 | |
| 159 | 255 | </script> |
| 160 | 256 | <style scoped lang="scss"> |
| 161 | -.echarts { | |
| 257 | +.bottom-charts { | |
| 162 | 258 | width: 100%; |
| 163 | 259 | height: 100%; |
| 164 | - overflow: hidden; | |
| 260 | + position: absolute; | |
| 261 | + | |
| 262 | + .bc-chart-item { | |
| 263 | + //width: 25%; | |
| 264 | + //height: 100%; | |
| 265 | + //padding-top: 20px; | |
| 266 | + //box-sizing: border-box; | |
| 267 | + position: absolute; | |
| 268 | + } | |
| 269 | + .ringChart{ | |
| 270 | + width: 100%; | |
| 271 | + height: 95%; | |
| 272 | + position: absolute; | |
| 273 | + } | |
| 274 | + //.bcci-header { | |
| 275 | + // height: 50px; | |
| 276 | + // text-align: center; | |
| 277 | + // line-height: 50px; | |
| 278 | + // font-size: 20px; | |
| 279 | + //} | |
| 280 | + // | |
| 281 | + //.label-tag { | |
| 282 | + // height: 30px; | |
| 283 | + //} | |
| 284 | + //.active-ring-info{ position: absolute;} | |
| 285 | + .active-ring-name { | |
| 286 | + font-size: 18px!important; | |
| 287 | + } | |
| 165 | 288 | } |
| 166 | 289 | </style> | ... | ... |
src/views/bigscreenDesigner/designer/widget/pie/widgetRadioPiechart.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div :style="styleObj"> | |
| 3 | + <v-chart :options="options" autoresize/> | |
| 4 | + </div> | |
| 5 | +</template> | |
| 6 | + | |
| 7 | +<script> | |
| 8 | +export default { | |
| 9 | + name: "widgetRadioPiechart", | |
| 10 | + components: {}, | |
| 11 | + props: { | |
| 12 | + value: Object, | |
| 13 | + ispreview: Boolean | |
| 14 | + }, | |
| 15 | + data() { | |
| 16 | + return { | |
| 17 | + options: { | |
| 18 | + tooltip: { | |
| 19 | + trigger: 'item' | |
| 20 | + }, | |
| 21 | + legend: { | |
| 22 | + top: '5%', | |
| 23 | + left: 'center' | |
| 24 | + }, | |
| 25 | + series: [ | |
| 26 | + { | |
| 27 | + name: 'Access From', | |
| 28 | + type: 'pie', | |
| 29 | + radius: ['40%', '70%'], | |
| 30 | + avoidLabelOverlap: false, | |
| 31 | + label: { | |
| 32 | + show: false, | |
| 33 | + position: 'center' | |
| 34 | + }, | |
| 35 | + emphasis: { | |
| 36 | + label: { | |
| 37 | + show: true, | |
| 38 | + fontSize: 10, | |
| 39 | + fontWeight: 'bold' | |
| 40 | + }, | |
| 41 | + scale: true, | |
| 42 | + scaleSize: 5 | |
| 43 | + }, | |
| 44 | + labelLine: { | |
| 45 | + show: false | |
| 46 | + }, | |
| 47 | + data: [ | |
| 48 | + { value: 1048, name: 'Search Engine' }, | |
| 49 | + { value: 735, name: 'Direct' }, | |
| 50 | + { value: 580, name: 'Email' }, | |
| 51 | + { value: 484, name: 'Union Ads' }, | |
| 52 | + { value: 300, name: 'Video Ads' } | |
| 53 | + ] | |
| 54 | + } | |
| 55 | + ] | |
| 56 | + }, | |
| 57 | + optionsStyle: {}, // 样式 | |
| 58 | + optionsData: {}, // 数据 | |
| 59 | + optionsCollapse: {}, // 图标属性 | |
| 60 | + optionsSetup: {} | |
| 61 | + }; | |
| 62 | + }, | |
| 63 | + computed: { | |
| 64 | + styleObj() { | |
| 65 | + return { | |
| 66 | + position: this.ispreview ? "absolute" : "static", | |
| 67 | + width: this.optionsStyle.width + "px", | |
| 68 | + height: this.optionsStyle.height + "px", | |
| 69 | + left: this.optionsStyle.left + "px", | |
| 70 | + top: this.optionsStyle.top + "px", | |
| 71 | + background: this.optionsSetup.background | |
| 72 | + }; | |
| 73 | + } | |
| 74 | + }, | |
| 75 | + watch: { | |
| 76 | + value: { | |
| 77 | + handler(val) { | |
| 78 | + this.optionsStyle = val.position; | |
| 79 | + this.optionsData = val.data; | |
| 80 | + this.optionsCollapse = val.collapse; | |
| 81 | + this.optionsSetup = val.setup; | |
| 82 | + this.editorOptions(); | |
| 83 | + }, | |
| 84 | + deep: true | |
| 85 | + } | |
| 86 | + }, | |
| 87 | + created() { | |
| 88 | + this.optionsStyle = this.value.position; | |
| 89 | + this.optionsData = this.value.data; | |
| 90 | + this.optionsCollapse = this.value.collapse; | |
| 91 | + this.optionsSetup = this.value.setup; | |
| 92 | + this.editorOptions(); | |
| 93 | + }, | |
| 94 | + methods: { | |
| 95 | + // 修改图标options属性 | |
| 96 | + editorOptions() { | |
| 97 | + // this.setOptionsTitle(); | |
| 98 | + // this.setOptionsValue(); | |
| 99 | + // this.setOptionsTooltip(); | |
| 100 | + // this.setOptionsLegend(); | |
| 101 | + // this.setOptionsColor(); | |
| 102 | + // this.setOptionsData(); | |
| 103 | + // this.setOptionsPiechartStyle(); | |
| 104 | + }, | |
| 105 | + // 饼图样式 | |
| 106 | + setOptionsPiechartStyle() { | |
| 107 | + const piechartSize = this.optionsSetup.piechartSize; | |
| 108 | + const randWidth = this.optionsSetup.randWidth; | |
| 109 | + if (this.optionsSetup.piechartStyle == "shixin") { | |
| 110 | + this.options.series[0]["radius"] = piechartSize+"%"; | |
| 111 | + } else if (this.optionsSetup.piechartStyle == "kongxin") { | |
| 112 | + this.options.series[0]["radius"] = [randWidth+"%", piechartSize+"%"]; | |
| 113 | + } else { | |
| 114 | + | |
| 115 | + } | |
| 116 | + }, | |
| 117 | + // 标题设置 | |
| 118 | + setOptionsTitle() { | |
| 119 | + const optionsSetup = this.optionsSetup; | |
| 120 | + const title = {}; | |
| 121 | + title.text = optionsSetup.titleText; | |
| 122 | + title.show = optionsSetup.isNoTitle; | |
| 123 | + title.left = optionsSetup.textAlign; | |
| 124 | + title.textStyle = { | |
| 125 | + color: optionsSetup.textColor, | |
| 126 | + fontSize: optionsSetup.textFontSize, | |
| 127 | + fontWeight: optionsSetup.textFontWeight, | |
| 128 | + fontStyle: optionsSetup.textFontStyle, | |
| 129 | + }; | |
| 130 | + title.subtext = optionsSetup.subText; | |
| 131 | + title.subtextStyle = { | |
| 132 | + color: optionsSetup.subTextColor, | |
| 133 | + fontWeight: optionsSetup.subTextFontWeight, | |
| 134 | + fontSize: optionsSetup.subTextFontSize, | |
| 135 | + fontStyle: optionsSetup.subTextFontStyle, | |
| 136 | + }; | |
| 137 | + this.options.title = title; | |
| 138 | + }, | |
| 139 | + // 数值设定 | |
| 140 | + setOptionsValue() { | |
| 141 | + const optionsSetup = this.optionsSetup; | |
| 142 | + const series = this.options.series; | |
| 143 | + const numberValue = optionsSetup.numberValue ? "{c}" : ""; | |
| 144 | + const percentage = optionsSetup.percentage ? "({d})%" : ""; | |
| 145 | + const formatterVaue | |
| 146 | + = optionsSetup.isShowTitle ?`{a|{b}:${numberValue} ${percentage}}`:`${numberValue} ${percentage}`; | |
| 147 | + const label = { | |
| 148 | + show: optionsSetup.isShow, | |
| 149 | + formatter: formatterVaue, | |
| 150 | + rich: { | |
| 151 | + a: { | |
| 152 | + padding: [-30, 15, -20, 15], | |
| 153 | + color: optionsSetup.subTextColor, | |
| 154 | + fontSize: optionsSetup.fontSize, | |
| 155 | + fontWeight: optionsSetup.fontWeight | |
| 156 | + } | |
| 157 | + }, | |
| 158 | + fontSize: optionsSetup.fontSize, | |
| 159 | + | |
| 160 | + fontWeight: optionsSetup.optionsSetup | |
| 161 | + }; | |
| 162 | + for (const key in series) { | |
| 163 | + if (series[key].type == "pie") { | |
| 164 | + series[key].label = label; | |
| 165 | + series[key].labelLine = {show: optionsSetup.isShow}; | |
| 166 | + } | |
| 167 | + } | |
| 168 | + }, | |
| 169 | + // 提示语设置 tooltip | |
| 170 | + setOptionsTooltip() { | |
| 171 | + const optionsSetup = this.optionsSetup; | |
| 172 | + const tooltip = { | |
| 173 | + trigger: "item", | |
| 174 | + show: true, | |
| 175 | + textStyle: { | |
| 176 | + color: optionsSetup.lineColor, | |
| 177 | + fontSize: optionsSetup.tipFontSize | |
| 178 | + } | |
| 179 | + }; | |
| 180 | + this.options.tooltip = tooltip; | |
| 181 | + }, | |
| 182 | + // 图例操作 legend | |
| 183 | + setOptionsLegend() { | |
| 184 | + const optionsSetup = this.optionsSetup; | |
| 185 | + const legend = this.options.legend; | |
| 186 | + legend.show = optionsSetup.isShowLegend; | |
| 187 | + if(optionsSetup.longitudinalPosition == "center"){ | |
| 188 | + legend.left = optionsSetup.lateralPosition == "left" ? 0 : "auto"; | |
| 189 | + legend.right = optionsSetup.lateralPosition == "right" ? 0 : "auto"; | |
| 190 | + legend.top = '10%'; | |
| 191 | + legend.marginTop = '-150px'; | |
| 192 | + }else{ | |
| 193 | + legend.left = optionsSetup.lateralPosition == "left" ? 0 : "auto"; | |
| 194 | + legend.right = optionsSetup.lateralPosition == "right" ? 0 : "auto"; | |
| 195 | + legend.top = optionsSetup.longitudinalPosition == "top" ? 0 :"auto"; | |
| 196 | + legend.bottom = | |
| 197 | + optionsSetup.longitudinalPosition == "bottom" ? 0 : "auto"; | |
| 198 | + } | |
| 199 | + legend.orient = optionsSetup.layoutFront; | |
| 200 | + legend.textStyle = { | |
| 201 | + color: optionsSetup.legendColor, | |
| 202 | + fontSize: optionsSetup.legendFontSize | |
| 203 | + }; | |
| 204 | + legend.itemWidth = optionsSetup.legendWidth; | |
| 205 | + }, | |
| 206 | + // 图例颜色修改 | |
| 207 | + setOptionsColor() { | |
| 208 | + const optionsSetup = this.optionsSetup; | |
| 209 | + const customColor = optionsSetup.customColor; | |
| 210 | + if (!customColor) return; | |
| 211 | + const arrColor = []; | |
| 212 | + for (let i = 0; i < customColor.length; i++) { | |
| 213 | + arrColor.push(customColor[i].color); | |
| 214 | + } | |
| 215 | + this.options.color = arrColor; | |
| 216 | + this.options = Object.assign({}, this.options); | |
| 217 | + }, | |
| 218 | + setOptionsData() { | |
| 219 | + const optionsData = this.optionsData; // 数据类型 静态 or 动态 | |
| 220 | + optionsData.dataType == "staticData" | |
| 221 | + ? this.staticDataFn(optionsData.staticData) | |
| 222 | + : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime); | |
| 223 | + }, | |
| 224 | + staticDataFn(val) { | |
| 225 | + const staticData = typeof val == "string" ? JSON.parse(val) : val; | |
| 226 | + for (const key in this.options.series) { | |
| 227 | + if (this.options.series[key].type == "pie") { | |
| 228 | + this.options.series[key].data = staticData; | |
| 229 | + } | |
| 230 | + } | |
| 231 | + }, | |
| 232 | + dynamicDataFn(val, refreshTime) { | |
| 233 | + if (!val) return; | |
| 234 | + if (this.ispreview) { | |
| 235 | + this.getEchartData(val); | |
| 236 | + this.flagInter = setInterval(() => { | |
| 237 | + this.getEchartData(val); | |
| 238 | + }, refreshTime); | |
| 239 | + } else { | |
| 240 | + this.getEchartData(val); | |
| 241 | + } | |
| 242 | + }, | |
| 243 | + getEchartData(val) { | |
| 244 | + const data = this.queryEchartsData(val); | |
| 245 | + data.then(res => { | |
| 246 | + this.renderingFn(res); | |
| 247 | + }); | |
| 248 | + }, | |
| 249 | + renderingFn(val) { | |
| 250 | + for (const key in this.options.series) { | |
| 251 | + if (this.options.series[key].type == "pie") { | |
| 252 | + this.options.series[key].data = val; | |
| 253 | + } | |
| 254 | + } | |
| 255 | + } | |
| 256 | + } | |
| 257 | +}; | |
| 258 | +</script> | |
| 259 | + | |
| 260 | +<style scoped lang="scss"> | |
| 261 | +.echarts { | |
| 262 | + width: 100%; | |
| 263 | + height: 100%; | |
| 264 | + overflow: hidden; | |
| 265 | +} | |
| 266 | +</style> | ... | ... |
src/views/bigscreenDesigner/designer/widget/temp.vue
| ... | ... | @@ -48,6 +48,7 @@ import widgetActiveRingChart from "./pie/widgetActiveRingChart"; |
| 48 | 48 | import widgetConicalColumnChart from "./funnel/widgetConicalColumnChart"; |
| 49 | 49 | import widgetDigitalFlopSingle from "./text/widgetDigitalFlopSingle"; |
| 50 | 50 | import widgetSvg from "./div/widgetSvg"; |
| 51 | +import widgetRadioPiechart from "./pie/widgetRadioPiechart"; | |
| 51 | 52 | |
| 52 | 53 | export default { |
| 53 | 54 | name: "WidgetTemp", |
| ... | ... | @@ -65,6 +66,7 @@ export default { |
| 65 | 66 | widgetLinechart, |
| 66 | 67 | widgetBarlinechart, |
| 67 | 68 | WidgetPiechart, |
| 69 | + widgetRadioPiechart, | |
| 68 | 70 | WidgetFunnel, |
| 69 | 71 | WidgetGauge, |
| 70 | 72 | WidgetPieNightingaleRoseArea, | ... | ... |
src/views/bigscreenDesigner/designer/widget/text/widgetDigitalFlopSingle.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="center-cmp" :style="styleObj"> |
| 3 | 3 | <div class="cc-details" :style="detailsClass"> |
| 4 | - <div class="textStyle" >设备总数</div> | |
| 4 | +<!-- <div class="textStyle">设备总数</div>--> | |
| 5 | 5 | <div |
| 6 | 6 | v-for="(dataValue, index) in options.data" |
| 7 | - :style="cardClass()" | |
| 8 | 7 | :key="index" |
| 8 | + :style="cardClass()" | |
| 9 | 9 | > |
| 10 | - <dv-digital-flop :config="dataValue"></dv-digital-flop> | |
| 10 | + <animate-number | |
| 11 | + :from="dataValue.from" | |
| 12 | + :to="dataValue.to" | |
| 13 | + :duration="dataValue.duration" | |
| 14 | + easing="easeOutQuad" | |
| 15 | + v-if="dataValue.type=='number'" | |
| 16 | + ></animate-number> | |
| 17 | + <div v-html="dataValue.value" v-if="dataValue.type=='text'"></div> | |
| 11 | 18 | </div> |
| 12 | 19 | </div> |
| 13 | 20 | </div> |
| 14 | 21 | </template> |
| 15 | 22 | <script> |
| 16 | -import Vue from "vue"; | |
| 17 | -import digitalFlop from "@jiaminghi/data-view/lib/components/digitalFlop"; | |
| 18 | -import {mapState} from "vuex"; | |
| 19 | -Vue.use(digitalFlop); | |
| 23 | +import Vue from 'vue' | |
| 24 | +import VueAnimateNumber from 'vue-animate-number' | |
| 25 | +Vue.use(VueAnimateNumber) | |
| 20 | 26 | export default { |
| 21 | 27 | name: "WidgetDigitalFlopSingle", |
| 22 | 28 | props: { | ... | ... |
src/views/bigscreenDesigner/designer/widget/widget.vue
| ... | ... | @@ -27,6 +27,7 @@ import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue"; |
| 27 | 27 | import widgetLinechart from "./line/widgetLinechart.vue"; |
| 28 | 28 | import widgetBarlinechart from "./barline/widgetBarlinechart"; |
| 29 | 29 | import WidgetPiechart from "./pie/widgetPiechart.vue"; |
| 30 | +import widgetRadioPiechart from "./pie/widgetRadioPiechart"; | |
| 30 | 31 | import WidgetFunnel from "./funnel/widgetFunnel.vue"; |
| 31 | 32 | import WidgetGauge from "./percent/widgetGauge.vue"; |
| 32 | 33 | import WidgetPieNightingaleRoseArea from "./pie/widgetPieNightingaleRose"; |
| ... | ... | @@ -105,7 +106,8 @@ export default { |
| 105 | 106 | widgetBorderBoxFloat, |
| 106 | 107 | widgetDigitalFlopSingle, |
| 107 | 108 | widgetSvg, |
| 108 | - widgetRotateRanking | |
| 109 | + widgetRotateRanking, | |
| 110 | + widgetRadioPiechart, | |
| 109 | 111 | }, |
| 110 | 112 | model: { |
| 111 | 113 | prop: "value", | ... | ... |