admin.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. // 管理后台主入口逻辑
  2. (function() {
  3. const ADMIN_USERNAME = 'admin';
  4. const ADMIN_PASSWORD = '123456'; // 简单密码,生产环境应使用更安全的方式
  5. let currentPage = 'users';
  6. let usersManager = null;
  7. let resourceManager = null;
  8. let pricingManager = null;
  9. // 初始化
  10. function init() {
  11. checkLogin();
  12. bindEvents();
  13. }
  14. // 检查登录状态(5小时免登录)
  15. function checkLogin() {
  16. const loginTime = localStorage.getItem('adminLoginTime');
  17. const isLoggedIn = localStorage.getItem('adminLoggedIn') === 'true';
  18. if (isLoggedIn && loginTime) {
  19. const now = Date.now();
  20. const loginTimestamp = parseInt(loginTime, 10);
  21. const fiveHours = 5 * 60 * 60 * 1000; // 5小时的毫秒数
  22. // 检查是否在5小时内
  23. if (now - loginTimestamp < fiveHours) {
  24. showMainPage();
  25. return;
  26. } else {
  27. // 超过5小时,清除登录状态
  28. localStorage.removeItem('adminLoggedIn');
  29. localStorage.removeItem('adminLoginTime');
  30. }
  31. }
  32. showLoginPage();
  33. }
  34. // 显示登录页
  35. function showLoginPage() {
  36. document.getElementById('loginPage').style.display = 'flex';
  37. document.getElementById('mainPage').style.display = 'none';
  38. }
  39. // 显示主页面
  40. function showMainPage() {
  41. document.getElementById('loginPage').style.display = 'none';
  42. document.getElementById('mainPage').style.display = 'flex';
  43. initManagers();
  44. switchPage('users');
  45. }
  46. // 初始化各个管理器(现在由各个页面自己初始化)
  47. function initManagers() {
  48. // 管理器现在由各个独立页面初始化
  49. // 这里保留函数以保持兼容性
  50. }
  51. // 获取 API 基础 URL(供子页面使用)
  52. window.getApiBaseUrl = function() {
  53. return getApiBaseUrl();
  54. }
  55. // 绑定事件
  56. function bindEvents() {
  57. // 登录表单
  58. const loginForm = document.getElementById('loginForm');
  59. if (loginForm) {
  60. loginForm.addEventListener('submit', handleLogin);
  61. }
  62. // 退出登录
  63. const logoutBtn = document.getElementById('logoutBtn');
  64. if (logoutBtn) {
  65. logoutBtn.addEventListener('click', handleLogout);
  66. }
  67. // 导航
  68. const navItems = document.querySelectorAll('.nav-item');
  69. navItems.forEach(item => {
  70. item.addEventListener('click', (e) => {
  71. e.preventDefault();
  72. const page = item.getAttribute('data-page');
  73. switchPage(page);
  74. });
  75. });
  76. // 自定义提示对话框
  77. const alertOk = document.getElementById('alertOk');
  78. const closeAlertModal = document.getElementById('closeAlertModal');
  79. if (alertOk) {
  80. alertOk.addEventListener('click', () => {
  81. document.getElementById('customAlertModal').style.display = 'none';
  82. });
  83. }
  84. if (closeAlertModal) {
  85. closeAlertModal.addEventListener('click', () => {
  86. document.getElementById('customAlertModal').style.display = 'none';
  87. });
  88. }
  89. }
  90. // 处理登录
  91. function handleLogin(e) {
  92. e.preventDefault();
  93. const username = document.getElementById('adminUsername').value;
  94. const password = document.getElementById('adminPassword').value;
  95. const errorDiv = document.getElementById('loginError');
  96. if (username === ADMIN_USERNAME && password === ADMIN_PASSWORD) {
  97. // 保存登录状态和登录时间戳
  98. localStorage.setItem('adminLoggedIn', 'true');
  99. localStorage.setItem('adminLoginTime', Date.now().toString());
  100. errorDiv.style.display = 'none';
  101. showMainPage();
  102. } else {
  103. errorDiv.textContent = '用户名或密码错误';
  104. errorDiv.style.display = 'block';
  105. }
  106. }
  107. // 处理退出登录
  108. function handleLogout() {
  109. if (confirm('确定要退出登录吗?')) {
  110. localStorage.removeItem('adminLoggedIn');
  111. localStorage.removeItem('adminLoginTime');
  112. showLoginPage();
  113. }
  114. }
  115. // 切换页面
  116. function switchPage(page) {
  117. currentPage = page;
  118. // 更新导航状态
  119. document.querySelectorAll('.nav-item').forEach(item => {
  120. item.classList.remove('active');
  121. if (item.getAttribute('data-page') === page) {
  122. item.classList.add('active');
  123. }
  124. });
  125. // 更新标题
  126. const titles = {
  127. 'users': '用户管理',
  128. 'resource-manager': '素材管理',
  129. 'pricing': '素材定价',
  130. 'currency': '充值与货币',
  131. 'product-pricing': '商品定价'
  132. };
  133. document.getElementById('pageTitle').textContent = titles[page] || '管理后台';
  134. // 切换 iframe 的 src
  135. const pageFrame = document.getElementById('pageFrame');
  136. if (pageFrame) {
  137. const pageMap = {
  138. 'users': 'page/users/users.html',
  139. 'resource-manager': 'page/resource-manager/resource-manager.html',
  140. 'pricing': 'page/pricing/pricing.html',
  141. 'currency': 'page/currency/currency.html',
  142. 'product-pricing': 'page/product-pricing/product-pricing.html'
  143. };
  144. const pagePath = pageMap[page] || pageMap['users'];
  145. pageFrame.src = pagePath;
  146. }
  147. }
  148. // 获取API基础URL
  149. function getApiBaseUrl() {
  150. // 明确使用 http://localhost:3000 作为API服务器地址
  151. return 'http://localhost:3000';
  152. }
  153. // 显示自定义提示
  154. window.showCustomAlert = function(message, type = 'info') {
  155. const alertModal = document.getElementById('customAlertModal');
  156. const alertMessage = document.getElementById('alertMessage');
  157. if (alertModal && alertMessage) {
  158. alertMessage.textContent = message;
  159. alertModal.style.display = 'flex';
  160. // 自动关闭
  161. setTimeout(() => {
  162. alertModal.style.display = 'none';
  163. }, 2000);
  164. } else {
  165. alert(message);
  166. }
  167. };
  168. // 页面加载完成后初始化
  169. if (document.readyState === 'loading') {
  170. document.addEventListener('DOMContentLoaded', init);
  171. } else {
  172. init();
  173. }
  174. })();