优化实例选择逻辑

This commit is contained in:
chaos-zhu 2024-08-04 05:24:33 +08:00
parent e33cffbfe7
commit 5f8c3aabe7
4 changed files with 39 additions and 21 deletions

View File

@ -101,7 +101,7 @@ module.exports = (httpServer) => {
if (timer) clearInterval(timer)
clientSockets.forEach(socket => socket.close && socket.close())
clientSockets = null
clientsData = null
clientsData = {}
consola.info('clients-socket 连接断开: ', socket.id)
})
})

View File

@ -12,14 +12,14 @@
>
<div v-if="isBatchModify" class="batch_info">
<el-alert title="正在进行批量修改操作,留空默认保留原值" type="warning" :closable="false" />
<!-- <el-tag
<el-tag
v-for="item in batchHosts"
:key="item.id"
class="host_name_tag"
type="warning"
>
{{ item.name }}
</el-tag> -->
</el-tag>
</div>
<el-form
ref="formRef"
@ -83,7 +83,7 @@
<el-input
v-model.trim.number="hostForm.port"
clearable
placeholder="port"
placeholder=""
autocomplete="off"
/>
</el-form-item>
@ -312,7 +312,7 @@ const rules = computed(() => {
group: { required: !isBatchModify.value, message: '选择一个分组' },
name: { required: !isBatchModify.value, message: '输入实例别名', trigger: 'change' },
host: { required: !isBatchModify.value, message: '输入IP/域名', trigger: 'change' },
port: { required: true, type: 'number', message: '输入ssh端口', trigger: 'change' },
port: { required: !isBatchModify.value, type: 'number', message: '输入ssh端口', trigger: 'change' },
index: { required: !isBatchModify.value, type: 'number', message: '输入数字', trigger: 'change' },
// password: [{ required: hostForm.authType === 'password', trigger: 'change' },],
// privateKey: [{ required: hostForm.authType === 'privateKey', trigger: 'change' },],
@ -345,7 +345,7 @@ const setDefaultData = () => {
const setBatchDefaultData = () => {
if (!isBatchModify.value) return
Object.assign(hostForm.value, { ...formField }, { group: '' })
Object.assign(hostForm.value, { ...formField }, { group: '', port: '', username: '', authType: '' })
}
const handleOpen = async () => {
setDefaultData()
@ -404,6 +404,7 @@ const handleSave = () => {
if (isBatchModify.value) {
// eslint-disable-next-line
let updateFileData = Object.fromEntries(Object.entries(formData).filter(([key, value]) => Boolean(value))) //
if (Object.keys(updateFileData).length === 0) return $message.warning('没有任何修改')
// console.log(updateFileData)
let newHosts = batchHosts.value
.map(item => ({ ...item, ...updateFileData }))

View File

@ -3,10 +3,10 @@
<el-table
ref="tableRef"
:data="hosts"
@select="handleSelectionChange"
@select-all="handleSelectionChange"
row-key="host"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" />
<el-table-column type="selection" reserve-selection />
<el-table-column prop="index" label="序号" width="100px" />
<el-table-column label="名称">
<template #default="scope">{{ scope.row.name }}</template>
@ -43,7 +43,7 @@
</template>
<script setup>
import { ref, computed, getCurrentInstance, nextTick, watch } from 'vue'
import { ref, computed, getCurrentInstance, nextTick, watch, defineExpose } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const { proxy: { $api, $router, $tools } } = getCurrentInstance()
@ -107,23 +107,31 @@ const handleSSH = async ({ host }) => {
$router.push({ path: '/terminal', query: { host } })
}
let selectHosts = ref([])
// let selectHosts = ref([])
// tabletable,set
watch(() => props.hosts, () => {
// console.log('hosts change')
nextTick(() => {
selectHosts.value.forEach(row => {
tableRef.value.toggleRowSelection && tableRef.value.toggleRowSelection(row, true)
})
})
}, { immediate: true, deep: true })
// watch(() => props.hosts, () => {
// // console.log('hosts change')
// nextTick(() => {
// selectHosts.value.forEach(row => {
// tableRef.value.toggleRowSelection && tableRef.value.toggleRowSelection(row, true)
// })
// })
// }, { immediate: true, deep: true })
const handleSelectionChange = (val) => {
// console.log('select: ', val)
selectHosts.value = val
// selectHosts.value = val
emit('select-change', val)
}
const clearSelection = () => {
tableRef.value.clearSelection()
}
defineExpose({
clearSelection
})
const handleRemoveHost = async ({ host }) => {
ElMessageBox.confirm('确认删除实例', 'Warning', {
confirmButtonText: '确定',

View File

@ -44,6 +44,7 @@
@update-list="handleUpdateList"
/> -->
<HostTable
ref="hostTableRefs"
:hosts="hosts"
:hidden-ip="hiddenIp"
@update-host="handleUpdateHost"
@ -60,7 +61,7 @@
:is-batch-modify="isBatchModify"
:batch-hosts="selectHosts"
@update-list="handleUpdateList"
@closed="updateHostData = null;isBatchModify = false"
@closed="hostFormClosed"
/>
<ImportHost
v-model:show="importVisible"
@ -84,6 +85,7 @@ let hostFormVisible = ref(false)
let importVisible = ref(false)
let selectHosts = ref([])
let isBatchModify = ref(false)
const hostTableRefs = ref([])
let hiddenIp = ref(Number(localStorage.getItem('hiddenIp') || 0))
let activeGroup = ref([])
@ -165,6 +167,13 @@ watch(groupHostList, () => {
let isNoHost = computed(() => Object.keys(groupHostList.value).length === 0)
let hostFormClosed = () => {
updateHostData.value = null
isBatchModify.value = false
selectHosts.value = []
hostTableRefs.value.forEach(item => item.clearSelection())
}
</script>
<style lang="scss" scoped>