2025-07-31 19:40:33 +00:00
|
|
|
|
# 信息管理系统原型项目
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 🚨 核心开发约束(必须严格遵守)
|
|
|
|
|
|
|
|
|
|
|
|
### 文件分离原则
|
|
|
|
|
|
1. **HTML内容必须独立存储** - 所有页面内容存储在 `pages/` 目录的独立HTML文件中
|
|
|
|
|
|
2. **CSS样式必须独立存储** - 所有样式存储在 `css/` 目录的独立CSS文件中
|
|
|
|
|
|
3. **JavaScript功能必须独立存储** - 所有页面功能存储在 `js/` 目录的独立JS文件中
|
|
|
|
|
|
|
|
|
|
|
|
### 严禁事项 ❌
|
|
|
|
|
|
- **禁止在JavaScript中硬编码HTML内容** - 任何HTML标记都不能出现在JS文件中
|
|
|
|
|
|
- **禁止在JavaScript中硬编码CSS样式** - 任何CSS样式都不能出现在JS文件中
|
|
|
|
|
|
- **禁止在HTML中编写大段JavaScript代码** - 仅允许简单的事件调用
|
|
|
|
|
|
- **禁止随意创建新文件** - 优先编辑现有文件,必须创建时需遵循规范
|
|
|
|
|
|
- **禁止破坏现有架构模式** - 必须遵循动态加载和模块化原则
|
|
|
|
|
|
|
|
|
|
|
|
### 必须遵循 ✅
|
|
|
|
|
|
- **所有页面内容存储在pages/目录**
|
|
|
|
|
|
- **所有页面样式存储在css/目录**
|
|
|
|
|
|
- **所有页面功能存储在js/目录**
|
|
|
|
|
|
- **JavaScript仅处理逻辑,通过fetch加载HTML和CSS**
|
|
|
|
|
|
- **每个JavaScript模块必须包含初始化函数**
|
|
|
|
|
|
- **使用中文界面文本**
|
|
|
|
|
|
- **遵循文件命名和结构约定**
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 项目概述
|
|
|
|
|
|
这是一个传统的中文信息管理系统原型,采用纯HTML/CSS/JavaScript技术栈,实现左侧菜单栏 + 中央tab展示区域的经典布局。项目专注于演示系统架构和交互流程,严格遵循内容、样式、逻辑三分离原则。
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 文件结构规范
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
merchant/
|
|
|
|
|
|
├── index.html # 主框架页面
|
|
|
|
|
|
├── styles.css # 全局样式文件
|
|
|
|
|
|
├── script.js # 核心JavaScript逻辑
|
2025-08-01 08:35:52 +00:00
|
|
|
|
├── css/ # 专用样式目录
|
|
|
|
|
|
│ ├── coupon-modal.css # 优惠券弹窗样式
|
|
|
|
|
|
│ └── ... # 其他专用样式
|
2025-07-31 20:05:15 +00:00
|
|
|
|
├── js/ # 页面功能模块目录
|
2025-08-01 08:35:52 +00:00
|
|
|
|
│ ├── level-settings.js # 等级设置页面功能
|
|
|
|
|
|
│ ├── level-edit.js # 等级编辑页面功能
|
|
|
|
|
|
│ └── ... # 其他页面功能
|
2025-07-31 19:40:33 +00:00
|
|
|
|
├── pages/ # 页面内容目录
|
2025-08-01 08:35:52 +00:00
|
|
|
|
│ ├── level-settings.html # 等级设置页面
|
|
|
|
|
|
│ ├── coupon-modal.html # 优惠券弹窗内容
|
|
|
|
|
|
│ └── ... # 其他页面内容
|
2025-07-31 19:40:33 +00:00
|
|
|
|
└── CLAUDE.md # 项目文档
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 开发流程规范
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
### 1. 添加新功能的标准流程
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
#### Step 1: 创建HTML内容文件
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 在pages/目录创建页面内容
|
|
|
|
|
|
pages/feature-name.html
|
|
|
|
|
|
```
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
#### Step 2: 创建CSS样式文件(如需要)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 在css/目录创建专用样式
|
|
|
|
|
|
css/feature-name.css
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### Step 3: 创建JavaScript功能文件
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 在js/目录创建功能逻辑
|
|
|
|
|
|
js/feature-name.js
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### Step 4: JavaScript模块标准结构
|
2025-07-31 20:05:15 +00:00
|
|
|
|
```javascript
|
2025-08-01 08:35:52 +00:00
|
|
|
|
// js/feature-name.js
|
2025-07-31 20:05:15 +00:00
|
|
|
|
|
|
|
|
|
|
/**
|
2025-08-01 08:35:52 +00:00
|
|
|
|
* 功能模块名称
|
|
|
|
|
|
* 功能描述
|
2025-07-31 20:05:15 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// 页面初始化函数(必需)
|
2025-08-01 08:35:52 +00:00
|
|
|
|
function initFeatureName() {
|
|
|
|
|
|
console.log('功能模块已初始化');
|
|
|
|
|
|
// 如果需要CSS,动态加载
|
|
|
|
|
|
loadFeatureCSS();
|
|
|
|
|
|
// 其他初始化逻辑
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 加载专用CSS(如需要)
|
|
|
|
|
|
function loadFeatureCSS() {
|
|
|
|
|
|
if (!document.getElementById('featureCSS')) {
|
|
|
|
|
|
const link = document.createElement('link');
|
|
|
|
|
|
link.id = 'featureCSS';
|
|
|
|
|
|
link.rel = 'stylesheet';
|
|
|
|
|
|
link.href = 'css/feature-name.css';
|
|
|
|
|
|
document.head.appendChild(link);
|
|
|
|
|
|
}
|
2025-07-31 20:05:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
// 功能函数
|
2025-07-31 20:05:15 +00:00
|
|
|
|
function someFunction() {
|
2025-08-01 08:35:52 +00:00
|
|
|
|
// 功能实现,仅处理逻辑
|
|
|
|
|
|
// 需要HTML时使用fetch加载
|
2025-07-31 20:05:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
// 暴露到全局作用域供HTML调用
|
2025-07-31 20:05:15 +00:00
|
|
|
|
window.someFunction = someFunction;
|
|
|
|
|
|
|
|
|
|
|
|
// 页面清理函数(可选)
|
2025-08-01 08:35:52 +00:00
|
|
|
|
function cleanupFeatureName() {
|
2025-07-31 20:05:15 +00:00
|
|
|
|
// 清理事件监听器等
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
### 2. 动态内容加载规范
|
|
|
|
|
|
|
|
|
|
|
|
#### HTML内容加载
|
2025-07-31 19:40:33 +00:00
|
|
|
|
```javascript
|
2025-08-01 08:35:52 +00:00
|
|
|
|
// 正确的HTML加载方式
|
|
|
|
|
|
async function loadHTMLContent() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const response = await fetch('pages/content.html');
|
|
|
|
|
|
const htmlContent = await response.text();
|
|
|
|
|
|
document.getElementById('container').innerHTML = htmlContent;
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('加载失败:', error);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-07-31 19:40:33 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
#### CSS样式加载
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 正确的CSS加载方式
|
|
|
|
|
|
function loadCSS(cssFile, id) {
|
|
|
|
|
|
if (!document.getElementById(id)) {
|
|
|
|
|
|
const link = document.createElement('link');
|
|
|
|
|
|
link.id = id;
|
|
|
|
|
|
link.rel = 'stylesheet';
|
|
|
|
|
|
link.href = `css/${cssFile}`;
|
|
|
|
|
|
document.head.appendChild(link);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 文件命名规范
|
|
|
|
|
|
- **页面文件**: `pages/功能名称.html` (kebab-case)
|
|
|
|
|
|
- **样式文件**: `css/功能名称.css` (kebab-case)
|
|
|
|
|
|
- **脚本文件**: `js/功能名称.js` (kebab-case)
|
|
|
|
|
|
- **初始化函数**: `init[功能名称CamelCase]()`
|
|
|
|
|
|
- **CSS ID**: `功能名称CSS` (CamelCase)
|
|
|
|
|
|
|
|
|
|
|
|
## 架构特点
|
|
|
|
|
|
|
|
|
|
|
|
### 三分离原则
|
|
|
|
|
|
1. **内容层(HTML)**: 存储页面结构和内容,不包含样式和逻辑
|
|
|
|
|
|
2. **表现层(CSS)**: 存储样式定义,不包含内容和逻辑
|
|
|
|
|
|
3. **逻辑层(JavaScript)**: 存储交互逻辑,通过API加载内容和样式
|
|
|
|
|
|
|
|
|
|
|
|
### 动态加载机制
|
|
|
|
|
|
- **按需加载**: 只有需要时才加载对应的HTML、CSS、JS
|
|
|
|
|
|
- **智能缓存**: 避免重复加载已加载的资源
|
|
|
|
|
|
- **错误处理**: 完整的加载失败降级方案
|
|
|
|
|
|
- **自动初始化**: 自动调用页面对应的初始化函数
|
|
|
|
|
|
|
|
|
|
|
|
### 模块化管理
|
|
|
|
|
|
- **独立开发**: 每个功能模块可独立开发和维护
|
|
|
|
|
|
- **标准接口**: 统一的初始化和清理函数接口
|
|
|
|
|
|
- **全局暴露**: 需要在HTML中调用的函数暴露到window对象
|
|
|
|
|
|
|
|
|
|
|
|
## 核心功能
|
|
|
|
|
|
|
|
|
|
|
|
### 左侧菜单系统
|
|
|
|
|
|
- 一级菜单:主功能模块入口
|
|
|
|
|
|
- 二级菜单:具体功能页面,支持展开/收起
|
|
|
|
|
|
- 互斥展开:同时只能展开一个子菜单
|
|
|
|
|
|
|
|
|
|
|
|
### 中央Tab系统
|
|
|
|
|
|
- 多页面管理:支持同时打开多个页面tab
|
|
|
|
|
|
- 防重复打开:相同页面直接激活已存在tab
|
|
|
|
|
|
- 智能关闭:关闭当前tab时自动激活相邻tab
|
|
|
|
|
|
|
|
|
|
|
|
## 开发示例
|
|
|
|
|
|
|
|
|
|
|
|
### 弹窗功能示例
|
|
|
|
|
|
以优惠券弹窗为例,展示标准的三分离开发模式:
|
|
|
|
|
|
|
|
|
|
|
|
1. **HTML内容** (`pages/coupon-modal.html`)
|
2025-07-31 19:40:33 +00:00
|
|
|
|
```html
|
2025-08-01 08:35:52 +00:00
|
|
|
|
<div id="couponModal" class="modal-overlay">
|
|
|
|
|
|
<div class="modal-content">
|
|
|
|
|
|
<!-- 弹窗内容结构 -->
|
2025-07-31 19:40:33 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
2. **CSS样式** (`css/coupon-modal.css`)
|
|
|
|
|
|
```css
|
|
|
|
|
|
.modal-overlay {
|
|
|
|
|
|
/* 弹窗样式定义 */
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **JavaScript逻辑** (`js/level-edit.js`)
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
async function showCouponModal(level) {
|
|
|
|
|
|
// 加载CSS
|
|
|
|
|
|
loadCouponModalCSS();
|
|
|
|
|
|
// 加载HTML
|
|
|
|
|
|
const response = await fetch('pages/coupon-modal.html');
|
|
|
|
|
|
const modalHtml = await response.text();
|
|
|
|
|
|
document.body.insertAdjacentHTML('beforeend', modalHtml);
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-31 19:40:33 +00:00
|
|
|
|
## 样式系统
|
|
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
### 全局样式
|
|
|
|
|
|
- `styles.css`: 基础框架样式
|
|
|
|
|
|
- 主题色彩:深蓝色主调,蓝色高亮
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
### 模块样式
|
|
|
|
|
|
- 每个功能模块可有独立的CSS文件
|
|
|
|
|
|
- 按需动态加载,避免样式冲突
|
|
|
|
|
|
- 使用有意义的CSS类名
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 技术要求
|
2025-07-31 19:40:33 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
### 运行环境
|
2025-07-31 19:40:33 +00:00
|
|
|
|
```bash
|
2025-08-01 08:35:52 +00:00
|
|
|
|
# 必须使用HTTP服务器(fetch API要求)
|
2025-07-31 19:40:33 +00:00
|
|
|
|
python -m http.server 8000
|
|
|
|
|
|
# 或
|
|
|
|
|
|
npx serve .
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 浏览器兼容性
|
|
|
|
|
|
- Chrome 60+ (支持fetch API和ES6 async/await)
|
|
|
|
|
|
- Firefox 55+
|
|
|
|
|
|
- Safari 12+
|
|
|
|
|
|
- Edge 79+
|
|
|
|
|
|
|
|
|
|
|
|
## 项目目标
|
2025-08-01 08:35:52 +00:00
|
|
|
|
此项目是快速原型系统,用于演示传统管理系统的布局和交互流程。严格遵循内容、样式、逻辑分离原则,为团队协作和后续开发提供清晰的技术基础。
|
2025-07-31 20:05:15 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
## 开发检查清单
|
2025-07-31 20:05:15 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
在开发任何功能前,请确认:
|
2025-07-31 20:05:15 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
- [ ] 是否创建了独立的HTML文件存储内容?
|
|
|
|
|
|
- [ ] 是否创建了独立的CSS文件存储样式?
|
|
|
|
|
|
- [ ] JavaScript中是否避免了硬编码HTML和CSS?
|
|
|
|
|
|
- [ ] 是否使用fetch API动态加载内容和样式?
|
|
|
|
|
|
- [ ] 是否包含了初始化函数?
|
|
|
|
|
|
- [ ] 是否将需要调用的函数暴露到全局作用域?
|
|
|
|
|
|
- [ ] 文件命名是否遵循kebab-case规范?
|
|
|
|
|
|
- [ ] 是否使用了中文界面文本?
|
2025-07-31 20:05:15 +00:00
|
|
|
|
|
2025-08-01 08:35:52 +00:00
|
|
|
|
**记住:内容、样式、逻辑三分离是本项目的核心原则,违反此原则的代码不被接受。**
|