Commit 58cf2faa by yuwei

项目初始化

parent fb208eba
...@@ -17,11 +17,11 @@ ...@@ -17,11 +17,11 @@
<div style="margin: -20px;"> <div style="margin: -20px;">
<div class="field-widget-cate"><i class="icon iconfont icon-weidu"></i><span>维度列</span></div> <div class="field-widget-cate"><i class="icon iconfont icon-weidu"></i><span>维度列</span></div>
<draggable v-model="dimensions" tag="ul" :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions', pull: true, put: false}}"> <draggable v-model="dimensions" tag="ul" :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions', pull: true, put: false}}">
<li v-for="(item, index) in dimensions" :key="index" class="field-widget-label"><div>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</div></li> <li v-for="(item, index) in dimensions" :key="index" class="field-widget-label"><div>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</div></li>
</draggable> </draggable>
<div class="field-widget-cate"><i class="icon iconfont icon-zhibiao"></i><span>指标列</span></div> <div class="field-widget-cate"><i class="icon iconfont icon-zhibiao"></i><span>指标列</span></div>
<draggable v-model="measures" tag="ul" :options="{sort: false, ghostClass: 'ghost', group: {name: 'measures', pull: true, put: false}}"> <draggable v-model="measures" tag="ul" :options="{sort: false, ghostClass: 'ghost', group: {name: 'measures', pull: true, put: false}}">
<li v-for="(item, index) in measures" :key="index" class="field-widget-label"><div>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</div></li> <li v-for="(item, index) in measures" :key="index" class="field-widget-label"><div>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</div></li>
</draggable> </draggable>
</div> </div>
</el-card> </el-card>
...@@ -46,9 +46,9 @@ ...@@ -46,9 +46,9 @@
<el-divider content-position="left">行维</el-divider> <el-divider content-position="left">行维</el-divider>
<el-col> <el-col>
<div class="draggable-wrapper"> <div class="draggable-wrapper">
<draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions'}}" v-model="form.rows"> <draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions'}}" v-model="form.keys">
<el-tag v-for="(item, index) in form.rows" :key="index" class="draggable-item" closable @close="handleRowTagClose(index, item)"> <el-tag v-for="(item, index) in form.keys" :key="index" class="draggable-item" closable @close="handleKeyTagClose(index, item)">
{{ item.label ? item.label : item.tag }} {{ item.alias ? item.alias : item.col }}
</el-tag> </el-tag>
</draggable> </draggable>
</div> </div>
...@@ -58,9 +58,9 @@ ...@@ -58,9 +58,9 @@
<el-divider content-position="left">列维</el-divider> <el-divider content-position="left">列维</el-divider>
<el-col> <el-col>
<div class="draggable-wrapper"> <div class="draggable-wrapper">
<draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions'}}" v-model="form.cols"> <draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'dimensions'}}" v-model="form.groups">
<el-tag v-for="(item, index) in form.cols" :key="index" class="draggable-item" closable @close="handleColTagClose(index, item)"> <el-tag v-for="(item, index) in form.groups" :key="index" class="draggable-item" closable @close="handleGroupTagClose(index, item)">
{{ item.label ? item.label : item.tag }} {{ item.alias ? item.alias : item.col }}
</el-tag> </el-tag>
</draggable> </draggable>
</div> </div>
...@@ -70,11 +70,21 @@ ...@@ -70,11 +70,21 @@
<el-divider content-position="left">指标</el-divider> <el-divider content-position="left">指标</el-divider>
<el-col> <el-col>
<div class="draggable-wrapper"> <div class="draggable-wrapper">
<draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'measures'}}" v-model="form.vals"> <draggable :options="{sort: false, ghostClass: 'ghost', group: {name: 'measures'}}" v-model="form.values" @change="handleValueDragChange">
<div v-for="(item, index) in form.vals" :key="index" class="draggable-item"> <div v-for="(item, index) in form.values" :key="index" class="draggable-item">
<el-tag>{{ item.label ? item.label : item.tag }}</el-tag> <!-- <el-tag>{{ item.alias ? item.alias : item.col }}</el-tag>-->
<span class="draggable-item-handle"><i class="el-icon-edit-outline"></i></span> <el-tag>{{ item.alias ? item.aggregate_type + '(' + item.col + ') -> ' + item.alias : item.aggregate_type + '(' + item.col + ')' }}</el-tag>
<span class="draggable-item-handle" @click="handleValTagClose(index, item)"><i class="el-icon-delete"></i></span> <span class="draggable-item-handle" v-if="item.radio">
<el-radio-group size="mini" v-model="item.aggregate_type" @change="((label)=>{handleValueChangeTagType(label, index, item)})">
<el-radio :label="sum">求和</el-radio>
<el-radio :label="count">计数</el-radio>
<el-radio :label="avg">平均值</el-radio>
<el-radio :label="max">最大值</el-radio>
<el-radio :label="min">最小值</el-radio>
</el-radio-group>
</span>
<span class="draggable-item-handle" v-else @click="handleValueTagType(index, item)"><i class="el-icon-edit-outline"></i></span>
<span class="draggable-item-handle" @click="handleValueTagClose(index, item)"><i class="el-icon-delete"></i></span>
</div> </div>
</draggable> </draggable>
</div> </div>
...@@ -127,9 +137,9 @@ export default { ...@@ -127,9 +137,9 @@ export default {
data () { data () {
return { return {
form: { form: {
rows: [], keys: [],
cols: [], groups: [],
vals: [] values: []
}, },
dataset: {}, dataset: {},
datasetOptions : [], datasetOptions : [],
...@@ -152,22 +162,34 @@ export default { ...@@ -152,22 +162,34 @@ export default {
getDataSet(command).then(response => { getDataSet(command).then(response => {
if (response.success) { if (response.success) {
this.dataset = response.data this.dataset = response.data
console.log(this.dataset)
this.dimensions = this.dataset.schemaConfig.dimensions this.dimensions = this.dataset.schemaConfig.dimensions
this.measures = this.dataset.schemaConfig.measures this.measures = this.dataset.schemaConfig.measures
} }
}) })
}, },
handleRowTagClose (index, tag) { handleKeyTagClose (index, tag) {
this.form.rows.splice(index, 1) this.form.keys.splice(index, 1)
this.dimensions.push(tag) this.dimensions.push(tag)
}, },
handleColTagClose (index, tag) { handleGroupTagClose (index, tag) {
this.form.cols.splice(index, 1) this.form.groups.splice(index, 1)
this.dimensions.push(tag) this.dimensions.push(tag)
}, },
handleValTagClose (index, tag) { handleValueDragChange (tag) {
this.form.vals.splice(index, 1) if (tag.added) {
this.$set(tag, 'aggregate_type', 'sum')
}
},
handleValueChangeTagType (label, index, tag) {
this.$delete(tag, 'radio')
},
handleValueTagType (index, tag) {
this.$set(this.measures, index, Object.assign({}, tag, { radio: true }))
// this.$set(this.measures, index, Object.assign({}, tag, { radio: true, aggregate_type: 'sum' }))
},
handleValueTagClose (index, tag) {
this.form.values.splice(index, 1)
tag.aggregate_type = ''
this.measures.push(tag) this.measures.push(tag)
} }
} }
......
...@@ -45,8 +45,8 @@ ...@@ -45,8 +45,8 @@
<el-col :span="12" style="border: 1px dashed #999;height: 100%;"> <el-col :span="12" style="border: 1px dashed #999;height: 100%;">
<div class="tag-group" > <div class="tag-group" >
<draggable v-model="columnList" :options="{sort: false, group: {name: 'col', pull:'clone', put: false}}"> <draggable v-model="columnList" :options="{sort: false, group: {name: 'col', pull:'clone', put: false}}">
<el-tag v-for="(col, index) in columnList" :key="index" class="draggable-tag"> <el-tag v-for="(item, index) in columnList" :key="index" class="draggable-tag">
{{ col.tag }} {{ item.col }}
</el-tag> </el-tag>
</draggable> </draggable>
</div> </div>
...@@ -58,9 +58,9 @@ ...@@ -58,9 +58,9 @@
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<draggable group="col" :list="dimensionList"> <draggable group="col" :list="dimensionList">
<div v-for="(item, index) in dimensionList" :key="index" class="draggable-item"> <div v-for="(item, index) in dimensionList" :key="index" class="draggable-item">
<el-tag>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</el-tag> <el-tag>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</el-tag>
<span class="draggable-item-handle" v-if="item.input"> <span class="draggable-item-handle" v-if="item.input">
<el-input size="mini" placeholder="请输入内容" v-model="item.label" @blur="handleDimensionDelTagLabel(index, item)"> <el-input size="mini" placeholder="请输入内容" v-model="item.alias" @blur="handleDelTagLabel(index, item)">
</el-input> </el-input>
</span> </span>
<span class="draggable-item-handle" v-else @click="handleDimensionTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span> <span class="draggable-item-handle" v-else @click="handleDimensionTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span>
...@@ -76,9 +76,9 @@ ...@@ -76,9 +76,9 @@
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<draggable group="col" :list="measureList"> <draggable group="col" :list="measureList">
<div v-for="(item, index) in measureList" :key="index" class="draggable-item"> <div v-for="(item, index) in measureList" :key="index" class="draggable-item">
<el-tag>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</el-tag> <el-tag>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</el-tag>
<span class="draggable-item-handle" v-if="item.input"> <span class="draggable-item-handle" v-if="item.input">
<el-input size="mini" placeholder="请输入内容" v-model="item.label" @blur="handleMeasureDelTagLabel(index, item)"> <el-input size="mini" placeholder="请输入内容" v-model="item.alias" @blur="handleDelTagLabel(index, item)">
</el-input> </el-input>
</span> </span>
<span class="draggable-item-handle" v-else @click="handleMeasureTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span> <span class="draggable-item-handle" v-else @click="handleMeasureTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span>
...@@ -258,8 +258,8 @@ export default { ...@@ -258,8 +258,8 @@ export default {
this.columns = response.data this.columns = response.data
this.columnList = this.columns.map(function (item) { this.columnList = this.columns.map(function (item) {
let json = {} let json = {}
json.tag = item json.col = item
json.label = '' json.alias = ''
return json return json
}) })
this.dimensionList = [] this.dimensionList = []
...@@ -269,22 +269,21 @@ export default { ...@@ -269,22 +269,21 @@ export default {
}, },
handleDimensionTagClose (index, tag) { handleDimensionTagClose (index, tag) {
this.dimensionList.splice(index, 1) this.dimensionList.splice(index, 1)
tag.alias = ''
this.columnList.push(tag) this.columnList.push(tag)
}, },
handleMeasureTagClose (index, tag) { handleMeasureTagClose (index, tag) {
this.measureList.splice(index, 1) this.measureList.splice(index, 1)
tag.alias = ''
this.columnList.push(tag) this.columnList.push(tag)
}, },
handleDimensionTagLabel (index, tag) { handleDimensionTagLabel (index, tag) {
this.$set(this.dimensionList, index, Object.assign({}, tag, { input: true })) this.$set(this.dimensionList, index, Object.assign({}, tag, { input: true }))
}, },
handleDimensionDelTagLabel (index, tag) {
this.$delete(tag, 'input')
},
handleMeasureTagLabel (index, tag) { handleMeasureTagLabel (index, tag) {
this.$set(this.measureList, index, Object.assign({}, tag, { input: true })) this.$set(this.measureList, index, Object.assign({}, tag, { input: true }))
}, },
handleMeasureDelTagLabel (index, tag) { handleDelTagLabel (index, tag) {
this.$delete(tag, 'input') this.$delete(tag, 'input')
}, },
dataPreview () { dataPreview () {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<el-col :span="12" style="border: 1px dashed #999;height: 100%;"> <el-col :span="12" style="border: 1px dashed #999;height: 100%;">
<div class="tag-group" > <div class="tag-group" >
<el-tag v-for="(item, index) in columnList" :key="index" class="draggable-tag"> <el-tag v-for="(item, index) in columnList" :key="index" class="draggable-tag">
{{ item.tag }} {{ item.col }}
</el-tag> </el-tag>
</div> </div>
</el-col> </el-col>
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<el-col> <el-col>
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<el-tag v-for="(item, index) in dimensionList" :key="index" class="draggable-item"> <el-tag v-for="(item, index) in dimensionList" :key="index" class="draggable-item">
{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }} {{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}
</el-tag> </el-tag>
</div> </div>
</el-col> </el-col>
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<el-col> <el-col>
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<el-tag v-for="(item, index) in measureList" :key="index" class="draggable-item"> <el-tag v-for="(item, index) in measureList" :key="index" class="draggable-item">
{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }} {{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}
</el-tag> </el-tag>
</div> </div>
</el-col> </el-col>
...@@ -203,10 +203,10 @@ export default { ...@@ -203,10 +203,10 @@ export default {
if (this.columns && this.columns.length > 0) { if (this.columns && this.columns.length > 0) {
this.dimensionList = this.form.schemaConfig.dimensions || [] this.dimensionList = this.form.schemaConfig.dimensions || []
this.measureList = this.form.schemaConfig.measures || [] this.measureList = this.form.schemaConfig.measures || []
this.columnList = this.columns.filter(x => [...this.dimensionList, ...this.measureList].every(y => y.tag !== x)).map(function (item) { this.columnList = this.columns.filter(x => [...this.dimensionList, ...this.measureList].every(y => y.col !== x)).map(function (item) {
let json = {} let json = {}
json.tag = item json.col = item
json.label = '' json.alias = ''
return json return json
}) })
} }
......
...@@ -45,8 +45,8 @@ ...@@ -45,8 +45,8 @@
<el-col :span="12" style="border: 1px dashed #999;height: 100%;"> <el-col :span="12" style="border: 1px dashed #999;height: 100%;">
<div class="tag-group" > <div class="tag-group" >
<draggable v-model="columnList" :options="{sort: false, group: {name: 'col', pull: true, put: false}}"> <draggable v-model="columnList" :options="{sort: false, group: {name: 'col', pull: true, put: false}}">
<el-tag v-for="(col, index) in columnList" :key="index" class="draggable-tag"> <el-tag v-for="(item, index) in columnList" :key="index" class="draggable-tag">
{{ col.tag }} {{ item.col }}
</el-tag> </el-tag>
</draggable> </draggable>
</div> </div>
...@@ -58,9 +58,9 @@ ...@@ -58,9 +58,9 @@
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<draggable group="col" :list="dimensionList"> <draggable group="col" :list="dimensionList">
<div v-for="(item, index) in dimensionList" :key="index" class="draggable-item"> <div v-for="(item, index) in dimensionList" :key="index" class="draggable-item">
<el-tag>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</el-tag> <el-tag>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</el-tag>
<span class="draggable-item-handle" v-if="item.input"> <span class="draggable-item-handle" v-if="item.input">
<el-input size="mini" placeholder="请输入内容" v-model="item.label" @blur="handleDimensionDelTagLabel(index, item)"> <el-input size="mini" placeholder="请输入内容" v-model="item.alias" @blur="handleDelTagLabel(index, item)">
</el-input> </el-input>
</span> </span>
<span class="draggable-item-handle" v-else @click="handleDimensionTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span> <span class="draggable-item-handle" v-else @click="handleDimensionTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span>
...@@ -76,9 +76,9 @@ ...@@ -76,9 +76,9 @@
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;"> <div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<draggable group="col" :list="measureList"> <draggable group="col" :list="measureList">
<div v-for="(item, index) in measureList" :key="index" class="draggable-item"> <div v-for="(item, index) in measureList" :key="index" class="draggable-item">
<el-tag>{{ item.label ? item.label + '(' + item.tag + ')' : item.tag }}</el-tag> <el-tag>{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}</el-tag>
<span class="draggable-item-handle" v-if="item.input"> <span class="draggable-item-handle" v-if="item.input">
<el-input size="mini" placeholder="请输入内容" v-model="item.label" @blur="handleMeasureDelTagLabel(index, item)"> <el-input size="mini" placeholder="请输入内容" v-model="item.alias" @blur="handleDelTagLabel(index, item)">
</el-input> </el-input>
</span> </span>
<span class="draggable-item-handle" v-else @click="handleMeasureTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span> <span class="draggable-item-handle" v-else @click="handleMeasureTagLabel(index, item)"><i class="el-icon-edit-outline"></i></span>
...@@ -244,10 +244,10 @@ export default { ...@@ -244,10 +244,10 @@ export default {
if (this.columns && this.columns.length > 0) { if (this.columns && this.columns.length > 0) {
this.dimensionList = this.form.schemaConfig.dimensions || [] this.dimensionList = this.form.schemaConfig.dimensions || []
this.measureList = this.form.schemaConfig.measures || [] this.measureList = this.form.schemaConfig.measures || []
this.columnList = this.columns.filter(x => [...this.dimensionList, ...this.measureList].every(y => y.tag !== x)).map(function (item) { this.columnList = this.columns.filter(x => [...this.dimensionList, ...this.measureList].every(y => y.col !== x)).map(function (item) {
let json = {} let json = {}
json.tag = item json.col = item
json.label = '' json.alias = ''
return json return json
}) })
} }
...@@ -273,8 +273,8 @@ export default { ...@@ -273,8 +273,8 @@ export default {
this.columns = response.data this.columns = response.data
this.columnList = this.columns.map(function (item) { this.columnList = this.columns.map(function (item) {
let json = {} let json = {}
json.tag = item json.col = item
json.label = '' json.alias = ''
return json return json
}) })
this.dimensionList = [] this.dimensionList = []
...@@ -284,22 +284,21 @@ export default { ...@@ -284,22 +284,21 @@ export default {
}, },
handleDimensionTagClose (index, tag) { handleDimensionTagClose (index, tag) {
this.dimensionList.splice(index, 1) this.dimensionList.splice(index, 1)
tag.alias = ''
this.columnList.push(tag) this.columnList.push(tag)
}, },
handleMeasureTagClose (index, tag) { handleMeasureTagClose (index, tag) {
this.measureList.splice(index, 1) this.measureList.splice(index, 1)
tag.alias = ''
this.columnList.push(tag) this.columnList.push(tag)
}, },
handleDimensionTagLabel (index, tag) { handleDimensionTagLabel (index, tag) {
this.$set(this.dimensionList, index, Object.assign({}, tag, { input: true })) this.$set(this.dimensionList, index, Object.assign({}, tag, { input: true }))
}, },
handleDimensionDelTagLabel (index, tag) {
this.$delete(tag, 'input')
},
handleMeasureTagLabel (index, tag) { handleMeasureTagLabel (index, tag) {
this.$set(this.measureList, index, Object.assign({}, tag, { input: true })) this.$set(this.measureList, index, Object.assign({}, tag, { input: true }))
}, },
handleMeasureDelTagLabel (index, tag) { handleDelTagLabel (index, tag) {
this.$delete(tag, 'input') this.$delete(tag, 'input')
}, },
dataPreview () { dataPreview () {
......
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