HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uni-rate 评分 点击评分失效问题解决

uniapp插件 uniapp 星星评分
  • 定位到 _getRateCount(获取星星个数) 方法,进行替换,替换代码如下。

    /**  
    * 获取星星个数  
    */  
    _getRateCount(clientX) {  
    this._getSize()  
    const size = Number(this.size)  
    if(size === NaN){  
    return new Error('size 属性只能设置为数字')  
    }  
    const rateMoveRange = clientX - this._rateBoxLeft  
    let index = parseInt(rateMoveRange / (size/2 + this.marginNumber))  
    index = index < 0 ? 0 : index;  
    index = index > this.max ? this.max : index;  
    const range = parseInt(rateMoveRange - (size/2 + this.marginNumber) * index);  
    let value = 0;  
    if (this._oldValue === index && !this.PC) return;  
    this._oldValue = index;  
    if (this.allowHalf) {  
    if (range > (size / 2)) {  
      value = index + 1  
    } else {  
      value = index + 0.5  
    }  
    } else {  
    value = index + 1  
    }  
    
    value = Math.max(0.5, Math.min(value, this.max))  
    this.valueSync = value  
    this._onChange()  
    },

原因

rpx和px问题

let index = parseInt(rateMoveRange / (size + this.marginNumber)) -> let index = parseInt(rateMoveRange / (size/2 + this.marginNumber))
const range = parseInt(rateMoveRange - (size + this.marginNumber) index); -> const range = parseInt(rateMoveRange - (size/2 + this.marginNumber) index

继续阅读 »
  • 定位到 _getRateCount(获取星星个数) 方法,进行替换,替换代码如下。

    /**  
    * 获取星星个数  
    */  
    _getRateCount(clientX) {  
    this._getSize()  
    const size = Number(this.size)  
    if(size === NaN){  
    return new Error('size 属性只能设置为数字')  
    }  
    const rateMoveRange = clientX - this._rateBoxLeft  
    let index = parseInt(rateMoveRange / (size/2 + this.marginNumber))  
    index = index < 0 ? 0 : index;  
    index = index > this.max ? this.max : index;  
    const range = parseInt(rateMoveRange - (size/2 + this.marginNumber) * index);  
    let value = 0;  
    if (this._oldValue === index && !this.PC) return;  
    this._oldValue = index;  
    if (this.allowHalf) {  
    if (range > (size / 2)) {  
      value = index + 1  
    } else {  
      value = index + 0.5  
    }  
    } else {  
    value = index + 1  
    }  
    
    value = Math.max(0.5, Math.min(value, this.max))  
    this.valueSync = value  
    this._onChange()  
    },

原因

rpx和px问题

let index = parseInt(rateMoveRange / (size + this.marginNumber)) -> let index = parseInt(rateMoveRange / (size/2 + this.marginNumber))
const range = parseInt(rateMoveRange - (size + this.marginNumber) index); -> const range = parseInt(rateMoveRange - (size/2 + this.marginNumber) index

收起阅读 »

Vue3简单整合uView@1.8.4解决方案

仅仅可以跑DEMO,嘿嘿嘿

问题描述

在这里插入图片描述

问题分析

在这里插入图片描述

官方文档

globalProperties

解决方案

切换到下载安装方式
https://www.uviewui.com/components/install.html#下载安装
修改源代码
index.js
在这里插入图片描述

Vue3 filter也没了,几个时间函数不重要吧?
在这里插入图片描述

在这里插入图片描述

const install = Vue => {  
    Vue.mixin(mixin)   
    if (Vue.config.globalProperties.openShare) {  
        Vue.mixin(mpShare);  
    }  
    // Vue.mixin(vuexStore);  
    // 时间格式化,同时两个名称,date和timeFormat  
    Vue.config.globalProperties.$filter = {  
        timeFormat(timestamp, format) {  
            return timeFormat(timestamp, format)  
        },  
        date(timestamp, format) {  
            return timeFormat(timestamp, format)  
        },  
        // 将多久以前的方法,注入到全局过滤器  
        timeFrom(timestamp, format) {  
            return timeFrom(timestamp, format)  
        }  
    }  
    Vue.config.globalProperties.$u = $u  
}

参考文章

vue 3.0 prototype 替代用法

继续阅读 »

仅仅可以跑DEMO,嘿嘿嘿

问题描述

在这里插入图片描述

问题分析

在这里插入图片描述

官方文档

globalProperties

解决方案

切换到下载安装方式
https://www.uviewui.com/components/install.html#下载安装
修改源代码
index.js
在这里插入图片描述

Vue3 filter也没了,几个时间函数不重要吧?
在这里插入图片描述

在这里插入图片描述

const install = Vue => {  
    Vue.mixin(mixin)   
    if (Vue.config.globalProperties.openShare) {  
        Vue.mixin(mpShare);  
    }  
    // Vue.mixin(vuexStore);  
    // 时间格式化,同时两个名称,date和timeFormat  
    Vue.config.globalProperties.$filter = {  
        timeFormat(timestamp, format) {  
            return timeFormat(timestamp, format)  
        },  
        date(timestamp, format) {  
            return timeFormat(timestamp, format)  
        },  
        // 将多久以前的方法,注入到全局过滤器  
        timeFrom(timestamp, format) {  
            return timeFrom(timestamp, format)  
        }  
    }  
    Vue.config.globalProperties.$u = $u  
}

参考文章

vue 3.0 prototype 替代用法

收起阅读 »

不能获取到别人帮我买的付费插件

HBuilder X

别人帮我购买了一个付费插件, appid和package name 都填写正确。 却在HbuilderX中获取不到这个插件

别人帮我购买了一个付费插件, appid和package name 都填写正确。 却在HbuilderX中获取不到这个插件

nvue waterfall原生组件返回顶部

滚动 nvue

在解决这个问题之前,可是浪费了我好久的时间
也有其他人在发布了问题,但是没有人回答
在详细查阅文档后,还是找到了答案
确实还是对文档的不够熟悉
在此记录下,也给后面的小白找好捷径,代码已精简

    <template>  
         <waterfall column-count="2" column-width="auto" :show-scrollbar="false" :column-gap="5" :left-gap="5"  
            :right-gap="5" :bounce="false" :loadmoreoffset="500" @loadmore="loadmore" alwaysScrollableVertical="true"  
            :style="{height: contentHeight + 'px'}">  
            <header>  
                <view ref="topRef" style="height: 0;">顶部标志</view>  
            </header>  
            <!-- 注意事项: 不能使用 index 作为 key 的唯一标识 -->  
            <cell v-for="(item, index) in dataList" :key="'list_'+index">  

            </cell>  
        </waterfall>  
        <cover-view style="position: fixed;right:10rpx;bottom:20rpx;background-color: #ffe563;" @click="goTop()">  
            <text>返回顶部</text>  
        </cover-view>  
   <template>  
<script>  
    const dom = uni.requireNativePlugin('dom')  
    export default {  
        props: {  
            contentHeight: {  
                type: Number,  
                default: 800  
            }  
        },  
        data() {  
            return {  
                dataList: []  
            }  
        },  
        methods: {  
            goTop() {  
                dom.scrollToElement(this.$refs.topRef, {  
                    offset: 0  
                })  
            }  
        }  
    }  
</script>
继续阅读 »

在解决这个问题之前,可是浪费了我好久的时间
也有其他人在发布了问题,但是没有人回答
在详细查阅文档后,还是找到了答案
确实还是对文档的不够熟悉
在此记录下,也给后面的小白找好捷径,代码已精简

    <template>  
         <waterfall column-count="2" column-width="auto" :show-scrollbar="false" :column-gap="5" :left-gap="5"  
            :right-gap="5" :bounce="false" :loadmoreoffset="500" @loadmore="loadmore" alwaysScrollableVertical="true"  
            :style="{height: contentHeight + 'px'}">  
            <header>  
                <view ref="topRef" style="height: 0;">顶部标志</view>  
            </header>  
            <!-- 注意事项: 不能使用 index 作为 key 的唯一标识 -->  
            <cell v-for="(item, index) in dataList" :key="'list_'+index">  

            </cell>  
        </waterfall>  
        <cover-view style="position: fixed;right:10rpx;bottom:20rpx;background-color: #ffe563;" @click="goTop()">  
            <text>返回顶部</text>  
        </cover-view>  
   <template>  
<script>  
    const dom = uni.requireNativePlugin('dom')  
    export default {  
        props: {  
            contentHeight: {  
                type: Number,  
                default: 800  
            }  
        },  
        data() {  
            return {  
                dataList: []  
            }  
        },  
        methods: {  
            goTop() {  
                dom.scrollToElement(this.$refs.topRef, {  
                    offset: 0  
                })  
            }  
        }  
    }  
</script>
收起阅读 »

在线接单, 5k优惠1k,1w优惠2k,2w优惠4k,以此类推,承接H5、小程序、、PC端网站、后台系统、UI等外包

外包接单 uniapp

,享受满减优惠,
5k-1k,1w-2k,2w-4k,以此类推,

承接UI、H5、小程序、、PC端网站、后台系统等产品

vx:web9688

微信

,享受满减优惠,
5k-1k,1w-2k,2w-4k,以此类推,

承接UI、H5、小程序、、PC端网站、后台系统等产品

vx:web9688

微信

遍地的开源商城,为啥我们还要做Leadshop开源系统?

Leadshop的开发背景

传统的电商平台(这里指的是淘宝、京东、拼多多这类型的中心化平台)早已是红海,商家越来越难生存,平台规则越来越严格,稍有不慎,前功尽弃,商家长期苦不堪言。

有痛点就有市场机会,这是市场规律。

近年来崛起的私域saas电商平台如雨后春笋般侵袭而来,如有赞、微盟等。商家也逐步觉醒,不再单一的依赖传统中心化大平台了,逐步布局自己的私域流量平台。

私域电商软件成了必不可少的工具之一,大批saas服务商尝到了甜头。

但是好景不长,这块蛋糕不仅被腾讯盯上了,腾讯还想做规则制定者,微信即微信小店之后又推出了微信小商店,无缝衔接视频号及直播带货,同时开放了服务市场,将私域电商推向高潮,大批saas类的服务商开始坐不住了,跟微信小商店竞争胜算如何呢?

传统电商,saas私域电商好像和我们开发者关系不是很大,在电商领域我们开发者有什么机会呢?

随着商家越来越重视私域流量、客户数据、个性化的商业模式,私域saas电商模式很难满足这么多个性化需求,不少商家开始选择招技术团队或外包公司进行个性化的定制开发,但是从0开发一套成熟的电商系统要付出的成本是极大,可以说是无底洞,说实话没几个商家能够承受的了。

Leadshop非常想解决这个行业痛点,所以Leadshop诞生了!它是为终端商家,为开发者而生的一款免费且开源的电商系统。

Leadshop一款提供持续更新服务的免费开源商城系统,旨在打造极致的用户体验。
Leadshop已经实现了从0到1的研发,我们开发者只需要在此基础上进行客户的个性化需求开发便可满足客户需求,从而以最低成本创造增值收益。

Leadshop主要特性

Leadshop 开源系统,基于Yii2开发,支持composer,优化核心,减少依赖,基于全新的架构思想和命名空间

  • 基于命名空间和PSR-4规范,加入PHP7新特性
  • 核心功能模块化,方便开发和维护
  • 强化路由功能,采用RESTful接口标准
  • 灵活创建模型控制器,易于扩展开发
  • 配置文件可分离,方便管理
  • 重写的自动验证和完成
  • 简化扩展机制,提升开发速度
  • API支持完善,方便二次开发
  • 内置WeChat微信开发框架,微信接入更加快捷,简单
  • 使用ORM自动创建表结构,提升开发速度
  • 支持数据库结构、数据、模板在线缓存清除,提升用户体验
  • 客户端完善的交互效果和动画,提升用户端视觉体验
  • 支持在线一键安装,方便快捷。
  • 可视化DIY店铺装修,方便、快捷、直观,可以随心所欲装扮自己的店铺
  • 高效的笛卡尔乘积运算,8000条规格秒加载
  • 拟态Windows文件夹的素材管理结构,操作更熟悉随心

运行环境

Linux+Nginx+PHP7.4+MySQL5.7.3以上

插件市场的地址

https://ext.dcloud.net.cn/plugin?id=4699

体验后台

地址:https://demo.leadshop.vip
账号:18888888888
密码:123456
tiyan.png

Leadshop页面展示

展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图

Leadshop微商城

论坛交流

地址:https://forum.leadshop.vip/

开源无加密

基于Apache License 2.0开源协议,前后端代码开源无加密,支持二次开发,支持商用。

核心技术

前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、element-ui、uni-app

后端技术栈 Yii2、Jwt、Mysql、Easy-SMS

接口标准

采用标准RESTful API ,高效的API阅读性,具有扩展性强、结构清晰的特点

数据交互

采用JSON API 标准,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求。高效实现的同时,无需牺牲可读性、灵活性和可发现性

认证方式

目前所有的接口使用 Oauth2 Password 方式,也就是 JWT Authorization Bearer header 进认证。支持扩语言扩展,多平台扩展。

数据表格导出

采用高性能的 js-xlsx数据导出,易于扩展,兼容性强。

接口文档:http://www.leadshop.vip/api.html

安装

一键安装

1.上传你的代码

2.项目目录设置755权限

3.设置代码执行目录为/web

注:如果使用Apache环境 需要在.htaccess 中添加

 SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

否则会导致OAuth登录模式获取不到Authorization

4.检查php禁用函数列表,symlink函数不能被禁用,否则后台页面无法访问。

5.在浏览器中输入你的域名或IP

( 例如:www.yourdomain.com),安装程序会自动执行安装。期间系统会提醒你输入数据库信息以完成安装。

6.后台访问地址:
域名/index.php?r=admin

7.公众号首页访问地址:
域名/index.php?r=wechat

重新安装

  1. 清除数据库
  2. 删除/server/install.lock 文件

目录说明

 站点根目录  
    ├─api                               //后台接口  
    ├─app                               //客户端(微信小程序,公众号)  
    ├─applet                            //打包后的微信小程序源码包  
    ├─components                        //通用组件  
    ├─config                            //配置文件目录  
    ├─controllers                       //控制器  
    ├─datamodel                         //模型  
    ├─forms                               
    │  └─install  
    ├─modules                           //模块       
    ├─stores                            //应用配置文件  
    ├─system                            //系统核心目录  
    │  ├─common  
    │  ├─config  
    │  ├─phpqrcode  
    │  └─wechat  
    ├─vendor                            //依赖  
    ├─views  
    │  ├─admin                          //后台编译包目录,其中index.php不可删除  
    │  ├─wechat                         //公众号编译包目录,其中index.php不可删除  
    │  └─site  
    └─web  
        ├─assets  
        ├─static                        //静态文件  
        ├─img                           //H5端图片目录  
        ├─temp  
        └─upload                        //上传文件

使用须知

1.允许用于个人学习、毕业设计、教学案例、公益事业;

2.支持企业/个人免费商业使用,但必须保留leadshop版权信息;

版权信息

Powered By Leadshop © 2021

继续阅读 »

Leadshop的开发背景

传统的电商平台(这里指的是淘宝、京东、拼多多这类型的中心化平台)早已是红海,商家越来越难生存,平台规则越来越严格,稍有不慎,前功尽弃,商家长期苦不堪言。

有痛点就有市场机会,这是市场规律。

近年来崛起的私域saas电商平台如雨后春笋般侵袭而来,如有赞、微盟等。商家也逐步觉醒,不再单一的依赖传统中心化大平台了,逐步布局自己的私域流量平台。

私域电商软件成了必不可少的工具之一,大批saas服务商尝到了甜头。

但是好景不长,这块蛋糕不仅被腾讯盯上了,腾讯还想做规则制定者,微信即微信小店之后又推出了微信小商店,无缝衔接视频号及直播带货,同时开放了服务市场,将私域电商推向高潮,大批saas类的服务商开始坐不住了,跟微信小商店竞争胜算如何呢?

传统电商,saas私域电商好像和我们开发者关系不是很大,在电商领域我们开发者有什么机会呢?

随着商家越来越重视私域流量、客户数据、个性化的商业模式,私域saas电商模式很难满足这么多个性化需求,不少商家开始选择招技术团队或外包公司进行个性化的定制开发,但是从0开发一套成熟的电商系统要付出的成本是极大,可以说是无底洞,说实话没几个商家能够承受的了。

Leadshop非常想解决这个行业痛点,所以Leadshop诞生了!它是为终端商家,为开发者而生的一款免费且开源的电商系统。

Leadshop一款提供持续更新服务的免费开源商城系统,旨在打造极致的用户体验。
Leadshop已经实现了从0到1的研发,我们开发者只需要在此基础上进行客户的个性化需求开发便可满足客户需求,从而以最低成本创造增值收益。

Leadshop主要特性

Leadshop 开源系统,基于Yii2开发,支持composer,优化核心,减少依赖,基于全新的架构思想和命名空间

  • 基于命名空间和PSR-4规范,加入PHP7新特性
  • 核心功能模块化,方便开发和维护
  • 强化路由功能,采用RESTful接口标准
  • 灵活创建模型控制器,易于扩展开发
  • 配置文件可分离,方便管理
  • 重写的自动验证和完成
  • 简化扩展机制,提升开发速度
  • API支持完善,方便二次开发
  • 内置WeChat微信开发框架,微信接入更加快捷,简单
  • 使用ORM自动创建表结构,提升开发速度
  • 支持数据库结构、数据、模板在线缓存清除,提升用户体验
  • 客户端完善的交互效果和动画,提升用户端视觉体验
  • 支持在线一键安装,方便快捷。
  • 可视化DIY店铺装修,方便、快捷、直观,可以随心所欲装扮自己的店铺
  • 高效的笛卡尔乘积运算,8000条规格秒加载
  • 拟态Windows文件夹的素材管理结构,操作更熟悉随心

运行环境

Linux+Nginx+PHP7.4+MySQL5.7.3以上

插件市场的地址

https://ext.dcloud.net.cn/plugin?id=4699

体验后台

地址:https://demo.leadshop.vip
账号:18888888888
密码:123456
tiyan.png

Leadshop页面展示

展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图

<br/>

展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图
展示图

Leadshop微商城

论坛交流

地址:https://forum.leadshop.vip/

开源无加密

基于Apache License 2.0开源协议,前后端代码开源无加密,支持二次开发,支持商用。

核心技术

前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、element-ui、uni-app

后端技术栈 Yii2、Jwt、Mysql、Easy-SMS

接口标准

采用标准RESTful API ,高效的API阅读性,具有扩展性强、结构清晰的特点

数据交互

采用JSON API 标准,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求。高效实现的同时,无需牺牲可读性、灵活性和可发现性

认证方式

目前所有的接口使用 Oauth2 Password 方式,也就是 JWT Authorization Bearer header 进认证。支持扩语言扩展,多平台扩展。

数据表格导出

采用高性能的 js-xlsx数据导出,易于扩展,兼容性强。

接口文档:http://www.leadshop.vip/api.html

安装

一键安装

1.上传你的代码

2.项目目录设置755权限

3.设置代码执行目录为/web

注:如果使用Apache环境 需要在.htaccess 中添加

 SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

否则会导致OAuth登录模式获取不到Authorization

4.检查php禁用函数列表,symlink函数不能被禁用,否则后台页面无法访问。

5.在浏览器中输入你的域名或IP

( 例如:www.yourdomain.com),安装程序会自动执行安装。期间系统会提醒你输入数据库信息以完成安装。

6.后台访问地址:
域名/index.php?r=admin

7.公众号首页访问地址:
域名/index.php?r=wechat

重新安装

  1. 清除数据库
  2. 删除/server/install.lock 文件

目录说明

 站点根目录  
    ├─api                               //后台接口  
    ├─app                               //客户端(微信小程序,公众号)  
    ├─applet                            //打包后的微信小程序源码包  
    ├─components                        //通用组件  
    ├─config                            //配置文件目录  
    ├─controllers                       //控制器  
    ├─datamodel                         //模型  
    ├─forms                               
    │  └─install  
    ├─modules                           //模块       
    ├─stores                            //应用配置文件  
    ├─system                            //系统核心目录  
    │  ├─common  
    │  ├─config  
    │  ├─phpqrcode  
    │  └─wechat  
    ├─vendor                            //依赖  
    ├─views  
    │  ├─admin                          //后台编译包目录,其中index.php不可删除  
    │  ├─wechat                         //公众号编译包目录,其中index.php不可删除  
    │  └─site  
    └─web  
        ├─assets  
        ├─static                        //静态文件  
        ├─img                           //H5端图片目录  
        ├─temp  
        └─upload                        //上传文件

使用须知

1.允许用于个人学习、毕业设计、教学案例、公益事业;

2.支持企业/个人免费商业使用,但必须保留leadshop版权信息;

版权信息

Powered By Leadshop © 2021

收起阅读 »

MUI集成新大陆、斑马PDA

扫描 扫码 mui

集成新大陆、斑马PDA
代码如下:

document.addEventListener('plusready',function () {    
        scan(function(code) {  
                console.log('扫描结果:'   code);  
        })  
},false);    

function scan(callback) {  
    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: function(context, intent) { //实现onReceiver回调函数  
            var device_model = plus.device.model;  
            console.log(device_model);  
            if(device_model=="NLS-MT90"){  
                //新大陆 NLS-MT90  
                callback(intent.getStringExtra('SCAN_BARCODE1')) ;  
            }  
            if(device_model=="TC20"){  
                //斑马 TC20  
                callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));  
            }  
        }  
    });  
    var IntentFilter = plus.android.importClass('android.content.IntentFilter'); //引入过滤器  
    var Intent = plus.android.importClass('android.content.Intent');  
    var filter = new IntentFilter();  
    filter.addAction('nlscan.action.SCANNER_RESULT'); //新大陆广播  
    filter.addAction('com.zsscan.ACTION');//斑马广播:需要在DataWedge设置  
    main.registerReceiver(receiver, filter); //注册监听  
    mui.toast("初始化完成。");  
}  

斑马PDA需要在设备端配置DataWedge:
进入DataWedge,右上角新增配置文件启用Intent,关联应用程序处关联扫码的APP,Intent操作设置为com.zsscan.ACTION,Intent交付设置为广播Intent

原贴地址 https://blog.csdn.net/qq_37182421/article/details/116750530

继续阅读 »

集成新大陆、斑马PDA
代码如下:

document.addEventListener('plusready',function () {    
        scan(function(code) {  
                console.log('扫描结果:'   code);  
        })  
},false);    

function scan(callback) {  
    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: function(context, intent) { //实现onReceiver回调函数  
            var device_model = plus.device.model;  
            console.log(device_model);  
            if(device_model=="NLS-MT90"){  
                //新大陆 NLS-MT90  
                callback(intent.getStringExtra('SCAN_BARCODE1')) ;  
            }  
            if(device_model=="TC20"){  
                //斑马 TC20  
                callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));  
            }  
        }  
    });  
    var IntentFilter = plus.android.importClass('android.content.IntentFilter'); //引入过滤器  
    var Intent = plus.android.importClass('android.content.Intent');  
    var filter = new IntentFilter();  
    filter.addAction('nlscan.action.SCANNER_RESULT'); //新大陆广播  
    filter.addAction('com.zsscan.ACTION');//斑马广播:需要在DataWedge设置  
    main.registerReceiver(receiver, filter); //注册监听  
    mui.toast("初始化完成。");  
}  

斑马PDA需要在设备端配置DataWedge:
进入DataWedge,右上角新增配置文件启用Intent,关联应用程序处关联扫码的APP,Intent操作设置为com.zsscan.ACTION,Intent交付设置为广播Intent

原贴地址 https://blog.csdn.net/qq_37182421/article/details/116750530

收起阅读 »

css样式在小程序上能够正常显示,但是在安卓上显示失败。

安卓 css样式

.branchWA{
.branchRadius{
border-radius: 79rpx !important;
justify-content:left !important;
position: absolute !important;
.fs_b{
width: 5em;
}
}
.branchRadius_bgZero{
background-color: #f6eee8 !important;
width:216rpx;
height:79rpx !important;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgOne{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
left:268rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgTwo{
background-color: #fffae8 !important;
width:216rpx;
height:79rpx !important;
left:512rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgThree{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
top:157rpx;
left:44rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgFour{
background-color: #f6eee8 !important;
width:407rpx;
height:148rpx !important;
font-size: 46rpx !important;
top:162rpx;
left:320rpx;
padding-left:21rpx !important;
image{
width: 112rpx !important;
height:112rpx !important;
}
}
.branchRadius_bgFive{
background-color: #f6eee8 !important;
width: 285rpx;
height:105rpx !important;
font-size: 34rpx !important;
top:275rpx;
left:22rpx;
padding-left:16rpx !important;
image{
width: 78rpx !important;
height:78rpx !important;
}
}
.branchRadius_bgSix{
background-color: #fffae8 !important;
width:216rpx;
height:79rpx !important;
top:410rpx;
left:224rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgSeven{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
top:344rpx;
left:467rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
}


原先使用数字做为尾标,用于区分各个元素的class样式: <van-button size="small" noline custom-class="branchRadius branchRadius_bg{{ itd % 8 }}" @tap="gtRedirect('/pages/branchdetail', { Id: Id })">
这个在小程序上没有问题,但是在手机上class样式会显示不出来。
改成
<van-button size="small"
noline custom-class="getClassName" @tap="gtRedirect('/pages/branchdetail', { Id: Id })">
computed:{
getClassName(){
var bg="";
switch(this.itd%8){
case 0:
bg="branchRadius_bgZero";break;
case 1:
bg="branchRadius_bgOne";break;
case 2:
bg="branchRadius_bgTwo";break;
case 3:
bg="branchRadius_bgThree";break;
case 4:
bg="branchRadius_bgFour";break;
case 5:
bg="branchRadius_bgFive";break;
case 6:
bg="branchRadius_bgSix";break;
default:
bg="branchRadius_bgSeven";
}
return "branchRadius "+bg;
}
}
后样式显示成功。
继续阅读 »

.branchWA{
.branchRadius{
border-radius: 79rpx !important;
justify-content:left !important;
position: absolute !important;
.fs_b{
width: 5em;
}
}
.branchRadius_bgZero{
background-color: #f6eee8 !important;
width:216rpx;
height:79rpx !important;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgOne{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
left:268rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgTwo{
background-color: #fffae8 !important;
width:216rpx;
height:79rpx !important;
left:512rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgThree{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
top:157rpx;
left:44rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgFour{
background-color: #f6eee8 !important;
width:407rpx;
height:148rpx !important;
font-size: 46rpx !important;
top:162rpx;
left:320rpx;
padding-left:21rpx !important;
image{
width: 112rpx !important;
height:112rpx !important;
}
}
.branchRadius_bgFive{
background-color: #f6eee8 !important;
width: 285rpx;
height:105rpx !important;
font-size: 34rpx !important;
top:275rpx;
left:22rpx;
padding-left:16rpx !important;
image{
width: 78rpx !important;
height:78rpx !important;
}
}
.branchRadius_bgSix{
background-color: #fffae8 !important;
width:216rpx;
height:79rpx !important;
top:410rpx;
left:224rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
.branchRadius_bgSeven{
background-color: #fbe7e5 !important;
width:216rpx;
height:79rpx !important;
top:344rpx;
left:467rpx;
padding-left:11rpx !important;
image{
width: 60rpx !important;
height:60rpx !important;
}
}
}


原先使用数字做为尾标,用于区分各个元素的class样式: <van-button size="small" noline custom-class="branchRadius branchRadius_bg{{ itd % 8 }}" @tap="gtRedirect('/pages/branchdetail', { Id: Id })">
这个在小程序上没有问题,但是在手机上class样式会显示不出来。
改成
<van-button size="small"
noline custom-class="getClassName" @tap="gtRedirect('/pages/branchdetail', { Id: Id })">
computed:{
getClassName(){
var bg="";
switch(this.itd%8){
case 0:
bg="branchRadius_bgZero";break;
case 1:
bg="branchRadius_bgOne";break;
case 2:
bg="branchRadius_bgTwo";break;
case 3:
bg="branchRadius_bgThree";break;
case 4:
bg="branchRadius_bgFour";break;
case 5:
bg="branchRadius_bgFive";break;
case 6:
bg="branchRadius_bgSix";break;
default:
bg="branchRadius_bgSeven";
}
return "branchRadius "+bg;
}
}
后样式显示成功。 收起阅读 »

IOS打包应用权限

Storage manifest

悬崖之上迅雷下载地址:53682.xyz

悬崖之上迅雷下载地址:53682.xyz

有关uni.getLocation的经纬度在高德地图偏移的问题

ASP sublime

悬崖之上迅雷下载地址:53682.xyz

悬崖之上迅雷下载地址:53682.xyz

请教一下hbx编辑器创建的uni-app项目如何转成cli项目

FTP Hello HBuilder

悬崖之上迅雷下载地址:53682.xyz

悬崖之上迅雷下载地址:53682.xyz

Google Play上传应用要求Android App Bundle (AAB) 格式的相关说明

GooglePlay Android aab bundletool

概述

Android App Bundle是Google在2018年推出的Apk动态组件化打包技术,通过AAB格式的App Bundle文件为你的设备动态组装apk来安装。其本质就是把Apk拆分成了多个模块,之前是把一个大而全的apk装到你手机里面,但是你其实用不到这么多东西,把暂时不需要的东西拿出来,这样就会节省很多的资源空间。除了效率和模块化之外,Android App Bundle现在还通过为新安装推出应用程序签名密钥升级提供更高的安全性。
注意:Android App Bundle (AAB) 与 APK 不同,AAB纯粹是为了上传Google Play而设计的,用户无法直接使用安装到手机上,测试AAB文件参考章节手机安装使用AAB格式文件

2021年8月开始Google Play要求新发布应用必须使用Android App Bundle(AAB)格式,即.aab格式文件;更新已经上架的应用还可以继续使用apk格式文件上传

详情参考Google官方博客说明:New Android App Bundle and target API level requirements in 2021

注:Google Play同时要求应用适配Android11,即 targetSdkVersion要求大于等于30。从2021年8月开始发布新应用必须设置targetSdkVersion大于等于30;从2021年11月开始更新已经上架的应用必须设置targetSdkVersion大于等于30。
HBuilderX3.1.0+版本已适配支持Android11,参考https://ask.dcloud.net.cn/article/193设置targetSdkVersion

HBuilderX云端打包支持Android App Bundle (AAB)

HBuilderX3.1.16+版本云端打包已支持Android App Bundle (AAB)格式,由于仅上传Google Play时才需要使用AAB格式文件,提交云端打包配置渠道为“GooglePlay”时云端打包自动生成AAB格式,其它渠道云端打包仍然使用APK格式。

注意:Android App Bundle (AAB)格式不支持安心打包,勾选“GooglePlay”渠道后将使用传统打包模式提交云端打包

<a id="install"/>

本地离线打包支持Android App Bundle (AAB)

离线打包需要原生开发环境Android Studio,使用App离线SDK一直都支持Android App Bundle (AAB),详情参考https://ask.dcloud.net.cn/article/36356

手机安装使用AAB格式文件

Android App Bundle (AAB) 格式文件仅用于上传到Google Play,无法直接将AAB文件安装到手机上,如果要在手机上安装测试AAB格式包,可以使用bundletool工具
可以参考Google官方文档:https://developer.android.com/studio/command-line/bundletool
注意:Google官方文档需要科学上网才能打开

以下是我们整理的操作步骤

  1. 准备环境
    使用bundletool工具需要java环境,建议使用JRE8环境,请自行下载安装,并配置好系统环境变量

  2. 下载bundletool.jar包
    下载地址:https://github.com/google/bundletool/releases

  3. 使用cmd命令将aab文件转换为apks文件
    命令格式参考如下:

    java -jar <bundletool.jar的路径> build-apks --bundle=<.aab文件的路径> --output=<输出.apks的路径> --ks=<打包使用的证书文件的路径> --ks-pass=pass:<证书密码> --ks-key-alias=<证书别名> --key-pass=pass:<证书别名密码,通常与证书密码一致>

    将前面下载的bundletool-all-1.6.0.jar、云端打包生成的myapp.aab、证书文件my.keystore(证书别名为test、密码为123456)放到同一目录,在命令行中切换到当前目录,使用以下命令生成myapp.apks

    java -jar bundletool-all-1.6.0.jar build-apks --bundle=myapp.aab --output=myapp.apks --ks=my.keystore --ks-pass=pass:123456 --ks-key-alias=test --key-pass=pass:123456

    注意:生成apks文件会非常大,但安装到手机上占用空间会比原来apk格式文件小(这是因为只安装当前设备需要的资源)。另外可以在命令行中添加--connected-device参数来生成仅针对当前连接设备的apks文件,减少apks文件大小

  4. 使用cmd命令安装apks文件到手机上
    命令格式参考如下:

    java -jar <bundletool.jar的路径> install-apks --apks=<上一步中生成的.apks文件路径>

    注意:安装apks需要当前环境存的adb可以运行,建议安装Android SDK工具

常见问题

根据Google的要求,使用aab格式上传应用必须加入Google签名保护计划, 加入后需要提交签名证书文件。
注意:不是直接提交签名证书文件,而是要按规范进行转换
建议参考文档:Android Google Play app signing

继续阅读 »

概述

Android App Bundle是Google在2018年推出的Apk动态组件化打包技术,通过AAB格式的App Bundle文件为你的设备动态组装apk来安装。其本质就是把Apk拆分成了多个模块,之前是把一个大而全的apk装到你手机里面,但是你其实用不到这么多东西,把暂时不需要的东西拿出来,这样就会节省很多的资源空间。除了效率和模块化之外,Android App Bundle现在还通过为新安装推出应用程序签名密钥升级提供更高的安全性。
注意:Android App Bundle (AAB) 与 APK 不同,AAB纯粹是为了上传Google Play而设计的,用户无法直接使用安装到手机上,测试AAB文件参考章节手机安装使用AAB格式文件

2021年8月开始Google Play要求新发布应用必须使用Android App Bundle(AAB)格式,即.aab格式文件;更新已经上架的应用还可以继续使用apk格式文件上传

详情参考Google官方博客说明:New Android App Bundle and target API level requirements in 2021

注:Google Play同时要求应用适配Android11,即 targetSdkVersion要求大于等于30。从2021年8月开始发布新应用必须设置targetSdkVersion大于等于30;从2021年11月开始更新已经上架的应用必须设置targetSdkVersion大于等于30。
HBuilderX3.1.0+版本已适配支持Android11,参考https://ask.dcloud.net.cn/article/193设置targetSdkVersion

HBuilderX云端打包支持Android App Bundle (AAB)

HBuilderX3.1.16+版本云端打包已支持Android App Bundle (AAB)格式,由于仅上传Google Play时才需要使用AAB格式文件,提交云端打包配置渠道为“GooglePlay”时云端打包自动生成AAB格式,其它渠道云端打包仍然使用APK格式。

注意:Android App Bundle (AAB)格式不支持安心打包,勾选“GooglePlay”渠道后将使用传统打包模式提交云端打包

<a id="install"/>

本地离线打包支持Android App Bundle (AAB)

离线打包需要原生开发环境Android Studio,使用App离线SDK一直都支持Android App Bundle (AAB),详情参考https://ask.dcloud.net.cn/article/36356

手机安装使用AAB格式文件

Android App Bundle (AAB) 格式文件仅用于上传到Google Play,无法直接将AAB文件安装到手机上,如果要在手机上安装测试AAB格式包,可以使用bundletool工具
可以参考Google官方文档:https://developer.android.com/studio/command-line/bundletool
注意:Google官方文档需要科学上网才能打开

以下是我们整理的操作步骤

  1. 准备环境
    使用bundletool工具需要java环境,建议使用JRE8环境,请自行下载安装,并配置好系统环境变量

  2. 下载bundletool.jar包
    下载地址:https://github.com/google/bundletool/releases

  3. 使用cmd命令将aab文件转换为apks文件
    命令格式参考如下:

    java -jar <bundletool.jar的路径> build-apks --bundle=<.aab文件的路径> --output=<输出.apks的路径> --ks=<打包使用的证书文件的路径> --ks-pass=pass:<证书密码> --ks-key-alias=<证书别名> --key-pass=pass:<证书别名密码,通常与证书密码一致>

    将前面下载的bundletool-all-1.6.0.jar、云端打包生成的myapp.aab、证书文件my.keystore(证书别名为test、密码为123456)放到同一目录,在命令行中切换到当前目录,使用以下命令生成myapp.apks

    java -jar bundletool-all-1.6.0.jar build-apks --bundle=myapp.aab --output=myapp.apks --ks=my.keystore --ks-pass=pass:123456 --ks-key-alias=test --key-pass=pass:123456

    注意:生成apks文件会非常大,但安装到手机上占用空间会比原来apk格式文件小(这是因为只安装当前设备需要的资源)。另外可以在命令行中添加--connected-device参数来生成仅针对当前连接设备的apks文件,减少apks文件大小

  4. 使用cmd命令安装apks文件到手机上
    命令格式参考如下:

    java -jar <bundletool.jar的路径> install-apks --apks=<上一步中生成的.apks文件路径>

    注意:安装apks需要当前环境存的adb可以运行,建议安装Android SDK工具

常见问题

根据Google的要求,使用aab格式上传应用必须加入Google签名保护计划, 加入后需要提交签名证书文件。
注意:不是直接提交签名证书文件,而是要按规范进行转换
建议参考文档:Android Google Play app signing

收起阅读 »