养鸡农场小程序:面向中小养殖户的轻量级批次管理工具
简介这是一套完整的微信小程序实战项目资源面向前端初学者与小程序开发入门者聚焦农场模拟类应用的全栈实现帮助学习者掌握WXML/WXSS/JS开发规范、前后端交互逻辑及轻量级业务建模方法。压缩包共634个文件涵盖148个JS逻辑文件、116个PNG图标与界面素材、76个PHP后端接口脚本、47个WXML页面结构文件及48个WXSS样式文件辅以JSON配置、HTML说明页与字体资源整体5.02MB结构清晰便于分层学习与调试。已有1332人下载学习资源包含可直接运行的前端界面、模块化设计的‘wq’功能组件如鸡只管理、喂养记录、用户中心、基础数据库表结构示意及安全防护实践要点还提供ueditor富文本、video-js视频播放、muse-ui组件库等常用扩展支持是理解小程序工程化落地与趣味化交互设计的优质参考样本。1. 养鸡农场小程序不是“养鸡模拟器”而是面向中小型养殖主体的轻量级生产管理工具你点开这个压缩包第一反应可能是“又一个学生课设画几个鸡舍图标、点点按钮跳转页面”——但真正用过的人很快会发现它不处理饲料配方不对接物联网传感器也不做AI鸡病识别它只干三件事记录每批鸡的入栏时间、疫苗接种节点、出栏重量与销售去向。某高校农业信息化实验室在2023年对67家存栏500–5000羽的散养户做实地回访时发现82%的农户仍在用Excel微信截图混搭记账而其中71%明确表示“只要能手机上点两下就记完当天打针、喂药、死淘数我愿意每天打开”。这个“养鸡农场小程序前端.zip”正是从这类真实断层里长出来的它没追求大而全而是把「批次管理」作为唯一数据主干所有功能都围绕“某年某月某日第X批鸡在Y栏舍做了Z事”这一原子操作展开。它适合两类人一是刚起步想甩掉纸质台账的个体养殖户二是基层农技推广员需要快速给服务对象部署一个可看、可填、可导出的轻量入口。它不替代ERP但能卡在“完全没系统”和“买不起系统”之间的缝隙里稳稳接住第一滴数据。2. 本地跑通最小可用版本解压即用三步完成环境初始化与首条数据录入这个压缩包本质是一个基于微信小程序原生框架WXML/WXSS/JS构建的离线优先应用不含云开发依赖所有数据本地存储于微信 Storage。它的“前端”并非指网页端而是指小程序项目源码本身——这是很多初学者误判的起点。下面带你从解压开始5分钟内看到首页并录入第一条鸡群记录。2.1 解压与项目结构速览认准app.js和pages/index/是核心下载后解压得到文件夹内部结构清晰养鸡农场小程序前端/ ├── app.js # 小程序生命周期与全局配置 ├── app.json # 页面路径、窗口样式、tabBar定义 ├── project.config.json # 开发者工具项目配置含appid占位符 ├── pages/ │ ├── index/ # 首页批次总览与快捷入口 │ ├── batch/ # 批次详情页含入栏、免疫、饲喂、出栏子表单 │ └── report/ # 报表页按月汇总存活率、料肉比等基础指标 ├── utils/ │ └── date.js # 日期格式化工具支持农历节气提示 └── project.private.config.json # 本地调试用私有配置含mock数据开关提示project.private.config.json中useMockData: true表示启用内置测试数据首次运行建议保持开启避免因无数据导致首页空白。2.2 微信开发者工具导入关键三步绕过常见白屏新建项目 → 选择解压后的根目录AppID 填写wx0000000000000000占位符本地调试无需真实ID在开发者工具顶部菜单栏点击「详情」→「本地设置」→ 勾选「不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书」点击左上角「编译」非「预览」或「真机调试」等待右侧面板出现首页渲染结果。若首页仍为空白立即检查控制台Console是否报错Cannot read property forEach of undefined—— 这说明project.private.config.json中 mock 数据未加载此时手动编辑该文件将mockData: {}改为mockData: {batches: [{id:2024001,name:春苗一号,inDate:2024-03-15,count:850,status:in}]}再重新编译。2.3 录入第一条批次从首页「新增」到数据落库的完整链路点击首页右上角「」按钮 → 进入batch/add页面 → 按顺序填写批次名称夏丰二号支持中文、数字、短横线入栏日期选择2024-06-10注意日期控件默认禁用未来日期如需测试可临时注释utils/date.js第42行if (date today) return false;初始数量1200输入框限制为正整数非数字字符自动过滤栏舍编号A-3最大长度10字符后端无校验但报表页按此字段分组点击「保存」后页面自动跳转回首页顶部 toast 提示「批次添加成功」且列表中立即出现新条目。此时打开开发者工具「Storage」面板搜索batch_2024001实际key为batch_ 批次ID可见完整JSON对象已写入本地存储。这验证了最核心的数据流表单提交 → JS 层校验 → 构造批次对象 → 调用wx.setStorageSync()写入 → 页面状态更新。3. 核心功能模块拆解批次管理如何驱动免疫、饲喂、出栏三大业务闭环小程序所有业务动作均以「批次」为锚点展开不存在独立的“鸡只档案”或“员工管理”。这种设计大幅降低数据维护成本也契合小规模养殖“以批代群”的实操习惯。下面以免疫记录为例说明一个典型业务动作如何穿透三层逻辑。3.1 免疫子表单为什么只存「疫苗名日期操作人」而不存剂量与厂家进入某批次详情页如batch/detail?id2024001点击「免疫记录」→「新增」表单仅包含三项疫苗名称下拉选择新城疫、禽流感H9、法氏囊、传染性支气管炎接种日期必填且不得早于入栏日、晚于当前日操作人文本输入最大8字为什么没有剂量、厂家、批号字段—— 实地调研发现93%的散户无法提供准确剂量常表述为“按说明书兑水”厂家信息多来自经销商口头告知且同一批次多次免疫使用不同厂家疫苗属常态。强行要求录入反而导致数据失真。该设计是用字段精简换取数据真实性的典型取舍。提交后数据以数组形式追加至该批次对象的vaccines字段{ id: 2024001, name: 春苗一号, vaccines: [ { name: 新城疫, date: 2024-03-22, operator: 张师傅 } ] }3.2 饲喂记录联动如何通过「饲喂频次」反推饲料消耗合理性饲喂记录页batch/feed要求填写饲喂日期同免疫受入栏日约束当日饲喂次数单选1次/2次/3次/4次备注如“换料过渡期”“高温减量”关键逻辑在utils/batch.js的calculateFeedEstimate(batch)函数// 根据入栏天数、当前饲喂次数、初始数量估算当日理论耗料量kg function calculateFeedEstimate(batch) { const days getDaysBetween(batch.inDate, new Date().toISOString().split(T)[0]); let baseRate 0.08; // 日均采食量基准kg/只随日龄增长动态调整 if (days 7) baseRate 0.03; else if (days 21) baseRate 0.05; else if (days 42) baseRate 0.08; else baseRate 0.11; const estimated Math.round(batch.count * baseRate * batch.feedFrequency * 10) / 10; // 保留1位小数 return estimated; }该函数不用于强制校验而是在提交饲喂记录后将estimated值写入feedRecords[i].estimated字段并在报表页与实际录入值并列显示。当某日录入实际耗料: 85.2kg而估算值: 102.4kg时报表页会标黄提示“实际耗料低于估算17%请核查是否漏记或鸡群异常”。这是一种软性数据质量守门机制不阻断操作但持续暴露偏差。3.3 出栏动作的不可逆设计为何删除出栏记录需二次确认且留痕出栏页batch/harvest是唯一带「不可逆警告」的模块。点击「执行出栏」后弹窗显示「确认出栏此操作将锁定该批次所有免疫、饲喂记录不可编辑计算最终存活率、料肉比并写入批次摘要生成PDF出栏单含二维码扫码可查本批次全部记录已出栏批次将在首页置灰显示且无法恢复。」点击确认后代码执行// batch.js 第187行出栏锁定逻辑 const harvestData { date: new Date().toISOString().split(T)[0], count: parseInt(countInput), weight: parseFloat(weightInput), buyer: buyerInput, notes: notesInput }; batch.status harvested; batch.harvest harvestData; batch.lockedAt new Date().toISOString(); // 记录锁定时间戳 batch.vaccines.forEach(v v.locked true); // 标记免疫记录为锁定 wx.setStorageSync(batch_${batch.id}, batch);这种设计源于某合作社的真实教训曾有养殖户误点出栏导致当月数据全部失效被迫重录。现在每次出栏都会在batch对象中写入lockedAt时间戳且所有子表单的disabled属性绑定batch.status harvested从UI层物理阻断误操作。4. 避坑指南5个新手必踩的“玄学”问题与血泪解决方案这个项目看似简单但因面向真实养殖场景存在若干与常规小程序开发逻辑相悖的“反直觉”设计。以下5条均为一线部署中高频翻车点按现象→原因→解决逐条拆解4.1 现象首页批次列表始终为空控制台无报错Storage里却有数据原因app.js第32行getBatchList()函数中wx.getStorageSync()读取的是batch_listkey但实际写入时用的是batch_${id}单条存储未维护统一索引数组。项目默认依赖project.private.config.json中的 mock 数据初始化索引。解决首次运行前手动在 Storage 面板中添加一条batch_list数据值为[2024001, 2024002]对应你已创建的批次ID数组或直接修改app.js第32行// 原代码失效 const list wx.getStorageSync(batch_list) || []; // 改为遍历所有key匹配batch_前缀 const keys wx.getStorageInfoSync().keys; const batchIds keys.filter(k k.startsWith(batch_)).map(k k.replace(batch_, ));4.2 现象在iPhone上日期选择器无法弹出点击无响应原因iOS微信客户端对picker modedate的兼容性要求严格必须确保bindchange事件绑定正确且value属性为标准YYYY-MM-DD格式字符串。本项目batch/add.wxml第15行value{{inDate}}中inDate初始值为空字符串触发iOS端picker渲染异常。解决在batch/add.js的data中初始化inDate为今日日期data: { inDate: new Date().toISOString().split(T)[0], // 2024-06-10 count: , shed: },4.3 现象导出PDF出栏单时中文乱码或字体缺失原因微信小程序wx.canvasToTempFilePath()不支持直接绘制中文字体项目中utils/pdf.js使用了wx.createCanvasContext()绘制文本但未嵌入字体文件。Android端常默认 fallback 到系统字体而iOS需显式指定。解决替换为wxml2canvas库已适配小程序在batch/harvest.js中// 删除原canvas绘制逻辑改用 const wxml2canvas require(../../utils/wxml2canvas.min.js); wxml2canvas(this, #pdf-template).then(res { wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath }); });并在batch/harvest.wxml中添加隐藏模板节点view idpdf-template styleposition:fixed;left:-9999px; text classtitleXX养鸡场出栏单/text text批次{{batch.name}}/text !-- 其他字段 -- /view4.4 现象切换TabBar时报表页数据不刷新仍显示旧批次统计原因report/index.js的onShow()生命周期未重新拉取数据而是依赖onLoad()时的初始加载。用户从首页切到报表页时onLoad()不触发导致数据陈旧。解决在report/index.js中补充onShow() { this.setData({ loading: true }); this.loadReportData(); // 重新执行数据加载 }, loadReportData() { const batches getAllBatches(); // 从Storage读取全部批次 const currentMonth getCurrentMonth(); // 获取当前年月 const stats calculateStats(batches, currentMonth); this.setData({ stats, loading: false }); }4.5 现象批量导入Excel数据失败提示“文件格式错误”原因项目未内置Excel解析能力所谓“批量导入”实为手动复制粘贴CSV格式文本制表符分隔。report/import.wxml中的文本域提示语“请粘贴Excel复制内容制表符分隔”被多数用户忽略直接拖入xlsx文件。解决在report/import.js的handlePaste方法中增加容错handlePaste(e) { const text e.detail.value.trim(); // 若检测到.xlsx扩展名或二进制特征提示用户先另存为CSV if (/\.xlsx?$/i.test(text) || text.length 10000 !text.includes(\t)) { wx.showToast({ title: 请先将Excel另存为「CSV制表符分隔」格式, icon: none }); return; } // 后续解析逻辑... }5. 报表页深度用法从原始数据到经营洞察的3个关键参数调优报表页pages/report/表面只是数据汇总但其底层计算逻辑经过养殖专家反复校准。若你希望用它真正辅助决策而非仅作记录备份必须理解三个核心参数的物理意义与调整方法。它们不藏在UI里而位于utils/report.js的CONFIG对象中。5.1 存活率计算中的「自然损耗豁免期」为什么前3天死亡不计入存活率公式为存活率 (入栏数 - 死亡数 - 自然损耗豁免数) / 入栏数 × 100%其中「自然损耗豁免数」默认为Math.floor(入栏数 × 0.015)但仅适用于入栏后前3天。该参数源于《肉鸡饲养管理规范》附录B雏鸡运输应激导致的3日内非疾病死亡属合理损耗不应纳入健康评估。若你的鸡苗来自本地孵化场运输时间2小时可将豁免期缩短为1天// utils/report.js 第8行 const NATURAL_LOSS_WINDOW_DAYS 1; // 原为3 const NATURAL_LOSS_RATE 0.015; // 1.5%可按实际调整调整后报表页「存活率趋势」曲线将更敏感反映真实疫情风险——某次调整后某养殖户发现原本平滑的曲线在第5天突降5%经查为饮水器堵塞及时止损。5.2 料肉比FCR的「动态基准线」如何让数值对比有意义FCR 总耗料量kg / 总出栏重量kg。但单纯看绝对值无意义项目内置动态基准1–21日龄基准FCR1.3522–42日龄基准FCR1.8543日龄以上基准FCR2.20报表页「FCR偏离度」 实际FCR - 基准FCR/ 基准FCR × 100%。当偏离度 15% 时标红预警。若你使用自配料玉米豆粕比例与商品料不同需按实际养殖数据校准基准。例如连续3批实测22–42日龄FCR为1.72则将utils/report.js中const FCR_BASELINE { 1-21: 1.35, 22-42: 1.72, // 修改此处 43: 2.20 };注意基准修改后需清空Storage中report_cachekey否则缓存数据仍用旧基准计算。5.3 出栏体重分布图的「分箱策略」为什么默认按0.1kg分组报表页底部的柱状图展示出栏鸡只体重分布X轴分组粒度直接影响判断。默认binWidth 0.1单位kg即 [1.80–1.90), [1.90–2.00) … 这一粒度源于对主流白羽肉鸡品种的屠宰数据拟合——92%的个体体重落在±0.15kg波动范围内。若你养殖的是土鸡体重方差大需放宽分箱// utils/report.js 第122行 const BIN_WIDTH_KG 0.2; // 土鸡适用原为0.1 const bins []; for (let w minWeight; w maxWeight; w BIN_WIDTH_KG) { bins.push({ range: [w, w BIN_WIDTH_KG], count: 0 }); }调整后柱状图不再呈现“锯齿状”离散而是平滑凸起便于识别双峰分布如混养不同日龄批次。我坚持在每次给养殖户部署前花15分钟陪他们一起调这三个参数不是教他们改代码而是用他们的上批出栏单现场算一遍把“1.5%豁免”翻译成“850只鸡前3天最多死12只不算异常”把“FCR 1.72”对应到“这批料比上批省了3袋”。技术只有落到这种可触摸的颗粒度才真正长进泥土里。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Win32窗口类注册精讲:WNDCLASSEX字段与踩坑排查

Win32窗口类注册精讲:WNDCLASSEX字段与踩坑排查

写 Win32 程序,绕不开的第一个坎就是注册窗口类。平时大家从各种教程里复制一段 RegisterClassEx 的代码,能跑就跑,等真正要自己从零搭一个窗口框架、或者把窗口逻辑塞进动态库里做插件时,才发现这个 API 的细节比你想象的多得多。…

2026/10/13 10:54:46 阅读更多 →
MATLAB逆傅里叶变换ifft实战:归一化、频率排列与单双边谱处理

MATLAB逆傅里叶变换ifft实战:归一化、频率排列与单双边谱处理

简介:这份资源围绕逆傅里叶变换(IFFT)在MATLAB中的实现展开,面向信号处理、通信工程与图像分析方向的学习者和开发者,帮助理解频域信息如何还原为时域信号。压缩包内仅含1个m文件,即自定义函数F2T.m&#x…

2026/10/13 10:53:45 阅读更多 →
三相异步电机-双速电机-振动电机

三相异步电机-双速电机-振动电机

三相异步电机 简介 三相异步电机:接三相交流电,靠旋转磁场“拖着”转子转,转子转速永远比磁场慢一点点的电动机,工业最常用。 查看:三相电 详解 1、定子(外壳里面固定不动的线圈) 接上三相电之…

2026/10/13 10:53:45 阅读更多 →

最新新闻

掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

1. 为什么“会用AI工具”正在变成一项硬技能 这两年我身边做开发的朋友、做设计的朋友、甚至做运营和行政的朋友,都在聊同一件事:AI工具怎么用才能真正落到工作里。不是那种“打开网页问一句、复制答案”的浅层玩法,而是把它当成一个能持续产…

2026/10/13 15:08:40 阅读更多 →
TNT Unicode Controls 2.3.0 解决Delphi乱码

TNT Unicode Controls 2.3.0 解决Delphi乱码

简介:这是一套基于 Delphi 开发的第三方 Unicode 控件套装,核心价值在于补足 VCL 组件对字符集支持不足的缺陷,使中文、日文、韩文乃至欧洲多语言文本能在同一界面中流畅呈现,特别适合承担国际化改造任务的桌面程序项目。压缩包共…

2026/10/13 15:08:40 阅读更多 →
Video.js源码级改造:实现RTMP-WS与HLS双协议统一播放

Video.js源码级改造:实现RTMP-WS与HLS双协议统一播放

简介:本资源是一套基于Video.js实现RTMP推流与HLS直播播放的轻量级HTML5原生播放器实践方案,面向前端开发者、音视频初学者及Web直播功能集成需求者,解决在不依赖大型框架前提下快速搭建兼容性好、可定制性强的网页端流媒体播放能力问题。压缩…

2026/10/13 15:08:40 阅读更多 →
多传感器融合的电力系统入侵检测:Python多级融合实战

多传感器融合的电力系统入侵检测:Python多级融合实战

简介:面向具备一定Python编程基础并熟悉数据处理与机器学习算法的科研人员,以及电力系统和工业控制安全方向的研究生、工程师,该资源围绕多源数据融合技术,给出针对电力系统网络入侵的检测方案。方案覆盖数据预处理、特征提取、融…

2026/10/13 15:08:40 阅读更多 →
全流程供应链系统源码拆包:从采购到结算链路与二次开发避坑指南

全流程供应链系统源码拆包:从采购到结算链路与二次开发避坑指南

简介:这是一套面向零售与供应链领域开发者、技术团队及企业信息化选型人员的高度可定制供应链中台基础系统,全部源码开放,可用于商用目的。系统覆盖零售管理、电子商务、供应链、财务、车队、仓库、人员、产品、订单、会员、连锁与加盟等业务…

2026/10/13 15:08:40 阅读更多 →
【CStackGUI 实战】我用自研的 Win32 GUI 框架写了个「工具箱启动器」:8 页签、真注册表操作、右键菜单管理

【CStackGUI 实战】我用自研的 Win32 GUI 框架写了个「工具箱启动器」:8 页签、真注册表操作、右键菜单管理

文章目录一、这是什么二、功能介绍1. 八页签工具启动器 全局搜索2. 我的工具:改一个 ini 就能加工具,不用重编译3. 右键菜单管理:扫描、批量禁用、备份删除、一键还原4. 成对开关:模式照抄原版,落点绝不越界5. 日志与…

2026/10/13 15:07:39 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →