Skip to content

Commit

Permalink
data sheets
Browse files Browse the repository at this point in the history
  • Loading branch information
szuprefix committed Jul 4, 2019
1 parent bd5331a commit 2ae300b
Show file tree
Hide file tree
Showing 7 changed files with 146 additions and 7 deletions.
6 changes: 4 additions & 2 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
</router-view>
<template v-else>
<el-menu class="el-menu-demo" mode="horizontal" router>
<el-menu-item index="/" class="brand"><img :src="logo" height="32"><b
v-if="user.as_saas_worker">{{user.as_saas_worker.party}}</b>{{system_name}}
<el-menu-item index="/" class="brand">
<img :src="logo" height="32">
<b v-if="user.as_saas_worker">{{user.as_saas_worker.party}}</b>
{{system_name}}
</el-menu-item>
<el-submenu index="2" style="float:right">
<template slot="title">{{user.name}}</template>
Expand Down
4 changes: 2 additions & 2 deletions src/components/layout/Actions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
</span>
<el-dropdown-menu slot="dropdown">
<template v-for="a in dropdownActions">
<el-dropdown-item :command="a.do" v-if="!a.show || a.show()" :key="a.name"
<el-dropdown-item :command="a.do" v-if="!a.show || a.show()" :key="a.name" :title="a.title"
:icon="`fa fa-${a.icon}`">
{{a.title}}
{{a.label}}
</el-dropdown-item>
</template>
</el-dropdown-menu>
Expand Down
54 changes: 54 additions & 0 deletions src/components/layout/table/DataSheets.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<template>
<el-tabs tab-position="bottom" max-height="32rem">
<el-tab-pane lazy v-for="s,i in value.sheets" :key="i">
<template slot="label">

<el-dropdown>
<span class="el-dropdown-link">
<editable-label v-model="s.name"></editable-label>
<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<template v-for="a in sheetActions">
<el-dropdown-item :command="a.do" v-if="!a.show || a.show()" :key="a.name" :title="a.title"
:icon="`fa fa-${a.icon}`">
{{a.label}}
</el-dropdown-item>
</template>
</el-dropdown-menu>
</el-dropdown>
</template>
<div class="data-sheet-block" v-for="b,j in s.blocks" :key="j">
<data-table v-model="b.data" :fields="b.fields" :defaultWidget=""></data-table>
</div>
</el-tab-pane>
</el-tabs>
</template>
<script>
import DataTable from './DataTable.vue'
import Actions from '../Actions.vue'
import EditableLabel from '../../widgets/EditableLabel.vue'
export default{
props: {
value: Array
},
data () {
return {
sheetActions: [
{name: 'delete', label: '删除'},
{name: 'delete', label: '合并数据块'},
{name: 'delete', label: '拆分行'},
]
}
},
components: {DataTable, Actions, EditableLabel},
methods: {},
computed: {}
}
</script>
<style>
.data-sheet-block {
margin-bottom: 8rem;
}
</style>
3 changes: 2 additions & 1 deletion src/components/layout/table/DataTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<el-popover placement="right-start" trigger="hover">
<actions :items="actions"></actions>
<el-table slot="reference" :data="_value" ref="table" :span-method="spanMethod" v-loading="loading"
:element-loading-text="loading" :cell-class-name="options.cellClassName">
:element-loading-text="loading" :cell-class-name="options.cellClassName" :max-height="options.maxHeight">
<template slot="left"></template>
<data-table-column :field="f" v-for="f in _fields" :key="f.name"></data-table-column>
<template slot="right"></template>
Expand Down Expand Up @@ -36,6 +36,7 @@
group: false,
options: {
type: Object, default: () => {
return {}
}
},
fields: {
Expand Down
4 changes: 2 additions & 2 deletions src/components/stats/ChartGrid.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<el-col :sm="c.sm || 24" :md="c.md || 12" :xl="c.xl || 8" v-for="c in items" :key="c.name" v-loading="loading"
:element-loading-text="loading">
<template v-if="chartData[c.name]">
<data-table v-if="c.type === 'table'" :group="true" :value="genTableData(c)" :fields="c.fields" :options="c.options || {}"></data-table>
<data-table v-if="c.type === 'table'" :group="true" :value="genTableData(c)" :fields="c.fields" :options="Object.assign({maxHeight:500},c.options)"></data-table>
<chart v-else :options="chartOptions[c.name]" :auto-resize="true"></chart>
</template>
</el-col>
Expand Down Expand Up @@ -52,7 +52,7 @@
genTableData(c){
let fns = c.fields.map(f => f.name)
let data=this.chartData[c.name].map((d) => zipObject(fns, d))
console.log(data)
// console.log(data)
return data
},
genDailyOption(item, data){
Expand Down
47 changes: 47 additions & 0 deletions src/components/widgets/EditableLabel.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<template>
<span :contenteditable="editable" @dblclick="toEdit" @blur="changed" class="xyz-editable-span">
</span>
</template>
<script>
export default{
props: {
value: String,
},
data () {
return {
editable: false
}
},
components: {},
mounted() {
this.setValue(this.value)
},
methods: {
setValue(v){
this.$el.innerText = v
console.log(v)
},
changed(){
let v = this.$el.innerText
this.$emit('change', v)
this.editable = false
},
toEdit() {
this.editable = true
this.$el.focus()
}
},
computed: {},
watch: {
value(val){
this.setValue(val)
}
}
}
</script>
<style>
.xyz-editable-span {
display: inline-block;
min-width: 4rem;
}
</style>
35 changes: 35 additions & 0 deletions src/utils/sheets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* Created by denishuang on 2019/7/4.
*/

export default {
mergeBlock(blocks, extras){
let ds = []
blocks.forEach((b, i) => {
b.data.forEach((d, j) => {
ds.push(Object.assign({block: `block${1 + i}`}, extras, d))
})
})
let fs = blocks[0].fields
if (!fs.find(a => a.name === 'block')) {
fs.push({name: 'block', type: 'string'})
}
if(extras){
Object.keys(extras).forEach( k => {
if (!fs.find(a => a.name === k)) {
fs.push({name: k, type: typeof extras[k]})
}
})
}
return [{count: ds.length, data: ds, fields: fs}]
},
mergeSheet(sheets){
let data = []
let fields = sheets[0].blocks[0].fields
sheets.forEach((s,i) => {
let block = this.mergeBlock(s.blocks, {sheet:`sheet${1+i}`})[0]
data = data.concat(block.data)
})
return [{blocks:[{count:data.length, data, fields}]}]
}
}

0 comments on commit 2ae300b

Please sign in to comment.