cmc-web/webs/cmp-web/src/views/resource/switch/page/alias.vue

295 lines
9.8 KiB
Vue
Raw Normal View History

2024-08-20 12:11:31 +00:00
<template>
<div>
<el-card class="wrapper" v-if="!detailFlag">
<table-search :configs="searchConfigs" :onSearch="handleSearch" ref="search">
<template v-slot:operate>
<el-button type="primary" @click="handleCreate()"></el-button>
</template>
</table-search>
<cb-table :data="tableData" :params="params" :get-list="getList" :total="total">
<el-table-column label="名称" show-overflow-tooltip prop="name"></el-table-column>
<el-table-column label="所属交换机" show-overflow-tooltip prop="fabricName"></el-table-column>
<el-table-column label="成员" show-overflow-tooltip>
<template slot-scope="scope">
<div v-for="(item, index) in scope.row.members" :key="index">
<span style="display: inline-block; width: 80px;">类型{{item.type |switchType}}</span> 地址{{item.name}}
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="160px">
<template slot-scope="scope">
<el-button type="text" @click="handleDelete(scope.row.id)"><i class="el-icon-delete"></i> 删除</el-button>
</template>
</el-table-column>
</cb-table>
<el-dialog title="新增" :visible.sync="addFlag" v-if="addFlag" width="60%">
<el-row>
<cb-form ref="addData" :model="addData" :cb-status-icon="true" label-width="110px">
<el-col :span="24">
<cb-form-item label="交换机:" prop="fabricId" :rules="[required]">
<el-select clearable v-model="addData.fabricId" @change="changeFabric">
<el-option v-for="item in fabricData" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</cb-form-item>
</el-col>
<el-col :span="24">
<cb-form-item label="名称:" prop="name" :rules="[required]">
<el-input v-model="addData.name"></el-input>
</cb-form-item>
</el-col>
<el-col :span="24">
<cb-form-item label="添加成员:">
<el-card>
<cb-form ref="member" :model="member" :cb-status-icon="true" label-width="80px">
<el-col :span="10">
<cb-form-item label="类型:" prop="type">
<el-select v-model="member.type" @change="changeType">
<el-option label="wwn" value="wwn"></el-option>
<el-option label="端口号" value="switch_port"></el-option>
</el-select>
</cb-form-item>
</el-col>
<el-col :span="10">
<cb-form-item v-if="member.type == 'wwn'" :key="1" label="地址:" prop="name" :rules="[wwpn]">
<el-input v-model="member.name"></el-input>
</cb-form-item>
<cb-form-item v-else :key="2" label="地址:" prop="name">
<el-tooltip class="item" effect="dark" content="格式为domain id, port id" placement="top-start">
<el-input v-model="member.name" label="格式为domain id, port id"></el-input>
</el-tooltip>
</cb-form-item>
</el-col>
<el-col :span="3">
<el-button class="m-l" type="ghost" @click="addPort"></el-button>
</el-col>
</cb-form>
</el-card>
</cb-form-item>
</el-col>
<el-col :span="24">
<cb-form-item>
<cb-table :data="membersData">
<el-table-column label="类型" prop="type">
<template slot-scope="scope">
{{scope.row.type}}
</template>
</el-table-column>
<el-table-column label="地址" prop="name">
<template slot-scope="scope">
{{scope.row.name}}
</template>
</el-table-column>
<el-table-column label="操作" width="160px">
<template slot-scope="scope">
<el-button type="text" @click="deletePort(scope.$index)"></el-button>
</template>
</el-table-column>
<div slot="pagination"></div>
</cb-table>
</cb-form-item>
</el-col>
</cb-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button type="ghost" @click.native="addFlag = false"> </el-button>
<el-button type="primary" @click.native="addSubmit"> </el-button>
</span>
</el-dialog>
</el-card>
</div>
</template>
<script>
import validate from '@/validate'
import { getZone, createZone, removeZone, getSwitches } from '../services/switch'
export default {
props: {
platformObject: {
type: Object,
default: function () {
return {
vendorId: -1,
operate: -1
}
}
}
},
data () {
return {
required: validate.required,
wwpn: validate.wwpn,
searchConfigs: [
{ type: 'Input', label: '名称', value: 'name' },
{ type: 'Const', value: 'vendorId', initValue: this.platformObject.vendorId },
{ type: 'Const', value: 'type', initValue: 'alias' }
],
params: {
page: 1,
rows: 10
},
listQuery: {
name: ''
},
tableData: [],
total: 0,
detailFlag: false,
addFlag: false,
addData: {},
fabricData: [],
portNum: 0,
member: {},
membersData: []
}
},
methods: {
changeFabric (value) {
this.fabricData.forEach(item => {
if (item.id == value) {
this.portNum = item.portNum - 1
}
})
},
changeType (value) {
if (!this.addData.fabricId) {
this.member.type = ''
return this.$message.error('请先选择交换机!')
}
this.member.name = ''
},
getList () {
getZone(this.params).then(data => {
if (data.success) {
this.tableData = data.data.rows
this.total = data.data.total
}
})
},
handleSearch (params) {
this.params.page = 1
this.params.params = params || this.params.params
if (this.platformObject.vendorId > -1) {
this.getList();
}
},
handleCreate () {
this.member = {
type: '',
name: ''
}
this.portNum = 0
this.addData = {
vendorId: this.platformObject.vendorId,
fabricId: ''
}
this.membersData = [];
this.getFabricData();
this.addFlag = true;
},
addPort () {
this.$refs.member.validate((valid) => {
if (valid) {
if (this.member.type == '' || this.member.name == '') {
return this.$message.error('成员信息输入不完整!')
}
const membersData = []
for (let i = 0; i < this.membersData.length; i++) {
const obj = this.membersData[i]
membersData.push({
type: obj.type,
name: obj.name.toString().toLowerCase()
})
}
const member = JSON.stringify({
type: this.member.type,
name: this.member.name.toString().toLowerCase()
})
if (JSON.stringify(membersData).indexOf(member) == -1) {
this.membersData.push(this.member)
this.member = {
type: '',
name: ''
};
} else {
return this.$message.info('同一个成员不能添加多次wwn不区分大小写')
}
}
})
},
deletePort (index) {
this.membersData.splice(index, 1)
},
addSubmit () {
this.$refs.addData.validate((valid) => {
if (valid) {
if (!this.membersData.length) {
return this.$message.error('新增别名,至少需要一个成员')
}
const addData = [{
vendorId: this.addData.vendorId,
fabricId: this.addData.fabricId,
type: 'alias',
name: this.addData.name,
members: this.membersData
}]
createZone(addData).then(data => {
if (data.success) {
this.$notify({
message: data.message,
type: 'success'
});
this.addFlag = false;
this.getList();
}
})
}
})
},
getFabricData () {
getSwitches({
simple: true,
params: JSON.stringify([{ param: { vendorId: this.platformObject.vendorId }, sign: 'EQ' }])
}).then(data => {
if (data.success) {
this.fabricData = data.data.rows
}
})
},
handleDelete (id) {
this.$confirm('您确认要删除吗?', '提示', {
confirmButtonClass: 'el-button--danger',
type: 'warning'
}).then(() => {
removeZone(id).then(data => {
if (data.success) {
this.$message.success({
message: data.message,
type: 'success'
});
this.getList();
}
})
}).catch(() => {
})
}
},
created () {
},
mounted () {
},
watch: {
platformObject: {
handler (newVal, oldVal) {
this.searchConfigs = [
{ type: 'Input', label: '名称', value: 'name' },
{ type: 'Const', value: 'vendorId', initValue: newVal.vendorId },
{ type: 'Const', value: 'type', initValue: 'alias' }
]
},
deep: true
}
}
}
</script>