Commit 090f41a9 authored by liushuai's avatar liushuai

对接csv数据源

parent 45762945
...@@ -90,12 +90,12 @@ const state = () => ({ ...@@ -90,12 +90,12 @@ const state = () => ({
symbolSize: 8, // 数据点符号的大小 symbolSize: 8, // 数据点符号的大小
itemStyle: { itemStyle: {
color: '#fff', // 数据点符号的填充颜色 color: '#fff', // 数据点符号的填充颜色
borderColor: 'rgb(55, 124, 255)', // 数据点符号的边框颜色 // borderColor: 'rgb(55, 124, 255)', // 数据点符号的边框颜色
borderWidth: 2 // 数据点符号的边框宽度 borderWidth: 2 // 数据点符号的边框宽度
}, },
smooth:true, smooth:true,
lineStyle:{ lineStyle:{
color:"rgb(55, 124, 255)", // color:"rgb(55, 124, 255)",
width:2, width:2,
} }
}, },
...@@ -122,7 +122,11 @@ const state = () => ({ ...@@ -122,7 +122,11 @@ const state = () => ({
start: 0, // 初始起始百分比 start: 0, // 初始起始百分比
end: 100 // 初始结束百分比 end: 100 // 初始结束百分比
} }
] ],
dataSet:{
xAxis:{},
yAxis:[],
}
}); });
const getters = { const getters = {
chartSettingsTitle: (state) => state.chartSettingsTitle, chartSettingsTitle: (state) => state.chartSettingsTitle,
...@@ -131,6 +135,7 @@ const getters = { ...@@ -131,6 +135,7 @@ const getters = {
chartSettingsYAxis:(state) => state.chartSettingsYAxis, chartSettingsYAxis:(state) => state.chartSettingsYAxis,
chartSettingsSeries:(state) => state.chartSettingsSeries, chartSettingsSeries:(state) => state.chartSettingsSeries,
chartSettingsDataZoom:(state) => state.chartSettingsDataZoom, chartSettingsDataZoom:(state) => state.chartSettingsDataZoom,
dataSet:(state) => state.dataSet,
} }
const mutations ={ const mutations ={
updateChartSettingsTitle(state, data) { updateChartSettingsTitle(state, data) {
...@@ -151,6 +156,9 @@ const mutations ={ ...@@ -151,6 +156,9 @@ const mutations ={
updateChartSettingsDataZoom(state, data) { updateChartSettingsDataZoom(state, data) {
state.chartSettingsDataZoom = data; state.chartSettingsDataZoom = data;
}, },
updateDataSet(state, data) {
state.dataSet = data;
},
} }
const actions={ const actions={
......
<template>
<div style="width: 15%">
<div style="margin:8px"><span>选择分析的数据文件</span></div>
<el-select v-model="chooseFile" @change="getCSVData" clearable placeholder="请选择">
<el-option
v-for="item in fileList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<div style="margin-top: 20px">
<draggable
v-on:end="dragWidget($event)"
:sort="false">
<transition-group tag="div">
<div class="data-item" v-for="element in dataList" :data-name="element" :key="element" v-if="element !== '时间' && element !== '区域'">
{{element}}
</div>
</transition-group>
</draggable>
<!-- <template v-for="(item,index) in dataList">-->
<!-- <div v-if="index!=0">-->
<!-- <div class="data-item">{{item}}</div>-->
<!-- </div>-->
<!-- </template>-->
</div>
</div>
</template>
<script>
import draggable from 'vuedraggable'
import { getProject, getFileList, createProject,getDataHeader } from '@/api/data'
import {mapState} from "vuex";
export default {
name: "chartdataset",
components:{
draggable
},
data() {
return {
fileList:[],
chooseFile:'',
headerList:[],
dataList:[],
data:[]
}
},
computed: {
...mapState('charts', ['chartSettingsTitle','chartSettingsLegend','chartSettingsXAxis','chartSettingsYAxis','chartSettingsSeries','chartSettingsDataZoom','dataSet']),
},
mounted() {
this.initFileList()
},
watch:{
dataSet:{
deep: true,
handler: function (newVal){
let data = []
for(var i in newVal.yAxis){
data.push(newVal.yAxis[i].name)
}
// console.log(data)
// console.log(this.dataList)
const difference = this.headerList.filter(item => !data.includes(item));
this.dataList = difference
// console.log(difference); // [1, 2]
}
},
},
methods:{
initFileList(){
getFileList().then(res => {
this.fileList = res.data;
}).catch(err => {
console.log(err)
})
},
getCSVData(){
if(this.chooseFile!=""){
let that = this
let file = this.fileList.filter(d=>{return d.id == that.chooseFile})[0]
let data ={
"fId":file.id,
"name":file.name
}
getDataHeader(data).then(res => {
this.dataList = this.headerList = res.data.header
this.data = res.data.data
this.dataSet.xAxis={}
this.dataSet.yAxis=[]
this.$store.commit('charts/updateDataSet', this.dataSet);
}).catch(err => {
console.log(err)
})
}
},
dragWidget(event){
var widgetX = event.originalEvent.clientX;
let widgetY = event.originalEvent.clientY;
let that = this
let id = 'chartDataList'
// console.log(id)
var regionRect = document.getElementById(id).getBoundingClientRect();
if(widgetX>regionRect.left && widgetX<regionRect.left+regionRect.width && widgetY>regionRect.top && widgetY<regionRect.top+regionRect.height){
let name = event.item.getAttribute("data-name")
let res = that.dataSet
let yAxis = {
"name":name,
"list":[]
}
let xAxis ={
"name":"时间",
"list":[]
}
for(var i in that.data){
let item = that.data[i]
let value = item[name]
let time = item[xAxis.name]
yAxis.list.push(value)
xAxis.list.push(time)
}
res.xAxis=xAxis
res.yAxis.push(yAxis)
// console.log(res)
this.$store.commit('charts/updateDataSet', res);
}
}
}
}
</script>
<style scoped>
.data-item{
padding: 0 20px;
font-size: 12px;
cursor: move;
color: #6a6f77;
line-height: 20px;
}
.data-item:hover{
background: #ccc;
}
</style>
<template> <template>
<div style="width: 20%"> <div style="width: 15%">
<!-- <div class="right_title">表单选择与配置</div>--> <!-- <div class="right_title">表单选择与配置</div>-->
<div class="right_main"> <div class="right_main">
<div class="main_edit"> <div class="main_edit">
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<chart-legend></chart-legend> <chart-legend></chart-legend>
<chart-x-axis></chart-x-axis> <chart-x-axis></chart-x-axis>
<chart-y-axis></chart-y-axis> <chart-y-axis></chart-y-axis>
<chart-point></chart-point> <!-- <chart-point></chart-point>-->
<chart-line></chart-line> <chart-line></chart-line>
<chart-data-zoom></chart-data-zoom> <chart-data-zoom></chart-data-zoom>
</el-tab-pane> </el-tab-pane>
......
...@@ -4,7 +4,15 @@ ...@@ -4,7 +4,15 @@
overflow: scroll; overflow: scroll;
position: relative; position: relative;
background: #fbfbfb;"> background: #fbfbfb;">
<div ref="chart" class="chart project" style="min-height: 800px;"></div> <chartdataset></chartdataset>
<div class="project">
<div class="datalist" id="chartDataList">
<template v-for="item in dataSet.yAxis">
<el-tag class="item-tag">{{item.name}} <i class="el-icon-close" @click="deleteData(item)"></i></el-tag>
</template>
</div>
<div ref="chart" class="chart" style="min-height: 600px;"></div>
</div>
<chartedit></chartedit> <chartedit></chartedit>
</div> </div>
...@@ -15,13 +23,13 @@ ...@@ -15,13 +23,13 @@
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import {getData} from "@/api/data" import {getData} from "@/api/data"
import Chartedit from "../chartedit.vue"; import Chartedit from "../chartedit.vue";
import Chartdataset from "../chartdataset";
export default { export default {
name: 'project', name: 'project',
components: {Chartedit}, components: {Chartdataset, Chartedit},
data() { data() {
return { return {
myChart:null, myChart:null,
dataset:[],
XAxis:[], XAxis:[],
YAxis:[], YAxis:[],
value:[] value:[]
...@@ -29,10 +37,15 @@ ...@@ -29,10 +37,15 @@
}, },
mounted() { mounted() {
this.getdata() // this.getdata()
// this.init()
}, },
watch:{ watch:{
dataSet: {
deep: true,
handler: 'init' // 直接将方法名指定为 handler
},
chartSettingsTitle: { chartSettingsTitle: {
deep: true, deep: true,
handler: 'init' // 直接将方法名指定为 handler handler: 'init' // 直接将方法名指定为 handler
...@@ -59,23 +72,14 @@ ...@@ -59,23 +72,14 @@
}, },
}, },
computed: { computed: {
...mapState('charts', ['chartSettingsTitle','chartSettingsLegend','chartSettingsXAxis','chartSettingsYAxis','chartSettingsSeries','chartSettingsDataZoom']), ...mapState('charts', ['chartSettingsTitle','chartSettingsLegend','chartSettingsXAxis','chartSettingsYAxis','chartSettingsSeries','chartSettingsDataZoom','dataSet']),
}, },
methods: { methods: {
getdata(){ deleteData(item){
const params ={"name": "国民总收入"} console.log(this.dataSet.yAxis)
getData(params).then(res=>{ const updatedList = this.dataSet.yAxis.filter(d => d.name !== item.name);
this.dataset= res.data this.dataSet.yAxis= updatedList
let XAxis=[] this.$store.commit('charts/updateDataSet', this.dataSet);
let value=[]
for(var i in res.data){
XAxis.push(res.data[i].year)
value.push(res.data[i].value)
}
this.XAxis = XAxis
this.value = value
this.init()
})
}, },
addPointSetting(series){ addPointSetting(series){
for (var i = 0; i < series.length; i++) { for (var i = 0; i < series.length; i++) {
...@@ -102,17 +106,17 @@ ...@@ -102,17 +106,17 @@
setOption.legend = this.chartSettingsLegend setOption.legend = this.chartSettingsLegend
setOption.xAxis = this.chartSettingsXAxis setOption.xAxis = this.chartSettingsXAxis
setOption.yAxis = this.chartSettingsYAxis setOption.yAxis = this.chartSettingsYAxis
setOption.xAxis.data=this.XAxis setOption.xAxis.data=this.dataSet.xAxis.list
// setOption.xAxis.data=['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine'] // setOption.xAxis.data=['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
setOption.dataZoom = this.chartSettingsDataZoom setOption.dataZoom = this.chartSettingsDataZoom
let data = this.dataSet.yAxis
setOption.series= [ for(var i in data){
{ data[i].data = data[i].list
name: '国民总收入', data[i].type = 'line'
type: 'line', }
data: this.value
}, setOption.series = data
]
if(this.chartSettingsSeries.showPoint==true){ if(this.chartSettingsSeries.showPoint==true){
this.addPointSetting(setOption.series) this.addPointSetting(setOption.series)
}else { }else {
...@@ -143,7 +147,7 @@ ...@@ -143,7 +147,7 @@
} }
.project { .project {
width:80%; width:70%;
background-color:white; background-color:white;
} }
...@@ -212,4 +216,17 @@ ...@@ -212,4 +216,17 @@
line-height: 50px; line-height: 50px;
text-align: right; text-align: right;
} }
.datalist{
padding: 10px;
height: 80px;
/*width: 100%;*/
margin-top:15px;
margin-bottom:15px;
margin-right: 20px;
margin-left: 20px;
border: 1px dashed #d8d8d8;
}
.item-tag{
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment