1、系统管理-端口池管理添加批量删除的功能

2、代理配置-端口映射添加和编辑页面服务端端口字段,支持输入搜索的功能
This commit is contained in:
Metal
2023-07-04 20:08:27 +08:00
parent 1625187bb1
commit 7ea723b578
9 changed files with 126 additions and 49 deletions
+10
View File
@@ -60,3 +60,13 @@ export function deletePortPool(id) {
}
})
}
export function deleteBatchPortPool(ids) {
return request({
url: '/port-pool/deleteBatch',
method: 'post',
data: {
ids:ids
}
})
}
@@ -8,60 +8,68 @@
<el-button size="mini" @click="handleCancelClick">{{cancelText}}</el-button>
<el-button type="primary" size="mini" @click="handleCommitClick">{{okText}}</el-button>
</div>
<el-button slot="reference" :type="type" :size="size">{{buttonText}}</el-button>
<el-button slot="reference" :type="type" :size="size" :icon="icon" :disabled="disabled">{{buttonText}}</el-button>
</el-popover>
</template>
<script>
export default {
name: 'deleteButton',
props: {
width: {
type: Number,
default: 160
export default {
name: 'deleteButton',
props: {
width: {
type: Number,
default: 160
},
buttonText: {
type: String,
default: '删除'
},
type: {
type: String,
default: 'danger'
},
size: {
type: String,
default: 'mini'
},
icon: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
},
title: {
type: String,
default: '确定删除吗?'
},
okText: {
type: String,
default: '确定'
},
cancelText: {
type: String,
default: '取消'
}
},
buttonText: {
type: String,
default: '删除'
data() {
return {
visible: false
}
},
type: {
type: String,
default: 'danger'
},
size: {
type: String,
default: 'mini'
},
title: {
type: String,
default: '确定删除吗?'
},
okText: {
type: String,
default: '确定'
},
cancelText: {
type: String,
default: '取消'
}
},
data() {
return {
visible: false
}
},
methods: {
handleCancelClick() {
this.visible = false
this.$emit('handleCancelClick')
},
handleCommitClick() {
this.visible = false
this.$emit('handleCommitClick')
methods: {
handleCancelClick() {
this.visible = false
this.$emit('handleCancelClick')
},
handleCommitClick() {
this.visible = false
this.$emit('handleCommitClick')
}
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
+1
View File
@@ -101,6 +101,7 @@ export default {
publish: 'Publish',
draft: 'Draft',
delete: 'Delete',
deleteBatch: 'DeleteBatch',
cancel: 'Cancel',
confirm: 'Confirm',
portOrRange: 'example: 3306 or 1000-2000'
+1
View File
@@ -121,6 +121,7 @@ export default {
publish: '发布',
draft: '草稿',
delete: '删除',
deleteBatch: '批量删除',
cancel: '取 消',
confirm: '确 定',
userId: '用户ID',
@@ -143,7 +143,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('服务端端口')" prop="serverPort">
<el-select style="width: 280px;" class="filter-item" v-model="temp.serverPort" placeholder="请选择">
<el-select style="width: 280px;" class="filter-item" v-model="temp.serverPort" placeholder="请选择" filterable>
<el-option v-for="item in serverPortList" :key="item.port" :label="item.port" :value="item.port">
</el-option>
</el-select>
@@ -6,10 +6,13 @@
</el-select>
<el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">{{$t('table.search')}}</el-button>
<el-button class="filter-item" style="margin-left: 10px;" @click="handleCreate" type="primary" icon="el-icon-edit">{{$t('table.add')}}</el-button>
<button-popover class="filter-item" style="margin-left: 10px;" size="medium" icon="el-icon-delete"
:buttonText="$t('table.deleteBatch')" :disabled="checkBoxData.length==0" @handleCommitClick="handleDeleteBatch" />
</div>
<el-table :key='tableKey' :data="list" v-loading="listLoading" element-loading-text="给我一点时间" border fit highlight-current-row
style="width: 100%">
style="width: 100%" @selection-change="onTableRowChange">
<el-table-column align="center" width="40" type="selection" />
<el-table-column align="center" :label="$t('table.id')" width="120">
<template slot-scope="scope">
<span>{{scope.row.id}}</span>
@@ -92,7 +95,7 @@
</template>
<script>
import { createPortPool, deletePortPool, fetchList, updateEnableStatus, updatePortPool } from '@/api/portPool'
import { createPortPool, deletePortPool, deleteBatchPortPool, fetchList, updateEnableStatus, updatePortPool } from '@/api/portPool'
import { portGroupList } from '@/api/portGroup'
import waves from '@/directive/waves' // 水波纹指令
import { parseTime } from '@/utils'
@@ -157,7 +160,8 @@ const calendarTypeOptions = [
rules: {
port: [{ required: true, message: '端口必填', trigger: 'blur' }]
},
downloadLoading: false
downloadLoading: false,
checkBoxData:[], //表单勾选的行
}
},
filters: {
@@ -320,6 +324,24 @@ const calendarTypeOptions = [
return v[j]
}
}))
},
onTableRowChange(val){ //表单勾选后赋值
this.checkBoxData = val
},
handleDeleteBatch(){ //批量删除操作
let ids = []
this.checkBoxData.forEach(item => {ids.push(item.id)})
deleteBatchPortPool(ids).then(response => {
if (response.data.code === 0) {
this.$notify({
title: '成功',
message: '删除成功',
type: 'success',
duration: 2000
})
this.getList()
}
})
}
}
}
@@ -123,4 +123,14 @@ public class PortPoolController {
ParamCheckUtil.checkNotEmpty(req.getPortIdList(), "portIdList");
return portPoolService.updateGroup(req);
}
@Post
@Mapping("/deleteBatch")
@Authorization(onlyAdmin = true)
public void deleteBatch(PortPoolDeleteBatchReq req) {
ParamCheckUtil.checkNotNull(req, "req");
ParamCheckUtil.checkNotNull(req.getIds(), "ids");
portPoolService.deleteBatch(req.getIds());
}
}
@@ -0,0 +1,14 @@
package org.dromara.neutrinoproxy.server.controller.req.system;
import lombok.Data;
import java.util.List;
/**
* @author: Metal
* @date: 2023/7/3
*/
@Data
public class PortPoolDeleteBatchReq {
private List<Integer> ids;
}
@@ -179,4 +179,15 @@ public class PortPoolService {
LicenseDO licenseDO = licenseMapper.queryById(req.getLicenseId());
return portPoolMapper.getAvailablePortList(req.getLicenseId(), licenseDO.getUserId());
}
public void deleteBatch(List<Integer> ids) {
List<PortPoolDO> portPoolDOList = portPoolMapper.selectBatchIds(ids);
ParamCheckUtil.checkNotNull(portPoolDOList, ExceptionConstant.PORT_NOT_EXIST);
portPoolMapper.deleteBatchIds(ids);
// 更新visitorChannel
portPoolDOList.stream().forEach(portPoolDO -> {
visitorChannelService.updateVisitorChannelByPortPool(portPoolDO.getPort(), EnableStatusEnum.DISABLE.getStatus());
});
}
}