HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

chooseAndUploadFile:fail api scope is not declared in the privacy agreement

微信开发者工具

uni-app 使用 uni-file-picker(没有上传空间)上传图片,在微信开发者工具打不开文件资源,谷歌浏览器可以。是因为微信开发者工具调试基础库,升级了2.33.0以上就会弹不出文件资源。把微信开发者工具基础库版本改成2.33.0以下
https://blog.csdn.net/weixin_53579656/article/details/134084927?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134084927%22%2C%22source%22%3A%22weixin_53579656%22%7D

继续阅读 »

uni-app 使用 uni-file-picker(没有上传空间)上传图片,在微信开发者工具打不开文件资源,谷歌浏览器可以。是因为微信开发者工具调试基础库,升级了2.33.0以上就会弹不出文件资源。把微信开发者工具基础库版本改成2.33.0以下
https://blog.csdn.net/weixin_53579656/article/details/134084927?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134084927%22%2C%22source%22%3A%22weixin_53579656%22%7D

收起阅读 »

承接uni-app项目外包,网站、小程序、APP都可以接

uniapp 外包

个人开发者接uni-app外包项目开发。

可做pc网站、h5、公众号、微信小程序、app

全栈技术,前后端通吃,不使用第三方UI框架等,不使用模版,拒绝垃圾源码,纯手撸

有多个项目案例可看 多个上线作品

有需求的老板可以联系

联系QQ:6864952 vx:wu1020yt

继续阅读 »

个人开发者接uni-app外包项目开发。

可做pc网站、h5、公众号、微信小程序、app

全栈技术,前后端通吃,不使用第三方UI框架等,不使用模版,拒绝垃圾源码,纯手撸

有多个项目案例可看 多个上线作品

有需求的老板可以联系

联系QQ:6864952 vx:wu1020yt

收起阅读 »

【示例使用步骤】Holo个人页

clientDB uni_app uniCloud


操作视频:私信qa@hlszh.com

一、新建uniCloud项目,选择腾讯云


二、从插件市场导入至HbuilderX

三、在HBuilderX点击腾讯云导入

四、选择pages,注册

五、关联云服务空间


六、上传DB Schema文件至云服务空间

七、运行查看效果

  1. 选择uni_modules/holo-ownpage/pages/holo-ownpage文件;
  2. 选择云端云函数;
  3. 运行。

页面模板地址:Holo个人页

继续阅读 »


操作视频:私信qa@hlszh.com

一、新建uniCloud项目,选择腾讯云


二、从插件市场导入至HbuilderX

三、在HBuilderX点击腾讯云导入

四、选择pages,注册

五、关联云服务空间


六、上传DB Schema文件至云服务空间

七、运行查看效果

  1. 选择uni_modules/holo-ownpage/pages/holo-ownpage文件;
  2. 选择云端云函数;
  3. 运行。

页面模板地址:Holo个人页

收起阅读 »

Holo个人页|云端一体页面模板正式上线 !前30名免费购买普通授权

uni_app clientDB uniCloud uniapp模板

图片介绍

Holo个人页 的用途是帮助开发者快速实现并交付个人页功能,个人页信息展示与宣传:包括用户的基本信息,如姓名、头像、联系方式,帮助其他用户了解用户的身份。

Hi~

我们是Holo开发团队,希望我们的每一个作品,都能让人初遇就有种直觉上的美感体验,众所周知,一个软件项目从编码到交付,倘若没有轮子,往往会历经千辛万苦。

Holo的初心是持续为开发者提供轮子,但不积硅步无以至千里,为此我们于23年8月14日正式推出首款前端页面模板:个人页,前30名用户免费购买普通授权版。

相信对于很多开发者来说,个人页的开发不是很难只是很烦,毕竟众口难调,而从可用到好看易用,我们做出了如下努力:

  1. 从头设计:大量品鉴学习国内外个人页设计稿,从设计稿设计开始,完成了页面的代码实现,通过简洁的布局和精心选择的配色方案,你的个人页将呈现出一种独特的美感,让你的访客忍不住驻足欣赏。
  2. 数据绑定:提供可用的前端代码,开发者简单配置数据字段,即可开箱使用;
  3. 屏幕自适应:对移动端设备屏幕适配做了处理,节省开发者的交付时间;

实不相瞒,我们当下并不了解需求情况如何,也不知道东西做出来有没有人用,更不知道大家都需要哪些轮子,所以很希望通过以下问卷听听你的需要,各位如果希望进一步交流,也欢迎留言或联系我们qa@hlszh.com,我们下一步的研发计划,会优先考虑各位的需求。❤️❤️

问卷地址:页面需求调研

继续阅读 »

图片介绍

Holo个人页 的用途是帮助开发者快速实现并交付个人页功能,个人页信息展示与宣传:包括用户的基本信息,如姓名、头像、联系方式,帮助其他用户了解用户的身份。

Hi~

我们是Holo开发团队,希望我们的每一个作品,都能让人初遇就有种直觉上的美感体验,众所周知,一个软件项目从编码到交付,倘若没有轮子,往往会历经千辛万苦。

Holo的初心是持续为开发者提供轮子,但不积硅步无以至千里,为此我们于23年8月14日正式推出首款前端页面模板:个人页,前30名用户免费购买普通授权版。

相信对于很多开发者来说,个人页的开发不是很难只是很烦,毕竟众口难调,而从可用到好看易用,我们做出了如下努力:

  1. 从头设计:大量品鉴学习国内外个人页设计稿,从设计稿设计开始,完成了页面的代码实现,通过简洁的布局和精心选择的配色方案,你的个人页将呈现出一种独特的美感,让你的访客忍不住驻足欣赏。
  2. 数据绑定:提供可用的前端代码,开发者简单配置数据字段,即可开箱使用;
  3. 屏幕自适应:对移动端设备屏幕适配做了处理,节省开发者的交付时间;

实不相瞒,我们当下并不了解需求情况如何,也不知道东西做出来有没有人用,更不知道大家都需要哪些轮子,所以很希望通过以下问卷听听你的需要,各位如果希望进一步交流,也欢迎留言或联系我们qa@hlszh.com,我们下一步的研发计划,会优先考虑各位的需求。❤️❤️

问卷地址:页面需求调研

收起阅读 »

全栈程序员在线接单,沉淀多年经验,为您解决疑难问题!

外包接单 外包

8年全栈开发经验,精通Java、PHP、Go、Vue、React、UniApp等技术栈,熟悉前后端分离开发、微服务架构、容器化部署等技术。
拥有丰富的开发经验,包括电商平台、在线教育平台、社交媒体平台等。
能够独立完成从项目的分析、设计、开发、测试、部署到维护与优化的全过程,并能够根据客户需求进行定制化开发。
注重代码可维护性、可扩展性、性能优化等方面的工作。
如果您正在寻找一位高效、专业的开发者来完成您的项目,我非常愿意为您提供优质的服务,共同推动项目顺利进行。
如果您对我的技能与工作经验感兴趣,请通过微信联系我,我们可以进一步探讨您的具体项目需求,并且开展合作。
V:TombaughWechat

继续阅读 »

8年全栈开发经验,精通Java、PHP、Go、Vue、React、UniApp等技术栈,熟悉前后端分离开发、微服务架构、容器化部署等技术。
拥有丰富的开发经验,包括电商平台、在线教育平台、社交媒体平台等。
能够独立完成从项目的分析、设计、开发、测试、部署到维护与优化的全过程,并能够根据客户需求进行定制化开发。
注重代码可维护性、可扩展性、性能优化等方面的工作。
如果您正在寻找一位高效、专业的开发者来完成您的项目,我非常愿意为您提供优质的服务,共同推动项目顺利进行。
如果您对我的技能与工作经验感兴趣,请通过微信联系我,我们可以进一步探讨您的具体项目需求,并且开展合作。
V:TombaughWechat

收起阅读 »

uniapp 如何监听IPHONE蓝牙的 开启、关闭、暂停?

uniapp原生插件

目前已经实现可以监听到蓝牙的开启 和关闭状态,但是IPHONE的蓝牙还有个 暂停的状态。

APP就无法监听到了~

目前已经实现可以监听到蓝牙的开启 和关闭状态,但是IPHONE的蓝牙还有个 暂停的状态。

APP就无法监听到了~

app 获取用户截图

uniapp
let pages = getCurrentPages();    
            let page = pages[pages.length - 1];    
            let ws = page.$getAppWebview();    
            let bitmap = new plus.nativeObj.Bitmap('drawScreen');    
            // 将webview内容绘制到Bitmap对象中    
            ws.draw(bitmap, () => {    
              // 保存图片到本地    
              bitmap.save("_doc/drawScreen.jpg", {    
                overwrite: true    
              }, res => {    
                console.log(res.target); // 图片地址  
                  uni.showModal({  
                    title:'11111' + res.target  
                  })  
                  this.image = res.target  
                bitmap.clear(); // 清除Bitmap对象    
              }, error => {    
                  uni.showModal({  
                    title:JSON.stringify(error)  
                  })  
                console.log(JSON.stringify(error)); // 保存失败信息    
                bitmap.clear(); // 清除Bitmap对象    
              });    
              // bitmap.clear(); // 清除Bitmap对象    
            }, error => {    
              console.log(JSON.stringify(error)); // 绘制失败    
            }, {    
              check: true, // 设置为检测白屏    
            });  
            return 
继续阅读 »
let pages = getCurrentPages();    
            let page = pages[pages.length - 1];    
            let ws = page.$getAppWebview();    
            let bitmap = new plus.nativeObj.Bitmap('drawScreen');    
            // 将webview内容绘制到Bitmap对象中    
            ws.draw(bitmap, () => {    
              // 保存图片到本地    
              bitmap.save("_doc/drawScreen.jpg", {    
                overwrite: true    
              }, res => {    
                console.log(res.target); // 图片地址  
                  uni.showModal({  
                    title:'11111' + res.target  
                  })  
                  this.image = res.target  
                bitmap.clear(); // 清除Bitmap对象    
              }, error => {    
                  uni.showModal({  
                    title:JSON.stringify(error)  
                  })  
                console.log(JSON.stringify(error)); // 保存失败信息    
                bitmap.clear(); // 清除Bitmap对象    
              });    
              // bitmap.clear(); // 清除Bitmap对象    
            }, error => {    
              console.log(JSON.stringify(error)); // 绘制失败    
            }, {    
              check: true, // 设置为检测白屏    
            });  
            return 
收起阅读 »

关于targetSdkVersion设置为34后安卓12高版本SDK无法识别NFC的问题解决

NFC

按正常的Native.js 方法来调用NFC 在安卓低版本的SDK 是没有问题的,单是当我们将 targetSdkVersion 设置为34 及安卓的API 级别调高后 在代码中

pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);  

这个方法就回出现问题,正常的是有返回的值的,但是升级为高版本SDK 就返回的是null。
标准基座的话是没有问题,但是自定义和正式打包的话就会返回null。因此我们需要将这个方法进行改造

改造为:

var pendingIntent = PendingIntent.getActivity(ESUtils.NFC.mainNFC, 0, _intent, PendingIntent.FLAG_MUTABLE);

将最后一个参数 0 改为 PendingIntent.FLAG_MUTABLE固定值 就可以了

社区有很多的 方法 包括
https://ask.dcloud.net.cn/article/35690
https://ask.dcloud.net.cn/article/35046
https://ask.dcloud.net.cn/question/12942
都可以使用 只需要将 对应的上面的 替换就可以了。
业务逻辑 自己就可以搞定

继续阅读 »

按正常的Native.js 方法来调用NFC 在安卓低版本的SDK 是没有问题的,单是当我们将 targetSdkVersion 设置为34 及安卓的API 级别调高后 在代码中

pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);  

这个方法就回出现问题,正常的是有返回的值的,但是升级为高版本SDK 就返回的是null。
标准基座的话是没有问题,但是自定义和正式打包的话就会返回null。因此我们需要将这个方法进行改造

改造为:

var pendingIntent = PendingIntent.getActivity(ESUtils.NFC.mainNFC, 0, _intent, PendingIntent.FLAG_MUTABLE);

将最后一个参数 0 改为 PendingIntent.FLAG_MUTABLE固定值 就可以了

社区有很多的 方法 包括
https://ask.dcloud.net.cn/article/35690
https://ask.dcloud.net.cn/article/35046
https://ask.dcloud.net.cn/question/12942
都可以使用 只需要将 对应的上面的 替换就可以了。
业务逻辑 自己就可以搞定

收起阅读 »

HBuilderX 查看页面历史记录

今天不小心把代码回撤了,导致今天写的组件和页面代码全都回到了昨天提交git的时间段。这一刻我是崩溃的,还有编辑器能查看页面保存的历史记录,稍稍松了口气,以下是查询历史记录的步骤

选中一个项目文件,点击右键会出现本地历史记录的选项 随后出现历史记录 自己慢慢找到最新的代码文件

如果你和我一样,今天新建的组件文件也被回撤了,那我觉得这泰酷拉!

先找一个之前页面打开历史记录,然后打开资源管理器

在这个目录下返回上一级,就能找到所有页面的页面历史记录了,自己回想一下什么时间段修改了之前的代码

继续阅读 »

今天不小心把代码回撤了,导致今天写的组件和页面代码全都回到了昨天提交git的时间段。这一刻我是崩溃的,还有编辑器能查看页面保存的历史记录,稍稍松了口气,以下是查询历史记录的步骤

选中一个项目文件,点击右键会出现本地历史记录的选项 随后出现历史记录 自己慢慢找到最新的代码文件

如果你和我一样,今天新建的组件文件也被回撤了,那我觉得这泰酷拉!

先找一个之前页面打开历史记录,然后打开资源管理器

在这个目录下返回上一级,就能找到所有页面的页面历史记录了,自己回想一下什么时间段修改了之前的代码

收起阅读 »

APP,小程序,快应用等都需要备案了

APP,小程序,快应用等都需要备案了,有没有备案过的 分享一下

工信部文件

工业和信息化部关于开展移动互联网应用程序备案工作的通知
https://wap.miit.gov.cn/zwgk/zcwj/wjfb/tz/art/2023/art_920db564162e4312916a01bed6540ad8.html

《工业和信息化部关于开展移动互联网应用程序备案工作的通知》解读
https://wap.miit.gov.cn/zwgk/zcjd/art/2023/art_39b4f1acc36745b98478e0ec3e07128d.html

一图读懂APP备案
https://wap.miit.gov.cn/zwgk/zcjd/art/2023/art_9f3a1277fdcb42d68e1eacd37787ae04.html

继续阅读 »

APP,小程序,快应用等都需要备案了,有没有备案过的 分享一下

工信部文件

工业和信息化部关于开展移动互联网应用程序备案工作的通知
https://wap.miit.gov.cn/zwgk/zcwj/wjfb/tz/art/2023/art_920db564162e4312916a01bed6540ad8.html

《工业和信息化部关于开展移动互联网应用程序备案工作的通知》解读
https://wap.miit.gov.cn/zwgk/zcjd/art/2023/art_39b4f1acc36745b98478e0ec3e07128d.html

一图读懂APP备案
https://wap.miit.gov.cn/zwgk/zcjd/art/2023/art_9f3a1277fdcb42d68e1eacd37787ae04.html

收起阅读 »

vue3+ts class-style

因为我本身是java程序员,习惯了ts class-style模式的语法糖。
vue2的时候用的是vue-property-decorator,但是在vue3下
使用vue-property-decorator会报错,而且这个插件已不再维护。
google了半天,找到另外一个开源的插件vue-facing-decorator。

目前已经整合到vue3 uniapp 中,以下是代码示例,习惯
class-style语法糖的同学,可以拿去用拉。

对于uniapp 生命周期函数,可以通过挂载的方式实现。


import { MyVue } from "@/common/MyVue";  
import LoggerUtil from "@/utils/LoggerUtil";  
import { Component } from "vue-facing-decorator";  
@Component  
export default class Home extends MyVue {  
    title = "hello";  
    onLoad() {  
        uni.setNavigationBarTitle({ title: "首页" });  
        LoggerUtil.info("App onLoad111111");  
    }  
    onShow() {  
        LoggerUtil.info("App Show 1");  
        this.title += ",vue3"  
    }  
    onHide() {  
        LoggerUtil.info("App Hide");  
    }  
    onChange() {  
        LoggerUtil.info("App Change");  
        this.title += ",vue3"  
    }  

}  

vx: BusyMr-QHD

继续阅读 »

因为我本身是java程序员,习惯了ts class-style模式的语法糖。
vue2的时候用的是vue-property-decorator,但是在vue3下
使用vue-property-decorator会报错,而且这个插件已不再维护。
google了半天,找到另外一个开源的插件vue-facing-decorator。

目前已经整合到vue3 uniapp 中,以下是代码示例,习惯
class-style语法糖的同学,可以拿去用拉。

对于uniapp 生命周期函数,可以通过挂载的方式实现。


import { MyVue } from "@/common/MyVue";  
import LoggerUtil from "@/utils/LoggerUtil";  
import { Component } from "vue-facing-decorator";  
@Component  
export default class Home extends MyVue {  
    title = "hello";  
    onLoad() {  
        uni.setNavigationBarTitle({ title: "首页" });  
        LoggerUtil.info("App onLoad111111");  
    }  
    onShow() {  
        LoggerUtil.info("App Show 1");  
        this.title += ",vue3"  
    }  
    onHide() {  
        LoggerUtil.info("App Hide");  
    }  
    onChange() {  
        LoggerUtil.info("App Change");  
        this.title += ",vue3"  
    }  

}  

vx: BusyMr-QHD

收起阅读 »

uni-starter设置邀请码裂变功能修改

本人新手,自己摸索出来的,不正之处还请路过的前辈指点。

网上找资料时总能刷到前辈们关于各种坑的文章,作为新手,因为没有基础(没学过编程,仅靠看手册写了两个tp5网站,易语言、E4A、aardio都学过,没早点遇到unicloud浪费了很多时间!),确实遇到很多问题,文档上仅几句话带过,其他地方又找不到前辈们留下的经验,所以解决完这个问题,想着发第一个贴子,留给新手们参考一下。

autoSetInviteCode: true
生成海报时带上参数

http://localhost:8080/pages/ucenter/t1/t1?invite=12366  
//此处invite应该获取分享者的 my_invite_code

用户打开后,将参数缓存

onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数  
                console.log(option.invite); //打印出上个页面传递的参数。  
                uni.setStorageSync('share_id',option.invite)                  
            },

修改common/appInit.js文件拦截逻辑,给inviteCode传值即可

//拦截云对象请求  
    uniCloud.interceptObject({  
        async invoke({  
            objectName, // 云对象名称  
            methodName, // 云对象的方法名称  
            params // 参数列表  
        }) {  
            if(objectName == "uni-id-co" && (methodName.includes('loginBy') ||  ['login','registerUser'].includes(methodName) )){  
                console.log('执行登录相关云对象');  
                //获取缓存中的share_id传递给inviteCode,后续系统会自动关联裂变信息  
                params[0].inviteCode = await new Promise((callBack) => {  
                    var share_id = uni.getStorageSync('share_id');    
                    console.log('获取share_id->',share_id);  
                    callBack(share_id)                      
                })  
                // console.log(params);  
            }  
            // console.log(params);  
        }  
    })

项目中原本用的uni.setClipboardData,在H5中好像工作不正常,改为uni.getStorageSync正常,小程序还没测试

搞错了,uni.setClipboardData在H5中也正常

继续阅读 »

本人新手,自己摸索出来的,不正之处还请路过的前辈指点。

网上找资料时总能刷到前辈们关于各种坑的文章,作为新手,因为没有基础(没学过编程,仅靠看手册写了两个tp5网站,易语言、E4A、aardio都学过,没早点遇到unicloud浪费了很多时间!),确实遇到很多问题,文档上仅几句话带过,其他地方又找不到前辈们留下的经验,所以解决完这个问题,想着发第一个贴子,留给新手们参考一下。

autoSetInviteCode: true
生成海报时带上参数

http://localhost:8080/pages/ucenter/t1/t1?invite=12366  
//此处invite应该获取分享者的 my_invite_code

用户打开后,将参数缓存

onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数  
                console.log(option.invite); //打印出上个页面传递的参数。  
                uni.setStorageSync('share_id',option.invite)                  
            },

修改common/appInit.js文件拦截逻辑,给inviteCode传值即可

//拦截云对象请求  
    uniCloud.interceptObject({  
        async invoke({  
            objectName, // 云对象名称  
            methodName, // 云对象的方法名称  
            params // 参数列表  
        }) {  
            if(objectName == "uni-id-co" && (methodName.includes('loginBy') ||  ['login','registerUser'].includes(methodName) )){  
                console.log('执行登录相关云对象');  
                //获取缓存中的share_id传递给inviteCode,后续系统会自动关联裂变信息  
                params[0].inviteCode = await new Promise((callBack) => {  
                    var share_id = uni.getStorageSync('share_id');    
                    console.log('获取share_id->',share_id);  
                    callBack(share_id)                      
                })  
                // console.log(params);  
            }  
            // console.log(params);  
        }  
    })

项目中原本用的uni.setClipboardData,在H5中好像工作不正常,改为uni.getStorageSync正常,小程序还没测试

搞错了,uni.setClipboardData在H5中也正常

收起阅读 »