updateweb
This commit is contained in:
213
website/admin/js/settings.js
Normal file
213
website/admin/js/settings.js
Normal file
@@ -0,0 +1,213 @@
|
||||
// Settings Management JavaScript
|
||||
|
||||
let currentSettings = {};
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
checkAuth().then((authenticated) => {
|
||||
if (authenticated) {
|
||||
loadSettings();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
async function loadSettings() {
|
||||
try {
|
||||
const response = await fetch("/api/admin/settings", {
|
||||
credentials: "include",
|
||||
});
|
||||
const data = await response.json();
|
||||
if (data.success) {
|
||||
currentSettings = data.settings || {};
|
||||
populateSettings();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to load settings:", error);
|
||||
}
|
||||
}
|
||||
|
||||
function populateSettings() {
|
||||
// General Settings
|
||||
if (currentSettings.general) {
|
||||
document.getElementById("siteName").value =
|
||||
currentSettings.general.siteName || "";
|
||||
document.getElementById("siteTagline").value =
|
||||
currentSettings.general.siteTagline || "";
|
||||
document.getElementById("siteEmail").value =
|
||||
currentSettings.general.siteEmail || "";
|
||||
document.getElementById("sitePhone").value =
|
||||
currentSettings.general.sitePhone || "";
|
||||
document.getElementById("timezone").value =
|
||||
currentSettings.general.timezone || "UTC";
|
||||
}
|
||||
|
||||
// Homepage Settings
|
||||
if (currentSettings.homepage) {
|
||||
document.getElementById("showHero").checked =
|
||||
currentSettings.homepage.showHero !== false;
|
||||
document.getElementById("showPromotions").checked =
|
||||
currentSettings.homepage.showPromotions !== false;
|
||||
document.getElementById("showPortfolio").checked =
|
||||
currentSettings.homepage.showPortfolio !== false;
|
||||
document.getElementById("showBlog").checked =
|
||||
currentSettings.homepage.showBlog !== false;
|
||||
}
|
||||
|
||||
// Product Settings
|
||||
if (currentSettings.product) {
|
||||
document.getElementById("defaultProductStatus").value =
|
||||
currentSettings.product.defaultStatus || "active";
|
||||
document.getElementById("productsPerPage").value =
|
||||
currentSettings.product.perPage || 12;
|
||||
document.getElementById("bestSellerLogic").value =
|
||||
currentSettings.product.bestSellerLogic || "manual";
|
||||
document.getElementById("enableInventory").checked =
|
||||
currentSettings.product.enableInventory !== false;
|
||||
document.getElementById("showOutOfStock").checked =
|
||||
currentSettings.product.showOutOfStock !== false;
|
||||
}
|
||||
|
||||
// Security Settings
|
||||
if (currentSettings.security) {
|
||||
document.getElementById("passwordExpiration").value =
|
||||
currentSettings.security.passwordExpiration || 90;
|
||||
document.getElementById("sessionTimeout").value =
|
||||
currentSettings.security.sessionTimeout || 60;
|
||||
document.getElementById("loginAttempts").value =
|
||||
currentSettings.security.loginAttempts || 5;
|
||||
document.getElementById("requireStrongPassword").checked =
|
||||
currentSettings.security.requireStrongPassword !== false;
|
||||
document.getElementById("enableTwoFactor").checked =
|
||||
currentSettings.security.enableTwoFactor || false;
|
||||
}
|
||||
|
||||
// Appearance Settings
|
||||
if (currentSettings.appearance) {
|
||||
document.getElementById("accentColor").value =
|
||||
currentSettings.appearance.accentColor || "#667eea";
|
||||
updateColorPreview();
|
||||
}
|
||||
}
|
||||
|
||||
function previewLogo() {
|
||||
const fileInput = document.getElementById("siteLogo");
|
||||
const preview = document.getElementById("logoPreview");
|
||||
|
||||
if (fileInput.files && fileInput.files[0]) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
preview.innerHTML = `<img src="${e.target.result}" alt="Logo" />`;
|
||||
};
|
||||
reader.readAsDataURL(fileInput.files[0]);
|
||||
}
|
||||
}
|
||||
|
||||
function previewFavicon() {
|
||||
const fileInput = document.getElementById("siteFavicon");
|
||||
const preview = document.getElementById("faviconPreview");
|
||||
|
||||
if (fileInput.files && fileInput.files[0]) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
preview.innerHTML = `<img src="${e.target.result}" alt="Favicon" />`;
|
||||
};
|
||||
reader.readAsDataURL(fileInput.files[0]);
|
||||
}
|
||||
}
|
||||
|
||||
function selectLayout(layout) {
|
||||
document.querySelectorAll(".theme-selector .theme-option").forEach((el) => {
|
||||
el.classList.remove("active");
|
||||
});
|
||||
event.target.closest(".theme-option").classList.add("active");
|
||||
}
|
||||
|
||||
function selectTheme(theme) {
|
||||
document.querySelectorAll(".theme-selector .theme-option").forEach((el) => {
|
||||
el.classList.remove("active");
|
||||
});
|
||||
event.target.closest(".theme-option").classList.add("active");
|
||||
}
|
||||
|
||||
function updateColorPreview() {
|
||||
const color = document.getElementById("accentColor").value;
|
||||
document.getElementById("colorPreview").style.backgroundColor = color;
|
||||
document.getElementById("colorValue").textContent = color;
|
||||
}
|
||||
|
||||
async function saveSettings() {
|
||||
const settings = {
|
||||
general: {
|
||||
siteName: document.getElementById("siteName").value,
|
||||
siteTagline: document.getElementById("siteTagline").value,
|
||||
siteEmail: document.getElementById("siteEmail").value,
|
||||
sitePhone: document.getElementById("sitePhone").value,
|
||||
timezone: document.getElementById("timezone").value,
|
||||
},
|
||||
homepage: {
|
||||
showHero: document.getElementById("showHero").checked,
|
||||
showPromotions: document.getElementById("showPromotions").checked,
|
||||
showPortfolio: document.getElementById("showPortfolio").checked,
|
||||
showBlog: document.getElementById("showBlog").checked,
|
||||
},
|
||||
product: {
|
||||
defaultStatus: document.getElementById("defaultProductStatus").value,
|
||||
perPage: parseInt(document.getElementById("productsPerPage").value),
|
||||
bestSellerLogic: document.getElementById("bestSellerLogic").value,
|
||||
enableInventory: document.getElementById("enableInventory").checked,
|
||||
showOutOfStock: document.getElementById("showOutOfStock").checked,
|
||||
},
|
||||
security: {
|
||||
passwordExpiration: parseInt(
|
||||
document.getElementById("passwordExpiration").value
|
||||
),
|
||||
sessionTimeout: parseInt(document.getElementById("sessionTimeout").value),
|
||||
loginAttempts: parseInt(document.getElementById("loginAttempts").value),
|
||||
requireStrongPassword: document.getElementById("requireStrongPassword")
|
||||
.checked,
|
||||
enableTwoFactor: document.getElementById("enableTwoFactor").checked,
|
||||
},
|
||||
appearance: {
|
||||
accentColor: document.getElementById("accentColor").value,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch("/api/admin/settings", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
credentials: "include",
|
||||
body: JSON.stringify(settings),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
if (data.success) {
|
||||
showSuccess("Settings saved successfully!");
|
||||
currentSettings = settings;
|
||||
} else {
|
||||
showError(data.message || "Failed to save settings");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to save settings:", error);
|
||||
showError("Failed to save settings");
|
||||
}
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
try {
|
||||
const response = await fetch("/api/admin/logout", {
|
||||
method: "POST",
|
||||
credentials: "include",
|
||||
});
|
||||
if (response.ok) window.location.href = "/admin/login.html";
|
||||
} catch (error) {
|
||||
console.error("Logout failed:", error);
|
||||
}
|
||||
}
|
||||
|
||||
function showSuccess(message) {
|
||||
alert(message);
|
||||
}
|
||||
|
||||
function showError(message) {
|
||||
alert("Error: " + message);
|
||||
}
|
||||
Reference in New Issue
Block a user