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.
339 lines
7.5 KiB
339 lines
7.5 KiB
import { |
|
initData, |
|
download |
|
} from '@/api/data' |
|
import { |
|
parseTime, |
|
downloadFile |
|
} from '@/utils/index' |
|
import checkPermission from '@/utils/permission' |
|
|
|
export default { |
|
data() { |
|
return { |
|
cateList: [], |
|
// 表格数据 |
|
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.cateList = data.cateList |
|
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 |
|
}) |
|
} |
|
} |
|
}
|
|
|