<script>
|
import BasePage from './BasePage'
|
export default {
|
name: 'BaseTable',
|
extends: BasePage,
|
data () {
|
return {
|
// 接口
|
api: null,
|
// 模块名称
|
module: '数据',
|
// 配置数据
|
configData: {
|
// id字段
|
'field.id': 'id',
|
// 主字段
|
'field.main': 'name'
|
},
|
// 是否正在执行
|
isWorking: {
|
// 搜索中
|
search: false,
|
// 删除中
|
delete: false,
|
// 导出中
|
export: false
|
},
|
// 表格数据
|
tableData: {
|
// 已选中的数据
|
selectedRows: [],
|
// 排序的字段
|
sorts: [],
|
// 当前页数据
|
list: [],
|
// 分页
|
pagination: {
|
pageIndex: 1,
|
pageSize: 10,
|
total: 0
|
}
|
},
|
tableHeight: 400
|
}
|
},
|
methods: {
|
// 配置
|
config (extParams) {
|
if (extParams == null) {
|
throw new Error('Parameter can not be null of method \'config\' .')
|
}
|
if (extParams.api == null) {
|
throw new Error('Missing config option \'api\'.')
|
}
|
|
if(extParams.api.indexOf('@/',0) === 0){
|
this.api = require(extParams.api)
|
}else {
|
this.api = require('@/api' + extParams.api)
|
}
|
// this.api = require('@/api' + extParams.api)
|
extParams.module && (this.module = extParams.module)
|
extParams['field.id'] && (this.configData['field.id'] = extParams['field.id'])
|
extParams['field.main'] && (this.configData['field.main'] = extParams['field.main'])
|
this.tableData.sorts = extParams.sorts
|
},
|
// 搜索
|
search () {
|
this.handlePageChange(1)
|
},
|
// 导出Excel
|
exportExcel () {
|
this.__checkApi()
|
this.$dialog.exportConfirm('确认导出吗?')
|
.then(() => {
|
this.isWorking.export = true
|
this.api.exportExcel({
|
page: this.tableData.pagination.pageIndex,
|
capacity: 1000000,
|
model: this.searchForm,
|
sorts: this.tableData.sorts
|
})
|
.then(response => {
|
this.download(response)
|
})
|
.catch(e => {
|
this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking.export = false
|
})
|
})
|
.catch(() => {})
|
},
|
// 搜索框重置
|
reset () {
|
this.$refs.searchForm.resetFields()
|
this.search()
|
},
|
// 每页显示数量变更处理
|
handleSizeChange (pageSize) {
|
this.tableData.pagination.pageSize = pageSize
|
this.search()
|
},
|
// 行选中处理
|
handleSelectionChange (selectedRows) {
|
this.tableData.selectedRows = selectedRows
|
},
|
// 排序
|
handleSortChange (sortData) {
|
this.tableData.sorts = []
|
if (sortData.order != null) {
|
this.tableData.sorts.push({
|
property: sortData.column.sortBy,
|
direction: sortData.order === 'descending' ? 'DESC' : 'ASC'
|
})
|
}
|
this.handlePageChange()
|
},
|
// 页码变更处理
|
handlePageChange (pageIndex) {
|
this.__checkApi()
|
this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex
|
this.isWorking.search = true
|
this.api.fetchList({
|
page: this.tableData.pagination.pageIndex,
|
capacity: this.tableData.pagination.pageSize,
|
model: this.searchForm,
|
sorts: this.tableData.sorts
|
})
|
.then(data => {
|
this.tableData.list = data.records
|
this.tableData.pagination.total = data.total
|
})
|
.catch(e => {
|
// this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking.search = false
|
})
|
},
|
// 删除
|
deleteById (row, childConfirm = true) {
|
this.__checkApi()
|
// let message = `确认删除${this.module}【${row[this.configData['field.main']]}】吗?`
|
let message = `确认删除该记录吗?`
|
if (childConfirm && row.children != null && row.children.length > 0) {
|
// message = `确认删除${this.module}【${row[this.configData['field.main']]}】及其子${this.module}吗?`
|
message = `确认删除该记录及其子数据吗?`
|
}
|
this.$dialog.deleteConfirm(message)
|
.then(() => {
|
this.isWorking.delete = true
|
this.api.deleteById(row[this.configData['field.id']])
|
.then(() => {
|
this.$tip.apiSuccess('删除成功')
|
this.__afterDelete()
|
})
|
.catch(e => {
|
// this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking.delete = false
|
})
|
})
|
.catch(() => {})
|
},
|
/**
|
* 批量删除
|
* @treeMode 是否添加子节点删除确认
|
*/
|
deleteByIdInBatch (childConfirm = true) {
|
this.__checkApi()
|
if (this.tableData.selectedRows.length === 0) {
|
this.$tip.warning('请至少选择一条数据')
|
return
|
}
|
let message = `确认删除已选中的 ${this.tableData.selectedRows.length} 条${this.module}记录吗?`
|
if (childConfirm) {
|
const containChildrenRows = []
|
for (const row of this.tableData.selectedRows) {
|
if (row.children != null && row.children.length > 0) {
|
containChildrenRows.push(row[this.configData['field.main']])
|
}
|
}
|
if (containChildrenRows.length > 0) {
|
message = '本次将删除该数据及其子数据,确认删除吗?'
|
}
|
}
|
this.$dialog.deleteConfirm(message)
|
.then(() => {
|
this.isWorking.delete = true
|
this.api.deleteByIdInBatch(this.tableData.selectedRows.map(row => row.id).join(','))
|
.then(() => {
|
this.$tip.apiSuccess('删除成功')
|
this.__afterDelete(this.tableData.selectedRows.length)
|
})
|
.catch(e => {
|
// this.$tip.apiFailed(e)
|
})
|
.finally(() => {
|
this.isWorking.delete = false
|
})
|
})
|
.catch(() => {})
|
},
|
// 删除处理
|
__afterDelete (deleteCount = 1) {
|
// 删除当前页最后一条记录时查询上一页数据
|
if (this.tableData.list.length - deleteCount === 0) {
|
this.handlePageChange(this.tableData.pagination.pageIndex - 1 === 0 ? 1 : this.tableData.pagination.pageIndex - 1)
|
} else {
|
this.handlePageChange(this.tableData.pagination.pageIndex)
|
}
|
},
|
// 检查接口是否配置
|
__checkApi () {
|
if (this.api == null) {
|
throw new Error('The page is not initialized, you can use method \'this.config\' to initialize this page.')
|
}
|
}
|
}
|
}
|
</script>
|