更新记录

1.0.1(2021-03-21)

实现旺 Pos 机打印小票的功能


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


Jcohy-Pos 简介

由于 旺Pos 机只提供了原生的 SDK 在 Pos 机上实现打印小票的功能,所有要在 uni-app 中使用原生的打印功能,需要开发一个 uni-app 原生插件。Jcohy-Pos 原生插件提供了在 Android 端连接 旺 Pos 机,并且提供相关的方法来实现 旺 Pos 机打印功能。使用此插件的应用程序需要安装在 旺Pos 机上才能实现打印。

引用方式

const dcRichAlert = uni.requireNativePlugin('Jcohy-Pos')

在打印的最后一步,必须调用 print() 方法才能实现真正的打印。其余的方法都是在设置打印的内容。调用 destory() 方法可以取消当前已经设置的打印内容。然后进行重新设置。

方法列表

printText(JSONObject options)

(打印文本内容)

参数说明

属性 类型 默认值 描述
content String 内容
fontSize String medium 字体大小:small,large,medium
fontStyle String normal 字体风格:italic,bold,normal
center boolean false 是否居中

printTable(JSONObject options)

(打印表格)

options 参数说明

属性 类型 默认值 描述
rows JSONObject 表格每一行字段所占用的长度
sort JSONObject 表格每一行字段的顺序
header JSONObject 表头
data JSONArray 表数据

注意:rows 中的字段名称必须与 sort,header,datas 中相同。如下示例

var printModule = uni.requireNativePlugin("Jcohy-Pos")

printModule.printTable({
    "rows": {
        "name": 16,
        "count": 6,
        "price": 10
    },
    "sort": {
        "count": 2,
        "name": 1,
        "price": 3
    },
    "header": {
        "name": "商品名称",
        "count": "数量",
        "price": "金额"
    },
    "data": [
        {
            "name": "(特)韭菜猪肉",
            "count": "1",
            "price": "¥21.0"
        },
        {
            "name": "(特)大家都很爱吃的老牌外婆菜肉泥",
            "count": "2",
            "price": "¥22.0"
        },
        {
            "name": "(特)珍珠翡翠白玉汤",
            "count": "3",
            "price": "¥23.0"
        },
        {
            "name": "(特)蚂蚁上树",
            "count": "4",
            "price": "¥24.0"
        },
        {
            "name": "(特)红色鱼块",
            "count": "5",
            "price": "¥25.0"
        }
    ]
})

feed(int count)

(进纸数)

参数说明

属性 类型 默认值 描述
count int 进纸数

printBarCode(JSONObject options)

(打印条形码)

options 参数说明

属性 类型 默认值 描述
content String 内容
width int 条形码宽度
height int 条形码高度

printQrCode(JSONObject options)

(打印二维码)

options 参数说明

属性 类型 默认值 描述
content String 内容
side int 二维码图片长度
gravity String 默认居中 是否居中:left,right,center

printSplit()

(打印分割线)

printSplit()

(打印分割线)

print()

(当打印内容设置完成后,需要调用此方法来实现真正的打印)

destory()

销毁当前已经设置的打印内容

示例程序

以下只是部分代码,完整示例请下载插件使用示例工程

<template>
   <div>
      <button type="primary" @click="testPrint">打印文本测试</button>
      <button type="primary" @click="testPrintTable">打印一个订单</button>
   </div>
</template>

<script>
    // 获取 module 
    var printModule = uni.requireNativePlugin("Jcohy-Pos")
    const modal = uni.requireNativePlugin('modal');
    export default {
        methods: {
            testPrint() {
                // 调用异步方法
                printModule.printText({
                        'content': '大众点评',
                        'fontSize': 'large',
                        'fontStyle':'bold',
                        'center':true,
                })

                printModule.printText({
                    'content': 'www.dianping.com',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':true,
                })

                printModule.feed(1)
                printModule.printSplit()

                printModule.printText({
                    'content': '验证消费成功',
                    'fontSize': 'large',
                    'fontStyle':'bold',
                    'center':true,
                })

                printModule.printText({
                    'content': '套餐名:肯德基100元代金券',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':false,
                })

                printModule.printText({
                    'content': '售价:90元',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':false,
                })

                printModule.printText({
                    'content': '商户名:KFC(中山公园站)',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':false,
                })

                printModule.printText({
                    'content': '消费时间:2015-06-07 09:27',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':false,
                })

                printModule.feed(1)
                printModule.printSplit()

                printModule.printQrCode({
                    'content':'https://www.baidu.com/',
                    'side':300,
                    'gravity':'center'
                })

                printModule.print();
            },
            testPrintTable(){
                printModule.printText({
                    'content': '商家名称:大娘水饺',
                    'fontSize': 'large',
                    'fontStyle':'bold',
                    'center':true,
                })

                printModule.printText({
                    'content': '营业时间:00:00-23:59',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':true,
                })

                printModule.feed(1)
                printModule.printSplit()

                printModule.printText({
                    'content': '[店铺联]\n订单号:123323433453\n下单时间:2015-6-30 17:30\n取货时间:2015-7-5\n联系电话:138-9383-8379\n地址:浙江省瑞安市东山街道竹山路号',
                    'fontSize': 'medium',
                    'fontStyle':'normal',
                    'center':false,
                })

                printModule.feed(1)

                printModule.printTable({
                    "rows": {
                        "name": 16,
                        "count": 6,
                        "price": 10
                    },
                    "sort": {
                        "count": 2,
                        "name": 1,
                        "price": 3
                    },
                    "header": {
                        "name": "商品名称",
                        "count": "数量",
                        "price": "金额"
                    },
                    "data": [
                        {
                            "name": "(特)韭菜猪肉",
                            "count": "1",
                            "price": "¥21.0"
                        },
                        {
                            "name": "(特)大家都很爱吃的老牌外婆菜肉泥",
                            "count": "2",
                            "price": "¥22.0"
                        },
                        {
                            "name": "(特)珍珠翡翠白玉汤",
                            "count": "3",
                            "price": "¥23.0"
                        },
                        {
                            "name": "(特)蚂蚁上树",
                            "count": "4",
                            "price": "¥24.0"
                        },
                        {
                            "name": "(特)红色鱼块",
                            "count": "5",
                            "price": "¥25.0"
                        }
                    ]
                })

                printModule.printText({
                    'content': '商品总数:2件',
                    'fontSize': 'small',
                    'fontStyle':'normal',
                    'center':false,
                })

                printModule.printText({
                    'content': '消费总金额:124.5元',
                    'fontSize': 'medium',
                    'fontStyle':'bold',
                    'center':false,
                })

                printModule.printSplit()

                printModule.printQrCode({
                    'content': 'https://www.baidu.com/',
                    'gravity': 'center',
                    'side':300
                })

                printModule.printBarCode({
                    'content': '1234567890',
                    'width': 500,
                    'height':60
                })

                printModule.print(ret => {
                    modal.toast({
                        message: ret,
                        duration: 1.5
                    });
                });
            },
            gotoNativePage() {
                testModule.gotoNativePage();
            }
        }
    }
</script>

使用自定义基座打包,在 旺 Pos 中运行,打印出的效果如下

打印效果

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

作者未提供license.md

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问