完善查询列表QueryList

master
chenghx 6 years ago
parent c0f5e20a2a
commit 17e9e07162
  1. 76
      src/components/list/QueryList.vue
  2. 65
      src/components/table/StandardTable.vue

@ -79,8 +79,24 @@
</a-form> </a-form>
</div> </div>
<div> <div>
<div class="operator">
<a-button @click="addNew" type="primary">新建</a-button>
<a-button >批量操作</a-button>
<a-dropdown>
<a-menu @click="handleMenuClick" slot="overlay">
<a-menu-item key="delete">删除</a-menu-item>
<a-menu-item key="audit">审批</a-menu-item>
</a-menu>
<a-button>
更多操作 <a-icon type="down" />
</a-button>
</a-dropdown>
</div>
<standard-table <standard-table
:columns="columns" :columns="columns"
:dataSource="dataSource"
:selectedRows="selectedRows"
@change="onchange"
/> />
</div> </div>
</a-card> </a-card>
@ -99,8 +115,11 @@ import ADatePicker from 'vue-antd-ui/es/date-picker/index'
import AButton from 'vue-antd-ui/es/button/button' import AButton from 'vue-antd-ui/es/button/button'
import AIcon from 'vue-antd-ui/es/icon/icon' import AIcon from 'vue-antd-ui/es/icon/icon'
import StandardTable from '../table/StandardTable' import StandardTable from '../table/StandardTable'
import ADropdown from 'vue-antd-ui/es/dropdown'
import AMenu from 'vue-antd-ui/es/menu/index'
const ASelectOption = ASelect.Option const ASelectOption = ASelect.Option
const AMenuItem = AMenu.Item
const columns = [ const columns = [
{ {
@ -115,26 +134,40 @@ const columns = [
title: '服务调用次数', title: '服务调用次数',
dataIndex: 'callNo', dataIndex: 'callNo',
sorter: true, sorter: true,
needTotal: true needTotal: true,
customRender: (text) => text + ' 次'
}, },
{ {
title: '状态', title: '状态',
dataIndex: 'status' dataIndex: 'status',
needTotal: true
}, },
{ {
title: '更新时间', title: '更新时间',
dataIndex: 'updatedAt', dataIndex: 'updatedAt',
sorter: true sorter: true
},
{
title: '操作',
key: 'action'
} }
] ]
const dataSource = []
for (let i = 0; i < 100; i++) {
dataSource.push({
key: i,
no: 'NO ' + i,
description: '这是一段描述',
callNo: Math.floor(Math.random() * 1000),
status: Math.floor(Math.random() * 10) % 4,
updatedAt: '2018-07-26'
})
}
export default { export default {
name: 'QueryList', name: 'QueryList',
components: { components: {
AMenuItem,
AMenu,
ADropdown,
StandardTable, StandardTable,
AIcon, AIcon,
AButton, AButton,
@ -151,12 +184,38 @@ export default {
data () { data () {
return { return {
advanced: true, advanced: true,
columns: columns columns: columns,
dataSource: dataSource,
selectedRowKeys: [],
selectedRows: []
} }
}, },
methods: { methods: {
toggleAdvanced () { toggleAdvanced () {
this.advanced = !this.advanced this.advanced = !this.advanced
},
onchange (selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows
},
remove () {
this.dataSource = this.dataSource.filter(item => this.selectedRowKeys.indexOf(item.key) < 0)
this.selectedRows = this.selectedRows.filter(item => this.selectedRowKeys.indexOf(item.key) < 0)
},
addNew () {
this.dataSource.unshift({
key: this.dataSource.length,
no: 'NO ' + this.dataSource.length,
description: '这是一段描述',
callNo: Math.floor(Math.random() * 1000),
status: Math.floor(Math.random() * 10) % 4,
updatedAt: '2018-07-26'
})
},
handleMenuClick (e) {
if (e.key === 'delete') {
this.remove()
}
} }
} }
} }
@ -170,6 +229,9 @@ export default {
width: calc(100% - 216px); width: calc(100% - 216px);
display: inline-block display: inline-block
} }
.operator{
margin-bottom: 18px;
}
@media screen and (max-width: 900px) { @media screen and (max-width: 900px) {
.fold { .fold {
width: 100%; width: 100%;

@ -1,11 +1,16 @@
<template> <template>
<div class="standard-table"> <div class="standard-table">
<div class="alert"> <div class="alert">
<a-alert type="info"> <a-alert type="info" :show-icon="true">
<div slot="message"> <div slot="message">
已选择<span></span> 已选择&nbsp;<a style="font-weight: 600">{{selectedRows.length}}</a>&nbsp;&nbsp;&nbsp;
服务调用总计<span></span> <template v-for="(item, index) in needTotalList" v-if="item.needTotal">
<a>清空</a> {{item.title}}总计&nbsp;
<a :key="index" style="font-weight: 600">
{{item.customRender ? item.customRender(item.total) : item.total}}
</a>&nbsp;&nbsp;
</template>
<a style="margin-left: 24px">清空</a>
</div> </div>
</a-alert> </a-alert>
</div> </div>
@ -16,17 +21,65 @@
:dataSource="dataSource" :dataSource="dataSource"
:rowKey="rowKey" :rowKey="rowKey"
:pagination="pagination" :pagination="pagination"
/> :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: updateSelect}"
>
</a-table>
</div> </div>
</template> </template>
<script> <script>
import AAlert from 'vue-antd-ui/es/alert/index' import AAlert from 'vue-antd-ui/es/alert/index'
import ATable from 'vue-antd-ui/es/table' import ATable from 'vue-antd-ui/es/table'
export default { export default {
name: 'StandardTable', name: 'StandardTable',
components: {ATable, AAlert}, components: {ATable, AAlert},
props: ['bordered', 'loading', 'columns', 'dataSource', 'rowKey', 'pagination'] props: ['bordered', 'loading', 'columns', 'dataSource', 'rowKey', 'pagination', 'selectedRows'],
data () {
return {
needTotalList: [],
selectedRowKeys: []
}
},
methods: {
updateSelect (selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
let list = this.needTotalList
this.needTotalList = list.map(item => {
return {
...item,
total: selectedRows.reduce((sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
this.$emit('change', selectedRowKeys, selectedRows)
},
initTotalList (columns) {
const totalList = []
columns.forEach(column => {
if (column.needTotal) {
totalList.push({...column, total: 0})
}
})
return totalList
}
},
created () {
this.needTotalList = this.initTotalList(this.columns)
},
watch: {
'selectedRows': function (selectedRows) {
this.needTotalList = this.needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce((sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
}
}
} }
</script> </script>

Loading…
Cancel
Save