Index: ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.jsp =================================================================== diff -u -r34429 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.jsp (.../awaitForRecycleList.jsp) (revision 34429) +++ ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.jsp (.../awaitForRecycleList.jsp) (revision 34431) @@ -350,7 +350,7 @@ - + <%----%> Index: ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.js =================================================================== diff -u -r34428 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.js (.../awaitForRecycleList.js) (revision 34428) +++ ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/awaitForRecycleList.js (.../awaitForRecycleList.js) (revision 34431) @@ -1617,36 +1617,37 @@ return parseInt(value); } -function connectRFIDFun() { +function connectRFIDFun(show) { if ('serial' in navigator) { - var encoder = new TextEncoder(); //设置循环查询获取用户区的数据 - var params = { - data: encoder.encode(">x m 1 03 00 04\r\n") + var params = {} + if(show !== 0){ + params = { + usbVendorId: 4292, + usbProductId: 60000 + } + }else { + params = { + getAllPort:true + } } - openPort(params, function (value, isData) { + openPort(params, function (value, isData, errorStatus) { if (isData) { - var dataString = ""; - var barcode = ''; - if (value.length > 10) { - for (var i = 0; i < value.length; i++) { - if (value[i] !== '' && value[i] !== 13 && value[i] !== 10) { - dataString += String.fromCharCode(value[i]); - } - } - } - if (dataString !== '' && dataString.indexOf('M') >= 0) { - barcode = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('FF')); - if (barcode !== '') { - loadBarcodeDevice(barcode); - } - } + loadBarcodeDevice(value); } else { - if(value == "连接失败:SecurityError: Failed to execute 'requestPort' on 'Serial': Must be handling a user gesture to show a permission request."){ - layer.msg('连接失败:串口还没有授权,请先点击【连接RFID设备】按钮!'); + if (errorStatus == 'msg1') { + layer.msg(value); $("#openPortBtn").show(); - }else { + } else if (errorStatus == 'msg2') { layer.msg(value); + $("#openPortBtn").hide(); + } else if (errorStatus == 'msg3') { + layer.msg(value); + $("#openPortBtn").show(); + } else if (errorStatus == 'msg4') { + layer.msg(value); + } else if (errorStatus == 'msg5') { + layer.msg(value); } } }); Index: ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js =================================================================== diff -u -r34428 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 34428) +++ ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 34431) @@ -1,36 +1,142 @@ var keepReading = true; var reader; var writer; +var port; +var msg1 = '未找到该设备,请配置设备的usbVendorId和usbProductId'; +var msg2 = '设备已连接!'; +var msg3 = '连接失败:串口还没有授权,请先点击【连接RFID设备】按钮!'; +var msg4 = '用户取消选择端口!'; +var msg5 = '端口已打开!'; +var msg6 = '数据写入成功!'; +var msg7 = '数据写入失败,请重新写入!'; +//hex转字符串 +function hextoString(hex) { + var arr = hex.split(""); + var out = ""; + for (var i = 0; i < arr.length / 2; i++) { + var tmp = "0x" + arr[i * 2] + arr[i * 2 + 1] + var charValue = String.fromCharCode(tmp); + out += charValue + } + return out; +}; + +//字符串转hex +function stringtoArr(str) { + var arr = []; + for (var i = 0; i < str.length; i++) { + if (arr.length == 0) { + arr[0] = parseInt(str.charCodeAt(i).toString(10)); + } else { + arr.push(parseInt(str.charCodeAt(i).toString(10))) + } + } + return arr +} + //打开串口并连接 async function openPort(params, callback) { try { - // 获取用户之前授予该网站访问权限的所有串口 - const filters = params.filters; - const ports = await navigator.serial.getPorts(); - var port; - if (ports.length == 1) { - port = ports[0]; - } else { - if (filters) { - for (var i = 0; i < ports.length; i++) { - const { usbProductId, usbVendorId } = ports[i].getInfo(); - if (filters[0].usbProductId == usbProductId && filters[0].usbVendorId == usbVendorId) { - port = ports[i]; - break; + keepReading = true; + var usbVendorId = params.usbVendorId; + var usbProductId = params.usbProductId; + var baudRate = params.baudRate ? params.baudRate : 115200; + var dataBits = params.dataBits ? params.dataBits : 8; + var stopBits = params.stopBits ? params.stopBits : 1; + var parity = params.parity ? params.parity : 'none'; + var getAllData = params.getAllData; + var getAllPort = params.getAllPort; + var barcode = ''; + if (!port) { + if (getAllPort) { + port = await navigator.serial.requestPort(); + var { usbProductId, usbVendorId } = port.getInfo(); + usbVendorId = usbVendorId; + usbProductId = usbProductId; + } else { + if (!usbVendorId || !usbProductId) { + var ports = await navigator.serial.getPorts(); + if (ports.length == 0) { + port = await navigator.serial.requestPort(); + var { usbProductId, usbVendorId } = port.getInfo(); + usbVendorId = usbVendorId; + usbProductId = usbProductId; + } else { + for (var i = 0; i < ports.length; i++) { + var { usbProductId, usbVendorId } = ports[i].getInfo(); + if (usbProductId && usbVendorId) { + port = ports[i]; + usbVendorId = usbVendorId; + usbProductId = usbProductId; + break; + } + } } + } else { + var filters = [ + { usbVendorId: usbVendorId, usbProductId: usbProductId } + ]; + var ports = await navigator.serial.getPorts(); + if (ports.length == 1) { + var { usbProductId, usbVendorId } = ports[0].getInfo(); + if (filters[0].usbProductId == usbProductId && filters[0].usbVendorId == usbVendorId) { + port = ports[0]; + } + if (!port) { + callback(msg1, false, 'msg1'); + return; + } + } else if (ports.length > 1) { + for (var i = 0; i < ports.length; i++) { + var { usbProductId, usbVendorId } = ports[i].getInfo(); + if (filters[0].usbProductId == usbProductId && filters[0].usbVendorId == usbVendorId) { + port = ports[i]; + break; + } + } + if (!port) { + callback(msg1, false, 'msg1'); + return; + } + } else { + port = await navigator.serial.requestPort(); + var { usbProductId, usbVendorId } = port.getInfo(); + usbVendorId = usbVendorId; + usbProductId = usbProductId; + } } - } else { + await port.open({ baudRate: baudRate }, { dataBits: dataBits }, { stopBits: stopBits }, { parity: parity }); + } + + } else { + if (getAllPort) { port = await navigator.serial.requestPort(); + var { usbProductId, usbVendorId } = port.getInfo(); + usbVendorId = usbVendorId; + usbProductId = usbProductId; + } else { + var { usbProductId, usbVendorId } = port.getInfo(); + usbVendorId = usbVendorId; + usbProductId = usbProductId; } } - await port.open({ baudRate: 115200 }, { dataBits: 8 }, { stopBits: 1 }, { parity: 'none' }); - callback('设备已连接!', false); reader = port.readable.getReader(); writer = port.writable.getWriter(); //设置循环查询获取用户区的数据 - await writer.write(params.data); + if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H + var data = new Uint8Array([187, 23, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 41, 13, 10]); + await writer.write(data); + } else if (usbVendorId == 4292 && usbProductId == 60000) {//手提式 A100 + var encoder = new TextEncoder(); + var data = encoder.encode(">x m 1 03 00 09\r\n"); + await writer.write(data); + } else { + callback(msg1, false, 'msg1'); + return; + } while (port.readable && keepReading) { + callback(msg2, false, 'msg2'); try { while (true) { var { value, done } = await reader.read(); @@ -40,11 +146,123 @@ break; } if (value) { - callback(value, true); + var dataString = ""; + if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H + if (value.length > 20) { + for (var i = 0; i < value.length; i++) { + dataString += value[i].toString(16) + } + } else { + var isReturn; + for (var i = 0; i < value.length; i++) { + if (value[0] == 154) { + if (value[2] == 1) { + isReturn = true; + break; + } else if (value[2] == 0) { + isReturn = false; + break; + } + } else if (value[1] == 154) { + if (value[3] == 1) { + isReturn = true; + break; + } else if (value[3] == 0) { + isReturn = false; + break; + } + } + } + if (isReturn == true) { + callback(msg6, false, 'msg6'); + isReturn = ''; + break; + } else if (isReturn == false) { + callback(msg7, false, 'msg7'); + isReturn = ''; + break; + } + } + if (dataString !== '') { + dataString = dataString.toUpperCase(); + if (getAllData) { + var newTid; + if (dataString.indexOf('BB') >= 0) { + var tid; + dataString = dataString.substring(10, dataString.length); + var epc = dataString.substring(0, dataString.indexOf('CE2')); + if (dataString.indexOf('4D') > 0) { + tid = dataString.substring(dataString.indexOf('CE2') + 1, dataString.indexOf('4D') - 2); + } else { + tid = dataString.substring(dataString.indexOf('CE2') + 1, dataString.length - 2); + } + if (tid.length > 10 && dataString.indexOf('E') == 0) { + newTid = tid || '' + } + } + if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { + var newData = hextoString(dataString); + if (newData.indexOf("M") == 0) { + newData = newData.substring(newData.indexOf("M"), newData.indexOf("FF") + 2); + newTid += ',' + newData; + } + } + if (newTid) { + callback(newTid, true); + } + } else { + if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { + var newData = hextoString(dataString); + if (newData.indexOf("M") == 0) { + newData = newData.substring(newData.indexOf("M") + 1, newData.indexOf("FF")); + if (barcode !== newData) { + barcode = newData; + callback(barcode, true); + } + } + } + } + } + } else if (usbVendorId == 4292 && usbProductId == 60000) {//手提式 A100 + var dataString = ""; + if (value.length > 10) { + for (var i = 0; i < value.length; i++) { + if (value[i] !== '' && value[i] !== 13 && value[i] !== 10) { + dataString += String.fromCharCode(value[i]); + } + } + } else if (value.length == 4) { + if (value[0] == 65 && value[1] == 51) {//停止扫描 + barcode = '' + } + } else if (value.length == 5) { + if (value[1] == 65 && value[2] == 51) {//停止扫描 + barcode = '' + } + } + if (dataString !== '' && dataString.indexOf('M') > 0) { + if (getAllData) { + var arr = dataString.split('M'); + var uid = arr[0].split('R')[1]; + var userId = arr[1]; + userId = hextoString(userId); + callback(uid + ',' + userId, true); + } else { + var newData = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('4646')); + newData = hextoString(newData); + if (newData.indexOf("M") == 0) { + if (barcode !== newData) { + barcode = newData.substring(1, newData.length); + callback(barcode, true); + } + } + } + } + } } } } catch (error) { - callback('连接失败!', false); + callback('连接失败:' + error, false); } finally { var { value, done } = await reader.read(); if (done) { @@ -53,15 +271,170 @@ return; } if (value) { - dealWithData(value); + var dataString = ""; + if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H + if (value.length > 20) { + for (var i = 0; i < value.length; i++) { + dataString += value[i].toString(16) + } + } else { + var isReturn; + for (var i = 0; i < value.length; i++) { + if (value[0] == 154) { + if (value[2] == 1) { + isReturn = true; + break; + } else if (value[2] == 0) { + isReturn = false; + break; + } + } else if (value[1] == 154) { + if (value[3] == 1) { + isReturn = true; + break; + } else if (value[3] == 0) { + isReturn = false; + break; + } + } + } + if (isReturn == true) { + callback(msg6, false, 'msg6'); + isReturn = ''; + break; + } else if (isReturn == false) { + callback(msg7, false, 'msg7'); + isReturn = ''; + break; + } + } + if (dataString !== '') { + dataString = dataString.toUpperCase(); + if (getAllData) { + var newTid; + if (dataString.indexOf('BB') >= 0) { + var tid; + if (dataString.indexOf('4D') > 0) { + tid = dataString.substring(30, dataString.indexOf('4D') - 2); + } else { + tid = dataString.substring(30, dataString.length - 2); + } + if (tid.length > 10 && tid.indexOf('E') == 0) { + newTid = tid || '' + } + } + if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { + var newData = hextoString(dataString); + if (newData.indexOf("M") == 0) { + newData = newData.substring(newData.indexOf("M"), newData.indexOf("FF") + 2); + callback(newTid + ',' + newData, true); + } + } + } else { + if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { + var newData = hextoString(dataString); + if (newData.indexOf("M") == 0) { + newData = newData.substring(newData.indexOf("M") + 1, newData.indexOf("FF")); + if (barcode !== newData) { + barcode = newData; + callback(barcode, true); + } + } + } + } + } + } else if (usbVendorId == 4292 && usbProductId == 60000) {//手提式 A100 + var dataString = ""; + if (value.length > 10) { + for (var i = 0; i < value.length; i++) { + if (value[i] !== '' && value[i] !== 13 && value[i] !== 10) { + dataString += String.fromCharCode(value[i]); + } + } + } else if (value.length == 4) { + if (value[0] == 65 && value[1] == 51) {//停止扫描 + barcode = '' + } + } else if (value.length == 5) { + if (value[1] == 65 && value[2] == 51) {//停止扫描 + barcode = '' + } + } + if (dataString !== '' && dataString.indexOf('M') > 0) { + var newData = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('4646')); + newData = hextoString(newData); + if (newData.indexOf("M") == 0) { + if (barcode !== newData) { + barcode = newData.substring(1, newData.length); + callback(barcode, true); + } + } + } + } } } } } catch (error) { - callback('连接失败:' + error, false); + var errStr = '连接失败:' + error; + if (errStr.indexOf('Must be handling a user gesture to show a permission request') > 0) { + callback(msg3, false, 'msg3'); + } else if (errStr.indexOf('No port selected by the user') > 0) { + callback(msg4, false, 'msg4'); + } else if (errStr.indexOf('The port is already open') > 0) { + callback(msg5, false, 'msg5'); + } } } +async function closeRFID() { + if (keepReading && reader) { + keepReading = false; + reader.cancel(); + reader.releaseLock(); + writer.releaseLock(); + } +} +var isStop = false; +async function stopRFID() { + var { usbProductId, usbVendorId } = port.getInfo(); + if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H + //停止读取标签 + var stop = [187, 24, 0, 24, 13, 10]; + var stopData = new Uint8Array(stop); + await writer.write(stopData); + isStop = true; + } +} + +async function writeRFID(barcode) { + if (!isStop) { + showResult('请先停止读取标签!'); + return; + } + var { usbProductId, usbVendorId } = port.getInfo(); + if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H + var barcodeArr = stringtoArr(barcode); + var addArr = []; + if (barcodeArr.length < 18) { + for (var j = 0; j < 18 - barcodeArr.length; j++) { + addArr.push(0); + } + } + var arr = [187]; + var arr1 = [26, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9]; + + var resultArr = arr1.concat(barcodeArr).concat(addArr); + var sum = eval(resultArr.join('+')); + var str = sum.toString(16); + var crc = str.substring(str.length - 2); + crc = eval("0x" + crc).toString(10); + var arr2 = [parseInt(crc), 13, 10]; + var newArr = arr.concat(resultArr).concat(arr2); + var data = new Uint8Array(newArr); + await writer.write(data); + } +} + window.addEventListener('beforeunload', function () { if (keepReading && reader) { keepReading = false; Index: ssts-web/src/main/webapp/disinfectsystem/packing/packingView.js =================================================================== diff -u -r34428 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/packing/packingView.js (.../packingView.js) (revision 34428) +++ ssts-web/src/main/webapp/disinfectsystem/packing/packingView.js (.../packingView.js) (revision 34431) @@ -2575,10 +2575,9 @@ xtype: 'button', margin: '0 0 0 10', id:'connectRFID', - hidden: true, text: '' + '连接RFID设备' + '', handler: function () { - connectRFIDFun(); + connectRFIDFun(0); } }] } @@ -6639,6 +6638,32 @@ inactivityTime(); if(sstsConfig.enableRFIDTousseIdCard && !isIE()){ + //连接RFID设备 + function connectRFIDFun(show){ + if ('serial' in navigator) { + var params = {}; + if(show !== 0){ + params = { + usbVendorId: 6790, + usbProductId: 29987 + } + }else { + params = { + getAllPort:true + } + } + openPort(params,function(value,isData,errorStatus){ + if(isData){ + loadIdCardByBarcode(value, true, true); + }else { + showResult(value); + } + }); + } else { + showResult('你的浏览器不支持串口连接!'); + } + } + connectRFIDFun(); } }); @@ -6995,43 +7020,4 @@ } else { reflushWaitPackingTreeGrid(); } -} - -//连接RFID设备 -function connectRFIDFun(){ - if ('serial' in navigator) { - var barcode = ''; - var data = new Uint8Array([187, 23, 9, 0, 0, 0, 0, 0, 0, 0, 0, 6, 38, 13, 10]) - var params = { - filters:[ - //桌面 - { usbVendorId: 6790, usbProductId: 29987 } - ], - data:data - } - openPort(params,function(value,isData){ - if(isData){ - var dataString = ""; - if (value.length > 20) { - for (var i = 0; i < value.length; i++) { - dataString += value[i].toString(16) - } - } - if (dataString !== '') { - dataString = dataString.toUpperCase(); - if (dataString.indexOf('FEF') > -1 && dataString.indexOf('FF') > -1) { - var newData = dataString.substring(dataString.indexOf("FEF") + 3, dataString.indexOf("FF")); - if (barcode !== newData) { - barcode = newData; - loadIdCardByBarcode(barcode, true, true) - } - } - } - }else { - showResult(value); - } - }); - } else { - showResult('你的浏览器不支持串口连接!'); - } } \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseView.jsp =================================================================== diff -u -r34209 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseView.jsp (.../tousseView.jsp) (revision 34209) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/tousseView.jsp (.../tousseView.jsp) (revision 34431) @@ -174,6 +174,7 @@ + Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/idCardForm.js =================================================================== diff -u -r34326 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/idCardForm.js (.../idCardForm.js) (revision 34326) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/tousse/idCardForm.js (.../idCardForm.js) (revision 34431) @@ -19,637 +19,648 @@ //标识牌标签类型 var idCardInstanceFields = [ - {name : 'id'}, - {name : 'idCardDefinitionID'}, - {name : 'barcode'}, - {name : 'status'}, - {name : 'useAmount'}, - {name : 'printDate'}, - {name : 'firstRecyclingTime'}, - {name : 'tousseInstanceStatusAndTime'}, - {name : 'sm'}// ColumnModel增加CheckboxSelectionModel后,不加这个会报错 - ]; + { name: 'id' }, + { name: 'idCardDefinitionID' }, + { name: 'barcode' }, + { name: 'status' }, + { name: 'useAmount' }, + { name: 'printDate' }, + { name: 'firstRecyclingTime' }, + { name: 'tousseInstanceStatusAndTime' }, + { name: 'sm' }// ColumnModel增加CheckboxSelectionModel后,不加这个会报错 +]; var traceableMaterialFields = [ - {name : 'id'}, - {name : 'count'}, - {name : 'nameSpecification'}, - {name : 'name'}, - {name : 'specification'}, - {name : 'serialNumber'}, - {name : 'materialDefinition'}, - {name : 'sm'},// ColumnModel增加CheckboxSelectionModel后,不加这个会报错 - ]; + { name: 'id' }, + { name: 'count' }, + { name: 'nameSpecification' }, + { name: 'name' }, + { name: 'specification' }, + { name: 'serialNumber' }, + { name: 'materialDefinition' }, + { name: 'sm' },// ColumnModel增加CheckboxSelectionModel后,不加这个会报错 +]; var materialFields = [ - {name : 'id'}, - {name : 'count'}, - {name : 'materileName'}, - {name : 'name'}, - {name : 'specification'} - ]; + { name: 'id' }, + { name: 'count' }, + { name: 'materileName' }, + { name: 'name' }, + { name: 'specification' } +]; var idCardFields = [ - {name : 'id'}, - {name : 'number'}, - {name : 'idNumber'}, - {name : 'deleted'}, - {name : 'status'}, - {name : 'barcode'}, - {name : 'curIdCardInstanceBarcode'}, - {name : 'idCardInstances'}, - {name : 'packageType'}, - {name : 'useAmount'}, - {name : 'traceableMaterials'}, - {name : 'idCardInstancesLoad'}, - {name : 'description'} - ]; + { name: 'id' }, + { name: 'number' }, + { name: 'idNumber' }, + { name: 'deleted' }, + { name: 'status' }, + { name: 'barcode' }, + { name: 'curIdCardInstanceBarcode' }, + { name: 'idCardInstances' }, + { name: 'packageType' }, + { name: 'useAmount' }, + { name: 'traceableMaterials' }, + { name: 'idCardInstancesLoad' }, + { name: 'description' } +]; IDCardInstance = Ext.data.Record.create(idCardInstanceFields); IDCard = Ext.data.Record.create(idCardFields); var TraceableMaterial = Ext.data.Record.create(traceableMaterialFields); // 显示标识牌表单 -function showIDCardListView(){ +function showIDCardListView() { supplementResult = false; idCardDefinitionStore = new top.Ext.data.Store({ - proxy : new top.Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadIDCardInfo.do', - baseParams :{id:id}, - method : 'POST' + proxy: new top.Ext.data.HttpProxy({ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadIDCardInfo.do', + baseParams: { id: id }, + method: 'POST' }), - reader : new top.Ext.data.JsonReader({ - fields : idCardFields + reader: new top.Ext.data.JsonReader({ + fields: idCardFields }) }); -// idCardDefinitionStore.baseParams['id'] = id; -// idCardDefinitionStore.load({ -// callback:function(records,options,success){ -// if(success){ -// idCardsOriginalStr = buildJSONStringFromStore(idCardDefinitionStore); -// // 选中第一个标识牌 -// gridPanel.getSelectionModel().selectFirstRow(); -// } -// }}); - if(id != 0 && !sstsConfig.disableIdCard){ + // idCardDefinitionStore.baseParams['id'] = id; + // idCardDefinitionStore.load({ + // callback:function(records,options,success){ + // if(success){ + // idCardsOriginalStr = buildJSONStringFromStore(idCardDefinitionStore); + // // 选中第一个标识牌 + // gridPanel.getSelectionModel().selectFirstRow(); + // } + // }}); + if (id != 0 && !sstsConfig.disableIdCard) { loadIDCardDefinitions(); } - - + + var signBoardCm = new top.Ext.grid.ColumnModel([ - new top.Ext.grid.CheckboxSelectionModel ({singleSelect : true,hideable:false}),//checkbox 列 - {header : '序号',dataIndex : 'number',width : 30}, -// {header : "当前条码",dataIndex : 'barcode',width : 70}, - {header : "当前条码",dataIndex : 'curIdCardInstanceBarcode',width : 70}, - {header : "编号",dataIndex : 'idNumber',width : 30,editor : new top.Ext.form.TextField({ - })}, - {header : "使用次数",dataIndex : 'useAmount',width : 30}, - {header : "包装类型",dataIndex : 'packageType',width : 120,hidden:!sstsConfig.enableIdCardDefaultPackageType}, - {header : "状态",dataIndex : 'status',width : 50}, - {id:'description',header : "描述", - dataIndex : 'description', - width : 200, - editor : new top.Ext.form.TextField({ - }) - } -// {header : "废弃",width : 50,menuDisabled : true,dataIndex : 'deleteButton', renderer:renderDeleteButton}, -// {header : "打印新标签",width : 100,menuDisabled : true,dataIndex : 'printButton', renderer:renderPrintButton} + new top.Ext.grid.CheckboxSelectionModel({ singleSelect: true, hideable: false }),//checkbox 列 + { header: '序号', dataIndex: 'number', width: 30 }, + // {header : "当前条码",dataIndex : 'barcode',width : 70}, + { header: "当前条码", dataIndex: 'curIdCardInstanceBarcode', width: 70 }, + { + header: "编号", dataIndex: 'idNumber', width: 30, editor: new top.Ext.form.TextField({ + }) + }, + { header: "使用次数", dataIndex: 'useAmount', width: 30 }, + { header: "包装类型", dataIndex: 'packageType', width: 120, hidden: !sstsConfig.enableIdCardDefaultPackageType }, + { header: "状态", dataIndex: 'status', width: 50 }, + { + id: 'description', header: "描述", + dataIndex: 'description', + width: 200, + editor: new top.Ext.form.TextField({ + }) + } + // {header : "废弃",width : 50,menuDisabled : true,dataIndex : 'deleteButton', renderer:renderDeleteButton}, + // {header : "打印新标签",width : 100,menuDisabled : true,dataIndex : 'printButton', renderer:renderPrintButton} ]); gridPanel = new top.Ext.grid.EditorGridPanel({ -// height : 200, - width:860, - store : idCardDefinitionStore, - cm : signBoardCm, - frame : false, -// autoScroll : true, - autoExpandColumn : 'description', -// bodyStyle : 'border:1px solid #afd7af;overflow-y:auto;overflow-x:hidden', - bodyStyle : 'border:1px solid #afd7af', + // height : 200, + width: 860, + store: idCardDefinitionStore, + cm: signBoardCm, + frame: false, + // autoScroll : true, + autoExpandColumn: 'description', + // bodyStyle : 'border:1px solid #afd7af;overflow-y:auto;overflow-x:hidden', + bodyStyle: 'border:1px solid #afd7af', viewConfig: { - forceFit:true + forceFit: true }, - clicksToEdit:2, -// autoScroll:true, - selModel : new top.Ext.grid.CheckboxSelectionModel({ - singleSelect : true, - listeners :{ - 'selectionchange':function(sm){ - var record = sm.getSelected(); - traceableMaterialGridPanel.stopEditing();// 停止编辑 - // 清除显示的列表 - idCardInstancesGridPanel.getStore().removeAll(); - traceableMaterialGridPanel.getStore().removeAll(); - if(record != null){ - loadIDCardInstanceAndTraceableMaterialInfoIfNeeded(record); - loadDataToIdCardInstancesGridStore(); - loadDataToSignMaterileGridStore(); - } -// var fieldName = grid.getColumnModel().getDataIndex(columnIndex); -// if(fieldName != 'deleteButton' && fieldName != 'printButton'){ -// var record = grid.getSelectionModel().getSelected(); -// var id = record.data['id']; -// -// } -// top.Ext.getCmp('rowNumber').setValue(rowIndex); - } - } + clicksToEdit: 2, + // autoScroll:true, + selModel: new top.Ext.grid.CheckboxSelectionModel({ + singleSelect: true, + listeners: { + 'selectionchange': function (sm) { + var record = sm.getSelected(); + traceableMaterialGridPanel.stopEditing();// 停止编辑 + // 清除显示的列表 + idCardInstancesGridPanel.getStore().removeAll(); + traceableMaterialGridPanel.getStore().removeAll(); + if (record != null) { + loadIDCardInstanceAndTraceableMaterialInfoIfNeeded(record); + loadDataToIdCardInstancesGridStore(); + loadDataToSignMaterileGridStore(); + } + // var fieldName = grid.getColumnModel().getDataIndex(columnIndex); + // if(fieldName != 'deleteButton' && fieldName != 'printButton'){ + // var record = grid.getSelectionModel().getSelected(); + // var id = record.data['id']; + // + // } + // top.Ext.getCmp('rowNumber').setValue(rowIndex); + } + } }), - - items:[{ - xtype:'hidden', - name:'rowNumber', - id:'rowNumber' - }], - bbar : [ - { - text : '更新标识牌', - hidden:forSupplement, - handler : function() { - var idCardsRecords = gridPanel.getSelectionModel().getSelections(); - if (idCardsRecords.length == 0) { - showResult('请选择要更新的标识牌!'); - return; - } - saveIDCardDefinition(idCardsRecords[0]); + items: [{ + xtype: 'hidden', + name: 'rowNumber', + id: 'rowNumber' + }], + bbar: [ + { + text: '更新标识牌', + hidden: forSupplement, + handler: function () { + + var idCardsRecords = gridPanel.getSelectionModel().getSelections(); + if (idCardsRecords.length == 0) { + showResult('请选择要更新的标识牌!'); + return; } - }] + saveIDCardDefinition(idCardsRecords[0]); + } + }] }); idCardInstancesGridStore = new top.Ext.data.Store({ - proxy : new top.Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadIDCardInstanceInfo.do', - method : 'POST' + proxy: new top.Ext.data.HttpProxy({ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadIDCardInstanceInfo.do', + method: 'POST' }), - reader : new top.Ext.data.JsonReader({ - fields : idCardInstanceFields + reader: new top.Ext.data.JsonReader({ + fields: idCardInstanceFields }) }); var idCardInstancesGridCm = new Ext.grid.ColumnModel([ -new top.Ext.grid.CheckboxSelectionModel ({singleSelect : false}),//checkbox 列 - {header : '条码',dataIndex : 'barcode',width : 80}, - {header : "使用次数",dataIndex : 'useAmount',width : 70}, - {header : "状态",dataIndex : 'status',width : 50}, - {header : "最后打印时间",dataIndex : 'printDate',width : 150}, - {header : "第一次回收时间",dataIndex : 'firstRecyclingTime',width : 120}, - {id:'tousseInstanceStatusAndTime',header : "器械包状态",dataIndex : 'tousseInstanceStatusAndTime',width : 200,menuDisabled : true} + new top.Ext.grid.CheckboxSelectionModel({ singleSelect: false }),//checkbox 列 + { header: '条码', dataIndex: 'barcode', width: 80 }, + { header: "使用次数", dataIndex: 'useAmount', width: 70 }, + { header: "状态", dataIndex: 'status', width: 50 }, + { header: "最后打印时间", dataIndex: 'printDate', width: 150 }, + { header: "第一次回收时间", dataIndex: 'firstRecyclingTime', width: 120 }, + { id: 'tousseInstanceStatusAndTime', header: "器械包状态", dataIndex: 'tousseInstanceStatusAndTime', width: 200, menuDisabled: true } ]); idCardInstancesGridPanel = new top.Ext.grid.GridPanel({ - title:'标识牌实例(含使用中和已丢失的)', -// height:260, -// autoHeight:true, -// width:300, - store : idCardInstancesGridStore, - cm : idCardInstancesGridCm, -// autoExpandColumn : 'tousseInstanceStatusAndTime', - bodyStyle : 'border:1px solid #afd7af', -// viewConfig: { -// forceFit:true -// }, - clicksToEdit:1, - selModel : new top.Ext.grid.CheckboxSelectionModel({ - singleSelect : true + title: '标识牌实例(含使用中和已丢失的)', + // height:260, + // autoHeight:true, + // width:300, + store: idCardInstancesGridStore, + cm: idCardInstancesGridCm, + // autoExpandColumn : 'tousseInstanceStatusAndTime', + bodyStyle: 'border:1px solid #afd7af', + // viewConfig: { + // forceFit:true + // }, + clicksToEdit: 1, + selModel: new top.Ext.grid.CheckboxSelectionModel({ + singleSelect: true }), - tbar : [ - { - text : '打印', - iconCls : 'icon_print', - hidden:forSupplement, - handler : function() { - var records = idCardInstancesGridPanel.getSelectionModel().getSelections(); - if (records.length == 0) { - showResult('请选择要打印的标识牌实例!'); - return; - } + tbar: [ + { + text: '打印', + iconCls: 'icon_print', + hidden: forSupplement, + handler: function () { + var records = idCardInstancesGridPanel.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult('请选择要打印的标识牌实例!'); + return; + } - if (records.length > 1) { - showResult('只能选择打印一个标识牌实例!'); - return; - } + if (records.length > 1) { + showResult('只能选择打印一个标识牌实例!'); + return; + } - if(records[0].data.printDate !== ''){ - top.Ext.MessageBox.confirm("注意:","重复的标识牌会导致问题,要继续重复打印吗?",function(button, text) { - if ("yes" == button){ - top.Ext.MessageBox.progress('打印中', '请稍候...'); - printIDCardInstanceByID(records[0].data.id,records[0].data.idCardDefinitionID); - } - }); - }else { - top.Ext.MessageBox.progress('打印中', '请稍候...'); - printIDCardInstanceByID(records[0].data.id,records[0].data.idCardDefinitionID); - } + if (records[0].data.printDate !== '') { + top.Ext.MessageBox.confirm("注意:", "重复的标识牌会导致问题,要继续重复打印吗?", function (button, text) { + if ("yes" == button) { + top.Ext.MessageBox.progress('打印中', '请稍候...'); + printIDCardInstanceByID(records[0].data.id, records[0].data.idCardDefinitionID); + } + }); + } else { + top.Ext.MessageBox.progress('打印中', '请稍候...'); + printIDCardInstanceByID(records[0].data.id, records[0].data.idCardDefinitionID); } - }, { - text : '转换', - hidden:forSupplement, - iconCls : 'btn_ext_refresh', - handler : function() { - rebindIDCardInstanceToIDCardDefinition(); - } - }, { - text : '修改使用次数', - hidden:forSupplement, - handler : function() { - modifyUseAmountOfIDCardInstance(); - } - } ] + } + }, { + text: '转换', + hidden: forSupplement, + iconCls: 'btn_ext_refresh', + handler: function () { + rebindIDCardInstanceToIDCardDefinition(); + } + }, { + text: '修改使用次数', + hidden: forSupplement, + handler: function () { + modifyUseAmountOfIDCardInstance(); + } + }, { + text: '写入RFID标签', + hidden: !(sstsConfig.enableRFIDTousseIdCard && !isIE()), + handler: function () { + writerRFIDCard(); + } + }] }); signMaterileGridStore = new top.Ext.data.Store({ - proxy : new top.Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadTraceableMaterialInfo.do', - method : 'POST' + proxy: new top.Ext.data.HttpProxy({ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadTraceableMaterialInfo.do', + method: 'POST' }), - reader : new top.Ext.data.JsonReader({ - fields : traceableMaterialFields + reader: new top.Ext.data.JsonReader({ + fields: traceableMaterialFields }) }); - + signMaterilenStore = new top.Ext.data.Store({ - proxy : new top.Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadMaterilenByid.do', - method : 'POST' + proxy: new top.Ext.data.HttpProxy({ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!loadMaterilenByid.do', + method: 'POST' }), - baseParams :{id:id}, - reader : new top.Ext.data.JsonReader({ - fields : materialFields + baseParams: { id: id }, + reader: new top.Ext.data.JsonReader({ + fields: materialFields }) }); //signMaterilenStore.load(); var signMaterilenGridCm = new top.Ext.grid.ColumnModel([ -new top.Ext.grid.CheckboxSelectionModel ({singleSelect : true}),//checkbox 列 - {id : 'materileNameID', - header : "器械名称", - dataIndex : 'nameSpecification', - width : 150, - editor : new top.Ext.form.ComboBox({ - xtype : 'combo', - name : 'materileName', - queryParam : 'spell', - valueField : 'id', - displayField : 'materileName', - store : signMaterilenStore, - forceSelection : true, - lazyInit : true, - triggerAction : 'all', - editable : false, - hideTrigger : false, - typeAhead : false, - allowBlank : false, - anchor : '97%', - listeners : { - select : function(combo, record, index) { + new top.Ext.grid.CheckboxSelectionModel({ singleSelect: true }),//checkbox 列 + { + id: 'materileNameID', + header: "器械名称", + dataIndex: 'nameSpecification', + width: 150, + editor: new top.Ext.form.ComboBox({ + xtype: 'combo', + name: 'materileName', + queryParam: 'spell', + valueField: 'id', + displayField: 'materileName', + store: signMaterilenStore, + forceSelection: true, + lazyInit: true, + triggerAction: 'all', + editable: false, + hideTrigger: false, + typeAhead: false, + allowBlank: false, + anchor: '97%', + listeners: { + select: function (combo, record, index) { var materileName = record.data.materileName; var specification = record.data.specification; var count = record.data.count; var name = record.data.name; combo.setValue(materileName); var record2 = traceableMaterialGridPanel.getSelectionModel().getSelected(); - record2.set("materileName",materileName); - record2.set("count",count); - record2.set("name",name); - record2.set("specification",specification); - record2.data.materialDefinition = {id:record.data.id,name:name,specification:specification}; + record2.set("materileName", materileName); + record2.set("count", count); + record2.set("name", name); + record2.set("specification", specification); + record2.data.materialDefinition = { id: record.data.id, name: name, specification: specification }; } }, - value:"" + value: "" }) - + }, - {id:'serialNumber', - header : "序列号", - dataIndex : 'serialNumber', - width : 100, - editor : new top.Ext.form.TextField({ - id:'materialInput', - allowBlank : false + { + id: 'serialNumber', + header: "序列号", + dataIndex: 'serialNumber', + width: 100, + editor: new top.Ext.form.TextField({ + id: 'materialInput', + allowBlank: false }) } ]); traceableMaterialGridPanel = new top.Ext.grid.EditorGridPanel({ - id:'signMaterileID', - title:'单件器械列表', -// height:260, - width:280, - frame : false, - store : signMaterileGridStore, - cm : signMaterilenGridCm, - autoExpandColumn : 'serialNumber', - autoScroll : true, + id: 'signMaterileID', + title: '单件器械列表', + // height:260, + width: 280, + frame: false, + store: signMaterileGridStore, + cm: signMaterilenGridCm, + autoExpandColumn: 'serialNumber', + autoScroll: true, viewConfig: { - forceFit:true + forceFit: true }, - bodyStyle : 'border:1px solid #afd7af', - clicksToEdit : 1, - selModel : new top.Ext.grid.CheckboxSelectionModel({ - singleSelect : true + bodyStyle: 'border:1px solid #afd7af', + clicksToEdit: 1, + selModel: new top.Ext.grid.CheckboxSelectionModel({ + singleSelect: true }), - - tbar : [{ - text : '新增材料', - hidden:forSupplement, - iconCls : 'btn_ext_add', - handler : function() { - - var record = gridPanel.getSelectionModel().getSelections(); - if(record.length == 0){ - showResult('请选择要添加的标识牌!'); - }else{ - var n = top.Ext.getCmp('signMaterileID').getStore().getCount();// 获得总行数 - var material = new TraceableMaterial({ - nameSpecification : '', - serialNumber : '' - }); - record[0].data.traceableMaterials.push(material.data); - top.Ext.getCmp('signMaterileID').stopEditing();// 停止编辑 - signMaterileGridStore.add(material);// 插入到最后一行 - traceableMaterialGridPanel.getSelectionModel().selectRow(n); - top.Ext.getCmp('signMaterileID').startEditing(n, 0);// 开始编辑0单元格 - } - - } - }, { - text : '删除材料', - hidden:forSupplement, - iconCls : 'btn_remove', - handler : function() { - var idCards = gridPanel.getSelectionModel().getSelections(); - if(idCards.length == 0){ - showResult('请选择标识牌!'); - return; - } - var traceableMaterials = top.Ext.getCmp('signMaterileID').getSelectionModel().getSelections();// 返回值为 Record 数组 - if (traceableMaterials.length == 0) { - showResult('最少选择一条信息,进行删除!'); - } else { - top.Ext.MessageBox.confirm('提示框', '您确定要进行该操作?', function(btn) { - if (btn == 'yes') { - if (traceableMaterials) { - for ( var i = 0; i < traceableMaterials.length; i++) { - signMaterileGridStore.remove(traceableMaterials[i]); - } - setTraceableMaterialsToIDCardDefinition(idCards[0].data); - } - } - }); - } - - } - }], - bbar : [ - { - text : '保存材料', - iconCls : 'icon_print', - hidden:forSupplement, - handler : function() { - var idCardsRecords = gridPanel.getSelectionModel().getSelections(); - if (idCardsRecords.length == 0) { - showResult('请选择要保存的标识牌!'); - return; + tbar: [{ + text: '新增材料', + hidden: forSupplement, + iconCls: 'btn_ext_add', + handler: function () { + + var record = gridPanel.getSelectionModel().getSelections(); + if (record.length == 0) { + showResult('请选择要添加的标识牌!'); + } else { + var n = top.Ext.getCmp('signMaterileID').getStore().getCount();// 获得总行数 + var material = new TraceableMaterial({ + nameSpecification: '', + serialNumber: '' + }); + record[0].data.traceableMaterials.push(material.data); + top.Ext.getCmp('signMaterileID').stopEditing();// 停止编辑 + signMaterileGridStore.add(material);// 插入到最后一行 + traceableMaterialGridPanel.getSelectionModel().selectRow(n); + top.Ext.getCmp('signMaterileID').startEditing(n, 0);// 开始编辑0单元格 + } + + } + }, { + text: '删除材料', + hidden: forSupplement, + iconCls: 'btn_remove', + handler: function () { + var idCards = gridPanel.getSelectionModel().getSelections(); + if (idCards.length == 0) { + showResult('请选择标识牌!'); + return; + } + var traceableMaterials = top.Ext.getCmp('signMaterileID').getSelectionModel().getSelections();// 返回值为 Record 数组 + if (traceableMaterials.length == 0) { + showResult('最少选择一条信息,进行删除!'); + } else { + top.Ext.MessageBox.confirm('提示框', '您确定要进行该操作?', function (btn) { + if (btn == 'yes') { + if (traceableMaterials) { + for (var i = 0; i < traceableMaterials.length; i++) { + signMaterileGridStore.remove(traceableMaterials[i]); + } + setTraceableMaterialsToIDCardDefinition(idCards[0].data); } - saveTraceableMaterials(idCardsRecords[0]) } - }, { - text : '取消', - hidden:true, - handler : function() { - var idCardsRecords = gridPanel.getSelectionModel().getSelections(); - if (idCardsRecords.length == 0) { - showResult('请选择标识牌!'); - return; - } - cancelSaveTraceableMaterials(idCardsRecords[0]); - } - } ] + }); + } + + } + }], + bbar: [ + { + text: '保存材料', + iconCls: 'icon_print', + hidden: forSupplement, + handler: function () { + + var idCardsRecords = gridPanel.getSelectionModel().getSelections(); + if (idCardsRecords.length == 0) { + showResult('请选择要保存的标识牌!'); + return; + } + saveTraceableMaterials(idCardsRecords[0]) + } + }, { + text: '取消', + hidden: true, + handler: function () { + var idCardsRecords = gridPanel.getSelectionModel().getSelections(); + if (idCardsRecords.length == 0) { + showResult('请选择标识牌!'); + return; + } + cancelSaveTraceableMaterials(idCardsRecords[0]); + } + }] }); // 标识牌表单 signBoardForm = new top.Ext.FormPanel({ - id : 'tousseSignBoardForm', -// frame : true, + id: 'tousseSignBoardForm', + // frame : true, width: 900, - height : 600, - layout:'column', - bodyStyle : 'padding:0px 0px 0px 0px;', - autoScroll : true, + height: 600, + layout: 'column', + bodyStyle: 'padding:0px 0px 0px 0px;', + autoScroll: true, items: [{ - xtype:'hidden', - hidden:true, - name:'signBoardMaterileData', - id:'signBoardMaterileData' - },{ + xtype: 'hidden', + hidden: true, + name: 'signBoardMaterileData', + id: 'signBoardMaterileData' + }, { //region: 'north', - anchor:'100% 50%', - height:280, - columnWidth : 1, - layout : 'fit', - items:[gridPanel], - tbar:[{ - xtype:'button', - text:'添加', - hidden:forSupplement, - id : 'addBtn', - iconCls : 'btn_ext_application_add', - handler : function(){ - addIDCardDefinition(); - } - },{ - xtype:'button', - text:'废弃', - hidden:forSupplement, - iconCls : 'btn_ext_application_del', - id : 'discardBtn', - handler : function(){ - discardIDCards(); - } - },{ - xtype:'button', - text:'重置', - hidden:forSupplement, - iconCls : 'btn_ext_application_del', - id : 'resetBtn', - handler : function(){ - resetIDCard(); - } - },{ - xtype:'button', - text:'信息维护', - id : 'maintain', - hidden:!sstsConfig.enableIdCardInfoMaintain, - handler : function(){ + anchor: '100% 50%', + height: 280, + columnWidth: 1, + layout: 'fit', + items: [gridPanel], + tbar: [{ + xtype: 'button', + text: '添加', + hidden: forSupplement, + id: 'addBtn', + iconCls: 'btn_ext_application_add', + handler: function () { + addIDCardDefinition(); + } + }, { + xtype: 'button', + text: '废弃', + hidden: forSupplement, + iconCls: 'btn_ext_application_del', + id: 'discardBtn', + handler: function () { + discardIDCards(); + } + }, { + xtype: 'button', + text: '重置', + hidden: forSupplement, + iconCls: 'btn_ext_application_del', + id: 'resetBtn', + handler: function () { + resetIDCard(); + } + }, { + xtype: 'button', + text: '信息维护', + id: 'maintain', + hidden: !sstsConfig.enableIdCardInfoMaintain, + handler: function () { //ZSRY-5新增:cardInfoMaintain.js var idCardsRecords = getGridSelectionsRecords(gridPanel); - if(idCardsRecords.length == 0){ + if (idCardsRecords.length == 0) { showResult("请选择要维护的标识牌实例!"); return; - }else if(idCardsRecords.length > 1){ + } else if (idCardsRecords.length > 1) { showResult("只能选择一条标识牌实例进行维护!"); return; } - cardInfoMaintain(idCardsRecords[0].data.id); - } - },{ - xtype:'button', - text:'丢失打印', - hidden:false, - id : 'printNewBtn', - handler : function(){ - printNewIDCardInstance(); - } - },{ - xtype:'button', - text:'修改包装类型', - hidden:!sstsConfig.enableIdCardDefaultPackageType, - id : 'modifyPackageType', - handler : function(){ - modifyPackageType(); - } - },{ - xtype:'button', - text:'补充并打印', - hidden:!forSupplement, - handler : function(){ - printNewIDCardInstanceForSupplement(); - } - },{ - text : '打印全部', - iconCls : 'icon_print', -// hidden:forSupplement, - hidden:true, - handler : function() { + cardInfoMaintain(idCardsRecords[0].data.id); + } + }, { + xtype: 'button', + text: '丢失打印', + hidden: false, + id: 'printNewBtn', + handler: function () { + printNewIDCardInstance(); + } + }, { + xtype: 'button', + text: '修改包装类型', + hidden: !sstsConfig.enableIdCardDefaultPackageType, + id: 'modifyPackageType', + handler: function () { + modifyPackageType(); + } + }, { + xtype: 'button', + text: '补充并打印', + hidden: !forSupplement, + handler: function () { + printNewIDCardInstanceForSupplement(); + } + }, { + text: '打印全部', + iconCls: 'icon_print', + // hidden:forSupplement, + hidden: true, + handler: function () { printAllIdCard(); } - }, '-',{ - xtype : 'checkbox', - id : 'checkbox_viewAll', - name : 'checkbox_viewAll', - boxLabel : '查看所有', - checked :false, - value :false, - labelStyle:'', - listeners :{ - 'check':function(cbox,checked){ - reLoadIDCardDefinitions(); - }, - 'render':function(cbox){ - cbox.setValue(false); - } - - } - }, '-',{ - text : '标识牌标签:', - hidden:forSupplement - },{ - xtype : 'combo', - id : 'idCardPaperType2', - name : 'idCardPaperType2', - editable:false, - valueField : 'name', - displayField : 'name', - listWidth: 150, - store : idCardBarcodePaperTypeStore, - value : defaultIdCardPaperType, - forceSelection : true, - triggerAction : 'all', - anchor : '100%' - }] - },{ - anchor:'100% 50%', - layout : 'fit', - columnWidth : 1, - items : [{ - //region: 'center', - layout : 'column', - columnWidth : 1, - labelAlign : 'right', - items : [{ - height:250, - columnWidth : .65, - layout:'fit', - items : [idCardInstancesGridPanel] - },{ - height:250, - columnWidth : .35, - layout:'fit', - items : [traceableMaterialGridPanel] + }, '-', { + xtype: 'checkbox', + id: 'checkbox_viewAll', + name: 'checkbox_viewAll', + boxLabel: '查看所有', + checked: false, + value: false, + labelStyle: '', + listeners: { + 'check': function (cbox, checked) { + reLoadIDCardDefinitions(); + }, + 'render': function (cbox) { + cbox.setValue(false); + } + + } + }, '-', { + text: '标识牌标签:', + hidden: forSupplement + }, { + xtype: 'combo', + id: 'idCardPaperType2', + name: 'idCardPaperType2', + editable: false, + valueField: 'name', + displayField: 'name', + listWidth: 150, + store: idCardBarcodePaperTypeStore, + value: defaultIdCardPaperType, + forceSelection: true, + triggerAction: 'all', + anchor: '100%' + }] + }, { + anchor: '100% 50%', + layout: 'fit', + columnWidth: 1, + items: [{ + //region: 'center', + layout: 'column', + columnWidth: 1, + labelAlign: 'right', + items: [{ + height: 250, + columnWidth: .65, + layout: 'fit', + items: [idCardInstancesGridPanel] + }, { + height: 250, + columnWidth: .35, + layout: 'fit', + items: [traceableMaterialGridPanel] }] - }] - } -// ,{ -// anchor:'100% 50%', -// height:250, -// //region: 'center', -// layout : 'column', -// columnWidth : 1, -// labelAlign : 'right', -// items : [{ -// columnWidth : .6, -// layout:'fit', -// items : [idCardInstancesGridPanel] -// },{ -// columnWidth : .39, -// layout:'fit', -// items : [traceableMaterialGridPanel] -// }] -// } + }] + } + // ,{ + // anchor:'100% 50%', + // height:250, + // //region: 'center', + // layout : 'column', + // columnWidth : 1, + // labelAlign : 'right', + // items : [{ + // columnWidth : .6, + // layout:'fit', + // items : [idCardInstancesGridPanel] + // },{ + // columnWidth : .39, + // layout:'fit', + // items : [traceableMaterialGridPanel] + // }] + // } ], - buttonAlign : 'center', - buttons:[{ - text:'保存', - hidden:true, - handler:function(){ - // 校验页面 - if(!validateFormParams()){ - return; - } - var store = gridPanel.getStore(); - top.Ext.MessageBox.confirm('提示框', '您确定保存标识牌吗?', function(btn) { - if (btn == 'yes') { - var idCards = buildJSONStringFromStore(store); - Ext.Ajax.request({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!saveIDCardDefinition.do', - params : {idCards:idCards, id:id,idCardsOriginalStr:idCardsOriginalStr}, - success : function(response, options) { - showResult("保存标识牌成功。"); - tousseWin.close(); - }, - failure : function(response, options) { - showResult("保存标识牌失败!"); - } - }); - } - }); - } - },{ - text:'取消', - hidden:forSupplement, - handler:cancel - }] + buttonAlign: 'center', + buttons: [{ + text: '保存', + hidden: true, + handler: function () { + // 校验页面 + if (!validateFormParams()) { + return; + } + var store = gridPanel.getStore(); + top.Ext.MessageBox.confirm('提示框', '您确定保存标识牌吗?', function (btn) { + if (btn == 'yes') { + var idCards = buildJSONStringFromStore(store); + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!saveIDCardDefinition.do', + params: { idCards: idCards, id: id, idCardsOriginalStr: idCardsOriginalStr }, + success: function (response, options) { + showResult("保存标识牌成功。"); + tousseWin.close(); + }, + failure: function (response, options) { + showResult("保存标识牌失败!"); + } + }); + } + }); + } + }, { + text: '取消', + hidden: forSupplement, + handler: cancel + }] }); - + function cancel() { tousseWin.close(); tousseWin.destroy(); } - - function validateFormParams(){ + + function validateFormParams() { // 校验材料是否都已经填写 var idCardDefinitionStore = gridPanel.getStore(); - for(var i=0;i -1){ + if (idCardPaperType2.indexOf('模板') > -1) { Ext.Ajax.request({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!printIDCardInstance.do', - params : params, - success : function(response, options){ + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!printIDCardInstance.do', + params: params, + success: function (response, options) { var obj = Ext.util.JSON.decode(response.responseText); obj.barcode = result.idCardInstance.barcode; obj.configKey = result.idCardInstance.configKey; obj.tousseDefinition = result.idCardInstance.tousseDefinition; obj.remark = result.idCardInstance.idCardDefinitionDescription; - if(sstsConfig.enableIdCardInfoMaintain && idCardDefinitionID){ + if (sstsConfig.enableIdCardInfoMaintain && idCardDefinitionID) { Ext.Ajax.request({ - url : WWWROOT + '/disinfectSystem/idCardInfoMaintainAction!getIDCardInfoMaintainListByIDCardDefinitionId.do', - params:{ + url: WWWROOT + '/disinfectSystem/idCardInfoMaintainAction!getIDCardInfoMaintainListByIDCardDefinitionId.do', + params: { idCardDefinitionId: idCardDefinitionID, status: '启用', type: 'IDCardQuestionMaintain' }, - success : function(response, options){ + success: function (response, options) { var res = Ext.util.JSON.decode(response.responseText); var html = ''; - for(var i=0;i"; + + function renderPrintButton(v, p, record) { + return ""; } - function rebindIDCardInstanceToIDCardDefinition(serialNumber){ + function rebindIDCardInstanceToIDCardDefinition(serialNumber) { var idCardsRecords = gridPanel.getSelectionModel().getSelections(); - if(idCardsRecords.length == 0){ + if (idCardsRecords.length == 0) { showResult("请选择要转换的标识牌!"); return; } - if(idCardsRecords.length > 1){ + if (idCardsRecords.length > 1) { showResult("一次只能转换一个标识牌!"); return; } - for(var i=0;i 1){ + if (idCardsRecords.length > 1) { showResult("一次只能修改一个标识牌!"); return; } - for(var i=0;i 1) { + showResult("一次只能写入一个标识牌!"); + return; + } + for (var i = 0; i < idCardsRecords.length; ++i) { + var id = idCardsRecords[i].data.id; + if (isUndefinedOrNullOrEmpty(id)) { + showResult("标识牌未保存不能写入!"); + return; + } + } + + var records = idCardInstancesGridPanel.getSelectionModel().getSelections(); + + if (records.length == 0) { + showResult('请选择要写入的标识牌实例!'); + return; + } + + var barcode = records[0].data.barcode; + + var fields = [ + { name: 'diposableGoods' }, + { name: 'id' }, + { name: 'barcode' }, + { name: 'type' }, + { name: 'batchNumber' }, + { name: 'sterileBatchNumber' }, + { name: 'supplierName' }, + { name: 'manufacturer' }, + { name: 'storage' }, + { name: 'cost' }, + { name: 'supplierName' }, + { name: 'expDate' } + ] + + var RFIDStore = new Ext.data.Store({ + reader: new Ext.data.JsonReader({ + fields: fields + }) + }); + + var items = top.Ext.data.Record.create(fields); + + var recordGrid = new top.Ext.grid.GridPanel({ + id: 'modifyRecordGrid', + store: RFIDStore, + columns: [new top.Ext.grid.CheckboxSelectionModel({ singleSelect: true, hideable: false }), { + header: '序号', + dataIndex: 'number', + width: 100, + menuDisabled: true + }, { + header: "标签UID", + dataIndex: 'uid', + width: 300, + menuDisabled: true + }, { + header: "用户区数据", + dataIndex: 'userId', + width: 100, + menuDisabled: true + }, { + header: "标识牌条码", + dataIndex: 'barcode', + width: 100, + menuDisabled: true + }, { + header: "读取次数", + dataIndex: 'count', + width: 100, + menuDisabled: true + }], + tbar: [{ + text: '读取到的RFID标签列表:' + }, '->', { + xtype: 'button', + text: '清除列表', + id: 'addBtn', + handler: function () { + RFIDStore.removeAll(); + } + }], + viewConfig: { + forceFit: true + }, + bodyStyle: 'border:1px solid #afd7af', + anchor: '100%', + frame: false + }); + + var win = new top.Ext.Window({ + id: 'writeRFID', + layout: 'fit', + title: '写入RFID标签【标识牌条码:' + barcode + '】', + width: 800, + border: false, + modal: true, + height: 400, + plain: true, + items: [recordGrid], + buttonAlign: 'center', + buttons: [{ + text: '停止读取标签', + handler: function () { + stopRFID(); + } + }, { + text: '写入RFID标签', + handler: function () { + var RFIDStoreRecords = recordGrid.getSelectionModel().getSelections(); + if (RFIDStoreRecords.length == 0) { + showResult("请选择一个标签!"); + return; + } + if (RFIDStoreRecords.length > 1) { + showResult("一次只能写入一个标签!"); + return; + } + top.Ext.Msg.confirm('请确认', '是否写入标签?', function (btn) { + if (btn == 'yes') { + writeRFID('M' + barcode + 'FF'); } + }) + } + }, { + text: '取消', + handler: function () { + closeRFID(); + win.close(); + grid.dwrReload(); + } + }] + }); + RFIDStore.removeAll(); + win.show(); + + if ('serial' in navigator) { + //设置循环查询获取用户区的数据 + var params = { + getAllData: true + } + openPort(params, function (value, isData, errorStatus) { + if (isData) { + var arr = value.split(','); + var uid = arr[0] || ''; + var userId = arr[1] || ''; + var barcode = ''; + if (userId !== '') { + barcode = userId.substring(userId.indexOf("M") + 1, userId.indexOf("FF")); } - }, - animEl: 'addAddressBtn', - value:'1' + if (RFIDStore.getCount() > 0) { + var isHas = false; + for (var i = 0; i < RFIDStore.getCount(); i++) { + if (RFIDStore.getAt(i).data.uid == uid) { + if(userId !== ''){ + RFIDStore.getAt(i).set('userId', userId); + RFIDStore.getAt(i).set('barcode', barcode); + } + var count = parseInt(RFIDStore.getAt(i).data.count); + RFIDStore.getAt(i).set('count', count + 1); + isHas = true; + break; + } + } + if (!isHas) { + var record = new items({ + number: RFIDStore.getCount() + 1, + uid: uid, + userId: userId, + barcode: barcode, + count: 1 + }); + + RFIDStore.add(record); + } + } else { + var record = new items({ + number: 1, + uid: uid, + userId: userId, + barcode: barcode, + count: 1 + }); + + RFIDStore.add(record); + } + } else { + if (errorStatus == 'msg1') { + showResult(value); + } else if (errorStatus == 'msg2') { + showResult(value); + } else if (errorStatus == 'msg3') { + showResult(value); + } else if (errorStatus == 'msg4') { + showResult(value); + } else if (errorStatus == 'msg5') { + showResult(value); + } else if (errorStatus == 'msg6') { + showResult(value); + } else if (errorStatus == 'msg7') { + showResult(value); + } + } }); - + } else { + showResult('你的浏览器不支持串口连接!'); + } } - function validatingForPrintNewIDCardInstance(){ + + function validatingForPrintNewIDCardInstance() { var idCardsRecords = gridPanel.getSelectionModel().getSelections(); - if(idCardsRecords.length == 0){ + if (idCardsRecords.length == 0) { showResult("请选择要打印的标识牌!"); return false; } - if(idCardsRecords.length > 1){ + if (idCardsRecords.length > 1) { showResult("一次只能打印一个标识牌!"); return false; } - for(var i=0;i 1){ + if (idCardsRecords.length > 1) { showResult("一次只能重置一个标识牌!"); return false; } - for(var i=0;i0 && id==0) { - if (top.Ext.getCmp('packageType1') && top.Ext.getCmp('packageType1').getValue() == ''){ + fields: ['typeName1'], + url: WWWROOT + '/disinfectSystem/baseData/expirationDateInfoAction!getPackageType.do', + listeners: { + load: function (store, records) { + if (records.length > 0 && id == 0) { + if (top.Ext.getCmp('packageType1') && top.Ext.getCmp('packageType1').getValue() == '') { top.Ext.getCmp('packageType1').setValue(records[0].data.typeName); } } } } }); //修改包装类型 - function modifyPackageType(){ + function modifyPackageType() { // 获取选择的data var idCardsRecords = getGridSelectionsRecords(gridPanel); - if(idCardsRecords.length == 0){ + if (idCardsRecords.length == 0) { showResult("请选择要修改的标识牌包装类型!"); return; } - for(var i=0;i 0){ + if (store.getCount() > 0) { var r = store.getAt(store.getCount() - 1); - if(r){ + if (r) { var idNumber = r.get('idNumber'); - if(!isUndefinedOrNullOrEmpty(idNumber) && isAmount(idNumber)){ - var curIdNumber = parseInt(idNumber,10); + if (!isUndefinedOrNullOrEmpty(idNumber) && isAmount(idNumber)) { + var curIdNumber = parseInt(idNumber, 10); nextIdNumber = curIdNumber + 1; } } } return nextIdNumber; } - function addIDCardDefinition(){ - var maxIDCardNum = top.Ext.getCmp('maxIDCardNum').getValue(); + function addIDCardDefinition() { + var maxIDCardNum = top.Ext.getCmp('maxIDCardNum').getValue(); var gridPanelData = gridPanel.getStore(); - if(maxIDCardNum != 0 && gridPanelData.data.items.length >= maxIDCardNum){ - showResult("标识牌数量已达上限,可添加标识牌的数量为0", null ); + if (maxIDCardNum != 0 && gridPanelData.data.items.length >= maxIDCardNum) { + showResult("标识牌数量已达上限,可添加标识牌的数量为0", null); return; } Ext.Ajax.request({ - url : WWWROOT + '/disinfectSystem/idCardDefinitionAction!addIDCardDefinition.do', - params : {tousseDefinitionId : tousseDefinitionID,idNumber:getNextIdNumber()}, - success : function(response, options) { + url: WWWROOT + '/disinfectSystem/idCardDefinitionAction!addIDCardDefinition.do', + params: { tousseDefinitionId: tousseDefinitionID, idNumber: getNextIdNumber() }, + success: function (response, options) { var result = Ext.decode(response.responseText); -// var barcode = result.barcode; + // var barcode = result.barcode; var store = gridPanel.getStore(); - - var number = store.getCount()+1; - + + var number = store.getCount() + 1; + // 标识牌实例 -// var idCardInstance = new IDCardInstance({ -// barcode:barcode, -// useAmount:0, -// status:idCardInstanceState_using, -// printDate:new Date().format('Y-m-d H:i:s') -// }); -// // 标识牌 -// var idCard = new IDCard({ -//// id:null, -// number:number, -// deleted:0, -// status:idCardInstanceState_using, -// barcode:barcode, -// idCardInstances:[idCardInstance.data], -// useAmount:0, -// traceableMaterials:[], -// idCardInstancesLoad: true, -// description:'' -// -// }); + // var idCardInstance = new IDCardInstance({ + // barcode:barcode, + // useAmount:0, + // status:idCardInstanceState_using, + // printDate:new Date().format('Y-m-d H:i:s') + // }); + // // 标识牌 + // var idCard = new IDCard({ + //// id:null, + // number:number, + // deleted:0, + // status:idCardInstanceState_using, + // barcode:barcode, + // idCardInstances:[idCardInstance.data], + // useAmount:0, + // traceableMaterials:[], + // idCardInstancesLoad: true, + // description:'' + // + // }); //2 var idCardInstance = new IDCardInstance(result.idCardInstance); var idCard = new IDCard(result.idCardDefinition); -// idCard.set('idNumber',getNextIdNumber()); + // idCard.set('idNumber',getNextIdNumber()); idCard.data.idCardInstances = [idCardInstance.data]; idCard.data.status = idCardInstanceState_using; idCard.data.barcode = result.idCardInstance.barcode; idCard.data.idCardInstancesLoad = true; idCard.data.number = number; //2 store.add(idCard); - gridPanel.getSelectionModel().selectRecords([idCard],false); + gridPanel.getSelectionModel().selectRecords([idCard], false); } }); } // dwr 方式加载实例和材料 - function loadIDCardInstanceAndTraceableMaterialInfoIfNeeded(record){ - if(!isUndefinedOrNullOrEmpty(record.data.idCardInstancesLoad)){ + function loadIDCardInstanceAndTraceableMaterialInfoIfNeeded(record) { + if (!isUndefinedOrNullOrEmpty(record.data.idCardInstancesLoad)) { return;// 已经加载过了。 } - + DWREngine.setAsync(false); - IDCardDefinitionTableManager.loadIDCardInstanceAndTraceableMaterialInfo(record.data.id,function(idCardInstanceAndTraceableMaterialStr){ + IDCardDefinitionTableManager.loadIDCardInstanceAndTraceableMaterialInfo(record.data.id, function (idCardInstanceAndTraceableMaterialStr) { var idCardInstanceAndTraceableMaterial = JSON.parse(idCardInstanceAndTraceableMaterialStr); record.data.idCardInstances = idCardInstanceAndTraceableMaterial.idCardInstances; record.data.traceableMaterials = idCardInstanceAndTraceableMaterial.traceableMaterials; @@ -1425,88 +1652,89 @@ }); DWREngine.setAsync(true); } - function loadDataToIdCardInstancesGridStore(){ + function loadDataToIdCardInstancesGridStore() { idCardInstancesGridStore.removeAll(); var record = gridPanel.getSelectionModel().getSelected(); - if(isUndefinedOrNull(record)){ + if (isUndefinedOrNull(record)) { return; } - + var idCardInstances = record.data.idCardInstances; -// idCardInstancesGridStore.baseParams['idCardDefinitionId'] = record.data.id; -// idCardInstancesGridStore.load({ -// callback:function(records,options,success){ -// if(success){ -// -// } -// }}); - + // idCardInstancesGridStore.baseParams['idCardDefinitionId'] = record.data.id; + // idCardInstancesGridStore.load({ + // callback:function(records,options,success){ + // if(success){ + // + // } + // }}); + var useAmount = 0; - if(isUndefinedOrNull(idCardInstances)){ + if (isUndefinedOrNull(idCardInstances)) { return; } - if(idCardInstances !=null && idCardInstances.length > 0 ){ - for(var i=0;i 0) { + for (var i = 0; i < idCardInstances.length; i++) { + var idCardInstance = idCardInstances[i]; + var id = idCardInstance.id; + var barcode = idCardInstance.barcode; + var status = idCardInstance.status; + var printDate = idCardInstance.printDate; + + if ('使用中' == status) { + record.set("barcode", barcode); + } + var d = new IDCardInstance(idCardInstance); + useAmount += idCardInstance.useAmount; + idCardInstancesGridPanel.getStore().add(d); } - record.set("useAmount",useAmount); + record.set("useAmount", useAmount); } } - function loadDataToSignMaterileGridStore(){ + function loadDataToSignMaterileGridStore() { var traceableMaterialStore = traceableMaterialGridPanel.getStore(); traceableMaterialStore.removeAll(); var record = gridPanel.getSelectionModel().getSelected(); - if(isUndefinedOrNull(record)){ + if (isUndefinedOrNull(record)) { return; } -// traceableMaterialStore.baseParams['idCardDefinitionId'] = record.data.id; -// traceableMaterialStore.load({ -// callback:function(records,options,success){ -// if(success){ -// -// } -// }}); + // traceableMaterialStore.baseParams['idCardDefinitionId'] = record.data.id; + // traceableMaterialStore.load({ + // callback:function(records,options,success){ + // if(success){ + // + // } + // }}); var traceableMaterials = record.data.traceableMaterials; - if(traceableMaterials != null && traceableMaterials.length > 0 ){ - for(var i=0;i 0) { + for (var i = 0; i < traceableMaterials.length; i++) { + var traceableMaterial = traceableMaterials[i]; + // dumpObj(traceableMaterial) + var traceableMaterialsRecord = new TraceableMaterial(traceableMaterial); + traceableMaterialStore.add(traceableMaterialsRecord); } } } - - function loadIDCardDefinitions(){ + + function loadIDCardDefinitions() { var checkbox_viewAll = top.Ext.getCmp('checkbox_viewAll'); var viewAll = ''; - if(checkbox_viewAll){ + if (checkbox_viewAll) { viewAll = checkbox_viewAll.getValue(); } idCardDefinitionStore.baseParams['id'] = tousseDefinitionID; idCardDefinitionStore.baseParams['viewAll'] = viewAll; idCardDefinitionStore.load({ - callback:function(records,options,success){ - if(success){ + callback: function (records, options, success) { + if (success) { idCardsOriginalStr = buildJSONStringFromStore(idCardDefinitionStore); // 选中第一个标识牌 gridPanel.getSelectionModel().selectFirstRow(); } - }}); + } + }); } - function reLoadIDCardDefinitions(){ + function reLoadIDCardDefinitions() { idCardInstancesGridPanel.getStore().removeAll(); traceableMaterialGridPanel.getStore().removeAll(); gridPanel.getStore().removeAll(); Index: ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js =================================================================== diff -u -r34428 -r34431 --- ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js (.../recycleForTouchScreen.js) (revision 34428) +++ ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js (.../recycleForTouchScreen.js) (revision 34431) @@ -7267,35 +7267,27 @@ function connectRFIDFun() { if ('serial' in navigator) { - var encoder = new TextEncoder(); - //设置循环查询获取用户区的数据 var params = { - data: encoder.encode(">x m 1 03 00 04\r\n") + usbVendorId: 4292, + usbProductId: 60000 } - openPort(params, function (value, isData) { + openPort(params, function (value, isData, errorStatus) { if (isData) { - var dataString = ""; - var barcode = ''; - if (value.length > 10) { - for (var i = 0; i < value.length; i++) { - if (value[i] !== '' && value[i] !== 13 && value[i] !== 10) { - dataString += String.fromCharCode(value[i]); - } - } - } - if (dataString !== '' && dataString.indexOf('M') >= 0) { - barcode = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('FF')); - if (barcode !== '') { - loadBarcodeDevice(barcode); - } - } + loadBarcodeDevice(value); } else { - if(value == "连接失败:SecurityError: Failed to execute 'requestPort' on 'Serial': Must be handling a user gesture to show a permission request."){ - layer.msg('连接失败:串口还没有授权,请先点击【连接RFID设备】按钮!'); + if (errorStatus == 'msg1') { + layer.msg(value); $("#openPortBtn").show(); - $('.departmentTemplate').css('right', '535px'); - }else { + } else if (errorStatus == 'msg2') { layer.msg(value); + $("#openPortBtn").hide(); + } else if (errorStatus == 'msg3') { + layer.msg(value); + $("#openPortBtn").show(); + } else if (errorStatus == 'msg4') { + layer.msg(value); + } else if (errorStatus == 'msg5') { + layer.msg(value); } } });