Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/test' into qc_zn

# Conflicts:
#	src/js/api.js
#	src/js/qcList.js
#	src/js/qcScore.js
#	webpack.config.js
zhouna 5 gadi atpakaļ
vecāks
revīzija
ae98662644

+ 60 - 2
src/css/index.less

@@ -421,9 +421,9 @@
   position: fixed;
   left: 50%;
   top: 50%;
-  width: 200px;
+  width: 300px;
   height: 50px;
-  margin: -25px 0 0 -100px;
+  margin: -25px 0 0 -150px;
   text-align: center;
   line-height: 50px;
   border-radius: 10px;
@@ -452,3 +452,61 @@ input::-webkit-inner-spin-button {
 input[type="number"] {
     -moz-appearance: textfield;
 }
+
+
+.itemContentBoxLis {
+  width: 220px;
+  height: 365px;
+  margin: 30px 20px 20px 70px;
+  border: 1px solid #EFF0F9;
+  .title {
+      height: 40px;
+      line-height: 40px;
+      background-color: #EFF0F9;
+      text-align: center;
+  }
+  .partPub {
+    padding-top: 10px;
+    height: 315px;
+    overflow: auto;
+    li {
+      padding: 8px 20px;
+      cursor: pointer;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+    }
+    img {
+      width: 14px;
+      height: 14px;
+      position: relative;
+      top: 2px;
+      margin-right: 10px;
+    }
+  }
+}
+.itemContentBoxLisL {
+  float: left;
+}
+.itemContentBoxLisR {
+  margin-left: 20px;
+  margin-right: 70px;
+  float: right;
+}
+.activeGo {
+  position: absolute;
+  width: 40px;
+  height: 60px;
+  left: 50%;
+  top: 50%;
+  margin-left: -20px;
+  margin-top: -45px;
+  img {
+    width: 40px;
+    height: 22px;
+    cursor: pointer;
+  }
+  .btm {
+    margin-top: 15px;
+  }
+}

+ 200 - 171
src/css/itemManager.less

@@ -1,196 +1,225 @@
-.container{
+.managerContainer{
     width: 100%;
     height: 100%;
     overflow-y: auto;
-}
-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 35px;
-    border-bottom: 1px solid #E2E5EF;
-    font-size: 14px;
-    font-weight: bold;
-    letter-spacing: 1px;
-}
-.main-body{
-    margin: 20px 40px;
-}
-table{
-    width: 100%;
-    border:1px solid #E2E5EF;
-    border-collapse: collapse;
-    thead{
-        background: #EFF0F9;
-       
+    .selectUsed,.selectReject {
+        float: right;
     }
-    th,td{
-        height: 40px;
+    ul,li{
+        padding:0;
+        margin:0;
+        list-style:none;
+    }
+    h2{
+        width: 100%;
         box-sizing: border-box;
-        padding: 10px;
+        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{
+        margin: 20px 40px;
+    }
+    table{
+        width: 100%;
         border:1px solid #E2E5EF;
         border-collapse: collapse;
+        thead{
+            background: #EFF0F9;
+           
+        }
+        th,td{
+            height: 40px;
+            box-sizing: border-box;
+            padding: 10px;
+            border:1px solid #E2E5EF;
+            border-collapse: collapse;
+        }
+        th{
+            font-size: 14px;
+            font-weight: 500;
+        }
+        td{
+            font-size: 14px;
+            font-weight: 400 
+        }
+        .moduleNumber{
+            text-align: center;
+        }
+        
     }
-    th{
-        font-size: 14px;
-        font-weight: 500;
+    // .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;
     }
-    td{
-        font-size: 14px;
-        font-weight: 400 
+    .filterDropList{
+        position: absolute;
+        right: 0;
+        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;
+        }
     }
-    .moduleNumber{
-        text-align: center;
+    .rejectList, .usedList{
+        height: 120px;
+        li{
+            padding: 0 10px;
+        }
+        li:hover{
+            background-color: #EEF4FF;
+            cursor: pointer;
+        }
     }
-    
-}
-// .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;
-    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;
+    .switchImg{
+        width: 30px;
     }
-}
-.rejectList, .usedList{
-    height: 120px;
-    li{
+    .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: default;
+        outline: none;
+    }
+    .moduleTypeList{
+         width: 160px;
     }
-    li:hover{
+    .selectUsed, .selectReject{
+        width: 140px;
+    }
+    .modeTypeItem:hover{
         background-color: #EEF4FF;
         cursor: pointer;
     }
-}
-.switchImg{
-    width: 30px;
-}
-.selectModuleType,.moduleItemInp,.selectUsed, .selectReject{
-    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;
-}
-.arrow{
-    position: absolute;
-    width: 10px;
-    top: 16px;
-    right: 10px;
-}
-.moduleItemInp{
-    cursor: default;
-    outline: none;
-}
-.moduleTypeList{
-     width: 160px;
-}
-.selectUsed, .selectReject{
-    width: 120px;
-}
-.modeTypeItem:hover{
-    background-color: #EEF4FF;
-    cursor: pointer;
-}
-.rejectList, .usedList {
-    width: 120px;
-}
-.filter{
-    display: inline-block;
-    width:60px;
-    height:36px;
-    background:#5A8EEE;
-    border-radius:4px;
-    color: #fff;
-    text-align: center;
-    line-height: 36px;
-    position: relative;
-    top: -1px;
-    cursor: pointer;
-}
-.editItem{
-   color: #5A8EEE;
-   cursor: pointer;
-}
-
-.ellipsis{
-    overflow: hidden;
-    text-overflow:ellipsis;
-    white-space: nowrap;
-}
-.textCenter{
-    text-align: center;
-}
-
-
-.pagination{
-    margin: 35px 0 0 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{
+    .rejectList, .usedList {
+        width: 140px;
+    }
+    .filter{
+        display: inline-block;
+        width:60px;
+        height:36px;
+        background:#5A8EEE;
+        border-radius:4px;
+        color: #fff;
+        text-align: center;
+        line-height: 36px;
         position: relative;
-        top: 0px   ;
+        top: -1px;
+        cursor: pointer;
+    }
+    .editItem{
+       color: #5A8EEE;
+       cursor: pointer;
+    }
+    
+    .ellipsis{
+        overflow: hidden;
+        text-overflow:ellipsis;
+        white-space: nowrap;
+    }
+    .textCenter{
+        text-align: center;
+    }
+    
+    
+    .pagination{
+        margin: 35px 0 0 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: #5A8EEE;
+    }
+    
+    input::-webkit-outer-spin-button,
+    input::-webkit-inner-spin-button {
+        -webkit-appearance: none;
+    }
+     
+    input[type="number"] {
+        -moz-appearance: textfield;
     }
 }
- .more{
-    cursor: not-allowed;
+
+.usrContain .selectReject,.usrContain .selectModuleType ,.managerContainer .selectModuleType  {
+    float: right;
+}
+.usrContain .rejectList,.usrContain .usedList{
+    height: 200px;
 }
-.arrowPage{
-    width: 6px;
+.usrContain .selectModuleType, .usrContain .moduleItemInp, .usrContain .selectUsed, .usrContain .selectReject {
+    width: 170px;
 }
-.activePage{
-    color: #5A8EEE;
+.managerContainer .moduleTypeList {
+    width: 140px;
 }
-
-input::-webkit-outer-spin-button,
-input::-webkit-inner-spin-button {
-    -webkit-appearance: none;
+.managerContainer.usrContain .moduleTypeList {
+    width: 170px;
+    height: 400px;
 }
- 
-input[type="number"] {
-    -moz-appearance: textfield;
+.managerContainer.usrContain .selectReject {
+    width: 140px;
 }

+ 2 - 2
src/css/moduleManager.less

@@ -8,9 +8,9 @@ h2{
     z-index: 20;
     height: 44px;
     line-height: 44px;
-    padding: 0 0 0 35px;
+    padding: 0 0 0 15px;
     border-bottom: 1px solid #E2E5EF;
-    font-size: 14px;
+    font-size: 16px;
     font-weight: bold;
     letter-spacing: 1px;
 }

+ 40 - 4
src/css/qcList.less

@@ -13,9 +13,9 @@ h2{
     z-index: 20;
     height: 44px;
     line-height: 44px;
-    padding: 0 0 0 35px;
+    padding: 0 0 0 15px;
     border-bottom: 1px solid #E2E5EF;
-    font-size: 14px;
+    font-size: 16px;
     font-weight: bold   ;
     letter-spacing: 1px;
 }
@@ -46,6 +46,24 @@ table{
         font-weight: 500;
         white-space: nowrap;
     }
+    th[code]{
+        cursor: pointer;
+        &:after{
+            content:"";
+            display:inline-block;
+            width: 11px;
+            height: 14px;
+            margin-left: 4px;
+            vertical-align: middle;
+            background: url("../images/grey.png");
+        }
+        &.asc:after{
+            background: url("../images/up_blue.png");
+        }
+        &.desc:after{
+            background: url("../images/down_blue.png");
+        }
+    }
     td{
         font-size: 14px;
         font-weight: 400;
@@ -122,7 +140,7 @@ table{
 .filterDropList{
     position: absolute;
     right: 0;
-    height: 200px;
+    max-height: 200px;
     overflow-y: auto;
     background: #fff;
     display: none;
@@ -133,6 +151,10 @@ table{
         padding: 0 10px;
     }
 }
+.deptList{
+    width: 160px;
+    max-height: 400px;
+}
 .levelList{
     width: 120px;
     height: 200px;
@@ -141,7 +163,7 @@ table{
         cursor: pointer;
     }
 }
-.selectLevel{
+.selectLevel,.selectDept{
     display: inline-block;
     position: relative;
     width:120px;
@@ -152,6 +174,10 @@ table{
     box-sizing: border-box;
     cursor: pointer;
 }
+.selectDept{
+    width: 160px;
+}
+
 .filter{
     display: inline-block;
     width:60px;
@@ -215,6 +241,15 @@ table{
     cursor: pointer;
 }
 
+.deptItem:hover{
+    background-color: #EEF4FF;
+    cursor: pointer;
+}
+.ellipsis{
+    overflow: hidden;
+    text-overflow:ellipsis;
+    white-space: nowrap;
+}
 
 
 .pagination{
@@ -255,6 +290,7 @@ table{
 
 .ui-datepicker-calendar {
     border: 0 none;
+    min-width: 0;
 }
 .ui-datepicker thead {
     background-color: #fff;

+ 332 - 0
src/css/qcListDept.less

@@ -0,0 +1,332 @@
+.container{
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+}
+ul,li{
+    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{
+    margin: 20px 0;
+    padding: 0 35px;
+    min-width: 1090px;
+    /*width: 100%;*/
+}
+table{
+    width: 100%;
+    min-width: 1090px;
+    border:1px solid #E2E5EF;
+    border-collapse: collapse;
+    thead{
+        background: #EFF0F9;
+       
+    }
+    th,td{
+        height: 40px;
+        box-sizing: border-box;
+        padding: 10px;
+        border:1px solid #E2E5EF;
+        border-collapse: collapse;
+    }
+    th{
+        font-size: 14px;
+        font-weight: 500;
+        white-space: nowrap;
+    }
+    td{
+        font-size: 14px;
+        font-weight: 400;
+        white-space: nowrap;
+    }
+    .moduleNumber{
+        text-align: center;
+    }
+    .scoreOperaItem{
+        width: 50px;
+        cursor: pointer;
+    }
+    
+}
+.tabFoot{
+    height: 40px;
+    /*border: 1px solid #E2E5EF;
+    border-top: none;
+    box-sizing: border-box;*/
+}
+.scoreOpera{
+    height: 50px;
+    line-height: 50px;
+    margin: 0 20px 0 0;
+    cursor: pointer;
+    img{
+        margin: 0 10px 0 0;
+    }
+}
+
+.recordScoreOperaBtn{
+    cursor: pointer;
+    color: #5A8EEE;
+}
+.recordScoreBtn{
+    cursor: pointer;
+    display: inline-block;
+    width:68px;
+    height:30px;
+    line-height: 30px;
+    text-align: center;
+    border-radius:4px;
+    box-sizing: border-box;
+    border: 1px solid #5A8EEE;
+    color: #5A8EEE;
+}
+.filterBox{
+    margin-bottom: 15px;
+}
+.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;
+    }
+}
+
+.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;
+    }
+}
+.deptList{
+    width: 160px;
+    max-height: 400px;
+}
+.levelList{
+    width: 120px;
+    height: 200px;
+    li:hover{
+        background-color: #EEF4FF;
+        cursor: pointer;
+    }
+}
+
+.selectLevel,.selectDept{
+    display: inline-block;
+    position: relative;
+    width:120px;
+    padding: 0 10px;
+    height:40px;
+    border-radius:4px;
+    border: 1px solid #E2E5EF;
+    box-sizing: border-box;
+    cursor: pointer;
+}
+.selectDept{
+    width: 160px;
+}
+
+.filter{
+    display: inline-block;
+    width:60px;
+    height:36px;
+    background:#5A8EEE;
+    border-radius:4px;
+    color: #fff;
+    text-align: center;
+    line-height: 36px;
+    position: relative;
+    top: 2px;
+    cursor: pointer;
+    float: left;
+}
+.arrow{
+    position: absolute;
+    width: 10px;
+    top: 16px;
+    right: 10px;
+}
+.iconCheck{
+    width: 14px;
+}
+.fl{
+    float: left;
+}
+.clearfix:after {
+    content: '';
+    height: 0;
+    line-height: 0;
+    display: block;
+    visibility: hidden;
+    clear: both;
+}
+.clearfix{
+    zoom:1
+}
+.divide{
+    margin: 0 10px;
+}
+.datapickerBox{
+    position: relative;
+    display: inline-block;
+    width: 120px;
+    height: 40px;
+    input{
+        position: absolute;
+    }
+}
+.iconCalen{
+    position: absolute;
+    width: 15px;
+    top: 12px;
+    right: 10px;
+}
+.textCenter{
+    text-align: center;
+}
+.patientNameSpan{
+    color: #5A8EEE;
+    cursor: pointer;
+}
+
+.deptItem:hover{
+    background-color: #EEF4FF;
+    cursor: pointer;
+}
+.ellipsis{
+    overflow: hidden;
+    text-overflow:ellipsis;
+    white-space: nowrap;
+}
+
+
+.pagination{
+    margin: 35px 0 0 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: #5A8EEE;
+}
+
+
+
+.ui-datepicker-calendar {
+    border: 0 none;
+    min-width: 0;
+}
+.ui-datepicker thead {
+    background-color: #fff;
+    color: #c3cbd6;
+}
+.ui-datepicker td {
+    padding: 0;
+    height: auto;
+    color: #657180;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+    text-align: center;
+    height: 30px;
+    line-height: 30px;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+    border: 0;
+    background-color: #fff;
+    &:hover {
+        background-color: #c4d8fe;
+    }
+}
+.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
+    color: #333;
+    font-weight: normal;
+    height: 30px;
+    line-height: 30px;
+    margin: 0 5px;
+    width: 40%;
+    border-radius: 3px;
+}
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
+    top: 5px;
+}
+.ui-state-active, .ui-widget-content .ui-state-active {
+    background-color: #5a8eee !important;
+    color: #fff;
+}
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {
+    background-color: #fff5bf !important;
+    color: #657180;
+}
+.ui-widget-header {
+    background-color: #fff;
+    border: 0 none;
+}
+
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+    -webkit-appearance: none;
+}
+ 
+input[type="number"] {
+    -moz-appearance: textfield;
+}

+ 343 - 0
src/css/qcListPerson.less

@@ -0,0 +1,343 @@
+.container{
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+}
+ul,li{
+    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{
+    margin: 20px 0;
+    padding: 0 35px;
+    min-width: 1090px;
+    /*width: 100%;*/
+}
+table{
+    width: 100%;
+    min-width: 1090px;
+    border:1px solid #E2E5EF;
+    border-collapse: collapse;
+    thead{
+        background: #EFF0F9;
+       
+    }
+    th,td{
+        height: 40px;
+        box-sizing: border-box;
+        padding: 10px;
+        border:1px solid #E2E5EF;
+        border-collapse: collapse;
+    }
+    th{
+        font-size: 14px;
+        font-weight: 500;
+        white-space: nowrap;
+    }
+    td{
+        font-size: 14px;
+        font-weight: 400;
+        white-space: nowrap;
+    }
+    .moduleNumber{
+        text-align: center;
+    }
+    .scoreOperaItem{
+        width: 50px;
+        cursor: pointer;
+    }
+    
+}
+.tabFoot{
+    height: 40px;
+    /*border: 1px solid #E2E5EF;
+    border-top: none;
+    box-sizing: border-box;*/
+}
+.scoreOpera{
+    height: 50px;
+    line-height: 50px;
+    margin: 0 20px 0 0;
+    cursor: pointer;
+    img{
+        margin: 0 10px 0 0;
+    }
+}
+
+.recordScoreOperaBtn{
+    cursor: pointer;
+    color: #5A8EEE;
+}
+.recordScoreBtn{
+    cursor: pointer;
+    display: inline-block;
+    width:68px;
+    height:30px;
+    line-height: 30px;
+    text-align: center;
+    border-radius:4px;
+    box-sizing: border-box;
+    border: 1px solid #5A8EEE;
+    color: #5A8EEE;
+}
+.filterBox{
+    margin-bottom: 15px;
+}
+.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;
+    }
+}
+
+.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;
+    }
+}
+.deptList{
+    width: 160px;
+    max-height: 400px;
+}
+.levelList{
+    width: 120px;
+    height: 200px;
+    li:hover{
+        background-color: #EEF4FF;
+        cursor: pointer;
+    }
+}
+.selectLevel,.selectDept,.selectDoctor{
+    display: inline-block;
+    position: relative;
+    width:120px;
+    padding: 0 10px;
+    height:40px;
+    border-radius:4px;
+    border: 1px solid #E2E5EF;
+    box-sizing: border-box;
+    cursor: pointer;
+}
+.selectDoctor{
+    min-width: 120px;
+    width: auto;
+}
+.selectDept{
+    width: 160px;
+}
+.doctorFilter{
+    span{
+        float: left;
+    }
+}
+.selectDoctor{
+    cursor: default;
+}
+
+.filter{
+    display: inline-block;
+    width:60px;
+    height:36px;
+    background:#5A8EEE;
+    border-radius:4px;
+    color: #fff;
+    text-align: center;
+    line-height: 36px;
+    position: relative;
+    top: 2px;
+    cursor: pointer;
+    float: left;
+}
+.arrow{
+    position: absolute;
+    width: 10px;
+    top: 16px;
+    right: 10px;
+}
+.iconCheck{
+    width: 14px;
+}
+.fl{
+    float: left;
+}
+.clearfix:after {
+    content: '';
+    height: 0;
+    line-height: 0;
+    display: block;
+    visibility: hidden;
+    clear: both;
+}
+.clearfix{
+    zoom:1
+}
+.divide{
+    margin: 0 10px;
+}
+.datapickerBox{
+    position: relative;
+    display: inline-block;
+    width: 120px;
+    height: 40px;
+    input{
+        position: absolute;
+    }
+}
+.iconCalen{
+    position: absolute;
+    width: 15px;
+    top: 12px;
+    right: 10px;
+}
+.textCenter{
+    text-align: center;
+}
+.patientNameSpan{
+    color: #5A8EEE;
+    cursor: pointer;
+}
+
+.deptItem:hover{
+    background-color: #EEF4FF;
+    cursor: pointer;
+}
+.ellipsis{
+    overflow: hidden;
+    text-overflow:ellipsis;
+    white-space: nowrap;
+}
+
+
+.pagination{
+    margin: 35px 0 0 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: #5A8EEE;
+}
+
+
+
+.ui-datepicker-calendar {
+    border: 0 none;
+    min-width: 0;
+}
+.ui-datepicker thead {
+    background-color: #fff;
+    color: #c3cbd6;
+}
+.ui-datepicker td {
+    padding: 0;
+    height: auto;
+    color: #657180;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+    text-align: center;
+    height: 30px;
+    line-height: 30px;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+    border: 0;
+    background-color: #fff;
+    &:hover {
+        background-color: #c4d8fe;
+    }
+}
+.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
+    color: #333;
+    font-weight: normal;
+    height: 30px;
+    line-height: 30px;
+    margin: 0 5px;
+    width: 40%;
+    border-radius: 3px;
+}
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
+    top: 5px;
+}
+.ui-state-active, .ui-widget-content .ui-state-active {
+    background-color: #5a8eee !important;
+    color: #fff;
+}
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {
+    background-color: #fff5bf !important;
+    color: #657180;
+}
+.ui-widget-header {
+    background-color: #fff;
+    border: 0 none;
+}
+
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+    -webkit-appearance: none;
+}
+ 
+input[type="number"] {
+    -moz-appearance: textfield;
+}

+ 16 - 3
src/css/qcScore.less

@@ -9,11 +9,12 @@
   height: 18px;
 }
 .patient-info{
-  height: 50px;
+  // height: 50px;
   line-height: 50px;
   margin-top: 10px;
   span{
     margin-right: 40px;
+    display: inline-block;
   }
 }
 #patientInfo{
@@ -87,7 +88,7 @@
   margin-left: @menuWt+10px;
   height: 100%;
   .content-box{
-    width:70%;
+    width:78%;
     height: 100%;
     position: relative;
     overflow-y: auto;
@@ -242,7 +243,7 @@
     }
   }
   .operation{
-    width:28%;
+    width:20%;
     height: 100%;
     margin-right: 10px;
     position: relative;
@@ -435,6 +436,18 @@
 .textPreLine{
   white-space: pre-line;
 }
+.textIndent30{
+  text-indent:30px
+}
+.textBold{
+  font-weight: bold;
+}
+.padL30{
+  padding-left: 30px;
+}
+.displayInlineBlock{
+  display: inline-block;
+}
 
 /********缺陷总览*********/
 .flaw-table{

+ 85 - 0
src/css/roleManager.less

@@ -0,0 +1,85 @@
+.leftMenu {
+    border: 1px solid #E2E5EF;
+    padding: 20px;
+    width: 350px;
+    height: 700px;
+    background-color: #fff;
+}
+.pubStyleMeun {
+    .roleLis li {
+        padding: 0 10px;
+        height: 50px;
+        line-height: 50px;
+        cursor: pointer;
+        &:hover {
+            background-color: #F0F5FF;
+        }
+    }
+    // .editRole {
+    //     float: right;
+    //     width: 52px;
+    //     height: 30px;
+    //     line-height: 30px;
+    //     color: #5A8EEE;
+    //     border: 1px solid #5A8EEE;
+    //     border-radius: 4px;
+    //     text-align: center;
+    //     position: relative;
+    //     top: 10px;
+    //     cursor: pointer;
+    // }
+}
+.rightMenu {
+    position: absolute;
+    width: 100%;
+    top: 64px;
+    right: 40px;
+    border: 1px solid #ccc;
+    overflow: auto;
+    .toptools {
+        height: 56px;
+        line-height: 56px;
+        border-bottom: 1px solid #E2E5EF;
+        padding: 0 20px;
+        border-radius: 4px;
+    }
+    .saveRoleSet {
+        width: 60px;
+        height: 36px;
+        line-height: 36px;
+        text-align: center;
+        background-color: #5A8EEE;
+        color: #fff;
+        float: right;
+        margin-top: 10px;
+        border-radius: 4px;
+        cursor: pointer;
+    }
+    .mainSysWrap {
+        padding: 0 15px;
+    }
+    .mainSys {
+        border-bottom: 1px solid #E2E5EF;
+        padding: 10px 0 0 0;
+        img {
+            width: 14px;
+            position: relative;
+            top: 2px;
+        }
+        .parentSet {
+            padding-bottom: 15px;
+            cursor: pointer;
+        }
+        .sysWrap {
+            margin-left: 30px;
+        }
+        .sonSet {
+            li {
+                padding-bottom: 15px;
+                float: left;
+                margin-left: 30px;
+                cursor: pointer;
+            }
+        }
+    }
+}

+ 4 - 4
src/html/itemManager.html

@@ -10,13 +10,13 @@
 </head>
 
 <body>
-    <div class="container">
+    <div class="managerContainer">
         <h2>条目数据维护</h2>
         <div class="main-body">
             <div class="filterBox">
                 <span class="filterItem typeFilter">
                     <span>模块名称:</span>
-                    <span class="selectModuleType">全部 </span>
+                    <span class="selectModuleType ellipsis">全部 </span>
                     <ul class="moduleTypeList filterDropList"></ul>
                 </span>
                 <span class="filterItem">
@@ -27,7 +27,7 @@
                 </span>
                 <span class="filterItem">
                     <span>单项否决:</span>
-                    <span class="selectReject">全部</span>
+                    <span class="selectReject ellipsis">全部</span>
                     <ul class="rejectList filterDropList">
                         <Li  class="rejectItem" data-name="全部" data-id="">全部</Li>
                         <li  class="rejectItem" data-name="是" data-id=1>是</li>
@@ -36,7 +36,7 @@
                 </span>
                 <span class="filterItem">
                     <span>启用状态:</span>
-                    <span class="selectUsed">全部</span>
+                    <span class="selectUsed ellipsis">全部</span>
                     <ul class="usedList filterDropList">
                         <Li class="usedItem" data-name="全部" data-id="">全部</Li>
                         <li class="usedItem" data-name="是" data-id=1>是</li>

+ 32 - 14
src/html/qcList.html

@@ -22,6 +22,22 @@
                     <span>病人姓名:</span>
                     <input class="patientNameInp" type="text" placeholder="请输入病人姓名">
                 </span>
+                <span class="filterItem typeFilter">
+                    <span>科室:</span>
+                    <span class="selectDept"> 
+                        全部
+                    </span>
+                   
+                    <ul class="deptList filterDropList"></ul>
+                </span>
+                <span class="filterItem doctorFilter">
+                    <span>医生姓名:</span>
+                    <input class="doctorInp" type="text" placeholder="请输入医生姓名">
+                </span>
+                <span class="filterItem doctorFilter">
+                    <span>医生工号:</span>
+                    <input class="doctorNumInp" type="text" placeholder="请输入医生工号">
+                </span>
                 <span class="filterItem typeFilter clearfix">
                     <span class="fl">入院日期:</span>
                     <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" /></span>
@@ -46,26 +62,28 @@
                     <thead>
                     <th class="textCenter" ></th>
                     <th class="recordScoreOpera textCenter" style="width: 65px;">操作</th>
-                    <th class="beHospitalId textCenter">病历号</th>
-                    <th class="patientNo textCenter">病案号</th>
-                    <th class="patientName textCenter" style="width: 100px;">病人姓名</th>
-                    <th class="patientSex textCenter">性别</th>
-                    <th class="patientage textCenter">年龄</th>
-                    <th class="bedNum textCenter">床号</th>
-                    <th class="inHospitalDate textCenter">入院日期</th>
-                    <th class="outHospitalDate textCenter">出院日期</th>
-                    <th class="doctorName textCenter">主治医生</th>
-                    <th class="deptName textCenter">科室</th>
-                    <th class="recordLevel textCenter">病历等级</th>
-                    <th class="recordScore textCenter">病历得分</th>
-                    <th class="scoreTime textCenter">评分时间</th>
+                    <th class="beHospitalId textCenter" code="behospital_code">病历号</th>
+                    <th class="patientNo textCenter" code="file_code">病案号</th>
+                    <th class="patientName textCenter" code="name" style="width: 100px;">病人姓名</th>
+                    <th class="patientSex textCenter" code="sex">性别</th>
+                    <th class="patientage textCenter" code="age">年龄</th>
+                    <th class="bedNum textCenter" code="bed_code">床号</th>
+                    <th class="inHospitalDate textCenter" code="behospital_date">入院日期</th>
+                    <th class="outHospitalDate textCenter" code="leave_hospital_date">出院日期</th>
+                    <th class="doctorName textCenter" code="beh_doctor_name">住院医生</th>
+                    <th class="doctorName textCenter" code="doctor_name">主管医生</th>
+                    <th class="doctorName textCenter" code="director_doctor_name">主任医生</th>
+                    <th class="deptName textCenter" code="beh_dept_name">科室</th>
+                    <th class="recordLevel textCenter" code="level">病历等级</th>
+                    <th class="recordScore textCenter" code="score_res">病历得分</th>
+                    <th class="scoreTime textCenter" code="grade_time">评分时间</th>
                     </thead>
                     <tbody>
 
                     </tbody>
                     <tfoot>
                     <tr>
-                        <td colspan="15">
+                        <td colspan="17">
                             <div class="tabFoot">
                                 <span class="scoreOpera" data-selectAll=false><img class="iconCheck" src="" alt="checkbox">全选</span>
                                 <span class="recordScoreBtn">评分</span>

+ 108 - 0
src/html/qcListDept.html

@@ -0,0 +1,108 @@
+<!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="container">
+        <h2>质控评分</h2>
+        <div class="main-body">
+            <div class="filterBox clearfix">
+                <span class="filterItem typeFilter">
+                    <span>病历号:</span>
+                    <input class="patientNumInp" type="text" placeholder="请输入病历号">
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>病人姓名:</span>
+                    <input class="patientNameInp" type="text" placeholder="请输入病人姓名">
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>科室:</span>
+                    <span class="selectDept"> 
+                        全部
+                    </span>
+                   
+                    <ul class="deptList filterDropList"></ul>
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>医生姓名:</span>
+                    <input class="doctorInp" type="text" placeholder="请输入医生姓名">
+                </span>
+                <span class="filterItem doctorFilter">
+                    <span>医生工号:</span>
+                    <input class="doctorNumInp" type="text" placeholder="请输入医生工号">
+                </span>
+                <span class="filterItem typeFilter clearfix">
+                    <span class="fl">入院日期:</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" /></span>
+                    <span  class="divide fl">-</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker2"  autocomplete="off" /></span>
+                </span>
+                <span class="filterItem">
+                    <span>病历等级:</span>
+                    <span class="selectLevel">全部</span>
+                    <ul class="levelList filterDropList">
+                        <Li class="levelItem" data-name="全部" data-id="">全部</Li>
+                        <Li class="levelItem" data-name="未评分" data-id="未评分">未评分</Li>
+                        <Li class="levelItem" data-name="甲" data-id="甲">甲</Li>
+                        <li class="levelItem" data-name="乙" data-id=乙>乙</li>
+                        <li class="levelItem" data-name="丙" data-id=丙>丙</li>
+                    </ul>
+                </span>
+                <span class="filter">查询</span>
+            </div>
+            <div>
+                <table>
+                    <thead>
+                    <th class="textCenter" ></th>
+                    <th class="recordScoreOpera textCenter" style="width: 65px;">操作</th>
+                    <th class="beHospitalId textCenter" code="behospital_code">病历号</th>
+                    <th class="patientNo textCenter" code="file_code">病案号</th>
+                    <th class="patientName textCenter" code="name" style="width: 100px;">病人姓名</th>
+                    <th class="patientSex textCenter" code="sex">性别</th>
+                    <th class="patientage textCenter" code="age">年龄</th>
+                    <th class="bedNum textCenter" code="bed_code">床号</th>
+                    <th class="inHospitalDate textCenter" code="behospital_date">入院日期</th>
+                    <th class="outHospitalDate textCenter" code="leave_hospital_date">出院日期</th>
+                    <th class="doctorName textCenter" code="beh_doctor_name">住院医生</th>
+                    <th class="doctorName textCenter" code="doctor_name">主管医生</th>
+                    <th class="doctorName textCenter" code="director_doctor_name">主任医生</th>
+                    <th class="deptName textCenter" code="beh_dept_name">科室</th>
+                    <th class="recordLevel textCenter" code="level">病历等级</th>
+                    <th class="recordScore textCenter" code="score_res">病历得分</th>
+                    <th class="scoreTime textCenter" code="grade_time">评分时间</th>
+                    </thead>
+                    <tbody>
+
+                    </tbody>
+                    <tfoot>
+                    <tr>
+                        <td colspan="17">
+                            <div class="tabFoot">
+                                <span class="scoreOpera" data-selectAll=false><img class="iconCheck" src="" alt="checkbox">全选</span>
+                                <span class="recordScoreBtn">评分</span>
+                            </div>
+                        </td>
+                    </tr>
+                    </tfoot>
+                </table>
+            </div>
+
+            <!--<div class="tabFoot">
+                <span class="scoreOpera" data-selectAll=false><img class="iconCheck" src="" alt="checkbox">全选</span>
+                <span class="recordScoreBtn">评分</span>
+            </div>-->
+
+            <div class="pagination"></div>
+        </div>
+        
+    </div>
+</body>
+
+</html>

+ 108 - 0
src/html/qcListPerson.html

@@ -0,0 +1,108 @@
+<!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="container">
+        <h2>质控评分</h2>
+        <div class="main-body">
+            <div class="filterBox clearfix">
+                <span class="filterItem typeFilter">
+                    <span>病历号:</span>
+                    <input class="patientNumInp" type="text" placeholder="请输入病历号">
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>病人姓名:</span>
+                    <input class="patientNameInp" type="text" placeholder="请输入病人姓名">
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>科室:</span>
+                    <span class="selectDept"> 
+                        全部
+                    </span>
+                   
+                    <ul class="deptList filterDropList"></ul>
+                </span>
+                <span class="filterItem doctorFilter">
+                    <span>医生:</span>
+                    <span class="selectDoctor"> 
+                        
+                    </span>
+                    <!-- <input class="doctorInp" type="text" placeholder="请输入医生姓名"> -->
+                </span>
+               
+                <span class="filterItem typeFilter clearfix">
+                    <span class="fl">入院日期:</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" /></span>
+                    <span  class="divide fl">-</span>
+                    <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker2"  autocomplete="off" /></span>
+                </span>
+                <span class="filterItem">
+                    <span>病历等级:</span>
+                    <span class="selectLevel">全部</span>
+                    <ul class="levelList filterDropList">
+                        <Li class="levelItem" data-name="全部" data-id="">全部</Li>
+                        <Li class="levelItem" data-name="未评分" data-id="未评分">未评分</Li>
+                        <Li class="levelItem" data-name="甲" data-id="甲">甲</Li>
+                        <li class="levelItem" data-name="乙" data-id=乙>乙</li>
+                        <li class="levelItem" data-name="丙" data-id=丙>丙</li>
+                    </ul>
+                </span>
+                <span class="filter">查询</span>
+            </div>
+            <div>
+                <table>
+                    <thead>
+                    <th class="textCenter" ></th>
+                    <th class="recordScoreOpera textCenter" style="width: 65px;">操作</th>
+                    <th class="beHospitalId textCenter" code="behospital_code">病历号</th>
+                    <th class="patientNo textCenter" code="file_code">病案号</th>
+                    <th class="patientName textCenter" code="name" style="width: 100px;">病人姓名</th>
+                    <th class="patientSex textCenter" code="sex">性别</th>
+                    <th class="patientage textCenter" code="age">年龄</th>
+                    <th class="bedNum textCenter" code="bed_code">床号</th>
+                    <th class="inHospitalDate textCenter" code="behospital_date">入院日期</th>
+                    <th class="outHospitalDate textCenter" code="leave_hospital_date">出院日期</th>
+                    <th class="doctorName textCenter" code="beh_doctor_name">住院医生</th>
+                    <th class="doctorName textCenter" code="doctor_name">主管医生</th>
+                    <th class="doctorName textCenter" code="director_doctor_name">主任医生</th>
+                    <th class="deptName textCenter" code="beh_dept_name">科室</th>
+                    <th class="recordLevel textCenter" code="level">病历等级</th>
+                    <th class="recordScore textCenter" code="score_res">病历得分</th>
+                    <th class="scoreTime textCenter" code="grade_time">评分时间</th>
+                    </thead>
+                    <tbody>
+
+                    </tbody>
+                    <tfoot>
+                    <tr>
+                        <td colspan="17">
+                            <div class="tabFoot">
+                                <span class="scoreOpera" data-selectAll=false><img class="iconCheck" src="" alt="checkbox">全选</span>
+                                <span class="recordScoreBtn">评分</span>
+                            </div>
+                        </td>
+                    </tr>
+                    </tfoot>
+                </table>
+            </div>
+
+            <!--<div class="tabFoot">
+                <span class="scoreOpera" data-selectAll=false><img class="iconCheck" src="" alt="checkbox">全选</span>
+                <span class="recordScoreBtn">评分</span>
+            </div>-->
+
+            <div class="pagination"></div>
+        </div>
+        
+    </div>
+</body>
+
+</html>

+ 136 - 104
src/html/qcScore.html

@@ -117,14 +117,14 @@
             <h2 class="title">${title}</h2>
             <div class="container content-ht">
                 {{each(i,val) info}}
-                    {{if val['查房类别'].indexOf('主刀')!=-1}}<!-- 非soap -->
-     
+                    {{if val['查房类别'].indexOf('主刀') != -1}}<!-- 非soap -->
+                       
                     {{/if}}
-                    {{if val['VTE评分']!=undefined&&(val['查房类别'].indexOf('主刀')==-1)}}
+                    {{if ((val['VTE评分']!=undefined&&(val['查房类别'].indexOf('主刀')==-1))||(val['查房类别'].indexOf('主刀') > -1))}}
                         <div class="cont">
-                            <span class="wardRound">${val['事件日期']}</span>
-                            <span class="wardRound">${val['查房医师']}</span>
-                            <span class="wardRound">${val['查房类别']||val['上级查房医生职称']+'查房'}</span>
+                            <span class="wardRound textBold">${val['事件日期']}</span>
+                            <span class="wardRound textBold">${val['查房医师']}</span>
+                            <span class="wardRound textBold">${val['查房类别']||val['上级查房医生职称']+'查房'}</span>
                             <table class="wardRound-table">
                                 <tr>
                                     <td class="tdFstTitle">S:</td>
@@ -132,7 +132,11 @@
                                 </tr>
                                 <tr>
                                     <td class="tdFstTitle">O:</td>
-                                    <td>${val['体检']}</td>
+                                    {{if 体检}}
+                                        <td>${val['体检']}</td>
+                                    {{else}}
+                                    <td>${val['VTE风险评估']}${val['VTE评分']}${val['营养风险总评分']}</td>
+                                    {{/if}}
                                 </tr>
                                 <tr>
                                     <td class="tdFstTitle">A:</td>
@@ -143,17 +147,17 @@
                                     <td>${val['治疗计划和措施']}</td>
                                 </tr>
                             </table>
-                            <span class="wardRound"><i>记录医师:</i>${val['查房医师']}</span>
+                            <span class="wardRound"><i>记录医师:</i>${val['医生']}</span>
                             <span class="wardRound"><i>上级医师审核:</i>${val['审核人']}</span>
                             <span class="wardRound"><i>审核时间:</i>${val['审核日期']}</span>
                         </div>
                     {{/if}}
                     {{if val['VTE评分']==undefined&&(val['查房类别'].indexOf('主刀')==-1)}}
                         <div class="cont">
-                            <span class="wardRound">${val['事件日期']}</span>
-                            <span class="wardRound">${val['查房医师']}</span>
-                            <span class="wardRound">${val['查房备注']}</span>
-                            <p>${val['查房记录']}</p>
+                            <span class="wardRound textBold">${val['事件日期']}</span>
+                            <span class="wardRound textBold">${val['查房医师']}</span>
+                            <span class="wardRound textBold">${val['查房备注']}</span>
+                            <p class="textIndent30">${val['查房记录']}</p>
                             <span class="wardRound"><i>记录医师:</i>${val['医生']}</span>
                         </div>
                     {{/if}}
@@ -671,7 +675,7 @@
                             </p>
                             <p class="lineBlock">
                                 <span class="lineTitle">手术风险评估:</span>
-                                <span>手术切口清洁程度(   分)+麻醉ASA分级(   分)+手术持续时间(   分)=    分 
+                                <span>手术切口清洁程度+麻醉ASA分级+手术持续时间
                                 </span>
                             </p>
                             <p class="lineBlock">
@@ -708,7 +712,7 @@
                             </p>
                             {{if 输血情况 == '有输血'}}
                             <p class="lineBlock">
-                                <span>红细胞 ${val['红细胞']} 单位&nbsp;&nbsp;&nbsp; &nbsp;血小板 ${val['血小板']} 袋&nbsp;&nbsp;&nbsp;&nbsp; 血浆 ${val['血浆']} ml&nbsp;&nbsp;&nbsp;&nbsp; 目前输血 ${val['全血']} ml</span>
+                                <span>红细胞 ${val['红细胞']} 单位&nbsp;&nbsp;&nbsp; &nbsp;血小板 ${val['血小板']} 袋&nbsp;&nbsp;&nbsp;&nbsp; 血浆 ${val['血浆']} ml&nbsp;&nbsp;&nbsp;&nbsp; 自体输血 ${val['全血']} ml</span>
                             </p>
                             {{/if}}
                             <p class="lineBlock">
@@ -814,16 +818,16 @@
                     </div>
                     <div class="cont">
                         <span class="label">病史陈述者:</span>
-                        <span>${病史陈述者}</span>
+                        <span>${信息来源}${关系}</span>
                     </div>
                 </div>
                 <div class="info-item">
                     <div class="info-title">主诉</div>
-                    <div class="cont">
+                    <div class="cont textIndent30">
                         <span>${主诉}</span>
                     </div>
                     <div class="info-title">现病史</div>
-                    <div class="cont">
+                    <div class="cont textIndent30">
                         <span>{{html 现病史}}</span>
                     </div>
                     <div class="cont">
@@ -1048,18 +1052,18 @@
                 </div>
                 <div class="info-item">
                     <div class="info-title">专科检查:</div>
-                    <div class="cont">
+                    <div class="cont textIndent30">
                         <span>{{html 专科检查}}</span>
                     </div>
                 </div>
                 <div class="info-item">
                     <div class="info-title">辅助检查:</div>
                     <div class="info-title">实验室检查:</div>
-                    <div class="cont">
+                    <div class="cont textIndent30">
                         <span>{{html 实验室检查}}</span>
                     </div>
                     <div class="info-title">影像学检查:</div>
-                    <div class="cont">
+                    <div class="cont textIndent30">
                         <span>{{html 影像学检查}}</span>
                     </div>
                 </div>
@@ -1070,15 +1074,15 @@
                 <div class="info-item">
                     <div class="info-title">初步诊断</div>
                     <div class="cont">
-                        <span>{{html 初步诊断}}</span>
+                        <span class="displayInlineBlock padL30">{{html 初步诊断}}</span>
                     </div>
                     <div class="info-title">修正诊断</div>
                     <div class="cont">
-                        <span>{{html 修正诊断}}</span>
+                        <span class="displayInlineBlock padL30">{{html 修正诊断}}</span>
                     </div>
                     <div class="info-title">补充诊断</div>
                     <div class="cont">
-                        <span>{{html 补充诊断}}</span>
+                        <span class="displayInlineBlock padL30">{{html 补充诊断}}</span>
                     </div>
                 </div>
                 <div class="info-item">
@@ -1105,7 +1109,7 @@
                     </div>
                     <div class="cont">
                         <span class="label">医疗机构:</span>
-                        <span>${医疗机构名称}(组织机构代码:${组织机构代码}) </span>
+                        <span>${医疗机构名称}(组织机构代码:${医疗机构代码}) </span>
                     </div>
                 </div>
                 <div class="info-item">
@@ -1569,7 +1573,7 @@
                         <p class="intent-1">{{html 术后并发症}}</p>
                         <p class="intent">③ 特殊风险或主要高危因素: </p>
                         <p class="intent-1">风险:{{html 手术风险}}</p>
-                        <p class="intent-1">并发症:</p>
+                        <p class="intent-1">并发症:{{html 手术并发症}}</p>
                         <p>3) 针对上述情况医师将采取的防范措施: </p>
                         <p class="intent">基于上述可能发生的风险,我们将根据医疗规范,采取下列防范措施来最大限度地保护患者的安全,使治疗过程顺利完成。具体措施如下。</p>
                         <p class="intent">① 术前认真评估患者,选择合适的手术方案,完善术前检查和围手术期处理,并根据基础疾病进行对症治疗。 </p>
@@ -1662,7 +1666,7 @@
                     </div>
                     <div class="cont">
                         <span class="label">医疗组长:</span>
-                        <span>${医疗组长}</span>
+                        <span>${主诊医生}</span>
                     </div>
                     <div class="contP">
                         <span class="label">入院诊断:</span>
@@ -1679,22 +1683,31 @@
                     <div class="cont">
                         <span class="label">体格检查:</span>
                         <span>${体格检查}</span>
-                        <span>体温${体温耳}℃</span>
+                        <span>体温${体温}${体温耳}℃</span>
                         <span>脉搏${脉搏}次/分</span>
                         <span>呼吸${呼吸}次/分</span>
                         <span>血压${血压}mmHg</span>
-                        <span>${专科检查}</span>
+                        <p><span>${专科检查}</span></p>
                     </div>
                     <div class="cont">
                         <span class="label">辅助检查:</span>
-
-                        
                         <span>${实验室检查}</span>
                         <span>${影像学检查}</span>
+                        <span>${辅助检查结果}</span>
                     </div>
-                    <div class="cont">
+                    <div class="contP">
+                        <div class="cont">
+                            <span class="label">病理诊断:</span>
+                            <span>${病理诊断有无}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">病理号:</span>
+                            <span>${病理号}</span>
+                        </div>
+                    </div>
+                    <div class="contP">
                         <span class="label">住院诊治经过(包括重要发现和结论,接受的药物和其他治疗) :</span>
-                        <span>${诊治经过}</span>
+                        <span>${诊治经过},于${手术日期}在${麻醉方式}下行${手术名称},切口类别为${切口类别}切口愈合等级为${切口愈合等级}。${治疗}</span>
                     </div>
                     <div class="cont">
                         <span class="label">出院时情况(症状与体征):</span>
@@ -1712,9 +1725,10 @@
                         <span class="label">出院带药:</span>
                         <span>${出院医嘱}</span>
                     </div>
-                    <div class="cont">
+                   
+                    <div class="contP">
                         <span class="label">健康教育(包括饮食指导):</span>
-                        <span>${出院指导}</span>
+                        <span>{{html 出院指导}}</span>
                     </div>
                     <div class="contP">
                         <span class="label">随访计划(复诊安排):</span>
@@ -1723,7 +1737,7 @@
                             <tr>
                                 <td>时间</td>
                                 <td>地点</td>
-                                <td>随访目的</td>
+                                <td>复诊目的</td>
                                 <td>科室</td>
                             </tr>
                             <tr>
@@ -1734,6 +1748,7 @@
                             </tr>
                             </tbody>
                         </table>
+                        <p>${其他}</p>
                     </div>
                     <div class="cont">
                         <span class="label">医生签名:</span>
@@ -2107,7 +2122,17 @@
                         {{if 性别 == '女'}}
                         <div class="cont">
                             <span class="label">妇科标本月经情况:</span>
-                            <span>${月经史&&月经史+','}${经期天数&&经期天数+','}${末次月经日期&&末次月经日期}</span>
+                            <span>
+                                {{if 月经史}}
+                                    ${月经史},
+                                {{/if}}
+                                {{if 经期天数}}
+                                    ${经期天数},
+                                {{/if}}
+                                {{if 末次月经日期}}
+                                    ${末次月经日期}
+                                {{/if}}
+                            </span>
                         </div>
                         {{/if}}
                         <div class="cont">
@@ -2214,6 +2239,7 @@
                             <span class="label">3、辅助检查:</span>
                             <span>{{html 实验室检查}}</span>
                             <span>{{html 影像学检查}}</span>
+                            <span>{{html 辅助检查结果}}</span>
                         </div>
                     </div>
                     <div class="cont">
@@ -2228,7 +2254,7 @@
                                 <p>(1)${本人姓名},${年龄},${性别}</p>
                                 <p>(2)${主诉}</p>
                                 <p>(3)${专科检查}</p>
-                                <p>(4)${实验室检查}${影像学检查}</p>
+                                <p>(4)${实验室检查}${影像学检查}${辅助检查结果}</p>
                             </div>
                         </div>
                        <div class="contP">
@@ -2373,76 +2399,82 @@
         <div class="content-item" code="${title.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'')}">
             <h2 class="title">${title}</h2>
             <div class="container content-ht">
-                <div class="info-item">
-                    <div class="cont">
-                        <span class="label">姓名:</span>
-                        <span>${本人姓名}</span>
-                    </div>
-                    <div class="cont">
-                        <span class="label">性别:</span>
-                        <span>${性别}</span>
-                    </div>
-                    <div class="cont">
-                        <span class="label">科别:</span>
-                        <span>${临床科室}</span>
-                    </div>
-                    <div class="cont">
-                        <span class="label">床号:</span>
-                        <span>${床号}</span>
-                    </div>
-                    <div class="cont">
-                        <span class="label">病案号:</span>
-                        <span>${病历号}</span>
-                    </div>
-                    <div class="cont">
-                        <span class="label">年龄:</span>
-                        <span>${年龄}</span>
-                    </div>
-                </div>
-                <div class="info-item">
-                    <div class="contP">
-                        <span class="label">血型:</span>
-                        <span>${血型}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">RH血型:</span>
-                        <span>${Rh血型}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">输注前评估:</span>
-                        <span>${初步诊断}</span>
-                        <span>${输血检验指标}</span>
-                        <span>${输血目的}</span>
-                        <span>${输血计划}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">输血前预防输血反应措施:</span>
-                        <p>(1)严格管理血库保养液和输血用具,有效预防致热源,严格执行无菌操作。</p>
-                        <p>(2)①勿选用有过敏史的献血员;②献血员在采血前4h内不吃高蛋白和高脂肪食物,宜用少量清淡饮食或糖水。</p>
-                        <p>(3)认真作好血型鉴定和交叉配血试验,输血前仔细查对,杜绝差错。严格执行血液保存规则,不可使用变质血液。。</p>
-                        <p>(4)严格把握采血、贮血和输血操作的各个环节。。</p>
-                    </div>
-                    <div class="contP">
-                        <span class="label">开始输血时间:</span>
-                        <span>${开始时间}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">输血结束时间:</span>
-                        <span>${结束时间}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">输血观察过程:</span>
-                        <span>${内容}</span>
-                    </div>
-                    <div class="contP">
-                        <span class="label">记录者:</span>
-                        <span>${医生}</span>
+                {{each(i, val) info}}
+                <div class="content-item-wrapper">
+                    <div class="info-item">
+                        <div class="cont">
+                            <span class="label">姓名:</span>
+                            <span>${本人姓名}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">性别:</span>
+                            <span>${性别}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">科别:</span>
+                            <span>${临床科室}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">床号:</span>
+                            <span>${床号}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">病案号:</span>
+                            <span>${病历号}</span>
+                        </div>
+                        <div class="cont">
+                            <span class="label">年龄:</span>
+                            <span>${年龄}</span>
+                        </div>
                     </div>
-                    <div class="contP">
-                        <span class="label">记录时间:</span>
-                        <span>${病历时间}</span>
+                    <div class="info-item">
+                        <div class="contP">
+                            <span class="label">血型:</span>
+                            <span>${血型}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">RH血型:</span>
+                            <span>${Rh血型}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">输注前评估:</span>
+                            <span>患者现患</span>
+                            <span>${初步诊断}</span>
+                            <span>${输血检验指标}</span>
+                            <span>${输血目的}</span>
+                            <span>${输血计划}</span>
+                            <span>。病人知情同意已签。</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">输血前预防输血反应措施:</span>
+                            <p>(1)严格管理血库保养液和输血用具,有效预防致热源,严格执行无菌操作。</p>
+                            <p>(2)①勿选用有过敏史的献血员;②献血员在采血前4h内不吃高蛋白和高脂肪食物,宜用少量清淡饮食或糖水。</p>
+                            <p>(3)认真作好血型鉴定和交叉配血试验,输血前仔细查对,杜绝差错。严格执行血液保存规则,不可使用变质血液。</p>
+                            <p>(4)严格把握采血、贮血和输血操作的各个环节。</p>
+                        </div>
+                        <div class="contP">
+                            <span class="label">开始输血时间:</span>
+                            <span>${开始时间}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">输血结束时间:</span>
+                            <span>${结束时间}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">输血观察过程:</span>
+                            <span>${内容}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">记录者:</span>
+                            <span>${医生}</span>
+                        </div>
+                        <div class="contP">
+                            <span class="label">记录时间:</span>
+                            <span>${病历日期}</span>
+                        </div>
                     </div>
                 </div>
+                {{/each}}
             </div>
         </div>
     </script>

+ 34 - 0
src/html/roleManager.html

@@ -0,0 +1,34 @@
+<!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 role">
+        <h2>角色管理</h2>
+        <div class="main-body">
+            <div class="filterBox clearfix">
+                <div class="leftMenu pubStyleMeun">
+                    <ul class="roleLis">
+                        
+                    </ul>
+                </div>
+                <div class="rightMenu pubStyleMeun">
+                    <div class="toptools">
+                        <span class="saveRoleSet">保存</span>
+                    </div>
+                    <div class="mainSysWrap">
+                        
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+
+</html>

+ 64 - 0
src/html/userManager.html

@@ -0,0 +1,64 @@
+<!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 usrContain">
+        <h2>用户管理</h2>
+        <div class="main-body">
+            <div class="filterBox">
+                <span class="filterItem">
+                    <span>姓名:</span>
+                    <span class="">
+                        <input class="moduleItemInp" type="text" placeholder="请输入姓名">
+                    </span>
+                </span>
+                <span class="filterItem typeFilter">
+                    <span>科室:</span>
+                    <span class="selectModuleType ellipsis">全部</span>
+                    <ul class="moduleTypeList filterDropList"></ul>
+                </span>
+                <span class="filterItem">
+                    <span>角色:</span>
+                    <span class="selectReject ellipsis">全部</span>
+                    <ul class="rejectList filterDropList"></ul>
+                </span>
+                <!-- <span class="filterItem">
+                    <span>启用状态:</span>
+                    <span class="selectUsed">全部</span>
+                    <ul class="usedList filterDropList">
+                        <Li class="usedItem" data-name="全部" data-id="">全部</Li>
+                        <li class="usedItem" data-name="是" data-id=1>是</li>
+                        <li class="usedItem" data-name="否" data-id=0>否</li>
+                    </ul>
+                </span> -->
+                <span class="filter">查询</span>
+            </div>
+            <table>
+                <thead>
+                    <th class="moduleName">序号</th>
+                    <th class="moduleType" width="80">姓名</th>
+                    <th class="moduleItemName">科室</th>
+                    <th class="moduleTipsMsg">角色</th>
+                    <th class="moduleUsed">状态</th>
+                    <th class="moduleOpera" style="width: 150px;">操作</th>
+                </thead>
+                <tbody>
+    
+                </tbody>
+            </table>
+            <div class="pagination"></div>
+        </div>
+        
+        
+        
+    </div>
+</body>
+
+</html>

BIN
src/images/down_blue.png


BIN
src/images/goLeft.png


BIN
src/images/goLeftDis.png


BIN
src/images/goRight.png


BIN
src/images/goRightDis.png


BIN
src/images/grey.png


BIN
src/images/up_blue.png


+ 6 - 1
src/js/api.js

@@ -5,10 +5,15 @@ const api = {
     getQcCasesEntryAll:'/qc/casesEntryHospital/getQcCasesEntryAll',
     updataQcCasesEntry: '/qc/casesEntryHospital/updataQcCasesEntry',
     qcList:'/qc/behospitalInfo/page',
+    qcListByDept:'/qc/behospitalInfo/page_dept',
+    qcListByPerson:'/qc/behospitalInfo/page_person',
     saveQcCases:'/qc/cases/saveQcCases',
     recordScore:'/qc/behospitalInfo/analyze',
     getInfoModule:'/qc/module/getById',
-};
+    getDeptList:'/bas/dept/getList',
+    getDeptListUser:'/bas/dept/listForUser',
+    getDeptListDept:'/bas/dept/getListUser',
+}
 module.exports = {
     api
 };

+ 6 - 1
src/js/console.js

@@ -312,6 +312,7 @@ function emptyCircle(data){
     let title = '总量';
     let color = ['#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336','#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336'];
     let echartData = data;
+    console.log(echartData)
     let total = 0;
     for(let i = 0;i < echartData.length;i++){
         total += echartData[i].num
@@ -341,7 +342,11 @@ function emptyCircle(data){
         }],
         tooltip: {
             trigger: 'item',
-            formatter: '{b} : {c}  ({d}%)'
+            // formatter: '{b} : {c}  ({d}%)',
+            formatter:function(item){
+                const {name, num, percentStr} = item.data
+                return `${name} : ${num} (${percentStr})`
+            }
         },
         series: [{
             name: '',

+ 6 - 2
src/js/index.js

@@ -4,7 +4,7 @@ require('jquery-templates');
 const md5 = require('js-md5');
 require("./modal.js")
 const {api,post,pageMap,delCookie} = require('./utils.js');
-
+let userInfo={};
 $(function(){
   getMenu();
   //菜单展开收起
@@ -53,7 +53,10 @@ function initMenu(data,userInfo){
     $(".menu .active").removeClass('active');
     $(this).addClass("active");
     const code = $(this).attr("code");
-    const url = './'+pageMap[code];
+    let url = './'+pageMap[code];
+    if(code === 'YH-BLZK-ZKPFGR'){
+      url += `?doctorName=${userInfo.linkman}`
+    }
     $("#contentIframe").attr("src",url);
   });
 }
@@ -62,6 +65,7 @@ function getMenu(){
     if(res.data.code==='0'){
       const data = res.data.data;
       initMenu(data.menuWrappers,data.userLoginDTO);
+      userInfo = data.userLoginDTO
     }
   });
 };

+ 8 - 4
src/js/itemManager.js

@@ -1,6 +1,7 @@
 const $ = require('jquery');
 require("../css/itemManager.less");
 require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./modal.js');
 const {api} = require('./api.js')
 const {post} = require('./utils.js')
 const switchIconOpen = require("./../images/btn_open.png")
@@ -9,6 +10,8 @@ const iconDown= require("./../images/arrow_down.png")
 const iconUp = require("./../images/arrow_up.png")
 const arrowLeft= require("./../images/arrow_left.png")
 const arrowRight = require("./../images/arrow_right.png")
+
+
 let casesId="", name="", isReject ="", isUsed ="",casesIdTemp="", nameTemp="", isRejectTemp ="", isUsedTemp =""
 $(".selectModuleType").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
 $(".selectReject").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
@@ -31,7 +34,7 @@ function getTabData(activePage){
             const totalNum = res.data.data.total
             renderTab(data,activePage)
             if(totalPage > 1){
-                renderPagination(totalPage,activePage,totalNum)
+                renderPagination(totalPage,Number(activePage),totalNum)
             } else{
                 $('.pagination').html("")
             }
@@ -214,8 +217,9 @@ function saveEdit(item,activePage){
 
     post(api.updataQcCasesEntry,param).then(res =>{
         if(res.data.code == '0'){
-            const data = res.data.data
-            getTabData(1)
+            // const data = res.data.data
+            $.alerModal({"message":"修改成功",type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+            getTabData(activePage)
         }else{}
     }).catch((e) =>{
     
@@ -250,7 +254,7 @@ function bindModuleTypeSelect(){
         const modeTypeItemName = $(this).attr("data-name")
         const modeTypeItemId = $(this).attr("data-id")
         casesIdTemp =modeTypeItemId
-        $('.selectModuleType').html(modeTypeItemName)
+        $('.selectModuleType').html(modeTypeItemName).attr("title",modeTypeItemName)
         $(".selectModuleType").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
 
         $(".moduleTypeList ").css("display", "none")

+ 8 - 1
src/js/modal.js

@@ -12,6 +12,8 @@ const jQuery = require('jquery');
             sureText:"确定",
             message: '<p class="tip">内容</p>',
             time: 1500,
+            isFather: false,
+            fatherWrapper:'',
             type:'modal',//tip,loading
             callback:function(){
                 alert(99)
@@ -46,7 +48,12 @@ const jQuery = require('jquery');
             left:$(".modaltip").width()/2+'px',
             top:$(".modaltip").height()/2+'px'
         })
-        $("body").append(box)
+        if(ops.isFather){
+           ops.fatherWrapper.append(box)
+        } else{
+            console.log('bbbbbbb')
+            $("body").append(box)
+        }
         if(ops.type == 'tip'){
             setTimeout(function(){
                 box.remove();

+ 2 - 1
src/js/moduleManager.js

@@ -2,7 +2,7 @@ const $ = require('jquery');
 require("../css/moduleManager.less");
 require('./../resource/jquery-ui/jquery-ui.min.js');
 require('./../resource/jquery-ui/jquery-ui.min.css');
-
+require('./modal.js');
 
 // const  layui = require('layui-src');
 const {api} = require('./api.js')
@@ -147,6 +147,7 @@ function saveModifyOne(item){
     })
     post(api.saveQcCases, {qcCasesSaveVOList}).then(res =>{
         if(res.data.code == '0'){
+            $.alerModal({"message":"修改成功",type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
             getTabData()
         }else{}
     }).catch((e) =>{

+ 122 - 40
src/js/qcList.js

@@ -1,6 +1,6 @@
 const $ = require('jquery');
 require("../css/qcList.less");
-
+require('./modal.js');
 const {api} = require('./api.js')
 const {post} = require('./utils.js')
 require('./../resource/jquery-ui/jquery-ui.min.js');
@@ -16,7 +16,10 @@ const arrowLeft= require("./../images/arrow_left.png")
 const arrowRight = require("./../images/arrow_right.png")
 
 $(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
-let tabList = [], name = "", behospitalCode="", behosDateStart="", level="",behosDateEnd="", scoreSum = 0,nameTemp = "", behospitalCodeTemp="",levelTemp=""
+$(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+let tabList = [], name = "", behospitalCode="", behosDateStart="", level="",behosDateEnd="", scoreSum = 0,
+  nameTemp = "", behospitalCodeTemp="",levelTemp="", deptId="",deptIdTemp="", doctorName="", doctorNum="",doctorNameTemp="",doctorNumTemp="",
+  data_desc=[],data_asc=[];
 
 $('.datapickerBox').append(`<img class="iconCalen" src=${iconCalenGrey} />`)
 $('.iconCalen').on("mouseenter", function(e){
@@ -34,6 +37,11 @@ function getTabData(activePage){
         behospitalCode: behospitalCode,
         name: name, //条目名
         level:level,//病历等级
+        deptId: deptId,
+        asc:data_asc,     //升序
+        desc:data_desc,       //降序
+        doctorName: doctorName,
+        doctorCode: doctorNum,
         behosDateStart: behosDateStart, //1-单项否决 0-非
         behosDateEnd: behosDateEnd, //0-未启用 1-启用
         size: 15
@@ -45,13 +53,15 @@ function getTabData(activePage){
             const totalPage = data.pages;
             const totalNum = data.total;
             renderTab(tabList,data.hospitalId);
-            renderPagination(totalPage,activePage,totalNum)
+            renderPagination(totalPage,Number(activePage),totalNum)
             if(totalPage > 1){
-                renderPagination(totalPage,activePage,totalNum)
+                renderPagination(totalPage,Number(activePage),totalNum)
             } else{
                 $('.pagination').html("")
             }
-        }else{}
+        }else{
+            $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        }
     }).catch((e) =>{
     
     })
@@ -62,6 +72,12 @@ getTabData(1)
 $(".filter").on("click", function(e){
     behosDateStart = $("#datepicker").val().trim()
     behosDateEnd = $("#datepicker2").val().trim()
+    const start = new Date(behosDateStart).getTime()
+    const end = new Date(behosDateEnd).getTime()
+    if(start > end){
+        $.alerModal({"message":'开始时间不能大于结束时间~',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        return
+    }
     if(behosDateStart){
         behosDateStart = behosDateStart.replace(/\//g,'-') + ' 00:00:00'
     }
@@ -71,6 +87,9 @@ $(".filter").on("click", function(e){
     name = nameTemp
     behospitalCode = behospitalCodeTemp
     level = levelTemp
+    deptId = deptIdTemp
+    doctorName = doctorNameTemp
+    doctorNum = doctorNumTemp
     getTabData(1)
 })
 function renderTab(data,hisId){
@@ -85,19 +104,21 @@ function renderTab(data,hisId){
             <tr  data-index=${i}>
                 <td class="scoreOperaItem textCenter">${item.hasSelect ? `<img class="iconCheck" src=${iconCheck} />`:`<img class="iconCheck" src=${iconUnCheck} />`}</td>
                 <td  class="recordScoreOperaBtn textCenter">评分</td>
-                <td >${item.behospitalCode || ""}</td>
-                <td>${item.fileCode || ""}</td>
-                <td  class="textCenter"><span  data-index=${i} class="patientNameSpan">${item.name || ""}<span></td>
-                <td  class="textCenter">${item.sex || ""}</td>
-                <td  class="textCenter">${item.age || ""}</td>
-                <td  class="textCenter">${item.bedCode || ""}</td>
-                <td  class="textCenter">${item.behospitalDate&&item.behospitalDate.slice(0,10)}</td>
-                <td  class="textCenter">${item.leaveHospitalDate&&item.leaveHospitalDate.slice(0,10)}</td>
-                <td  class="textCenter">${item.doctorName || ""}</td>
-                <td  class="textCenter">${item.behDeptName || ""}</td>
-                <td  class="textCenter">${item.level || ""}</td>
-                <td  class="textCenter">${item.scoreRes || ""}</td>
-                <td  class="textCenter">${item.gradeTime&&item.gradeTime.slice(0,10) || ""}</td>
+                <td >${item.behospitalCode || "-"}</td>
+                <td>${item.fileCode || "-"}</td>
+                <td  class="textCenter"><span  data-index=${i} class="patientNameSpan">${item.name || "-"}<span></td>
+                <td  class="textCenter">${item.sex || "-"}</td>
+                <td  class="textCenter">${item.age || "-"}</td>
+                <td  class="textCenter">${item.bedCode || "-"}</td>
+                <td  class="textCenter">${item.behospitalDate&&item.behospitalDate.slice(0,10) || "-"}</td>
+                <td  class="textCenter">${item.leaveHospitalDate&&item.leaveHospitalDate.slice(0,10)|| "-"}</td>
+                <td  class="textCenter">${item.behDoctorName   || "-"}</td>
+                <td  class="textCenter">${item.doctorName || "-"}</td>
+                <td  class="textCenter">${item.directorDoctorName || "-"}</td>
+                <td  class="textCenter">${item.behDeptName || "-"}</td>
+                <td  class="textCenter">${item.level || "-"}</td>
+                <td  class="textCenter">${item.scoreRes || "-"}</td>
+                <td  class="textCenter">${item.gradeTime&&item.gradeTime.slice(0,10) || "-"}</td>
             </tr>
         `
     }
@@ -127,10 +148,7 @@ function bindScoreDetail(hisId){
         const age = tabList[index].age;
         const noScore = tabList[index].level == '未评分'
         if(noScore){
-            dialog('请先进行评分!')
-            setTimeout(function(){
-                removeDialog()
-            },2000)
+            $.alerModal({"message":'请先进行评分!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
             return
         } else{
             scoreDetail(id,age,hisId)
@@ -142,6 +160,8 @@ function bindScoreDetail(hisId){
 //选择病历等级
 $('.selectLevel').on("click", function(e){
     e.stopPropagation()
+    $(".deptList ").css("display", "none")
+    $(".selectDept .arrow").attr("src",iconDown)
     const showList =  $(".levelList ").css("display")
     if(showList == "none" ||!showList){
         $(".levelList ").css("display","block")
@@ -198,6 +218,60 @@ function bindOperaAll(){
         renderTab(tabList)
     })
 }
+
+$('.selectDept').on("click", function(e){
+    e.stopPropagation()
+    $(".levelList ").css("display","none")
+    $(".selectLevel .arrow").attr("src",iconDown)
+    const showList =  $(".deptList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".deptList ").css("display","block")
+        $(".selectDept .arrow").attr("src",iconUp)
+    }else{
+        $(".deptList ").css("display", "none")
+        $(".selectDept .arrow").attr("src",iconDown)
+    }
+})
+
+//获取科室列表
+getDeptList()
+function getDeptList(){
+    post(api.getDeptList,{inputStr:""}).then(res =>{
+        if(res.data.code == '0'){
+           const  deptList = res.data.data
+           rendeDeptList(deptList)
+        }else{}
+    }).catch((e) =>{
+
+    })
+}
+
+
+function rendeDeptList(deptList){
+    let str = `<li class="deptItem " data-id=" " data-name="全部">全部</li>`
+    for(let i = 0; i < deptList.length; i++){
+        str += `<li class="deptItem ellipsis" title=${deptList[i].deptName} data-id=${deptList[i].deptId} data-name=${deptList[i].deptName}> ${deptList[i].deptName}</li>`
+    }
+    $('.deptList').html(str)
+    bindDeptSelect()
+}
+//科室选择
+function bindDeptSelect(){
+    $('.deptItem').on("click",function(){
+        const deptItemName = $(this).attr("data-name")
+        const deptItemId = $(this).attr("data-id")
+        deptIdTemp =deptItemId
+        if(deptItemName.length > 10){
+            $('.selectDept').html(deptItemName.substring(0,8)+'...')
+        }else{
+            $('.selectDept').html(deptItemName)
+        }
+        $('.selectDept ').attr('title',deptItemName)
+        $(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+        $(".deptList").css("display", "none")
+    })
+}
 function loading(){
     const str = `
     <div class="loadingBox">
@@ -207,19 +281,6 @@ function loading(){
     `
     $("#mainBox", parent.document).append(str)
 }
-function dialog(msg){
-    const str = `
-    <div class="dialogBox">
-            <div class="dialogBoxMask"></div>
-            <p class="dialogBoxMsg"> ${msg}</p>
-           
-    </div>
-    `
-    $("#mainBox", parent.document).append(str)
-}
-function removeDialog(){
-    $("#mainBox .dialogBox", parent.document).remove()
-}
 function hideLoading(){
     $("#mainBox .loadingBox", parent.document).remove()
 }
@@ -231,10 +292,7 @@ $('.recordScoreBtn').on("click",function(e){
         }
     }
     if(scoreList.length === 0){
-        dialog('请选择要评分的项!')
-        setTimeout(function(){
-            removeDialog()
-        },2000)
+        $.alerModal({"message":'请选择要评分的项!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
         return
     } else{
         loading()
@@ -243,6 +301,22 @@ $('.recordScoreBtn').on("click",function(e){
         }
     }
 })
+$("th[code]").on("click",function(e){
+    const code=$(this).attr("code");
+    if(data_asc[0]===code){
+      data_desc=[code];
+      data_asc=[];
+      $("th[code]").removeClass("asc desc");
+      $(this).addClass("desc");
+    }else{
+      data_desc=[];
+      data_asc=[code];
+      $("th[code]").removeClass("asc desc");
+      $(this).addClass("asc");
+    }
+    getTabData(1);
+    console.log(code)
+});
 function recordScore(behospitalCode,totalNum){
     const param = {
         behospitalCode: behospitalCode
@@ -271,7 +345,14 @@ $(".patientNameInp").on("input", function(e){
     const val = $(this).val().trim()
     nameTemp = val
 })
-
+$(".doctorInp").on("input", function(e){
+    const val = $(this).val().trim()
+    doctorNameTemp = val
+})
+$(".doctorNumInp").on("input", function(e){
+  const val = $(this).val().trim();
+    doctorNumTemp = val
+})
 $(function() {
     $.datepicker.regional['zh-CN'] = {
     clearText: '清除',
@@ -381,6 +462,7 @@ function renderPagination(totalPage,activePage,totalNum){
 
 $(document).on("click", function(){
     $(".levelList ").css("display", "none")
+    $(".deptList").css("display", "none")
     $(".selectLevel .arrow").attr("src",iconDown)
     
 })

+ 465 - 0
src/js/qcListDept.js

@@ -0,0 +1,465 @@
+const $ = require('jquery');
+require("../css/qcListDept.less");
+require('./modal.js');
+const {api} = require('./api.js')
+const {post} = require('./utils.js')
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./../resource/jquery-ui/jquery-ui.min.css');
+const iconCheck= require("./../images/icon_check.png")
+const iconUnCheck = require("./../images/icon_unchecked.png")
+const  iconCalenBlue= require("./../images/icon_calen_blue.png")
+const  iconCalenGrey= require("./../images/icon_calen_grey.png")
+const iconDown= require("./../images/arrow_down.png")
+const iconUp = require("./../images/arrow_up.png")
+const loadingImg = require("./../images/loading.gif")
+const arrowLeft= require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+
+$(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+$(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+let tabList = [], name = "", behospitalCode="", behosDateStart="", level="",behosDateEnd="", scoreSum = 0,nameTemp = "",
+  behospitalCodeTemp="",levelTemp="", deptId="",deptIdTemp="", doctorName="", doctorNameTemp="", doctorNum="", doctorNumTemp="",data_desc=[],data_asc=[];
+
+$('.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()
+})
+function getTabData(activePage){
+    const param = {
+        current:activePage,
+        behospitalCode: behospitalCode,
+        name: name, //条目名
+        level:level,//病历等级
+        deptId: deptId,
+        asc:data_asc,     //升序
+        desc:data_desc,       //降序
+        doctorName: doctorName,
+        doctorCode: doctorNum,
+        behosDateStart: behosDateStart, //1-单项否决 0-非
+        behosDateEnd: behosDateEnd, //0-未启用 1-启用
+        size: 15
+    }
+    post(api.qcListByDept,param).then(res =>{
+        if(res.data.code == '0'){
+            tabList = res.data.data.records
+            const totalPage = res.data.data.pages
+            const totalNum = res.data.data.total
+            renderTab(tabList)
+            renderPagination(totalPage,Number(activePage),totalNum)
+            if(totalPage > 1){
+                renderPagination(totalPage,Number(activePage),totalNum)
+            } else{
+                $('.pagination').html("")
+            }
+        }else{
+            $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        }
+    }).catch((e) =>{
+    
+    })
+}
+
+getTabData(1)
+
+$(".filter").on("click", function(e){
+    behosDateStart = $("#datepicker").val().trim()
+    behosDateEnd = $("#datepicker2").val().trim()
+    const start = new Date(behosDateStart).getTime()
+    const end = new Date(behosDateEnd).getTime()
+    if(start > end){
+        $.alerModal({"message":'开始时间不能大于结束时间~',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        return
+    }
+    if(behosDateStart){
+        behosDateStart = behosDateStart.replace(/\//g,'-') + ' 00:00:00'
+    }
+    if(behosDateEnd){
+        behosDateEnd = behosDateEnd.replace(/\//g,'-') + ' 23:59:59'
+    }
+    name = nameTemp
+    behospitalCode = behospitalCodeTemp
+    level = levelTemp
+    deptId = deptIdTemp
+    doctorName = doctorNameTemp
+    doctorNum = doctorNumTemp
+    getTabData(1)
+})
+$("th[code]").on("click",function(e){
+  const code=$(this).attr("code");
+  if(data_asc[0]===code){
+    data_desc=[code];
+    data_asc=[];
+  }else{
+    data_desc=[];
+    data_asc=[code];
+  }
+  getTabData(1);
+  console.log(code)
+});
+function renderTab(data){
+    let str = ``
+    let hasSelectAll = true
+    for(let i = 0; i < data.length; i++){
+        const item = data[i]
+        if(!item.hasSelect){
+            hasSelectAll = false
+        }
+        str += `
+            <tr  data-index=${i}>
+                <td class="scoreOperaItem textCenter">${item.hasSelect ? `<img class="iconCheck" src=${iconCheck} />`:`<img class="iconCheck" src=${iconUnCheck} />`}</td>
+                <td  class="recordScoreOperaBtn textCenter">评分</td>
+                <td >${item.behospitalCode || "-"}</td>
+                <td>${item.fileCode || "-"}</td>
+                <td  class="textCenter"><span  data-index=${i} class="patientNameSpan">${item.name || "-"}<span></td>
+                <td  class="textCenter">${item.sex || "-"}</td>
+                <td  class="textCenter">${item.age || "-"}</td>
+                <td  class="textCenter">${item.bedCode || "-"}</td>
+                <td  class="textCenter">${item.behospitalDate&&item.behospitalDate.slice(0,10) || "-"}</td>
+                <td  class="textCenter">${item.leaveHospitalDate&&item.leaveHospitalDate.slice(0,10)|| "-"}</td>
+                <td  class="textCenter">${item.behDoctorName   || "-"}</td>
+                <td  class="textCenter">${item.doctorName || "-"}</td>
+                <td  class="textCenter">${item.directorDoctorName || "-"}</td>
+                <td  class="textCenter">${item.behDeptName || "-"}</td>
+                <td  class="textCenter">${item.level || "-"}</td>
+                <td  class="textCenter">${item.scoreRes || "-"}</td>
+                <td  class="textCenter">${item.gradeTime&&item.gradeTime.slice(0,10) || "-"}</td>
+            </tr>
+        `
+    }
+    if(data.length === 0){
+        hasSelectAll = false
+    }
+    if(hasSelectAll){
+        $('.scoreOpera img').attr("src" ,iconCheck)
+        $('.scoreOpera').attr("data-selectall",true)
+    }else{
+        $('.scoreOpera img').attr("src" ,iconUnCheck)
+        $('.scoreOpera').attr("data-selectall",false)
+    }
+    $('tbody').html(str)
+    bindScoreOperaItem()
+    bindRecordScoreOper()
+    bindScoreDetail()
+}
+
+function scoreDetail(id,age){
+    window.open(`./qcScore.html?id=${id}&age=${age}`)
+}
+function bindScoreDetail(){
+    $('.patientNameSpan').on('click',function(e){
+        const index = $(this).attr("data-index")
+        const id = tabList[index].behospitalCode
+        const age = tabList[index].age
+        const noScore = tabList[index].level == '未评分'
+        if(noScore){
+            $.alerModal({"message":'请先进行评分!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+            return
+        } else{
+            scoreDetail(id,age)
+        }
+       
+    })
+}
+
+//选择病历等级
+$('.selectLevel').on("click", function(e){
+    e.stopPropagation()
+    $(".deptList ").css("display", "none")
+    $(".selectDept .arrow").attr("src",iconDown)
+    const showList =  $(".levelList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".levelList ").css("display","block")
+        $(".selectLevel .arrow").attr("src",iconUp)
+    }else{
+        $(".levelList ").css("display", "none")
+        $(".selectLevel .arrow").attr("src",iconDown)
+    }
+})
+
+bindLeveldSelect()
+//是否启用选择
+function bindLeveldSelect(){
+    $('.levelItem').on("click",function(){
+        const levelItemName = $(this).attr("data-name")
+        const levelItemItemId = $(this).attr("data-id")
+        levelTemp =levelItemItemId
+        $('.selectLevel').html(levelItemName)
+        $(".levelList").css("display", "none")
+        $(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+    })
+}
+
+//全选绑定
+bindOperaAll()
+function bindScoreOperaItem(){
+    $(".scoreOperaItem").on("click",  function(e){
+        const index = $(this).parent().attr("data-index")
+        tabList[index].hasSelect = tabList[index].hasSelect ? false:true
+        renderTab(tabList)
+    })
+}
+function bindRecordScoreOper(){
+    $(".recordScoreOperaBtn").on("click",  function(e){
+        const index = $(this).parent().attr("data-index")
+        const behospitalCode = tabList[index].behospitalCode
+        loading()
+        recordScore(behospitalCode,1)
+    })
+}
+function bindOperaAll(){
+    $('.scoreOpera').on("click", function(e){
+        const hasSelectAll = $('.scoreOpera').attr("data-selectall")
+        if(hasSelectAll == 'true'){
+
+            for(let i = 0; i < tabList.length; i++){
+                tabList[i].hasSelect = false
+            }
+        }else{
+            for(let i = 0; i < tabList.length; i++){
+                tabList[i].hasSelect = true
+            }
+        }
+        renderTab(tabList)
+    })
+}
+
+$('.selectDept').on("click", function(e){
+    e.stopPropagation()
+    $(".levelList ").css("display","none")
+    $(".selectLevel .arrow").attr("src",iconDown)
+    const showList =  $(".deptList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".deptList ").css("display","block")
+        $(".selectDept .arrow").attr("src",iconUp)
+    }else{
+        $(".deptList ").css("display", "none")
+        $(".selectDept .arrow").attr("src",iconDown)
+    }
+})
+
+//获取科室列表
+getDeptList()
+function getDeptList(){
+    post(api.getDeptListDept,{inputStr:""}).then(res =>{
+        if(res.data.code == '0'){
+           const  deptList = res.data.data
+           rendeDeptList(deptList)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+
+
+function rendeDeptList(deptList){
+    let str = `<li class="deptItem " data-id=" " data-name="全部">全部</li>`
+    for(let i = 0; i < deptList.length; i++){
+        str += `<li class="deptItem ellipsis" title=${deptList[i].deptName} data-id=${deptList[i].deptId} data-name=${deptList[i].deptName}> ${deptList[i].deptName}</li>`
+    }
+    $('.deptList').html(str)
+    bindDeptSelect()
+}
+//科室选择
+function bindDeptSelect(){
+    $('.deptItem').on("click",function(){
+        const deptItemName = $(this).attr("data-name")
+        const deptItemId = $(this).attr("data-id")
+        deptIdTemp =deptItemId
+        if(deptItemName.length > 10){
+            $('.selectDept').html(deptItemName.substring(0,8)+'...')
+        }else{
+            $('.selectDept').html(deptItemName)
+        }
+        $('.selectDept ').attr('title',deptItemName)
+        $(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+        $(".deptList").css("display", "none")
+    })
+}
+function loading(){
+    const str = `
+    <div class="loadingBox">
+            <div class="mask"></div>
+            <img class="loadingImg" src=${loadingImg}  alt="loading" />
+        </div>
+    `
+    $("#mainBox", parent.document).append(str)
+}
+function hideLoading(){
+    $("#mainBox .loadingBox", parent.document).remove()
+}
+$('.recordScoreBtn').on("click",function(e){
+    let scoreList = []
+    for(let i = 0; i <tabList.length; i++){
+        if(tabList[i].hasSelect){
+            scoreList.push(tabList[i].behospitalCode)
+        }
+    }
+    if(scoreList.length === 0){
+        $.alerModal({"message":'请选择要评分的项!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        return
+    } else{
+        loading()
+        for(let j = 0; j < scoreList.length; j++){
+            recordScore(scoreList[j],scoreList.length)
+        }
+    }
+})
+function recordScore(behospitalCode,totalNum){
+    const param = {
+        behospitalCode: behospitalCode
+    }
+    post(api.recordScore,param).then(res =>{
+        if(res.data.code == '0'){
+            scoreSum++
+            if(scoreSum === totalNum){
+                hideLoading()
+                scoreSum = 0
+                const activePage = $(".activePage").attr('data-page') || 1
+
+                getTabData(activePage)
+            }
+      
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+$(".patientNumInp").on("input", function(e){
+    const val = $(this).val().trim()
+    behospitalCodeTemp = val
+})
+$(".patientNameInp").on("input", function(e){
+    const val = $(this).val().trim()
+    nameTemp = val
+})
+$(".doctorInp").on("input", function(e){
+    const val = $(this).val().trim()
+    doctorNameTemp = val
+})
+$(".doctorNumInp").on("input", function(e){
+  const val = $(this).val().trim();
+  doctorNumTemp = val
+})
+$(function() {
+    $.datepicker.regional['zh-CN'] = {
+    clearText: '清除',
+    clearStatus: '清除已选e799bee5baa6e59b9ee7ad9431333361303131日期',
+    closeText: '关闭',
+    closeStatus: '不改变当前选择',
+    prevText: '<上月',
+    prevStatus: '显示上月',
+    prevBigText: '<<',
+    prevBigStatus: '显示上一年',
+    nextText: '下月>',
+    nextStatus: '显示下月',
+    nextBigText: '>>',
+    nextBigStatus: '显示下一年',
+    currentText: '今天',
+    currentStatus: '显示本月',
+    monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    monthNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    yearNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    monthStatus: '选择月份',
+    yearStatus: '选择年份',
+    weekHeader: '周',
+    weekStatus: '年内周次',
+    dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+    dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+    dayNamesMin: ['日','一','二','三','四','五','六'],
+    dayStatus: '设置 DD 为一周起始',
+    dateStatus: '选择 m月 d日, DD',
+    dateFormat: 'yy-mm-dd',
+    firstDay: 1,
+    initStatus: '请选择日期',
+    isRTL: false};
+    $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+
+    $( "#datepicker" ).datepicker({
+        changeMonth: true,
+        changeYear: true,
+        dateFormat:"yy/mm/dd"
+    });
+    $( "#datepicker2" ).datepicker({
+        changeMonth: true,
+        changeYear: true,
+        dateFormat:"yy/mm/dd"
+    });
+});
+
+//分页渲染
+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)
+        // renderPagination(totalPage,activePageNow,totalNum)
+    })
+    $(".prePage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow > 1){
+            activePageNow--
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    $(".nextPage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow < totalPage){
+            activePageNow++
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    
+}
+
+$(document).on("click", function(){
+    $(".levelList ").css("display", "none")
+    $(".deptList").css("display", "none")
+    $(".selectLevel .arrow").attr("src",iconDown)
+    
+})
+
+$((function($){
+})($));

+ 463 - 0
src/js/qcListPerson.js

@@ -0,0 +1,463 @@
+const $ = require('jquery');
+require("../css/qcListPerson.less");
+require('./modal.js');
+const {api} = require('./api.js')
+const {post,getUrlArgObject} = require('./utils.js')
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./../resource/jquery-ui/jquery-ui.min.css');
+const iconCheck= require("./../images/icon_check.png")
+const iconUnCheck = require("./../images/icon_unchecked.png")
+const  iconCalenBlue= require("./../images/icon_calen_blue.png")
+const  iconCalenGrey= require("./../images/icon_calen_grey.png")
+const iconDown= require("./../images/arrow_down.png")
+const iconUp = require("./../images/arrow_up.png")
+const loadingImg = require("./../images/loading.gif")
+const arrowLeft= require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+let doctorName_global = getUrlArgObject("doctorName")
+
+console.log('doctorName_global',doctorName_global)
+$('.selectDoctor').html(doctorName_global)
+
+$(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+$(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+let tabList = [], name = "", behospitalCode="", behosDateStart="", level="",behosDateEnd="", scoreSum = 0,nameTemp = "",
+  behospitalCodeTemp="",levelTemp="", deptId="",deptIdTemp="", doctorName=doctorName_global, doctorNameTemp=doctorName_global,data_desc=[],data_asc=[];
+
+$('.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()
+})
+function getTabData(activePage){
+    const param = {
+        current:activePage,
+        behospitalCode: behospitalCode,
+        name: name, //条目名
+        level:level,//病历等级
+        deptId: deptId,
+        asc:data_asc,     //升序
+        desc:data_desc,       //降序
+        doctorName: doctorName,
+        behosDateStart: behosDateStart, //1-单项否决 0-非
+        behosDateEnd: behosDateEnd, //0-未启用 1-启用
+        size: 15
+    }
+    post(api.qcListByPerson,param).then(res =>{
+        if(res.data.code == '0'){
+            tabList = res.data.data.records
+            const totalPage = res.data.data.pages
+            const totalNum = res.data.data.total
+            renderTab(tabList)
+            renderPagination(totalPage,Number(activePage),totalNum)
+            if(totalPage > 1){
+                renderPagination(totalPage,Number(activePage),totalNum)
+            } else{
+                $('.pagination').html("")
+            }
+        }else{
+            $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        }
+    }).catch((e) =>{
+    
+    })
+}
+
+getTabData(1)
+
+$(".filter").on("click", function(e){
+    behosDateStart = $("#datepicker").val().trim()
+    behosDateEnd = $("#datepicker2").val().trim()
+    const start = new Date(behosDateStart).getTime()
+    const end = new Date(behosDateEnd).getTime()
+    if(start > end){
+        $.alerModal({"message":'开始时间不能大于结束时间~',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        return
+    }
+    if(behosDateStart){
+        behosDateStart = behosDateStart.replace(/\//g,'-') + ' 00:00:00'
+    }
+    if(behosDateEnd){
+        behosDateEnd = behosDateEnd.replace(/\//g,'-') + ' 23:59:59'
+    }
+    name = nameTemp
+    behospitalCode = behospitalCodeTemp
+    level = levelTemp
+    deptId = deptIdTemp
+    doctorName = doctorNameTemp
+    getTabData(1)
+})
+$("th[code]").on("click",function(e){
+  const code=$(this).attr("code");
+  if(data_asc[0]===code){
+    data_desc=[code];
+    data_asc=[];
+  }else{
+    data_desc=[];
+    data_asc=[code];
+  }
+  getTabData(1);
+  console.log(code)
+});
+function renderTab(data){
+    let str = ``
+    let hasSelectAll = true
+    for(let i = 0; i < data.length; i++){
+        const item = data[i]
+        if(!item.hasSelect){
+            hasSelectAll = false
+        }
+        str += `
+            <tr  data-index=${i}>
+                <td class="scoreOperaItem textCenter">${item.hasSelect ? `<img class="iconCheck" src=${iconCheck} />`:`<img class="iconCheck" src=${iconUnCheck} />`}</td>
+                <td  class="recordScoreOperaBtn textCenter">评分</td>
+                <td >${item.behospitalCode || "-"}</td>
+                <td>${item.fileCode || "-"}</td>
+                <td  class="textCenter"><span  data-index=${i} class="patientNameSpan">${item.name || "-"}<span></td>
+                <td  class="textCenter">${item.sex || "-"}</td>
+                <td  class="textCenter">${item.age || "-"}</td>
+                <td  class="textCenter">${item.bedCode || "-"}</td>
+                <td  class="textCenter">${item.behospitalDate&&item.behospitalDate.slice(0,10) || "-"}</td>
+                <td  class="textCenter">${item.leaveHospitalDate&&item.leaveHospitalDate.slice(0,10)|| "-"}</td>
+                <td  class="textCenter">${item.behDoctorName   || "-"}</td>
+                <td  class="textCenter">${item.doctorName || "-"}</td>
+                <td  class="textCenter">${item.directorDoctorName || "-"}</td>
+                <td  class="textCenter">${item.behDeptName || "-"}</td>
+                <td  class="textCenter">${item.level || "-"}</td>
+                <td  class="textCenter">${item.scoreRes || "-"}</td>
+                <td  class="textCenter">${item.gradeTime&&item.gradeTime.slice(0,10) || "-"}</td>
+            </tr>
+        `
+    }
+    if(data.length === 0){
+        hasSelectAll = false
+    }
+    if(hasSelectAll){
+        $('.scoreOpera img').attr("src" ,iconCheck)
+        $('.scoreOpera').attr("data-selectall",true)
+    }else{
+        $('.scoreOpera img').attr("src" ,iconUnCheck)
+        $('.scoreOpera').attr("data-selectall",false)
+    }
+    $('tbody').html(str)
+    bindScoreOperaItem()
+    bindRecordScoreOper()
+    bindScoreDetail()
+}
+
+function scoreDetail(id,age){
+    window.open(`./qcScore.html?id=${id}&age=${age}`)
+}
+function bindScoreDetail(){
+    $('.patientNameSpan').on('click',function(e){
+        const index = $(this).attr("data-index")
+        const id = tabList[index].behospitalCode
+        const age = tabList[index].age
+        const noScore = tabList[index].level == '未评分'
+        if(noScore){
+            $.alerModal({"message":'请先进行评分!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+            return
+        } else{
+            scoreDetail(id,age)
+        }
+       
+    })
+}
+
+//选择病历等级
+$('.selectLevel').on("click", function(e){
+    e.stopPropagation()
+    $(".deptList ").css("display", "none")
+    $(".selectDept .arrow").attr("src",iconDown)
+    const showList =  $(".levelList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".levelList ").css("display","block")
+        $(".selectLevel .arrow").attr("src",iconUp)
+    }else{
+        $(".levelList ").css("display", "none")
+        $(".selectLevel .arrow").attr("src",iconDown)
+    }
+})
+
+bindLeveldSelect()
+//是否启用选择
+function bindLeveldSelect(){
+    $('.levelItem').on("click",function(){
+        const levelItemName = $(this).attr("data-name")
+        const levelItemItemId = $(this).attr("data-id")
+        levelTemp =levelItemItemId
+        $('.selectLevel').html(levelItemName)
+        $(".levelList").css("display", "none")
+        $(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+    })
+}
+
+//全选绑定
+bindOperaAll()
+function bindScoreOperaItem(){
+    $(".scoreOperaItem").on("click",  function(e){
+        const index = $(this).parent().attr("data-index")
+        tabList[index].hasSelect = tabList[index].hasSelect ? false:true
+        renderTab(tabList)
+    })
+}
+function bindRecordScoreOper(){
+    $(".recordScoreOperaBtn").on("click",  function(e){
+        const index = $(this).parent().attr("data-index")
+        const behospitalCode = tabList[index].behospitalCode
+        loading()
+        recordScore(behospitalCode,1)
+    })
+}
+function bindOperaAll(){
+    $('.scoreOpera').on("click", function(e){
+        const hasSelectAll = $('.scoreOpera').attr("data-selectall")
+        if(hasSelectAll == 'true'){
+
+            for(let i = 0; i < tabList.length; i++){
+                tabList[i].hasSelect = false
+            }
+        }else{
+            for(let i = 0; i < tabList.length; i++){
+                tabList[i].hasSelect = true
+            }
+        }
+        renderTab(tabList)
+    })
+}
+
+$('.selectDept').on("click", function(e){
+    e.stopPropagation()
+    $(".levelList ").css("display","none")
+    $(".selectLevel .arrow").attr("src",iconDown)
+    const showList =  $(".deptList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".deptList ").css("display","block")
+        $(".selectDept .arrow").attr("src",iconUp)
+    }else{
+        $(".deptList ").css("display", "none")
+        $(".selectDept .arrow").attr("src",iconDown)
+    }
+})
+
+//获取科室列表
+getDeptList()
+function getDeptList(){
+    post(api.getDeptListUser,{inputStr:""}).then(res =>{
+        if(res.data.code == '0'){
+           const  deptList = res.data.data
+           rendeDeptList(deptList)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+
+
+function rendeDeptList(deptList){
+    let str = `<li class="deptItem " data-id=" " data-name="全部">全部</li>`
+    for(let i = 0; i < deptList.length; i++){
+        str += `<li class="deptItem ellipsis" title=${deptList[i].deptName} data-id=${deptList[i].deptId} data-name=${deptList[i].deptName}> ${deptList[i].deptName}</li>`
+    }
+    $('.deptList').html(str)
+    bindDeptSelect()
+}
+//科室选择
+function bindDeptSelect(){
+    $('.deptItem').on("click",function(){
+        const deptItemName = $(this).attr("data-name")
+        const deptItemId = $(this).attr("data-id")
+        deptIdTemp =deptItemId
+        if(deptItemName.length > 10){
+            $('.selectDept').html(deptItemName.substring(0,8)+'...')
+        }else{
+            $('.selectDept').html(deptItemName)
+        }
+        $('.selectDept ').attr('title',deptItemName)
+        $(".selectDept").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+        $(".deptList").css("display", "none")
+    })
+}
+function loading(){
+    const str = `
+    <div class="loadingBox">
+            <div class="mask"></div>
+            <img class="loadingImg" src=${loadingImg}  alt="loading" />
+        </div>
+    `
+    $("#mainBox", parent.document).append(str)
+}
+function hideLoading(){
+    $("#mainBox .loadingBox", parent.document).remove()
+}
+$('.recordScoreBtn').on("click",function(e){
+    let scoreList = []
+    for(let i = 0; i <tabList.length; i++){
+        if(tabList[i].hasSelect){
+            scoreList.push(tabList[i].behospitalCode)
+        }
+    }
+    if(scoreList.length === 0){
+        $.alerModal({"message":'请选择要评分的项!',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        return
+    } else{
+        loading()
+        for(let j = 0; j < scoreList.length; j++){
+            recordScore(scoreList[j],scoreList.length)
+        }
+    }
+})
+function recordScore(behospitalCode,totalNum){
+    const param = {
+        behospitalCode: behospitalCode
+    }
+    post(api.recordScore,param).then(res =>{
+        if(res.data.code == '0'){
+            scoreSum++
+            if(scoreSum === totalNum){
+                hideLoading()
+                scoreSum = 0
+                const activePage = $(".activePage").attr('data-page') || 1
+
+                getTabData(activePage)
+            }
+      
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+$(".patientNumInp").on("input", function(e){
+    const val = $(this).val().trim()
+    behospitalCodeTemp = val
+})
+$(".patientNameInp").on("input", function(e){
+    const val = $(this).val().trim()
+    nameTemp = val
+})
+$(".doctorInp").on("input", function(e){
+    const val = $(this).val().trim()
+    doctorNameTemp = val
+})
+$(function() {
+    $.datepicker.regional['zh-CN'] = {
+    clearText: '清除',
+    clearStatus: '清除已选e799bee5baa6e59b9ee7ad9431333361303131日期',
+    closeText: '关闭',
+    closeStatus: '不改变当前选择',
+    prevText: '<上月',
+    prevStatus: '显示上月',
+    prevBigText: '<<',
+    prevBigStatus: '显示上一年',
+    nextText: '下月>',
+    nextStatus: '显示下月',
+    nextBigText: '>>',
+    nextBigStatus: '显示下一年',
+    currentText: '今天',
+    currentStatus: '显示本月',
+    monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    monthNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    yearNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
+    monthStatus: '选择月份',
+    yearStatus: '选择年份',
+    weekHeader: '周',
+    weekStatus: '年内周次',
+    dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+    dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+    dayNamesMin: ['日','一','二','三','四','五','六'],
+    dayStatus: '设置 DD 为一周起始',
+    dateStatus: '选择 m月 d日, DD',
+    dateFormat: 'yy-mm-dd',
+    firstDay: 1,
+    initStatus: '请选择日期',
+    isRTL: false};
+    $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+
+    $( "#datepicker" ).datepicker({
+        changeMonth: true,
+        changeYear: true,
+        dateFormat:"yy/mm/dd"
+    });
+    $( "#datepicker2" ).datepicker({
+        changeMonth: true,
+        changeYear: true,
+        dateFormat:"yy/mm/dd"
+    });
+});
+
+//分页渲染
+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)
+        // renderPagination(totalPage,activePageNow,totalNum)
+    })
+    $(".prePage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow > 1){
+            activePageNow--
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    $(".nextPage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow < totalPage){
+            activePageNow++
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    
+}
+
+$(document).on("click", function(){
+    $(".levelList ").css("display", "none")
+    $(".deptList").css("display", "none")
+    $(".selectLevel .arrow").attr("src",iconDown)
+    
+})
+
+$((function($){
+})($));

+ 1 - 1
src/js/qcScore.js

@@ -4,7 +4,7 @@ require('jquery-templates');
 require('./modal.js');
 const {api,post,getUrlArgObject,setBoxHeight} = require('./utils.js');
 const {keyMaps} = require('./maps.js');
-const {wardRound,preoperation,summary,operationRecord,applicationForm,resultForm,consultationNote,difficultRecord,illnessNotice,pathologicTest,rescueRecord,transfusionEvaluate} = require("./qcScore_byll.js")
+const {wardRound,preoperation,summary,operationRecord,applicationForm,resultForm,consultationNote,difficultRecord,illnessNotice,pathologicTest,rescueRecord,transfusionEvaluate,transfusionRecord} = require("./qcScore_byll.js")
 //本页全局变量
 let global_flawData = {};    //缺陷数据
 const global_id=getUrlArgObject("id");

+ 5 - 1
src/js/qcScore_byll.js

@@ -38,6 +38,9 @@ function rescueRecord(data, title){
 function transfusionEvaluate(data, title){
     $("#transfusionEvaluateTmpl").tmpl({info:data,title:title,}).appendTo("#contentInfo");
 }
+function transfusionRecord(data, title){
+    $("#transfusionRecordTmpl").tmpl({info:data,title:title,}).appendTo("#contentInfo");
+}
 module.exports = {
     wardRound,
     preoperation,
@@ -50,5 +53,6 @@ module.exports = {
     illnessNotice,
     pathologicTest,
     rescueRecord,
-    transfusionEvaluate
+    transfusionEvaluate,
+    transfusionRecord
 }

+ 315 - 0
src/js/roleManager.js

@@ -0,0 +1,315 @@
+const $ = require('jquery');
+require("../css/roleManager.less");
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./modal.js');
+const {api} = require('./api.js')
+const {post} = require('./utils.js')
+const switchIconOpen = require("./../images/btn_open.png")
+const switchIconClose = require("./../images/btn_close.png")
+const iconDown= require("./../images/arrow_down.png")
+const iconUp = require("./../images/arrow_up.png")
+const arrowLeft= require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+
+$(function(){
+    let curId="",curData="",curTreeData=[],permissionIdLis=[],menuIdLis=[];
+    $(window).resize(function(){
+        $(".role .leftMenu").css("height",$(window).height()-128+'px')
+        $(".role .rightMenu").css({"height":$(window).height()-88+'px',"width":$(".filterBox").width()-400+'px'})
+    })
+    $(".role .leftMenu").css("height",$(window).height()-128+'px')
+    $(".role .rightMenu").css({"height":$(window).height()-88+'px',"width":$(".filterBox").width()-400+'px'})
+    $(".saveRoleSet").click(function(){//保存角色设置
+        $.alerModal({type:"loading"});
+        let params = {
+            "roleId": curId,
+            "sysMenuSaveVOList": menuIdLis,
+            "sysPermissionSaveVOList": permissionIdLis
+        }
+        saveRoleMenu(params)
+    })
+    '/sys/role/getRoleMenu'//获取角色菜权限单等数据
+    '/sys/role/list' //获取角色列表信息
+    '/sys/role/listForUser'//获取角色下拉列表信息
+    '/sys/role/saveRoleMenu'//修改角色菜单权限数据
+    getRoleList()
+    getRoleMenu()
+    // saveRoleMenu()
+    function getRoleMenu(id){
+        if(!id)return
+        post('/sys/role/getRoleMenu',{roleId:id}).then(res =>{
+            let data = res.data;
+            if(data.code == '0'){
+                curData = data.data
+                roleSetLis(data.data)
+            }else{}
+        }).catch((e) =>{
+        
+        })
+    }
+    function getRoleList(){
+        post('/sys/role/list').then(res =>{
+            let data = res.data;
+            if(data.code == '0'){
+                roleLeftLis(data.data)
+                curId=data.data.length>0&&data.data[0].id||''
+                getRoleMenu(curId)
+            }else{}
+        }).catch((e) =>{
+        
+        })
+    }
+    function saveRoleMenu(params){
+        post('/sys/role/saveRoleMenu',params).then(res =>{
+            let data = res.data;
+            $(".loading").remove()
+            if(data.code == '0'){
+                $.alerModal({type:"tip",message:"保存成功"});
+            }else{
+
+            }
+        }).catch((e) =>{
+            $(".loading").remove()
+        })
+    }
+    function roleSetLis(data){
+        let str = '',sonStr=''
+        for(let i = 0;i < data.length;i++){
+            let tmp = data[i]
+            str += `
+                <div class="mainSys" data-index="${i}" data-menuId="${data[i].menuId}">
+                    <div data-menuId="${data[i].menuId}" data-haveMenu="${data[i].haveMenu}" data-parentId="${data[i].parentId}" class="parentSet selectToggle"><img src="${data[i].haveMenu == 1?require('../images/icon_check.png'):require('../images/icon_unchecked.png')}" alt=""> ${data[i].menuName}</div>
+                    ${
+                        (function(tmp){
+                            if(tmp.sonMenuDTOList&&tmp.sonMenuDTOList.length>0){
+                                return getTwoLis(tmp.sonMenuDTOList)
+                            }else if(tmp.sysPermissionDTOList&&tmp.sysPermissionDTOList.length>0){
+                                return getOneLis(tmp.sysPermissionDTOList)
+                            }
+                        })(tmp)
+                    }
+                </div>
+            `
+        }
+        $(".mainSysWrap").html(str)
+        saveAllSet()
+    }
+    function saveAllSet(){
+        $(".selectToggle").click(function(){//点击修改curTreeData,curData
+            let permissionId = $(this).attr("data-permissionId")
+            let menuId = $(this).attr("data-menuId")
+            let parentId = $(this).attr("data-parentId")
+            let haveMenu = $(this).attr("data-haveMenu")
+            let grandParentId = $(this).parents(".mainSys").attr("data-menuId")
+            let grandIndex = $(this).parents(".mainSys").attr("data-index")
+            let tmpSelectData = null,tmpSelectDataOr=[];
+            if(grandParentId == 3||grandParentId == 2){//循环
+                // console.log(curData[grandIndex])
+                let tmpData = curData[grandIndex];
+                let tmpDataLis = curData[grandIndex].sonMenuDTOList;
+                if(parentId == -1&&menuId&&menuId == tmpData.menuId) {//第一层,全选反选,
+                    tmpData.haveMenu = haveMenu==0?'1':'0'
+                    for(let i = 0;i < tmpDataLis.length;i++){
+                        let num = 0
+                        let tmpPer = tmpDataLis[i].sysPermissionDTOList
+                        tmpDataLis[i].haveMenu = haveMenu==0?'1':'0'
+                        for(let m = 0;m < tmpPer.length;m++){//所有相同id联动
+                            tmpPer[m].havePermission = haveMenu==0?'1':'0'
+                        }
+                    }
+                }else if(permissionId){//第三层
+                    let tmpNum = 0
+                    for(let i = 0;i < tmpDataLis.length;i++){
+                        let num = 0
+                        let tmpPer = tmpDataLis[i].sysPermissionDTOList
+                        for(let m = 0;m < tmpPer.length;m++){//所有相同id联动
+                            if(tmpPer[m].permissionId == permissionId){//当前选中或者取消
+                                tmpPer[m].havePermission = haveMenu==0?'1':'0'
+                            }
+                            if(tmpPer[m].havePermission == 0){
+                                ++num
+                            }
+                        }
+                        if(num == tmpPer.length){//内层全部都取消了,父级取消选中
+                            tmpDataLis[i].haveMenu = '0'
+                        }else{
+                            tmpDataLis[i].haveMenu = '1'
+                        }
+                        //二层否有选中,有则第一层选中,否则第一层不选中
+                        if(tmpDataLis[i].haveMenu == 0){
+                            ++tmpNum
+                        }
+                    }
+                    if(tmpNum == tmpDataLis.length){//二层都是取消状态,一层选中取消掉否则选中
+                        tmpData.haveMenu = 0
+                    }else{
+                        tmpData.haveMenu = 1
+                    }
+                }else{//第二层,内层全选反选
+                    let tmpNum = 0
+                    for(let i = 0;i < tmpDataLis.length;i++){
+                        let tmpPer = tmpDataLis[i].sysPermissionDTOList
+                        if(menuId&&menuId == tmpDataLis[i].menuId){//第二层,里面的全部选中或者全部取消
+                            tmpSelectData = tmpDataLis[i]
+                            tmpDataLis[i].haveMenu = haveMenu==0?'1':'0'
+                            for(let m = 0;m < tmpPer.length;m++){//所有相同id联动
+                                tmpPer[m].havePermission = haveMenu==0?'1':'0'
+                            }
+                        }
+                        //二层否有选中,有则第一层选中,否则第一层不选中
+                        if(tmpDataLis[i].haveMenu == 0){
+                            ++tmpNum
+                        }
+                    }
+                    if(tmpNum == tmpDataLis.length){//二层都是取消状态,一层选中取消掉否则选中
+                        tmpData.haveMenu = 0
+                    }else{
+                        tmpData.haveMenu = 1
+                    }
+                    //全选后遍历统计数据中有相同id的也要选中,三级自动选中后二级要判断是取消还是选中
+                    for(let i = 0;i < tmpDataLis.length;i++){//二级循环
+                        let num = 0
+                        if(menuId&&menuId != tmpDataLis[i].menuId){//第二层,没有点击,自动选中第三层相同id的
+                            let tmpPer = tmpDataLis[i].sysPermissionDTOList
+                            for(let m = 0;m < tmpPer.length;m++){//所有相同id联动,三级循环
+                                for(let n = 0;n < tmpSelectData.sysPermissionDTOList.length;n++){
+                                    if(tmpSelectData.sysPermissionDTOList[n].permissionId == tmpPer[m].permissionId){
+                                       tmpPer[m].havePermission = haveMenu==0?'1':'0'
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    for(let i = 0;i < tmpDataLis.length;i++){//二级循环
+                        let num = 0
+                        let tmpPer = tmpDataLis[i].sysPermissionDTOList
+                        for(let m = 0;m < tmpPer.length;m++){//所有相同id联动,三级循环
+                            if(tmpPer[m].havePermission == 0){
+                                ++num
+                            }
+                        }
+                        if(num == tmpPer.length){//内层全部都取消了,父级取消选中
+                            tmpDataLis[i].haveMenu = '0'
+                        }else{
+                            tmpDataLis[i].haveMenu = '1'
+                        }
+                    }
+                }
+            }else{
+                let tmpData = curData[grandIndex];
+                let tmpDataLis = curData[grandIndex].sysPermissionDTOList;
+                if(permissionId&&parentId==tmpData.menuId){//当前第二层
+                    let num = 0;
+                    for(let i = 0;i < tmpDataLis.length;i++){//判断当前点的是第几层
+                        let tmpPer = tmpDataLis[i]
+                        if(tmpPer.permissionId == permissionId){//当前选中或者取消
+                            tmpPer.havePermission = haveMenu==0?'1':'0'
+                        }
+                        if(tmpPer.havePermission == 0){
+                            ++num
+                        }
+                    }
+                    if(num == tmpDataLis.length){//内层全部都取消了,父级取消选中
+                        tmpData.haveMenu = '0'
+                    }else{
+                        tmpData.haveMenu = '1'
+                    }
+                }else if(menuId&&menuId == tmpData.menuId){//第一层,全选反选
+                    tmpData.haveMenu = haveMenu==0?'1':'0'
+                    for(let i = 0;i < tmpDataLis.length;i++){
+                        let tmpPer = tmpDataLis[i]
+                        tmpPer.havePermission = haveMenu==0?'1':'0'
+                    }
+                }
+            }
+            roleSetLis(curData)
+            getParams()
+        })
+    }
+    function getParams(){//type=0删除,1添加,共三层
+        permissionIdLis=[],menuIdLis=[];
+        for(let i = 0;i < curData.length;i++){//最外层的
+            let tmpData = curData[i]
+            if(tmpData.haveMenu == 1){//第一层选中了,继续遍历第二层
+                menuIdLis.push({menuId:tmpData.menuId})
+                if(tmpData.sonMenuDTOList&&tmpData.sonMenuDTOList.length > 0){//说明有第三层
+                    let tmpSon = tmpData.sonMenuDTOList
+                    for(let m = 0;m < tmpSon.length;m++){
+                        let tmpSym = tmpSon[m]
+                        if(tmpSym.haveMenu == 1){//有选中,遍历第三层
+                            menuIdLis.push({menuId:tmpSym.menuId})
+                            for(let n =0;n < tmpSym.sysPermissionDTOList.length;n++){
+                                if(tmpSym.sysPermissionDTOList[n].havePermission == 1){
+                                    permissionIdLis.push({permissionId:tmpSym.sysPermissionDTOList[n].permissionId})
+                                }
+                            }
+                        }
+                    }
+                }else{//只有两层
+                    if(tmpData.haveMenu == 1){
+                        for(let j = 0;j < tmpData.sysPermissionDTOList.length;j++){
+                            let tmpS =  tmpData.sysPermissionDTOList[j]
+                            if(tmpS.havePermission == 1){
+                                permissionIdLis.push({permissionId:tmpS.permissionId})
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        // console.log(permissionIdLis,menuIdLis)
+    }
+    function getOneLis(data){
+        let tmpstr = ''
+        for(let i = 0;i <data.length;i++){
+            tmpstr += `
+                <li data-permissionId="${data[i].permissionId}" data-haveMenu="${data[i].havePermission}" data-parentId="${data[i].parentId}" class="selectToggle"><img src="${data[i].havePermission==1?require('../images/icon_check.png'):require('../images/icon_unchecked.png')}" alt=""> ${data[i].permissionName}</li>
+            `
+        }
+        return '<ul class="sonSet clearfix">'+tmpstr+'</ul>'
+    }
+    function getTwoLis(data){
+        curTreeData = data
+        let tmpstr = ''
+        for(let i = 0;i <data.length;i++){
+            tmpstr += `
+                <div class="sysWrap">
+                    <div data-menuId="${data[i].menuId}" data-haveMenu="${data[i].haveMenu}" data-parentId="${data[i].parentId}" class="parentSet selectToggle"><img src="${data[i].haveMenu == 1?require('../images/icon_check.png'):require('../images/icon_unchecked.png')}" alt=""> ${data[i].menuName}</div>
+                    <ul class="sonSet clearfix">
+                        ${getTreeLis(data[i].sysPermissionDTOList,data[i].menuId)}
+                    </ul>
+                </div>
+            `
+        }
+        return tmpstr
+    }
+    function getTreeLis(data){
+        let tmpstr = ''
+        for(let i = 0;i <data.length;i++){
+            tmpstr += `
+                <li data-permissionId="${data[i].permissionId}" data-haveMenu="${data[i].havePermission}" data-parentId="${data[i].parentId}" class="selectToggle"><img src="${data[i].havePermission==1?require('../images/icon_check.png'):require('../images/icon_unchecked.png')}" alt=""> ${data[i].permissionName}</li>
+            `
+        }
+        return tmpstr
+    }
+    function roleLeftLis(data){
+        let str = ''
+        for(let i = 0;i < data.length;i++){
+            str+=`
+                <li class="ellipsis editRole" style="background:${i == 0?'#F0F5FF':'#fff'}" data-id="${data[i].id}">${data[i].name}</li>
+            `
+        }
+        $(".leftMenu ul").html(str)
+        changeRole()
+    }
+    function changeRole(){
+        $(".editRole").click(function(){
+            let id = $(this).attr("data-id")
+            curId = id
+            permissionIdLis=[],menuIdLis=[];
+            $(".rightMenu").scrollTop(0)
+            $(this).css({"background-color":"#F0F5FF"}).siblings().css("background-color","#fff")
+            getRoleMenu(id)
+        })
+    }
+})

+ 619 - 0
src/js/userManager.js

@@ -0,0 +1,619 @@
+const $ = require('jquery');
+require("../css/itemManager.less");
+require('./../resource/jquery-ui/jquery-ui.min.js');
+require('./modal.js');
+const {api} = require('./api.js')
+const {post} = require('./utils.js')
+const switchIconOpen = require("./../images/btn_open.png")
+const switchIconClose = require("./../images/btn_close.png")
+const iconDown= require("./../images/arrow_down.png")
+const iconUp = require("./../images/arrow_up.png")
+const arrowLeft= require("./../images/arrow_left.png")
+const arrowRight = require("./../images/arrow_right.png")
+
+let casesId="", name="", isReject ="", isUsed ="",casesIdTemp="", nameTemp="", isRejectTemp ="", isUsedTemp =""
+$(".selectModuleType").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+$(".selectReject").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+$(".selectUsed").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+//获取表格数据
+function getTabData(activePage){
+    let params = {
+        "current": activePage,
+        "deptId": casesId||"",
+        "linkman": name||"",
+        "roleId": isReject||"",
+        "size": 15
+    }
+    post('/sys/user/userPage',params).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{}
+    }).catch((e) =>{
+    
+    })
+}
+$(".moduleItemInp").on("input", function(e){
+    const val = $(this).val().trim()
+    nameTemp = val
+})
+$(".filter").on("click", function(e){
+    casesId=casesIdTemp, name=nameTemp, isReject =isRejectTemp, isUsed =isUsedTemp
+    getTabData(1)
+})
+$('.selectModuleType').on("click", function(e){
+    e.stopPropagation()
+    $(".rejectList ").css("display","none")
+    $(".usedList ").css("display", "none")
+    $(".selectReject .arrow").attr("src",iconDown)
+    $(".selectUsed .arrow").attr("src",iconDown)
+    const showList =  $(".moduleTypeList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".moduleTypeList ").css("display","block")
+        $(".selectModuleType .arrow").attr("src",iconUp)
+    }else{
+        $(".moduleTypeList ").css("display", "none")
+        $(".selectModuleType .arrow").attr("src",iconDown)
+    }
+})
+    
+$('.selectReject').on("click", function(e){
+    e.stopPropagation()
+    $(".moduleTypeList ").css("display", "none")
+    $(".usedList ").css("display", "none")
+    $(".selectModuleType .arrow").attr("src",iconDown)
+    $(".selectUsed .arrow").attr("src",iconDown)
+    const showList =  $(".rejectList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".rejectList ").css("display","block")
+        $(".selectUsed .arrow").attr("src",iconUp)
+    }else{
+        $(".rejectList ").css("display", "none")
+        $(".selectUsed .arrow").attr("src",iconDown)
+    }
+})
+$('.selectUsed').on("click", function(e){
+    e.stopPropagation()
+    $(".moduleTypeList ").css("display", "none")
+    $(".rejectList ").css("display","none")
+    $(".selectModuleType .arrow").attr("src",iconDown)
+    $(".selectReject .arrow").attr("src",iconDown)
+    const showList =  $(".usedList ").css("display")
+    if(showList == "none" ||!showList){
+        $(".usedList ").css("display","block")
+        $(".selectUsed .arrow").attr("src",iconUp)
+    }else{
+        $(".usedList ").css("display", "none")
+        $(".selectUsed .arrow").attr("src",iconDown)
+    }
+})
+bindUsedSelect()
+getTabData(1)
+getmoduleTypeList()
+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)*10 + i+1}</td>
+                <td class="textCenter">${item.linkman}</td>
+                <td class="textCenter">${item.deptName||''}</td>
+                <td class="textCenter">${item.roleName||''}</td>
+                <td  class="textCenter">
+                    <div class="itemMsgInfoBox">
+                        <p class="itemInfoRight itemReject">
+                            <img data-id="${item.userId}" data-status="${item.status}" class="switchImg roleSelect" src=${item.status==1?switchIconOpen:switchIconClose} /><span class="imgInfo"> ${item.status==1?"启用":"禁用"}</span>
+                        </p>
+                    </div>
+                </td>
+                <td class="textCenter clearfix"><span data-title="科室" data-id="${item.userId}" class="editItem deptEdit fl">科室编辑</span><span data-id="${item.userId}" data-title="角色" class="editItem roleEdit fr">角色编辑</span></td>
+            </tr>
+        `
+    }
+    $('tbody').html(str)
+    bindEdit(data,activePage)
+}
+
+//获取用户科室列表
+function getDeptList(id,activePage,title){
+    post('/sys/user/getUserDepts',{userId:id}).then(res =>{
+        let data = res.data;
+        if(data.code == '0'){
+            let result = data.data
+            console.log(result,'科室列表')
+            editItem(result,activePage,title)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+//获取用户角色列表
+function getUserList(id,activePage,title){
+    post('/sys/user/getUserRoles',{userId:id}).then(res =>{
+        let data = res.data;
+        if(data.code == '0'){
+            const result = data.data
+            console.log(result,'角色列表')
+            editItemRole(result,activePage,title)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+function bindEdit(data,activePage){
+    $('.editItem').click(function(e){
+        const index = $(this).parents("tr").attr('data-index') 
+        const id = $(this).attr('data-id') 
+        const title = $(this).attr('data-title') 
+        if(title == "科室"){
+            getDeptList(id,activePage,title)
+        }else if(title == "角色"){
+            getUserList(id,activePage,title)
+        }
+    })
+    $(".roleSelect").click(function(){
+        const id = $(this).attr('data-id')
+        const status = $(this).attr('data-status')
+        let that = $(this);
+        if(status == 1){
+            toggleOnOff('/sys/user/disable',id,that,status)
+        }else{
+            toggleOnOff('/sys/user/enable',id,that,status)
+        }
+    })
+}
+//启用禁用
+function toggleOnOff(url,id,that,status){
+    $.alerModal({type:"loading"});
+    post(url,{userId:id}).then(res =>{
+        if(res.data.code == '0'){
+            // const data = res.data.data
+            that.attr({
+                "src":status==1?switchIconClose:switchIconOpen,
+                "data-status":status==1?0:1
+            })
+            that.siblings().html(status==1?' 禁用':' 启用')
+            $.alerModal({"message":"修改成功",type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+        }else{
+            console.log(res)
+        }
+        $(".loading").remove()
+    }).catch((e) =>{
+        $(".loading").remove()
+    })
+}
+let leftDeptLis = [],
+    rightDeptLis = [],
+    selectDeptLeft = [],
+    selectDeptRight = [],
+    leftRoleLis = [],
+    rightRoleLis = [],
+    selectRoleLeft = [],
+    selectRoleRight = [];
+function upDataLis(leftDeptLis,rightDeptLis){
+    let allLeft = '',allRight = '';
+    for(let i = 0;i < leftDeptLis.length;i++){//未选中
+        allLeft+=`
+            <li class="eclips" data-flg="0" data-id="${leftDeptLis[i].deptId}"><img class="select" src="${require('../images/icon_unchecked.png')}"/>${leftDeptLis[i].deptName}</li>
+        `
+    }
+    for(let j = 0;j < rightDeptLis.length;j++){//已选
+        allRight+=`
+            <li class="eclips" data-flg="0" data-id="${rightDeptLis[j].deptId}"><img class="select" src="${require('../images/icon_unchecked.png')}"/>${rightDeptLis[j].deptName}</li>
+        `
+    }
+    $("#partLeftNo", parent.document).html(allLeft)
+    $("#partRightSelect", parent.document).html(allRight)
+    $(".partLeft li", parent.document).click(function(){
+        let dataFlg = $(this).attr("data-flg")
+        let deptId = $(this).attr("data-id")
+        $(this).attr({
+            "data-flg":dataFlg == 0?1:0
+        }).children("img").attr({
+            src:dataFlg == 0?require('../images/icon_check.png'):require('../images/icon_unchecked.png'),
+        })
+        if(dataFlg == 0){
+            selectDeptLeft.push(deptId)
+        }else{
+            selectDeptLeft.splice($.inArray(deptId,selectDeptLeft),1)
+        }
+    })
+    $(".partRight li", parent.document).click(function(){
+        let dataFlg = $(this).attr("data-flg")
+        let deptId = $(this).attr("data-id")
+        $(this).attr({
+            "data-flg":dataFlg == 0?1:0
+        }).children("img").attr({
+            src:dataFlg == 0?require('../images/icon_check.png'):require('../images/icon_unchecked.png')
+        })
+        if(dataFlg == 0){
+            selectDeptRight.push(deptId)
+        }else{
+            selectDeptRight.splice($.inArray(deptId,selectDeptRight),1)
+        }
+    })
+}
+function upDataLisRole(leftDeptLis,rightDeptLis){
+    let allLeft = '',allRight = '';
+    for(let i = 0;i < leftDeptLis.length;i++){//未选中
+        allLeft+=`
+            <li class="eclips" data-flg="0" data-id="${leftDeptLis[i].id}"><img class="select" src="${require('../images/icon_unchecked.png')}"/>${leftDeptLis[i].name}</li>
+        `
+    }
+    for(let j = 0;j < rightDeptLis.length;j++){//已选
+        allRight+=`
+            <li class="eclips" data-flg="0" data-id="${rightDeptLis[j].id}"><img class="select" src="${require('../images/icon_unchecked.png')}"/>${rightDeptLis[j].name}</li>
+        `
+    }
+    $("#partLeftNo", parent.document).html(allLeft)
+    $("#partRightSelect", parent.document).html(allRight)
+    $(".partLeft li", parent.document).click(function(){
+        let dataFlg = $(this).attr("data-flg")
+        let deptId = $(this).attr("data-id")
+        $(this).attr({
+            "data-flg":dataFlg == 0?1:0
+        }).children("img").attr({
+            src:dataFlg == 0?require('../images/icon_check.png'):require('../images/icon_unchecked.png'),
+        })
+        if(dataFlg == 0){
+            selectRoleLeft.push(deptId)
+        }else{
+            selectRoleLeft.splice($.inArray(deptId,selectRoleLeft),1)
+        }
+    })
+    $(".partRight li", parent.document).click(function(){
+        let dataFlg = $(this).attr("data-flg")
+        let deptId = $(this).attr("data-id")
+        $(this).attr({
+            "data-flg":dataFlg == 0?1:0
+        }).children("img").attr({
+            src:dataFlg == 0?require('../images/icon_check.png'):require('../images/icon_unchecked.png')
+        })
+        if(dataFlg == 0){
+            selectRoleRight.push(deptId)
+        }else{
+            selectRoleRight.splice($.inArray(deptId,selectRoleRight),1)
+        }
+    })
+}
+//修改科室
+function editItem(result,activePage,title){
+    $('.pop-box').remove()
+    $('.container').append('<div class="pop-box"></div>')
+    let userId = result.userId;
+    leftDeptLis = result.notSelDepts||[],rightDeptLis = result.selDepts||[];
+    const str = `
+        <div class="itemMsgBox">
+            <div class="mask"></div>
+            <div class="itemMsgContent" style="height:552px;width:680px;margin: -276px 0 0 -340px;">
+                <p class="itemMsgTitle">${title}编辑 <img class="iconClose" src=${require('./../images/icon_close_default.png')} alt="关闭" /></p>
+                <div class="itemContentBoxLisL itemContentBoxLis">
+                    <p class="title">所有${title}</p>
+                    <ul class="partLeft partPub" id="partLeftNo">
+                    
+                    </ul>
+                </div>
+                <div class="activeGo">
+                    <p class="activeGoRight"><img src="${require('../images/goRight.png')}" /></p>
+                    <p class="btm activeGoLeft"><img src="${require('../images/goLeft.png')}" /></p>
+                </div>
+                <div class="itemContentBoxLisR itemContentBoxLis">
+                    <p class="title">已选${title}</p>
+                    <ul class="partRight partPub" id="partRightSelect">
+                    
+                    </ul>
+                </div>
+                <div class="clearfix"></div>
+                <div class="confirmEditBox"><span class="confirmEdit">保存</span></div>
+            </div>
+        </div>
+    `
+    $("#mainBox", parent.document).append(str)
+    
+    upDataLis(leftDeptLis,rightDeptLis)
+    $("#mainBox .itemMsgBox .iconClose", parent.document).on("click", function(e){
+        $("#mainBox .itemMsgBox", parent.document).remove()
+    })
+    $("#mainBox .itemMsgBox .activeGoRight", parent.document).on("click", function(e){//数据往右
+        let selectDeptLeftTmp = selectDeptLeft
+        for(let j = 0;j < selectDeptLeftTmp.length;j++){
+            for(let i = 0;i < leftDeptLis.length;i++){
+                if(leftDeptLis[i].deptId == selectDeptLeftTmp[j]){
+                    rightDeptLis.push(leftDeptLis[i])
+                    leftDeptLis.splice(i,1)
+                }
+            }
+        }
+        upDataLis(leftDeptLis,rightDeptLis)
+        selectDeptLeft=[]
+    })
+    $("#mainBox .itemMsgBox .activeGoLeft", parent.document).on("click", function(e){//数据往左
+        let selectDeptRightTmp = selectDeptRight
+        for(let j = 0;j < selectDeptRightTmp.length;j++){
+            for(let i = 0;i < rightDeptLis.length;i++){
+                if(rightDeptLis[i].deptId == selectDeptRightTmp[j]){
+                    leftDeptLis.push(rightDeptLis[i])
+                    rightDeptLis.splice(i,1)
+                }
+            }
+        }
+        upDataLis(leftDeptLis,rightDeptLis)
+        selectDeptRight=[]
+    })
+    $("#mainBox .itemMsgBox .confirmEdit", parent.document).on("click", function(){
+        saveEdit(userId,activePage)
+    })
+}
+//修改角色
+function editItemRole(result,activePage,title){
+    $('.pop-box').remove()
+    $('.container').append('<div class="pop-box"></div>')
+    let userId = result.userId;
+    leftRoleLis = result.notSelRoles||[],rightRoleLis = result.selRoles||[];
+    const str = `
+        <div class="itemMsgBox">
+            <div class="mask"></div>
+            <div class="itemMsgContent" style="height:552px;width:680px;margin: -276px 0 0 -340px;">
+                <p class="itemMsgTitle">${title}编辑 <img class="iconClose" src=${require('./../images/icon_close_default.png')} alt="关闭" /></p>
+                <div class="itemContentBoxLisL itemContentBoxLis">
+                    <p class="title">所有${title}</p>
+                    <ul class="partLeft partPub" id="partLeftNo">
+                    
+                    </ul>
+                </div>
+                <div class="activeGo">
+                    <p class="activeGoRight"><img src="${require('../images/goRight.png')}" /></p>
+                    <p class="btm activeGoLeft"><img src="${require('../images/goLeft.png')}" /></p>
+                </div>
+                <div class="itemContentBoxLisR itemContentBoxLis">
+                    <p class="title">已选${title}</p>
+                    <ul class="partRight partPub" id="partRightSelect">
+                    
+                    </ul>
+                </div>
+                <div class="clearfix"></div>
+                <div class="confirmEditBox"><span class="confirmEdit">保存</span></div>
+            </div>
+        </div>
+    `
+    $("#mainBox", parent.document).append(str)
+    
+    upDataLisRole(leftRoleLis,rightRoleLis)
+    $("#mainBox .itemMsgBox .iconClose", parent.document).on("click", function(e){
+        $("#mainBox .itemMsgBox", parent.document).remove()
+    })
+    $("#mainBox .itemMsgBox .activeGoRight", parent.document).on("click", function(e){//数据往右
+        let selectDeptLeftTmp = selectRoleLeft
+        let leftDeptLis = leftRoleLis
+        for(let j = 0;j < selectDeptLeftTmp.length;j++){
+            for(let i = 0;i < leftDeptLis.length;i++){
+                if(leftDeptLis[i].id == selectDeptLeftTmp[j]){
+                    rightRoleLis.push(leftDeptLis[i])
+                    leftRoleLis.splice(i,1)
+                }
+            }
+        }
+        
+        console.log(leftRoleLis,rightRoleLis)
+        upDataLisRole(leftRoleLis,rightRoleLis)
+        selectRoleLeft=[]
+    })
+    $("#mainBox .itemMsgBox .activeGoLeft", parent.document).on("click", function(e){//数据往左
+        let selectDeptRightTmp = selectRoleRight
+        let rightDeptLis = rightRoleLis
+        for(let j = 0;j < selectDeptRightTmp.length;j++){
+            for(let i = 0;i < rightDeptLis.length;i++){
+                if(rightDeptLis[i].id == selectDeptRightTmp[j]){
+                    leftRoleLis.push(rightDeptLis[i])
+                    rightRoleLis.splice(i,1)
+                }
+            }
+        }
+        upDataLisRole(leftRoleLis,rightRoleLis)
+        selectRoleRight=[]
+    })
+    $("#mainBox .itemMsgBox .confirmEdit", parent.document).on("click", function(){
+        saveEditRole(userId,activePage)
+    })
+}
+
+//保存科室修改
+function saveEdit(id,activePage){
+    let ids = []
+    for(let i = 0;i < rightDeptLis.length;i++){
+        ids.push(rightDeptLis[i].deptId)
+    }
+    const param = {
+        "deptIds": ids,
+        "userId": id
+      }
+    post('/sys/user/editUserDepts',param).then(res =>{
+        if(res.data.code == '0'){
+            // const data = res.data.data
+            getTabData(activePage)
+            $.alerModal({"message":"修改成功",type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+            $('#mainBox .itemMsgBox', parent.document).remove()
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+//保存角色修改
+function saveEditRole(id,activePage){
+    let ids = []
+    for(let i = 0;i < rightRoleLis.length;i++){
+        ids.push(rightRoleLis[i].id)
+    }
+    const param = {
+        "roleIds": ids,
+        "userId": id
+      }
+    post('/sys/user/editUserRoles',param).then(res =>{
+        if(res.data.code == '0'){
+            // const data = res.data.data
+            getTabData(activePage)
+            $.alerModal({"message":"修改成功",type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
+            $('#mainBox .itemMsgBox', parent.document).remove()
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+
+//获取科室,角色列表
+function getmoduleTypeList(){
+    post('/bas/dept/listForUser',{
+        "inputStr": ""
+      }).then(res =>{
+        if(res.data.code == '0'){
+           const  moduleTypeList = res.data.data
+           renderModuleTypeList(moduleTypeList)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+    post('/sys/role/listForUser').then(res =>{
+        if(res.data.code == '0'){
+           const  moduleTypeList = res.data.data
+           renderRoleTypeList(moduleTypeList)
+        }else{}
+    }).catch((e) =>{
+    
+    })
+}
+
+
+function renderRoleTypeList(moduleTypeList){
+    let str = `<li class="modeTypeItem " data-id="" data-name="全部">全部</li>`
+    for(let i = 0; i < moduleTypeList.length; i++){
+        str += `<li class="modeTypeItem ellipsis" title=${moduleTypeList[i].name} data-id=${moduleTypeList[i].id} data-name=${moduleTypeList[i].name}> ${moduleTypeList[i].name}</li>`
+    }
+    $('.rejectList').html(str)
+    bindRoleTypeSelect()
+}
+function renderModuleTypeList(moduleTypeList){
+    let str = `<li class="modeTypeItem " data-id="" data-name="全部">全部</li>`
+    for(let i = 0; i < moduleTypeList.length; i++){
+        str += `<li class="modeTypeItem ellipsis" title=${moduleTypeList[i].deptName} data-id=${moduleTypeList[i].deptId} data-name=${moduleTypeList[i].deptName}> ${moduleTypeList[i].deptName}</li>`
+    }
+    $('.moduleTypeList').html(str)
+    bindModuleTypeSelect()
+}
+
+//模块类型选择
+function bindModuleTypeSelect(){
+    $('.moduleTypeList .modeTypeItem').on("click",function(){
+        const modeTypeItemName = $(this).attr("data-name")
+        const modeTypeItemId = $(this).attr("data-id")
+        casesIdTemp =modeTypeItemId
+        $('.selectModuleType').html(modeTypeItemName).attr("title",modeTypeItemName)
+        $(".selectModuleType").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+        $(".moduleTypeList ").css("display", "none")
+    })
+}
+function bindRoleTypeSelect(){
+    $('.rejectList .modeTypeItem').on("click",function(){
+        const modeTypeItemName = $(this).attr("data-name")
+        const modeTypeItemId = $(this).attr("data-id")
+        isRejectTemp =modeTypeItemId
+        $('.selectReject').html(modeTypeItemName)
+        $(".selectReject").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+
+        $(".moduleTypeList ").css("display", "none")
+    })
+}
+
+//是否启用选择
+function bindUsedSelect(){
+    $('.usedItem').on("click",function(){
+        const usedItemName = $(this).attr("data-name")
+        const usedItemItemId = $(this).attr("data-id")
+        isUsedTemp =usedItemItemId
+        $('.selectUsed').html(usedItemName)
+        $(".usedList").css("display", "none")
+        $(".selectUsed").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
+    })
+}
+
+
+
+
+//分页渲染
+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)
+        // renderPagination(totalPage,activePageNow,totalNum)
+    })
+    $(".prePage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow > 1){
+            activePageNow--
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    $(".nextPage").on("click", function(e){
+        let activePageNow = Number($(".activePage").attr('data-page'))
+        if(activePageNow < totalPage){
+            activePageNow++
+            getTabData(activePageNow)
+            // renderPagination(totalPage,activePageNow,totalNum)
+        }
+    })
+    
+}
+
+$(document).on("click", function(){
+    $(".moduleTypeList ").css("display", "none")
+    $(".rejectList ").css("display","none")
+    $(".usedList ").css("display", "none")
+    $(".selectModuleType .arrow").attr("src",iconDown)
+    $(".selectReject .arrow").attr("src",iconDown)
+    $(".selectUsed .arrow").attr("src",iconDown)
+})

+ 4 - 0
src/js/utils.js

@@ -8,7 +8,11 @@ const pageMap={
   'YH-JCSJWH-MKSJWH':'moduleManager.html',
   'YH-JCSJWH-TMSJWH':'itemManager.html',
   'YH-BLZK-ZKPF':'qcList.html',
+  'YH-BLZK-ZKPFKS':'qcListDept.html',
+  'YH-BLZK-ZKPFGR':'qcListPerson.html',
   'YH-TJFX':'statistics.html',
+  'YH-QXGL-YHGL':'userManager.html',
+  'YH-QXGL-JSGL':'roleManager.html',
 };
 const api={
   getMenu:'/sys/user/getUserOrgMenu',     //获取菜单

+ 58 - 2
webpack.config.js

@@ -6,7 +6,7 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const CopyWebpackPlugin = require('copy-webpack-plugin');
 const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 const webpack = require('webpack');
-const proxyHost = "http://192.168.2.236:5858";
+const proxyHost = "http://192.168.2.241:5858";
 // const proxyHost = "http://192.168.3.117:5858";//铁钢
 module.exports = {
   entry: {
@@ -17,6 +17,10 @@ module.exports = {
     moduleManager: path.resolve(__dirname, 'src/js', 'moduleManager.js'),
     itemManager: path.resolve(__dirname, 'src/js', 'itemManager.js'),
     qcList: path.resolve(__dirname, 'src/js', 'qcList.js'),
+    qcListDept:path.resolve(__dirname, 'src/js', 'qcListDept.js'),
+    qcListPerson:path.resolve(__dirname, 'src/js', 'qcListPerson.js'),
+    userManager: path.resolve(__dirname, 'src/js', 'userManager.js'),
+    roleManager: path.resolve(__dirname, 'src/js', 'roleManager.js'),
     vendor: 'lodash'// 多个页面所需的公共库文件,防止重复打包带入
   },
   output: {
@@ -107,6 +111,32 @@ module.exports = {
         collapseWhitespace: true //删除空白符与换行符
       }
     }),
+    new HtmlWebpackPlugin({
+      title: 'qcListPerson.html',
+      template: path.resolve(__dirname, 'src/html', 'qcListPerson.html'),
+      filename: 'qcListPerson.html',
+      chunks: ['qcListPerson', 'vendor', 'common'],
+      hash: true, //防止缓存
+      inject: true,
+      minify: {
+        removeAttributeQuotes: true, //压缩 去掉引号
+        removeComments: true, //移除HTML中的注释
+        collapseWhitespace: true //删除空白符与换行符
+      }
+    }),
+    new HtmlWebpackPlugin({
+      title: 'qcListDept.html',
+      template: path.resolve(__dirname, 'src/html', 'qcListDept.html'),
+      filename: 'qcListDept.html',
+      chunks: ['qcListDept', 'vendor', 'common'],
+      hash: true, //防止缓存
+      inject: true,
+      minify: {
+        removeAttributeQuotes: true, //压缩 去掉引号
+        removeComments: true, //移除HTML中的注释
+        collapseWhitespace: true //删除空白符与换行符
+      }
+    }),
     new HtmlWebpackPlugin({
       title: 'qcScore.html',
       template: path.resolve(__dirname, 'src/html', 'qcScore.html'),
@@ -133,6 +163,32 @@ module.exports = {
         collapseWhitespace: true //删除空白符与换行符
       }
     }),
+    new HtmlWebpackPlugin({
+      title: 'userManager.html',
+      template: path.resolve(__dirname, 'src/html', 'userManager.html'),
+      filename: 'userManager.html',
+      chunks: ['userManager', 'vendor', 'common'],
+      hash: true, //防止缓存
+      inject: true,
+      minify: {
+        removeAttributeQuotes: true, //压缩 去掉引号
+        removeComments: true, //移除HTML中的注释
+        collapseWhitespace: true //删除空白符与换行符
+      }
+    }),
+    new HtmlWebpackPlugin({
+      title: 'roleManager.html',
+      template: path.resolve(__dirname, 'src/html', 'roleManager.html'),
+      filename: 'roleManager.html',
+      chunks: ['roleManager', 'vendor', 'common'],
+      hash: true, //防止缓存
+      inject: true,
+      minify: {
+        removeAttributeQuotes: true, //压缩 去掉引号
+        removeComments: true, //移除HTML中的注释
+        collapseWhitespace: true //删除空白符与换行符
+      }
+    }),
     new CopyWebpackPlugin([
       {
         from:'src/resource',
@@ -241,7 +297,7 @@ module.exports = {
       '/': proxyHost
     },
     hot: true,
-    openPage:'index.html'
+    openPage:'login.html'
     
   }
 }