parent
6013a316aa
commit
a8c31579be
11 changed files with 299 additions and 7 deletions
@ -0,0 +1,240 @@ |
|||||||
|
<script setup> |
||||||
|
import {computed, ref, watch} from "vue"; |
||||||
|
import {onBeforeMount, onUnmounted} from "vue"; |
||||||
|
import {useStore} from "vuex"; |
||||||
|
import {get_git_ver, get_update_option} from "@/apis/update.js" |
||||||
|
|
||||||
|
|
||||||
|
const store = useStore() |
||||||
|
|
||||||
|
const props = defineProps({ |
||||||
|
ip: { |
||||||
|
type: String, |
||||||
|
default: '' |
||||||
|
}, |
||||||
|
}) |
||||||
|
|
||||||
|
|
||||||
|
onUnmounted( |
||||||
|
() => { |
||||||
|
// store.state.update_dialog_show = false |
||||||
|
store.getters.dialog_change |
||||||
|
console.log(store.state.update_dialog_show) |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
// 获取git版本 |
||||||
|
const git_ver = ref([]) |
||||||
|
const selectedVersion = ref('') |
||||||
|
|
||||||
|
onBeforeMount(() => { |
||||||
|
get_git_ver().then(res => { |
||||||
|
if (Array.isArray(res)) { |
||||||
|
git_ver.value = [...res] |
||||||
|
} |
||||||
|
console.log(git_ver.value) |
||||||
|
}).catch() |
||||||
|
}) |
||||||
|
|
||||||
|
// 获取升级命令的功能 |
||||||
|
const updateCmd = ref({setup: [], teardown: [], sql: [], client: []}) |
||||||
|
|
||||||
|
onBeforeMount( |
||||||
|
() => { |
||||||
|
get_update_option().then(res => { |
||||||
|
console.log("get_update_option") |
||||||
|
if (Array.isArray(res)) { |
||||||
|
res.forEach( |
||||||
|
(value, index) => { |
||||||
|
if (value.process === "setup") { |
||||||
|
updateCmd.value.setup.push(value) |
||||||
|
} |
||||||
|
if (value.process === "teardown") { |
||||||
|
updateCmd.value.teardown.push(value) |
||||||
|
} |
||||||
|
if (value.process === "sql") { |
||||||
|
updateCmd.value.sql.push(value) |
||||||
|
} |
||||||
|
if (value.process === "client") { |
||||||
|
updateCmd.value.client.push(value) |
||||||
|
} |
||||||
|
} |
||||||
|
) |
||||||
|
console.log(updateCmd.value) |
||||||
|
} |
||||||
|
|
||||||
|
}).catch() |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
// 提交升级相关逻辑 |
||||||
|
const updateForm = ref() |
||||||
|
|
||||||
|
// 操作进度相关 |
||||||
|
const progress = [ |
||||||
|
{ |
||||||
|
content: '执行脚本', |
||||||
|
checked: true, |
||||||
|
done: true, |
||||||
|
time: '2018-04-12 20:46', |
||||||
|
}, |
||||||
|
{ |
||||||
|
content: '对比数据库', |
||||||
|
checked: true, |
||||||
|
done: false, |
||||||
|
time: '2018-04-03 20:46', |
||||||
|
}, |
||||||
|
{ |
||||||
|
content: '执行升级', |
||||||
|
checked: true, |
||||||
|
done: false, |
||||||
|
time: '2018-04-03 20:46', |
||||||
|
}, |
||||||
|
{ |
||||||
|
content: '上传客户端', |
||||||
|
checked: true, |
||||||
|
done: false, |
||||||
|
time: '', |
||||||
|
}, |
||||||
|
] |
||||||
|
|
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<el-dialog v-model="store.state.update_dialog_show" title="更新影院" :modal="true" width="720px"> |
||||||
|
<div><span class="update">更新单机:</span><span class="ip">{{ ip }}</span><span>目标版本:</span> |
||||||
|
|
||||||
|
<el-select v-model="selectedVersion"> |
||||||
|
<el-option v-for="ver in git_ver" :label="ver.short_release" :value="ver.short_release" :key="ver.id"></el-option> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
<el-form :model="updateForm"> |
||||||
|
<el-form-item> |
||||||
|
<el-checkbox-group v-model="updateForm"> |
||||||
|
<el-divider content-position="left"> |
||||||
|
<span class="cmd_label">执行脚本</span> |
||||||
|
</el-divider> |
||||||
|
<el-checkbox v-for="cmd in updateCmd.setup" :label="cmd.desc" :name="cmd.id.toString()" |
||||||
|
:checked="cmd.is_checked" :disabled="cmd.is_force"></el-checkbox> |
||||||
|
<el-divider content-position="left"> |
||||||
|
<span class="cmd_label">数据库</span> |
||||||
|
</el-divider> |
||||||
|
<el-checkbox v-for="cmd in updateCmd.sql" :label="cmd.desc" :name="cmd.id.toString()" |
||||||
|
:checked="cmd.is_checked" :disabled="cmd.is_force"></el-checkbox> |
||||||
|
<el-divider content-position="left"> |
||||||
|
<span class="cmd_label">执行升级</span> |
||||||
|
</el-divider> |
||||||
|
<el-checkbox v-for="cmd in updateCmd.teardown" :label="cmd.desc" :name="cmd.id.toString()" |
||||||
|
:checked="cmd.is_checked" :disabled="cmd.is_force"></el-checkbox> |
||||||
|
<el-divider content-position="left"> |
||||||
|
<span class="cmd_label">客户端</span> |
||||||
|
</el-divider> |
||||||
|
<el-checkbox v-for="cmd in updateCmd.client" :label="cmd.desc" :name="cmd.id.toString()" |
||||||
|
:checked="cmd.is_checked" :disabled="cmd.is_force"></el-checkbox> |
||||||
|
</el-checkbox-group> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<el-button type="primary">更新</el-button> |
||||||
|
<div class="processBox"> |
||||||
|
<!-- <el-divider />--> |
||||||
|
<div class="timelineProcessBox"> |
||||||
|
<el-timeline class="timeline"> |
||||||
|
<el-timeline-item |
||||||
|
class="lineitem" |
||||||
|
:class="progress.done ? 'active' : 'inactive'" |
||||||
|
v-for="(p, index) in progress" |
||||||
|
:key="index" |
||||||
|
:timestamp="p.time" |
||||||
|
> |
||||||
|
<span style="display: flex; flex-direction: column"> |
||||||
|
<span style="margin: 10px 0; font-size: 16px"> |
||||||
|
{{ p.content }} |
||||||
|
</span> |
||||||
|
<span style="color: #8c8c8c; font-size: 14px"> |
||||||
|
{{ p.checked }} |
||||||
|
</span> |
||||||
|
</span> |
||||||
|
</el-timeline-item> |
||||||
|
</el-timeline> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.el-checkbox-group { |
||||||
|
text-align: left; |
||||||
|
width: 640px; |
||||||
|
padding-left: 25px; |
||||||
|
} |
||||||
|
|
||||||
|
.el-checkbox { |
||||||
|
margin-left: 0; |
||||||
|
margin-right: 25px; |
||||||
|
width: 180px; |
||||||
|
padding-left: 0; |
||||||
|
text-align: left; |
||||||
|
} |
||||||
|
|
||||||
|
.el-divider--horizontal { |
||||||
|
line-height: 1; |
||||||
|
} |
||||||
|
.update { |
||||||
|
padding-left: 0; |
||||||
|
} |
||||||
|
.ip { |
||||||
|
margin-right: 100px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.processBox { |
||||||
|
background-color: #fff; |
||||||
|
height: 210px; |
||||||
|
|
||||||
|
.title { |
||||||
|
font-size: 16px; |
||||||
|
font-weight: 600; |
||||||
|
padding-left: 32px; |
||||||
|
padding-top: 16px; |
||||||
|
} |
||||||
|
.timelineProcessBox { |
||||||
|
.timeline { |
||||||
|
display: flex; |
||||||
|
width: 95%; |
||||||
|
margin: 40px auto; |
||||||
|
.lineitem { |
||||||
|
transform: translateX(50%); |
||||||
|
width: 25%; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
:deep(.el-timeline-item__tail) { |
||||||
|
border-left: none; |
||||||
|
border-top: 2px solid #e4e7ed; |
||||||
|
width: 100%; |
||||||
|
position: absolute; |
||||||
|
top: 6px; |
||||||
|
} |
||||||
|
:deep(.el-timeline-item__wrapper) { |
||||||
|
padding-left: 0; |
||||||
|
position: absolute; |
||||||
|
top: 20px; |
||||||
|
transform: translateX(-50%); |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
:deep(.el-timeline-item__timestamp) { |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
.active { |
||||||
|
:deep(.el-timeline-item__node) { |
||||||
|
background-color: $login_word; |
||||||
|
} |
||||||
|
|
||||||
|
:deep(.el-timeline-item__tail) { |
||||||
|
border-color: $login_word; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
Loading…
Reference in new issue