/** * 处理扫描的二维码链接 * @param {string} qrUrl - 扫描到的二维码链接 * @returns {Object} 解析后的二维码信息 */ function processQRCode(qrUrl) { // 解析URL参数 const parseUrlParams = (url) => { try { const query = url.split('?')[1]; if (!query) return {}; return query.split('&').reduce((params, param) => { const [key, value] = param.split('='); if (key && value !== undefined) { params[key] = decodeURIComponent(value); } return params; }, {}); } catch (e) { console.error('解析二维码链接失败:', e); return {}; } }; // 更新扫码次数(加1) const updateScanCount = (params) => { if (params.scanCount !== undefined) { params.scanCount = parseInt(params.scanCount || '0', 10) + 1; } return params; }; // 确定来源类型和ID const determineSource = (params) => { if (params.employeeId) { return { type: 'employee', id: params.employeeId }; } else if (params.ownerId) { return { type: 'owner', id: params.ownerId }; } else if (params.partnerId) { return { type: 'partner', id: params.partnerId }; } return { type: 'unknown', id: null }; }; // 主处理逻辑 const params = parseUrlParams(qrUrl); if (!params.storeId) { throw new Error('无效的二维码:缺少店铺ID'); } // 更新扫码次数 const updatedParams = updateScanCount(params); // 确定来源 const source = determineSource(updatedParams); return { storeId: updatedParams.storeId, sourceType: source.type, sourceId: source.id, scanCount: updatedParams.scanCount || 1, rawParams: updatedParams }; } //加法 function addNum(arg1, arg2) { arg1 = arg1 ? arg1 : 0 arg2 = arg2 ? arg2 : 0 let r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } c = Math.abs(r1 - r2); m = Math.pow(10, Math.max(r1, r2)); if (c > 0) { let cm = Math.pow(10, c); if (r1 > r2) { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")) * cm; } else { arg1 = Number(arg1.toString().replace(".", "")) * cm; arg2 = Number(arg2.toString().replace(".", "")); } } else { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")); } return (arg1 + arg2) / m; } //减法 function subtraction(num1, num2) { var r1, r2, m, floatNum; try { r1 = num1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = num2.toString().split(".")[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); return (num1 * m - num2 * m) / m; } //相乘 function multiply(arg1, arg2) { arg1 = arg1 ? arg1 : 0 arg2 = arg2 ? arg2 : 0 let r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } c = Math.abs(r1 - r2); m = Math.pow(10, Math.max(r1, r2) * 2); if (c > 0) { let cm = Math.pow(10, c); if (r1 > r2) { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")) * cm; } else { arg1 = Number(arg1.toString().replace(".", "")) * cm; arg2 = Number(arg2.toString().replace(".", "")); } } else { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")); } return (arg1 * arg2) / m; } module.exports = { processQRCode, addNum, subtraction, multiply };