This commit is contained in:
@@ -179,81 +179,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 导航配置 -->
|
||||
<section id="tab-nav" class="config-section">
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>顶部导航</h2>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div id="headerNavList"></div>
|
||||
<button class="btn btn-secondary" id="addHeaderNavBtn">+ 添加导航</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>底部导航</h2>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div id="footerNavList"></div>
|
||||
<button class="btn btn-secondary" id="addFooterNavBtn">+ 添加栏目</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 其他配置 -->
|
||||
<section id="tab-other" class="config-section">
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>友情链接</h2>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div id="friendlyLinkList"></div>
|
||||
<button class="btn btn-secondary" id="addFriendlyLinkBtn">+ 添加</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>侧边浮窗</h2>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div id="sideList"></div>
|
||||
<button class="btn btn-secondary" id="addSideBtn">+ 添加</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>反馈类型</h2>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div id="feedbackTypeList"></div>
|
||||
<button class="btn btn-secondary" id="addFeedbackTypeBtn">+ 添加</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- JSON编辑器 -->
|
||||
<section id="tab-json" class="config-section">
|
||||
<div class="section-card">
|
||||
<div class="section-header">
|
||||
<h2>JSON配置编辑器</h2>
|
||||
<p class="section-desc">直接编辑完整JSON配置</p>
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div class="alert alert-info" style="margin-bottom: 16px;">
|
||||
<strong>使用说明:</strong> 点击"同步"按钮将所有表单数据转为JSON,编辑后点击"应用"更新表单
|
||||
</div>
|
||||
<textarea id="jsonEditor" class="json-editor" rows="20"></textarea>
|
||||
<div style="margin-top: 16px; display: flex; gap: 12px;">
|
||||
<button class="btn btn-secondary" id="syncJsonBtn">同步</button>
|
||||
<button class="btn btn-primary" id="applyJsonBtn">应用</button>
|
||||
<button class="btn btn-secondary" id="copyJsonBtn">复制</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@@ -316,15 +241,6 @@
|
||||
|
||||
// 渲染荣誉列表
|
||||
renderHonors(data.honor || []);
|
||||
|
||||
// 渲染导航
|
||||
renderHeaderNav(data.header_nav || []);
|
||||
renderFooterNav(data.footer_nav || []);
|
||||
|
||||
// 渲染其他配置
|
||||
renderFriendlyLinks(data.friendly_link || []);
|
||||
renderSides(data.side || []);
|
||||
renderFeedbackTypes(data.feedback_type || []);
|
||||
}
|
||||
|
||||
// 获取嵌套属性值
|
||||
@@ -349,14 +265,11 @@
|
||||
setNestedValue(data, name, input.value);
|
||||
});
|
||||
|
||||
// 收集动态列表数据
|
||||
// 收集轮播数据
|
||||
data.banner = collectBanners();
|
||||
|
||||
// 收集荣誉数据
|
||||
data.honor = collectHonors();
|
||||
data.friendly_link = collectFriendlyLinks();
|
||||
data.side = collectSides();
|
||||
data.feedback_type = collectFeedbackTypes();
|
||||
data.header_nav = collectHeaderNav();
|
||||
data.footer_nav = collectFooterNav();
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -489,451 +402,12 @@
|
||||
renderHonors(honors);
|
||||
};
|
||||
|
||||
// ========== 友情链接 ==========
|
||||
function renderFriendlyLinks(links) {
|
||||
const container = document.getElementById('friendlyLinkList');
|
||||
container.innerHTML = '';
|
||||
links.forEach((link, index) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4>链接 ${index + 1}</h4>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeFriendlyLink(${index})">×</button>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-friendly="${index}" data-field="name" value="${link.name || ''}" placeholder="网站名称">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>链接地址</label>
|
||||
<input type="text" class="form-control" data-friendly="${index}" data-field="url" value="${link.url || ''}" placeholder="https://example.com">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
function collectFriendlyLinks() {
|
||||
const links = [];
|
||||
document.querySelectorAll('[data-friendly]').forEach(input => {
|
||||
const index = parseInt(input.dataset.friendly);
|
||||
const field = input.dataset.field;
|
||||
if (!links[index]) links[index] = {};
|
||||
links[index][field] = input.value;
|
||||
});
|
||||
return links.filter(l => l);
|
||||
}
|
||||
|
||||
window.addFriendlyLink = function () {
|
||||
const links = collectFriendlyLinks();
|
||||
links.push({ name: '', url: '' });
|
||||
renderFriendlyLinks(links);
|
||||
};
|
||||
|
||||
window.removeFriendlyLink = function (index) {
|
||||
const links = collectFriendlyLinks();
|
||||
links.splice(index, 1);
|
||||
renderFriendlyLinks(links);
|
||||
};
|
||||
|
||||
// ========== 侧边浮窗 ==========
|
||||
function renderSides(sides) {
|
||||
const container = document.getElementById('sideList');
|
||||
container.innerHTML = '';
|
||||
sides.forEach((side, index) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4>浮窗 ${index + 1}</h4>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeSide(${index})">×</button>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-side="${index}" data-field="name" value="${side.name || ''}" placeholder="电话咨询">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>图标地址</label>
|
||||
<div class="upload-control">
|
||||
<input type="text" class="form-control" data-side="${index}" data-field="icon" value="${side.icon || ''}" placeholder="/upload/icon.png">
|
||||
<button class="btn btn-secondary upload-btn" data-target-side="${index}.icon">选择文件</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>内容HTML</label>
|
||||
<textarea class="form-control" data-side="${index}" data-field="content" rows="2" placeholder="HTML内容">${side.content || ''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
function collectSides() {
|
||||
const sides = [];
|
||||
document.querySelectorAll('[data-side]').forEach(input => {
|
||||
const index = parseInt(input.dataset.side);
|
||||
const field = input.dataset.field;
|
||||
if (!sides[index]) sides[index] = {};
|
||||
sides[index][field] = input.value;
|
||||
});
|
||||
return sides.filter(s => s);
|
||||
}
|
||||
|
||||
window.addSide = function () {
|
||||
const sides = collectSides();
|
||||
sides.push({ name: '', icon: '', content: '' });
|
||||
renderSides(sides);
|
||||
};
|
||||
|
||||
window.removeSide = function (index) {
|
||||
const sides = collectSides();
|
||||
sides.splice(index, 1);
|
||||
renderSides(sides);
|
||||
};
|
||||
|
||||
// ========== 反馈类型 ==========
|
||||
function renderFeedbackTypes(types) {
|
||||
const container = document.getElementById('feedbackTypeList');
|
||||
container.innerHTML = '';
|
||||
types.forEach((type, index) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4>类型 ${index + 1}</h4>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeFeedbackType(${index})">×</button>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>ID</label>
|
||||
<input type="text" class="form-control" data-feedback="${index}" data-field="id" value="${type.id || ''}" placeholder="1">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-feedback="${index}" data-field="name" value="${type.name || ''}" placeholder="产品建议">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>描述</label>
|
||||
<input type="text" class="form-control" data-feedback="${index}" data-field="description" value="${type.description || ''}" placeholder="用于产品体验反馈">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
function collectFeedbackTypes() {
|
||||
const types = [];
|
||||
document.querySelectorAll('[data-feedback]').forEach(input => {
|
||||
const index = parseInt(input.dataset.feedback);
|
||||
const field = input.dataset.field;
|
||||
if (!types[index]) types[index] = {};
|
||||
types[index][field] = input.value;
|
||||
});
|
||||
return types.filter(t => t);
|
||||
}
|
||||
|
||||
window.addFeedbackType = function () {
|
||||
const types = collectFeedbackTypes();
|
||||
types.push({ id: '', name: '', description: '' });
|
||||
renderFeedbackTypes(types);
|
||||
};
|
||||
|
||||
window.removeFeedbackType = function (index) {
|
||||
const types = collectFeedbackTypes();
|
||||
types.splice(index, 1);
|
||||
renderFeedbackTypes(types);
|
||||
};
|
||||
|
||||
// ========== 顶部导航 ==========
|
||||
function renderHeaderNav(navs) {
|
||||
const container = document.getElementById('headerNavList');
|
||||
container.innerHTML = '';
|
||||
|
||||
navs.forEach((nav, index) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
const hasChildren = Array.isArray(nav.children) && nav.children.length > 0;
|
||||
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4>导航 ${index + 1}: ${nav.name || '(未命名)'}</h4>
|
||||
<div style="display: flex; gap: 4px;">
|
||||
<button class="btn-icon" onclick="toggleHeaderNavChildren(${index})" title="子菜单">☰${hasChildren ? ` (${nav.children.length})` : ''}</button>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeHeaderNav(${index})">×</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-header-nav="${index}" data-field="name" value="${nav.name || ''}" placeholder="产品中心">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>链接</label>
|
||||
<input type="text" class="form-control" data-header-nav="${index}" data-field="file_address" value="${nav.file_address || ''}" placeholder="/products.html">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-switch">
|
||||
<label>新窗口</label>
|
||||
<input type="checkbox" data-header-nav="${index}" data-field="blank" ${nav.blank ? 'checked' : ''}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="header-nav-children-${index}" style="display:${hasChildren ? 'block' : 'none'}; margin-top:12px; padding-top:12px; border-top:1px solid #eee;">
|
||||
<h5 style="margin:0 0 8px; font-size:13px;">子菜单</h5>
|
||||
<div id="header-nav-children-list-${index}"></div>
|
||||
<button class="btn btn-secondary btn-sm" onclick="addHeaderNavChild(${index})" style="margin-top:8px;">+ 添加子菜单</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
|
||||
if (hasChildren) {
|
||||
renderHeaderNavChildren(index, nav.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderHeaderNavChildren(parentIndex, children) {
|
||||
const container = document.getElementById(`header-nav-children-list-${parentIndex}`);
|
||||
container.innerHTML = '';
|
||||
|
||||
children.forEach((child, childIndex) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
item.style.marginLeft = '20px';
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4 style="font-size:13px;">子项 ${childIndex + 1}</h4>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeHeaderNavChild(${parentIndex},${childIndex})">×</button>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-header-nav-child="${parentIndex}.${childIndex}" data-field="name" value="${child.name || ''}" placeholder="轻量云">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>链接</label>
|
||||
<input type="text" class="form-control" data-header-nav-child="${parentIndex}.${childIndex}" data-field="file_address" value="${child.file_address || ''}" placeholder="/light.html">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>图标URL</label>
|
||||
<input type="text" class="form-control" data-header-nav-child="${parentIndex}.${childIndex}" data-field="icon" value="${child.icon || ''}" placeholder="/upload/icon.png">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-switch">
|
||||
<label>新窗口</label>
|
||||
<input type="checkbox" data-header-nav-child="${parentIndex}.${childIndex}" data-field="blank" ${child.blank ? 'checked' : ''}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
function collectHeaderNav() {
|
||||
const navs = [];
|
||||
document.querySelectorAll('[data-header-nav]').forEach(input => {
|
||||
const index = parseInt(input.dataset.headerNav);
|
||||
const field = input.dataset.field;
|
||||
if (!navs[index]) navs[index] = { children: [] };
|
||||
navs[index][field] = input.type === 'checkbox' ? input.checked : input.value;
|
||||
});
|
||||
|
||||
document.querySelectorAll('[data-header-nav-child]').forEach(input => {
|
||||
const [parentIndex, childIndex] = input.dataset.headerNavChild.split('.').map(Number);
|
||||
const field = input.dataset.field;
|
||||
if (!navs[parentIndex].children[childIndex]) navs[parentIndex].children[childIndex] = {};
|
||||
navs[parentIndex].children[childIndex][field] = input.type === 'checkbox' ? input.checked : input.value;
|
||||
});
|
||||
|
||||
return navs.filter(n => n);
|
||||
}
|
||||
|
||||
window.addHeaderNav = function() {
|
||||
const navs = collectHeaderNav();
|
||||
navs.push({ name: '', file_address: '', blank: false, children: [] });
|
||||
renderHeaderNav(navs);
|
||||
};
|
||||
|
||||
window.removeHeaderNav = function(index) {
|
||||
if(confirm('确定删除此导航项吗?')) {
|
||||
const navs = collectHeaderNav();
|
||||
navs.splice(index, 1);
|
||||
renderHeaderNav(navs);
|
||||
}
|
||||
};
|
||||
|
||||
window.toggleHeaderNavChildren = function(index) {
|
||||
const container = document.getElementById(`header-nav-children-${index}`);
|
||||
container.style.display = container.style.display === 'none' ? 'block' : 'none';
|
||||
};
|
||||
|
||||
window.addHeaderNavChild = function(parentIndex) {
|
||||
const navs = collectHeaderNav();
|
||||
if (!navs[parentIndex].children) navs[parentIndex].children = [];
|
||||
navs[parentIndex].children.push({ name: '', file_address: '', blank: false, icon: '', description: '' });
|
||||
renderHeaderNav(navs);
|
||||
document.getElementById(`header-nav-children-${parentIndex}`).style.display = 'block';
|
||||
};
|
||||
|
||||
window.removeHeaderNavChild = function(parentIndex, childIndex) {
|
||||
if(confirm('确定删除此子菜单吗?')) {
|
||||
const navs = collectHeaderNav();
|
||||
navs[parentIndex].children.splice(childIndex, 1);
|
||||
renderHeaderNav(navs);
|
||||
}
|
||||
};
|
||||
|
||||
// ========== 底部导航 ==========
|
||||
function renderFooterNav(navs) {
|
||||
const container = document.getElementById('footerNavList');
|
||||
container.innerHTML = '';
|
||||
|
||||
navs.forEach((col, colIndex) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
const hasChildren = Array.isArray(col.children) && col.children.length > 0;
|
||||
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4>栏目 ${colIndex + 1}: ${col.name || '(未命名)'}</h4>
|
||||
<div style="display: flex; gap: 4px;">
|
||||
<button class="btn-icon" onclick="toggleFooterNavChildren(${colIndex})" title="链接列表">☰${hasChildren ? ` (${col.children.length})` : ''}</button>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeFooterNav(${colIndex})">×</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-item">
|
||||
<label>栏目名称</label>
|
||||
<input type="text" class="form-control" data-footer-nav="${colIndex}" data-field="name" value="${col.name || ''}" placeholder="热门云产品">
|
||||
</div>
|
||||
<div id="footer-nav-children-${colIndex}" style="display:${hasChildren ? 'block' : 'none'}; margin-top:12px; padding-top:12px; border-top:1px solid #eee;">
|
||||
<h5 style="margin:0 0 8px; font-size:13px;">链接列表</h5>
|
||||
<div id="footer-nav-children-list-${colIndex}"></div>
|
||||
<button class="btn btn-secondary btn-sm" onclick="addFooterNavChild(${colIndex})" style="margin-top:8px;">+ 添加链接</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
|
||||
if (hasChildren) {
|
||||
renderFooterNavChildren(colIndex, col.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderFooterNavChildren(colIndex, children) {
|
||||
const container = document.getElementById(`footer-nav-children-list-${colIndex}`);
|
||||
container.innerHTML = '';
|
||||
|
||||
children.forEach((link, linkIndex) => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'config-item';
|
||||
item.style.marginLeft = '20px';
|
||||
item.innerHTML = `
|
||||
<div class="config-item__header">
|
||||
<h4 style="font-size:13px;">链接 ${linkIndex + 1}</h4>
|
||||
<button class="btn-icon btn-icon-danger" onclick="removeFooterNavChild(${colIndex},${linkIndex})">×</button>
|
||||
</div>
|
||||
<div class="config-item__body">
|
||||
<div class="form-fields">
|
||||
<div class="form-item">
|
||||
<label>名称</label>
|
||||
<input type="text" class="form-control" data-footer-nav-child="${colIndex}.${linkIndex}" data-field="name" value="${link.name || ''}" placeholder="云服务器">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<label>链接</label>
|
||||
<input type="text" class="form-control" data-footer-nav-child="${colIndex}.${linkIndex}" data-field="url" value="${link.url || ''}" placeholder="/products/ecs.html">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-switch">
|
||||
<label>新窗口</label>
|
||||
<input type="checkbox" data-footer-nav-child="${colIndex}.${linkIndex}" data-field="blank" ${link.blank ? 'checked' : ''}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
function collectFooterNav() {
|
||||
const navs = [];
|
||||
document.querySelectorAll('[data-footer-nav]').forEach(input => {
|
||||
const index = parseInt(input.dataset.footerNav);
|
||||
if (!navs[index]) navs[index] = { children: [] };
|
||||
navs[index][input.dataset.field] = input.value;
|
||||
});
|
||||
|
||||
document.querySelectorAll('[data-footer-nav-child]').forEach(input => {
|
||||
const [colIndex, linkIndex] = input.dataset.footerNavChild.split('.').map(Number);
|
||||
const field = input.dataset.field;
|
||||
if (!navs[colIndex].children[linkIndex]) navs[colIndex].children[linkIndex] = {};
|
||||
navs[colIndex].children[linkIndex][field] = input.type === 'checkbox' ? input.checked : input.value;
|
||||
});
|
||||
|
||||
return navs.filter(n => n);
|
||||
}
|
||||
|
||||
window.addFooterNav = function() {
|
||||
const navs = collectFooterNav();
|
||||
navs.push({ name: '', children: [] });
|
||||
renderFooterNav(navs);
|
||||
};
|
||||
|
||||
window.removeFooterNav = function(index) {
|
||||
if(confirm('确定删除此栏目吗?')) {
|
||||
const navs = collectFooterNav();
|
||||
navs.splice(index, 1);
|
||||
renderFooterNav(navs);
|
||||
}
|
||||
};
|
||||
|
||||
window.toggleFooterNavChildren = function(index) {
|
||||
const container = document.getElementById(`footer-nav-children-${index}`);
|
||||
container.style.display = container.style.display === 'none' ? 'block' : 'none';
|
||||
};
|
||||
|
||||
window.addFooterNavChild = function(colIndex) {
|
||||
const navs = collectFooterNav();
|
||||
if (!navs[colIndex].children) navs[colIndex].children = [];
|
||||
navs[colIndex].children.push({ name: '', url: '', blank: false });
|
||||
renderFooterNav(navs);
|
||||
document.getElementById(`footer-nav-children-${colIndex}`).style.display = 'block';
|
||||
};
|
||||
|
||||
window.removeFooterNavChild = function(colIndex, linkIndex) {
|
||||
if(confirm('确定删除此链接吗?')) {
|
||||
const navs = collectFooterNav();
|
||||
navs[colIndex].children.splice(linkIndex, 1);
|
||||
renderFooterNav(navs);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// 文件上传
|
||||
document.addEventListener('click', (e) => {
|
||||
if (e.target.closest('.upload-btn')) {
|
||||
e.preventDefault();
|
||||
const btn = e.target.closest('.upload-btn');
|
||||
currentUploadTarget = btn.dataset.target || btn.dataset.targetBanner || btn.dataset.targetHonor || btn.dataset.targetSide;
|
||||
currentUploadTarget = btn.dataset.target || btn.dataset.targetBanner || btn.dataset.targetHonor;
|
||||
document.getElementById('fileInput').click();
|
||||
}
|
||||
});
|
||||
@@ -1007,11 +481,6 @@
|
||||
// 添加按钮事件
|
||||
document.getElementById('addBannerBtn').addEventListener('click', addBanner);
|
||||
document.getElementById('addHonorBtn').addEventListener('click', addHonor);
|
||||
document.getElementById('addFriendlyLinkBtn').addEventListener('click', addFriendlyLink);
|
||||
document.getElementById('addSideBtn').addEventListener('click', addSide);
|
||||
document.getElementById('addFeedbackTypeBtn').addEventListener('click', addFeedbackType);
|
||||
document.getElementById('addHeaderNavBtn').addEventListener('click', addHeaderNav);
|
||||
document.getElementById('addFooterNavBtn').addEventListener('click', addFooterNav);
|
||||
|
||||
// JSON编辑器功能
|
||||
document.getElementById('syncJsonBtn').addEventListener('click', () => {
|
||||
@@ -1061,4 +530,4 @@
|
||||
// 初始化
|
||||
loadConfig();
|
||||
})();
|
||||
</script>
|
||||
</script></html>
|
||||
|
||||
Reference in New Issue
Block a user