diff --git a/src/locales/en.json b/src/locales/en.json index c24e15f0..b76186b3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -149,7 +149,6 @@ "Backend Name": "Backend Name", "Backing Up": "Backing Up", "Backup": "Backup", - "Backup Capacity": "Backup Capacity", "Backup Detail": "Backup Detail", "Backup Mode": "Backup Mode", "Backup Name": "Backup Name", @@ -942,7 +941,6 @@ "Maintenance": "Maintenance", "Manage Access": "Manage Access", "Manage Host": "Manage Host", - "Manage Member": "Manage Member", "Manage Metadata": "Manage Metadata", "Manage QoS": "Manage QoS", "Manage Resource Types": "Manage Resource Types", @@ -1274,7 +1272,6 @@ "Quota: Insufficient quota to create resources, please adjust resource quantity or quota(left { quota }, input { input }).": "Quota: Insufficient quota to create resources, please adjust resource quantity or quota(left { quota }, input { input }).", "Quota: Project quotas sufficient resources can be created": "Quota: Project quotas sufficient resources can be created", "RAM": "RAM", - "RAM(GB)": "RAM(GB)", "RAM(MB)": "RAM(MB)", "RAW - Raw disk image format": "RAW - Raw disk image format", "ROUND_ROBIN": "Round Robin", @@ -1877,8 +1874,6 @@ "flavor": "flavor", "floating ip": "floating ip", "floating ips": "floating ips", - "floatingip": "floatingip", - "gigabytes": "gigabytes", "heat services": "heat services", "host aggregates": "host aggregates", "hypervisor": "hypervisor", @@ -1941,7 +1936,6 @@ "security group": "security group", "security group rules": "security group rules", "security groups": "security groups", - "security_group": "security_group", "select an existing port": "select an existing port", "server group": "server group", "server groups": "server groups", @@ -1958,7 +1952,6 @@ "static routers": "static routers", "stop instance": "stop instance", "storage backend": "storage backend", - "subnet": "subnet", "subnets": "subnets", "suspend instance": "suspend instance", "the policy is in use": "the policy is in use", @@ -1974,7 +1967,6 @@ "user group": "user group", "user groups": "user groups", "users": "users", - "vCPU": "vCPU", "vCPUs": "vCPUs", "vCPUs and ram are not used for bare metal scheduling": "vCPUs and ram are not used for bare metal scheduling", "virtual adapter": "virtual adapter", diff --git a/src/locales/zh.json b/src/locales/zh.json index d30d400d..67092da9 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -149,7 +149,6 @@ "Backend Name": "后端名称", "Backing Up": "备份中", "Backup": "备份", - "Backup Capacity": "备份容量(GB)", "Backup Detail": "备份详情", "Backup Mode": "备份方式", "Backup Name": "备份名称", @@ -942,7 +941,6 @@ "Maintenance": "运维管理", "Manage Access": "访问管理", "Manage Host": "管理主机", - "Manage Member": "管理成员", "Manage Metadata": "管理元数据", "Manage QoS": "管理QoS", "Manage Resource Types": "管理资源类型", @@ -1274,7 +1272,6 @@ "Quota: Insufficient quota to create resources, please adjust resource quantity or quota(left { quota }, input { input }).": "配额:项目配额不足,无法创建资源,请进行资源数量或配额的调整(剩余{ quota },输入{ input })。", "Quota: Project quotas sufficient resources can be created": "配额:项目配额充足,可创建资源", "RAM": "内存", - "RAM(GB)": "", "RAM(MB)": "内存(MB)", "RAW - Raw disk image format": "RAW - 原始磁盘映像格式", "ROUND_ROBIN": "轮询算法", @@ -1877,8 +1874,6 @@ "flavor": "云主机类型", "floating ip": "浮动IP", "floating ips": "浮动IP", - "floatingip": "浮动IP", - "gigabytes": "云硬盘容量", "heat services": "编排服务", "host aggregates": "主机集合", "hypervisor": "虚拟机管理器", @@ -1941,7 +1936,6 @@ "security group": "安全组", "security group rules": "安全组规则", "security groups": "安全组", - "security_group": "安全组", "select an existing port": "选择已有网卡", "server group": "云主机组", "server groups": "云主机组", @@ -1958,7 +1952,6 @@ "static routers": "静态路由", "stop instance": "关闭云主机", "storage backend": "存储后端", - "subnet": "子网", "subnets": "子网", "suspend instance": "挂起云主机", "the policy is in use": "策略正在使用中", @@ -1974,7 +1967,6 @@ "user group": "用户组", "user groups": "用户组", "users": "用户", - "vCPU": "虚拟CPU", "vCPUs": "虚拟CPU", "vCPUs and ram are not used for bare metal scheduling": "vCPUs 和 ram 不用于裸机调度", "virtual adapter": "虚拟网卡", diff --git a/src/pages/network/containers/LoadBalancers/Listener/Actions/MemberManagement.jsx b/src/pages/network/containers/LoadBalancers/Listener/Actions/MemberManagement.jsx deleted file mode 100644 index 6a353574..00000000 --- a/src/pages/network/containers/LoadBalancers/Listener/Actions/MemberManagement.jsx +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright 2021 99cloud -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import React from 'react'; -import { inject, observer } from 'mobx-react'; -import { ModalAction } from 'containers/Action'; -import { PoolMemberStore } from 'stores/octavia/pool-member'; -import { VirtualAdapterStore } from 'stores/neutron/virtual-adapter'; -import { Input } from 'antd'; -import { portStatus, portSortProps } from 'resources/port'; - -@inject('rootStore') -@observer -export default class MemberManagement extends ModalAction { - constructor(props) { - super(props); - this.state = { - memberUpdateValue: [], - }; - } - - static id = 'manage-mamber'; - - static title = t('Manage Member'); - - get name() { - return t('Manage Member'); - } - - static policy = 'os_load-balancer_api:member:put'; - - static allowed = (item) => - Promise.resolve(item.provisioning_status === 'ACTIVE'); - - init() { - this.store = new VirtualAdapterStore(); - this.memberStore = new PoolMemberStore(); - this.state.sgInitValue = { - selectedRowKeys: [], - selectedRows: [], - }; - } - - componentDidMount() { - this.getMember(); - } - - static get modalSize() { - return 'large'; - } - - async getMember() { - // const virtualAdapter = this.store.list; - const { default_pool_id } = this.item; - const members = await this.memberStore.fetchList({ - pool_id: default_pool_id, - }); - // const { members } = res; - const memberInitValue = { - selectedRowKeys: members.map((it) => it.address), - selectedRows: members.map((it) => { - it.id = it.address; - it.member_ip = it.address; - return it; - }), - }; - this.setState({ - memberInitValue, - }); - this.updateFormValue('Member', memberInitValue); - } - - getModalSize() { - return 'large'; - } - - get item() { - const { item } = this.props; - if (!item) { - return this.containerProps.detail; - } - return item; - } - - get defaultValue() { - return {}; - } - - get formItems() { - const { memberInitValue, memberUpdateValue } = this.state; - return [ - { - name: 'Member', - label: t('Member'), - type: 'select-table', - backendPageStore: this.store, - extraParams: { - device_owner: ['compute:nova', ''], - addressAsIdKey: true, - }, - initValue: memberInitValue, - required: true, - isMulti: true, - tagKey: 'member_ip', - ...portSortProps, - // filterParams: - columns: [ - { - title: t('IP'), - dataIndex: 'id', - }, - { - title: t('Name'), - dataIndex: 'name', - }, - { - title: t('Attach Instance'), - dataIndex: 'server_name', - sorter: false, - }, - { - title: t('IPv4 Address'), - dataIndex: 'ipv4', - render: (value) => value.map((it) =>
{it}
), - isHideable: true, - stringify: (value) => value.join(','), - sorter: false, - }, - { - title: t('IPv6 Address'), - dataIndex: 'ipv6', - render: (value) => value.map((it) =>
{it}
), - isHideable: true, - stringify: (value) => value.join(','), - sorter: false, - }, - { - title: t('Status'), - dataIndex: 'status', - render: (value) => portStatus[value] || value, - }, - { - title: t('Port'), - dataIndex: 'protocol_port', - sorter: false, - render: (text, record) => { - const { selectedRows } = memberInitValue; - const updateMember = memberUpdateValue.filter( - (it) => record.id === it.id - )[0]; - const member = selectedRows.filter( - (it) => record.id === it.id - )[0]; - const defaultValue = member ? member.protocol_port : text; - const value = updateMember - ? updateMember.protocol_port - : defaultValue; - return ( - - this.handleChange( - Number(e.target.value), - record, - 'protocol_port' - ) - } - defaultValue={value} - type="number" - /> - ); - }, - }, - { - title: t('Weight'), - dataIndex: 'weight', - sorter: false, - render: (text, record) => { - const { selectedRows } = memberInitValue; - const updateMember = memberUpdateValue.filter( - (it) => record.id === it.id - )[0]; - const member = selectedRows.filter( - (it) => record.id === it.id - )[0]; - const defaultValue = member ? member.weight : text; - const value = updateMember ? updateMember.weight : defaultValue; - return ( - - this.handleChange(Number(e.target.value), record, 'weight') - } - value={value} - type="number" - /> - ); - }, - }, - ], - }, - ]; - } - - // handleChange = (value, record, title) => { - // const { memberUpdateValue, memberInitValue: { selectedRows } } = this.state; - // const update = memberUpdateValue.filter(it => record.id === it.id); - // if (update[0]) { - // memberUpdateValue.map((member) => { - // if (record.id === member.id) { - // member[title] = value; - // } - // return member; - // }); - // } else { - // // const member = selectedRows.filter(it => record.id === it.id)[0]; - // // const { weight, protocol_port } = member; - // // record.weight = weight; - // // record.protocol_port = protocol_port; - // record[title] = value; - // memberUpdateValue.push(record); - // } - // this.setState(memberUpdateValue); - // } - - onSubmit = (values) => { - const { default_pool_id } = this.item; - const { - Member: { selectedRowKeys: address_group = [], selectedRows } = {}, - } = values; - const { memberUpdateValue } = this.state; - const members = address_group.map((address) => { - let inputData = memberUpdateValue.filter((it) => it.id === address)[0]; - if (!inputData) { - inputData = selectedRows.filter((it) => it.id === address)[0]; - } - const { weight, protocol_port } = inputData; - const ip_address = { weight, protocol_port, address }; - return ip_address; - }); - return this.memberStore.batchUpdate({ default_pool_id, data: members }); - }; -} diff --git a/src/pages/network/containers/LoadBalancers/Listener/Actions/index.jsx b/src/pages/network/containers/LoadBalancers/Listener/Actions/index.jsx index 5765f375..6aee5b35 100644 --- a/src/pages/network/containers/LoadBalancers/Listener/Actions/index.jsx +++ b/src/pages/network/containers/LoadBalancers/Listener/Actions/index.jsx @@ -39,9 +39,6 @@ export const actionConfigs = { { action: EditHealthMonitor, }, - // { - // action: MemberManagement, - // }, ], }, batchActions: [ diff --git a/src/pages/network/containers/VirtualAdapter/actions/AssociateFIP.jsx b/src/pages/network/containers/VirtualAdapter/actions/AssociateFIP.jsx index d1d19bf7..429018d7 100644 --- a/src/pages/network/containers/VirtualAdapter/actions/AssociateFIP.jsx +++ b/src/pages/network/containers/VirtualAdapter/actions/AssociateFIP.jsx @@ -84,14 +84,15 @@ export default class AssociateFip extends ModalAction { handleFixedIPChange = (e) => handleFixedIPChange.call(this, e); - static canAssociated = (item) => - item.associatedDetail && item.associatedDetail.length < item.ipv4.length; - static allowed = (item, containerProps) => { const { isAdminPage = false } = containerProps; - return Promise.resolve( - !isAdminPage && isNotError(item) && this.canAssociated(item) - ); + return Promise.resolve(!isAdminPage && isNotError(item) && canAssociated()); + + function canAssociated() { + return ( + item.associatedDetail && item.associatedDetail.length < item.ipv4.length + ); + } }; onSubmit = (values) => { diff --git a/src/pages/network/containers/VirtualAdapter/actions/DisAssociateFIP.jsx b/src/pages/network/containers/VirtualAdapter/actions/DisAssociateFIP.jsx index a37714bd..b884280d 100644 --- a/src/pages/network/containers/VirtualAdapter/actions/DisAssociateFIP.jsx +++ b/src/pages/network/containers/VirtualAdapter/actions/DisAssociateFIP.jsx @@ -46,13 +46,15 @@ export default class DisAssociateFip extends ModalAction { static policy = 'update_floatingip'; - static canDisassociated = (item) => item.associatedDetail.length !== 0; - static allowed = (item, containerProps) => { const { isAdminPage = false } = containerProps; return Promise.resolve( - !isAdminPage && isNotError(item) && this.canDisassociated(item) + !isAdminPage && isNotError(item) && canDisassociated() ); + + function canDisassociated() { + return item.associatedDetail && item.associatedDetail.length; + } }; get formItems() { diff --git a/src/pages/network/containers/VirtualAdapter/index.jsx b/src/pages/network/containers/VirtualAdapter/index.jsx index 3408f7cb..7403cd6a 100644 --- a/src/pages/network/containers/VirtualAdapter/index.jsx +++ b/src/pages/network/containers/VirtualAdapter/index.jsx @@ -151,9 +151,8 @@ export class VirtualAdapter extends Base { {item.device_owner}
{`${item.device_id}`} {server_name && `(${server_name})`} @@ -201,23 +200,6 @@ export class VirtualAdapter extends Base { dataIndex: 'mac_address', isHideable: true, }, - { - title: t('Floating IP Address'), - dataIndex: 'associatedDetail', - isHideable: true, - render: (value) => - value && value.length ? value[0].floating_ip_address : '-', - sorter: false, - }, - // { - // title: t('Associated Resources'), - // dataIndex: 'device_owner', - // }, - // { - // title: t('Created At'), - // dataIndex: 'created_at', - // valueRender: 'toLocalTime', - // }, { title: t('Status'), dataIndex: 'status', diff --git a/src/stores/neutron/virtual-adapter.js b/src/stores/neutron/virtual-adapter.js index 1f5ff877..068c9dc2 100644 --- a/src/stores/neutron/virtual-adapter.js +++ b/src/stores/neutron/virtual-adapter.js @@ -13,7 +13,7 @@ // limitations under the License. import globalNetworkStore from 'stores/neutron/network'; -import { action, observable, toJS } from 'mobx'; +import { action, observable } from 'mobx'; import globalSecurityGroupStore from 'stores/neutron/security-group'; import globalFloatingIpsStore from 'stores/neutron/floatingIp'; import client from 'client'; @@ -103,39 +103,6 @@ export class VirtualAdapterStore extends Base { }); } - async listDidFetch(items, allProjects, filters) { - if (items.length === 0) { - return items; - } - const { device_id, device_owner, addressAsIdKey, network_id } = filters; - if (device_owner || device_id || network_id) { - // fetch fixed_ips details - const details = await Promise.all( - items.map((item) => { - if (addressAsIdKey) { - const { id, ipv4, ipv6 } = item; - item.address_id = id; - item.member_ip = ipv6.concat(ipv4); - item.member_show = item.member_ip.join('、'); - // item.id = item.member_ip[0]; - } - return Promise.all( - item.fixed_ips.map((fixed_ip) => - this.getItemFloatingIPs(fixed_ip.ip_address, item.id) - ) - ); - }) - ); - details.forEach((detail, index) => { - items[index].associatedDetail = []; - detail.forEach((ip) => { - items[index].associatedDetail.push(...toJS(ip)); - }); - }); - } - return items; - } - async getItemFloatingIPs(fixed_ip, portId) { return globalFloatingIpsStore.pureFetchList({ fixed_ip_address: fixed_ip,