| | |
| | | </a-form> |
| | | </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 |
| | | :columns="columns" |
| | | :dataSource="dataSource" |
| | | :selectedRows="selectedRows" |
| | | @change="onchange" |
| | | /> |
| | | </div> |
| | | </a-card> |
| | |
| | | import AButton from 'vue-antd-ui/es/button/button' |
| | | import AIcon from 'vue-antd-ui/es/icon/icon' |
| | | 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 AMenuItem = AMenu.Item |
| | | |
| | | const columns = [ |
| | | { |
| | |
| | | title: '服务调用次数', |
| | | dataIndex: 'callNo', |
| | | sorter: true, |
| | | needTotal: true |
| | | needTotal: true, |
| | | customRender: (text) => text + ' 次' |
| | | }, |
| | | { |
| | | title: '状态', |
| | | dataIndex: 'status' |
| | | dataIndex: 'status', |
| | | needTotal: true |
| | | }, |
| | | { |
| | | title: '更新时间', |
| | | dataIndex: 'updatedAt', |
| | | 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 { |
| | | name: 'QueryList', |
| | | components: { |
| | | AMenuItem, |
| | | AMenu, |
| | | ADropdown, |
| | | StandardTable, |
| | | AIcon, |
| | | AButton, |
| | |
| | | data () { |
| | | return { |
| | | advanced: true, |
| | | columns: columns |
| | | columns: columns, |
| | | dataSource: dataSource, |
| | | selectedRowKeys: [], |
| | | selectedRows: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | toggleAdvanced () { |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | width: calc(100% - 216px); |
| | | display: inline-block |
| | | } |
| | | .operator{ |
| | | margin-bottom: 18px; |
| | | } |
| | | @media screen and (max-width: 900px) { |
| | | .fold { |
| | | width: 100%; |
| | |
| | | <template> |
| | | <div class="standard-table"> |
| | | <div class="alert"> |
| | | <a-alert type="info"> |
| | | <a-alert type="info" :show-icon="true"> |
| | | <div slot="message"> |
| | | 已选择<span></span>项 |
| | | 服务调用总计<span></span> |
| | | <a>清空</a> |
| | | 已选择 <a style="font-weight: 600">{{selectedRows.length}}</a> 项 |
| | | <template v-for="(item, index) in needTotalList" v-if="item.needTotal"> |
| | | {{item.title}}总计 |
| | | <a :key="index" style="font-weight: 600"> |
| | | {{item.customRender ? item.customRender(item.total) : item.total}} |
| | | </a> |
| | | </template> |
| | | <a style="margin-left: 24px">清空</a> |
| | | </div> |
| | | </a-alert> |
| | | </div> |
| | |
| | | :dataSource="dataSource" |
| | | :rowKey="rowKey" |
| | | :pagination="pagination" |
| | | /> |
| | | :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: updateSelect}" |
| | | > |
| | | </a-table> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import AAlert from 'vue-antd-ui/es/alert/index' |
| | | import ATable from 'vue-antd-ui/es/table' |
| | | |
| | | export default { |
| | | name: 'StandardTable', |
| | | 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> |
| | | |