✨ 优化实例选择逻辑
This commit is contained in:
parent
e33cffbfe7
commit
5f8c3aabe7
@ -101,7 +101,7 @@ module.exports = (httpServer) => {
|
|||||||
if (timer) clearInterval(timer)
|
if (timer) clearInterval(timer)
|
||||||
clientSockets.forEach(socket => socket.close && socket.close())
|
clientSockets.forEach(socket => socket.close && socket.close())
|
||||||
clientSockets = null
|
clientSockets = null
|
||||||
clientsData = null
|
clientsData = {}
|
||||||
consola.info('clients-socket 连接断开: ', socket.id)
|
consola.info('clients-socket 连接断开: ', socket.id)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -12,14 +12,14 @@
|
|||||||
>
|
>
|
||||||
<div v-if="isBatchModify" class="batch_info">
|
<div v-if="isBatchModify" class="batch_info">
|
||||||
<el-alert title="正在进行批量修改操作,留空默认保留原值" type="warning" :closable="false" />
|
<el-alert title="正在进行批量修改操作,留空默认保留原值" type="warning" :closable="false" />
|
||||||
<!-- <el-tag
|
<el-tag
|
||||||
v-for="item in batchHosts"
|
v-for="item in batchHosts"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
class="host_name_tag"
|
class="host_name_tag"
|
||||||
type="warning"
|
type="warning"
|
||||||
>
|
>
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-tag> -->
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
@ -83,7 +83,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
v-model.trim.number="hostForm.port"
|
v-model.trim.number="hostForm.port"
|
||||||
clearable
|
clearable
|
||||||
placeholder="port"
|
placeholder=""
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -312,7 +312,7 @@ const rules = computed(() => {
|
|||||||
group: { required: !isBatchModify.value, message: '选择一个分组' },
|
group: { required: !isBatchModify.value, message: '选择一个分组' },
|
||||||
name: { required: !isBatchModify.value, message: '输入实例别名', trigger: 'change' },
|
name: { required: !isBatchModify.value, message: '输入实例别名', trigger: 'change' },
|
||||||
host: { required: !isBatchModify.value, message: '输入IP/域名', 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' },
|
index: { required: !isBatchModify.value, type: 'number', message: '输入数字', trigger: 'change' },
|
||||||
// password: [{ required: hostForm.authType === 'password', trigger: 'change' },],
|
// password: [{ required: hostForm.authType === 'password', trigger: 'change' },],
|
||||||
// privateKey: [{ required: hostForm.authType === 'privateKey', trigger: 'change' },],
|
// privateKey: [{ required: hostForm.authType === 'privateKey', trigger: 'change' },],
|
||||||
@ -345,7 +345,7 @@ const setDefaultData = () => {
|
|||||||
|
|
||||||
const setBatchDefaultData = () => {
|
const setBatchDefaultData = () => {
|
||||||
if (!isBatchModify.value) return
|
if (!isBatchModify.value) return
|
||||||
Object.assign(hostForm.value, { ...formField }, { group: '' })
|
Object.assign(hostForm.value, { ...formField }, { group: '', port: '', username: '', authType: '' })
|
||||||
}
|
}
|
||||||
const handleOpen = async () => {
|
const handleOpen = async () => {
|
||||||
setDefaultData()
|
setDefaultData()
|
||||||
@ -404,6 +404,7 @@ const handleSave = () => {
|
|||||||
if (isBatchModify.value) {
|
if (isBatchModify.value) {
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
let updateFileData = Object.fromEntries(Object.entries(formData).filter(([key, value]) => Boolean(value))) // 剔除掉未更改的值
|
let updateFileData = Object.fromEntries(Object.entries(formData).filter(([key, value]) => Boolean(value))) // 剔除掉未更改的值
|
||||||
|
if (Object.keys(updateFileData).length === 0) return $message.warning('没有任何修改')
|
||||||
// console.log(updateFileData)
|
// console.log(updateFileData)
|
||||||
let newHosts = batchHosts.value
|
let newHosts = batchHosts.value
|
||||||
.map(item => ({ ...item, ...updateFileData }))
|
.map(item => ({ ...item, ...updateFileData }))
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
<el-table
|
<el-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
:data="hosts"
|
:data="hosts"
|
||||||
@select="handleSelectionChange"
|
row-key="host"
|
||||||
@select-all="handleSelectionChange"
|
@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 prop="index" label="序号" width="100px" />
|
||||||
<el-table-column label="名称">
|
<el-table-column label="名称">
|
||||||
<template #default="scope">{{ scope.row.name }}</template>
|
<template #default="scope">{{ scope.row.name }}</template>
|
||||||
@ -43,7 +43,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<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'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
|
||||||
const { proxy: { $api, $router, $tools } } = getCurrentInstance()
|
const { proxy: { $api, $router, $tools } } = getCurrentInstance()
|
||||||
@ -107,23 +107,31 @@ const handleSSH = async ({ host }) => {
|
|||||||
$router.push({ path: '/terminal', query: { host } })
|
$router.push({ path: '/terminal', query: { host } })
|
||||||
}
|
}
|
||||||
|
|
||||||
let selectHosts = ref([])
|
// let selectHosts = ref([])
|
||||||
// 由于table数据内部字段更新后table组件会自动取消勾选,所以这里需要手动set勾选
|
// 由于table数据内部字段更新后table组件会自动取消勾选,所以这里需要手动set勾选
|
||||||
watch(() => props.hosts, () => {
|
// watch(() => props.hosts, () => {
|
||||||
// console.log('hosts change')
|
// // console.log('hosts change')
|
||||||
nextTick(() => {
|
// nextTick(() => {
|
||||||
selectHosts.value.forEach(row => {
|
// selectHosts.value.forEach(row => {
|
||||||
tableRef.value.toggleRowSelection && tableRef.value.toggleRowSelection(row, true)
|
// tableRef.value.toggleRowSelection && tableRef.value.toggleRowSelection(row, true)
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
}, { immediate: true, deep: true })
|
// }, { immediate: true, deep: true })
|
||||||
|
|
||||||
const handleSelectionChange = (val) => {
|
const handleSelectionChange = (val) => {
|
||||||
// console.log('select: ', val)
|
// console.log('select: ', val)
|
||||||
selectHosts.value = val
|
// selectHosts.value = val
|
||||||
emit('select-change', val)
|
emit('select-change', val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const clearSelection = () => {
|
||||||
|
tableRef.value.clearSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
clearSelection
|
||||||
|
})
|
||||||
|
|
||||||
const handleRemoveHost = async ({ host }) => {
|
const handleRemoveHost = async ({ host }) => {
|
||||||
ElMessageBox.confirm('确认删除实例', 'Warning', {
|
ElMessageBox.confirm('确认删除实例', 'Warning', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
@update-list="handleUpdateList"
|
@update-list="handleUpdateList"
|
||||||
/> -->
|
/> -->
|
||||||
<HostTable
|
<HostTable
|
||||||
|
ref="hostTableRefs"
|
||||||
:hosts="hosts"
|
:hosts="hosts"
|
||||||
:hidden-ip="hiddenIp"
|
:hidden-ip="hiddenIp"
|
||||||
@update-host="handleUpdateHost"
|
@update-host="handleUpdateHost"
|
||||||
@ -60,7 +61,7 @@
|
|||||||
:is-batch-modify="isBatchModify"
|
:is-batch-modify="isBatchModify"
|
||||||
:batch-hosts="selectHosts"
|
:batch-hosts="selectHosts"
|
||||||
@update-list="handleUpdateList"
|
@update-list="handleUpdateList"
|
||||||
@closed="updateHostData = null;isBatchModify = false"
|
@closed="hostFormClosed"
|
||||||
/>
|
/>
|
||||||
<ImportHost
|
<ImportHost
|
||||||
v-model:show="importVisible"
|
v-model:show="importVisible"
|
||||||
@ -84,6 +85,7 @@ let hostFormVisible = ref(false)
|
|||||||
let importVisible = ref(false)
|
let importVisible = ref(false)
|
||||||
let selectHosts = ref([])
|
let selectHosts = ref([])
|
||||||
let isBatchModify = ref(false)
|
let isBatchModify = ref(false)
|
||||||
|
const hostTableRefs = ref([])
|
||||||
|
|
||||||
let hiddenIp = ref(Number(localStorage.getItem('hiddenIp') || 0))
|
let hiddenIp = ref(Number(localStorage.getItem('hiddenIp') || 0))
|
||||||
let activeGroup = ref([])
|
let activeGroup = ref([])
|
||||||
@ -165,6 +167,13 @@ watch(groupHostList, () => {
|
|||||||
|
|
||||||
let isNoHost = computed(() => Object.keys(groupHostList.value).length === 0)
|
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>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user