
eportJSException >>>> exception function:createInstanceContext,
需求:uniapp开发项目最终运行在Android真机;
操作:uniapp开发过程中全程在chrome浏览器中运行,开发完成后在Android真机运行,之后出现如下错误
这里重点关注划线区域,具体的错误就是这里
> Cannot read property 'http' of undefined
参考这篇文章找到解决方案:关于Vue3中调试APP触发异常
我的修改如下:
就是把const http = uni.$uv.http 放在了函数中,至此问题解决。
最后吐槽一下,这个问题编辑面板真的难用
需求:uniapp开发项目最终运行在Android真机;
操作:uniapp开发过程中全程在chrome浏览器中运行,开发完成后在Android真机运行,之后出现如下错误
这里重点关注划线区域,具体的错误就是这里
> Cannot read property 'http' of undefined
参考这篇文章找到解决方案:关于Vue3中调试APP触发异常
我的修改如下:
就是把const http = uni.$uv.http 放在了函数中,至此问题解决。
最后吐槽一下,这个问题编辑面板真的难用
收起阅读 »
为什么发布tm还要我登录啊,紧接着就是登录、验证、手机绑定验证、到最后发布,跟我说什么该应用不属于我,我真的会谢
为什么发布tm还要我登录啊,紧接着就是登录、验证、手机绑定验证、到最后发布,跟我说什么该应用不属于我,我真的会谢
国产,你这样玩,我还用你干嘛
为什么发布tm还要我登录啊,紧接着就是登录、验证、手机绑定验证、到最后发布,跟我说什么该应用不属于我,我真的会谢
国产,你这样玩,我还用你干嘛

uni.onBLECharacteristicValueChange 遇到的问题
问题:uni.onBLECharacteristicValueChange 无法监听到第二次 uni.writeBLECharacteristicValue 特征值写入。
ps:代码就不描述了,写一下流程
描述:初始化蓝牙->启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值->监听蓝牙特征值变化->writeBLECharacteristicValue 下发参数给设备
->onBLECharacteristicValueChange 正常监听到特征值变化,成功获取报文->此时获取到成功报文后我又执行了,启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值(此时的uuid,服务id,特征值id,都应需求原因不予第一次获取的一致)->未调用蓝牙特征值变化方法,因为第一次已经调用(后续试过再次调用结果也一致,失败)
->onBLECharacteristicValueChange 未监听到特征值变化,无报文。
解决:在onBLECharacteristicValueChange 中获取到第一次成功报文后,断开与低功耗蓝牙设备的连接uni.closeBLEConnection,再次初始化蓝牙->启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值->监听蓝牙特征值变化->writeBLECharacteristicValue 下发参数给设备 -> 又可以成功获取到 onBLECharacteristicValueChange 特征值变化,成功获取报文。
问题:uni.onBLECharacteristicValueChange 无法监听到第二次 uni.writeBLECharacteristicValue 特征值写入。
ps:代码就不描述了,写一下流程
描述:初始化蓝牙->启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值->监听蓝牙特征值变化->writeBLECharacteristicValue 下发参数给设备
->onBLECharacteristicValueChange 正常监听到特征值变化,成功获取报文->此时获取到成功报文后我又执行了,启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值(此时的uuid,服务id,特征值id,都应需求原因不予第一次获取的一致)->未调用蓝牙特征值变化方法,因为第一次已经调用(后续试过再次调用结果也一致,失败)
->onBLECharacteristicValueChange 未监听到特征值变化,无报文。
解决:在onBLECharacteristicValueChange 中获取到第一次成功报文后,断开与低功耗蓝牙设备的连接uni.closeBLEConnection,再次初始化蓝牙->启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值->监听蓝牙特征值变化->writeBLECharacteristicValue 下发参数给设备 -> 又可以成功获取到 onBLECharacteristicValueChange 特征值变化,成功获取报文。

Ai绘图系统搭建教程
应用名称:Aai绘图工具
支持Ai功能:文生图、图生图、艺术二维码、Ai消除去水印、局部重绘、老照片修复、高清放大、图片转漫画、图片扩展、Ai抠图
绘图费用
一般生图费用:0.09/张,包含高清修复的:0.15/张
如果用量较多可以拿到半价:0.045/张,包含高清修复的:0.075/张
如果用量更多,联系开发者可以拿到更低价
支持平台(支持uniCloud阿里云空间)
1:支持微信H5公众号版 PC电脑版。(需要已认证的微信公众号)
2:支持微信小程序。(上架需申请Ai绘图类目,可使用第三方合同申请Ai类目,使用第三个合同比较简单,开发者可指导协作完成)
3:支持支付宝小程序。(无需Ai类目,工具类目即可上架)
4:支持抖音小程序。(必须深度算法合成备案才能上架)
应用演示
1:H5客户端体验地址(手机版更优) [http://www.msshequ.cn/ai/](http://www.msshequ.cn/ai/#/)
2:微信小程序
3:支付宝小程序
源码下载
客户端(ai-image):https://ext.dcloud.net.cn/plugin?id=12217
ai-image可打包成 H5、微信小程序、支付宝小程序、抖音小程序 并发布
管理端(ai-image-admin):https://ext.dcloud.net.cn/plugin?id=12211
ai-image-admin可打包成H5发布,用于管理配置客户端,或者说是站长的控制台,站长自己用不要对外开放
开通uniCloud阿里云服务空间
开通地址:https://unicloud.dcloud.net.cn/
建议按量付费,请使用阿里云服务,其他服务可能不兼容
下载HBuilder开发工具:https://www.dcloud.io/hbuilderx.html
如果图片不显示无法看到截图教程请看
csdn文章教程:https://blog.csdn.net/weixin_43197263/article/details/142580962
掘金文章教程:https://juejin.cn/post/7418548134593396745
小程序域名白名单
请求域名:api.next.bspapp.com、sd-json.oss-cn-hongkong.aliyuncs.com
下载域名:sd-json.oss-cn-hongkong.aliyuncs.com
除了阿里云自带的请求域名外,请求和下载还要额外添加:sd-json.oss-cn-hongkong.aliyuncs.com,该域名是Ai绘图回调的文件地址,
Ai回调有些是JSON数据,有些是图片地址,所有需要把该域名添加到请求域名,和下载域名
同时你unicloud的上传域名,和下载域名也要添加,unicloud空间查看域名
安装教程
先安装ai-image-admin,导入HBuilder 后关联阿里云空间,HBuilder下载地址:https://www.dcloud.io/hbuilderx.html
初始化云数据库
如果弹窗窗口直接覆盖
等待初始化完成
上传所有云函数及公共模块
如果弹出窗口直接替换
等待上传完成
再安装ai-image,必须一起安装完在测试使用,步骤与上面都差不多
导入HBuilder后关联阿里云空间
初始化云数据库
如果弹出询问窗直接覆盖
等待初始化完成
上传所有云函数及公共模块
如果弹出询问窗直接替换
等待上传完成
发布管理端(ai-image-admin)得先发布管理端完成小程序配置才能发布小程序端
ai-image-admin发行 网站-PC,并关联你的uniCloud阿里云空间一般会自动上传
如果无法自动上传,需要手动上传,先等待打包完成
打开打包完成的目录地址,把web改成admin,方便上传,因为打包的H5运行路径(会改的话可以自己改路径)就是admin,所有要用admin
上传文件到云空间,这里上传的是unicloud,如果你用其他云空间托管也可以上传其他云空间,记得配置跨域
配置跨域
访问管理端,在默认域名后面添加目录/admin
管理端初始化账号:admin
管理端初始化密码:112233
添加一个小程序,获取mymp_id,这里以支付宝小程序为例
在ai-image客户端配置mymp_id,就可以运行或者打包ai-image项目了
不用全部配置,要发布支付宝小程序,就修改mp-alipay的参数,要上架哪个平台就修改对应平台的mymp_id就行
发布到支付宝小程序
注意:是ai-image项目。建议先运行测试没问题在打包发布,不会运行测试的直接打包发布应该也没问题(开发者已经测试好没问题了)

应用名称:Aai绘图工具
支持Ai功能:文生图、图生图、艺术二维码、Ai消除去水印、局部重绘、老照片修复、高清放大、图片转漫画、图片扩展、Ai抠图
绘图费用
一般生图费用:0.09/张,包含高清修复的:0.15/张
如果用量较多可以拿到半价:0.045/张,包含高清修复的:0.075/张
如果用量更多,联系开发者可以拿到更低价
支持平台(支持uniCloud阿里云空间)
1:支持微信H5公众号版 PC电脑版。(需要已认证的微信公众号)
2:支持微信小程序。(上架需申请Ai绘图类目,可使用第三方合同申请Ai类目,使用第三个合同比较简单,开发者可指导协作完成)
3:支持支付宝小程序。(无需Ai类目,工具类目即可上架)
4:支持抖音小程序。(必须深度算法合成备案才能上架)
应用演示
1:H5客户端体验地址(手机版更优) [http://www.msshequ.cn/ai/](http://www.msshequ.cn/ai/#/)
2:微信小程序
3:支付宝小程序
源码下载
客户端(ai-image):https://ext.dcloud.net.cn/plugin?id=12217
ai-image可打包成 H5、微信小程序、支付宝小程序、抖音小程序 并发布
管理端(ai-image-admin):https://ext.dcloud.net.cn/plugin?id=12211
ai-image-admin可打包成H5发布,用于管理配置客户端,或者说是站长的控制台,站长自己用不要对外开放
开通uniCloud阿里云服务空间
开通地址:https://unicloud.dcloud.net.cn/
建议按量付费,请使用阿里云服务,其他服务可能不兼容
下载HBuilder开发工具:https://www.dcloud.io/hbuilderx.html
如果图片不显示无法看到截图教程请看
csdn文章教程:https://blog.csdn.net/weixin_43197263/article/details/142580962
掘金文章教程:https://juejin.cn/post/7418548134593396745
小程序域名白名单
请求域名:api.next.bspapp.com、sd-json.oss-cn-hongkong.aliyuncs.com
下载域名:sd-json.oss-cn-hongkong.aliyuncs.com
除了阿里云自带的请求域名外,请求和下载还要额外添加:sd-json.oss-cn-hongkong.aliyuncs.com,该域名是Ai绘图回调的文件地址,
Ai回调有些是JSON数据,有些是图片地址,所有需要把该域名添加到请求域名,和下载域名
同时你unicloud的上传域名,和下载域名也要添加,unicloud空间查看域名
安装教程
先安装ai-image-admin,导入HBuilder 后关联阿里云空间,HBuilder下载地址:https://www.dcloud.io/hbuilderx.html
初始化云数据库
如果弹窗窗口直接覆盖
等待初始化完成
上传所有云函数及公共模块
如果弹出窗口直接替换
等待上传完成
再安装ai-image,必须一起安装完在测试使用,步骤与上面都差不多
导入HBuilder后关联阿里云空间
初始化云数据库
如果弹出询问窗直接覆盖
等待初始化完成
上传所有云函数及公共模块
如果弹出询问窗直接替换
等待上传完成
发布管理端(ai-image-admin)得先发布管理端完成小程序配置才能发布小程序端
ai-image-admin发行 网站-PC,并关联你的uniCloud阿里云空间一般会自动上传
如果无法自动上传,需要手动上传,先等待打包完成
打开打包完成的目录地址,把web改成admin,方便上传,因为打包的H5运行路径(会改的话可以自己改路径)就是admin,所有要用admin
上传文件到云空间,这里上传的是unicloud,如果你用其他云空间托管也可以上传其他云空间,记得配置跨域
配置跨域
访问管理端,在默认域名后面添加目录/admin
管理端初始化账号:admin
管理端初始化密码:112233
添加一个小程序,获取mymp_id,这里以支付宝小程序为例
在ai-image客户端配置mymp_id,就可以运行或者打包ai-image项目了
不用全部配置,要发布支付宝小程序,就修改mp-alipay的参数,要上架哪个平台就修改对应平台的mymp_id就行
发布到支付宝小程序
注意:是ai-image项目。建议先运行测试没问题在打包发布,不会运行测试的直接打包发布应该也没问题(开发者已经测试好没问题了)

智慧社区管理系统平台:城市管理好助手(附源码)
智慧社区:构建未来生活的新篇章
在信息化与智能化浪潮的推动下,智慧社区作为一种全新的社区治理模式正悄然兴起。它深度融合大数据、云计算、人工智能等前沿技术,整合社区各类服务资源,旨在打造一个安全、便捷、高效的居住环境。本文将从智慧安防、智慧服务、智慧物业、智慧生活四个方面,深入剖析智慧社区的建设实践及其带来的变革。
一、智慧社区的核心功能
社区信息管理:作为智慧社区的基础,社区信息管理涵盖了小区院落、人员信息、组织机构等多个方面。通过构建全面的社区数据库,实现对社区内各类信息的集中管理和实时更新,为社区管理和居民服务提供有力支撑。
人房关系管理:智慧社区通过人房关系管理系统,能够清晰地掌握社区内居民与房屋之间的对应关系。这不仅有助于提升社区管理的精准度,还能在紧急情况下迅速定位到相关人员,确保社区安全。
居民信息审核:为了保障社区的安全与秩序,智慧社区对居民信息进行严格的审核与管理。通过线上提交、线下审核的方式,确保居民信息的真实性和准确性,为社区提供更加可靠的居民服务。
组织机构管理:智慧社区还注重组织机构的管理与协调。通过构建完善的组织机构管理体系,明确各职能部门的职责与权限,实现社区管理的规范化和高效化。
二、智慧物业:高效管理的创新实践
智慧物业是智慧社区的重要组成部分。通过引入智能化管理系统,物业公司能够实现对社区设施、环境、人员等要素的精细化管理。利用物联网技术,对社区内的照明、安防、消防等设备进行远程监控和智能控制,降低能耗和维护成本。同时,建立居民反馈机制,及时收集和处理居民的意见和建议,提升物业服务质量和效率。智慧物业不仅减轻了物业公司的管理负担,还提高了居民对物业服务的满意度和信任度。
代码示例:
//智慧社区大屏Jenkinsfile
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
stage('npm install') {
steps {
sh 'npm install'
}
}
stage('npm build') {
steps {
sh 'npm run build'
}
}
stage('tar and rsync') {
steps {
sh 'tar zcvf dist.tar.gz dist/'
sh 'rsync -avzt dist.tar.gz rsync@192.168.201.73::zhsq-dp --password-file=/etc/rsync.pass'
sh 'rsync -avzt dist.tar.gz rsync@192.168.201.74::zhsq-dp --password-file=/etc/rsync.pass'
}
}
}
}
联系我们
智慧社区:构建未来生活的新篇章
在信息化与智能化浪潮的推动下,智慧社区作为一种全新的社区治理模式正悄然兴起。它深度融合大数据、云计算、人工智能等前沿技术,整合社区各类服务资源,旨在打造一个安全、便捷、高效的居住环境。本文将从智慧安防、智慧服务、智慧物业、智慧生活四个方面,深入剖析智慧社区的建设实践及其带来的变革。
一、智慧社区的核心功能
社区信息管理:作为智慧社区的基础,社区信息管理涵盖了小区院落、人员信息、组织机构等多个方面。通过构建全面的社区数据库,实现对社区内各类信息的集中管理和实时更新,为社区管理和居民服务提供有力支撑。
人房关系管理:智慧社区通过人房关系管理系统,能够清晰地掌握社区内居民与房屋之间的对应关系。这不仅有助于提升社区管理的精准度,还能在紧急情况下迅速定位到相关人员,确保社区安全。
居民信息审核:为了保障社区的安全与秩序,智慧社区对居民信息进行严格的审核与管理。通过线上提交、线下审核的方式,确保居民信息的真实性和准确性,为社区提供更加可靠的居民服务。
组织机构管理:智慧社区还注重组织机构的管理与协调。通过构建完善的组织机构管理体系,明确各职能部门的职责与权限,实现社区管理的规范化和高效化。
二、智慧物业:高效管理的创新实践
智慧物业是智慧社区的重要组成部分。通过引入智能化管理系统,物业公司能够实现对社区设施、环境、人员等要素的精细化管理。利用物联网技术,对社区内的照明、安防、消防等设备进行远程监控和智能控制,降低能耗和维护成本。同时,建立居民反馈机制,及时收集和处理居民的意见和建议,提升物业服务质量和效率。智慧物业不仅减轻了物业公司的管理负担,还提高了居民对物业服务的满意度和信任度。
代码示例:
//智慧社区大屏Jenkinsfile
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
stage('npm install') {
steps {
sh 'npm install'
}
}
stage('npm build') {
steps {
sh 'npm run build'
}
}
stage('tar and rsync') {
steps {
sh 'tar zcvf dist.tar.gz dist/'
sh 'rsync -avzt dist.tar.gz rsync@192.168.201.73::zhsq-dp --password-file=/etc/rsync.pass'
sh 'rsync -avzt dist.tar.gz rsync@192.168.201.74::zhsq-dp --password-file=/etc/rsync.pass'
}
}
}
}
联系我们

生鲜配送系统软件推荐:鲜橙生鲜配送系统(附源码)
一、解决传统痛点,提升运营效率
传统生鲜配送模式面临着诸多痛点:人工分拣效率低下、数据记录易出错、仓储物流管理复杂等。这些问题不仅增加了企业的运营成本,还严重影响了客户体验。而一款优秀的生鲜配送系统,能够全面解决这些痛点。通过自动化、智能化的技术手段,系统能够大幅提升分拣效率,减少人为错误,实现数据的实时同步与精准管理。同时,系统还能优化仓储布局和物流配送路线,降低物流成本,提升整体运营效率。
二、功能全面,满足多元化需求
一款优秀的生鲜配送系统,其功能应当全面而强大,以满足企业多元化的需求。从商品管理到价格管理,从采购管理到库存管理,再到财务管理和数据分析,系统应涵盖生鲜配送的各个环节。具体而言,系统应支持商品多规格管理、价格差异化设置、自动化采购单汇总、库存实时监控等功能;
三、灵活定制,适应企业发展
每个生鲜企业都有其独特的发展阶段和业务模式,因此一款优秀的生鲜配送系统应具备高度的灵活性和可定制性。系统应能够根据企业的实际需求进行个性化定制,以适应不同规模、不同业态的生鲜企业。无论是初创型企业还是成熟的大型企业,都能在系统中找到适合自己的解决方案。
**Jeecg-Boot 低代码开发平台
当前最新版本: 3.2.0(发布日期:20220425)
后端技术架构
基础框架:Spring Boot 2.6.6
持久层框架:Mybatis-plus 3.5.1
安全框架:Apache Shiro 1.8.0,Jwt 3.11.0
数据库连接池:阿里巴巴Druid 1.1.22
缓存框架:redis
日志打印:logback
其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。
开发环境
语言:Java 8
IDE(JAVA): Eclipse安装lombok插件 或者 IDEA
依赖管理:Maven
数据库:MySQL5.7+ & Oracle 11g & SqlServer & postgresql & 国产等更多数据库
缓存:Redis
代码示例:
@GetMapping(value = "/list")
public Result<IPage<JeecgDemo>> list(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>();
//调用QueryGenerator的initQueryWrapper
QueryWrapper<JeecgDemo> queryWrapper = QueryGenerator.initQueryWrapper(jeecgDemo, req.getParameterMap());
Page<JeecgDemo> page = new Page<JeecgDemo>(pageNo, pageSize);
IPage<JeecgDemo> pageList = jeecgDemoService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}**
联系我们:
一、解决传统痛点,提升运营效率
传统生鲜配送模式面临着诸多痛点:人工分拣效率低下、数据记录易出错、仓储物流管理复杂等。这些问题不仅增加了企业的运营成本,还严重影响了客户体验。而一款优秀的生鲜配送系统,能够全面解决这些痛点。通过自动化、智能化的技术手段,系统能够大幅提升分拣效率,减少人为错误,实现数据的实时同步与精准管理。同时,系统还能优化仓储布局和物流配送路线,降低物流成本,提升整体运营效率。
二、功能全面,满足多元化需求
一款优秀的生鲜配送系统,其功能应当全面而强大,以满足企业多元化的需求。从商品管理到价格管理,从采购管理到库存管理,再到财务管理和数据分析,系统应涵盖生鲜配送的各个环节。具体而言,系统应支持商品多规格管理、价格差异化设置、自动化采购单汇总、库存实时监控等功能;
三、灵活定制,适应企业发展
每个生鲜企业都有其独特的发展阶段和业务模式,因此一款优秀的生鲜配送系统应具备高度的灵活性和可定制性。系统应能够根据企业的实际需求进行个性化定制,以适应不同规模、不同业态的生鲜企业。无论是初创型企业还是成熟的大型企业,都能在系统中找到适合自己的解决方案。
**Jeecg-Boot 低代码开发平台
当前最新版本: 3.2.0(发布日期:20220425)
后端技术架构
基础框架:Spring Boot 2.6.6
持久层框架:Mybatis-plus 3.5.1
安全框架:Apache Shiro 1.8.0,Jwt 3.11.0
数据库连接池:阿里巴巴Druid 1.1.22
缓存框架:redis
日志打印:logback
其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。
开发环境
语言:Java 8
IDE(JAVA): Eclipse安装lombok插件 或者 IDEA
依赖管理:Maven
数据库:MySQL5.7+ & Oracle 11g & SqlServer & postgresql & 国产等更多数据库
缓存:Redis
代码示例:
@GetMapping(value = "/list")
public Result<IPage<JeecgDemo>> list(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>();
//调用QueryGenerator的initQueryWrapper
QueryWrapper<JeecgDemo> queryWrapper = QueryGenerator.initQueryWrapper(jeecgDemo, req.getParameterMap());
Page<JeecgDemo> page = new Page<JeecgDemo>(pageNo, pageSize);
IPage<JeecgDemo> pageList = jeecgDemoService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}**
联系我们:
收起阅读 »
uniapp-x不支持瀑布流列表,望解决
uniapp-x 希望可以支持最基本,瀑布流,和普通的,一行显示2个或者多个item的情况 这也算最基本的列表功能了吧
uniapp-x 希望可以支持最基本,瀑布流,和普通的,一行显示2个或者多个item的情况 这也算最基本的列表功能了吧

uniapp App map地图组件+subnvues弹窗,路由跳转后再进页面时subnvues弹窗有缓存的问题!
hbuildX版本:4.24
uniapp:vue3(默认模板,不包含uniapp-x)
注:只是分享,之前是做pc端的,刚接触uniapp,不清楚这个问题在历代uniapp更新中是否被解决,但是我在开发中遇到了,所以就发出来了。
情景描述:在一个除顶部菜单的全屏地图中,添加自定义控件,因为map地图层级很高,故使用subnvues,进行控件展示,包含两个方形小按钮,一个是定位自己,一个是点击进行弹窗,在弹窗中在进行操作,然后就发现了退出当前路由,再进入时,弹窗会出现重复!
解决办法:反正是困扰了一下午,无意中发现,将地图代码注释之后,再执行退出进入的操作,就不会出现这种情况,经过漫长的时间琢磨,给地图组件加上v-if,一是在subnvues弹窗之前将地图隐掉,执行完弹窗操作后,再显示出来,就只是一瞬,有用,二是,在退出当前页面时提前将地图隐掉,再执行页面跳转,就一个异步执行代码;
//打开菜单弹窗
const OpenMenuPopu = ()=>{
MapIsShow.value = false;
ChoiceMenuExample.value = uni.getSubNVueById('MultipleChoiceMenu');
ChoiceMenuExample.value.show('slide-in-bottom',600);
uni.$emit('FatherCheckboxValue',FatherCheckboxValue.value)
MapIsShow.value = true;
}
//返回首页
const GoHome = () => {
MapIsShow.value = false;
MyAMap.value = null;
let time = setTimeout(()=>{
uni.redirectTo({
url: '/pages/Home/index'
});
clearTimeout(time);
},10)
uni.$emit('FatherCheckboxValue',[]);
uni.$off('SearchData')
uni.$off('FatherCheckboxValue')
uni.$off('ControlID')
uni.$off('CheckboxValue')
}
onBackPress(()=>{
GoHome();
return true;
})
hbuildX版本:4.24
uniapp:vue3(默认模板,不包含uniapp-x)
注:只是分享,之前是做pc端的,刚接触uniapp,不清楚这个问题在历代uniapp更新中是否被解决,但是我在开发中遇到了,所以就发出来了。
情景描述:在一个除顶部菜单的全屏地图中,添加自定义控件,因为map地图层级很高,故使用subnvues,进行控件展示,包含两个方形小按钮,一个是定位自己,一个是点击进行弹窗,在弹窗中在进行操作,然后就发现了退出当前路由,再进入时,弹窗会出现重复!
解决办法:反正是困扰了一下午,无意中发现,将地图代码注释之后,再执行退出进入的操作,就不会出现这种情况,经过漫长的时间琢磨,给地图组件加上v-if,一是在subnvues弹窗之前将地图隐掉,执行完弹窗操作后,再显示出来,就只是一瞬,有用,二是,在退出当前页面时提前将地图隐掉,再执行页面跳转,就一个异步执行代码;
//打开菜单弹窗
const OpenMenuPopu = ()=>{
MapIsShow.value = false;
ChoiceMenuExample.value = uni.getSubNVueById('MultipleChoiceMenu');
ChoiceMenuExample.value.show('slide-in-bottom',600);
uni.$emit('FatherCheckboxValue',FatherCheckboxValue.value)
MapIsShow.value = true;
}
//返回首页
const GoHome = () => {
MapIsShow.value = false;
MyAMap.value = null;
let time = setTimeout(()=>{
uni.redirectTo({
url: '/pages/Home/index'
});
clearTimeout(time);
},10)
uni.$emit('FatherCheckboxValue',[]);
uni.$off('SearchData')
uni.$off('FatherCheckboxValue')
uni.$off('ControlID')
uni.$off('CheckboxValue')
}
onBackPress(()=>{
GoHome();
return true;
})
收起阅读 »

【经验分享】【微信小程序】简单在已有账号系统基础上引入uni-id使用clientDB的权限管理
折腾了一下午,终于给我的小程序成功引入了uni-id,之前每次想到要迁移就头大,今天终于下定决心换到clientDB了,也是为了减少云函数的用量。在这里就简单分享一下校验。
参考:https://en.uniapp.dcloud.io/uniCloud/uni-id.html(这个教程是老的uni-id,对我够用了,不想迁移到新版)
安装uni-id
- 导入插件。
- 写config-center的配置,复制上面教程的文件只需要改mp-weixin.oauth.weixin内的appid和secret。
- 创建uni-id-users和opendb-verify-codes表,后者用于验证码对小程序其实不必要,但我不知道删了能不能跑。
以上几步可以简单的安装好uni-id,然后便是迁移工作了。
迁移
首先我希望我的权限是依赖于openid的,所以我便利了我自己搭建的账号数据库,并逐条写入uni-id-user表,只需要写两个字段_id和wx_openid.mp-weixin,这两个字段同时设置为原先的openid。
登录
之后按照文档的微信登录段,新建一个云函数,内容如下
const uniID = require("uni-id");
exports.main = async function (event, context) {
// const res = await uniID.loginByWeixin(event.code)
const res = await uniID.loginByWeixin({
code: event.code,
});
return res;
};
注意这个云函数要选择公共依赖uni-id,安装的uni-id也需要选择公共依赖uni-open-bridge-common(我不知道为什么默认没选)。
以上是官方文档的,我将其修改为了
'use strict';
const uniID = require('uni-id');
const db = uniCloud.database();
const dbUID = db.collection('uni-id-users');
exports.main = async function (event) {
const res = await uniID.loginByWeixin({ code: event.code });
if (res.uid !== res.openid) {
await dbUID.doc(res.openid).set((await dbUID.doc(res.uid).field({ _id: false }).get()).data[0]);
await dbUID.doc(res.uid).remove();
res.uid = res.openid;
res.tokenExpired = 0;
}
return res;
};
因为默认第一次登录的账户他会新建一条记录,而这条记录的uid不是原有的openid,所以需要手动修改。
同时修改以后原先的token是作废的,所以使用tokenExpired=0来让客户端手动重新二次调用。(每次都需要上传一个只能用一次的code)
然后我客户端用这个云函数取代了我原先用于获取openid的云函数,因为这个也会返回openid,正好还能登录一举两得。
角色
另一方面为了用上uni-id的角色系统,我还在我自己的关于权限变更的云函数里同时变更uni-id-users表的role字段,这样clientDB也可以用角色控制了xd
折腾了一下午,终于给我的小程序成功引入了uni-id,之前每次想到要迁移就头大,今天终于下定决心换到clientDB了,也是为了减少云函数的用量。在这里就简单分享一下校验。
参考:https://en.uniapp.dcloud.io/uniCloud/uni-id.html(这个教程是老的uni-id,对我够用了,不想迁移到新版)
安装uni-id
- 导入插件。
- 写config-center的配置,复制上面教程的文件只需要改mp-weixin.oauth.weixin内的appid和secret。
- 创建uni-id-users和opendb-verify-codes表,后者用于验证码对小程序其实不必要,但我不知道删了能不能跑。
以上几步可以简单的安装好uni-id,然后便是迁移工作了。
迁移
首先我希望我的权限是依赖于openid的,所以我便利了我自己搭建的账号数据库,并逐条写入uni-id-user表,只需要写两个字段_id和wx_openid.mp-weixin,这两个字段同时设置为原先的openid。
登录
之后按照文档的微信登录段,新建一个云函数,内容如下
const uniID = require("uni-id");
exports.main = async function (event, context) {
// const res = await uniID.loginByWeixin(event.code)
const res = await uniID.loginByWeixin({
code: event.code,
});
return res;
};
注意这个云函数要选择公共依赖uni-id,安装的uni-id也需要选择公共依赖uni-open-bridge-common(我不知道为什么默认没选)。
以上是官方文档的,我将其修改为了
'use strict';
const uniID = require('uni-id');
const db = uniCloud.database();
const dbUID = db.collection('uni-id-users');
exports.main = async function (event) {
const res = await uniID.loginByWeixin({ code: event.code });
if (res.uid !== res.openid) {
await dbUID.doc(res.openid).set((await dbUID.doc(res.uid).field({ _id: false }).get()).data[0]);
await dbUID.doc(res.uid).remove();
res.uid = res.openid;
res.tokenExpired = 0;
}
return res;
};
因为默认第一次登录的账户他会新建一条记录,而这条记录的uid不是原有的openid,所以需要手动修改。
同时修改以后原先的token是作废的,所以使用tokenExpired=0来让客户端手动重新二次调用。(每次都需要上传一个只能用一次的code)
然后我客户端用这个云函数取代了我原先用于获取openid的云函数,因为这个也会返回openid,正好还能登录一举两得。
角色
另一方面为了用上uni-id的角色系统,我还在我自己的关于权限变更的云函数里同时变更uni-id-users表的role字段,这样clientDB也可以用角色控制了xd
收起阅读 »
关于 app跳转微信客服报错deeplink custmerservice no permission排查解决
1.准备工作,微信开放平企业认证微信开放平台app认证,企业微信企业认证共计600元
- 认证通过后在企业微信中>微信客服 绑定 微信开放平台认证的app
- 在manifest.json>app模块配置>share分享填入 开放平台认证的appid
- 重新打自定义包(标准基座会报错deeplink custmerservice no permission)
- 填写企业微信的id plus中的方法备注的是填写g_开头的不要管他
附上代码openWeixinService(e){ let sweixin = null plus.share.getServices(res=>{ sweixin = res.find(i => i.id === 'weixin') if(sweixin){ sweixin.openCustomerServiceChat({ corpid: '企业微信id', //获取链接https://work.weixin.qq.com/wework_admin/frame#/profile url: '客服链接', //获取链接https://work.weixin.qq.com/wework_admin/frame#/app/servicer },suc=>{ console.log("success",JSON.stringify(res)) },err=>{ console.log("error",JSON.stringify(err)) }) }else{ plus.nativeUI.alert('当前环境不支持微信操作!') } },function(){ uni.showToast({title: "获取服务失败,不支持该操作。"+JSON.stringify(e), icon: 'error'}) }) }
1.准备工作,微信开放平企业认证微信开放平台app认证,企业微信企业认证共计600元
- 认证通过后在企业微信中>微信客服 绑定 微信开放平台认证的app
- 在manifest.json>app模块配置>share分享填入 开放平台认证的appid
- 重新打自定义包(标准基座会报错deeplink custmerservice no permission)
- 填写企业微信的id plus中的方法备注的是填写g_开头的不要管他
附上代码openWeixinService(e){ let sweixin = null plus.share.getServices(res=>{ sweixin = res.find(i => i.id === 'weixin') if(sweixin){ sweixin.openCustomerServiceChat({ corpid: '企业微信id', //获取链接https://work.weixin.qq.com/wework_admin/frame#/profile url: '客服链接', //获取链接https://work.weixin.qq.com/wework_admin/frame#/app/servicer },suc=>{ console.log("success",JSON.stringify(res)) },err=>{ console.log("error",JSON.stringify(err)) }) }else{ plus.nativeUI.alert('当前环境不支持微信操作!') } },function(){ uni.showToast({title: "获取服务失败,不支持该操作。"+JSON.stringify(e), icon: 'error'}) }) }

解决 隐藏原生tabbar之后,手机屏幕下方会出现白色区域的问题
在源码视图中添加"safearea": {"bottom": { "offset": "none" }
在源码视图中添加"safearea": {"bottom": { "offset": "none" }