From 2d417b14723d4b6e3309726c2b3022e5d59c2463 Mon Sep 17 00:00:00 2001 From: chris <510148846@qq.com> Date: Thu, 28 Mar 2024 10:04:31 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + .hbuilderx/launch.json | 20 + AndroidManifest.xml | 0 App.vue | 63 + api/common.js | 43 + api/exam.js | 39 + api/question.js | 27 + api/school.js | 42 + api/task.js | 39 + assets/images/bg/userIndexHeadBg.png | Bin 0 -> 9385 bytes assets/images/icons/my_study.png | Bin 0 -> 6314 bytes assets/images/icons/task.png | Bin 0 -> 10230 bytes assets/images/icons/userIndex_order.png | Bin 0 -> 2793 bytes assets/images/logo/ghlogo.png | Bin 0 -> 17675 bytes .../package/hybrid_html_uni.webview.1.5.5.js | 1 + assets/styles/common.scss | 4 + assets/styles/common/config.scss | 4 + assets/styles/common/function.scss | 43 + assets/styles/common/mixins.scss | 51 + assets/styles/common/setting.scss | 1 + assets/styles/content.scss | 5 + assets/styles/content/atoms.scss | 48 + assets/styles/content/base.scss | 2 + assets/styles/content/base/reset.scss | 67 + assets/styles/content/base/typography.scss | 64 + assets/styles/content/cover.scss | 13 + assets/styles/content/cover/base.scss | 4 + assets/styles/content/cover/button.scss | 9 + assets/styles/content/cover/check-list.scss | 10 + assets/styles/content/cover/checkbox.scss | 10 + assets/styles/content/cover/form.scss | 9 + assets/styles/content/cover/input.scss | 16 + assets/styles/content/cover/list.scss | 20 + assets/styles/content/cover/load-more.scss | 7 + assets/styles/content/cover/nav-bar.scss | 0 assets/styles/content/cover/pagination.scss | 10 + assets/styles/content/cover/section.scss | 22 + .../content/cover/segmented-control.scss | 8 + assets/styles/content/cover/select.scss | 22 + assets/styles/content/layout.scss | 1 + assets/styles/content/layout/flex.scss | 73 + assets/styles/content/module.scss | 3 + assets/styles/content/module/avatar.scss | 42 + assets/styles/content/module/ep-footer.scss | 38 + assets/styles/content/module/ep-nav.scss | 0 assets/styles/content/module/form.scss | 8 + assets/styles/main.scss | 2 + components/.DS_Store | Bin 0 -> 6148 bytes components/ch-flex-item/ch-flex-item.scss | 0 components/ch-flex-item/ch-flex-item.vue | 21 + components/ch-flex/ch-flex.scss | 0 components/ch-flex/ch-flex.vue | 30 + .../ch-image-uploader/ch-image-uploader.scss | 46 + .../ch-image-uploader/ch-image-uploader.vue | 152 + components/ch-nav-bar/ch-nav-bar.scss | 26 + components/ch-nav-bar/ch-nav-bar.vue | 41 + components/ch-nav-btn/ch-nav-btn.scss | 11 + components/ch-nav-btn/ch-nav-btn.vue | 21 + components/cjn-print/bluetooth.js | 279 ++ components/cjn-print/cjn-print.vue | 290 ++ components/cjn-print/commands.js | 193 + components/cjn-print/gbk.js | 201 + components/cjn-print/printerjobs.js | 161 + components/cjn-print/printerutil.js | 91 + components/cjn-print/readme.md | 6 + components/cjn-print/util.js | 66 + components/cjn-print/weapp.qrcode.esm.js | 5 + components/components.js | 7 + components/nativePrint/index.vue | 218 ++ components/nativePrint/libs/BluetoothTool.js | 452 +++ .../nativePrint/libs/encoding-indexes.js | 47 + components/nativePrint/libs/encoding.js | 3312 +++++++++++++++++ components/nativePrint/libs/esc.js | 313 ++ components/nativePrint/libs/tsc.js | 388 ++ components/nativePrint/logo.bmp | Bin 0 -> 926 bytes components/nativePrint/logo.png | Bin 0 -> 4023 bytes components/nativePrint/miniAppPrint.vue | 341 ++ components/nativePrint/xtHead.jpg | Bin 0 -> 101281 bytes components/question-item/question-item.vue | 64 + .../bleBlueTooth.vue | 134 + .../wangqingzhou311-bleBlueTooth/command.js | 50 + .../wangqingzhou311-bleBlueTooth/printer.js | 330 ++ .../指令手册/打印机自定义指令手册 v1.0.0.pdf | Bin 0 -> 363267 bytes .../指令手册/标签打印机编程手册tspl_1.pdf | Bin 0 -> 869681 bytes .../指令手册/标签打印机编程手册tspl_2.pdf | Bin 0 -> 1555460 bytes .../指令手册/票据打印机编程手册esc_1.pdf | Bin 0 -> 766134 bytes .../指令手册/面单打印机指令手册cpcl_2.pdf | Bin 0 -> 3051942 bytes .../指令手册/面单打印机编程手册cpcl_1.pdf | Bin 0 -> 485285 bytes components/xun-bluetoothPrint-t/.DS_Store | Bin 0 -> 6148 bytes components/xun-bluetoothPrint-t/index.vue | 312 ++ .../xun-bluetoothPrint-t/print/bluetooth.js | 326 ++ .../xun-bluetoothPrint-t/print/commands.js | 193 + components/xun-bluetoothPrint-t/print/gbk.js | 193 + .../xun-bluetoothPrint-t/print/printerjobs.js | 235 ++ .../xun-bluetoothPrint-t/print/printerutil.js | 91 + components/xun-bluetoothPrint-t/print/util.js | 66 + .../print/weapp.qrcode.esm.js | 5 + components/xun-bluetoothPrint/.DS_Store | Bin 0 -> 6148 bytes components/xun-bluetoothPrint/index.vue | 276 ++ .../xun-bluetoothPrint/print/bluetooth.js | 265 ++ .../xun-bluetoothPrint/print/commands.js | 193 + components/xun-bluetoothPrint/print/gbk.js | 201 + .../xun-bluetoothPrint/print/printerjobs.js | 221 ++ .../xun-bluetoothPrint/print/printerutil.js | 91 + components/xun-bluetoothPrint/print/util.js | 66 + .../print/weapp.qrcode.esm.js | 5 + index.html | 21 + .../command.js | 50 + .../package.json | 20 + .../searchDevices.js | 257 ++ main.js | 36 + manifest.json | 103 + package-lock.json | 1839 +++++++++ package.json | 20 + pages.json | 161 + pages/exam/exam.scss | 7 + pages/exam/exam.vue | 73 + pages/examDetails/examDetails.scss | 11 + pages/examDetails/examDetails.vue | 141 + pages/index/index.scss | 27 + pages/index/index.vue | 99 + pages/login/login.scss | 25 + pages/login/login.vue | 91 + pages/print/cjn-print/bluetooth.js | 279 ++ pages/print/cjn-print/cjn-print.vue | 290 ++ pages/print/cjn-print/commands.js | 193 + pages/print/cjn-print/gbk.js | 201 + pages/print/cjn-print/printerjobs.js | 163 + pages/print/cjn-print/printerutil.js | 91 + pages/print/cjn-print/readme.md | 6 + pages/print/cjn-print/util.js | 66 + pages/print/cjn-print/weapp.qrcode.esm.js | 5 + pages/print/print.scss | 14 + pages/print/print.vue | 328 ++ pages/print/printer.js | 30 + pages/printSetting/printSetting.scss | 27 + pages/printSetting/printSetting.vue | 62 + pages/quesDetail/quesDetail.scss | 66 + pages/quesDetail/quesDetail.vue | 104 + pages/questions/questions.scss | 41 + pages/questions/questions.vue | 131 + pages/setting/setting.vue | 49 + pages/subjectSelect/subjectSelect.scss | 44 + pages/subjectSelect/subjectSelect.vue | 115 + pages/task/task.scss | 7 + pages/task/task.vue | 73 + pages/taskDetails/taskDetails.scss | 11 + pages/taskDetails/taskDetails.vue | 109 + postcss.config.js | 28 + router/index.js | 36 + static/logo.png | Bin 0 -> 4023 bytes store/system.js | 35 + store/user.js | 17 + uni.promisify.adaptor.js | 10 + uni.scss | 113 + uniCloud-aliyun/database/JQL查询.jql | 12 + useModules/useForm.js | 27 + useModules/useNavigate.js | 24 + utils/auth.js | 18 + utils/interaction/toast.js | 110 + utils/network/config.js | 7 + utils/network/request.js | 149 + vite.config.js | 17 + 163 files changed, 17019 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 AndroidManifest.xml create mode 100644 App.vue create mode 100644 api/common.js create mode 100644 api/exam.js create mode 100644 api/question.js create mode 100644 api/school.js create mode 100644 api/task.js create mode 100644 assets/images/bg/userIndexHeadBg.png create mode 100644 assets/images/icons/my_study.png create mode 100644 assets/images/icons/task.png create mode 100644 assets/images/icons/userIndex_order.png create mode 100644 assets/images/logo/ghlogo.png create mode 100644 assets/package/hybrid_html_uni.webview.1.5.5.js create mode 100644 assets/styles/common.scss create mode 100644 assets/styles/common/config.scss create mode 100644 assets/styles/common/function.scss create mode 100644 assets/styles/common/mixins.scss create mode 100644 assets/styles/common/setting.scss create mode 100644 assets/styles/content.scss create mode 100644 assets/styles/content/atoms.scss create mode 100644 assets/styles/content/base.scss create mode 100644 assets/styles/content/base/reset.scss create mode 100644 assets/styles/content/base/typography.scss create mode 100644 assets/styles/content/cover.scss create mode 100644 assets/styles/content/cover/base.scss create mode 100644 assets/styles/content/cover/button.scss create mode 100644 assets/styles/content/cover/check-list.scss create mode 100644 assets/styles/content/cover/checkbox.scss create mode 100644 assets/styles/content/cover/form.scss create mode 100644 assets/styles/content/cover/input.scss create mode 100644 assets/styles/content/cover/list.scss create mode 100644 assets/styles/content/cover/load-more.scss create mode 100644 assets/styles/content/cover/nav-bar.scss create mode 100644 assets/styles/content/cover/pagination.scss create mode 100644 assets/styles/content/cover/section.scss create mode 100644 assets/styles/content/cover/segmented-control.scss create mode 100644 assets/styles/content/cover/select.scss create mode 100644 assets/styles/content/layout.scss create mode 100644 assets/styles/content/layout/flex.scss create mode 100644 assets/styles/content/module.scss create mode 100644 assets/styles/content/module/avatar.scss create mode 100644 assets/styles/content/module/ep-footer.scss create mode 100644 assets/styles/content/module/ep-nav.scss create mode 100644 assets/styles/content/module/form.scss create mode 100644 assets/styles/main.scss create mode 100644 components/.DS_Store create mode 100644 components/ch-flex-item/ch-flex-item.scss create mode 100644 components/ch-flex-item/ch-flex-item.vue create mode 100644 components/ch-flex/ch-flex.scss create mode 100644 components/ch-flex/ch-flex.vue create mode 100644 components/ch-image-uploader/ch-image-uploader.scss create mode 100644 components/ch-image-uploader/ch-image-uploader.vue create mode 100644 components/ch-nav-bar/ch-nav-bar.scss create mode 100644 components/ch-nav-bar/ch-nav-bar.vue create mode 100644 components/ch-nav-btn/ch-nav-btn.scss create mode 100644 components/ch-nav-btn/ch-nav-btn.vue create mode 100644 components/cjn-print/bluetooth.js create mode 100644 components/cjn-print/cjn-print.vue create mode 100644 components/cjn-print/commands.js create mode 100644 components/cjn-print/gbk.js create mode 100644 components/cjn-print/printerjobs.js create mode 100644 components/cjn-print/printerutil.js create mode 100644 components/cjn-print/readme.md create mode 100644 components/cjn-print/util.js create mode 100644 components/cjn-print/weapp.qrcode.esm.js create mode 100644 components/components.js create mode 100644 components/nativePrint/index.vue create mode 100644 components/nativePrint/libs/BluetoothTool.js create mode 100644 components/nativePrint/libs/encoding-indexes.js create mode 100644 components/nativePrint/libs/encoding.js create mode 100644 components/nativePrint/libs/esc.js create mode 100644 components/nativePrint/libs/tsc.js create mode 100644 components/nativePrint/logo.bmp create mode 100644 components/nativePrint/logo.png create mode 100644 components/nativePrint/miniAppPrint.vue create mode 100644 components/nativePrint/xtHead.jpg create mode 100644 components/question-item/question-item.vue create mode 100644 components/wangqingzhou311-bleBlueTooth/bleBlueTooth.vue create mode 100644 components/wangqingzhou311-bleBlueTooth/command.js create mode 100644 components/wangqingzhou311-bleBlueTooth/printer.js create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/打印机自定义指令手册 v1.0.0.pdf create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/标签打印机编程手册tspl_1.pdf create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/标签打印机编程手册tspl_2.pdf create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/票据打印机编程手册esc_1.pdf create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/面单打印机指令手册cpcl_2.pdf create mode 100644 components/wangqingzhou311-bleBlueTooth/指令手册/面单打印机编程手册cpcl_1.pdf create mode 100644 components/xun-bluetoothPrint-t/.DS_Store create mode 100644 components/xun-bluetoothPrint-t/index.vue create mode 100644 components/xun-bluetoothPrint-t/print/bluetooth.js create mode 100644 components/xun-bluetoothPrint-t/print/commands.js create mode 100644 components/xun-bluetoothPrint-t/print/gbk.js create mode 100644 components/xun-bluetoothPrint-t/print/printerjobs.js create mode 100644 components/xun-bluetoothPrint-t/print/printerutil.js create mode 100644 components/xun-bluetoothPrint-t/print/util.js create mode 100644 components/xun-bluetoothPrint-t/print/weapp.qrcode.esm.js create mode 100644 components/xun-bluetoothPrint/.DS_Store create mode 100644 components/xun-bluetoothPrint/index.vue create mode 100644 components/xun-bluetoothPrint/print/bluetooth.js create mode 100644 components/xun-bluetoothPrint/print/commands.js create mode 100644 components/xun-bluetoothPrint/print/gbk.js create mode 100644 components/xun-bluetoothPrint/print/printerjobs.js create mode 100644 components/xun-bluetoothPrint/print/printerutil.js create mode 100644 components/xun-bluetoothPrint/print/util.js create mode 100644 components/xun-bluetoothPrint/print/weapp.qrcode.esm.js create mode 100644 index.html create mode 100644 js_sdk/wangqingzhou311-android-blueTooth/command.js create mode 100644 js_sdk/wangqingzhou311-android-blueTooth/package.json create mode 100644 js_sdk/wangqingzhou311-android-blueTooth/searchDevices.js create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/exam/exam.scss create mode 100644 pages/exam/exam.vue create mode 100644 pages/examDetails/examDetails.scss create mode 100644 pages/examDetails/examDetails.vue create mode 100644 pages/index/index.scss create mode 100644 pages/index/index.vue create mode 100644 pages/login/login.scss create mode 100644 pages/login/login.vue create mode 100644 pages/print/cjn-print/bluetooth.js create mode 100644 pages/print/cjn-print/cjn-print.vue create mode 100644 pages/print/cjn-print/commands.js create mode 100644 pages/print/cjn-print/gbk.js create mode 100644 pages/print/cjn-print/printerjobs.js create mode 100644 pages/print/cjn-print/printerutil.js create mode 100644 pages/print/cjn-print/readme.md create mode 100644 pages/print/cjn-print/util.js create mode 100644 pages/print/cjn-print/weapp.qrcode.esm.js create mode 100644 pages/print/print.scss create mode 100644 pages/print/print.vue create mode 100644 pages/print/printer.js create mode 100644 pages/printSetting/printSetting.scss create mode 100644 pages/printSetting/printSetting.vue create mode 100644 pages/quesDetail/quesDetail.scss create mode 100644 pages/quesDetail/quesDetail.vue create mode 100644 pages/questions/questions.scss create mode 100644 pages/questions/questions.vue create mode 100644 pages/setting/setting.vue create mode 100644 pages/subjectSelect/subjectSelect.scss create mode 100644 pages/subjectSelect/subjectSelect.vue create mode 100644 pages/task/task.scss create mode 100644 pages/task/task.vue create mode 100644 pages/taskDetails/taskDetails.scss create mode 100644 pages/taskDetails/taskDetails.vue create mode 100644 postcss.config.js create mode 100644 router/index.js create mode 100644 static/logo.png create mode 100644 store/system.js create mode 100644 store/user.js create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uniCloud-aliyun/database/JQL查询.jql create mode 100644 useModules/useForm.js create mode 100644 useModules/useNavigate.js create mode 100644 utils/auth.js create mode 100644 utils/interaction/toast.js create mode 100644 utils/network/config.js create mode 100644 utils/network/request.js create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b9a7f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +Android-SDK*/ +uni_modules/ +unpackage/ + diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..0a68351 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,20 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "openVueDevtools" : true, + "playground" : "standard", + "type" : "uni-app:app-android" + }, + { + "app-plus" : { + "launchtype" : "local" + }, + "type" : "uniCloud" + }, + { + "openVueDevtools" : true, + "type" : "uni-app:app-ios" + } + ] +} diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..e69de29 diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..71956e0 --- /dev/null +++ b/App.vue @@ -0,0 +1,63 @@ + + + diff --git a/api/common.js b/api/common.js new file mode 100644 index 0000000..f4dbb32 --- /dev/null +++ b/api/common.js @@ -0,0 +1,43 @@ +import request from '@/utils/network/request'; + +/** + * 登录接口 + * @param {Object} params + */ +export function login (params) { + return request({ + url: '/api/user.ashx?act=studentlogin', + method: 'GET', + data: params + }) +} + +/** + * 登出接口 + */ +export function logout () { + return request({ + url: '', + method: 'GET' + }) +} + +export function getImgData(url) { + return new Promise((resolve, reject) => { + uni.request({ + url, + method: 'GET', + responseType: 'arraybuffer', + success: (e) => { + const imgData = uni.arrayBufferToBase64(e.data) + const imgBase64 = 'data:image/png;base64,' + imgData + // resolve(e.data) + resolve(imgBase64) + }, + fail: (error) => { + console.log(error) + reject(error) + } + }) + }) +} diff --git a/api/exam.js b/api/exam.js new file mode 100644 index 0000000..a129dee --- /dev/null +++ b/api/exam.js @@ -0,0 +1,39 @@ +import request from '@/utils/network/request'; + +/** + * 获取考试列表 + * @param {Object} data + * { studentid: 学生id, status: 考试状态(进行中:1, 已结束: 2) } + */ +export function getExamList(data, config = {}) { + return request({ + url: '/api/user.ashx?act=studentexamlist', + method: 'GET', + data + }, config) +} + +/** + * 获取考试详情 + * @param {Object} data + * { examid: 考试id, studentid: 学生id } + */ +export function getExamInfo(data, config = {}) { + return request({ + url: '/api/user.ashx?act=studentexaminfo', + method: 'GET', + data + }) +} + +/** + * 上传考试图片 + */ +export function uploadExamImg(data, config = {}) { + const { userId, examId, file } = data; + return request({ + url: `/api/user.ashx?act=subexaminfo&studentid=${userId}&examid=${examId}`, + method: 'POST', + data: file + }, config) +} diff --git a/api/question.js b/api/question.js new file mode 100644 index 0000000..68a808a --- /dev/null +++ b/api/question.js @@ -0,0 +1,27 @@ +import request from '@/utils/network/request.js'; + +/** + * 获取试题列表 + * @param {Object} data + * { subjectid: 科目id, gradeid: 年纪id } + */ +export function getQuestionList (data, config = {}) { + return request({ + url: '/api/user.ashx?act=questionlist', + method: 'GET', + data + }, config) +} + +/** + * 获取试题列表 + * @param {Object} data + * { questionid: 试题id } + */ +export function getQuestionInfo (data, config = {}) { + return request({ + url: '/api/user.ashx?act=questioninfo', + method: 'GET', + data + }, config) +} diff --git a/api/school.js b/api/school.js new file mode 100644 index 0000000..9754381 --- /dev/null +++ b/api/school.js @@ -0,0 +1,42 @@ +import request from '@/utils/network/request'; + +/** + * 获取学校列表 + */ +export function getSchoolList() { + return request({ + url: '/api/user.ashx?act=getschoollist', + method: 'GET' + }) +} + +/** + * 获取年纪列表 + */ +export function getGradeList () { + return request({ + url: '/api/user.ashx?act=getgradelist', + method: 'GET' + }) +} + +/** + * 获取科目列表 + */ +export function getSubjectList () { + return request({ + url: '/api/user.ashx?act=getsubjectlist', + method: 'GET' + }) +} + +/** + * 获取知识点 + */ +export function getKnowledgeList (data) { + return request({ + url: '/api/user.ashx?act=getknowledgelist', + method: 'GET', + data + }) +} diff --git a/api/task.js b/api/task.js new file mode 100644 index 0000000..b57f48c --- /dev/null +++ b/api/task.js @@ -0,0 +1,39 @@ +import request from '@/utils/network/request'; + +/** + * 获取作业列表 + * @param {Object} data + * { studentid: 学生id, status: 作业状态(已提交:1, 未提交: 2) } + */ +export function getTaskList(data, config = {}) { + return request({ + url: '/api/user.ashx?act=studenthomeworklist', + method: 'GET', + data + }, config) +} + +/** + * 获取作业详情 + * @param {Object} data + * { taskid: 考试id, studentid: 学生id } + */ +export function getTaskInfo(data, config = {}) { + return request({ + url: '/api/user.ashx?act=studenthomeworkinfo', + method: 'GET', + data + }) +} + +/** + * 上传作业图片 + */ +export function uploadTaskImg(data, config = {}) { + const { userId, workId, file } = data; + return request({ + url: `/api/user.ashx?act=subworkinfo&studentid=${userId}&workid=${workId}`, + method: 'POST', + data: file + }, config) +} diff --git a/assets/images/bg/userIndexHeadBg.png b/assets/images/bg/userIndexHeadBg.png new file mode 100644 index 0000000000000000000000000000000000000000..d165586d3a81ebe16be6a077f3d42964c7276aab GIT binary patch literal 9385 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 F{{U{9`@#SK literal 0 HcmV?d00001 diff --git a/assets/images/icons/my_study.png b/assets/images/icons/my_study.png new file mode 100644 index 0000000000000000000000000000000000000000..d71c6c03e8981000eef62b98c02666a9a9b9f8aa GIT binary patch literal 6314 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 literal 0 HcmV?d00001 diff --git a/assets/images/icons/task.png b/assets/images/icons/task.png new file mode 100644 index 0000000000000000000000000000000000000000..6d47e4378bcd5a37562b69d7a3fdc95f00ca45cd GIT binary patch literal 10230 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 literal 0 HcmV?d00001 diff --git a/assets/images/icons/userIndex_order.png b/assets/images/icons/userIndex_order.png new file mode 100644 index 0000000000000000000000000000000000000000..0b86a7e6441c0ffcb721331fec533e6e191697aa GIT binary patch literal 2793 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 A>;M1& literal 0 HcmV?d00001 diff --git a/assets/package/hybrid_html_uni.webview.1.5.5.js b/assets/package/hybrid_html_uni.webview.1.5.5.js new file mode 100644 index 0000000..2c9b980 --- /dev/null +++ b/assets/package/hybrid_html_uni.webview.1.5.5.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).uni=n()}(this,(function(){"use strict";try{var e={};Object.defineProperty(e,"passive",{get:function(){!0}}),window.addEventListener("test-passive",null,e)}catch(e){}var n=Object.prototype.hasOwnProperty;function i(e,i){return n.call(e,i)}var t=[];function o(){return window.__dcloud_weex_postMessage||window.__dcloud_weex_}function a(){return window.__uniapp_x_postMessage||window.__uniapp_x_}var r=function(e,n){var i={options:{timestamp:+new Date},name:e,arg:n};if(a()){if("postMessage"===e){var r={data:n};return window.__uniapp_x_postMessage?window.__uniapp_x_postMessage(r):window.__uniapp_x_.postMessage(JSON.stringify(r))}var d={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__uniapp_x_postMessage?window.__uniapp_x_postMessageToService(d):window.__uniapp_x_.postMessageToService(JSON.stringify(d))}else if(o()){if("postMessage"===e){var s={data:[n]};return window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(s):window.__dcloud_weex_.postMessage(JSON.stringify(s))}var w={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessageToService(w):window.__dcloud_weex_.postMessageToService(JSON.stringify(w))}else{if(!window.plus)return window.parent.postMessage({type:"WEB_INVOKE_APPSERVICE",data:i,pageId:""},"*");if(0===t.length){var u=plus.webview.currentWebview();if(!u)throw new Error("plus.webview.currentWebview() is undefined");var g=u.parent(),v="";v=g?g.id:u.id,t.push(v)}if(plus.webview.getWebviewById("__uniapp__service"))plus.webview.postMessageToUniNView({type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}},"__uniapp__service");else{var c=JSON.stringify(i);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE",'",').concat(c,",").concat(JSON.stringify(t),");"))}}},d={navigateTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;r("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("redirectTo",{url:encodeURI(n)})},getEnv:function(e){a()?e({uvue:!0}):o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r("postMessage",e.data||{})}},s=/uni-app/i.test(navigator.userAgent),w=/Html5Plus/i.test(navigator.userAgent),u=/complete|loaded|interactive/;var g=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var v=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var _=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var m=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var E=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var x=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var S,h=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},y=[function(e){if(s||w)return window.__uniapp_x_postMessage||window.__uniapp_x_||window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&u.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),d},function(e){if(_)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(g){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(v)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(p)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(m){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(E)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(x)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),d}],M=0;Md3PAKyCGr-@jObc{EDdms8-#X?NZmrlCc~2MACr$H|PzI|*IT<`Tozf0< zkwH)7xPD2FWY9bF|ItlymZiPCUjL;^Q{^{rr-SKWCioVgnn9em@_w(;>K<}$&zLM3 z+pT0j?F^dL4;x13tyFiqHXvb4m)OkcNqHa2z>K_#d(t8>HQN`1K&F0FhS z)xzQG>Ze-xdHL&TR0(E3F0So1e`G(kxwMRs!hdh&oyRd;!FU#5=W$nOMxVfcoNJsz zP#6#fgn`#$!0$J~%xf(md4&OC;GboH_lFS5722k6^inOhYGDbsmP(U!hkUFkbx=J zt@8Q5^>qFJFi3jBfH3f1F`&wu@n!?BZLm*cZGgnoyzuwUWuJ_Lq6is8#g@f_3& Z#zQuMk;lRzMj&z#urx>`4E#|B?f{D + + + + + + + + \ No newline at end of file diff --git a/components/ch-flex/ch-flex.scss b/components/ch-flex/ch-flex.scss new file mode 100644 index 0000000..e69de29 diff --git a/components/ch-flex/ch-flex.vue b/components/ch-flex/ch-flex.vue new file mode 100644 index 0000000..8eeba0f --- /dev/null +++ b/components/ch-flex/ch-flex.vue @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/components/ch-image-uploader/ch-image-uploader.scss b/components/ch-image-uploader/ch-image-uploader.scss new file mode 100644 index 0000000..d2b88ba --- /dev/null +++ b/components/ch-image-uploader/ch-image-uploader.scss @@ -0,0 +1,46 @@ +.img-item, +.select-btn { + height: 300rpx; + width: 300rpx; + border-radius: 5rpx; + overflow: hidden; + border: 1px solid $uni-border-color; + margin: 10px; +} + +.img-item { + position: relative; + + + .img-item { + margin-left: 10px; + } + + image { + height: 100%; + width: 100%; + pointer-events: none; + } + + .del-btn { + position: absolute; + top: 7px; + right: 2px; + z-index: 99; + } +} + +.img-list { + display: flex; + flex-wrap: wrap; +} + +.select-btn { + margin-left: 10px; + display: flex; + justify-content: center; + align-items: center; + + .uni-icons { + color: $uni-border-color!important; + } +} \ No newline at end of file diff --git a/components/ch-image-uploader/ch-image-uploader.vue b/components/ch-image-uploader/ch-image-uploader.vue new file mode 100644 index 0000000..b402047 --- /dev/null +++ b/components/ch-image-uploader/ch-image-uploader.vue @@ -0,0 +1,152 @@ + + + + + \ No newline at end of file diff --git a/components/ch-nav-bar/ch-nav-bar.scss b/components/ch-nav-bar/ch-nav-bar.scss new file mode 100644 index 0000000..a4e86ee --- /dev/null +++ b/components/ch-nav-bar/ch-nav-bar.scss @@ -0,0 +1,26 @@ +button { + line-height: 1.7; +} + +.nav-title { + font-size: $uni-font-size-lg; + align-self: center; + margin-left: 20px; + font-weight: bold; +} + +.uni-navbar { + position: relative; +} + +.uni-navbar::after { + content: ''; + position: absolute; + bottom: -1px; + left: 0; + width: 100%; + height: 1px; + background-color: #fff; + background: linear-gradient(90deg, #000, #fff, #000); + z-index: 99; +} \ No newline at end of file diff --git a/components/ch-nav-bar/ch-nav-bar.vue b/components/ch-nav-bar/ch-nav-bar.vue new file mode 100644 index 0000000..78d809d --- /dev/null +++ b/components/ch-nav-bar/ch-nav-bar.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/components/ch-nav-btn/ch-nav-btn.scss b/components/ch-nav-btn/ch-nav-btn.scss new file mode 100644 index 0000000..8be9e2d --- /dev/null +++ b/components/ch-nav-btn/ch-nav-btn.scss @@ -0,0 +1,11 @@ +.ch-nav-btn { + background-color: $uni-color-primary; + font-size: $uni-font-size-sm; + line-height: 1.8; + border-radius: 8px; + padding: 0 12rpx; + + &:active { + background-color: transparentize($uni-color-primary, 0.3); + } +} \ No newline at end of file diff --git a/components/ch-nav-btn/ch-nav-btn.vue b/components/ch-nav-btn/ch-nav-btn.vue new file mode 100644 index 0000000..e2e88dd --- /dev/null +++ b/components/ch-nav-btn/ch-nav-btn.vue @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/components/cjn-print/bluetooth.js b/components/cjn-print/bluetooth.js new file mode 100644 index 0000000..58cd3e1 --- /dev/null +++ b/components/cjn-print/bluetooth.js @@ -0,0 +1,279 @@ +class Bluetooth { + + constructor() { + this.isOpenBle = false; + this.deviceId = ""; + this.serviceId = ""; + this.writeId = ""; + this.notifyId = ""; + this.openBluetoothAdapter(); + } + + showToast(title) { + uni.showToast({ + title: title, + icon: 'none', + 'duration': 2000 + }); + } + //初始化蓝牙模块,检查蓝牙是否已打开 + openBluetoothAdapter() { + return new Promise((resolve, reject) => { + uni.openBluetoothAdapter({ + success: res => { + this.isOpenBle = true; + resolve(res); + }, + fail: err => { + setTimeout(function() { + uni.showToast({ + title:"请打开蓝牙和定位功能", + icon:"none" + }) + }, 1000); + reject(err); + }, + }); + }); + } + //搜索周边蓝牙设备 + startBluetoothDevicesDiscovery() { + if (!this.isOpenBle) { + this.showToast(`请打开蓝牙和定位功能`) + return; + } + + let self = this; + uni.showLoading({ + title: '正在搜索蓝牙设备' + }) + return new Promise((resolve, reject) => { + setTimeout(() => { + uni.startBluetoothDevicesDiscovery({ + success: res => { + resolve(res) + }, + fail: res => { + self.showToast(`搜索设备失败` + JSON.stringify(err)); + reject(err); + } + }) + }, 300); + }); + } + //停止搜索周报蓝牙设备 + stopBluetoothDevicesDiscovery() { + let self = this; + return new Promise((resolve, reject) => { + uni.stopBluetoothDevicesDiscovery({ + success: e => { + uni.hideLoading(); + }, + fail: e => { + uni.hideLoading(); + self.showToast('停止搜索失败,请重试'); + } + }) + }); + } + //连接设备 + createBLEConnection() { + let deviceId = this.deviceId; + let self = this; + + return new Promise((resolve, reject) => { + uni.createBLEConnection({ + deviceId, + success: (res) => { + console.log("成功连接设备" + JSON.stringify(res)); + resolve(res) + }, + fail: err => { + self.showToast(`设备连接失败` + JSON.stringify(err)); + reject(err); + } + }) + }); + } + + //获取蓝牙设备所有服务(service) + getBLEDeviceServices() { + let _serviceList = []; + let deviceId = this.deviceId; + let self = this; + + return new Promise((resolve, reject) => { + setTimeout(() => { + uni.getBLEDeviceServices({ + deviceId, + success: res => { + //console.log('获取服务成功'); + //console.log(res.services); + for (let service of res.services) { + if (service.isPrimary) { + _serviceList.push(service); + } + } + if(res.services.length<=0){ + self.showToast('成功获取服务,但没有可用服务'); + } + + resolve(_serviceList) + }, + fail: err => { + //设备已连接,但未能获取设备服务,也有可能连接处于断开状态 + self.showToast('未获取蓝牙设备相关服务'); + reject(err); + }, + }) + }, 2000); + }); + } + + //获取蓝牙设备某个服务中所有特征值(characteristic) + getBLEDeviceCharacteristics() { + let deviceId = this.deviceId; + let serviceId = this.serviceId; + + let self = this; + return new Promise((resolve, reject) => { + uni.getBLEDeviceCharacteristics({ + deviceId, + serviceId, + success: res => { + for (let _obj of res.characteristics) { + //获取notify + if (_obj.properties.notify) { + self.notifyId = _obj.uuid; + uni.setStorageSync('notifyId', self.notifyId); + } + //获取writeId + if (_obj.properties.write) { + self.writeId = _obj.uuid; + uni.setStorageSync('writeId', self.writeId); + } + } + + let result = { + 'notifyId': self.notifyId, + 'writeId': self.writeId + }; + //成功获取到设备的服务特征值,可以测试设备功能了 + //self.showToast('已获取打印机服务,请测试打印功能') + resolve(result) + }, + fail: err => { + //已连接设备,但未能获取设备服务 + self.showToast('未能获取设备相关服务,请重试') + reject(err); + } + }) + }); + } + + //断开蓝牙链接 + closeBLEConnection() { + let deviceId = this.deviceId; + uni.closeBLEConnection({ + deviceId, + success(res) { + console.log('蓝牙连接已断开') + } + }) + } + //启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值 + notifyBLECharacteristicValue() { + let deviceId = this.deviceId; + let serviceId = this.serviceId; + let characteristicId = this.notifyId; + //特征值变化时,异步通知提示 + uni.notifyBLECharacteristicValueChange({ + state: true, // 启用 notify 功能 + deviceId, + serviceId, + characteristicId, + success(res) { + //监听低功耗蓝牙设备的特征值变化事件。必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification + uni.onBLECharacteristicValueChange(function(res) { + + }); + }, + fail(res) { + console.log('notifyBLECharacteristicValueChange failed:' + res.errMsg); + + } + }); + } + //向低功耗蓝牙设备特征值中写入二进制数据。注意:必须设备的特征值支持 write 才可以成功调用 + writeBLECharacteristicValue(buffer) { + let deviceId = this.deviceId; + let serviceId = this.serviceId; + let characteristicId = this.writeId; + + //console.log("当前连接蓝牙设备服务信息: " + JSON.stringify(this)); + + return new Promise((resolve, reject) => { + uni.writeBLECharacteristicValue({ + deviceId, + serviceId, + characteristicId, + value: buffer, + success(res) { + //console.log('message发送成功', JSON.stringify(res)); + resolve(res); + }, + fail(err) { + console.log('message发送失败', JSON.stringify(err)); + reject(err); + } + }); + }); + } + + //关闭蓝牙连接,想要连接要重新启动 + closeBluetoothAdapter() { + uni.closeBluetoothAdapter({ + success: res => { + //console.log(res) + } + }); + } + + //若APP在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。 + reconnect() { + (async () => { + try { + this.deviceId = this.deviceId || uni.getStorageSync("deviceId");//设备id + this.serviceId = this.serviceId || uni.getStorageSync("serviceId");//服务id + this.notifyId = this.notifyId || uni.getStorageSync("notifyId");// + this.writeId = this.writeId || uni.getStorageSync("writeId");//写入二进制数据 特征值id + //连接蓝牙设备 + await this.createBLEConnection(); + //获取蓝牙设备服务 + //await this.getBLEDeviceServices(); + + uni.hideLoading() + if(!this.serviceId || this.serviceId == ''){ + //this.showToast('打印服务已断开,请到开发设置重新搜索蓝牙设备') + uni.showModal({ + title: '打印机断开提示', + content: '打印服务已断开,请到开发设置重新搜索蓝牙设备' + }); + }else if(!this.writeId || this.writeId == ''){ + //重新获取蓝牙设备服务特征值 + await this.getBLEDeviceCharacteristics(); + this.showToast('成功连接打印机') + }else { + this.showToast('成功连接打印机') + } + + } catch (err) { + uni.hideLoading() + console.log("err: " + JSON.stringify(err)); + } + + })(); + } +} + +export default Bluetooth; diff --git a/components/cjn-print/cjn-print.vue b/components/cjn-print/cjn-print.vue new file mode 100644 index 0000000..ce97fb7 --- /dev/null +++ b/components/cjn-print/cjn-print.vue @@ -0,0 +1,290 @@ + + + + + + diff --git a/components/cjn-print/commands.js b/components/cjn-print/commands.js new file mode 100644 index 0000000..3401e76 --- /dev/null +++ b/components/cjn-print/commands.js @@ -0,0 +1,193 @@ +/** + * 修改自https://github.com/song940/node-escpos/blob/master/commands.js + * ESC/POS _ (Constants) + */ +var _ = { + LF: [0x0a], + FS: [0x1c], + FF: [0x0c], + GS: [0x1d], + DLE: [0x10], + EOT: [0x04], + NUL: [0x00], + ESC: [0x1b], + EOL: '\n', +}; + +/** + * [FEED_CONTROL_SEQUENCES Feed control sequences] + * @type {Object} + */ +_.FEED_CONTROL_SEQUENCES = { + CTL_LF: [0x0a], // Print and line feed + CTL_GLF: [0x4a, 0x00], // Print and feed paper (without spaces between lines) + CTL_FF: [0x0c], // Form feed + CTL_CR: [0x0d], // Carriage return + CTL_HT: [0x09], // Horizontal tab + CTL_VT: [0x0b], // Vertical tab +}; + +_.CHARACTER_SPACING = { + CS_DEFAULT: [0x1b, 0x20, 0x00], + CS_SET: [0x1b, 0x20] +}; + +_.LINE_SPACING = { + LS_DEFAULT: [0x1b, 0x32], + LS_SET: [0x1b, 0x33] +}; + +/** + * [HARDWARE Printer hardware] + * @type {Object} + */ +_.HARDWARE = { + HW_INIT: [0x1b, 0x40], // Clear data in buffer and reset modes + HW_SELECT: [0x1b, 0x3d, 0x01], // Printer select + HW_RESET: [0x1b, 0x3f, 0x0a, 0x00], // Reset printer hardware +}; + +/** + * [CASH_DRAWER Cash Drawer] + * @type {Object} + */ +_.CASH_DRAWER = { + CD_KICK_2: [0x1b, 0x70, 0x00], // Sends a pulse to pin 2 [] + CD_KICK_5: [0x1b, 0x70, 0x01], // Sends a pulse to pin 5 [] +}; + +/** + * [MARGINS Margins sizes] + * @type {Object} + */ +_.MARGINS = { + BOTTOM: [0x1b, 0x4f], // Fix bottom size + LEFT: [0x1b, 0x6c], // Fix left size + RIGHT: [0x1b, 0x51], // Fix right size +}; + +/** + * [PAPER Paper] + * @type {Object} + */ +_.PAPER = { + PAPER_FULL_CUT: [0x1d, 0x56, 0x00], // Full cut paper + PAPER_PART_CUT: [0x1d, 0x56, 0x01], // Partial cut paper + PAPER_CUT_A: [0x1d, 0x56, 0x41], // Partial cut paper + PAPER_CUT_B: [0x1d, 0x56, 0x42], // Partial cut paper +}; + +/** + * [TEXT_FORMAT Text format] + * @type {Object} + */ +_.TEXT_FORMAT = { + TXT_NORMAL: [0x1b, 0x21, 0x00], // Normal text + TXT_2HEIGHT: [0x1b, 0x21, 0x10], // Double height text + TXT_2WIDTH: [0x1b, 0x21, 0x20], // Double width text + TXT_4SQUARE: [0x1b, 0x21, 0x30], // Double width & height text + + TXT_UNDERL_OFF: [0x1b, 0x2d, 0x00], // Underline font OFF + TXT_UNDERL_ON: [0x1b, 0x2d, 0x01], // Underline font 1-dot ON + TXT_UNDERL2_ON: [0x1b, 0x2d, 0x02], // Underline font 2-dot ON + TXT_BOLD_OFF: [0x1b, 0x45, 0x00], // Bold font OFF + TXT_BOLD_ON: [0x1b, 0x45, 0x01], // Bold font ON + TXT_ITALIC_OFF: [0x1b, 0x35], // Italic font ON + TXT_ITALIC_ON: [0x1b, 0x34], // Italic font ON + + TXT_FONT_A: [0x1b, 0x4d, 0x00], // Font type A + TXT_FONT_B: [0x1b, 0x4d, 0x01], // Font type B + TXT_FONT_C: [0x1b, 0x4d, 0x02], // Font type C + + TXT_ALIGN_LT: [0x1b, 0x61, 0x00], // Left justification + TXT_ALIGN_CT: [0x1b, 0x61, 0x01], // Centering + TXT_ALIGN_RT: [0x1b, 0x61, 0x02], // Right justification +}; + +/** + * [BARCODE_FORMAT Barcode format] + * @type {Object} + */ +_.BARCODE_FORMAT = { + BARCODE_TXT_OFF: [0x1d, 0x48, 0x00], // HRI barcode chars OFF + BARCODE_TXT_ABV: [0x1d, 0x48, 0x01], // HRI barcode chars above + BARCODE_TXT_BLW: [0x1d, 0x48, 0x02], // HRI barcode chars below + BARCODE_TXT_BTH: [0x1d, 0x48, 0x03], // HRI barcode chars both above and below + + BARCODE_FONT_A: [0x1d, 0x66, 0x00], // Font type A for HRI barcode chars + BARCODE_FONT_B: [0x1d, 0x66, 0x01], // Font type B for HRI barcode chars + + BARCODE_HEIGHT: function (height) { // Barcode Height [1-255] + return [0x1d, 0x68, height]; + }, + BARCODE_WIDTH: function (width) { // Barcode Width [2-6] + return [0x1d, 0x77, width]; + }, + BARCODE_HEIGHT_DEFAULT: [0x1d, 0x68, 0x64], // Barcode height default:100 + BARCODE_WIDTH_DEFAULT: [0x1d, 0x77, 0x01], // Barcode width default:1 + + BARCODE_UPC_A: [0x1d, 0x6b, 0x00], // Barcode type UPC-A + BARCODE_UPC_E: [0x1d, 0x6b, 0x01], // Barcode type UPC-E + BARCODE_EAN13: [0x1d, 0x6b, 0x02], // Barcode type EAN13 + BARCODE_EAN8: [0x1d, 0x6b, 0x03], // Barcode type EAN8 + BARCODE_CODE39: [0x1d, 0x6b, 0x04], // Barcode type CODE39 + BARCODE_ITF: [0x1d, 0x6b, 0x05], // Barcode type ITF + BARCODE_NW7: [0x1d, 0x6b, 0x06], // Barcode type NW7 + BARCODE_CODE93: [0x1d, 0x6b, 0x48], // Barcode type CODE93 + BARCODE_CODE128: [0x1d, 0x6b, 0x49], // Barcode type CODE128 +}; + +/** + * [IMAGE_FORMAT Image format] + * @type {Object} + */ +_.IMAGE_FORMAT = { + S_RASTER_N: [0x1d, 0x76, 0x30, 0x00], // Set raster image normal size + S_RASTER_2W: [0x1d, 0x76, 0x30, 0x01], // Set raster image double width + S_RASTER_2H: [0x1d, 0x76, 0x30, 0x02], // Set raster image double height + S_RASTER_Q: [0x1d, 0x76, 0x30, 0x03], // Set raster image quadruple +}; + +/** + * [BITMAP_FORMAT description] + * @type {Object} + */ +_.BITMAP_FORMAT = { + BITMAP_S8: [0x1b, 0x2a, 0x00], + BITMAP_D8: [0x1b, 0x2a, 0x01], + BITMAP_S24: [0x1b, 0x2a, 0x20], + BITMAP_D24: [0x1b, 0x2a, 0x21] +}; + +/** + * [GSV0_FORMAT description] + * @type {Object} + */ +_.GSV0_FORMAT = { + GSV0_NORMAL: [0x1d, 0x76, 0x30, 0x00], + GSV0_DW: [0x1d, 0x76, 0x30, 0x01], + GSV0_DH: [0x1d, 0x76, 0x30, 0x02], + GSV0_DWDH: [0x1d, 0x76, 0x30, 0x03] +}; + +/** + * [BEEP description] + * @type {string} + */ +_.BEEP = [0x1b, 0x42]; // Printer Buzzer pre hex + +/** + * [COLOR description] + * @type {Object} + */ + +_.COLOR = { + 0: [0x1b, 0x72, 0x00], // black + 1: [0x1b, 0x72, 0x01] // red +}; + +/** + * [exports description] + * @type {[type]} + */ +module.exports = _; \ No newline at end of file diff --git a/components/cjn-print/gbk.js b/components/cjn-print/gbk.js new file mode 100644 index 0000000..6749c80 --- /dev/null +++ b/components/cjn-print/gbk.js @@ -0,0 +1,201 @@ +/*! + * gbk.js v0.3.0 + * Homepage https://github.com/cnwhy/GBK.js + * License MIT + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.GBK = factory()); +}(this, (function () { 'use strict'; + + var GBK = function (gbk_us) { + var arr_index = 0x8140; //33088; + var gbk = { + decode: function (arr) { + var str = ""; + for (var n = 0, max = arr.length; n < max; n++) { + var code = arr[n] & 0xff; + if (code > 0x80 && n + 1 < max) { + var code1 = arr[n + 1] & 0xff; + if(code1 >= 0x40){ + code = gbk_us[(code << 8 | code1) - arr_index]; + n++; + } + } + str += String.fromCharCode(code); + } + return str; + }, + encode: function (str) { + str += ''; + var gbk = []; + var wh = '?'.charCodeAt(0); //gbk中没有的字符的替换符 + for (var i = 0; i < str.length; i++) { + var charcode = str.charCodeAt(i); + if (charcode < 0x80) gbk.push(charcode); + else { + var gcode = gbk_us.indexOf(charcode); + if (~gcode) { + gcode += arr_index; + gbk.push(0xFF & (gcode >> 8), 0xFF & gcode); + } else { + gbk.push(wh); + } + } + } + return gbk; + } + }; + return gbk; + }; + var gbk = GBK; + + var URI = function(GBK){ + var passChars = '!\'()*-._~'; + var otherPassChars = '#$&+,/:;=?@'; + function getModue(passChars){ + var passBits = passChars.split('').sort(); + var isPass = function (s){ + return ~passChars.indexOf(s) || /[0-9a-zA-Z]/.test(s) + }; + return { + encode:function(str){ + return (str+'').replace(/./g,function(v){ + if(isPass(v)) return v; + var bitArr = GBK.encode(v); + for(var i=0; i 0x80){ + var code2; + if(enstr.charAt(_i+1) === '%'){ + code2 = parseInt(enstr.substr(_i+2,2),16); + _i += 3; + }else{ + code2 = enstr.charCodeAt(_i+1); + _i += 1; + } + if(code2 >= 0x40){ + i = _i; + outStr += GBK.decode([code1,code2]); + continue; + } + }else{ + i += 2; + outStr += String.fromCharCode(code1); + continue; + } + } + } + outStr += char; + } + return outStr; + + } + } + } + + var URIComponent = getModue(passChars); + var URI = getModue(passChars + otherPassChars); + + return { + encodeURI:URI.encode, + decodeURI:URI.decode, + encodeURIComponent:URIComponent.encode, + decodeURIComponent:URIComponent.decode + } + }; + + var src = function (gbk_us){ + var gbk$$1 = gbk(gbk_us); + gbk$$1.URI = URI(gbk$$1); + return gbk$$1; + }; + + // 多进制转换后的数字还原函数 构建时会替换占位符 + var Fn_Hex_decode = function decode(){ + var n = 0, str = arguments[0]; + for (var i = 0,w = str.length; i < w; i++) { + var code = str.charCodeAt(i); + if(code < 38 || code > 126) return NaN; + n += (code - 38) * Math.pow(89, w - i - 1); + } + return n; + }; + + // 解压Unicode编码字符串函数 构建时会替换占位符 + var Fn_unzip = function unZip() { + return arguments[0].replace(/\x23(\d+)\x24/g, function (a, b) { + return Array(+b + 4).join("#"); + }) + .replace(/[\x26-\x7e]\x25[\x26-\x7e]/g,function(a){ + var b = a.substr(0,1).charCodeAt(0) + ,e = a.substr(2).charCodeAt(0) + ,str = String.fromCharCode(b); + while(b++ 0) { + data.length += 0x40 + 1; + } + for (var j = 0x40; j <= 0xfe; j++) { + if ( + (j == 0x7f) || + ((0xa1 <= i && i <= 0xa7) && j <= 0xa0) || + ((0xaa <= i && i <= 0xaf) && j >= 0xa1) || + (0xf8 <= i && j >= 0xa1) + ) { + data.push(undefined); + continue; + } + var hex = gbkArr[k++]; + var key = Fn_Hex_decode(hex); + data.push(key ? key : undefined); + } + } + return data; + } + var GBK$1 = function () { + // 生成按GBk编码顺数排列的编码映射数组 构建时会替换 zipData 的占位符 + var gbk_us = gbkArray(Fn_unzip("(T!HJ%LUX]e%gilotuwy{} (U!)-%/137>BDGHO%RTUW%\\_a%jl%rtw} (V!*+-0%27>C%EHJ%MP%R\\`cdfn%ptvz{} (W!()*,/3%579;=%CFGM%QWX\\^cdg%ilnprtvy%} (X!&')%.468CDHJLMOPSTWY%\\_b%dg%ilnprtuwxz%|~ (Y!'(*+-469%=?%GI%KO%RT%V[%_bdikmnptuy{}~ (Z!&')+%-/%;>@ACE%GKMNPR%TW[_%ikmo%rt%vy%{} ([!'(%+-%024%;=%BD%LO%QSTX%[]^`%ce%y{} (\\!()+%/1%7:%LN%SU%WY%cf%im%prt%xz%~ (]!&'%*-%/1%68%EG%cgloqs%uwx|%~ (^!')%-/02356;>FJKOPRSVWZ%]_`dfi%kmor%vyz (_!'+%-124%68;=@ACE%MOQRUVX%]_adegjqwx|~ (`!&)*-%/689;%=?%ADFIKLNOVX^%cehilmoq%uwyz|%~ (a!'),%/124%=?AD%HJ%PRSU%[]e%ho%qu%~ (b!()*,%.024%79;%=?A%FH%KM%WY%`c%ei%loq%tvy%| (c!'*+-.1346%8:%<>%GKLOQSUZ%\\_cghjltwy{| (d!(,/1%4679=>@D%JLMOQRTVWZ]`%ce%km%pr%tvy%} (e!+,-/0279%;>?DQW[%]_bdhqu%wy (f!&().47:;>ACEFHIKMP%SU^a%egikm%tx}~ (g!)*,.02%58<>BCGI%MPY[]`%bdeginpuv (h!(*-2%6=>A%CF%KMPRT%WZ\\%`deg%ln%qswxz{} (i!&+-%/1%469;>@AD%HJ%MP%TV%Y[\\abdh%mrsvx~ (j!&,%.0235%7:;>@%FH%PRTVXZ\\_%cf%hjkn%puw%{~ (k!').04578;=?%CFI%NQRTW%^`acdg%ilmo%ru%wz|~ (l!&(*%,.%9=%ACDHIK%OQS%U[%^`%ce%hk%ru%{~ (m!&')%79%CE%KM%PR%^`%hjkmnqxz%~ (n!&(*+./2%478<%>ACG%WYZ\\%^`%cgmnp%txy{} (o!&'%)+,.5%9;%BE%UWZ\\^%`b%il%ps%ux%~ (s!&)%:<%?A%CE%OQ%SU%bd%ilnpqstvwy%~ (t!&')+,.%246%9=>ACDF%ILNRVXY[\\ac%fiklprsvxy (u!&(%,.013%?BDG%IK%MRVXY[%^abeg%jl%ostyz}~ (v!'(%,.013%9;%=@%CIJMOR%VXZ[]%_a%lnp%rtv~ (w!&(%+-/%24%689<=?A%CE%KNPR%VX%Z\\%`bcf%oq%tv%|~ (x!&'(*+-%5:;=%@B%SU%[^%km%svxy{%~ (y!&(),%1346%:<>@B%DF%HKMNPQSU%Y[%qs%~ (z!()%ACEFH%OQ%_bfnpqwx{}~ ({!&)+-%023569=ADEG%IKMV^%`c%fhinq%swxz (|!&'%)+%-/2%:>@ADEG%KMO%U[\\^`acefi%lnpquwy|%~ (}!&(+-%02%578:%?AI%MP%TVZ%\\^`be%hjlnoq%vx%} )&!&'%+-%356:<>?ABD%MO%TWX[%`b%fhj%mopr%vx{}~ )'!&)%-/%69%@BCG%QSTVX%bdghj%mo%{}~ )(!&'%9;%=?%WY%eg%mo%{} ))!'(+,2458=>@%DGHLOQ%SUVZ[_f%mp%twxz%~ )*!()-%025%:<%BE%IKLNOR%`dfhmp%rtwx{%} )+!(.137%:>%BD%HJP%SU%^a%fjkm%pr%} ),!&(%02568%:B%DFI%KMOQSVWY%[^%aehikmo%uxz%|~ )-!&'%358=%@B%DGIKLORSVX%Z\\^a%cgjq%suwxz~ ).!&(%+-%2467:%?AC%FI%MRSUVY^%`e%gijmnpqstwz{}~ )/!&()+,.9%;=>BCEIJLPQT%V^%`b%fh%loprv%|~ )0!'(*,-/%1457%:>?GJKMNPWY%[^%acdg%jlnp%ruwz{}~ )1!')*.035%79:=%DG%IL%PR%TVWY[^a%ejqruwx{%~ )2!&)%,.1%37%;=%@B%EHILO%QS%eg%nprtvwy%{}~ )3!&'%*,%/1%47%=?%BDF%XZ[]%ac%jl%txy{%~ )4!&'%+-%24%68%<>A%EHJ%Z\\%ik%su%z|~ )5!/058%:@D%FH%KN%SW\\_%afijlmp%su%wy%{} )7!(*+-59;?GHJKNTUZ\\_b%ejm%pt%wyz|%~ )8!&(%*-78:=%?ABD%ILMO%RUXY[b%eg%nqu%wy{%} )9!'(*%-014%79;%>CEIK%MOQ%WY\\^cgijmnqsuw%{} ):!&')%+02%46%<>AC%GJKM%PRTVX%[]bce%ilmpqt%y|~ );!()%+-%/14%9;%?ABDFHIOQ%WY[%]_%ce%lnp%rt%} )!'(+%.2578;%?ABEFHIKM%ORSUWZ%\\_`b%eh%jlnpqs%~ )?!&'(*%,/%146%8:ABD%HJMNP%RTVY%[_%ac%egj%mor%uwy{| )A!'(%+-/024%:=>@AHIK%NPRSUWY%]a%cehik%mo%qsuvx%{}~ )B!&')%,/%35%=@%DF%JL%OQ%TV%oqu%|~ )C!&(%-/34689;?%EJLMO%QTV%XZ\\^%ceglnpqt%wyz|} )D!&)*,/0279:<%@BG%IKLPQSVY[]%`beghjkmoq%tv%y{~ )E!'+%-0258:=>@E%LNQ%Za%cgkmopr%tvwyz~ )F!()%/14%79@CEGHK%OQ%SU%[^%dg%imnrz~ )G!'),0%9DF%MOR%Z\\^a%hj%ln%pr%{}~ )H!&*%-/2357%@BD%IKMO%RTUWXZ\\%`bce%nps%uw%y|~ )I!&'(*%,.%2479;%FI%KM%TVWY%[]%`b%dfhik%{}~ )J!'(*+.01346%9;<>?A%EIJL%NPRTY%[]%befhil%uxy{}~ )K!&()+,.%02%68%?ACEG%IK%PR%TW%bd%gi%rtv%~ )L!&(%36%;=?%DFH%KMO%QS%Y\\%`bce%ln%twy%} )M!&'(*%46%<>?A%CE%GI%QSV%Z\\%ce%lnq%~ )N!&'%~ )O!&'%178:%CE%HJM%OQ%TVWZ\\]_%jl%sz{}~ )P!&'%136%9>AEG%JMNP%RU%Y[%bd%koq%wy|} )Q!&'%*,.018:<%@B%IL%NP%RTV%XZ%\\^%dh%lnrw|%~ )R!'*,2%48:=>@%CEFJ%LOR%VX%Z]_%aijl%nr%vxz|~ )S!&(%*-.2589;ABGINTUWXZ[]%_bd%fh%kmqrt%y{}~ )U!()+,02%46;<>@EHLQ%TWY[]^`acdg%il%oqru%wy%} )V!&')*-.02359%=?EHOPSTVWYZ\\%ad%fk%mp%su%xz}~ )W!&),-/1%479:<>%@BDG%NP%SUY\\]_bcefhilp%rtvxz{} )X!&'(*,%36%=@%CFHJKM%OQ%[]^`%nq%suxy{%~ )Y!&)%/1%35689;<>@AC%FHKMPQTV%X[%^`%bd%fhjnpqs%u{ )Z!&)%24%79%@B%DFGI%MO%QU%^`%bd%gkmoqstv%|~ )[!&'%+.%024%=?%ACE%GI%KM%RU%WY[%]_ac%ik%mpqu%~ )\\!&'(*%-/%35%?ABDEG%LNP%UW%]`%jlo%z}~ )]!&'%DF%MP%VX%hj%ln%~ )^!&()+%8:%EIL%ORT%VX\\%_a%cf%hj%lnrsuvy%~ )_!&'%,246%8<@AF%IKM%Y\\^%`b%eglpr%xz|%~ )`!'(%14%8:;=@D%NP%W[%^`%mo%rtvx%~ )a!&'%+-/%359%=?%AD%GIKLN%SU%Y[%^`%ce%gj%nq%wy%{}~ )b!&'%)+-%/1%9;%DF%JM%VX%[]_%df%oq%|~ )c!&'%:<%EGIK%MP%RXZ\\^%dg%il%oq%suvxz|~ )d!()*-/%25689;%=@%BGHJ%NQSUVX%ce%psv%xz )e!&'%,1%35%8;=?%BDFG 'W!,-. &(+&.'&-~&'u'W!/1 ')>.= '.u'/!K. '0`'/!94 '1t'0T'/!?Bu`\\Q1t '0!)* '/!xy2IH ';!*( &'}')!\\] '+{.;U&'q.>!&' ')Z&'t',5':!GF '9!eiha`;:ML ')e'-!XVWY 'W?'-!67%?#3$ '6!-.%@ '5!rs%~ '6!&'%, '5!^_%g## ']!67%?## '-!&'%1## .;!RST .>+.;!VW%~ .)'W!mn%~ 'X!&'%f#8$t%~ 'Y!&'%p#5$ &0!=>%MO%U#5$]%mo%u#4$ .9!89<=BC@AD%G##>?:;4#67#6$ &1!cd%hTi%~ &2!&'%)#12$*%/K0%I#10$ &.!()7 ')!=?O_ '+}',('-!\\]%_ '/!)37fz{ '0z'8!CD%ft%~ '9!&'%)-%/VW|%~ ':!&J '0P'W!>IJ#8$ &(!uU &+7&(T&).&(]&)6&(\\&)F&(a&+9&(`&)h&(g&+;&(f&*-&(n&+=&(m&+!?ACE &(!p^ &,a-Qc&)!_c -Qd&,q#1$'Z!&'%J#18$ 'W!MN%U '^`'a!@AN%PSv 'b!'*+. .93.>!(*# ',@']G#'):#0$'Yv'X!no 'Y!wx 'W2'X!pq .9!LM%UW%Z\\%ik%n -R!*+%6 'W3#10$'7!LM%~ '8!&'%>#12$ )e!HIKN%SVWabei%lnp%uw%y{%~ )f!'+%-23679%;@BCEFHIM%PS%_abdf%ik%rt%~ )g!(*%79%=?@BDFGIJL%OQ%TV%XZ[]%bdfgkn%prsv%y{}~ )h!&'(,-/3%9;%>@B%EGIK%MO%RT%cehil%or%z}~ )i!&'%)+,/13579:?%CE%HJ%\\^`eh%tvwy%} )j!'(%,.13%57%9;<>@%JLN%UY%hj%~ )k!&')%1357;=%CF%IKN%TV%Y[%bdfhj%mqstv%z|} )l!'+1369:<>%ACDFGJM%PR%UZ%ad%fh%npr%tw%{}~ )m!&()+%.0%2479@%CEFHIMOQ%TVX%Z\\%_aeg%ilnrswyz|} )o!()+%-/346%=@%EGI%MOQ%TV%\\^%`b%iklnq%suw{|~ )p!&()+-.013%<>%FHILN%WYZ\\ (iC*r5(pM)89(gy(h[(gk)p*)o>*A;)s|*9E)ui)cO*s5*ux)R/({@(Z*)7s)B.(~d*4~)F{*42)@K)pg(_l)>Q)a|*2'*Jb(\\0(u2)4?)\\@*9t)8])5n(eJ(f+)|s(^7)mH))<)7>*Yr*ua)6M*2O(o@*t|*0J)cV)oo)E[)op);L(XR*W~)7F)z6)?3)hN);2)66*8L*xa)Dd)cf)61)76(Wo)k9(cY(a_*.d*b,))v)G`)Jk*6R*.k)HS)vH*E'*oR([d*U/*:L*4b(bm*L>(a&)p!]`bdelnrsu%wy%} )q!&'%-035%7:;=?@BCEFJLN%X[%^ac%egj%lnp%ty{}~ )r!&)+%-/%69%@C *B**t=(Yf(qR*{F({T)6!th )BK*V+++A)b})DT)um)12(c!`& *^r*4P*Wv*mT(Z=)e4(t-)1k)`B*K0(tz*:])Cj)}<)&|*/8)l*)TJ*[[*`!0t +3')Q4*cF)}()-`)v**@.*A<)Q!596 ))I)*v)nD*q<)>X),G).P*_0(s@*7;*a^*rQ*v?*_J*/W*X,)5](YH(e5(cm*_!9:< *a,)F:)-N*6j*JF+,1)3Y(`E)nu)-P)?.)\\_)Z'({u);N(^!A| )EP(T_)yA*{Q)_5)r!DE%GKNPQT%_a%ch%jm%rvwz%~ )s!&'%,/12469;%=?@BD%HJLN%Z\\%df%hk%or )mi)*e)gu*=C)(dx*E0)PD)1!mh )^Z*:;*8Q(Vg)SU*Bu)Y)lB(i*(ZQ*Y,)6G*mQ)C[(ky)[T))*(f9)^m*^P)62)*Y(*JJ)<>)yh(pX)Lv)5,(fL(UE)z*)1i)[j*T>)6B*`V*~U)y\\(e`)n?)7k(c()Rg*_p),X*~:*2q+3k(Xj(}?*Xd*1T)?G)_?(]j(^~*D_)&Z({W)7'*d@)lq*ZZ)z?)2()~4(V[*/9)rl(TW*7f(`7(_m)M5(d^*[|*n^*sl)YY*rZ)J))u!`abdfgklnp%ruyz|~ )v!')+%28%;=%@BCE%GI%KO%RT%VY%[]%jl%np%tvxy{|~ )w!&'%*,%.0%6 )tu(\\&)se):o*N`(t*):B)(~){E)Ie(W[*8Y(j8(Tx)mR){])*!Qy *q>(`5(f=)^e)9.*n~(oe)@n)Ig*d[(hY)W=*.I*IY)5O*/1)mY*;=)vD*si*_/)2o)kM*T1)Ov(`T*XP)O3*3G*>{(n-(bn(Vb(Ta(_D*(G*d_*&i(YL*[t*&C){b);m)&g(\\**51)nL*(i)W6*1o)D6(zh(|V)vN)<[):r)9b)8<*ns);3*_O)}h)nt)5o(tM(fJ)P2([z)5P))n)P?(Vw*X7*Ji)-i*`f)w!78%<>%GI%MO%]_%cgil%oqt%|~ )x!&)*2457:%=?A%GJL%PSTW%Z\\%_a%c )/R*2s)7/(U&(cd*b~)9p*4J)@/)R5(X()1n)W+*TB),v*Ef)-7)82(^&*;v)G=(_s)8t*[=(ZB(~G)xH(|Z(`J)zZ)1<*a2)pp).B)-{)ov*[a)^J)om)}])s8(_f*ar(qU(X0)Z3*_{)>G)}/)e0)VG*1n(yJ)6x)++(nl*?3)}@))e),\\*`J*/U*y')9:)Y_)ut)_;(^D*uF(p5)l2(W~)l5)+-)1f(u-)Vc)Px)ue(eY*sr(_!>t )9A(eg*mF*Tg*Ys)cW)u{*G_*_~*Tq(e=)x!de%jl%wy%~ )y!&'%*,%047:<=?@BDF%HKLNOQ%VX%Z]`bdfi%oqrtvwy|} )z!&'%)+.%24578:; (TG)q/(eK*m<*xV+2S*o.({Q*S_(T!hb (^x*>m)47(ai)F>(Xy)0D(_.)Ts(^()6Y)?9*rW*UQ*`O)m|*c*)rJ)Q2)dO)eX*T_(qf)r`*XL)DA*oA*3w)+<)Wk(u_)|\\)s{*o<)Pn)?O*/O(q7(]v*qn(|W(s((f,*[g)>a*x_(my*mP)q>*`y)9?(gq(t!@` (o~*\\N)Cs*ZH*8U(`[)1p(qF*F@)&;+0<(YM*x}*Sv(w@)0O(d:)6?*a.*c/*{T)0B*2B(]d*2i(|r*{J)U-(Uy)z!<>@AC%QS%UWY]_%df%oq%uw%~ ){!&'%57%9;A%DHKMO%RT%VYZ_%adgh *X0(e.*0B)}c(WK(U<*qO)T*)h1*C6))N)lg*21)L')t3*mE*-4(_T)_h(e**_e*:q*X))dt*{B)T0(o-*9z)?[*4.)5[*r((uu(W:*S|*.T)>9*=U*uI(iZ*ye*4)(c9*Ta(e}*4>)+5)Sf*X9*9s*d.(f-)Q{(_y*.Q(oB)`C)S,*(9(tq(W8)/1)2K*(Z(Tv(|_)E7*FD)&C*ne*yU)mS)`&*`Z(^{*/^*Sz(to(_W(X=(f*(tQ)>r*4(({,)69)7,*^z)*4)R&)}:(WJ(Ya)CK){!ijmo%qt%xz%~ )|!&'%+-%79%BDEG%JNOQT%Y[]%ehikm%ortvy%{} )}!&'*%,.0135%7;=A )Uj)VM)x`*K6),T)l()6]*^o(Yx*eW)?I*5!Z| )+2*5{*Xt(a0*MY*XK(t3([\\(Vl*qk)cT*6K*Wx(|**S`*r:(uT*/[(g;(ld(kU*TI)>4)JQ*mL)po)Xz)*a)kn)D+)E])|l*3z*Xv)2F)y>)>]*Xc(^T(`4*mU*/y*3x*.L(~C)Wy)DE*&;)o}+&I*6a*0|*),):}*oQ)z^(fN(h7)O^):`)4}+04*4w)m=(a3*uT*>e)Fo*F&*qP*s1*nF(Tp(ea*.s)Fl*Z-*2K)C2)+0*1H)}!CDFH%KMOQS%XZ\\^abgikmprsuw%~ )~!&'(*+./13578:<%?A%GIJL%NQS%VY%[^%`i%kmnp%rt%{}~ *&&(pL*2u)Gq))-)>6(a`)0F+4-(X}*\\H(^8({b),P))1)Re)7[*Wz(^=*m\\(bf)SM*:M)eC(p,)Di*X-(tE*_-*=*(g@)~H(Wk)Sk(zt(vE+2X(eA*Ee*~r*UB*3~)>@*x^(n6*sd(`H)k2(`j(|?)7l*L.(UC)7:)/\\)H{(^?({O(^l*N<)~\\*{[*08)1o)^'*X/(]n)*n*`S)ix*N>(ni)tz)-6+42*qI*^R+'T*TE)oj)Fu)Eh*Z8*X5(`W*^t)Yr)HN*n_*bs(n9)E(*K~*_X(gs*&!'*%-/%246%:=>@%BD%FI%KM%OQRT%XZ%]_a%hj%lopr%wy%~ *'!&')%.124%@B%GK +&)(zy)Us)R-(V9({j*~Q*d7)3v*b5*v{(f/)VX(|0(_p(j**0=*2&)u*4e*G])e<*(z)XG*'!LM%UW%{~ *(!&'%*.%8:%@CDFI%KPQSV%Y[%]_`d%hjk ),d*DB(h~)6g(V&)SX)5S*9x(h)(c])fQ)Yi)l8(`,(b~*TA)KF)-n)/2)W8(o2)O4)gi)G-*_i*/T)8s)0|(hv)n5*Um)`>)VF({])*j*;g)2s+1b)v}*G@*'0)oy(_c)1v)`u)A3)*;)0&*Tr)^K)86*^s).H)0;*Eo(ms)Pz)0m)35(cX)1`)AV*X?)yu(WU)_k)RN*Sp*TV*.r*;y)@X(wu+'Z)UM)WA*UL)U7(WT)^F*@%EG%NPQS%`b%vxz%} **!&'(*%,.%4 *3i*{:*`1)\\M*Sb+/q(v`*/!*J (ef)Df)HY*^{*'V*sc(e')/W)mb)Ry(d)(y2*.A)85(_S*55))9*@7)6C(^L(zs(WI)x>(`\\)18)UJ({!{y *S!^m )@+).W*r;(u`*/(*.D(kP)EC(t_(XU({m(aa*;o*xj*X>)l/*mq(Zw)z[(W2)EB*~H(y*)P5)pj(o=(|t)}N*qC)`w(^H*4-*97(uE*/E*;<)HA)Ex)v4)uS)7M)8r)~;(Yv(a+(_B*;e)KQ*g=*ZC*X1*N;*o/)~h(W1**!56%km%tv%~ *+!&'%= ([<*8P(`k*{D)WZ)Xv)VJ),7(\\s(vP(|d)UB)Rf)m**?<)GB(t|*So(c/*dE*rC*AH)I:)w+)`O*4z(V8*bP)UC*~N(v{(mQ):d*nJ)sy(Y.*5E)eM*NL*{O*/u*.x(a@)>T*dI*^!im (eH){\\):L)9])ox)yp*J5*r,)5F(al*9I)G.)DU)9/)rR)|Z)TV*.m*N](vD)5.*Bo*9l)lI(ZO(V_)mI*TO(}O))F)}_)?F*eL(V^)Tz*M2*)~*o'(VY*U3*_l*u^)A;)xR*_b)_n)Ut*+!>?%JL%RT%~ *,!&'%F (}B(as*;[(^.*:|)rB)Af++l(V@)1J*(!nc *.i(V)*R|)A_*xh*uD(r[)>g*o])-h)mm*uA)|!LK (_3)_1){^):I){<*.:)gP*w&(U2)^S(UJ*d&(d_)>L)@0*7!u~ (g9(}6)m>*v2)7B)eE)ma(}J*~C*=-(}E(g+)sw(U+)S\\*37)7<)9&))0(^C*Z!+l *o0(Yz(eB)1g)_.(a()8a+0:(w:(ZV)qw(d-*.|)<2)>&)6L)9P(ZD)cS*NC(_&*S}*.w(o**=/*mZ(^g(ex)&N*,!GH%~ *-!&'%-/%35%9;%P (YS)|P)UV*bg*~Y(iy(gA(cp(gZ),=):H)JF(_b)36(_}(q[(b@(o1)tB)qK)+M)3E*)7)5w)6Z(V6)^p*29)7a)_f*uK(oZ*:I)E{)Hv)vX*xw)yI(sr(g^(eL)W~(]p(`U({Y*Tb*43(i<(p0)0L(o4(f1){@)0)(zd)9_)6c(e@)6&({~)E;(h?){e*:T*dK)+)*Ki(t^(p8)7x*Z6*4s(o:)~2(Y2).v({t)OP(c0)}d)e.)Fy)t4)qv)@@(_((U|)pm(~k){k*?&(tt+'Y([W*-!QR%tv%~ *.!&'%46%8HNUVp~ */!-:KQ_xz|%~ *0!&'%)+.%7:; *{])2N)Xt(oG)@O)8W(n,)7V)6,)+i*qc(of)73(j'*Fc*5u*_4(i_*)_[)V@(b:(U=*t;*on*A})vM**-(]F(ou)AC%FHK%OS%UWX[]%`b%eghj%qsuw%{}~ *1!&'(*+/12457%=@B%FIJMOQ%SU%XZ\\^%befh%mqr )n-)|8*(B)SS*sS(a\\)j2(h;(Yr*31*V*5c*nX)/})_>*.]*(^(_<)G[*(a*96(Tj*^p*eJ)An(VB*Ti)(er*n7(Y,)?g(}!jf */V*DE)R6)-o)gA)Y|*/@)&9)8,(zz)Y~(d+(U^)9X)lb)6d*^X(Wa(Ve)ST*.P*Sw*>'*HJ*0?*`s*n})~d*~k*K}*>G)Tp*~P*.v(uU+1Y)gU)t6*Dv*~!6L (kb(et(pU(U]+1D(ce*_Y*54)ry*{g*F0)Yy*@k)C:)30)Zj*3![^_begj%oqrtv{ *4!'*%,0479:<=?IK%OS%Y\\cdfgjry{} *5!&)%,.%02367@BDF%HJ%VXY[^%`bd%hj *U4*9Y*;@)q2)Qs).d**:s*nt)Q;)si*my(c~*:p(^^)*,*V>*X8(U5)ge)E&)G_*dJ*tM)a4)SO)qI(xT*oB)Q/*0v)@p(|.(v-(x\\*q!7F (W'*=o*?J)Mp)px*o1)f.)H'(zo)qo*dn*uL*)3*`/*U'),b*'|)yP*N?)Sz*F^({})*1)HJ)q`*/6(^a(]r(b1(wD*/F*uM*:E):.)rk*Bv)yJ)X+)+/(uf*@i)^H)Qq)7))pX)>J)1/*qL)@W*H/+/s*nG(ej(g(*U7);~*5!kl%prtx%z} *6!()*-%13%68:<%>ADEG%JSU%Y[]%`bd%iklp%tvwy{}~ *7!&'%+-%25%8=>@%BDF%L )<&*C^)L>*6n)vk);o+'l)6|)Ci*)YR*A*)72)*c)vA))UO(^h),A(uA(ak)/D(u@)B-*DD)mC)8;)4[*)F*T^(h8)O9+/u)Pm*B{(fY([M)SR(ic*Y[)cJ))])/G)i>)77)9J)cj)-|)X4)U:)=T)[>)pq)vS)q<)lQ(`>(e8(U@)+4)?c*2`*4Z)6^(g1(`B)_0*Jk*Yx)T6(f|*4^(q**Ky*XT*r`*cz(XK)SI(jW)p_)te)6k)_{)[t)-Q*@D)H[)uX*&Y*6z)CI+0F)8x)v3(oR)tG*t})6!DGHKPU%XZ%\\^`acdfhj%nxy{~ *;!'(+-.2%;>?CEGLPR (i]*5i)mV)pG(cH)n)(\\y(}F*S)*&)([&)ce*~a*y_)ZA)k8)x9)<4)s3)7f*xq*X+(gl*35(U?(oM*:g*=p)*b(_`)kL*T((}T(oD)TQ*xg(wa)ti+'\\*_|*(E(`p)5m*nT(VZ*k*=L*?c(p^)Cr(n?)A^)Ub*U<)Bt)]E)C])OL)FI)56(v/(TI(_7)ZE)E^)S=(^B)HL(tm)Oy)lc)&a*5;+3<)?y)w!rk *~[*Xw(~.(UK(W<(f3(tw)tA(lV)Qt*_U),@)S+)T8*Sh)9H*;!STVWYZ]_%chj%nrw *AE%GI%KN%P )0I)U9)d:)6)*m!Ax (cR*_R)~9(Vs*U1(Uk+1r*m!df (`g)[B*aB)UA*U?(qB)'F)O!2[ )E6(f_*6&*0t(rq*A6),w)6e)Ld*o:)>m)0])G?)s5(UA(Y1))/*v*)(VF)y^)i<(bL*:')=&)y5(|;)S/*u=*^e)R)(Zn(d5)WO)<{)Ad)R7)1E*xW*T[)*u)iD){=)yC(T^*b7)hd)RI(mo*cx)Ss*Y2(cI*Ea)C0*\\K(}M*~;)Wj*=!QRV%Z]%_a%cehj%msu%z|%~ *>!()%-3%:<%AC%EH%OQ%Z\\%`bg%jln%rtx%z|~ *?!(*,- (e3(wQ+3w*YJ(dq(nD*y.)D(*do)Sw(^4)mn)7])dq(`R(a^*/{)^o)o*(d*+0A)K-)uJ*s]*K^*13)`_)b:(^U)E_)k:(sc)=l(mL*Sf*{K)63*.o)1y)_o(sk(V!UN ).X*vy(W6*Sa(_v(uW*.E)5p(Va)@.)5**;M*?z*;x*Gv)ad)YN({p*.l(^c):()E`*3f*;N*IL(]7({1(uO*_B(U`)Rd(^1*LQ*^Y*q}*AI)if*nj*q?)VI*:S),n)2*6@++w(r6*X[(TO(dw*?!./%24%7;>@%GIKLN%QS%_abdf%hlmoqstv%y|} *@!&'*,-/%469:^)G+(js(Tm):s*~d)6.(y+)ig*99)VL)Ho(\\e*1)5g*{k({?(|])9@(i'(e4)nq(^I*A+)E.)H4)PC)6U*^}(e1*82)Vt)m3(US*XN({')ao*BU)B!(p *0Z*FB+1k+2e(}c)Cm*`()FD)DD)5))|C(r])+L)>k)Zp*B!(),.%46%@C%IK%MOQ%SW%\\^`%fh%np%twxz|%~ *C!&'(*%02%57%E )0.(`Q*2C);Z*JN)l&))M)FF)7^*t`(e))c[*Te)R;)rH)z-(f2)s:*xZ*8<*TX)u1)CR)_C)?Q))MD)n;)[S*U8*Tl(oI)QO*Jp)v6)9Z(eV)_/)Rk(r0);0(q3)Ha*6m(hb*)-(ZH*\\V)Vo*YF)_m)9G)V>)Yl*/'*=g)Fv*`;)V{*rl*Se(t})d>*C1*6P)m`*PR)H0(`n*Zp*nk):/*xx*[9(iu(X5)C=(l})1U)V8(`](}N(tO)WE(rC)l-)kr)0E*84*5q)7{)DF*_s)qz*ZA*X4*mt))^(d;(f0)_E*D!acdf%lw%} *E!)*%-/1%69%=@AFHIMNR%TV%Z\\%^`cghmnp%ruwx{%~ *F!'(%*,%.17%9<%?ACF%HMNP%SVX )RG),4([3(VA)+C)8K*8g*`R)G**dB)sA(ei*n6)-H)|R)GP)8V)}f*.y)n&([N)6X(tZ*`G(_k)y;){G(n:)-v*`L)U~(}e(n[(em(]y)X>(mw)9`*xs*6Q*FW*LV*`8(e{(}t*79)7@)5t*5\\+0,*r6*~!8F )IU(ur)7=(i7)8'(gr*Et)U8(vw)k<*Jz)O|(t<*UW),l)Xo)gc*x](T~)_y({C)us)8N)AJ)p/)1K({R(wd(TM*6')Rq)gE(V5)Dn*09)-d)@C)CY).c(uQ(vu*F![]_abfh%jl%oqrtuwxz%|~ *G!&)%/3468%;=%?AC%HJKO%VXZ%\\^`%ch%jmoprsuw%{}~ *H!&(%.0%4 )(n).9(d'*vx*_n)Fx(n0(i()1_(U')[3*/5*:5*=q(vH(W!Ze (}C*.F)Ch*@r(fw)lL*4G(i{+'g(X/)Ww*Tw(|g)3>(cz)nj)Ws*D~)?)*qJ*.S(f?)zR*)a*q=(k(*1P)kD)8.*FY)VD){c)5-)?C(cv):@)S1))3(f`*m[(U9)Rh*TP(}P)@)*9c)H((f!B8 )Q+)Ox(V()8S(cW*8>(WH(Y7(oA)5&*tB)AT)d.(bg(ab)0x*TS)@])ai)Du*MR)u.)t2)A`(l)(f<*n{)d?*H!5679:>@%BDF%IKLNOQ%UW%Y\\%`d%jl%oq%tv%y{%} *I!&'%/1%46%9;%@B%IKN%QS%WZ )yx)0H))T)0b*6o(t;)1\\)aT)_q)YB)RW)dE)MH*K2))u(UM(xu(j<*n=)Tl*)R*s6)5+*.`)ru*Dr(c2*tb*_')Aw)&4(Y))eY(TQ(d\\(t5(ep)98*o)(]m(Vm++P*.>(gc*W}*J2*8W*qA)V1),c(y5)A.*r_)gj)fA(du*6L*{Z*10({a*r!mF *.Y)q8(dX*ow*{n)~l*Lp)XI(UN*1c)x6*TJ)1s(gx(V?*xY))?)L~(\\M(en*Ul*>1)u9*tH(`d(h@(m8*nZ)V+({l)Vi)AC*I![\\%hj%oqrt%vx%z}~ *J!&'%),%13468%>DEHKMOQ%TV%Z^adeghjl%oq%su%y{%~ *K!&(*%/ (|m(zm)FT*3s(iq)|~)>C)I|(V/)OY*G7*uv(c^)80);@*b0)?>*4E*Tt(^e)H1(d.*I0)4=)Sr)TP*U-(}V*BP*9v*nf)O5*_,)?R)/-).N(Yj*I|)@h*67)f<)1z(^@(`+(on)-F*b(*J**df)*g)D4)/Y(vG(]i(_i*4|(bp)S'*sa)aZ(WL(Yw*1-)C{(je*nb)y8*Jt*.}(rw)5(*tD*DN(k_*x[)-t*Su*?u*d+(e6)@6)*~)lY)0=**l(xA*/!+. *^S(jG({Z)1,)?m)g>*K!13%57%;=%@B%EHILMO%RT%VX[\\_%cefkln%twz%| *L!&')+%-/%57%;=@%DH%LN%PR%UX%[]%_ac *`A)oU)qi*.t*u_*BA(zv){:*t.*Iw(b3)a_).5)@5*TF(|Y*~9))))PB)Rb*S!jl *`B*_V(dA)7&+/!v} (fD(Tq*:+)cw*E7)&i*J7)VR*sb(g|(V.*Ss)`2(gh*qX)_a)WC)pi(Tk)tI*FT(~U),3*Nz*x|*q])^i)Sm(tj)9a)q|*J+)ZS*9:(qa)bL(dB)tO*s^(hS)-J)`Y({k*T~*~V)P<(tT+0&)y_)DM)6/(XQ)mE*0r)T`*r))R.(W+)mv(^G)Fj)Z}*a_*6B(uc)i~*L!de%lnoq%~ *M!&'%03%8:%MO%QSUWXZ%t );M(},*aD){W*U.(vN(gW*7y*<+*MT*26)IX(l<*2l)cU*eI(_)(UL*xU)9N(T`(eS)C1*5v(tB)VU(TF(sx(cJ):5*nK(Y&(WE*JA*xp(t]*a6)ys(V~*4t)m5)S0({S(v\\)-A)I-*Du(ZJ)):(UF)sq(Vy*9A)6T)@\\*ap(}~(VS)-]*7?*`p*3a)mO(V:*KY)26)P~).Q(U6)pc)Y:*TG*Sk*T!n5 ),?*22*1[*.h*;J*<'(mu)Pp*w,*r*(vo(e|*nP)W5({|*{C(}>),R*s-*M!uv%~ *N!&'%:=GM%OQ%SUWY%\\^a%df%hj%ln%y{%~ *O!&')%> (d&*:_)LN(x6+0g)+**/i*!./ *;|*G0*__*Xb)pa)-U*xv)uH)@i(h1)7O(XE*7<)ml)+N*sj*ZX*F;(g:)TH)V/)R?)0X(b/)k~)*l(WS)0y).r(}))l.*b4*ms)d~)Sg)X)*cv)CG(e!(P (X3*eD*TU(d~)*k*_S)W.(U{)p[)JU*DR)2A*8&(X;(Yg*`v++0)20)W!g^ *r{(Uu(wL*t,(TT(~+)y1({>*TQ*1L)gC(pi*9R*bG(e^*a&(j[)&=).,)2/)OD)e]*46*PQ*O!?@%^`%hj%~ *P!&'%@B%H )Up(|1*KZ*xd*Uv*~7+0*)WT(^p(]h(p-*J_(dU):S*_&(n)(f\\(nB)fR)Y(*/Y*_m*:?)2f)/Z*rX)C.*.@*Y!1j *mX(~_*(T)CF)1&*qT*2N(U~*bm(bh*r^(]f*_a*As*d1)AE*w.(ze(c,)tm)D')Fp(gt)^Y({g*^g(^Y(nd(g\\)=f)Ar*X!^C *5:*>v*aL*)6(_r*CH)E/)@2)\\.*E?*[v(lX*`X)ot)^Q)b\\*W|)7S(`3)TR*X<)/@(rv)3\\)C<*X`)5j(jS)Wm)Ck*^Q*P!IJ%PS%Z\\%~ *Q!&'%R *n;*qG)qh)F8)Jw(g6(U:)_:*T,);^)?-({<){J(Zj(|F)sI)QA*PA*(H)Sl)ph)?K*_()''(}Z*D,)F;(co)54)|F)XL*/>)L<)|M)-T)Zr),])9D)VK)D;(TN))X*X&(Vk*4D)o&*s9)7E)@v)6A)Sj*Xu)a7*0Q(]k*3d(eI*aM)6[(hD*F2*_**2;*nq*@o*_j)UU)h.)?A)q_)kZ)t\\*7t*Ww*m;(Y/)Dz)m]*T.*tK)8@*oH*r+*?i)84)r()-e)e\\(Uv)/F)>o)7Y)Ou)>:*Q!ST%uw%~ *R!&'%;=%[ ))o)mk*bW*S~*9d)E))>*(f5*FZ)ss*4&*5-)RH(U8*.a*3))q4)I5)PO)6*(Zl(Xf(n|)7q)Ot*Ye(eG)@1*.R).b)8+)9o*7!lm *0V))d)&,(`P)Aj)ya)z9*X()^t)mx)Yv)Si){X(Ts)p^).k*mR*JU*.b)yE*4C*eH(W!-R *8?(fl))&)U.*T0*(U*^^*3u))b(g=)pJ({P)A,*~n)hA)F]*Ev)Co)f=*T!\\? *`H)|f)_])a>)7.)s7(kx(U(*>a)E}(aj*E[*X.*nR)}e*R!\\]%{}~ *S!&'(*%\\inx *T!+4Nm *U)(X1)T=)x.*~E)6V)cH)7g(TY)tK*^V)<]*XZ*&()GC)*s*KJ(uS)*0R(|h*aT)@q)).(X2)Ej([1(X>(o3)+=#2$*U!CD%KM%PSUVX%_a%df%kn%tw%} *V!&'%)-%3568%:=?%EG%IK%_ (Uz(TR(]e(TV),<(cT(T[(V,(Td+'J(z|(lW(Tn)y2(U,(b}(U4(tS)cY(c})Qp(mt*4h*{l)Q3)re+2\\(T|(V3+2U(U!IV (V'*9O(zk(ie(kV(VX(d!CSY[d *uP*X](c)(eR(c!5=M *X\\(c!ur (_!u{ (`!(GMYZfx{v *?`(a!>CBQT (^N*0<(V!OW]V|u (W&(Vr(W!V.] (XF(W!0`bDf (X!@I )>3(X!@A (cx(d0*q!lqp *r'*qy*r!328?JU]bhj~ *s!*4M *a!vz|x *b!2':9<@ *Y|*Z!&'*.%03%57;<>%@BDJL%RT%VY[\\^%ac%jnor%vy{~ *[!'()+%-01348:;A%EH%MO%Z\\]_`cf *b!>6UKDVJMYlhb]aqu *c!+1OKP^\\fps (`'(th(a!cmn (b&(hQ(b!8>X (e<)be)s[),1(_!ho +'G(dl),>)lW))7(o/(p!3+ (rV(s!;DP (n!ehfoujk (o?(n!w~ (o!LhNi_^KPYV (p!7. (oo(p! (ov(p!*_bdc\\B~y (q)(p!ng *[!hjl%prsuw%y{}~ *\\!&'%*-%/1%79;%FIJLMO%UW%ik%~ *]!&' (q!<>. (pw(q!1OJuQ (r!=DYarX *{}+2^)4t*9!@DFVQoKUX^`r *:!&, *9w*:!68Q *9!_~u *:!9:/ *9!p{hqf *:!2< *9k*:!OweR}uJb@FziA *;!&/ *:t*;!)* *:!NC *;!1fpq *:v*!&B *=!ti7Brf[\\M( *<|*>0*=!SD *>!f[dc} *?!89+:) *>!FPs *?!'=? *>!;w *?!r~ *@!(> *?n*@+*?!{pk *@8*?!RjeH *@!=;d )kc*A7*@H*A8*@w*A9*^!/0%OTjv| *_!.1%35%8;=%@C%FHIK%MPQTWZ%^`cghkqrtx} *`!')*,%.2%467?@DFKMP *A!U: *@!WT *A!XGgc]y )s0*A!Bqz *B!JN-5 *Ax*B!TB+_]Vyg *C!)LtRvc *D0),!;E (t!bg *2m(t{(u'(t~(bw(}!'*19 )5h)6!-b~ )7!4DAX )83)7`)8!J\\T )9e):U)9!)2Fl )8~)9!dB )8z)9!ft ):!QW?^ )9|):!=- );X)9!~v );!KG ):!jz );&):k);!,'d )<1);s))),H).])ko),N(cn(e!NZFEXosc (f!OV%XZG (e~(f![]'6 (g!-? (f!{uh (g!EF/ (f!zj (g!H{Xm_}RQ~ (h&(fv(gN(h'(g!fjw (h!+,. (g!TUO (h/(gz(h!0m9rOfEtuacy| (i`(j!/U (i!Bf:N8I5 *b!HILNOQ%SXZ%\\^%`d%fi%koprtv%y{%} *c!&'%),%.02%EG%JL%NQ%[]_%eg%oq (i!0On%p,)U (j!+r (i|(j!QY( (iz(j?(iw(j!v1 (it(k&(j!]^49 (k!1> (ji(kf(jq(k!23 (jt(k-(j!}d (k!6,9: (j!lm (k!/<+ *^~(k!eOSHkjEGnt (l!F'E (ks(l!;PGJ:BtR_Yijs (m!(Dilrv (n!1'5;@FEX ))!Wa\\Yy )*!*+ *c!rtu~ *d!'(%*,-/034:% *U~)(!Xf )-!W[fkmpy} ).!'38@G *J@)-E)d!ruy|} )e!/-:9>T[U^`cm_of *e!ab%~ *f!&'%g )eg)f!*&4 )ev)f!10(5L8?KDc`js )g!&)8 *8;(tK*yn(t!J( *{!8<%AILRUY\\_befh%j )*o)+')*z)+!,;6OKTI *XS)+!hgq~ ),'*73).!OTaZ )/5).y)/6).!lo )/!078 ).!ux )/!*KgXMA?[]%VX%p )0!CVos )1-)0!v\\ket )1!l;1]XFZ4 )2!GMB: )R!op{} )S!4W~ )T))S[)T!LMF, )S`)T!5+O@C )S_)T!(DS *g!qr%vx%~ *h!&'%79%y )U5)T!|a )U!?D )T!\\Ync )U!'I*1 )To)U!KNP/ )V4)Uk)V!AC )UZ)V!67 )U!X\\x_ )Wd)V!jh )W!(X )Vb)W!*[0' )V|)W`)VN)WV)VQ)Wu)X!_?\\ )YJ)X!PwDE )W!|o )X5)Y!wI0x )Zl)Y!z=?USOoLg'Z7 )[!H,- )Z!cT8nu )[!1Z )Z!iHh )[!osr^Xb` )\\^*h!z{%~ *i!&'%TV%~ *j!&') )\\!V4FCOn{km| )]!NWOmi )^!*9 ({!7;LJ\\o )l,*~h);:(|!BL *L\\(|N*[<*Qv*_!Gdfv *`&*_!uzw *`+*_y*`!=(u!xkq (v!F& (u|(v!K2yzQ|WLm (w'(v}(w!MO,>.[ (x)(w!epW} (x7*4p(x!l]9< (y!'T (xt(y!;= (xz(y!ILZ?OAEr (z!'&BGP (|!sz (z!ju ({*(z!acr *~!?ABDIGJKORTZ\\]`be%gijlmoq *.!9;=?BC *k!34%:<%~ *l!&'%: *.!GJXZ%\\cefjnquz{ */!),/023N7;] )FP)G!/@ )Ft)GA)F!sq}|\\ )H6)G!iNQmE )HC)J=)H})I!GH )Hz*o!(4>DILV[aouvx%~ *p!&(%s )IL)Hq)I!3) )J&)Hd)I8)J@)Ia)J/)Ij)J!,S:OgG )I\\)KB)J!VW )KD)J!X52Hjv )K1)J!z| )K!J'7@U )Jd)KV)J\\)Ku)LL)Kc)L!45 )M))Kh)L!a[ )Md)L!mxR )M!R= )L!ZEu )M!@UTm[o )f!Je )P!:;@=KLFSTZc *^!UW[%]_`bacdfhklnqu *p!tu%~ *q!&'%6;NVbgjmor%xz%|~ *r!&-%0479@DEG%IL%PR%TVY[\\ac%gin%z} *s!&' *^!wxy *_!)+ *\\j)5!'37;>=A@H *7`)k!EJUegi )>/)@!789Sb )DW)@!L^I )^`)C5)@!f}z )A&)@~*2<)A!OD1?FQGgt| )B!>4Urs} )C'*X!236;=@EFHIGMUY *N!AD%FH%K )d!3d )c{)d!+4CDIPRTW )7r)8C)9h*s!)+.%02378:%CE%LNOQRTUWX\\_`eghmnpqs%|~ *t!&'%+/%24%689<>%ACFGIN%PT%VXY[%_acd );E)=,*2:)Q!JS]UYegfmux%z )R!(0+19 )>!0Pf )c!kptN *DV(`0*3!|yp *4@)CH*4!A5/18;k%n_FH]Q[ )CN*4!aouxq *5!89 *4v*5')CS*5=*Ue*5!aIWC]sw~ *6!F+,C2;NO?9 (q~(xw*6!ZTc )Ym*6!u| *7E)Cd*7!C4 *t!ef%moprsuw%{~ *u!&'(*%@BCEG%wz *w!'(%+-0%G )/n)0!63@ )/s)0!2< )1+)2!-4 )3!+wk )4!@F{ *3!]\\ )SA)TK)WF)t!+-5>LMF )?M)t!bQRn%pTqZaX^ )u!*I23 )t[)u,)t|)u!(Fwovcx} )v!&5<(W\\Lou )w/)vw)w!=NH^ +4.+2!>@A )q!1DM9GHZbYmfux )r!78.*AO *w!HI%~ *x!&'%N )r!ILftdgsx )s!-.>CK )l!7=KHEXov )m'*0!@IG *Oi*0!P\\Yaif )p!f~ *Ii*m!89:>=?@BCGJHM%OVW^]`_bcegi%moprw{%~ *n!&'(*%,/%13258%:<>?ABD *x!OP%Tknruy *y!*/%TVW[]^b%dg%mp%~ *z!&'%5 *n!CEHIM%OQSVWY]\\`acdg%il%pruw%y| *o!+,*-2357%9=?@C6E%GJMOPS%UW%Z\\_`^bce%mpr%t; )s!uz *sf)y!Me[c~ )'A)y!{z )z!=3 *z!67%:<=?%[]%~ *{!&'(+%79;HMNPSWX^ )z!XVp +1m*{z){6)oz)p!',2= )k!46 )l)+/!prx%| +0!)(-/.01589;=%@BCEHLNQ%SUZ]%chdj )m!68:DAPGWX\\hUTgfzq )n!.31/62N?FLN[lfrnsy *J!BGP[]` *K!'KE.DQ_PiKULJdjO *F!+34/5 *Ek*FU*Ey*F6*E!zsl *F!EI:JLOKe}`gp\\ *G!'1 *F!vsky *G!(k *Fd*G!fgdIY5Wt%ACE%HJ%OQS%VX%[]_a%ikm%su%w *HV*G!qn *H!=' *Gl*H!;u-BE498GR2lnY )~0)}!`qt )~!)6 )}v)~!-,KabsgXc@eW]fo *&3)~|*&!.??A *(,)>D*(!AMLNRblmqw|}xu *)!.? *95)B?*1!N]dtpux} *2)*)O**u*+!KS *-:*.5+1!VR *Xs*Y!+;8X *X!gm *U!RT *c!w}{| *d8+(!;<%~ +)!&'%A *d!65D=CQRFHM`Ydaevw~ *e!()*0/5 *U`+0u*Y_*Z!9S *[!N^ *Y!\\fcak}~ *Z!(, *Y!uv *Z)*Ym*Z!:EF1GI2WKbkmz|q} *[!/5.*2&>67FG?ekqdiz *\\!+0,8: *V!*4<7JF )?=*N!PXTV +)!BC%~ +*!&'%H *N!_ei *O_*R<*u>*t!-73JELSRnqt *u)+3!loq%vx +2!CPR *s!VYZko )sM*s}*g!Ww *h8*iU*j(*k/*jM*l!Jw ++!369%< )zB++!?BD%FHINOR%WY%]_abd%kn%qx%{~ +,&+*!IJ%~ ++!&'%/12478=>@CGJ%MQ^`cmr%v|} +,!,-56;<'%+.%02%478:= *u!gp|} *v!&A=5DF *~!{z +&(+0O+&!'+-2163<=B +'!][_a`ei *yo*z!;\\ *{!*) +&!PRW`\\l^jy +'!'+7; +1![\\ *-.+0!y~ +1!&)0 *k;+1!;=y%{~} +2!'.,*/4gqt~| +3!)*0 +,!>?%~ +-!&'%~ +.!&'%~ +/!&'%ntw~ +0!'+237DGI%KMPTV%Y\\efik%twxz%} +1!'(*%/2%:<>%CE%QS%UWXZ]%ac%fh%jnpqs%uwx| +2!&()+-0%35%=?BD%OQTVWY%[]_%dfh%prsu%{} +3!&(+%/1%;>%jmny%~ +4!&'%+/%14%8 .*f.+!Zv .,!oy .-!;<%>@BCGN%PRSV%X -R!XY%~ -S!&'%N")); + var gbk = src(gbk_us); + return gbk; + }(); + + var gbk_build = GBK$1; + + return gbk_build; + +}))); \ No newline at end of file diff --git a/components/cjn-print/printerjobs.js b/components/cjn-print/printerjobs.js new file mode 100644 index 0000000..8c9981a --- /dev/null +++ b/components/cjn-print/printerjobs.js @@ -0,0 +1,161 @@ +const commands = require('./commands'); +const gbk = require('./gbk'); + +const printerJobs = function() { + this._queue = Array.from(commands.HARDWARE.HW_INIT); + this._enqueue = function(cmd) { + this._queue.push.apply(this._queue, cmd); + } +}; + +/** + * 增加打印内容 + * @param {string} content 文字内容 + */ +printerJobs.prototype.text = function(content) { + if (content) { + let uint8Array = gbk.encode(content); + let encoded = Array.from(uint8Array); + this._enqueue(encoded); + } + return this; +}; + +/** + * 打印文字 + * @param {string} content 文字内容 + */ +printerJobs.prototype.print = function(content) { + this.text(content); + this._enqueue(commands.LF); + return this; +}; + +/** + * 打印文字并换行 + * @param {string} content 文字内容 + */ +printerJobs.prototype.println = function(content = '') { + return this.print(content + commands.EOL); +}; + +/** + * 设置对齐方式 + * @param {string} align 对齐方式 LT/CT/RT + */ +printerJobs.prototype.setAlign = function(align) { + this._enqueue(commands.TEXT_FORMAT['TXT_ALIGN_' + align.toUpperCase()]); + return this; +}; + +/** + * 设置字体 + * @param {string} family A/B/C + */ +printerJobs.prototype.setFont = function(family) { + this._enqueue(commands.TEXT_FORMAT['TXT_FONT_' + family.toUpperCase()]); + return this; +}; + +/** + * 设定字体尺寸 + * @param {number} width 字体宽度 1~2 + * @param {number} height 字体高度 1~2 + */ +printerJobs.prototype.setSize = function(width, height) { + if (2 >= width && 2 >= height) { + this._enqueue(commands.TEXT_FORMAT.TXT_NORMAL); + if (2 === width && 2 === height) { + this._enqueue(commands.TEXT_FORMAT.TXT_4SQUARE); + } else if (1 === width && 2 === height) { + this._enqueue(commands.TEXT_FORMAT.TXT_2HEIGHT); + } else if (2 === width && 1 === height) { + this._enqueue(commands.TEXT_FORMAT.TXT_2WIDTH); + } + } + return this; +}; + +/** + * 设定字体是否加粗 + * @param {boolean} bold + */ +printerJobs.prototype.setBold = function(bold) { + if (typeof bold !== 'boolean') { + bold = true; + } + this._enqueue(bold ? commands.TEXT_FORMAT.TXT_BOLD_ON : commands.TEXT_FORMAT.TXT_BOLD_OFF); + return this; +}; + +/** + * 设定是否开启下划线 + * @param {boolean} underline + */ +printerJobs.prototype.setUnderline = function(underline) { + if (typeof underline !== 'boolean') { + underline = true; + } + this._enqueue(underline ? commands.TEXT_FORMAT.TXT_UNDERL_ON : commands.TEXT_FORMAT.TXT_UNDERL_OFF); + return this; +}; + +/** + * 设置行间距为 n 点行,默认值行间距是 30 点 + * @param {number} n 0≤n≤255 + */ +printerJobs.prototype.setLineSpacing = function(n) { + if (n === undefined || n === null) { + this._enqueue(commands.LINE_SPACING.LS_DEFAULT); + } else { + this._enqueue(commands.LINE_SPACING.LS_SET); + this._enqueue([n]); + } + return this; +}; + +/** + * 打印空行 + * @param {number} n + */ +printerJobs.prototype.lineFeed = function(n = 1) { + return this.print(new Array(n).fill(commands.EOL).join('')); +}; + +/** + * 设置字体颜色,需要打印机支持 + * @param {number} color - 0 默认颜色黑色 1 红色 + */ +printerJobs.prototype.setColor = function(color) { + this._enqueue(commands.COLOR[color === 1 ? 1 : 0]); + return this; +}; + +/** + * https://support.loyverse.com/hardware/printers/use-the-beeper-in-a-escpos-printers + * 蜂鸣警报,需要打印机支持 + * @param {number} n 蜂鸣次数,1-9 + * @param {number} t 蜂鸣长短,1-9 + */ +printerJobs.prototype.beep = function(n, t) { + this._enqueue(commands.BEEP); + this._enqueue([n, t]); + return this; +}; + +/** + * 清空任务 + */ +printerJobs.prototype.clear = function() { + this._queue = Array.from(commands.HARDWARE.HW_INIT); + return this; +}; + +/** + * 返回ArrayBuffer + */ +printerJobs.prototype.buffer = function() { + return new Uint8Array(this._queue).buffer; +}; + +module.exports = printerJobs; diff --git a/components/cjn-print/printerutil.js b/components/cjn-print/printerutil.js new file mode 100644 index 0000000..c541aae --- /dev/null +++ b/components/cjn-print/printerutil.js @@ -0,0 +1,91 @@ +// 打印机纸宽58mm,页的宽度384,字符宽度为1,每行最多盛放32个字符 +const PAGE_WIDTH = 384; +const MAX_CHAR_COUNT_EACH_LINE = 32; + +/** + * @param str + * @returns {boolean} str是否全是中文 + */ +function isChinese(str) { + return /^[\u4e00-\u9fa5]$/.test(str); +} + +/** + * 返回字符串宽度(1个中文=2个英文字符) + * @param str + * @returns {number} + */ +function getStringWidth(str) { + let width = 0; + for (let i = 0, len = str.length; i < len; i++) { + width += isChinese(str.charAt(i)) ? 2 : 1; + } + return width; +} + +/** + * 同一行输出str1, str2,str1居左, str2居右 + * @param {string} str1 内容1 + * @param {string} str2 内容2 + * @param {number} fontWidth 字符宽度 1/2 + * @param {string} fillWith str1 str2之间的填充字符 + * + */ +function inline(str1, str2, fillWith = ' ', fontWidth = 1) { + const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; + // 需要填充的字符数量 + let fillCount = lineWidth - (getStringWidth(str1) + getStringWidth(str2)) % lineWidth; + let fillStr = new Array(fillCount).fill(fillWith.charAt(0)).join(''); + return str1 + fillStr + str2; +} + +/** + * 用字符填充一整行 + * @param {string} fillWith 填充字符 + * @param {number} fontWidth 字符宽度 1/2 + */ +function fillLine(fillWith = '-', fontWidth = 1) { + const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; + return new Array(lineWidth).fill(fillWith.charAt(0)).join(''); +} + +/** + * 文字内容居中,左右用字符填充 + * @param {string} str 文字内容 + * @param {number} fontWidth 字符宽度 1/2 + * @param {string} fillWith str1 str2之间的填充字符 + */ +function fillAround(str, fillWith = '-', fontWidth = 1) { + const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; + let strWidth = getStringWidth(str); + // 内容已经超过一行了,没必要填充 + if (strWidth >= lineWidth) { + return str; + } + // 需要填充的字符数量 + let fillCount = lineWidth - strWidth; + // 左侧填充的字符数量 + let leftCount = Math.round(fillCount / 2); + // 两侧的填充字符,需要考虑左边需要填充,右边不需要填充的情况 + let fillStr = new Array(leftCount).fill(fillWith.charAt(0)).join(''); + return fillStr + str + fillStr.substr(0, fillCount - leftCount); +} + +// ArrayBuffer转16进度字符串示例 +function ab2hex(buffer) { + const hexArr = Array.prototype.map.call( + new Uint8Array(buffer), + function(bit) { + return ('00' + bit.toString(16)).slice(-2) + } + ) + return hexArr.join(',') +} + + +module.exports = { + inline: inline, + fillLine: fillLine, + fillAround: fillAround, + ab2hex:ab2hex, +}; diff --git a/components/cjn-print/readme.md b/components/cjn-print/readme.md new file mode 100644 index 0000000..a360688 --- /dev/null +++ b/components/cjn-print/readme.md @@ -0,0 +1,6 @@ +#### 已测试 芯烨、汉印、济强、佳博等多个品牌多款机型打印机,均能正常打印(含二维码) +#### 本插件为参考学习打印示例,支持小程序和app,但不同品牌打印机,对打印指令支持不一样,插件无法做到通用,我的小程序已集成esc,cpcl,tspl指令打印 +#### 您可以到我的小程序中的体验测试打印功能,如有打印二维码需求和打印你想要的模板,可咨询定制 +#### 扫码进入微信小程序(选择 手机功能 --> 蓝牙打印机),快来试试呗! +#### 如果您遇到打印问题或者其他方面需求,可添加微信:chengjn1314(宁哥),欢迎骚扰~ +![avatar](https://mp-a9f90fc5-628e-43f8-a370-00b89368841b.cdn.bspapp.com/cloudstorage/16ff40bb-d352-4f46-a9ed-2ef0406b19c0.jpg) diff --git a/components/cjn-print/util.js b/components/cjn-print/util.js new file mode 100644 index 0000000..49cb9bb --- /dev/null +++ b/components/cjn-print/util.js @@ -0,0 +1,66 @@ +const formatTime = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') +} + +const formatNumber = n => { + n = n.toString() + return n[1] ? n : '0' + n +} + + +//4合1 +function convert4to1(res) { + let arr = []; + for (let i = 0; i < res.length; i++) { + if (i % 4 == 0) { + let rule = 0.29900 * res[i] + 0.58700 * res[i + 1] + 0.11400 * res[i + 2]; + if (rule > 200) { + res[i] = 0; + } else { + res[i] = 1; + } + arr.push(res[i]); + } + } + return arr; +} + +//8合1 +function convert8to1(arr) { + let data = []; + for (let k = 0; k < arr.length; k += 8) { + let temp = arr[k] * 128 + arr[k + 1] * 64 + arr[k + 2] * 32 + arr[k + 3] * 16 + arr[k + 4] * 8 + arr[k + 5] * 4 + + arr[k + 6] * 2 + arr[k + 7] * 1 + data.push(temp); + } + return data; +} + +//我的图片宽度是240,那么拼接的指令就是[29, 118, 48, 0, 30, 0, 240, 0] +//我的图片宽度是160,那么拼接的指令就是[29, 118, 48, 0, 20, 0, 160, 0] +//补充一点,打印非二维码的图片,宽度一定要是24的倍数,不然打印也会出现乱码 +function toArrayBuffer(res) { + let arr = convert4to1(res.data); + let data = convert8to1(arr); + let cmds = [].concat([27, 97, 1], [29, 118, 48, 0, 30, 0, 240, 0], data, [27, 74, 3], [27, 64]); + return new Uint8Array(cmds).buffer; +} + +function zip_image(res) { + let arr = convert4to1(res.data); + let data = convert8to1(arr); + return data; +} + +module.exports = { + formatTime: formatTime, + toArrayBuffer: toArrayBuffer, + zip_image: zip_image, +} diff --git a/components/cjn-print/weapp.qrcode.esm.js b/components/cjn-print/weapp.qrcode.esm.js new file mode 100644 index 0000000..7231270 --- /dev/null +++ b/components/cjn-print/weapp.qrcode.esm.js @@ -0,0 +1,5 @@ +/** + * weapp.qrcode.js v1.0.0 (https://github.com/yingye/weapp-qrcode#readme) + */ + +var hasOwn=Object.prototype.hasOwnProperty,toStr=Object.prototype.toString,defineProperty=Object.defineProperty,gOPD=Object.getOwnPropertyDescriptor,isArray=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===toStr.call(t)},isPlainObject=function(t){if(!t||"[object Object]"!==toStr.call(t))return!1;var e,r=hasOwn.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&hasOwn.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!o)return!1;for(e in t);return void 0===e||hasOwn.call(t,e)},setProperty=function(t,e){defineProperty&&"__proto__"===e.name?defineProperty(t,e.name,{enumerable:!0,configurable:!0,value:e.newValue,writable:!0}):t[e.name]=e.newValue},getProperty=function(t,e){if("__proto__"===e){if(!hasOwn.call(t,e))return;if(gOPD)return gOPD(t,e).value}return t[e]},extend=function t(){var e,r,o,n,i,a,s=arguments[0],u=1,l=arguments.length,h=!1;for("boolean"==typeof s&&(h=s,s=arguments[1]||{},u=2),(null==s||"object"!=typeof s&&"function"!=typeof s)&&(s={});u=7&&this.setupTypeNumber(t),null==this.dataCache&&(this.dataCache=QRCode.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,e)},setupPositionProbePattern:function(t,e){for(var r=-1;r<=7;r++)if(!(t+r<=-1||this.moduleCount<=t+r))for(var o=-1;o<=7;o++)e+o<=-1||this.moduleCount<=e+o||(this.modules[t+r][e+o]=0<=r&&r<=6&&(0==o||6==o)||0<=o&&o<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=o&&o<=4)},getBestMaskPattern:function(){for(var t=0,e=0,r=0;r<8;r++){this.makeImpl(!0,r);var o=QRUtil.getLostPoint(this);(0==r||t>o)&&(t=o,e=r)}return e},createMovieClip:function(t,e,r){var o=t.createEmptyMovieClip(e,r);this.make();for(var n=0;n>r&1);this.modules[Math.floor(r/3)][r%3+this.moduleCount-8-3]=o}for(r=0;r<18;r++){o=!t&&1==(e>>r&1);this.modules[r%3+this.moduleCount-8-3][Math.floor(r/3)]=o}},setupTypeInfo:function(t,e){for(var r=this.errorCorrectLevel<<3|e,o=QRUtil.getBCHTypeInfo(r),n=0;n<15;n++){var i=!t&&1==(o>>n&1);n<6?this.modules[n][8]=i:n<8?this.modules[n+1][8]=i:this.modules[this.moduleCount-15+n][8]=i}for(n=0;n<15;n++){i=!t&&1==(o>>n&1);n<8?this.modules[8][this.moduleCount-n-1]=i:n<9?this.modules[8][15-n-1+1]=i:this.modules[8][15-n-1]=i}this.modules[this.moduleCount-8][8]=!t},mapData:function(t,e){for(var r=-1,o=this.moduleCount-1,n=7,i=0,a=this.moduleCount-1;a>0;a-=2)for(6==a&&a--;;){for(var s=0;s<2;s++)if(null==this.modules[o][a-s]){var u=!1;i>>n&1)),QRUtil.getMask(e,o,a-s)&&(u=!u),this.modules[o][a-s]=u,-1==--n&&(i++,n=7)}if((o+=r)<0||this.moduleCount<=o){o-=r,r=-r;break}}}},QRCode.PAD0=236,QRCode.PAD1=17,QRCode.createData=function(t,e,r){for(var o=QRRSBlock.getRSBlocks(t,e),n=new QRBitBuffer,i=0;i8*s)throw new Error("code length overflow. ("+n.getLengthInBits()+">"+8*s+")");for(n.getLengthInBits()+4<=8*s&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*s||(n.put(QRCode.PAD0,8),n.getLengthInBits()>=8*s));)n.put(QRCode.PAD1,8);return QRCode.createBytes(n,o)},QRCode.createBytes=function(t,e){for(var r=0,o=0,n=0,i=new Array(e.length),a=new Array(e.length),s=0;s=0?g.get(c):0}}var d=0;for(h=0;h=0;)e^=QRUtil.G15<=0;)e^=QRUtil.G18<>>=1;return e},getPatternPosition:function(t){return QRUtil.PATTERN_POSITION_TABLE[t-1]},getMask:function(t,e,r){switch(t){case QRMaskPattern.PATTERN000:return(e+r)%2==0;case QRMaskPattern.PATTERN001:return e%2==0;case QRMaskPattern.PATTERN010:return r%3==0;case QRMaskPattern.PATTERN011:return(e+r)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(e/2)+Math.floor(r/3))%2==0;case QRMaskPattern.PATTERN101:return e*r%2+e*r%3==0;case QRMaskPattern.PATTERN110:return(e*r%2+e*r%3)%2==0;case QRMaskPattern.PATTERN111:return(e*r%3+(e+r)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}},getErrorCorrectPolynomial:function(t){for(var e=new QRPolynomial([1],0),r=0;r5&&(r+=3+i-5)}for(o=0;o=256;)t-=255;return QRMath.EXP_TABLE[t]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},i=0;i<8;i++)QRMath.EXP_TABLE[i]=1<=1&&n<=127?e+=t.charAt(r):n>2047?(e+=String.fromCharCode(224|n>>12&15),e+=String.fromCharCode(128|n>>6&63),e+=String.fromCharCode(128|n>>0&63)):(e+=String.fromCharCode(192|n>>6&31),e+=String.fromCharCode(128|n>>0&63));return e}function drawQrcode(t){t=t||{},(t=extend(!0,{width:256,height:256,x:0,y:0,typeNumber:-1,correctLevel:QRErrorCorrectLevel.H,background:"#ffffff",foreground:"#000000",image:{imageResource:"",dx:0,dy:0,dWidth:100,dHeight:100}},t)).canvasId||t.ctx?function(){var e,r=new QRCode(t.typeNumber,t.correctLevel);r.addData(utf16to8(t.text)),r.make(),e=t.ctx?t.ctx:t._this?wx.createCanvasContext&&wx.createCanvasContext(t.canvasId,t._this):wx.createCanvasContext&&wx.createCanvasContext(t.canvasId);for(var o=t.width/r.getModuleCount(),n=t.height/r.getModuleCount(),i=0;i>>7-t%8&1)},put:function(t,e){for(var r=0;r>>e-r-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}};export default drawQrcode; \ No newline at end of file diff --git a/components/components.js b/components/components.js new file mode 100644 index 0000000..1b6d000 --- /dev/null +++ b/components/components.js @@ -0,0 +1,7 @@ +import ChNavBar from '@/components/ch-nav-bar/ch-nav-bar.vue' +import ChNavBtn from '@/components/ch-nav-btn/ch-nav-btn.vue' + +export default function registerComponents (app) { + app.component(ChNavBar.name, ChNavBar); + app.component(ChNavBtn.name, ChNavBtn); +} \ No newline at end of file diff --git a/components/nativePrint/index.vue b/components/nativePrint/index.vue new file mode 100644 index 0000000..5d57aa8 --- /dev/null +++ b/components/nativePrint/index.vue @@ -0,0 +1,218 @@ +