- uni-app x官方无内置蓝牙API(文档明确见插件市场),为实现去插件化,工程整体迁移为uni-app vue3(vue/ts),App端内置完整BLE API,标准基座即可运行 - 新建src/BluetoothManager.ts:基于uni内置BLE API(createBLEConnection/notifyBLECharacteristicValueChange/writeBLECharacteristicValue(writeNoResponse)/setBLEMTU/getBLEDeviceRSSI等),保持原插件type约定,页面业务逻辑不变 - 删除uni_modules/android-ble及未使用的lime-*、uni-wifi;保留uni-icons、uni-scss - uts模块全部移植为ts(src/mcm、api、common):UTSJSONObject改Record<string,any>,适配vue3 getStorageSync空值返回空串的差异 - 7个页面uvue转vue:模板不变,显式import ref与生命周期钩子;OTA固件读取由java.io改为plus.io+uni.base64ToArrayBuffer - manifest.json去uni-app-x改app-plus结构,补Android 12+蓝牙权限;删除platformConfig.json;运行改用标准基座
90 lines
2.3 KiB
TypeScript
90 lines
2.3 KiB
TypeScript
import { getToken } from "../common/auth"
|
||
import { clearAllData } from "../common/auth"
|
||
|
||
// 通用 JSON 对象类型(替代 uts 的 UTSJSONObject)
|
||
export type JSONObject = Record<string, any>
|
||
|
||
// 可选后台服务器列表
|
||
export type ServerItem = {
|
||
name: string
|
||
url: string
|
||
}
|
||
|
||
export const SERVER_LIST: ServerItem[] = [
|
||
{ name: "正式 ssl (evmtapp.clenergy.com)", url: "https://evmtapp.clenergy.com:20096" } as ServerItem,
|
||
{ name: "测试 (47.107.245.120)", url: "http://47.107.245.120:30081" } as ServerItem,
|
||
{ name: "DEBUG (192.168.13.158)", url: "http://192.168.13.158:30081" } as ServerItem
|
||
]
|
||
|
||
let recordBaseUrl: string | null = null
|
||
|
||
// 读取当前后台服务器地址(内存 + 本地),未选择过则默认第一个
|
||
export function getBaseUrl(): string {
|
||
if (recordBaseUrl != null && recordBaseUrl.length > 0) {
|
||
return recordBaseUrl
|
||
}
|
||
const t = uni.getStorageSync('serverBaseUrl') as string
|
||
if (t != null && t.length > 0) {
|
||
recordBaseUrl = t
|
||
return t
|
||
}
|
||
return SERVER_LIST[0].url
|
||
}
|
||
|
||
// 保存后台服务器地址(内存 + 本地),下次启动直接加载
|
||
export function setBaseUrl(url: string) {
|
||
recordBaseUrl = url
|
||
uni.setStorageSync('serverBaseUrl', url)
|
||
}
|
||
|
||
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE"
|
||
|
||
// 请求参数类型
|
||
export type HttpRequest = {
|
||
url: string
|
||
method?: HttpMethod
|
||
data?: any
|
||
header?: JSONObject
|
||
}
|
||
|
||
// 封装请求
|
||
export function $http(params: HttpRequest): Promise<JSONObject> {
|
||
return new Promise((resolve, reject) => {
|
||
|
||
// 1. 准备 header
|
||
let baseHeader: JSONObject = params.header ?? {} as JSONObject
|
||
|
||
baseHeader["Content-Type"] = "application/json"
|
||
|
||
// 2. 读 token,有就加 Authorization
|
||
const token = getToken()
|
||
if (token != null && token.length > 0) {
|
||
baseHeader["Authorization"] = token
|
||
}
|
||
|
||
// 3. 发请求
|
||
uni.request({
|
||
url: getBaseUrl() + params.url,
|
||
method: params.method ?? "GET",
|
||
data: params.data ?? {} as JSONObject,
|
||
header: baseHeader,
|
||
success: (res) => {
|
||
if(res.statusCode == 401) {
|
||
clearAllData()
|
||
uni.reLaunch({
|
||
url: '/pages/login/login'
|
||
})
|
||
}
|
||
const result: JSONObject = {
|
||
statusCode: res.statusCode,
|
||
data: res.data
|
||
} as JSONObject
|
||
resolve(result)
|
||
},
|
||
fail: (err) => {
|
||
reject(err)
|
||
}
|
||
})
|
||
})
|
||
}
|