Files
ptools/templates/auto_pt/update.html
ngfchl 3c50d23aeb 1. 升级通知,支持标题的可以看到标题
2. 因代码更新会长期服务,后提示更新失败,现修改更新,代码更新与数据库同步分开,代码更新完毕发送通知,然后同步数据库
3. 如嫌操作麻烦,可以直接重启容器进行更新
2023-01-04 20:26:49 +08:00

317 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% load static %}
<!-- 引入样式 -->
<link rel="stylesheet" href="{% static 'admin/simpleui-x/elementui/theme-chalk/index.css' %}">
{#<link rel="stylesheet" href="{% static 'admin/simpleui-x/elementui/theme-chalk/display.css' %}">#}
<!-- 引入组件库 -->
<div id="app">
<el-card class="box-card">
<div slot="header" class="clearfix">
{# <el-popover#}
{# placement="top-start"#}
{# title="友情提示"#}
{# width="300"#}
{# trigger="hover"#}
{# content="更新之前会自动备份数据库,更新完毕后会自动重启容器!">#}
{# <el-button slot="reference" type="danger" @click="do_update"#}
{# v-if="update && restart"#}
{# >重启更新#}
{# </el-button>#}
{# </el-popover>#}
<el-popover
placement="top-start"
title="友情提示"
width="300"
trigger="hover"
content="没啥特殊功能,就是重启下容器!">
<el-button slot="reference" type="danger" @click="do_restart" v-if="restart">重启</el-button>
</el-popover>
<el-popover
placement="top-start"
title="友情提示"
width="300"
trigger="hover"
content="如果更新后更新功能未生效,请重启容器!!">
<el-button slot="reference" type="danger" @click="do_update"
v-if="update">更新
</el-button>
</el-popover>
<el-popover
placement="top-start"
title="友情提示"
width="300"
trigger="hover"
content="如果提示更新失败可以使用本功能初始化Xpath">
<el-button slot="reference" type="warning" @click="do_xpath">初始化Xpath
</el-button>
</el-popover>
<el-popover
placement="top-start"
title="友情提示"
width="300"
trigger="hover"
content="如果遇到无法更新的情况,您可以选择重建容器或者进入容器命令行到项目根目录执行`git pull`命令!">
<el-link slot="reference" type="success">
<span v-if="{{ restart }}">容器已运行:{{ delta }}</span>
<span v-text="time"></span>
</el-link>
</el-popover>
<el-tag type="success" style="float: right;"
effect="plain">
<span v-text="branch"></span>
</el-tag>
</div>
<div class="text item">
<el-card class="box-card" shadow="hover" v-if="show">
<div slot="header" class="clearfix">
<span>更新记录</span>
{# <el-tag style="float: right; padding: 3px 0"#}
{# :key="log.res[0] == 0 ? '操作成功!' : '出错啦!'"#}
{# :type="log.res[0] == 0 ? 'success' : 'warning'">#}
{# <span v-text="log.res[0] == 0 ? '操作成功!' : '出错啦!'"></span>#}
{# </el-tag>#}
</div>
<div class="text item">
<el-row>
<el-col :sm="8" :lg="6" :xs="11" v-for="log in update_log">
<el-result :icon="log.res == 0 ? 'success' : 'warning'"
:title="log.command"
:subTitle="log.command">
</el-result>
</el-col>
</el-row>
</div>
</el-card>
<el-row>
<el-col :span="12" v-if="update" :xs="24">
<el-card class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<span>更新日志</span>
</div>
<el-timeline>
<el-timeline-item
v-for="(update_note, index) in update_notes"
:key="index"
{# :icon="activity.icon" #}
{# :type="activity.type" #}
color="#0bbd87"
{# :size="activity.size" #}
:timestamp="update_note.date">
<el-card shadow="hover">
<p v-html="update_note.data">
</p>
<h4>版本编号:
<span v-html="update_note.hexsha"></span>
</h4>
</el-card>
</el-timeline-item>
</el-timeline>
</el-card>
</el-col>
<el-col :span="local_log_width" :xs="24">
<el-card class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<span>本地日志</span>
</div>
<el-timeline>
<el-timeline-item
v-for="(update_note, index) in local_logs"
:key="index"
icon="el-icon-refresh"
type="success"
color="#0bbd87"
{# :size="activity.size" #}
:timestamp="update_note.date">
<el-card shadow="hover">
<p v-html="update_note.data">
<h4>版本编号:
<span v-html="update_note.hexsha"></span>
</h4>
</p>
</el-card>
</el-timeline-item>
</el-timeline>
</el-card>
</el-col>
</el-row>
</div>
</el-card>
</div>
<script src="{% static 'admin/simpleui-x/js/vue.min.js' %}"></script>
<script src="{% static 'admin/simpleui-x/elementui/index.js' %}"></script>
<script src="{% static 'admin/simpleui-x/js/axios.min.js' %}"></script>
<script type="text/javascript">
// 配置对象 options
const vm = new Vue({
// 配置选项(option)
// element: 指定用vue来管理页面中的哪个标签区域
el: '#app',
data: {
update_notes: {{ update_notes | safe }},
local_logs: {{ local_logs | safe }},
update_log: {},
restart: true,
update: {{ update }},
local_log_width: 24,
cid: "{{ cid }}",
time: '',
show: false,
branch: "{{ branch }}"
},
created() {
if (this.update) {
this.local_log_width = 12
}
if (this.cid === '') {
this.restart = false
}
this.$message({
showClose: true,
message: "{{ update_tips }}",
type: 'success'
});
},
watch: {
time: function (newValue) {
if (newValue == 0) {
location.reload()
{#this.$route.replace("{% url "update_page" %}")#}
}
}
},
methods: {
timeDown() {
console.log(this.time)
this.time--
},
do_restart() {
this.$confirm('重启容器, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
axios.get(
"{% url "do_restart" %}", {
params: {
cid: this.cid
}
}).then(res => {
if (res.data.code === 0) {
this.$message({
type: 'success',
message: res.data.msg
});
this.time = 15
setInterval(this.timeDown, 1000)
} else {
console.log(res)
this.$message({
type: 'warning',
message: res.data.msg
});
}
})
}).catch(res => {
{#console.log(res)#}
this.$message({
type: 'info',
message: '已取消重启'
});
});
},
do_xpath() {
this.$confirm('初始化Xpath, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
axios.get(
"{% url "do_xpath" %}", {
params: {
cid: this.cid
}
}).then(res => {
if (res.data.code === 0) {
this.$message({
type: 'success',
message: res.data.msg
});
this.time = 15
setInterval(this.timeDown, 1000)
} else {
console.log(res)
this.$message({
type: 'warning',
message: res.data.msg
});
}
})
}).catch(res => {
{#console.log(res)#}
this.$message({
type: 'info',
message: '已取消重启'
});
});
},
do_update() {
this.$confirm('此操作会拉取代码并更新软件,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$message({
type: 'success',
message: '更新指令发送成功!稍后请在接到通知后同步数据库!'
});
axios.get(
"{% url "do_update" %}"
).then(res => {
if (res.data.code === 0) {
console.log(res, 1)
this.update_log = res.data.data.result
this.show = true
{#console.log('规则更新记录', res.data.data.xpath_update)#}
this.$message({
type: 'success',
message: res.data.msg
});
setTimeout(() => {
window.location.reload()
}, 15000)
} else {
console.log(res, 2)
this.$message({
type: 'warning',
message: res.data.msg
});
}
}).catch(res => {
console.log(res, 3)
this.$message({
type: 'error',
message: "更新失败!"
});
})
}).catch(res => {
console.log(res)
this.$message({
type: 'warning',
message: '已取消更新'
});
});
}
}
});
</script>