mirror of https://github.com/1Panel-dev/1Panel
ssongliu
6 months ago
committed by
GitHub
18 changed files with 899 additions and 24 deletions
@ -0,0 +1,164 @@
|
||||
<template> |
||||
<div> |
||||
<el-drawer |
||||
v-model="drawerVisible" |
||||
:destroy-on-close="true" |
||||
@close="handleClose" |
||||
:close-on-click-modal="false" |
||||
:close-on-press-escape="false" |
||||
size="50%" |
||||
> |
||||
<template #header> |
||||
<DrawerHeader :header="$t('database.redisQuickCmd')" :back="handleClose" /> |
||||
</template> |
||||
<el-button type="primary" @click="handleCmdAdd()"> |
||||
{{ $t('commons.button.add') }} |
||||
</el-button> |
||||
<el-button @click="batchDelete(null)"> |
||||
{{ $t('commons.button.delete') }} |
||||
</el-button> |
||||
<el-table :data="data" class="mt-5" @selection-change="handleSelectionChange"> |
||||
<el-table-column type="selection" fix /> |
||||
<el-table-column :label="$t('commons.table.name')" min-width="50"> |
||||
<template #default="{ row }"> |
||||
<el-input v-if="row.isOn" v-model="row.name" /> |
||||
<span v-else>{{ row.name }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column :label="$t('terminal.quickCommand')" min-width="120"> |
||||
<template #default="{ row }"> |
||||
<el-input v-if="row.isOn" v-model="row.command" /> |
||||
<span v-else>{{ row.name }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column min-width="40"> |
||||
<template #default="scope"> |
||||
<el-button link type="primary" @click="handleCmdCreate(scope.row)"> |
||||
{{ $t('commons.button.save') }} |
||||
</el-button> |
||||
<el-button link type="primary" @click="handleCmdDelete(scope.$index)"> |
||||
{{ $t('commons.button.delete') }} |
||||
</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<template #footer> |
||||
<span class="dialog-footer"> |
||||
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button> |
||||
</span> |
||||
</template> |
||||
</el-drawer> |
||||
|
||||
<OpDialog ref="opRef" @search="search" /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { Command } from '@/api/interface/command'; |
||||
import { addRedisCommand, deleteRedisCommand, getRedisCommandPage } from '@/api/modules/host'; |
||||
import { reactive, ref } from 'vue'; |
||||
import i18n from '@/lang'; |
||||
import DrawerHeader from '@/components/drawer-header/index.vue'; |
||||
import { MsgSuccess } from '@/utils/message'; |
||||
|
||||
const drawerVisible = ref(); |
||||
const loading = ref(); |
||||
const data = ref(); |
||||
const selects = ref<any>([]); |
||||
const paginationConfig = reactive({ |
||||
currentPage: 1, |
||||
pageSize: 10, |
||||
total: 0, |
||||
}); |
||||
const opRef = ref(); |
||||
|
||||
const emit = defineEmits(['reload']); |
||||
|
||||
const acceptParams = () => { |
||||
drawerVisible.value = true; |
||||
search(); |
||||
}; |
||||
|
||||
const handleSelectionChange = (val: any[]) => { |
||||
selects.value = val; |
||||
}; |
||||
|
||||
const handleCmdAdd = () => { |
||||
let item = { |
||||
name: '', |
||||
command: '', |
||||
isOn: true, |
||||
}; |
||||
data.value.push(item); |
||||
}; |
||||
const handleCmdDelete = (index: number) => { |
||||
batchDelete(data.value[index]); |
||||
data.value.splice(index, 1); |
||||
}; |
||||
|
||||
const handleCmdCreate = async (row: any) => { |
||||
loading.value = true; |
||||
await addRedisCommand(row) |
||||
.then(() => { |
||||
loading.value = false; |
||||
row.isOn = false; |
||||
MsgSuccess(i18n.global.t('commons.msg.operationSuccess')); |
||||
search(); |
||||
}) |
||||
.catch(() => { |
||||
loading.value = false; |
||||
}); |
||||
return; |
||||
}; |
||||
|
||||
const batchDelete = async (row: Command.RedisCommand | null) => { |
||||
let names = []; |
||||
let ids = []; |
||||
if (row) { |
||||
ids = [row.id]; |
||||
names = [row.name]; |
||||
} else { |
||||
selects.value.forEach((item: Command.CommandInfo) => { |
||||
ids.push(item.id); |
||||
names.push(item.name); |
||||
}); |
||||
} |
||||
opRef.value.acceptParams({ |
||||
title: i18n.global.t('commons.button.delete'), |
||||
names: names, |
||||
msg: i18n.global.t('commons.msg.operatorHelper', [ |
||||
i18n.global.t('terminal.quickCommand'), |
||||
i18n.global.t('commons.button.delete'), |
||||
]), |
||||
api: deleteRedisCommand, |
||||
params: { ids: ids }, |
||||
}); |
||||
}; |
||||
|
||||
const search = async () => { |
||||
let params = { |
||||
page: paginationConfig.currentPage, |
||||
pageSize: paginationConfig.pageSize, |
||||
info: '', |
||||
}; |
||||
loading.value = true; |
||||
await getRedisCommandPage(params) |
||||
.then((res) => { |
||||
loading.value = false; |
||||
data.value = res.data.items || []; |
||||
paginationConfig.total = res.data.total; |
||||
}) |
||||
.catch(() => { |
||||
loading.value = false; |
||||
}); |
||||
}; |
||||
|
||||
const handleClose = () => { |
||||
drawerVisible.value = false; |
||||
emit('reload'); |
||||
}; |
||||
|
||||
defineExpose({ |
||||
acceptParams, |
||||
}); |
||||
</script> |
Loading…
Reference in new issue