diff --git a/nezha-fronted/src/components/common/language/en.js b/nezha-fronted/src/components/common/language/en.js
index 583713ba7..2d65a393d 100644
--- a/nezha-fronted/src/components/common/language/en.js
+++ b/nezha-fronted/src/components/common/language/en.js
@@ -381,7 +381,7 @@ const en = {
clickToUpload:'Upload',//'上传'
clickToCover:'Cover',//'覆盖'
sshKeyWasConfig:'SSH-KEY configured',//'SSH-KEY已配置'
- exporter:'Exporter'
+ exporter:'Exporter',
},
editAssetTab:{
title:'New asset',//'新增资产'
@@ -583,7 +583,8 @@ const en = {
scrapeInterval:'Scrape Interval',
storageRetention:'Local Retention',
systemName:'System Name',
- curUrl:'Current site URL'
+ curUrl:'Current site URL',
+ timezone:'Timezone'
},
email:{
email:'Email',
diff --git a/nezha-fronted/src/components/common/rightBox/assetBox.vue b/nezha-fronted/src/components/common/rightBox/assetBox.vue
index 7e52d861b..dbccdb2ce 100644
--- a/nezha-fronted/src/components/common/rightBox/assetBox.vue
+++ b/nezha-fronted/src/components/common/rightBox/assetBox.vue
@@ -124,12 +124,12 @@
{{assetData.purchaseDate}}
-
{{$t('asset.createAssetTab.dc')}}
+ {{$t('asset.createAssetTab.location')}}
-
+
+<!– –>
{{ item.name }}
-
-
-
+<!– –>
+<!– –>
+<!–
–>
{{assetViewData.idcName}}
@@ -159,10 +159,10 @@
-
+ <!–----------------------------------------cabinet--------------------------------------------–>
-
+<!–
@@ -174,23 +174,38 @@
:value="item.id"
>
{{ item.name }}
-
-
-
-
-
-
-
-
-
+<!– –>
+<!– –>
+<!– –>
+<!– –>
+<!– –>
+<!– –>
+<!– –>
+<!–
–>
-
-
-
+<!– –>
+<!– –>
+<!–
–>
{{assetViewData.cabinetName}}
+ -->
+
+
+
+
+
+
+ {{this.checkedUStart?this.checkedUStart.value:''}}
+ {{this.checkedUEnd?this.checkedUEnd.value:''}}
{{cabinetSelectedData.uSize}}
@@ -241,6 +256,7 @@
'account-config-box': accountConfig,
},
data() {
+ let $temp=this;
return {
visible: '',
vendorModelData: '',
@@ -435,7 +451,15 @@
module:{},
accountValideResult:true,
changeProtocolSwitch:true,
- exporterDisableSwitch:false
+ exporterDisableSwitch:false,
+ locationCascaderProps:{
+ lazy:true,
+ lazyLoad:$temp.locationLazyMethod
+ },
+ cabinetUState:[],
+ checkedUStart:null,//记录前一次选中的节点
+ checkedUEnd:null,//记录前一次选中的节点
+ storedTriggerMethod:null,
}
},
/*computed: {
@@ -498,6 +522,216 @@
}
},
methods: {
+ closeDropdown:function(){
+ this.$refs.locationSelector.dropDownVisible = false;
+ this.$refs.locationSelector.toggleDropDownVisible=this.storedTriggerMethod;
+ },
+ locationSelectorExpand:function(flag){
+ this.storedTriggerMethod=this.$refs.locationSelector.toggleDropDownVisible;
+ if(flag){
+ this.$refs.locationSelector.toggleDropDownVisible=(value)=>{}
+ document.querySelector('#locationSelector').onclick=()=>{
+ this.$refs.locationSelector.dropDownVisible = !this.$refs.locationSelector.dropDownVisible;
+ }
+ }
+ },
+ cabinetUStateChange:function(e){
+ let defaultUsize=1;
+ if(this.assetData.modelId && this.assetData.modelId !=''){
+ let currentModel=this.allModelUlData.find((item,index)=>{
+ return item.id= this.assetData.modelId[1];
+ })
+ console.log(currentModel)
+ if(currentModel && currentModel.usize){
+ defaultUsize=currentModel.usize;
+ }
+ }
+
+ if(e.target.checked == true ){//选中
+ if(!this.checkedUStart){//第一次选中
+ let range=this.findEnoughCabinet(e.target.value,defaultUsize);
+ if(range[0] != -1&&range[1] != -1){
+ this.changeRange(range[0],range[1])
+ this.checkedUStart=this.cabinetUState[range[0]];
+ this.checkedUEnd=this.cabinetUState[range[1]];
+ }else{
+ e.target.checked = false;
+ console.warn("don't have enough cabinet");
+ }
+ }else{//第二次选中
+ if(this.checkedUStart.value - e.target.value >1 ){ //在选中的之前选择且不连续
+ this.changeRange(e.target.value -1,this.checkedUStart.value -2)
+ this.checkedUStart=this.cabinetUState[e.target.value -1]
+ }else if(e.target.value - this.checkedUEnd.value > 1){//在选中的之后选择且不连续
+ this.changeRange(this.checkedUEnd.value,e.target.value -1);
+ this.checkedUEnd=this.cabinetUState[e.target.value -1]
+ }else if(this.checkedUStart.value - e.target.value == 1){
+ this.checkedUStart=this.cabinetUState[e.target.value-1]
+ }else if(e.target.value - this.checkedUEnd.value == 1){
+ this.checkedUEnd=this.cabinetUState[e.target.value-1]
+ }
+ }
+ }else{//取消选中
+ if(e.target.value == this.checkedUStart.value){//消减头部
+ if(this.checkedUEnd.value - this.checkedUStart.value >= defaultUsize){
+ this.$set(this.cabinetUState[e.target.value -1],'checked',false);
+ this.checkedUStart = this.cabinetUState[e.target.value];
+ }else{
+ this.changeRange(this.checkedUStart.value-1,this.checkedUEnd.value-1,false);
+ this.checkedUStart=null;
+ this.checkedUEnd=null;
+ }
+ }else if(e.target.value == this.checkedUEnd.value){//消减尾部
+ if(this.checkedUEnd.value - this.checkedUStart.value >= defaultUsize) {
+ this.$set(this.cabinetUState[e.target.value - 1], 'checked', false);
+ this.checkedUEnd = this.cabinetUState[e.target.value - 2];
+ }else{
+ this.changeRange(this.checkedUStart.value-1,this.checkedUEnd.value-1,false);
+ this.checkedUStart=null;
+ this.checkedUEnd=null;
+ }
+ }else{//截断
+ if(this.checkedUEnd.value - this.checkedUStart.value < defaultUsize){//刚好是model 的usize
+ this.changeRange(this.checkedUStart.value-1,this.checkedUEnd.value-1,false);
+ this.checkedUStart=null;
+ this.checkedUEnd=null;
+ }else{
+ if(e.target.value - this.checkedUStart.value >= defaultUsize){ //低位的机柜足够
+ this.changeRange(this.checkedUStart.value-1,e.target.value -2 );
+ this.changeRange(e.target.value -1 ,this.checkedUEnd.value-1,false);
+ this.checkedUEnd=this.cabinetUState[e.target.value -2];
+ }else{ //低位的机柜不够
+ this.changeRange(this.checkedUStart.value-1,this.checkedUStart.value-1+defaultUsize-1);
+ e.target.checked=true;//解决无法改变当前点击的checkbox状态
+ this.changeRange(this.checkedUStart.value-1+defaultUsize, this.checkedUEnd.value -1,false);
+ this.checkedUEnd=this.cabinetUState[this.checkedUStart.value-1+defaultUsize-1];
+ }
+ }
+ }
+ }
+ this.modifyInput();
+ },
+ modifyInput:function(){
+ let input=document.querySelector('#locationSelector input');
+ let arr=input.value.split('/');
+ if(this.checkedUStart && this.checkedUEnd){
+ arr[arr.length-1]=this.checkedUStart.value +'-' +this.checkedUEnd.value;
+ }else{
+ arr[arr.length-1]='';
+ }
+ let value='';
+ arr.forEach((item,index)=>{
+ value +=item +'/';
+ })
+ input.value=value.substr(0,value.length-1);
+ },
+ changeRange:function(start, end,state=true){
+ if(start == -1 || end ==-1){
+ return;
+ }
+ let startIndex=start;
+ while(startIndex <= end){
+ this.$set(this.cabinetUState[startIndex],'checked',state);
+ startIndex++;
+ }
+ },
+ findEnoughCabinet:function(clickIndex,defaultSize){
+ if(defaultSize == 1){
+ return [clickIndex-1,clickIndex-1];
+ }
+ let left=this.cabinetUState.slice(0,clickIndex-1).reverse();
+ let right=this.cabinetUState.slice(clickIndex,this.cabinetUState.length);
+ let leftCount=0;
+ for(let i=0;i= defaultSize-1){
+ return [clickIndex-1,clickIndex-1+defaultSize-1]
+ }else if(leftCount + rightCount >= defaultSize -1){
+ return [clickIndex -1 -(defaultSize-1 - rightCount),clickIndex -1 + rightCount]
+ }else{
+ return [-1,-1]
+ }
+ },
+ locationLazyMethod:function(node,resolve){
+ if(node.level == 0){
+ this.$get('idc').then(response=>{
+ if(response.code == 200){
+ let idcInfos=response.data.list;
+ let nodes=idcInfos.map((item,index)=>{
+ item.label=item.name;
+ item.value=item.id;
+ item.leaf=false;
+ return item;
+ })
+ return resolve(nodes)
+ }else{
+ this.$message.error(response.msg);
+ return resolve([]);
+ }
+ })
+ }else if(node.level == 1){
+ this.$get('cabinet?idcId='+node.value).then(response=>{
+ if(response.code == 200){
+ let cabinetInfos=response.data.list;
+ let nodes=cabinetInfos.map((item,index)=>{
+ item.label=item.name;
+ item.value=item.id;
+ item.leaf=false;
+ return item;
+ })
+ return resolve(nodes)
+ }else{
+ this.$message.error(response.msg);
+ return resolve([]);
+ }
+ })
+ }else if(node.level == 2){
+ console.log(1111)
+ this.$get('cabinet/u?id='+node.value).then(response=>{
+ if(response.code == 200){
+ let nodes=[];
+ for(let i=1;i<=response.data.total;i++){
+ let node={
+ label:i,
+ value:i,
+ occupy:false,
+ checked:false,
+ leaf:true,
+ }
+ if(response.data.occupy.find((item=>{return i == item}))){
+ node.occupy=true;
+ }
+ nodes.push(node)
+ }
+ if(this.cabinetUState&& this.cabinetUState.length>0){
+ this.changeRange(0,this.cabinetUState.length-1,false)
+ }
+ this.cabinetUState=nodes;
+ this.checkedUStart=null;
+ this.checkedUEnd=null;
+ return resolve(nodes)
+ }else{
+ this.$message.error(response.msg);
+ return resolve([]);
+ }
+ })
+ }
+ },
clickos() {
this.sendStateData('close');
},
@@ -1308,3 +1542,31 @@
}
}
+
diff --git a/nezha-fronted/src/components/common/rightBox/modelBox.vue b/nezha-fronted/src/components/common/rightBox/modelBox.vue
index a36e9a2f8..086ddae50 100644
--- a/nezha-fronted/src/components/common/rightBox/modelBox.vue
+++ b/nezha-fronted/src/components/common/rightBox/modelBox.vue
@@ -69,6 +69,9 @@
+
+
+
@@ -105,7 +108,8 @@
assetStat: {total: '', inStock: '', outStock: ''},
remark: '',
vendorCode: '',
- typeCode: ''
+ typeCode: '',
+ uSize:1,
},
rightBox: {
show: false,
@@ -122,7 +126,10 @@
],
vendor: [
{required: true, message: this.$t('validate.required'), trigger: 'blur'}
- ]
+ ],
+ uSize: [
+ {type: 'number', min: 1, max: 47,message: this.$t('validate.uSize'),trigger: 'blur'}
+ ],
},
vendorData: [], //vendor下拉列表的数据
typeData: [], //type下拉列表的数据
diff --git a/nezha-fronted/src/components/page/asset/asset.vue b/nezha-fronted/src/components/page/asset/asset.vue
index 5119a65ab..04fccf525 100644
--- a/nezha-fronted/src/components/page/asset/asset.vue
+++ b/nezha-fronted/src/components/page/asset/asset.vue
@@ -1,9 +1,10 @@