HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

二、组件开发兼容性测试之获取$parent,$children

兼容性

上一篇我们文章测试了created,mounted,watch,computed的执行顺序。

这篇文章我们来测试不同平台,在子组件中获取$parent,在父组件中获取$children。因为这种操作,在组件库中出现的频率非常之高

话不多说,我们的测试依然在这几个平台中进行。

这次我们分别在父组件和子组件中的created,mounted,computed,watch中获取parent和children。

H5:

微信小程序:

百度小程序:

支付宝小程序:

字节小程序:

QQ小程序:

飞书小程序:

快应用:

总结:

H5:

one组件的computed,watch,created无法获取子组件实例,但是mounted可以获取到。
two组件的created,mounted,computed,watch都可以获取到父组件的实例。

微信小程序:

和H5一致。

百度小程序:

可以看到,由于执行顺序原因,父组件全部无法获取到子组件的实例,这里的解决办法我们后续再说。
而子组件全部可以获取到父组件实例。

支付宝小程序:

与H5,微信小程序一致。

字节小程序:

字节小程序在父组件中全部无法获取子组件实例。值得一提的是,在子组件中,computed,watch也无法获取到父组件,只能在created和mounted中获取。

QQ小程序:

与H5,微信小程序,支付宝小程序一致。

飞书小程序:

与字节小程序完全一致。

快应用

与字节小程序,飞书小程序完全一致。

可以看到,在不同平台中获取parent,children都不一致。那么,我们如何在编写组件时合理的规避不同平台的差异呢?

首先,我们在子组件获取富足监事,保险起见,我们应该在mounted中来获取父组件实例。

那么,在父组件中获取子组件时,我们又该怎么做呢?

当然,我们首先想到的是,用refs。但是在组件库中,我们应该考虑用户的体验。而子组件又是通过插槽的形式注入到父组件中,所以,refs显然不能出现在组件库中,只能由用户主动去编写。许多vue大型组件库中,也是使用parent和children的操作。难道真的没有办法了吗?

这里我的解决办法是,子组件渲染完成后去通知父组件,并且带上该子组件的实例。也就是在子组件的mounted中,通过emit通知父组件,父组件on监听,然后就可以获取到了。

uni.$on("childrenReady", (children) => {  
    console.log("============监听子组件加载完成=============", children);  
})  

uni.$emit("childrenReady", this);

最后我们看一下执行结果:

H5:

微信小程序:

百度小程序:

支付宝小程序:

字节小程序:

QQ小程序:

飞书小程序:

快应用:

可以看到,这种方法兼容全端。

那这次的测试就告一段落了,接下来我们测试组件开发的必备,也就是组件样式穿透。

继续阅读 »

上一篇我们文章测试了created,mounted,watch,computed的执行顺序。

这篇文章我们来测试不同平台,在子组件中获取$parent,在父组件中获取$children。因为这种操作,在组件库中出现的频率非常之高

话不多说,我们的测试依然在这几个平台中进行。

这次我们分别在父组件和子组件中的created,mounted,computed,watch中获取parent和children。

H5:

微信小程序:

百度小程序:

支付宝小程序:

字节小程序:

QQ小程序:

飞书小程序:

快应用:

总结:

H5:

one组件的computed,watch,created无法获取子组件实例,但是mounted可以获取到。
two组件的created,mounted,computed,watch都可以获取到父组件的实例。

微信小程序:

和H5一致。

百度小程序:

可以看到,由于执行顺序原因,父组件全部无法获取到子组件的实例,这里的解决办法我们后续再说。
而子组件全部可以获取到父组件实例。

支付宝小程序:

与H5,微信小程序一致。

字节小程序:

字节小程序在父组件中全部无法获取子组件实例。值得一提的是,在子组件中,computed,watch也无法获取到父组件,只能在created和mounted中获取。

QQ小程序:

与H5,微信小程序,支付宝小程序一致。

飞书小程序:

与字节小程序完全一致。

快应用

与字节小程序,飞书小程序完全一致。

可以看到,在不同平台中获取parent,children都不一致。那么,我们如何在编写组件时合理的规避不同平台的差异呢?

首先,我们在子组件获取富足监事,保险起见,我们应该在mounted中来获取父组件实例。

那么,在父组件中获取子组件时,我们又该怎么做呢?

当然,我们首先想到的是,用refs。但是在组件库中,我们应该考虑用户的体验。而子组件又是通过插槽的形式注入到父组件中,所以,refs显然不能出现在组件库中,只能由用户主动去编写。许多vue大型组件库中,也是使用parent和children的操作。难道真的没有办法了吗?

这里我的解决办法是,子组件渲染完成后去通知父组件,并且带上该子组件的实例。也就是在子组件的mounted中,通过emit通知父组件,父组件on监听,然后就可以获取到了。

uni.$on("childrenReady", (children) => {  
    console.log("============监听子组件加载完成=============", children);  
})  

uni.$emit("childrenReady", this);

最后我们看一下执行结果:

H5:

微信小程序:

百度小程序:

支付宝小程序:

字节小程序:

QQ小程序:

飞书小程序:

快应用:

可以看到,这种方法兼容全端。

那这次的测试就告一段落了,接下来我们测试组件开发的必备,也就是组件样式穿透。

收起阅读 »

一、组件开发兼容性测试之created,mounted,watch,computed执行顺序

兼容性

写在前面:

在一个组件开发之前,我们通常会考虑其兼容性,尤其是像uniapp跨多端开发。很可能会出现不同平台执行顺序不一致的问题,这就导致了我们在某个品台会产生不一样的结果,甚至影响整个程序的执行。于是,我对多家不同的平台进行了常用的生命周期以及watch监听和computed计算属性的测试。 (电脑承受了莫大的压力)

本次测试我们在如下平台进行:

测试中我们将采用组件库常用开发模式的页面>parent>child,注意这里的parent和child是通过插槽注入页面的。测试模拟了常用的 check-box-group check-boxradio-box-group radio-boxtabstab等需要同时存在于页面的测试方法。这些大多出现于组件库。

<test-one>  
        <test-two></test-two>  
</test-one>

以下是测试结果:

H5:

微信小程序

百度小程序

支付宝小程序

字节小程序

QQ小程序

快手小程序

(不支持个人,暂时略过)

飞书小程序

快应用

总结:

我们在页面和组件中都有四个console,分别是created,mounted,watch(第一次就监听),computed
各平台执行顺序如下:

h5::

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > two-mounted > one-mounted > 页面-mounted

微信小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > one-mounted > two-mounted > 页面-mounted (与h5不同的仅仅是one的mounted和two的mounted的执行顺序不同)

百度小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > one-mounted > two-computed > two-watch > two-created > two-mounted > 页面-mounted (与h5,微信不同的是,百度小程序的组件会完全根据顺序执行所有的,而h5,微信无论页面还是组件,mounted始终会最后执行)

支付宝小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > two-mounted > one-mounted > 页面-mounted (竟然和h5完全一致,点赞!!!)

字节小程序 (不测不知道,一测吓一跳。我说之前checkbox,radio,tab...怎么老是字节有问题!!!)

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (可以看到,字节的执行顺序与其他小程序的差异性十分大,完全是按照 computed > watch > created > mounted顺序执行,而无视了组件和页面层级。)

QQ小程序

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > one-mounted > two-mounted > 页面-mounted (不愧是腾讯,QQ的执行顺序与微信完全一样)

快手小程序

(不支持个人,暂时略过)

飞书小程序

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (好吧,和字节小程序的完全一样。。。)

快应用

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (和字节,飞书一致。这是个值得深思的问题。)。

测试告一段落,之后我们会测试获取$parent,$children的操作。

继续阅读 »

写在前面:

在一个组件开发之前,我们通常会考虑其兼容性,尤其是像uniapp跨多端开发。很可能会出现不同平台执行顺序不一致的问题,这就导致了我们在某个品台会产生不一样的结果,甚至影响整个程序的执行。于是,我对多家不同的平台进行了常用的生命周期以及watch监听和computed计算属性的测试。 (电脑承受了莫大的压力)

本次测试我们在如下平台进行:

测试中我们将采用组件库常用开发模式的页面>parent>child,注意这里的parent和child是通过插槽注入页面的。测试模拟了常用的 check-box-group check-boxradio-box-group radio-boxtabstab等需要同时存在于页面的测试方法。这些大多出现于组件库。

<test-one>  
        <test-two></test-two>  
</test-one>

以下是测试结果:

H5:

微信小程序

百度小程序

支付宝小程序

字节小程序

QQ小程序

快手小程序

(不支持个人,暂时略过)

飞书小程序

快应用

总结:

我们在页面和组件中都有四个console,分别是created,mounted,watch(第一次就监听),computed
各平台执行顺序如下:

h5::

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > two-mounted > one-mounted > 页面-mounted

微信小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > one-mounted > two-mounted > 页面-mounted (与h5不同的仅仅是one的mounted和two的mounted的执行顺序不同)

百度小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > one-mounted > two-computed > two-watch > two-created > two-mounted > 页面-mounted (与h5,微信不同的是,百度小程序的组件会完全根据顺序执行所有的,而h5,微信无论页面还是组件,mounted始终会最后执行)

支付宝小程序:

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > two-mounted > one-mounted > 页面-mounted (竟然和h5完全一致,点赞!!!)

字节小程序 (不测不知道,一测吓一跳。我说之前checkbox,radio,tab...怎么老是字节有问题!!!)

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (可以看到,字节的执行顺序与其他小程序的差异性十分大,完全是按照 computed > watch > created > mounted顺序执行,而无视了组件和页面层级。)

QQ小程序

页面-computed > 页面-watch > 页面-created > one-computed > one-watch > one-created > two-computed > two-watch > two-created > one-mounted > two-mounted > 页面-mounted (不愧是腾讯,QQ的执行顺序与微信完全一样)

快手小程序

(不支持个人,暂时略过)

飞书小程序

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (好吧,和字节小程序的完全一样。。。)

快应用

页面-computed > 页面-watch > one-computed > one-watch > two-computed > two-watch > 页面-created > 页面-mounted > one-created > one-mounted > two-created > two-mounted (和字节,飞书一致。这是个值得深思的问题。)。

测试告一段落,之后我们会测试获取$parent,$children的操作。

收起阅读 »

山东消防应急设备巡检系统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
以上网址中的方法全都试了一遍,没有解决启动闪退的问题
最后发现是解压的问题,一开始用的电脑自带的解压缩,换了解压缩软件解压就可以正常打开了。

收起阅读 »