Wardrobe/prototype/script.js
jif2.zhang 38b5e3190a init: Wardrobe 衣物管理系统 - 项目首页、OTA 升级、Android CI/CD
- 响应式项目首页 (Landing, 含 R2 APK 下载) + 路由 /home 调整
- OTA 升级: tauri-plugin-hotswap (lib.rs/main.rs 拆分, 客户端热替换)
- OTA 服务端 (check/bundle/manifest-web) + build-ota/genkey/upload 脚本
- 密钥/凭据统一存配置中心 (signing + ota + cloudflare 分组)
- Android CI (android-* 分支) + OTA CI (手动触发), 产物上传 R2
- 修复 tsc/构建阻塞问题
2026-09-11 15:46:42 +08:00

122 lines
3.4 KiB
JavaScript

let currentPage = 'page-home';
let currentView = 'grid';
function showPage(pageId) {
document.querySelectorAll('.page').forEach(p => p.classList.remove('active'));
document.getElementById(pageId).classList.add('active');
currentPage = pageId;
// Update nav
const navMap = {
'page-home': 0,
'page-outfit': 1,
'page-add': 2,
'page-closet': 3,
'page-profile': 4,
'page-detail': -1,
'page-calendar': -1
};
const idx = navMap[pageId];
if (idx >= 0) {
document.querySelectorAll('.nav-item').forEach((n, i) => {
n.classList.toggle('active', i === idx);
});
}
}
function navTo(el, pageId) {
document.querySelectorAll('.nav-item').forEach(n => n.classList.remove('active'));
el.classList.add('active');
showPage(pageId);
}
function setView(view) {
currentView = view;
const grid = document.getElementById('closet-grid');
const list = document.getElementById('closet-list');
const gridBtn = document.getElementById('grid-view-btn');
const listBtn = document.getElementById('list-view-btn');
if (view === 'grid') {
grid.style.display = 'grid';
list.classList.add('hidden');
gridBtn.classList.add('active');
listBtn.classList.remove('active');
} else {
grid.style.display = 'none';
list.classList.remove('hidden');
gridBtn.classList.remove('active');
listBtn.classList.add('active');
}
}
function filterCloset(btn, cat) {
document.querySelectorAll('.filter-bar:first-of-type .filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const cards = document.querySelectorAll('.clothing-card');
cards.forEach(card => {
if (cat === 'all' || card.dataset.cat === cat) {
card.style.display = '';
} else {
card.style.display = 'none';
}
});
}
function selectColor(el) {
document.querySelectorAll('.color-dot').forEach(d => d.classList.remove('active'));
el.classList.add('active');
}
function simulateUpload() {
const placeholder = document.getElementById('upload-placeholder');
const preview = document.getElementById('upload-preview');
if (placeholder && preview) {
placeholder.style.display = 'none';
preview.classList.remove('hidden');
}
}
function resetUpload() {
const placeholder = document.getElementById('upload-placeholder');
const preview = document.getElementById('upload-preview');
if (placeholder && preview) {
placeholder.style.display = '';
preview.classList.add('hidden');
}
}
function showToast(msg) {
const toast = document.getElementById('toast');
toast.textContent = msg;
toast.classList.remove('hidden');
setTimeout(() => toast.classList.add('hidden'), 1500);
}
function confirmDelete() {
document.getElementById('delete-modal').classList.remove('hidden');
}
function hideModal() {
document.getElementById('delete-modal').classList.add('hidden');
}
function refreshOutfit() {
showToast('已刷新推荐搭配');
}
// Tag toggle
document.addEventListener('click', function(e) {
if (e.target.classList.contains('selectable-tag')) {
e.target.classList.toggle('active');
}
if (e.target.classList.contains('filter-btn') && !e.target.closest('.filter-bar:first-of-type') && !e.target.closest('.filter-group')) {
const group = e.target.closest('.filter-btns');
if (group) {
group.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
e.target.classList.add('active');
}
}
});