1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/in-wechat-BLETicketPrinter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

Текущее состояние проекта:

  • Текст печатается.
  • Таблицы и списки печатаются.
  • Текст выравнивается по левому и правому краю при печати.
  • Двумерный код печатается (можно передать параметры в виде данных двумерного кода). [Примечание от 13.02.2023: при печати на Android двумерный код выдаёт ошибку! Требуется исправить в будущем!]

Способ использования:

  1. Скопируйте этот проект в папку BLETicketPrinter в корневом каталоге вашего приложения мини-программы.
git clone https://gitee.com/in-wechat/BLETicketPrinter.git BLETicketPrinter
  1. Отредактируйте файл app.json, добавьте страницу для вызова функции печати.
{
    "pages":[
        "BLETicketPrinter/pages/printer/printer"
    ]
}
  1. Вызовите код /pages/index/index.js:
import { Printer } from "../../BLETicketPrinter/printer";

Page({
    data: {
        order: {
            //.....
        }
    },
    onLoad: function (options) {
        this.initData();
    },
    //Процесс можно выбрать из получения данных с сервера
    initData(){
        this.setData({
            order: {
                //Данные заказа
                order_id: "202207120513",
                state_string: "завершено",
                make_time: "2022 год 7 месяц 12 день",
                time: "2022-07-12 13:14:20",
                //Сотрудник, оформивший заказ
                employee_name: "Иу Юэр",
                employee_phone: "186xxxx8888",
                //Информация о клиенте
                customer_name: "Чжан Сань",
                customer_phone: "138xxxx8998",
                //Название магазина
                shop_name: "Центр печати на площади",
                shop_address: "Район Цинсю, улица Миньцзу, район xxx, площадь Синьцзи",
                shop_phone: "159xxxx0246",
                //Список товаров заказа
                sku_list: [
                    {name: "Ледяной сахар, жёлтая кожица, рассада", quantity: 50, price: 12, amount: 10},
                    {name: "Драгоценная наложница, жёлтая кожица, рассада", quantity: 20, price: 18, amount: 15},
                    {name: "Чёрный алмаз, жёлтая кожица, рассада", quantity: 30, price: 13, amount: 10},
                    {name: "Удобрение для посадки, также используется для подкормки", quantity: 20, price: 90, amount: 80}
                ],
                //Общая сумма заказа
                sku_amount: 3150,
                amount: 2500,
                sku_discount: 450,
                discount: 200,
                fee: 0,
                //Общее количество товара
                sku_quantity: 120
            }
        });
    },
    //Печать. Обратите внимание, что ширина билета при печати составляет 32 символа на моём устройстве. Для других устройств необходимо настроить ширину соответствующим образом.
    print_ing: false,
    print(){
        if(this.print_ing) return;
        this.print_ing = true;
        let order = this.data.order;
        //Преобразование списка товаров заказа в таблицу для печати с заголовком
        let sku_table = [];
        //Заголовок таблицы — одномерный массив, представляющий количество столбцов. Здесь используются три столбца.
        sku_table.push(["Название", "Количество", "Цена за единицу"]);
        //Каждая строка таблицы представляет один товар
        for(let i=0; i<order.sku_list.length; i++){
            let sku = order.sku_list[i];
            //Цифры должны быть представлены в виде строк, чтобы избежать ошибок при печати
            sku_table.push([sku.name, sku.quantity.toString(), sku.amount.toFixed(2)]);
        }
        //
        let printer = new Printer("gb2312");
        printer.init()
            //Ширина бумаги по умолчанию составляет 32 символа. При печати таблицы необходимо установить ширину каждого столбца в соответствии с шириной бумаги.
            .setPaperWidth(32)
            //Рекомендуется начать печать с пустой строки
            //Сначала напечатайте название магазина в качестве заголовка
            .newLine().printText(order.shop_name)
            //Используйте одну строку для заполнения знака равенства в качестве разделительной линии
            .newLine().fillText("=")
            //Номер заказа, обратите внимание, что один пробел равен одному символу. Один китайский иероглиф равен двум символам
            .newLine().printText("Номер заказа:" + order.order_id.toString())
            .newLine().printText("Статус заказа:" + order.state_string)
            .newLine().printText("Оформивший сотрудник:" + order.employee_name + "(" + order.employee_phone.toString() + ")")
            .newLine().printText("Клиент:" + order.customer_name + "(" + order.customer_phone.toString() + ")")
            .newLine().printText("Время оформления заказа:" + order.make_time)
            //Вся страница имеет ширину 32 символа, печатается одна таблица с тремя столбцами. Ширина первого столбца составляет 16 символов, второго — 4 символа, третьего — 8 символов.
            //Поскольку добавлены границы, ширина равна: 1+16+1+4+1+8+1, зарезервированы символы границ.
            .newLine().printTable(sku_table, [16,4,8], true)
            //Напечатать два абзаца текста, выровненных по левому и правому краям соответственно
            .newLine().printLRText("Общее количество товаров:", order.sku_quantity.toString() + "шт.")
            .newLine()
            .newLine().printLRText("Общая стоимость товаров:", order.sku_amount.toFixed(2))
            .newLine().printLRText("Прочие расходы:", "+" + order.fee.toFixed(2))
            .newLine().printLRText("Специальная скидка для клиентов:", "-" + order.sku_discount.toFixed(2))
            .newLine().printLRText("Дополнительная скидка от магазина:", "-" + order.discount.toFixed(2))
            .newLine()
            .newLine().printLRText("Фактическая сумма к оплате:", order.amount.toFixed(2))
            .newLine()
            .newLine().printText("Адрес магазина:" + order.shop_address)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Используется для интеграции Bluetooth чеков в мини-программы (печать чеков для периферийных устройств с низким энергопотреблением Bluetooth), что удобно для внедрения в другие проекты. Излишний код был удалён, использование упрощено. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/in-wechat-BLETicketPrinter.git
git@api.gitlife.ru:oschina-mirror/in-wechat-BLETicketPrinter.git
oschina-mirror
in-wechat-BLETicketPrinter
in-wechat-BLETicketPrinter
master