feat: harden phase one workflows

This commit is contained in:
王鹏
2026-07-14 16:04:51 +08:00
parent 47f4a24760
commit 767534df48
103 changed files with 4849 additions and 388 deletions

View File

@@ -3,6 +3,13 @@ function ensureToken() {
if (app.globalData.token) {
return Promise.resolve(app.globalData.token)
}
if (app.globalData.useDevLogin) {
return devLogin(app)
}
return wxLogin(app)
}
function devLogin(app) {
return new Promise((resolve, reject) => {
wx.request({
url: app.globalData.apiBaseUrl + '/api/auth/dev-miniapp-login',
@@ -25,6 +32,37 @@ function ensureToken() {
})
}
function wxLogin(app) {
return new Promise((resolve, reject) => {
wx.login({
success(loginResult) {
if (!loginResult.code) {
reject(new Error('微信登录失败'))
return
}
wx.request({
url: app.globalData.apiBaseUrl + '/api/auth/miniapp-login',
method: 'POST',
data: {
code: loginResult.code
},
success(res) {
if (res.statusCode >= 200 && res.statusCode < 300 && res.data && res.data.code === 0) {
app.globalData.token = res.data.data.token
app.globalData.user = res.data.data
resolve(app.globalData.token)
return
}
reject(new Error((res.data && res.data.message) || '登录失败'))
},
fail: reject
})
},
fail: reject
})
})
}
function request(options) {
const app = getApp()
return new Promise((resolve, reject) => {
@@ -50,6 +88,40 @@ function request(options) {
})
}
function uploadFile(filePath) {
const app = getApp()
return new Promise((resolve, reject) => {
ensureToken().then((token) => {
wx.uploadFile({
url: app.globalData.apiBaseUrl + '/api/files/upload',
filePath,
name: 'file',
header: {
Authorization: token,
satoken: token
},
success(res) {
let body = res.data
if (typeof body === 'string') {
try {
body = JSON.parse(body)
} catch (error) {
reject(new Error('上传失败'))
return
}
}
if (res.statusCode >= 200 && res.statusCode < 300 && body && body.code === 0) {
resolve(body.data)
return
}
reject(new Error((body && body.message) || '上传失败'))
},
fail: reject
})
}).catch(reject)
})
}
function yuan(cent) {
return ((cent || 0) / 100).toFixed(2)
}
@@ -85,6 +157,7 @@ function setField(page, event) {
module.exports = {
request,
uploadFile,
yuan,
statusText,
setField