//@ 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 += '' + detail.drugName + ' | ';
detailsHtml += '' + detail.prescriptionQuantity + ' | ';
detailsHtml += '' + detail.tracCodgCount + ' | ';
detailsHtml += '' + differenceText + ' | ';
detailsHtml += '
';
}
detailsHtml += '
';
// 显示确认弹框
$('#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});
}
});
}