From 6703f30d8a0af577cd8b3bfdab4d94f059f15b01 Mon Sep 17 00:00:00 2001 From: wangwenrui Date: Tue, 7 Apr 2020 22:30:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:asset=20=E6=9C=BA=E6=9F=9C=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=20&=20overview=20title=E8=B0=83=E6=95=B4=20&=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AEbasic=20timezone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/language/en.js | 5 +- .../components/common/rightBox/assetBox.vue | 304 ++++++++++++++++-- .../components/common/rightBox/modelBox.vue | 11 +- .../src/components/page/asset/asset.vue | 7 +- .../src/components/page/config/model.vue | 6 +- .../src/components/page/config/system.vue | 22 +- .../page/dashboard/overview/chartConfig.vue | 15 +- .../page/dashboard/overview/overview.scss | 4 +- .../page/dashboard/overview/overview.vue | 4 +- 9 files changed, 327 insertions(+), 51 deletions(-) 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--------------------------------------------–> {{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 @@