优化海报保存逻辑,提升导出清晰度,兼容 iOS 设备。更新相关注释以反映画布尺寸和导出分辨率的变化。同时,调整小程序环境变量处理逻辑,确保生成的版本码正确,避免开发版过期问题。

This commit is contained in:
2026-02-13 11:30:10 +08:00
parent 0f9633b8f0
commit 5b182cc629
7 changed files with 41 additions and 8 deletions

View File

@@ -0,0 +1,25 @@
---
description: 存客宝 AI 集成与项目开发工作流
alwaysApply: true
---
# 存客宝 AI 项目开发工作流
## 1. 前置工作流
每次对话开始时,**先用本机小模型全量读取并调用** `Z:\SynologyDrive\存客宝AI` 的能力,再开始后续开发。
## 2. 开发与验证
- **每次使用**时调用存客宝 AI对当前项目进行验证与开发
- 每次对话时,结合存客宝 AI 的**多功能同步讨论**来修改代码
- 将上述流程同步更新到对应 Skill
## 3. 项目级 Skill 生成
开发过程中,需从存客宝 AI 抽取能力并生成针对本项目的 Skill
1. 该 Skill 用于管理整个项目,应继承存客宝 AI 的相应功能,并结合本项目已有代码与架构
2. **详细阅读**项目内所有代码
3. 按你认为**最佳分工方式**,对项目代码的各个域进行模块划分
4. 将生成的 Skill 命名为合适的中文名称,放在**项目根目录**下

View File

@@ -1210,14 +1210,15 @@ Page({
this.setData({ showPosterModal: false })
},
// 保存海报到相册(与海报绘制尺寸一致,必须传 destWidth/destHeight 否则部分机型导出失败
// 保存海报到相册:画布 300x450 兼容 iOS导出 2 倍 600x900 提升清晰度(宽高比 2:3 不变
savePoster() {
const width = 300
const height = 450
const exportScale = 2
wx.canvasToTempFilePath({
canvasId: 'posterCanvas',
destWidth: width,
destHeight: height,
destWidth: width * exportScale,
destHeight: height * exportScale,
fileType: 'png',
success: (res) => {
if (!res.tempFilePath) {

View File

@@ -256,7 +256,7 @@
<view class="modal-close" bindtap="closePosterModal">✕</view>
</view>
<!-- 海报预览 -->
<!-- 海报预览:画布 300x450 避免 iOS transform 裁切;保存时导出 2 倍分辨率 -->
<view class="poster-preview">
<canvas canvas-id="posterCanvas" class="poster-canvas" style="width: 300px; height: 450px;"></canvas>
</view>

View File

@@ -14,6 +14,8 @@ WECHAT_APPSECRET=3c1fb1f63e6e052222bbcead9d07fe0c
WECHAT_MCH_ID=1318592501
WECHAT_MCH_KEY=wx3e31b068be59ddc131b068be59ddc2
WECHAT_NOTIFY_URL=https://soul.quwanzhi.com/api/miniprogram/pay/notify
# 小程序码/订阅消息跳转版本formal=正式版(默认) | trial=体验版 | developer=开发版
WECHAT_MINI_PROGRAM_STATE=formal
# 微信转账配置API v3
WECHAT_APIV3_KEY=wx3e31b068be59ddc131b068be59ddc2

View File

@@ -120,9 +120,9 @@ func Load() (*Config, error) {
if wechatNotifyURL == "" {
wechatNotifyURL = "https://soul.quwanzhi.com/api/miniprogram/pay/notify" // 默认回调地址
}
wechatMiniProgramState := os.Getenv("WECHAT_MINI_PROGRAM_STATE")
wechatMiniProgramState := strings.TrimSpace(os.Getenv("WECHAT_MINI_PROGRAM_STATE"))
if wechatMiniProgramState != "developer" && wechatMiniProgramState != "trial" {
wechatMiniProgramState = "formal" // 默认正式版
wechatMiniProgramState = "formal" // 默认正式版,避免生成开发版码导致「开发版已过期」
}
// 转账配置

View File

@@ -216,9 +216,11 @@ func GenerateMiniProgramCode(scene, page string, width int) ([]byte, error) {
scene = scene[:32]
}
// 仅 developer/trial 生成对应版本码,其余一律正式版,避免扫码提示「开发版已过期」
envVersion := "release"
if cfg != nil && cfg.WechatMiniProgramState != "" {
switch cfg.WechatMiniProgramState {
if cfg != nil {
state := strings.TrimSpace(cfg.WechatMiniProgramState)
switch state {
case "developer":
envVersion = "develop"
case "trial":
@@ -227,6 +229,9 @@ func GenerateMiniProgramCode(scene, page string, width int) ([]byte, error) {
envVersion = "release"
}
}
if cfg != nil {
fmt.Printf("[GenerateMiniProgramCode] env_version=%s (WechatMiniProgramState=%q)\n", envVersion, cfg.WechatMiniProgramState)
}
reqBody := map[string]interface{}{
"scene": scene,
"page": page,

Binary file not shown.