HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

山东消防应急设备巡检系统APP定制开发公司

山东消防应急设备巡检系统APP定制开发公司,咨询(邵137微93I6电I229)消防应急设备巡检系统APP定制开发公司,应急救援智慧消防APP开发山东抖米信息科技有限公司,是一家专业互联网+系统整体解决方案提供商。2018年被认定为高新技术企业,双软企业,国际质量管理体系认证。公司秉承“技术驱动商业未来”的发展理念,在技术研发、产品质量上精益求精。

专业人找专业公司做专业软件,安全的用单设备,实时监控

通过“智慧消防APP”的消防巡查功能,用户可以在巡查过程中,直观的看到单位中那些地方是应该检查的,并且通过扫描这种身份标识的同时将检查信息记录。个人与领导都可以对检查工作情况一目了然。“智慧消防APP”为了应对不同行业、社会单位、检查人员的不同需求,还针对消防法规中规定的每个消防设施或重点部位,都对应了相应的的检查标准,巡查人员通过下载智慧消防APP,即可扫描消防设备处张贴的NFC身份标签,查看相应的检查标准,通过“智慧消防APP”这一智慧型软件进行对应位置的检查。

继续阅读 »

山东消防应急设备巡检系统APP定制开发公司,咨询(邵137微93I6电I229)消防应急设备巡检系统APP定制开发公司,应急救援智慧消防APP开发山东抖米信息科技有限公司,是一家专业互联网+系统整体解决方案提供商。2018年被认定为高新技术企业,双软企业,国际质量管理体系认证。公司秉承“技术驱动商业未来”的发展理念,在技术研发、产品质量上精益求精。

专业人找专业公司做专业软件,安全的用单设备,实时监控

通过“智慧消防APP”的消防巡查功能,用户可以在巡查过程中,直观的看到单位中那些地方是应该检查的,并且通过扫描这种身份标识的同时将检查信息记录。个人与领导都可以对检查工作情况一目了然。“智慧消防APP”为了应对不同行业、社会单位、检查人员的不同需求,还针对消防法规中规定的每个消防设施或重点部位,都对应了相应的的检查标准,巡查人员通过下载智慧消防APP,即可扫描消防设备处张贴的NFC身份标签,查看相应的检查标准,通过“智慧消防APP”这一智慧型软件进行对应位置的检查。

收起阅读 »

关于上周五部分iOS设备上App引擎崩溃的公告

DCloud

各位开发者,

很遗憾的告知大家,DCloud服务在2021年11月19日下午遭遇大流量网络攻击,触发了iOS客户端的一个隐藏Bug,导致部分iOS设备上App引擎崩溃。

故障发生后,DCloud的工程师高度紧张,全力投入,在20分钟内将DCloud服务恢复正常,开发者的iOS App也随即恢复正常。

DCloud并非不负责任,也并非无能的公司。众多工程师仔细讨论,如何彻底杜绝将来再次发生类似故障,我们采取了如下完善措施:

  1. 服务器端技术专家组紧急集合,逐条确认服务器端的安全防控措施;补充说明:DCloud开发者服务已通过国家信息安全等级保护三级,证书编号:11010813802-20001;
  2. iOS App引擎当晚发布紧急更新,解决该隐藏漏洞。并检查了所有服务器返回数据的代码,确保以后即便服务器异常也不会造成App引擎崩溃;建议开发者尽快升级HBuilderX或离线打包SDK。

原因详细解释

  1. DCloud数据采集的目的
    为了持续优化应用性能、质量及提供统计报表,基于DCloud引擎开发的App,在运行过程中会采集应用启动时间、异常错误日志这两方面的数据。
    因为开发者的js代码无法正常采集到这些信息,比如启动时间,开发者的js代码能打点的第一行代码,已经是app运行了一会后才发生的事情了;崩溃更是如此,app崩溃时js也无法运行和打点数据。但这些信息又对于优化应用有重要参考意义。
    另外其他适配原生应用的统计sdk也不能正常统计到这2个信息,它们无法准确记录从app启动到首屏webview渲染的启动时间。
    这些数据,一方面用于DCloud优化产品,比如查看在哪些设备上启动慢或崩溃率高;另一方面,DCloud也给开发者提供了web界面自助查看这些数据,帮助开发者了解运营情况,详见dev.dcloud.net.cn。
  2. DCloud数据采集的合规性
    DCloud数据采集内容在HBuilder用户许可协议(菜单帮助-许可协议)和DCloud引擎隐私文档(Android平台iOS平台)中均有明确说明。
    这些数据的采集规则和脱敏策略符合中国各大应用商店规范和个人信息保护法,基于DCloud引擎开发的合法App,均可正常上线应用商店。
    DCloud通过了国家信息安全等级保护三级,证书编号:11010813802-20001,相关数据的保护措施完备。
    DCloud并非大数据公司,对采集用户个人隐私、开发者代码都没有兴趣。
  3. 如果仅是采集数据,没有返回内容,怎么会导致闪退?
    DCloud服务器会返回deviceID,因为现在手机上获取imei等唯一标记越来越困难,手机端app权限设置变化一次都可能导致设备id变化。为了尽可能保持标记统一性,由DCloud服务器计算一个更准确的deviceID。
    19日下午DCloud服务遭受恶意攻击后,无法给客户端返回预期格式的deviceID,iOS相关代码容错不合理造成了闪退。
  4. 影响面
    11月19日下午,iOS引擎,在异常的那20分钟内启动iOS app无法成功。之前启动,在那20分钟内使用的客户不会受影响。对开发者的波及面是比较有限的。

解决方案

在事故发生后,DCloud成立了专案组,首先应急解决了服务端故障,然后周五下午开会讨论治根方案,周六日与受影响的开发者主动打电话沟通,周一再次开了一天复盘总结会。
累计执行了众多方案:

  1. 采集服务器与客户端零信任机制,各自根治隐患
  2. 服务器强化拨测报警机制,对会造成重大故障的系统进行每分钟一次的拨测,在最短时间内发送告警
  3. 客户端排查所有请求代码,填补所有涉及服务器返回的容错代码,一处不漏(已于19日当晚加班发版)
    以后即便网络服务再被攻击,也100%确保不会闪退。
  4. 与受影响的开发者主动沟通
    此次故障给开发者造成的损失,我们感同身受。大家都是写代码的,都会被客户和领导责问。虽然故障时间只有20分钟,但发生这样的事情,肯定会给一些开发者造成损失,并破坏开发者对DCloud的信心。
    DCloud工程师主动联系了受影响的开发者,有些开发者电话或论坛私信未回,除了回复我们电话或私信外,也可以主动加QQ:154419462。
    我们会尽所能帮助开发者减少事故的影响,磋商令开发者可持续信任的方案。

针对本帖中开发者的热点评论,答复如下:

  • 关于源码:uni小程序sdk,面向大开发商,一直都有签署保密协议后获取源码的机制。如果你是政府机构或知名企业,可以发送邮件到bd@dcloud.io申请。

  • 关于后续App启动时间采集,也会改进策略,新增打点转向uniCloud版本和私有化版本,uni统计会开源并提供uni-admin插件,具体方案稍后公布。

  • 云打包和离线打包没有本质区别。云打包使用安心打包时,不会向DCloud服务器发送代码;即便不用安心打包,使用普通云打包,发送的仅是uni-app编译后的wgt,也不是源码,而且DCloud服务器不保存这些wgt。这些都在用户协议里明确说明了,DCloud不会违反用户协议,而且对这些wgt包也没有兴趣。

多年来,DCloud一直坚持为开发者提供免费、高效的开发工具的初心和使命,持续为开发者赋能。

DCloud初心不变,也希望大家继续信任DCloud!

继续阅读 »

各位开发者,

很遗憾的告知大家,DCloud服务在2021年11月19日下午遭遇大流量网络攻击,触发了iOS客户端的一个隐藏Bug,导致部分iOS设备上App引擎崩溃。

故障发生后,DCloud的工程师高度紧张,全力投入,在20分钟内将DCloud服务恢复正常,开发者的iOS App也随即恢复正常。

DCloud并非不负责任,也并非无能的公司。众多工程师仔细讨论,如何彻底杜绝将来再次发生类似故障,我们采取了如下完善措施:

  1. 服务器端技术专家组紧急集合,逐条确认服务器端的安全防控措施;补充说明:DCloud开发者服务已通过国家信息安全等级保护三级,证书编号:11010813802-20001;
  2. iOS App引擎当晚发布紧急更新,解决该隐藏漏洞。并检查了所有服务器返回数据的代码,确保以后即便服务器异常也不会造成App引擎崩溃;建议开发者尽快升级HBuilderX或离线打包SDK。

原因详细解释

  1. DCloud数据采集的目的
    为了持续优化应用性能、质量及提供统计报表,基于DCloud引擎开发的App,在运行过程中会采集应用启动时间、异常错误日志这两方面的数据。
    因为开发者的js代码无法正常采集到这些信息,比如启动时间,开发者的js代码能打点的第一行代码,已经是app运行了一会后才发生的事情了;崩溃更是如此,app崩溃时js也无法运行和打点数据。但这些信息又对于优化应用有重要参考意义。
    另外其他适配原生应用的统计sdk也不能正常统计到这2个信息,它们无法准确记录从app启动到首屏webview渲染的启动时间。
    这些数据,一方面用于DCloud优化产品,比如查看在哪些设备上启动慢或崩溃率高;另一方面,DCloud也给开发者提供了web界面自助查看这些数据,帮助开发者了解运营情况,详见dev.dcloud.net.cn。
  2. DCloud数据采集的合规性
    DCloud数据采集内容在HBuilder用户许可协议(菜单帮助-许可协议)和DCloud引擎隐私文档(Android平台iOS平台)中均有明确说明。
    这些数据的采集规则和脱敏策略符合中国各大应用商店规范和个人信息保护法,基于DCloud引擎开发的合法App,均可正常上线应用商店。
    DCloud通过了国家信息安全等级保护三级,证书编号:11010813802-20001,相关数据的保护措施完备。
    DCloud并非大数据公司,对采集用户个人隐私、开发者代码都没有兴趣。
  3. 如果仅是采集数据,没有返回内容,怎么会导致闪退?
    DCloud服务器会返回deviceID,因为现在手机上获取imei等唯一标记越来越困难,手机端app权限设置变化一次都可能导致设备id变化。为了尽可能保持标记统一性,由DCloud服务器计算一个更准确的deviceID。
    19日下午DCloud服务遭受恶意攻击后,无法给客户端返回预期格式的deviceID,iOS相关代码容错不合理造成了闪退。
  4. 影响面
    11月19日下午,iOS引擎,在异常的那20分钟内启动iOS app无法成功。之前启动,在那20分钟内使用的客户不会受影响。对开发者的波及面是比较有限的。

解决方案

在事故发生后,DCloud成立了专案组,首先应急解决了服务端故障,然后周五下午开会讨论治根方案,周六日与受影响的开发者主动打电话沟通,周一再次开了一天复盘总结会。
累计执行了众多方案:

  1. 采集服务器与客户端零信任机制,各自根治隐患
  2. 服务器强化拨测报警机制,对会造成重大故障的系统进行每分钟一次的拨测,在最短时间内发送告警
  3. 客户端排查所有请求代码,填补所有涉及服务器返回的容错代码,一处不漏(已于19日当晚加班发版)
    以后即便网络服务再被攻击,也100%确保不会闪退。
  4. 与受影响的开发者主动沟通
    此次故障给开发者造成的损失,我们感同身受。大家都是写代码的,都会被客户和领导责问。虽然故障时间只有20分钟,但发生这样的事情,肯定会给一些开发者造成损失,并破坏开发者对DCloud的信心。
    DCloud工程师主动联系了受影响的开发者,有些开发者电话或论坛私信未回,除了回复我们电话或私信外,也可以主动加QQ:154419462。
    我们会尽所能帮助开发者减少事故的影响,磋商令开发者可持续信任的方案。

针对本帖中开发者的热点评论,答复如下:

  • 关于源码:uni小程序sdk,面向大开发商,一直都有签署保密协议后获取源码的机制。如果你是政府机构或知名企业,可以发送邮件到bd@dcloud.io申请。

  • 关于后续App启动时间采集,也会改进策略,新增打点转向uniCloud版本和私有化版本,uni统计会开源并提供uni-admin插件,具体方案稍后公布。

  • 云打包和离线打包没有本质区别。云打包使用安心打包时,不会向DCloud服务器发送代码;即便不用安心打包,使用普通云打包,发送的仅是uni-app编译后的wgt,也不是源码,而且DCloud服务器不保存这些wgt。这些都在用户协议里明确说明了,DCloud不会违反用户协议,而且对这些wgt包也没有兴趣。

多年来,DCloud一直坚持为开发者提供免费、高效的开发工具的初心和使命,持续为开发者赋能。

DCloud初心不变,也希望大家继续信任DCloud!

收起阅读 »

竞拍商城抢购商品系统APP定制开发公司

竞拍商城抢购商品系统APP定制开发公司,咨询(张13O微66O电29294)
一、邀请好友
邀请守友或其他用户参与拍卖出价成功并被其他用户加价超越的,邀清请人可以获得加价阶梯3%的返利红包,若越清的用户终竞拍成功,遨请人可获得终成交价1%的返利红包,返利红包即时到达用户的账户余额中,可随时
二、赠送积分
竞拍成功用户在支付拍品尾款后,可以获得平台赠送的积分,用户积分可在拍卖竞拍[我的]页面中查询。
三、竞拍声明
拄卖竞柏坚持公开、公平、公正原则,禁止用户使用一切非本人点击出价的一切手段和方法,禁止使用外挂接口或一切破环公平出价的手段和方法。一经发现,拍卖竞拍将会立即把涉事用户拉入黑名
单,情节严重的,平台将采取包括但不限于查封账户、停止
、**出价红包等保护措施,直至报送馨方追究刑事责任。
四、竞拍保证金
用户参与竞拍时,需冻结当前出价价格20%的保证金,当用户出价被其他用户超越时,保证金立即实时解冻。保证金不足的,无法获得竞拍贲格。
五、积分使用
用户积分可在积分商斯中的“寄拍区”和“兑换区”里换购商品。在“寄拍区
中换陶的客拍商品可以委托拍卖竞拍进行拍卖在“兑换区”里换吭的商品将免费0元获得,并在用户换购商品后的5个工
日内发货。
参与竞拍
用户在拍卖竞拍平台参与竞拍,表示用户已充分了解并接受拍卖竞拍平台的拍卖规则和拍品的详细情况。用户出价成功表示用户在所出价格下接受拍品的一切现状。
六、出价红包
用户每次出价成功并被其他用户加价超越时,可以获得加价阶梯10%的出价红包,该红包即时到达用户的账户余额中,可随时可以再次参与竞拍活动。

七.拍卖竞拍拍卖采用英格兰式拍卖模式,所有拍品均从起拍价起拍,竞价按约定的增幅进行,逐次由低至高出价。拍卖出价时,的出价者不可以继续出价。拍卖结束时,出价高者竞价成功。

八、交易判定
拍卖结束时,用户须在拍卖结束后的24小时内支付拍品成交价80%的尾款,逾期未支付的,冻结的保证金将作为违约金被扣除。九、拍品交割
用户竞拍成功购得的拍品,平台于收到用户支付尾款后的5个工作日内发货,用户可在拍卖竞拍[我的]页面查询拍品物流信息。
十、拍品披露
拍卖竞拍所有拍品在平台预展2天,平台尽大可能披露拍品详细信息,闲户在预展期间应认真阅读和审核拍品信息。用户参与竞拍即表明用户已充分了解并接受拍品的一切现状。十一、参与竞拍

继续阅读 »

竞拍商城抢购商品系统APP定制开发公司,咨询(张13O微66O电29294)
一、邀请好友
邀请守友或其他用户参与拍卖出价成功并被其他用户加价超越的,邀清请人可以获得加价阶梯3%的返利红包,若越清的用户终竞拍成功,遨请人可获得终成交价1%的返利红包,返利红包即时到达用户的账户余额中,可随时
二、赠送积分
竞拍成功用户在支付拍品尾款后,可以获得平台赠送的积分,用户积分可在拍卖竞拍[我的]页面中查询。
三、竞拍声明
拄卖竞柏坚持公开、公平、公正原则,禁止用户使用一切非本人点击出价的一切手段和方法,禁止使用外挂接口或一切破环公平出价的手段和方法。一经发现,拍卖竞拍将会立即把涉事用户拉入黑名
单,情节严重的,平台将采取包括但不限于查封账户、停止
、**出价红包等保护措施,直至报送馨方追究刑事责任。
四、竞拍保证金
用户参与竞拍时,需冻结当前出价价格20%的保证金,当用户出价被其他用户超越时,保证金立即实时解冻。保证金不足的,无法获得竞拍贲格。
五、积分使用
用户积分可在积分商斯中的“寄拍区”和“兑换区”里换购商品。在“寄拍区
中换陶的客拍商品可以委托拍卖竞拍进行拍卖在“兑换区”里换吭的商品将免费0元获得,并在用户换购商品后的5个工
日内发货。
参与竞拍
用户在拍卖竞拍平台参与竞拍,表示用户已充分了解并接受拍卖竞拍平台的拍卖规则和拍品的详细情况。用户出价成功表示用户在所出价格下接受拍品的一切现状。
六、出价红包
用户每次出价成功并被其他用户加价超越时,可以获得加价阶梯10%的出价红包,该红包即时到达用户的账户余额中,可随时可以再次参与竞拍活动。

七.拍卖竞拍拍卖采用英格兰式拍卖模式,所有拍品均从起拍价起拍,竞价按约定的增幅进行,逐次由低至高出价。拍卖出价时,的出价者不可以继续出价。拍卖结束时,出价高者竞价成功。

八、交易判定
拍卖结束时,用户须在拍卖结束后的24小时内支付拍品成交价80%的尾款,逾期未支付的,冻结的保证金将作为违约金被扣除。九、拍品交割
用户竞拍成功购得的拍品,平台于收到用户支付尾款后的5个工作日内发货,用户可在拍卖竞拍[我的]页面查询拍品物流信息。
十、拍品披露
拍卖竞拍所有拍品在平台预展2天,平台尽大可能披露拍品详细信息,闲户在预展期间应认真阅读和审核拍品信息。用户参与竞拍即表明用户已充分了解并接受拍品的一切现状。十一、参与竞拍

收起阅读 »

济南拍卖商城系统APP开发-古董书法竞价平台定制开发

济南拍卖商城系统APP开发-古董书法竞价平台定制开发,咨询(张13O微66O电29294)拍卖商城系统APP开发-古董书法竞价平台定制开发
竞拍商城系统支持APP版、小程序、公众号版环境运行,适合古董玉器、书法绘图、海报集邮、珍贵异宝等商品拍卖。

程序采用tp框架开发完全开源,支持二开。如需要减少开发成本,又想做运营发展的客户可购买源码服务。

海之恋竞拍商城,竞拍与购物深度结合的新体验

显示抢购竞拍购物热度无需再多描述,打破常规企业开源版功能,模块早已成功商用。

继续阅读 »

济南拍卖商城系统APP开发-古董书法竞价平台定制开发,咨询(张13O微66O电29294)拍卖商城系统APP开发-古董书法竞价平台定制开发
竞拍商城系统支持APP版、小程序、公众号版环境运行,适合古董玉器、书法绘图、海报集邮、珍贵异宝等商品拍卖。

程序采用tp框架开发完全开源,支持二开。如需要减少开发成本,又想做运营发展的客户可购买源码服务。

海之恋竞拍商城,竞拍与购物深度结合的新体验

显示抢购竞拍购物热度无需再多描述,打破常规企业开源版功能,模块早已成功商用。

收起阅读 »

list-waterfall 组件实战分享,含代码

swiper list

不多说直接上完整代码看效果,关键点都有注释,觉得有用的点个赞

核心组件 list-waterfall

<template>  
  <list class="scroll" :id="pageId" fix-freezing>  
    <slot name="refresh"></slot>  
    <cell ref="head">  
      <slot name="header"></slot>  
    </cell>  
    <cell :style="{ height: pageHeight }" @appear="setEffects">  
      <slot name="sticky"></slot>  
      <waterfall  
        ref="waterfall"  
        class="scroll"  
        fix-freezing  
        :bounce="false"  
        :show-scrollbar="false"  
        :left-gap="gap32"  
        :right-gap="gap32"  
        :column-gap="gap24"  
        :column-width="colWidth"  
        :column-count="colCount"  
        v-bind="$attrs"  
      >  
        <slot name="default"></slot>  
        <slot name="footer"></slot>  
      </waterfall>  
    </cell>  
  </list>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      pageId: `page-id-${Date.now()}`,  
      headHeight: null,  
      pageHeight: null,  
      gap32: uni.upx2px(32),  
      gap24: uni.upx2px(24),  
      colWidth: uni.upx2px(331),  
      colCount: 2,  
    }  
  },  
  async mounted() {  
    const sys = uni.getSystemInfoSync()  
    const rect = await getComponentRect(this.$refs.head)  
    this.headHeight = rect.height  
    this.pageHeight = sys.windowHeight - rect.top  
    this.setEffects()  
  },  
  methods: {  
    async setEffects() {  
      const id = this.pageId  
      const headerHeight = Math.round(this.headHeight)  
      await this.$nextTick()  
      this.$refs.waterfall.setSpecialEffects({ id, headerHeight })  
    },  
  },  
}  

const dom = weex.requireModule('dom')  

function getComponentRect(ref) {  
  return new Promise((resolve, reject) => {  
    dom.getComponentRect(ref, res => {  
      return res.result ? resolve(res.size) : reject(res.result)  
    })  
  })  
}  
</script>  

<style lang="scss" scoped>  
.scroll {  
  position: relative;  
  flex: 1;  
  width: 750rpx;  
}  
</style>

业务使用

<template>  
  <list-waterfall class="page">  
    <template v-slot:header>  
      <view class="header" />  
    </template>  
    <template v-slot:sticky>  
      <view class="sticky" />  
    </template>  
    <cell v-for="idx in 20" :key="idx">  
      <text class="cell">{{ idx }}</text>  
    </cell>  
    <template v-slot:footer>  
      <text class="footer">没有更多内容啦</text>  
    </template>  
  </list-waterfall>  
</template>  

<script>  
import ListWaterfall from './list-waterfall.vue'  

export default {  
  components: {  
    ListWaterfall,  
  },  
}  
</script>  

<style lang="scss" scoped>  
.page {  
  background: #f6f8f9;  
}  

.header {  
  height: 600rpx;  
  background: rgba(green, 0.1);  
}  

.sticky {  
  height: 88rpx;  
  background: rgba(blue, 0.1);  
}  

.cell {  
  margin-top: 24rpx;  
  width: 331rpx;  
  height: 331rpx;  
  border-radius: 20rpx;  
  background: white;  
  // 文字样式  
  color: #333;  
  font-size: 28rpx;  
  line-height: 331rpx;  
  text-align: center;  
}  

.footer {  
  padding-top: 24rpx;  
  padding-bottom: 24rpx;  
  // 文字样式  
  color: #999;  
  font-size: 24rpx;  
  line-height: 36rpx;  
  text-align: center;  
}  
</style>
继续阅读 »

不多说直接上完整代码看效果,关键点都有注释,觉得有用的点个赞

核心组件 list-waterfall

<template>  
  <list class="scroll" :id="pageId" fix-freezing>  
    <slot name="refresh"></slot>  
    <cell ref="head">  
      <slot name="header"></slot>  
    </cell>  
    <cell :style="{ height: pageHeight }" @appear="setEffects">  
      <slot name="sticky"></slot>  
      <waterfall  
        ref="waterfall"  
        class="scroll"  
        fix-freezing  
        :bounce="false"  
        :show-scrollbar="false"  
        :left-gap="gap32"  
        :right-gap="gap32"  
        :column-gap="gap24"  
        :column-width="colWidth"  
        :column-count="colCount"  
        v-bind="$attrs"  
      >  
        <slot name="default"></slot>  
        <slot name="footer"></slot>  
      </waterfall>  
    </cell>  
  </list>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      pageId: `page-id-${Date.now()}`,  
      headHeight: null,  
      pageHeight: null,  
      gap32: uni.upx2px(32),  
      gap24: uni.upx2px(24),  
      colWidth: uni.upx2px(331),  
      colCount: 2,  
    }  
  },  
  async mounted() {  
    const sys = uni.getSystemInfoSync()  
    const rect = await getComponentRect(this.$refs.head)  
    this.headHeight = rect.height  
    this.pageHeight = sys.windowHeight - rect.top  
    this.setEffects()  
  },  
  methods: {  
    async setEffects() {  
      const id = this.pageId  
      const headerHeight = Math.round(this.headHeight)  
      await this.$nextTick()  
      this.$refs.waterfall.setSpecialEffects({ id, headerHeight })  
    },  
  },  
}  

const dom = weex.requireModule('dom')  

function getComponentRect(ref) {  
  return new Promise((resolve, reject) => {  
    dom.getComponentRect(ref, res => {  
      return res.result ? resolve(res.size) : reject(res.result)  
    })  
  })  
}  
</script>  

<style lang="scss" scoped>  
.scroll {  
  position: relative;  
  flex: 1;  
  width: 750rpx;  
}  
</style>

业务使用

<template>  
  <list-waterfall class="page">  
    <template v-slot:header>  
      <view class="header" />  
    </template>  
    <template v-slot:sticky>  
      <view class="sticky" />  
    </template>  
    <cell v-for="idx in 20" :key="idx">  
      <text class="cell">{{ idx }}</text>  
    </cell>  
    <template v-slot:footer>  
      <text class="footer">没有更多内容啦</text>  
    </template>  
  </list-waterfall>  
</template>  

<script>  
import ListWaterfall from './list-waterfall.vue'  

export default {  
  components: {  
    ListWaterfall,  
  },  
}  
</script>  

<style lang="scss" scoped>  
.page {  
  background: #f6f8f9;  
}  

.header {  
  height: 600rpx;  
  background: rgba(green, 0.1);  
}  

.sticky {  
  height: 88rpx;  
  background: rgba(blue, 0.1);  
}  

.cell {  
  margin-top: 24rpx;  
  width: 331rpx;  
  height: 331rpx;  
  border-radius: 20rpx;  
  background: white;  
  // 文字样式  
  color: #333;  
  font-size: 28rpx;  
  line-height: 331rpx;  
  text-align: center;  
}  

.footer {  
  padding-top: 24rpx;  
  padding-bottom: 24rpx;  
  // 文字样式  
  color: #999;  
  font-size: 24rpx;  
  line-height: 36rpx;  
  text-align: center;  
}  
</style>
收起阅读 »

基于unipp和5+ APP动态模块发布前后端管理开发框架,APP快速开发集成方案

热更新

项目后端vue+java 前端uniapp结合5+进行开发,支持后台可视化

动态配置应用模块,目前兼容url外链的方式以及本地h5包的升级方案,应用版本管理支持用户管理,消息管理,新闻管理,幻灯片配置、用户角色配置,对接第三方用户中心等集成方案,APP支持热更新,集成消息推送等功能,有兴趣的可以联系qq 37894663,支持定制开发 二次开发 等

主要优势:app快速发布,模块迭代发布速度快 适合中大型企业内部业务开展使用

继续阅读 »

项目后端vue+java 前端uniapp结合5+进行开发,支持后台可视化

动态配置应用模块,目前兼容url外链的方式以及本地h5包的升级方案,应用版本管理支持用户管理,消息管理,新闻管理,幻灯片配置、用户角色配置,对接第三方用户中心等集成方案,APP支持热更新,集成消息推送等功能,有兴趣的可以联系qq 37894663,支持定制开发 二次开发 等

主要优势:app快速发布,模块迭代发布速度快 适合中大型企业内部业务开展使用

收起阅读 »

消防应急设备巡检系统APP定制开发公司

消防应急设备巡检系统APP定制开发公司,咨询(张13O-66O-29294)应急救援智慧消防APP开发山东抖米信息科技有限公司,是一家专业互联网+系统整体解决方案提供商。2018年被认定为高新技术企业,双软企业,国际质量管理体系认证。公司秉承“技术驱动商业未来”的发展理念,在技术研发、产品质量上精益求精。

专业人找专业公司做专业软件,安全的用单设备,实时监控

通过“智慧消防APP”的消防巡查功能,用户可以在巡查过程中,直观的看到单位中那些地方是应该检查的,并且通过扫描这种身份标识的同时将检查信息记录。个人与领导都可以对检查工作情况一目了然。“智慧消防APP”为了应对不同行业、社会单位、检查人员的不同需求,还针对消防法规中规定的每个消防设施或重点部位,都对应了相应的的检查标准,巡查人员通过下载智慧消防APP,即可扫描消防设备处张贴的NFC身份标签,查看相应的检查标准,通过“智慧消防APP”这一智慧型软件进行对应位置的检查。

继续阅读 »

消防应急设备巡检系统APP定制开发公司,咨询(张13O-66O-29294)应急救援智慧消防APP开发山东抖米信息科技有限公司,是一家专业互联网+系统整体解决方案提供商。2018年被认定为高新技术企业,双软企业,国际质量管理体系认证。公司秉承“技术驱动商业未来”的发展理念,在技术研发、产品质量上精益求精。

专业人找专业公司做专业软件,安全的用单设备,实时监控

通过“智慧消防APP”的消防巡查功能,用户可以在巡查过程中,直观的看到单位中那些地方是应该检查的,并且通过扫描这种身份标识的同时将检查信息记录。个人与领导都可以对检查工作情况一目了然。“智慧消防APP”为了应对不同行业、社会单位、检查人员的不同需求,还针对消防法规中规定的每个消防设施或重点部位,都对应了相应的的检查标准,巡查人员通过下载智慧消防APP,即可扫描消防设备处张贴的NFC身份标签,查看相应的检查标准,通过“智慧消防APP”这一智慧型软件进行对应位置的检查。

收起阅读 »

线上潮流盲盒商城类APP定制源码开发公司

线上潮流盲盒商城类APP定制源码开发公司,开发(张13O-66O-29294微电),福玩盲盒模式app源码开发,福玩盲盒模式软件开发,福玩盲盒模式项目开发,福玩盲盒系统小程序开发,福玩盲盒平台搭建。
福玩app软件优势
1、所有商品都是有进行严格的审核,购买安全可靠;
2、通过在游戏的环节的胜出,可以让用户得到更多的实物奖励;
3、购买到的商品都是性价比十分高的品质商品,尽享潮流生活。
福玩app软件评价
1、潮流开箱惊喜不停,每次开启福箱,都是一次惊喜的过程;
2、迎新送福,直抽豪礼,新用户在线注册是可以得到更加丰富的好礼相送;
3、100%都是正品商品,权威鉴别,正品保障,购买十分的放心。
我们专注于APP、小程序、公众号等移动互联网产品的开发,案例丰富,技术成熟,公司凭借过硬的技术实力为企业在移动互联网时代树立形象、强化品牌,转型专属自己的移动互联网解决方案提供完善的技术支持。成立以来公司秉承诚信立业、合创未来的企业价值观不断的为客户创造价值,为员工提高福利,为社会做出贡献。

继续阅读 »

线上潮流盲盒商城类APP定制源码开发公司,开发(张13O-66O-29294微电),福玩盲盒模式app源码开发,福玩盲盒模式软件开发,福玩盲盒模式项目开发,福玩盲盒系统小程序开发,福玩盲盒平台搭建。
福玩app软件优势
1、所有商品都是有进行严格的审核,购买安全可靠;
2、通过在游戏的环节的胜出,可以让用户得到更多的实物奖励;
3、购买到的商品都是性价比十分高的品质商品,尽享潮流生活。
福玩app软件评价
1、潮流开箱惊喜不停,每次开启福箱,都是一次惊喜的过程;
2、迎新送福,直抽豪礼,新用户在线注册是可以得到更加丰富的好礼相送;
3、100%都是正品商品,权威鉴别,正品保障,购买十分的放心。
我们专注于APP、小程序、公众号等移动互联网产品的开发,案例丰富,技术成熟,公司凭借过硬的技术实力为企业在移动互联网时代树立形象、强化品牌,转型专属自己的移动互联网解决方案提供完善的技术支持。成立以来公司秉承诚信立业、合创未来的企业价值观不断的为客户创造价值,为员工提高福利,为社会做出贡献。

收起阅读 »

HBuilderX 下载后打开闪退

windows: http://ask.dcloud.net.cn/article/35583
mac:http://ask.dcloud.net.cn/article/35756
以上网址中的方法全都试了一遍,没有解决启动闪退的问题
最后发现是解压的问题,一开始用的电脑自带的解压缩,换了解压缩软件解压就可以正常打开了。

继续阅读 »

windows: http://ask.dcloud.net.cn/article/35583
mac:http://ask.dcloud.net.cn/article/35756
以上网址中的方法全都试了一遍,没有解决启动闪退的问题
最后发现是解压的问题,一开始用的电脑自带的解压缩,换了解压缩软件解压就可以正常打开了。

收起阅读 »

关于uni的IOS白屏产生和优化策略

html5plus

产生

任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃。引用

优化策略

使用ES6的async、await、Promise执行异步转同步。该方法改自引用

reloadCurrentPage: async (self, isTab = true) => {    
        // #ifdef APP-PLUS  
        let { route, options } = self.$scope  
        var url = '/' + route  
        if (options && options.data) {  
            url += '?data=' + options.data  
        }  

        const query = uni.createSelectorQuery().in(self);  
        let number = 30 // 最大获取节点次数  
        let data = await new Promise(async (resolve) => {  
            clearInterval(interval)  
            interval = setInterval(async () => {  
                let result = await new Promise(r => {  
                    query.select('.x-container').fields({ size: true }, d => {  
                        r(d)  
                    }).exec()  
                })  
                if (result || number <= 0) {  
                    clearInterval(interval)  
                    resolve(result)  
                }  
                number--  
            }, 100) // 每次获取节点频率  
        })  
         // 当无法获取节点时执行重载页面  
         if (!data) {  
            if (isTab) {  
                uni.reLaunch({ url })  
            } else {  
                uni.redirectTo({ url })  
            }  
        }  
        // #endif    
    }  
继续阅读 »

产生

任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃。引用

优化策略

使用ES6的async、await、Promise执行异步转同步。该方法改自引用

reloadCurrentPage: async (self, isTab = true) => {    
        // #ifdef APP-PLUS  
        let { route, options } = self.$scope  
        var url = '/' + route  
        if (options && options.data) {  
            url += '?data=' + options.data  
        }  

        const query = uni.createSelectorQuery().in(self);  
        let number = 30 // 最大获取节点次数  
        let data = await new Promise(async (resolve) => {  
            clearInterval(interval)  
            interval = setInterval(async () => {  
                let result = await new Promise(r => {  
                    query.select('.x-container').fields({ size: true }, d => {  
                        r(d)  
                    }).exec()  
                })  
                if (result || number <= 0) {  
                    clearInterval(interval)  
                    resolve(result)  
                }  
                number--  
            }, 100) // 每次获取节点频率  
        })  
         // 当无法获取节点时执行重载页面  
         if (!data) {  
            if (isTab) {  
                uni.reLaunch({ url })  
            } else {  
                uni.redirectTo({ url })  
            }  
        }  
        // #endif    
    }  
收起阅读 »

navite.js 检测悬浮窗权限并且打开设置。 用于视频通话缩小后 悬浮窗

export function check_overlays() {  
  const isIos = uni.getSystemInfoSync().platform == 'ios'  
  const android_overlays = () => {  
    var main = plus.android.runtimeMainActivity()  
    var pkName = main.getPackageName()  
    var Settings = plus.android.importClass('android.provider.Settings')  
    var Uri = plus.android.importClass('android.net.Uri')  
    var Build = plus.android.importClass('android.os.Build')  
    var Intent = plus.android.importClass('android.content.Intent')  
    var intent = new Intent(  
      'android.settings.action.MANAGE_OVERLAY_PERMISSION',  
      Uri.parse('package:' + pkName)  
    )  
    // main.startActivityForResult(intent, 5004);  
    if (!Settings.canDrawOverlays(main)) {  
      // 检测悬浮窗  
      uni.showModal({  
        title: '温馨提示',  
        content: '请先打开悬浮窗权限,不开启将会造成通话异常',  
        showCancel: true,  
        success: function(res) {  
          if (res.confirm) {  
            main.startActivityForResult(intent, 5004) // 转跳到悬浮窗设置  
          }  
        }  
      })  
    }  
  }  
  const ios_overlays = () => {  
    // 有空在写  
    // var UIApplication = plus.ios.import("UIApplication");  
    // var app = UIApplication.sharedApplication();  
    // var enabledTypes  = 0;  
  }  
  return !isIos ? android_overlays() : ios_overlays()  
}  
继续阅读 »
export function check_overlays() {  
  const isIos = uni.getSystemInfoSync().platform == 'ios'  
  const android_overlays = () => {  
    var main = plus.android.runtimeMainActivity()  
    var pkName = main.getPackageName()  
    var Settings = plus.android.importClass('android.provider.Settings')  
    var Uri = plus.android.importClass('android.net.Uri')  
    var Build = plus.android.importClass('android.os.Build')  
    var Intent = plus.android.importClass('android.content.Intent')  
    var intent = new Intent(  
      'android.settings.action.MANAGE_OVERLAY_PERMISSION',  
      Uri.parse('package:' + pkName)  
    )  
    // main.startActivityForResult(intent, 5004);  
    if (!Settings.canDrawOverlays(main)) {  
      // 检测悬浮窗  
      uni.showModal({  
        title: '温馨提示',  
        content: '请先打开悬浮窗权限,不开启将会造成通话异常',  
        showCancel: true,  
        success: function(res) {  
          if (res.confirm) {  
            main.startActivityForResult(intent, 5004) // 转跳到悬浮窗设置  
          }  
        }  
      })  
    }  
  }  
  const ios_overlays = () => {  
    // 有空在写  
    // var UIApplication = plus.ios.import("UIApplication");  
    // var app = UIApplication.sharedApplication();  
    // var enabledTypes  = 0;  
  }  
  return !isIos ? android_overlays() : ios_overlays()  
}  
收起阅读 »

交友盲盒现在还能做吗?赚钱吗?脱单盲盒怎么推广?脱单盲盒什么费用,小程序怎么做

小编发现近期,“脱单盲盒”、“脱单便利店”成为互联网上的热门话题。在小视频平台上很多名称为“月老办事处”、盲盒交友的“地摊”视频帐号上,我们可以看到盲盒交友的模式就是类似摆放着两个装着卡片的盒子,里面有许多男生和女生的联系方式,你只需要花1元钱,就能拿走异性的联系方式,或者留下自己的,这样的线下模式转化成线上的模式,这种新型的交友方式叫“脱单盲盒”,用拆盲盒的方式来匹配交友信息,时下正风靡年轻群体。适合更多的商家用来推广和宣传,那么这样的盲盒交友怎么做呢。

1,现在大龄青年的人数越来越多,很多人表示恐婚恐恋,但是又希望找到自己的人生伴侣,但是又抱着宁缺毋滥的想法拒绝家人朋友的介绍,这样恰恰给了盲盒交友更多的便利,所以盲盒交友怎么做的方法渐渐成为当下年轻人对脱单和交友的需求,而且盲盒交友的模式对于商家来说只需要设置一元、两元、三元,就可以获得对方的交友信息,或者自愿付费放入自己的交友信息,低价可以让用户更主动一点。
2,我们现在的盲盒交友方式也可以叫脱单便利店,适合线上线下使用,许多商家把盲盒交友模式从线下做到了线上,这样便捷、成本更低,我们只要有认证服务号就可以制作,我们还需要微人家平台的盲盒交友模版,通过微人家平台的盲盒交友模版就可以解决盲盒交友怎么做,而且可以快速制作出属于我们自己的盲盒交友变现软件,然后就可以把盲盒交友软件放入我们的自定义菜单或者生成海报二维码进行线下使用。
3,盲盒交友的新模式都是本着自愿原则,在盲盒交友怎么做的后台设置放入纸条和抽取纸条的价格的时候,商家可以自定义,我们在设置页面只需要打开参数设置部分,把活动页面的基本信息设置完成,注意的地方是玩家须知这部分,需要编辑好使用盲盒交友的规则和注意事项,其次就是设置收费和分销,设置放入和抽取纸条的价格和加入分销商的价格,最后上传好活动图片即可保存。我们可以通过业务菜单中的管理菜单进行管理活动,比如纸条管理、用户管理、分销管理等等,以上就是盲盒交友怎么做的教程,欢迎大家转载阅读,更多盲盒交友怎么做的相关文章请关注小编后续更新。

抖音小程序

微信表情包付费群

微信废品回收小程序

抖音爆店码

微信小程序免费试用平台

社区团购小程序

微信付费进群

微信付费阅读小程序

微信试看30秒视频在哪做

公众号视频收费

继续阅读 »

小编发现近期,“脱单盲盒”、“脱单便利店”成为互联网上的热门话题。在小视频平台上很多名称为“月老办事处”、盲盒交友的“地摊”视频帐号上,我们可以看到盲盒交友的模式就是类似摆放着两个装着卡片的盒子,里面有许多男生和女生的联系方式,你只需要花1元钱,就能拿走异性的联系方式,或者留下自己的,这样的线下模式转化成线上的模式,这种新型的交友方式叫“脱单盲盒”,用拆盲盒的方式来匹配交友信息,时下正风靡年轻群体。适合更多的商家用来推广和宣传,那么这样的盲盒交友怎么做呢。

1,现在大龄青年的人数越来越多,很多人表示恐婚恐恋,但是又希望找到自己的人生伴侣,但是又抱着宁缺毋滥的想法拒绝家人朋友的介绍,这样恰恰给了盲盒交友更多的便利,所以盲盒交友怎么做的方法渐渐成为当下年轻人对脱单和交友的需求,而且盲盒交友的模式对于商家来说只需要设置一元、两元、三元,就可以获得对方的交友信息,或者自愿付费放入自己的交友信息,低价可以让用户更主动一点。
2,我们现在的盲盒交友方式也可以叫脱单便利店,适合线上线下使用,许多商家把盲盒交友模式从线下做到了线上,这样便捷、成本更低,我们只要有认证服务号就可以制作,我们还需要微人家平台的盲盒交友模版,通过微人家平台的盲盒交友模版就可以解决盲盒交友怎么做,而且可以快速制作出属于我们自己的盲盒交友变现软件,然后就可以把盲盒交友软件放入我们的自定义菜单或者生成海报二维码进行线下使用。
3,盲盒交友的新模式都是本着自愿原则,在盲盒交友怎么做的后台设置放入纸条和抽取纸条的价格的时候,商家可以自定义,我们在设置页面只需要打开参数设置部分,把活动页面的基本信息设置完成,注意的地方是玩家须知这部分,需要编辑好使用盲盒交友的规则和注意事项,其次就是设置收费和分销,设置放入和抽取纸条的价格和加入分销商的价格,最后上传好活动图片即可保存。我们可以通过业务菜单中的管理菜单进行管理活动,比如纸条管理、用户管理、分销管理等等,以上就是盲盒交友怎么做的教程,欢迎大家转载阅读,更多盲盒交友怎么做的相关文章请关注小编后续更新。

抖音小程序

微信表情包付费群

微信废品回收小程序

抖音爆店码

微信小程序免费试用平台

社区团购小程序

微信付费进群

微信付费阅读小程序

微信试看30秒视频在哪做

公众号视频收费

收起阅读 »