NewHome/AI调整开发文档.md
2026-09-06 21:31:45 +08:00

547 lines
37 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 网站首页修订版 Planv2
> 本文件在 `plan.txt` 基础上修订:补全缺失说明、澄清歧义、统一各处术语。
> 凡原 plan 未说明而本文给出默认值的,均已标注 **【决策】**,可自行调整。
> 本版以"可直接指导编码实现"为标准编写,页面清单、数据模型、布局规格均已明确。
---
## 1. 修订要点总览(原 plan 问题 → 本版处理)
| # | 原 plan 问题 | 本版处理 |
| --- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| 1 | 页面体系与跳转关系未定义 | §2 站点地图,明确首页为最前置页,三大知识库各有独立导航区,工具库跳转功能区 |
| 2 | 首页百分比布局自相矛盾60% 主内容 / 20% 展示栏 / 40% 导航 / 剩余 40% 里"中部主内容" | §4 重构为自洽的分区模型,保留 20% 展示栏 + 40% 板块区意图 |
| 3 | 技术栈表述笼统 | §3 确定 PHP + SQLite(PDO) + 原生 HTML/CSS/JS可加 layui |
| 4 | 导航区"留白 10% / 上半部 20%"表述含糊 | §5 给出明确高度计算规则 |
| 5 | "按钮上分蹦出来一个语言栏"(疑似笔误) | §5 定义为悬浮气泡 tooltip 显示备注 |
| 6 | 导航块数据来源、后台归属、超量排布未定义 | §5.3 + §7 数据模型 + §6.4 分栏规则 |
| 7 | 功能区首页布局缺失、顶部组件关系不清 | §6 定义功能区首页网格布局 + 三类顶部组件分工 |
| 8 | 后台"顺序排布 / 内容设计"对象空泛 | §7.3 拆解为可操作的具体配置项 |
| 9 | 登录会话 / 初始管理员 / 越权访问缺失 | §7.1、§7.2 补齐 |
| 10 | quota.txt、avlist.js 格式未约定 | §10 明确格式 |
| 11 | 备案号、版权文本来源未说明 | §7.3.2 后台可配置 + 默认占位 |
| 12 | 移动端适配规则不全 | §9 响应式断点表 |
| 13 | 目录结构缺失 | §8 目录规划 |
| 14 | "上次更新时间"无定义 | §4.5 定义数据来源与刷新逻辑 |
| 15 | 密码"base64+md5"安全局限 | §7.1 注明局限(按需求实现) |
| 16 | 板块 hover 展开交互描述绕口 | §4.6 重写为实现级规格 |
---
## 2. 站点地图与页面跳转关系
站点逻辑结构(已确认):
```
首页区index
├─ 科普库 → 科普导航页
├─ 红队库 → 红队导航页
├─ 蓝队库 → 蓝队导航页
└─ 工具库 → 功能区
功能区首页
├─ 编码/加解密页
├─ 随机密码生成页
├─ 二维码生成器
└─ 杀软识别页
后台区(/admin需登录
```
页面清单:
| 区域 | 页面 | 文件(建议) | 说明 |
| -------- | ------------------------ | --------------------- | ----------------------------------------------------------------------------- |
| 首页区 | 首页 | `index.php` | 最前置页面 |
| 导航区 | 科普库导航页 | `nav.php?cat=popular` | 科普 / 红队 / 蓝队 三个导航页共用同一模板,按分类参数取数,等价于三个独立页面 |
| 导航区 | 红队库导航页 | `nav.php?cat=red` | 同上 |
| 导航区 | 蓝队库导航页 | `nav.php?cat=blue` | 同上 |
| 功能区 | 功能区首页 | `func/index.php` | 工具入口列表 |
| 功能区 | 编码/加解密 | `func/codec.php` | |
| 功能区 | 随机密码生成 | `func/password.php` | |
| 功能区 | 二维码生成器 | `func/qrcode.php` | |
| 功能区 | 杀软识别 | `func/av.php` | |
| 后台区 | 登录页 | `admin/login.php` | |
| 后台区 | 导航内容管理(增删改查) | `admin/nav.php` | 含排序 |
| 后台区 | 功能区管理(工具入口) | `admin/tools.php` | 工具增删改/排序/启停,见 §6.2 |
| 后台区 | 顺序排布 / 内容设计 | `admin/content.php` | 见 §7.3 |
| 数据接口 | JSON 输出 | `api/nav.php` 等 | 供页面 JS 取导航数据 |
> **【决策】文件全部采用 `.php`**:便于统一 include 顶部栏/页脚、做导航数据渲染、后台鉴权;
> 纯前端静态页若要读 sqlite 也必须走后端接口,统一为 PHP 最省事。
---
## 3. 技术栈与运行环境
- 后端:**PHP ≥ 7.4 + PDO_SQLITE 扩展**,数据库 `data/homepage.db`SQLite3 文件)。
- 前端:原生 HTML5 + CSS3 + 原生 JS允许引入 layui 或轻量库(见 §6 工具页选型)。
- 编码类算法:优先原生 Web CryptoSHAUTF-8 编解码用 `TextEncoder`/`TextDecoder`;如需统一兼容 IE 类场景才引入 `crypto-js`。**【决策:现代浏览器优先,不兼容老 IE】**
- 二维码:引入 `qrcodejs`(单文件 JS 库)。
- 部署形态最终放置于服务器Apache/Nginx + PHP文档根目录即本工程目录。
> 实现约束:编码/加解密、密码生成等均为纯前端 JS 计算,不产生请求;仅导航数据与后台写库走 PHP。
---
## 4. 首页区规格index.php
### 4.1 整体分区(自洽版布局)
页面允许纵向滚动(**不用 JS 死锁 100vh**,避免小屏挤压)。各区块高度按"视口高度比例vh+ 自然内容高度"混用,规格如下:
| 区块 | 顺序 | 高度规格 | 内容 |
| ------------- | ---- | ----------------------------------- | ----------------- |
| A. 顶部展示栏 | 1 | 约 20vh自适应最小不低于 120px | 见 §4.2 |
| B. 名言条 | 2 | 内容自适应(约占 10% 视口) | 随机名言,见 §4.3 |
| C. 四大板块区 | 3 | 约 40vh 起,内容超高可自然延伸 | 见 §4.4 / §4.6 |
| D. 页脚 | 4 | 内容自适应 | 见 §4.7 |
> 原 plan"主内容占 60%20% 展示栏 + 40% 板块)+ 剩余 40% 内 10% 名言 + 下部备案"存在加总冲突,
> 本版将"20% 展示栏 + 40% 板块 + 10% 名言"作为主要视口内规划(合计约 70%,留有余量),备案等落入页脚区块,不再要求凑满 100vh。
### 4.2 顶部展示栏(首页版)
- 整体居中布局,内部水平分布:
- **左侧**:站点 Logo + 站点名称/副标题。
- **右侧**:当前时间(实时刷新,格式 `YYYY-MM-DD HH:mm:ss`+ 上次更新时间(见 §4.5)。
- **下方居中**:天气区块:`<iframe width="500" height="40" src="https://i.tianqi.com/?c=code&a=getcode&id=173&icon=1" frameborder="0"></iframe>`(在移动端可改为宽度 100% 居中iframe 原样保留尺寸缩放)。
- 展示栏背景与整体风格统一§4.8)。
### 4.3 名言条B 区块)
- 内容源:`data/quota.txt`,每次**刷新页面随机取一条**(也可用 JS 刷新按钮换一条)。
- 文件格式见 §10.1。
- 名言为空/文件缺失时显示默认文案,页面不报错。
### 4.4 四大板块区C 区块)
- 四个板块横排均分,按后台 categories 顺序渲染:
**科普库 → 科普导航页**、**红队库 → 红队导航页**、**蓝队库 → 蓝队导航页**、**工具库 → 功能区首页**。
- 板块区上方不再显示“四大板块”大标题,改为**快捷站点胶囊条**(数据表 `quick_links`,后台“内容与顺序”维护):
- 用于放置本域名下其它网站,点击 `target="_blank"` 新标签页打开且保留本页;
- 无配置时不显示该条,板块区保持居中填满布局。
- 每个板块卡片内容:图标 + 名称 + 一句话简介(文案后台可配,见 §7.3.2)。
- 点击行为:科普/红/蓝打开对应导航页;工具库打开功能区首页。
- 基础悬停:变色/放大反馈;高级展开说明见 §4.6。
### 4.5 "上次更新时间"定义(【决策】)
含义 = **导航库内容最近一次被后台修改的时间**
- 后台任何写库操作成功后,同步写入 `settings` 表键 `last_updated`(格式时间戳)。
- 页面通过 PHP 端直接输出该值;无记录时显示"暂无更新记录"。
- 不跟随"站点上线时间",只代表内容数据新鲜度。
### 4.6 板块 hover 展开说明(高级要求,实现级规格)
目的:鼠标悬停某板块时,弹出**只读说明层**,覆盖在板块区上方,用于解释该库是什么;该层**不可点击、不参与布局**position: absolute 叠层)。
规则:
1. 悬停任一板块 → 生成该板块说明浮层,覆盖其上方并向外**延展**,延展优先方向:
- 处于最左侧板块:向右延展;处于最右侧板块:向左延展;
- 处于中间板块时:浮层**移位显示到距其最近的边缘空白侧**(第 2 块→吸附左侧边缘展开,第 3 块→吸附右侧边缘展开)。
2. 所有板块的**实际位置在展开过程中不移动**(视觉上"旁侧浮现"由浮层绝对定位实现,不做网格挤压)。
3. 鼠标移出四大板块整体区域 → 浮层消失。
4. 鼠标从一块移到另一块 → 浮层内容与吸附位置即时切换为该板块。
5. 浮层 z-index 高于板块卡片;浮层 pointer-events 不拦截,防止遮挡后无法移动鼠标。
> 说明文案来源categories.description可在后台"内容设计"中编辑。**【决策:文案每块 1~3 句】**
### 4.7 页脚D 区块)
内容ICP 备案号(`备案号`占位,后台可配)、公安备案号(后台可配,含图标)、版权声明(默认 `© 2026 <站点名> 版权所有`,后台可配)、站点名/其他自定义文本(后台可配,见 §7.3.2)。底部同时放一个低调的"后台管理"入口链接(指向 `admin/login.php`)。
### 4.8 统一视觉规范(全局)
| 项 | 约定 | 备注 |
| ------------ | --------------------------------------------- | ---------------------- |
| 主色 | 深空蓝 `#1f3a5f` + 强调蓝 `#2563eb` | 各页统一 |
| 背景 | 浅灰 `#f5f7fa`,卡片白底 | |
| 字体 | 系统字体栈 + 中文回退(`Microsoft YaHei` 等) | 由 CSS 变量统一 |
| 圆角/阴影 | 卡片统一 8px 圆角、轻投影 | |
| 全局公共样式 | 独立 `assets/css/common.css` | 各页引入,保证风格一致 |
| favicon/标题 | 站点名作为 `<title>` 统一后缀 | 后台可改站点名 |
---
## 5. 导航区规格nav.php科普/红队/蓝队共用)
### 5.1 页面纵向结构
自顶向下依次为:
| 区块 | 规则 | 备注 |
| ---------- | ---------------------------------------------------- | ------------------------------------------------ |
| 顶部留白 | 约 **10vh**(不小于 60px | 纯背景留白,不做内容 |
| 搜索栏 | 位于留白之下,高度 **20vh**(下限 72px、上限 160px | 即原 plan"上半部 20% + 最上方留白 10%"的明确算法 |
| 导航内容区 | 占据剩余空间,内容超高时**整页纵向滚动** | 见 5.3 |
### 5.2 搜索栏规格(高级要求)
- 结构(水平一行,居中,定宽容器内):**引擎切换按钮(左)|输入框(中)|搜索按钮(右)**。
- 引擎切换:点击循环切换或下拉选择,引擎列表默认:`bing / baidu / github / google`**【决策】可通过后端接口/常量维护,便于增删**)。
- 搜索 URL 模板(选中引擎后拼 `关键词``target="_blank"` 新开页):
- bing: `https://www.bing.com/search?q={kw}`
- baidu: `https://www.baidu.com/s?wd={kw}`
- github: `https://github.com/search?q={kw}`
- google: `https://www.google.com/search?q={kw}`
- 输入框**有内容**时,最右侧出现"清除(×)"按钮;点击清空并聚焦。
- 触发方式:点击搜索按钮或**回车**。
- 关键词需 `encodeURIComponent` 处理。
### 5.3 导航内容区(主体)
- 桌面≥1200px
- 页面左右两侧各留白 **15%**
- 中间 70% 区域划分为**三大列**(列宽相等、列间有间距);
- 大列**无标题**,仅是布局容器。
- 导航块(最小管理单元):
- 每个块 = **1 个块标题(加粗居左)+ 内部 3 小列 × 5 行**(即每块最多 15 个按钮位);
- 块标题、按钮是否填满不限制3 列 5 行是最大学位,不足则留空)。
- 块尺寸固定(宽度=所在列宽,高度固定,各按钮行高统一)。
- 分列规则(【决策】):取当前分类下所有导航块(按 sort 排序),**按序轮转填充三列**(第 1 块→列1第 2 块→列2第 3 块→列3第 4 块→列1……保证三列块数均衡列内纵向堆叠超高则整页滚动。
- 按钮交互:
- 鼠标移上 → 按钮变色(统一高亮样式);
- 该按钮存在备注信息时 → **浮出悬浮气泡 tooltip** 显示备注,移出消失;无备注仅变色;
- 点击 → `target="_blank"` 新标签页打开链接(加 `rel="noopener noreferrer"`)。
- 链接规范:允许完整 URLhttp/https后台录入时为空则按钮置灰不可点。
- 内容来源:按当前 `cat`popular/red/blue读取 `nav_blocks`、`nav_items`§7.4)。
- 空状态:无任何块时显示占位提示,不报错。
### 5.4 移动端
见 §9 响应式;核心:中间区域改单列,导航块铺满屏宽,块内 3 小列在 ≥600px 保持 3 列、<600px 折叠为 1 列或 2 (【决策<600px 时单小列显示即一行一个按钮】)。导航块标题列布局保留
---
## 6. 功能区规格
### 6.1 页面清单与公共头部(功能区统一)
功能区包含 1 个入口首页 + 4 个工具页所有功能区页面使用统一的**功能页头部条**区别于首页展示栏
```
[ ← 返回功能区首页 ] 本功能页标题(居中) [ 首页 ]
```
- 最左侧按钮 返回 `func/index.php`功能子页上在功能区首页本身时该按钮隐藏或置灰
- 最右侧按钮 返回站点首页 `index.php`
- 中间标题 当前功能页名称
- 功能区首页的头部条中间显示"功能区"。
### 6.2 功能区首页func/index.php
- 顶部为风格统一的大展示横幅复用首页视觉可含功能区简介)。
- 主体为工具**卡片网格**每张卡片 = 图标 + 工具名 + 一句话说明点击进入对应子页
- 工具卡片列表** `func_tools` 表驱动后台功能区管理”(admin/tools.php可增删改/排序/启停**
- 站内工具 codec.php需先在 `func/` 下开发对应页面再到后台登记入口
- 外链工具填写完整 http(s) 地址作为新窗口卡片直接使用无需写代码
- 默认预置编码/加解密随机密码生成二维码生成器杀软识别四张卡片
### 6.3 编码/加解密页func/codec.php
- **布局**左侧算法/方向选择区 + 上下或左右两个**自由编辑**文本区输入区输出区)。
- 两个文本区都允许用户自由编辑输出区不设只读
- 两个文本区均支持 **右下角拖拽竖向放大resize: vertical横向宽度不变**
- 提供"交换 / 回填"便捷操作将输出内容一键放回输入或将输入/输出一键互换(【决策】)。
- **支持算法与方向**
| 算法 | 编码方向 | 解码方向 | 实现要求 |
| --------------------- | -------------------- | -------------------- | --------------------------------------------------------------------------- |
| Base64 | 编码 | 解码 | 支持中文等 Unicode UTF-8 Base64 |
| Base32 | 编码 | 解码 | 同上 |
| MD5 | | 不可逆 | 输出 32 位十六进制小写 |
| SHA-1/224/256/384/512 | | 不可逆 | 输出十六进制小写 |
| URL | `encodeURIComponent` | `decodeURIComponent` | 整段处理 |
| Unicode | →`\uXXXX` 序列 | `\uXXXX`文本 | 需支持中文emoji/增补字符按 UTF-16 代理对编码成两个 `\uXXXX`解码正确还原 |
- 交互模型选算法 + 选方向编码/解码/加密哈希等按需)→ 点击"执行" 结果写入输出区错误非法输入等以页面内提示展示不弹窗
- 执行按钮文案随方向变化"编码""解码""加密")。
### 6.4 随机密码生成页func/password.php
- 字符集选项多选/开关
- 大写字母 `A-Z`小写字母 `a-z`数字 `0-9`特殊符号建议默认 `!@#$%^&*()-_=+[]{};:,.<>?`
- **自定义字符集输入框**勾选后启用用户自定义任意字符去重勾选"自定义"时以自定义为准忽略其余开关
- 长度滑块或数字输入范围 **4~64**默认 16
- 生成一次生成 **多组(默认 5 条)**决策】,逐条显示在可编辑文本区/列表每条后带"复制"按钮
- 结果文本区同样支持竖向拖拽放大
- 至少选一个字符集且长度合法才可生成否则提示
### 6.5 二维码生成器func/qrcode.php
- 输入框 + "生成"按钮使用 `qrcodejs` 渲染
- **放大预览**提供尺寸滑块 128~512px或点击图片弹出大图预览大图可在新层中查看**下载**提供下载按钮导出为 PNGcanvas dataURL 或库的 toDataURL)。
- 边界处理内容为空禁止生成内容过长超出二维码容量时提示库报错或预检测)。
- 空白页签无输入时不展示二维码区
### 6.6 杀软识别页func/av.php
- 输入粘贴 `tasklist` 命令输出文本的 textarea支持竖向放大横向不可变)。
- 匹配库`data/avlist.js`(§10.2)。
- 解析规则
- 按行读取忽略表头行"映像名称/Image Name/PID/===")、空行
- 每行取**首个 token** 为进程名空格/制表分隔
- `avList` 键匹配**大小写不敏感**key 若不带扩展名比较时双方都去掉扩展名后再比一次(【决策兼容两类写法)。
- 输出匹配结果**表格**`进程名 | 匹配结果 | 产品/说明`未匹配的行结果列显示"未识别"说明列留空
- 附加统计总进程数匹配数未识别数
- 前端直接 `<script src="../data/avlist.js">` 引入全局 `avList` 对象即可无需后端
---
## 7. 后台区规格(/admin
### 7.1 登录与会话
- 登录页用户名 + 密码错误统一提示"用户名或密码错误"。
- 密码存储算法**按需求`md5(base64(明文密码))`**。
- 注明局限该方案是弱单向哈希无盐仅用于低安全要求的个人站不用于高价值系统若后期可接受建议换 `password_hash()`bcrypt升级本版实现严格按需求算法
- 会话管理PHP `session`登录成功后写入 `$_SESSION['admin']`后台所有页面 login 在顶部做鉴权
- 未登录访问后台页 302 跳转 `login.php`
- 退出登录 `logout.php`销毁 session 并跳登录页
- 会话空闲超时**【决策30 分钟**后失效需重新登录
- 初始管理员首次启动数据库不存在用户时 `install` 逻辑自动创建默认账号**【决策默认账号 `admin` / 密码 `admin123`首次登录后引导修改**)。
- CSRF 防护后台写操作表单带一次性 tokensession 提交校验低成本基础防护)。
- 登录尝试不做复杂限流仅简单延时提示个人站可接受)。
### 7.2 后台整体布局
- 后台顶部导航条后台名称 + 快捷入口导航内容管理 / 顺序排布与内容设计 / 返回前台首页+ 当前管理员 + 退出
- 后台页面自身不引入首页天气/名言等前台组件保持简洁风格色板仍与前台统一)。
- 所有表单保存成功后给反馈保存成功条/提示失败显示原因 SQL 错误信息可折叠展示便于排查)。
### 7.3 后台功能拆解(原 plan 空泛项的落地)
plan 只写了"1.顺序排布 2.内容设计 3.导航内容增删改查"本版将其拆成可操作模块
#### 7.3.1 导航内容管理admin/nav.php
- 顶部先选择操作分类**科普库 / 红队库 / 蓝队库**工具库对应功能区不在导航内容范围内)。
- 块级操作针对 nav_blocks新增块删除块编辑块标题块上移/下移调整在页面中的先后
- 按钮位操作针对 nav_items在每个块内新增/编辑/删除按钮字段
- 文字必填)、URL必填)、备注可空空则不显示 tooltip)、序号
- 按钮在块内"3 小列 × 5 "中的位置可由排序决定**【决策 sort 顺序自动排列不足位留空不做拖拽定位到格**
- 前端交互用可展开的块列表展示每个块内按钮表格行式管理保存按钮批量提交一次提交当前分类全部变更)。
- 删除块/按钮需二次确认
#### 7.3.2 内容设计admin/content.php
统一为一个"站点内容与设置"按分组编辑并保存到 `settings`
| 分组 | 可编辑项 | 存储 | 用途 |
| -------- | ------------------------------------------------------------ | ---------------------------------- | ------------------------------- |
| 站点信息 | 站点名副标题 | settings | 首页展示栏、`<title>` 后缀 |
| 板块文案 | 四大板块各自的图标选择/文案/一句话简介 | settings 或 categories.description | 首页四大板块卡片与 hover 说明层 |
| 底部信息 | ICP 备案号、公安备案号、版权行、自定义底部文本 | settings | 首页/全站页脚 |
| 名言库 | 名言**新增 / 删除 / 清空**(文本框逐行维护,写回 quota.txt | data/quota.txt | 首页名言条 |
| 其他 | 上次更新时间说明(只读展示) | — | — |
- 底部自定义文本支持纯文本与单条链接(安全起见只允许 http(s) 开头的 `<a>` 形态,**不做富文本/HTML 注入**)。
#### 7.3.3 顺序排布admin/content.php 或独立区)
明确排序对象与层级(自外向内):
1. **分类(四大板块)顺序** → 决定首页四大板块横排顺序;
2. **块顺序**(每个分类内)→ 决定导航页块的前后;
3. **块内按钮顺序** → 决定按钮在块内 3×5 格中的先后。
排序交互统一提供"上移/下移 + 序号输入"两种方式(拖拽列为可选项)。
### 7.4 数据模型SQLite DDL
```sql
-- 管理员表
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL -- md5(base64(明文))
);
-- 键值设置表站点名、备案号、版权、板块文案、last_updated 等)
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT
);
-- 四大板块分类popular/red/blue/tool
CREATE TABLE categories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
key TEXT UNIQUE NOT NULL, -- popular/red/blue/tool
name TEXT NOT NULL, -- 科普库/红队库/蓝队库/工具库
description TEXT DEFAULT '', -- 首页卡片一句话简介 + hover 说明文案
sort INTEGER DEFAULT 0
);
-- 导航块(仅 popular/red/blue 三类使用)
CREATE TABLE nav_blocks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cat_id INTEGER NOT NULL REFERENCES categories(id),
title TEXT NOT NULL,
sort INTEGER DEFAULT 0
);
-- 块内按钮位(每块最多 3×5=15由 sort 顺序占位)
CREATE TABLE nav_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
block_id INTEGER NOT NULL REFERENCES nav_blocks(id),
label TEXT NOT NULL,
url TEXT NOT NULL,
note TEXT DEFAULT '', -- 备注;空则按钮 hover 不弹气泡
sort INTEGER DEFAULT 0
);
-- 功能区工具入口(后台“功能区管理”维护)
CREATE TABLE func_tools (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
icon TEXT DEFAULT '', -- 字符/emoji 图标
description TEXT DEFAULT '', -- 一句话说明
url TEXT NOT NULL DEFAULT '', -- 站内相对地址 或 外链 http(s)
is_external INTEGER NOT NULL DEFAULT 0,-- 1=外链(新窗口)
enabled INTEGER NOT NULL DEFAULT 1,-- 1=前台展示
sort INTEGER NOT NULL DEFAULT 0
);
-- 首页快捷站点本域名其它网站target=_blank后台“内容与顺序”维护
CREATE TABLE quick_links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
url TEXT NOT NULL DEFAULT '', -- 完整 http(s) 地址
icon TEXT DEFAULT '', -- 字符/emoji 图标
enabled INTEGER NOT NULL DEFAULT 1,
sort INTEGER NOT NULL DEFAULT 0
);
```
> 名言不建表(保持 quota.txt 为数据源);`categories` 四行 + `settings` 基础键在首次运行时自动初始化install 脚本)。
---
## 8. 目录结构规划
```
HomePage/ # 网站根(部署时即站点根)
├── index.php # 首页区
├── nav.php # 导航区模板(?cat=popular|red|blue
├── func/
│ ├── index.php # 功能区首页
│ ├── codec.php # 编码/加解密
│ ├── password.php # 随机密码
│ ├── qrcode.php # 二维码
│ └── av.php # 杀软识别
├── admin/
│ ├── login.php # 后台登录
│ ├── logout.php
│ ├── nav.php # 导航内容管理 + 排序
│ ├── tools.php # 功能区工具入口管理
│ ├── content.php # 内容设计 / 站点设置
│ └── _guard.php # 鉴权 includerequire 到各后台页顶部)
├── api/
│ └── nav.php # 输出导航 JSON前台导航页/首页读取用)
├── includes/
│ ├── db.php # PDO + SQLite 连接与 install 初始化
│ ├── auth.php # 登录/校验/session 工具
│ └── settings.php # settings 读写封装
├── assets/
│ ├── css/common.css # 全局样式(统一风格、响应式断点)
│ ├── js/common.js # 通用组件tooltip、竖向 resize 类等)
│ ├── js/codec.js # 编码算法base64/base32/url/unicode
│ ├── js/sha.js # SHA 系列
│ ├── js/qrcode.min.js # qrcodejs
│ └── img/ # logo/图标
├── data/
│ ├── homepage.db # SQLite运行时自动创建
│ ├── quota.txt # 名人名言(行式,后台可编辑)
│ └── avlist.js # 杀软进程映射表
└── plan.txt # 原始 plan保留存档
```
---
## 9. 响应式断点规划
| 断点 | 首页 | 导航区 | 功能区 |
| ------------------ | ------------------------------------- | --------------------------------------------------------------------------- | ----------------------------------- |
| ≥1200px桌面 | 四板块横排;天气 iframe 500×40 原尺寸 | 左右各留白 15%,中间三列 | 工具卡片多列;编码页输入/输出可并排 |
| 7681199px平板 | 四板块两行两列或自适应横排 | 左右留白收窄至 5%,仍三列(列宽收紧) | 卡片两列 |
| <768px手机 | 板块单列或 2×2 网格名言条自然换行 | **单列**中间区全宽导航块一列块内小列 1 列显示原要求搜索栏自适应 | 卡片单列 |
补充规则
- 顶部展示栏/搜索栏/功能页头部条在移动端自动收缩高度与内边距天气 iframe 宽度等比缩放居中
- 编码/二维码等页面在 <768px 时输入输出区改为上下堆叠
- 底部备案等信息移动端居中换行
---
## 10. 数据文件格式约定
### 10.1 data/quota.txt名人名言
- 编码UTF-8 BOM)。
- 每行一条名言**空行或 `#` 开头为注释**后台编辑时自动忽略)。
- 首次实现时预置 5~10 条示例
- 读取后端 PHP 读取并随机输出一条首页渲染避免名言文件被直接下载的路径泄露问题不在此列公开文件无碍)。
示例
```
# 示例名言
知彼知己,百战不殆。
知识就是力量。
```
### 10.2 data/avlist.js杀软进程映射表
- 全局对象写法沿用原示例结构首次实现预置若干常见条目
```js
var avList = {
"360tray.exe": "360 安全卫士 - 实时保护",
"360safe.exe": "360 安全卫士",
"QQPCRTP.exe": "QQ电脑管家",
"kxescore.exe": "金山毒霸",
"ekrn.exe": "ESET NOD32",
"MsMpEng.exe": "Windows Defender",
};
```
- 约定value 统一为 `产品名 - 组件描述` 风格key 含扩展名匹配时忽略大小写
- 该文件由实现时创建**不进后台管理**如需可扩展)。
---
## 11. 部署与初始化说明
1. 环境要求PHP 7.4启用 PDO_SQLITE)、Apache/Nginx无需额外安装数据库服务
2. 将工程目录整体上传至服务器站点根目录`data/` 目录需 PHP 可写用于创建/写入 `homepage.db` `quota.txt`)。
3. 首次访问任意页面触发自动初始化建库建表写入 `categories` 四行默认 settings默认管理员 `admin / admin123`生成 quota.txt/avlist.js 示例若不存在)。
4. 首登后台后请修改默认密码后台导航条提供修改密码入口)。
5. 天气 iframe 依赖外网`i.tianqi.com`离线环境下该区块显示占位不阻塞页面
---
## 12. 实施顺序与验收要点(供编码阶段使用)
| 阶段 | 交付物 | 验收标准 |
| ----------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1. 框架 | 目录结构common.css/common.jsincludes/db.phpinstall 初始化数据示例 | 首次运行自动建库建表成功首页可展示默认数据 |
| 2. 首页 | index.php展示栏/名言条/四板块 hover 展开/页脚 | 四板块正确跳转四大目标hover 展开规则与 §4.6 一致时间刷新名言随机布局符合 §4 |
| 3. 导航区 | nav.php 三分类 + 搜索栏 + tooltip + 分列 | bing/baidu/github 搜索新开页回车/清除按钮可用导航块 hover 变色/tooltip 正确三列轮转正确空态正常 |
| 4. 功能区 | func 五个页面 | 中文字符 Base64/Base32/Unicode 编解码正确SHA/MD5 输出正确密码可自定义生成二维码生成/放大/下载杀软识别匹配与统计正确textarea 竖向可拉伸 |
| 5. 后台 | 登录/导航管理/内容设计/排序 | 默认账号可登录未登录访问被拦截分类//按钮 CRUD 与排序即时反映到前台备案/名言等设置生效last_updated 更新并展示到首页 |
| 6. 联调打磨 | 响应式与细节 | 三档断点符合 §9外链新开页风格一致 500/JS 报错 |
---
## 13. 仍建议你确认的开放点(不影响启动开发)
1. 功能区头部条是否也带天气 iframe —— 本版默认**仅首页展示栏带天气**功能页不带避免重复加载)。
2. 首页名言是否允许点击换一条 —— 默认刷新页面换一条
3. 导航页大列块超多时是否允许整页纵向滚动 —— 默认允许
4. 二维码是否提供"滚轮缩放" —— 默认提供尺寸滑块 + 点击放大预览两种
> 若以上默认与你设想不同,修改对应【决策】标注即可,其余规格不受影响。