Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
portal-apps-manage
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
portal-apps-manage
Commits
e9de2e4f
Commit
e9de2e4f
authored
Oct 09, 2025
by
sawit
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
generateToken
parent
91bc8256
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
97 additions
and
41 deletions
+97
-41
login.component.ts
src/app/authentication/login/login.component.ts
+13
-0
home.component.ts
src/app/portal-manage/home/home.component.ts
+18
-15
auth.model.ts
src/app/portal-manage/models/auth.model.ts
+23
-0
header.component.html
src/app/shared/components/header/header.component.html
+7
-7
auth.service.ts
src/app/shared/services/auth.service.ts
+20
-4
token.service.ts
src/app/shared/services/token.service.ts
+16
-15
No files found.
src/app/authentication/login/login.component.ts
View file @
e9de2e4f
...
...
@@ -19,6 +19,7 @@ import { Validators } from 'ngx-editor';
import
{
EmployeeService
}
from
'../../portal-manage/services/employee.service'
;
import
{
EmployeeAuthService
}
from
'../../portal-manage/services/employee-auth.service'
;
import
{
JwtService
}
from
'../../portal-manage/services/jwt.service'
;
import
{
GenarateTokenModel
}
from
'../../portal-manage/models/auth.model'
;
@
Component
({
selector
:
'app-login'
,
...
...
@@ -149,6 +150,18 @@ export class LoginComponent {
this
.
tokenService
.
saveToken
(
response
.
accessToken
);
}
// Call generateToken after successful login
const
tokenModel
:
GenarateTokenModel
=
{
username
:
response
.
username
,
memberId
:
response
.
memberId
,
accessToken
:
response
.
accessToken
,
role
:
''
,
// Unknown, set to empty string
modules
:
[]
// Unknown, set to empty array
};
this
.
authService
.
generateToken
(
tokenModel
).
subscribe
(
tokenResponse
=>
{
console
.
log
(
'Token generation response:'
,
tokenResponse
);
});
// ตรวจสอบว่าเป็น JWT token หรือไม่
if
(
response
.
accessToken
&&
this
.
isJwtToken
(
response
.
accessToken
))
{
console
.
log
(
'JWT token detected, processing...'
);
...
...
src/app/portal-manage/home/home.component.ts
View file @
e9de2e4f
...
...
@@ -9,6 +9,7 @@ import { UserRoleService } from '../services/user-role.service';
import
{
EmployeeAuthService
,
Employee
}
from
'../services/employee-auth.service'
;
import
{
EmployeeFromJwt
}
from
'../models/jwt-token.model'
;
import
{
FormsModule
}
from
'@angular/forms'
;
import
{
environment
}
from
'../../../environments/environment'
;
interface
AppModule
{
id
:
string
;
...
...
@@ -27,6 +28,7 @@ interface AppModule {
export
:
boolean
;
import
:
boolean
;
};
appUrl
?:
string
;
}
interface
AppCategory
{
...
...
@@ -214,8 +216,8 @@ export class HomeComponent implements OnInit {
return
[
// แอปพลิเคชันที่เข้าถึงได้
{
id
:
'
myhr-plus
'
,
name
:
'
myhr-plus
'
,
id
:
'
MYHR
'
,
name
:
'
MYHR
'
,
displayName
:
'myHR-Plus'
,
description
:
'ระบบจัดการทรัพยากรบุคคลขั้นสูง'
,
icon
:
'./assets/images/logoallHR/myhr-plus.jpg'
,
...
...
@@ -225,8 +227,8 @@ export class HomeComponent implements OnInit {
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
},
{
id
:
'
myhr-lite
'
,
name
:
'
myhr-lite
'
,
id
:
'
MYHR-LITE
'
,
name
:
'
MYHR-LITE
'
,
displayName
:
'myHR-Lite'
,
description
:
'ระบบจัดการทรัพยากรบุคคลพื้นฐาน'
,
icon
:
'./assets/images/logoallHR/myHR-Lite-logo-new.png'
,
...
...
@@ -236,8 +238,8 @@ export class HomeComponent implements OnInit {
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
},
{
id
:
'
zeeme
'
,
name
:
'
zeeme
'
,
id
:
'
ZEESERVER
'
,
name
:
'
ZEESERVER
'
,
displayName
:
'Zeeme Plus'
,
description
:
'ระบบจัดการเวลาและลงเวลา'
,
icon
:
'./assets/images/logoallHR/zeemePlus.png'
,
...
...
@@ -247,8 +249,8 @@ export class HomeComponent implements OnInit {
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
},
{
id
:
'
myface
'
,
name
:
'
myface
'
,
id
:
'
MYFACE
'
,
name
:
'
MYFACE
'
,
displayName
:
'myFace'
,
description
:
'ระบบจัดการใบหน้าและความปลอดภัย'
,
icon
:
'./assets/images/logoallHR/logo_myface.png'
,
...
...
@@ -258,8 +260,8 @@ export class HomeComponent implements OnInit {
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
},
{
id
:
'
mylearn
'
,
name
:
'
mylearn
'
,
id
:
'
MYLEARN
'
,
name
:
'
MYLEARN
'
,
displayName
:
'myLearn'
,
description
:
'ระบบจัดการการเรียนรู้และฝึกอบรม'
,
icon
:
'./assets/images/logoallHR/mylearn-logo.png'
,
...
...
@@ -269,19 +271,20 @@ export class HomeComponent implements OnInit {
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
},
{
id
:
'
myjob
'
,
name
:
'
myjob
'
,
id
:
'
MYJOB
'
,
name
:
'
MYJOB
'
,
displayName
:
'myJob'
,
description
:
'ระบบจัดการงานและโครงการ'
,
icon
:
'./assets/images/logoallHR/logo_myjob.png'
,
path
:
'/portal-manage/myjob'
,
isVisible
:
true
,
category
:
'applications'
,
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
}
permissions
:
{
view
:
true
,
create
:
true
,
edit
:
true
,
delete
:
true
,
export
:
true
,
import
:
true
},
appUrl
:
environment
.
url
},
{
id
:
'
myskill-x
'
,
name
:
'
myskill-x
'
,
id
:
'
MYSKILL-X
'
,
name
:
'
MYSKILL-X
'
,
displayName
:
'mySkill-X'
,
description
:
'ระบบจัดการทักษะและความสามารถ'
,
icon
:
'./assets/images/logoallHR/mySkill-x.png'
,
...
...
src/app/portal-manage/models/auth.model.ts
View file @
e9de2e4f
...
...
@@ -12,6 +12,29 @@ export interface AuthModel {
company
:
CompanyModelS
}
export
interface
GenarateTokenModel
{
username
:
string
memberId
:
string
role
:
string
accessToken
:
string
modules
:
GenerateTokenModule
[]
}
export
interface
GenerateTokenModule
{
app
:
string
accessToken
:
string
refreshToken
:
string
}
export
interface
AppRefreshTokenModel
{
username
:
string
memberId
:
string
role
:
string
accessToken
:
string
refreshToken
:
string
}
export
class
AuthModel
extends
BaseModel
implements
AuthModel
{
username
:
string
password
:
string
...
...
src/app/shared/components/header/header.component.html
View file @
e9de2e4f
...
...
@@ -315,7 +315,7 @@
<div
class=
"grid grid-cols-4 gap-3 min-h-0"
>
<!-- myHR-Plus -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
myhr-plus
')"
<a
(
click
)="
checkAppToken
('
MYHR
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/myhr-plus.jpg"
alt=
"myHR-Plus"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -325,7 +325,7 @@
<!-- myHR-Lite -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
myhr-lite
')"
<a
(
click
)="
checkAppToken
('
MYHR-LITE
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/myHR-Lite-logo-new.png"
alt=
"myHR-Lite"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -335,7 +335,7 @@
<!-- Zeeme Plus -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
zeeme
')"
<a
(
click
)="
checkAppToken
('
ZEESERVER
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/zeemePlus.png"
alt=
"Zeeme Plus"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -345,7 +345,7 @@
<!-- myFace -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
myface
')"
<a
(
click
)="
checkAppToken
('
MYFACE
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/logo_myface.png"
alt=
"myFace"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -355,7 +355,7 @@
<!-- myLearn -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
mylearn
')"
<a
(
click
)="
checkAppToken
('
MYLEARN
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/mylearn-logo.png"
alt=
"myLearn"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -365,7 +365,7 @@
<!-- myJob -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
myjob
')"
<a
(
click
)="
checkAppToken
('
MYJOB
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/logo_myjob.png"
alt=
"myJob"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
@@ -375,7 +375,7 @@
<!-- mySkill-X -->
<div
class=
""
>
<a
(
click
)="
checkAppToken
('
myskill-x
')"
<a
(
click
)="
checkAppToken
('
MYSKILL-X
')"
class=
"p-3 items-center related-app block text-center rounded-sm hover:bg-gray-50 dark:hover:bg-black/20"
>
<img
src=
"./assets/images/logoallHR/mySkill-x.png"
alt=
"mySkill-X"
class=
"leading-[1.5] text-2xl !h-[1.5rem] align-middle flex justify-center mx-auto"
>
...
...
src/app/shared/services/auth.service.ts
View file @
e9de2e4f
import
{
GenarateTokenModel
}
from
'./../../portal-manage/models/auth.model'
;
import
{
Injectable
,
NgZone
}
from
'@angular/core'
;
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
LoginModel
,
ProfileModel
,
UserModel
}
from
'../user-auth.model'
;
import
{
environment
}
from
'../../../environments/environment'
;
import
{
Observable
}
from
'rxjs'
;
import
{
Observable
,
tap
}
from
'rxjs'
;
@
Injectable
({
providedIn
:
'root'
,
})
export
class
AuthService
{
apiBaseUrl
=
"/auth/company"
;
private
apiUrl
=
environment
.
jbossUrl
+
'/usapi'
;
//add
public
generatedTokenData
:
any
;
constructor
(
private
http
:
HttpClient
,
)
{
...
...
@@ -23,9 +25,9 @@ export class AuthService {
// }
login
(
credentials
:
LoginModel
):
Observable
<
UserModel
>
{
credentials
.
dbName
=
credentials
.
dbName
||
'DB'
;
credentials
.
dbcomp
=
credentials
.
dbcomp
||
'100'
;
credentials
.
lang
=
credentials
.
lang
||
'tha'
;
credentials
.
dbName
=
credentials
.
dbName
||
'DB'
;
credentials
.
dbcomp
=
credentials
.
dbcomp
||
'100'
;
credentials
.
lang
=
credentials
.
lang
||
'tha'
;
return
this
.
http
.
post
<
UserModel
>
(
`
${
this
.
apiUrl
}
/authen`
,
credentials
);
}
...
...
@@ -40,4 +42,18 @@ export class AuthService {
return
this
.
http
.
post
<
any
>
(
this
.
apiBaseUrl
+
"/register"
,
new
ProfileModel
());
}
generateToken
(
body
:
GenarateTokenModel
)
{
return
this
.
http
.
get
<
any
>
(
environment
.
url
+
"/auth/generate-token"
,).
pipe
(
tap
(
response
=>
{
this
.
generatedTokenData
=
response
;
}
))
}
postPortalRefreshToken
(
appUrl
:
string
){
return
this
.
http
.
post
<
any
>
(
appUrl
+
"/refresh-token"
,
{
"refreshToken"
:
this
.
generatedTokenData
.
refreshToken
});
}
}
src/app/shared/services/token.service.ts
View file @
e9de2e4f
...
...
@@ -8,12 +8,13 @@ import { CompanyModel } from "../../portal-manage/models/company.model";
import
{
environment
}
from
"../../../environments/environment"
;
// import jwt_decode from "jwt-decode";
const
TOKEN_KEY
=
'
auth
-token'
;
const
TOKEN_KEY
=
'
hroffice
-token'
;
const
APP_TOKEN_KEY
=
'app-token'
;
const
REFRESHTOKEN_KEY
=
'auth-refreshtoken'
;
const
USER_KEY
=
'auth-user'
;
const
USER_DATA_KEY
=
'auth-user-data'
;
const
COMPANY
=
'company'
;
const
MODULE_KEY
=
'module-token'
;
@
Injectable
({
providedIn
:
"root"
,
...
...
@@ -23,17 +24,17 @@ export class TokenService {
throw
new
Error
(
'Method not implemented.'
);
}
apptoken
:
any
=
{
"
myhr-plus
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
myhr-lite
"
:
""
,
"
zeeme
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.TzU5PKZ4jf8YeCEXA03IxLVRVmCh3AC2oTgT_KvBt6g"
,
"
myface
"
:
""
,
"
mylearn
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
myjob
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
myskill-x
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
MYHR
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
MYHR-LITE
"
:
""
,
"
ZEESERVER
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.TzU5PKZ4jf8YeCEXA03IxLVRVmCh3AC2oTgT_KvBt6g"
,
"
MYFACE
"
:
""
,
"
MYLEARN
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
MYJOB
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
"
MYSKILL-X
"
:
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiOGFhNDUzMzAtMzE0Yy0xMWU3LWJhZjMtMmQ3ZDA5ODc3NzQ0Iiwicm9sZXMiOlsiYWRtaW4iXSwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Um39_CTM01n1g4XpFyuAa3VPxOozNPnJ0mu7kxU6KUs"
,
}
dbApp
:
any
=
{
"
myhr-plus
"
:
{
"
MYHR
"
:
{
"companyId"
:
"DEMO"
,
"companyName"
:
"DEMO"
,
"serverName"
:
"192.168.30.150"
,
...
...
@@ -44,7 +45,7 @@ export class TokenService {
"status"
:
"online"
,
"dbType"
:
"PGSQL"
},
"
myhr-lite
"
:
{
"
MYHR-LITE
"
:
{
"companyId"
:
""
,
"companyName"
:
""
,
"serverName"
:
""
,
...
...
@@ -55,7 +56,7 @@ export class TokenService {
"status"
:
""
,
"dbType"
:
""
},
"
zeeme
"
:
{
"
ZEESERVER
"
:
{
"companyId"
:
""
,
"companyName"
:
""
,
"serverName"
:
""
,
...
...
@@ -66,7 +67,7 @@ export class TokenService {
"status"
:
""
,
"dbType"
:
""
},
"
myface
"
:
{
"
MYFACE
"
:
{
"companyId"
:
""
,
"companyName"
:
""
,
"serverName"
:
""
,
...
...
@@ -77,7 +78,7 @@ export class TokenService {
"status"
:
""
,
"dbType"
:
""
},
"
mylearn
"
:
{
"
MYLEARN
"
:
{
"companyId"
:
""
,
"companyName"
:
""
,
"serverName"
:
""
,
...
...
@@ -88,7 +89,7 @@ export class TokenService {
"status"
:
""
,
"dbType"
:
""
},
"
myjob
"
:
{
"
MYJOB
"
:
{
"companyId"
:
"DEMO"
,
"companyName"
:
"DEMO"
,
"databaseName"
:
"DEMOCUS"
,
...
...
@@ -99,7 +100,7 @@ export class TokenService {
"status"
:
"online"
,
"userName"
:
"myhradmin"
},
"
myskill-x
"
:
{
"
MYSKILL-X
"
:
{
"companyId"
:
"MYSKILX_UAT"
,
"companyName"
:
"MYSKILX_UAT"
,
"databaseName"
:
"MYSKILL_X_UAT"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment