喀什地区网站建设_网站建设公司_在线商城_seo优化
2025/12/25 17:56:10 网站建设 项目流程

零代码开发微信小程序实战记录:OOTD 天气穿搭小程序

大概是思路是用cursor来写html页面对应需求的ui图。然后逐步转成小程序。最后用扣子去自定义一些需求链路。

项目概述

项目名称:OOTD 天气穿搭小程序
开发时间:2025年12月
开发方式:使用 Cursor AI 助手,全程通过对话完成开发
技术栈:微信小程序原生开发 + Node.js/Express 后端 + Coze AI API

核心功能

  • 实时天气查询和7天预报
  • AI 智能穿搭推荐
  • 个性化用户设置(城市、性别、个人描述)
  • 穿搭统计(生成次数、最爱风格、连续天数)
  • 微信登录集成

扣子开发

  • 扣子上去实现请求当前天气数据
    image
  • 根据用户的设定生成提示词并且再传给ai生图
    image
  • 扣子token接入

开发过程 Q&A

阶段一:原型设计

Q1: 我需要打造一个实用的天气+OOTD的小程序,包含两个Tab(OOTD和我的),OOTD页面需要显示今日天气、7天预报、今日穿搭风格卡片(可选择风格),选择后弹出AI生成的穿搭建议和3张穿搭图片轮播。我的页面需要显示城市、性别、个人描述,首次进入需要引导流程。请提供完整的HTML代码实现。

A1: 创建了完整的HTML原型文件(prototype/ootd.htmlprototype/profile.htmlprototype/onboarding.htmlprototype/ootd-popup.html),使用 Tailwind CSS 实现现代化UI设计,遵循 iOS 设计规范,适配 iPhone 16 Pro Max 尺寸。


阶段二:小程序页面开发

Q2: 请使用 ootd.html 去改造 index.js、index.wxml、index.wxss,我希望样式保持一致,icon先使用emoji。

A2: 将 HTML 原型转换为小程序代码,创建了 miniprogram/pages/index/ 目录下的三个文件,使用 WXML/WXSS 实现相同样式,图标使用 emoji 替代。

Q3: 请使用 profile.html 去实现我的页面,要求:1.在 pages 下创建profile文件夹,并生成对应的小程序代码 2.样式尽可能保持100%的一致 3.并添加两个页面之间的跳转功能。

A3: 创建了 miniprogram/pages/profile/ 目录,实现了完整的"我的"页面,样式100%还原HTML原型,在 app.json 中配置了 tabBar 实现页面跳转。


阶段三:自定义导航栏

Q4: 我认为生成的下面ootd和我的按钮太朴素了,你根据我们的风格设计一下这个按钮并且替换。

A4: 创建了自定义底部导航栏组件 miniprogram/custom-tab-bar/,实现了玻璃拟态效果、渐变图标、脉冲发光动画和底部指示器。

Q5: 现在设计出来的图标还不错,但是太大了,挡住了下面的主体内容。

A5: 调整了自定义导航栏尺寸,高度改为 120rpx,图标 56rpx,文字 20rpx,并调整了页面内容的 padding-bottom 避免被遮挡。

Q6: 请你查看这个页面,底部的tabbar盖住了退出登录。另外这个【我的】页面没有修改自己资料的入口。

A6: 调整了 profile 页面的 padding-bottom,移除了"编辑资料"按钮,将城市、性别、个人描述设置为可点击,点击后弹出编辑对话框。


阶段四:引导页逻辑

Q7: 现在我们增加页面逻辑:1.如果首页进来的时候,目前在本地存储中没有城市、性别、个人特性,那么需要自动跳转到一个引导页面。该引导页面的样式参考 onboarding.html,保持100%还原 2.引导页面的文字填写后,需要保存到本地。并且在 profile.wxml 中使用 3. profile.wxss 我的页面修改编辑信息后,也需要存储到本地。

A7:

  • 创建了 miniprogram/pages/onboarding/ 引导页面,样式100%还原
  • index.js 中添加了 checkOnboardingRequired() 方法,检查本地存储并自动跳转
  • 实现了数据保存到本地存储(wx.setStorageSync)和读取(wx.getStorageSync
  • profile 页面编辑后也保存到本地存储

阶段五:OOTD 弹窗组件

Q8: 请你根据 ootd-popup.html 生成ootd的popup: 1.在 index.wxml 中生成今日OOTD后,在当前页面弹出popup 2.对应的popup和 ootd-popup.html 样式保持一致 3.该组件请你在components下生成并且引入。

A8: 创建了 miniprogram/components/ootd-popup/ 组件,实现了轮播图、AI建议展示、加载状态和操作按钮,在 index.wxml 中引入并使用。


阶段六:后端开发

Q9: 好了,请你根据图片的要求去开发后端部分。doc.md 在servers/ 目录下初始化express的后端,并且引用.env中的环境变量 COZE_TOKEN。

A9:

  • 创建了 server/ 目录,初始化 Express 项目
  • 实现了 /api/health/api/weather/api/ootd 三个接口
  • 使用 dotenv 管理环境变量,从 .env 读取 COZE_TOKEN
  • 配置了 CORS 支持小程序跨域请求

阶段七:真机调试问题修复

Q10: 我刚刚在微信小程序上测试了一下,没有获取到天气信息呢。

A10:

  • project.config.json 中添加了 "urlCheck": false
  • API_BASE_URLlocalhost 改为局域网IP(http://172.16.140.195:3001
  • 修改 server/index.js 监听所有网络接口(app.listen(PORT, '0.0.0.0')
  • 提示用户在微信开发者工具中开启"不校验合法域名"

Q11: 现在天气数据有了,但是点击生成生成OOTD没有生成对应条件下的今日推荐呢。

A11: 实现了 fetchOotdData() 方法调用后端 OOTD API,更新了 ootd-popup 组件显示返回的建议和图片,添加了加载状态处理。


阶段八:UI 优化

Q12: 现在的生成效果实际感觉不是很居中。左边边框有空隙,但是右边没有。编辑资料感觉可以取消这个按钮。直接点击上方的城市,性别可以跳转修改框。还有下面的个人描述,点击进入修改页面比较合适。

A12:

  • 统一调整了页面 padding 为 32rpx
  • 移除了"编辑资料"按钮
  • 将城市、性别标签设置为可点击,触发编辑对话框
  • 将个人描述卡片设置为可点击,触发编辑页面

阶段九:统计功能

Q13: 效果还不错,我们继续完成穿搭统计的模块。变成实际能记录。你完成以后告诉我你怎么实现的。

A13:

  • 创建了 miniprogram/utils/stats.js 工具文件
  • 实现了 recordGenerate() 记录生成次数和风格
  • 实现了 getStats() 获取统计数据
  • 实现了 getFavoriteStyle() 计算最爱风格
  • 实现了 getStatsSummary() 获取统计摘要(包括连续天数)
  • profile.js 中集成显示统计数据
  • 使用本地存储(wx.setStorageSync)持久化数据

阶段十:微信登录集成

Q14: 最后我想引入读取微信信息登录小程序。获取微信头像,微信ID来作为我们小程序的头像和id。

A14:

  • profile.wxmlonboarding.wxml 中使用 open-type="chooseAvatar" 获取头像
  • 使用 type="nickname" 的 input 组件获取昵称
  • 实现了 onChooseAvataronNicknameInput 方法处理数据
  • 将头像和昵称保存到本地存储

Q15: 现在能使用微信昵称了,但是头像太奇怪了。另外我们下面的【消息通知】应该不需要。【关于我们】点击显示:袁小陵给王鹏鑫说,每天不知道穿什么,于是有个这个小程序。

A15:

  • 调整了头像显示样式,移除了多余的边框和背景
  • 移除了"消息通知"设置项
  • 修改"关于我们"点击事件,显示指定的文案

Q16: 这个头像还是很奇怪,里面是对的。但是明显是一个椭圆形里面是头像,不需要这个椭圆形。

A16: 调整了 .avatar-btn.avatar-image 的样式,移除了椭圆背景,确保头像显示为完美圆形。

Q17: 现在没问题了,但是明显性别,昵称离头像太远了。请你用大多数正常的体验去修改这个布局。

A17: 调整了 .user-info-rowgap 为 24rpx,调整了头像容器和性别徽章的定位,使布局更紧凑。

Q18: 还是不对啊,你看头像离性别昵称很远。性别应该在头像的右下角吧,昵称那里应该也紧贴头像才对。

A18:

  • 调整了 .avatar-wrapper 为固定宽高(120rpx)和 position: relative
  • .gender-badge 设置为绝对定位,bottom: 0right: 0,位于头像右下角
  • 调整了昵称与头像的间距

Q19: 昵称靠头像有点太近了,再修改下间距。

A19: 微调了昵称与头像之间的间距,使布局更平衡。


阶段十一:引导页布局修复

Q20: 这个第一次进入的引导页面不对,昵称是居中的,但是上面的头像和修改头像没有居中。很奇怪。

A20:onboarding.wxml 中添加了 avatar-container 容器,使用 display: flexjustify-content: center 居中头像。

Q21: 还是不对呢,你看看图片里的效果。

A21: 调整了 .avatar-choose-btn.avatar-edit-badge 的样式,确保头像和编辑图标正确居中。

Q22: 依然布局不对,刚开始设置的时候设置头像应该必须居中。

A22: 重新调整了头像容器的布局结构,确保头像完全居中。

Q23: 头像右边的设置图标离居中的头像太远了。

A23: 重构了头像部分的 WXML 结构,将编辑徽章放在 avatar-wrapper 内,使用绝对定位相对于头像容器,确保编辑图标紧贴头像右下角。


阶段十二:部署准备

Q24: 好了,我现在准备在真机上调试。目前真机上有获取不到天气信息,我看了下日志。真机上 http://localhost:3001/api/weather 是否无效。

A24: 确认了真机上 localhost 无效的问题,已在之前修复(Q10),提醒用户检查配置是否正确。

Q25: 在本地局域网是可以了,我打算部署到云服务器上,应该怎么做呢。

A25:

  • 创建了 DEPLOY.md 完整部署文档
  • 创建了 server/deploy.sh 一键部署脚本
  • 创建了 server/ecosystem.config.js PM2 配置文件
  • 创建了 server/env.example 环境变量模板
  • 创建了 miniprogram/config.js 环境配置文件
  • 更新了 index.js 使用配置文件中的 API 地址

Q26: 将该项目上传至我的git仓库吧。

A26:

  • 创建了 .gitignore 文件,忽略敏感文件
  • 创建了 README.md 项目说明文档
  • 初始化了 Git 仓库并提交了所有代码
  • 提供了 GitHub/Gitee 上传指南

关键经验总结

1. HTML 原型先行

先设计 HTML 原型,再转换为小程序代码,可以快速验证 UI 效果。

2. 组件化开发

将弹窗、骨架屏等复用功能封装为组件,提高代码复用性。

3. 本地存储管理

使用 wx.setStorageSyncwx.getStorageSync 管理用户数据和统计数据。

4. 真机调试配置

  • 必须使用局域网 IP,不能使用 localhost
  • 需要在 project.config.json 中设置 urlCheck: false
  • 需要在微信开发者工具中开启"不校验合法域名"

5. 后端服务配置

  • Express 服务需要监听 0.0.0.0 才能被局域网访问
  • 使用 dotenv 管理敏感的环境变量
  • 使用 PM2 管理生产环境进程

6. 微信小程序 API

  • 使用 open-type="chooseAvatar" 获取头像
  • 使用 type="nickname" 的 input 获取昵称
  • 使用 bindchange 而不是 bindblur 捕获微信提供的昵称

7. 样式调试技巧

  • 使用 rpx 单位实现响应式布局
  • 使用 Flexbox 和绝对定位精确控制布局
  • 通过调整 gappaddingmargin 微调间距

8. 部署流程

  • 开发环境:使用 localhost 或局域网 IP
  • 测试环境:使用局域网 IP
  • 生产环境:使用 HTTPS 域名(微信小程序要求)

参考资源

  • 微信小程序官方文档
  • Coze AI 平台
  • Express.js 文档
  • PM2 文档

下次开发小程序的快速检查清单


代码地址: https://github.com/twh233/ootd

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询