HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

HBuilderX初级安装使用教程

HBuilderX安装使用教程

1. 安装HBuilderX

HBuilderX官网下载地址https://www.dcloud.io/hbuilderx.html

打开网站后,点击Download按钮,弹窗如下:

  • App开发版,包含大部分App开发插件。App开发,指的是手机应用开发。
  • 如果您是初学者开发前端,建议下载 标准版 。后期如果学习App开发,可以到【插件安装】中,安装相关插件

  1. Windows版本,下载的是一个 zip包,需要解压后才能使用。解压软件可以使用:360压缩软件、或7zip压缩软件

  2. 压缩过程,不要中断。不要在压缩软件中打开exe。

  3. 解压完成后,点击HBuilderX.exe ,如下图

注意:如果您无法打开或启动报错,请参考此贴 windows启动问题排查

2. 初识HBuilderX

HBuilderX首次启动后,打开了一个HBuilderX自述文件.md, 如下图:

HBuilderX自述文件.md: 是一个markdown文件,什么是markdown呢?就是个文本语言。 有兴趣的同学,点此了解Markdown

有兴趣的同学,可以读一读这个文件。或者直接点击右上角的x,关闭此文件。

关闭后的页面窗口如下:

3. 创建项目,开始HX旅程

点击【新建项目】、或点击工具栏上第一个图标(就是带有红色+号)、或直接 Ctrl + N ,调出创建项目窗口

新建项目后,如下图:

4. 编写代码

如上图所示,HBuilderX拥有强大的代码助手提示,可以帮您少敲很多代码。

5. 查看代码效果

如下图所示,点击【预览】可以查看代码效果。

如果您首次点击【预览】,又没有安装【内置浏览器】,点击预览的时候,会提示您安装插件,点击确定即可。

6. 安装插件

点击菜单【工具】【插件安装】

7. 文件单击与文件双击

如上图,标红部分,显示效果不一样。

这是因为:单击预览文件,双击打开文件

继续阅读 »

1. 安装HBuilderX

HBuilderX官网下载地址https://www.dcloud.io/hbuilderx.html

打开网站后,点击Download按钮,弹窗如下:

  • App开发版,包含大部分App开发插件。App开发,指的是手机应用开发。
  • 如果您是初学者开发前端,建议下载 标准版 。后期如果学习App开发,可以到【插件安装】中,安装相关插件

  1. Windows版本,下载的是一个 zip包,需要解压后才能使用。解压软件可以使用:360压缩软件、或7zip压缩软件

  2. 压缩过程,不要中断。不要在压缩软件中打开exe。

  3. 解压完成后,点击HBuilderX.exe ,如下图

注意:如果您无法打开或启动报错,请参考此贴 windows启动问题排查

2. 初识HBuilderX

HBuilderX首次启动后,打开了一个HBuilderX自述文件.md, 如下图:

HBuilderX自述文件.md: 是一个markdown文件,什么是markdown呢?就是个文本语言。 有兴趣的同学,点此了解Markdown

有兴趣的同学,可以读一读这个文件。或者直接点击右上角的x,关闭此文件。

关闭后的页面窗口如下:

3. 创建项目,开始HX旅程

点击【新建项目】、或点击工具栏上第一个图标(就是带有红色+号)、或直接 Ctrl + N ,调出创建项目窗口

新建项目后,如下图:

4. 编写代码

如上图所示,HBuilderX拥有强大的代码助手提示,可以帮您少敲很多代码。

5. 查看代码效果

如下图所示,点击【预览】可以查看代码效果。

如果您首次点击【预览】,又没有安装【内置浏览器】,点击预览的时候,会提示您安装插件,点击确定即可。

6. 安装插件

点击菜单【工具】【插件安装】

7. 文件单击与文件双击

如上图,标红部分,显示效果不一样。

这是因为:单击预览文件,双击打开文件

收起阅读 »

关于MUI安卓方向急需改进的方面

mui

安卓项目很多都需要依赖Jar包各方面的扩展,但是MUI这方面支持很不好,需要自定义增加sdk的话,就必须离线打包,处理起来很麻烦

安卓项目很多都需要依赖Jar包各方面的扩展,但是MUI这方面支持很不好,需要自定义增加sdk的话,就必须离线打包,处理起来很麻烦

在uni-app中对优博讯和新大陆安卓(Android)PDA的条码扫码广播监听(带示例附件)

我们在开发的时候需要获取优博讯PDA的条码扫码内容,根据前人的分享及自己找的一些资料整理示例代码如下,希望能帮助到有需要的人。为了避免刚入门的人无从下手,特增加了附件。

以下是示例,真正在用的时候,建议在app启动之后就开始监听,并通过全局事件来推送给需要的页面,而不是在每个页面都自己去监听,有利于代码的维护和提升性能。全局事件的监听和释放可参考我的另一个帖子:关于uni-app全局事件监听和释放监听的分享

另外优博讯的PDA需要在系统的:设置->扫描->Default->关闭(键盘方式输出) 才能使用广播监听。

onLoad() {  

            page = this;  

            this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    
            var context = plus.android.importClass('android.content.Context'); //上下文    
            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
                onReceive: doReceive  
            });  
            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  
            var Intent = plus.android.importClass('android.content.Intent');  
            var filter = new IntentFilter();  

            //针对优博讯安卓PDA-i6300A添加监听,其它优博讯的型号应该一样或类似  
            filter.addAction("android.intent.ACTION_DECODE_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    
                plus.android.importClass(intent);  

                //条码内容  
                var barcodeBytes = intent.getByteArrayExtra("barcode");  
                var barcode = byteToString(barcodeBytes);  

                //条码长度  
                var barcodeLength = intent.getIntExtra("length", 0);  
                //var myArray = new ArrayBuffer(0);  
                //条码类型  
                var barcodeTypeBytes = intent.getByteExtra("barcodeType", (0 | 0));  
                var barcodeType = byteToString(barcodeTypeBytes);  

                // uni.showModal({  
                //  content: '条码:' + barcode + '\r\n长度:' + barcodeLength + '\r\n类型:' + barcodeType,  
                //  showCancel: false  
                // });  
                page.title = barcode;  
                //console.log(barcode);    
                //main.unregisterReceiver(receiver);//取消监听    
            }  

            function byteToString(arr) {  
                if (typeof arr === 'string') {  
                    return arr;  
                }  
                var str = '',  
                    _arr = arr;  
                for (var i = 0; i < _arr.length; i++) {  
                    var one = _arr[i].toString(2),  
                        v = one.match(/^1+?(?=0)/);  
                    if (v && one.length == 8) {  
                        var bytesLength = v[0].length;  
                        var store = _arr[i].toString(2).slice(7 - bytesLength);  
                        for (var st = 1; st < bytesLength; st++) {  
                            store += _arr[st + i].toString(2).slice(2);  
                        }  
                        str += String.fromCharCode(parseInt(store, 2));  
                        i += bytesLength - 1;  
                    } else {  
                        str += String.fromCharCode(_arr[i]);  
                    }  
                }  
                return str;  
            }  

        }

下面是新大陆PDA的扫码方式

    //新大陆 智联天地 N7000R 获取方法  

    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  
    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  

            //#endif  
            //#endif
继续阅读 »

我们在开发的时候需要获取优博讯PDA的条码扫码内容,根据前人的分享及自己找的一些资料整理示例代码如下,希望能帮助到有需要的人。为了避免刚入门的人无从下手,特增加了附件。

以下是示例,真正在用的时候,建议在app启动之后就开始监听,并通过全局事件来推送给需要的页面,而不是在每个页面都自己去监听,有利于代码的维护和提升性能。全局事件的监听和释放可参考我的另一个帖子:关于uni-app全局事件监听和释放监听的分享

另外优博讯的PDA需要在系统的:设置->扫描->Default->关闭(键盘方式输出) 才能使用广播监听。

onLoad() {  

            page = this;  

            this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    
            var context = plus.android.importClass('android.content.Context'); //上下文    
            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
                onReceive: doReceive  
            });  
            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  
            var Intent = plus.android.importClass('android.content.Intent');  
            var filter = new IntentFilter();  

            //针对优博讯安卓PDA-i6300A添加监听,其它优博讯的型号应该一样或类似  
            filter.addAction("android.intent.ACTION_DECODE_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    
                plus.android.importClass(intent);  

                //条码内容  
                var barcodeBytes = intent.getByteArrayExtra("barcode");  
                var barcode = byteToString(barcodeBytes);  

                //条码长度  
                var barcodeLength = intent.getIntExtra("length", 0);  
                //var myArray = new ArrayBuffer(0);  
                //条码类型  
                var barcodeTypeBytes = intent.getByteExtra("barcodeType", (0 | 0));  
                var barcodeType = byteToString(barcodeTypeBytes);  

                // uni.showModal({  
                //  content: '条码:' + barcode + '\r\n长度:' + barcodeLength + '\r\n类型:' + barcodeType,  
                //  showCancel: false  
                // });  
                page.title = barcode;  
                //console.log(barcode);    
                //main.unregisterReceiver(receiver);//取消监听    
            }  

            function byteToString(arr) {  
                if (typeof arr === 'string') {  
                    return arr;  
                }  
                var str = '',  
                    _arr = arr;  
                for (var i = 0; i < _arr.length; i++) {  
                    var one = _arr[i].toString(2),  
                        v = one.match(/^1+?(?=0)/);  
                    if (v && one.length == 8) {  
                        var bytesLength = v[0].length;  
                        var store = _arr[i].toString(2).slice(7 - bytesLength);  
                        for (var st = 1; st < bytesLength; st++) {  
                            store += _arr[st + i].toString(2).slice(2);  
                        }  
                        str += String.fromCharCode(parseInt(store, 2));  
                        i += bytesLength - 1;  
                    } else {  
                        str += String.fromCharCode(_arr[i]);  
                    }  
                }  
                return str;  
            }  

        }

下面是新大陆PDA的扫码方式

    //新大陆 智联天地 N7000R 获取方法  

    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  
    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  

            //#endif  
            //#endif
收起阅读 »

关于uni-app全局事件监听和释放监听的分享

我们在使用uni-app开发的时候,需要在某个页面监听全局事件,并且需要再退出页面的时候释放监听,结果发现释放不了页面的监听,并且找了官方和网上的资料没有明确的解决示例。所以分享一下避免大家采坑。我的理解,之前之所以释放监听无效是因为绑定监听和释放监听并没有使用相同的方法。目前可行的解决方法是把要绑定的方法单独定义出来,这样在绑定和释放监听的时候就能确保都是相同的方法,就能真正释放监听的绑定。示例如下,有问题欢迎留言。

官方事件监听文档

// 我的页面    
onLoad(){    
    // 监听事件    
    uni.$on('scancode',this.callback) ;  
},    
onUnload() {    
    // 移除监听事件    
     uni.$off('scancode',this.callback);    
    },  
methods: {  
callback(data) {  
todo.....  
}  
}
继续阅读 »

我们在使用uni-app开发的时候,需要在某个页面监听全局事件,并且需要再退出页面的时候释放监听,结果发现释放不了页面的监听,并且找了官方和网上的资料没有明确的解决示例。所以分享一下避免大家采坑。我的理解,之前之所以释放监听无效是因为绑定监听和释放监听并没有使用相同的方法。目前可行的解决方法是把要绑定的方法单独定义出来,这样在绑定和释放监听的时候就能确保都是相同的方法,就能真正释放监听的绑定。示例如下,有问题欢迎留言。

官方事件监听文档

// 我的页面    
onLoad(){    
    // 监听事件    
    uni.$on('scancode',this.callback) ;  
},    
onUnload() {    
    // 移除监听事件    
     uni.$off('scancode',this.callback);    
    },  
methods: {  
callback(data) {  
todo.....  
}  
}
收起阅读 »

解决Android8.0及以上版本系统通知消息无法显示问题

Native.JS

新手代码写的有点乱。。 之前借鉴了几位大神的代码,在8.0之前非常好用,最近需要投标突然发现自己手机收不到推送消息了,折磨了我一天啊。。
话不多说,放代码,希望对大家有用!!!!

                   var mNotification;  
            var SystemVersion = plus.os.version;    
            var firstVersionNumber = Number(SystemVersion.split('.')[0]);    
            var main = plus.android.runtimeMainActivity();  
            var Context = plus.android.importClass("android.content.Context");  
            var Noti = plus.android.importClass("android.app.Notification");  
            var NotificationManager = plus.android.importClass("android.app.NotificationManager");  
            var nm = main.getSystemService(Context.NOTIFICATION_SERVICE);  

            //var Notification = plus.android.importClass("android.app.Notification");  
            var Intent = plus.android.importClass("android.content.Intent");  
            var PendingIntent = plus.android.importClass("android.app.PendingIntent");  
            var intent = new Intent(main, main.getClass());  
            var pendingIntent = PendingIntent.getActivity(main, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);  
            var r = plus.android.importClass("android.R");  
            if (firstVersionNumber>=8) {  
                Notification = plus.android.importClass("android.support.v4.app.NotificationCompat");    
            } else {    
                Notification = plus.android.importClass("android.app.Notification");    
            }    
            if(firstVersionNumber>=8){//判断当前系统版本在8.0及以上    
                  var NotificationChannel = plus.android.importClass('android.app.NotificationChannel');    
                  var channel = new NotificationChannel("s"+ NotifyID, "1", NotificationManager.IMPORTANCE_HIGH);    
                  nm.createNotificationChannel(channel);  
                  mNotification = new Notification.Builder(main,"s" +NotifyID);    
            }else{    
                  //设为true代表常驻状态栏    
                  //this.mNotificationBuild.setNumber(defaultNumber)   
                  mNotification = new Notification.Builder(main);    
            }    

            mNotification.setContentTitle("xxxxx")  
            mNotification.setContentText(str);  
            mNotification.setSubText(str1);  
            mNotification.setSmallIcon(17301620);  
            mNotification.setDefaults(Noti.DEFAULT_VIBRATE);//声音、闪灯、震动效果,可叠加  
            mNotification.setPriority(Noti.PRIORITY_DEFAULT);//通知优先级  
            mNotification.flags=Notification.FLAG_ONLY_ALERT_ONCE;//发起通知时震动  
            mNotification.setContentIntent(pendingIntent);  
            var mNb = mNotification.build();  
            if(firstVersionNumber>=8){//判断当前系统版本在8.0及以上  
                  nm.notify("s"+ NotifyID,NotifyID, mNb);  
            }else{    
                  nm.notify(NotifyID, mNb);  
            }    
            void plus.device.beep(5);  
            plus.device.vibrate(300);  
            NotifyID  ;  
继续阅读 »

新手代码写的有点乱。。 之前借鉴了几位大神的代码,在8.0之前非常好用,最近需要投标突然发现自己手机收不到推送消息了,折磨了我一天啊。。
话不多说,放代码,希望对大家有用!!!!

                   var mNotification;  
            var SystemVersion = plus.os.version;    
            var firstVersionNumber = Number(SystemVersion.split('.')[0]);    
            var main = plus.android.runtimeMainActivity();  
            var Context = plus.android.importClass("android.content.Context");  
            var Noti = plus.android.importClass("android.app.Notification");  
            var NotificationManager = plus.android.importClass("android.app.NotificationManager");  
            var nm = main.getSystemService(Context.NOTIFICATION_SERVICE);  

            //var Notification = plus.android.importClass("android.app.Notification");  
            var Intent = plus.android.importClass("android.content.Intent");  
            var PendingIntent = plus.android.importClass("android.app.PendingIntent");  
            var intent = new Intent(main, main.getClass());  
            var pendingIntent = PendingIntent.getActivity(main, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);  
            var r = plus.android.importClass("android.R");  
            if (firstVersionNumber>=8) {  
                Notification = plus.android.importClass("android.support.v4.app.NotificationCompat");    
            } else {    
                Notification = plus.android.importClass("android.app.Notification");    
            }    
            if(firstVersionNumber>=8){//判断当前系统版本在8.0及以上    
                  var NotificationChannel = plus.android.importClass('android.app.NotificationChannel');    
                  var channel = new NotificationChannel("s"+ NotifyID, "1", NotificationManager.IMPORTANCE_HIGH);    
                  nm.createNotificationChannel(channel);  
                  mNotification = new Notification.Builder(main,"s" +NotifyID);    
            }else{    
                  //设为true代表常驻状态栏    
                  //this.mNotificationBuild.setNumber(defaultNumber)   
                  mNotification = new Notification.Builder(main);    
            }    

            mNotification.setContentTitle("xxxxx")  
            mNotification.setContentText(str);  
            mNotification.setSubText(str1);  
            mNotification.setSmallIcon(17301620);  
            mNotification.setDefaults(Noti.DEFAULT_VIBRATE);//声音、闪灯、震动效果,可叠加  
            mNotification.setPriority(Noti.PRIORITY_DEFAULT);//通知优先级  
            mNotification.flags=Notification.FLAG_ONLY_ALERT_ONCE;//发起通知时震动  
            mNotification.setContentIntent(pendingIntent);  
            var mNb = mNotification.build();  
            if(firstVersionNumber>=8){//判断当前系统版本在8.0及以上  
                  nm.notify("s"+ NotifyID,NotifyID, mNb);  
            }else{    
                  nm.notify(NotifyID, mNb);  
            }    
            void plus.device.beep(5);  
            plus.device.vibrate(300);  
            NotifyID  ;  
收起阅读 »

真机运行

uniapp

在某个电脑上就完全运行不了真机

在某个电脑上就完全运行不了真机

uni-popup滚动时,父组件跟随滚动

popup

定义CSS

.wos-scroll-no{  
    height:98vh;  
    overflow-y: hidden;  
}  
.wos-scroll-yes{  
    height:auto;  
    overflow-y:auto;  
}

父组件绑定data

<view :class="wosScroll">  
...  
<view>
...  
data() {  
        return {  
            wosScroll:"wos-scroll-yes",  
...

修改uni-popup.vue。找到以下部分加入

open () {  
     this.$parent.wosScroll = 'wos-scroll-no'   //新加入的 ++++++  
      this.$emit('change', {  
        show: true  
      })  
      this.showPopup = true  
      this.$nextTick(() => {  
        setTimeout(() => {  
          this.ani = '' + this.type  
        }, 30)  
      })  
    },  
    close (type) {  
      this.$parent.wosScroll = 'wos-scroll-yes'  //新加入的 +++++++++  
      if (!this.maskClick && type) return  
      this.$emit('change', {  
        show: false  
      })  
      this.ani = ''  
      this.$nextTick(() => {  
        setTimeout(() => {  
          this.showPopup = false  
        }, 300)  
      })  
    }
继续阅读 »

定义CSS

.wos-scroll-no{  
    height:98vh;  
    overflow-y: hidden;  
}  
.wos-scroll-yes{  
    height:auto;  
    overflow-y:auto;  
}

父组件绑定data

<view :class="wosScroll">  
...  
<view>
...  
data() {  
        return {  
            wosScroll:"wos-scroll-yes",  
...

修改uni-popup.vue。找到以下部分加入

open () {  
     this.$parent.wosScroll = 'wos-scroll-no'   //新加入的 ++++++  
      this.$emit('change', {  
        show: true  
      })  
      this.showPopup = true  
      this.$nextTick(() => {  
        setTimeout(() => {  
          this.ani = '' + this.type  
        }, 30)  
      })  
    },  
    close (type) {  
      this.$parent.wosScroll = 'wos-scroll-yes'  //新加入的 +++++++++  
      if (!this.maskClick && type) return  
      this.$emit('change', {  
        show: false  
      })  
      this.ani = ''  
      this.$nextTick(() => {  
        setTimeout(() => {  
          this.showPopup = false  
        }, 300)  
      })  
    }
收起阅读 »

Mac: 关于HBuilderX在 macOS Catalina 10.15新系统上的运行说明

macOS Catalina macos 10.15

.
10月8日凌晨, 苹果正式推送了macOS Catalina 10.15系统。
操作系统主要更新了权限相关方面,为了大家更好使用,小编汇总了一下可能遇到的问题。
.

问题:项目管理器:以前的项目无法展开了,或文件无法保存了

原因: mac 10.15, 访问文稿目录,需要授权

解决方案:

  1. 打开【设置App】-->【安全性与隐私】--> 【隐私】--> 【文件与文件夹】
  2. 找到HBuilderX,勾选复选框

更新:10月16日起,HBuilderX 2.3.3已经通过了苹果的认证,默认即可获得授权,无需再进行额外设置。

继续阅读 »

.
10月8日凌晨, 苹果正式推送了macOS Catalina 10.15系统。
操作系统主要更新了权限相关方面,为了大家更好使用,小编汇总了一下可能遇到的问题。
.

问题:项目管理器:以前的项目无法展开了,或文件无法保存了

原因: mac 10.15, 访问文稿目录,需要授权

解决方案:

  1. 打开【设置App】-->【安全性与隐私】--> 【隐私】--> 【文件与文件夹】
  2. 找到HBuilderX,勾选复选框

更新:10月16日起,HBuilderX 2.3.3已经通过了苹果的认证,默认即可获得授权,无需再进行额外设置。

收起阅读 »

uniapp-小程序支付DOME

支付

DOME已测试,后端代


码,调用,前端使用,数据样例都写在附件里了,测试没问题整理到有道云笔记后导出的pdf

DOME已测试,后端代


码,调用,前端使用,数据样例都写在附件里了,测试没问题整理到有道云笔记后导出的pdf

上一个app的MQTT例子

App

利用plus-websocket和修改后的mqttws31.js实现,看附件代码(代码已删)
官方App端已修复 websocket 问题,可以使用 MQTT.js,示例:https://ext.dcloud.net.cn/plugin?id=854

利用plus-websocket和修改后的mqttws31.js实现,看附件代码(代码已删)
官方App端已修复 websocket 问题,可以使用 MQTT.js,示例:https://ext.dcloud.net.cn/plugin?id=854

mui在线房屋出租租房平台app界面模板

mui

基于mui框架制作的一款在线房屋出租租房平台app界面模板,房屋租赁手机app模板,挺不错的,推荐给大家。

下载地址:https://www.sucaihuo.com/templates/6225.html

继续阅读 »

基于mui框架制作的一款在线房屋出租租房平台app界面模板,房屋租赁手机app模板,挺不错的,推荐给大家。

下载地址:https://www.sucaihuo.com/templates/6225.html

收起阅读 »

点击返回按钮出现提示框,确定的时候才返回

uniapp

有时候我们在编辑页面的时候有这样一个场景,当用户点击返回按钮,给一个弹框,提示是否确定返回,以下是代码实现

onBackPress(options) {  
      // 如果是返回按钮,才做执行  
      if (options.from === 'backbutton') {  
        uni.showModal({  
          title: '提示',  
          content: '确定退出编辑吗?',  
          success: (res) => {  
            if (res.confirm) {  
              uni.navigateBack()  
            }  
          }  
        })  
        // 禁止默认返回  
        return true  
      }  
    },
继续阅读 »

有时候我们在编辑页面的时候有这样一个场景,当用户点击返回按钮,给一个弹框,提示是否确定返回,以下是代码实现

onBackPress(options) {  
      // 如果是返回按钮,才做执行  
      if (options.from === 'backbutton') {  
        uni.showModal({  
          title: '提示',  
          content: '确定退出编辑吗?',  
          success: (res) => {  
            if (res.confirm) {  
              uni.navigateBack()  
            }  
          }  
        })  
        // 禁止默认返回  
        return true  
      }  
    },
收起阅读 »