Index: ssts-web/src/main/webapp/disinfectsystem/config/gysdermyy/print/printConfig.js =================================================================== diff -u -r15290 -r39003 --- ssts-web/src/main/webapp/disinfectsystem/config/gysdermyy/print/printConfig.js (.../printConfig.js) (revision 15290) +++ ssts-web/src/main/webapp/disinfectsystem/config/gysdermyy/print/printConfig.js (.../printConfig.js) (revision 39003) @@ -1537,6 +1537,33 @@ ] } +var thirdPartyTousseReceiveRecordDetailConfig = { + headerFooter : [ + // 页眉名称 + {label : "器械包接收信息单", dataIndex : '', fontSize : 15, position : ["0.3cm","37%","99%",5]}, + {label : "备注:", dataIndex : 'remark', fontSize : 9, position : ["1cm","2%","99%",5]} + ], + currentPageNumber : {label : "第#页", fontSize : 9, position : ["1cm","80%","90%",5]}, + totalPageAmount : {label : "共&页", fontSize : 9, position : ["1cm","90%","90%",5]}, + goodsTable :{ + rowHeight : 20, + fontSize:10, + position : ["1.5cm","0.2cm","99%","29cm"], + headRepeat : true, + columns : [ + {header : "序号", dataIndex : 'serialNumber', width : 60, align : 'center'}, + {header : "名称", dataIndex : 'tousseName', width : 120, align : 'left'}, + {header : "申请科室", dataIndex : 'orgUnitName', width : 60, align : 'left'}, + {header : "条形码", dataIndex : 'barcode', width : 60, align : 'center'} + ] + }, + footer: [ + {label : "送货员:", dataIndex : 'sender', fontSize : 9, position : ["1cm","0%","90%",5]}, + {label : "签收员:", dataIndex : 'receiver', fontSize : 9, position : ["1cm","12%","90%",5]}, + {label : "打印时间:", dataIndex : 'printDate', fontSize : 9, position : ["1cm","80%","90%",5]} + ] +}; + var printConfig = { //发货计划单 invoicePlan : invoicePlanPrintConfig, @@ -1599,6 +1626,8 @@ appropriationInList : appropriationInListConfig, //调拨出库单 appropriationOutList : appropriationOutListConfig, + //器械包接收信息单 + thirdPartyTousseReceiveRecordDetail : thirdPartyTousseReceiveRecordDetailConfig, //借还记录 borrowRecord:borrowRecordConfig }; Index: ssts-web/src/main/webapp/disinfectsystem/print/print.js =================================================================== diff -u -r38413 -r39003 --- ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 38413) +++ ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 39003) @@ -5960,4 +5960,145 @@ items: [formObj] }); labelWindow.show(); +} + +//GYSDERMYY-27:打印器械包接收信息单 +function printThirdPartyTousseReceiveRecordDetail(obj, printType) { + var formTypeOfPrinted = obj.formTypeOfPrinted; + doGetLodop(); + LODOP.PRINT_INIT(""); + setPrinterByConfig(); + var myObj = printConfig[formTypeOfPrinted]; + if (isUndefinedOrNullOrEmpty(myObj)) { + var msg = '未找到(' + formTypeOfPrinted + ')的打印配置'; + alert(msg); + return; + } + + // 打印表头的内容 + if (!isObjEmpty(myObj.headerFooter)) { + // 设置为页眉页脚模式 + LODOP.SET_PRINT_STYLE("ItemType", 1); + + for (var i = 0; i < myObj.headerFooter.length; i++) { + var item = myObj.headerFooter[i]; + var text = item.label; + if (item.dataIndex != '' && typeof item.dataIndex != 'undefined') { + var temp = obj[item.dataIndex]; + if (temp != null && temp != '' && typeof temp != 'undefined') { + text += temp; + } + } + + item.text = text; + + addPrintItem(item, obj); + } + } + // 打印页码和总页数 + if (!isObjEmpty(myObj.currentPageNumber)) { + LODOP.SET_PRINT_STYLE("ItemType", 2); + var item = myObj.currentPageNumber; + item.text = item.label; + addPrintItem(item, obj); + } + if (!isObjEmpty(myObj.totalPageAmount)) { + LODOP.SET_PRINT_STYLE("ItemType", 3); + var item = myObj.totalPageAmount; + item.text = item.label; + addPrintItem(item, obj); + } + if (!isObjEmpty(myObj.goodsTable)) { + LODOP.SET_PRINT_STYLE("ItemType", 4); + + var tableStyle = "border-collapse:collapse;width:100%;"; + var tableHtml = ""; + tableHtml += ""; + + // 如果需要表头在每页重复打印,则增加thead标签 + if (myObj.goodsTable.headRepeat) { + tableHtml += ""; + } + + tableHtml = appendTableRowString(tableHtml, myObj.goodsTable.rowHeight, myObj.goodsTable.fontSize); + + for (var i = 0; i < myObj.goodsTable.columns.length; i++) { + var item = myObj.goodsTable.columns[i]; + var style = getTableTdStyle(myObj.goodsTable, i); + var itemHeader = item.header; + + tableHtml += ""; + } + tableHtml += ""; + + if (myObj.goodsTable.headRepeat) { + tableHtml += ""; + } + + // 打印物品内容行 + var columnCount = myObj.goodsTable.columns.length; + var goodsArray = obj.thirdPartyTousseInstances; + var m = 1; + for (var k = 0; k < goodsArray.length; k++) { + var row = goodsArray[k]; + tableHtml = appendTableRowString(tableHtml, myObj.goodsTable.rowHeight, myObj.goodsTable.fontSize); + for (var i = 0; i < columnCount; i++) { + var item = myObj.goodsTable.columns[i]; + var value = row[item.dataIndex] || ''; + var tdContent = value; + if (myObj.nowrap) { + //不换行.如果直接将样式应用到td标签,效果出不来,在td里加一个div是可以的 + tdContent = "
" + } else { + tdContent += "'>"; + } + tdContent += value; + tdContent += "
"; + } + var style = getTableTdStyle(myObj.goodsTable, i); + var tdWidth = myObj.fixed ? 'width=' + item.width : ''; + if(item.dataIndex == 'serialNumber') { + tdContent = m; + m++; + } + tableHtml += ""; + } + tableHtml += ""; + } + + if (myObj.footer) { + // 打印页脚信息 + tableHtml += ""; + } + + tableHtml += "
" + itemHeader + "
" + tdContent + "
"; + var text = ""; + + for (var i = 0; i < myObj.footer.length; i++) { + var item = myObj.footer[i]; + var text = item.label; + if (item.dataIndex != '') { + var temp = obj[item.dataIndex]; + if (temp != null && temp != '' && typeof temp != 'undefined') { + text += temp; + } + } + tableHtml += "" + text + ""; + } + tableHtml += "
"; + + LODOP.ADD_PRINT_TABLE(myObj.goodsTable.position[0], myObj.goodsTable.position[1], myObj.goodsTable.position[2], myObj.goodsTable.position[3], tableHtml); + } + + if (printType == 0) {//直接打印 + LODOP.PRINT(); + } else {//打印预览 + LODOP.SET_SHOW_MODE("HIDE_PAPER_BOARD", 1); + LODOP.PREVIEW(); + } } \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.js =================================================================== diff -u -r38990 -r39003 --- ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.js (.../thirdPartyTousseView.js) (revision 38990) +++ ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.js (.../thirdPartyTousseView.js) (revision 39003) @@ -1,10 +1,86 @@ var listStore; var thirdPartyTousseGrid; +function modify(v, data) { + showAddOrEditWindow(data.id); +} + +//加载明细 +function loadThirdPartyTousseReceiveRecordDetail(id, isPrint) { + Ext4.Ajax.request({ + url: WWWROOT + '/disinfectSystem/baseData/thirdPartyTousseReceiveRecordController/loadThirdPartyTousseReceiveRecordDetail.mhtml', + params: { + ids: id + }, + success: function (response, options) { + var result = Ext4.decode(response.responseText); + if (result.success) { + if (isPrint) { + for (var i = 0; i < result.data.length; i++) { + result.data[i].formTypeOfPrinted = 'thirdPartyTousseReceiveRecordDetail'; + result.data[i].printDate = newDate; + if (result.data[i].thirdPartyTousseInstances.length > 0) { + printThirdPartyTousseReceiveRecordDetail(result.data[i], 0); + } + } + } else { + var data = result.data[0]; + top.Ext4.getCmp('sender').setValue(data.sender); + top.Ext4.getCmp('receiverId').setValue(data.receiverId); + top.Ext4.getCmp('receiver').setValue(data.receiver); + top.Ext4.getCmp('signDate').setValue(data.receiveTime); + top.Ext4.getCmp('wareHouseId').setValue(data.wareHouseId); + top.Ext4.getCmp('wareHouseName').setValue(data.wareHouseName); + top.Ext4.getCmp('remark').setValue(data.remark); + var leftGrid = top.Ext4.getCmp('leftGrid').getStore(); + for (var i = 0; i < data.thirdPartyTousseInstances.length; i++) { + var thirdPartyTousseInstances = data.thirdPartyTousseInstances[i]; + var barcode = thirdPartyTousseInstances.barcode; + var tousseName = thirdPartyTousseInstances.tousseName; + var sterileTime = thirdPartyTousseInstances.sterileTime; + var validUntil = thirdPartyTousseInstances.validUntil; + var operator = thirdPartyTousseInstances.operator; + var reviewer = thirdPartyTousseInstances.reviewer; + var orgUnitName = thirdPartyTousseInstances.reviewer; + var record = [{ + barcode: barcode, + tousseName: tousseName, + sterileTime: sterileTime, + validUntil: validUntil, + operator: operator, + reviewer: reviewer, + orgUnitName: orgUnitName + }]; + leftGrid.add(record); + updateTousseSumAmount(data.thirdPartyTousseInstances.length, tousseName); + } + } + } else { + showResult(result.message); + } + } + }); +} + +//批量打印 +function printData(grid) { + var selectedRecords = grid.getSelectionModel().getSelection(); + var selectedCount = grid.getSelectionModel().getCount(); + var ids = []; + if (selectedCount < 1) { + showResult("请选择要打印的数据"); + } else { + for (var i = 0, len = selectedRecords.length; i < len; i++) { + ids[i] = selectedRecords[i].data['id']; + } + loadThirdPartyTousseReceiveRecordDetail(ids.join(';'), true) + } +} + Ext4.onReady(function () { Ext4.QuickTips.init(); var columns = [ - { header: "流水号", dataIndex: 'serialNumber', width: 150 }, + { header: "流水号", dataIndex: 'serialNumber', width: 150, renderer: modifyRecord }, { header: "接收时间", dataIndex: 'receiveTime', width: 150 }, { header: "接收人", dataIndex: 'receiver', width: 150 }, { header: "送货人", dataIndex: 'sender', width: 150 }, @@ -16,17 +92,17 @@ hidden: SSTS_ThirdPartyTousse_Receive, iconCls: 'btn_ext_application_add', handler: function () { - if(isFirstSupplyRoomOrgUnit == 'true'){ + if (isFirstSupplyRoomOrgUnit == 'true') { showAddOrEditWindow(''); - }else { + } else { showResult('当前仅限一级供应室可以可以接收第三方器械包。'); } } }, '-', { text: '批量打印', iconCls: 'icon_print', handler: function () { - deleteConfig(thirdPartyTousseGrid); + printData(thirdPartyTousseGrid); } }]; Index: ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseForm.js =================================================================== diff -u -r38982 -r39003 --- ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseForm.js (.../thirdPartyTousseForm.js) (revision 38982) +++ ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseForm.js (.../thirdPartyTousseForm.js) (revision 39003) @@ -5,6 +5,70 @@ configWin.close(); } +//删除 +function deleteItem(barcode) { + var leftGrid = top.Ext4.getCmp('leftGrid').getStore(); + for (var i = 0; i < leftGrid.getCount(); i++) { + var thirdPartyTousseInstances = leftGrid.getAt(i); + if (thirdPartyTousseInstances.data.barcode == barcode) { + leftGrid.remove(thirdPartyTousseInstances); + updateTousseSumAmount(leftGrid.getCount(), thirdPartyTousseInstances.data.tousseName, 'delete'); + break; + } + + } +} + +//验证条码是否已存在 +function validateThirdPartyTousse(recordItems) { + var barcode = recordItems[0].barcode; + var tousseName = recordItems[0].tousseName; + Ext4.Ajax.request({ + url: WWWROOT + '/disinfectSystem/baseData/thirdPartyTousseReceiveRecordController/validateThirdPartyTousse.mhtml', + params: { + barcode: barcode, + tousseName: tousseName + }, + success: function (response, options) { + var result = Ext4.decode(response.responseText); + if (result.success) { + var leftGrid = top.Ext4.getCmp('leftGrid').getStore(); + var rightGrid = top.Ext4.getCmp('rightGrid').getStore(); + var isHas = false; + var sumAmount = 0; + if (leftGrid.getCount() == 0) { + sumAmount = 1; + var record = [{ + tousseName: tousseName, + amount: 0 + }]; + rightGrid.add(record); + } else { + sumAmount = 1; + for (var i = 0; i < leftGrid.getCount(); i++) { + var item = leftGrid.getAt(i); + if (item.data.barcode == barcode) { + isHas = true; + break; + } + sumAmount++; + } + } + if (isHas) { + showResult('条码已存在!'); + top.Ext4.getCmp('scanBarcode').setValue(''); + return false; + } + leftGrid.add(recordItems); + top.Ext4.getCmp('scanBarcode').setValue(''); + updateTousseSumAmount(sumAmount, tousseName); + } else { + showResult(result.message); + } + } + }); +} + //保存器械包接收信息 function saveConfig(id) { var mask = new Ext4.LoadMask({ @@ -15,32 +79,36 @@ var receiverId = top.Ext4.getCmp('receiverId').getValue(); var sender = top.Ext4.getCmp('sender').getValue(); var remark = top.Ext4.getCmp('remark').getValue(); - var wareHouseId = top.Ext4.getCmp('wareHouseId').getValue(); + var wareHouseId = top.Ext4.getCmp('wareHouseId').getValue() || 0; var thirdPartyTousseInstances = []; var leftGrid = top.Ext4.getCmp('leftGrid').getStore(); for (var i = 0; i < leftGrid.getCount(); i++) { var item = leftGrid.getAt(i); thirdPartyTousseInstances.push({ - barcode:item.data.barcode, - tousseName:item.data.tousseName, - orgUnitId:item.data.orgUnitId, - orgUnitName:item.data.orgUnitName + barcode: item.data.barcode, + tousseName: item.data.tousseName, + orgUnitId: item.data.orgUnitId, + orgUnitName: item.data.orgUnitName, + operator: item.data.operator, + reviewer: item.data.operator, + sterileTime: item.data.sterileTime, + validUntil: item.data.validUntil }) } var params = { - receiverId:receiverId, - sender:sender, - remark:remark, - wareHouseId:wareHouseId, - id:id, - thirdPartyTousseInstances:thirdPartyTousseInstances + receiverId: receiverId, + sender: sender, + remark: remark, + wareHouseId: parseInt(wareHouseId), + id: id, + thirdPartyTousseInstances: thirdPartyTousseInstances } Ext4.Ajax.request({ url: WWWROOT + '/disinfectSystem/baseData/thirdPartyTousseReceiveRecordController/receiveThirdPartyTousse.mhtml', headers: { - 'Content-Type': 'application/json' - }, - jsonData: params, + 'Content-Type': 'application/json' + }, + jsonData: params, success: function (response, options) { var result = Ext4.decode(response.responseText); if (result.success) { @@ -59,19 +127,28 @@ }); } -function updateTousseSumAmount(sumAmount,tousseName) { +//更新器械包数量 +function updateTousseSumAmount(sumAmount, tousseName, type) { var rightGrid = top.Ext4.getCmp('rightGrid').getStore(); var tousseHas = false; for (var i = 0; i < rightGrid.getCount(); i++) { var item = rightGrid.getAt(i); var amount = item.data.amount; if (item.data.tousseName == tousseName) { - rightGrid.getAt(i).set('amount',parseInt(amount)+1); + if (type == 'delete') { + if (parseInt(amount) - 1 > 0) { + rightGrid.getAt(i).set('amount', parseInt(amount) - 1); + } else { + rightGrid.remove(item); + } + } else { + rightGrid.getAt(i).set('amount', parseInt(amount) + 1); + } tousseHas = true; break } } - if(!tousseHas){ + if (!tousseHas) { var record = [{ tousseName: tousseName, amount: 1 @@ -83,11 +160,6 @@ //显示窗口 function showAddOrEditWindow(id) { - Ext4.define('Teams', { - extend: 'Ext4.data.Model', - fields: ['barcode', 'tousseName', 'sterileStartDate', 'expDate', 'packer', 'reviewer', 'orgUnitName'] - }); - var wareHouseStore = new Ext4.data.Store({ proxy: { type: 'ajax', @@ -119,9 +191,9 @@ fields: [ { name: 'barcode' }, { name: 'tousseName' }, - { name: 'sterileStartDate' }, - { name: 'expDate' }, - { name: 'packer' }, + { name: 'sterileTime' }, + { name: 'validUntil' }, + { name: 'operator' }, { name: 'reviewer' }, { name: 'orgUnitName' } ], @@ -167,44 +239,18 @@ showResult('器械包不能为空!'); return } - var leftGrid = top.Ext4.getCmp('leftGrid').getStore(); - var isHas = false; - var sumAmount = 0; - if (leftGrid.getCount() == 0) { - sumAmount = 1; - var record = [{ - tousseName: tousseName, - amount: 0 - }]; - rightData.add(record); - } else { - sumAmount = 1; - for (var i = 0; i < leftGrid.getCount(); i++) { - var item = leftGrid.getAt(i); - if (item.data.barcode == barcode) { - isHas = true; - break; - } - sumAmount++; - } - } - if (isHas) { - showResult('条码已存在!'); - top.Ext4.getCmp('scanBarcode').setValue(''); - return false; - } + var record = [{ barcode: barcode, tousseName: tousseName, - sterileStartDate: res.split('@@')[2], - expDate: res.split('@@')[3], - packer: res.split('@@')[4], + sterileTime: res.split('@@')[2], + validUntil: res.split('@@')[3], + operator: res.split('@@')[4], reviewer: res.split('@@')[5], orgUnitName: res.split('@@')[6] }]; - leftData.add(record); - top.Ext4.getCmp('scanBarcode').setValue(''); - updateTousseSumAmount(sumAmount, tousseName); + + validateThirdPartyTousse(record); } }); } @@ -218,22 +264,22 @@ dataIndex: 'barcode' }, { text: '物品名称', - width: 130, + width: 150, menuDisabled: true, sortable: false, dataIndex: 'tousseName' }, { text: '灭菌日期', - width: 130, + width: 90, menuDisabled: true, sortable: false, - dataIndex: 'sterileStartDate' + dataIndex: 'sterileTime' }, { text: '失效日期', - width: 100, + width: 90, menuDisabled: true, sortable: false, - dataIndex: 'expDate' + dataIndex: 'validUntil' }, { text: '申请科室', width: 80, @@ -245,13 +291,23 @@ width: 80, menuDisabled: true, sortable: false, - dataIndex: 'packer' + dataIndex: 'operator' }, { text: '审核人', width: 80, menuDisabled: true, sortable: false, dataIndex: 'reviewer' + }, { + text: '操作', + width: 50, + menuDisabled: true, + sortable: false, + hidden: (id || '') !== '', + renderer: function (v, p, record) { + var barcode = record.data.barcode; + return ""; + } }] }) @@ -308,7 +364,9 @@ id: 'sender', name: 'sender', anchor: '100%', - allowBlank: true + allowBlank: true, + cls: (id || '') !== '' ? 'fieldReadOnlyNoRemove' : '', + readOnly: (id || '') !== '' }] }, { layout: 'form', @@ -352,7 +410,7 @@ id: 'receiver', name: 'receiver', anchor: '100%', - allowBlank: true, + allowBlank: false, cls: 'fieldReadOnlyNoRemove', readOnly: true }] @@ -437,6 +495,7 @@ buttons: [{ id: 'saveBtn', text: '保存', + hidden: (id || '') !== '', handler: function () { if (formPanel.getForm().isValid()) { saveConfig(id); @@ -451,5 +510,9 @@ }] }); configWin.show(); + + if ((id || '') !== '') { + loadThirdPartyTousseReceiveRecordDetail(id); + } } Index: ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.jsp =================================================================== diff -u -r38990 -r39003 --- ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.jsp (.../thirdPartyTousseView.jsp) (revision 38990) +++ ssts-web/src/main/webapp/disinfectsystem/thirdPartyTousse/thirdPartyTousseView.jsp (.../thirdPartyTousseView.jsp) (revision 39003) @@ -1,5 +1,7 @@ <%@ page contentType="text/html; charset=UTF-8"%> <%@ include file="/common/taglibs.jsp"%> +<%@page import="java.util.Date"%> +<%@page import="java.text.SimpleDateFormat"%> <%@page import="com.forgon.disinfectsystem.common.CssdUtils"%> <%@page import="com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager"%> <% @@ -8,6 +10,9 @@ String currentOrgUnitCode = userData.getCurrentOrgUnitCode(); String currentOrgUnitName = userData.getCurrentOrgUnitName(); + SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd"); + request.setAttribute("newDate", dateFormat.format(new Date())); + request.setAttribute("isFirstSupplyRoomOrgUnit", configManager.isFirstSupplyRoomOrgUnit(currentOrgUnitCode)); %> @@ -24,6 +29,13 @@ + + + + + + +