Files
LinHelp/miniapp/miniprogram/utils/request.js
2026-07-14 16:04:51 +08:00

165 lines
4.1 KiB
JavaScript

function ensureToken() {
const app = getApp()
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',
method: 'POST',
data: {
username: 'resident',
password: 'dev'
},
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
})
})
}
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) => {
ensureToken().then((token) => {
wx.request({
url: app.globalData.apiBaseUrl + options.url,
method: options.method || 'GET',
data: options.data || {},
header: Object.assign({
Authorization: token,
satoken: token
}, options.header || {}),
success(res) {
if (res.statusCode >= 200 && res.statusCode < 300 && res.data && res.data.code === 0) {
resolve(res.data.data)
return
}
reject(new Error((res.data && res.data.message) || '请求失败'))
},
fail: reject
})
}).catch(reject)
})
}
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)
}
function statusText(status) {
const map = {
PENDING_CONFIRM: '待确认',
PREPARING: '备货中',
PENDING_DELIVERY: '待配送',
PENDING_PICKUP: '待自提',
DELIVERING: '配送中',
DELIVERED: '已送达',
COMPLETED: '已完成',
CANCELED: '已取消',
PENDING_REVIEW: '待审核',
PUBLISHED: '已发布',
REJECTED: '已驳回',
OFF_SHELF: '已下架',
SOLD: '已售出'
}
return map[status] || status || '-'
}
function setField(page, event) {
const field = event.currentTarget.dataset.field
if (!field) {
return
}
page.setData({
['form.' + field]: event.detail.value
})
}
module.exports = {
request,
uploadFile,
yuan,
statusText,
setField
}