Browse Source

标签需求优化

master
xuhuajiao 1 month ago
parent
commit
4f7dc253fc
  1. 2
      .env.development
  2. 2
      public/static/测试.dlt
  3. 8
      src/views/archivesManage/caseManage/caseList/index.vue
  4. 8
      src/views/archivesManage/safeDoor/index.vue
  5. 357
      src/views/components/printRfid-w.vue
  6. 123
      src/views/components/printRfid.vue

2
.env.development

@ -15,7 +15,7 @@ ENV = 'development'
VUE_APP_BASE_API = 'http://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_SDEVID = "D003"
VUE_APP_SDEVID = "D005"
VUE_APP_PRINTNJ='http://127.0.0.1:9001/'
# 是否启用 babel-plugin-dynamic-import-node插件

2
public/static/测试.dlt

@ -1,4 +1,4 @@
{
"Version": "1.1.0.1",
"Data": "84F6F9E0AD9F93949E999BE8D103EBDDE1DFE4E2E5E3F3EA0D0FF7CAA9B3AFAAEACECBBE11FA2EBB2D2F3218EBCACFF1C0CCCD10FE301305150C2F343217F0D99E8D8D909E97A09993BB9AA6A6EAD305EDA3A5F0E70A0C0DF5C6AAA6BAA8B8FCF529120211082D2D2E16F7EAF21A03350DFE02FF160D2B2D2E16F6DCCDC3DCCBAB91949DE1CAFC8CFDFF0001E9C4ACA2A99CA3A4AEC7B0A2AFA9B5F8E113FBEB0D062A292A2B15E2CFC6D6C7D3CDD1DA0DF62910070200142D2F30C00F2F3435DDBDA1948DA392B49E8EA4E8D1039204060709F09CF2DB0DF5E2E9F8EF1214152610CC10F92B15040716313132BF1134262710EFC9CBC1D1C9C4C61B0130E2C3F5F7F9F9FAE2B18E97A3E7D002EAB9A9979CF0E6090B0C0D0EF6D0D6F9E214FCDBCDBCBE060406140B2E323132331BF5BCEDD1C4EBCAD1CDD1BF170332170C1CD3F6F9F9FAFBE3C3A694A8E8D103EB285A852A637E305D9633608EF8EF121415262912BA11FA2E1406080D0A0B1A11342627292916C013FC2E16040F0B091B12F5F7F9F9FAE28EE5CDFFE7DAE9E00305060709F0ABF2DB0DF5E8F7EE111314152610EEC3C5C0E9D5CAD31900321AFCCCC6CFC6100C2F2C2D2E2F17F7CCCBC9EB96869DE0C9FBE3D5D7E6DD0002030405EDC79FD0A4A8B1F4DD0FF7EAF9F0131526292B10EAC1EEC2D6CCD2D71902341CFF0E06282F302C2D15EFC6E8CDD5D8CC9397949DE1CAFCE5D7E6DD0002030405EDC4A9A4AEC1A5B5B4AFABB3F9E214FCFE040410072A2E2D2E2F19F7D3DBCBEBBFCFCFC9CAD213FC2E16091B0F2F3435F6F7E0C18E9096BB9E9AA4C4A6A7A9ECD507F0E2F1E80B0D0E0F10F8C9ADA9BDBBCD12F82A1207140B2E323132331BE8EEC4C9CBCAE5BCC6D216FF3419091B12F5F7F9F9FAE2AFC69B9FA29CBFA39FA9EDD609F0E3F2E90C0E0F1011F9D4DCB2C6CBC6DEBAC4D214FD2F190A1910333526272910F0F8C9CDD0CAEDD4CDD41B04F6DED2E0F9FBFCFE8AABFF018EE00305EDBECCC9CFF2DB0D9C0E1011F9C9A4B0CCE5C5CECE12FD2D1507190E3133341CE0C4CEE2C117FB2D15160D3332301BF09A89B28BE1CAFCE5E5DCFF0102EAC49AAAA39FF0D90BBA9B0D0F101112FAC9A5BFCD12F82A12F2E6F4160F30323334350DE7EE10FE3013F1E7F50C0D0A171134F6F7F9F9E1BB92C4A69ABC9BA7A3A795EDD609F0E2F2E90C0E0F1011F9D8BCAACE10FA2911C0D2C3C3160F30323334350DECD1BED7ECC6D2D216FF3419F1D8C6AC8C90E0D7FAFCFEFEFFE7B8A6ABA9C2AAA2F0D80AF2E4E4F5EC0F11121314FCDDDBE7C3CFCF15FC2E16E4E81910333526272910E8C213FC2E16171131303435F6DEB98FB795A29CE5CE00E8DBEA0305060795B5090B980C9A"
"Data": "84F6F9E0AD9F93949E999BE8D103EBDDE1DFE4E2E5E3F3EA0D0FF7CAA9B3AFAAEACECBBE11FA2EBB2D2F3218EBCACFF1C0CCCD10FE301305150C2F343217F0D99E8D8D909E97A09993BB9AA6A6EAD305EDA3A5F0E70A0C0DF5C6AAA6BAA8B8FCF529120211082D2D2E16F7EAF21A03350DFE02FF160D2B2D2E16F6DCCDC3DCCBAB91949DE1CAFC8CFDFF0001E9C4ACA2A99CA3A4AEC7B0A2AFA9B5F8E113FBEB0D062A292A2B15E2CFC6D6C7D3CDD1DA0DF62910070200142D2F30C00F2F3435DDBDA1948DA392B49E8EA4E8D1039204060709F09CF2DB0DF5E2E9F8EF1214152610CC10F92B15040716313132BF1134262710EFC9CBC1D1C9C4C61B0130E2C3F5F7F9F9FAE2B18E97A3E7D002EAB9A9979CF0E6090B0C0D0EF6D0D6F9E214FCECD1C1CD06C6D6C9D2160F30323334350DE7BFEFD7CBE8C7D3CFD3C419FF341CCEDED6F8FAFBFCFEE5C4A896AAEAD305ED2A5D872B6580325F98356290FAF11426292B2911BC15FC2E160A0A0D0C0D1C032629292F3013BD15FE301B060B0D0EDDD4F8F9FAFBFCE590E6CF01E9DCEBE2050709090AF2ADF4DD0FF7EAF9F0131526292B10EDC5C9C2E9D7CED51902341CEEBEC9D1CC17092C2E2F303419F3CED08BAD99889EE2CBFEE5D6D9E8DF0204050607F0C9A0D2A6AAB3F6DF11F9ECFBF225292B292A12EEC3EEC4DACED2D91B04260E02100C2F2C2D2E2F17F4C8E4CFDA9A8E9699959FE3CDFEE6D9E8DF0204050607F0C6AAA6B0C3A7B7B6B1ADB5FBE42610030403120B2C2E2F323119F9D5DDBDDDC2D1D5D0C7CF15FE301B0B171134F6F7F9F9E1C3909398BCA09CA6C6A8A9ABEED809F1E4F3EA0D0F101112FACBAFBBD1C0CD11FA2E1407160F30323334350DDAF1C6CFD2C7E2BEC8D41B01301B0EDDD4F8F9FAFBFCE5B1C79DA1A49EC1A5A1ABF0D80AF2E5F4EB0E10111213FBD6EEC6CBCBC5E0BEC6D2160131190C1B12252729292F17EDF5CBCFD2CFEFD0CFD9DDC6F9E0D3E2FBFEFEFF8CAD010390E20507F0C0CDCBD1F4DD0F9E101213FBCBB6C4D1E5C4D0D214FD2F190919103335260EE3C6D4E9BE14FD2F171B0F2F3435DDB29D8BB38DE3CDFEE6E7DE010304ECC69CADA5A0F2DB0DBC9D0F11121314FCDBB9C4CD11FA2E14F2E8F8180F323435262710E9F417FB2D15F3E9FA0E090C1CD3F6F9F9FAFBE3BE94C5A89CBE9DA9A5A997F0D80AF2E4F4EB0E10111213FBDACEBED310F92B15C2D2C5C7180F323435262710EED7C5D4E9C8D4D41B01301BF69A88AF8E91E2D9FDFEFF0001E9BAA8ADABC4ADA4F1DA0CF4E6E6F7EE111314152610E2DBE6C5D3D115FE3218E4EA1B12252729292F17E5BF15FE301B190D3335F6F7F9E0BA91B998A49DE7D002EADDEC0507090996B70B0D9A0E9C"
}

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

@ -289,7 +289,7 @@ export default {
const codeEPCRes = await RFID.codeEpc({
op: 'RFID_CodeEPC',
sDevID: sDevID,
EAS: '1',
EAS: '0',
Type: '2', // 1 2 3
Code: this.crud.selections[0].id // 使IDCode
})
@ -303,7 +303,7 @@ export default {
const epcData = result.epc || result.EPC
this.$message.success('EPC数据获取成功,开始打印...')
// 2.
// 2.
// const printDataList = [
// { elemID: 'epc-id', actualData: epcData },
// // { elemID: 'tid-id', actualData: tidData },
@ -318,8 +318,8 @@ export default {
// 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 }
{ elemID: 'EPC-01', actualData: epcData, caseId: caseId },
{ elemID: 'Case-name', actualData: this.crud.selections[0].caseName, caseId: caseId }
]
try {
const printResult = await this.$refs.printRFID.handlePrint(printDataList)

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

@ -3,11 +3,11 @@
<!-- 操作按钮区域 -->
<div class="btn-group">
<!-- style="background-color: #f65163; border-color: #f65163;" -->
<el-button type="primary" style="background-color: #1aae93; border-color: #1aae93;" :disabled="isProcessing" @click="handleAlarmOperation(0)">
<el-button type="primary" style="background-color: #1aae93; border-color: #1aae93;" :disabled="isProcessing" @click="handleAlarmOperation(1)">
<i class="iconfont icon-shool_jiechubaojing" style="margin-right: 6px;" />
解除报警
</el-button>
<el-button type="primary" style="background-color: #f65163; border-color: #f65163;" :disabled="isProcessing" @click="handleAlarmOperation(1)">
<el-button type="primary" style="background-color: #f65163; border-color: #f65163;" :disabled="isProcessing" @click="handleAlarmOperation(0)">
<i class="iconfont icon-alarm" style="margin-right: 6px;" />
恢复报警
</el-button>
@ -66,7 +66,7 @@ export default {
step: 0, // 0 1
errorStep: 0, //
isProcessing: false, //
currentEAS: 1, // EAS 1- 0-
currentEAS: 0, // EAS 0- 1-
currentOperation: '恢复', //
step1Message: '请放入标签',
step2Message: '放入标签后开始读取标签',
@ -99,7 +99,7 @@ export default {
async handleAlarmOperation(easValue) {
//
this.currentEAS = easValue
this.currentOperation = easValue === 1 ? '恢复' : '解除'
this.currentOperation = easValue === 0 ? '恢复' : '解除'
// step 1
this.initStepInfo()

357
src/views/components/printRfid-w.vue

@ -0,0 +1,357 @@
<template>
<!-- 保留按钮如需隐藏可加 v-show="false" -->
<div class="read-tid-template-print-container">
<div v-show="false" class="btn">
<el-button type="success" @click="handlePrint">打印</el-button>
</div>
</div>
</template>
<script>
import request from '@/utils/request'
import RFID from '@/api/RFID/RFID'
export default {
name: 'ReadTidTemplatePrintRFID',
// ref
provide() {
return {
printRFID: this.handlePrint
}
},
data() {
return {
//
tidChecked: true, // TID
epcChecked: false, // EPC
printCount: 1, // 1
emuType: '1', // ZPL仿
//
defaultTemplateData: [
{ elemID: 'EPC-01', actualData: '' }
],
// TID
readTid: ''
}
},
methods: {
getDateTime(date) {
if (date) {
const time = {
yyyy: date.getFullYear(),
MM: date.getMonth() + 1,
dd: date.getDate(),
hh: date.getHours(),
mm: date.getMinutes(),
ss: date.getSeconds(),
hm: Date.now(),
w: ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'][date.getDay()]
}
let format = 'yyyy-MM-dd hh:mm:ss:hm'
for (const temp in time) {
format = format.replace(temp, (Array(temp.length).join('0') + time[temp]).slice(-temp.length))
}
return format
}
},
creatLog(text) {
const logItem = `${this.getDateTime(new Date())}${text}`
console.log(logItem)
},
creatSucessLog(api, funcName, res) {
const log = res.outParams
? `${api}(${funcName}) successful, Message: ${JSON.stringify(res.outParams)}`
: `${api}(${funcName}) successful `
this.creatLog(log)
},
creatErrLog(api, funcName, res) {
const log = `${api}(${funcName}) failed, Message: ${res.rsltMsg}`
this.creatLog(log)
},
generateUniqueId() {
const timestamp = Date.now().toString(36)
const randomNum = Math.random().toString(36).substr(2, 9)
return timestamp + randomNum
},
// POST
sendPostRequest(funcId, funcName, data) {
return new Promise((resolve, reject) => {
// URLjQuery
const targetUrl = process.env.NODE_ENV === 'production' ? window.g.printNJ : process.env.VUE_APP_PRINTNJ
//
request({
url: targetUrl, // 使baseURL
method: 'post',
timeout: 30000,
headers: {
// Content-TypeJSON
'Content-Type': 'application/json; charset=utf-8'
},
data: JSON.stringify({
version: '1.0',
seqNo: this.generateUniqueId(),
funcName: funcId,
inParams: data
})
// axios
// data: {
// version: '1.0',
// seqNo: this.generateUniqueId(),
// funcName: funcId,
// inParams: data
// }
}).then(response => {
const res = response
console.log('响应数据:', response)
if (res.rtnCode === '0') {
this.creatSucessLog(funcId, funcName, res) // resolve
resolve(res.outParams)
} else {
this.creatErrLog(funcId, funcName, res) // reject
reject(res.rsltMsg)
}
}).catch(error => {
console.error('请求失败:', error)
this.$message.error('接口请求失败', { offset: 8 })
reject(error.message || '未知网络错误')
})
})
},
// Base64
getTemplateFileBase64() {
return new Promise((resolve, reject) => {
// public/static/
const templateUrl = `${process.env.BASE_URL}static/测试.dlt`
fetch(templateUrl)
.then(response => {
if (!response.ok) throw new Error('模板文件加载失败')
return response.blob()
})
.then(blob => {
const reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = () => {
const base64 = reader.result.split(',')[1]
resolve(base64)
}
reader.onerror = (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: '0',
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标签
* @param {Array|string} printData - 支持两种格式
* 1. 字符串单条数据的actualData兼容旧调用方式
* 2. 数组多条模板数据格式 [{elemID: 'xxx', actualData: 'xxx', caseId: 'xxx'}, ...]
* @returns {Promise} - 返回打印结果Promise
*/
async handlePrint(printData) {
let templateDataList = []
let caseId = ''
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)
}
if (templateDataList.length === 0) {
this.$message.warning('打印数据不能为空,请检查传入的模板数据', { offset: 8 })
return Promise.reject('打印数据不能为空')
}
console.log('最终模板数据列表:', templateDataList)
try {
// 1. Base64
const tmplFileSrc = await this.getTemplateFileBase64()
console.log('模板文件Base64', tmplFileSrc)
// 2.
const params = {
tmplFileSrc,
printCount: this.printCount,
EMU_RADIO: this.emuType,
TID: this.tidChecked,
EPC: this.epcChecked,
rfidType: this.tidChecked ? '1' : (this.epcChecked ? '2' : '0')
}
console.log('组装参数', params)
// 3.
await this.sendPostRequest('web_DSTP2x_SetLibLang', '设置语言', { 'language': '0' })
// 4.
const devRes = await this.sendPostRequest('web_DSTP2x_EnumDev', '枚举设备', { 'enumType': '1' })
let devName = devRes.enumList
if (devName.indexOf(',') !== -1) {
devName = devName.split(',')[0]
}
// 5.
const connectRes = await this.sendPostRequest('web_DSTP2x_ConnEnumeratedDev', '连接设备', { 'devName': devName })
// 6.
const statusRes = await this.sendPostRequest('web_DSTP2x_GetPrtStatus', '获取打印状态', { 'devHdl': connectRes.devHdl })
if (statusRes.isReady !== '1') {
this.$message.error('打印机状态异常', { offset: 8 })
await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl })
return Promise.reject('打印机状态异常')
}
// 7. 仿
await this.sendPostRequest('web_DSTP2x_SetPrnEmulation', '设置仿真类型', {
'devHdl': connectRes.devHdl,
'emulation': params.EMU_RADIO
})
// 8.
await this.sendPostRequest('web_DSTP2x_SetCommTimeout', '设置超时时间', {
'devHdl': connectRes.devHdl,
'commType': '1',
'sendTimeout': '20000',
'recvTimeout': '20000'
})
// 9.
const tempRes = await this.sendPostRequest('web_DSTP2x_LoadLabelTmpl', '加载模板', {
'tmplFileSrcType': '1',
'tmplFileSrc': params.tmplFileSrc
})
// 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. RFIDTID
let rfidReadRes = null
if (params.rfidType !== '0') {
rfidReadRes = await this.sendPostRequest('web_DSTP2x_RFID_ReadData', '读RFID数据', {
'devHdl': connectRes.devHdl,
'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.
await this.sendPostRequest('web_DSTP2x_PrintTmpl', '执行打印', {
'devHdl': connectRes.devHdl,
'tmplHdl': tempRes.tmplHdl,
'outFileType': '0'
})
// 13.
await this.sendPostRequest('web_DSTP2x_DeleteTmpl', '删除模板句柄', { 'tmplHdl': tempRes.tmplHdl })
await this.sendPostRequest('web_DSTP2x_DisconnDev', '断开连接', { 'devHdl': connectRes.devHdl })
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) {
console.error('打印流程异常:', error)
this.$message.error(`打印流程异常:${error}`, { offset: 8 })
return Promise.reject(error)
}
}
}
}
</script>
<style scoped>
</style>

123
src/views/components/printRfid.vue

@ -4,12 +4,28 @@
<div v-show="false" class="btn">
<el-button type="success" @click="handlePrint">打印</el-button>
</div>
<!-- 新增覆盖绑定确认弹窗 -->
<!-- <el-dialog
v-model="coverBindingVisible"
title="提示"
width="30%"
:close-on-click-modal="false"
>
<span>当前标签已被绑定是否覆盖绑定</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="coverBindingVisible = false">取消</el-button>
<el-button type="primary" @click="handleCoverBind">确认覆盖</el-button>
</span>
</template>
</el-dialog> -->
</div>
</template>
<script>
import request from '@/utils/request'
import RFID from '@/api/RFID/RFID'
import { bingdingLabel } from '@/api/storeManage/tagManage/bindTagList'
export default {
name: 'ReadTidTemplatePrintRFID',
@ -31,7 +47,10 @@ export default {
{ elemID: 'epc-id', actualData: '' } //
],
// TID
readTid: ''
readTid: '',
coverBindingVisible: false,
cacheBindParams: {},
bindingType: '2'
}
},
methods: {
@ -73,37 +92,6 @@ export default {
const randomNum = Math.random().toString(36).substr(2, 9)
return timestamp + randomNum
},
// 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) {
return new Promise((resolve, reject) => {
@ -174,7 +162,7 @@ export default {
})
},
/**
* 写入EAS数据新增方法
* 写入EAS数据保留原有方法不影响其他可能的调用
* @param {string} caseId - 盒ID
* @param {string} tid - 读取到的TID
* @returns {Promise}
@ -191,8 +179,8 @@ export default {
const writeParams = {
op: 'RFID_WriteEPC',
sDevID: sDevID,
EAS: 1,
Type: 2,
EAS: '1',
Type: '2',
Code: caseId,
Tid: tid
}
@ -219,16 +207,59 @@ export default {
return Promise.reject(err)
}
},
/**
* 核心标签绑定方法仅保留bingdingLabel接口请求移除writeEPC逻辑
* @param {string} bindingId - 绑定ID对应原caseId/盒ID
* @param {string} tid - TID号
* @param {boolean} isCover - 是否覆盖绑定
* @returns {Promise}
*/
async startBind(bindingId, tid, isCover = false) {
return new Promise(async(resolve, reject) => {
if (!bindingId || !tid) {
this.$message.warning('绑定ID或TID不能为空', { offset: 8 })
reject('绑定ID或TID不能为空')
return
}
//
this.cacheBindParams = { bindingId, tid, isCover }
const data = {
id: bindingId,
labelType: this.bindingType,
tid: tid
}
if (isCover) {
data.coverLabel = true
}
try {
console.log('startBind绑定参数:', data)
const res = await bingdingLabel(data)
if (res === '当前标签已被绑定' || res === 1) {
this.$message.success('标签绑定成功', { offset: 8 })
resolve()
} else {
this.$message.error('标签绑定失败', { offset: 8 })
reject('标签绑定失败')
}
} catch (err) {
this.$message.error(`标签绑定异常:${err.message}`, { offset: 8 })
reject(err)
}
})
},
// async handleCoverBind() {
// this.coverBindingVisible = false
// const { bindingId, tid } = this.cacheBindParams
// await this.startBind(bindingId, tid, true)
// },
/**
* 打印RFID标签
* @param {Array|string} printData - 支持两种格式
* 1. 字符串单条数据的actualData兼容旧调用方式
* 2. 数组多条模板数据格式 [{elemID: 'xxx', actualData: 'xxx', caseId: 'xxx'}, ...]
* @returns {Promise} - 返回打印结果Promise
*/
async handlePrint(printData) {
let templateDataList = []
let caseId = ''
let caseId = '' // bindingId
if (typeof printData === 'string') {
templateDataList = [
@ -241,7 +272,7 @@ export default {
console.warn('过滤无效的模板数据:', item)
}
if (isValid && item.caseId && !caseId) {
caseId = item.caseId
caseId = item.caseId // caseIdID
}
return isValid
})
@ -356,13 +387,14 @@ export default {
this.$message.success(`成功打印${templateDataList.length}条模板数据`, { offset: 8 })
// 14. writeEASTIDID
// 14. bingdingLabelstartBind
// this.readTid = 'E28068942000500B728799AE'
console.log(this.readTid + '/' + caseId)
if (this.readTid && caseId) {
console.log('开始执行标签绑定操作...')
await this.writeEAS(caseId, this.readTid)
await this.startBind(caseId, this.readTid)
} else if (!caseId) {
console.warn('未传入盒ID,跳过标签绑定')
console.warn('未传入盒ID(bindingId),跳过标签绑定')
this.$message.warning('未传入盒ID,跳过标签绑定', { offset: 8 })
} else if (!this.readTid) {
console.warn('未读取到TID,跳过标签绑定')
@ -387,4 +419,7 @@ export default {
</script>
<style scoped>
.dialog-footer {
text-align: right;
}
</style>
Loading…
Cancel
Save