加入初次安裝畫面
1.設定藍芽啟用與否 2.設定印表機連接埠與切紙間格 3.設定結束自動重新啟動服務
This commit is contained in:
parent
1941ab0c52
commit
3c06bf5d8b
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
node_modules
|
node_modules
|
||||||
yarn.lock
|
yarn.lock
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
config.json
|
||||||
|
config.default.json
|
@ -20,8 +20,9 @@ class PrinterDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async connect () {
|
async connect () {
|
||||||
|
let self = this
|
||||||
let chkSerial = await new Promise((resolve, reject) => {
|
let chkSerial = await new Promise((resolve, reject) => {
|
||||||
fs.access(this._serial, err => {
|
fs.access(self._serial, err => {
|
||||||
if (err) return resolve(false)
|
if (err) return resolve(false)
|
||||||
return resolve(true)
|
return resolve(true)
|
||||||
})
|
})
|
||||||
@ -34,13 +35,14 @@ class PrinterDevice {
|
|||||||
this._type = 'console'
|
this._type = 'console'
|
||||||
}
|
}
|
||||||
this._printer = new escpos.Printer(this._device)
|
this._printer = new escpos.Printer(this._device)
|
||||||
this.openSerial()
|
await this.openSerial()
|
||||||
}
|
}
|
||||||
|
|
||||||
async openSerial () {
|
async openSerial () {
|
||||||
|
let self = this
|
||||||
if (!this._device || this._type !== 'serial') return
|
if (!this._device || this._type !== 'serial') return
|
||||||
this._isOpen = await new Promise((resolve, reject) => {
|
this._isOpen = await new Promise((resolve, reject) => {
|
||||||
this._device.open(err => {
|
self._device.open(err => {
|
||||||
if (err) return resolve(false)
|
if (err) return resolve(false)
|
||||||
return resolve(true)
|
return resolve(true)
|
||||||
})
|
})
|
||||||
@ -88,11 +90,12 @@ class PrinterDevice {
|
|||||||
await this.connect()
|
await this.connect()
|
||||||
if (!this._isOpen) return false
|
if (!this._isOpen) return false
|
||||||
this._printer.align('ct')
|
this._printer.align('ct')
|
||||||
this._printer.size(1, 1)
|
this._printer.size(1, 2)
|
||||||
this._printer.text('Print Test Page')
|
this._printer.text('Print Test Page')
|
||||||
this._printer.align('lt')
|
this._printer.align('lt')
|
||||||
this._printer.size(1, 1)
|
this._printer.size(1, 1)
|
||||||
this._printer.text('Test Page Content')
|
this._printer.text('Test Page Content')
|
||||||
|
this._printer.cut(true, this._feed)
|
||||||
await this.close()
|
await this.close()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
3
app.js
3
app.js
@ -1,2 +1,5 @@
|
|||||||
|
// set global env
|
||||||
|
process.env.PROJECT_ROOT = __dirname
|
||||||
|
|
||||||
require('top-level-await')
|
require('top-level-await')
|
||||||
require('./server')
|
require('./server')
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"uuid":{
|
|
||||||
"main": "930da73d-1b80-4d3e-a8b6-d9b4e7e771bd",
|
|
||||||
"service":{
|
|
||||||
"id":"dd535b71-8f05-4e30-beb0-6fa7ea3dfc3e",
|
|
||||||
"func":{
|
|
||||||
"data":"00000001-8f05-4e30-beb0-6fa7ea3dfc3e"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"printer": {
|
|
||||||
"serial": "/dev/ttyUSB0",
|
|
||||||
"cutFeed": 8
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,9 +11,11 @@ router.use(async (c, n) => {
|
|||||||
c.data = {
|
c.data = {
|
||||||
title: 'Printer System Setup'
|
title: 'Printer System Setup'
|
||||||
}
|
}
|
||||||
|
let status = 1
|
||||||
try {
|
try {
|
||||||
await n()
|
await n()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
status = 0
|
||||||
if (typeof err === 'string') {
|
if (typeof err === 'string') {
|
||||||
c.body = err
|
c.body = err
|
||||||
} else {
|
} else {
|
||||||
@ -23,7 +25,7 @@ router.use(async (c, n) => {
|
|||||||
|
|
||||||
if (c.async) {
|
if (c.async) {
|
||||||
c.body = {
|
c.body = {
|
||||||
status: 0,
|
status,
|
||||||
msg: c.body
|
msg: c.body
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,7 +42,7 @@ router
|
|||||||
if (err) return resolve([])
|
if (err) return resolve([])
|
||||||
let arr = []
|
let arr = []
|
||||||
for (let it of list) {
|
for (let it of list) {
|
||||||
if (it.startsWith('tty')) {
|
if (/^tty[A-z]/.test(it)) {
|
||||||
arr.push(path.resolve('/dev', it))
|
arr.push(path.resolve('/dev', it))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,7 +65,7 @@ router
|
|||||||
Printer.feed = feed
|
Printer.feed = feed
|
||||||
|
|
||||||
let status = await Printer.printTestPage()
|
let status = await Printer.printTestPage()
|
||||||
|
|
||||||
if (!status) c.body = '測試失敗'
|
if (!status) c.body = '測試失敗'
|
||||||
else c.body = '測試成功'
|
else c.body = '測試成功'
|
||||||
})
|
})
|
||||||
@ -83,11 +85,11 @@ router
|
|||||||
main: '',
|
main: '',
|
||||||
service: '',
|
service: '',
|
||||||
characteristic: ''
|
characteristic: ''
|
||||||
},
|
|
||||||
printer: {
|
|
||||||
serial: '',
|
|
||||||
feed: 8
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
printer: {
|
||||||
|
serial: '',
|
||||||
|
feed: 8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,6 +97,23 @@ router
|
|||||||
json.ble.uuid.main = uuid.v4()
|
json.ble.uuid.main = uuid.v4()
|
||||||
json.ble.uuid.service = uuid.v4()
|
json.ble.uuid.service = uuid.v4()
|
||||||
json.ble.uuid.characteristic = uuid.v4()
|
json.ble.uuid.characteristic = uuid.v4()
|
||||||
|
|
||||||
|
json.printer.serial = arr.tty
|
||||||
|
json.printer.feed = feed
|
||||||
|
|
||||||
|
let wconfig = await new Promise((resolve, reject) => {
|
||||||
|
fs.writeFile(path.resolve(process.env.PROJECT_ROOT, 'config.json'), JSON.stringify(json, null, 2), {
|
||||||
|
mode: 0664,
|
||||||
|
encoding: 'utf8',
|
||||||
|
flag: 'w'
|
||||||
|
}, err => {
|
||||||
|
if (err) return resolve(false)
|
||||||
|
return resolve(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!wconfig) throw '設定檔寫入失敗'
|
||||||
|
c.body = '設定檔寫入成功'
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = router
|
module.exports = router
|
||||||
|
@ -58,4 +58,11 @@ if (router !== null) {
|
|||||||
// set Route
|
// set Route
|
||||||
app.use(router.routes())
|
app.use(router.routes())
|
||||||
app.use(router.allowedMethods())
|
app.use(router.allowedMethods())
|
||||||
|
|
||||||
|
router.put('/reboot_sys', async (c, n) => {
|
||||||
|
setTimeout(function(){
|
||||||
|
process.exit(1)
|
||||||
|
}, 2000)
|
||||||
|
c.body = '1'
|
||||||
|
})
|
||||||
}
|
}
|
@ -35,4 +35,90 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="ui dimmer" id="loader">
|
||||||
|
<div class="ui loader text">Rebooting...</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function getValue(obj){
|
||||||
|
if(!obj || !('value' in obj)) return ''
|
||||||
|
return obj.value
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#test-printer').click(function(){
|
||||||
|
let json = {
|
||||||
|
device: '',
|
||||||
|
feed: 0
|
||||||
|
}
|
||||||
|
let dev = getValue(document.querySelector('select#tty'))
|
||||||
|
let feed = getValue(document.querySelector('input#feed'))
|
||||||
|
|
||||||
|
if(!dev) return alert('請選擇印表機連接埠')
|
||||||
|
if (!isFinite(feed) || feed < 0) return alert('切紙前空行請輸入整數')
|
||||||
|
|
||||||
|
json.device = dev
|
||||||
|
json.feed = Math.floor(parseInt(feed))
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/install/printer_test',
|
||||||
|
type: 'post',
|
||||||
|
data: json,
|
||||||
|
success: function(e){
|
||||||
|
alert(e.msg || '資料傳送失敗')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
$('form#setup').submit(function(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
let json = {
|
||||||
|
tty: '',
|
||||||
|
feed: 0,
|
||||||
|
ble: ''
|
||||||
|
}
|
||||||
|
let dev = getValue(document.querySelector('select#tty'))
|
||||||
|
let feed = getValue(document.querySelector('input#feed'))
|
||||||
|
let elBle = document.querySelector('input#en-ble')
|
||||||
|
let ble = ''
|
||||||
|
if(elBle != null && 'checked' in elBle) ble = elBle.checked ? 'yes' : 'no'
|
||||||
|
|
||||||
|
if(!dev) return alert('請選擇印表機連接埠')
|
||||||
|
if (!isFinite(feed) || feed < 0) return alert('切紙前空行請輸入整數')
|
||||||
|
|
||||||
|
json.tty = dev
|
||||||
|
json.feed = Math.floor(parseInt(feed))
|
||||||
|
json.ble = ble
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/install/write_config',
|
||||||
|
type: 'post',
|
||||||
|
data: json,
|
||||||
|
success: function(e){
|
||||||
|
if(e.status != 1) {
|
||||||
|
alert(e.msg || '寫入失敗')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/reboot_sys',
|
||||||
|
type: 'put',
|
||||||
|
success: function(){
|
||||||
|
setTimeout(function(){
|
||||||
|
location.replace('/')
|
||||||
|
}, 30000)
|
||||||
|
$('#loader').addClass('active')
|
||||||
|
},
|
||||||
|
error: function(){
|
||||||
|
alert('系統重新啟動失敗')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
<%- include ../includes/footer.ejs %>
|
<%- include ../includes/footer.ejs %>
|
Loading…
Reference in New Issue
Block a user