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 }