This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nezha-fronted/nezha-fronted/src/components/common/popBox/cabinetConfig.vue
wangwenrui cda2dd7daf feat:asset 列表机房弹框 及其他调整
1.机房配置抽取组件
2.idc配置组件增加详情查看
3.idc配置组件增加联动更新
2020-01-10 18:16:25 +08:00

203 lines
6.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-popover :placement="placement" width="400" @hide="hidePop" ref="popBox" v-model="popBox.show">
<div class="">
<div class="pop-window-assetType-content">
<div class="pop-top-btns">
<button type="button" @click="saveOrToEdit" class="nz-btn nz-btn-size-small nz-btn-style-normal">
<span class="top-tool-btn-txt" v-if="popBox.isEdit">{{$t('overall.save')}}</span>
<span class="top-tool-btn-txt" v-else>{{$t('overall.edit')}}</span>
</button>
<button type="button" @click="esc" class="nz-btn nz-btn-size-small nz-btn-style-light nz-btn-style-square">
<span class="top-tool-btn-txt"><i class="el-icon-close"></i></span>
</button>
</div>
<!--标题-->
<div class="pop-title">{{title}}</div>
<!--表单内容-->
<el-form class="pop-item-wider" :model="cabinet" ref="cabinetForm" :rules="rules">
<el-form-item :label="this.$t('asset.createAssetTab.AddCabinetTab.name')" prop="name">
<el-input size='mini' v-model="cabinet.name" v-if="popBox.isEdit"/>
<div class="right-box-form-content-txt" v-if="!popBox.isEdit">{{cabinet.name}}</div>
</el-form-item>
<el-form-item :label="this.$t('asset.createAssetTab.AddCabinetTab.uSize')" prop="uSize">
<div :class="{'right-box-form-content-txt':!popBox.isEdit}" >{{cabinet.uSize}}</div>
<el-slider v-model.number="cabinet.uSize" :max="47" v-if="popBox.isEdit"></el-slider>
</el-form-item>
<el-form-item :label="this.$t('asset.createAssetTab.AddCabinetTab.remark')">
<el-input size='mini' v-model="cabinet.remark" type="textarea" :rows="2" v-if="popBox.isEdit"/>
<div class="right-box-form-content-txt" v-if="!popBox.isEdit">{{cabinet.remark}}</div>
</el-form-item>
<el-form-item :label="this.$t('asset.createAssetTab.AddCabinetTab.DC')" prop="idcId">
<el-select size='mini' v-model="cabinet.idcId" clearable style="width: 100%;" placeholder="" v-if="popBox.isEdit">
<el-option v-for="item in idcDatas" :key="item.key" :label="item.name" :value="item.id">
<span>{{ item.name }}</span>
</el-option>
</el-select>
<div class="right-box-form-content-txt" v-if="!popBox.isEdit">{{idc?idc.name:''}}</div>
</el-form-item>
</el-form>
</div>
</div>
<span :class="buttonClass" @click.prevent.stop="" slot="reference">
<slot name="optionZone">
<i class="el-icon-plus"></i>
</slot>
</span>
</el-popover>
</template>
<script>
export default {
name: "cabinetConfig",
props:{
postCabinet:{type:Object},
placement:{type:String},
buttonClass:{type:String},
isEdit:{type:Boolean,default:true}
},
created() {
this.init();
},
data(){
return {
title:"",
rules:{
name: [
{required: true, message: this.$t('validate.required'), trigger: 'blur'}
],
uSize: [
{required: true, type: 'number', min: 1, max: 47, message: this.$t('validate.required'), trigger: 'blur'}
],
idcId: [
{required: true, message: this.$t('validate.required'), trigger: 'blur'}
]
},
cabinet:{},
popBox:{isEdit:false,show:false},
idcDatas:[],
idc:null
}
},
methods:{
init:function(){
this.getIdcDatas();
},
resetData:function(){
let temp=this;
temp.cabinet={
name:'',
uSize:0,
idcId:null,
remark:''
}
},
saveOrToEdit(){
if (!this.popBox.isEdit) {
this.toEdit(this.cabinet);
} else {
this.save();
}
},
save:function(){
let temp=this;
temp.$refs.cabinetForm.validate((valid => {
if(valid){
if (temp.cabinet.id) {
this.$put('cabinet', temp.cabinet).then(res => {
const h = temp.$createElement;
if (res.code === 200) {
temp.$message({duration: 2000, type: 'success', message: temp.$t("tip.saveSuccess")});
temp.$emit("after",temp.cabinet.idcId);
temp.esc();
} else {
temp.$message.error(res.msg);
}
})
} else {
temp.$post('cabinet', temp.cabinet).then(res => {
const h = temp.$createElement;
if (res.code === 200) {
temp.$message({duration: 2000, type: 'success', message: temp.$t("tip.saveSuccess")});
temp.$emit("after",temp.cabinet.idcId);
temp.esc();
} else {
temp.$message.error(res.msg);
}
})
}
}else{
return false;
}
}))
},
show:function(isShow,isEdit){
this.popBox.show=isShow;
this.popBox.isEdit=isEdit;
},
toEdit:function(u){
this.cabinet = Object.assign({}, u);
this.popBox.isEdit = true;
this.title = this.$t('asset.createAssetTab.editCabinetTab.title') + " ID" + this.cabinet.id;
this.popBox.show = true;
},
getIdcDatas:function(){
let temp=this;
temp.$get('idc').then(response => {
if (response.code === 200) {
temp.idcDatas = response.data.list;
for (let i in temp.idcDatas){
let item=temp.idcDatas[i];
if(item.id==temp.cabinet.idcId){
temp.idc=item;
break;
}
}
}
})
},
openBox:function(){
this.popBox.show=true;
},
esc:function(){
this.popBox.show=false;
},
hidePop:function(){//隐藏事件触发方法
if(this.postCabinet&&this.postCabinet.id){
this.cabinet=this.postCabinet;
}else{
this.resetData();
}
this.clearValidate();
},
clearValidate:function(){
this.$refs.cabinetForm.clearValidate();
}
},
watch:{
postCabinet: {
immediate: true,
deep: true,
handler(n, o) {
if (n && n.id) {
this.title =this.popBox.isEdit? this.$t('asset.createAssetTab.editCabinetTab.title') + " ID" + n.id : this.$t('asset.createAssetTab.cabinet') + " ID" + n.id;
this.cabinet=n;
} else {
this.title = this.$t('asset.createAssetTab.AddCabinetTab.title');
this.resetData();
}
}
},
isEdit:{
immediate: true,
handler(n, o) {
this.popBox.isEdit=n;
}
}
}
}
</script>
<style scoped>
</style>