diff options
8 files changed, 832 insertions, 383 deletions
diff --git a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.css b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.css index 35fdbef5..54b92d03 100644 --- a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.css +++ b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.css @@ -25,80 +25,125 @@ hr { margin-bottom: 10px; } .model { - background-color: #fff; - height: 90%; + background-color: #F7F8FC; + /*height: 100%;*/ overflow-y: auto; } +.creation-model{ + position: relative; +} +.top-title{ /*2019.01.22 add*/ + width: 100%; + padding: 20px; + position: relative; + display: inline-block; +} .model .back { position: absolute; top: 10px; right: 20px; + display: inline-block; + width: 35px; + height: 35px; + background:linear-gradient(90deg,rgba(99,194,246,1) 0%,rgba(62,155,255,1) 100%) !important; + border-radius:4px; + color: #fff; + border: none!important; + border-color:rgba(0,0,0,0)!important; +} +.top-title h3.title { + height: 35px; + width: 80%; + /*font: 700 20px/20px "Arial";*/ + font-size:16px; + font-family:ArialMT; + color:#3C4F8C; + line-height:35px; + display: inline-block; + /*top:10px;*/ + +} +.model .submit{ + position: absolute; + width:84px; + height: 35px; + top: 10px; + right: 85px; + color: #fff; + font-size: 18px; + background:linear-gradient(90deg,rgba(99,194,246,1) 0%,rgba(62,155,255,1) 100%) !important; + border-radius:4px; + border: none!important; + border-color:rgba(0,0,0,0)!important; +} +.model .submit:hover,.model .back:hover,.model .site>button:hover,.model .sitegroup>button:hover{ + background:linear-gradient(90deg, rgb(103, 207, 246) 0%, rgb(69, 175, 255) 100%) !important; + border: none; } .model .creation { - position: relative; - width: 60%; - height: 100%; + width: 100%; + /*height: 60vh;*/ overflow-y: auto; border-radius: 5px; padding: 15px; } -.model .creation h3.title { - height: 20px; - font: 700 20px/20px "Arial"; - color: #666; -} .model .creation h3 { height: 20px; font: 700 16px/20px "Arial"; margin: 5px 0px; color: #000; } -.model .creation .submit { - position: absolute; - top: 10px; - right: 20px; -} /* SOTN VPN */ .model .creation .sotnvpn ul li { display: inline-block; - height: 35px; - width: 49.5%; + height: 40px; + width: 24.5%; + margin-bottom: 40px; } .model .creation .sotnvpn ul li span { display: inline-block; width: 110px; font: 700 14px "Arial"; - color: #3fa8eb; + color: #3C4F8C; vertical-align: middle; } .model .creation .sotnvpn ul li input { - width: 165px; + width: 234px; + height: 40px; + border-radius:4px; + outline: none; } /* Site List */ /* addsite model */ .model .sitemodel { position: absolute; - z-index: 10; - left: 10px; + z-index: 1001; + left: 100px; top: 60px; background-color: #fff; - box-shadow: 0px 0px 20px #000; - width: 60%; + /*box-shadow: 0px 0px 20px #000;*/ + width:650px; + /*width:1300px;px*/ max-height: 90%; - border-radius: 5px; + border-radius:2px; overflow-y: auto; } -.model .sitemodel h3 { - height: 30px; - font: 700 16px/30px "Arial"; - border-bottom: 1px solid #aaa; - padding-left: 10px; -} -.model .sitemodel h4 { - height: 30px; - font: 700 16px/30px "Arial"; - padding-left: 10px; - background-color: #ddd; +.model .sitemodel h3,.sitegroupmodal>h3{ + width: 92%; + height: 40px; + line-height: 35px; + font-size: 18px; + font-weight: 500; + margin: 10px auto; + /*padding-left: 10px;*/ + color: #06A7E2; + /*color: #ffffff;*/ + /*background:linear-gradient(90deg,rgba(7,169,225,1) 0%,rgba(48,217,196,1) 100%);*/ + border-bottom: 2px solid; + border-image: -webkit-linear-gradient(#07A9E1,#30D9C4) 100 100; + border-image: -moz-linear-gradient(#07A9E1,#30D9C4) 100 100; + border-image: linear-gradient(#07A9E1,#30D9C4) 100 100; + border-radius:2px; } .model .sitemodel .inputs { padding: 10px 20px 0; @@ -106,21 +151,46 @@ hr { .model .sitemodel .inputs ul li { display: inline-block; height: 35px; + line-height: 35px; width: 49.5%; } .model .sitemodel .inputs ul li span { display: inline-block; - width: 110px; - font: 700 14px "Arial"; - color: #3fa8eb; + line-height: 35px; + font-size: 14px; + font-weight: 500; + color: #3C4F8C; + margin-left: 10px; vertical-align: middle; + float: left; } -.model .sitemodel .inputs input { - width: 165px; +.model .sitemodel .inputs input,.model .sitemodel .inputs nz-select { + width: 156px; + float: right; + margin-right: 30px; } .model .sitemodel .action { - float: left; - padding: 10px; + text-align: center; + margin-top: 30px; + margin-bottom: 20px; +} + +.model .sitemodel .action button{ + width: 126px; + height:40px; + background:#EEEEEE; + border-radius:2px; + border: none!important; + color: #9DA7C5; + font-size: 16px; + margin: 0 15px; +} +.model .sitemodel .action button:nth-child(2),.sitemodel h3 button{ + background:linear-gradient(310deg,rgba(30,158,255,1) 0%,rgba(99,200,255,1) 100%); + color: #fff; +} +.model .sitemodel .action button:nth-child(2):hover,.sitemodel h3 button:hover{ + background:linear-gradient(90deg, rgb(103, 207, 246) 0%, rgb(69, 175, 255) 100%) !important; } .model nz-table tbody td i.anticon:hover { @@ -129,6 +199,24 @@ hr { } /* site table */ +.model .site>button,.model .sitegroup>button,.sitemodel h3>button{ + width:36px; + height:36px; + color: #fff; + background:linear-gradient(270deg,rgba(63,156,255,1) 0%,rgba(98,193,246,1) 100%); + border-radius:4px; + border: none!important; +} +.sitemodel h3>button{ + float: right; + width: 30px; + height: 30px; + margin-right: 15px; +} +.model nz-table tbody th{ + color:rgba(60,79,140,0.5); + font-size: 16px; +} .model .site nz-table tbody td i.anticon:hover { color: #3fa8eb; cursor: pointer; @@ -136,49 +224,75 @@ hr { /* WAN Port */ /* Site Group List */ -.model .sitegroup .sitegroupmodal { + +.model .sitegroupmodal { position: absolute; - z-index: 10; - left: 200px; - top: 300px; - background-color: #fff; - box-shadow: 0px 0px 20px #000; - width: 330px; - border-radius: 5px; + z-index: 1001; + width: 360px!important; + height: 376px!important; + left:35%; + top:40%; + margin-top: -188px; + margin-left: -180px; + background: #ffffff; } -.model .sitegroup .sitegroupmodal h3 { - height: 30px; - font: 700 16px/30px "Arial"; - border-bottom: 1px solid #aaa; - padding-left: 10px; +.sitegroupmodal .list-div{ + width: 100%; + height: 32px !important; + line-height: 32px; + margin-bottom: 10px; } -.model .sitegroup .sitegroupmodal .inputs { - padding: 10px 20px 0; +.sitegroupmodal .list-div > span { + line-height: 32px !important; + color: #3C4F8C; + margin-left: 30px; } -.model .sitegroup .sitegroupmodal span { - display: inline-block; - width: 100px; - margin-bottom: 10px; +.sitegroupmodal .list-div input, .sitegroupmodal .list-div nz-select { + margin-right: 50px; } -.model .sitegroup .sitegroupmodal .inputs input { - width: 165px; +.sitegroupmodal .action{ + text-align: center; + margin-top: 30px; } -.model .sitegroup .sitegroupmodal .action { - float: right; - padding: 10px; +.sitegroupmodal .action button{ + width: 126px; + height:40px; + background:#EEEEEE; + border-radius:2px; + border: none!important; + color: #9DA7C5; + font-size: 16px; + margin: 0 8px; +} +.sitegroupmodal .action button:nth-child(2){ + background:linear-gradient(310deg,rgba(30,158,255,1) 0%,rgba(99,200,255,1) 100%); + color: #fff; +} +.sitegroupmodal .action button:nth-child(2):hover{ + background:linear-gradient(90deg, rgb(103, 207, 246) 0%, rgb(69, 175, 255) 100%) !important; +} +.mask{ + width: 100%; + height: 100%; + position: absolute; + z-index: 1000; + background: rgba(0, 0, 0, 0.65); + top:0; } -/* 图 */ +/* chart */ .model .chart { - width: 40%; + width: 100%; padding: 10px; - height: 100%; + /*height: 30vh;*/ border-left: 10px solid #f3f3f3; + margin-bottom: 30px; + box-shadow: 0px 10px 15px 2px rgba(222, 222, 222, 0.5); } .model .chart #createChart { width: 100%; - height: 80%; + /*height: 50vh;*/ margin-top: 20px; position: relative; } @@ -193,3 +307,7 @@ hr { overflow: hidden; text-overflow: ellipsis; } +.model .creation .sotnvpn,.model .creation .site,.model .creation .sitegroup{ + background: #fff; + padding: 30px; +} diff --git a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html index 15486238..1b54b7bc 100644 --- a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html +++ b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.html @@ -13,301 +13,361 @@ See the License for the specific language governing permissions and limitations under the License. --> -<h3 class="title"> Services List </h3> -<hr> -<div class="model"> - <!-- 创建数据 --> - <button class="back" nz-button (click)="goback()"><span><i class="anticon anticon-rollback"></i></span></button> - <div class="creation fl"> - <h3 class="title">{{createParams.commonParams.templateType}} Instance Creation</h3> - <div class="sotnvpn clearfix"> - <h3>SOTN VPN Info</h3> - <ul> - <li><span>Name:</span> <input nz-input [(ngModel)]="sotnInfo.name"></li> - <li><span>Description:</span> <input nz-input [(ngModel)]="sotnInfo.description"></li> - <li><span>Start Time:</span> - <nz-date-picker [(ngModel)]="sotnInfo.startTime" - (ngModelChange)="startTimeChange($event)" - nzPlaceHolder="start time" - nzShowTime> - </nz-date-picker> - </li> - <li><span>End Time:</span> - <nz-date-picker [(ngModel)]="sotnInfo.endTime" - (ngModelChange)="endTimeChange($event)" - nzPlaceHolder="end time" - nzShowTime> - </nz-date-picker> - </li> - <li><span>COS:</span> - <nz-select style="width: 165px;" [(ngModel)]="sotnInfo.COS" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="premium" nzLabel="premium"></nz-option> - <nz-option nzValue="standard" nzLabel="standard"></nz-option> - </nz-select> - </li> - <li><span>Reroute Enabled:</span> <nz-switch [(ngModel)]="sotnInfo.reroute"></nz-switch> </li> - <li><span>Service Level Specification:</span> <input nz-input [(ngModel)]="sotnInfo.SLS"></li> - <li><span>Dual Link:</span> - <nz-select style="width: 165px;" [(ngModel)]="sotnInfo.dualLink" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="no_protection" nzLabel="no_protection"></nz-option> - <nz-option nzValue="static_1+1" nzLabel="static_1+1"></nz-option> - <nz-option nzValue="permanent_1+1" nzLabel="permanent_1+1"></nz-option> - </nz-select> - </li> - <li><span>CIR:</span> <input nz-input [(ngModel)]="sotnInfo.CIR"></li> - <li><span>EIR:</span> <input nz-input [(ngModel)]="sotnInfo.EIR"></li> - <li><span>CBS:</span> <input nz-input [(ngModel)]="sotnInfo.CBS"></li> - <li><span>EBS:</span> <input nz-input [(ngModel)]="sotnInfo.EBS"></li> - <li><span>Color Aware:</span> <nz-switch [(ngModel)]="sotnInfo.colorAware"></nz-switch> </li> - <li><span>Coupling Flag:</span> <nz-switch [(ngModel)]="sotnInfo.couplingFlag"></nz-switch> </li> - </ul> - </div> - - <div class="site"> - <h3>Site List</h3> - <button nz-button (click)="addSite()">Add Site</button> - <nz-table #siteTable [nzData]="siteTableData" - [nzShowPagination]="false" - nzSize="small"> - <thead> - <tr> - <th nzWidth="10%"> NO. </th> - <th nzWidth="15%"> Name </th> - <th nzWidth="15%"> Description </th> - <th nzWidth="15%"> Post Code </th> - <th nzWidth="15%"> Address </th> - <th nzWidth="15%"> VLAN </th> - <th nzWidth="15%"> Action </th> - </tr> - </thead> - <tbody> - <!-- <ng-template ngFor let-data [ngForOf]="siteTable.data" let-i="index"> --> - <tr *ngFor="let item of siteTable.data; let i = index; "> - <td>{{i+1}}</td> - <td>{{item.baseData.name}}</td> - <td>{{item.baseData.description}}</td> - <td>{{item.baseData.postcode}}</td> - <td>{{item.baseData.address}}</td> - <td>{{item.baseData.vlan}}</td> - <td> - <span class="action" (click)="editSite(i+1)"><i class="anticon anticon-edit"></i></span> - <span class="action" (click)="deleteSite(i+1)"><i class="anticon anticon-delete"></i></span> - </td> - </tr> - <!-- </ng-template> --> - </tbody> - </nz-table> - </div> - - <div class="sitegroup" *ngIf="createParams.commonParams.templateType == 'CCVPN'"> - <h3>Site_Group List</h3> - <button nz-button (click)="addSiteGroup()">Add Group</button> - <div class="sitegroupmodal" *ngIf="siteGroupModelShow"> - <h3>Site_Group</h3> - <div class="inputs"> - <span>Group Name:</span> <input nz-input [(ngModel)]="siteGroupModelData.name"> <br> - <span>Topology:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteGroupModelData.topology" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="full-mesh" nzLabel="full-mesh"></nz-option> - <nz-option nzValue="hub-spoke" nzLabel="hub-spoke"></nz-option> - </nz-select> - <nz-table #groupModalTable [nzData]="siteGroupModalTableData" [nzLoading]="loading" [nzShowPagination]="false" nzSize="small"> - <thead> - <tr> - <th nzShowCheckbox [(nzChecked)]="allChecked" [nzIndeterminate]="indeterminate" (nzCheckedChange)="groupModal_checkAll($event)"></th> - <th> Site Name</th> - <th> Role</th> - </tr> - </thead> - <tbody> - <tr *ngFor="let item of groupModalTable.data; let i = index;"> - <td nzShowCheckbox [nzDisabled]="item.disabled" [(nzChecked)]="item.checked" (nzCheckedChange)="refreshStatus($event)"></td> - <td>{{ item.siteName }}</td> - <td> - <nz-select style="width: 80px;" [(ngModel)]="item.role" - nzAllowClear nzPlaceHolder="Choose" - [nzDisabled]="siteGroupModelData.topology != 'hub-spoke'"> - <nz-option nzValue="hub" nzLabel="hub"></nz-option> - <nz-option nzValue="spoke" nzLabel="spoke"></nz-option> - </nz-select> - </td> - </tr> - </tbody> - </nz-table> - </div> - <div class="action"> - <button nz-button nzType="primary" (click)="addsitegroup_OK()">OK</button> - <button nz-button nzType="primary" (click)="addsitegroup_cancel()">Cancel</button> - </div> - </div> - <nz-table #siteGroupTable [nzData]="siteGroupTableData" - [nzLoading]="loading" - [nzShowPagination]="false" - nzSize="small"> - <thead> - <tr> - <th nzWidth="10%"> NO. </th> - <th nzWidth="20%"> Group Name </th> - <th nzWidth="20%"> Topology </th> - <th nzWidth="20%"> Sites </th> - <th nzWidth="15%"> Role </th> - <th nzWidth="15%"> Action </th> - </tr> - </thead> - <tbody> - <!-- <ng-template ngFor let-data [ngForOf]="siteGroupTable.data" let-i="index"> --> - <tr *ngFor="let item of siteGroupTable.data; let i = index; "> - <td>{{i+1}}</td> - <td>{{item.name}}</td> - <td>{{item.topology}}</td> - <td>{{item.sites}}</td> - <td>{{item.role}}</td> - <td> - <span class="action" (click)="editGroupSite(i+1)"><i class="anticon anticon-edit"></i></span> - <span class="action" (click)="deleteGroupSite(i+1)"><i class="anticon anticon-delete"></i></span> - </td> - </tr> - <!-- </ng-template> --> - </tbody> - </nz-table> - </div> +<!--<h3 class="title"> Services List </h3>--> +<!--<hr>--> +<div class="model creation-model"> + <!-- 创建数据 --> + <div class="top-title"> + <h3 class="title fl">{{createParams.commonParams.templateType}} Instance Creation</h3> + <div class="fl" style="width: 20%"> + <button class="submit" nz-button (click)="submit()"><span>Create</span></button> + <button class="back" nz-button (click)="goback()"> + <span> + <i nz-icon type="rollback" theme="outline" > + <svg viewBox="64 64 896 896" fill="currentColor" width="1em" height="1em" data-icon="rollback" aria-hidden="true" style="transform: scaleX(1.7) scaleY(-1.1) translate(-2px)"><path d="M793 242H366v-74c0-6.7-7.7-10.4-12.9-6.3l-142 112a8 8 0 0 0 0 12.6l142 112c5.2 4.1 12.9.4 12.9-6.3v-74h415v470H175c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h618c35.3 0 64-28.7 64-64V306c0-35.3-28.7-64-64-64z"></path></svg> + </i> + </span> + </button> + </div> + </div> + <!-- 图 --> + <div class="chart"> + Create Service + {{createParams.commonParams.templateType}} + <div id="createChart"> + <svg width="100%" height="100%"> + <line *ngFor="let item of lines" x1=50% y1="45%" [attr.x2]="item.x2" y2="72%" + style="stroke:#3fa8eb;stroke-width:2"/> + <image xlink:href="./assets/images/cloud-site.png" + x="25%" y="30%" width="50%"/> + <!-- <text dx="42%" dy="45%" style="font:700 18px 'Arial';fill:#666">{{createParams.commonParams.templateType}}</text> --> + <text dx="42%" dy="45%" style="font:700 18px 'Arial';fill:#666"></text> + <g *ngFor="let item of siteImage" + (mouseover)="showSite($event,item)" + (mousemove)="moveSite($event,item)" + (mouseout)="hideSite($event)"> + <image + xlink:href="./assets/images/site.png" + [attr.x]="item.x" y="65%" width="80px"/> + <text [attr.dx]="item.x + 25" dy="72%" style="font:700 16px 'Arial';fill:#666">{{ item.name }} + </text> + </g> - <button class="submit" nz-button [nzType]="'primary'" (click)="submit()"><span>Create</span></button> - </div> - <!-- site模态框 --> - <div class="sitemodel" *ngIf="siteModelShow"> - <h3>Site_Enterprise Service</h3> - <div class="inputs"> - <ul> - <li><span>Name:</span> <input nz-input [(ngModel)]="siteBaseData.name"></li> - <li><span>Description:</span> <input nz-input [(ngModel)]="siteBaseData.description"></li> - <li *ngIf="createParams.commonParams.templateType == 'CCVPN'"><span>Type:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteBaseData.type" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="single-gateway" nzLabel="single-gateway"></nz-option> - <nz-option nzValue="dual-gateway" nzLabel="dual-gateway"></nz-option> - </nz-select> - </li> - <li *ngIf="createParams.commonParams.templateType == 'CCVPN'"><span>Role:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteBaseData.role" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="dsvpn-hub" nzLabel="dsvpn-hub"></nz-option> - <nz-option nzValue="sd-wan-edge" nzLabel="sd-wan-edge"></nz-option> - </nz-select> - </li> - <li><span>PostCode:</span> <input nz-input [(ngModel)]="siteBaseData.postcode"></li> - <li><span>VLAN:</span> <input nz-input [(ngModel)]="siteBaseData.vlan"></li> - <li><span>Address:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteBaseData.address" nzAllowClear nzPlaceHolder="Choose"> - <nz-option *ngFor="let item of siteModeAddress" nzValue="{{item}}" nzLabel="{{item}}"></nz-option> - </nz-select> - </li> - </ul> + </svg> + <!-- <p class="siteNameP" [ngStyle]="siteNameStyle">{{ siteName }}</p> --> + </div> </div> - <div *ngIf="createParams.commonParams.templateType == 'CCVPN'"> - <h4>CPE</h4> - <div class="inputs"> - <ul> - <li><span>Name:</span> <input nz-input [(ngModel)]="siteCpeData.device_name"></li> - <li><span>Version:</span> <input nz-input [(ngModel)]="siteCpeData.device_version"></li> - <li><span>ESN:</span> <input nz-input [(ngModel)]="siteCpeData.device_esn"></li> - <li><span>Class:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteCpeData.device_class" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="VNF" nzLabel="VNF"></nz-option> - <nz-option nzValue="PNF" nzLabel="PNF"></nz-option> - </nz-select> - </li> - <li><span>System IP:</span> <input nz-input [(ngModel)]="siteCpeData.device_systemIp"></li> - <li><span>Vendor:</span> <input nz-input [(ngModel)]="siteCpeData.device_vendor"></li> - <li><span>Type:</span> <input nz-input [(ngModel)]="siteCpeData.device_type"></li> - </ul> - </div> - <h4>WAN Port</h4> - <div> - <nz-table #siteModalTable [nzData]="siteWanData" - [nzLoading]="loading" - [nzShowPagination]="false" - nzSize="small"> - <thead> - <tr> - <th nzWidth="10%"> NO. </th> - <th nzWidth="15%"> Name </th> - <th nzWidth="15%"> Description </th> - <th nzWidth="15%"> PortType </th> - <th nzWidth="18%"> PortNumber </th> - <th nzWidth="17%"> IPAddress </th> - <th nzWidth="10%"> Action </th> - </tr> - </thead> - <tbody> - <!-- <ng-template ngFor let-data [ngForOf]="siteModalTable.data" let-i="index"> --> - <tr *ngFor="let item of siteModalTable.data; let i = index; "> - <td>{{i+1}}</td> - <td>{{item.sitewanport_name}}</td> - <td>{{item.sitewanport_description}}</td> - <td>{{item.sitewanport_portType}}</td> - <td>{{item.sitewanport_portNumber}}</td> - <td>{{item.sitewanport_ipAddress}}</td> - <td> - <span class="action" (click)="editWanPort(i+1)"><i class="anticon anticon-edit"></i></span> - </td> - </tr> - <!-- </ng-template> --> - </tbody> - </nz-table> - </div> - <nz-modal [(nzVisible)]="wanPortModal" nzWidth="400" nzTitle="WAN Port Edit" (nzOnCancel)="wanPortModal_Cancel()" (nzOnOk)="wanPortModal_Ok()"> - <ul class="wanPortModalList"> - <li><span>Name:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_name"></li> - <!-- <li><span>Device Name:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_deviceName"></li> --> - <li><span>Description:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_description"></li> - <li><span>Port Type:</span> - <nz-select style="width: 165px;" [(ngModel)]="siteWanParams.sitewanport_portType" nzAllowClear nzPlaceHolder="Choose"> - <nz-option nzValue="GE" nzLabel="GE"></nz-option> - <nz-option nzValue="FE" nzLabel="FE"></nz-option> - <nz-option nzValue="XGE" nzLabel="XGE"></nz-option> - <nz-option nzValue="LTE" nzLabel="LTE"></nz-option> - <nz-option nzValue="xDSL(ATM)" nzLabel="xDSL(ATM)"></nz-option> - <nz-option nzValue="xSDL(PTM)" nzLabel="xSDL(PTM)"></nz-option> - </nz-select> - </li> - <li><span>Port Number:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_portNumber"></li> - <li><span>Ip Address:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_ipAddress"></li> - <li><span>Provider IP Address:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_providerIpAddress"></li> - <li><span>Transport Nerwork:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_transportNetworkName"></li> - <li><span>Input Bandwidth:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_inputBandwidth"></li> - <li><span>Output Bandwidth:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_outputBandwidth"></li> - </ul> - </nz-modal> + <div class="creation"> + <nz-tabset [nzTabPosition]="'top'" [nzShowPagination]=false [nzTabBarGutter]="'2'" [nzTabBarStyle]=tabBarStyle> + <nz-tab nzTitle="SOTN VPN Info"> + <div class="sotnvpn clearfix"> + <!--<h3>SOTN VPN Info</h3>--> + <ul> + <li><span>Name:</span> <input nz-input [(ngModel)]="sotnInfo.name"></li> + <li><span>Description:</span> <input nz-input [(ngModel)]="sotnInfo.description"></li> + <li><span>Start Time:</span> + <nz-date-picker [(ngModel)]="sotnInfo.startTime" + (ngModelChange)="startTimeChange($event)" + nzPlaceHolder="start time" + nzShowTime> + </nz-date-picker> + </li> + <li><span>End Time:</span> + <nz-date-picker [(ngModel)]="sotnInfo.endTime" + (ngModelChange)="endTimeChange($event)" + nzPlaceHolder="end time" + nzShowTime> + </nz-date-picker> + </li> + <li><span>COS:</span> + <nz-select style="width: 234px;height: 40px" [(ngModel)]="sotnInfo.COS" nzAllowClear nzPlaceHolder="Choose"> + <nz-option nzValue="premium" nzLabel="premium"></nz-option> + <nz-option nzValue="standard" nzLabel="standard"></nz-option> + </nz-select> + </li> + <li><span style="width: 130px">Reroute Enabled:</span> + <nz-switch [(ngModel)]="sotnInfo.reroute"></nz-switch> + </li> + <li><span>Service Level Specification:</span> <input nz-input [(ngModel)]="sotnInfo.SLS"></li> + <li><span>Dual Link:</span> + <nz-select style="width: 234px;height: 40px" [(ngModel)]="sotnInfo.dualLink" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option nzValue="no_protection" nzLabel="no_protection"></nz-option> + <nz-option nzValue="static_1+1" nzLabel="static_1+1"></nz-option> + <nz-option nzValue="permanent_1+1" nzLabel="permanent_1+1"></nz-option> + </nz-select> + </li> + <li><span>CIR:</span> <input nz-input [(ngModel)]="sotnInfo.CIR"></li> + <li><span>EIR:</span> <input nz-input [(ngModel)]="sotnInfo.EIR"></li> + <li><span>CBS:</span> <input nz-input [(ngModel)]="sotnInfo.CBS"></li> + <li><span>EBS:</span> <input nz-input [(ngModel)]="sotnInfo.EBS"></li> + <li><span>Color Aware:</span> + <nz-switch [(ngModel)]="sotnInfo.colorAware"></nz-switch> + </li> + <li><span style="width: 130px">Coupling Flag:</span> + <nz-switch [(ngModel)]="sotnInfo.couplingFlag"></nz-switch> + </li> + </ul> + </div> + </nz-tab> + <nz-tab nzTitle="Site List"> + <div class="site"> + <!--<h3>Site List</h3>--> + <button nz-button (click)="addSite()"><i class="anticon anticon-plus-circle-o" style="transform: scale(1.2)"></i></button> + <nz-table #siteTable [nzData]="siteTableData" + [nzShowPagination]="false" + nzSize="small"> + <thead> + <tr> + <th nzWidth="10%"> NO.</th> + <th nzWidth="15%"> Name</th> + <th nzWidth="15%"> Description</th> + <th nzWidth="15%"> Post Code</th> + <th nzWidth="15%"> Address</th> + <th nzWidth="15%"> VLAN</th> + <th nzWidth="15%"> Action</th> + </tr> + </thead> + <tbody> + <!-- <ng-template ngFor let-data [ngForOf]="siteTable.data" let-i="index"> --> + <tr *ngFor="let item of siteTable.data; let i = index; "> + <td>{{i+1}}</td> + <td>{{item.baseData.name}}</td> + <td>{{item.baseData.description}}</td> + <td>{{item.baseData.postcode}}</td> + <td>{{item.baseData.address}}</td> + <td>{{item.baseData.vlan}}</td> + <td> + <span class="action" (click)="editSite(i+1)"><i class="anticon anticon-edit"></i></span> + <span class="action" (click)="deleteSite(i+1)"><i class="anticon anticon-delete"></i></span> + </td> + </tr> + <!-- </ng-template> --> + </tbody> + </nz-table> + </div> + </nz-tab> + <nz-tab nzTitle="Site_Group List" *ngIf="createParams.commonParams.templateType == 'CCVPN'"> + <div class="sitegroup" > + <!--<h3>Site_Group List</h3>--> + <button nz-button (click)="addSiteGroup()"><i class="anticon anticon-plus-circle-o" style="transform: scale(1.2)"></i></button> + <nz-table #siteGroupTable [nzData]="siteGroupTableData" + [nzLoading]="loading" + [nzShowPagination]="false" + nzSize="small"> + <thead> + <tr> + <th nzWidth="10%"> NO.</th> + <th nzWidth="20%"> Group Name</th> + <th nzWidth="20%"> Topology</th> + <th nzWidth="20%"> Sites</th> + <th nzWidth="15%"> Role</th> + <th nzWidth="15%"> Action</th> + </tr> + </thead> + <tbody> + <!-- <ng-template ngFor let-data [ngForOf]="siteGroupTable.data" let-i="index"> --> + <tr *ngFor="let item of siteGroupTable.data; let i = index; "> + <td>{{i+1}}</td> + <td>{{item.name}}</td> + <td>{{item.topology}}</td> + <td>{{item.sites}}</td> + <td>{{item.role}}</td> + <td> + <span class="action" (click)="editGroupSite(i+1)"><i class="anticon anticon-edit"></i></span> + + <span class="action" (click)="deleteGroupSite(i+1)"><i + class="anticon anticon-delete"></i></span> + </td> + </tr> + <!-- </ng-template> --> + </tbody> + </nz-table> + </div> + </nz-tab> + </nz-tabset> </div> + <!-- site模态框 --> + <div class="sitemodel" *ngIf="siteModelShow"> + <h3>Site_Enterprise Service</h3> + <div class="inputs"> + <ul> + <li><span>Name:</span> <input nz-input [(ngModel)]="siteBaseData.name"></li> + <li><span>Description:</span> <input nz-input [(ngModel)]="siteBaseData.description"></li> + <li *ngIf="createParams.commonParams.templateType == 'CCVPN'"><span>Type:</span> + <nz-select [(ngModel)]="siteBaseData.type" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option nzValue="single-gateway" nzLabel="single-gateway"></nz-option> + <nz-option nzValue="dual-gateway" nzLabel="dual-gateway"></nz-option> + </nz-select> + </li> + <li *ngIf="createParams.commonParams.templateType == 'CCVPN'"><span>Role:</span> + <nz-select [(ngModel)]="siteBaseData.role" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option nzValue="dsvpn-hub" nzLabel="dsvpn-hub"></nz-option> + <nz-option nzValue="sd-wan-edge" nzLabel="sd-wan-edge"></nz-option> + </nz-select> + </li> + <li><span>PostCode:</span> <input nz-input [(ngModel)]="siteBaseData.postcode"></li> + <li><span>VLAN:</span> <input nz-input [(ngModel)]="siteBaseData.vlan"></li> + <li><span>Address:</span> + <nz-select [(ngModel)]="siteBaseData.address" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option *ngFor="let item of siteModeAddress" nzValue="{{item}}" + nzLabel="{{item}}"></nz-option> + </nz-select> + <!--<input nz-input [(ngModel)]="siteBaseData.address">--> + </li> + </ul> + </div> + <div *ngIf="createParams.commonParams.templateType == 'CCVPN'"> + <h3>CPE</h3> + <div class="inputs"> + <ul> + <li><span>Name:</span> <input nz-input [(ngModel)]="siteCpeData.device_name"></li> + <li><span>Version:</span> <input nz-input [(ngModel)]="siteCpeData.device_version"></li> + <li><span>ESN:</span> <input nz-input [(ngModel)]="siteCpeData.device_esn"></li> + <li><span>Class:</span> + <nz-select [(ngModel)]="siteCpeData.device_class" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option nzValue="VNF" nzLabel="VNF"></nz-option> + <nz-option nzValue="PNF" nzLabel="PNF"></nz-option> + </nz-select> + </li> + <li><span>System IP:</span> <input nz-input [(ngModel)]="siteCpeData.device_systemIp"></li> + <li><span>Vendor:</span> <input nz-input [(ngModel)]="siteCpeData.device_vendor"></li> + <li><span>Type:</span> <input nz-input [(ngModel)]="siteCpeData.device_type"></li> + </ul> + </div> + <h3>WAN Port + <button nz-button ><i class="anticon anticon-plus-circle-o" style="transform: scale(1.2)"></i></button> + </h3> + <div> + <nz-table #siteModalTable [nzData]="siteWanData" + [nzLoading]="loading" + [nzShowPagination]="false" + nzSize="small"> + <thead> + <tr> + <th > NO.</th> + <th> Name</th> + <th > Description</th> + <th > PortType</th> + <th > PortNumber</th> + <th > IPAddress</th> + <!--<th > Provider IP Address</th>--> + <!--<th > Transport Nerwork</th>--> + <!--<th > Input Bandwidth</th>--> + <!--<th > Output Bandwidth</th>--> + <th > Action</th> + </tr> + </thead> + <tbody> + <!-- <ng-template ngFor let-data [ngForOf]="siteModalTable.data" let-i="index"> --> + <tr *ngFor="let item of siteModalTable.data; let i = index; "> + <td>{{i+1}}</td> + <td>{{item.sitewanport_name}}</td> + <td>{{item.sitewanport_description}}</td> + <td>{{item.sitewanport_portType}}</td> + <td>{{item.sitewanport_portNumber}}</td> + <td>{{item.sitewanport_ipAddress}}</td> + <td> + <span class="action" (click)="editWanPort(i+1)"><i class="anticon anticon-edit"></i></span> + </td> + </tr> + <!-- </ng-template> --> + </tbody> + </nz-table> + </div> + <nz-modal [(nzVisible)]="wanPortModal" nzWidth="400" nzTitle="WAN Port Edit" + (nzOnCancel)="wanPortModal_Cancel()" (nzOnOk)="wanPortModal_Ok()"> + <ul class="wanPortModalList"> + <li><span>Name:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_name"></li> + <!-- <li><span>Device Name:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_deviceName"></li> --> + <li><span>Description:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_description"> + </li> + <li><span>Port Type:</span> + <nz-select style="width: 165px;" [(ngModel)]="siteWanParams.sitewanport_portType" nzAllowClear + nzPlaceHolder="Choose"> + <nz-option nzValue="GE" nzLabel="GE"></nz-option> + <nz-option nzValue="FE" nzLabel="FE"></nz-option> + <nz-option nzValue="XGE" nzLabel="XGE"></nz-option> + <nz-option nzValue="LTE" nzLabel="LTE"></nz-option> + <nz-option nzValue="xDSL(ATM)" nzLabel="xDSL(ATM)"></nz-option> + <nz-option nzValue="xSDL(PTM)" nzLabel="xSDL(PTM)"></nz-option> + </nz-select> + </li> + <li><span>Port Number:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_portNumber"> + </li> + <li><span>Ip Address:</span> <input nz-input [(ngModel)]="siteWanParams.sitewanport_ipAddress"></li> + <li><span>Provider IP Address:</span> <input nz-input + [(ngModel)]="siteWanParams.sitewanport_providerIpAddress"> + </li> + <li><span>Transport Nerwork:</span> <input nz-input + [(ngModel)]="siteWanParams.sitewanport_transportNetworkName"> + </li> + <li><span>Input Bandwidth:</span> <input nz-input + [(ngModel)]="siteWanParams.sitewanport_inputBandwidth"> + </li> + <li><span>Output Bandwidth:</span> <input nz-input + [(ngModel)]="siteWanParams.sitewanport_outputBandwidth"> + </li> + </ul> + </nz-modal> + </div> - <div class="action"> - <button nz-button nzType="primary" (click)="addsite_OK()">OK</button> - <button nz-button nzType="primary" (click)="addsite_cancel()">Cancel</button> - </div> - </div> - <!-- 图 --> - <div class="chart fr"> - Create Service - {{createParams.commonParams.templateType}} - <div id="createChart"> - <svg width="100%" height="100%"> - <line *ngFor="let item of lines" x1=50% y1="45%" [attr.x2]="item.x2" y2="72%" style="stroke:#3fa8eb;stroke-width:2"/> - <image xlink:href="./assets/images/cloud-site.png" - x="25%" y="30%" width="50%"/> - <!-- <text dx="42%" dy="45%" style="font:700 18px 'Arial';fill:#666">{{createParams.commonParams.templateType}}</text> --> - <text dx="42%" dy="45%" style="font:700 18px 'Arial';fill:#666"></text> - <g *ngFor="let item of siteImage" - (mouseover)="showSite($event,item)" - (mousemove)="moveSite($event,item)" - (mouseout)="hideSite($event)"> - <image - xlink:href="./assets/images/site.png" - [attr.x]="item.x" y="65%" width="80px"/> - <text [attr.dx]="item.x + 25" dy="72%" style="font:700 16px 'Arial';fill:#666">{{ item.name }}</text> - </g> - - </svg> - <!-- <p class="siteNameP" [ngStyle]="siteNameStyle">{{ siteName }}</p> --> - </div> - </div> - + <div class="action"> + <button nz-button nzType="primary" (click)="addsite_cancel()">Cancel</button> + <button nz-button nzType="primary" (click)="addsite_OK()">Add</button> + </div> + </div> + <!--sitegroupmodal--> + <div class="sitegroupmodal" *ngIf="siteGroupModelShow" > + <h3>Site_Group</h3> + <div class="inputs"> + <div class="list-div"> + <span class="fl">Group Name:</span> + <input nz-input [(ngModel)]="siteGroupModelData.name" style="width: 170px" class="fr"> + </div> + <div class="list-div"> + <span class="fl">Topology:</span> + <nz-select style="width: 170px;" [(ngModel)]="siteGroupModelData.topology" nzAllowClear + nzPlaceHolder="Choose" class="fr"> + <nz-option nzValue="full-mesh" nzLabel="full-mesh"></nz-option> + <nz-option nzValue="hub-spoke" nzLabel="hub-spoke"></nz-option> + </nz-select> + </div> + <nz-table #groupModalTable [nzData]="siteGroupModalTableData" [nzLoading]="loading" + [nzShowPagination]="false" nzSize="small"> + <thead> + <tr> + <th nzShowCheckbox [(nzChecked)]="allChecked" [nzIndeterminate]="indeterminate" + (nzCheckedChange)="groupModal_checkAll($event)"></th> + <th> Site Name</th> + <th> Role</th> + </tr> + </thead> + <tbody> + <tr *ngFor="let item of groupModalTable.data; let i = index;"> + <td nzShowCheckbox [nzDisabled]="item.disabled" [(nzChecked)]="item.checked" + (nzCheckedChange)="refreshStatus($event)"></td> + <td>{{ item.siteName }}</td> + <td> + <nz-select style="width: 80px;" [(ngModel)]="item.role" + nzAllowClear nzPlaceHolder="Choose" + [nzDisabled]="siteGroupModelData.topology != 'hub-spoke'"> + <nz-option nzValue="hub" nzLabel="hub"></nz-option> + <nz-option nzValue="spoke" nzLabel="spoke"></nz-option> + </nz-select> + </td> + </tr> + </tbody> + </nz-table> + </div> + <div class="action"> + <button nz-button nzType="primary" (click)="addsitegroup_cancel()">Cancel</button> + <button nz-button nzType="primary" (click)="addsitegroup_OK()">Add</button> + </div> + </div> + <div class="mask" *ngIf="siteModelShow || siteGroupModelShow"></div> </div> diff --git a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.ts b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.ts index 4dd3f5c2..ace7ac42 100644 --- a/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.ts +++ b/usecaseui-portal/src/app/ccvpn-creation/ccvpn-creation.component.ts @@ -19,11 +19,22 @@ export class CcvpnCreationComponent implements OnInit { @Input() namesTranslate; //输入项参数名字转换 @Output() closeCreate = new EventEmitter(); + //tabBarStyle + tabBarStyle = { + "height": "58px", + "width": "528px", + "box-shadow": "none", + "margin": "0", + "border-radius": "4px 4px 0px 0px" + }; templateParameters = {}; getTemParameters(){ //获取模板参数 let chosedtemplates = Object.values(this.createParams.templates); // console.log(this.createParams); console.log(chosedtemplates); //模板id数组 + if(this.createParams.commonParams.templateType == 'SOTN'){ + this.tabBarStyle["width"]="351px"; + } let types = ["sotnvpn","site","sdwanvpn"]; chosedtemplates.forEach((item,index)=>{ this.myhttp.getTemplateParameters(types[index],item) diff --git a/usecaseui-portal/src/app/services/services-list/services-list.component.html b/usecaseui-portal/src/app/services/services-list/services-list.component.html index 28162251..ff977190 100644 --- a/usecaseui-portal/src/app/services/services-list/services-list.component.html +++ b/usecaseui-portal/src/app/services/services-list/services-list.component.html @@ -38,7 +38,8 @@ </nz-dropdown> <button class="create" nz-button [nzType]="'primary'" (click)="createModal()"><i - class="anticon anticon-plus-circle-o"></i><span> Create </span></button> + class="anticon anticon-plus" style="transform: scale(1.5);line-height: 15px;margin-right: 5px;"></i><span> Create </span> + </button> <nz-modal nzWidth="428" [(nzVisible)]="isVisible" nzTitle="CREATE" (nzOnCancel)="handleCancel()" (nzOnOk)="handleOk()"> <div class="select-list"> @@ -96,7 +97,7 @@ </div> </li> </ul> - <div class="list"> + <div class="list" [ngClass]="{'listdisplay':listDisplay == true}"> <nz-table *ngIf="1" #nzTable [nzData]="tableData" nzShowSizeChanger @@ -136,7 +137,8 @@ <span [ngClass]="{'active':data.statusClass=='2001','closed':data.statusClass=='Closed','onboarding':data.statusClass=='Onboarding', 'updating':data.statusClass=='Updating','deleting':data.statusClass=='1002','creating':data.statusClass=='1001', 'scaling':data.statusClass=='1003','healing':data.statusClass=='1004'}">{{data.tips}}</span> - <nz-progress *ngIf="data.status == 'In Progress'" [nzPercent]="data.rate"></nz-progress> + <nz-progress *ngIf="data.status == 'In Progress'" [nzPercent]="data.rate" [nzShowInfo]="false" + nzStatus="active"></nz-progress> </td> <td> <i [ngClass]="{'cannotclick':data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}" @@ -161,7 +163,7 @@ <nz-progress *ngIf=" item.status == 'Healing' " [nzPercent]="item.rate"></nz-progress> </td> <td> - <i [ngClass]="{'cannotclick':data.serviceDomain!='E2E Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}" + <i [ngClass]="{'cannotclick':data.serviceDomain!='Network Service' || data.status == 'In Progress'||(data.status=='Failed' && data.operationType=='1001')||(data.status=='Failed' && data.operationType=='1002')}" class="anticon anticon-reload" (click)="healService(item)"></i> </td> </tr> @@ -169,7 +171,8 @@ </tbody> </nz-table> - <nz-modal [nzVisible]="scaleModelVisible" nzTitle="Scale" (nzOnCancel)="scaleCancel()" (nzOnOk)="scaleOk()"> + <nz-modal nzWidth="428" [nzVisible]="scaleModelVisible" nzTitle="Scale" (nzOnCancel)="scaleCancel()" + (nzOnOk)="scaleOk()"> <h3><i class="anticon anticon-question-circle" style="color:yellow;"></i>Are you sure heal this instance? </h3> Instance ID: <b style="color:green"> {{ thisService["service-instance-id"] || thisService["nsInstanceId"] || @@ -194,7 +197,7 @@ </nz-select> </div> </nz-modal> - <nz-modal [(nzVisible)]="deleteModelVisible" nzTitle="Delete" (nzOnCancel)="deleteCancel()" + <nz-modal nzWidth="428" [(nzVisible)]="deleteModelVisible" nzTitle="Delete" (nzOnCancel)="deleteCancel()" (nzOnOk)="deleteOk()"> <h3><i class="anticon anticon-question-circle" style="color:yellow;"></i>Are you sure delete this instance? </h3> @@ -211,7 +214,8 @@ [(ngModel)]="gracefulTerminationTimeout"> </div> </nz-modal> - <nz-modal [nzVisible]="healModelVisible" nzTitle="Heal" (nzOnCancel)="healCancel()" (nzOnOk)="healOk()"> + <nz-modal nzWidth="428" [nzVisible]="healModelVisible" nzTitle="Heal" (nzOnCancel)="healCancel()" + (nzOnOk)="healOk()"> <h3><i class="anticon anticon-question-circle" style="color:yellow;"></i>Are you sure heal this instance? </h3> Instance ID: <b style="color:green"> {{ thisService["service-instance-id"] || thisService["nsInstanceId"] || diff --git a/usecaseui-portal/src/app/services/services-list/services-list.component.less b/usecaseui-portal/src/app/services/services-list/services-list.component.less index 3ef3fde2..0e59ca2e 100644 --- a/usecaseui-portal/src/app/services/services-list/services-list.component.less +++ b/usecaseui-portal/src/app/services/services-list/services-list.component.less @@ -24,6 +24,9 @@ hr { background-color: #dce1e7; margin-bottom: 20px; } +.ant-tabs-bar{ + margin-bottom: 0!important; +} .action { margin-bottom: 15px; padding: 28px; @@ -85,16 +88,20 @@ hr { .create.ant-btn.ant-btn-primary{ border: none; } + .create:hover{ + background:linear-gradient(90deg, rgb(103, 207, 246) 0%, rgb(69, 175, 255) 100%) !important; + } } .top-num{ overflow: auto; + width: 100%; } .top-list{ position: relative; - width:360px; + width:22%; height:160px; - margin: 15px 15px 30px 15px; + margin: 15px 1.5%; float: left; background:linear-gradient(90deg,rgba(16,174,222,1) 0%,rgba(43,206,202,1) 100%); box-shadow:0px 10px 15px 2px rgba(222,222,222,1); @@ -102,17 +109,17 @@ hr { } .top-list .round{ position: absolute; - width:80px; - height:80px; - line-height: 80px; + width: 60px; + height: 60px; + line-height: 60px; text-align: center; top:50%; left: 10px; - margin-top: -40px; + margin-top: -30px; background:#E0EDFF; border:2px solid rgba(224,237,255,1); border-radius: 50%; - font-size:18px; + font-size:16px; font-family:ArialMT; color:#3C4F8C; } @@ -123,8 +130,11 @@ hr { line-height: 20px; top:50%; margin-top: -20px; - right: 20px; + right: 15px; color: #fff; + span:nth-child(1){ + font-size: 22px; + } } .list { background-color: #fff; @@ -207,9 +217,9 @@ hr { top: 0; width: 100%; height: 100vh; - background-color: #f3f3f3; + background-color: #F7F8FC; overflow-y: auto; - padding: 20px 32px; + //padding: 20px 32px; z-index: 3; } /*2019.01.14*/ @@ -236,3 +246,6 @@ hr { line-height: 32px; } +.listdisplay{ + display: none; +}
\ No newline at end of file diff --git a/usecaseui-portal/src/app/services/services-list/services-list.component.ts b/usecaseui-portal/src/app/services/services-list/services-list.component.ts index 7149ae2f..2dfbc942 100644 --- a/usecaseui-portal/src/app/services/services-list/services-list.component.ts +++ b/usecaseui-portal/src/app/services/services-list/services-list.component.ts @@ -140,6 +140,7 @@ export class ServicesListComponent implements OnInit { // createshow = false; createshow2 = false; + listDisplay = false; createData:Object={}; handleOk(): void { // console.log('Button ok clicked!'); @@ -153,6 +154,7 @@ export class ServicesListComponent implements OnInit { }else if(this.templateTypeSelected=="E2E Service"||this.templateTypeSelected=="Network Service"){ this.createData = {commonParams:{customer:this.customerSelected, serviceType:this.serviceTypeSelected, templateType:this.templateTypeSelected},template:this.template4}; this.createshow2 = true; + this.listDisplay = true; } } @@ -461,9 +463,11 @@ export class ServicesListComponent implements OnInit { closeCreate(obj){ if(!obj){ this.createshow = false; //close + this.listDisplay = false; return false; } this.createshow = false; + this.listDisplay = false; console.log(obj); let newData; //Newly created service data for the main table let stageNum = 0; //Different stages of progress, used to add up subsequent service progress; @@ -584,9 +588,11 @@ export class ServicesListComponent implements OnInit { e2eCloseCreate(obj){ if(!obj){ this.createshow2 = false; // + this.listDisplay = false; return false; } this.createshow2 = false; // + this.listDisplay = false; console.log(obj); let newData; // let createParams = "?customerId="+this.customerSelected.id + @@ -638,9 +644,11 @@ export class ServicesListComponent implements OnInit { nsCloseCreate(obj){ if(!obj){ this.createshow2 = false; // + this.listDisplay = false; return false; } this.createshow2 = false; // + this.listDisplay = false; console.log(obj); let newData; // // step1 diff --git a/usecaseui-portal/src/assets/images/noDatalist.png b/usecaseui-portal/src/assets/images/noDatalist.png Binary files differnew file mode 100644 index 00000000..a7f612ef --- /dev/null +++ b/usecaseui-portal/src/assets/images/noDatalist.png diff --git a/usecaseui-portal/src/styles.less b/usecaseui-portal/src/styles.less index 93e5251c..9574b8e0 100644 --- a/usecaseui-portal/src/styles.less +++ b/usecaseui-portal/src/styles.less @@ -46,6 +46,9 @@ nz-table { width: 40px; height: 40px; line-height: 40px; + background: rgba(255, 255, 255, 1); + border-radius: 2px; + margin: 0 5px; .ant-pagination-item-link, .ant-pagination-item-link:after { width: 40px; height: 40px; @@ -54,6 +57,7 @@ nz-table { } .ant-pagination-item.ant-pagination-item-active { background: linear-gradient(270deg, rgba(63, 156, 255, 1) 0%, rgba(98, 193, 246, 1) 100%); + border: none; border-radius: 2px; a { color: #fff; @@ -128,6 +132,9 @@ nz-pagination { width: 40px; height: 40px; line-height: 40px; + background: rgba(255, 255, 255, 1); + border-radius: 2px; + margin: 0 5px; .ant-pagination-item-link, .ant-pagination-item-link:after { width: 40px; height: 40px; @@ -137,6 +144,7 @@ nz-pagination { .ant-pagination-item.ant-pagination-item-active { background: linear-gradient(270deg, rgba(63, 156, 255, 1) 0%, rgba(98, 193, 246, 1) 100%); border-radius: 2px; + border: none; a { color: #fff; } @@ -248,6 +256,7 @@ nz-layout { //2019.01.21 add services-list.component.html +//creat框 nz-modal { .ant-modal { height: 628px; @@ -255,7 +264,22 @@ nz-modal { } .ant-modal-content{ height: 628px; - background:transparent; + background: transparent; + .ant-modal-close-x { + width: 25px; + height: 25px; + line-height: 25px; + margin-top: 12px; + margin-right: 12px; + } + .ant-modal-close-x::before { + color: #fff; + width: 25px; + height: 25px; + line-height: 25px; + border-radius: 50%; + border: 1px solid #fff; + } } .ant-modal-header,ant-modal-title,.ant-modal-footer{ background:transparent; @@ -299,7 +323,7 @@ nz-modal { button:nth-child(1){ background:#EEEEEE; border-radius:2px; - margin-left: 50px; + //margin-left: 50px; margin-right: 10px; span{ color: #9DA7C5; @@ -317,5 +341,216 @@ nz-modal { font-size: 14px !important; } } + button:nth-child(2):hover { + background: linear-gradient(90deg, rgb(103, 207, 246) 0%, rgb(69, 175, 255) 100%) !important; + } + } +} + +//2019.01.25 add ccvpn-creation.component.html +.model .creation nz-tabset { + box-shadow: 0px 10px 15px 2px rgba(222, 222, 222, 0.5); + .ant-tabs-bar { + .ant-tabs-nav-container { + height: 59px !important; + .ant-tabs-nav { + padding: 0 !important; + } + .ant-tabs-ink-bar { + display: none !important; + } + ; + .ant-tabs-tab { + width: 175px; + height: 59px !important; + line-height: 38px; + text-align: center; + border-radius: 4px 4px 0px 0px; + border: 1px solid rgba(238, 238, 238, 0.8); + border-bottom: 0; + color: #06A7E2; + font-size: 18px; + } + ; + .ant-tabs-nav .ant-tabs-tab-active { + color: #fff; + background: linear-gradient(90deg, rgba(99, 194, 246, 1) 0%, rgba(62, 155, 255, 1) 100%); + } + } + } + .ant-tabs-content { + background: #fff; + padding: 0; + .ant-tabs-tabpane { + height: 486px; + background: #fff; + border-radius: 0px 0px 4px 4px; + border: 1px solid rgba(63, 156, 255, 0.8); + } + } +} + +.model .creation .sotnvpn ul li nz-date-picker { + nz-picker { + .ant-calendar-picker { + .ant-calendar-picker-input.ant-input { + //width: 180px!important; + height: 40px !important; + } + } + } +} + +.model .creation .sotnvpn ul li nz-select { + .ant-select-selection.ant-select-selection--single { + height: 40px; + .ant-select-selection__rendered { + line-height: 35px; + } + } +} + +.model .creation .site nz-table, .model .creation .sitegroup nz-table { + .ant-table-wrapper { + margin: 20px 0; + .ant-table-small { + border: none; + .ant-table-tbody tr td { + padding: 10px 8px; + border-bottom: 5px solid #F7F8FC; + color: #3C4F8C; + } + .ant-table-tbody tr:hover > td { + background: #F7F7FA !important; + } + } + } + .ant-table-empty{ + .ant-spin-container{ + .ant-table-small{ + .ant-table-content{ + .ant-table-thead tr th{ + padding-bottom: 20px; + } + .ant-table-placeholder{ + background:url("./assets/images/noDatalist.png") no-repeat 50% 0; + span{ + display: inline-block; + padding-top: 60px; + } + } + } + } + } } -}
\ No newline at end of file +} +//2019.01.29 add +.sitemodel nz-table { + .ant-table-wrapper { + + } + .ant-table-small { + border: none; + //border-top: 1px solid #e8e8e8; + border-radius: 4px; + .ant-table-body{ + table{ + padding: 0 1px; + .ant-table-thead{ + tr{ + height: 45px; + color:rgba(60,79,140,0.5); + th{ + border: none; + color:rgba(60,79,140,0.5); + font-size: 16px; + font-weight: 500; + } + } + } + .ant-table-tbody > tr > td{ + border-top: 1px solid #e8e8e8; + border-bottom: 2px solid #F7F8FC; + padding-top: 10px; + padding-bottom: 10px; + } + } + } + .ant-table-placeholder{ + font-size: 16px; + background:url("./assets/images/noDatalist.png") no-repeat 50% 0; + span { + display: inline-block; + padding-top: 50px; + } + } + } + +} + +.sitegroupmodal nz-table { + .ant-table-wrapper { + margin: 0 auto; + margin-top: 30px; + width: 340px; + } + .ant-table-small { + border: none; + border-top: 1px solid #e8e8e8; + border-radius: 4px; + .ant-table-body{ + table{ + padding: 0 1px; + .ant-table-thead{ + tr{ + font-size: 16px; + height: 45px; + color: #3C4F8C; + } + } + } + } + .ant-table-placeholder{ + font-size: 16px; + background:url("./assets/images/noDatalist.png") no-repeat 50% 0; + span { + display: inline-block; + padding-top: 50px; + } + } + } + +} +//2019.02.01 gong add +.list#services-list nz-table{ + .ant-table-wrapper{ + .ant-spin-container{ + .ant-table-content{ + .ant-table-scroll{ + .ant-table-header{ + overflow:auto!important; + margin-bottom: 0!important; + } + } + } + } + } + .ant-table-empty{ + .ant-spin-container{ + .ant-table-content{ + .ant-table-thead tr th{ + padding-bottom: 20px; + border-bottom: 1px solid #e8e8e8; + } + .ant-table-placeholder{ + background:url("assets/images/noDatalist.png") no-repeat 50% 0; + border: none; + span{ + display: inline-block; + padding-top: 50px; + } + } + } + } + } +} |