refactor: migrate to WeChat cloud development

- 新增 cloud-functions/ 目录(6个云函数:auth/device/subscription/treatment/user/admin)
- 云函数使用 wx-server-sdk + 云数据库(不再依赖 MySQL)
- auth 云函数通过 cloud.getWXContext() 自动获取 openid,无需手动 wx.login
- request.js 改为通过 wx.cloud.callFunction() 调用云函数
- 登录流程简化:点击授权 → 直接调 auth 云函数 → 获取用户信息
- 保留 HTTP 模式切换能力(USE_CLOUD 变量控制)
这个提交包含在:
Guoguo
2026-04-24 22:03:16 +08:00
父节点 5064cf119d
当前提交 36e80d503a
修改 16 个文件,包含 425 行新增26 行删除
+54 -5
查看文件
@@ -1,13 +1,35 @@
var API_BASE = 'https://api.lightmask.com'
var USE_MOCK = true
var USE_CLOUD = true
function callCloud(funcName, action, data) {
return new Promise(function (resolve, reject) {
wx.cloud.callFunction({
name: funcName,
data: { action: action, data: data }
}).then(function (res) {
if (res.result && res.result.code === 0) {
resolve(res.result.data)
} else if (res.result && (res.result.code === 1001 || res.result.code === 1002)) {
wx.removeStorageSync('token')
wx.reLaunch({ url: '/pages/login/login' })
reject(res.result)
} else {
reject(res.result || { code: -1, message: '请求失败' })
}
}).catch(function (err) {
reject({ code: 2002, message: err.errMsg || '网络异常' })
})
})
}
var mock = null
if (USE_MOCK) {
if (!USE_CLOUD) {
mock = require('./mock')
}
function request(options) {
if (USE_MOCK && mock && mock.enabled) {
var API_BASE = 'https://api.lightmask.com'
function httpRequest(options) {
if (mock && mock.enabled) {
return new Promise(function (resolve) {
setTimeout(function () {
var result = mock.handle(options.method || 'GET', options.path, options.data)
@@ -49,6 +71,33 @@ function request(options) {
})
}
var FUNC_MAP = {
'/api/v1/auth/login': { fn: 'auth', action: 'login' },
'/api/v1/auth/refresh': { fn: 'auth', action: 'refresh' },
'/api/v1/user/profile': { fn: 'user', action: 'profile' },
'/api/v1/user/update': { fn: 'user', action: 'update' },
'/api/v1/device/bind': { fn: 'device', action: 'bind' },
'/api/v1/device/unbind': { fn: 'device', action: 'unbind' },
'/api/v1/device/list': { fn: 'device', action: 'list' },
'/api/v1/device/detail': { fn: 'device', action: 'detail' },
'/api/v1/subscription/status': { fn: 'subscription', action: 'status' },
'/api/v1/subscription/purchase': { fn: 'subscription', action: 'purchase' },
'/api/v1/subscription/verify': { fn: 'subscription', action: 'verify' },
'/api/v1/treatment/sync': { fn: 'treatment', action: 'sync' },
'/api/v1/treatment/history': { fn: 'treatment', action: 'history' }
}
function request(options) {
if (USE_CLOUD) {
var mapping = FUNC_MAP[options.path]
if (mapping) {
return callCloud(mapping.fn, mapping.action, options.data)
}
return Promise.reject({ code: -1, message: '未映射的接口' })
}
return httpRequest(options)
}
function get(path, data) {
return request({ path: path, method: 'GET', data: data })
}