GameHome.cshtml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. @model LotteryWebApp.Models.HomeIndex_ViewModel
  2. @{
  3. ViewData["Title"] = "Millions - Game Home";
  4. Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
  5. }
  6. @using LotteryWebApp.Languages;
  7. @using LotteryWebApp.Controllers;
  8. @using LotteryWebApp.Common;
  9. @functions {
  10. public string FormatMoney(string amount) {
  11. if (string.IsNullOrEmpty(amount)) return "0";
  12. var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
  13. if (long.TryParse(clean, out long val)) {
  14. return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
  15. }
  16. return amount;
  17. }
  18. }
  19. @section Styles {
  20. <link rel="preconnect" href="https://fonts.googleapis.com">
  21. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  22. <link href="https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800&family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&display=swap" rel="stylesheet">
  23. <link rel="stylesheet" href="/Millions/css/all.min.css"/>
  24. }
  25. <div class="main-content h-dvh w-full max-w-[430px] mx-auto bg-[#f5f7fb] relative overflow-hidden font-bricolage">
  26. <!-- Scrollable content area -->
  27. <div class="absolute inset-x-0 top-0 bottom-[88px] overflow-y-auto flex flex-col">
  28. <!-- Top section with header + cards -->
  29. <div class="relative">
  30. <!-- Header gradient background -->
  31. <div class="header-bg relative h-[160px] rounded-b-[40px] overflow-hidden">
  32. <!-- Top bar -->
  33. <div class="flex items-center justify-between px-3 pt-3 relative z-10">
  34. <button onclick="location.href=(subDomain + '@Url.Action(\"Index\", \"Home\", new { area = \"LotteryV2\" })')" class="js-back w-6 h-6 flex items-center justify-center">
  35. <img src="/Millions/assets/icons/arrow-left.svg" alt="Back" class="w-6 h-6"/>
  36. </button>
  37. <button class="flex items-center gap-2 bg-white/15 rounded-full px-3 py-1 text-white text-sm">
  38. <span>🏴󠁧󠁢󠁥󠁮󠁧󠁿 English</span>
  39. <img src="/Millions/assets/icons/chevron-down.svg" alt="" class="w-2 h-2"/>
  40. </button>
  41. </div>
  42. <!-- User profile -->
  43. <div class="flex items-center gap-4 px-4 -mt-2">
  44. <div class="w-[84px] h-[84px] rounded-full overflow-hidden bg-white/20 border-[3px] border-white shrink-0">
  45. <img src="/Millions/assets/images/avatar.png" alt="Avatar" class="w-full h-full object-cover"/>
  46. </div>
  47. <div class="flex-1 min-w-0">
  48. <p class="text-white text-base font-semibold leading-tight">@(Model?.profile?.users ?? "User")</p>
  49. <div class="flex items-center gap-1 mt-1">
  50. <span class="text-3xl font-condensed text-gold-gradient leading-none">@FormatMoney(Model?.userStatus?.bet_coin)</span>
  51. <img src="/Millions/assets/icons/coin.png" alt="" class="w-5 h-5"/>
  52. <span class="text-white text-sm">@Lang.millions_htg</span>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <!-- Floating info card -->
  58. <div class="absolute left-5 right-5 -bottom-[52px] bg-white rounded-2xl shadow-md flex items-center h-20 px-4">
  59. <div class="flex items-center gap-2 flex-1">
  60. <img src="/Millions/assets/icons/calendar.png" alt="" class="w-6 h-6"/>
  61. <div>
  62. <p class="text-xs text-[#797979]">@Lang.next_round</p>
  63. <p class="text-xs font-bold text-black" id="draw-date">Friday, Mar 20, 2026</p>
  64. </div>
  65. </div>
  66. <div class="w-px h-12 bg-gray-200"></div>
  67. <div class="flex items-center gap-2 flex-1 pl-4">
  68. <img src="/Millions/assets/icons/money-bag.png" alt="" class="w-6 h-[34px] object-contain"/>
  69. <div>
  70. <p class="text-xs text-[#797979]">@Lang.jackpot_prize</p>
  71. <p class="leading-none ">
  72. <span class="text-base font-extrabold text-[#002bff]">30.000.000</span><span class="text-[10.32px] font-extrabold text-black align-top">@Lang.millions_htg</span>
  73. </p>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. <!-- Result section -->
  79. <div class="px-4 mt-20">
  80. <div class="result-box rounded-[32px] py-3 flex flex-col gap-2">
  81. <div class="flex items-center justify-between px-4">
  82. <div class="flex items-center gap-2 text-xs">
  83. <span class="text-[#797979]">@Lang.results</span>
  84. <span class="font-bold text-black">Monday, Mar 20, 2026</span>
  85. </div>
  86. <a href="/Millions/Home/Results" class="flex items-center gap-1 text-[10px] font-bold text-black border border-[#c2c2c2] rounded-lg px-2 py-1">
  87. View all results
  88. <img src="/Millions/assets/icons/chevron-right.svg" alt="" class="w-[5px] h-2"/>
  89. </a>
  90. </div>
  91. <!-- Result balls -->
  92. <div class="flex items-center justify-between gap-1 px-4">
  93. <div class="ball ball-blue">7</div>
  94. <div class="ball ball-blue">16</div>
  95. <div class="ball ball-blue">32</div>
  96. <div class="ball ball-blue">35</div>
  97. <div class="ball ball-blue">40</div>
  98. <div class="relative">
  99. <img src="/Millions/assets/icons/crown.png" alt="" class="absolute -top-4 -right-1 w-7 h-auto pointer-events-none rotate-[15deg] z-0"/>
  100. <div class="ball ball-mb relative z-10">
  101. <span>12</span>
  102. <span class="absolute -bottom-1 -right-2 bg-[#ee0033] text-white text-[8px] font-bold px-1.5 py-0.5 rounded z-20">MB</span>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <!-- Mega Jackpot banner -->
  109. <div class="px-2 mt-6">
  110. <div class="mega-banner relative rounded-[20px] overflow-hidden px-4 py-3 flex flex-col">
  111. <span class="mega-glow" style="left:-79px; top:-101px;"></span>
  112. <span class="mega-glow" style="right:-78px; top:9px;"></span>
  113. <span class="mega-glow" style="right:-107px; top:20px;"></span>
  114. <p class="mega-title relative inline-block text-white text-[22px] font-futura leading-none">
  115. <img src="/Millions/assets/icons/crown.png" alt="" class="absolute -top-[5px] left-[26px] w-[12px] h-auto rotate-[10deg] pointer-events-none"/>
  116. Mega Jackpot
  117. </p>
  118. <p class="text-white text-xs mt-2">Estimate Jackpot Prize</p>
  119. <p class="leading-none mt-1 flex items-start" style="margin-bottom:18px;">
  120. <span class="mega-amount text-[40px] font-condensed text-gold-gradient tracking-tight leading-none animate__animated animate-rotate-3s">30.000.000</span>
  121. <span class="text-gold-gradient text-sm font-bold uppercase ml-1 animate__animated animate-rotate-3s">@Lang.v2_htg</span>
  122. </p>
  123. <p class="text-white text-[10px] mt-1 ">Be the next millionaire</p>
  124. <!-- Decorative elements -->
  125. <img src="/Millions/assets/images/crown-balls.png" alt="" class="absolute right-2 top-1/2 -translate-y-1/2 w-44 h-auto pointer-events-none"/>
  126. </div>
  127. </div>
  128. <!-- Play now button + decorative balls -->
  129. <div class="relative shrink-0 mt-8 z-10">
  130. <img src="/Millions/assets/images/play-decor.png" alt="" class="block w-full h-auto pointer-events-none"/>
  131. <a onclick="checkTerm('@Constants.Millions_CODE')" class="play-now-outer rounded-full animate-pulse-play" style="position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:155px; height:155px; padding:11px; cursor:pointer;">
  132. <div class="play-now-ring rounded-full" style="width:100%;height:100%;padding:4px;">
  133. <div class="play-now-btn rounded-full flex flex-col items-center justify-center text-white text-[32px] font-black border-[1.8px] border-white animate-pulse-play" style="width:100%;height:100%;line-height:24px;">
  134. <span class="uppercase">@Lang.millions_play</span>
  135. <span class="uppercase">@Lang.millions_now</span>
  136. </div>
  137. </div>
  138. </a>
  139. </div>
  140. </div>
  141. @{
  142. ViewData["ActiveTab"] = "Home";
  143. }
  144. @await Html.PartialAsync("~/Areas/Millions/Views/Shared/_BottomNavbar.cshtml")
  145. </div>
  146. @section Scripts {
  147. <script src="/Millions/js/all.min.js"></script>
  148. <script>
  149. let isCheckingTerm = false;
  150. function checkTerm(termType) {
  151. if (isCheckingTerm) return;
  152. isCheckingTerm = true;
  153. var token = $('input[name="__RequestVerificationToken"]').val();
  154. $.ajax({
  155. url: subDomain + '/Millions/Home/TermResult',
  156. type: 'POST',
  157. data: {
  158. __RequestVerificationToken: token,
  159. termType: termType
  160. },
  161. success: function (res) {
  162. if (res.responseCode === "0") {
  163. if (res.listTerm && res.listTerm.length > 0) {
  164. var status = res.listTerm[0].status;
  165. if (status === "0" || status === "1") {
  166. location.href = subDomain + '/Millions/Home/BuyTicket?termType=' + termType;
  167. return;
  168. } else {
  169. alert("@Lang.millions_game_locked");
  170. }
  171. } else {
  172. alert("@Lang.no_results_found");
  173. }
  174. } else if (res.responseCode === "401") {
  175. window.location.href = subDomain + "/Account/Login";
  176. return;
  177. } else {
  178. alert(res.responseMessage || "@Lang.error_happened");
  179. }
  180. isCheckingTerm = false;
  181. },
  182. error: function (err) {
  183. alert("@Lang.error_happened");
  184. isCheckingTerm = false;
  185. }
  186. });
  187. }
  188. function startCountdown() {
  189. const targetHour = 20;
  190. const now = new Date();
  191. let target = new Date();
  192. target.setHours(targetHour, 0, 0, 0);
  193. if (now >= target) {
  194. target.setDate(target.getDate() + 1);
  195. }
  196. const options = { weekday: 'long', month: 'short', day: 'numeric', year: 'numeric' };
  197. const dateText = target.toLocaleDateString('en-US', options);
  198. const drawDateEl = document.getElementById('draw-date');
  199. if(drawDateEl) drawDateEl.innerText = dateText;
  200. }
  201. // Withdraw money function
  202. function transferWinMoney() {
  203. location.href = '@Url.Action("TransferWinMoney", "Home")';
  204. }
  205. document.addEventListener('DOMContentLoaded', startCountdown);
  206. </script>
  207. }