docs(website): 添加简记memo产品原型和UI设计规范文档
- 新增「简记memo」一体化小程序产品原型设计文档 - 新增简记memo完整版UI视觉设计规范和界面细节 - 添加IDEA项目配置文件.gitignore - 创建404页面HTML文件,包含响应式布局和错误提示 - 添加关于页面HTML文件,展示品牌介绍和团队信息 - 实现AES加解密工具函数,支持请求体加密 - 添加用户协议页面基础框架
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
/* ===================================
|
||||
简记memo - 项目公共配置
|
||||
=================================== */
|
||||
|
||||
const SITE_CONFIG = {
|
||||
path: '/static/images/logo.png',
|
||||
name: '简记memo',
|
||||
subtitle: '让记录更简单',
|
||||
slogan: '记录,是对抗遗忘的方式。\n生活的美好藏在点滴细节里,\n用简记memo,写下时光的足迹。',
|
||||
version: 'v1.0.0',
|
||||
copyright: `© ${new Date().getFullYear()} 简记memo. All rights reserved.`,
|
||||
email: 'memo@miaoall.cn',
|
||||
wechat: {
|
||||
name: '孙三苗',
|
||||
account: 'sunsanmiao'
|
||||
},
|
||||
defaultAvatar: '/static/avatar/default.png',
|
||||
brand: {
|
||||
primaryColor: '#4F9EDE',
|
||||
secondaryColor: '#3A8BC9',
|
||||
accentColor: '#67B8E3',
|
||||
gradient: 'linear-gradient(135deg, #4F9EDE 0%, #3A8BC9 100%)',
|
||||
lightGradient: 'linear-gradient(135deg, #67B8E3 0%, #4F9EDE 100%)'
|
||||
}
|
||||
};
|
||||
|
||||
const APP_INFO = {
|
||||
name: '简记memo',
|
||||
slogan: '简洁高效的个人事务管理工具',
|
||||
description: '集待办任务、账单记录、心情日记于一体的个人事务管理工具',
|
||||
|
||||
features: [
|
||||
{ icon: '📅', text: '日历管理' },
|
||||
{ icon: '✅', text: '待办事项' },
|
||||
{ icon: '💰', text: '账单记录' },
|
||||
{ icon: '😊', text: '心情日记' }
|
||||
],
|
||||
|
||||
beian: {
|
||||
icp: '京ICP备2026013204号',
|
||||
icpLink: 'https://beian.miit.gov.cn/',
|
||||
police: '京公网安备11011402055644号',
|
||||
policeLink: 'http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=京公网安备11011402055644号'
|
||||
}
|
||||
};
|
||||
|
||||
function renderSiteFooter(containerId) {
|
||||
const container = document.getElementById(containerId);
|
||||
if (!container) return;
|
||||
|
||||
container.innerHTML = `
|
||||
<div class="site-footer">
|
||||
<div class="footer-brand">
|
||||
<img src="${SITE_CONFIG.path}" alt="${SITE_CONFIG.name}" class="footer-logo" onerror="this.style.display='none'">
|
||||
<span class="footer-name">${SITE_CONFIG.name}</span>
|
||||
</div>
|
||||
<div class="footer-info">
|
||||
<p class="footer-slogan">${SITE_CONFIG.slogan.replace(/\n/g, '<br>')}</p>
|
||||
<p class="footer-copyright">${SITE_CONFIG.copyright}</p>
|
||||
<p class="footer-beian">
|
||||
<a href="${APP_INFO.beian.icpLink}" target="_blank">${APP_INFO.beian.icp}</a>
|
||||
|
|
||||
<a href="${APP_INFO.beian.policeLink}" target="_blank">${APP_INFO.beian.police}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function renderSimpleFooter(containerId) {
|
||||
const container = document.getElementById(containerId);
|
||||
if (!container) return;
|
||||
|
||||
container.innerHTML = `
|
||||
<div class="simple-footer">
|
||||
<span>${SITE_CONFIG.copyright}</span>
|
||||
<span class="footer-divider">|</span>
|
||||
<a href="${APP_INFO.beian.icpLink}" target="_blank">${APP_INFO.beian.icp}</a>
|
||||
<span class="footer-divider">|</span>
|
||||
<a href="${APP_INFO.beian.policeLink}" target="_blank">${APP_INFO.beian.police}</a>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function getAppName() {
|
||||
return SITE_CONFIG.name;
|
||||
}
|
||||
|
||||
function getLogoPath() {
|
||||
return SITE_CONFIG.path;
|
||||
}
|
||||
|
||||
function getBrandGradient() {
|
||||
return SITE_CONFIG.brand.gradient;
|
||||
}
|
||||
|
||||
const UserStore = {
|
||||
KEY: 'user_info',
|
||||
|
||||
set(data) {
|
||||
localStorage.setItem(this.KEY, JSON.stringify(data));
|
||||
},
|
||||
|
||||
get() {
|
||||
const data = localStorage.getItem(this.KEY);
|
||||
return data ? JSON.parse(data) : null;
|
||||
},
|
||||
|
||||
clear() {
|
||||
localStorage.removeItem(this.KEY);
|
||||
},
|
||||
|
||||
setToken(token) {
|
||||
const user = this.get() || {};
|
||||
user.token = token;
|
||||
this.set(user);
|
||||
},
|
||||
|
||||
getToken() {
|
||||
const user = this.get();
|
||||
return user ? user.token : null;
|
||||
},
|
||||
|
||||
setUserInfo(info) {
|
||||
const user = this.get() || {};
|
||||
const mergedUser = { ...user, ...info };
|
||||
this.set(mergedUser);
|
||||
},
|
||||
|
||||
getUserInfo() {
|
||||
return this.get();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user