import request from "@/utils/request.js"; export default { audioStorageKey: "audioStorageKey", pcmStorageKey: "pcmStorageKey", guid: function generateUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { let r = Math.random() * 16 | 0; let v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }, alert: function(title, content, callback) { if (!title) { title = '提示' } if (!content) { content = title; } uni.showModal({ title: title, content: content, success: function(res) { if (res.confirm) { console.log('用户点击确定'); } else if (res.cancel) { console.log('用户点击取消'); } if (callback) { callback(res); } } }); }, showLoading: function(title, mask) { uni.showLoading({ title: title, mask: mask, }) }, hideLoading: function() { uni.hideLoading(); }, showToast: function(title, mask, duration, callback) { if (!duration) { duration = 1500; } if (mask == undefined) { mask = false; } uni.showToast({ title: title, mask: mask, duration: duration, callback: callback, icon: 'none' }) }, GetData: function(url, data, method, contentType, succ, err, complete) { var these = this; if (!url) { console.error("url为空"); return; } if (url.toLowerCase().indexOf('http://') == -1 || url.toLowerCase().indexOf('https://') == -1) { if (url.indexOf('/') == 0) { url = url.substr(1, url.length - 1); } let ServerPath = these.DevApi; if (these.Version === 'Dev') { ServerPath = these.DevApi; } else if (these.Version === 'Uat') { ServerPath = these.UatApi; } else if (these.Version === 'Relese') { ServerPath = these.ReleseApi; } else { these.DevApi } url = ServerPath + url; } var these = this; if (!method) { method = 'POST'; } method = method.toUpperCase(); if (!contentType) { contentType = 'application/json;charset=UTF-8'; } these.checkLAN( function() { these.showLoading('请稍候..', true); setTimeout(function() { uni.request({ url: url, data: data, header: { "Content-Type": contentType }, method: method, timeout: 60000, dataType: 'json', success: function(json) { if (succ) { succ(json); } }, fail: function(ex) { if (err) { err(ex); } }, complete: function() { if (complete) { complete(); } } }); }, 0); } , function() { these.showToast('无网络连接'); }); }, checkLAN: function(succ, error) { uni.getNetworkType({ success: (res) => { let networkType = res.networkType; // 判断网络是否连接 if (networkType === 'none') { console.error('无网络连接') if (error) { error(); } } else { if (succ) { succ(); } } }, fail: (err) => { console.error('获取网络状态失败:', err); if (error) { error(); } } }); }, DateFormat: function(date, format) { if (!date) { date = new Date(); } if (!format) { format = 'yyyy-MM-dd HH:mm:ss'; } // 处理参数默认值 if (typeof date === 'string' || typeof date === 'number') { date = new Date(date); } date = date instanceof Date ? date : new Date(); format = format || 'yyyy-MM-dd'; // 检查日期是否有效 if (isNaN(date.getTime())) { return 'Invalid Date'; } // 定义格式化映射 let formatMap = { 'yyyy': date.getFullYear(), 'MM': String(date.getMonth() + 1).padStart(2, '0'), 'dd': String(date.getDate()).padStart(2, '0'), 'HH': String(date.getHours()).padStart(2, '0'), 'mm': String(date.getMinutes()).padStart(2, '0'), 'ss': String(date.getSeconds()).padStart(2, '0'), 'SSS': String(date.getMilliseconds()).padStart(3, '0'), 'M': date.getMonth() + 1, 'd': date.getDate(), 'H': date.getHours(), 'm': date.getMinutes(), 's': date.getSeconds(), 'S': date.getMilliseconds() }; // 替换格式字符串中的占位符 return format.replace(/(yyyy|MM|dd|HH|mm|ss|SSS|M|d|H|m|s|S)/g, (match) => { return formatMap[match]; }); }, getdeviceShareId(id) { //获取设备分享信息 return request({ url: `/app/deviceShare/${id}`, method: 'get', }) }, getPermissions(type) { if (!type) { type = '6170'; } let array = [{ value: "1", label: "灯光模式", checked: false, type: ['6170', '670'] }, { value: "2", label: "激光模式", checked: false, type: ['6170'] }, { value: "3", label: "开机画面", checked: false, type: ['210', '6170', '670'] }, { value: "4", label: "人员信息登记", checked: false, type: ['210', '6170', '670'] }, { value: "5", label: "发送信息", checked: false, type: ['210', '6170', '670'] }, { value: "6", label: "产品信息", checked: false, type: ['210', '6170', '670'] }, { value: "41", label: "静电探测", checked: false, type: ['670'] }, { value: "42", label: "SOS", checked: false, type: ['670'] }, { value: "43", label: "联机设备", checked: false, type: ['210'] }, { value: "44", label: "报警声音", checked: false, type: ['210'] }, { value: "45", label: "自动报警", checked: false, type: ['210'] }, { value: "46", label: "手动报警", checked: false, type: ['210'] }, { value: "47", label: "报警时长", checked: false, type: ['210'] }, ] let arr = []; for (let i = 0; i < array.length; i++) { let item = array[i]; if (!item) { continue; } if (!item.type) { continue; } let typeContais = item.type.find(v => { return v.includes(type); }); if (typeContais) { let json = {}; Object.assign(json, item); arr.push(json); } } return arr; }, //10进制转换为16进制字符串 decimalToHexLittleEndian(num, byteCount, revers) { // 处理负数(如果需要支持负数,可先转为补码) if (num < 0) { num = 0xFFFFFFFF + num + 1; } // 转为16进制,去除前缀0x,转为大写 let hex = num.toString(16).toUpperCase(); // 计算需要补充的0的数量,确保每个字节占2位 let padLength = (byteCount || Math.ceil(hex.length / 2) * 2) - hex.length; if (padLength > 0) { hex = '0'.repeat(padLength) + hex; } // 分割为字节数组(每2位一个字节) let bytes = []; for (let i = 0; i < hex.length; i += 2) { bytes.push(hex.substr(i, 2)); } // 是否反转字节顺序(低位在前)并拼接 if (revers) { return bytes.reverse().join(''); } return bytes.join(''); }, //将相对路径的文件移动到_downloads文件夹中 moveFileToDownloads(tempFilePath) { return new Promise((resolve, reject) => { if(!tempFilePath){ console.log("无文件需要移动"); resolve(tempFilePath); return; } //本来就在此目录时直接返回 if (tempFilePath.indexOf("_downloads") === 0) { console.log("文件已存在,无需移动"); resolve(tempFilePath); return; } //不是app直接返回 if (!uni.getSystemInfoSync().uniPlatform.includes('app')) { resolve('仅支持 App 端操作'); return; } // console.log("tempFilePath=", tempFilePath); var srcPath = plus.io.convertLocalFileSystemURL(tempFilePath); // console.log("srcPath=", srcPath); plus.io.resolveLocalFileSystemURL(srcPath, (fileEntry) => { plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, (fs) => { // console.log("fs=",fs.name); // console.log("fs=",fs.root.fullPath); fileEntry.moveTo(fs.root, fileEntry.name, (entry) => { console.log("entry=", entry); let relativePath = `_downloads/${entry.name}`; resolve(relativePath); }, (ex) => { reject(ex) }); }, (e) => { console.error("请求download目录失败 " + e); reject(e); }); }, (error) => { console.log('文件不存在/路径错误:', error.message); // 核心问题! } ); }); }, }