vue-django
Version:
个人实验项目, 本框架的目标是借鉴并超越django admin的自动化思想, 实现UI前端的极简快速定制开发
64 lines (60 loc) • 2.1 kB
JavaScript
/**
* Created by denishuang on 2023/11/9.
*/
let STATUS_MAP = {
'PENDING': '排队中',
'STARTED': '开始执行',
'RETRY': '重试',
'SUCCESS': '任务成功',
'FAILURE': '任务失败',
'UPLOAD': '上传中',
'TRAIN_MODEL': '模型训练中',
'SAVE_MODEL': '模型持久化',
'READ_EXCEL': '读取Excel',
'READ_TABLE': '读取数据表',
'SAVE_TABLE': '保存数据到表'
}
export default function (task) {
let a = {
statusMap: STATUS_MAP,
eventSource: null,
process: null,
task,
asyncStatusMap(status){
let a = this.statusMap[status]
return a || status
},
monitor(){
let promise = new Promise((resolve, reject) => {
this.loading = this.asyncStatusMap(this.task.status)
let es = this.eventSource = new EventSource(`/api/common/async_result/${this.task.id}/`)
es.addEventListener("message", (e) => {
let rs = JSON.parse(e.data)
if (rs.task_id !== this.task.id) {
console.log(`got other task id , ignore: ${rs.task_id}`)
return
}
rs.text = this.asyncStatusMap(rs.status)
if (this.process) {
this.process(rs)
}
console.log(rs)
if (['SUCCESS', 'FAILURE'].includes(rs.status)) {
this.eventSource.close()
if (rs.status === 'SUCCESS') {
resolve(rs)
} else if (rs.status === 'FAILURE') {
reject({code: 500, msg: rs.result, asyncResult: rs})
}
}
})
es.addEventListener("error", (err) => {
reject(err)
console.error("EventSource failed:", err);
})
})
return promise
}
}
return a
}