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

203 lines
6.5 KiB
Vue
Raw Normal View History

<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>