Просмотр исходного кода

Merge remote-tracking branch 'remotes/origin/xyLog220509' into test

mfmf 3 лет назад
Родитель
Сommit
581e597086

+ 309 - 0
src/css/logManagement.less

@@ -0,0 +1,309 @@
+@import './reset.less';
+
+.mukuai{
+    width: 100%;
+    height: 100%;
+    overflow-y: auto;
+    background-color: @disColor;
+    .filterDropList{
+        position: absolute;
+        left: 70px;
+        max-height: 200px;
+        overflow-y: auto;
+        background: #fff;
+        display: none;
+        border: 1px solid #e4e7ed;
+        box-shadow: 0 2px 12px 0 #e4e7ed;
+        z-index: 2;
+        li{
+            padding: 0 10px;
+        }
+    }
+    .deptList{
+        width: 160px;
+        max-height: 400px;
+    }    
+    .deptItem:hover{
+        background-color: #EEF4FF;
+        cursor: pointer;
+    }
+    .selectLevel,.selectDept{
+        display: inline-block;
+        position: relative;
+        width:160px;
+        padding: 0 10px;
+        height:40px;
+        border-radius:4px;
+        border: 1px solid #E2E5EF;
+        box-sizing: border-box;
+        cursor: pointer;
+    }
+    .filterItem.deptListWrap {
+        .selectDept,.deptList {
+            width: 180px;
+        }
+    }
+    .filterItem{
+        position: relative;
+        display: inline-block;
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        margin: 0 20px 15px 0;
+        span{
+            display: inline-block;
+            line-height: 40px;
+            position: relative;
+        }
+        input{
+            width:120px;
+            height:40px;
+            border-radius:4px;
+            border: 1px solid #E2E5EF;
+            outline: none;
+            margin-right: 10px;
+            padding: 0 10px;
+            box-sizing: border-box;
+        }
+        .canEditModule {
+            width: 142px;
+            height: 34px;
+            line-height: 34px;
+        }
+    }
+    .selectUsed,.selectReject {
+        float: right;
+    }
+    ul,li{
+        padding:0;
+        margin:0;
+        list-style:none;
+    }
+    h2{
+        width: 100%;
+        box-sizing: border-box;
+        background-color: #fff;
+        z-index: 20;
+        height: 44px;
+        line-height: 44px;
+        padding: 0 0 0 15px;
+        border-bottom: 1px solid #E2E5EF;
+        font-size: 16px;
+        font-weight: bold;
+        letter-spacing: 1px;
+    }
+    .main-body {
+        .main-body-com;
+    }
+    table{
+        .table;
+        .moduleNumber,tr td{
+            text-align: center;
+        }
+        
+    }
+    // .filterBox{
+    //     margin: 0 0 20px 0;
+    // }
+    .filterItem{
+        position: relative;
+        display: inline-block;
+        margin-right: 20px;
+        height: 40px;
+        line-height: 40px;
+        margin: 0 20px 20px 0;
+    }
+    .filterDropList{
+        position: absolute;
+        right: 0;
+        max-height: 200px;
+        overflow-y: auto;
+        background: #fff;
+        display: none;
+        border: 1px solid #e4e7ed;
+        box-shadow: 0 2px 12px 0 #e4e7ed;
+        z-index: 2;
+        li{
+            padding: 0 10px;
+        }
+    }
+    .rejectList, .usedList{
+        height: 120px;
+        li{
+            padding: 0 10px;
+        }
+        li:hover{
+            background-color: #EEF4FF;
+            cursor: pointer;
+        }
+    }
+    .switchImg{
+        width: 30px;
+    }
+    .roleSelect {
+        position: relative;
+        top: 3px;
+        cursor: pointer;
+    }
+    .selectModuleType,.moduleItemInp,.selectUsed, .selectReject{
+        display: inline-block;
+        position: relative;
+        width:140px;
+        padding: 0 10px;
+        height:40px;
+        border-radius:4px;
+        border: 1px solid #E2E5EF;
+        box-sizing: border-box;
+        cursor: pointer;
+        padding-right: 26px;
+    }
+    .arrow{
+        position: absolute;
+        width: 10px;
+        top: 16px;
+        right: 10px;
+    }
+    .moduleItemInp{
+        cursor: text;
+        outline: none;
+    }
+    .moduleTypeList{
+         width: 160px;
+    }
+    .selectUsed, .selectReject{
+        width: 140px;
+    }
+    .modeTypeItem:hover{
+        background-color: #EEF4FF;
+        cursor: pointer;
+    }
+    .rejectList, .usedList {
+        width: 140px;
+    }
+    .filter{
+        display: inline-block;
+        width:60px;
+        height:36px;
+        background:@activeColor;
+        border-radius:4px;
+        color: #fff;
+        text-align: center;
+        line-height: 36px;
+        position: relative;
+        top: -1px;
+        cursor: pointer;
+    }
+    .editItem{
+       color: @activeColor;
+       cursor: pointer;
+    }
+    .editItemDis{
+        color: #aaa;
+        cursor: not-allowed;
+    }
+    
+    .ellipsis{
+        overflow: hidden;
+        text-overflow:ellipsis;
+        white-space: nowrap;
+    }
+    .textCenter{
+        text-align: center;
+    }
+    
+    
+    .pagination{
+        margin: 35px 0 20px 0;
+        text-align: right;
+    }
+    .totalSum{
+        font-size:12px;
+        line-height:17px;
+        color: #777777;
+        margin-right: 20px;
+    }
+    .pageNum,.prePage,.nextPage, .more{
+        display: inline-block;
+        width: 20px;
+        cursor: pointer;
+        margin: 0 20px 0 0;
+        text-align: center;
+        color: #777;
+    }
+    .prePage,.nextPage{
+        img{
+            position: relative;
+            top: 0px   ;
+        }
+    }
+     .more{
+        cursor: not-allowed;
+    }
+    .arrowPage{
+        width: 6px;
+    }
+    .activePage{
+        color: @activeColor;
+    }
+    
+    input::-webkit-outer-spin-button,
+    input::-webkit-inner-spin-button {
+        -webkit-appearance: none;
+    }
+     
+    input[type="number"] {
+        -moz-appearance: textfield;
+    }
+}
+th[code]{
+    cursor: pointer;
+    &:after{
+        content:"";
+        display:inline-block;
+        width: 11px;
+        height: 14px;
+        margin-left: 4px;
+        vertical-align: middle;
+        background-size: 100%;
+        background-image: url("../images/grey.png");
+    }
+    &.asc:after{
+        background: url("../images/up_blue.png");
+        background-size: 100%;
+    }
+    &.desc:after{
+        background: url("../images/down_blue.png");
+        background-size: 100%;
+    }
+}
+
+.usrContain .selectReject,.usrContain .selectModuleType ,.managerContainer .selectModuleType  {
+    float: right;
+}
+.usrContain .rejectList,.usrContain .usedList{
+    height: 200px;
+}
+.usrContain .selectModuleType, .usrContain .moduleItemInp, .usrContain .selectUsed, .usrContain .selectReject {
+    width: 170px;
+}
+.managerContainer .moduleTypeList {
+    width: 140px;
+}
+.managerContainer.usrContain .moduleTypeList {
+    width: 170px;
+    height: 400px;
+}
+.managerContainer.usrContain .selectReject {
+    width: 140px;
+}
+
+.filterBox .filterItem .moduleLisWid {
+  width:fit-content!important;
+  width:-webkit-fit-content!important;
+  width:-moz-fit-content!important;
+}
+.filterBox .filterItem .selectModuleType {
+  width:fit-content!important;
+  width:-webkit-fit-content!important;
+  width:-moz-fit-content!important;
+}

+ 9 - 0
src/html/appealCheck.html

@@ -46,6 +46,14 @@
                         <span>申诉人:</span>
                         <input class="name" type="text" placeholder="请输入申诉人" maxlength="10">
                     </span>
+					<span class="filterItem typeFilter">
+					    <span>患者姓名:</span>
+					    <input class="patientName" type="text" placeholder="请输入患者姓名" maxlength="10">
+					</span>
+					<span class="filterItem typeFilter">
+					    <span>病案号:</span>
+					    <input class="fileCode" type="text" placeholder="请输入病案号" maxlength="10">
+					</span>
                     <span class="filterItem">
                         <span>操作类型:</span>
                         <span class="selectType">全部</span>
@@ -80,6 +88,7 @@
                             <th class="beHospitalId textCenter" >所属科室</th>
                             <th class="patientNo textCenter" >申诉时间</th>
                             <th class="patientName textCenter" style="width: 100px;">病人住院序号</th>
+							<th class="fileCode textCenter" >病案号</th>
                             <th class="patientSex textCenter" >患者姓名</th>
                             <th class="patientage textCenter" >申诉模块</th>
                             <th class="bedNum textCenter" >缺陷详情</th>

+ 58 - 0
src/html/loginLogs.html

@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title></title>
+    
+</head>
+
+<body>
+    <div class="managerContainer mukuai">
+        <div class="partTitle">
+          <p>操作日志</p>
+        </div>
+        <div class="partTitleT"></div>
+        <div class="main-body">
+            <div class="filterBox">
+                <span class="filterItem">
+                    <span>登录名:</span>
+                    <input type="text" class="loginName" style="height: 34px;">
+                </span>
+				<span class="filterItem">
+				    <span>IP地址:</span>
+				    <input type="text" class="loginIp" style="height: 34px;">
+				</span>
+                <span class="filterItem typeFilter clearfix dataSelectLight">
+                    <span class="fl">操作日期:</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" readonly/></span>
+                    <span  class="divide fl">-</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker2"  autocomplete="off" readonly/></span>
+                </span>
+                <span class="filter">查询</span>
+                <span class="filterclear abnormalClear">重置</span>
+            </div>
+            <table>
+                <thead>
+                    <th class="moduleName" style="width: 65px;">序号</th>
+                    <th class="loginName" style="width: 150px;">登录名</th>
+					<th class="loginDate">登录日期</th>
+					<th class="loginIp">IP地址</th>
+                    <th class="loginAddress">地区</th>
+					<th class="loginBrowser">浏览器</th>
+                </thead>
+                <tbody class="tbody">
+    
+                </tbody>
+            </table>
+            <div class="pagination"></div>
+        </div>
+        
+        
+        
+    </div>
+</body>
+
+</html>

+ 53 - 0
src/html/operationalLogs.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title></title>
+    
+</head>
+
+<body>
+    <div class="managerContainer mukuai">
+        <div class="partTitle">
+          <p>操作日志</p>
+        </div>
+        <div class="partTitleT"></div>
+        <div class="main-body">
+            <div class="filterBox">
+                <span class="filterItem">
+                    <span>操作人:</span>
+                    <input type="text" class="operationName" style="height: 34px;">
+                </span>
+                <span class="filterItem typeFilter clearfix dataSelectLight">
+                    <span class="fl">操作日期:</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" readonly/></span>
+                    <span  class="divide fl">-</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker2"  autocomplete="off" readonly/></span>
+                </span>
+                <span class="filter">查询</span>
+                <span class="filterclear abnormalClear">重置</span>
+            </div>
+            <table>
+                <thead>
+                    <th class="moduleName" style="width: 65px;">序号</th>
+                    <th class="operationName" style="width: 150px;">操作人</th>
+					<th class="operationDate">操作日期</th>
+					<th class="operationIp">IP地址</th>
+                    <th class="jsonResult">操作记录</th>
+                </thead>
+                <tbody class="tbody">
+    
+                </tbody>
+            </table>
+            <div class="pagination"></div>
+        </div>
+        
+        
+        
+    </div>
+</body>
+
+</html>

+ 20 - 5
src/js/api.js

@@ -80,7 +80,10 @@ const api = {
   resultStatisticsByDeptAndDoctorPage: '/consoleByDept/resultStatisticsByDeptAndDoctorPage', //缺陷明细-科室(分页)-内页
   qcType: '/qc/qcType/page', //质控类型(分页列表)
   getEntryByHospital: '/qc/qcType/getEntryByHospital', //质控类型新增条目分组
-  saveOrUpdate: '/qc/qcType/saveOrUpdate', //质控类型新增更新修改
+  addqcType: '/qc/qcType/add', //质控类型新增
+  updateqcType: '/qc/qcType/update', //质控类型修改
+  copyqcType: '/qc/qcType/copy', //质控类型复制
+  // saveOrUpdate: '/qc/qcType/saveOrUpdate', //质控类型新增更新修改
   typeDelete: '/qc/qcType/delete', //质控类型删除
   typeGetById: '/qc/qcType/getById', //根据id返回
   getQcAnnormalMode: '/qc/abnormal/getQcAnnormalMode', //异常修改
@@ -128,9 +131,15 @@ const api = {
   reHos31DaysPageExport: '/console/export/reHos31DaysPageExport', //31天再入院统计导出
   qcCheckMRPageExport: '/console/export/qcCheckMRPageExport', //质控核查质控评分页导出
   hmImproveMRPageExport: '/console/export/hmImproveMRPageExport', //病案首页改善率质控评分页导出
-  badLevelPagePageExport: '/console/export/badLevelPagePageExport', //病案首页不合格数病历详情页导出
+  // badLevelPagePageExport: '/console/export/badLevelPagePageExport', //病案首页不合格数病历详情页导出
+  badUnQualifiedLevelPagePageExport: '/console/export/badUnQualifiedLevelPagePageExport', //病案首页不合格数病历详情页导出
+  badQualifiedLevelPagePageExport: '/console/export/badQualifiedLevelPagePageExport', //病案首页合格数病历详情页导出
+  
   qualityControlExport: '/console/export/qualityControlExport',//病历质控报表导出
   qualityControlExportByDept: '/print/export/qualityControlExportByDept',//病历质控报表(科室)导出
+  
+  loginLogPage: '/logManage/loginLogPage',//查看登录日志
+  operationLogPage: '/logManage/operationLogPage',//查看操作日志
 
   casesEntryStatisticsById: '/console/casesEntryStatisticsById', //入院记录24小时未完成
   beHosCount: '/console/beHosCount', //入院人数
@@ -175,7 +184,9 @@ const api = {
   entryGroupExportByDeptPage: '/print/export/entryGroupExportByDeptPage',//(科室缺陷占比/缺陷列表导出,终末)
   leaveHosMRPageByDept: '/consoleByDept/leaveHosMRPageByDept',//出院人数,终末)
   leaveHosMrPageExportByDept: '/print/export/leaveHosMrPageExportByDept',//出院人数导出,终末)
-  homePageOrLevelExportByDept: '/print/export/homePageOrLevelExportByDept',//控制台(科室) / 病案首页合格率占比 / 病历列表导出,终末)
+  homeUnQualifiedPageOrLevelExportByDept: '/print/export/homeUnQualifiedPageOrLevelExportByDept',//不合格控制台(科室) / 病案首页合格率占比 / 病历列表导出,终末)
+  homeQualifiedPageOrLevelExportByDept: '/print/export/homeQualifiedPageOrLevelExportByDept',//合格控制台(科室) / 病案首页合格率占比 / 病历列表导出,终末)
+  // homePageOrLevelExportByDept: '/print/export/homePageOrLevelExportByDept',//控制台(科室) / 病案首页合格率占比 / 病历列表导出,终末)
   homePageLevelXYExport: '/console/export/homePageLevelXYExport',//病案首页合格率占比报表导出 湘雅 全院
   homePageLevelXYExportByDept: '/print/export/homePageLevelXYExportByDept',//病案首页合格率占比报表导出 湘雅 科室
   getMedQualityCoList: '/qc/behospitalInfo/getMedQualityCoList',//病案指标列表
@@ -184,7 +195,9 @@ const api = {
   entryCountGroupXYByEntryPage: '/console/entryCountGroupXYByEntryPage',//湘雅医师合格率二级页面列表
   badLevelXYPage: '/console/badLevelXYPage',//湘雅医师合格率二级页面列表合格不合格
   entryCountGroupXYByEntryExport: '/console/export/entryCountGroupXYByEntryExport',//湘雅医师合格率二级页面导出缺陷
-  badLevelPageXYExport: '/console/export/badLevelPageXYExport',//湘雅医师合格率二级页面导出合格
+  // badLevelPageXYExport: '/console/export/badLevelPageXYExport',//湘雅医师合格率二级页面导出合格 旧
+  badUnQualifiedLevelPageXYExport: '/console/export/badUnQualifiedLevelPageXYExport',//湘雅医师合格率二级页面导出不合格
+  badQualifiedLevelPageXYExport: '/console/export/badQualifiedLevelPageXYExport',//湘雅医师合格率二级页面导出合格
   qcResultShortXYPageExport: '/console/export/qcResultShortXYPageExport',//湘雅医师合格率三级页面导出
   qcResultShortXYPage: '/console/qcResultShortXYPage',//湘雅医师合格率三级页面列表
   entryCountGroupXYByEntryPageDept: '/consoleByDept/entryCountGroupXYByEntryPageDept',//湘雅医师合格率二级页面列表科室 缺陷
@@ -192,7 +205,9 @@ const api = {
   badLevelXYPageByDept: '/consoleByDept/badLevelXYPageByDept',//湘雅医师合格率二级页面列表科室 合格
   qcResultShortXYPageByDept: '/consoleByDept/qcResultShortXYPageByDept',//湘雅医师合格率三级页面列表 科室
   qcResultShortXYPageExportDept: '/print/export/qcResultShortXYPageExportDept',//湘雅医师合格率三级页面导出 科室
-  badLevelPageXYExportByDept: '/print/export/badLevelPageXYExportByDept',//湘雅医师合格率二级页面导出 科室
+  badUnQualifiedLevelPageXYExportByDept: '/print/export/badUnQualifiedLevelPageXYExportByDept',//湘雅医师不合格率二级页面导出 科室
+  badQualifiedLevelPageXYExportByDept: '/print/export/badQualifiedLevelPageXYExportByDept',//湘雅医师合格率二级页面导出 科室
+  // badLevelPageXYExportByDept: '/print/export/badLevelPageXYExportByDept',//湘雅医师合格率二级页面导出 科室
   /*****湘雅三院-统计分析******/
   getEntryDefectImprove:'/qc/analysis/getEntryDefectImprove', //条目缺陷改善率统计
   getEntryDefectImproveByExport:'/qc/analysis/getEntryDefectImproveByExport',   //条目缺陷改善率统计-导出

+ 17 - 0
src/js/appealCheck.js

@@ -35,6 +35,8 @@ let deptId = getUrlArgObjectNew("deptId", srcUrl) || ""
 let deptName = getUrlArgObjectNew("deptName", srcUrl) || ""
 let moduleName = getUrlArgObjectNew("moduleName", srcUrl) || ""
 let name = getUrlArgObjectNew("name", srcUrl) || ""
+let patientName = getUrlArgObjectNew("patientName", srcUrl) || ""
+let fileCode = getUrlArgObjectNew("fileCode", srcUrl) || ""
 let operationType = getUrlArgObjectNew("operationType", srcUrl) || ""
 let state = getUrlArgObjectNew("state", srcUrl) || ""
 let tabList = [], deptNameTemp = "", typeList,
@@ -78,6 +80,14 @@ $(".name").on("input", function (e) {
     const val = $(this).val().trim()
     name = val
 })
+$(".patientName").on("input", function (e) {
+    const val = $(this).val().trim()
+    patientName = val
+})
+$(".fileCode").on("input", function (e) {
+    const val = $(this).val().trim()
+    fileCode = val
+})
 function getTabData(activePage) {
     behosDateStart = getPickerDate($("#datepicker"), 1)
     behosDateEnd = getPickerDate($("#datepicker2"), 2)
@@ -90,6 +100,8 @@ function getTabData(activePage) {
         state: state,
         size: 15,
         name: name,
+		patientName:patientName,
+		fileCode:fileCode,
         complaintDateEnd: behosDateEnd.replace(/\//g, '-'),
         complaintDateStart: behosDateStart.replace(/\//g, '-'),
         "desc": ['claimant_gmt_create']
@@ -198,7 +210,11 @@ $(".abnormalClear").on("click", function (e) {
     moduleName = ""
     operationType = ""
     name = ""
+	patientName=""
+	fileCode=""
     $('.name').val(''),
+	$('.patientName').val(''),
+	$('.fileCode').val(''),
         data_desc = ["leave_hospital_date"]
     if (isPlacefile != 1) {
         data_desc = ["behospital_date"]
@@ -283,6 +299,7 @@ function renderTab(data) {
                 <td >${item.behDeptName || "-"}</td>
                 <td >${item.claimantGmtCreate}</td>
                 <td >${item.behospitalCode}</td>
+				<td >${item.fileCode || "-"}</td>
                 <td >${item.name || "-"}</td>
                 <td >${item.modeName || "-"}</td>
                 ${item.qcresultDetailMsg && item.qcresultDetailMsg.length > 30 ? `<td title=${item.qcresultDetailMsg}>${item.qcresultDetailMsg.substring(0,30)+'...' || "-"}</td>` : `<td>${item.qcresultDetailMsg || "-"}</td>`}

+ 55 - 13
src/js/assertTypeDetail.js

@@ -148,18 +148,60 @@ $('.submit').click(function(){
         name: qcName,
         qcTypeCasesEntryVOList
     }
-   
-    post(api.saveOrUpdate,param).then(res =>{
-        let result = res.data
-        if(result.code == '0'){
-            $.alerModal({"message":submitMsg,type:"tip",time:'1000',isFather: true,win:win, fatherWrapper: $("#mainBox", parent.document)});
-            setTimeout(function(){
-                $(parent.document).find("#contentIframe").attr("src","./assertType.html")
-            },1000)
-        }else{
-            $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true,win:"default", fatherWrapper: $("#mainBox", parent.document)});
-        }
-    }).catch((e) =>{
+	if(!paramType){
+		post(api.addqcType,param).then(res =>{
+		    let result = res.data
+		    if(result.code == '0'){
+		        $.alerModal({"message":submitMsg,type:"tip",time:'1000',isFather: true,win:win, fatherWrapper: $("#mainBox", parent.document)});
+		        setTimeout(function(){
+		            $(parent.document).find("#contentIframe").attr("src","./assertType.html")
+		        },1000)
+		    }else{
+		        $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true,win:"default", fatherWrapper: $("#mainBox", parent.document)});
+		    }
+		}).catch((e) =>{
+		
+		})
+	}else if(paramType == '"edit"'){
+		post(api.updateqcType,param).then(res =>{
+		    let result = res.data
+		    if(result.code == '0'){
+		        $.alerModal({"message":submitMsg,type:"tip",time:'1000',isFather: true,win:win, fatherWrapper: $("#mainBox", parent.document)});
+		        setTimeout(function(){
+		            $(parent.document).find("#contentIframe").attr("src","./assertType.html")
+		        },1000)
+		    }else{
+		        $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true,win:"default", fatherWrapper: $("#mainBox", parent.document)});
+		    }
+		}).catch((e) =>{
+		
+		})
+	}else{
+		post(api.copyqcType,param).then(res =>{
+		    let result = res.data
+		    if(result.code == '0'){
+		        $.alerModal({"message":submitMsg,type:"tip",time:'1000',isFather: true,win:win, fatherWrapper: $("#mainBox", parent.document)});
+		        setTimeout(function(){
+		            $(parent.document).find("#contentIframe").attr("src","./assertType.html")
+		        },1000)
+		    }else{
+		        $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true,win:"default", fatherWrapper: $("#mainBox", parent.document)});
+		    }
+		}).catch((e) =>{
+		
+		})
+	}
+    // post(api.saveOrUpdate,param).then(res =>{
+    //     let result = res.data
+    //     if(result.code == '0'){
+    //         $.alerModal({"message":submitMsg,type:"tip",time:'1000',isFather: true,win:win, fatherWrapper: $("#mainBox", parent.document)});
+    //         setTimeout(function(){
+    //             $(parent.document).find("#contentIframe").attr("src","./assertType.html")
+    //         },1000)
+    //     }else{
+    //         $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true,win:"default", fatherWrapper: $("#mainBox", parent.document)});
+    //     }
+    // }).catch((e) =>{
     
-    })
+    // })
 })

+ 4 - 4
src/js/dept/qcListCopyUnqualifiedDept.js

@@ -1261,9 +1261,9 @@ $(function($){
         }
         let url
         if (codeType == 'XY') {
-            url = api.badLevelPageXYExportByDept
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPageXYExportByDept : api.badQualifiedLevelPageXYExportByDept
         } else {
-            url = api.badLevelPagePageExport
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPagePageExport : api.badQualifiedLevelPagePageExport
         }
         if(exportTime==90){
             if((new Date(behosDateEnd) - new Date(behosDateStart))/24/60/60/1000 > exportTime){
@@ -1304,9 +1304,9 @@ function bindSaveColPort(param){
         }
         let url
         if (codeType == 'XY') {
-            url = api.badLevelPageXYExportByDept
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPageXYExportByDept : api.badQualifiedLevelPageXYExportByDept
         } else {
-            url = api.homePageOrLevelExportByDept
+            url = titleName=="不合格数" ? api.homeUnQualifiedPageOrLevelExportByDept : api.homeQualifiedPageOrLevelExportByDept
         }
         param.radioCheck = radioCheck||1
         expJson(url,param).then(res =>{

+ 198 - 0
src/js/loginLogs.js

@@ -0,0 +1,198 @@
+const $ = require('jquery');
+require("../css/logManagement.less");
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./modal.js');
+const { api } = require('./api.js')
+const { post, getCookie, getUrlArgObjectNew, emptyBox, setDatePicker, getPickerDate, listenScroll } = require('./utils.js')
+const iconCalenBlue = require("./../images/icon_calen_blue.png")
+const iconCalenGrey = require("./../images/icon_calen_grey.png")
+const arrowLeft= require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+
+let size=15, loginName = "", loginIp = ""
+
+$(function () {
+    listenScroll('.mukuai')
+    dateChange()
+
+    $(".abnormalClear").click(function () {
+        // window.location.reload()
+        loginName =  ""
+		loginIp=""
+        setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+        $(".loginName ").val("")
+		$(".loginIp ").val("")
+        getTabData(1)
+    })
+    setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+    getTabData(1)//条目缺陷
+})
+$('.loginName').on("input", function (e) {
+    let val = $(this).val().trim()
+    loginName =  val
+})
+$('.loginIp').on("input", function (e) {
+    let val = $(this).val().trim()
+    loginIp =  val
+})
+
+$(".menu .page", parent.document).removeClass("active")
+$(parent.document).find(".menu .page[code=YH-RZGL-DLRZ]").addClass("active")
+//所有数据切换日期筛选
+function dateChange() {
+    $(".monthYear .mon").click(function () {
+        $(this).css({
+            backgroundColor: '#00A1FF',
+            color: '#fff'
+        }).siblings().css({
+            color: '#00A1FF',
+            backgroundColor: '#fff'
+        })
+        setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+        getTabData(1)
+    })
+    $(".monthYear .year").click(function () {
+        $(this).css({
+            backgroundColor: '#00A1FF',
+            color: '#fff'
+        }).siblings().css({
+            color: '#00A1FF',
+            backgroundColor: '#fff'
+        })
+        setDatePicker($("#datepicker"), $("#datepicker2"), 2)
+        getTabData(1)
+    })
+}
+
+//获取表格数据
+function getTabData(activePage) {
+    const dateStatrt = getPickerDate($("#datepicker"), 1)
+    const dateEnd = getPickerDate($("#datepicker2"), 2)
+    const start = new Date(dateStatrt).getTime()
+    const end = new Date(dateEnd).getTime()
+    if (start > end) {
+        $.alerModal({ "message": '开始时间不能大于结束时间~', type: "tip", time: '1000', isFather: true, fatherWrapper: $("#mainBox", parent.document) });
+        return
+    }
+    const param = {
+        loginName: loginName,
+		loginIp: loginIp,
+        "startDate": dateStatrt,
+        "endDate": dateEnd,
+		size: size,
+		current:activePage,
+    }
+    $('.pagination').html("")
+    $('.tbody').html(emptyBox('努力加载中...', '', 1))
+    post(api.loginLogPage, param).then(res => {
+        if (res.data.code == '0') {
+            const data = res.data.data.records
+			const totalPage = res.data.data.pages
+			const totalNum = res.data.data.total
+            renderTab(data, activePage)
+			if(totalPage > 1){
+                    renderPagination(totalPage,Number(activePage),totalNum)
+                } else{
+                    $('.pagination').html("")
+                }
+        
+        }else{
+            $('.tbody').html(emptyBox())
+        }
+    }).catch((e) =>{
+        
+    })
+}
+
+$(".filter").on("click", function (e) {
+	
+    getTabData(1)
+})
+
+function renderTab(data, activePage) {
+    let str = ``;
+    for (let i = 0; i < data.length; i++) {
+        const item = data[i]
+        str += `
+            <tr data-id=${item.id} data-index=${i}>
+                <td  class="textCenter">${(activePage - 1) * 15 + i + 1}</td>
+                <td data-model="${item.loginName}">${item.loginName}</td>
+                <td class="loginDate">${item.loginDate}</td>
+				<td class="loginIp">${item.loginIp||"-"}</td>
+				<td class="loginAddress">${item.loginAddress}</td>
+				<td class="loginBrowser">${item.loginBrowser}</td>
+            </tr>
+        `
+    }
+    $('.tbody').html(str ? str : emptyBox())
+}
+
+//分页渲染
+function renderPagination(totalPage,activePage,totalNum){
+    let str = `<span class="totalSum">共${totalPage}页/${totalNum}条数据</span><span class="prePage"><img class="arrowPage" src=${arrowLeft} /></span>`
+    if(totalPage <= 6){
+        for(let i = 1; i <= totalPage; i++){
+            str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
+        }
+    }else{
+        if(activePage <= 3){ //选中页数小于4
+            for(let i = 1; i <= 4; i++){
+                str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
+            }
+            str += `<span class="more" >...</span>`
+        str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+
+        } else if(activePage > totalPage -3){
+            str += `<span class="pageNum page1" data-page=1>1</span>`
+            str += `<span class="more" >...</span>`
+            str += `<span class="pageNum ${'page'+(totalPage-3)}" data-page=${totalPage -3}>${totalPage -3}</span>`
+            str += `<span class="pageNum ${'page'+(totalPage-2)}" data-page=${totalPage -2}>${totalPage -2}</span>`
+            str += `<span class="pageNum ${'page'+(totalPage-1)}" data-page=${totalPage -1}>${totalPage -1}</span>`
+            str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+        } else {
+            str += `<span class="pageNum page1" data-page=1>1</span>`
+            str += `<span class="more" >...</span>`
+            str += `<span class="pageNum ${'page'+(activePage -1)}" data-page=${activePage -1}>${activePage -1}</span>`
+            str += `<span class="pageNum ${'page'+activePage}" data-page=${activePage}>${activePage}</span>`
+            str += `<span class="pageNum ${'page'+(activePage +1)}" data-page=${activePage +1}>${activePage +1}</span>`
+            str += `<span class="more" >...</span>`
+            str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+        }
+       
+    }
+    str += `<span class="nextPage"><img class="arrowPage" src=${arrowRight} /></span>`
+    $('.pagination').html(str)
+    $('.page' + activePage).addClass('activePage')
+    $(".pageNum").on("click", function(e){
+        const activePageNow = Number($(this).attr('data-page'))
+        getTabData(activePageNow)
+    })
+    $(".prePage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow > 1){
+            activePageNow--
+            getTabData(activePageNow)
+        }
+    })
+    $(".nextPage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow < totalPage){
+            activePageNow++
+            getTabData(activePageNow)
+        }
+    })
+    
+}
+
+$(function () {
+    $('.datapickerBox').append(`<img class="iconCalen" src=${iconCalenGrey} />`)
+    $('.iconCalen').on("mouseenter", function (e) {
+        $(this).attr("src", iconCalenBlue)
+    })
+    $('.iconCalen').on("mouseleave", function (e) {
+        $(this).attr("src", iconCalenGrey)
+    })
+    $('.iconCalen').on("click", function (e) {
+        $(this).parent().find("input").focus()
+    })
+});

+ 220 - 0
src/js/operationalLogs.js

@@ -0,0 +1,220 @@
+const $ = require('jquery');
+require("../css/logManagement.less");
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./modal.js');
+const {
+	api
+} = require('./api.js')
+const {
+	post,
+	getCookie,
+	getUrlArgObjectNew,
+	emptyBox,
+	setDatePicker,
+	getPickerDate,
+	listenScroll
+} = require('./utils.js')
+const iconCalenBlue = require("./../images/icon_calen_blue.png")
+const iconCalenGrey = require("./../images/icon_calen_grey.png")
+const arrowLeft = require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+
+let size = 15,
+	operationName = ""
+
+$(function() {
+	listenScroll('.mukuai')
+	dateChange()
+
+	$(".abnormalClear").click(function() {
+		// window.location.reload()
+		operationName = ""
+		setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+		$(".operationName ").val("")
+		getTabData(1)
+	})
+	setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+	getTabData(1) //条目缺陷
+})
+$('.operationName').on("input", function(e) {
+	let val = $(this).val().trim()
+	operationName = val
+})
+
+$(".menu .page", parent.document).removeClass("active")
+$(parent.document).find(".menu .page[code=YH-RZGL-CZRZ]").addClass("active")
+//所有数据切换日期筛选
+function dateChange() {
+	$(".monthYear .mon").click(function() {
+		$(this).css({
+			backgroundColor: '#00A1FF',
+			color: '#fff'
+		}).siblings().css({
+			color: '#00A1FF',
+			backgroundColor: '#fff'
+		})
+		setDatePicker($("#datepicker"), $("#datepicker2"), 1)
+		getTabData(1)
+	})
+	$(".monthYear .year").click(function() {
+		$(this).css({
+			backgroundColor: '#00A1FF',
+			color: '#fff'
+		}).siblings().css({
+			color: '#00A1FF',
+			backgroundColor: '#fff'
+		})
+		setDatePicker($("#datepicker"), $("#datepicker2"), 2)
+		getTabData(1)
+	})
+}
+
+//获取表格数据
+function getTabData(activePage) {
+	const dateStatrt = getPickerDate($("#datepicker"), 1)
+	const dateEnd = getPickerDate($("#datepicker2"), 2)
+	const start = new Date(dateStatrt).getTime()
+	const end = new Date(dateEnd).getTime()
+	if (start > end) {
+		$.alerModal({
+			"message": '开始时间不能大于结束时间~',
+			type: "tip",
+			time: '1000',
+			isFather: true,
+			fatherWrapper: $("#mainBox", parent.document)
+		});
+		return
+	}
+	const param = {
+		operationName: operationName,
+		"startDate": dateStatrt,
+		"endDate": dateEnd,
+		size: size,
+		current: activePage,
+	}
+	$('.pagination').html("")
+	$('.tbody').html(emptyBox('努力加载中...', '', 1))
+	post(api.operationLogPage, param).then(res => {
+		if (res.data.code == '0') {
+			const data = res.data.data.records
+			const totalPage = res.data.data.pages
+			const totalNum = res.data.data.total
+			renderTab(data, activePage)
+			if (totalPage > 1) {
+				renderPagination(totalPage, Number(activePage), totalNum)
+			} else {
+				$('.pagination').html("")
+			}
+
+		} else {
+			$('.tbody').html(emptyBox())
+		}
+	}).catch((e) => {
+
+	})
+}
+
+$(".filter").on("click", function(e) {
+	getTabData(1)
+})
+
+
+function renderTab(data, activePage) {
+	let str = ``;
+	for (let i = 0; i < data.length; i++) {
+		const item = data[i]
+		if (item.operationRecord.length > 50) {
+			str += `
+				<tr data-id=${item.id} data-index=${i}>
+					<td  class="textCenter">${(activePage - 1) * 15 + i + 1}</td>
+					<td data-model="${item.operationName}">${item.operationName}</td>
+					<td class="operationDate">${item.operationDate}</td>
+					<td class="operationIp">${item.operationIp}</td>
+					<td class="operationRecord1" title="${item.operationRecord}">${item.operationRecord.slice(0,50)+"..."}</td>
+				</tr>
+			`
+		} else {
+			str += `
+				<tr data-id=${item.id} data-index=${i}>
+					<td  class="textCenter">${(activePage - 1) * 15 + i + 1}</td>
+					<td data-model="${item.operationName}">${item.operationName}</td>
+					<td class="operationDate">${item.operationDate}</td>
+					<td class="operationIp">${item.operationIp||"-"}</td>
+					<td class="operationRecord">${item.operationRecord}</td>
+				</tr>
+			`
+		}
+	}
+	$('.tbody').html(str ? str : emptyBox())
+}
+
+//分页渲染
+function renderPagination(totalPage, activePage, totalNum) {
+	let str =
+		`<span class="totalSum">共${totalPage}页/${totalNum}条数据</span><span class="prePage"><img class="arrowPage" src=${arrowLeft} /></span>`
+	if (totalPage <= 6) {
+		for (let i = 1; i <= totalPage; i++) {
+			str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
+		}
+	} else {
+		if (activePage <= 3) { //选中页数小于4
+			for (let i = 1; i <= 4; i++) {
+				str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
+			}
+			str += `<span class="more" >...</span>`
+			str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+
+		} else if (activePage > totalPage - 3) {
+			str += `<span class="pageNum page1" data-page=1>1</span>`
+			str += `<span class="more" >...</span>`
+			str += `<span class="pageNum ${'page'+(totalPage-3)}" data-page=${totalPage -3}>${totalPage -3}</span>`
+			str += `<span class="pageNum ${'page'+(totalPage-2)}" data-page=${totalPage -2}>${totalPage -2}</span>`
+			str += `<span class="pageNum ${'page'+(totalPage-1)}" data-page=${totalPage -1}>${totalPage -1}</span>`
+			str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+		} else {
+			str += `<span class="pageNum page1" data-page=1>1</span>`
+			str += `<span class="more" >...</span>`
+			str += `<span class="pageNum ${'page'+(activePage -1)}" data-page=${activePage -1}>${activePage -1}</span>`
+			str += `<span class="pageNum ${'page'+activePage}" data-page=${activePage}>${activePage}</span>`
+			str += `<span class="pageNum ${'page'+(activePage +1)}" data-page=${activePage +1}>${activePage +1}</span>`
+			str += `<span class="more" >...</span>`
+			str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
+		}
+
+	}
+	str += `<span class="nextPage"><img class="arrowPage" src=${arrowRight} /></span>`
+	$('.pagination').html(str)
+	$('.page' + activePage).addClass('activePage')
+	$(".pageNum").on("click", function(e) {
+		const activePageNow = Number($(this).attr('data-page'))
+		getTabData(activePageNow)
+	})
+	$(".prePage").on("click", function(e) {
+		let activePageNow = Number($(".activePage").attr('data-page'))
+		if (activePageNow > 1) {
+			activePageNow--
+			getTabData(activePageNow)
+		}
+	})
+	$(".nextPage").on("click", function(e) {
+		let activePageNow = Number($(".activePage").attr('data-page'))
+		if (activePageNow < totalPage) {
+			activePageNow++
+			getTabData(activePageNow)
+		}
+	})
+
+}
+
+$(function() {
+	$('.datapickerBox').append(`<img class="iconCalen" src=${iconCalenGrey} />`)
+	$('.iconCalen').on("mouseenter", function(e) {
+		$(this).attr("src", iconCalenBlue)
+	})
+	$('.iconCalen').on("mouseleave", function(e) {
+		$(this).attr("src", iconCalenGrey)
+	})
+	$('.iconCalen').on("click", function(e) {
+		$(this).parent().find("input").focus()
+	})
+});

+ 4 - 4
src/js/qcListCopyUnqualified.js

@@ -1289,9 +1289,9 @@ $(function($){
         }
         let url
         if (codeType == 'XY') {
-            url = api.badLevelPageXYExport
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPageXYExport : api.badQualifiedLevelPageXYExport
         } else {
-            url = api.badLevelPagePageExport
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPagePageExport : api.badQualifiedLevelPagePageExport
         }
         if(exportTime==90){
             if((new Date(behosDateEnd) - new Date(behosDateStart))/24/60/60/1000 > exportTime){
@@ -1331,9 +1331,9 @@ function bindSaveColPort(param){
         }
         let url
         if (codeType == 'XY') {
-            url = api.badLevelPageXYExport
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPageXYExport : api.badQualifiedLevelPageXYExport
         } else {
-            url = api.badLevelPagePageExport
+            url = titleName=="不合格数" ? api.badUnQualifiedLevelPagePageExport : api.badQualifiedLevelPagePageExport
         }
         param.radioCheck = radioCheck||1
         expJson(url,param).then(res =>{

+ 4 - 0
src/js/utils.js

@@ -76,6 +76,9 @@ const pageMap = {
   "YH-SSXX-SSFQ": 'appealInit.html', //申诉发起列表
 
   "YH-XXTZ": 'messageNoti.html', //申诉发起列表
+  
+  "YH-RZGL-CZRZ": 'operationalLogs.html', //操作日志
+  "YH-RZGL-DLRZ": 'loginLogs.html', //登录日志
 };
 
 //导出时间天数
@@ -182,6 +185,7 @@ const post = function (url, data, opts) {
       })),
       contentType: 'application/json; charset=UTF-8',
       beforeSend: function (xmlHttp) {
+		xmlHttp.setRequestHeader('isPlacefile', isPlacefile);
         if (url.indexOf("sys/user/getHospitalMark") === -1) {
           xmlHttp.setRequestHeader('If-Modified-Since', '0');
           xmlHttp.setRequestHeader('Cache-Control', 'no-cache');