8 } from "@angular/core";
9 import { SlicingTaskServices } from "@src/app/core/services/slicingTaskServices";
10 import { indexDebugNode } from "@angular/core/src/debug/debug_node";
13 selector: "app-slicing-task-model",
14 templateUrl: "./slicing-task-model.component.html",
15 styleUrls: ["./slicing-task-model.component.less"],
17 export class SlicingTaskModelComponent implements OnInit {
18 @Input() showDetail: boolean;
19 @Input() moduleTitle: string;
20 @Input() taskId: string;
21 @Output() cancel = new EventEmitter<object>();
22 @ViewChild("notification") notification1: any;
24 constructor(private http: SlicingTaskServices) {}
27 checkDetail: any[] = [{}];
29 businessRequirement: any[] = [];
31 NSTinfo: object[] = [{}];
33 selectedServiceId: string;
34 selectedServiceName: string;
35 slicingInstances: any;
36 //an/tn/cn instances NSSI ID下拉框的开关
37 enableNSSISelectionList: any[] = [];
39 slicingSubnet: any[] = [
77 isDisabled: any = [true, true, true];
79 isShowParams: boolean;
82 noPassPara: string[] = [];
84 isSpinning: boolean = false;
85 loading: boolean = false;
90 if (this.showDetail) {
91 this.isSpinning = true;
94 this.isDisabled.map((item) => {
100 // used for picking some key-value pairs from a object.
101 pick(obj, arr): Object {
102 return arr.reduce((iter, val) => {
104 iter[val] = obj[val];
110 getautidInfo(): void {
111 let getAuditInfoFailedCallback = () => {
112 this.isSpinning = false;
115 .getAuditInfo(this.taskId, getAuditInfoFailedCallback)
117 this.isSpinning = false;
119 business_demand_info,
128 service_snssai: business_demand_info.service_snssai,
132 if (business_demand_info.coverage_area_ta_list !== null) {
133 business_demand_info.area = business_demand_info.coverage_area_ta_list.map(
135 item = item.split(";").join(" - ");
140 business_demand_info.area = [];
144 "Haidian District;Beijing;Beijing",
145 "Xicheng District;Beijing;Beijing",
146 "Changping District;Beijing;Beijing",
148 item = item.split(";").join(" - ");
151 this.businessRequirement = [
152 { ...business_demand_info, area: areaList },
155 this.NSTinfo = [nst_info];
157 this.selectedServiceId = nsi_nssi_info.suggest_nsi_id;
158 this.selectedServiceName = nsi_nssi_info.suggest_nsi_name;
159 // an/tn/cn 3 select box switches parameters of Matching Shared NSSI
160 this.enableNSSISelectionList = [
161 nsi_nssi_info.an_enableNSSISelection,
162 nsi_nssi_info.tn_bh_enableNSSISelection,
163 nsi_nssi_info.cn_enableNSSISelection,
165 if (!this.selectedServiceId || !this.selectedServiceName) {
166 this.isDisabled.map((item, index) => {
167 this.isDisabled[index] = false;
170 this.isDisabled.map((item, index) => {
171 if (this.enableNSSISelectionList[index]) {
172 this.isDisabled[index] = false;
175 this.slicingInstances = {
183 service_instance_id: this.selectedServiceId,
184 service_instance_name: this.selectedServiceName,
189 let subnetData = this.pick(nsi_nssi_info, [
190 "an_suggest_nssi_id",
191 "an_suggest_nssi_name",
192 "tn_bh_suggest_nssi_id",
193 "tn_bh_suggest_nssi_name",
194 "cn_suggest_nssi_id",
195 "cn_suggest_nssi_name",
197 this.subnetDataFormatting(subnetData, 0);
200 "Beijing;Beijing;Haidian District",
201 "Beijing;Beijing;Xicheng District",
202 "Beijing;Beijing;Changping District",
204 this.slicingSubnet[0].params = {
205 ...this.pick(nsi_nssi_info, [
206 "sliceProfile_AN_sNSSAI",
207 "sliceProfile_AN_resourceSharingLevel",
208 "sliceProfile_AN_uEMobilityLevel",
210 "sliceProfile_AN_maxNumberofUEs",
211 "sliceProfile_AN_activityFactor",
212 "sliceProfile_AN_expDataRateDL",
213 "sliceProfile_AN_expDataRateUL",
214 "sliceProfile_AN_areaTrafficCapDL",
215 "sliceProfile_AN_areaTrafficCapUL",
217 "sliceProfile_AN_overallUserDensity",
218 "an_enableNSSISelection",
219 "sliceProfile_AN_maxNumberofPDUSession",
221 an_coverage_area_ta_list: area,
223 this.slicingSubnet[1].params = this.pick(nsi_nssi_info, [
227 "sliceProfile_TN_BH_jitte",
228 "sliceProfile_TN_BH_sNSSAI",
229 "tn_bh_enableNSSISelection",
230 "sliceProfile_TN_resourceSharingLevel",
231 "sliceProfile_CN_logicInterfaceId",
232 "sliceProfile_CN_ipAddress",
233 "sliceProfile_CN_nextHopInfo",
234 "sliceProfile_AN_ipAddress",
235 "sliceProfile_AN_logicInterfaceId",
236 "sliceProfile_AN_nextHopInfo",
237 "tn_connection_links",
239 this.slicingSubnet[2].params = {
240 ...this.pick(nsi_nssi_info, [
242 "cn_resource_sharing_level",
243 "cn_ue_mobility_level",
245 "cn_max_number_of_ues",
246 "cn_activity_factor",
247 "cn_exp_data_rate_dl",
248 "cn_exp_data_rate_ul",
249 "cn_area_traffic_cap_dl",
250 "cn_area_traffic_cap_ul",
252 "sliceProfile_CN_overallUserDensity",
253 "cn_enableNSSISelection",
254 "sliceProfile_CN_maxNumberofPDUSession",
260 openSlicingInstance(bool: boolean): void {
261 const { total, currentPage, pageSize } = this.slicingInstances;
262 if (bool && !total) {
263 this.slicingInstances.list = [];
264 this.getSlicingInstances(currentPage, pageSize);
268 getNextPageData(): void {
269 const { total, currentPage, pageSize } = this.slicingInstances;
270 if (total - +currentPage * +pageSize > 0) {
271 if (this.slicingInstances.flag) return;
272 this.slicingInstances.flag = true;
273 this.getSlicingInstances(currentPage, pageSize);
274 this.slicingInstances.currentPage = (
275 +this.slicingInstances.currentPage + 1
280 getSlicingInstances(pageNo: string, pageSize: string): void {
281 this.slicingInstances.isLoading = true;
282 let getSlicingInstanceFailedCallback = () => {
283 this.slicingInstances.isLoading = false;
284 this.slicingInstances.flag = false;
290 getSlicingInstanceFailedCallback
293 const { result_body } = res;
296 nsi_service_instances,
299 this.slicingInstances.total = record_number;
300 this.slicingInstances.list.push(...nsi_service_instances);
301 this.slicingInstances.isLoading = false;
302 this.slicingInstances.flag = false;
307 slicingInstanceChange(): void {
308 // choose the target nssi
309 this.isDisabled.map((item, index) => {
310 if (!this.enableNSSISelectionList[index]) {
311 this.isDisabled[index] = true;
314 this.selectedServiceName = "";
317 let getSlicingSubnetInstanceFailedCallback = () => {
318 this.subnetDataFormatting({}, 1);
321 .getSlicingSubnetInstance(
322 this.selectedServiceId,
323 getSlicingSubnetInstanceFailedCallback
326 const { result_body, record_number } = res;
327 this.subnetDataFormatting(result_body, record_number);
329 this.slicingInstances.list.forEach((item) => {
330 if (item.service_instance_id === this.selectedServiceId) {
331 this.selectedServiceName = item.service_instance_name;
336 subnetDataFormatting(subnetData?: any, total?: number): void {
339 an_suggest_nssi_name,
340 tn_bh_suggest_nssi_id,
341 tn_bh_suggest_nssi_name,
343 cn_suggest_nssi_name,
345 this.slicingSubnet[0].slicingId = an_suggest_nssi_id;
346 this.slicingSubnet[0].slicingName = an_suggest_nssi_name;
347 this.slicingSubnet[0].total = total;
348 this.slicingSubnet[0].currentPage = "1";
349 this.slicingSubnet[0].instances = [
351 service_instance_id: an_suggest_nssi_id,
352 service_instance_name: an_suggest_nssi_name,
356 this.slicingSubnet[1].slicingId = tn_bh_suggest_nssi_id;
357 this.slicingSubnet[1].slicingName = tn_bh_suggest_nssi_name;
358 this.slicingSubnet[1].total = total;
359 this.slicingSubnet[1].currentPage = "1";
360 this.slicingSubnet[1].instances = [
362 service_instance_id: tn_bh_suggest_nssi_id,
363 service_instance_name: tn_bh_suggest_nssi_name,
367 this.slicingSubnet[2].slicingId = cn_suggest_nssi_id;
368 this.slicingSubnet[2].slicingName = cn_suggest_nssi_name;
369 this.slicingSubnet[2].total = total;
370 this.slicingSubnet[2].currentPage = "1";
371 this.slicingSubnet[2].instances = [
373 service_instance_id: cn_suggest_nssi_id,
374 service_instance_name: cn_suggest_nssi_name,
379 resetSlicingInstance(): void {
380 this.selectedServiceId = "";
381 this.selectedServiceName = "";
382 this.slicingSubnet.map((item) => {
384 item.slicingName = "";
386 this.isDisabled.map((item, index) => {
387 this.isDisabled[index] = false;
391 openSubnetInstances(bool: boolean, instance: any): void {
392 if (bool && !instance.total) {
393 instance.instances = [];
394 this.getSubnetInstances(instance);
398 getNextPageSubnet(instance: any): void {
399 const { total, currentPage, pageSize } = instance;
400 if (total - +currentPage * +pageSize > 0) {
401 if (instance.flag) return;
402 instance.flag = true;
403 this.getSubnetInstances(instance);
404 let count = +instance.currentPage;
405 instance.currentPage = (++count).toString();
409 getSubnetInstances(instance: any): void {
410 instance.isLoading = true;
411 const { context, currentPage, pageSize } = instance;
412 let getSubnetInContextFailedCallback = () => {
413 instance.isLoading = false;
414 instance.flag = false;
421 getSubnetInContextFailedCallback
424 const { result_body } = res;
425 const { nssi_service_instances, record_number } = result_body;
426 this.slicingSubnet.map((item) => {
427 if (item.context === context) {
428 item.total = record_number;
429 item.instances.push(...nssi_service_instances);
432 instance.isLoading = false;
433 instance.flag = false;
437 slicingSubnetChange(instance: any): void {
438 instance.slicingName = "";
439 instance.instances.forEach((item) => {
440 if (instance.slicingId === item.service_instance_id) {
441 instance.slicingName = item.service_instance_name;
446 restSubnetInstance(instance: any): void {
447 instance.slicingId = "";
448 instance.slicingName = "";
451 showParamsModel(item: any): void {
452 this.isShowParams = true;
453 this.paramsTitle = item.title;
454 this.params = item.params;
457 changeParams(params: any): void {
459 this.paramsTitle === "An" ? 0 : this.paramsTitle === "Tn" ? 1 : 2;
460 this.slicingSubnet[index].params = params;
462 noPassParaChange(noPassPara: string[]): void {
463 this.noPassPara = noPassPara;
465 handleCancel(bool: boolean = false) {
466 this.showDetail = false;
467 this.cancel.emit({ showDetail: this.showDetail, bool });
479 // slicingSubnet[1] is about Tn,
480 // Delete parameters that do not need to be passed
481 if (this.noPassPara.length !== 0) {
482 this.noPassPara.forEach((item) => {
483 for (let val in slicingSubnet[1].params) {
485 delete slicingSubnet[1].params[val];
490 const nsi_nssi_info: object = {
491 suggest_nsi_id: selectedServiceId,
492 suggest_nsi_name: selectedServiceName,
493 an_suggest_nssi_id: slicingSubnet[0].slicingId,
494 an_suggest_nssi_name: slicingSubnet[0].slicingName,
495 ...slicingSubnet[0].params,
496 tn_bh_suggest_nssi_id: slicingSubnet[1].slicingId,
497 tn_bh_suggest_nssi_name: slicingSubnet[1].slicingName,
498 ...slicingSubnet[1].params,
499 cn_suggest_nssi_id: slicingSubnet[2].slicingId,
500 cn_suggest_nssi_name: slicingSubnet[2].slicingName,
501 ...slicingSubnet[2].params,
503 delete businessRequirement[0].area;
506 business_demand_info: businessRequirement[0],
507 nst_info: NSTinfo[0],
510 delete reqBody.service_snssai;
511 let submitSlicingFailedCallback = () => {
512 this.loading = false;
513 this.notification1.notificationFailed(
520 .submitSlicing(reqBody, submitSlicingFailedCallback)
522 this.notification1.notificationSuccess(
527 this.loading = false;
528 this.handleCancel(true);