# Personal_workbench **Repository Path**: zmisb/personal_workbench ## Basic Information - **Project Name**: Personal_workbench - **Description**: 个人工作台11111111 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DAY · 个人工作台(微信原生小程序) 已从原型实现为原生 JavaScript + WXML + WXSS 工程。沿用本目录现有 AppID `wx5640f3283b6bb8ad`。首次打开不会创建虚构的待办、账目或健康记录。 ## 在微信开发者工具运行 1. 导入整个目录 **`E:\Codex\Personal_workbench`**,不要只导入 `miniprogram` 子目录。 2. 使用上述 AppID,选择小程序项目。工程不依赖前端 npm 包,不需要先“构建 npm”。 3. 点击“编译”。如果目录已在开发者工具中打开,重新编译即可。 4. 点击“预览”,用具有该 AppID 开发权限的微信扫码,在手机上检查。 当前已在本机开发者工具中打开并运行首页。设备记录、表单、导航可本地运行;天气与财经资讯需要完成下面的一种网络接入配置。 ## 真机调试报错 -80424:定位接口未获准 如果提示 `[getFuzzyLocation] is not authorized`,说明微信拒绝当前 AppID 使用该接口。这与手机上的用户定位授权是不同层面的权限;在手机上开启定位,不能代替小程序账号的接口准入。 当前默认工程已改为**手动选城版本**:不声明或调用设备定位接口,设置中保留“杭州 · 余杭”和城市搜索。关闭原来的真机调试会话,在开发者工具重新编译后,再发起真机调试。无需清空个人记录。 若将来需要自动定位: 1. 在微信小程序管理后台查找“接口设置”,确认当前 AppID 的 `getFuzzyLocation` 权限已获批,并完成对应的用户隐私保护指引。 2. 确认获批后,在工程目录运行 `node scripts/set-location.js enable`。脚本同步启用定位源码、按钮和 `app.json` 声明,不会替你授予账号权限。 3. 刷新开发者工具中的账号/项目配置信息,重新编译并在手机上授权验证。 4. 若账号无法申请或仍未获准,运行 `node scripts/set-location.js disable` 恢复手动选城版本。 可选定位源码保存在 `optional-features/location/`,该目录在 `miniprogramRoot` 之外,不进入默认小程序包。天气请求的合法域名或云函数配置仍需单独完成。 ## 功能范围 | 入口 | 当前实现 | | --- | --- | | 首页 | 当日汇总、当前天气、行程待办、英语进度、精选句子、喝水与健康、支出、表达入口 | | 计划 | 行程时间、待办完成、添加、编辑、删除 | | 英语 | 面向有英语基础、口语生疏的学习者;生活与人际交往 7 组共 21 句、对方话语、接话示例、句型提示、自由表达任务与跟读录音;60 个生活交往词及短语,每组 5 个;手动换组、收藏、自建生词、搜索与待复习筛选 | | 表达 | 朋友、家人、同事之间的 30 条原创日常交流练习,每天 5 条、6 天循环;自然对话示例、简单解释、小练习与实践打卡 | | 阅读 | 2 篇文章的精选句子、原文链接、收藏、行动建议;中文标注节译 | | 财经 | 中国新闻网财经、美联储货币政策 RSS,每个来源最多 12 条;点标题或“展开阅读”在小程序内查看文字正文,支持收起、失败重试与原文链接 | | 健康 | 饮水累计及自定目标、每餐记录、每天一条可编辑训练日志、时长和一张照片;训练历史按日期倒序、按月筛选、照片放大及跳转对应日期 | | 账本 | 人民币收入/支出、分类、备注、日期明细、当月汇总;金额按整数“分”存储 | | 设置 | 蓝/紫主题、杭州余杭默认天气、手动城市搜索、JSON 备份导出、隐私说明;定位需账号获准后单独启用 | 右上角日期可查看和补记历史。日期以中国标准时间(UTC+8)计算。首页天气始终是“此刻天气”;其他统计对应所选日期。午夜会切换到新的一天,已打开的表单仍保存到打开时的日期。 这是可运行的个人自用首版。内容库按日期轮换,尚未接入无限每日生成;财经展示来源的最新条目,未做自动重要性评分。英语没有自动发音评分。 ## 单词本、手动换组与文章阅读 - 英语内容来源是 AI 编写的本地场景材料,没有接入教材、外部课程或英语学习 API。新版按有本科英语基础、口语生疏的需求设计,覆盖认识朋友、接续聊天、邀请改约、分享经历、关心与倾诉、澄清误会、表达偏好与边界。每句提供对方的话语及你的接话示例;示范音频朗读的是你的接话部分。练习不是分级考试测评,配套音频为 Windows 英语合成语音。 - 新版口语及表达使用新内容 ID,旧打卡与录音继续留在原数据及备份中,不会误显示为新句子的学习记录。原有单词本和掌握状态保留。 - 健康 → 训练打卡 → “查看以往训练”:默认显示全部训练日期,也可按月筛选;展示内容、已记录时长和照片,未填写时长不当作完整训练时长统计。点“查看这一天”切换日期后可编辑,关闭历史弹层不会更改当前日期。 - 英语 → 口语:点击“学完了,换一组”或底部“继续下一组口语”。选择按日期保存,之前的打卡和录音不会清除;7 组用完后循环复习。 - 英语 → 每日单词:每组 5 个,点击“换 5 个词”手动更新。词汇含中文释义、英文例句与翻译;60 词用完后循环复习。 - 点击“加入单词本”收藏推荐词;单词本中的“+ 生词”可自己填写新词和释义。重复词会更新释义。掌握状态与单词本跨日期保留,纳入原来的 JSON 备份。 - “我记住了”标记掌握,“还要复习”撤销掌握。在单词本选择“待复习”,只看未掌握的词。移出单词本不会删除掌握记录。 - 表达每天 5 条,以平时能说出口的对话为主;30 条按日期轮换,6 天后循环复习。 - 财经点开后会按需请求来源正文,最多缓存最近 8 篇、缓存有效期 24 小时。文字版不执行网页脚本,不展示网页广告;图片、表格与附件以原文为准。网页结构变化或访问失败时,会明确标注仅有摘要,提供重试与原文链接,不把摘要当成全文。 - 使用云函数模式时,需重新部署更新后的 `dayGateway`,它新增了仅允许指定来源文章路径的 `article` 请求。直连模式需配置来源的 request 合法域名,历史统计局文章还使用 `https://www.stats.gov.cn`;网络配置未完成时正文仍无法加载。 ## 天气与财经接入 配置文件是 `miniprogram/config.js`。提供两种方式,页面不需要修改。 ### 方式 A:微信云开发网关(第三方域名受限时使用) 工程已经提供 `cloudfunctions/dayGateway`,只允许访问预先写好的天气、城市搜索、财经 RSS 源及受限的原文路径,不接收任意 URL,不接收待办、单词本、账目、照片或录音。 1. 在微信开发者工具的“云开发”中选择你自己的环境。 2. 编辑 `miniprogram/config.js`:将 `serviceMode` 改为 `'cloud'`,将 `cloudEnv` 填成你的环境 ID。 3. 在 `cloudfunctions/dayGateway` 上选择上传并部署;运行入口为 `index.main`,使用云开发支持的 Node.js 运行时,超时设为 **20 秒或以上**。函数只用 Node.js 内置模块,无需第三方依赖。 4. 部署后重新编译,刷新首页天气和财经列表。云端能否访问上游仍取决于部署区域及网络;错误会显示在页面中。 本次只生成了云函数源码,**没有部署到你的云环境**。云资源使用计入你自己的环境配额。云函数实例内有天气/新闻 30 分钟缓存、城市搜索缓存。 ### 方式 B:小程序直连(当前默认) `serviceMode: 'direct'` 时,去小程序管理后台的开发设置配置 **request 合法域名**: ```text https://api.open-meteo.com https://geocoding-api.open-meteo.com https://www.chinanews.com.cn https://www.federalreserve.gov ``` 后台会按微信当前规则校验域名资格,第三方海外域名可能无法通过;遇到这种情况使用上面的云函数方式。不要移除已有合法域名。 本次检查确认你现有 AppID 尚未配置天气和中新财经域名,因此模拟器中的请求被合法域名校验拦截。工程保留 `urlCheck: true`。不能把开发者工具跳过校验后的表现当作真机可用。 来源接口已在本机脚本中成功请求并解析。客户端和云网关都有缓存;获取失败时显示缓存日期,或明确标记“历史参考,非今日新闻”。历史参考内容不是实时行情,也不是当天头条。 天气使用 [Open-Meteo](https://open-meteo.com/en/docs) 的天气模型数据。默认余杭坐标是区域参考点;主动定位后标记“当前位置附近”,不会把模糊定位宣称为具体街道。城市搜索使用 [Open-Meteo Geocoding](https://open-meteo.com/en/docs/geocoding-api)。当前按个人非商业使用接入,扩大用途前需重新核对服务条件。 ## 定位、录音、照片 - 默认仅在点击“跟读录音”“保存一张照片”时申请相关授权。 - 当前 `app.json` 不声明设备定位接口,默认包也不包含该接口调用。账号获准并启用定位版本后,才显示“使用当前位置”按钮。 - 在小程序管理后台填写并发布用户隐私保护指引,按实际使用填写位置信息、麦克风、选择图片等用途。应用内说明页不能替代后台指引。 - 定位坐标保留两位小数用于天气请求。云函数模式下会经你自己的云环境转发到天气服务。 - 录音仅保存在本机。系统静音、蓝牙输出、模拟器能力可能影响回放,需在手机上试听。 - 训练照片和录音会从临时路径复制到小程序持久文件目录。文件复制和记录写入成功后,才删除被替换的旧文件;写入失败会保留原记录。 - 离开页面或把小程序切到后台会停止播放,并取消尚在录制的内容。 ## 本地记录与备份 本地存储键:`day-workbench:v1`;媒体目录:`wx.env.USER_DATA_PATH/day-assets`。记录跟随当前设备与 AppID,未实现账号登录和跨设备同步。清空微信数据、删除小程序等操作可能导致记录丢失。 “设置 → 导出 JSON 备份”会生成 `DAY-backup.json`,包含结构化记录与照片/录音的 Base64 内容,通过微信原生文件分享界面由你选择保存位置。当前支持**导出归档,暂不支持一键导入恢复**。媒体缺失时停止导出;Base64 媒体总量超过 20 MB 时提示缩小体积。 记录保存失败时不会覆盖上一次成功保存的数据。照片或录音较多时需留意微信的本地存储空间。 ## 与你原来的体验版共存 手机使用的具体步骤见 [微信体验版使用指南](微信体验版使用指南.md)。先上传开发版本,再在公众平台设为体验版;本地编译或预览不会自动完成这两步。 本次没有执行微信“上传”、设为体验版或发布。**本地编译不会替换旧体验版**。 当前工程沿用了目录中已有的 AppID。如果要让旧应用和这个工作台分别拥有独立的体验版本,使用另一个小程序 AppID,并修改 `project.config.json`。如果使用同一个 AppID,后续上传并设为体验版会更新该 AppID 的体验版本;它的正式发布版本按后台操作另行管理。 ## 验证与维护 在本目录执行: ```powershell node --test tests/*.test.js node scripts/check-project.js node scripts/check-services.js node scripts/check-native.js 'D:\sort\flushbonading\微信web开发者工具\code\package.nw\node_modules\wcc-exec' ``` 最后一项需使用自己安装的微信开发者工具中 `wcc-exec` 的实际路径。输出放在忽略提交的 `artifacts/` 中。 `tests/` 覆盖跨天、日期隔离、金额计算、写入失败、照片替换回滚、内容轮换、RSS 解析、备份和网关输入校验。静态检查验证 JS/JSON、页面文件、事件处理器、21 份 MP3 的完整帧、主包不超过 1.5 MiB、图片及音频总量不超过 200 KiB。原生 WXML/WXSS 已通过本机微信编译器验证。 已在开发者工具检查首页、待办表单、英语、表达、健康与账本页面。**手机上的定位授权、录音/回放、选图、关闭重进后的媒体持久性、文件分享,以及部署后的云函数请求仍需真机验收。** 内容文件位于 `miniprogram/data/`。图标和音频已随工程提供,运行无需重新生成。修改英语句子后,运行 `node scripts/build-assets.js` 生成语音任务,再运行 `scripts/build-speech.ps1`(需要 Windows 已安装 Microsoft Zira 英语语音),WAV 中间文件会输出到 `artifacts/speech-wav/`。最后使用 Python 运行 `scripts/compress-speech.py` 生成打包用 MP3;压缩脚本依赖 `lameenc==1.8.4`,可用 `python -m pip install --target artifacts/audio-tools lameenc==1.8.4` 安装到忽略提交的工具目录。采用单声道 8 kbps 的轻量语音,保留原有句子与朗读速度,音质较 WAV 有损;原始 WAV 留在包外供重新编码。运行 `node scripts/check-project.js` 核对音频及体积。 当前 `project.config.json` 使用 `enhance: false`、`es6: true`。本机 2.01.2510290 开发者工具的增强编译曾导致 `@babel/runtime/helpers/arrayWithHoles.js is not defined` 并白屏,已切回普通 ES6 编译并避开导航数据的数组解构。若重新出现该错误,先检查是否重新开启了增强编译,不要通过清空个人数据解决。 ```text miniprogram/ 小程序源代码与离线资源 pages/index/ 首页、导航和业务模块 pages/privacy/ 应用内说明 utils/ 持久化、日期、金额、天气、RSS、媒体、备份 data/ 英语、表达、精选句子、历史参考 assets/ 图标与 21 份 MP3 音频 cloudfunctions/dayGateway/ 可选的数据网关 scripts/ 检查与资源生成脚本 tests/ Node.js 逻辑测试 project.config.json 微信开发者工具项目入口 ```