华为云码道----大学生二手交易平台
项目地址:https://atomgit.com/Hhuhkt/campus-second-hand 技术栈:HTML5 CSS3 JavaScript(原生三件套,零框架、零构建工具)一、项目背景与动机每逢毕业季,宿舍楼下总会堆满被遗弃的宝贝:九成新的台灯、只翻过几页的考研教材、吃灰一年的吉他;而开学季,新生们又在四处打听哪里能买到便宜的二手教材和电器。供给和需求明明就在同一栋楼里,却缺少一个把它们连接起来的地方。这就是「校淘 CampusSecond」的出发点——一个专为大学生设计的二手货物交易平台。它不像闲鱼那样面向全社会,而是聚焦校园场景:同校面交、当天拿货、当面验货,信任成本天然更低。作为一个课程实践项目,我选择用最朴素的前端三件套来实现它:不依赖 React、不依赖 Vue、不用任何打包器,一个浏览器、三个文件,双击 index.html 就能完整运行。我希望用这个项目证明:原生 Web 技术同样能做出体验现代、功能完整的页面。二、功能总览模块 功能点 导航栏 毛玻璃吸顶导航、全局关键词搜索 Hero 首屏 渐变主视觉 平台口号,一键直达商品区️ 商品分类 8 大类目,每类独立图标与专属配色,点击即筛选️ 在售好物 分类筛选 关键词搜索 商品卡片(价格/成色/浏览量) 价格分析 各类目均价柱状图 各成色占比饼图(纯 CSS 实现) AI 购物顾问 对接大模型流式接口,实时逐字回答二手购物问题 响应式 适配手机、平板、桌面三种屏幕宽度三、页面结构与设计思路整个页面按「先逛、再买、后决策」的用户路径纵向展开:导航栏 → Hero → 商品分类 → 在售好物 → 价格分析 → AI 顾问 → 页脚3.1 视觉设计主色调:科技蓝 #4f6ef7 作为主色,传递平台托管、值得信赖的感觉;暖橙 #ff7e5f 作为强调色,专门用于价格数字——价格是二手交易里最抓眼球的元素,必须让它跳出来。配色系统:所有颜色收敛到 CSS 变量里,一处修改全站生效::root {–primary: #4f6ef7;–accent: #ff7e5f;–radius: 14px;–shadow: 0 6px 20px rgba(79, 110, 247, .12);}卡片化语言:分类、商品、图表全部使用白底圆角卡片 悬浮上浮动效(translateY(-4px) 阴影加深),风格统一、层次清晰。毛玻璃导航:backdrop-filter: blur(10px) 让吸顶导航呈现半透明磨砂质感,滚动时内容从导航下穿过的细节很有质感。3.2 图标系统:用不同图标代表不同分类分类图标是这个项目里我最花心思的部分。每种类目都绑定了一个 Font Awesome 图标 一种专属颜色,用户扫一眼颜色就能定位类目:分类 图标 专属色 设计理由教材教辅 fa-book 科技蓝 知识、学术的经典联想电子产品 fa-laptop 青绿 科技感、数码感生活用品 fa-mug-hot 琥珀黄 宿舍生活的烟火气服饰鞋包 fa-shirt 珊瑚橙 活力、年轻运动器材 fa-basketball 正红 运动的能量感乐器 fa-guitar 紫色 艺术与个性美妆护肤 fa-spray-can-sparkles 玫粉 美妆品类天然联想其他 fa-box-open 中性灰 兜底类目,不抢视觉这些图标不只在分类区出现——商品卡片的封面色块复用同一套图标和颜色,同品类商品在页面任何位置都保持一致的视觉身份,形成色彩即类目的条件反射。四、核心功能实现细节4.1 数据驱动的渲染所有数据集中定义为 JS 数组,渲染函数从数据出发生成 DOM,改数据即改页面:const CATEGORIES [{ name: “教材教辅”, icon: “fa-solid fa-book”, color: “#4f6ef7” },// …];const GOODS [{ title: “联想小新 Pro14 笔记本”, cat: “电子产品”, price: 2899, cond: “轻微使用”, views: 512 },// …];筛选逻辑只有一行判断,分类筛选和搜索共用同一个渲染入口:function renderGoods(keyword “”) {const list GOODS.filter(g (activeCat “全部” || g.cat activeCat) (!keyword || g.title.includes(keyword) || g.cat.includes(keyword)));// …生成卡片 HTML}点击分类卡片、点击筛选 chip、点搜索按钮,走的都是 filterCat() → renderGoods() 这条单一路径,状态永远只有一份(activeCat),不会出现筛选不同步的 bug。4.2 价格分析:不借助任何图表库的两张图这是项目的技术亮点。为了保持零依赖,两张图全部用 CSS 原生能力手写:① 各类目平均价格——柱状图先对数据做 filter reduce 求出每个类目的均价,再按最大值归一化,用宽度百分比驱动 div 填充:const avg items.reduce((s, g) s g.price, 0) / items.length;// 填充条宽度 avg / max * 100%div classbar-fill stylewidth:${(s.avg / max * 100).toFixed(1)}%/div配合 transition: width .8s ease,页面加载时柱条有一个平滑生长的动画,数据活了起来。② 各成色占比——饼图用 CSS conic-gradient 直接在圆形 div 上绘制扇区:segs.push(${color} ${start}% ${start pct}%);// background: conic-gradient(蓝 0% 40%, 黄 40% 65%, 红 65% 100%)一段渐变就是一个饼图,再配一个纯 HTML 图例列出每档成色的件数和百分比。相比引入 ECharts 的上百 KB 体积,这套方案轻到可以忽略。4.3 AI 购物顾问:浏览器端消费流式接口项目接入了 GitCode AI 开放接口(示例指定模型 deepseek-ai/DeepSeek-V4-Flash),用浏览器原生的 fetch ReadableStream 消费 SSE 流式响应,实现打字机效果:const reader resp.body.getReader();const decoder new TextDecoder();let buffer “”;while (true) {const { done, value } await reader.read();if (done) break;buffer decoder.decode(value, { stream: true });const lines buffer.split(“\n”);buffer lines.pop(); // ⚠️ 关键:最后一段可能被 TCP 切断,留到下一轮拼接for (const line of lines) {if (!line.startsWith(“data:”)) continue;const payload line.slice(5).trim();if (payload “[DONE]”) continue;const json JSON.parse(payload);answer json.choices?.[0]?.delta?.content || “”;loading.textContent answer; // 实时追加,逐字显示}}三个值得记录的细节:半包处理:buffer lines.pop() 是流式解析的命门。网络分包不按行对齐,如果不把不完整的尾行留到下一轮拼接,JSON.parse 会随机报错。多轮上下文:每轮问答都推入 chatHistory,随请求携带,顾问能记住之前聊过什么。优雅降级:请求前显示AI 正在思考…,失败时原地把提示替换为错误原因,不会白屏或卡死。4.4 响应式适配通过 grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)) 实现商品网格的自动换列;另设 media (max-width: 760px) 断点,手机上收起导航链接、压缩 Hero 字号、图表区变单列。没有写大量媒体查询,大部分自适应是 Grid 自动完成的。五、踩坑记录流式解析的随机报错:最初没有做半行缓存,页面时不时弹出 JSON.parse 异常。加上 lines.pop() 尾部缓存后彻底解决——SSE 按行解析必须假设任意两个字节之间都可能被切断。中文字体渲染:饼图和柱状图的数字混用中英文,统一指定 “PingFang SC”, “Microsoft YaHei” 字体栈,保证 Windows / macOS 表现一致。Enter 键全局误触:最初回车发送监听绑在整个 document 上,在搜索框回车也会触发 AI 提问。改为判断 document.activeElement.id “aiInput” 后修复。六、文件结构与运行方式campus-second-hand/├── index.html # 页面骨架(约 80 行,语义化标签)├── style.css # 全部样式(约 180 行,含 CSS 变量与响应式)├── app.js # 数据 渲染 图表 AI 流式调用(约 210 行)└── README.md # 项目说明运行方式:浏览器直接打开 index.html 即可(图标依赖 Font Awesome CDN,需要联网)。七、后续规划商品详情页与发布闲置表单(localStorage 持久化)模拟站内 IM 聊天窗口把示例数据替换为真实后端 APIAI 顾问接入商品数据,实现基于在售商品的价格点评用 Canvas 重写图表,支持悬停查看数值八、写在最后这个项目让我重新审视了原生三件套的能力边界:CSS 变量 Grid 能撑起整套设计系统,conic-gradient 能画饼图,fetch ReadableStream 能消费大模型流式接口——框架解决的是工程规模问题,而不是能力问题。对课程作业或前端入门者来说,这样的项目难度适中、亮点足够;未来若接入真实后端与支付托管,校淘完全有从演示走向真实的潜力。如果这个项目对你有帮助,欢迎到 仓库 点个 Star ⭐

相关新闻

WPL为什么只算叶子?2014年408:把深度传下去,把答案加回来

WPL为什么只算叶子?2014年408:把深度传下去,把答案加回来

这题给了一棵二叉树,叶结点里存着非负权值,要计算它的带权路径长度,也就是WPL。 先把这个名字放到一边。我们实际要做的是:找到每个叶子,看从根到它走了几条边,再用这个数乘它的权值,最后加起来…

2026/10/17 2:42:39 阅读更多 →
Agent系统设计的‘大脑—小脑’物理分层架构

Agent系统设计的‘大脑—小脑’物理分层架构

1. “大脑—小脑”不是比喻,而是Agent系统设计的物理分层结构最近在给三家不同行业的客户做AI工程落地咨询时,反复被问到一个问题:“你们说的Coding Agent到底能不能真正进产线?它和普通Copilot有什么本质区别?”我每次…

2026/10/17 2:42:39 阅读更多 →
六根硬件映射(下):物理闭环五步法,抽一条已实装的看

六根硬件映射(下):物理闭环五步法,抽一条已实装的看

六根硬件映射(下):物理闭环五步法,抽一条已实装的看 系列:《宪法即代码》第 34 篇(下)| 标签建议:AI编程、Rust、嵌入式、具身智能、防御性公开 文章目录六根硬件映射&am…

2026/10/17 2:42:39 阅读更多 →

最新新闻

LassoCV实战指南:告别手动调参,用交叉验证自动选择最优alpha

LassoCV实战指南:告别手动调参,用交叉验证自动选择最优alpha

很多人在项目里一上来就Lasso(alpha0.01),看着 CV 分数不错就交付了。但我可以负责任地讲,手动试 Lasso 的正则化参数,十次有八次会在换数据集、换特征尺度之后翻车。alpha 这个参数对 Lasso 来说就是“稀疏度旋钮”,拧小了特征没…

2026/10/17 3:22:48 阅读更多 →
LassoCV完整指南:用交叉验证自动选择最佳正则化参数alpha

LassoCV完整指南:用交叉验证自动选择最佳正则化参数alpha

先交代一个问题:很多人用 Lasso 的时候,习惯先拍一个正则化参数 alpha,比如 0.01、0.1,然后看效果,效果不好再换一个。这么调十几次,运气好能碰到一个还能用的模型,运气不好就是白忙一晚上。带交…

2026/10/17 3:22:48 阅读更多 →
Dify接入MCP工具实战:配置、调用与踩坑排查指南

Dify接入MCP工具实战:配置、调用与踩坑排查指南

最近好几个团队都在问我同一个问题:想在 Dify 里接 MCP 工具,但不知道从哪下手。我自己第一次上手的时候也卡过不少时间,等把原理理顺之后发现,Dify 接入 MCP 工具本身并不复杂,真正费劲的反而全是细节——URL 填哪个、…

2026/10/17 3:22:48 阅读更多 →
纵向CT亚区域放射组学列线图预测食管鳞癌放化疗后局部复发

纵向CT亚区域放射组学列线图预测食管鳞癌放化疗后局部复发

1. 食管鳞癌根治性放化疗后,我们其实在被动等待1.1 传统影像评估的"事后诸葛亮"困境食管鳞癌患者做完根治性放化疗,并不是治疗结束后的轻松时刻,而是另一种煎熬的开始。吞咽困难缓解了,复查CT上肿瘤缩小甚至"看不见…

2026/10/17 3:22:48 阅读更多 →
人工智能(八)- Spring AI 开发 MCP Server(Streamable HTTP)完整开发与测试:把 endpoint 改到 TaoToken

人工智能(八)- Spring AI 开发 MCP Server(Streamable HTTP)完整开发与测试:把 endpoint 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 3:22:48 阅读更多 →
透视变换原理与OpenCV实战:从数学到文档矫正

透视变换原理与OpenCV实战:从数学到文档矫正

拍身份证、拍试卷、拍发票,基本上只要用手机拍过任何带角度的纸质文件,都会遇到同一个问题:原本方方正正的文档,在照片里变成了一个梯形或不规则四边形,四边向内收拢,文字也跟着歪斜。这个现象在计算机视觉…

2026/10/17 3:21:48 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →