更新代码:

1.病案示踪页面固定前两列
2.归档护士医生提交时强制勾选归档病历是否全部无纸化无扫描件
3.优化病案封存页面,及病案封存日志页面代码
4.病案室退回点击确认后自,退回信息模态框取消
————2021.02.25 王泽钦
master
wzqgit 4 years ago
parent 8a2dd74059
commit 531f9d7527

@ -129,7 +129,7 @@ public class storageController {
archiveMasterFollowing.setFollowingContent("病案封存");
archiveMasterFollowing.setFollowingType("11");
archiveMasterFollowing.setHandleTime(nowTime);
// archiveMasterFollowing.setHandleId();
archiveMasterFollowing.setHandleId(username);
archiveMasterFollowing.setHandleName(handleName);
archiveMasterFollowing.setRemark(emrFaultDetail.getRecallReason());
bol = archiveMasterFollowingService.insertSelective(archiveMasterFollowing);
@ -138,7 +138,7 @@ public class storageController {
archiveMasterFollowing.setFollowingContent("病案取消封存");
archiveMasterFollowing.setFollowingType("12");
archiveMasterFollowing.setHandleTime(nowTime);
// archiveMasterFollowing.setHandleId();
archiveMasterFollowing.setHandleId(username);
archiveMasterFollowing.setHandleName(handleName);
archiveMasterFollowing.setRemark(emrFaultDetail.getRecallReason());
bol = archiveMasterFollowingService.insertSelective(archiveMasterFollowing);

@ -48,5 +48,5 @@ public interface Archive_MasterMapper {
List<Archive_Master_Vo> selectOverdue(Archive_Master_Vo record);
//封存日志
List<Archive_Master> selectByFollowinglog(Archive_Master_Vo record);
List<Archive_Master_Vo> selectByFollowinglog(Archive_Master_Vo record);
}

@ -390,7 +390,7 @@ public class Archive_MasterServiceImpl implements Archive_MasterService {
@Override
public OffsetLimitPage selectByFollowinglog(Archive_Master_Vo record, Integer offset, Integer limit) {
PageHelper.offsetPage(offset, limit);
List<Archive_Master> list = archiveMasterMapper.selectByFollowinglog(record);
List<Archive_Master_Vo> list = archiveMasterMapper.selectByFollowinglog(record);
return new OffsetLimitPage((Page) list);
}

@ -1179,7 +1179,7 @@
</if>
</select>
<!--封存日志-->
<select id="selectByFollowinglog" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap">
<select id="selectByFollowinglog" parameterType="com.emr.entity.Archive_Master_Vo" resultMap="BaseResultMap2">
select m.INP_NO,m.VISIT_ID,m.name,m.sex,f.handle_name,f.handle_time, m.archiveState ,f.following_content from Archive_Master m
INNER JOIN Archive_Master_Following f on m.ID=f.master_id
where 1=1 AND f.following_type in('11','12')
@ -1213,5 +1213,6 @@
and f.handle_time &lt;= #{endDate,jdbcType=NCHAR}+ ' 23:59:59'
</when>
</choose>
ORDER BY f.handle_time desc
</select>
</mapper>

@ -448,4 +448,70 @@
archive_state=#{archiveState,jdbcType=NVARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
<!--封存查询-->
<select id="selectStorageByCol" parameterType="com.emr.entity.Emr_Fault_Vo" resultMap="BaseResultMap2">
select m.id as archive_detail_id,ISNULL(f.state, '未召回') state,f.recall_reason,m.inp_no,m.visit_id,m.name,m.dept_name,m.discharge_date_time,m.ArchiveState,m.sex,m.ID_NO,m.dept_admission_to,m.admission_date_time,m.DISCHARGE_DISPOSITION
from archive_master m
left join(select * from emr_fault_detail t where id = (select top 1 id from emr_fault_detail where archive_detail_id = t.archive_detail_id order by create_time desc )
and state in('已召回','未召回')) f
ON f.archive_detail_id=m.id
where m.ArchiveState in('已归档','已封存')
<if test="archiveDetailId != null">
and f.archive_detail_id = #{archiveDetailId,jdbcType=NVARCHAR}
</if>
<if test="assortId != null">
and f.assort_id = #{assortId,jdbcType=NVARCHAR}
</if>
<if test="parentId != null">
and m.parent_id = #{parentId,jdbcType=INTEGER}
</if>
<if test="content != null">
and f.content = #{content,jdbcType=NVARCHAR}
</if>
<if test="score != null">
and f.score = #{score,jdbcType=DECIMAL}
</if>
<if test="backContent != null">
and f.back_content = #{backContent,jdbcType=NVARCHAR}
</if>
<if test="firstTrial != null">
and f.first_trial = #{firstTrial,jdbcType=NVARCHAR}
</if>
<if test="creater != null">
and f.creater = #{creater,jdbcType=NVARCHAR}
</if>
<if test="createTime != null">
and f.create_time = #{createTime,jdbcType=NCHAR}
</if>
<if test="updater != null">
and f.updater = #{updater,jdbcType=NVARCHAR}
</if>
<if test="updateTime != null">
and f.update_time = #{updateTime,jdbcType=NCHAR}
</if>
<if test="inpNo != null and inpNo != ''">
and m.inp_no like '%'+#{inpNo,jdbcType=NCHAR}+'%'
</if>
<if test="visitId != null and visitId != ''">
and m.visit_id=#{visitId,jdbcType=NCHAR}
</if>
<if test="name != null and name != ''">
and m.name like '%'+#{name,jdbcType=NCHAR}+'%'
</if>
<if test="archivestate != null and archivestate != ''">
and m.ArchiveState=#{archivestate,jdbcType=NCHAR}
</if>
<if test="state != null and state != ''">
and f.state=#{state,jdbcType=NCHAR}
</if>
<if test="idNo != null and idNo != ''">
and m.ID_NO like '%'+#{idNo,jdbcType=NCHAR}+'%'
</if>
<if test="deptName!= null and deptName!= ''">
and m.dept_name in
<foreach item="item" collection="deptName.split(',')" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>

@ -2130,47 +2130,45 @@
toastr.warning("病案不存在!");
return;
}
var lockinfo=$("#wzxText").val();
var content=$("#doctorText").val();
var isScanedChk=0;
if($('#isScanedChk').is(':checked')){
isScanedChk="1";
}
if(lockinfo=="完整"){
$.ajax({
url: "${path}/beHosp/cmtDoctorOrNurs",
type: "POST",
data: {cmtDoctor: doctorFlag, id: id,lockinfo:lockinfo,content:content,isscaned:isScanedChk},
success: function (result) {
$("#doctorModal").modal('hide');
if (result == "成功") {
$("#table").bootstrapTable("refresh");
toastr.success("归档医生提交成功!");
} else {
toastr.error("归档医生提交失败!");
var lockinfo = $("#wzxText").val();
var content = $("#doctorText").val();
var isScanedChk = 0;
if ($('.isScanedChk').is(':checked')) {
isScanedChk = "1";
}
if($('.isScanedChk').is(':checked')){
if (lockinfo == "完整") {
$.ajax({
url: "${path}/beHosp/cmtDoctorOrNurs",
type: "POST",
data: {cmtDoctor: doctorFlag, id: id,lockinfo:lockinfo,content:content,isscaned:isScanedChk},
success: function (result) {
$("#doctorModal").modal('hide');
if (result == "成功") {
$("#table").bootstrapTable("refresh");
toastr.success("归档医生提交成功!");
} else {
toastr.error("归档医生提交失败!");
}
}
}
});
}else{
//如果缺失病案首页或入院记录则无法强制提交
if(lockinfo.indexOf("病案首页")!=-1||lockinfo.indexOf("入院记录")!=-1){
alert("缺失病案首页或入院记录,无法强制提交!");
}else{
$("#flagStaff").val(0);
//弹窗提示是否强制性
$("#WzRsult2").html(lockinfo);
$('#WZModal2').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
}
} else {
//如果缺失病案首页或入院记录则无法强制提交
if (lockinfo.indexOf("病案首页") != -1 || lockinfo.indexOf("入院记录") != -1) {
alert("缺失病案首页或入院记录,无法强制提交!");
} else {
$("#flagStaff").val(0);
//弹窗提示是否强制性
$("#WzRsult2").html(lockinfo);
$('#WZModal2').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
}
}}else {
toastr.error("必填项未选择!归档医生提交失败!");
}
});
//护士提交
@ -2178,40 +2176,44 @@
//审核信息保存
var nursFlag = 1;
var id = $("#archiveId").val();
if (id=="" || id==null) {
if (id == "" || id == null) {
toastr.warning("病案不存在!");
return;
}
var lockinfo=$("#wzx2Text").val();
var content=$("#nures2Text").val();
var isScanedChk2=0;
if($('#isScanedChk2').is(':checked')){
isScanedChk2="1";
var lockinfo = $("#wzx2Text").val();
var content = $("#nures2Text").val();
var isScanedChk2 = 0;
if ($('.isScanedChk2').is(':checked')) {
isScanedChk2 = "1";
}
if(lockinfo=="完整"){
$.ajax({
url: "${path}/beHosp/cmtDoctorOrNurs",
type: "POST",
data: {cmtNurse: nursFlag, id: id,lockinfo:lockinfo,content:content,isscaned:isScanedChk2},
success: function (result) {
$("#nursModal").modal('hide');
if (result == "成功") {
$("#table").bootstrapTable("refresh");
toastr.success("归档护士提交成功!");
} else {
toastr.error("归档护士提交失败!");
if($('.isScanedChk2').is(':checked')){
if (lockinfo == "完整") {
$.ajax({
url: "${path}/beHosp/cmtDoctorOrNurs",
type: "POST",
data: {cmtNurse: nursFlag, id: id, lockinfo: lockinfo, content: content, isscaned: isScanedChk2},
success: function (result) {
$("#nursModal").modal('hide');
if (result == "成功") {
$("#table").bootstrapTable("refresh");
toastr.success("归档护士提交成功!");
} else {
toastr.error("归档护士提交失败!");
}
}
}
});
}else{
$("#flagStaff").val(1);
//弹窗提示是否强制性
$("#WzRsult2").html(lockinfo);
$('#WZModal2').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
});
} else {
$("#flagStaff").val(1);
//弹窗提示是否强制性
$("#WzRsult2").html(lockinfo);
$('#WZModal2').modal({
backdrop: 'static',//backdrop 为 static 时,点击模态对话框的外部区域不会将其关闭。
keyboard: false,//keyboard 为 false 时,按下 Esc 键不会关闭 Modal。
show: true//弹出对话框
});
}
}else {
toastr.error("必填项未选择!归档护士提交失败!");
}
});

@ -16,6 +16,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<%@include file="../../jspf/comm.jspf" %>
<%@include file="../../jspf/ztreeCommom.jsp" %>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.js?time=2019-12-25"></script>
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.css" type="text/css">
<style>
.modal-header2 {
text-align: center !important;
@ -184,6 +186,12 @@
width: 100%;
}
/**固定列样式*/
.fixed-table-body-columns {
top: 40px !important;
/*height:226px!important;*/
}
</style>
</head>
@ -1822,6 +1830,7 @@
// sortOrder: "asc",
// fixedColumns: true,//固定列
// fixedNumber:3,//固定前两列
// rightFixedRow:1,
// fixedRightNumber:32,
// addNum:70,
toolbar: '#toolbar',//指定工具栏

@ -373,7 +373,7 @@
align: 'center',
valign: 'middle',
//sortable: true,
// visible: false,
visible: false,
formatter: function (value, row, index) {
return index + 1;
}
@ -400,7 +400,7 @@
{
title: '姓名',
field: 'name',
align: 'left',
align: 'center',
valign: 'middle',
},
{
@ -414,11 +414,12 @@
field: 'idNo',
align: 'left',
valign: 'middle',
visible: false
},
{
title: '入院科室',
field: 'deptAdmissionTo',
align: 'left',
align: 'center',
valign: 'middle',
},
{
@ -429,7 +430,7 @@
{
title: '出院科室',
field: 'deptName',
align: 'left',
align: 'center',
valign: 'middle',
},
{
@ -488,10 +489,10 @@
if (index != null && index != "" && index.indexOf("recall") != -1) {
if (row.archivestate == "已封存" || row.archivestate == "已归档") {
if(row.archivestate=="已封存"){
return '<button class="btn btn-success btn-sm" onclick="recallFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">封存 </button>';
return '<button class="btn btn-success btn-sm" onclick="recallFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">取消封存 </button>';
//return '<button class="btn btn-warning btn-sm" onclick="recallFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">已封存 </button>' + '<button class="btn btn-danger btn-sm" onclick="logFun(\'' + row.id + '\',\'' + row.archiveDetailId + '\',\'' + row.recallReason + '\')">日志</button>';
}else{
return '<button class="btn btn-warning btn-sm" onclick="recallFun1(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">封存 </button>';
return '<button class="btn btn-warning btn-sm" onclick="recallFun1(\'' + row.id + '\',\'' + row.archiveDetailId + '\')">封存 </button>';
}
} else {
return '';

@ -247,7 +247,7 @@
align: 'center',
valign: 'middle',
//sortable: true,
// visible: false,
visible: false,
formatter: function (value, row, index) {
return index + 1;
}
@ -268,6 +268,7 @@
{
title: '姓名',
field: 'name',
align: 'center',
valign: 'middle',
},
{

@ -1054,7 +1054,7 @@
success: function (result) {
if (result == 1) {
//关闭modal
// $('#lastBackModal').modal('hide'); //手动关闭
$('#lastBackModal').modal('hide'); //手动关闭
//$('#firstModal').modal('hide'); //手动关闭
toastr.success("退回成功!");
//刷新

@ -15,7 +15,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<%@include file="../../jspf/comm.jspf" %>
<%@ include file="../../jspf/ztreeCommom.jsp" %>
<script type="text/javascript" src="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.js?time=2019-12-25"></script>
<link rel="stylesheet" href="${path}/static/bootstrap-3.3.7/bootstrap-table-fixed-columns.css" type="text/css">
<style>
.modal-header2 {
text-align: center !important;
@ -209,6 +210,13 @@
width: 100%;
}
/**固定列样式*/
.fixed-table-body-columns {
top: 40px !important;
/*height:226px!important;*/
}
</style>
</head>
@ -1784,6 +1792,9 @@
sidePagination: 'server', // 设置为服务器端分页 客户端client
search: false,
showColumns: true,
fixedColumns: true,//固定列
fixedNumber:3,//固定前两列
rightFixedRow:1,
// sortable: true,
// sortOrder: "asc",
toolbar: '#toolbar',//指定工具栏

@ -0,0 +1,27 @@
.fixed-table-header-columns,
.fixed-table-body-columns {
position: absolute;
background-color: #fff;
display: none;
box-sizing: border-box;
overflow: hidden;
}
.fixed-table-header-columns .table,
.fixed-table-body-columns .table {
border-right: 1px solid #ddd;
}
.fixed-table-header-columns .table.table-no-bordered,
.fixed-table-body-columns .table.table-no-bordered {
border-right: 1px solid transparent;
}
.fixed-table-body-columns table {
position: absolute;
animation: none;
}
.bootstrap-table .table-hover > tbody > tr.hover > td{
background-color: #f5f5f5;
}

@ -0,0 +1,242 @@
/**
* @author zhixin wen <wenzhixin2010@gmail.com>
* @version: v1.0.1
* Modificated 16.08.16 by Aleksej Tokarev (Loecha)
* - Sorting Problem solved
* - Recalculated Size of fixed Columns
*/
(function ($) {
'use strict';
$.extend($.fn.bootstrapTable.defaults, {
fixedColumns: false,
fixedNumber: 1
});
var BootstrapTable = $.fn.bootstrapTable.Constructor,
_initHeader = BootstrapTable.prototype.initHeader,
_initBody = BootstrapTable.prototype.initBody,
_resetView = BootstrapTable.prototype.resetView,
_getCaret = BootstrapTable.prototype.getCaret; // Add: Aleksej
BootstrapTable.prototype.initFixedColumns = function () {
this.$fixedHeader = $([
'<div class="fixed-table-header-columns">',
'<table>',
'<thead></thead>',
'</table>',
'</div>'].join(''));
this.timeoutHeaderColumns_ = 0;
this.$fixedHeader.find('table').attr('class', this.$el.attr('class'));
this.$fixedHeaderColumns = this.$fixedHeader.find('thead');
this.$tableHeader.before(this.$fixedHeader);
this.$fixedBody = $([
'<div class="fixed-table-body-columns">',
'<table>',
'<tbody></tbody>',
'</table>',
'</div>'].join(''));
this.timeoutBodyColumns_ = 0;
this.$fixedBody.find('table').attr('class', this.$el.attr('class'));
this.$fixedBodyColumns = this.$fixedBody.find('tbody');
this.$tableBody.before(this.$fixedBody);
};
BootstrapTable.prototype.initHeader = function () {
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns) {
return;
}
this.initFixedColumns();
var that = this, $trs = this.$header.find('tr').clone(true); //Fix: Aleksej "clone()" mit "clone(true)" ersetzt
$trs.each(function () {
// This causes layout problems:
//$(this).find('th:gt(' + (that.options.fixedNumber -1) + ')').remove(); // Fix: Aleksej "-1" hinnzugef<65>gt. Denn immer eine Spalte Mehr geblieben ist
$(this).find('th:gt(' + that.options.fixedNumber + ')').remove();
});
this.$fixedHeaderColumns.html('').append($trs);
};
BootstrapTable.prototype.initBody = function () {
_initBody.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns) {
return;
}
var that = this,
rowspan = 0;
this.$fixedBodyColumns.html('');
this.$body.find('> tr[data-index]').each(function () {
var $tr = $(this).clone(),
$tds = $tr.find('td');
var dataIndex = $tr.attr("data-index");
$tr = $("<tr></tr>");
$tr.attr("data-index", dataIndex);
var end = that.options.fixedNumber;
if (rowspan > 0) {
--end;
--rowspan;
}
for (var i = 0; i < end; i++) {
$tr.append($tds.eq(i).clone());
}
that.$fixedBodyColumns.append($tr);
if ($tds.eq(0).attr('rowspan')){
rowspan = $tds.eq(0).attr('rowspan') - 1;
}
});
};
BootstrapTable.prototype.resetView = function () {
_resetView.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.fixedColumns) {
return;
}
clearTimeout(this.timeoutHeaderColumns_);
this.timeoutHeaderColumns_ = setTimeout($.proxy(this.fitHeaderColumns, this), this.$el.is(':hidden') ? 100 : 0);
clearTimeout(this.timeoutBodyColumns_);
this.timeoutBodyColumns_ = setTimeout($.proxy(this.fitBodyColumns, this), this.$el.is(':hidden') ? 100 : 0);
};
BootstrapTable.prototype.fitHeaderColumns = function () {
var that = this,
visibleFields = this.getVisibleFields(),
headerWidth = 0;
this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {
var $this = $(this),
index = i;
if (i >= that.options.fixedNumber) {
return false;
}
if (that.options.detailView && !that.options.cardView) {
index = i - 1;
}
var $th = that.$fixedHeader.find('th[data-field="' + visibleFields[index] + '"]');
$th.find('.fht-cell').width($this.innerWidth());
headerWidth += $this.outerWidth();
$th.data('fix-pos', index);
});
this.$fixedHeader.width(headerWidth + 1).show();
// fix click event
this.$fixedHeader.delegate("tr th", 'click', function() {
$(this).parents(".fixed-table-container").find(".fixed-table-body table thead tr th:eq("+$(this).data("fix-pos")+") .sortable").click();
})
};
/**
* Add: Aleksej
* Hook f<EFBFBD>r getCaret. Aktualisieren Header bei Fixed-Columns wenn diese sortiert wurden
* @method getCaret
* @for BootstrapTable
*/
BootstrapTable.prototype.getCaret = function () {
var result = _getCaret.apply(this, arguments);
if (this.options.fixedColumns && this.$fixedHeaderColumns instanceof jQuery) {
var that = this, $th;
$.each(this.$fixedHeaderColumns.find('th'), function (i, th) {
$th = $(th);
$th.find('.sortable').removeClass('desc asc').addClass($th.data('field') === that.options.sortName ? that.options.sortOrder : 'both');
});
}
return result;
};
/**
* Add: Aleksej, zum berechnen von Scrollbar-Gr<EFBFBD><EFBFBD>e
* @method calcScrollBarSize
* @return Number
*/
BootstrapTable.prototype.calcScrollBarSize = function () {
// Es ist egal, ob H<>he oder Breite
var tmpWidth = 100,
$container = $('<div>').css({
width : tmpWidth,
overflow : 'scroll',
visibility : 'hidden'}
).appendTo('body'),
widthWithScroll = $('<div>').css({
width: '100%'
}).appendTo($container).outerWidth();
$container.remove();
return tmpWidth - widthWithScroll;
};
BootstrapTable.prototype.fitBodyColumns = function () {
var that = this,
borderHeight = (parseInt(this.$el.css('border-bottom-width')) + parseInt(this.$el.css('border-top-width'))), // Add. Aleksej
top = this.$fixedHeader.outerHeight() + borderHeight, // Fix. Aleksej "-2" mit "+ borderHeight" ersetzt
// the fixed height should reduce the scorll-x height
height = this.$tableBody.height() - this.calcScrollBarSize(); // Fix. Aleksej "-14" mit "- this.calcScrollBarSize()" ersetzt
if (!this.$body.find('> tr[data-index]').length) {
this.$fixedBody.hide();
return;
}
if (!this.options.height) {
top = this.$fixedHeader.height();
height = height - top;
}
this.$fixedBody.css({
width: this.$fixedHeader.width(),
height: height-69,
top: top
}).show();
this.$body.find('> tr').each(function (i) {
that.$fixedBody.find('tr:eq(' + i + ')').height($(this).height());
});
// events
this.$tableBody.on('scroll', function () {
that.$fixedBody.find('table').css('top', -$(this).scrollTop());
});
this.$body.find('> tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$fixedBody.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$fixedBody.find('tr[data-index="' + index + '"]').removeClass('hover');
});
this.$fixedBody.find('tr[data-index]').off('hover').hover(function () {
var index = $(this).data('index');
that.$body.find('tr[data-index="' + index + '"]').addClass('hover');
}, function () {
var index = $(this).data('index');
that.$body.find('> tr[data-index="' + index + '"]').removeClass('hover');
});
// fix td width bug
var $first_tr = that.$body.find('tr:eq(0)');
that.$fixedBody.find('tr:eq(0)').find("td").each(function(index) {
$(this).width($first_tr.find("td:eq("+index+")").width())
});
};
})(jQuery);
Loading…
Cancel
Save