site builder

This commit is contained in:
string 2025-04-11 09:12:51 +05:30
parent 06622acac7
commit 8cc5739cfd
17 changed files with 1270 additions and 1192 deletions

View File

@ -7,15 +7,22 @@
<h3>Visa Application </h3>
</div>
<div class="clr-col-4" style="text-align: right;">
<button *ngIf="cardButton" id="add" class="btn btn-primary btn-icon" (click)="changeView()" >
<clr-icon *ngIf="!isCardview" shape="grid-view"></clr-icon> <clr-icon *ngIf="isCardview" shape="bars"></clr-icon>
<button *ngIf="cardButton" id="add" class="btn btn-primary btn-icon" (click)="changeView()">
<clr-icon *ngIf="!isCardview" shape="grid-view"></clr-icon> <clr-icon *ngIf="isCardview"
shape="bars"></clr-icon>
</button>
<!-- button -->
<button id="add" class="btn btn-primary" (click)="goToAdd(product)" >
<button id="add" class="btn btn-primary" (click)="goToAdd(product)">
<clr-icon shape="plus"></clr-icon>ADD
</button>
</div></div>
<ng-container *ngIf="!isCardview"> <!-- GET ALL --> <clr-datagrid [clrDgLoading]="loading" [(clrDgSelected)]="selected">
<button id="add" class="btn btn-primary" (click)="gotositebuilder()">
<clr-icon shape="plus"></clr-icon>SiteBuilder
</button>
</div>
</div>
<ng-container *ngIf="!isCardview"> <!-- GET ALL --> <clr-datagrid [clrDgLoading]="loading"
[(clrDgSelected)]="selected">
<clr-dg-placeholder>
<ng-template #loadingSpinner>
<clr-spinner>Loading ... </clr-spinner>
@ -23,91 +30,100 @@
<div *ngIf="error;else loadingSpinner">{{error}}</div>
</clr-dg-placeholder>
<clr-dg-column [clrDgField]="' name'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Name
<clr-dg-column [clrDgField]="' name'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Name
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' description'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Description
<clr-dg-column [clrDgField]="' description'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Description
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' active'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Active
<clr-dg-column [clrDgField]="' active'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Active
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_entry_type'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Entry Type
<clr-dg-column [clrDgField]="' visa_entry_type'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Entry
Type
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_duration'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Duration
<clr-dg-column [clrDgField]="' visa_duration'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa
Duration
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_processing'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Processing
<clr-dg-column [clrDgField]="' visa_processing'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa
Processing
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' travel_start_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel start date
<clr-dg-column [clrDgField]="' travel_start_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel
start date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' travel_end_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel end date
<clr-dg-column [clrDgField]="' travel_end_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel end
date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> passport Number
<clr-dg-column [clrDgField]="' passport_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> passport
Number
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_issue_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Passport issue date
<clr-dg-column [clrDgField]="' passport_issue_date'"> <ng-container *clrDgHideableColumn="{hidden: false}">
Passport issue date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_expiry_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Passport expiry date
<clr-dg-column [clrDgField]="' passport_expiry_date'"> <ng-container *clrDgHideableColumn="{hidden: false}">
Passport expiry date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' email'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Email
<clr-dg-column [clrDgField]="' email'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Email
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' phone_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Phone Number
<clr-dg-column [clrDgField]="' phone_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Phone Number
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' birth_place'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Birth Place
<clr-dg-column [clrDgField]="' birth_place'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Birth Place
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' date_of_birth'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Date of Birth
<clr-dg-column [clrDgField]="' date_of_birth'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Date of
Birth
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' gender'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Gender
<clr-dg-column [clrDgField]="' gender'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Gender
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' profession'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Profession
<clr-dg-column [clrDgField]="' profession'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Profession
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_cost'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa cost
<clr-dg-column [clrDgField]="' visa_cost'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa cost
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' referrer'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Referrer
<clr-dg-column [clrDgField]="' referrer'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Referrer
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' nationality'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Nationality
<clr-dg-column [clrDgField]="' nationality'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Nationality
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' supplier'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Supplier
<clr-dg-column [clrDgField]="' supplier'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Supplier
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' agent'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Agent
<clr-dg-column [clrDgField]="' agent'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Agent
</ng-container></clr-dg-column>
@ -119,77 +135,79 @@
<clr-dg-row *clrDgItems="let user of product" [clrDgItem]="user">
<clr-dg-cell>{{user. name }}</clr-dg-cell>
<clr-dg-cell>{{user. name }}</clr-dg-cell>
<clr-dg-cell (click)="goToReplaceStringdescription (user.description)" style="cursor: pointer; align-items: center;"><clr-icon shape="details"></clr-icon>
</clr-dg-cell>
<clr-dg-cell (click)="goToReplaceStringdescription (user.description)"
style="cursor: pointer; align-items: center;"><clr-icon shape="details"></clr-icon>
</clr-dg-cell>
<clr-dg-cell>{{user. active }}</clr-dg-cell>
<clr-dg-cell>{{user. active }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_entry_typename }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_entry_typename }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_durationname }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_durationname }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_processingname }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_processingname }}</clr-dg-cell>
<clr-dg-cell>{{user. travel_start_date }}</clr-dg-cell>
<clr-dg-cell>{{user. travel_start_date }}</clr-dg-cell>
<clr-dg-cell>{{user. travel_end_date }}</clr-dg-cell>
<clr-dg-cell>{{user. travel_end_date }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_number }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_number }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_issue_date }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_issue_date }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_expiry_date }}</clr-dg-cell>
<clr-dg-cell>{{user. passport_expiry_date }}</clr-dg-cell>
<clr-dg-cell>{{user. email }}</clr-dg-cell>
<clr-dg-cell>{{user. email }}</clr-dg-cell>
<clr-dg-cell>{{user. phone_number }}</clr-dg-cell>
<clr-dg-cell>{{user. phone_number }}</clr-dg-cell>
<clr-dg-cell>{{user. birth_place }}</clr-dg-cell>
<clr-dg-cell>{{user. birth_place }}</clr-dg-cell>
<clr-dg-cell>{{user. date_of_birth }}</clr-dg-cell>
<clr-dg-cell>{{user. date_of_birth }}</clr-dg-cell>
<clr-dg-cell>{{user. gendername }}</clr-dg-cell>
<clr-dg-cell>{{user. gendername }}</clr-dg-cell>
<clr-dg-cell>{{user. profession }}</clr-dg-cell>
<clr-dg-cell>{{user. profession }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_cost }}</clr-dg-cell>
<clr-dg-cell>{{user. visa_cost }}</clr-dg-cell>
<clr-dg-cell>{{user. referrername }}</clr-dg-cell>
<clr-dg-cell>{{user. referrername }}</clr-dg-cell>
<clr-dg-cell>{{user. nationalityname }}</clr-dg-cell>
<clr-dg-cell>{{user. nationalityname }}</clr-dg-cell>
<clr-dg-cell>{{user. suppliername }}</clr-dg-cell>
<clr-dg-cell>{{user. suppliername }}</clr-dg-cell>
<clr-dg-cell>{{user. agentname }}</clr-dg-cell>
<clr-dg-cell>{{user. agentname }}</clr-dg-cell>
<!-- who column -->
<clr-dg-cell>
<clr-dg-cell>
<clr-signpost>
<span style="cursor: pointer;" clrSignpostTrigger><clr-icon shape="help" class="success" style="color: rgb(0, 130, 236);"></clr-icon></span>
<span style="cursor: pointer;" clrSignpostTrigger><clr-icon shape="help" class="success"
style="color: rgb(0, 130, 236);"></clr-icon></span>
<clr-signpost-content [clrPosition]="'left-middle'" *clrIfOpen>
<h5 style="margin-top: 0">Who Column</h5>
<div>Account ID: <code class="clr-code">{{user.accountId}}</code></div>
@ -216,7 +234,7 @@
</clr-dg-pagination>
</clr-dg-footer>
</clr-datagrid> </ng-container>
<ng-template #showInfo>
<ng-template #showInfo>
<div class="alert alert-info" role="alert">
<div class="alert-items">
<div class="alert-item static">
@ -228,16 +246,18 @@
</div>
</div>
</div>
</ng-template><ng-container *ngIf="isCardview">
</ng-template><ng-container *ngIf="isCardview">
<div *ngIf="product; else showInfo" class="clr-row clr-align-items-start clr-justify-content-start">
<div *ngFor="let app of product| filter:search; let index = i" class="clr-col-auto" >
<div *ngFor="let app of product| filter:search; let index = i" class="clr-col-auto">
<div class="clr-row">
<div class="clr-col-lg-12 clr-col-md-4 clr-col-sm-4 clr-col-12" style="width: 410px;">
<div class="card" style="padding: 10px; "[style.background-color]="cardmodal.cardColor !== '' ? cardmodal.cardColor : 'white'">
<div class="card-body" style="display: grid; grid-template-columns: repeat(13, 1fr); grid-template-rows: repeat(7, 1fr); gap: 5px;">
<div class="card" style="padding: 10px; "
[style.background-color]="cardmodal.cardColor !== '' ? cardmodal.cardColor : 'white'">
<div class="card-body"
style="display: grid; grid-template-columns: repeat(13, 1fr); grid-template-rows: repeat(7, 1fr); gap: 5px;">
<ng-container *ngFor="let item of dashboardArray">
<div [style.gridColumn]="item.x + 1" [style.gridRow]="item.y + 1" [style.gridColumnEnd]="item.x + item.cols + 1"
[style.gridRowEnd]="item.y + item.rows + 1">
<div [style.gridColumn]="item.x + 1" [style.gridRow]="item.y + 1"
[style.gridColumnEnd]="item.x + item.cols + 1" [style.gridRowEnd]="item.y + item.rows + 1">
<div *ngIf="item.name === 'textField'" class="title-card card-title"
[style.text-align]="item.alignment !== '' ? item.alignment : 'left'"
[style.line-height]="item.textlineheight !== '' ? item.textlineheight : '1'"
@ -247,7 +267,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ] }}
@ -263,7 +284,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ] | date}}
@ -278,7 +300,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ]}}
@ -308,8 +331,7 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
>
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'">
<clr-icon [attr.shape]="item.iconName"></clr-icon>
</div>
@ -324,7 +346,8 @@
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor"> <img id="filePreview" [src]="item.imageURL" alt="File Preview"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
<img id="filePreview" [src]="item.imageURL" alt="File Preview"
[style.width]="item.imagewidth !== '' ? item.imagewidth + 'px' : '100px'"
[style.height]="item.imagewidth !== '' ? item.imagewidth + 'px' : '100px'"></div>
</div>
@ -343,7 +366,8 @@
<clr-modal [(clrModalOpen)]="rsModaldescription" [clrModalSize]="'xl'" [clrModalStaticBackdrop]="true">
<div class="modal-body">
<textarea class="form-control" style="width:100%; height: 400px;" readonly>{{rowSelected}}</textarea>
</div></clr-modal>
</div>
</clr-modal>
@ -431,165 +455,192 @@
</h3>
</h3>
<div class="modal-body" *ngIf="rowSelected.id">
<h2 class="heading">{{rowSelected.id}}</h2>
<!-- button -->
<form >
<div class="clr-row">
<div class="clr-col-sm-12">
<label>Name</label>
<!-- button -->
<form>
<div class="clr-row">
<div class="clr-col-sm-12">
<label>Name</label>
<input class="clr-input" type="text" [(ngModel)]="rowSelected.name" name="name" />
</div>
<div class="clr-col-sm-12">
<label> Description</label>
<textarea cols="10" rows="2"[(ngModel)]="rowSelected.description" name="description " placeholder="Textarea"> </textarea>
<div class="clr-col-sm-12">
<label> Description</label>
<textarea cols="10" rows="2" [(ngModel)]="rowSelected.description" name="description "
placeholder="Textarea"> </textarea>
</div>
<div class="clr-col-sm-12">
<label> Active</label>
<input type="checkbox" name="active" clrToggle [(ngModel)]="rowSelected.active" /> </div>
<div class="clr-col-sm-12">
<label> Active</label>
<input type="checkbox" name="active" clrToggle [(ngModel)]="rowSelected.active" />
</div>
<div class="clr-col-sm-12">
<label>Visa Entry Type</label>
<select name="visa_entry_type" [(ngModel)]="rowSelected.visa_entry_type">
<div class="clr-col-sm-12">
<label>Visa Entry Type</label>
<select name="visa_entry_type" [(ngModel)]="rowSelected.visa_entry_type">
<option [value]="null">Choose visa_entry_type</option>
<option *ngFor=" let item of selectvisa_entry_type" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectvisa_entry_type" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Visa Duration</label>
<select name="visa_duration" [(ngModel)]="rowSelected.visa_duration">
<div class="clr-col-sm-12">
<label>Visa Duration</label>
<select name="visa_duration" [(ngModel)]="rowSelected.visa_duration">
<option [value]="null">Choose visa_duration</option>
<option *ngFor=" let item of selectvisa_duration" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectvisa_duration" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Visa Processing</label>
<select name="visa_processing" [(ngModel)]="rowSelected.visa_processing">
<div class="clr-col-sm-12">
<label>Visa Processing</label>
<select name="visa_processing" [(ngModel)]="rowSelected.visa_processing">
<option [value]="null">Choose visa_processing</option>
<option *ngFor=" let item of selectvisa_processing" [value]="item.id">{{item.name }}</option> </select> </div>
<div class="clr-col-sm-12">
<label>Travel start date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_start_date" name="travel_start_date" />
<option *ngFor=" let item of selectvisa_processing" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Travel end date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_end_date" name="travel_end_date" />
<div class="clr-col-sm-12">
<label>Travel start date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_start_date"
name="travel_start_date" />
</div>
<div class="clr-col-sm-12">
<label>passport Number</label>
<input id="name" class="clr-input" type="number" [(ngModel)]="rowSelected.passport_number" name="passport_number" />
<div class="clr-col-sm-12">
<label>Travel end date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_end_date"
name="travel_end_date" />
</div>
<div class="clr-col-sm-12">
<label>Passport issue date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_issue_date" name="passport_issue_date" />
<div class="clr-col-sm-12">
<label>passport Number</label>
<input id="name" class="clr-input" type="number" [(ngModel)]="rowSelected.passport_number"
name="passport_number" />
</div>
<div class="clr-col-sm-12">
<label>Passport expiry date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_expiry_date" name="passport_expiry_date" />
<div class="clr-col-sm-12">
<label>Passport issue date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_issue_date"
name="passport_issue_date" />
</div>
<div class="clr-col-sm-12">
<label> Email</label>
<input id="name" class="clr-input" type="email"
[(ngModel)]="rowSelected.email " name="email" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div class="clr-col-sm-12">
<label>Passport expiry date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_expiry_date"
name="passport_expiry_date" />
</div>
<div class="clr-col-sm-12">
<label> Email</label>
<input id="name" class="clr-input" type="email" [(ngModel)]="rowSelected.email " name="email"
pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div *ngIf="rowSelected.email && !isValidemail(rowSelected.email )" class="error_mess">
* Email must be a valid email address.
</div> </div>
</div>
</div>
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input id="name" class="clr-input" type="Text" [(ngModel)]="rowSelected.phone_number " name="phone_number" pattern="((\\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input id="name" class="clr-input" type="Text" [(ngModel)]="rowSelected.phone_number " name="phone_number"
pattern="((\\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div *ngIf="rowSelected.phone_number && !isValidPhone_number(rowSelected.phone_number)" class="error_mess">
* Please Follow your pattern,+91 Enter 10 digit Mobile Number.
</div> </div>
</div>
</div>
<div class="clr-col-sm-12">
<label>Birth Place</label>
<div class="clr-col-sm-12">
<label>Birth Place</label>
<input class="clr-input" type="text" [(ngModel)]="rowSelected.birth_place" name="birth_place" />
</div>
<div class="clr-col-sm-12">
<label>Date of Birth</label>
<div class="clr-col-sm-12">
<label>Date of Birth</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.date_of_birth" name="date_of_birth" />
</div>
<div class="clr-col-sm-12">
<label>Gender</label>
<select name="gender" [(ngModel)]="rowSelected.gender">
<div class="clr-col-sm-12">
<label>Gender</label>
<select name="gender" [(ngModel)]="rowSelected.gender">
<option [value]="null">Choose gender</option>
<option *ngFor=" let item of selectgender" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectgender" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Profession</label>
<div class="clr-col-sm-12">
<label>Profession</label>
<input class="clr-input" type="text" [(ngModel)]="rowSelected.profession" name="profession" />
</div>
<!-- currency field start -->
<div class="clr-col-sm-12">
<!-- currency field start -->
<div class="clr-col-sm-12">
<label> Visa cost</label>
<input type="number" class="clr-input" [(ngModel)]="rowSelected.visa_cost" name="visa_cost" (blur)="formatCurrencyvisa_cost()" [value]="rowSelected.visa_cost | removeCommas">
</div>
<!-- currency field end -->
<input type="number" class="clr-input" [(ngModel)]="rowSelected.visa_cost" name="visa_cost"
(blur)="formatCurrencyvisa_cost()" [value]="rowSelected.visa_cost | removeCommas">
</div>
<!-- currency field end -->
<div class="clr-col-sm-12">
<label>Referrer</label>
<select name="referrer" [(ngModel)]="rowSelected.referrer">
<div class="clr-col-sm-12">
<label>Referrer</label>
<select name="referrer" [(ngModel)]="rowSelected.referrer">
<option [value]="null">Choose referrer</option>
<option *ngFor=" let item of selectreferrer" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectreferrer" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Nationality</label>
<select name="nationality" [(ngModel)]="rowSelected.nationality">
<div class="clr-col-sm-12">
<label>Nationality</label>
<select name="nationality" [(ngModel)]="rowSelected.nationality">
<option [value]="null">Choose nationality</option>
<option *ngFor=" let item of selectnationality" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectnationality" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Supplier</label>
<select name="supplier" [(ngModel)]="rowSelected.supplier">
<div class="clr-col-sm-12">
<label>Supplier</label>
<select name="supplier" [(ngModel)]="rowSelected.supplier">
<option [value]="null">Choose supplier</option>
<option *ngFor=" let item of selectsupplier" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectsupplier" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Agent</label>
<select name="agent" [(ngModel)]="rowSelected.agent">
<div class="clr-col-sm-12">
<label>Agent</label>
<select name="agent" [(ngModel)]="rowSelected.agent">
<option [value]="null">Choose agent</option>
<option *ngFor=" let item of selectagent" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectagent" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -597,48 +648,7 @@
<!-- form code start -->
<!-- form code start -->
<div *ngIf="checkFormCode">
<h4 style="font-weight: 300;display: inline;">Extension</h4>
<br>
@ -647,22 +657,27 @@
<div class="clr-col-4" *ngFor="let field of additionalFieldsFromBackend">
<ng-container *ngIf="field.formCode === formcode" [ngSwitch]="field.fieldType">
<!-- Text Input --> <label *ngSwitchCase="'text'">{{ field.fieldName }}</label>
<input *ngSwitchCase="'text'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<input *ngSwitchCase="'text'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<!-- Date Input --> <label *ngSwitchCase="'date'">{{ field.fieldName }}</label>
<input *ngSwitchCase="'date'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<input *ngSwitchCase="'date'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<!-- Textarea --> <label *ngSwitchCase="'textarea'">{{ field.fieldName }}</label>
<textarea *ngSwitchCase="'textarea'" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" col="10" row="2"></textarea>
<textarea *ngSwitchCase="'textarea'" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]"
col="10" row="2"></textarea>
<!-- Checkbox --> <label *ngSwitchCase="'checkbox'">{{ field.fieldName }}</label><br>
<input *ngSwitchCase="'checkbox'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-checkbox" />
<input *ngSwitchCase="'checkbox'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-checkbox" />
</ng-container>
</div>
</div>
</div>
</div>
<!-- form code end --> <div class="modal-footer">
<!-- form code end -->
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modalEdit = false">Cancel</button>
<button type="submit" class="btn btn-primary" (click)="onUpdate(rowSelected.id)">Update</button>
</div>
@ -675,7 +690,7 @@
<h2 class="heading">{{rowSelected.id}}</h2>
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modaldelete = false">Cancel</button>
<button type="button" (click)="delete(rowSelected.id)" class="btn btn-primary" >Delete</button>
<button type="button" (click)="delete(rowSelected.id)" class="btn btn-primary">Delete</button>
</div>
</div>
</clr-modal>
@ -728,181 +743,201 @@
<!-- aeroplane icon -->
&nbsp; &nbsp; &nbsp; &nbsp;
<a *ngIf="userrole.includes('ROLE_ADMIN')" style="float: right;" href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-sm tooltip-bottom-left">
<a id="build_extension" [routerLink]="['../extension/all']" [queryParams]="{ formCode: 'Visa_application_formCode' }">
<a *ngIf="userrole.includes('ROLE_ADMIN')" style="float: right;" href="javascript:void(0)" role="tooltip"
aria-haspopup="true" class="tooltip tooltip-sm tooltip-bottom-left">
<a id="build_extension" [routerLink]="['../extension/all']"
[queryParams]="{ formCode: 'Visa_application_formCode' }">
<clr-icon shape="airplane" size="32"></clr-icon>
</a>
<span class="tooltip-content">Form Extension</span>
</a> </h3>
</a>
</h3>
<div class="modal-body">
<form [formGroup]="entryForm" >
<form [formGroup]="entryForm">
<div class="clr-row" style="height: fit-content;">
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Name</label>
<input class="clr-input" type="text" formControlName="name" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Description</label>
<textarea cols="10" rows="2" formControlName="description" placeholder="Textarea"> </textarea>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Active</label>
<input type="checkbox" formControlName="active" clrToggle/> </div>
<input type="checkbox" formControlName="active" clrToggle />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Visa Entry Type</label>
<select formControlName="visa_entry_type">
<select formControlName="visa_entry_type">
<option [value]="null">Choose Visa Entry Type</option>
<option *ngFor="let item of selectvisa_entry_type" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Visa Duration</label>
<select formControlName="visa_duration">
<select formControlName="visa_duration">
<option [value]="null">Choose Visa Duration</option>
<option *ngFor="let item of selectvisa_duration" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Visa Processing</label>
<select formControlName="visa_processing">
<select formControlName="visa_processing">
<option [value]="null">Choose Visa Processing</option>
<option *ngFor="let item of selectvisa_processing" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Travel start date</label>
<input class="clr-input" type="date" formControlName="travel_start_date" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Travel end date</label>
<input class="clr-input" type="date" formControlName="travel_end_date" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> passport Number</label>
<input class="clr-input" type="number" formControlName="passport_number" />
<div *ngIf="submitted && entryForm.controls.passport_number.errors" class="error_mess">
<div *ngIf="submitted && entryForm.controls.passport_number.errors.required" class="error_mess">*This field is Required</div>
</div>
<div *ngIf="submitted && entryForm.controls.passport_number.errors.required" class="error_mess">*This field
is Required</div>
</div>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Passport issue date</label>
<input class="clr-input" type="date" formControlName="passport_issue_date" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Passport expiry date</label>
<input class="clr-input" type="date" formControlName="passport_expiry_date" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Email</label>
<input class="clr-input" type="email" formControlName="email" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div *ngIf="entryForm.controls['email'].errors" class="error_mess">
<div *ngIf="entryForm.controls['email'].hasError('pattern')" class="error_mess">* Email must be a valid email address
</div> </div>
</div>
<input class="clr-input" type="email" formControlName="email"
pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div *ngIf="entryForm.controls['email'].errors" class="error_mess">
<div *ngIf="entryForm.controls['email'].hasError('pattern')" class="error_mess">* Email must be a valid
email address
</div>
</div>
</div>
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input class="clr-input" type="text" formControlName="phone_number" pattern="((\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input class="clr-input" type="text" formControlName="phone_number"
pattern="((\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div *ngIf="submitted && entryForm.controls['phone_number'].errors" class="error_mess">
<div *ngIf="submitted && entryForm.controls['phone_number'].hasError('pattern')" class="error_mess">* Please Follow your pattern,+91 Enter 10 digit Mobile Number.
</div> </div> </div>
<div *ngIf="submitted && entryForm.controls['phone_number'].hasError('pattern')" class="error_mess">* Please
Follow your pattern,+91 Enter 10 digit Mobile Number.
</div>
</div>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Birth Place</label>
<input class="clr-input" type="text" formControlName="birth_place" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Date of Birth</label>
<input class="clr-input" type="date" formControlName="date_of_birth" />
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Gender</label>
<select formControlName="gender">
<select formControlName="gender">
<option [value]="null">Choose Gender</option>
<option *ngFor="let item of selectgender" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Profession</label>
<input class="clr-input" type="text" formControlName="profession" />
</div>
<!-- currency field start -->
<!-- currency field start -->
<div class="clr-col-sm-12">
<label> Visa cost</label>
<input type="number" class="clr-input" formControlName="visa_cost" [value]="entryForm.value.visa_cost | number:'1.2-2' | removeCommas">
<input type="number" class="clr-input" formControlName="visa_cost"
[value]="entryForm.value.visa_cost | number:'1.2-2' | removeCommas">
</div>
<!-- currency field end -->
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Referrer</label>
<select formControlName="referrer">
<select formControlName="referrer">
<option [value]="null">Choose Referrer</option>
<option *ngFor="let item of selectreferrer" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Nationality</label>
<select formControlName="nationality">
<select formControlName="nationality">
<option [value]="null">Choose Nationality</option>
<option *ngFor="let item of selectnationality" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Supplier</label>
<select formControlName="supplier">
<select formControlName="supplier">
<option [value]="null">Choose Supplier</option>
<option *ngFor="let item of selectsupplier" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
<div class="clr-col-sm-12">
<div class="clr-col-sm-12">
<label> Agent</label>
<select formControlName="agent">
<select formControlName="agent">
<option [value]="null">Choose Agent</option>
<option *ngFor="let item of selectagent" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -977,11 +1012,12 @@
</div>
</div>
</div>
<!-- form code end --> <div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modalAdd = false">Cancel</button>
<!-- form code end -->
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modalAdd = false">Cancel</button>
<button type="submit" class="btn btn-primary" (click)="onSubmit()">ADD</button>
</div>
</form>
</form>
</div>
</clr-modal>
@ -1028,4 +1064,4 @@
<!-- htmlpopup -->
<!-- htmlpopup -->

View File

@ -7,6 +7,7 @@ import { ExtensionService } from 'src/app/services/fnd/extension.service';
import { DashboardContentModel2 } from 'src/app/models/builder/dashboard';
import { Visa_applicationcardvariable } from './Visa_application_cardvariable';
import { UserInfoService } from 'src/app/services/user-info.service';
import { Router } from '@angular/router';
declare var JsBarcode: any;
@Component({
selector: 'app-Visa_application',
@ -18,7 +19,9 @@ export class Visa_applicationComponent implements OnInit {
cardmodeldata = Visa_applicationcardvariable.cardmodeldata;
public dashboardArray: DashboardContentModel2[];
isCardview = Visa_applicationcardvariable.cardButton;
cardmodal; changeView() {
cardmodal;
changeView() {
this.isCardview = !this.isCardview;
}
beforeText(fieldtext: string): string { // Extract the text before the first '<'
@ -52,6 +55,8 @@ export class Visa_applicationComponent implements OnInit {
private alertService: AlertService,
private toastr: ToastrService,
private _fb: FormBuilder,
private router: Router,
) { }
// component button
ngOnInit(): void {
@ -214,49 +219,6 @@ export class Visa_applicationComponent implements OnInit {
this.rowSelected = row;
this.modalEdit = true;
}
onDelete(row) {
@ -397,47 +359,6 @@ export class Visa_applicationComponent implements OnInit {
this.mainService.create(this.entryForm.value).subscribe(
(data) => {
console.log(data);
@ -450,47 +371,6 @@ export class Visa_applicationComponent implements OnInit {
}, (error) => {
console.log(error);
if (error.status >= 200 && error.status <= 299) {
@ -509,50 +389,6 @@ export class Visa_applicationComponent implements OnInit {
}
goToAdd(row) {
this.modalAdd = true; this.submitted = false;
}
submitted = false;
onSubmit() {
@ -662,6 +498,11 @@ export class Visa_applicationComponent implements OnInit {
}
// updateaction
gotositebuilder() {
this.router.navigate(["/cns-portal/SiteBuilder"]);
}
}

View File

@ -0,0 +1,44 @@
import { Injectable } from '@angular/core';
import { Observable } from "rxjs";
import { HttpClient, HttpHeaders, HttpParams, } from "@angular/common/http";
import { ApiRequestService } from "src/app/services/api/api-request.service";
import { environment } from 'src/environments/environment';
import baseUrl from 'src/app/services/api/helper';
@Injectable({
providedIn: 'root'
})
export class Referrerservice{
private baseURL = "Referrer/Referrer" ; constructor(
private http: HttpClient,
private apiRequest: ApiRequestService,
) { }
getAll(page?: number, size?: number): Observable<any> {
return this.apiRequest.get(this.baseURL);
}
getById(id: number): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.get(_http);
}
create(data: any): Observable<any> {
return this.apiRequest.post(this.baseURL, data);
}
update(id: number, data: any): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.put(_http, data);
}
delete(id: number): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.delete(_http);
}
downloadCSV(tableName: string): Observable<Blob> {
const url = `${baseUrl}/api/template/download-csv?tableName=${tableName}`;
return this.http.get(url, { responseType: 'blob' })
}// updateaction
}

View File

@ -0,0 +1,4 @@
export const Referrercardvariable = {
"cardButton": false,
"cardmodeldata": ``
}

View File

@ -0,0 +1,30 @@
.node-card {
border: 1px solid #ccc;
padding: 12px;
background: white;
border-radius: 6px;
margin: 8px auto;
width: 300px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.children-container {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
margin-top: 20px;
}
.children {
display: flex;
justify-content: center;
gap: 40px;
}
.connector-line {
position: absolute;
top: -30px;
height: 100px;
width: 100%;
}

View File

@ -0,0 +1,16 @@
<div class="node-card">
<h3>{{ node.title }}</h3>
<div class="section" *ngFor="let sec of getSections(node.data)">
<h4>{{ sec.title }}</h4>
<p>{{ sec.description }}</p>
</div>
</div>
<div class="children-container" *ngIf="getChildren(node.data).length">
<svg class="connector-line">
<path d="M 100 0 C 150 50, 150 50, 200 100" stroke="gray" fill="transparent"/>
</svg>
<div class="children">
<app-tree-node *ngFor="let child of getChildren(node.data)" [node]="child"></app-tree-node>
</div>
</div>

View File

@ -0,0 +1,33 @@
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-tree-node',
templateUrl: './tree-node.component.html',
styleUrls: ['./tree-node.component.css']
})
export class TreeNodeComponent {
@Input() node: any;
getSections(data: any): { title: string, description: string }[] {
const sections: { title: string, description: string }[] = [];
for (const key in data) {
if (key !== 'Children' && typeof data[key] === 'string') {
sections.push({ title: key, description: data[key] });
}
if (key !== 'Children' && Array.isArray(data[key])) {
sections.push({ title: key, description: data[key].join('\n') });
}
}
return sections;
}
getChildren(data: any): any[] {
if (data.Children) {
return Object.keys(data.Children).map((key) => ({
title: key,
data: data.Children[key]
}));
}
return [];
}
}

View File

@ -0,0 +1,30 @@
<!-- <div class="toolbar">
<textarea [(ngModel)]="rawJson" placeholder="Paste your JSON here..."></textarea>
<div class="actions">
<button (click)="convertToTree()">Convert</button>
<button (click)="exportJson()">Export JSON</button>
<input type="file" (change)="importJson($event)" />
</div>
</div>
<div class="tree-container" panZoom>
<ng-container *ngIf="treeData">
<app-tree-node [node]="treeData" [parent]="null"></app-tree-node>
</ng-container>
</div> -->
<!-- 🔽 New textarea for creating JSON -->
<div class="controls">
<textarea [(ngModel)]="rawInputText" placeholder="Write your structure here"></textarea>
<button (click)="generateJson()">Submit</button>
</div>
<div class="controls">
<textarea [(ngModel)]="inputJson" placeholder="Paste your JSON here"></textarea>
<button (click)="convertJson()">Convert</button>
</div>
<div class="tree-container" *ngIf="treeData">
<app-tree-node [node]="treeData"></app-tree-node>
</div>

View File

@ -0,0 +1,29 @@
.controls {
margin-bottom: 20px;
}
.controls textarea {
width: 100%;
height: 200px;
padding: 10px;
font-size: 14px;
font-family: monospace;
border: 1px solid #ccc;
border-radius: 4px;
resize: vertical;
box-sizing: border-box;
margin-bottom: 10px;
}
.controls button {
padding: 10px 20px;
background-color: #1976d2;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.controls button:hover {
background-color: #1565c0;
}

View File

@ -0,0 +1,108 @@
import { Component } from '@angular/core';
import { treeVisualizerService } from './tree-visualizer.service';
@Component({
selector: 'app-tree-visualizer',
templateUrl: './tree-visualizer.component.html',
styleUrls: ['./tree-visualizer.component.scss']
})
export class TreeVisualizerComponent {
inputJson: string = '';
treeData: any = null;
rawInputText: string = `make a website , where we can login , sign up.
inside that there is a menu of icard where we can add a icard detail iacardname, description
after click this icard inside we upload excel of student data, icard template, after click convert it fetch all data of excel and replace the key value of icard template..`;
constructor(private treeService: treeVisualizerService) { }
convertJson() {
try {
const parsed = JSON.parse(this.inputJson);
const rootKey = Object.keys(parsed)[0];
this.treeData = {
title: rootKey,
data: parsed[rootKey]
};
} catch (e) {
alert('Invalid JSON');
}
}
getSections(data: any): { title: string, description: string }[] {
const sections: { title: string, description: string }[] = [];
for (const key in data) {
if (key !== 'Children' && typeof data[key] === 'string') {
sections.push({ title: key, description: data[key] });
}
if (key !== 'Children' && Array.isArray(data[key])) {
sections.push({ title: key, description: data[key].join('\n') });
}
}
return sections;
}
getChildren(data: any): any[] {
if (data.Children) {
return Object.keys(data.Children).map((key) => ({
title: key,
data: data.Children[key]
}));
}
return [];
}
generateJson() {
const suffix = `
🔁 You are a JSON structure generator for website page hierarchies.
You will return only a JSON object in a strictly hierarchical tree structure. Do not include any explanation, text, or markdown formatting like \`\`\`json — just return pure JSON only.
Each page should be a key. For subpages like "Login", "Projects", or "New Project", nest them under a "Children" key of their parent page.
Each page must include specific sections as keys (like "Navbar", "Header Section", "Feature Section" etc.) with either an empty object {} or a short description as the value.
Do not return any explanation, text, or markdown formatting only return the raw JSON object exactly in this format.
Do not include:
- Any explanation before or after the JSON
- Any markdown formatting like \`\`\` or json
- Any text like "Here is..." or "Please note..."
Output must look like this:
{
"Home": {
"Navbar": {},
"Header Section": "Intro...",
"Children": {
"Login": {
"Navbar": {},
"Header Section": "Login form...",
"Footer": {}
}
}
}
}`;
const payload = {
query: this.rawInputText + suffix,
conversationId: '677'
};
console.log(' query : ', payload.query)
this.treeService.generateJson(payload).subscribe({
next: (res) => {
console.log('response ', res)
if (res && res.responseContent) {
this.inputJson = res.responseContent;
console.log('input json ', this.inputJson)
this.convertJson(); // auto convert after API response
}
},
error: (err) => {
console.error('API Error:', err);
alert('Failed to fetch JSON from API');
}
});
}
}

View File

@ -0,0 +1,27 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from "@angular/common/http";
import { Observable } from "rxjs";
import { ApiRequestService } from 'src/app/services/api/api-request.service';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class treeVisualizerService {
private baseURL = environment.nodeUrl;
constructor(private apiRequest: ApiRequestService, private http: HttpClient) { }
generateJson(data: any): Observable<any> {
return this.http.post(`${this.baseURL}/chatMemory`, data);
}
}

View File

@ -1,7 +1,6 @@
<div class="clr-row" >
<div class="clr-row">
<ng-container *ngFor="let item of dashboardModel; let i = index">
<ng-container *ngIf="item.name === 'Index'" >
<ng-container *ngIf="item.name === 'Index'">
<div class="clr-col-3" style="padding: 10px 12px 5px 12px;">
<div class="card card-block" style="margin: 0%; padding: 1%;">
<h4 class="card-title" style="text-align: center; font-weight: bolder; ">{{ item?.charttitle }}</h4>
@ -13,238 +12,102 @@
</div>
</ng-container>
<!-- <ng-container *ngIf="item.name === 'Bar Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'bar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Line Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'line'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Doughnut Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'doughnut'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Bubble Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.bubbleChartData"
[legend]="item.chartlegend"
[type]="'bubble'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Pie Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'pie'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'PolarArea Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.polarAreaChartData"
[labels]="item.showlabel ? item?.featchData?.polarAreaChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'polarArea'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Radar Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'radar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
</div>
</ng-container> -->
</ng-container>
<ng-container *ngFor="let item of dashboardChartData; let i = index">
<ng-container *ngIf="item.name === 'Bar Chart'" >
<ng-container *ngIf="item.name === 'Bar Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'bar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Line Chart'" >
<ng-container *ngIf="item.name === 'Line Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'line'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Doughnut Chart'" >
<ng-container *ngIf="item.name === 'Doughnut Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'doughnut'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Bubble Chart'" >
<ng-container *ngIf="item.name === 'Bubble Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.bubbleChartData"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.bubbleChartData" [legend]="item.chartlegend"
[type]="'bubble'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Pie Chart'" >
<ng-container *ngIf="item.name === 'Pie Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'pie'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'PolarArea Chart'" >
<ng-container *ngIf="item.name === 'PolarArea Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.polarAreaChartData"
<canvas baseChart [datasets]="item?.featchData?.polarAreaChartData"
[labels]="item.showlabel ? item?.featchData?.polarAreaChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'polarArea'">
[legend]="item.chartlegend" [type]="'polarArea'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Radar Chart'" >
<ng-container *ngIf="item.name === 'Radar Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'radar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<ng-container *ngIf="item.name === 'Scatter Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<ng-container *ngIf="item.name === 'Scatter Chart'">
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
@ -273,11 +136,15 @@ border-radius: 2px;">
<div class="alert-item static">
<span class="alert-text">
{{'NOTIFICATION_NOT_FOUND' | translate}}
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING' | translate}} ... </clr-spinner></ng-template>
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING' | translate}} ...
</clr-spinner></ng-template>
<div *ngIf="error;else loadingSpinner">{{error}}</div>
<div *ngIf="er;">{{er}}</div> </span></div>
<div *ngIf="er;">{{er}}</div>
</span>
</div>
</div></ng-template>
</div>
</div>
</ng-template>
<div *ngIf="notification; else showInfo">
<div *ngFor="let not of notification;">
<ng-container *ngIf="not?.image; else def">
@ -291,7 +158,8 @@ border-radius: 2px;">
<b>{{ not.time | timePipe }}</b>
</span><br>
<hr>
</div></div>
</div>
</div>
</clr-tab-content>
</clr-tab>
<clr-tab>
@ -304,20 +172,27 @@ border-radius: 2px;">
<div class="alert-item static">
<span class="alert-text">
{{'SUGGESTION_NOT_FOUND'| translate}}
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING'| translate}} ... </clr-spinner></ng-template>
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING'| translate}} ...
</clr-spinner></ng-template>
<div *ngIf="error;else loadingSpinner">{{error}}</div>
<div *ngIf="er;">{{er}}</div> </span></div>
<div *ngIf="er;">{{er}}</div>
</span>
</div>
</div></ng-template>
</div>
</div>
</ng-template>
<ng-container *ngIf="projectsetup else suggetionInfo">
<div >
<div>
<div class="clr-row">
<div *ngFor="let app of projectsetup; let index = i" class="clr-col-md-6 clr-col-12" style="width: 310px;">
<div *ngFor="let app of projectsetup; let index = i" class="clr-col-md-6 clr-col-12"
style="width: 310px;">
<div class="card" style="background-color: azure;">
<div class="card-header">
<div class="clr-row">
<div class="clr-col-5">
<b class="word" id="projectword" [title]="app.owner"><clr-icon shape="employee"></clr-icon> {{app.owner}} <span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="app.accessibility"> {{app.accessibility ? 'private' : 'public'}}</span></b>
<b class="word" id="projectword" [title]="app.owner"><clr-icon shape="employee"></clr-icon>
{{app.owner}} <span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;"
[title]="app.accessibility"> {{app.accessibility ? 'private' : 'public'}}</span></b>
</div>
<div class="clr-col-7" style="text-align: right;">
@ -327,13 +202,16 @@ border-radius: 2px;">
<b style="font-size: 15px;" [title]="app.projectName">{{app.projectName}}</b>
</div>
<div class="clr-row">
<div class="clr-col-9"> <div class="card-title1" id="projectword" >
<b style="font-size: 15px;" class="p2" [title]="app.description">{{app.description ? app.description : 'project description'}}</b>
<div class="clr-col-9">
<div class="card-title1" id="projectword">
<b style="font-size: 15px;" class="p2" [title]="app.description">{{app.description ?
app.description : 'project description'}}</b>
</div>
</div>
<div class="clr-col-3" style="text-align: right; display: flex; align-items: center; justify-content: flex-end;">
<div class="clr-col-3"
style="text-align: right; display: flex; align-items: center; justify-content: flex-end;">
<a href="javascript:void(0)" class="btn--circle" (click)="goToModule(app.id);" >
<a href="javascript:void(0)" class="btn--circle" (click)="goToModule(app.id);">
<span class="btn-stage"></span>
<span class="btn-stage">{{'SERVICE'| translate}}</span>
</a>
@ -341,10 +219,11 @@ border-radius: 2px;">
</div>
<div class="card-text">
<div class="clr-row" >
<div class="clr-col-12" >
<div class="clr-row">
<div class="clr-col-12">
<span *ngFor="let tech of app?.technology?.slice(0, 6); let i = index">
<span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="tech"> {{tech}}</span>
<span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="tech">
{{tech}}</span>
</span>
</div>
<!-- <div class="clr-col-5" (click)="stopRedirection($event)">
@ -357,7 +236,9 @@ border-radius: 2px;">
<div class="card-block" style="padding: 10px 10px 0px 10px;">
<div class="card-footer" style="padding: 0px 10px 6px 10px">
<button class="btn btn-sm btn-link"> {{'Last Updated On' | translate}} {{app.updatedAt|date}}</button> <span style="margin: 0 0 0 10px; padding: 5px;" class="label p7"><clr-icon shape="calendar"></clr-icon>&nbsp;{{app.createdAt | timePipe}}</span>
<button class="btn btn-sm btn-link"> {{'Last Updated On' | translate}}
{{app.updatedAt|date}}</button> <span style="margin: 0 0 0 10px; padding: 5px;"
class="label p7"><clr-icon shape="calendar"></clr-icon>&nbsp;{{app.createdAt | timePipe}}</span>
</div>
</div>
</div>

View File

@ -101,6 +101,7 @@ import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingru
import { QueryComponent } from './superadmin/query/query.component';
import { QueryaddComponent } from './superadmin/queryadd/queryadd.component';
import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
import { TreeVisualizerComponent } from './fnd/SiteTreeBuilder/tree-visualizer.component';
@ -275,6 +276,8 @@ const routes: Routes = [
{path:'Visa_administration',component:Visa_administrationComponent},
{path:'SiteBuilder',component:TreeVisualizerComponent},
{path:'Visa_status',component:Visa_statusComponent},

View File

@ -121,6 +121,9 @@ import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingru
import { QueryComponent } from './superadmin/query/query.component';
import { QueryaddComponent } from './superadmin/queryadd/queryadd.component';
import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
import { TreeVisualizerComponent } from './fnd/SiteTreeBuilder/tree-visualizer.component';
import { TreeNodeComponent } from './fnd/SiteTreeBuilder/tree-node.component';
@NgModule({
declarations: [
@ -140,46 +143,49 @@ import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
// buildercomponents
Visa_administrationComponent,
TreeNodeComponent,
TreeVisualizerComponent,
Visa_administrationComponent,
Visa_statusComponent,
Visa_statusComponent,
Cost_sheetComponent,
Cost_sheetComponent,
Visa_bundleComponent,
Visa_bundleComponent,
AgentComponent,
AgentComponent,
SupplierComponent,
SupplierComponent,
NationalityComponent,
NationalityComponent,
ReferrerComponent,
ReferrerComponent,
GenderComponent,
GenderComponent,
Visa_processingComponent,
Visa_processingComponent,
Visa_pricesComponent,
Visa_pricesComponent,
Visa_entryComponent,
Visa_entryComponent,
Visa_durationComponent,
Visa_durationComponent,
Visa_applicationComponent,
Visa_applicationComponent,

View File

@ -14,6 +14,8 @@ export const environment = {
// backendUrl:'/visaproject36808/back',
backendUrl:'http://157.66.191.31:30101/back',
nodeUrl:'http://157.66.191.31:31170',

View File

@ -11,8 +11,10 @@ export const environment = {
captchaSiteKey: '6LfrdSUpAAAAALkYDmnvdX3GLLCArgPWNHfXasjP',
// backport:'31701/visaproject36808/back',
// backendUrl:'http://localhost:9292/back',
backendUrl:'http://157.66.191.31:30101/back',
backendUrl:'http://localhost:9292/back',
nodeUrl:'http://localhost:3000',
// backendUrl:'http://157.66.191.31:30101/back',

View File

@ -3,28 +3,14 @@ const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const cors = require('cors')
const app = express();
const proxy = require('express-http-proxy');
app.use(cors({
origin: '*'
}))
//Deployment configs
app.use('/repos', createProxyMiddleware({ target: 'https://try.gitea.io/api/v1', changeOrigin: true }));
app.use('/sureconnect', createProxyMiddleware({ target: 'http://43.205.154.152:30174', changeOrigin: true }));
app.use('/sureops', createProxyMiddleware({ target: 'http://43.205.154.152:31123', changeOrigin: true }));
app.use('/entityBuilder', createProxyMiddleware({ target: 'http://43.205.154.152:30171', changeOrigin: true }));
app.use('/surechat', createProxyMiddleware({ target: 'http://43.205.154.152:30172', changeOrigin: true }));
app.use('/jobpro', createProxyMiddleware({ target: 'http://43.205.154.152:30167', changeOrigin: true }));
app.use('/Surecommunication', createProxyMiddleware({ target: 'http://43.205.154.152:30187', changeOrigin: true }));
app.use('/surejob', createProxyMiddleware({ target: 'http://43.205.154.152:30188', changeOrigin: true }));
// app.use('/jobpro', createProxyMiddleware({ target: 'http://localhost:8087', changeOrigin: true }));
// app.use('/Surecommunication', createProxyMiddleware({ target: 'http://localhost:19002', changeOrigin: true }));
// app.use('/sureops', createProxyMiddleware({ target: 'http://localhost:9090', changeOrigin: true }));
// app.use('/', createProxyMiddleware({ target: 'http://localhost:8080', changeOrigin: true }));
// app.use('/', createProxyMiddleware({ target: 'http://localhost:9190', changeOrigin: true }));
// app.listen(3000);
// console.log('Node server running on port 3000');
app.use('/llm', createProxyMiddleware({ target: 'http://157.66.191.31:30103', changeOrigin: true }));
app.listen(3000, () => {
console.log("Server started in port 3000!");
});