| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <template>
- <detail
- :on-manager="onManager"
- :data="data"
- :base-info="baseInfo"
- :extra-info="extraInfo"
- resource="networks"
- status-module="network"
- auto-hidden-columns-key="network_hidden_columns" />
- </template>
- <script>
- import {
- getBrandTableColumn,
- getCopyWithContentTableColumn,
- getPublicScopeTableColumn,
- } from '@/utils/common/tableColumn'
- import {
- getUserTagColumn,
- getExtTagColumn,
- } from '@/utils/common/detailColumn'
- import WindowsMixin from '@/mixins/windows'
- export default {
- name: 'NetworkDetail',
- mixins: [WindowsMixin],
- props: {
- data: {
- type: Object,
- required: true,
- },
- onManager: {
- type: Function,
- required: true,
- },
- columns: Array,
- },
- data () {
- const extraInfo = [
- {
- title: this.$t('network.text_308'),
- items: ([
- getCopyWithContentTableColumn({
- field: 'vpc',
- title: 'VPC',
- hideField: true,
- slotCallback: row => {
- if (!row.vpc) return '-'
- return [
- <side-page-trigger permission='vpcs_get' name='VpcSidePage' id={row.vpc_id} vm={this}>{ row.vpc }</side-page-trigger>,
- ]
- },
- }),
- {
- field: 'wire',
- title: this.$t('network.text_571'),
- slots: {
- default: ({ row }) => {
- return [
- <side-page-trigger permission='wires_get' name='WireSidePage' id={row.wire_id} vm={this}>{ row.wire }</side-page-trigger>,
- ]
- },
- },
- },
- {
- field: 'server_type',
- title: this.$t('network.text_574'),
- formatter: ({ cellValue }) => {
- if (cellValue === 'baremetal') {
- return this.$t('network.text_598')
- }
- if (cellValue === 'container') {
- return this.$t('network.text_599')
- }
- if (cellValue === 'guest') {
- return this.$t('network.text_226')
- }
- if (cellValue === 'eip') {
- return this.$t('network.text_221')
- }
- if (cellValue === 'hostlocal') {
- return 'HostLocal'
- }
- return this.$t('network.text_507')
- },
- },
- {
- field: 'bgp_type',
- title: this.$t('network.text_743'),
- formatter: ({ cellValue }) => {
- return cellValue || '-'
- },
- },
- {
- field: 'guest_ip_start',
- title: this.$t('network.ipv4.range'),
- formatter: ({ cellValue, row }) => {
- if (!row.guest_ip_start || !row.guest_ip_end) {
- return '-'
- }
- return `${cellValue} - ${row.guest_ip_end}/${row.guest_ip_mask}`
- },
- },
- getCopyWithContentTableColumn({
- field: 'guest_gateway',
- title: this.$t('network.ipv4.gateway'),
- }),
- {
- field: 'guest_ip6_start',
- title: this.$t('network.ipv6.range'),
- formatter: ({ cellValue, row }) => {
- if (!row.guest_ip6_start || !row.guest_ip6_end) {
- return '-'
- }
- return `${cellValue} - ${row.guest_ip6_end}/${row.guest_ip6_mask}`
- },
- },
- getCopyWithContentTableColumn({
- field: 'guest_gateway6',
- title: this.$t('network.ipv6.gateway'),
- }),
- {
- field: 'guest_dhcp',
- title: 'dhcp_relay',
- slots: {
- default: ({ row }) => {
- const ips = (row.guest_dhcp || '').split(',')
- if (!ips.length) return '-'
- const ret = ips.map(item => {
- const obj = { ip: item }
- return <list-body-cell-wrap copy field='ip' row={obj} hideField={true} message={item}>
- {item}
- </list-body-cell-wrap>
- })
- return ret
- },
- },
- },
- {
- field: 'vlan_id',
- title: 'VLAN ID',
- formatter: ({ cellValue }) => {
- return cellValue || '-'
- },
- },
- {
- field: 'ports',
- title: this.$t('network.text_622'),
- slots: {
- default: ({ row }) => {
- return [
- <i18n path='network.text_735' tag="div">
- <template slot='ports'>{ row.ports }</template>
- <template slot='ports_used'>
- { row.ports_used + row.ports6_used <= 0 ? 0 : <a onClick={ () => this.$emit('tab-change', 'i-p-list') }>{row.ports_used + row.ports6_used}</a> }
- </template>
- <template slot='reserve_vnics'>{ row.reserve_vnics }</template>
- </i18n>,
- ]
- },
- },
- },
- {
- field: 'guest_dns',
- title: this.$t('network.dns_server'),
- slots: {
- default: ({ row }) => {
- const ips = (row.guest_dns || '').split(',')
- if (!ips.length) return '-'
- const ret = ips.map(item => {
- const obj = { ip: item }
- return <list-body-cell-wrap copy field='ip' row={obj} hideField={true} message={item}>
- {item}
- </list-body-cell-wrap>
- })
- return ret
- },
- },
- },
- {
- field: 'guest_domain',
- title: this.$t('network.text_586'),
- formatter: ({ cellValue }) => {
- return cellValue || '-'
- },
- },
- {
- field: 'guest_npt',
- title: this.$t('network.ntp_server'),
- slots: {
- default: ({ row }) => {
- const ips = (row.guest_ntp || '').split(',')
- if (!ips.length) return '-'
- const ret = ips.map(item => {
- const obj = { ip: item }
- return <list-body-cell-wrap copy field='ip' row={obj} hideField={true} message={item}>
- {item}
- </list-body-cell-wrap>
- })
- return ret
- },
- },
- },
- ]).filter(item => {
- if (['wire', 'server_type', 'bgp_type', 'guest_dhcp', 'vlan_id'].indexOf(item.field) >= 0) {
- if (this.data.cloud_env === 'onpremise' && (this.data.is_classic || this.data.is_default_vpc)) {
- return true
- }
- return false
- }
- return !this.$isScopedPolicyMenuHidden(`network_hidden_columns.${item.field}`)
- }),
- },
- ]
- if (this.data.cloud_env === 'onpremise') {
- if (this.data.metadata && this.data.metadata.static_routes) {
- extraInfo[0].items.push({
- title: this.$t('network.static_routes'),
- slots: {
- default: ({ row }) => {
- const routes = JSON.parse(row.metadata.static_routes)
- console.log(routes)
- const comps = []
- return comps
- },
- },
- })
- }
- }
- if (this.data.cloud_env === 'onpremise' && this.$store.getters.capability && this.$store.getters.capability.brands && this.$store.getters.capability.brands.includes('VMware')) {
- extraInfo.push({
- title: this.$t('network.vmware_extra_info'),
- items: [
- {
- field: 'additional_wires',
- title: () => {
- return [
- this.$t('network.additional_wires.title'),
- <help-tooltip class="ml-1" text={ this.$t('network.additional_wires.title.tooltip') } />,
- ]
- },
- slots: {
- default: ({ row }) => {
- let comps = []
- const link = <span class='wire-edit' onclick={this.setWireHandle}>
- <a-icon class='mr-1' type="edit" style="font-size: 12px;" />{ this.$t('common.setting') }</span>
- if (!row.additional_wires) {
- comps.push(link)
- return comps
- }
- comps = row.additional_wires.map((item, idx) => {
- return <side-page-trigger permission='wires_get' name='WireSidePage' id={item.wire_id} vm={this}>{ item.wire }{ idx < row.additional_wires.length - 1 ? ',' : '' }</side-page-trigger>
- })
- comps.push(link)
- return comps
- },
- },
- },
- ],
- })
- }
- return {
- baseInfo: [
- getUserTagColumn({
- onManager: this.onManager,
- resource: 'network',
- columns: () => this.columns,
- tipName: this.$t('dictionary.network'),
- editCheck: (row) => (row.provider || '').toLowerCase() !== 'bingocloud',
- }),
- getExtTagColumn({
- onManager: this.onManager,
- resource: 'network',
- columns: () => this.columns,
- tipName: this.$t('dictionary.network'),
- editCheck: (row) => (row.provider || '').toLowerCase() !== 'bingocloud',
- }),
- getPublicScopeTableColumn({ vm: this, resource: 'networks' }),
- getBrandTableColumn(),
- {
- field: 'schedtag',
- title: this.$t('network.text_630'),
- formatter: ({ cellValue, row }) => {
- if (row.schedtags && row.schedtags.length > 0) {
- const schedtags = row.schedtags.map(v => v.name)
- return schedtags.join(',')
- }
- return '-'
- },
- },
- ],
- extraInfo: extraInfo,
- }
- },
- methods: {
- setWireHandle () {
- this.createDialog('SetAdditionalWiresDialog', {
- currentData: this.data,
- success: () => {
- this.$emit('refresh')
- },
- })
- },
- },
- }
- </script>
- <style lang="scss" scoped>
- .wire-edit {
- padding: 0 6px 0 4px;
- margin-left: 10px;
- font-size: 12px;
- line-height: 20px;
- border: 1px dashed #97a4b6;
- cursor: pointer;
- }
- </style>
|