You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.4 KiB
Vue
175 lines
4.4 KiB
Vue
6 months ago
|
<template>
|
||
|
<div style="height: 100%">
|
||
|
<el-row style="height: 100%">
|
||
|
<el-col :span="12" style="height: 100%;overflow: auto;padding-bottom: 12px;" class="leftCol">
|
||
|
<div style="text-align: center">
|
||
|
<el-switch
|
||
|
v-model="configSwitch"
|
||
|
active-text="数据配置"
|
||
|
inactive-text="图表配置">
|
||
|
</el-switch>
|
||
|
</div>
|
||
|
<div v-show="!configSwitch" style="height: 100%">
|
||
|
<el-form ref="form" :model="defaultData" label-width="80px">
|
||
|
<el-form-item label="表头数据">
|
||
|
<el-select
|
||
|
v-model="defaultData.th"
|
||
|
multiple
|
||
|
filterable
|
||
|
allow-create
|
||
|
default-first-option
|
||
|
placeholder="请选择表头">
|
||
|
<el-option
|
||
|
v-for="item in defaultData.th"
|
||
|
:key="item"
|
||
|
:label="item"
|
||
|
:value="item">
|
||
|
</el-option>
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
<el-form-item label="列数据">
|
||
|
<el-select
|
||
|
v-model="defaultData.td"
|
||
|
multiple
|
||
|
filterable
|
||
|
allow-create
|
||
|
default-first-option
|
||
|
placeholder="请选择列数据">
|
||
|
<el-option
|
||
|
v-for="item in tdkeys"
|
||
|
:key="item"
|
||
|
:label="item"
|
||
|
:value="item">
|
||
|
</el-option>
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
<el-form-item label="数据集">
|
||
|
<el-select v-model="defaultData.tableDataKey" placeholder="请选择数据" @change="dataChange" clearable>
|
||
|
<el-option :label="i" :value="i"
|
||
|
v-for="i in Object.keys(networkData)"></el-option>
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
</el-form>
|
||
|
|
||
|
<div style="text-align: center;height: 60px;line-height: 60px">
|
||
|
<el-button type="primary" @click="onSubmit">立即创建</el-button>
|
||
|
<el-button>重置</el-button>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div v-show="configSwitch">
|
||
|
<NetworkRequest ref="NetworkRequest" :requests="defaultData.requests" @GetFinalData="getData" />
|
||
|
</div>
|
||
|
</el-col>
|
||
|
<el-col :span="12" style="height: 100%">
|
||
|
<div class="chart">
|
||
|
<ComplexScrollTable ref="ComplexScrollTable" :defaultData="defaultData"
|
||
|
:default-table-data="tableData"></ComplexScrollTable>
|
||
|
</div>
|
||
|
</el-col>
|
||
|
</el-row>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import { ComplexScrollTable } from '@/components/Configure/complex';
|
||
|
import NetworkRequest from '@/components/Configure/networkRequest/NetworkRequest';
|
||
|
|
||
|
export default {
|
||
|
components: {
|
||
|
ComplexScrollTable,
|
||
|
NetworkRequest
|
||
|
},
|
||
|
props: ['defaultData', 'isDialog'],
|
||
|
watch: {
|
||
|
'defaultData.requests': {
|
||
|
handler() {
|
||
|
console.log('this.networkData1122');
|
||
|
this.dataChange();
|
||
|
},
|
||
|
deep: true
|
||
|
}
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
tableData: [],
|
||
|
configSwitch: false,
|
||
|
networkData: {},
|
||
|
tdkeys: []
|
||
|
};
|
||
|
},
|
||
|
created() {
|
||
|
},
|
||
|
async mounted() {
|
||
|
await this.getData();
|
||
|
this.dataChange();
|
||
|
setInterval(async () => {
|
||
|
await this.getData();
|
||
|
}, 1000 * 10);
|
||
|
},
|
||
|
methods: {
|
||
|
async getData(e) {
|
||
|
let data = await this.$getFinalData(this.defaultData.requests);
|
||
|
console.log('data', data);
|
||
|
this.$set(this, 'networkData', data);
|
||
|
},
|
||
|
async onSubmit() {
|
||
|
if (this.isDialog) {
|
||
|
this.$emit('close');
|
||
|
}
|
||
|
},
|
||
|
dataChange() {
|
||
|
this.tableData = this.networkData[this.defaultData.tableDataKey];
|
||
|
let keys = Object.keys(this.tableData?.[0] || {});
|
||
|
this.tdkeys = keys;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
<style scoped lang="less">
|
||
|
.chart {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
.notScroll {
|
||
|
&::-webkit-scrollbar {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.leftCol::-webkit-scrollbar {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
.add {
|
||
|
display: inline-block;
|
||
|
width: 1vw;
|
||
|
height: 1vw;
|
||
|
padding: 0.5vw;
|
||
|
background-color: #409EFF;
|
||
|
border-radius: 50%;
|
||
|
margin: 0 1vw;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.subtract {
|
||
|
display: inline-block;
|
||
|
width: 1vw;
|
||
|
height: 1vw;
|
||
|
padding: 0.5vw;
|
||
|
background-color: #909399;
|
||
|
border-radius: 50%;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.textArea {
|
||
|
position: relative;
|
||
|
|
||
|
.textAreaIcon {
|
||
|
position: absolute;
|
||
|
top: 12px;
|
||
|
right: 8px;
|
||
|
}
|
||
|
}
|
||
|
</style>
|