You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
337 lines
7.4 KiB
337 lines
7.4 KiB
import {
|
|
initData,
|
|
download
|
|
} from '@/api/data'
|
|
import {
|
|
parseTime,
|
|
downloadFile
|
|
} from '@/utils/index'
|
|
import checkPermission from '@/utils/permission'
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
// 表格数据
|
|
data: [],
|
|
// 排序规则,默认 id 降序, 支持多字段排序 ['id,desc', 'createTime,asc']
|
|
sort: ['id,desc'],
|
|
// 页码
|
|
page: 0,
|
|
// 每页数据条数
|
|
size: 10,
|
|
// 总数据条数
|
|
total: 0,
|
|
// 请求数据的url
|
|
url: '',
|
|
// 查询数据的参数
|
|
params: {},
|
|
// 待查询的对象
|
|
query: {},
|
|
// 等待时间
|
|
time: 50,
|
|
// 是否为新增类型的表单
|
|
isAdd: false,
|
|
// 导出的 Loading
|
|
downloadLoading: false,
|
|
// 表格 Loading 属性
|
|
loading: true,
|
|
// 删除 Loading 属性
|
|
delLoading: false,
|
|
delAllLoading: false,
|
|
// 弹窗属性
|
|
dialog: false,
|
|
// Form 表单
|
|
form: {},
|
|
// 重置表单
|
|
resetForm: {},
|
|
// 标题
|
|
title: ''
|
|
}
|
|
},
|
|
methods: {
|
|
parseTime,
|
|
downloadFile,
|
|
checkPermission,
|
|
async init() {
|
|
if (!await this.beforeInit()) {
|
|
return
|
|
}
|
|
return new Promise((resolve, reject) => {
|
|
this.loading = true
|
|
// 请求数据
|
|
initData(this.url, this.getQueryParame()).then(data => {
|
|
this.total = data.totalElements
|
|
this.data = data.content
|
|
// time 毫秒后显示表格
|
|
setTimeout(() => {
|
|
this.loading = false
|
|
}, this.time)
|
|
resolve(data)
|
|
}).catch(err => {
|
|
this.loading = false
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
beforeInit() {
|
|
return true
|
|
},
|
|
getQueryParame: function() {
|
|
return {
|
|
page: this.page,
|
|
size: this.size,
|
|
sort: this.sort,
|
|
...this.query,
|
|
...this.params
|
|
}
|
|
},
|
|
// 改变页码
|
|
pageChange(e) {
|
|
this.page = e - 1
|
|
this.init()
|
|
},
|
|
// 改变每页显示数
|
|
sizeChange(e) {
|
|
this.page = 0
|
|
this.size = e
|
|
this.init()
|
|
},
|
|
// 预防删除第二页最后一条数据时,或者多选删除第二页的数据时,页码错误导致请求无数据
|
|
dleChangePage(size) {
|
|
if (size === undefined) {
|
|
size = 1
|
|
}
|
|
if (this.data.length === size && this.page !== 0) {
|
|
this.page = this.page - 1
|
|
}
|
|
},
|
|
// 查询方法
|
|
toQuery() {
|
|
this.page = 0
|
|
this.init()
|
|
},
|
|
/**
|
|
* 通用的提示封装
|
|
*/
|
|
submitSuccessNotify() {
|
|
this.$notify({
|
|
title: '提交成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
},
|
|
addSuccessNotify() {
|
|
this.$notify({
|
|
title: '新增成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
},
|
|
editSuccessNotify() {
|
|
this.$notify({
|
|
title: '编辑成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
},
|
|
delSuccessNotify() {
|
|
this.$notify({
|
|
title: '删除成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
},
|
|
notify(title, type) {
|
|
this.$notify({
|
|
title: title,
|
|
type: type,
|
|
duration: 2500
|
|
})
|
|
},
|
|
/**
|
|
* 删除前可以调用 beforeDelMethod 做一些操作
|
|
*/
|
|
beforeDelMethod() {
|
|
return true
|
|
},
|
|
/**
|
|
* 通用的删除
|
|
*/
|
|
delMethod(id) {
|
|
if (!this.beforeDelMethod()) {
|
|
return
|
|
}
|
|
this.delLoading = true
|
|
this.crudMethod.del(id).then(() => {
|
|
this.delLoading = false
|
|
this.$refs[id].doClose()
|
|
this.dleChangePage()
|
|
this.delSuccessNotify()
|
|
this.afterDelMethod()
|
|
this.init()
|
|
}).catch(() => {
|
|
this.delLoading = false
|
|
this.$refs[id].doClose()
|
|
})
|
|
},
|
|
afterDelMethod() {},
|
|
/**
|
|
* 多选删除提示
|
|
*/
|
|
beforeDelAllMethod() {
|
|
this.$confirm('你确定删除选中的数据吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
this.delAllMethod()
|
|
})
|
|
},
|
|
/**
|
|
* 多选删除
|
|
*/
|
|
delAllMethod() {
|
|
this.delAllLoading = true
|
|
const data = this.$refs.table.selection
|
|
const ids = []
|
|
for (let i = 0; i < data.length; i++) {
|
|
ids.push(data[i].id)
|
|
}
|
|
this.crudMethod.delAll(ids).then(() => {
|
|
this.delAllLoading = false
|
|
this.dleChangePage(ids.length)
|
|
this.init()
|
|
this.$notify({
|
|
title: '删除成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
}).catch(() => {
|
|
this.delAllLoading = false
|
|
})
|
|
},
|
|
/**
|
|
* 显示新增弹窗前可以调用该方法
|
|
*/
|
|
beforeShowAddForm() {},
|
|
/**
|
|
* 显示新增弹窗
|
|
*/
|
|
showAddFormDialog() {
|
|
this.isAdd = true
|
|
this.resetForm = JSON.parse(JSON.stringify(this.form))
|
|
this.beforeShowAddForm()
|
|
this.dialog = true
|
|
},
|
|
/**
|
|
* 显示编辑弹窗前可以调用该方法
|
|
*/
|
|
beforeShowEditForm(data) {},
|
|
/**
|
|
* 显示编辑弹窗
|
|
*/
|
|
showEditFormDialog(data = '') {
|
|
this.isAdd = false
|
|
if (data) {
|
|
this.resetForm = JSON.parse(JSON.stringify(this.form))
|
|
this.form = JSON.parse(JSON.stringify(data))
|
|
}
|
|
this.beforeShowEditForm(data)
|
|
this.dialog = true
|
|
},
|
|
/**
|
|
* 新增方法
|
|
*/
|
|
addMethod() {
|
|
this.crudMethod.add(this.form).then(() => {
|
|
this.addSuccessNotify()
|
|
this.loading = false
|
|
this.afterAddMethod()
|
|
this.cancel()
|
|
this.init()
|
|
}).catch(() => {
|
|
this.loading = false
|
|
this.afterAddErrorMethod()
|
|
})
|
|
},
|
|
/**
|
|
* 新增后可以调用该方法
|
|
*/
|
|
afterAddMethod() {},
|
|
/**
|
|
* 新增失败后调用该方法
|
|
*/
|
|
afterAddErrorMethod() {},
|
|
/**
|
|
* 通用的编辑方法
|
|
*/
|
|
editMethod() {
|
|
this.crudMethod.edit(this.form).then(() => {
|
|
this.editSuccessNotify()
|
|
this.loading = false
|
|
this.afterEditMethod()
|
|
this.cancel()
|
|
this.init()
|
|
}).catch(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
/**
|
|
* 编辑后可以调用该方法
|
|
*/
|
|
afterEditMethod() {},
|
|
/**
|
|
* 提交前可以调用该方法
|
|
*/
|
|
beforeSubmitMethod() {
|
|
return true
|
|
},
|
|
/**
|
|
* 提交
|
|
*/
|
|
submitMethod() {
|
|
if (!this.beforeSubmitMethod()) {
|
|
return
|
|
}
|
|
if (this.$refs['form']) {
|
|
this.$refs['form'].validate((valid) => {
|
|
if (valid) {
|
|
this.loading = true
|
|
if (this.isAdd) {
|
|
this.addMethod()
|
|
} else this.editMethod()
|
|
}
|
|
})
|
|
}
|
|
},
|
|
/**
|
|
* 隐藏弹窗
|
|
*/
|
|
cancel() {
|
|
this.dialog = false
|
|
if (this.$refs['form']) {
|
|
this.$refs['form'].clearValidate()
|
|
this.form = this.resetForm
|
|
}
|
|
},
|
|
/**
|
|
* 获取弹窗的标题
|
|
*/
|
|
getFormTitle() {
|
|
return this.isAdd ? `新增${this.title}` : `编辑${this.title}`
|
|
},
|
|
/**
|
|
* 通用导出
|
|
*/
|
|
downloadMethod() {
|
|
this.beforeInit()
|
|
this.downloadLoading = true
|
|
download(this.url + '/download', this.params).then(result => {
|
|
this.downloadFile(result, this.title + '数据', 'xlsx')
|
|
this.downloadLoading = false
|
|
}).catch(() => {
|
|
this.downloadLoading = false
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|