解决小程序上传时出现的问题。

This commit is contained in:
cst61
2026-02-01 10:55:35 +08:00
parent 802ffbb2f3
commit eef85dce4a
22 changed files with 735 additions and 645 deletions

View File

@@ -2,22 +2,6 @@
const common_vendor = require("./vendor.js");
const uniStarter_config = require("../uni-starter.config.js");
const db = common_vendor.tr.database();
function redirectToLogin() {
const loginPage = "/uni_modules/uni-id-pages/pages/login/login-withpwd";
const pages = getCurrentPages();
if (pages.length > 0) {
const currentPage = pages[pages.length - 1];
if (currentPage.route && currentPage.route.includes("login")) {
return;
}
}
common_vendor.index.reLaunch({
url: loginPage,
fail: (err) => {
common_vendor.index.__f__("error", "at common/appInit.js:32", "跳转登录页失败:", err);
}
});
}
function isLoginApi(url) {
if (!url)
return false;
@@ -27,26 +11,28 @@ function setupRequestInterceptor() {
const originalRequest = common_vendor.index.request;
common_vendor.index.request = function(options = {}) {
const { url, header = {}, method = "GET", ...restOptions } = options;
common_vendor.index.__f__("log", "at common/appInit.js:59", "[Request Interceptor] 开始拦截请求:", {
url,
method: method.toUpperCase(),
isLoginApi: isLoginApi(url),
originalOptions: options
});
let tenantId = "";
try {
tenantId = common_vendor.index.getStorageSync("backend-tenant-id") || "";
} catch (e) {
common_vendor.index.__f__("error", "at common/appInit.js:63", "获取 tenantId 失败:", e);
common_vendor.index.__f__("error", "at common/appInit.js:71", "[Request Interceptor] 获取 tenantId 失败:", e);
}
common_vendor.index.__f__("log", "at common/appInit.js:74", "[Request Interceptor] tenantId状态:", {
tenantId,
hasTenantId: !!tenantId
});
if (!isLoginApi(url) && !tenantId) {
const pages = getCurrentPages();
const hasLoadedPages = pages.length > 0 && pages[pages.length - 1].route;
if (hasLoadedPages) {
const currentPage = pages[pages.length - 1];
const currentRoute = "/" + currentPage.route;
const isHomePage = currentRoute.includes("/pages/furniture_reception/furniture_reception");
const isLoginRelated = currentRoute.includes("/uni_modules/uni-id-pages/pages/login") || currentRoute.includes("/uni_modules/uni-id-pages/pages/register") || currentRoute.includes("/uni_modules/uni-id-pages/pages/retrieve");
if (!isHomePage && !isLoginRelated) {
common_vendor.index.__f__("warn", "at common/appInit.js:85", "[Request Interceptor] 租户ID为空跳转到登录页面");
redirectToLogin();
return Promise.reject(new Error("未登录,请先登录"));
}
}
common_vendor.index.__f__("warn", "at common/appInit.js:83", "[Request Interceptor] 租户ID为空但允许请求继续执行由后端处理认证");
} else if (isLoginApi(url)) {
common_vendor.index.__f__("log", "at common/appInit.js:86", "[Request Interceptor] 这是登录接口跳过租户ID检查");
} else {
common_vendor.index.__f__("log", "at common/appInit.js:88", "[Request Interceptor] 租户ID存在正常处理请求");
}
const newHeader = {
"Content-Type": "application/json",
@@ -64,7 +50,7 @@ function setupRequestInterceptor() {
delete newHeader["Authorization"];
}
} catch (e) {
common_vendor.index.__f__("error", "at common/appInit.js:118", "获取 token 失败:", e);
common_vendor.index.__f__("error", "at common/appInit.js:115", "获取 token 失败:", e);
}
}
try {
@@ -77,25 +63,42 @@ function setupRequestInterceptor() {
newHeader["X-Scenario"] = scenario;
}
} catch (e) {
common_vendor.index.__f__("error", "at common/appInit.js:133", "获取 roleName 或 scenario 失败:", e);
common_vendor.index.__f__("error", "at common/appInit.js:130", "获取 roleName 或 scenario 失败:", e);
}
const finalRequestOptions = {
...restOptions,
url,
method,
header: newHeader
};
common_vendor.index.__f__("log", "at common/appInit.js:141", "[Request Interceptor] 准备发送请求:", {
url,
method: method.toUpperCase(),
headers: newHeader,
hasData: !!restOptions.data
});
return new Promise((resolve, reject) => {
common_vendor.index.__f__("log", "at common/appInit.js:151", "[Request Interceptor] 开始调用原始 uni.request");
originalRequest.call(common_vendor.index, {
...restOptions,
url,
method,
header: newHeader,
...finalRequestOptions,
success: (res) => {
common_vendor.index.__f__("log", "at common/appInit.js:155", "[Request Interceptor] 请求成功:", {
url,
method: method.toUpperCase(),
statusCode: res.statusCode,
hasData: !!res.data
});
if (options.success) {
options.success(res);
}
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at common/appInit.js:153", "[Request Interceptor] 请求失败:", {
common_vendor.index.__f__("error", "at common/appInit.js:170", "[Request Interceptor] 请求失败:", {
url,
method: method.toUpperCase(),
error: err
error: err,
errorMessage: err.errMsg || "未知错误"
});
if (options.fail) {
options.fail(err);
@@ -103,6 +106,11 @@ function setupRequestInterceptor() {
reject(err);
},
complete: (res) => {
common_vendor.index.__f__("log", "at common/appInit.js:184", "[Request Interceptor] 请求完成:", {
url,
method: method.toUpperCase(),
hasResponse: !!res
});
if (options.complete) {
options.complete(res);
}
@@ -123,7 +131,7 @@ async function initApp() {
app.globalData.config = uniStarter_config.config;
}
} catch (e) {
common_vendor.index.__f__("warn", "at common/appInit.js:194", "[appInit] 挂载配置失败:", e);
common_vendor.index.__f__("warn", "at common/appInit.js:217", "[appInit] 挂载配置失败:", e);
}
}, 1);
function onDBError({
@@ -131,11 +139,11 @@ async function initApp() {
// 错误码详见https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=returnvalue
message
}) {
common_vendor.index.__f__("log", "at common/appInit.js:207", "onDBError", {
common_vendor.index.__f__("log", "at common/appInit.js:230", "onDBError", {
code,
message
});
common_vendor.index.__f__("error", "at common/appInit.js:212", code, message);
common_vendor.index.__f__("error", "at common/appInit.js:235", code, message);
}
db.on("error", onDBError);
common_vendor.tr.interceptObject({
@@ -148,21 +156,21 @@ async function initApp() {
// 参数列表
}) {
if (objectName == "uni-id-co" && (methodName.includes("loginBy") || ["login", "registerUser"].includes(methodName))) {
common_vendor.index.__f__("log", "at common/appInit.js:231", "执行登录相关云对象");
common_vendor.index.__f__("log", "at common/appInit.js:254", "执行登录相关云对象");
params[0].inviteCode = await new Promise((callBack) => {
common_vendor.index.getClipboardData({
success: function(res) {
common_vendor.index.__f__("log", "at common/appInit.js:235", "剪切板内容:" + res.data);
common_vendor.index.__f__("log", "at common/appInit.js:258", "剪切板内容:" + res.data);
if (res.data.slice(0, 18) == "uniInvitationCode:") {
let uniInvitationCode = res.data.slice(18, 38);
common_vendor.index.__f__("log", "at common/appInit.js:238", "当前用户是其他用户推荐下载的,推荐者的code是" + uniInvitationCode);
common_vendor.index.__f__("log", "at common/appInit.js:261", "当前用户是其他用户推荐下载的,推荐者的code是" + uniInvitationCode);
callBack(uniInvitationCode);
} else {
callBack();
}
},
fail() {
common_vendor.index.__f__("log", "at common/appInit.js:250", "error--");
common_vendor.index.__f__("log", "at common/appInit.js:273", "error--");
callBack();
},
complete() {
@@ -173,12 +181,12 @@ async function initApp() {
}
},
success(e) {
common_vendor.index.__f__("log", "at common/appInit.js:265", e);
common_vendor.index.__f__("log", "at common/appInit.js:288", e);
},
complete() {
},
fail(e) {
common_vendor.index.__f__("error", "at common/appInit.js:271", e);
common_vendor.index.__f__("error", "at common/appInit.js:294", e);
}
});
}

View File

@@ -67,7 +67,16 @@ function request(options = {}) {
} = options;
const fullUrl = url.startsWith("http") ? url : common_config.getApiUrl(url);
const apiEnv = typeof common_config.getApiEnv === "function" ? common_config.getApiEnv() : "";
common_vendor.index.__f__("log", "at common/request.js:118", `H5环境(${apiEnv})直接使用完整URL: ${fullUrl}`);
common_vendor.index.__f__("log", "at common/request.js:117", "[Request] 开始处理请求:", {
originalUrl: url,
fullUrl,
method: method.toUpperCase(),
isLoginApi: isLoginApi(fullUrl),
apiEnv,
needTenantId,
needToken
});
common_vendor.index.__f__("log", "at common/request.js:129", `[Request] 完整请求URL: ${fullUrl}`);
const requestHeader = {
"Content-Type": "application/json",
...header
@@ -92,7 +101,7 @@ function request(options = {}) {
if (needTenantId) {
const tenantId = getTenantId();
if (!isLoginApi(fullUrl) && !tenantId) {
common_vendor.index.__f__("warn", "at common/request.js:159", "[Request] 租户ID为空跳转到登录页面");
common_vendor.index.__f__("warn", "at common/request.js:170", "[Request] 租户ID为空跳转到登录页面");
redirectToLogin();
return Promise.reject(new Error("未登录,请先登录"));
}
@@ -100,7 +109,15 @@ function request(options = {}) {
requestHeader["X-Tenant-Id"] = tenantId;
}
}
common_vendor.index.__f__("log", "at common/request.js:183", "[Request] 准备发起 uni.request:", {
url: fullUrl,
method: method.toUpperCase(),
hasData: !!requestData,
hasHeaders: !!requestHeader,
timeout
});
return new Promise((resolve, reject) => {
common_vendor.index.__f__("log", "at common/request.js:192", "[Request] 调用 uni.request 开始执行");
common_vendor.index.request({
url: fullUrl,
method: method.toUpperCase(),
@@ -109,13 +126,28 @@ function request(options = {}) {
timeout,
...restOptions,
success: (res) => {
common_vendor.index.__f__("log", "at common/request.js:201", "[Request] 收到响应:", {
url: fullUrl,
method: method.toUpperCase(),
statusCode: res.statusCode,
hasData: !!res.data,
dataType: typeof res.data
});
if (res.statusCode === 401) {
common_vendor.index.__f__("warn", "at common/request.js:211", "[Request] 收到401状态码跳转到登录页面");
redirectToLogin();
reject(new Error("登录已过期,请重新登录"));
return;
}
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at common/request.js:184", "[Request] 请求失败:", {
common_vendor.index.__f__("error", "at common/request.js:219", "[Request] 请求失败:", {
url: fullUrl,
method: method.toUpperCase(),
error: err
error: err,
errorMessage: err.errMsg || "未知错误",
errorCode: err.code || "无错误码"
});
reject(err);
}

View File

@@ -1,6 +1,6 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_bluetooth = require("../../common/bluetooth.js");
const pagesSubpackage_bluetoothRecorder_utils_bluetooth = require("./utils/bluetooth.js");
const common_request = require("../../common/request.js");
const common_config = require("../../common/config.js");
const _sfc_main = {
@@ -29,35 +29,35 @@ const _sfc_main = {
*/
async initBluetooth() {
try {
common_bluetooth.bluetoothRecorder.onDeviceFound = (device) => {
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.onDeviceFound = (device) => {
this.addLog("info", `发现设备: ${device.name || device.deviceId}`);
this.deviceList = common_bluetooth.bluetoothRecorder.getDeviceList();
this.deviceList = pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.getDeviceList();
};
common_bluetooth.bluetoothRecorder.onDeviceConnected = (deviceId) => {
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.onDeviceConnected = (deviceId) => {
this.addLog("success", `设备连接成功: ${deviceId}`);
this.isConnected = true;
this.connectedDeviceId = deviceId;
};
common_bluetooth.bluetoothRecorder.onDeviceDisconnected = (deviceId) => {
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.onDeviceDisconnected = (deviceId) => {
this.addLog("warning", `设备断开连接: ${deviceId}`);
this.isConnected = false;
this.isReceiving = false;
this.connectedDeviceId = null;
};
common_bluetooth.bluetoothRecorder.onAudioDataReceived = (data) => {
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.onAudioDataReceived = (data) => {
this.audioDataCount++;
const estimatedSize = data.data.length * 3 / 4 / 1024;
this.audioBufferSize = Math.round(estimatedSize * 100) / 100;
this.isReceiving = true;
};
common_bluetooth.bluetoothRecorder.onError = (error) => {
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.onError = (error) => {
this.addLog("error", error.message || "发生错误");
common_vendor.index.showToast({
title: error.message || "操作失败",
icon: "none"
});
};
await common_bluetooth.bluetoothRecorder.initBluetoothAdapter();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.initBluetoothAdapter();
this.addLog("success", "蓝牙适配器初始化成功");
} catch (error) {
this.addLog("error", `初始化失败: ${error.message || error.errMsg}`);
@@ -74,8 +74,8 @@ const _sfc_main = {
async handleStartScan() {
try {
this.deviceList = [];
common_bluetooth.bluetoothRecorder.clearDeviceList();
await common_bluetooth.bluetoothRecorder.startScan({
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.clearDeviceList();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.startScan({
allowDuplicatesKey: false,
interval: 0
});
@@ -95,7 +95,7 @@ const _sfc_main = {
*/
async handleStopScan() {
try {
await common_bluetooth.bluetoothRecorder.stopScan();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.stopScan();
this.isScanning = false;
this.addLog("info", "停止搜索");
} catch (error) {
@@ -111,7 +111,7 @@ const _sfc_main = {
}
try {
common_vendor.index.showLoading({ title: "连接中..." });
await common_bluetooth.bluetoothRecorder.connectDevice(device.deviceId);
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.connectDevice(device.deviceId);
this.addLog("success", `正在连接设备: ${device.name || device.deviceId}`);
} catch (error) {
this.addLog("error", `连接失败: ${error.message || error.errMsg}`);
@@ -125,7 +125,7 @@ const _sfc_main = {
async handleDisconnect() {
try {
common_vendor.index.showLoading({ title: "断开中..." });
await common_bluetooth.bluetoothRecorder.disconnectDevice();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.disconnectDevice();
this.isConnected = false;
this.isReceiving = false;
this.connectedDeviceId = null;
@@ -142,7 +142,7 @@ const _sfc_main = {
* 清空缓冲区
*/
handleClearBuffer() {
common_bluetooth.bluetoothRecorder.clearAudioBuffer();
pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.clearAudioBuffer();
this.audioDataCount = 0;
this.audioBufferSize = 0;
this.addLog("info", "已清空音频缓冲区");
@@ -152,7 +152,7 @@ const _sfc_main = {
*/
async handleSaveAudio() {
try {
const audioData = common_bluetooth.bluetoothRecorder.mergeAudioData();
const audioData = pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.mergeAudioData();
if (!audioData) {
common_vendor.index.showToast({
title: "没有可保存的音频数据",
@@ -181,7 +181,7 @@ const _sfc_main = {
async handleUploadAudio() {
var _a;
try {
const audioData = common_bluetooth.bluetoothRecorder.mergeAudioData();
const audioData = pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.mergeAudioData();
if (!audioData) {
common_vendor.index.showToast({
title: "没有可上传的音频数据",
@@ -244,12 +244,12 @@ const _sfc_main = {
async cleanup() {
try {
if (this.isConnected) {
await common_bluetooth.bluetoothRecorder.disconnectDevice();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.disconnectDevice();
}
if (this.isScanning) {
await common_bluetooth.bluetoothRecorder.stopScan();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.stopScan();
}
await common_bluetooth.bluetoothRecorder.closeBluetoothAdapter();
await pagesSubpackage_bluetoothRecorder_utils_bluetooth.bluetoothRecorder.closeBluetoothAdapter();
} catch (error) {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/bluetooth-recorder.vue:445", "清理资源失败", error);
}

View File

@@ -0,0 +1,446 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
class BluetoothRecorder {
constructor() {
this.adapterState = false;
this.isScanning = false;
this.connectedDeviceId = null;
this.deviceList = [];
this.services = [];
this.characteristics = [];
this.notifyCharacteristicId = null;
this.writeCharacteristicId = null;
this.audioBuffer = [];
this.isReceiving = false;
this.onDeviceFound = null;
this.onDeviceConnected = null;
this.onDeviceDisconnected = null;
this.onAudioDataReceived = null;
this.onError = null;
}
/**
* 初始化蓝牙适配器
*/
async initBluetoothAdapter() {
return new Promise((resolve, reject) => {
common_vendor.index.openBluetoothAdapter({
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:36", "蓝牙适配器初始化成功", res);
this.adapterState = true;
this._listenAdapterState();
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:42", "蓝牙适配器初始化失败", err);
this.adapterState = false;
this._handleError("蓝牙适配器初始化失败", err);
reject(err);
}
});
});
}
/**
* 监听蓝牙适配器状态变化
*/
_listenAdapterState() {
common_vendor.index.onBluetoothAdapterStateChange((res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:56", "蓝牙适配器状态变化", res);
this.adapterState = res.available;
if (!res.available) {
this.connectedDeviceId = null;
this._handleError("蓝牙适配器不可用", res);
}
});
}
/**
* 开始搜索蓝牙设备
* @param {Object} options - 搜索选项
* @param {Array} options.services - 服务UUID列表可选
* @param {number} options.interval - 上报间隔(毫秒)
* @param {boolean} options.allowDuplicatesKey - 是否允许重复上报
*/
async startScan(options = {}) {
if (this.isScanning) {
common_vendor.index.__f__("warn", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:74", "已经在扫描中");
return;
}
if (!this.adapterState) {
await this.initBluetoothAdapter();
}
return new Promise((resolve, reject) => {
common_vendor.index.onBluetoothDeviceFound((res) => {
const devices = res.devices || [];
devices.forEach((device) => {
const exists = this.deviceList.find((d) => d.deviceId === device.deviceId);
if (!exists) {
this.deviceList.push({
deviceId: device.deviceId,
name: device.name || "未知设备",
RSSI: device.RSSI,
advertisData: device.advertisData,
advertisServiceUUIDs: device.advertisServiceUUIDs,
localName: device.localName
});
if (this.onDeviceFound) {
this.onDeviceFound(device);
}
}
});
});
common_vendor.index.startBluetoothDevicesDiscovery({
services: options.services || [],
allowDuplicatesKey: options.allowDuplicatesKey || false,
interval: options.interval || 0,
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:113", "开始搜索蓝牙设备", res);
this.isScanning = true;
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:118", "搜索蓝牙设备失败", err);
this.isScanning = false;
this._handleError("搜索蓝牙设备失败", err);
reject(err);
}
});
});
}
/**
* 停止搜索蓝牙设备
*/
async stopScan() {
if (!this.isScanning) {
return;
}
return new Promise((resolve, reject) => {
common_vendor.index.stopBluetoothDevicesDiscovery({
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:138", "停止搜索蓝牙设备", res);
this.isScanning = false;
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:143", "停止搜索失败", err);
this._handleError("停止搜索失败", err);
reject(err);
}
});
});
}
/**
* 连接蓝牙设备
* @param {string} deviceId - 设备ID
*/
async connectDevice(deviceId) {
if (this.connectedDeviceId === deviceId) {
common_vendor.index.__f__("warn", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:157", "设备已连接");
return;
}
return new Promise((resolve, reject) => {
common_vendor.index.createBLEConnection({
deviceId,
success: async (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:165", "蓝牙设备连接成功", res);
this.connectedDeviceId = deviceId;
this._listenConnectionState(deviceId);
try {
await this.getServices(deviceId);
if (this.onDeviceConnected) {
this.onDeviceConnected(deviceId);
}
resolve(res);
} catch (err) {
reject(err);
}
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:186", "蓝牙设备连接失败", err);
this._handleError("蓝牙设备连接失败", err);
reject(err);
}
});
});
}
/**
* 监听连接状态
*/
_listenConnectionState(deviceId) {
common_vendor.index.onBLEConnectionStateChange((res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:199", "蓝牙连接状态变化", res);
if (res.deviceId === deviceId) {
if (!res.connected) {
this.connectedDeviceId = null;
this.isReceiving = false;
if (this.onDeviceDisconnected) {
this.onDeviceDisconnected(deviceId);
}
}
}
});
}
/**
* 断开蓝牙设备连接
*/
async disconnectDevice() {
if (!this.connectedDeviceId) {
return;
}
return new Promise((resolve, reject) => {
common_vendor.index.closeBLEConnection({
deviceId: this.connectedDeviceId,
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:225", "蓝牙设备断开成功", res);
this.connectedDeviceId = null;
this.isReceiving = false;
this.audioBuffer = [];
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:232", "蓝牙设备断开失败", err);
this._handleError("蓝牙设备断开失败", err);
reject(err);
}
});
});
}
/**
* 获取蓝牙设备服务列表
* @param {string} deviceId - 设备ID
*/
async getServices(deviceId) {
return new Promise((resolve, reject) => {
common_vendor.index.getBLEDeviceServices({
deviceId,
success: async (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:249", "获取服务列表成功", res);
this.services = res.services || [];
for (const service of this.services) {
try {
await this.getCharacteristics(deviceId, service.uuid);
} catch (err) {
common_vendor.index.__f__("warn", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:257", "获取特征值失败", service.uuid, err);
}
}
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:264", "获取服务列表失败", err);
this._handleError("获取服务列表失败", err);
reject(err);
}
});
});
}
/**
* 获取特征值列表
* @param {string} deviceId - 设备ID
* @param {string} serviceId - 服务UUID
*/
async getCharacteristics(deviceId, serviceId) {
return new Promise((resolve, reject) => {
common_vendor.index.getBLEDeviceCharacteristics({
deviceId,
serviceId,
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:283", "获取特征值成功", serviceId, res);
const chars = res.characteristics || [];
this.characteristics.push(...chars);
chars.forEach((char) => {
if (char.properties.notify || char.properties.indicate) {
if (!this.notifyCharacteristicId) {
this.notifyCharacteristicId = {
deviceId,
serviceId,
characteristicId: char.uuid
};
this.enableNotify(deviceId, serviceId, char.uuid);
}
}
if (char.properties.write || char.properties.writeNoResponse) {
if (!this.writeCharacteristicId) {
this.writeCharacteristicId = {
deviceId,
serviceId,
characteristicId: char.uuid
};
}
}
});
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:317", "获取特征值失败", err);
reject(err);
}
});
});
}
/**
* 启用特征值通知(用于接收音频数据)
* @param {string} deviceId - 设备ID
* @param {string} serviceId - 服务UUID
* @param {string} characteristicId - 特征值UUID
*/
async enableNotify(deviceId, serviceId, characteristicId) {
return new Promise((resolve, reject) => {
common_vendor.index.notifyBLECharacteristicValueChange({
deviceId,
serviceId,
characteristicId,
state: true,
// 启用通知
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:338", "启用通知成功", res);
common_vendor.index.onBLECharacteristicValueChange((res2) => {
this._handleAudioData(res2.value);
});
this.isReceiving = true;
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:349", "启用通知失败", err);
this._handleError("启用通知失败", err);
reject(err);
}
});
});
}
/**
* 处理接收到的音频数据
* @param {ArrayBuffer} data - 音频数据
*/
_handleAudioData(data) {
const base64 = common_vendor.index.arrayBufferToBase64(data);
this.audioBuffer.push({
data: base64,
timestamp: Date.now()
});
if (this.onAudioDataReceived) {
this.onAudioDataReceived({
data: base64,
arrayBuffer: data,
timestamp: Date.now()
});
}
}
/**
* 读取特征值
* @param {string} deviceId - 设备ID
* @param {string} serviceId - 服务UUID
* @param {string} characteristicId - 特征值UUID
*/
async readCharacteristic(deviceId, serviceId, characteristicId) {
return new Promise((resolve, reject) => {
common_vendor.index.readBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:394", "读取特征值成功", res);
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:398", "读取特征值失败", err);
this._handleError("读取特征值失败", err);
reject(err);
}
});
});
}
/**
* 写入特征值(发送命令到设备)
* @param {ArrayBuffer} value - 要写入的数据
*/
async writeCharacteristic(value) {
if (!this.writeCharacteristicId) {
throw new Error("未找到可写入的特征值");
}
const { deviceId, serviceId, characteristicId } = this.writeCharacteristicId;
return new Promise((resolve, reject) => {
common_vendor.index.writeBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,
value,
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:424", "写入特征值成功", res);
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:428", "写入特征值失败", err);
this._handleError("写入特征值失败", err);
reject(err);
}
});
});
}
/**
* 获取已缓存的音频数据
*/
getAudioBuffer() {
return this.audioBuffer;
}
/**
* 清空音频缓冲区
*/
clearAudioBuffer() {
this.audioBuffer = [];
}
/**
* 合并音频数据为完整文件Base64格式
*/
mergeAudioData() {
return this.audioBuffer.map((item) => item.data).join("");
}
/**
* 处理错误
*/
_handleError(message, error) {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:461", `[BluetoothRecorder] ${message}`, error);
if (this.onError) {
this.onError({
message,
error
});
}
}
/**
* 关闭蓝牙适配器
*/
async closeBluetoothAdapter() {
if (this.connectedDeviceId) {
await this.disconnectDevice();
}
if (this.isScanning) {
await this.stopScan();
}
return new Promise((resolve, reject) => {
common_vendor.index.closeBluetoothAdapter({
success: (res) => {
common_vendor.index.__f__("log", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:487", "关闭蓝牙适配器成功", res);
this.adapterState = false;
resolve(res);
},
fail: (err) => {
common_vendor.index.__f__("error", "at pages-subpackage/bluetooth-recorder/utils/bluetooth.js:492", "关闭蓝牙适配器失败", err);
reject(err);
}
});
});
}
/**
* 获取设备列表
*/
getDeviceList() {
return this.deviceList;
}
/**
* 清空设备列表
*/
clearDeviceList() {
this.deviceList = [];
}
}
const bluetoothRecorder = new BluetoothRecorder();
exports.bluetoothRecorder = bluetoothRecorder;
//# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages-subpackage/bluetooth-recorder/utils/bluetooth.js.map

View File

@@ -1,9 +1,8 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const uni_modules_jsonGps_js_sdk_gps = require("../../uni_modules/json-gps/js_sdk/gps.js");
let cdbRef;
const statusBar = () => "../../uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.js";
const gps = new uni_modules_jsonGps_js_sdk_gps.Gps(), db = common_vendor.tr.database();
const db = common_vendor.tr.database();
const _sfc_main = {
components: {
statusBar
@@ -57,9 +56,6 @@ const _sfc_main = {
} catch (e) {
this.keyword = "";
}
await gps.getLocation({
geocode: true
});
},
methods: {
searchClick(e) {
@@ -77,18 +73,18 @@ const _sfc_main = {
clear: true
}, () => {
common_vendor.index.stopPullDownRefresh();
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:166", "end");
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:147", "end");
});
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:168", "refresh");
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:149", "refresh");
},
loadMore() {
cdbRef.loadMore();
},
onqueryerror(e) {
common_vendor.index.__f__("error", "at pages-subpackage/list/list.nvue:174", e);
common_vendor.index.__f__("error", "at pages-subpackage/list/list.nvue:155", e);
},
onpullingdown(e) {
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:177", e);
common_vendor.index.__f__("log", "at pages-subpackage/list/list.nvue:158", e);
this.showRefresh = true;
if (e.pullingDistance > 100) {
this.refresh();

View File

@@ -7,7 +7,7 @@
"urlCheck": false,
"es6": true,
"postcss": false,
"minified": false,
"minified": true,
"newFeature": true,
"bigPackageSizeSupport": true,
"minifyJS": true,

View File

@@ -62,16 +62,36 @@ const _sfc_main = {
mask: true
});
try {
const loginUrl = common_config.getApiUrl("/api/sys/auth/login");
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:115", "[Login Page] 开始调用登录接口:", {
url: loginUrl,
method: "POST",
payload
});
const res = await new Promise((resolve, reject) => {
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:122", "[Login Page] 发起 uni.request 调用");
common_vendor.index.request({
url: common_config.getApiUrl("/api/sys/auth/login"),
url: loginUrl,
method: "POST",
header: {
"Content-Type": "application/json"
},
data: payload,
success: resolve,
fail: reject
success: (res2) => {
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:131", "[Login Page] 登录请求成功:", {
statusCode: res2.statusCode,
hasData: !!res2.data,
dataType: typeof res2.data
});
resolve(res2);
},
fail: (err) => {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:139", "[Login Page] 登录请求失败:", {
error: err,
errorMessage: err.errMsg || "未知错误"
});
reject(err);
}
});
});
const body = res.data || {};
@@ -85,34 +105,34 @@ const _sfc_main = {
const loginData = body.data;
if (loginData.token) {
common_vendor.index.setStorageSync("backend-token", loginData.token);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:141", "[Login] token 已保存,后续请求将自动在 header 中携带");
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:162", "[Login] token 已保存,后续请求将自动在 header 中携带");
} else {
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:143", "[Login] 登录响应中未包含 token");
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:164", "[Login] 登录响应中未包含 token");
}
try {
common_vendor.index.setStorageSync("backend-login-response", loginData);
common_vendor.index.setStorageSync("backend-user-id", loginData.userId);
if (loginData.tenantId) {
common_vendor.index.setStorageSync("backend-tenant-id", loginData.tenantId);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:154", "[Login] tenantId 已保存:", loginData.tenantId);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:175", "[Login] tenantId 已保存:", loginData.tenantId);
} else {
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:156", "[Login] 登录响应中未包含 tenantId后续请求可能失败");
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:177", "[Login] 登录响应中未包含 tenantId后续请求可能失败");
}
if (loginData.roleName) {
common_vendor.index.setStorageSync("backend-role-name", loginData.roleName);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:162", "[Login] roleName 已保存:", loginData.roleName);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:183", "[Login] roleName 已保存:", loginData.roleName);
}
if (loginData.scenario) {
common_vendor.index.setStorageSync("backend-scenario", loginData.scenario);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:166", "[Login] scenario 已保存:", loginData.scenario);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:187", "[Login] scenario 已保存:", loginData.scenario);
}
} catch (e) {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:169", "缓存登录信息失败:", e);
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:190", "缓存登录信息失败:", e);
}
try {
common_vendor.index.$emit("tabbar:refresh");
} catch (e) {
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:176", "触发 tabbar 刷新事件失败:", e);
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:197", "触发 tabbar 刷新事件失败:", e);
}
try {
common_store.mutations.setUserInfo({
@@ -121,9 +141,9 @@ const _sfc_main = {
email: loginData.email,
avatar_file: loginData.avatar ? { url: loginData.avatar } : void 0
}, { cover: true });
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:187", "[Login] Store updated successfully, hasLogin:", common_store.store.hasLogin, "userInfo:", common_store.store.userInfo);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:208", "[Login] Store updated successfully, hasLogin:", common_store.store.hasLogin, "userInfo:", common_store.store.userInfo);
} catch (e) {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:189", "更新本地用户信息失败:", e);
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:210", "更新本地用户信息失败:", e);
}
common_vendor.index.showToast({
title: body.message || "登录成功",
@@ -136,25 +156,25 @@ const _sfc_main = {
app.setGlobalRoleInfo();
}
} catch (e) {
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:205", "[Login] Failed to update global role info:", e);
common_vendor.index.__f__("warn", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:226", "[Login] Failed to update global role info:", e);
}
setTimeout(() => {
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:212", "[Login] Preparing to navigate after login, hasLogin:", common_store.store.hasLogin);
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:233", "[Login] Preparing to navigate after login, hasLogin:", common_store.store.hasLogin);
common_vendor.index.switchTab({
url: "/pages/furniture_reception/furniture_reception",
success: () => {
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:216", "[Login] Navigation successful, checking login status after navigation");
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:237", "[Login] Navigation successful, checking login status after navigation");
setTimeout(() => {
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:219", "[Login] Final check - hasLogin:", common_store.store.hasLogin, "backend-token exists:", !!common_vendor.index.getStorageSync("backend-token"));
common_vendor.index.__f__("log", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:240", "[Login] Final check - hasLogin:", common_store.store.hasLogin, "backend-token exists:", !!common_vendor.index.getStorageSync("backend-token"));
}, 500);
},
fail: (err) => {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:223", "[Login] Navigation failed:", err);
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:244", "[Login] Navigation failed:", err);
}
});
}, 500);
} catch (err) {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:236", "调用登录接口失败:", err);
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:257", "调用登录接口失败:", err);
common_vendor.index.showToast({
title: "网络异常,登录失败",
icon: "none",
@@ -169,7 +189,7 @@ const _sfc_main = {
common_vendor.index.navigateTo({
url: this.config.isAdmin ? "/uni_modules/uni-id-pages/pages/register/register-admin" : "/uni_modules/uni-id-pages/pages/register/register",
fail(e) {
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:252", e);
common_vendor.index.__f__("error", "at uni_modules/uni-id-pages/pages/login/login-withpwd.vue:273", e);
}
});
}