//@ sourceURL=west_pharmacy_send.js var LODOP; //声明为全局变量 var printIndex; var mzCfPrintIndex = window.localStorage["mzCfPrintIndex"]; var ekCfPrintIndex = window.localStorage["ekCfPrintIndex"]; var jzCfPrintIndex = window.localStorage["jzCfPrintIndex"]; var zsdPrintIndex = window.localStorage["zsdPrintIndex"]; var bqPrintIndex = window.localStorage["bqPrintIndex"]; var fskPrintIndex = window.localStorage["fskPrintIndex"]; var winNo = window.localStorage["winNo"]; var groupNo = window.localStorage["groupNo"]; let coreId // 病人id let mzHistoryDays = 30 // 门诊历史处方前置天数 let isTyOk = false; var hospitalName ='沭阳铭和医院'; let yf; $(function () { getAjaxRequst("/thmz/queryHospitalName",{},true,function (res) { hospitalName = res.data $('.hospitalName').text(hospitalName) }) init_daterangepicker(); // 查看门诊历史处方前置天数 mzHistoryDays = parseInt(!initSysParametersByCode('mzHistoryDays') ? '30' : initSysParametersByCode('mzHistoryDays')) $(".selectpicker").selectpicker({ dropuAuto: false }); if (groupNo == null || winNo == null) { return errorMesageSimaple('药房参数未设置,请在发药参数设置中设置'); } yf = selectYfInfo(groupNo) // if (yf.xyFlag === '1') { // $('#autoCellNumberDiv').hide(); // } openSocket("FY"); $("input").each(function () { this.onkeydown = function (e) { // 监听键盘事件 let theEvent = window.event || e; let code = theEvent.keyCode || theEvent.which; if (code == 13) {//回车事件 $("#btn_query").click(); //触发搜索按钮点击事件 } } }); initTbTable(); initDynamicSelect("allMzUnitCode", "unitCode"); //重置查询参数 $('#btn_clean').click(function () { cleanParams(); }); $('#btn_clean_history').click(function () { $('#reportRangeList span').html(moment().subtract(mzHistoryDays, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD')); }); $("#btn_query_history").click(function (t) { callHistoryDetail(); }); $("#btn_query").click(function (t) { initTbTable(); }); $("#sendAndMatch").click(function (t) { initTbTable(); }); $("#btn_radiology_send").click(function (t) { initRadiologyTable(); }); $("#btn_batch_send").click(function (t) { var rows = $("#tb_table").bootstrapTable('getSelections'); if (rows.length == 0) { return errorMesageSimaple('请选择你要进行发药处理的处方'); } var tem = []; for (let i = 0; i < rows.length; i++) { let item = rows[i]; item.groupNo = groupNo; item.chargeDate = null;//后台转换异常,临时赋空 tem.push({ mzChargeDetail: item, winNo: winNo }); if (item.confirmFlag != 5 && item.confirmFlag != 0) { return errorMesageSimaple('包含非未发药处方,发药失败'); } } if (!confirm("确定要对选中的处方进行发药处理吗?")) { return; } batchSendMedicineProcessing(tem); }); $("#btn_ty").click(function (t) { saveRefundMedicine(); }); $("#btn_cancel_ty").click(function (t) { saveCancelRefundMedicine(); }); $("#sendDispose").click(function (t) { let orderNo = $("#orderNoLabel").val(); let receiptNo = $("#receiptNoLabel").val(); let times = $("#timesLabel").val(); let name = $("#nameLabel").val(); let patientId = $("#patientIdLabel").val(); let realNo = $("#realNoLabel").val(); // 从全局变量获取药师执业资格证号 let pharPracCertNo = window.currentPharPracCertNo || ''; // 先验证追溯码数量,再决定是否发药 validateTracCodgQuantity(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); }); // 追溯码数量确认弹框的确认发药按钮 $("#confirmTracCodgSend").click(function (t) { // ================= 新增:确认发药时再次验证追溯码数量 ================= // 目的:确保追溯码数量与处方数量完全匹配才能发药 // 获取处方明细表格数据 let tableData = $("#tb_table_right").bootstrapTable('getData'); let hasMismatch = false; let mismatchMessage = ''; console.log('确认发药时验证追溯码数量,表格数据:', tableData); // 遍历每种药品,检查追溯码数量 for (let i = 0; i < tableData.length; i++) { let drug = tableData[i]; let prescriptionQuantity = parseInt(drug.quantity) || 0; // 处方数量 let tracCodgCount = 0; // 追溯码数量 // 计算该药品的追溯码数量 if (!isEmpty(drug.drugTracCodg)) { // 按
分割追溯码,过滤空值 let tracCodgList = drug.drugTracCodg.split('
').filter(code => code.length > 0); tracCodgCount = tracCodgList.length; } console.log('药品:', drug.drugname, '处方数量:', prescriptionQuantity, '追溯码数量:', tracCodgCount); // 检查数量是否匹配 if (tracCodgCount !== prescriptionQuantity) { hasMismatch = true; let difference = tracCodgCount - prescriptionQuantity; let differenceText = ''; if (difference > 0) { differenceText = '多输入 ' + difference + ' 个'; } else { differenceText = '缺少 ' + Math.abs(difference) + ' 个'; } mismatchMessage += '药品【' + drug.drugname + '】: 处方数量 ' + prescriptionQuantity + ',追溯码数量 ' + tracCodgCount + ',' + differenceText + ';\n'; } } // 如果数量不匹配,阻止发药并显示错误提示 if (hasMismatch) { console.error('追溯码数量不匹配,阻止发药:', mismatchMessage); errorMesageSimaple('追溯码数量与处方数量不匹配,无法发药!\n\n' + mismatchMessage); return; // 阻止后续操作 } // ================= 新增结束 ================= // ================= 原代码(已隐藏,可能复用) ================= /* // 获取存储的发药参数 let sendParams = window.pendingSendParams; if (sendParams) { // 隐藏确认弹框 $('#tracCodgConfirmModal').modal('hide'); // 执行发药处理 sendMedicineProcessing(sendParams.realNo, sendParams.orderNo, sendParams.receiptNo, sendParams.times, sendParams.patientId, sendParams.name, sendParams.pharPracCertNo); // 清除存储的参数 window.pendingSendParams = null; } */ // ================= 原代码结束 ================= // ================= 新增:数量匹配时的处理逻辑 ================= // 获取存储的发药参数 let sendParams = window.pendingSendParams; if (sendParams) { // 隐藏确认弹框 $('#tracCodgConfirmModal').modal('hide'); // 执行发药处理 sendMedicineProcessing(sendParams.realNo, sendParams.orderNo, sendParams.receiptNo, sendParams.times, sendParams.patientId, sendParams.name, sendParams.pharPracCertNo); // 清除存储的参数 window.pendingSendParams = null; console.log('追溯码数量验证通过,执行发药处理'); } // ================= 新增结束 ================= }); $("#printSend").click(function (t) { $('#zydybqModal').modal('hide'); $("#zyypbq_name").attr("value", $("#zydyNameLabel").val()); $("#zyypbq_sex").attr("value", $("#sexLabel").val()); $("#zyypbq_age").attr("value", $("#ageLabel").val()); $("#zyypbq_date").attr("value", $("#dateLabel").val()); $("#zyypbq_comm").text($("#yfLabel").val()); if ($("#syfsLabel").val() == 0) { $("#zybq_title").text("中药【口服】标签"); } else { $("#zybq_title").text("中药【外用】标签"); } LODOP = getLodop(); LODOP.PRINT_INITA(6, 0, "50mm", "30mm", "中药标签"); //设置默认打印机 LODOP.SET_PRINTER_INDEX(bqPrintIndex); LODOP.SET_PRINT_PAGESIZE(1, '50mm', '30mm', "CreateCustomPage"); LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "50mm"); LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "30mm"); LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "中药标签");//对新建的纸张重命名 LODOP.SET_PRINT_COPIES(parseInt($("#dyslLabel").val())); LODOP.ADD_PRINT_HTM("2mm", "2mm", "50mm", "30mm", $('#print_view_zybq').html()); LODOP.PREVIEW(); //LODOP.PREVIEW(); }); }); /** * 批量发药处理 */ function batchSendMedicineProcessing(tem) { $("#btn_batch_send").attr("disabled", true); $.ajax({ type: "POST", url: '/thmz/batchSendMedicineProcessing', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: JSON.stringify(tem), success: function (res) { $("#btn_batch_send").attr("disabled", false); if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } initTbTable($('#tb_table').bootstrapTable('getOptions').pageNumber); if (res.code == 0) { successMesage(res); } else { errorMesage(res); } }, error: function () { $("#btn_batch_send").attr("disabled", false); } }); } /** * 获取按钮组选择的下标 * @param id * @returns {number} */ function getIndex(id) { var index = 0; var item = $("#" + id).find("button"); for (var i = 0; i <= item.length; i++) { if ($(item[i]).hasClass("btn-primary")) { index = i; break; } } return index; } /** * 设置病人id */ function setPatientId() { var patientId_or_cardNo = $("#patientId_or_cardNo").val(); if (patientId_or_cardNo == '') { return $("#patientId").val(""); } $.ajax({ type: "GET", url: '/thmz/getByIcCardNo?icCardNo=' + patientId_or_cardNo, contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { if (res.data != null) { $("#patientId").val(res.data.patientId); } else { $("#patientId").val(patientId_or_cardNo); } } } }); } /** * 列表类型按钮切换事件 * @param object * @param realIndex 下标 */ function sendRefundButtonChange(object, realIndex) { $("#send_refund_group").find("button").each(function (index, element) { if ($(element).hasClass("btn-primary")) { $(element).removeClass("btn-primary").addClass("btn-default"); } }); if (realIndex == 0) { $("#confirmFlagSearch").empty(); $("#confirmFlagSearch").append(""); $("#confirmFlagSearch").append(""); $("#confirmFlagSearch").selectpicker('refresh'); $("#tb_table_right_ty").css("display", "none"); $("#return_total_amount").css("display", "none"); $("#btn_ty").addClass("hidden"); $("#btn_cancel_ty").addClass("hidden"); $("#btn_radiology_send").removeClass("hidden"); $("#btn_batch_send").removeClass("hidden"); } else { $("#confirmFlagSearch").empty(); $("#confirmFlagSearch").append(""); $("#confirmFlagSearch").append(""); $("#confirmFlagSearch").selectpicker('refresh'); $("#tb_table_right_ty").css("display", ""); $("#btn_ty").removeClass("hidden"); $("#btn_cancel_ty").removeClass("hidden"); $("#btn_radiology_send").addClass("hidden"); $("#btn_batch_send").addClass("hidden"); } $(object).removeClass("btn-default").addClass("btn-primary"); initTbTable(); } /** * 发药处理 */ function sendMedicineProcessing(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo) { $("#sendDispose").attr("disabled", true); $("#sendDrug").attr("disabled", true); // 收集药品追溯码数据 let tableData = $("#tb_table_right").bootstrapTable('getData'); let drugTracCodgData = []; for (let i = 0; i < tableData.length; i++) { if (!isEmpty(tableData[i].drugTracCodg)) { drugTracCodgData.push({ drugTracCodg: tableData[i].drugTracCodg, patientId: tableData[i].patientId, times: tableData[i].times, receiptNo: tableData[i].receiptNo, orderNo: tableData[i].orderNo, itemNo: tableData[i].itemNo, chargeItemCode: tableData[i].chargeItemCode, serial: tableData[i].serial, groupNo: tableData[i].groupNo, realNo: tableData[i].realNo, specification: tableData[i].specification, drugName: tableData[i].drugname, abbrName: tableData[i].abbrName, unitPrice: tableData[i].unitPrice, flag: '0' }); } } var temp = { winNo: winNo, mzChargeDetail: { groupNo: groupNo, realNo: realNo, orderNo: orderNo, receiptNo: receiptNo, times: times, patientId: patientId, name: name, windowsNoYf: winNo }, drugTracCodgList: drugTracCodgData // 添加药品追溯码数据 }; console.log("sendMedicineProcessing1111111111111",temp) $.ajax({ type: "POST", url: '/thmz/sendMedicineProcessing', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: JSON.stringify(temp), success: function (res) { $("#sendDispose").attr("disabled", false); $("#sendDrug").attr("disabled", false); if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { // 发药成功后,调用医保接口 callYbSaleGoodsItem(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); successMesage(res); $('#cfxxModal').modal('hide'); $("#patientId").val(''); initTbTable($('#tb_table').bootstrapTable('getOptions').pageNumber); // 发药成功后打印处方 printPrescription(patientId, times, orderNo) } else { errorMesage(res); } }, error: function () { $("#sendDispose").attr("disabled", false); $("#sendDrug").attr("disabled", false); } }); } /** * 查询处方信息 */ function initTbTable(pageIndex) { // sendRefundGroup: 0: 发药; 1: 退药 var sendRefundGroup = getIndex("send_refund_group"); var visible = false; var qrsjVisible = false; var tysjVisible = false; var url = "/thmz/getSendMedicinePrescription"; if (sendRefundGroup == 1) { visible = true; if ($("#confirmFlagSearch").val() == 2) { qrsjVisible = true; } else { tysjVisible = true; } url = "/thmz/getYfRefundMedicine"; $("#tb_table_div").attr("class", "col-md-7 col-sm-7 col-xs-12"); } else { $("#tb_table_div").attr("class", ""); } $('#tb_table').bootstrapTable("destroy"); $('#tb_table').bootstrapTable({ url: url, //请求后台的URL(*) method: 'post', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: queryParams, //传递参数(*) sidePagination: $("#confirmFlagSearch").val() == 0 ? 'client' : 'server', //分页方式:client客户端分页,server服务端分页(*) pageNumber: pageIndex || 1, //初始化加载第一页,默认第一页 pageSize: 15, //每页的记录行数(*) pageList: [25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 singleSelect: sendRefundGroup == 1 ? true : false, // 多选checkbox strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'checked', checkbox: true, align: "center", valign: 'middle', //visible: visible, formatter: function (value, row, index) { if (index == 0 && sendRefundGroup == 1) { $("#return_total_amount").css("display", ""); fitfymx(row.patientId, row.times, row.receiptNo, row.orderNo, row.groupNo); return { checked: true//设置选中 }; } } }, { title: '操作', align: "center", valign: 'middle', visible: !visible, formatter: function (value, row, index) { var str = ""; if (sendRefundGroup == 0) { str = ''; // if (yf.xyFlag === '1') { // str += ''; // } // if (row.confirmFlag == 5 || row.confirmFlag == 0) { // let pharPracCertNoForSend = (row.pharPracCertNo || '').replace(/'/g, '\\\''); // str += ''; // } let pharPracCertNo = (row.pharPracCertNo || '').replace(/'/g, '\\\''); str += ''; str += ''; str += ''; } return str; } }, { title: '操作', align: "center", valign: 'middle', visible: visible, formatter: function (value, row, index) { return ''; } }, { field: 'confirmFlag', title: '状态', align: "center", valign: 'middle', width: 80, formatter: function (value, row, index) { if(value == '5') { return "
已配药
"; } else if(value == '1') { return "
已发药
"; } else if(value == '0') { if(row.printFlag == '1'){ return "
配药中
"; } return "
待配药
"; } else if(value == '3') { return "
已取消
"; } return "
其他
"; } }, { field: 'pdStatus', title: '排队状态', align: "center", valign: 'middle', visible: !visible, width: 80, formatter: function (value, row, index) { if(value == '0') { return "
已排队
"; } else if(row.confirmFlag == '1') { return "
已完成
"; } else { return "
未排队
"; } } }, { field: 'pdSort', title: '排队序号', align: "center", valign: 'middle', visible: !visible, }, { field: 'patientId', title: '病人ID', align: "center", valign: 'middle' }, { field: 'name', title: '姓名', align: "center", valign: 'middle' // formatter: function (value, row, index) { // if (sendRefundGroup == 0) { // for (let i = 0; i < pastList.length; i++) { // if (pastList[i].patient_id == row.patientId) { // return (row.lineUp !== 10000 ? ' ' + row.lineUp + '  ' : '') + '' + value + ''; // } // } // } // return (row.lineUp !== 10000 ? ' ' + row.lineUp + '  ' : '') + value; // } }, { field: 'orderNo', title: '处方号', align: "center", valign: 'middle' }, { field: 'warnDeptName', title: '申请科室', align: "center", valign: 'middle', }, { field: 'employeeName', title: '医生', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value == null) { return row.doctorName; } return value; } }, { field: 'chargeDate', title: '缴费日期', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value != null && value != "") { return format(value, "yyyy-MM-dd HH:mm:ss"); } return ""; } }, { field: 'realNo', title: '流水号', align: "center", valign: 'middle', }, { field: 'confirmTime', title: '确认日期', align: "center", valign: 'middle', visible: qrsjVisible, formatter: function (value, row, index) { if (value != null && value != "") { return format(value, "yyyy-MM-dd HH:mm:ss"); } return ""; } }, { field: 'inputTime', title: '退药日期', align: "center", valign: 'middle', visible: tysjVisible, formatter: function (value, row, index) { if (value != null && value != "") { return format(value, "yyyy-MM-dd HH:mm:ss"); } return ""; } } ], onClickRow: function (row) { if (sendRefundGroup == 1) { fitfymx(row.patientId, row.times, row.receiptNo, row.orderNo, row.groupNo); } }, onDblClickRow: function (row) { if (sendRefundGroup === 0 && yf.xyFlag === '1') { printInjectionOralMedicine(row.patientId, row.orderNo, row.realNo, row.times, row.receiptNo, row.confirmFlag); } // 打印处方 printPrescription(row.patientId, row.times, row.orderNo) }, responseHandler: function (res) { console.log(res); if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); // let reverse = getLineUpData(ress.data); // $('#tb_table').bootstrapTable('load', reverse); if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.total,//总页数 "rows": ress.data //数据 }; }, }); } /** * 加载放射科发药记录 */ function initRadiologyTable() { $('#rad_send_record_table').bootstrapTable("destroy"); $('#rad_send_record_table').bootstrapTable({ url: "/thmz/getRadSendRecord", //请求后台的URL(*) method: 'post', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: radSendRecordQueryParams, //传递参数(*) sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 5, //每页的记录行数(*) pageList: [5], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 singleSelect: true, // 单选checkbox strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, paginationDetailHAlign: ' hidden',//隐藏左侧分页信息 toolbar: '#rad_send_record_toolbar', //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'startDate', title: '起始时间', align: "center", valign: 'middle', formatter: function (value, row, index) { if (index == 0) { initRadiologyStatTable(row.sendDate); } if (value != null && value != "") { return format(value, "yyyy-MM-dd"); } return ""; } }, { field: 'endDate', title: '截止时间', align: "center", valign: 'middle', formatter: function (value, row, index) { if (index == 0) { initRadiologyStatTable(row.sendDate); } if (value != null && value != "") { return format(value, "yyyy-MM-dd"); } return ""; } }, { field: 'name', title: '发药人', align: "center", valign: 'middle' }, { field: 'sendDate', title: '发药时间', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value != null && value != "") { return format(value, "yyyy-MM-dd"); } return "-"; } } , { title: '操作', align: "center", valign: 'middle', formatter: function (value, row, index) { row.sendDate = (row.sendDate == null) ? '' : row.sendDate; var str = ''; if (index == 0 && row.pageIndex == 0) { str += ''; } return str; } } ], onClickRow: function (row) { initRadiologyStatTable(row.sendDate); }, onDblClickRow: function (row) { printRadSendMedicineStat(row.sendDate, row.startDate, row.endDate); }, responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.total,//总页数 "rows": ress.data //数据 }; }, }); $("#radiologySendModal").modal(); } /** * 加载放射科发药统计表格数据 * @param sendDate */ function initRadiologyStatTable(sendDate) { sendDate = (sendDate == null) ? '' : sendDate; $('#rad_send_stat_table').bootstrapTable("destroy"); $('#rad_send_stat_table').bootstrapTable({ url: "/thmz/getRadSendStat?confirmTime=" + sendDate, //请求后台的URL(*) method: 'GET', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: {}, //传递参数(*) sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 singleSelect: true, // 单选checkbox strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, paginationDetailHAlign: ' hidden',//隐藏左侧分页信息 toolbar: '#rad_send_stat_toolbar', //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'location', title: '货位号', align: "center", valign: 'middle' }, { field: 'name', title: '品名', align: "center", valign: 'middle' }, { field: 'manuName', title: '厂商', align: "center", valign: 'middle' }, { field: 'specification', title: '规格', align: "center", valign: 'middle' }, { field: 'quantity', title: '数量', align: "center", valign: 'middle', formatter: function (value, row, index) { return '' + value + '' } }, { field: 'stockAmount', title: '库存', align: "center", valign: 'middle' } ], responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.total,//总页数 "rows": ress.data //数据 }; }, }); } /** * 放射科发药处理 */ function sendMedicineProcessingRad() { if (!confirm("确定要进行发药处理吗?")) { return; } $("#sendRad").attr("disabled", true); $.ajax({ type: "GET", url: '/thmz/sendMedicineProcessingRad', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: {}, success: function (res) { $("#sendRad").attr("disabled", false); if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { successMesage(res); initRadiologyTable(); } else { errorMesage(res); } }, error: function () { $("#sendRad").attr("disabled", false); } }); } /** * 打印注射卡口服药品 */ function printInjectionOralMedicine(patientId, orderNo, realNo, times, receiptNo, confirmFlag) { if (yf.xyFlag === '1') { prescriptionDetail(realNo, orderNo, receiptNo, times, patientId, confirmFlag); } var tem = { mzChargeDetail: { patientId: patientId, orderNo: orderNo, realNo: realNo, times: times, receiptNo: receiptNo, groupNo: groupNo, }, autoCellNumber: $('#autoCellNumber').prop('checked') ? 1 : 0, winNo: winNo }; $.ajax({ type: "POST", url: '/thmz/getPrintInjectionData', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: JSON.stringify(tem), success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } console.log(res); if (res.code === 0) { if (yf.zcyFlag === '1') { zyfdy(res.data); } else { xyfdy(res); successMesage(res); } } else { errorMesage(res); } } }); } /** * 中药房打印 * @param data */ function zyfdy(data) { $('#zydybqform')[0].reset(); if (bqPrintIndex == null) { return errorMesageSimaple('未设置标签打印机,请在发药参数设置中设置'); } $('#zydyNameLabel').val(data[0].name); $('#sexLabel').val(getSex(data[0].sex)); $('#ageLabel').val(data[0].age); $('#dyslLabel').val(data[0].drugWin*2); $('#dateLabel').val(format(new Date(), "MM-dd")); $('#zydybqModal').modal(); } /** * 西药房打印 */ function xyfdy(res) { var injections = new Array();//注射液 var drugs = new Array();//普通药品 for (let i = 0; i < res.data.length; i++) { if (res.data[i].classCode == 2 || res.data[i].classCode == 7) {//给药方式 2:输液、雾化吸入、副药等等 7:注射、皮试、副药等等 injections[injections.length] = res.data[i]; } else if (res.data[i].classCode != 6) {//给药方式 6:领药 9:外用、局麻、喷用等等 drugs[drugs.length] = res.data[i]; } } if (injections.length == 0 && drugs.length == 0) { return errorMesageSimaple('当前处方,无需打印注射单和标签'); } let age = getBirthSlot(res.data[0].birthDay, res.data[0].priceTime); //setPrint(); if (injections.length > 0) { if (zsdPrintIndex == null) { return errorMesageSimaple('未设置注射单打印机,请在发药参数设置中设置'); } $(".zsd_two_tr").remove(); $(".zsd_one_tr_1").remove(); $(".zsd_one_tr_2").remove(); var patientInfoHtm = '\n' + ' 姓名\n' + ' \n' + ' \n' + res.data[0].name + ' \n' + ' \n' + ' 性别\n' + ' \n' + ' \n' + getSex(res.data[0].sex) + ' \n' + ' \n' + ' 年龄\n' + ' \n' + ' \n' + age + ' \n' + ' \n' + ' ID号\n' + ' \n' + ' \n' + res.data[0].patientId + ' \n' + ' \n' + ' \n' + ' \n' + ' 医生\n' + ' \n' + ' \n' + res.data[0].employeeName + ' \n' + ' \n' + ' 诊断\n' + ' \n' + ' \n' + res.data[0].icdText + ' \n' + ' '; $(".zsd_yp_tr").remove(); $("#dateTime").html(format(new Date(), "yyyy-MM-dd HH:mm:ss")); $('#zsd_one').prepend(patientInfoHtm); var zsdYpHtm = ''; for (let i = 0; i < injections.length; i++) { let data = injections[i]; let manufactoryName = (data.manufactoryName == null || data.manufactoryName == '') ? '' : '(' + data.manufactoryName + ')'; let groupOrder = (data.groupOrder == '' || data.groupOrder == null) ? data.chargeItemCode : data.groupOrder; let psFlag = ''; if (data.groupOrder != '' || data.groupOrder != null) { for (let j = 0; j < injections.length; j++) { if (groupOrder === injections[j].groupOrder && injections[j].tryFlag === '1') { psFlag = '(需皮试)'; break } } } zsdYpHtm += '\n' + '   \n' + ' \n' + groupOrder + ' \n' + ' \n' + data.drugname + manufactoryName + ' \n' + ' \n' + data.drugQuan + ' \n' + ' \n' + data.drugUnitName + ' \n' + ' \n' + data.printName + psFlag + ' \n' + ' \n' + data.frequency + ' \n' + ' \n' + data.orderDays + ' \n' + ' \n' + data.specification + ' \n' + ' '; } $('#zsd_yp').append(zsdYpHtm); var htm = ''; for (let i = 0; i < 14; i++) { htm += '\n' + '   月           日\n' + ' \n' + ' \n' + ' \n' + ' \n' + // '   月  日\n' + // ' \n' + // ' \n' + // ' \n' + // ' \n' + ' '; } $('#zsd_two').append(htm); LODOP = getLodop(); // LODOP.PRINT_INITA(6, 0, "210mm", "148mm", "铭和医院门、急诊注射单"); // LODOP.SET_PRINT_STYLE("FontSize", 9); //字体大小 LODOP.PRINT_INITA(6, 0, "140mm", "202mm", "铭和医院门、急诊注射单"); LODOP.SET_PRINT_STYLE("FontSize", 9); //字体大小 //设置默认打印机 LODOP.SET_PRINTER_INDEX(zsdPrintIndex); // LODOP.SET_PRINT_PAGESIZE(1, '210mm', '148mm', "CreateCustomPage"); // LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "210mm"); // LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "148mm"); LODOP.SET_PRINT_PAGESIZE(1, '140mm', '202mm', "CreateCustomPage"); LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true) // 整宽不变形 LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "140mm"); LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "202mm"); LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "铭和医院门、急诊注射单");//对新建的纸张重命名 // LODOP.ADD_PRINT_HTM("5mm", "3mm", "210mm", "148mm", $("div[id='print_view_zsd']").html()); LODOP.ADD_PRINT_HTM("2mm", "4mm", "140mm", "202mm", $("div[id='print_view_zsd']").html()); LODOP.PREVIEW(); //LODOP.PREVIEW(); } if (drugs.length > 0) { if (bqPrintIndex == null) { return errorMesageSimaple('未设置标签打印机,请在发药参数设置中设置'); } LODOP = getLodop(); LODOP.PRINT_INITA(6, 0, "80mm", "60mm", "患者药品标签"); LODOP.SET_PRINT_STYLE("FontSize", 9); //字体大小 //设置默认打印机 LODOP.SET_PRINTER_INDEX(bqPrintIndex); LODOP.SET_PRINT_PAGESIZE(1, '80mm', '60mm', "CreateCustomPage"); LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "80mm"); LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "60mm"); LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "患者药品标签");//对新建的纸张重命名 for (let j = 0; j < drugs.length; j++) { for (var key in drugs[j]) { $("#ypbq_" + key + "").attr("value", drugs[j][key]); $("#ypbq_quantity").attr("value", parseInt(drugs[j]['quantity'])); } $("#dataTime").attr("value", format(new Date(), "yyyy-MM-dd HH:mm")); $("#ypbq_sex").attr("value", getSex(drugs[0].sex)); $("#ypbq_age").attr("value", age); $("#NO").attr("value", j + 1 + "/" + drugs.length); //用法 let yf = drugs[j].printName + ','; if (drugs[j].drugUnitName == '粒' || drugs[j].drugUnitName == '片' || drugs[j].drugUnitName == '支' || drugs[j].drugUnitName == '袋' || drugs[j].drugUnitName == '包' || drugs[j].drugUnitName == '丸') { $("#ypbq_comm").attr("value", yf + drugs[j].comm + ',每次' + (drugs[j].drugQuan == 0.5 ? '半' : drugs[j].drugQuan) + drugs[j].drugUnitName); } else if ((drugs[j].weight == null && drugs[j].volum == null) || (drugs[j].weight != null && drugs[j].volum != null)) { $("#ypbq_comm").attr("value", yf + drugs[j].comm + ',每次' + drugs[j].drugQuan + drugs[j].drugUnitName); } else { let weight = (drugs[j].weight == '' || drugs[j].weight == null) ? drugs[j].volum : drugs[j].weight; var drugQuan = (drugs[j].drugQuan / weight).toFixed(2); if (drugQuan == 0.5) { $("#ypbq_comm").attr("value", yf + drugs[j].comm + ',每次半' + drugs[j].miniUnitName); } else if (drugQuan < 1) { $("#ypbq_comm").attr("value", yf + drugs[j].comm + ',每次' + drugs[j].drugQuan + drugs[j].drugUnitName); } else { drugQuan = Math.round(drugQuan * 100) / 100; $("#ypbq_comm").attr("value", yf + drugs[j].comm + ',每次' + drugQuan + drugs[j].miniUnitName); } } LODOP.ADD_PRINT_HTM("5mm", "2mm", "80mm", "60mm", $("div[id='print_view_bq']").html()); LODOP.NewPage();//下一页 } LODOP.PREVIEW(); //LODOP.PREVIEW(); } } /** * 打印放射科发药药品统计 */ function printRadSendMedicineStat(sendDate, startDate, endDate) { $.ajax({ type: "GET", url: "/thmz/getPrintRadSendStat?confirmTime=" + sendDate, //请求后台的URL(*) contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: {}, success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { var list = res.data; if (list.length == 0) { return errorMesageSimaple('当前记录无发药药品统计数据'); } if (fskPrintIndex == null) { return errorMesageSimaple('未设置放射科发药清单打印机,请在发药参数设置中设置'); } $(".fsk_tr").remove(); var htm = ''; for (let i = 0; i < list.length; i++) { var data = list[i]; htm += '' + ' ' + (data.location == null ? '-' : data.location) + ' ' + ' ' + data.name + ' ' + ' ' + data.manuName + ' ' + ' ' + data.specification + ' ' + ' ' + data.quantity + ' ' + ' '; } $('#fsk_tbody').append(htm); $('#startDate').html(format(startDate, "yyyy-MM-dd")); $('#endDate').html(format(endDate, "yyyy-MM-dd")); //setPrint(); LODOP = getLodop(); LODOP.PRINT_INITA(6, 0, "241mm", "93.3mm", "放射科发药记录单"); LODOP.SET_PRINT_STYLE("FontSize", 9); //字体大小 //设置默认打印机 LODOP.SET_PRINTER_INDEX(fskPrintIndex); LODOP.SET_PRINT_PAGESIZE(1, '241mm', '93.3mm', "CreateCustomPage"); LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "241mm"); LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "93.3mm"); LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "放射科发药记录单");//对新建的纸张重命名 LODOP.ADD_PRINT_HTM("5mm", "20%", "60%", "93.3mm", $("div[id='print_view_fsk']").html()); LODOP.PREVIEW(); //LODOP.PREVIEW(); successMesage(res); } else { errorMesage(res); } } }); } /** * 已发药和未发药记录构建列表查询参数 * @param params */ function queryParams(params) { var rePortRangeArr = getRePortRangeArr(); let warnDept; if ($("#unitCode").val() == null) { warnDept = null; } else { warnDept = $("#unitCode").val()[0] } var temp = { pageSize: params.limit, //页面大小 pageIndex: params.offset / params.limit, //页码 beginDate: rePortRangeArr[0], endDate: rePortRangeArr[1], name: $("#nameSearch").val() == "" ? null : $("#nameSearch").val(), patientId: $("#patientId").val() == "" ? null : $("#patientId").val(), confirmFlag: $("#confirmFlagSearch").val(), realNo: $("#realNoSearch").val() == "" ? null : $("#realNoSearch").val(), warnDept: warnDept, groupNoOut: groupNo, winNo: winNo, isSendAndMatch: 1, sortType: $("#sortType option:selected").val() }; return temp; }; /** * 放射科发药记录构建列表查询参数 * @param params */ function radSendRecordQueryParams(params) { var temp = { pageSize: params.limit, //页面大小 pageIndex: params.offset / params.limit //页码 }; return temp; }; /** * 获取时间选择器的时间数组 * @returns {string[]} */ function getRePortRangeArr() { var rePortRange = $('#reportrange span').html(); var rePortRangeArr = rePortRange.split(" - "); rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00" rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59" return rePortRangeArr; } /** * 清空查询条件 */ function cleanParams() { $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD')); $("#nameSearch").val(''); $("#patientId_or_cardNo").val(''); $("#patientId").val(''); $("#realNoSearch").val(''); $("#unitCode").html(''); $("#unitCode").selectpicker('refresh'); var sendRefundGroup = getIndex("send_refund_group"); sendRefundGroup == 0 ? $("#confirmFlagSearch").selectpicker('val', 0) : $("#confirmFlagSearch").selectpicker('val', 2); $("#confirmFlagSearch").selectpicker('refresh'); $("#patientId_or_cardNo").focus(); } /** * 查询病人处方明细 */ var $table; function prescriptionDetail(realNo, orderNo, receiptNo, times, patientId, confirmFlag, pharPracCertNo) { // 设置全局变量,供发药按钮使用 window.currentPharPracCertNo = pharPracCertNo || ''; let isXy = yf.xyFlag === '1'; if (confirmFlag == 5 || confirmFlag == 0) { $("#sendDispose").show();//显示 } else { $("#sendDispose").hide();//隐藏 } var temp = { groupNo: groupNo, realNo: realNo, orderNo: orderNo, receiptNo: receiptNo, times: times, patientId: patientId }; $('#tb_table_right').bootstrapTable("destroy"); $('#tb_table_allergen').bootstrapTable("destroy"); $table = $('#tb_table_right').bootstrapTable({ url: '/thmz/getFyclPrescriptionDetail', //请求后台的URL(*) method: 'POST', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: JSON.stringify(temp), //传递参数(*) sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'manuNo', title: '批号', align: "center", valign: 'middle' },{ field: 'location', title: '货位号', align: "center", valign: 'middle' }, { field: 'drugname', title: '品名', align: "center", valign: 'middle', }, { field: 'specification', title: '规格', align: "center", valign: 'middle', }, { field: 'quantity', title: '数量', align: "center", valign: 'middle', formatter: function (value, row, index) { return '' + value + '' } }, { field: 'ypUnitName', title: '单位', align: "center", valign: 'middle', }, { field: 'abbrName', title: '生产厂家', align: "center", valign: 'middle', visible: isXy }, { field: 'drugQuan', title: '一次剂量', align: "center", valign: 'middle', }, { field: 'drugUnitName', title: '单位', align: "center", valign: 'middle', }, { field: 'frequency', title: '频率', align: "center", valign: 'middle', visible: isXy }, { field: 'decAmount', title: '退药量', align: "center", valign: 'middle', formatter: function (value, row, index) { return value == null ? '-' : '' + value + '' } }, { field: 'printName', title: '给药方式', align: "center", valign: 'middle', visible: isXy }, { field: 'unitPrice', title: '单价', align: "center", valign: 'middle', } , { field: 'drugFlag',//毒麻标志:1:毒;2:麻;3:精神1;4:精神2 title: '毒麻', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value == 1) { return '' } else if (value == 2) { return '' } else if (value == 3) { return '精神1' } else if (value == 4) { return '精神2' } else { return '-' } } } , { field: 'stockAmount', title: '当前库存', align: "center", valign: 'middle', } , { field: 'drugWin', title: '副数', align: "center", valign: 'middle', visible: !isXy } , { field: 'nationalCode', title: '医保编码', align: ";left", valign: 'middle', formatter: function (value, row, index) { return value == null ? "-" : value; } } , { field: 'employeeName', title: '医生姓名', visible: false // 隐藏列,仅用于数据传递 }, { field: 'mdtrtSetlType', title: '结算类型', align: "center", valign: 'middle', width: 80, formatter: function (value, row, index) { // 根据处方类型判断:普通处方(1)、特门处方(3)、GCP实验(4)为自费,门诊统筹(2)为医保 if (value == 1) { return '医保'; } else { return '自费'; } } }, { field: 'serial', title: '拆零状态', align: "center", valign: 'middle', width: 80, formatter: function (value, row, index) { if (value === '01') { return '拆零'; } else if (value === '99') { return '不拆零'; } else { return '-'; } } }, { field: 'drugTracCodg', title: '药品追溯码', width: '270', align: "left", valign: 'middle', formatter: function (value, row, index) { return isEmpty(value)?'':value } } ], /** * @param {点击列的 field 名称} field * @param {点击列的 value 值} value * @param {点击列的整行数据} row * @param {td 元素} $element */ // onClickCell: function (field, value, row, $element) { // if (field === 'drugTracCodg') { // $element.attr('contenteditable', true); // $element.focus(); // $element.blur(function () { // let index = $element.parent().data('index'); // let tdValue = $element.html(); // saveCellData($('#tb_table_right'), index, field, tdValue); // }) // } // }, onClickCell: function (field, value, row, $element) { if (field === 'drugTracCodg') { $element.attr('contenteditable', true); $element.focus(); // 添加扫码输入监听(带防抖) let inputTimer = null; let lastInputValue = ''; $element.off('input.scan').on('input.scan', function(e) { // 使用innerHTML获取包含
的完整内容 let inputValue = e.target.innerHTML; console.log('扫码输入事件触发,输入值:', inputValue); console.log('输入值长度:', inputValue ? inputValue.length : 0); console.log('输入值是否包含
:', inputValue ? inputValue.includes('
') : false); // 清除之前的定时器 if (inputTimer) { clearTimeout(inputTimer); } // 设置防抖定时器,0.5秒后触发验证 inputTimer = setTimeout(function() { if (inputValue && inputValue.length > 0) { // 直接按
分割,获取所有追溯码 let codes = inputValue.split('
').filter(code => code.length > 0); console.log('分割后的追溯码列表:', codes); // 检查最后一个追溯码是否为20位或以上 if (codes.length > 0) { let lastCode = codes[codes.length - 1]; console.log('最后一个追溯码:', lastCode); console.log('最后一个追溯码长度:', lastCode.length); if (lastCode.length >= 20) { console.log('防抖触发,准备验证追溯码:', lastCode); // 验证最后一个完整的追溯码 validateAndAddTracCodg(lastCode, row, $element); } else { console.log('最后一个追溯码长度不正确,不进行验证:', lastCode.length); // 添加报错提示 errorMesageSimaple('追溯码长度不正确,应为20位或以上,当前为' + lastCode.length + '位'); // 去掉长度不正确的追溯码 codes.pop(); // 重新设置单元格内容 let newContent = codes.join('
'); if (newContent) { newContent += '
'; } $element.html(newContent); // 保持焦点在单元格末尾,让用户可以继续扫码 $element.focus(); // 将光标移动到内容末尾 let range = document.createRange(); let selection = window.getSelection(); range.selectNodeContents($element[0]); range.collapse(false); // false表示移动到末尾 selection.removeAllRanges(); selection.addRange(range); } } else { console.log('没有找到有效的追溯码'); } } }, 500); }); // 保持原有的失去焦点保存逻辑 $element.off('blur.save').on('blur.save', function () { let index = $element.parent().data('index'); let tdValue = $element.html(); saveCellData($('#tb_table_right'), index, field, tdValue); }); } }, responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); if (ress.data.length > 0) { $("#employeeNameLabel").val(ress.data[0].employeeName); $("#warnDeptNameLabel").val(ress.data[0].warnDeptName); $("#chargeDateLabel").val(format(ress.data[0].chargeDate, "yyyy-MM-dd HH:mm:ss")); $("#icdTextLabel").val(ress.data[0].icdText); $("#orderNoLabel").val(ress.data[0].orderNo); $("#receiptNoLabel").val(ress.data[0].receiptNo); $("#timesLabel").val(ress.data[0].times); $("#nameLabel").val(ress.data[0].name); $("#patientIdLabel").val(ress.data[0].patientId); $("#realNoLabel").val(ress.data[0].realNo); } if(ress.patientAllergenInfoList){ callAllergenInfo(ress.patientAllergenInfoList) } if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.data.length,//总页数 "rows": ress.data //数据 }; }, onLoadSuccess: function (res) { //加载成功时执行 var sendTotalAmount = 0; for (var i = 0; i < res.rows.length; i++) { sendTotalAmount += parseFloat(res.rows[i].quantity * res.rows[i].unitPrice * res.rows[i].drugWin); } $('#sendTotalAmount').html(sendTotalAmount.toFixed(2));//toFixed(2),保留2位小数,避免js中小数相加小数点后面多出很多位 }, }); $("#cfxxModal").modal(); } /** * 查询病人处方药品明细 */ function fitfymx(patientId, times, receiptNo, orderNo, groupNoOut) { var temp = { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, groupNoOut: groupNoOut, confirmFlag: $("#confirmFlagSearch").val() }; $('#tb_table_right_ty').bootstrapTable("destroy"); $table = $('#tb_table_right_ty').bootstrapTable({ url: '/thmz/getRefundYpMx', //请求后台的URL(*) method: 'post', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: temp, //传递参数(*) sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, paginationDetailHAlign: ' hidden',//隐藏左侧分页信息 //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'charge_item_code', title: '编码', align: "center", valign: 'middle' },{ field: 'drugname', title: '品名', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value != null && value != "") { return value.replace("()", ""); } return ""; } }, { field: 'specification', title: '规格', align: "center", valign: 'middle', }, { field: 'quantity', title: '数量', align: "center", valign: 'middle', }, { field: 'unit_price', title: '单价', align: "center", valign: 'middle', }, { field: 'dec_amount', title: '退药量', align: "center", valign: 'middle', formatter: function (value, row, index) { return '' + value + '' } }, { field: 'refund_medicine_remark', title: '退药原因', align: "center", valign: 'middle', formatter: function (value, row, index) { if(row.dec_amount > 0){ return value; } else { return '' } } } ], responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.data.length,//总页数 "rows": ress.data //数据 }; }, onLoadSuccess: function (res) { //加载成功时执行 var returnTotalAmount = 0; var returnAmount = 0; for (var i = 0; i < res.rows.length; i++) { returnTotalAmount += parseFloat(res.rows[i].quantity * res.rows[i].unit_price); returnAmount += parseFloat(res.rows[i].dec_amount * res.rows[i].unit_price); } $('#returnTotalAmount').html(returnTotalAmount.toFixed(2));//toFixed(2),保留2位小数,避免js中小数相加小数点后面多出很多位 $('#returnAmount').html(returnAmount.toFixed(2));//toFixed(2),保留2位小数,避免js中小数相加小数点后面多出很多位 }, }); } /** * 退药处理 */ function saveRefundMedicine() { let zt = $("#confirmFlagSearch").val() // 检查是否需要进行追溯码匹配 if (zt === '2') { // 检查是否已经完成匹配 if (!isTyOk) { return errorMesageSimaple('请先匹配退药药品追溯码!'); } // 获取退药表格数据,检查是否所有需要退药的药品都已匹配 let tyTable = $('#ty_table_detail').bootstrapTable("getData"); let refundData = window.currentRefundData || $table.bootstrapTable('getData'); // ========== 调试日志开始 ========== console.log('=== saveRefundMedicine 调试信息 ==='); console.log('refundData 样本:', refundData.length > 0 ? refundData[0] : '空数组'); console.log('tyTable 样本:', tyTable.length > 0 ? tyTable[0] : '空数组'); console.log('refundData 总数量:', refundData.length); console.log('tyTable 总数量:', tyTable.length); // ========== 调试日志结束 ========== let needRefundItems = []; // 找出需要退药的药品 refundData.forEach(function (item, index, arr) { if (item.dec_amount != 0) { needRefundItems.push({ chargeItemCode: item.charge_item_code, serial: item.serial, itemNo: item.item_no }); } }); // ========== 调试日志开始 ========== console.log('needRefundItems:', needRefundItems); console.log('第一个需要退药的药品字段信息:'); if (needRefundItems.length > 0) { console.log('- chargeItemCode:', needRefundItems[0].chargeItemCode); console.log('- serial:', needRefundItems[0].serial); console.log('- itemNo:', needRefundItems[0].itemNo); } // ========== 调试日志结束 ========== // 检查每个需要退药的药品是否都已匹配 let allMatched = true; let unmatchedItems = []; for (let i = 0; i < tyTable.length; i++) { let item = tyTable[i]; // 检查这个药品是否需要退药 let needRefund = needRefundItems.some(function(refundItem) { return refundItem.chargeItemCode === item.chargeItemCode && refundItem.serial === item.serial && refundItem.itemNo === item.itemNo; }); if (needRefund) { // 检查是否已匹配 if (isEmpty(item.matchOk) || item.matchOk.indexOf('已匹配') === -1) { allMatched = false; unmatchedItems.push(item.drugName || '未知药品'); } } } if (!allMatched) { return errorMesageSimaple('还有药品未匹配追溯码:' + unmatchedItems.join('、') + ',请完成匹配后再退药!'); } } var row = $("#tb_table").bootstrapTable('getSelections'); if (row.length != 1) { return errorMesageSimaple('请选择一条处方数据'); } if (row[0].confirmFlag == 3) { return errorMesageSimaple('请勿重复退药'); } var data = $table.bootstrapTable('getData'); var datas = []; var i = 0; data.forEach(function (item, index, arr) { if (item.dec_amount != 0) { // 调试日志 console.log('=== 退药参数调试 ==='); console.log('item.patient_id:', item.patient_id); console.log('item.times:', item.times); console.log('item.receipt_no:', item.receipt_no); console.log('item.order_no:', item.order_no); console.log('item.real_no:', item.real_no); console.log('item.dec_amount:', item.dec_amount); console.log('item.unit_price:', item.unit_price); console.log('item.charge_item_code:', item.charge_item_code); console.log('item.serial:', item.serial); console.log('item.group_no:', item.group_no); console.log('item.item_no:', item.item_no); console.log('item.serial_no:', item.serial_no); var tem = { "patientId": item.patient_id, "times": item.times, "receiptNo": item.receipt_no, "orderNo": item.order_no, "realNo": item.real_no, "decAmount": item.dec_amount, "unitPrice": item.unit_price, "chargeCode": item.charge_item_code, "serial": item.serial, "groupNo": item.group_no, "itemNo": item.item_no, "serialNo": item.serial_no } datas[i] = tem; i++; } }) if (datas.length == 0) { return errorMesageSimaple('退药处方可退药药品为空'); } if (!confirm("确定要对当前处方的药品进行退药处理吗?")) { return; } $("#btn_ty").attr("disabled", true); $.ajax({ type: "POST", url: '/thmz/refundMedicineProcessing', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: JSON.stringify(datas), success: function (res) { // ========== 调试日志:AJAX成功响应 ========== console.log('=== AJAX成功响应 ==='); console.log('响应状态: 成功'); console.log('响应数据:', res); $("#btn_ty").attr("disabled", false); if (res == '401' || res == 401) { console.error('认证失败,跳转到登录页面'); window.location.href = '/thmz/login/view' return; } if (res.code == 0) { console.log('退药处理成功'); successMesage(res); // ========== 调用退药医保接口 ========== console.log('=== 开始调用退药医保接口 ==='); // 获取退药记录的基本信息 let refundData = $table.bootstrapTable('getData'); if (refundData && refundData.length > 0) { let firstItem = refundData[0]; let patientId = firstItem.patient_id; let times = firstItem.times; let receiptNo = firstItem.receipt_no; let orderNo = firstItem.order_no; let realNo = Math.abs(firstItem.real_no); // 保证 realNo 为正数 let name = firstItem.name; console.log('退药医保接口参数:', { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, realNo: realNo, name: name }); // 调用退药医保接口 callYbReturnGoodsItem(realNo, orderNo, receiptNo, times, patientId, name); } else { console.warn('没有退药数据,跳过医保接口调用'); } // 退药成功后重置匹配状态和全局数据 isTyOk = false; window.currentRefundData = null; initTbTable(); } else { console.error('退药处理失败:', res.message); errorMesage(res); } }, error: function () { $("#btn_ty").attr("disabled", false); } }); } /** * 撤销退药处理 */ function saveCancelRefundMedicine() { var row = $("#tb_table").bootstrapTable('getSelections'); console.log("row11111111111111111111111111111111",row) if (row.length != 1) { return errorMesageSimaple('请选择一条处方数据'); } if (row[0].confirmFlag != 3) { return errorMesageSimaple('请选择已退药记录'); } if (!confirm("确定要撤销当前处方的退药吗?")) { return; } $("#btn_cancel_ty").attr("disabled", true); request({ url: '/cancelRefundMedicineProcessing', method: 'GET', data: { realNo: row[0].realNo, groupNo: groupNo, receiptNo: row[0].receiptNo, orderNo: row[0].orderNo, patientId: row[0].patientId, times: row[0].times } }).then((res) => { $("#btn_cancel_ty").attr("disabled", false); successMesage(res); // ========== 调用撤销退药医保接口 ========== console.log('=== 开始调用撤销退药医保接口 ==='); // 获取撤销退药记录的基本信息 let patientId = row[0].patientId; let times = row[0].times; let receiptNo = row[0].receiptNo; let orderNo = row[0].orderNo; let realNo = row[0].realNo; let name = row[0].name; let doctorName = row[0].doctorName; console.log('撤销退药医保接口参数:', { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, realNo: realNo, name: name }); // 调用撤销退药医保接口 callYbSaleGoodsItemForCancelRefund(realNo, orderNo, receiptNo, times, patientId, name, doctorName); initTbTable(); },err =>{ $("#btn_cancel_ty").attr("disabled",false); }) } /** * 叫号 * @param patientId * @param name */ function callNumber(patientId, name) { $.ajax({ type: "GET", url: '/thmz/callNumber?patientId=' + patientId + "&winNo=" + winNo, contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { //jhRecord.push(patientId); pastList[pastList.length] = {name: name, patient_id: patientId}; window.localStorage["pastList"] = JSON.stringify(pastList); successMesage(res); } else { errorMesage(res); } } }); } // 添加门诊过敏史 var $tableAllergen; function callAllergenInfo(allergenList){ $tableAllergen = $('#tb_table_allergen').bootstrapTable({ data:allergenList, striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: false, //是否显示分页(*) sortable: false, //是否启用排序 sortOrder: "asc", //排序方式 sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'patNo', title: '门诊号', align: "center", valign: 'middle' },{ field: 'allergenCode', title: '过敏源编码', align: "center", valign: 'middle' }, { field: 'allergenName', title: '过敏源', align: "center", valign: 'middle', } ], responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (ress.code == -1) { if (ress.message != null && ress.message != '') { new PNotify({ title: '错误提示', text: ress.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.data.length,//总页数 "rows": ress.data //数据 }; } }); } function callHistoryDetail() { if(coreId){ prescriptionHistoryDetail(coreId, '1'); } } // 查看历史处方 let $historyTable function prescriptionHistoryDetail(patientId, type){ coreId = patientId if(type === '0'){ daterangepickerNew('reportRangeList', 'center'); initSelectHistory(); } $('#tb_table_history').bootstrapTable("destroy"); $historyTable = $('#tb_table_history').bootstrapTable({ url: '/thmz/getMzBlRecordList', //请求后台的URL(*) method: 'post', //请求方式(*) toolbar: '#toolbar', //工具按钮用哪个容器 striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "desc", //排序方式 queryParams: queryDataS, //传递参数(*) sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 5, //每页的记录行数(*) pageList: [5, 10, 15, 25, 30], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, //rowStyle:rowStyle,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { title: '操作', field: 'op', align: "center", valign: 'middle', formatter: function (value, row, index) { var str = ''; return [str].join(''); } }, { field: 'patientId', title: '门诊ID', align: "center", valign: 'middle' }, { field: 'patientName', title: '患者姓名', align: "center", valign: 'middle' }, { field: 'deptCode', title: '就诊科室', align: "center", valign: 'middle' }, { field: 'doctorCode', title: '接诊医师', align: "center", valign: 'middle' }, { field: 'firstOrNot', title: '初/复诊', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value == '1') { return "复诊"; } return "初诊"; } } , { field: 'visitDate', title: '就诊时间', align: "center", valign: 'middle', formatter: function (value, row, index) { if (value == null || value == "") { return ""; } return format(value, "yyyy-MM-dd HH:mm:ss"); } } ], responseHandler: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } var ress = eval(res); if (ress.code == -1) { if (ress.message != null && ress.message != '') { errorMesage(ress); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": ress.total,//总页数 "rows": ress.data //数据 }; }, }); $("#historyModal").modal(); } function showMzBlRecordModal(patientId, times, type) { $.ajax({ type: "GET", url: '/thmz/getMzBlrecord?patientId=' + patientId + '×=' + times, contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { var mzPatientMi = res.mzPatientMi; $("#editPatientId").text(mzPatientMi.patientId); $("#editPatientName").text(mzPatientMi.name); $("#editPatientGender").text(mzPatientMi.gender); $("#editPatientAge").text(mzPatientMi.ageString); var mzBlRecord = res.mzBlRecord; $("#editEmrChiefComplaint").val(mzBlRecord.emrChiefComplaint == null ? "" : mzBlRecord.emrChiefComplaint); $("#editEmrHpi").val(mzBlRecord.emrHpi == null ? "" : mzBlRecord.emrHpi); $("#editEmrPs").val(mzBlRecord.emrPs == null ? "" : mzBlRecord.emrPs); $("#editPersonalHistory").val(mzBlRecord.personalHistory == null ? "" : mzBlRecord.personalHistory); $("#editFzZl").val(mzBlRecord.fzZl == null ? "" : mzBlRecord.fzZl); $("#editCrbHistory").val(mzBlRecord.crbHistory == null ? "" : mzBlRecord.crbHistory); $("#editFamilyHistory").val(mzBlRecord.familyHistory == null ? "" : mzBlRecord.familyHistory); $("#editObstericalHistory").val(mzBlRecord.obstericalHistory == null ? "" : mzBlRecord.obstericalHistory); $("#editQtjc").val(mzBlRecord.emrPe == null ? "" : mzBlRecord.emrPe); setSelectedAttr("editZd", mzBlRecord.icdCode, mzBlRecord.icdText); var patientAllergenInfoList = res.patientAllergenInfoList; if (patientAllergenInfoList != null && patientAllergenInfoList.length > 0) { var zdAllergen = []; var ypDitList = []; var zdAllergenHtml = ''; var ypDitListHtml = ''; var zdAllergeCodes = null; var zdAllergeTexts = null; var ypDitListodes = null; var ypDitListTexts = null; for (var i = 0; i < patientAllergenInfoList.length; i++) { var patientAllergenInfo = patientAllergenInfoList[i]; if (patientAllergenInfo.type == 0 || patientAllergenInfo.type == '0') { zdAllergen[zdAllergen.length] = patientAllergenInfo.allergenCode; zdAllergenHtml += ''; if (zdAllergeCodes == null) { zdAllergeCodes = patientAllergenInfo.allergenCode; zdAllergeTexts = patientAllergenInfo.allergenName; } else { zdAllergeCodes += "," + patientAllergenInfo.allergenCode; zdAllergeTexts += "," + patientAllergenInfo.allergenName; } } else if (patientAllergenInfo.type == 1 || patientAllergenInfo.type == '1') { ypDitList[ypDitList.length] = patientAllergenInfo.allergenCode; ypDitListHtml += ''; if (zdAllergeCodes == null) { ypDitListodes = patientAllergenInfo.allergenCode; ypDitListTexts = patientAllergenInfo.allergenName; } else { ypDitListodes += "," + patientAllergenInfo.allergenCode; ypDitListTexts += "," + patientAllergenInfo.allergenName; } } } $("#editZdAllergen").empty(); $('#editZdAllergen').append(zdAllergenHtml); $('#editZdAllergen').selectpicker('refresh'); $("#editYpDitList").empty(); $('#editYpDitList').append(ypDitListHtml); $('#editYpDitList').selectpicker('refresh'); $("#editZdAllergen").selectpicker('val', zdAllergen); $("#editZdAllergen").selectpicker('refresh'); $("#editYpDitList").selectpicker('val', ypDitList); $("#editYpDitList").selectpicker('refresh'); $("#editZdAllergen").attr("selectedCodes", zdAllergeCodes); $("#editZdAllergen").attr("selectedTexts", zdAllergeTexts); $("#editYpDitList").attr("selectedCodes", ypDitListodes); $("#editYpDitList").attr("selectedTexts", ypDitListTexts); } var tentativeDiagnosis = mzBlRecord.tentativeDiagnosis == null ? "" : mzBlRecord.tentativeDiagnosis; if ((mzBlRecord.icdCode == null || mzBlRecord.icdCode == "") && mzBlRecord.icdText != null && mzBlRecord.icdText != "") { if (tentativeDiagnosis == null || tentativeDiagnosis == "") { tentativeDiagnosis = mzBlRecord.icdText; } else { tentativeDiagnosis = mzBlRecord.icdText + " " + tentativeDiagnosis; } } $("#edittentativeDiagnosis").val(tentativeDiagnosis); $("#editEmrJkjy").val(mzBlRecord.emrJkjy == null ? "" : mzBlRecord.emrJkjy); $("#bl_weight").val(mzBlRecord.weight == 0 ? null : mzBlRecord.weight); $("#bl_temperature").val(mzBlRecord.temperature == 0 ? null : mzBlRecord.temperature); $("#bl_sphygmus").val(mzBlRecord.sphygmus == 0 ? null : mzBlRecord.sphygmus); $("#bl_breathe").val(mzBlRecord.breathe == 0 ? null : mzBlRecord.breathe); $("#bl_pressure_high").val(mzBlRecord.pressureHigh == 0 ? null : mzBlRecord.pressureHigh); $("#bl_pressure_floor").val(mzBlRecord.pressureFloor == 0 ? null : mzBlRecord.pressureFloor); $("#bl_pressure_high_left").val(mzBlRecord.pressureHighLeft == 0 ? null : mzBlRecord.pressureHighLeft); $("#bl_pressure_floor_left").val(mzBlRecord.pressureFloorLeft == 0 ? null : mzBlRecord.pressureFloorLeft); if (mzBlRecord.emrProcess != null && mzBlRecord.emrProcess != "") { var reg = new RegExp("
", "g");//g,表示全部替换。 var editEmrProcess = mzBlRecord.emrProcess.replace(reg, "\n"); reg = new RegExp(" ", "g");//g,表示全部替换。 editEmrProcess = editEmrProcess.replace(reg, ""); $("#editEmrProcess").val(editEmrProcess); } else { $("#editEmrProcess").val(""); } if (type == 1) { $("#mzBlRecorTitle").html("门诊病历【编辑】"); $("#setOtherEmrProcess").removeClass("in").addClass("hide"); $("#openBlRecordModel").removeClass("hide").addClass("in"); $("#setEmrProcess").removeClass("hide").addClass("in"); $("#visitingDetailModal").modal("hide"); } else if (type == 2 || type == 3) { $("#mzBlRecorTitle").html("门诊病历【查询】"); if(type==2){ $("#setOtherEmrProcess").removeClass("hide").addClass("in"); }else { $("#setOtherEmrProcess").removeClass("in").addClass("hide"); } $("#openBlRecordModel").removeClass("in").addClass("hide"); $("#setEmrProcess").removeClass("in").addClass("hide"); //因为预览的时候,关闭预览框没有清空数据,且 此时基础数据的病历次数被清空 if ($("#mzBlTimes").val() != null && $("#mzBlTimes").val() != "" && ($("#baseMzBlTimes").val() == null || $("#baseMzBlTimes").val() == "")) { $("#baseMzBlTimes").val($("#mzBlTimes").val()); } $("#otherBlRecordModal").modal("hide"); } $("#mzBlTimes").val(mzBlRecord.times); $("#editMzBlRecordModal").modal(); } else { errorMesage(res); } } }); } function queryDataS(params) { var rePortRangeArr = getRePortRangeArr1(); var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 patientId: coreId, times: '-1', // 这里需要根据patientId精确查找病人的病历,而不是模糊查询 beginTime: rePortRangeArr[0], endTime: rePortRangeArr[1], pageSize: params.limit, //页面大小 pageIndex: params.offset / params.limit, //页码 }; return temp; } function getRePortRangeArr1() { var rePortRange = $('#reportRangeList span').html(); var rePortRangeArr = rePortRange.split(" - "); rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00" rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59" return rePortRangeArr; } /** * 清空区域 */ function clearInput() { $("#editPatientId").text(null); $("#editPatientName").text(null); $("#editPatientGender").text(null); $("#editPatientAge").text(null); $("#editEmrChiefComplaint").val(null); $("#editEmrHpi").val(null); $("#editEmrPs").val(null); $("#editPersonalHistory").val(null); $("#editFzZl").val(null); $("#editCrbHistory").val(null); $("#editFamilyHistory").val(null); $("#editObstericalHistory").val(null); $("#bl_weight").val(null); $("#bl_sphygmus").val(null); $("#bl_breathe").val(null); $("#bl_pressure_high").val(null); $("#bl_pressure_floor").val(null); $("#bl_pressure_high_left").val(null); $("#bl_pressure_floor_left").val(null); $("#editQtjc").val(null); $("#editZd").selectpicker('val', null); $("#editZd").selectpicker('refresh'); $("#edittentativeDiagnosis").val(null); $("#editEmrProcess").val(null); $("#editEmrJkjy").val(null); $("#mzBlTimes").val(null); } function initSelectHistory() { $('#reportRangeList span').html(moment().subtract(mzHistoryDays, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD')); //select 从后台加载数据,并保留之前选择的内容 dynamicSelectWithOri("editZd", '/thmz/getAllZdIcdCommonParams?commonParams=',false); //过敏源 dynamicSelectWithOri("editZdAllergen", '/thmz/getZdAllergenListByCode?code=', false); //药品列表 dynamicSelectWithOri("editYpDitList", '/thmz/getYpZdDictListByCode?code=', false); } // 退药药品追溯码匹配 function matchingDrugCodg(patientId, times, receiptNo, orderNo, realNo){ if(yf.xyFlag !== '1'){ errorMesage("暂时仅门诊西药房发药才进行配药处理!"); } let isXy = yf.xyFlag === '1'; let tem = { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, realNo: realNo, groupNo: groupNo, }; // 保存当前退药数据到全局变量,供匹配检查使用 window.currentRefundData = $table.bootstrapTable('getData'); $('#ty_table_detail').bootstrapTable("destroy"); $('#ty_table_detail').bootstrapTable({ url: '/thmz/getMzDrugTracCodgData', //请求后台的URL(*) method: 'POST', //请求方式(*) striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: JSON.stringify(tem), //传递参数(*) sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 50, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 uniqueId: "ID", //每一行的唯一标识,一般为主键列 showToggle: false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: false, // rowStyle:rowStyleCharge,//通过自定义函数设置行样式 ajaxOptions: { headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") } }, columns: [ { field: 'drugName', title: '品名', align: "center", valign: 'middle', }, { field: 'specification', title: '规格', align: "center", valign: 'middle', }, { field: 'abbrName', title: '生产厂家', align: "center", valign: 'middle', visible: isXy }, { field: 'unitPrice', title: '单价', align: "center", valign: 'middle', }, { field: 'drugTracCodg', title: '药品追溯码', width: '270', align: "left", valign: 'middle', formatter: function (value, row, index) { return isEmpty(value)?'':value } }, { field: 'matchOk', title: '匹配结果', align: "center", valign: 'middle', } ], responseHandler: function (res) { if (res === '401' || res === 401) { window.location.href = '/thmz/login/view' return; } let re = eval(res); if (re.data.length > 0) { $("#patientIdTy").val(re.data[0].patientId); $("#timesTy").val(re.data[0].times); $("#nameTy").val(re.data[0].name); $("#employeeNameLabelTy").val(re.data[0].employeeName); $("#warnDeptNameLabelPy").val(re.data[0].warnDeptName); $("#smMatchTy").val(""); } if (re.code === -1) { if (re.message != null && re.message !== '') { new PNotify({ title: '错误提示', text: re.message, type: 'error', hide: true, styling: 'bootstrap3' }); } return { "total": 0,//总页数 "rows": {} //数据 }; } return { "total": re.data.length,//总页数 "rows": re.data //数据 }; }, }); $("#tyModal").modal(); // 弹窗打开后自动聚焦到扫码输入框 $("#tyModal").on('shown.bs.modal', function () { setTimeout(function() { $("#smMatchTy").focus(); }, 100); }); // 防抖定时器 let matchDebounceTimer = null; // 支持回车键触发匹配 $("#smMatchTy").on('keypress', function(e) { if (e.which === 13) { // 回车键 e.preventDefault(); // 清除防抖定时器 if (matchDebounceTimer) { clearTimeout(matchDebounceTimer); } matchDrugCodg(); } }); // 输入防抖处理 $("#smMatchTy").on('input', function() { let code = $(this).val().trim(); // 清除之前的定时器 if (matchDebounceTimer) { clearTimeout(matchDebounceTimer); } // 如果输入框有值,设置0.5秒防抖 if (code && code !== '') { matchDebounceTimer = setTimeout(function() { matchDrugCodg(); }, 500); } }); // 防止onchange和防抖冲突 $("#smMatchTy").on('change', function() { // 清除防抖定时器,避免重复执行 if (matchDebounceTimer) { clearTimeout(matchDebounceTimer); matchDebounceTimer = null; } }); // 扫码输入框获得焦点时全选文本 $("#smMatchTy").on('focus', function() { $(this).select(); }); } // 匹配扫码 function matchDrugCodg(){ if(isTyOk){ isTyOk = false; } let code = $("#smMatchTy").val().trim().replace(/[\r\n]/g,""); // 检查输入是否为空 if (!code) { errorMesageSimaple("请输入或扫描药品追溯码!"); $("#smMatchTy").focus(); return false; } let tyTable = $('#ty_table_detail').bootstrapTable("getData"); let matched = false; for (let i = 0; i < tyTable.length; i++) { if(tyTable[i].drugTracCodg === code){ if(!isEmpty(tyTable[i].matchOk)){ warningMesageSimaple("已匹配,请勿重复扫码!"); // 重复匹配时清空输入框,准备扫描下一个 $("#smMatchTy").val("").focus(); return false; } $('#ty_table_detail').bootstrapTable('updateCell', { index: i, field: "drugTracCodg", value: '' + tyTable[i].drugTracCodg + '' }); $('#ty_table_detail').bootstrapTable('updateCell', { index: i, field: "matchOk", value: '已匹配' }); successMesageSimaple("药品追溯码匹配成功!"); matched = true; // 匹配成功后清空输入框,准备扫描下一个 $("#smMatchTy").val("").focus(); break; } } if (!matched) { errorMesageSimaple("在退药列表未找到条码对应的药品,请核对!"); // 匹配失败时清空输入框 $("#smMatchTy").val("").focus(); } } // 确认匹配之后可以退药了 function matchTp(){ // 获取退药表格数据 let tyTable = $('#ty_table_detail').bootstrapTable("getData"); let refundData = window.currentRefundData || $table.bootstrapTable('getData'); // ========== 调试日志开始 ========== console.log('=== matchTp 调试信息 ==='); console.log('refundData 样本:', refundData.length > 0 ? refundData[0] : '空数组'); console.log('tyTable 样本:', tyTable.length > 0 ? tyTable[0] : '空数组'); // ========== 调试日志结束 ========== let needRefundItems = []; // 找出需要退药的药品 refundData.forEach(function (item, index, arr) { if (item.dec_amount != 0) { needRefundItems.push({ chargeItemCode: item.charge_item_code, serial: item.serial, itemNo: item.item_no }); } }); // 检查每个需要退药的药品是否都已匹配 let allMatched = true; let unmatchedItems = []; for (let i = 0; i < tyTable.length; i++) { let item = tyTable[i]; // 检查这个药品是否需要退药 let needRefund = needRefundItems.some(function(refundItem) { let matchResult = refundItem.chargeItemCode === item.chargeItemCode && refundItem.serial === item.serial && refundItem.itemNo === item.itemNo; // ========== 调试日志开始 ========== if (i === 0) { // 只打印第一个匹配的调试信息 console.log('=== 匹配检查调试 ==='); console.log('tyTable item 字段信息:'); console.log('- item.chargeItemCode:', item.chargeItemCode); console.log('- item.serial:', item.serial); console.log('- item.itemNo:', item.itemNo); console.log('- item.drugName:', item.drugName); console.log('- item.matchOk:', item.matchOk); console.log('refundItem 字段信息:'); console.log('- refundItem.chargeItemCode:', refundItem.chargeItemCode); console.log('- refundItem.serial:', refundItem.serial); console.log('- refundItem.itemNo:', refundItem.itemNo); console.log('匹配结果:', matchResult); } // ========== 调试日志结束 ========== return matchResult; }); if (needRefund) { // 检查是否已匹配 if (isEmpty(item.matchOk) || item.matchOk.indexOf('已匹配') === -1) { allMatched = false; unmatchedItems.push(item.drugName || '未知药品'); } } } if (!allMatched) { return errorMesageSimaple('还有药品未匹配追溯码:' + unmatchedItems.join('、') + ',请完成所有匹配后再确认!'); } if (!confirm("确定对当前处方所有退药的药品匹配成功?")) { return; } if(!isTyOk){ isTyOk = true; } $("#tyModal").modal('hide'); } function printPrescription(patientId, times, orderNo) { if (mzCfPrintIndex == null || ekCfPrintIndex == null || jzCfPrintIndex == null) { return errorMesageSimaple('打印机参数未设置,请在发药参数设置中设置'); } var tem = { patientId: patientId, times: times, orderNo: orderNo, groupNo: groupNo }; $.ajax({ type: "POST", url: '/thmz/getPrintPrescriptionData', contentType: "application/json;charset=UTF-8", dataType: "json", headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: JSON.stringify(tem), success: function (res) { if (res == '401' || res == 401) { window.location.href = '/thmz/login/view' return; } if (res.code == 0) { //setPrint();//初始化默认打印机 printView(res.data); successMesage(res); } else { errorMesage(res); } } }); } function groupByGroupProperty(array) { return array.reduce((acc, current) => { const group = current.groupOrder; acc[group] = acc[group] || []; acc[group].push(current); return acc; }, {}); } function printView(data) { $('.sjh').remove(); $('#print_view input').attr("value", ""); var age = 0; if (null != data) { for (var key in data) { $("#" + key + "").attr("value", data[key]); } age = getBirthSlot(data['birthDay'], data.list[0].priceTime); $("#age").attr("value", age); } var list = data.list; // console.log('list',list); if(list.length > 0) { let gruop = groupByGroupProperty(list); for (const key in gruop) { let current = gruop[key] // console.log('current',current); if (current) { if(current.length == 1){ current[0].groupSign = '⊐' } else { current.forEach((item,index) => { if(index == 0) { item.groupSign = '⌝' } else if(index == current.length - 1) { item.groupSign = '⌟' } else { item.groupSign = '' } }) } } } // console.log('gruop',gruop); } if (age.substring(0, age.indexOf('岁')) < 18 && yf.xyFlag === '1') { $('#drugFlag').attr("value", "儿科"); printIndex = ekCfPrintIndex; } else if (data.warnDeptName.indexOf("急诊") != -1 && yf.xyFlag === '1') { $('#drugFlag').attr("value", "急诊"); printIndex = jzCfPrintIndex; } else { $('#drugFlag').attr("value", "普通"); printIndex = mzCfPrintIndex; } if (list[0].drugFlag == 2 || list[0].drugFlag == 3) { $('#drugFlag').attr("value", "麻、精一"); } else if (list[0].drugFlag == 4) { $('#drugFlag').attr("value", "精二"); } else if(list[0].drugFlag == 1){ $('#drugFlag').attr("value", "毒"); } JsBarcode("#cfBarcode", data.patientId+'|'+data.times+'|'+data.orderNo, { lineColor: '#000000', //线条颜色 width: 1, //线宽 height: 26, //条码高度 displayValue: false, //是否显示文字信息 }); $('#priceTime').attr("value", format(list[0].priceTime, "yyyy-MM-dd HH:mm")); // 获取医生签名 getAjaxRequest("/thmz/getDoctorSignatureImage",{doctorCode:data.employeeCode},false,function (postRes) { if(postRes.code == 0){ $("#employeeName").html("") }else { $('#employeeName').html(data.employeeName); } }) $('#sex').attr("value", getSex(data.sex)); $('#nameCf').attr("value", data.name); $('#patientIdCf').attr("value", data.patientId); $('#totalPrice').html(data.totalPrice + '元'); if (data.ybCardNo == null || data.ybCardNo == '') { $('#ybCardNo').attr("value", data.icCardNo); } $('#tbody_yp').html(yf.xyFlag === '1' ? getXyPrintHtml(list) : getZyPrintHtml(list)); $("#patientId").val(''); // LODOP = getLodop(); // LODOP.PRINT_INITA(6, 0, "140mm", "202mm", "铭和医院处方笺"); // LODOP.SET_PRINT_STYLE("FontSize", 28); //字体大小 // //设置默认打印机 // //设置默认打印机 // LODOP.SET_PRINTER_INDEX(printIndex); // LODOP.SET_PRINT_PAGESIZE(1, '140mm', '202mm', "CreateCustomPage"); // LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true) // 整宽不变形 // LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "140mm"); // LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "202mm"); // LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "铭和医院处方笺");//对新建的纸张重命名 // let strStyle=''; // let font = 'font-size: 12px;padding: 2px 2px;'; // if(yf.xyFlag !== '1'){ // strStyle = ""; // } // LODOP.ADD_PRINT_HTM("2mm", "4mm", "140mm", "202mm", strStyle + $("div[id='print_view']").html()); // LODOP.PREVIEW(); // LODOP.NewPageA();//下一页 LODOP = getLodop(); // 初始化打印区域,参数:top, left, width, height(横向打印时宽高可保持原比例) LODOP.PRINT_INITA(6, 0, "202mm", "202mm", "铭和医院处方笺"); // 横向建议交换宽高值适配布局 // 设置字体大小 LODOP.SET_PRINT_STYLE("FontSize", 28); // 设置默认打印机 LODOP.SET_PRINTER_INDEX(printIndex); // 关键:设置打印方向为横向(1=横向),并保持自定义纸张尺寸 // 横向打印时,宽高参数建议按 "实际高度, 实际宽度" 传递更符合视觉习惯 LODOP.SET_PRINT_PAGESIZE(2, 0, 0, "square202"); // LODOP.SET_PRINT_PAGESIZE(2, 0, 0, "A4"); // // 整宽不变形模式(横向适配关键) // LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true); // // // 背景图尺寸适配横向纸张 // LODOP.SET_SHOW_MODE("BKIMG_WIDTH", "202mm"); // LODOP.SET_SHOW_MODE("BKIMG_HEIGHT", "140mm"); // 核心配置:同时宽度和高度自适应铺满 LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOWFLOW', true); // 宽度铺满 // LODOP.SET_PRINT_MODE('FULL_HEIGHT_FOR_OVERFLOWFLOW', true); // 高度铺满 LODOP.SET_PRINT_MODE('AUTO_SCALE', true); // 自动缩放适配 // 自定义纸张重命名 LODOP.SET_PRINT_MODE("CREATE_CUSTOM_PAGE_NAME", "铭和医院处方笺"); let strStyle = ''; let font = 'font-size: 12px;padding: 2px 2px;'; if (yf.xyFlag !== '1') { strStyle = ""; } // 添加HTML内容,参数:top, left, width, height(使用横向纸张的宽高) // 宽度设为"100%"可自动适配横向纸张宽度 let printContent = document.getElementById('print_view').innerHTML // LODOP.ADD_PRINT_HTM("2mm", "4mm", "100%", "100%", strStyle + $("div[id='print_view']").html()); LODOP.ADD_PRINT_HTM("2mm", "4mm", "100%", "100%", strStyle + printContent); LODOP.SET_PRINT_MODE("RESELECT_ORIENT",true); LODOP.SET_PRINT_MODE("RESELECT_PAGESIZE", true); // 预览打印(横向效果) // LODOP.PREVIEW(); // LODOP.NewPageA();//下一页 // 如需多页,建议在添加内容前调用NewPageA(),此处预览后无需调用 LODOP.NewPageA(); LODOP.PREVIEW(); } function getXyPrintHtml(list) { let tr = ''; for (let i = 0; i < list.length; i++) { let printName = list[i].printName == null ? "" : list[i].printName; let tryResult = ''; let tryFlag = ''; if(list[i].paySelf == 1 || list[i].ybZfFlag == 1){ continue } if (list[i].tryResult !== null && list[i].tryResult.trim() === '0') { tryResult = '(阴性)'; } else if (list[i].psFlag === '1' && list[i].tryFlag === '0') {//药品需要皮试,处方未点需要皮试 tryResult = '(免试)'; } if (list[i].tryFlag === '1') { tryFlag = '(需皮试)'; } var number = i + 1; let manufactoryName = list[i].manufactoryName == null || list[i].manufactoryName === '' ? '' : '(' + list[i].manufactoryName + ')'; tr += '' + ' ' + number + "." + ' ' + ' ' + tryResult + list[i].drugName + ' ' + ' ' + list[i].specification + ' ' + ' ×' + ' ' + list[i].quantity + ' ' + ' ' + list[i].ypUnitName + ' ' + ' ' + list[i].groupSign + ' ' + '' + '' + ' ' + ' ' + ' 用法:' + list[i].drugQuan + " " + list[i].drugUnitName + '/次  ' + list[i].frequencyName + '  ' + printName + ' ' + ' ' + tryFlag + ' ' + '' + '' + ' ' + ' ' + ' ' + (list[i].instructionText == null ? '' : list[i].instructionText) + ' ' + '' + '' + ' ' + ' ' + // ' ' + '货位号:' + list[i].location + // ' ' + // ' 货位号:' + list[i].location + // ' ' + // ' 零售价:' + list[i].packRetprice + ' 元/' + list[i].ypUnitName + // ' ' + ''; } $('#yxwk').remove(); if (list.length < 5) { $('#div_yp_cf').append('以下为空'); } return tr; } function getZyPrintHtml(list) { let tr = ''; for (let i = 0; i < list.length;) { tr += '' + '' + list[i].drugName + (list[i].instructionText == null || list[i].instructionText === '' ? '' : '【' + list[i].instructionText + '】') + '' + '' + list[i].specification + '' + '' + list[i].quantity + list[i].ypUnitName + ''; if (i + 1 < list.length) { tr += '' + list[i + 1].drugName + (list[i + 1].instructionText == null || list[i + 1].instructionText === '' ? '' : '【' + list[i + 1].instructionText + '】') + '' + '' + list[i + 1].specification + '' + '' + list[i + 1].quantity + list[i + 1].ypUnitName + '' + ''; } i = i + 2; } let cydj = isEmpty(list[0].cyDj)?'':list[0].cyDj; tr += '' + '× ' + list[0].drugWin + ' 副  '+cydj+'' + ''; let yf = ''; yf += isEmpty(list[0].cyMtjs)?'':'每天'+list[0].cyMtjs+'剂,'; yf += isEmpty(list[0].cyJsl)?'':list[0].cyJssm+list[0].cyJsl+'ml,'; yf += isEmpty(list[0].cyZql)?'':'煮取量'+list[0].cyZql+'ml,'; yf += isEmpty(list[0].cyFj)?'':'复煎'+list[0].cyFj+'次。'; yf += isEmpty(list[0].cyFfcs)?'':'分'+list[0].cyFfcs+'次,'; yf += isEmpty(list[0].cyFysm)?'':list[0].cyFysm; tr += '' + ''+yf+'' + ''; return tr; } function getAjaxRequest (url, data,async, callBack) { requestAs(url, "GET", data, async,"application/x-www-form-urlencoded;charset=UTF-8", function(res) { return typeof callBack == "function" && callBack(res) }) } function requestAs (url, method, data = {},async, contentType, back){ $.ajax({ url: url, type: method, data: data, async: async, headers:{'Accept': 'application/json','Authorization':'Bearer '+ localStorage.getItem("token")}, contentType: contentType, dataType: "json", success: function(res){ return typeof back == "function" && back(res); }, error: function(error) { console.log(error) return typeof back == "function" && back(null); } }); } /** * 新的requestAs函数,用于药品追溯码功能 * @param url 请求URL * @param method 请求方法 * @param data 请求数据 * @param async 是否异步 * @param contentType 内容类型 * @param back 回调函数 */ function requestAsNew (url, method, data = {},async, contentType, back){ $.ajax({ type: method, url: url, contentType: contentType, dataType: "json", async: async, headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")}, data: data, success: function (res) { back(res); }, error: function () { back(null); } }); } /** * 保存单元格数据 * @param table 表格对象 * @param index 行索引 * @param field 字段名 * @param value 新值 */ function saveCellData(table, index, field, value) { table.bootstrapTable('updateCell', { index: index, field: field, value: value }); } $(document).ready(function () { // 初始化全局变量 window.currentRefundData = null; isTyOk = false; initTbTable(); }); /** * 验证并添加追溯码 * @param tracCodg 追溯码 * @param rowData 行数据 * @param $element 单元格元素 */ function validateAndAddTracCodg(tracCodg, rowData, $element) { // 构建验证数据,只包含可以从rowData中获取的字段 let validateData = { drugTracCodg: tracCodg, // 这是用户扫码输入的追溯码 patientId: rowData.patientId, times: rowData.times, receiptNo: rowData.receiptNo, orderNo: rowData.orderNo, itemNo: rowData.itemNo, chargeItemCode: rowData.chargeItemCode, drugName: rowData.drugname, specification: rowData.specification }; // 添加调试日志 console.log('验证追溯码参数:', validateData); console.log('行数据:', rowData); $.ajax({ type: "POST", url: '/thmz/validateDrugTracCodgForDispensing', contentType: "application/json;charset=UTF-8", dataType: "json", headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") }, data: JSON.stringify(validateData), success: function (res) { console.log('验证响应:', res); if (res.code == 0 && res.data && res.data.isValid) { // 验证成功,添加到追溯码集合 addTracCodgToCell(tracCodg, $element); successMesage(res); // 验证成功后,保持单元格可编辑状态,用户可以继续扫码 $element.focus(); } else { // 验证失败 errorMesage(res); // 验证失败时,清理掉无效的追溯码 let currentContent = $element.html(); let codes = currentContent.split('
').filter(code => code.length > 0); // 去掉最后一个追溯码(无效的追溯码) if (codes.length > 0) { codes.pop(); // 重新设置单元格内容 let newContent = codes.join('
'); if (newContent) { newContent += '
'; } $element.html(newContent); // 保持焦点在单元格末尾 $element.focus(); let range = document.createRange(); let selection = window.getSelection(); range.selectNodeContents($element[0]); range.collapse(false); selection.removeAllRanges(); selection.addRange(range); } } }, error: function (xhr, status, error) { console.error('验证请求失败:', error); errorMesageSimaple("验证请求失败"); // 错误时也清理掉无效的追溯码 let currentContent = $element.html(); let codes = currentContent.split('
').filter(code => code.length > 0); // 去掉最后一个追溯码(无效的追溯码) if (codes.length > 0) { codes.pop(); // 重新设置单元格内容 let newContent = codes.join('
'); if (newContent) { newContent += '
'; } $element.html(newContent); // 保持焦点在单元格末尾 $element.focus(); let range = document.createRange(); let selection = window.getSelection(); range.selectNodeContents($element[0]); range.collapse(false); selection.removeAllRanges(); selection.addRange(range); } } }); } /** * 添加追溯码到单元格 * @param tracCodg 追溯码(单个追溯码,不包含分隔符) * @param $element 单元格元素 */ function addTracCodgToCell(tracCodg, $element) { let currentValue = $element.html(); console.log('addTracCodgToCell 开始'); console.log('传入的追溯码:', tracCodg); console.log('当前单元格内容:', currentValue); if (isEmpty(currentValue)) { // 如果单元格为空,直接设置追溯码 console.log('单元格为空,直接设置追溯码'); $element.html(tracCodg); } else { // 检查是否已存在该追溯码 let existingCodes = currentValue.split('
'); console.log('已存在的追溯码列表:', existingCodes); console.log('是否已存在:', existingCodes.includes(tracCodg)); if (!existingCodes.includes(tracCodg)) { // 如果不存在,添加
分隔符后追加 let newValue = currentValue + '
' + tracCodg; console.log('添加追溯码,新内容:', newValue); $element.html(newValue); } else { // 追溯码已存在,显示提示 console.log('追溯码已存在,显示提示'); if (typeof PNotify !== 'undefined') { new PNotify({ title: '提示', text: '该追溯码已添加', type: 'info', delay: 2000 }); } } } console.log('addTracCodgToCell 结束,最终单元格内容:', $element.html()); } /** * 调用医保商品销售接口 * @param realNo 流水号 * @param orderNo 处方号 * @param receiptNo 发票分票号 * @param times 次数 * @param patientId 病人ID * @param name 病人姓名 */ function callYbSaleGoodsItem(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo) { // 获取处方明细数据 let tableData = $("#tb_table_right").bootstrapTable('getData'); console.log("callYbSaleGoodsItem11111111111111111111111",tableData) if (!tableData || tableData.length === 0) { console.log('没有处方明细数据,跳过医保接口调用'); return; } // 获取当前用户信息(药师信息) let currentUserName = localStorage.getItem('userName') || ''; let currentUserId = localStorage.getItem('userID') || ''; // 获取当前时间 let currentTime = new Date(); let selRetnTime = currentTime.getFullYear() + '-' + String(currentTime.getMonth() + 1).padStart(2, '0') + '-' + String(currentTime.getDate()).padStart(2, '0') + ' ' + String(currentTime.getHours()).padStart(2, '0') + ':' + String(currentTime.getMinutes()).padStart(2, '0') + ':' + String(currentTime.getSeconds()).padStart(2, '0'); // 为每个药品调用一次医保接口 for (let i = 0; i < tableData.length; i++) { let item = tableData[i]; // 构建关联字段组合(用于关联发药记录) let currentPatientId = item.patientId || patientId; let currentTimes = item.times || times; let currentReceiptNo = item.receiptNo || receiptNo; let currentOrderNo = item.orderNo || orderNo; let chargeItemCode = item.chargeItemCode; let currentRealNo = item.realNo || realNo; console.log('发药关联键:', {patientId: currentPatientId, times: currentTimes, receiptNo: currentReceiptNo, orderNo: currentOrderNo, chargeItemCode, realNo: currentRealNo}); // 参数验证 // 从处方明细数据中获取开方医师姓名 console.log('处方明细数据item:', item); // 调试日志 console.log('doctorName字段:', item.doctorName); // 调试日志 console.log('employeeName字段:', item.employeeName); // 调试日志 let doctorName = item.doctorName || item.employeeName || ''; if (!doctorName) { console.warn('开方医师姓名为空,使用默认值,item数据:', item); doctorName = '未知医师'; } else { console.log('成功获取医生姓名:', doctorName); } if (!currentUserName) { console.warn('药师姓名为空,使用默认值'); currentUserName = '未知药师'; } // 构建医保接口参数 let ybData = { // 关联字段 - 直接传递到医保接口 patientId: currentPatientId, times: currentTimes, receiptNo: currentReceiptNo, orderNo: currentOrderNo, chargeItemCode: chargeItemCode, realNo: currentRealNo, // 医疗目录编码(医保编码) medListCodg: item.nationalCode, // 开方医师姓名 prscDrName: doctorName, // 药师姓名 pharName: currentUserName, // 药师执业资格证号(取当前操作者的药师执业资格证号) pharPracCertNo: localStorage.getItem('pharPracCertNo') || '', // 销售/退货经办人姓名 selRetnOpterName: currentUserName, // 就诊结算类型(1-医保结算 2-自费结算) // 根据处方类型判断:普通处方(1)、特门处方(3)、GCP实验(4)为自费,门诊统筹(2)为医保 mdtrtSetlType: (item.mdtrtSetlType && item.mdtrtSetlType === 1) ? '1' : '2', // 处方药标志 // rxFlag: item.rxFlag || '1', rxFlag: "1",//医院默认都是处方药 // 拆零标志(0-否;1-是) trdnFlag: (item.serial === '99') ? '0' : '1', // 患者相关参数(医保接口需要) // 人员证件类型 psnCertType: item.psnCertType || '01', // 证件号码 certno: item.certno || '', // 人员姓名 psnName: item.psnName || item.name || name || '', }; // 追溯码信息 let drugtracinfo = [] // 处理追溯码 if (item.drugTracCodg && item.drugTracCodg !== '') { let tracCodes = item.drugTracCodg.split('
').filter(code => code !== ''); for (let j = 0; j < tracCodes.length; j++) { drugtracinfo.push({ drugTracCodg: tracCodes[j] }); } } // 如果没有追溯码,添加空数组(保持数据结构一致) if (drugtracinfo.length === 0) { drugtracinfo = []; } console.log('调用医保接口,药品:', item.drugname, '参数:', ybData); let param = { selinfoSold: ybData, drugtracinfo: drugtracinfo } // 调用医保接口 $.ajax({ type: "POST", url: '/thmz/Yb/saleGoodsItem', contentType: "application/json;charset=UTF-8", dataType: "json", headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") }, data: JSON.stringify(param), success: function (res) { console.log('医保接口调用成功:', res); if (res.code !== 0) { console.error('医保接口调用失败:', res.message); // 医保接口失败不影响发药流程,只记录日志 } }, error: function (xhr, status, error) { console.error('医保接口调用失败:', error); // 医保接口失败不影响发药流程,只记录日志 } }); } } /** * 调用医保商品退货接口 * @param realNo 流水号 * @param orderNo 处方号 * @param receiptNo 发票分票号 * @param times 次数 * @param patientId 病人ID * @param name 病人姓名 */ function callYbReturnGoodsItem(realNo, orderNo, receiptNo, times, patientId, name) { // 获取退药明细数据 - 直接使用退药表格数据 let tableData = window.currentRefundData || $table.bootstrapTable('getData'); if (!tableData || tableData.length === 0) { console.log('没有退药明细数据,跳过医保接口调用'); return; } // 获取当前用户信息(药师信息) let currentUserName = localStorage.getItem('userName') || ''; let currentUserId = localStorage.getItem('userID') || ''; // 获取当前时间 let currentTime = new Date(); let selRetnTime = currentTime.getFullYear() + '-' + String(currentTime.getMonth() + 1).padStart(2, '0') + '-' + String(currentTime.getDate()).padStart(2, '0') + ' ' + String(currentTime.getHours()).padStart(2, '0') + ':' + String(currentTime.getMinutes()).padStart(2, '0') + ':' + String(currentTime.getSeconds()).padStart(2, '0'); // 为每个退药药品调用一次医保接口 console.log('开始处理退药数据,总数:', tableData.length); for (let i = 0; i < tableData.length; i++) { let item = tableData[i]; console.log('处理第', i + 1, '条退药记录:', { 'drugname': item.drugname, 'dec_amount': item.dec_amount, 'charge_item_code': item.charge_item_code, 'serial': item.serial, 'item_no': item.item_no }); // 只处理有退药数量的药品 if (item.dec_amount == 0) { console.log('跳过数量为0的药品:', item.drugname); continue; } // 获取医生姓名 let doctorName = item.doctor_name || item.name || ''; if (!doctorName) { doctorName = '未知医生'; } // 构建医保接口参数 let ybData = { // 关联字段 - 直接传递到医保接口 patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, chargeItemCode: item.charge_item_code, realNo: realNo, // // 医疗目录编码(医保编码) // medListCodg: item.nationalCode || 'NMLC999', // 销售/退货经办人姓名(必填参数) selRetnOpterName: currentUserName, // // 销售/退货数量 // selRetnCnt: item.dec_amount, // // 销售/退货时间 // selRetnTime: selRetnTime, // // 最终成交单价 // finlTrnsPric: item.unit_price, // // 处方药标志 // rxFlag: item.rxFlag || '1', // rxFlag: '1',//医院默认都是处方药 // // 拆零标志(0-否;1-是) // trdnFlag: item.clFlag || '0', // 追溯码信息 drugtracinfo: [] }; // 主动获取追溯码信息(退药后从退药追溯码表查询) let tracCodgParams = { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, chargeItemCode: item.charge_item_code, serial: item.serial, itemNo: item.item_no, groupNo: item.group_no || groupNo }; console.log("调用退药医保接口tracCodgParams000000000000000000000",tracCodgParams) // 调用追溯码查询接口(异步方式) // 注意:退药处理后,追溯码已转移到 mz_drug_trac_codg_ty 表 $.ajax({ type: "POST", url: '/thmz/getMzDrugTracCodgTyData', contentType: "application/json;charset=UTF-8", dataType: "json", headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") }, data: JSON.stringify(tracCodgParams), success: function (tracRes) { console.log('追溯码查询结果:', tracRes); if (tracRes.code === 0 && tracRes.data && tracRes.data.length > 0) { // 将追溯码添加到医保接口参数中 for (let k = 0; k < tracRes.data.length; k++) { let tracItem = tracRes.data[k]; if (tracItem.drugTracCodg && tracItem.drugTracCodg !== '') { ybData.drugtracinfo.push({ drugTracCodg: tracItem.drugTracCodg }); } } console.log('成功获取追溯码:', ybData.drugtracinfo); } else { console.log('未找到追溯码信息'); } // 追溯码查询完成后,调用医保接口 callYbReturnGoodsItemWithData(ybData, item); }, error: function (xhr, status, error) { console.error('追溯码查询失败:', error); // 即使追溯码查询失败,也要调用医保接口 callYbReturnGoodsItemWithData(ybData, item); } }); } } /** * 调用医保退药接口(带追溯码数据) * @param ybData 医保接口参数 * @param item 退药药品信息 */ function callYbReturnGoodsItemWithData(ybData, item) { // 如果没有追溯码,添加空数组(保持数据结构一致) if (ybData.drugtracinfo.length === 0) { ybData.drugtracinfo = []; } console.log('调用医保退药接口,药品:', item.drugname, '参数:', ybData); // 调用医保接口 $.ajax({ type: "POST", url: '/thmz/Yb/returnGoodsItem', contentType: "application/json;charset=UTF-8", dataType: "json", headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") }, data: JSON.stringify(ybData), success: function (res) { console.log('医保退药接口调用成功:', res); if (res.code !== 0) { console.error('医保退药接口调用失败:', res.message); // 医保接口失败不影响退药流程,只记录日志 } }, error: function (xhr, status, error) { console.error('医保退药接口调用失败:', error); // 医保接口失败不影响退药流程,只记录日志 } }); } /** * 验证追溯码数量与处方数量的匹配情况 * @param realNo 流水号 * @param orderNo 处方号 * @param receiptNo 发票分票号 * @param times 次数 * @param patientId 病人ID * @param name 病人姓名 * @param pharPracCertNo 药师执业资格证号 */ function validateTracCodgQuantity(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo) { // 获取处方明细表格数据 let tableData = $("#tb_table_right").bootstrapTable('getData'); let mismatchDetails = []; let hasMismatch = false; console.log('开始验证追溯码数量,表格数据:', tableData); // 遍历每种药品,检查追溯码数量 for (let i = 0; i < tableData.length; i++) { let drug = tableData[i]; let prescriptionQuantity = parseInt(drug.quantity) || 0; // 处方数量 let tracCodgCount = 0; // 追溯码数量 // 计算该药品的追溯码数量 if (!isEmpty(drug.drugTracCodg)) { // 按
分割追溯码,过滤空值 let tracCodgList = drug.drugTracCodg.split('
').filter(code => code.length > 0); tracCodgCount = tracCodgList.length; } console.log('药品:', drug.drugname, '处方数量:', prescriptionQuantity, '追溯码数量:', tracCodgCount); // 检查数量是否匹配 if (tracCodgCount !== prescriptionQuantity) { hasMismatch = true; let mismatchInfo = { drugName: drug.drugname, prescriptionQuantity: prescriptionQuantity, tracCodgCount: tracCodgCount, difference: tracCodgCount - prescriptionQuantity }; mismatchDetails.push(mismatchInfo); } } // 如果有不匹配的情况,显示确认弹框 if (hasMismatch) { // 存储发药参数,供确认后使用 window.pendingSendParams = { realNo: realNo, orderNo: orderNo, receiptNo: receiptNo, times: times, patientId: patientId, name: name, pharPracCertNo: pharPracCertNo }; // 构建不匹配详情HTML let detailsHtml = '
'; detailsHtml += ''; for (let i = 0; i < mismatchDetails.length; i++) { let detail = mismatchDetails[i]; let differenceText = ''; let rowClass = ''; if (detail.difference > 0) { differenceText = '多输入 ' + detail.difference + ' 个'; rowClass = 'warning'; } else if (detail.difference < 0) { differenceText = '缺少 ' + Math.abs(detail.difference) + ' 个'; rowClass = 'danger'; } detailsHtml += ''; detailsHtml += ''; detailsHtml += ''; detailsHtml += ''; detailsHtml += ''; detailsHtml += ''; } detailsHtml += '
药品名称处方数量追溯码数量差异
' + detail.drugName + '' + detail.prescriptionQuantity + '' + detail.tracCodgCount + '' + differenceText + '
'; // 显示确认弹框 $('#tracCodgMismatchDetails').html(detailsHtml); $('#tracCodgConfirmModal').modal('show'); console.log('追溯码数量不匹配,显示确认弹框:', mismatchDetails); } else { // 数量匹配,直接发药 console.log('追溯码数量匹配,直接发药'); sendMedicineProcessing(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo); } } /** * 调用撤销退药医保接口(销售接口) * @param realNo 流水号 * @param orderNo 处方号 * @param receiptNo 发票分票号 * @param times 次数 * @param patientId 病人ID * @param name 病人姓名 */ function callYbSaleGoodsItemForCancelRefund(realNo, orderNo, receiptNo, times, patientId, name, doctorName) { console.log('=== 开始调用撤销退药医保接口 ==='); // 获取当前用户信息(药师信息) let currentUserName = localStorage.getItem('userName') || ''; let pharPracCertNo = localStorage.getItem('pharPracCertNo') || ''; // 构建调用新接口的参数 let params = { patientId: patientId, times: times, receiptNo: receiptNo, orderNo: orderNo, groupNoOut: groupNo, // 添加医生姓名、药师姓名和药师执业资格证号 doctorName: doctorName, // 医生姓名,从处方明细中获取 pharName: currentUserName, // 药师姓名 pharPracCertNo: pharPracCertNo // 药师执业资格证号 }; console.log('撤销退药医保接口参数:', params); // 调用新的撤销退药医保接口 $.ajax({ type: "POST", url: '/thmz/cancelRefundWithYb', contentType: "application/json;charset=UTF-8", dataType: "json", headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token") }, data: JSON.stringify(params), success: function (res) { console.log('撤销退药医保接口调用结果:', res); if (res.code === 0) { successMesage(res); console.log('撤销退药医保接口调用成功'); } else { errorMesage(res); console.error('撤销退药医保接口调用失败:', res.message); } }, error: function (xhr, status, error) { console.error('撤销退药医保接口调用异常:', error); errorMesage({message: '撤销退药医保接口调用异常:' + error}); } }); }