新版打包监控,不再用前端轮询

This commit is contained in:
aixianling
2023-01-19 10:47:51 +08:00
parent e419339c10
commit 34e23beaeb
3 changed files with 31 additions and 39 deletions

View File

@@ -57,7 +57,7 @@ export default {
{prop: "dist", label: "更新路径"},
{slot: 'process'},
],
timer: {}
ws: {}
}
},
methods: {
@@ -107,34 +107,32 @@ export default {
})
},
handleUpdate(row) {
let {id} = row, {timer} = this
this.instance.post("/node/custom/getZip", null, {
params: {id}
}).then(res => {
if (res?.code == 0) {
row.count = 1
timer[id] = setInterval(() => {
if (row.count >= 100) {
clearInterval(timer[id])
let {id} = row
if (!this.ws[id]) {
this.ws[id] = new WebSocket(`ws://192.168.1.87:12525/custom/getZip?id=${id}`)
this.ws[id].onmessage = res => {
if (res?.data) {
const data = JSON.parse(res.data)
if (data.code == '0') {
row.count = data.progress
if (row.count == 100) {
row.count = 0
this.$message.success("打包成功!")
this.refreshRow(row, data.remark)
}
} else if (data.code == 1) {
row.count = 0
this.$message.error("打包失败!")
} else if (row.count % 2 == 0 && row.target) {
row.count++
} else this.getRowById(row.id).then(v => {
if (v.error) {
clearInterval(timer[id])
this.$message.error("打包失败!")
this.refreshRow(row, v)
row.count = 0
} else if (v.download) {
clearInterval(timer[id])
this.refreshRow(row, v)
row.count = 0
} else row.count++
})
}, 6000)
this.refreshRow(row, data.row)
}
}
}
})
this.ws[id].onclose = () => {
row.count = 0
this.ws[id].close()
delete this.ws[id]
}
} else this.ws[id]?.send(JSON.stringify({id}))
},
refreshRow(row, v) {
row.error = v.error
@@ -148,15 +146,9 @@ export default {
},
handleCancelUpdate(row) {
let {id} = row
return this.instance.post("/node/custom/cancelZip", null, {
params: {id}
}).then(res => {
if (res?.code == 0) {
clearInterval(this.timer[id])
row.count = 0
this.getRowById(row.id).then(v => this.refreshRow(row, v))
}
})
this.ws[id].send(JSON.stringify({
cid: id
}))
},
getRowById(id) {
return this.instance.post("/node/custom/detail", null, {
@@ -179,7 +171,7 @@ export default {
this.getTableData()
},
beforeDestroy() {
Object.values(this.timer).map(t => clearInterval(t))
Object.values(this.ws).map(t => t.close())
}
}
</script>