调整完毕
This commit is contained in:
		| @@ -313,7 +313,8 @@ export const chartTpl = [{ | |||||||
|     sourceDataId: '', |     sourceDataId: '', | ||||||
|     dynamicData: [] |     dynamicData: [] | ||||||
|   }] |   }] | ||||||
| }, { | }, | ||||||
|  |   { | ||||||
|     label: '饼图', type: 'pie', list: [{ |     label: '饼图', type: 'pie', list: [{ | ||||||
|       code: 'widget-linechart', |       code: 'widget-linechart', | ||||||
|       type: 'pieChart2', |       type: 'pieChart2', | ||||||
| @@ -410,7 +411,19 @@ export const chartTpl = [{ | |||||||
|       dataType: 'staticData', |       dataType: 'staticData', | ||||||
|       staticData: {name: '综合调处率', label: "累计调解成功", v1: 23, totalLabel: "累计排查受理", total: 33}, |       staticData: {name: '综合调处率', label: "累计调解成功", v1: 23, totalLabel: "累计排查受理", total: 33}, | ||||||
|     },] |     },] | ||||||
| }] |   }, { | ||||||
|  |     label: '关系图', type: 'graph', list: [{ | ||||||
|  |       type: "graphChart1", | ||||||
|  |       label: "气泡图", title: "气泡图", border: 'border15', | ||||||
|  |       width: 500, | ||||||
|  |       height: 300, | ||||||
|  |       top: 0, | ||||||
|  |       left: 0, | ||||||
|  |       dataType: 'staticData', | ||||||
|  |       staticData: [], | ||||||
|  |       thumb: 'https://cdn.cunwuyun.cn/dvcp/dv/tpl/graphChart1.png', | ||||||
|  |     }] | ||||||
|  |   }] | ||||||
| const maps = [{ | const maps = [{ | ||||||
|   type: 'map', |   type: 'map', | ||||||
|   label: '地图', |   label: '地图', | ||||||
|   | |||||||
| @@ -1,7 +1,9 @@ | |||||||
| import pie from "./template/pie" | import pie from "./template/pie" | ||||||
| import line from "./template/line"; | import line from "./template/line"; | ||||||
| import bar from "./template/bar"; | import bar from "./template/bar"; | ||||||
|  | import graph from "./template/graph"; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   ...bar, ...line, ...pie |   ...bar, ...line, ...pie, ...graph | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								ui/dv/AiEchart/template/graph.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								ui/dv/AiEchart/template/graph.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | import tools from "./tools"; | ||||||
|  |  | ||||||
|  | const color = ["#18FEFE", "#1890FF"] | ||||||
|  | export const graphChart1 = { | ||||||
|  |   grid: { | ||||||
|  |     left: 50, right: 0 | ||||||
|  |   }, | ||||||
|  |   xAxis: {show: false}, | ||||||
|  |   yAxis: {show: false}, | ||||||
|  |   tooltip: {}, | ||||||
|  |   color, | ||||||
|  |   daemon: { | ||||||
|  |     type: 'graph', | ||||||
|  |     layout: 'force', | ||||||
|  |     label: { | ||||||
|  |       show: true, position: 'inside', | ||||||
|  |     }, symbol: 'circle', dataRender: (row, i) => ({ | ||||||
|  |       ...row, | ||||||
|  |       symbolSize: Math.max(4, 256 * parseFloat(row.纠纷占比) / 100), | ||||||
|  |       value: row.纠纷占比, | ||||||
|  |       itemStyle: { | ||||||
|  |         borderColor: color[i % 2], | ||||||
|  |         borderWidth: 1, | ||||||
|  |         color: tools.$colorUtils.Hex2RGBA(color[i % 2], .5), | ||||||
|  |       } | ||||||
|  |     }), | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | export default { | ||||||
|  |   graphChart1 | ||||||
|  | } | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| import tools from "./tools"; | import tools from "./tools"; | ||||||
|  |  | ||||||
| export const lineChart1 = { | export const lineChart1 = { | ||||||
|   legend: { show: false }, |   legend: {show: false}, | ||||||
|   grid: { |   grid: { | ||||||
|     left: 50, |     left: 50, | ||||||
|     right: 0 |     right: 0 | ||||||
| @@ -10,17 +10,18 @@ export const lineChart1 = { | |||||||
|     trigger: 'axis', |     trigger: 'axis', | ||||||
|     backgroundColor: 'rgba(14, 51, 111, 0.9)', |     backgroundColor: 'rgba(14, 51, 111, 0.9)', | ||||||
|     borderColor: '#1A6ABC', |     borderColor: '#1A6ABC', | ||||||
|     textStyle: { color: '#fff' }, |     textStyle: {color: '#fff'}, | ||||||
|     axisPointer: { type: 'cross' } |     axisPointer: {type: 'cross'} | ||||||
|   }, |   }, | ||||||
|   yAxis: { |   yAxis: { | ||||||
|     nameGap: 23, |     nameGap: 23, | ||||||
|     minInterval: 1, |     minInterval: 1, | ||||||
|     splitLine: { lineStyle: { color: 'rgba(255,255,255,.2)', type: 'dashed' } }, |     splitLine: {lineStyle: {color: 'rgba(255,255,255,.2)', type: 'dashed'}}, | ||||||
|     axisLabel: { color: '#fff' }, |     axisLabel: {color: '#fff'}, | ||||||
|     axisPointer: { snap: true } |     axisPointer: {snap: true} | ||||||
|   }, |   }, | ||||||
|   daemon: (color) => ({ |   daemon: (color) => ({ | ||||||
|  |     type: "line", | ||||||
|     showSymbol: false, |     showSymbol: false, | ||||||
|     smooth: true, |     smooth: true, | ||||||
|     lineStyle: { |     lineStyle: { | ||||||
| @@ -36,8 +37,8 @@ export const lineChart1 = { | |||||||
|         y: 0, |         y: 0, | ||||||
|         y2: 1, |         y2: 1, | ||||||
|         colorStops: [ |         colorStops: [ | ||||||
|           { offset: 0, color: tools.$colorUtils.Hex2RGBA(color, 0.3) }, |           {offset: 0, color: tools.$colorUtils.Hex2RGBA(color, 0.3)}, | ||||||
|           { offset: 1, color: tools.$colorUtils.Hex2RGBA(color, 0.1) } |           {offset: 1, color: tools.$colorUtils.Hex2RGBA(color, 0.1)} | ||||||
|         ] |         ] | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -56,6 +57,7 @@ export const lineChart2 = { | |||||||
|     textStyle: {color: '#fff'} |     textStyle: {color: '#fff'} | ||||||
|   }, |   }, | ||||||
|   daemon: color => ({ |   daemon: color => ({ | ||||||
|  |     type: "line", | ||||||
|     showSymbol: false, |     showSymbol: false, | ||||||
|     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, |     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, | ||||||
|     areaStyle: { |     areaStyle: { | ||||||
| @@ -81,6 +83,7 @@ export const lineChart3 = { | |||||||
|     textStyle: {color: '#fff'} |     textStyle: {color: '#fff'} | ||||||
|   }, |   }, | ||||||
|   daemon: { |   daemon: { | ||||||
|  |     type: "line", | ||||||
|     smooth: true, |     smooth: true, | ||||||
|     lineStyle: { |     lineStyle: { | ||||||
|       shadowBlur: 1, |       shadowBlur: 1, | ||||||
| @@ -102,6 +105,7 @@ export const lineChart4 = { | |||||||
|     textStyle: {color: '#fff'} |     textStyle: {color: '#fff'} | ||||||
|   }, |   }, | ||||||
|   daemon: { |   daemon: { | ||||||
|  |     type: "line", | ||||||
|     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, |     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, | ||||||
|     emphasis: { |     emphasis: { | ||||||
|       focus: 'self' |       focus: 'self' | ||||||
| @@ -125,6 +129,7 @@ export const lineChart5 =  { | |||||||
|     axisPointer: {snap: true} |     axisPointer: {snap: true} | ||||||
|   }, |   }, | ||||||
|   daemon: color => ({ |   daemon: color => ({ | ||||||
|  |     type: "line", | ||||||
|     showSymbol: false, smooth: true, |     showSymbol: false, smooth: true, | ||||||
|     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, |     lineStyle: {shadowBlur: 4, shadowOffsetY: 2}, | ||||||
|     areaStyle: { |     areaStyle: { | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ export default { | |||||||
|         const json = JSON.parse(res.param) |         const json = JSON.parse(res.param) | ||||||
|         if (type == "530300000000") { |         if (type == "530300000000") { | ||||||
|           this.geoData = json.map |           this.geoData = json.map | ||||||
|           this.$refs.map.chart?.setOption({series: {data: this.mapData}}) |           this.$refs.map?.chart?.setOption({series: {data: this.mapData}}) | ||||||
|         } |         } | ||||||
|         this.config.summaryConfigs = json.sta?.map((e, i) => ({pos: ["rt", "lb", 'lt', 'rb'][i % 4], display: "summary20", ...e})) || [] |         this.config.summaryConfigs = json.sta?.map((e, i) => ({pos: ["rt", "lb", 'lt', 'rb'][i % 4], display: "summary20", ...e})) || [] | ||||||
|       }) |       }) | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| <template> | <template> | ||||||
|   <section class="AiEchart"> |   <section class="AiChartV2"> | ||||||
|     <div :ref="AiEchart" class="chart" :style="{minWidth:grid.width,minHeight:grid.height}"/> |     <div ref="chart" class="chart" :style="{minWidth:grid.width,minHeight:grid.height}"/> | ||||||
|     <slot v-if="$slots.default"/> |     <slot v-if="$slots.default"/> | ||||||
|     <render-component v-else-if="ops.render" :render="ops.render" :options="chartOptions" :data="data"/> |     <render-component v-else-if="ops.render" :render="ops.render" :options="chartOptions" :data="data"/> | ||||||
|   </section> |   </section> | ||||||
| @@ -21,7 +21,6 @@ export default { | |||||||
|   props: { |   props: { | ||||||
|     data: {default: () => []}, |     data: {default: () => []}, | ||||||
|     ops: {default: () => ({})}, |     ops: {default: () => ({})}, | ||||||
|     type: {default: "line"}, |  | ||||||
|     tpl: String, |     tpl: String, | ||||||
|     series: Object, |     series: Object, | ||||||
|     theme: { |     theme: { | ||||||
| @@ -48,7 +47,6 @@ export default { | |||||||
|     return { |     return { | ||||||
|       chart: null, |       chart: null, | ||||||
|       timer: null, |       timer: null, | ||||||
|       AiEchart: `AiEchart-${new Date().getTime()}` |  | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   computed: { |   computed: { | ||||||
| @@ -60,13 +58,13 @@ export default { | |||||||
|       return ['#FFBA44', '#EC6666', '#FF3E18', '#C9FF82', '#29D7FA', '#ea7ccc'] |       return ['#FFBA44', '#EC6666', '#FF3E18', '#C9FF82', '#29D7FA', '#ea7ccc'] | ||||||
|     }, |     }, | ||||||
|     chartOptions() { |     chartOptions() { | ||||||
|       const {daemon = {}} = this.$echartTpls[this.tpl] || {} |       const {daemon = {}} = this.$echartTpls[this.tpl] || {} //js代码进入json编辑器会导致函数丢失,所以在这里重新补齐 | ||||||
|       let {type, data, ops: options = {}} = this, |       let {data, ops: options = {}} = this, | ||||||
|           style = this.series ? this.series : this.ops.daemon ? this.ops.daemon : {}, |           style = this.series || options.daemon || {}, | ||||||
|           colors = this.theme === '1' ? this.colors : (options.color || this.colors), |           colors = this.theme === '1' ? this.colors : (options.color || this.colors), | ||||||
|           legend = {textStyle: {color: '#fff', padding: [0, 0, 0, 8], fontSize: 14}, show: false} |           legend = {textStyle: {color: '#fff', padding: [0, 0, 0, 8], fontSize: 14}, show: false} | ||||||
|       const series = data?.[0] ? Array(Object.keys(data?.[0]).length - 1).fill(1) |       const series = data?.[0] ? Array(Object.keys(data?.[0]).length - 1).fill(1) | ||||||
|           .map((e, i) => ({type, ...mergeOps(daemon, typeof style == 'object' ? style : style(colors[i]))})) : [] |           .map((e, i) => mergeOps(typeof daemon == 'function' ? daemon(colors[i]) : daemon, style)) : [] | ||||||
|       return { |       return { | ||||||
|         tooltip: {}, |         tooltip: {}, | ||||||
|         xAxis: { |         xAxis: { | ||||||
| @@ -116,7 +114,8 @@ export default { | |||||||
|         width: width ? (width - this.legend === '1' ? 160 : 0) + 'px' : 'auto', |         width: width ? (width - this.legend === '1' ? 160 : 0) + 'px' : 'auto', | ||||||
|         height: height ? height + 'px' : 'auto' |         height: height ? height + 'px' : 'auto' | ||||||
|       } |       } | ||||||
|     } |     }, | ||||||
|  |     seriesType: v => [...new Set(v.chart.getOption().series?.map(e => e.type) || [])], | ||||||
|   }, |   }, | ||||||
|   watch: { |   watch: { | ||||||
|     data: { |     data: { | ||||||
| @@ -129,71 +128,39 @@ export default { | |||||||
|     theme() { |     theme() { | ||||||
|       this.refresh() |       this.refresh() | ||||||
|     }, |     }, | ||||||
|     type(v) { |  | ||||||
|       v && this.refresh() |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     deepAssign() { |  | ||||||
|       let name, options, src, copy |  | ||||||
|       let length = arguments.length |  | ||||||
|       // 记录要复制的对象的下标 |  | ||||||
|       let i = 1 |  | ||||||
|       // target默认是第一个参数 |  | ||||||
|       let target = arguments[0] || {} |  | ||||||
|       // 如果target不是对象,我们是无法进行复制的,所以设为{} |  | ||||||
|       if (typeof target !== 'object') { |  | ||||||
|         target = {} |  | ||||||
|       } |  | ||||||
|       // 循环遍历要复制的对象 |  | ||||||
|       for (; i < length; i++) { |  | ||||||
|         // 获取当前对象 |  | ||||||
|         options = arguments[i] |  | ||||||
|         // 要求不能为空 避免extend(a,,b)这种情况 |  | ||||||
|         if (options != null) { |  | ||||||
|           for (name in options) { |  | ||||||
|             // 目标属性值 |  | ||||||
|             src = target[name] |  | ||||||
|             // 要复制的对象的属性值 |  | ||||||
|             copy = options[name] |  | ||||||
|  |  | ||||||
|             if (copy && typeof copy == 'object') { |  | ||||||
|               // 递归调用 |  | ||||||
|               target[name] = this.deepAssign(src, copy) |  | ||||||
|             } else if (copy !== undefined) { |  | ||||||
|               target[name] = copy |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       return target |  | ||||||
|     }, |  | ||||||
|     getChartData(render) { |     getChartData(render) { | ||||||
|  |       let data = this.data, option = {} | ||||||
|  |       const canUseDataset = !!["line", "bar", "pie", "scatter", "effectScatter", "parallel", "candlestick", "map", "funnel", "custom"].some(e => this.seriesType.includes(e)) | ||||||
|       if (!render) { |       if (!render) { | ||||||
|         this.chart?.setOption({ |         for (const k in this.chartOptions) { | ||||||
|           dataset: { |           option[k] = this.chartOptions[k] | ||||||
|             source: this.data || [] |  | ||||||
|         } |         } | ||||||
|         }) |       } | ||||||
|  |       if (canUseDataset) { | ||||||
|  |         option.dataset = {source: data || []} | ||||||
|       } else { |       } else { | ||||||
|         this.chart?.setOption({ |         option.series = option.series?.map((e = {}) => { | ||||||
|           ...this.chartOptions, |           if (e.dataRender) { | ||||||
|           dataset: { |             data = data.map(e.dataRender) | ||||||
|             source: this.data || [] |  | ||||||
|           } |           } | ||||||
|         }, true) |           return {...e, data} | ||||||
|  |         }) | ||||||
|  |         console.log(option.series) | ||||||
|       } |       } | ||||||
|  |       this.chart.setOption(option) | ||||||
|     }, |     }, | ||||||
|     initChart() { |     initChart() { | ||||||
|       this.chart = echarts.init(this.$refs[this.AiEchart]) |       const {echarts} = window | ||||||
|  |       this.chart = echarts.init(this.$refs.chart) | ||||||
|       this.chart.setOption(this.chartOptions || {}) |       this.chart.setOption(this.chartOptions || {}) | ||||||
|     }, |     }, | ||||||
|     watchResize() { |     watchResize() { | ||||||
|       this.timer && clearInterval(this.timer) |       this.timer && clearInterval(this.timer) | ||||||
|       this.timer = setInterval(() => { |       this.timer = setInterval(() => { | ||||||
|         if (this.chart?.getHeight() != this.$refs[this.AiEchart]?.clientHeight || |         if (this.chart?.getHeight() != this.$refs.chart?.clientHeight || | ||||||
|             this.chart?.getWidth() != this.$refs[this.AiEchart]?.clientWidth) { |             this.chart?.getWidth() != this.$refs.chart?.clientWidth) { | ||||||
|           this.chart?.resize() |           this.chart?.resize() | ||||||
|         } |         } | ||||||
|       }, 1000) |       }, 1000) | ||||||
| @@ -218,7 +185,7 @@ export default { | |||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
| .AiEchart { | .AiChartV2 { | ||||||
|   display: flex; |   display: flex; | ||||||
|   width: 100%; |   width: 100%; | ||||||
|   height: 100%; |   height: 100%; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user