HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

使用uniCloud 【服务空间套餐: 开发者版 】 读操作使用量 RU 上限问题

uniCloud

首先,今天测试使用时,打开服务空间 RU 就已经默认使用了 300多RU了,不知道你们定时任务是怎么同步。

接下来,使用uniCloud-admin 后台创建了一个账户 ,点击了10多次查询吧 ,就瞬间 干到500RU了,1RU 不是等于 7.6kb么 不至于吧

继续阅读 »

首先,今天测试使用时,打开服务空间 RU 就已经默认使用了 300多RU了,不知道你们定时任务是怎么同步。

接下来,使用uniCloud-admin 后台创建了一个账户 ,点击了10多次查询吧 ,就瞬间 干到500RU了,1RU 不是等于 7.6kb么 不至于吧

收起阅读 »

【报Bug】云对象用url化时,提示:未能获取当前用户信息:当前用户为匿名身份

云对象

【报Bug】云对象用url化时,提示:未能获取当前用户信息:当前用户为匿名身份

【报Bug】云对象用url化时,提示:未能获取当前用户信息:当前用户为匿名身份

使用TinyPNG, 在HBuilderX编辑器内压缩图片

HBuilderX插件 HBuilderX

TinyPNG 无损压缩

  • 仅支持png jpg webp格式的图片
  • 项目管理器,支持选择一张、多张图片进行压缩
  • 项目管理器,支持压缩目录下所有图片
  • 支持压缩网络地址图片,需要提供图片url
  • 支持压缩编辑器光标选中的内容
  • 支持在HBuilderX 选择本地目录进行压缩

顶部菜单

HBuilderX 顶部菜单【工具 - TinyPNG】,可以查看到TingPNG操作相关的菜单。

项目管理器压缩图片

项目管理器,选中一张或多个png或jpg图片,右键菜单点击【TinyPNG:压缩】

压缩网络地址图片

菜单【工具】【TinyPNG: 压缩】,可以压缩网络地址图片

压缩编辑器光标选中的内容

TinyPNG 插件配置

插件下载成功后,在HBuilderX中,点击菜单【设置】【插件配置】,如下图,填写key等信息

配置快捷键

点击菜单【工具】【自定义快捷键】,输入如下内容, 其中key可自定义。

{  
    "key":"ctrl+alt+c",  
    "command": "extension.tinypngCompress"  
}
继续阅读 »

TinyPNG 无损压缩

  • 仅支持png jpg webp格式的图片
  • 项目管理器,支持选择一张、多张图片进行压缩
  • 项目管理器,支持压缩目录下所有图片
  • 支持压缩网络地址图片,需要提供图片url
  • 支持压缩编辑器光标选中的内容
  • 支持在HBuilderX 选择本地目录进行压缩

顶部菜单

HBuilderX 顶部菜单【工具 - TinyPNG】,可以查看到TingPNG操作相关的菜单。

项目管理器压缩图片

项目管理器,选中一张或多个png或jpg图片,右键菜单点击【TinyPNG:压缩】

压缩网络地址图片

菜单【工具】【TinyPNG: 压缩】,可以压缩网络地址图片

压缩编辑器光标选中的内容

TinyPNG 插件配置

插件下载成功后,在HBuilderX中,点击菜单【设置】【插件配置】,如下图,填写key等信息

配置快捷键

点击菜单【工具】【自定义快捷键】,输入如下内容, 其中key可自定义。

{  
    "key":"ctrl+alt+c",  
    "command": "extension.tinypngCompress"  
}
收起阅读 »

uniapp使用request报错

uni.request
  1. 使用的是域名,本地配置的
  2. 运行到内置浏览器没问题
  3. 使用安卓模拟器(雷电模拟器)报错,各种试错,发现是模拟器无法访问电脑上的服务,准确的说是无法通过本地配置的域名访问。
  4. 解决办法是:本地服务配置个端口,比如8080,模拟器通过ip+端口访问。我的访问地址是:http://192.168.1.12:8080。
继续阅读 »
  1. 使用的是域名,本地配置的
  2. 运行到内置浏览器没问题
  3. 使用安卓模拟器(雷电模拟器)报错,各种试错,发现是模拟器无法访问电脑上的服务,准确的说是无法通过本地配置的域名访问。
  4. 解决办法是:本地服务配置个端口,比如8080,模拟器通过ip+端口访问。我的访问地址是:http://192.168.1.12:8080。
收起阅读 »

uni.chooseLocation 安卓端 无法显示地址列表?

高德地图 安卓 Android

高德官方申请Android服务平台时,提示填写SHA1值,填写之后发现还是不生效?

这里有个巨坑,如果你真的去填写SHA1值,你会发现地址列表还是不会展示,需要将SHA1换成你证书的 MD5 值。

查看证书信息:
keytool -list -v -keystore 你的证书名称.keystore

继续阅读 »

高德官方申请Android服务平台时,提示填写SHA1值,填写之后发现还是不生效?

这里有个巨坑,如果你真的去填写SHA1值,你会发现地址列表还是不会展示,需要将SHA1换成你证书的 MD5 值。

查看证书信息:
keytool -list -v -keystore 你的证书名称.keystore

收起阅读 »

mui的PopPicker和DtPickeri组件在IOS16.2 后选项会偏移的问题

iOS mui

在苹果更新ios16.2后,很多用户反馈 picker选择不到对应的选项,经查找,发现是和执行的一段动画代码有关,可以修改 mui.picker.all.js 把这段css动画的代码去掉

修改前的mui.picker.all.js 代码

if (isIos) {  
    self.list.style.webkitTransformOrigin = "center center " + self.r + "px";  
}

修改后的mui.picker.all.js 代码 根据评论区的提示 又加了判断

if (isIos) {  
    if (mui.os.ios && mui.os.plus && plus.os.version >= "16.2") {  
        return;  
    }  
    var maches = userAgent.match(/iphone os ([\d_]+) /i);  
    if (maches && maches.length >= 2 && maches[1] >= "16_2"){  
        return;  
    }  
    self.list.style.webkitTransformOrigin = "center center " + self.r + "px";  
}

mui.picker.all.js 修改后 使用 uglifyjs 压缩为 mui.picker.min.js 然后在项目中使用可以解决
1.安装 uglifyjs

npm install uglify-js -g

2.压缩修改后的 mui.picker,all.js

uglifyjs mui.picker.all.js -m -c -o mui.picker.min.js 

附件为修改后的 mui.picker.all.js 和 mui.picker.min.js

继续阅读 »

在苹果更新ios16.2后,很多用户反馈 picker选择不到对应的选项,经查找,发现是和执行的一段动画代码有关,可以修改 mui.picker.all.js 把这段css动画的代码去掉

修改前的mui.picker.all.js 代码

if (isIos) {  
    self.list.style.webkitTransformOrigin = "center center " + self.r + "px";  
}

修改后的mui.picker.all.js 代码 根据评论区的提示 又加了判断

if (isIos) {  
    if (mui.os.ios && mui.os.plus && plus.os.version >= "16.2") {  
        return;  
    }  
    var maches = userAgent.match(/iphone os ([\d_]+) /i);  
    if (maches && maches.length >= 2 && maches[1] >= "16_2"){  
        return;  
    }  
    self.list.style.webkitTransformOrigin = "center center " + self.r + "px";  
}

mui.picker.all.js 修改后 使用 uglifyjs 压缩为 mui.picker.min.js 然后在项目中使用可以解决
1.安装 uglifyjs

npm install uglify-js -g

2.压缩修改后的 mui.picker,all.js

uglifyjs mui.picker.all.js -m -c -o mui.picker.min.js 

附件为修改后的 mui.picker.all.js 和 mui.picker.min.js

收起阅读 »

uniapp ios uni.canvasToTempFilePath 生成的图片变成白色 的问题

canvas iOS uniapp

亲测可以,原因是图片宽高问题,目前已经解决。

亲测可以,原因是图片宽高问题,目前已经解决。

uniCloud阿里云云存储响应头调整

uniCloud

由于部分服务空间云存储存在违规内容,阿里云接到整改需求需要对云存储默认域名增加"Content-Dispotion":"Attachment"响应头。后续会支持配置自定义云存储域名,使用自定义云存储域名访问云存储文件时无此响应头,自定义域名上线时间会另行通知。

此调整不影响页面内使用云存储的image、video、pdf等文件的内容,使用标签加载文件、使用request或downloadFile下载文件均不受影响。仅影响浏览器直接打开云存储文件链接,此时不会直接在页面展示而是会触发文件下载。

可以在浏览器打开如下两个链接体验差异

此调整自2023年3月21日起对新创建的服务空间生效,云存储自定义域名上线后会对所有存量服务空间生效。

继续阅读 »

由于部分服务空间云存储存在违规内容,阿里云接到整改需求需要对云存储默认域名增加"Content-Dispotion":"Attachment"响应头。后续会支持配置自定义云存储域名,使用自定义云存储域名访问云存储文件时无此响应头,自定义域名上线时间会另行通知。

此调整不影响页面内使用云存储的image、video、pdf等文件的内容,使用标签加载文件、使用request或downloadFile下载文件均不受影响。仅影响浏览器直接打开云存储文件链接,此时不会直接在页面展示而是会触发文件下载。

可以在浏览器打开如下两个链接体验差异

此调整自2023年3月21日起对新创建的服务空间生效,云存储自定义域名上线后会对所有存量服务空间生效。

收起阅读 »

Uniapp 5+app 安卓端导入excel数据

安卓

导入excel数据为json数据

/**  
 * Read/Write data to a file using Plus.io API  
 * @param {string} filename Name of the file  
 * @param {string} data Data to be written (only applicable for write operation)  
 * @param {string} type Operation type (1: read, 2: write)  
 * @returns {Promise} Promise that resolves with file data (only applicable for read operation) or empty string (for write operation)  
 */  
function fileOperation(filename, data, type) {  
    return new Promise((resolve, reject) => {  
        plus.io.requestFileSystem(  
            plus.io.PUBLIC_DOCUMENTS,  
            (fs) => {  
                fs.root.getFile(  
                    filename, {  
                        create: type === '2'  
                    },  
                    (fileEntry) => {  
                        if (type === '1') {  
                            fileEntry.file(  
                                (file) => {  
                                    const reader = new plus.io.FileReader()  
                                    reader.onloadend = (evt) => {  
                                        resolve(evt.target.result)  
                                    }  
                                    reader.readAsText(file)  
                                },  
                                (error) => reject(error)  
                            )  
                        } else {  
                            fileEntry.createWriter(  
                                (writer) => {  
                                    writer.onwrite = () => {  
                                        resolve('')  
                                    }  
                                    writer.write(data)  
                                },  
                                (error) => reject(error)  
                            )  
                        }  
                    },  
                    (error) => reject(error)  
                )  
            },  
            (error) => reject(error)  
        )  
    })  
}  

                        importData() {  
                            let resArr = [];  

                            fileOperation('data.xlsx', '', '1').then(data => {  
                                console.log(data);  
                                tab = data.substring(data.indexOf('<table>') + 7, data.indexOf(  
                                    '</table></body>'))  
                                tab = tab.replaceAll(  
                                    '<tr><td>地址</td><td>项目名称</td><td>其他</td><td>费用</td><td>电话号码                                         </td><td>录入时间</td><td>编号</td></tr>',  
                                    '')  
                                console.log(tab)  
                                let doc = document.createElement('table')  
                                doc.innerHTML = tab  
                                console.log(doc);  
                                // 获取所有tr  
                                let trArr = doc.querySelectorAll('tr');  

                                for (let i = 0; i < trArr.length; i++) {  
                                    let tdArr = trArr[i].querySelectorAll('td');  

                                    resArr.push({  
                                        "address": tdArr[0].innerHTML,  
                                        "project": tdArr[1].innerHTML,  
                                        "other": tdArr[2].innerHTML,  
                                        "money": tdArr[3].innerHTML,  
                                        "phone": tdArr[4].innerHTML,  
                                        "created_at": tdArr[5].innerHTML,  
                                        "id": tdArr[6].innerHTML,  
                                        "index": i  
                                    });  
                                }  

                                console.log(JSON.stringify(resArr));  

                            }).catch(error => console.log(error))  
                        },
继续阅读 »

导入excel数据为json数据

/**  
 * Read/Write data to a file using Plus.io API  
 * @param {string} filename Name of the file  
 * @param {string} data Data to be written (only applicable for write operation)  
 * @param {string} type Operation type (1: read, 2: write)  
 * @returns {Promise} Promise that resolves with file data (only applicable for read operation) or empty string (for write operation)  
 */  
function fileOperation(filename, data, type) {  
    return new Promise((resolve, reject) => {  
        plus.io.requestFileSystem(  
            plus.io.PUBLIC_DOCUMENTS,  
            (fs) => {  
                fs.root.getFile(  
                    filename, {  
                        create: type === '2'  
                    },  
                    (fileEntry) => {  
                        if (type === '1') {  
                            fileEntry.file(  
                                (file) => {  
                                    const reader = new plus.io.FileReader()  
                                    reader.onloadend = (evt) => {  
                                        resolve(evt.target.result)  
                                    }  
                                    reader.readAsText(file)  
                                },  
                                (error) => reject(error)  
                            )  
                        } else {  
                            fileEntry.createWriter(  
                                (writer) => {  
                                    writer.onwrite = () => {  
                                        resolve('')  
                                    }  
                                    writer.write(data)  
                                },  
                                (error) => reject(error)  
                            )  
                        }  
                    },  
                    (error) => reject(error)  
                )  
            },  
            (error) => reject(error)  
        )  
    })  
}  

                        importData() {  
                            let resArr = [];  

                            fileOperation('data.xlsx', '', '1').then(data => {  
                                console.log(data);  
                                tab = data.substring(data.indexOf('<table>') + 7, data.indexOf(  
                                    '</table></body>'))  
                                tab = tab.replaceAll(  
                                    '<tr><td>地址</td><td>项目名称</td><td>其他</td><td>费用</td><td>电话号码                                         </td><td>录入时间</td><td>编号</td></tr>',  
                                    '')  
                                console.log(tab)  
                                let doc = document.createElement('table')  
                                doc.innerHTML = tab  
                                console.log(doc);  
                                // 获取所有tr  
                                let trArr = doc.querySelectorAll('tr');  

                                for (let i = 0; i < trArr.length; i++) {  
                                    let tdArr = trArr[i].querySelectorAll('td');  

                                    resArr.push({  
                                        "address": tdArr[0].innerHTML,  
                                        "project": tdArr[1].innerHTML,  
                                        "other": tdArr[2].innerHTML,  
                                        "money": tdArr[3].innerHTML,  
                                        "phone": tdArr[4].innerHTML,  
                                        "created_at": tdArr[5].innerHTML,  
                                        "id": tdArr[6].innerHTML,  
                                        "index": i  
                                    });  
                                }  

                                console.log(JSON.stringify(resArr));  

                            }).catch(error => console.log(error))  
                        },
收起阅读 »

10年工程师专业承接各种项目

外包接单

承接项目描述:我们专注于网站建设、b/s、c/s系统架构、桌面程序开发、网站、游戏、支付、app接口开发、微信公众号、小程序、软件定制、服务器部署和运维

个人技能描述:html,css,php,thinkphp,laravel,workerman,js,vue,react,uniapp,rn,electron,cocos

联系电话:15290581001

继续阅读 »

承接项目描述:我们专注于网站建设、b/s、c/s系统架构、桌面程序开发、网站、游戏、支付、app接口开发、微信公众号、小程序、软件定制、服务器部署和运维

个人技能描述:html,css,php,thinkphp,laravel,workerman,js,vue,react,uniapp,rn,electron,cocos

联系电话:15290581001

收起阅读 »