Browse Source

标签打印

master
xuhuajiao 6 hours ago
parent
commit
5a8860f247
  1. 2
      .env.development
  2. 7
      public/static/config.js
  3. 2
      src/api/RFID/RFID.js
  4. 33
      src/views/archivesManage/caseManage/caseList/index.vue
  5. 2
      src/views/archivesManage/safeDoor/index.vue
  6. 213
      src/views/components/printRfid.vue

2
.env.development

@ -16,7 +16,7 @@ VUE_APP_BASE_API = 'http://192.168.99.72:7090'
VUE_APP_WS_API = 'ws://192.168.99.72:7090' VUE_APP_WS_API = 'ws://192.168.99.72:7090'
VUE_APP_WEBRTCSTREAMER_API = '127.0.0.1:8000' VUE_APP_WEBRTCSTREAMER_API = '127.0.0.1:8000'
VUE_APP_SDEVID = "D003" VUE_APP_SDEVID = "D003"
VUE_APP_PRINTNJ='http://192.168.99.72:9100'
VUE_APP_PRINTNJ='http://127.0.0.1:9001/'
# 是否启用 babel-plugin-dynamic-import-node插件 # 是否启用 babel-plugin-dynamic-import-node插件
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true

7
public/static/config.js

@ -3,10 +3,5 @@ window.g = {
ApiUrl: 'http://192.168.99.72:7090', // 配置服务器地址 ApiUrl: 'http://192.168.99.72:7090', // 配置服务器地址
ApiWebRtcServerUrl: '127.0.0.1:8000', // 配置监控视频服务器地址 ApiWebRtcServerUrl: '127.0.0.1:8000', // 配置监控视频服务器地址
sDevID:'D003', // 桌面式RFID读写器, sDevID:'D003', // 桌面式RFID读写器,
printNJ:'http://192.168.99.72:9100',
ZMINConfig:{ // 标签打印机
ip:'127.0.0.1',
port:'1808',
filePath:'/home/it0/zmin/新标签01.lsf'
}
printNJ:'http://127.0.0.1:9001',// 打印机服务
} }

2
src/api/RFID/RFID.js

@ -27,7 +27,7 @@ export function writeEPC(params) {
export function codeEpc(params) { export function codeEpc(params) {
return request({ return request({
url: 'api/RFID/CodeEpc',
url: 'api/RFID/CodeEPC',
method: 'get', method: 'get',
params params
}) })

33
src/views/archivesManage/caseManage/caseList/index.vue

@ -299,15 +299,36 @@ export default {
// 5. // 5.
if (result.code === '0') { if (result.code === '0') {
console.log('生成epc成功') console.log('生成epc成功')
// if (!result || !result.epc) {
// this.$message.warning('EPC', { offset: 8 })
// return
// }
const epcData = result.epc || result.EPC const epcData = result.epc || result.EPC
this.$message.success('EPC数据获取成功,开始打印...') this.$message.success('EPC数据获取成功,开始打印...')
await this.$refs.printRFID.handlePrint(epcData)
console.log('打印调用成功,EPC数据:', epcData)
// 2.
// const printDataList = [
// { elemID: 'epc-id', actualData: epcData },
// // { elemID: 'tid-id', actualData: tidData },
// { elemID: 'case-id', actualData: this.crud.selections[0].id },
// { elemID: 'case-name', actualData: this.crud.selections[0].caseName }
// ]
// // 3.
// const printResult = await this.$refs.printRFID.handlePrint(printDataList)
// console.log('', printResult)
// this.$message.success('', { offset: 8 })
// this.crud.refresh()
const caseId = this.crud.selections[0].id // ID
const printDataList = [
{ elemID: 'epc-id', actualData: epcData, caseId: caseId },
{ elemID: 'case-name', actualData: this.crud.selections[0].caseName, caseId: caseId }
]
try {
const printResult = await this.$refs.printRFID.handlePrint(printDataList)
console.log('打印完成:', printResult)
this.$message.success('绑定打印成功', { offset: 8 })
this.crud.refresh()
} catch (error) {
console.error('操作失败:', error)
}
} else if (result.code === '-1') { } else if (result.code === '-1') {
this.$message.error(result.message || '写入失败', { offset: 8 }) this.$message.error(result.message || '写入失败', { offset: 8 })
} else if (result.code === '-1000') { } else if (result.code === '-1000') {

2
src/views/archivesManage/safeDoor/index.vue

@ -322,7 +322,7 @@ export default {
span { span {
font-size: 14px; font-size: 14px;
color: #666;
color: #fff;
font-weight: normal; font-weight: normal;
margin-left: 8px; margin-left: 8px;
} }

213
src/views/components/printRfid.vue

@ -9,6 +9,7 @@
<script> <script>
import request from '@/utils/request' import request from '@/utils/request'
import RFID from '@/api/RFID/RFID'
export default { export default {
name: 'ReadTidTemplatePrintRFID', name: 'ReadTidTemplatePrintRFID',
@ -21,13 +22,16 @@ export default {
data() { data() {
return { return {
// //
elemID: 'epc-id', // ID
tidChecked: true, // TID tidChecked: true, // TID
epcChecked: false, // EPC epcChecked: false, // EPC
printCount: 1, // 1 printCount: 1, // 1
emuType: '1', // ZPL仿 emuType: '1', // ZPL仿
//
actualData: '' //
//
defaultTemplateData: [
{ elemID: 'epc-id', actualData: '' } //
],
// TID
readTid: ''
} }
}, },
methods: { methods: {
@ -70,33 +74,79 @@ export default {
return timestamp + randomNum return timestamp + randomNum
}, },
// POST // POST
// sendPostRequest(funcId, funcName, data) {
// return new Promise((resolve, reject) => {
// const printNJ = process.env.NODE_ENV === 'production' ? window.g.printNJ : process.env.VUE_APP_PRINTNJ
// request({
// baseURL: '',
// url: printNJ,
// method: 'post',
// timeout: 30000,
// data: {
// version: '1.0',
// seqNo: this.generateUniqueId(),
// funcName: funcId,
// inParams: data
// }
// }).then(response => {
// const res = response.data
// if (res.rtnCode === '0') {
// resolve(res.outParams)
// this.creatSucessLog(funcId, funcName, res)
// } else {
// reject(res.rsltMsg)
// this.creatErrLog(funcId, funcName, res)
// }
// }).catch(error => {
// console.error('', error)
// this.$message.error('', { offset: 8 })
// reject(error.message)
// })
// })
// },
// POST
sendPostRequest(funcId, funcName, data) { sendPostRequest(funcId, funcName, data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const printNJ = process.env.NODE_ENV === 'production' ? window.g.printNJ : process.env.VUE_APP_PRINTNJ
// URLjQuery
const targetUrl = process.env.NODE_ENV === 'production' ? window.g.printNJ : process.env.VUE_APP_PRINTNJ
//
request({ request({
baseURL: '',
url: printNJ,
url: targetUrl, // 使baseURL
method: 'post', method: 'post',
timeout: 30000, timeout: 30000,
data: {
headers: {
// Content-TypeJSON
'Content-Type': 'application/json; charset=utf-8'
},
// requestaxiosJSON.stringify
// axios
data: JSON.stringify({
version: '1.0', version: '1.0',
seqNo: this.generateUniqueId(), seqNo: this.generateUniqueId(),
funcName: funcId, funcName: funcId,
inParams: data inParams: data
}
})
// axios
// data: {
// version: '1.0',
// seqNo: this.generateUniqueId(),
// funcName: funcId,
// inParams: data
// }
}).then(response => { }).then(response => {
const res = response.data
const res = response
console.log('响应数据:', response)
if (res.rtnCode === '0') { if (res.rtnCode === '0') {
this.creatSucessLog(funcId, funcName, res) // resolve
resolve(res.outParams) resolve(res.outParams)
this.creatSucessLog(funcId, funcName, res)
} else { } else {
this.creatErrLog(funcId, funcName, res) // reject
reject(res.rsltMsg) reject(res.rsltMsg)
this.creatErrLog(funcId, funcName, res)
} }
}).catch(error => { }).catch(error => {
console.error('请求失败:', error) console.error('请求失败:', error)
this.$message.error('接口请求失败', { offset: 8 }) this.$message.error('接口请求失败', { offset: 8 })
reject(error.message)
reject(error.message || '未知网络错误')
}) })
}) })
}, },
@ -123,25 +173,87 @@ export default {
.catch(err => reject(err)) .catch(err => reject(err))
}) })
}, },
/**
* 写入EAS数据新增方法
* @param {string} caseId - 盒ID
* @param {string} tid - 读取到的TID
* @returns {Promise}
*/
async writeEAS(caseId, tid) {
try {
if (!caseId || !tid) {
this.$message.warning('盒ID或TID不能为空', { offset: 8 })
return Promise.reject('盒ID或TID不能为空')
}
const sDevID = process.env.NODE_ENV === 'production' ? window.g.sDevID : process.env.VUE_APP_SDEVID
const writeParams = {
op: 'RFID_WriteEPC',
sDevID: sDevID,
EAS: 1,
Type: 2,
Code: caseId,
Tid: tid
}
console.log('写入EAS参数:', writeParams)
const writeRes = await RFID.writeEPC(writeParams)
const res = JSON.parse(writeRes)
if (res.code === '0') {
this.$message.success('标签绑定成功', { offset: 8 })
return Promise.resolve(res)
} else if (res.code === '-1') {
this.$message.error('绑定失败', { offset: 8 })
return Promise.reject('绑定失败')
} else if (res.code === '-1000') {
this.$message.error('读写器超时未响应', { offset: 8 })
return Promise.reject('读写器超时未响应')
} else {
this.$message.error('操作失败', { offset: 8 })
return Promise.reject(`操作失败,错误码:${res.code}`)
}
} catch (err) {
this.$message.error(`标签绑定操作异常:${err.message}`, { offset: 8 })
return Promise.reject(err)
}
},
/** /**
* 打印RFID标签 * 打印RFID标签
* @param {string} printData - 可选打印的真实数据不传则使用组件内的actualData
* @param {Array|string} printData - 支持两种格式
* 1. 字符串单条数据的actualData兼容旧调用方式
* 2. 数组多条模板数据格式 [{elemID: 'xxx', actualData: 'xxx', caseId: 'xxx'}, ...]
* @returns {Promise} - 返回打印结果Promise * @returns {Promise} - 返回打印结果Promise
*/ */
async handlePrint(printData) { async handlePrint(printData) {
const actualData = printData || this.actualData
let templateDataList = []
let caseId = ''
const test = {
'elemID': this.elemID,
'actualData': actualData
if (typeof printData === 'string') {
templateDataList = [
{ elemID: 'epc-id', actualData: printData }
]
} else if (Array.isArray(printData)) {
templateDataList = printData.filter(item => {
const isValid = item && item.elemID && item.actualData
if (!isValid) {
console.warn('过滤无效的模板数据:', item)
}
if (isValid && item.caseId && !caseId) {
caseId = item.caseId
}
return isValid
})
} else {
templateDataList = this.defaultTemplateData.filter(item => item.elemID && item.actualData)
} }
console.log('test', test)
//
if (!actualData) {
this.$message.warning('打印数据不能为空', { offset: 8 })
if (templateDataList.length === 0) {
this.$message.warning('打印数据不能为空,请检查传入的模板数据', { offset: 8 })
return Promise.reject('打印数据不能为空') return Promise.reject('打印数据不能为空')
} }
console.log('最终模板数据列表:', templateDataList)
try { try {
// 1. Base64 // 1. Base64
@ -157,7 +269,6 @@ export default {
EPC: this.epcChecked, EPC: this.epcChecked,
rfidType: this.tidChecked ? '1' : (this.epcChecked ? '2' : '0') rfidType: this.tidChecked ? '1' : (this.epcChecked ? '2' : '0')
} }
console.log('组装参数', params) console.log('组装参数', params)
// 3. // 3.
@ -178,7 +289,7 @@ export default {
if (statusRes.isReady !== '1') { if (statusRes.isReady !== '1') {
this.$message.error('打印机状态异常', { offset: 8 }) this.$message.error('打印机状态异常', { offset: 8 })
await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl }) await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl })
return Promise.reject('打印机状态异常', { offset: 8 })
return Promise.reject('打印机状态异常')
} }
// 7. 仿 // 7. 仿
@ -201,19 +312,35 @@ export default {
'tmplFileSrc': params.tmplFileSrc 'tmplFileSrc': params.tmplFileSrc
}) })
// 10.
await this.sendPostRequest('web_DSTP2x_SetTmplPrnData', '设置模板', {
'tmplHdl': tempRes.tmplHdl,
'elemID': this.elemID,
'actualData': actualData
})
// 10.
for (const item of templateDataList) {
console.log(`设置模板数据 - elemID: ${item.elemID}, actualData: ${item.actualData}`)
await this.sendPostRequest('web_DSTP2x_SetTmplPrnData', `设置模板数据[${item.elemID}]`, {
'tmplHdl': tempRes.tmplHdl,
'elemID': item.elemID,
'actualData': item.actualData
})
}
// 11. RFID
// 11. RFIDTID
let rfidReadRes = null
if (params.rfidType !== '0') { if (params.rfidType !== '0') {
await this.sendPostRequest('web_DSTP2x_RFID_ReadData', '读RFID数据', {
rfidReadRes = await this.sendPostRequest('web_DSTP2x_RFID_ReadData', '读RFID数据', {
'devHdl': connectRes.devHdl, 'devHdl': connectRes.devHdl,
'rfidType': params.rfidType 'rfidType': params.rfidType
}) })
console.log('RFID读取结果:', rfidReadRes)
if (rfidReadRes && rfidReadRes.tid) {
this.readTid = rfidReadRes.tid
} else if (rfidReadRes && rfidReadRes.data && rfidReadRes.data[0] && rfidReadRes.data[0].tid) {
this.readTid = rfidReadRes.data[0].tid
}
console.log('提取到的TID:', this.readTid)
if (!this.readTid) {
this.$message.warning('读取到的标签缺少TID信息', { offset: 8 })
}
} }
// 12. // 12.
@ -227,8 +354,28 @@ export default {
await this.sendPostRequest('web_DSTP2x_DeleteTmpl', '删除模板句柄', { 'tmplHdl': tempRes.tmplHdl }) await this.sendPostRequest('web_DSTP2x_DeleteTmpl', '删除模板句柄', { 'tmplHdl': tempRes.tmplHdl })
await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl }) await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl })
this.$message.success('打印成功', { offset: 8 })
return Promise.resolve('打印成功')
this.$message.success(`成功打印${templateDataList.length}条模板数据`, { offset: 8 })
// 14. writeEASTIDID
console.log(this.readTid + '/' + caseId)
if (this.readTid && caseId) {
console.log('开始执行标签绑定操作...')
await this.writeEAS(caseId, this.readTid)
} else if (!caseId) {
console.warn('未传入盒ID,跳过标签绑定')
this.$message.warning('未传入盒ID,跳过标签绑定', { offset: 8 })
} else if (!this.readTid) {
console.warn('未读取到TID,跳过标签绑定')
this.$message.warning('未读取到TID,跳过标签绑定', { offset: 8 })
}
return Promise.resolve({
success: true,
count: templateDataList.length,
data: templateDataList,
tid: this.readTid,
caseId: caseId
})
} catch (error) { } catch (error) {
console.error('打印流程异常:', error) console.error('打印流程异常:', error)
this.$message.error(`打印流程异常:${error}`, { offset: 8 }) this.$message.error(`打印流程异常:${error}`, { offset: 8 })

Loading…
Cancel
Save