feat: 完善公账锁店流程,静态图改走 OSS

强化公账锁店页与首页横幅入口,支持声明已支付与催办;
代付二维码与 base64 工具抽到公共组件;本地 static 大图改为 OSS 引用。
This commit is contained in:
李琦
2026-08-21 12:52:09 +08:00
parent 22e93c5dba
commit 158ffd9e6e
127 changed files with 910 additions and 134 deletions

View File

@@ -0,0 +1,83 @@
/**
* 把后端返回的 data URI / 纯 base64 写成小程序本地文件
* 为什么:微信 <image> 不能稳定渲染 data:image/...;base64体积大或带 chunk_split 换行时真机空白),
* 写成 USER_DATA_PATH 后用本地路径展示,无需上传 OSS
* 放主包 utils代付码弹窗走 easycom 必须在主包 components工具与组件同层避免分包互引
*/
/**
* 取可写的用户目录(真机优先 wx.envH5/开发工具兜底 uni.env
* @returns {string}
*/
function getUserDataPath() {
if (typeof wx !== 'undefined' && wx.env && wx.env.USER_DATA_PATH) {
return wx.env.USER_DATA_PATH
}
if (uni.env && uni.env.USER_DATA_PATH) {
return uni.env.USER_DATA_PATH
}
return ''
}
/**
* data URI / 纯 base64 写入本地临时文件,返回可供 <image :src> 绑定的路径
* @param {string} base64 完整 data:image/xxx;base64,xxx 或纯 base64可含 chunk_split 空白)
* @param {string} prefix 文件名前缀,默认 img
* @returns {Promise<string>} 本地文件路径
*/
export function base64ToLocalPath(base64, prefix = 'img') {
return new Promise((resolve, reject) => {
const raw = String(base64 || '').trim()
if (!raw) {
reject(new Error('图片数据为空'))
return
}
const root = getUserDataPath()
if (!root) {
reject(new Error('无法获取临时目录'))
return
}
const match = /^data:image\/(\w+);base64,/i.exec(raw)
const format = (match && match[1] ? match[1] : 'png').toLowerCase()
const body = (match ? raw.slice(match[0].length) : raw).replace(/\s/g, '')
if (!body) {
reject(new Error('图片数据无效'))
return
}
const filePath = `${root}/${prefix}_${Date.now()}.${format}`
uni.getFileSystemManager().writeFile({
filePath,
data: body,
encoding: 'base64',
success() {
resolve(filePath)
},
fail() {
reject(new Error('本地图片写入失败'))
},
})
})
}
/**
* 删除本地临时文件;已删或不存在不抛错,避免阻断关弹窗
* @param {string} filePath writeFile 得到的路径
* @returns {Promise<void>}
*/
export function unlinkLocalFile(filePath) {
return new Promise((resolve) => {
if (!filePath) {
resolve()
return
}
uni.getFileSystemManager().unlink({
filePath,
success() {
resolve()
},
fail() {
resolve()
},
})
})
}