Sfoglia il codice sorgente

Add SkySim assets and update API and frontend configs

Added new SkySim logo and image assets to the project. Updated CORS settings in the API to allow skysimhub domains, fixed DotnetLib reference path, and adjusted publish profile settings. Enhanced Google OAuth prompt, added a terms page, updated translations, and made various frontend improvements including new images and UI tweaks.
trunghieubui 2 settimane fa
parent
commit
d15c75d1f2
32 ha cambiato i file con 964 aggiunte e 83 eliminazioni
  1. 9 1
      EsimLao/Esim.Apis/.config/dotnet-tools.json
  2. 1 1
      EsimLao/Esim.Apis/Business/User/UserBusinessImpl.cs
  3. 1 1
      EsimLao/Esim.Apis/Esim.Apis.csproj
  4. 2 0
      EsimLao/Esim.Apis/Program.cs
  5. 2 2
      EsimLao/Esim.Apis/Properties/PublishProfiles/FolderProfile.pubxml
  6. 33 0
      EsimLao/esim-vite/SkySim/SkySim/Logo Skysim.ai
  7. 78 0
      EsimLao/esim-vite/SkySim/SkySim/Logo Skysim.svg
  8. BIN
      EsimLao/esim-vite/SkySim/SkySim/i.png
  9. BIN
      EsimLao/esim-vite/SkySim/SkySim/k.png
  10. BIN
      EsimLao/esim-vite/SkySim/SkySim/logo-skysim.png
  11. BIN
      EsimLao/esim-vite/SkySim/SkySim/m.png
  12. BIN
      EsimLao/esim-vite/SkySim/SkySim/s.png
  13. BIN
      EsimLao/esim-vite/SkySim/SkySim/text.png
  14. BIN
      EsimLao/esim-vite/SkySim/SkySim/y.png
  15. 2 2
      EsimLao/esim-vite/index.html
  16. 3 0
      EsimLao/esim-vite/src/App.tsx
  17. 14 0
      EsimLao/esim-vite/src/apis/contentApi.ts
  18. 54 42
      EsimLao/esim-vite/src/assets/img/getgo.svg
  19. 65 0
      EsimLao/esim-vite/src/assets/img/getgo1.svg
  20. BIN
      EsimLao/esim-vite/src/assets/img/logo-skysim.png
  21. BIN
      EsimLao/esim-vite/src/assets/img/logo.png
  22. BIN
      EsimLao/esim-vite/src/assets/img/logo1.png
  23. 34 10
      EsimLao/esim-vite/src/components/Footer.tsx
  24. 10 2
      EsimLao/esim-vite/src/components/Header.tsx
  25. 1 0
      EsimLao/esim-vite/src/global/constants.ts
  26. 2 2
      EsimLao/esim-vite/src/i18n/index.ts
  27. 10 7
      EsimLao/esim-vite/src/i18n/locales/en.json
  28. 10 7
      EsimLao/esim-vite/src/i18n/locales/vi.json
  29. 4 4
      EsimLao/esim-vite/src/pages/home/HomeView.tsx
  30. 1 1
      EsimLao/esim-vite/src/pages/login/LoginView.tsx
  31. 33 1
      EsimLao/esim-vite/src/pages/support/SupportView.tsx
  32. 595 0
      EsimLao/esim-vite/src/pages/terms/TermsView.tsx

+ 9 - 1
EsimLao/Esim.Apis/.config/dotnet-tools.json

@@ -1,5 +1,13 @@
 {
   "version": 1,
   "isRoot": true,
-  "tools": {}
+  "tools": {
+    "dotnet-ef": {
+      "version": "10.0.2",
+      "commands": [
+        "dotnet-ef"
+      ],
+      "rollForward": false
+    }
+  }
 }

+ 1 - 1
EsimLao/Esim.Apis/Business/User/UserBusinessImpl.cs

@@ -668,7 +668,7 @@ namespace Esim.Apis.Business
                     );
                 }
 
-                var googleUrl = $"https://accounts.google.com/o/oauth2/v2/auth?client_id={clientId}&redirect_uri={redirectUri}&response_type=code&scope=email%20profile";
+                var googleUrl = $"https://accounts.google.com/o/oauth2/v2/auth?client_id={clientId}&redirect_uri={redirectUri}&response_type=code&scope=email%20profile&prompt=select_account";
                 
                 return DotnetLib.Http.HttpResponse.BuildResponse(
                         log,

+ 1 - 1
EsimLao/Esim.Apis/Esim.Apis.csproj

@@ -28,7 +28,7 @@
   </ItemGroup>
   <ItemGroup>
     <Reference Include="DotnetLib">
-      <HintPath>..\..\..\..\lib\DotnetLib.dll</HintPath>
+      <HintPath>..\lib\DotnetLib.dll</HintPath>
     </Reference>
   </ItemGroup>
 

+ 2 - 0
EsimLao/Esim.Apis/Program.cs

@@ -46,6 +46,8 @@ builder.Services.AddCors(options =>
                 "http://localhost:4200",      // Angular development
                 "http://simgetgo.vn",        // Production domain
                 "http://simgetgo.com",     // Production www domain
+                "https://skysimhub.vn",    // Production www domain
+                "https://skysimhub.com",     // Production www domain
                 "https://simgetgo.vn",    // Production www domain
                 "https://simgetgo.com"     // Production www domain
             )

+ 2 - 2
EsimLao/Esim.Apis/Properties/PublishProfiles/FolderProfile.pubxml

@@ -2,13 +2,13 @@
 <!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
 <Project>
   <PropertyGroup>
-    <DeleteExistingFiles>true</DeleteExistingFiles>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
     <ExcludeApp_Data>false</ExcludeApp_Data>
     <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
     <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
     <LastUsedPlatform>Any CPU</LastUsedPlatform>
     <PublishProvider>FileSystem</PublishProvider>
-    <PublishUrl>D:\Code\Ex_publish\Lao\Esim\apis</PublishUrl>
+    <PublishUrl>bin\Release\net9.0\publish\</PublishUrl>
     <WebPublishMethod>FileSystem</WebPublishMethod>
     <_TargetId>Folder</_TargetId>
     <SiteUrlToLaunchAfterPublish />

File diff suppressed because it is too large
+ 33 - 0
EsimLao/esim-vite/SkySim/SkySim/Logo Skysim.ai


+ 78 - 0
EsimLao/esim-vite/SkySim/SkySim/Logo Skysim.svg

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 3006.17 1200">
+  <!-- Generator: Adobe Illustrator 29.8.3, SVG Export Plug-In . SVG Version: 2.1.1 Build 3)  -->
+  <defs>
+    <style>
+      .st0 {
+        fill: url(#linear-gradient2);
+      }
+
+      .st1 {
+        fill: #ed2024;
+      }
+
+      .st2 {
+        fill: url(#linear-gradient1);
+      }
+
+      .st3 {
+        fill: #e61e25;
+      }
+
+      .st4 {
+        fill: url(#linear-gradient);
+      }
+    </style>
+    <linearGradient id="linear-gradient" x1="2456.77" y1="855.18" x2="2951.25" y2="1129.08" gradientTransform="translate(0 1199.28) scale(1 -1)" gradientUnits="userSpaceOnUse">
+      <stop offset="0" stop-color="#ec1d24"/>
+      <stop offset="1" stop-color="#ee3728"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient1" x1="2036.44" y1="774.51" x2="2420" y2="894.85" gradientTransform="translate(0 1199.28) scale(1 -1)" gradientUnits="userSpaceOnUse">
+      <stop offset=".08" stop-color="#fff"/>
+      <stop offset=".32" stop-color="#f9beaa"/>
+      <stop offset=".56" stop-color="#f47c53"/>
+      <stop offset="1" stop-color="#af1f23"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient2" x1="2265.3" y1="816.43" x2="2455.38" y2="816.43" gradientTransform="translate(0 1199.28) scale(1 -1)" gradientUnits="userSpaceOnUse">
+      <stop offset=".05" stop-color="#fff"/>
+      <stop offset=".56" stop-color="#f47c53"/>
+      <stop offset="1" stop-color="#af1f23"/>
+    </linearGradient>
+  </defs>
+  <g>
+    <path class="st3" d="M169.34,1091.13h34.48v-91.92h-28.47v-15.94c15.3-2.55,25.86-6.16,35.54-11.53h20.82v119.39h30.31v20.69h-92.69v-20.69h.01Z"/>
+    <path class="st3" d="M285.89,1047.11h57.53v18.49h-57.53v-18.49Z"/>
+    <path class="st3" d="M365.41,1040.33c0-47.1,32.44-75.1,72.54-75.1,19.85,0,35.64,8.63,45.62,18.22l-15.01,16.46c-8.14-7.4-17.63-12.5-30.02-12.5-25.76,0-44.26,19.81-44.26,52.12s17.05,52.74,43.58,52.74c14.04,0,24.89-5.9,33.8-14.79l15.01,16.02c-12.83,13.56-29.35,20.96-49.88,20.96-39.81,0-71.38-26.5-71.38-74.13h0Z"/>
+    <path class="st3" d="M510.77,1084v-127.66h27.89v128.98c0,6.25,3.1,8.45,6,8.45,1.26,0,2.23,0,4.36-.44l3.49,18.93c-3.39,1.23-8.04,2.2-14.72,2.2-19.76,0-27.02-11.62-27.02-30.46Z"/>
+    <path class="st3" d="M573.19,970.42c0-8.54,7.36-14.35,17.24-14.35s17.24,5.81,17.24,14.35-7.36,14.35-17.24,14.35-17.24-5.99-17.24-14.35ZM576.39,1003.7h27.89v108.12h-27.89v-108.12h0Z"/>
+    <path class="st3" d="M631.98,1057.85c0-36.01,27.99-56.79,59.66-56.79,15.11,0,26.15,5.28,34.77,12.15l-13.56,16.46c-6.3-5.02-12.3-7.92-19.76-7.92-19.18,0-32.44,14.44-32.44,36.1s13.07,35.92,31.57,35.92c9.3,0,17.82-4.14,24.6-9.33l11.33,16.73c-11.14,8.98-25.28,13.29-38.84,13.29-32.44,0-57.34-20.78-57.34-56.61h.01Z"/>
+    <path class="st3" d="M751.68,956.34h27.31v97.11h.77l44.07-49.74h30.51l-40.77,44.02,44.94,64.1h-30.31l-30.6-46.93-18.6,19.46v27.47h-27.31v-155.48h-.01Z"/>
+    <path class="st3" d="M960.87,989.35h-45.71v-21.48h119.51v21.48h-45.71v122.47h-28.09v-122.47h0Z"/>
+    <path class="st3" d="M1033.65,1057.85c0-36.01,26.92-56.79,56.56-56.79s56.56,20.78,56.56,56.79-26.92,56.61-56.56,56.61-56.56-20.78-56.56-56.61ZM1118.11,1057.85c0-21.66-10.46-36.1-27.89-36.1s-27.89,14.44-27.89,36.1,10.46,35.92,27.89,35.92,27.89-14.26,27.89-35.92Z"/>
+    <path class="st3" d="M1255.78,989.35h-45.71v-21.48h119.51v21.48h-45.71v122.47h-28.09v-122.47h0Z"/>
+    <path class="st3" d="M1353.59,956.34h27.89v40.24l-1.16,20.87c9.98-8.54,21.79-16.38,38.06-16.38,25.47,0,36.61,15.67,36.61,42.97v67.79h-27.89v-64.54c0-17.78-5.62-24.48-18.5-24.48-10.46,0-17.34,4.67-27.12,13.47v75.54h-27.89v-155.48h0Z"/>
+    <path class="st3" d="M1480.85,1057.85c0-35.13,26.83-56.79,54.82-56.79,32.16,0,49.1,21.13,49.1,51.33,0,4.84-.58,9.68-1.21,12.33h-75.5c2.32,19.19,15.88,30.11,35.06,30.11,10.17,0,18.89-2.91,27.6-7.84l9.49,15.76c-11.33,6.96-25.67,11.71-40.77,11.71-32.83,0-58.59-20.96-58.59-56.61ZM1560.66,1047.46c0-16.64-8.13-26.77-24.41-26.77-13.85,0-26.05,9.42-28.47,26.77h52.88Z"/>
+    <path class="st3" d="M1646.51,967.87h28.86l13.75,72.72c2.57,15.32,5.28,30.64,7.84,45.96h.97c3.29-15.32,6.78-30.77,10.27-45.96l19.47-72.72h24.41l19.47,72.72c3.49,14.92,6.97,30.51,10.46,45.96h.97c2.57-15.45,5.08-30.9,7.65-45.96l13.75-72.72h26.92l-30.41,143.95h-34.77l-19.66-75.8c-2.61-11.18-4.94-22.19-6.97-33.1h-.97c-2.18,10.92-4.55,21.92-7.17,33.1l-19.18,75.8h-34.19l-31.48-143.95h.01Z"/>
+    <path class="st3" d="M1845.73,1057.85c0-36.01,26.92-56.79,56.56-56.79s56.56,20.78,56.56,56.79-26.92,56.61-56.56,56.61-56.56-20.78-56.56-56.61ZM1930.18,1057.85c0-21.66-10.46-36.1-27.89-36.1s-27.89,14.44-27.89,36.1,10.46,35.92,27.89,35.92,27.89-14.26,27.89-35.92Z"/>
+    <path class="st3" d="M1986.5,1003.7h22.86l2.13,19.28h.78c8.47-14.09,21.06-21.92,33.8-21.92,6.05,0,9.88.71,13.46,2.2l-4.84,22.01c-4.16-1.06-7.26-1.76-12.2-1.76-9.49,0-20.92,5.9-28.09,22.36v65.94h-27.89v-108.12h-.01Z"/>
+    <path class="st3" d="M2076.81,1084v-127.66h27.89v128.98c0,6.25,3.1,8.45,6,8.45,1.26,0,2.23,0,4.36-.44l3.49,18.93c-3.39,1.23-8.04,2.2-14.72,2.2-19.76,0-27.02-11.62-27.02-30.46Z"/>
+    <path class="st3" d="M2135.16,1057.85c0-35.22,24.31-56.79,50.36-56.79,13.46,0,21.99,4.58,31.19,11.89l-1.07-17.43v-39.18h27.89v155.48h-22.86l-2.13-11.71h-.78c-8.81,8.01-21.02,14.35-33.8,14.35-29.64,0-48.81-20.96-48.81-56.61h.01ZM2215.64,1081.36v-50.36c-8.13-6.6-16.17-8.98-24.21-8.98-15.11,0-27.6,13.03-27.6,35.57s9.88,35.92,27.02,35.92c9.2,0,16.95-3.7,24.79-12.15Z"/>
+  </g>
+  <rect class="st1" x="1925.92" y="351.5" width="103.56" height="479.79" rx="25.77" ry="25.77"/>
+  <g>
+    <path class="st1" d="M883.19,487.3c-17.87,18.98-37.46,36.97-55.04,56.28-2.99,3.28-15.69,17.34-16.82,20.1-.77,1.87-.97,3.6-.37,5.55l63.61,74.62c41.2,48.68,87.22,95.56,127.12,145.09,4.17,5.18,18.86,21.22,12.44,27.68-1.64,1.66-12.12,3.24-15.01,3.45-23.76,1.75-66.78,3.38-89.21-1.61-15.19-3.38-29.16-22.49-39.57-34.29-41.16-46.68-79.17-96.69-121.31-142.47-12.92-14.04-12.82-5.15-22.67,4.79-5.73,5.79-33.49,30-34.62,35.01-2.58,38.1,2.66,79.2-.18,116.94-1.17,15.45-7.11,21.46-22.69,22.68-12.93,1.01-53.9,1.59-64.97-1.58-9.25-2.65-11.95-8.93-12.66-17.94v-413.69c1.84-11.74,2.05-23.85,14.25-28.99,10.82-4.56,45.45-5.12,58.1-4.24,17.07,1.19,26.41,8.1,27.95,25.86,3.33,38.28-.62,85.57-1.14,124.5-.16,12.42-1.02,28.13,0,40.18.25,2.95.16,6.11,3.74,6.42,1.49-.14,4.97-2.76,6.31-3.85,14.44-11.77,29.69-32.8,42.71-46.95,31.56-34.27,63.3-68.19,95.55-101.78,15.37-16.01,27.83-36.42,50.71-42.14,16.45-4.12,68.72-5.97,83.48.78,6.54,2.99,11.03,9.89,9.33,17.08-2.46,10.41-31.32,40.02-40.11,49.61-19.35,21.12-39.29,42.05-58.94,62.92h0Z"/>
+    <path class="st1" d="M1590.54,454.2c-12.44,11.47-16.47,29.97-9.21,45.05,10.41,21.64,33.16,28.18,55.04,33.99,86.24,22.89,221.94,23.86,233.39,137.45,18.67,185.16-245.88,185.88-361.91,123.18-14.82-8.01-44.8-26.85-44.21-45.46.29-9.17,15.22-39.05,22.57-45.15,17.17-14.25,52.91,11.11,69.48,18.84,54.65,25.49,128.38,42.04,185.73,15.19,47.07-22.03,40.21-73.06-6.73-91.43-75.56-29.57-208.29-18.22-245.83-105.58-14.78-34.4-13.49-79.26,5.11-111.98,54.41-95.73,219.11-88.75,307.94-50.21,15.51,6.73,43.06,19.23,44.66,37.97,1.17,13.74-13.53,46.25-29.28,48.91-15.25,2.58-45.01-12.5-60.66-17.63-46.05-15.1-126.97-29.24-166.09,6.86h0Z"/>
+    <path class="st1" d="M485.73,460.75c-15.8,13.01-54.09-8.26-71.17-13.88-46.81-15.4-118.12-27.72-160.53,3.43-18.1,13.3-23.23,40-8.51,57.85,21.55,26.12,106.4,35.58,140.52,43.28,67.29,15.18,139.32,42.97,143.32,121.27,4.06,79.53-33.7,129.61-112.49,148.5-83.12,19.92-188.66,10.19-262.04-34.68-10.73-6.56-29.22-19.84-30.68-33.03s11.96-43.14,23.28-50.65c18.45-12.25,46.56,9.68,63.25,17.51,28.57,13.41,62.96,25.03,94.55,28.35,45.68,4.79,133.49-.88,126.99-64.55-3.23-31.64-51.31-43.68-77.01-49.7-84.46-19.77-209-23.57-216.35-134.51-8.71-131.53,138.64-161.18,243.08-144.27,27.57,4.46,103.89,24.55,119.35,47.49,8.89,13.2.8,35.43-7.4,47.51-.76,1.12-7.61,9.61-8.18,10.08h.02Z"/>
+    <path class="st1" d="M1353.8,369.86c8.81-9.13,18.6-12.94,31.02-14.88,14.82-2.31,48.81-2.42,62.74,2.15,17.38,5.7,13.61,24.76,4.66,36.76-46.25,69.81-95.58,137.74-141.45,207.79-13.29,20.29-23.3,29.69-22.8,55.37.44,22.2.15,44.24,0,66.38-.17,24.23,2.24,53.66.09,77.11-1.25,13.62-8.74,18.95-21.69,20.51-13.93,1.68-27.32.73-41.09-.03-18.26-1-34.8,2.48-37.49-21.6-3.45-50.63,4.56-107.33.03-157.24-1.27-14.01-14.89-28.48-22.43-39.82-47.54-71.52-96.27-142.25-144.13-213.55-5.82-8.5-10.08-23.16.61-29.62,12.36-7.47,55.51-6.73,70.14-4.2,29.88,5.15,36.87,23.11,52.68,45.44,31.37,44.31,61.37,89.62,90.1,135.68,5.09,6.82,12.43-7.45,15.48-11.83,13.63-19.58,25.92-40.16,39.19-59.99,18.8-28.09,39.09-62.18,59.29-88.42,1.29-1.68,3.65-4.57,5.05-6.03v.02Z"/>
+  </g>
+  <path class="st1" d="M2233.11,807.24c-.51,3.96-5.62,16.18-8.52,18.79-3.69,3.31-14.51,4.7-19.45,5.07-14.34,1.05-37.18.1-51.73-1.05-14.95-1.19-20.54-6.78-21.63-22.75v-323.08c.52-6.3,1.66-11.47,7.5-14.31,32.02-11.58,65.44-20.42,96.32-35.2,7.3-3.49,16.45-12.5,24.11-8.68l110.55,137.06c4.47,5.54,8.59,12.78,13.19,18.3,3.24,3.88,13.36,16.26,17.89,15.57l2.73-1.68c13.81-17.74,26.46-36.52,40.09-54.39,38.2-50.07,75.95-100.49,114.95-149.9,7.41-9.39,18.22-28.06,28.62-33.16,11.91-5.83,42.05-6.6,55.29-5.11,9.45,1.06,18.51,10,18.51,19.64,0,51.17.28,91.65,0,137.37l-.06,300.84c-1.36,12.04-5.54,18.17-17.41,19.42-15.24,1.61-49.01,1.58-64.22-.13-9.61-1.08-14.74-5.4-17.06-15.35l-1.35-260.53c-.33-3.73-3.08-5.43-5.32-1.88-11.91,18.63-26.79,34.8-40.2,52.05-24.48,31.5-49.27,69.04-75.45,98.22-22.46,25.03-49.92,36.99-77.03,9.97-28.99-28.89-58.73-73.99-84.96-107.08-11.9-15.02-26-34.65-38.48-48.32-1.89-2.07-3.7-4.98-6.87-4.43v254.73h-.01Z"/>
+  <path class="st4" d="M2804.61,213.96c1.36,1.46,4.41,6.77,4.54,8.66,1.34,20.13-40.05,21.62-44,38.19-.74,3.1-2.86,17.22-1.85,19.26,2.18,4.41,23.9-.34,25.79,11.14,1.5,9.11-2.08,11.69-9.11,16.08-7.05,4.41-24.01,9.78-27.62,16.69-1.26,2.4-1.58,5.75-2.09,8.46-6.92,36.42-1.07,77.47-39.54,98.68-10.13,5.59-23.42,6.75-23.95-8.14-.41-11.37,3.31-26.25,4.25-37.93,3.44-42.73,6.42-87.02,2.1-129.76-.42-4.16-1.67-18.35-5.26-20.06-5.86-2.78-16.23,2.22-21.82,4.56-41.76,17.48-83.09,43.73-125.19,61.57-13.19,10.13-9.51,33.98-14.56,48.75-6.62,8.95-35.1,29.85-41.09,11.8-4.21-12.68-5.47-31.1-8.89-44.92-2.23-9.02-2.22-13.45-9.53-20.01-14.43-12.94-31.64-23.18-45.88-36.42-9.53-8.86-15.62-14.7.35-21.83,12.87-5.75,27.04-7.23,40.85-4.59,23.5,4.49,30.17,14.76,56.69,7.17,22.44-6.42,80.4-34.87,98.29-49.43,15.89-12.93,13.82-22.87-4.91-30.79-43.09-15.08-94.58-21.97-136.62-38.53-14.74-5.81-8.66-10.61,1.99-17.47,36.9-23.8,76.45-4.03,115.9-2.29,3.48.15,8.15.38,11.5-.08,10.81-1.48,24.47-19.33,33.78-25.31,7.11-2.51,12.57-1.42,15.58,5.68,3.24,7.63-1.5,23.98,2.18,27.9,6.97,7.41,32.05-4.7,39.86-8.66,10.88-5.51,36.92-26.76,45.91-8.02,3.07,6.4-1.35,23.73,6.18,23.29,5.74-.34,34.78-24.67,41.27-29.54,34.3-25.71,58.15-46.52,102.62-53.53,26.67-4.21,49.47-3.61,32.05,29.94-22.73,43.79-89.56,73.94-128.8,102.26-9.03,6.52-15.76,11.03-16.97,23.13-.29,2.85-.49,13.24.51,15.29,1.67,3.44,8.11,1.66,11.5,2.22,4.65.76,10.75,3.1,13.99,6.58h0Z"/>
+  <path class="st2" d="M2091.92,361.74l-12.98.84c-9.35.6-16.95,7.73-18.17,17.02-2.21,16.84-4.8,42.72-2.09,56.14.7,3.44,2.45,6.59,5.03,8.96,6.14,5.66,20.93,14.87,46.79,6.25,35.54-11.85,266-89.85,296.2-117.29,0,0-202.58,60.21-240.45,60.41,0,0-13.01-5.61-8.36-15.13,0,0,7.2-3.02,23-5.58s214.2-48.55,240.45-68.53c0,0-268.09,60.17-329.43,56.92h.01Z"/>
+  <path class="st0" d="M2266.19,430.79l.25.5c1.62,3.25,5.46,4.72,8.84,3.37,25.13-10.01,123.49-51.19,180.1-104.12,0,0-140.68,71.87-184.66,88.62-4.66,1.77-6.76,7.17-4.53,11.63h0Z"/>
+  <g>
+    <path class="st1" d="M1963.84,316.07c-5.6,0-10.16-5.01-10.16-11.16v-26.93c0-6.15,4.56-11.16,10.16-11.16s10.16,5.01,10.16,11.16v26.93c0,6.15-4.56,11.16-10.16,11.16Z"/>
+    <path class="st1" d="M2019.33,316.07c-5.6,0-10.16-5.01-10.16-11.16v-65.46c0-6.15,4.56-11.16,10.16-11.16s10.16,5.01,10.16,11.16v65.46c0,6.15-4.56,11.16-10.16,11.16Z"/>
+    <path class="st1" d="M2001.42,306.11c-.07,6-5.23,9.25-10.06,9.25-3.22,0-6.03-1.4-7.71-3.87-1.04-1.36-1.71-3.06-2.04-5.27-.07-.44-.07-.88-.07-1.4v-46.12c0-1.51.28-2.97.79-4.31,1.09-2.85,3.36-4.83,5.96-5.83,2.51-.97,5.52-.94,7.92.38,1.16.64,2.21,1.52,3.06,2.6,1.53,1.92,2.41,4.45,2.24,7.02.17,17.46.13,33-.1,47.55h0Z"/>
+    <path class="st1" d="M1936.09,285.76h0c5.61,0,10.16,4.55,10.16,10.16v9.99c0,5.61-4.55,10.16-10.16,10.16h0c-5.61,0-10.16-4.55-10.16-10.16v-9.99c0-5.61,4.55-10.16,10.16-10.16Z"/>
+  </g>
+</svg>

BIN
EsimLao/esim-vite/SkySim/SkySim/i.png


BIN
EsimLao/esim-vite/SkySim/SkySim/k.png


BIN
EsimLao/esim-vite/SkySim/SkySim/logo-skysim.png


BIN
EsimLao/esim-vite/SkySim/SkySim/m.png


BIN
EsimLao/esim-vite/SkySim/SkySim/s.png


BIN
EsimLao/esim-vite/SkySim/SkySim/text.png


BIN
EsimLao/esim-vite/SkySim/SkySim/y.png


+ 2 - 2
EsimLao/esim-vite/index.html

@@ -3,9 +3,9 @@
 
 <head>
   <meta charset="UTF-8" />
-  <link rel="icon" type="image/svg+xml" href="./publish/assets/img/logo_color.png" />
+  <link rel="icon" type="image/svg+xml" href="./publish/assets/img/logo.png" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-  <title>Getgo | Stay Connected Everywhere</title>
+  <title>SkySimHub | Stay Connected Everywhere</title>
   <link rel="preconnect" href="https://fonts.googleapis.com">
   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
   <link

+ 3 - 0
EsimLao/esim-vite/src/App.tsx

@@ -20,6 +20,7 @@ import CompatibilityModal from "./components/CompatibilityModal";
 import QRCodeModal from "./components/QRCodeModal";
 import { useAppSelector } from "./hooks/useRedux";
 import ScrollToTop from "./components/ScrollToTop";
+import TermsView from "./pages/terms/TermsView";
 
 const App: React.FC = () => {
   const location = useLocation();
@@ -69,6 +70,8 @@ const App: React.FC = () => {
               <Route path="/contact" element={<ContactView />} />
               <Route path="/login" element={<LoginView />} />
               <Route path="/order-history" element={<OrderHistoryView />} />
+              <Route path="/terms" element={<TermsView />} />
+
               <Route
                 path="/order-history-detail/:id"
                 element={<OrderDetailView />}

+ 14 - 0
EsimLao/esim-vite/src/apis/contentApi.ts

@@ -54,6 +54,20 @@ class ContentApi extends BaseApi {
     });
   }
 
+  async LoadFaqGuide({
+    pageNumber,
+    pageSize,
+    categoryId = 1,
+    isFeatured = false,
+  }) {
+    return this.authPost<LoadFaqResponse>("/faq", {
+      pageNumber,
+      pageSize,
+      categoryId,
+      isFeatured,
+    });
+  }
+
   async LoadDeviceMetaData() {
     return this.authGet<LoadDeviceMetaResponse>("/device-metadata");
   }

File diff suppressed because it is too large
+ 54 - 42
EsimLao/esim-vite/src/assets/img/getgo.svg


File diff suppressed because it is too large
+ 65 - 0
EsimLao/esim-vite/src/assets/img/getgo1.svg


BIN
EsimLao/esim-vite/src/assets/img/logo-skysim.png


BIN
EsimLao/esim-vite/src/assets/img/logo.png


BIN
EsimLao/esim-vite/src/assets/img/logo1.png


+ 34 - 10
EsimLao/esim-vite/src/components/Footer.tsx

@@ -1,8 +1,14 @@
-import React from "react";
+import React, { useEffect, useState } from "react";
 import logo from "../assets/img/getgo.svg";
 import { useTranslation } from "react-i18next";
+import { getWithExpiry } from "../logic/loigicUtils";
+import { Area } from "../services/product/type";
+import { useNavigate } from "react-router-dom";
 const Footer: React.FC = () => {
   const { t } = useTranslation();
+
+  const navigate = useNavigate();
+
   return (
     <footer className="bg-white border-t border-slate-100 pt-16 pb-8">
       <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
@@ -19,7 +25,7 @@ const Footer: React.FC = () => {
               </svg> */}
               <img
                 src={logo}
-                alt="Getgo Logo"
+                alt="SkySimHub Logo"
                 className="text-[#EE0434] mr-0"
                 style={{ width: "150px" }}
               />
@@ -90,7 +96,9 @@ const Footer: React.FC = () => {
             </div>
           </div>
           <div>
-            <h3 className="text-base font-bold text-slate-900 mb-6">Getgo</h3>
+            <h3 className="text-base font-bold text-slate-900 mb-6">
+              SkySimHub
+            </h3>
             <ul className="space-y-4 text-sm text-slate-500">
               <li>
                 <a href="#" className="hover:text-[#EE0434] transition-colors">
@@ -98,15 +106,19 @@ const Footer: React.FC = () => {
                 </a>
               </li>
               <li>
-                <a href="#" className="hover:text-[#EE0434] transition-colors">
+                <a
+                  href="#"
+                  className="hover:text-[#EE0434] transition-colors"
+                  onClick={() => navigate("/terms")}
+                >
                   {t("termsService")}
                 </a>
               </li>
-              <li>
+              {/* <li>
                 <a href="#" className="hover:text-[#EE0434] transition-colors">
                   {t("privacyPolicy")}
                 </a>
-              </li>
+              </li> */}
             </ul>
           </div>
           <div>
@@ -115,17 +127,29 @@ const Footer: React.FC = () => {
             </h3>
             <ul className="space-y-4 text-sm text-slate-500">
               <li>
-                <a href="#" className="hover:text-[#EE0434] transition-colors">
+                <a
+                  href="#"
+                  className="hover:text-[#EE0434] transition-colors"
+                  onClick={() => navigate("/buy-sim")}
+                >
                   {t("chinaSim")}
                 </a>
               </li>
               <li>
-                <a href="#" className="hover:text-[#EE0434] transition-colors">
+                <a
+                  href="#"
+                  className="hover:text-[#EE0434] transition-colors"
+                  onClick={() => navigate("/buy-sim")}
+                >
                   {t("thailandSim")}
                 </a>
               </li>
               <li>
-                <a href="#" className="hover:text-[#EE0434] transition-colors">
+                <a
+                  href="#"
+                  className="hover:text-[#EE0434] transition-colors"
+                  onClick={() => navigate("/buy-sim")}
+                >
                   {t("japanSim")}
                 </a>
               </li>
@@ -151,7 +175,7 @@ const Footer: React.FC = () => {
         {/* Bottom */}
         <div className="pt-8 border-t border-slate-100 flex flex-col md:flex-row justify-between items-center space-y-4 md:space-y-0">
           <p className="text-sm text-slate-400">
-            © 2025 Getgo All rights reserved
+            © 2025 SkySimHub All rights reserved
           </p>
           <div className="bg-[#EE0434] px-4 py-2 rounded-lg flex items-center space-x-2">
             <div className="w-5 h-5 bg-white rounded-full flex items-center justify-center text-[#EE0434]">

+ 10 - 2
EsimLao/esim-vite/src/components/Header.tsx

@@ -60,7 +60,7 @@ const Header: React.FC = () => {
   const [isSearchDropdownOpen, setIsSearchDropdownOpen] = useState(false);
 
   const languages = [
-    { code: "en", label: t("english"), flag: "us" },
+    // { code: "en", label: t("english"), flag: "us" },
     { code: "vi", label: t("vietnamese"), flag: "vn" },
   ];
 
@@ -137,6 +137,14 @@ const Header: React.FC = () => {
     }
   }, []);
 
+  useEffect(() => {
+    const handleScroll = () => {
+      setIsScrolled(window.scrollY > 300);
+    };
+    window.addEventListener("scroll", handleScroll);
+    return () => window.removeEventListener("scroll", handleScroll);
+  }, []);
+
   const getAreaMutation = useMutation({
     mutationFn: async () => {
       dispatch(startLoading({}));
@@ -211,7 +219,7 @@ const Header: React.FC = () => {
                 {/* <svg className="w-8 h-8 text-[#EE0434]" viewBox="0 0 24 24" fill="currentColor">
                   <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" />
                 </svg> */}
-                <img src={logo} alt="Getgo Logo" className="w-35" />
+                <img src={logo} alt="SkySimHub Logo" className="w-35" />
                 {/* <span className="text-2xl font-bold tracking-tighter">
                   <span className="text-[#EE0434]">Infi</span>
                   <span className="text-[#333]">Gate</span>

+ 1 - 0
EsimLao/esim-vite/src/global/constants.ts

@@ -15,4 +15,5 @@ export const DataCacheKey = {
   FAQS: "faqs",
   PACKAGES: "packages",
   PAYMENT_CHANNELS: "payment_channels",
+  FAQ_GUIDES: "faq_guides",
 };

+ 2 - 2
EsimLao/esim-vite/src/i18n/index.ts

@@ -6,11 +6,11 @@ import vi from "./locales/vi.json";
 
 i18n.use(initReactI18next).init({
   resources: {
-    en: { translation: en },
+    // en: { translation: en },
     vi: { translation: vi },
   },
   lng: "vi", // default
-  fallbackLng: "en",
+  fallbackLng: "vi",
   interpolation: {
     escapeValue: false,
   },

+ 10 - 7
EsimLao/esim-vite/src/i18n/locales/en.json

@@ -10,7 +10,7 @@
   "orderSearch": "Order Tracking Search",
   "seeMore": "See more",
   "whatUs": "What our customers say about us",
-  "chooseGetgo": "Why choose Getgo",
+  "chooseGetgo": "Why choose SkySimHub",
   "fastCost": "Fast – Convenient – Reasonable Cost",
   "globalAnywhere": "Global connection, Stable Anywhere",
   "customerSupport": "24/7 Customer Support",
@@ -30,7 +30,7 @@
   "viettechLimited": "VIETTECH Global Development Company Limited",
   "taxCode": "Tax Code: 0901210362",
   "address": "218 Dao Dua 1, Vinhomes Ocean Park 2 Urban Area, Nghia Tru Commune, Hung Yen Province, Vietnam",
-  "getgoGetgo": "Getgo",
+  "getgoGetgo": "SkySimHub",
   "aboutUs": "About Us",
   "termsService": "Terms of Service",
   "privacyPolicy": "Privacy Policy",
@@ -166,8 +166,8 @@
   "appSupport": "App Support",
   "specifications": "Specifications",
   "notes": "Notes",
-  "note1": "It is recommended to install the eSIM before departure (an internet connection is required during installation), enable Data Roaming, and switch mobile data usage to the GetGo eSIM.",
-  "note2": "GetGo recommends purchasing at least 1 extra day beyond your expected usage to avoid running out of service days due to time zone differences between countries.",
+  "note1": "It is recommended to install the eSIM before departure (an internet connection is required during installation), enable Data Roaming, and switch mobile data usage to the SkySimHub eSIM.",
+  "note2": "SkySimHub recommends purchasing at least 1 extra day beyond your expected usage to avoid running out of service days due to time zone differences between countries.",
   "note3": "Each eSIM can only be activated once.",
   "note4": "The eSIM activation waiting period is 30 days from the time the order is successfully placed.",
   "note5": "Warranty policy: + 100% replacement or refund guaranteed in case of supplier-related issues + Replacement within 1 hour if issues occur during activation or usage",
@@ -184,7 +184,7 @@
   "partnershipNetwork": "Official partner of global corporations",
   "physicalSim": "Physical SIM",
   "welcomeBack": "Welcome Back!",
-  "stayConnected": "Stay connected everywhere with Getgo.",
+  "stayConnected": "Stay connected everywhere with SkySimHub.",
   "emailAddress": "Email Address",
   "login": "Login",
   "orContinueWith": "Or continue with",
@@ -222,5 +222,8 @@
   "vietnamese": "Vietnamese",
   "numberOfDays": "Number of Days",
   "verified": "Verified",
-  "highSpeed": "High Speed"
-}
+  "highSpeed": "High Speed",
+  "selectADataPackageForYourDestination": "Select a data package for your destination.",
+  "checkIfYourPhoneSupportsESIMTechnology": "Check if your phone supports eSIM technology.",
+  "scanTheQRCodeAndConnectToHighSpeedData": "Scan the QR code and connect to high-speed data."
+}

+ 10 - 7
EsimLao/esim-vite/src/i18n/locales/vi.json

@@ -10,7 +10,7 @@
   "orderSearch": "Tra cứu đơn hàng",
   "seeMore": "Xem thêm",
   "whatUs": "Khách hàng nói gì về chúng tôi",
-  "chooseGetgo": "Vì sao chọn Getgo",
+  "chooseGetgo": "Vì sao chọn SkySimHub",
   "fastCost": "Nhanh – Tiện lợi – Chi phí hợp lý",
   "globalAnywhere": "Kết nối toàn cầu, ổn định mọi nơi",
   "customerSupport": "Hỗ trợ khách hàng 24/7",
@@ -30,7 +30,7 @@
   "viettechLimited": "Công ty TNHH Phát triển toàn cầu VIETTECH",
   "taxCode": "Mã số thuế: 0901210362",
   "address": "218 Đảo Dừa 1, Khu đô thị Vinhomes Ocean Park 2, Xã Nghĩa Trụ, Tỉnh Hưng Yên, Việt Nam",
-  "getgoGetgo": "Getgo",
+  "getgoGetgo": "SkySimHub",
   "aboutUs": "Giới thiệu",
   "termsService": "Điều khoản dịch vụ",
   "privacyPolicy": "Chính sách bảo mật",
@@ -166,8 +166,8 @@
   "appSupport": "Hỗ trợ ứng dụng",
   "specifications": "Thông số kỹ thuật",
   "notes": "Ghi chú",
-  "note1": "Khuyến nghị cài đặt eSIM trước khi khởi hành (cần kết nối internet trong quá trình cài đặt), bật Dữ liệu Di động và chuyển việc sử dụng dữ liệu di động sang eSIM GetGo.",
-  "note2": "GetGo khuyến nghị mua ít nhất 1 ngày bổ sung ngoài thời gian sử dụng dự kiến của bạn để tránh hết ngày dịch vụ do sự khác biệt múi giờ giữa các quốc gia.",
+  "note1": "Khuyến nghị cài đặt eSIM trước khi khởi hành (cần kết nối internet trong quá trình cài đặt), bật Dữ liệu Di động và chuyển việc sử dụng dữ liệu di động sang eSIM SkySimHub.",
+  "note2": "SkySimHub khuyến nghị mua ít nhất 1 ngày bổ sung ngoài thời gian sử dụng dự kiến của bạn để tránh hết ngày dịch vụ do sự khác biệt múi giờ giữa các quốc gia.",
   "note3": "Mỗi eSIM chỉ có thể được kích hoạt một lần.",
   "note4": "Thời gian chờ kích hoạt eSIM là 30 ngày kể từ khi đơn hàng được đặt thành công.",
   "note5": "Chính sách bảo hành: <br />+ Đảm bảo thay thế hoặc hoàn tiền 100% trong trường hợp có sự cố liên quan đến nhà cung cấp <br />+ Thay thế trong vòng 1 giờ nếu xảy ra sự cố trong quá trình kích hoạt hoặc sử dụng",
@@ -184,7 +184,7 @@
   "partnershipNetwork": "Đối tác chính thức của các tập đoàn toàn cầu",
   "physicalSim": "SIM Vật Lý",
   "welcomeBack": "Chào mừng bạn trở lại!",
-  "stayConnected": "Giữ kết nối mọi nơi với Getgo.",
+  "stayConnected": "Giữ kết nối mọi nơi với SkySimHub.",
   "emailAddress": "Địa chỉ Email",
   "login": "Đăng nhập",
   "orContinueWith": "Hoặc tiếp tục với",
@@ -222,5 +222,8 @@
   "vietnamese": "Tiếng Việt",
   "numberOfDays": "Số ngày",
   "verified": "Đã xác thực",
-  "highSpeed": "Tốc độ cao"
-}
+  "highSpeed": "Tốc độ cao",
+  "selectADataPackageForYourDestination": "Chọn gói dữ liệu phù hợp với điểm đến của bạn.",
+  "checkIfYourPhoneSupportsESIMTechnology": "Kiểm tra xem điện thoại của bạn có hỗ trợ công nghệ eSIM không.",
+  "scanTheQRCodeAndConnectToHighSpeedData": "Quét mã QR và kết nối với dữ liệu tốc độ cao."
+}

+ 4 - 4
EsimLao/esim-vite/src/pages/home/HomeView.tsx

@@ -87,17 +87,17 @@ const HomeView: React.FC = () => {
     {
       number: "1",
       title: t("compatibleDevice"),
-      description: "Check if your phone supports eSIM technology.",
+      description: t("checkIfYourPhoneSupportsESIMTechnology"),
     },
     {
       number: "2",
       title: t("pickPlan"),
-      description: "Select a data package for your destination.",
+      description: t("selectADataPackageForYourDestination"),
     },
     {
       number: "3",
       title: t("instantActivation"),
-      description: "Scan the QR code and connect to high-speed data.",
+      description: t("scanTheQRCodeAndConnectToHighSpeedData"),
     },
   ];
 
@@ -256,7 +256,7 @@ const HomeView: React.FC = () => {
       <section className="py-12 md:py-20 bg-white px-4">
         <div className="max-w-7xl mx-auto space-y-10 md:space-y-16">
           <h2 className="text-3xl md:text-6xl font-black text-center tracking-tight text-slate-900">
-            Getgo <span className="text-[#EE0434]">{t("getgoWith")}</span>
+            SkySimHub <span className="text-[#EE0434]">{t("getgoWith")}</span>
           </h2>
 
           <div className="space-y-8 md:space-y-12 max-w-5xl mx-auto">

+ 1 - 1
EsimLao/esim-vite/src/pages/login/LoginView.tsx

@@ -216,7 +216,7 @@ const LoginView: React.FC = () => {
                     strokeLinejoin="round"
                   />
                 </svg> */}
-                <img src={logoApp} alt="Getgo Logo" />
+                <img src={logoApp} alt="SkySimHub Logo" />
               </div>
             </div>
             <h1 className="text-3xl md:text-4xl lg:text-5xl font-black text-slate-900 tracking-tight">

+ 33 - 1
EsimLao/esim-vite/src/pages/support/SupportView.tsx

@@ -1,9 +1,41 @@
-import React, { useState } from "react";
+import { contentApi } from "../../apis/contentApi";
+import { startLoading, stopLoading } from "../../features/loading/loadingSlice";
+import { DataCacheKey, staleTime } from "../../global/constants";
+import { Faq } from "../../services/content/types";
+import { useQuery } from "@tanstack/react-query";
+import React, { useState, useEffect } from "react";
 import { useTranslation } from "react-i18next";
+import { useDispatch } from "react-redux";
 import { Link } from "react-router-dom";
 
 const SupportView: React.FC = () => {
   const { t } = useTranslation();
+  const dispatch = useDispatch();
+
+  const { data: loadFaqsData = [] } = useQuery<Faq[]>({
+    queryKey: [DataCacheKey.FAQ_GUIDES],
+    queryFn: async (): Promise<Faq[]> => {
+      try {
+        dispatch(startLoading({}));
+        const res = await contentApi.LoadFaqGuide({
+          pageNumber: 0,
+          pageSize: 10,
+        });
+        return res.data.faqs as Faq[];
+      } catch (error) {
+        console.error(error);
+        return []; // 🔴 bắt buộc
+      } finally {
+        dispatch(stopLoading());
+      }
+    },
+    staleTime: staleTime,
+  });
+
+  useEffect(() => {
+    console.log("FAQ Guides Data:", loadFaqsData);
+  }, [loadFaqsData]);
+
   const [activeItem, setActiveItem] = useState(t("travelEsimSim"));
   const categories = [
     {

+ 595 - 0
EsimLao/esim-vite/src/pages/terms/TermsView.tsx

@@ -0,0 +1,595 @@
+import React from "react";
+import { useTranslation } from "react-i18next";
+
+const TermsView = () => {
+  const { t } = useTranslation();
+
+  const sections = [
+    { id: "terms", title: "I. Điều khoản dịch vụ" },
+    { id: "privacy", title: "II. Chính sách bảo mật" },
+    { id: "payment", title: "III. Chính sách thanh toán" },
+    { id: "delivery", title: "IV. Chính sách giao hàng" },
+    { id: "refund", title: "V. Chính sách đổi trả và hoàn tiền" },
+    { id: "contact", title: "VI. Liên hệ" },
+  ];
+
+  const scrollToSection = (id: string) => {
+    const element = document.getElementById(id);
+    if (element) {
+      element.scrollIntoView({ behavior: "smooth", block: "start" });
+    }
+  };
+
+  return (
+    <div className="bg-[#fcfdfe] min-h-screen">
+      <div className="max-w-7xl mx-auto px-4 py-4 md:py-6 border-b border-slate-50">
+        <nav className="flex items-center space-x-2 text-xs md:text-sm text-slate-500 font-medium">
+          <button
+            onClick={() => {}}
+            className="hover:text-[#EE0434] text-[18px]"
+          >
+            {t("home")}
+          </button>
+          <svg
+            className="w-3 h-3"
+            fill="none"
+            stroke="currentColor"
+            viewBox="0 0 24 24"
+          >
+            <path
+              d="M9 5l7 7-7 7"
+              strokeWidth={2.5}
+              strokeLinecap="round"
+              strokeLinejoin="round"
+            />
+          </svg>
+          <span className="text-slate-900 font-bold text-[18px]">
+            Điều khoản & Chính sách
+          </span>
+        </nav>
+      </div>
+
+      <div className="max-w-7xl mx-auto px-4 py-12">
+        <div className="grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12">
+          {/* Sidebar Navigation */}
+          <div className="lg:col-span-3">
+            <div className="sticky top-24 bg-white rounded-2xl border border-slate-100 shadow-sm overflow-hidden p-6">
+              <h3 className="font-black text-slate-900 text-lg mb-4 px-2">
+                Nội dung
+              </h3>
+              <div className="flex flex-col space-y-1">
+                {sections.map((section) => (
+                  <button
+                    key={section.id}
+                    onClick={() => scrollToSection(section.id)}
+                    className="text-left px-3 py-2 rounded-lg text-sm font-bold text-slate-500 hover:text-[#EE0434] hover:bg-slate-50 transition-colors"
+                  >
+                    {section.title}
+                  </button>
+                ))}
+              </div>
+            </div>
+          </div>
+
+          {/* Main Content */}
+          <div className="lg:col-span-9 space-y-12">
+            {/* Section I */}
+            <section
+              id="terms"
+              className="bg-white rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                I. ĐIỀU KHOẢN DỊCH VỤ
+              </h2>
+              <div className="prose prose-slate max-w-none text-slate-600 leading-relaxed font-medium">
+                <p>
+                  Phần Điều khoản dịch vụ này đưa ra các điều khoản điều chỉnh
+                  dịch vụ giữa SkySim eSIM và khách hàng. Bằng việc đăng ký mua
+                  eSIM du lịch tại SkySim, Quý khách đồng ý rằng các Điều khoản
+                  dịch vụ này cấu thành hợp đồng hoàn chỉnh giữa Quý khách hàng
+                  và SkySim (sau đây gọi chung là “Chúng tôi”, “Công ty”).
+                </p>
+                <p className="font-bold text-slate-900 my-4 uppercase">
+                  TRƯỚC KHI NHẤP CHỌN NÚT “THANH TOÁN”, VUI LÒNG ĐỌC KỸ CÁC ĐIỀU
+                  KHOẢN SỬ DỤNG DỊCH VỤ DƯỚI ĐÂY.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  1. Bản chất dịch vụ
+                </h3>
+                <p>
+                  SkySim cung cấp các gói eSIM du lịch Việt Nam và quốc tế (sau
+                  đây gọi tắt là “eSIM”) tới du khách, để thực hiện sứ mệnh giúp
+                  Quý khách kết nối internet mọi lúc mọi nơi trên chặng đường du
+                  lịch của mình.
+                </p>
+                <p>
+                  eSIM được cung cấp dưới hình thức một mã QR, chứ không phải là
+                  một thẻ SIM vật lý. Và eSIM chỉ tương thích với một số thiết
+                  bị.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  2. Giá eSIM
+                </h3>
+                <p>
+                  Giá eSIM sẽ khác nhau, phụ thuộc và quốc gia cũng như loại gói
+                  bạn lựa chọn.
+                </p>
+                <p>
+                  Mức giá eSIM được công bố rõ ràng trên website của SkySim, kèm
+                  theo thông tin mô tả chi tiết eSIM tương ứng.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  3. Thanh toán
+                </h3>
+                <p>
+                  Trong trường hợp có tranh chấp về Hóa đơn, Quý khách vui lòng
+                  gửi văn bản thông báo đến SkySim ít nhất 7 ngày trước ngày hạn
+                  thanh toán hóa đơn có tranh chấp, trong đó có nêu rõ các hạng
+                  mục bị tranh chấp cũng như mô tả chi tiết của từng hạng mục.
+                </p>
+                <p>
+                  Mọi khoản tiền không bị tranh chấp hoặc đã được tòa án đưa ra
+                  phán quyết cuối cùng đều phải được chấp nhận và phải được
+                  thanh toán cho SkySim trong thời hạn 7 ngày làm việc, cho dù
+                  có các hạng mục tranh chấp khác chưa được xử lý. SkySim sẽ cố
+                  gắng giải quyết tất cả các tranh chấp đó một cách nhanh chóng
+                  và thiện chí.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  4. Hủy và hoàn tiền
+                </h3>
+                <p>
+                  Nếu vì bất kỳ lý do gì mà Quý khách cần hủy đơn đặt hàng của
+                  mình, Quý khách có thể hủy trước thời điểm thực hiện thanh
+                  toán hoặc trước khi mã QR eSIM được gửi tới email của Quý
+                  khách mà không bị phạt.
+                </p>
+                <p>
+                  Sau khi mã QR eSIM đã được gửi tới email của Quý khách, SkySim
+                  không chấp nhận hủy đơn đặt hàng dưới mọi hình thức.
+                </p>
+                <p>
+                  SkySim chỉ thực hiện hoàn tiền nếu eSIM có vấn đề mà SkySim
+                  không thể hỗ trợ quý khách khắc phục.
+                </p>
+                <p>
+                  Do đó, để đảm bảo các quyền lợi của mình, Quý khách vui lòng
+                  liên hệ SkySim nếu gặp sự cố trong quá trình sử dụng eSIM du
+                  lịch do SkySim cung cấp.
+                </p>
+                <p>
+                  Khoản tiền hoàn lại sẽ được thực hiện giống như phương thức
+                  thanh toán được sử dụng để mua hàng (ví dụ: thẻ thanh toán nội
+                  địa, thẻ thanh toán quốc tế, chuyển khoản ngân hàng). Quá
+                  trình hoàn tiền có thể mất tối đa 7 ngày làm việc. SkySim sẽ
+                  không chịu các khoản phí ngân hàng (nếu có) phát sinh trong
+                  quá trình hoàn tiền cho Quý khách.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  5. Toàn bộ Thỏa thuận
+                </h3>
+                <p>
+                  Thỏa thuận này cùng với Tuyên bố về quyền riêng tư cấu thành
+                  toàn bộ thỏa thuận giữa Quý khách và SkySim và thay thế bất kỳ
+                  và tất cả các thỏa thuận hoặc tuyên bố trước đó liên quan đến
+                  SkySim. Việc không thực thi bất kỳ điều khoản nào của Thỏa
+                  thuận này sẽ không được hiểu là từ bỏ điều khoản đó cũng như
+                  quyền thực thi điều khoản đó.
+                </p>
+                <p>
+                  Mọi từ bỏ, sửa đổi hoặc bổ sung thỏa thuận này chỉ có hiệu lực
+                  khi được thực hiện bằng văn bản và có chữ ký của hai bên. Thỏa
+                  thuận này được điều chỉnh theo luật pháp Việt Nam.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  6. Liên hệ chúng tôi
+                </h3>
+                <p>
+                  Nếu Quý khách có bất kỳ câu hỏi nào về Điều khoản sử dụng của
+                  chúng tôi, vui lòng liên hệ với chúng tôi tại:
+                </p>
+                <ul className="list-none space-y-2 mt-2">
+                  <li>
+                    <strong>Zalo/Whatsapp:</strong> +84336548007
+                  </li>
+                  <li>
+                    <strong>Email:</strong> klinhnguyen@viettech.asia
+                  </li>
+                </ul>
+                <p className="mt-4">
+                  Quý khách cũng có thể liên hệ với chúng tôi qua đường bưu điện
+                  hoặc trực tiếp tại Tầng 6, Tòa Nhà Hải Ngân, Thịnh Liệt, Hà
+                  Nội.
+                </p>
+              </div>
+            </section>
+
+            {/* Section II */}
+            <section
+              id="privacy"
+              className="bg-white rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                II. CHÍNH SÁCH BẢO MẬT
+              </h2>
+              <div className="prose prose-slate max-w-none text-slate-600 leading-relaxed font-medium">
+                <p>
+                  Chúng tôi tôn trọng quyền riêng tư và sự bảo mật thông tin của
+                  mọi Quý khách hàng
+                </p>
+                <p>
+                  Thông qua việc xây dựng Chính sách này, từ phía SkySim, chúng
+                  tôi cam kết bảo vệ và giữ gìn quyền riêng tư của người dùng và
+                  khách hàng của chúng tôi, đảm bảo tính bảo mật của thông tin
+                  người dùng và khách hàng cung cấp. Bằng cách đặt mua eSIM du
+                  lịch với SkySim, Quý khách đồng ý chấp nhận các điều kiện sau
+                  trong tuyên bố về bảo mật thông tin của chúng tôi.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  1. Mục đích thu thập thông tin
+                </h3>
+                <p>
+                  Chúng tôi sử dụng thông tin cá nhân để phục vụ nhiều mục đích
+                  kinh doanh, chẳng hạn như để:
+                </p>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>
+                    Hoàn thành các giao dịch và lập hóa đơn cho các sản phẩm và
+                    dịch vụ;
+                  </li>
+                  <li>
+                    Đáp ứng các yêu cầu của Quý khách về dịch vụ hoặc hỗ trợ; dự
+                    đoán và giải quyết các vấn đề thực tế và tiềm ẩn với các sản
+                    phẩm và dịch vụ của chúng tôi;
+                  </li>
+                  <li>Tạo và cải thiện sản phẩm và dịch vụ;</li>
+                  <li>Đề xuất các sản phẩm hoặc dịch vụ bổ sung;</li>
+                  <li>
+                    Đưa ra các quyết định kinh doanh nội bộ về các ưu đãi hiện
+                    tại và tương lai;
+                  </li>
+                  <li>
+                    Cung cấp dịch vụ cá nhân hóa và trải nghiệm người dùng;
+                  </li>
+                  <li>Bảo vệ quyền và tài sản của chúng tôi; và</li>
+                  <li>
+                    Liên hệ với Quý khách về các dịch vụ khác do SkySim cung cấp
+                  </li>
+                </ul>
+                <p className="mt-2">
+                  Mọi thông tin Quý khách cung cấp đều được đảm bảo hoàn toàn
+                  bảo mật và sẽ được bảo vệ khỏi việc sử dụng trái phép. Thông
+                  tin cá nhân của Quý khách không bao giờ được tiết lộ cho bên
+                  thứ ba trừ khi chúng tôi được Quý khách cho phép.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  2. Thông tin thu thập
+                </h3>
+                <p>
+                  Chúng tôi thực hiện các biện pháp để đảm bảo rằng thông tin
+                  Quý khách cung cấp được ghi lại một cách chính xác và đầy đủ.
+                  Chúng tôi giúp Quý khách sửa đổi thông tin mình cung cấp khi
+                  thích hợp.
+                </p>
+
+                <h4 className="text-lg font-bold text-slate-800 mt-6 mb-2">
+                  a. Thông tin Cá nhân được Thu thập trên Trang web này từ/về
+                  Khách hàng
+                </h4>
+                <p>
+                  Chúng tôi thu thập thông tin cá nhân của khách hàng khi tiến
+                  hàng đặt hàng trên website:
+                </p>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>Họ tên</li>
+                  <li>Địa chỉ email</li>
+                  <li>Số điện thoại</li>
+                  <li>Địa chỉ</li>
+                </ul>
+
+                <h4 className="text-lg font-bold text-slate-800 mt-6 mb-2">
+                  b. Dữ liệu không thể nhận dạng cá nhân
+                </h4>
+                <p>
+                  Chúng tôi thu thập và lưu trữ trong nhật ký máy chủ của chúng
+                  tôi thông tin không thể nhận dạng cá nhân, bao gồm nhưng không
+                  giới hạn ở các thông tin như loại trình duyệt, địa chỉ IP, hệ
+                  điều hành, ngày và thời gian truy cập...
+                </p>
+                <p>
+                  Chúng tôi cũng sử dụng Google Analytics để ghi lại dữ liệu
+                  không thể nhận dạng cá nhân.
+                </p>
+
+                <h4 className="text-lg font-bold text-slate-800 mt-6 mb-2">
+                  c. Giao dịch tài chính
+                </h4>
+                <p>
+                  Các giao dịch thẻ tín dụng được xử lý thông qua một trong
+                  những công ty xử lý thẻ tín dụng lớn của bên thứ ba. Tất cả
+                  thông tin của Quý khách được mã hóa và chỉ được sử dụng để
+                  hoàn thành các giao dịch thích hợp.
+                </p>
+
+                <h4 className="text-lg font-bold text-slate-800 mt-6 mb-2">
+                  d. Cookies
+                </h4>
+                <p>
+                  SkySim sử dụng cookie để nhận ra khách hàng của chúng tôi khi
+                  khách hàng truy cập trang web của chúng tôi. Điều đó giúp
+                  chúng tôi tùy chỉnh trải nghiệm của khách hàng trên trang web
+                  của mình.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  3. Thời gian lưu trữ thông tin
+                </h3>
+                <p>
+                  Dữ liệu cá nhân của Khách hàng sẽ được lưu trữ cho đến khi có
+                  yêu cầu hủy bỏ. Còn lại trong mọi trường hợp thông tin cá nhân
+                  của khách hàng sẽ được bảo mật trên máy chủ của SkySim.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  4. Những người hoặc tổ chức có thể được tiếp cận với thông tin
+                  đó
+                </h3>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>
+                    Đối với nhân viên công ty sẽ có các bộ phận chuyên trách để
+                    phục vụ việc chăm sóc khách hàng trong quá trình sử dụng sản
+                    phẩm.
+                  </li>
+                  <li>
+                    Các chương trình có tính liên kết, đồng thực hiện, thuê
+                    ngoài cho các mục đích được nêu tại Mục 1 và luôn áp dụng
+                    các yêu cầu bảo mật thông tin cá nhân.
+                  </li>
+                  <li>
+                    Yêu cầu pháp lý: Chúng tôi có thể tiết lộ các thông tin cá
+                    nhân nếu điều đó do luật pháp yêu cầu.
+                  </li>
+                  <li>Chuyển giao kinh doanh (nếu có).</li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  5. Địa chỉ của đơn vị thu thập và quản lý thông tin
+                </h3>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>
+                    <strong>Tên doanh nghiệp:</strong> CÔNG TY CỔ PHẦN GIẢI PHÁP
+                    CÔNG NGHỆ WELLZONE
+                  </li>
+                  <li>
+                    <strong>Giấy chứng nhận ĐKKD:</strong> 0109310641 do Phòng
+                    Đăng ký kinh doanh – Sở Kế hoạch và Đầu tư Hà Nội cấp lần
+                    đầu ngày 17/08/2020
+                  </li>
+                  <li>
+                    <strong>Trụ sở chính:</strong> Tầng 10, 83B Lý Thường Kiệt,
+                    Phường Cửa Nam, Thành phố Hà Nội
+                  </li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  6. Phương thức và công cụ để người dùng tiếp cận và chỉnh sửa
+                  dữ liệu
+                </h3>
+                <p>
+                  Nếu quý khách có bất cứ về yêu cầu nào về việc tiếp cận và
+                  chỉnh sửa thông tin cá nhân đã cung cấp, quý khách có thể:
+                </p>
+                <ul className="list-none space-y-1 mt-2">
+                  <li>
+                    <strong>Zalo/Whatsapp:</strong> +84336548007
+                  </li>
+                  <li>
+                    <strong>Email:</strong> klinhnguyen@viettech.asia
+                  </li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  7. Cơ chế tiếp nhận và giải quyết khiếu nại
+                </h3>
+                <p>
+                  SkySim hiểu rằng quyền lợi của quý khách trong việc bảo vệ
+                  thông tin cá nhân cũng chính là trách nhiệm của chúng tôi nên
+                  trong bất kỳ trường hợp có thắc mắc, góp ý nào liên quan đến
+                  chính sách bảo mật của SkySim, vui lòng liên hệ qua số hotline
+                  +84336548007 hoặc email klinhnguyen@viettech.asia.
+                </p>
+              </div>
+            </section>
+
+            {/* Section III */}
+            <section
+              id="payment"
+              className="bg-white rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                III. CHÍNH SÁCH THANH TOÁN
+              </h2>
+              <div className="prose prose-slate max-w-none text-slate-600 leading-relaxed font-medium">
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  1. Hướng dẫn đặt mua eSIM
+                </h3>
+                <p>
+                  Quý khách có thể mua online trực tiếp tại SkySim theo 3 bước
+                  sau:
+                </p>
+                <ul className="list-none mt-2 space-y-2">
+                  <li>
+                    ► <strong>Bước 1:</strong> Truy cập https://skysimhub.vn/,
+                    và chọn quốc gia cần mua eSIM
+                  </li>
+                  <li>
+                    ► <strong>Bước 2:</strong> Chọn loại eSIM phù hợp và ấn chọn
+                    Mua hàng
+                  </li>
+                  <li>
+                    ► <strong>Bước 3:</strong> Thanh toán, và nhận mã QR eSIM
+                    qua email kèm theo hướng dẫn cài đặt chi tiết.
+                  </li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  2. Thông tin thanh toán
+                </h3>
+                <p>
+                  Quý khách có thanh toán trực tiếp tại văn phòng SkySim hoặc
+                  thanh toán online.
+                </p>
+              </div>
+            </section>
+
+            {/* Section IV */}
+            <section
+              id="delivery"
+              className="bg-white rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                IV. CHÍNH SÁCH GIAO HÀNG
+              </h2>
+              <div className="prose prose-slate max-w-none text-slate-600 leading-relaxed font-medium">
+                <p>
+                  Với sản phẩm eSIM của SkySim, sau khi khách hàng đặt hàng, và
+                  thanh toán chuyển khoản thành công, SkySim sẽ gửi esim tới
+                  khách hàng qua email đã đăng ký trễ nhất là 2 giờ sau khi đặt
+                  hàng.
+                </p>
+                <p>
+                  Trường hợp phát sinh chậm trễ trong việc giao hàng hoặc cung
+                  ứng dịch vụ, SkySim sẽ có thông tin kịp thời cho khách hàng và
+                  tạo cơ hội để khách hàng có thể hủy hợp đồng nếu muốn.
+                </p>
+                <p>
+                  Do eSIM được gửi qua email, Quý khách vui lòng cung cấp đúng
+                  email nhận eSIM, để đảm bảo nhận được eSIM kịp thời. Trong
+                  trường hợp quý khách không nhận được bất kỳ email nào từ
+                  SkySim trong vòng 15 phút sau khi đặt hàng, Quý khách vui lòng
+                  liên hệ với bộ phận chăm sóc khách hàng của SkySim theo email
+                  klinhnguyen@viettech.asia (hoặc Zalo: +84336548007) để được hỗ
+                  trợ kịp thời.
+                </p>
+              </div>
+            </section>
+
+            {/* Section V */}
+            <section
+              id="refund"
+              className="bg-white rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                V. CHÍNH SÁCH ĐỔI TRẢ VÀ HOÀN TIỀN
+              </h2>
+              <div className="prose prose-slate max-w-none text-slate-600 leading-relaxed font-medium">
+                <p>
+                  Để đảm bảo quyền lợi và tạo sự yên tâm cho khách hàng khi mua
+                  esim du lịch tại SkySim, chúng tôi đưa ra các chính sách “Đổi
+                  – Trả” khi khách hàng nhận không đúng sản phẩm đã đặt mua hoặc
+                  phát sinh do lỗi của SkySim.
+                </p>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  1. Chính sách đổi hàng
+                </h3>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>
+                    Nếu khách hàng nhận esim không đúng chủng loại đã đặt,
+                    SkySim cam kết sẽ hỗ trợ Quý khách đổi lại esim trong thời
+                    gian 01 ngày.
+                  </li>
+                  <li>
+                    Trong trường hợp đã mua esim thành công, nếu muốn đổi sang
+                    loại eSIM khác, Quý khách vui lòng liên hệ lại với công ty
+                    theo số hotline (hoặc Zalo: +84336548007), nếu được sự đồng
+                    ý khách hàng có thể đổi lại số sim khác.
+                  </li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  2. Chính sách hoàn trả
+                </h3>
+                <p>
+                  Khách hàng sẽ được trả lại eSIM và hoàn lại tiền nếu trong quá
+                  trình mua bán phát sinh các vấn đề sau:
+                </p>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>Không đúng loại eSIM đã đặt mua.</li>
+                  <li>
+                    Phát sinh khiếu nại, tranh chấp hoặc nguyên nhân từ phía
+                    SkySim.
+                  </li>
+                  <li>
+                    Khách hàng đã thanh toán nhưng SkySim không thể cung cấp
+                    eSIM đã yêu cầu, số tiền khách hàng thanh toán sẽ được hoàn
+                    trả 100% trong thời gian sớm nhất.
+                  </li>
+                  <li>
+                    Thời gian xử lý hoàn tiền: tối đa trong vòng 7 ngày làm
+                    việc, ngay sau khi chúng tôi xác nhận sự cố. Lưu ý, phí vận
+                    chuyển sẽ không được hoàn lại.
+                  </li>
+                </ul>
+
+                <h3 className="text-xl font-bold text-slate-900 mt-8 mb-4">
+                  3. Chính sách bảo hành và đổi eSim
+                </h3>
+                <ul className="list-disc pl-5 mt-2 space-y-1">
+                  <li>
+                    <strong>Thời gian bảo hành eSim:</strong> 15 ngày kể từ ngày
+                    đặt mua thành công. Áp dụng cho trường hợp eSim bị lỗi không
+                    cài đặt được hoặc đang sử dụng bị lỗi.
+                  </li>
+                  <li>
+                    <strong>Chính sách cấp lại eSim:</strong> Trường hợp điện
+                    thoại bị lỗi hoặc bị mất, Quý khách vui lòng liên hệ với bộ
+                    phận chăm sóc khách hàng của SkySim theo email
+                    klinhnguyen@viettech.asia (hoặc Zalo/Whatsapp: +84336548007)
+                    để được hỗ trợ kịp thời. Phí cấp lại eSim là: 25.000VNĐ.
+                  </li>
+                  <li>
+                    <strong>Thời gian chờ kích hoạt eSim:</strong> 15 ngày kể từ
+                    ngày mua eSim thành công.
+                  </li>
+                </ul>
+              </div>
+            </section>
+
+            {/* Section VI */}
+            <section
+              id="contact"
+              className="rounded-3xl p-8 md:p-12 shadow-sm border border-slate-100"
+            >
+              <h2 className="text-3xl font-black text-[#EE0434] mb-8 border-b border-slate-100 pb-4">
+                VI. LIÊN HỆ
+              </h2>
+              <div className="space-y-4 text-lg">
+                <p className="flex items-center space-x-3">
+                  <span className="font-bold">Zalo/Whatsapp:</span>
+                  <span className="text-[#EE0434] font-black">
+                    +84336548007
+                  </span>
+                </p>
+                <p className="flex items-center space-x-3">
+                  <span className="font-bold">Email:</span>
+                  <span>klinhnguyen@viettech.asia</span>
+                </p>
+              </div>
+            </section>
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default TermsView;

Some files were not shown because too many files changed in this diff