Browse Source

申诉发起

zhouna 3 years ago
parent
commit
1edc726453

+ 435 - 0
src/css/appealInit.less

@@ -0,0 +1,435 @@
+@import "./reset.less";
+.container{
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    background: #fff;
+    border-bottom: 10px @disColor solid;
+    box-sizing: border-box;
+}
+ul,li{
+    list-style: none;
+}
+h2{
+    .h2;
+    border-bottom: 10px @disColor solid;
+    position: fixed;
+    top: 0
+}
+.main-body{
+    .main-body-com;
+    border: none;
+    border-left:10px @disColor solid;
+    margin: 54px 0 0;
+    min-width: 1090px;
+    min-height: calc(100% - 84px);
+    /*width: 100%;*/
+}
+.qctable{
+    .table;
+    min-width: 1090px;
+    th,td{
+        padding:5px 10px;
+    }
+    th{
+        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");
+            background-size: 100%;
+        }
+        &.desc:after{
+            background: url("../images/down_blue.png");
+            background-size: 100%;
+        }
+    }
+    td{
+        white-space: nowrap;
+    }
+    .moduleNumber{
+        text-align: center;
+    }
+    .scoreOperaItem{
+        width: 50px;
+        cursor: pointer;
+    }
+    .tabTitle   {
+        background: #EFF0F9 !important;
+      }
+    
+}
+.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;
+        vertical-align: middle;
+    }
+}
+
+.recordScoreOperaBtn{
+    cursor: pointer;
+    color: @activeColor;
+}
+.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 @activeColor;
+    color: #fff;
+    background: @activeColor;
+}
+.filterBox{
+    position: relative;
+}
+.overAuto{
+    display: table;
+    padding-right: 20px;
+    width: 100%;
+}
+.toggle-item{
+    display: none;
+}
+.filter-toggler{
+    position: absolute;
+    left: 1048px;
+    top: 8px;
+    color: #777;
+    white-space: nowrap;
+    font-size: 14px;
+    background: url("../images/arrow_up.png") 60px center no-repeat;
+    padding-right: 15px;
+    background-size: 10px 6px;
+    &.up{
+        background: url("../images/arrow_down.png") 60px center no-repeat;
+        background-size: 10px 6px;
+    }
+}
+.filterItem{
+    position: relative;
+    display: inline-block;
+    float: left;
+    height: 40px;
+    line-height: 40px;
+    margin: 0 20px 20px 0;
+    span{
+        display: inline-block;
+        line-height: 32px;
+        position: relative;
+    }
+    input{
+        width:120px;
+        height:32px;
+        border-radius:4px;
+        border: 1px solid #E2E5EF;
+        outline: none;
+        margin-right: 10px;
+        padding: 0 10px;
+        box-sizing: border-box;
+    }
+    input:focus{
+        border: 1px solid @activeColor ;
+        outline: 0;
+        -webkit-box-shadow:@activeColor  0px 0px 2px;
+        -moz-box-shadow: @activeColor  0px 0px 2px;
+        box-shadow: @activeColor  0px 0px 2px;
+    }
+}
+
+.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,.checkList{
+    width: 120px;
+    // height: 200px;
+    li:hover{
+        background-color: #EEF4FF;
+        cursor: pointer;
+    }
+}
+
+.selectLevel,.selectDept,.fpSelectCheck,.qcSelectCheck{
+    display: inline-block;
+    position: relative;
+    width:120px;
+    padding: 0 10px;
+    height:32px;
+    border-radius:4px;
+    border: 1px solid #E2E5EF;
+    box-sizing: border-box;
+    cursor: pointer;
+}
+.selectDept{
+    width: 160px;
+}
+
+.filter,.reset,.export{
+    display: inline-block;
+    width:60px;
+    height:32px;
+    background:@activeColor;
+    border-radius:4px;
+    color: #fff;
+    text-align: center;
+    line-height: 32px;
+    position: relative;
+    top: 2px;
+    cursor: pointer;
+    float: left;
+    margin: 0 0px 22px 0;
+}
+.export{
+    height:34px;
+    
+    background: #fff;
+    border-radius: 4px;
+    color: #777;
+    border: 1px solid #777;
+    box-sizing: border-box;
+    cursor: pointer;
+    margin-left: 10px;
+    float: left;
+    top: 0px;
+}
+.arrow{
+    position: absolute;
+    width: 10px;
+    top: 12px;
+    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: 32px;
+    input{
+        position: absolute;
+    }
+}
+.setCol{
+    color: #777;
+    cursor: pointer;
+}
+.iconSetting{
+    width: 18px;
+    position: relative;
+    top: 3px;
+    margin: 0 3px 0 0;
+}
+.iconCalen{
+    position: absolute;
+    width: 15px;
+    top: 8px;
+    right: 10px;
+}
+.textCenter{
+    text-align: center;
+}
+.patientNameSpan{
+    color: @activeColor;
+    cursor: pointer;
+}
+
+.deptItem:hover{
+    background-color: #EEF4FF;
+    cursor: pointer;
+}
+.ellipsis{
+    overflow: hidden;
+    text-overflow:ellipsis;
+    white-space: nowrap;
+}
+.unSelect{
+    color: #cfccd6
+ }
+
+
+.pagination{
+    margin: 35px 0 20px 0  ;
+    text-align: right;
+}
+.totalSum{
+    font-size:12px;
+    line-height:17px;
+    color: #777777;
+    margin-right: 20px;
+}
+.pageNum,.prePage,.nextPage, .more{
+    display: inline-block;
+    width: 20px;
+    cursor: pointer;
+    margin: 0 20px 0 0;
+    text-align: center;
+    color: #777;
+}
+.prePage,.nextPage{
+    img{
+        position: relative;
+        top: 0px   ;
+    }
+}
+ .more{
+    cursor: not-allowed;
+}
+.arrowPage{
+    width: 6px;
+}
+.activePage{
+    color: @activeColor;
+}
+
+
+
+.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: @activeColor !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;
+}
+.tipIcon{
+  color: #777;
+  cursor: pointer;
+  display: inline-block;
+  margin-left: 6px;
+  margin-right: 2px;
+}
+.toolTipIcon{
+    width: 18px;
+    position: relative;
+    top: 3px;
+}
+
+.tooltip{
+    visibility: hidden;
+    position: relative;
+    padding: 7px 10px;
+    border-radius: 4px;
+    margin: 100px auto;
+    background-color: #4D4D4D;
+    text-align: center;
+    color: #fff;
+    font-size: 14px;
+}
+.tooltip:before{
+    content: '';
+    display: block;
+    position: absolute;
+    bottom: 9px;
+    left: -12px;
+    border-bottom: 6px solid transparent;
+    border-top: 6px solid transparent;
+    border-left: 6px solid transparent;
+    border-right: 6px solid #4D4D4D;
+}

+ 992 - 0
src/css/appealUserPage.less

@@ -0,0 +1,992 @@
+@import './reset.less';
+.main-part{
+  height: 100%;
+}
+
+.ellipsis{
+  overflow: hidden;
+  text-overflow:ellipsis;
+  white-space: nowrap;
+}
+#loading{
+  text-align: center;
+  height: 2000px;
+  margin-top: 30px;
+}
+.waring {
+  color: #FF4D4F;
+  margin-top: 18px;
+  height: 18px;
+}
+.patient-info{
+  /*height: 50px;*/
+  background: #fff;
+  line-height: 50px;
+  border-bottom: 10px #EFF1F6 solid;
+  text-align: center;
+  /*margin-bottom: 20px;*/
+  padding-right: 80px;
+  span{
+    color: #333;
+    margin-right: 40px;
+    display: inline-block;
+  }
+  .check,.ywCheck{
+    display: inline-block;
+    padding: 0px 13px;
+    background: #00A1FF;
+    color:#fff;
+    border-radius: 4px;
+    height: 30px;
+    line-height: 30px;
+    position: absolute;
+    right: 0;
+    top: 10px;
+    margin-right: 25px;
+    cursor: pointer;
+  }
+  .ywCheck{
+    display: none;
+  }
+}
+.sub-menu{
+  position: relative;
+  width: @menuWt+15px;
+  height: 100%;
+  float: left;
+  /*overflow-y: auto;*/
+  overflow: hidden;
+  background: @themeColor;
+  border-right: 1px @frameBdColor solid;
+  .logo{
+    margin:8px 0 44px;
+    text-indent: 22px;
+    height: 42px;
+  }
+  &>a{
+    position: absolute;
+    top: 50%;
+    right: 0;
+    z-index: 100;
+  }
+  &>ul,.subMenu{
+    overflow-x: hidden;
+    overflow-y: auto;
+    white-space: nowrap;
+    height:calc(100% - 140px);
+  }
+  &>ul>li,.subMenu>li{
+    color: @fstColor;
+    margin-bottom: 10px;
+    &.menu-0{
+      background: url("../images/total.png") 20px 9px no-repeat;
+      &.active{
+        background: url("../images/total_a.png") 20px 9px no-repeat;
+      }
+      &.slide-up{
+        background-color: @activeBg;
+      }
+    }
+    &.menu-6{
+       background: url("../images/index.png") 20px 11px no-repeat;
+      &.active{
+        background: url("../images/index_a.png") 20px 11px no-repeat;
+      }
+      &.slide-up{
+        background-color: @activeBg;
+      }
+     }
+    &.menu-1{
+      background: url("../images/inhis.png") 19px 11px no-repeat;
+      &.active{
+        background: url("../images/inhis_a.png") 19px 11px no-repeat;
+      }
+      &.slide-up{
+        background-color: @activeBg;
+      }
+    }
+    &.menu-37{
+      background: url("../images/prod.png") 20px 10px no-repeat;
+      &.active{
+        background: url("../images/prod_a.png") 20px 10px no-repeat;
+      }
+      &.slide-up{
+        background-color: @activeBg;
+      }
+    }
+    &.menu-5{
+      background: url("../images/out.png") 20px 11px no-repeat;
+      &.active{
+        background: url("../images/out_a.png") 20px 11px no-repeat;
+      }
+      &.slide-up{
+        background-color: @activeBg;
+      }
+    }
+  }
+  .slide-up {
+    background-color: @activeBg !important;
+  }
+  .active{
+    color: @activeColor;
+    /*background: @activeBg;
+    border-right: 3px @activeColor solid;*/
+  }
+  .subMenu>.active{
+    color: @activeColor;
+    /*background: @activeBg;
+    border-right: 3px @activeColor solid;*/
+  }
+  .page:hover{
+      color: @activeColor;
+  }
+  .list-1{
+    position: relative;
+    p {
+      color: @fstColor;
+      &:hover {
+        color: @activeColor;
+      }
+    }
+    &:after{
+      content: " ";
+      display: inline-block;
+      position: absolute;
+      left: @menuWt+(-30px);
+      top:18px;
+      width: 10px;
+      height: 6px;
+      background: url("../images/icon_down.png") no-repeat;
+    }
+    &.slide-up:after{
+      transform: rotate(180deg);
+      -webkit-transform: rotate(180deg);
+    }
+    ul{
+      display: none;
+      li.page{
+        text-indent: 55px;
+        color: @greyColor;
+        &.active{
+          color: @activeColor;
+        }
+        &:hover {
+          color: @activeColor;
+        }
+      }
+    }
+  }
+  li{
+    line-height: @menuLiHt;
+    text-indent: 45px;
+    cursor: pointer;
+  }
+  .copy-right{
+    /*position: fixed;
+    bottom: 0px;*/
+    width: @menuWt+15;
+    text-align: center;
+    background: @themeColor;
+    padding: 10px 0 20px;
+    border-top: 1px @themeBorderClr solid;
+    p{
+      font-size:12px;
+      color: @trdColor;
+      white-space: nowrap;
+    }
+  }
+}
+.menu-mini{
+  display: none;
+  width: 60px;
+  height: 100%;
+  background: @themeColor;
+  position: relative;
+  .logo{
+    height: 50px;
+    line-height: 50px;
+    text-align: center;
+    color: #DEE5EF;
+    margin-bottom: 44px;
+  }
+  &>a{
+    position: absolute;
+    top: 50%;
+    right: 0;
+    z-index: 1;
+  }
+  &>ul>li{
+    width: 100%;
+    height: 40px;
+    line-height: 40px;
+    background: url("../images/module.png") center no-repeat;
+    cursor: pointer;
+    margin-bottom: 10px;
+    &:hover{
+      &:after{
+      //   content: "";
+      //   display: inline-block;
+      //   width: 8px;
+      //   height: 32px;
+      //   background: url("../images/ar.png") no-repeat;
+      //   position: absolute;
+      //  left: 56px;
+      //  top: 4px;
+      }
+      .arrow-left{
+        content: "";
+        display: inline-block;
+        width: 8px;
+        height: 32px;
+        background: url("../images/ar.png") no-repeat;
+        position: relative;
+        left: 56px;
+        top: 4px; 
+        z-index:2;
+      }
+      ul{
+        display: block;
+      }
+    }
+    & ul{
+      display: none;
+      left: 60px;
+      position: absolute;
+      width: 186px;
+      background: @themeColor;
+      border-radius:4px;
+      box-shadow:1px 2px 20px -3px #000512;
+      margin-left: 3px;
+      z-index: 9;
+      height: calc(100% - 80px);
+      top: 60px;
+      &:before{
+        // content: "";
+        // display: inline-block;
+        // width: 8px;
+        // height: 32px;
+        // background: url("../images/ar.png") no-repeat;
+        // position: absolute;
+        // left: -8px;
+      }
+     
+      li{
+        height: 40px;
+        line-height: 40px;
+        color: @greyColor;
+        text-indent: 30px;
+        border-radius: 4px;
+        &:hover,&.active{
+          background: @activeBg;
+          color: @activeColor;
+        }
+      }
+    }
+    &.menu-0{
+      background: url("../images/total.png") 20px 9px no-repeat;
+      &:hover,&.active{
+        background: url("../images/total_a.png") @activeBg 20px 9px no-repeat;
+      }
+    }
+    &.menu-6{
+      background: url("../images/index.png") 20px 11px no-repeat;
+      &:hover,&.active{
+        background: url("../images/index_a.png") @activeBg 20px 11px no-repeat;
+      }
+    }
+    &.menu-1{
+      background: url("../images/inhis.png") 19px 11px no-repeat;
+      &:hover,&.active{
+        background: url("../images/inhis_a.png") @activeBg 19px 11px no-repeat;
+      }
+    }
+    &.menu-37{
+      background: url("../images/prod.png") 20px 10px no-repeat;
+      &:hover,&.active{
+        background: url("../images/prod_a.png") @activeBg 20px 10px no-repeat;
+      }
+    }
+    &.menu-5{
+      background: url("../images/out.png") 21px 11px no-repeat;
+      &:hover,&.active{
+        background: url("../images/out_a.png") @activeBg 21px 11px no-repeat;
+      }
+    }
+  }
+}
+.tab-container{
+  margin-left: @menuWt+15px;
+  background: @disColor;
+  /*height: 100%;*/
+  .content-box{
+    display: none;
+    width:78%;
+    height: 100%;
+    background: #fff;
+    position: relative;
+    overflow-y: auto;
+    border-right: 10px #EFF1F6 solid;
+    border-left: 10px #EFF1F6 solid;
+    box-sizing: border-box;
+  }
+  .content-item{
+    display: none;
+    /*height: 100%;*/
+    .content-item-wrapper{
+      margin-bottom: 50px;
+    }
+
+    /**********危急值记录*************/
+    &.danger-record{
+      height:auto;
+      .title{
+        /*position: unset;*/
+      }
+    }
+    .title{
+      /*position: absolute;
+      top: 0;*/
+      width: 100%;
+      color: #333333;
+      font-size: 16px;
+      text-align: center;
+      font-weight: bold;
+      height: 44px;
+      line-height: 44px;
+      border-bottom:1px #E2E5EF solid;
+      text-indent: 20px;
+    }
+    .container{
+      /*margin-top: 45px;*/
+      padding: 20px 30px 0;
+      height: 100%;
+      /*overflow-y: auto;*/
+    }
+    .info-table{
+      margin: 0 0 15px;
+    }
+    table{
+      width: 100%;
+      border:1px @tableBorderColor solid;
+    }
+    .inline-table{
+      display: inline;
+      border: none;
+      td{
+        border: none;
+      }
+    }
+    .inner-table table{
+      border: none;
+      td{
+        border: none;
+        text-align: left;
+        vertical-align: text-bottom;
+        width: 41%;
+        &[rowspan]{
+          // font-weight: bold;
+          width: 100px;
+          padding-left: 0;
+        }
+        &.active{
+          background: @anchorBg;
+        }
+      }
+    }
+    .embed-table{
+      border:1px @tableBorderColor solid;
+      &>tbody>tr:first-child>td{
+        padding: 0;
+        border:none;
+        &>table td{
+          border:1px @tableBorderColor solid;
+          line-height: 20px;
+          padding: 7px 8px;
+          white-space: nowrap;
+        }
+      }
+      .table-tip{
+        text-align: left;
+      }
+    }
+    th{
+      table{
+        border:none;
+      }
+      border:1px @tableBorderColor solid;
+      background: @thBgColor;
+      line-height: 20px;
+      padding: 7px 8px;
+      white-space: nowrap;
+    }
+    td{
+      text-align: center;
+      border:1px @tableBorderColor solid;
+      padding:2px  8px;
+      height: 20px;
+      table,td{
+        border:none;
+      }
+    }
+    .info-item{
+      border-bottom: 1px @borderColor solid;
+      .text-left{
+        width: 100%;
+        text-align: right;
+      }
+      .cont{
+        display: inline-block;
+        min-width: 33%;
+        margin-bottom: 5px;
+        box-sizing: border-box;
+        // padding-left: 5px;
+        &.active{
+          background: @anchorBg;
+        }
+        span{
+          line-height: 20px;
+          vertical-align: middle;
+        }
+        .text-indent{
+          text-indent: 28px;
+        }
+        .text-bold{
+          font-weight: bold;
+        }
+        .label{
+          display: inline-block;
+          /*min-width: 70px;*/
+          font-weight: bold;
+          overflow-x: hidden;
+        }
+        .revisitPlanTan{
+          border: none;
+          td{
+            border: none;
+          }
+        }
+      }
+      &.cont-2 .cont{
+        min-width: 48%;
+      }
+      &.cont-4 .cont{
+        min-width: 23%;
+      }
+      &.cont-5 .cont{
+        min-width: 19%;
+      }
+      &.no-border{
+        border-bottom: none;
+        margin-bottom: 0;
+      }
+      margin-bottom: 5px;
+      .info-title{
+        font-weight: bold;
+        margin-bottom: 10px;
+      }
+    }
+  }
+  .operation{
+    width:calc(22% - 12px);
+    height: 100%;
+    margin-right: 10px;
+    position: relative;
+    background: #fff;
+    display: none;
+    .flaw-title{
+      position: absolute;
+      top:0;
+      width: 100%;
+      height: 44px;
+      color: #333333;
+      font-weight: bold;
+      line-height: 44px;
+      border-bottom:1px #E2E5EF solid;
+      /*margin-bottom: 20px;*/
+      span{
+        font-size: 16px;
+        margin-left: 15px;
+      }
+      a{
+        float: right;
+        width: 66px;
+        height: 28px;
+        margin: 10px 20px 0 0;
+        line-height: 28px;
+        text-align: center;
+        border-radius:4px;
+        color: @activeColor;
+        font-weight: normal;
+        border:1px @activeColor solid;
+      }
+    }
+    .flaw-box{
+      margin-top: 45px;
+      padding-top: 5px;
+      height: 100%;
+      overflow-y: auto;
+    }
+    .flaw-item{
+      display: none;
+      position: relative;
+      margin: 0 12px 10px 12px ;
+      /*border-bottom:1px #E2E5EF solid;*/
+      padding-bottom: 6px;
+      &:after{
+        display: block;
+        content: "";
+        width: 98%;
+        height: 1px;
+        background: @borderColor;
+        position: absolute;
+        bottom: -5px;
+        left: 1%;
+
+      }
+      p{
+        text-indent: 5px;
+      }
+      .opers{
+        padding-right: 5px;
+      }
+      .info{
+        p{
+          font-size: 12px;
+        }
+
+        .name{
+          max-width: 100px;
+        }
+      }
+      .delete{
+        text-decoration: line-through;
+      }
+      .title{
+        box-sizing: border-box;
+        padding:5px;
+        img{
+          vertical-align: middle;
+        }
+      }
+      &.active .title{
+        background: @anchorBg;
+      }
+    }
+  }
+  .oper{
+    text-align: right;
+  }
+}
+.empty{
+  /*display: none;*/
+  margin-top: 120px;
+  text-align: center;
+  img{
+    width: 140px;
+  }
+  p{
+    margin-top: 15px;
+    font-size: 12px;
+    text-indent: 10px;
+    color: #aaa;
+  }
+}
+.empty2{
+  margin-top: 60px;
+  text-align: center;
+  height: 170px;
+  td{
+    width: 100%;
+  }
+  img{
+    width: 140px;
+  }
+  p{
+    // margin-top: 15px;
+    font-size: 12px;
+    text-indent: 10px;
+    color: #aaa;
+  }
+}
+.edit-box{
+  p{
+    margin-bottom: 10px;
+    .red{
+      display: inline-block;
+      width: auto;
+      text-indent: 5px;
+    }
+  }
+  .warning{
+    display: none;
+  }
+  input[type=text]{
+    border:1px @borderColor solid;
+    width: 300px;
+    height: 38px;
+    text-indent: 10px;
+    line-height: 38px;
+    border-radius:2px;
+    box-sizing: border-box;
+  }
+  input[type=radio]{
+    vertical-align: middle;
+    margin-right: 5px;
+  }
+  .flaw-drop-input {
+    padding-right: 28px;
+    box-sizing: border-box;
+  }
+  #addQcMsg {
+    padding-right: 0;
+  }
+  span{
+    display: inline-block;
+    width: 70px;
+    margin-right: 12px;
+    text-align: right;
+  }
+  .radio-label{
+    width: auto;
+    vertical-align: middle;
+  }
+}
+.add-box,.edit-box{
+  .drop-box{
+    position: relative;
+    margin-bottom: 10px;
+    &:after{
+      content: "";
+      display: inline-block;
+      width: 13px;
+      height: 7px;
+      background: url("../images/arrow_down.png") no-repeat;
+      background-size: 13px 7px;
+      position: absolute;
+      left: 365px;
+      top: 16px;
+    }
+  }
+  ul{
+    display: none;
+    position: absolute;
+    right: 15px;
+    width: 300px;
+    background: #fff;
+    border:1px @tableBorderColor solid;
+    max-height: 205px;
+    overflow: auto;
+    box-sizing: border-box;
+    li{
+      line-height: 25px;
+      padding: 0 5px;
+      cursor: pointer;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      &:hover{
+        background: @tableBorderColor;
+      }
+    }
+  }
+  .show{
+    ul{
+      display: block;
+    }
+    &:after{
+      background-image: url("../images/arrow_up.png");
+    }
+  }
+}
+.standard_table {
+  tr {
+    td.standard_fst {
+      width: 160px;
+    }
+  }
+}
+/*******手术知情同意书*********/
+.surgery-book{
+  .book-item{
+    margin-bottom:15px;
+    :not(:first-child){
+      text-indent: 15px;
+    }
+    .intent{
+      text-indent: 30px;
+    }
+    .intent-1{
+      margin-left: 48px;
+      text-indent: 0;
+    }
+    &.clearfix{
+      p{
+        width: 100%;
+      }
+    }
+    .fr{
+      margin-top: 25px;
+      text-align: right;
+    }
+  }
+}
+
+/********术后首次病程记录及谈话记录*******/
+
+.textR{
+  text-align: right;
+}
+.textL{
+  text-align: left;
+}
+.textPreLine{
+  white-space: pre-line;
+}
+.textIndent30{
+  text-indent:30px
+}
+.textBold{
+  font-weight: bold;
+}
+.padL30{
+  padding-left: 30px;
+}
+.displayInlineBlock{
+  display: inline-block;
+}
+
+/********缺陷总览*********/
+.flaw-table{
+  display: none;
+  height: 97%;
+  background: #fff;
+  margin: 0 10px 10px;
+  overflow-y: auto;
+  /*overflow-y: auto;
+  margin: 0 30px 0 20px;*/
+  .slide-up{
+    cursor: pointer;
+    color: @activeColor;
+    &:before{
+      display: inline-block;
+      width: 14px;
+      height: 14px;
+      content: "";
+      font-size: 18px;
+      color: @activeColor;
+      text-align: center;
+      vertical-align: middle;
+      margin-right: 4px;
+      background: url("../images/slice.png") no-repeat;
+    }
+    &.down:before{
+      background: url("../images/add.png") no-repeat;
+    }
+  }
+  .page-item{
+    display: none;
+    h2{
+      height: 44px;
+      line-height: 44px;
+      border-bottom: 1px @tableBorderColor solid;
+      font-size: 16px;
+      margin-bottom: 20px;
+      text-indent: 20px;
+      font-weight: bold;
+    }
+  }
+  .interval-color{
+    tr:nth-child(2n){
+      background: #EFF1F6;
+    }
+  }
+  table{
+    width: 97%;
+    border:1px solid #E2E5EF;
+    border-collapse: collapse;/*关键代码*/
+    /*margin-bottom: 40px;*/
+    margin: 0 30px 40px 20px;
+    thead{
+      background: #EFF0F9;
+
+    }
+    /*tr[code]{
+      display: none;
+    }*/
+    th,td{
+      height: 32px;
+      box-sizing: border-box;
+      padding: 0 20px;
+      border:1px solid #E2E5EF;
+      border-collapse: collapse;/*关键代码*/
+    }
+    th{
+      font-size: 14px;
+      font-weight: 500;
+    }
+    td{
+      font-size: 14px;
+      font-weight: 400;
+      &.red{
+        text-align: center;
+      }
+    }
+  }
+}
+.high-light{
+  background: @highlighBg;
+  &.active{
+    background: none;
+  }
+}
+.scroll-table{
+  thead,tbody{
+    display: block;
+    width: 100%;
+    box-sizing: border-box;
+    th,td{
+      width: 49%;
+      display: inline-block;
+      box-sizing: border-box;
+      border: none;
+      line-height: 32px;
+      &:first-child{
+        width: 30%;
+        border-right: 1px @tableBorderColor solid;
+      }
+      &:last-child{
+        width: 20%;
+        border-left: 1px @tableBorderColor solid;
+      }
+    }
+    td[colspan]{
+      border-right: none;
+      border-left: none;
+    }
+  }
+  thead{
+    border-bottom: 1px @tableBorderColor solid;
+    tr{
+      width: calc(100% - 18px);
+      border-bottom:none;
+    }
+  }
+  tbody{
+    overflow-y: auto;
+  }
+  tr{
+    display: block;
+    border-bottom: 1px @tableBorderColor solid;
+    &:last-child{
+      border-bottom: none;
+    }
+  }
+  tr,td[colspan]{
+    width: 100%;
+    box-sizing: border-box;
+  }
+}
+.modal .modal-footer a.cancel{
+  color: #00A1FF;
+  border-color: #00A1FF;
+  margin-right: 16px;
+}
+.checkTipsBox{
+  width:184px;
+  height:112px;
+}
+.page-anchor-hover:hover {
+  color: #00A1FF;
+}
+.checkImg{
+  width: 40px;
+  position: relative;
+  top: 20px;
+  left: 50%;
+  margin-left: -20px;
+}
+.checkTxt{
+  color: #fff;
+  top: 10px;
+  margin-top: 10px;
+  text-align: center;
+  position: relative;
+  width: 100%;
+  opacity: .5;
+}
+.liExtend{
+  position: absolute;
+  left: -3px;
+  width: 3px;
+  height: 100%;
+}
+
+
+// 缺陷总览
+.titleSpecial {
+  overflow: hidden;
+  cursor: pointer;
+  text-align: center;
+  span {
+    float: left;
+    width: 77px;
+    height: 28px;
+    line-height: 28px;
+    border: 1px solid #777;
+    color: #777;
+    text-indent: 0;
+    margin-top: 7px;
+    font-weight: normal;
+  }
+  .titlePay {
+    border-radius:4px 0px 0px 4px;
+    margin-left: 20px;
+    background-color: #00A1FF;
+    color: #fff;
+    border-color: #00A1FF;
+    border-right: 0;
+  }
+  .titleNo {
+    border-radius:0px 4px 4px 0px;
+    border-left: 0;
+  }
+}
+
+#contentIframeIn,#pacsIframeIn,#assistIframeIn,#pacsDetailIframeIn,#contentNursing { //医嘱信息
+  width: 100%;
+  height: 100%;
+}
+.appeal,.examine,.reject {
+  width: 44px;
+  height: 20px;
+  background: #fff2c8;
+  border-radius: 3px;
+  border: 1px solid #ebdaa9;
+  font-size: 12px;
+  color: #a07906;
+  line-height: 20px;
+  display: inline-block;
+  text-align: center;
+  cursor: pointer;
+}
+.examine {
+  background: #d3f7ed;
+  border: 1px solid #7ee7d5;
+  color: #04af9c;
+}
+.reject {
+  background: #ffebeb;
+  border: 1px solid #fbacae;
+  color: #ca0c0f;
+}
+.textarea-text{
+  border:1px #E2E5EF solid;
+  vertical-align: top;
+  padding: 10px;
+}
+.modal .modal-body{
+  padding:20px 22px 10px;
+}
+.required{
+  color: #E3505B;
+}

+ 146 - 0
src/html/appealInit.html

@@ -0,0 +1,146 @@
+<!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 qcListDept">
+        <h2>申诉信息 > 申诉发起</h2>
+        <div class="main-body">
+            <div class="filterBox">
+                <div class="clearfix">
+                    <span class="filterItem typeFilter">
+                        <span>科室:</span>
+                        <span class="selectDept">
+                            全部
+                        </span>
+
+                        <ul class="deptList filterDropList"></ul>
+                    </span>
+                    <span class="filterItem typeFilter clearfix">
+                        <span class="fl">出院日期:</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker" autocomplete="off" readonly/></span>
+                        <span  class="divide fl">-</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepicker2"  autocomplete="off" readonly/></span>
+                    </span>
+                    <span class="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>
+                    <span class="filterclear abnormalClear filterclearT">重置</span>
+                    <span class="export">导出</span>
+                </div>
+                <a href="javascript:void(0);" class="filter-toggler up" id="filterToggler">展开筛选</a>
+                <div class="toggle-item clearfix">
+                    <span class="filterItem typeFilter">
+                        <span>病人姓名:</span>
+                        <input class="patientNameInp" type="text" placeholder="请输入病人姓名">
+                    </span>
+                    <span class="filterItem typeFilter">
+                        <span>病人住院序号:</span>
+                        <input class="patientNumInp" style="width: 148px;" type="text" placeholder="请输入病人住院序号">
+                    </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 filterHide fpFilterItem">
+                        <span>病案首页核查状态:</span>
+                        <span class="fpSelectCheck">全部</span>
+                        <ul class="checkList filterDropList fpCheckList">
+                            <Li class="fpCheckItem" data-name="全部" data-id="">全部</Li>
+                            <Li class="fpCheckItem" data-name="未核查" data-id="0">未核查</Li>
+                            <Li class="fpCheckItem" data-name="已核查" data-id="1">已核查</Li>
+                        </ul>
+                    </span>
+                    <span class="filterItem filterHide doctorFilter fpFilterItem">
+                        <span>病案首页核查人:</span>
+                        <input class="fpCheckPeople" type="text" placeholder="请输入核查人">
+                    </span>
+                    <span class="filterItem filterHide typeFilter clearfix" >
+                        <span class="fl">病案首页核查时间:</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepickerFp1" autocomplete="off" readonly /></span>
+                        <span  class="divide fl">-</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepickerFp2"  autocomplete="off" readonly/></span>
+                    </span>
+                    <span class="filterItem qcFiliterItem">
+                        <span>病历核查状态:</span>
+                        <span class="qcSelectCheck">全部</span>
+                        <ul class="checkList filterDropList qcCheckList">
+                            <Li class="qcCheckItem" data-name="全部" data-id="">全部</Li>
+                            <Li class="qcCheckItem" data-name="未核查" data-id="0">未核查</Li>
+                            <Li class="qcCheckItem" data-name="已核查" data-id="1">已核查</Li>
+                        </ul>
+                    </span>
+                    <span class="filterItem doctorFilter qcFiliterItem">
+                        <span>病历核查人:</span>
+                        <input class="qcCheckPeople" type="text" placeholder="请输入核查人">
+                    </span>
+                    
+                    <span class="filterItem typeFilter clearfix qcFiliterItem" >
+                        <span class="fl">病历核查时间:</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepickerQc1" autocomplete="off" readonly /></span>
+                        <span  class="divide fl">-</span>
+                        <span class="datapickerBox fl"><input type="text" placeholder="请选择时间" id="datepickerQc2"  autocomplete="off" readonly/></span>
+                    </span>
+                    <span class="filterItem doctorFilter qcFiliterItem">
+                        <span>主诊断:</span>
+                        <input class="qcCheckMain" type="text" placeholder="请输入主诊断">
+                    </span>
+                </div>
+            </div>
+            <div class="overAuto">
+                <table class="qctable">
+                    <thead>
+                        <tr class="tabOpera"></tr>
+                        <tr class="tabTitle">
+                            <!-- <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 desc" code="leave_hospital_date">出院日期</th>
+                            <th class="diagnose textCenter" code="diagnose">主诊断</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> -->
+                        </tr>
+                    </thead>
+                    <tbody class="tbody">
+
+                    </tbody>
+                </table>
+            </div>
+            <div class="pagination"></div>
+        </div>
+        
+    </div>
+</body>
+
+</html>

+ 354 - 0
src/html/appealUserPage.html

@@ -0,0 +1,354 @@
+<!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">
+    <!--<link rel="shortcut icon" href="../resource/favicon.ico" type="image/x-icon">-->
+    <title>质控评分</title>
+    <script type="text/html" id="subMenuTmpl">
+        {{if sonMode.length}}
+        <li class="list-1 menu-${id}">
+            <p>${name}</p>
+            {{else}}
+        <li class="page menu-${id}" code="${name}" mode="${id}">${name}
+            {{/if}}
+            <ul>
+                {{each sonMode}}
+                <li class="page" code="${name.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'')}" mode="${id}">${name}</li>
+                {{/each}}
+            </ul>
+        </li>
+    </script>
+    <script type="text/html" id="miniMenuTmpl">
+        {{if sonMode.length}}
+        <li class="list-1  menu-${id}">
+            <div class="arrow-left"></div>
+            {{else}}
+        <li class="page  menu-${id}" code="${name}">
+            {{/if}}
+            {{if sonMode.length}}
+            <ul> 
+                <div class="liExtend"></div>
+                {{each sonMode}}
+                    <li class="page" code="${name.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'')}">${name}</li>
+                {{/each}}
+            </ul>
+            {{/if}}
+        </li>
+    </script>
+    <script type="text/html" id="infoTmpl">
+        <span>病案号:${fileCode}</span>
+        <span>姓名:${name}</span>
+        <span>性别:${sex}</span>
+        <span>年龄:${age}</span>
+        <span>科室:${behDeptName}</span>
+        <span class="level">病历等级:${level}</span>
+        <span class="score">病历得分:${scoreRes}</span>
+    </script>
+    <script type="text/html" id="tableTmpl">
+         {{if k==="出院诊断"}}
+         <table class="embed-table">
+             <tr>
+                 <td>
+                     <table>
+                         <tr>
+                             <th>出院诊断</th>
+                             <th>疾病编码</th>
+                             <th>入院病情</th>
+                             <th>出院病情</th>
+                         </tr>
+                         {{each(i,v) data}}
+                         {{if i<(data.length/2)}}
+                         <tr>
+                             <td>${诊断名称}</td>
+                             <td>${诊断编码}</td>
+                             <td>${入院情况}</td>
+                             <td>${出院情况}</td>
+                         </tr>
+                         {{/if}}
+                         {{/each}}
+                     </table>
+                 </td>
+                 <td>
+                     <table>
+                         <tr>
+                             <th>出院诊断</th>
+                             <th>疾病编码</th>
+                             <th>入院病情</th>
+                             <th>出院病情</th>
+                         </tr>
+                         {{each(i,v) data}}
+                         {{if i>=(data.length/2)}}
+                         <tr>
+                             <td>${诊断名称}</td>
+                             <td>${诊断编码}</td>
+                             <td>${入院情况}</td>
+                             <td>${出院情况}</td>
+                         </tr>
+                         {{/if}}
+                         {{/each}}
+                         {{if (data.length)%2===1}}
+                         <tr>
+                             <td></td>
+                             <td></td>
+                             <td></td>
+                             <td></td>
+                         </tr>
+                         {{/if}}
+                     </table>
+                 </td>
+             </tr>
+<!--
+             <tr><td colspan="2" class="table-tip">入院病情:1、"有" 2、"临床未确定" 3、"情况不明" 4、"无"<br/>出院病情:1、"治愈"  2、"好转"  3、"未愈"  4、"死亡"  9、"其它"</td></tr>
+-->
+         </table>
+         {{else}}
+             <table>
+         <tr>
+             <th rowspan="2">手术及操作编码</th>
+             <th rowspan="2">手术及操作日期</th>
+             <th rowspan="2">手术级别</th>
+             <th rowspan="2">手术及操作名称</th>
+             <th colspan="3">手术及操作医生</th>
+             <th rowspan="2">切口等级</th>
+             <th rowspan="2">愈合等级</th>
+             <th rowspan="2">麻醉方式</th>
+             <th rowspan="2">麻醉医师</th>
+         </tr>
+         <tr><th>术者</th><th>I助</th><th>II助</th></tr>
+         {{each data}}
+         <tr>
+             <td>${手术编码}</td>
+             <td>${手术日期}</td>
+             <td>${手术级别}</td>
+             <td>${手术名称}</td>
+             <td>${手术医生ID}</td>
+             <td>${一助医生ID}</td>
+             <td>${二助医生ID}</td>
+             <td>${切口等级}</td>
+             <td>${愈合等级}</td>
+             <td>${麻醉方式}</td>
+             <td>${麻醉医师}</td>
+         </tr>
+         {{/each}}
+         </table>
+         {{/if}}
+    </script>
+    <script type="text/html" id="flawTmpl">
+        <div {{if isReject==='1'}} class="flaw-item high-light" {{else}} class="flaw-item" {{/if}} code="${modelName.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'')}">
+            <div  {{if isDeleted==="Y"}} class="delete title"{{else}}  class="title" {{/if}}>
+                {{if exampleStatus==="0"||exampleStatus==="1"||exampleStatus==="2"}}
+                <span class="btn ${exampleStatus==='0'?'appeal':exampleStatus==='1'?'examine':exampleStatus==='2'?'reject':''}" msg="${msg}">${exampleStatus==='0'?'申诉':exampleStatus==='1'?'审核':exampleStatus==='2'?'驳回':''}</span>
+                {{/if}}
+                {{if gradeType===2}}
+                <img {{if explainInfo}} title="${explainInfo}" {{/if}} src="../images/tag.png" alt=""/>
+                {{/if}}
+                {{if info}}
+                <a {{if pageKeyList[0]}} anchors="${pageKeyList}" code="${id}" href="#anchor${pageKeyList[0]}" {{/if}}>${msg}(${info})</a>
+                {{else}}
+                <a {{if pageKeyList[0]}} anchors="${pageKeyList}" code="${id}" href="#anchor${pageKeyList[0]}" {{/if}}>${msg}</a>
+                {{/if}}
+            </div>
+            <div class="opers clearfix">
+                {{if score===0}}
+                <p {{if isDeleted==="Y"}} class="fl delete" {{else}} class="fl" {{/if}}>评分:<span class="red">warn</span></p>
+                {{else}}
+                <p {{if isDeleted==="Y"}} class="fl delete"{{else}} class="fl" {{/if}}>评分:<span class="red">-${score}</span></p>
+                {{/if}}
+                {{if exampleStatus!=="0"}}
+                <div class="oper fr">
+                    <a class="edit-flaw blue" code="${id}" href="javascript:void(0);" style="margin-right: 18px;">申诉</a>
+                </div>
+                {{/if}}
+            </div>
+        {{if gradeType===2||isDeleted==="Y"}}
+            <div class="info clearfix">
+                <p class="fl name" title="${linkman}">${linkman}</p>
+                <p class="fr">${gmtModified}</p>
+            </div>
+        {{/if}}
+        </div>
+    </script>
+    <script type="text/html" id="emptyTmpl">
+        <div class="empty">
+            <img src="../images/empty.png" alt="空"/>
+            <p>暂无缺陷~</p>
+        </div>
+    </script>
+    <script type="text/html" id="editTmpl">
+        <div class="edit-box">
+            <p><span>评分: </span> -${score}</p>
+            <p><span>操作类型: </span> 删改条目</p>
+            <p><span>缺陷详情: </span>${standardMsg}</p>
+            <div class="drop-box">
+            <span><i class="required">*</i>审核人: </span>
+                <input type="text" class="checker-drop-input ellipsis"/>
+                <ul></ul>
+            </div>
+            <p><span><i class="required">*</i>申诉说明: </span><textarea  id="qcInfo" class="textarea-text" cols="40" rows="6"></textarea></p>
+            <p class="warning"><span></span><span class="red">申诉说明不能为空~</span></p>
+        </div>
+    </script>
+    <script type="text/html" id="flawDropTmpl">
+        {{each(i,it) info}}
+        <li idx="${i}" name="${it.entryName||it.userName}" code="${it.id}" title="${it.entryName||it.userName}">${it.entryName||it.userName}</li>
+        {{/each}}
+    </script>
+    <script type="text/html" id="addFlawTmpl">
+        <div class="edit-box add-box">
+            <p><span>操作类型: </span>
+                <input type="radio" name="operType" value="1"><span class="radio-label">新增已有条目</span>
+                <input type="radio" name="operType" value="2"><span class="radio-label">新增缺失条目</span></p>
+            <div class="drop-box">
+                <span><i class="required">*</i>审核人: </span>
+                <input type="text" class="checker-drop-input ellipsis"/>
+                <ul></ul>
+            </div>
+            <div class="drop-box">
+                <span>质控条目: </span>
+                <input type="text" class="flaw-drop-input ellipsis"/>
+                <ul></ul>
+            </div>
+            <p><span style="margin-right: 16px;">提示信息:</span><input title="${msg}" class="ellipsis" id="addQcMsg" type="text" value="${msg}" /></p>
+            <p><span>分值:</span> <input id="addQcScore" type="text" value="${score}" /></p>
+            <p><span style="margin-right: 16px;">备注:</span><input title="${explainInfo}" class="ellipsis" id="addQcInfo" type="text" value="${explainInfo}" autocomplete="off"/></p>
+            <p><span><i class="required">*</i>申诉说明: </span><textarea  id="addQcEx" class="textarea-text" cols="40" rows="6"></textarea></p>
+            <p class="warning"><span></span><span class="red">支持≥0的数字输入,最多保留小数点后1位~</span></p>
+        </div>
+    </script>
+    <script type="text/html" id="appointBookTmpl">
+        <div class="page-item" code="${title}">
+            <h2 class="title titleSpecial" code="${title}">
+                {{if title==='缺陷总览'}}
+                    <span class="titlePay" data-type="2">缺陷总览</span>
+                    <span class="titleNo" data-type="1">控费缺陷</span>
+                {{/if}}
+                {{if title!=='缺陷总览'}}
+                    ${title}
+                {{/if}}
+            </h2>
+            {{if !data || data&&data.length === 0}}
+            <div class="empty">
+                <img src="../images/empty1.png" alt="空"/>
+                <p>暂无信息~</p>
+            </div>
+            {{else}}
+            {{if title==='缺陷总览'}}
+            <table class="scroll-table">
+                <thead>
+                <tr>
+                    <th width="250">来源</th>
+                    <th>缺陷详情</th>
+                    <th width="150">扣分</th>
+                </tr>
+                </thead>
+                <tbody>
+                    {{if JSON.stringify(data) == "{}"}}
+                    <tr class="empty2">
+                        <td colspan="3" class=""> 
+                            <img src="../images/empty1.png" alt="空"/>
+                            <p>暂无数据~</p></td>
+                    </tr>
+                    {{/if}}
+                {{each(i,val) data}}
+                <tr><td colspan="3" class="slide-up">${i}</td></tr>
+                {{each val}}
+                <tr code="${i}" {{if isReject==="1"}} class="high-light" {{/if}}>
+                    <td style="text-indent: 14px; {{if isDeleted=='Y'}}  text-decoration:line-through;  {{/if}}">${modelName}</td>
+                    <td>
+                        <a href="javascript:void(0);" class="page-anchor page-anchor-hover" {{if isDeleted=='Y'}}  style="text-decoration:line-through;"  {{/if}} code="${id}">${msg}</a>
+                    </td>
+                    <td class="red" {{if isDeleted=='Y'}}  style="text-decoration:line-through;"  {{/if}}>${score}</td>
+                </tr>
+                {{/each}}
+                {{/each}}
+                </tbody>
+            </table>
+            {{else}}<table code="${title}" class="interval-color">
+            <thead>
+            <tr>
+                <th width="100" align="center">序号</th>
+                <th>文书详情</th>
+            </tr>
+            </thead>
+            <tbody>
+            {{each(i,val) data}}
+            <tr>
+                <td align="center">${i+1}</td>
+                <td>${recTitle}</td>
+            </tr>
+            {{/each}}
+            </tbody>
+        </table>
+            {{/if}}
+            {{/if}}
+        </div>
+    </script>
+</head>
+<body>
+    <div class="main-part clearfix">
+        <div class="sub-menu">
+            <div class="logo">
+                <img src="../images/lantone.png" alt="" style="width: 150px;">
+            </div>
+            <ul id="subMenu" class="subMenu"></ul>
+            <a href="javascript:void(0);" class="slide-show">
+                <img src="../images/down.png" alt="">
+            </a>
+            <div class="copy-right"><p>©杭州朗通信息技术有限公司</p></div>
+        </div>
+        <div class="menu-mini fl">
+            <div class="logo">
+                朗通
+            </div>
+            <ul></ul>
+            <a href="javascript:void(0);" class="slide-hide">
+                <img src="../images/up.png" alt="">
+            </a>
+           
+        </div>
+        <div class="tab-container clearfix">
+            <div class="patient-info" id="patientInfo"></div>
+            <p id="loading">加载中,请稍候 ...</p>
+            <div class="flaw-table">
+                <iframe src="./nursing.html" frameborder="0" id="contentNursing" name="contentNursing" style="display: none;"></iframe>
+                <iframe src="./advice.html" frameborder="0" id="contentIframeIn" name="contentIframeIn" style="display: none;"></iframe>
+                <iframe src="./pacs.html" frameborder="0" id="pacsIframeIn" name="pacsIframeIn" style="display: none;"></iframe>
+                <iframe src="./assist.html" frameborder="0" id="assistIframeIn" name="assistIframeIn" style="display: none;"></iframe>
+                <iframe src="./pacsDetail.html" frameborder="0" id="pacsDetailIframeIn" name="pacsDetailIframeIn" style="display: none;"></iframe>
+            </div>
+            <div class="content-box fl" id="contentInfo"></div>
+            <div class="operation fr" id="flaws">
+                <div class="flaw-title">
+                    <span>缺陷详情</span>
+                    <a href="javascript:void(0);" class="add-flaw">申诉新增</a>
+                </div>
+                <div class="flaw-box content-ht">
+                    <!--<div class="empty">
+                        <img src="../images/empty.png" alt="空"/>
+                        <p>暂无详情~</p>
+                    </div>-->
+                </div>
+            </div>
+        </div>
+    </div>
+    <div id="mainBox"></div>
+    <div class="modal" id="delModal">
+        <div class="cover"></div>
+        <div class="modal-box">
+            <div class="modal-header clearfix">
+                <span class="title">提示</span>
+                <a class="close" href="javascript:void(0);">×</a>
+            </div>
+            <div class="modal-body">
+                <!--<p>确定要删除该评分记录吗?</p>-->
+            </div>
+            <div class="modal-footer">
+                <a class="close cancel" href="javascript:void(0);">关闭</a>
+                <a class="confirm" href="javascript:void(0);">提交</a>
+            </div>
+        </div>
+    </div>
+</body>
+</html>

+ 5 - 0
src/js/api.js

@@ -207,6 +207,11 @@ const api = {
   getQcClickDeptList:'/qc/analysis/getQcClickDeptList',		//临床质控使用统计科室列表
   getQcClickDept:'/qc/analysis/getQcClickInnerPage',   //临床质控使用统计内页
   getQcClickInnerPageByExport:'/qc/analysis/getQcClickInnerPageByExport',//临床质控使用统计内页-导出
+  /***********申诉核查************/
+  getWorkById:'/qc/appealInfo/getWorkById',   //申诉发起列表
+  addAppealInfo:'/qc/appealInfo/addAppealInfo', //发起申诉
+  rejected:'/qc/appealExamineInfo/rejected',  //申诉驳回
+  getReviewer:'/qc/appealInfo/getReviewer', //申诉驳回
 
 }
 const ywCheckApi = {

File diff suppressed because it is too large
+ 1134 - 0
src/js/appealInit.js


+ 832 - 0
src/js/appealUserPage.js

@@ -0,0 +1,832 @@
+require("../css/appealUserPage.less");
+const $ = require('jquery');
+require('jquery-templates');
+require('./modal.js');
+const {post,getUrlArgObject,setBoxHeight,getCookie,getLocal,initScroll} = require('./utils.js');
+const {api,ywCheckApi} = require('./api.js');
+let checkOk = require('./../images/checkOk.png')
+const adLogo = require("../images/adlogo.png")
+if (localStorage.getItem('toLogin')==='1') {
+  window.location.href = '../login.html';
+}
+$(function(){
+  const hideLogo = getUrlArgObject("hideLg");
+  if(hideLogo){
+      $(".sub-menu .logo img,.copy-right").remove();
+      $(".menu-mini .logo").text("");
+  }
+  const otherLogo = getUrlArgObject("adLg");
+  if(otherLogo){
+      $(".logo img").attr("src",adLogo);
+      $(".menu-mini .logo").text("艾登");
+      $(".copy-right").remove();
+  }
+//本页全局变量
+  let global_flawData = {};    //缺陷数据
+  let global_flawDataPay = {};    //缺陷数据
+  const global_id=getUrlArgObject("id");
+  let global_check;
+  let global_check_home,global_check_show;
+  const global_code = getUrlArgObject("code");
+  let global_activeTab=$(".sub-menu .page.active").attr("code");  //当前激活菜单项
+  let global_modules ={};   //模板数据缓存
+  let global_flaws=[];  //缺陷条目列表缓存
+  let global_selectedFlaw = {};    //新增时选中的条目信息
+  let global_checkers = [];    //审核人列表
+  getAllModules();
+  window.document.title="质控申诉-"+getUrlArgObject("name");
+  $(".add-flaw").click(function(){
+    getQcCasesEntry();
+  });
+  $(".edit-flaw").click(function(){
+	getCheckUser();
+  });
+function initMenu(data){
+  const menu=[{id:0,name:"缺陷总览",parentId: -1,sonMode: []},...(data||[])];
+  //菜单数据填充
+  $("#subMenuTmpl").tmpl(menu).appendTo("#subMenu");
+  $("#miniMenuTmpl").tmpl(menu).appendTo(".menu-mini ul");
+  //菜单收起展开
+  $(document).on("click",".sub-menu .list-1",function(){
+    $(".sub-menu .list-1 .slide-up").removeClass('slide-up');
+    $(this).toggleClass('slide-up');
+    $(this).find("ul").slideToggle();
+    // setTimeout(function(){
+    //   initScroll("subMenu","Y",2)
+    // },300)
+  });
+  $(".sub-menu .list-1 li").on("click",function(e){
+    e.stopPropagation();
+  });
+//收起菜单
+  $(".slide-show").click(function(){
+    $(".sub-menu,.copy-right").animate({"width":"60px"},function(){
+      $(this).hide();
+      $(".menu-mini").show();
+    });
+    $(".tab-container").animate({"margin-left":"60px"});
+  });
+  //展开菜单
+  $(".slide-hide").click(function(){
+    $(".menu-mini").hide();
+    $(".sub-menu,.copy-right").show().animate({"width":"220px"},function(){
+    });
+    $(".tab-container").animate({"margin-left":"220px"});
+  });
+  //右侧内容切换
+  $(".page").on("click",function(){
+    $(".info-item .cont,.flaw-item,td").removeClass("active");   //清空缺陷定位背景
+    const title = $(this).attr("code");
+    if(title==="缺陷总览"||title==="谈话告知书"||title==="知情同意书"||title === '医嘱信息'||title === '检验信息'||title === '检查信息'||title === '护理信息'){
+      if(title==="缺陷总览"){
+        getRecordDetailUpdate()
+      }
+      $(".flaw-table .page-item").hide();
+      $(".flaw-table,.flaw-table .page-item[code="+title+"]").show();
+    }else{
+      $(".flaw-table").hide();
+    }
+    iframeShow(title)
+    //选中样式
+    $(".sub-menu .active,.menu-mini .active").removeClass('active');
+    const mItems = $(".sub-menu .page[code="+title+"],.menu-mini .page[code="+title+"]");
+    mItems.addClass("active");
+    mItems.parents(".list-1").addClass("active");
+    //显示对应内容
+    const code=$(this).attr("code");
+    global_activeTab=code;
+    //initModuleData();
+    $(".content-item,.flaw-item").hide();
+    $(".content-item[code='"+code+"']").show();
+    showFlawList();
+    $("#contentInfo").scrollTop(0)
+  });
+  // initScroll("subMenu","Y",2)
+}
+function iframeShow(title){
+  console.log(title)
+  if(title === '医嘱信息'){
+    $("#pacsIframeIn,#assistIframeIn,#pacsDetailIframeIn,#contentNursing").css("display","none")
+    $("#contentIframeIn").css({display:'block'}).attr("src",'advice.html').contents().find(".adviceWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    $(window).resize(function(){
+      $("#contentIframeIn").contents().find(".adviceWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    });
+  }else if(title === '检验信息'){
+    $("#contentIframeIn,#assistIframeIn,#pacsDetailIframeIn,#contentNursing").css("display","none")
+    $("#pacsIframeIn").css({display:'block'}).attr("src",'pacs.html').contents().find(".pacsWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    $(window).resize(function(){
+      $("#pacsIframeIn").contents().find(".pacsWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    });
+  }else if(title === '检查信息'){
+    $("#contentIframeIn,#pacsIframeIn,#pacsDetailIframeIn,#contentNursing").css("display","none")
+    $("#assistIframeIn").css({display:'block'}).attr("src",'assist.html').contents().find(".assistWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    $(window).resize(function(){
+      $("#assistIframeIn").contents().find(".assistWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    });
+  }else if(title === '护理信息'){
+    $("#pacsIframeIn,#assistIframeIn,#pacsDetailIframeIn,#contentIframeIn").css("display","none")
+    $("#contentNursing").css({display:'block'}).attr("src",'nursing.html').contents().find(".nursingWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    $(window).resize(function(){
+      $("#contentNursing").contents().find(".nursingWrp").height(window.innerHeight-$("#patientInfo").height()-20+'px')
+    });
+  }else{
+    $("#contentIframeIn,#pacsIframeIn,#pacsDetailIframeIn,#assistIframeIn,#contentNursing").css({display:'none'})
+  }
+}
+//判断有无某一权限
+function hasData(data){
+  return true
+  let trdObj = JSON.parse(getLocal("trdObj"))
+  let lis = trdObj[global_code]
+  if(!lis){
+    return false
+  }
+  if(lis.indexOf(data)>-1){//有权限
+      return true
+  }
+  return false;
+}
+//获取病例明细
+function getRecordDetail(){
+  post(api.getRecordDetail,{'behospitalCode':global_id}).then(function(res){
+    if(res.data.code==='0'){
+      const data = res.data.data;
+      const {beHospital,result,msg,checkStatus,drgs,mrStatus,checkShow} = data;
+      global_check = checkStatus
+      global_check_home = mrStatus
+      global_check_show=checkShow;
+      const info=Object.assign(beHospital,result);
+      initMenu(JSON.parse(result.menuData));
+      // $(".sub-menu>ul>li:first-child.page,.menu-mini>ul>li:first-child.page").addClass("active");
+      $(".subMenu >li:first-child.page,.menu-mini>ul>li:first-child.page").addClass("active");
+      global_activeTab=$(".sub-menu .page.active").attr("code");
+      $(".operation").show()
+      initPatientInfo(info);
+      initContent(result.pageData);
+      initList(msg);
+      initScoreItem(msg);
+      global_flawData=msg;
+      global_flawDataPay=drgs;
+      setBoxHeight();
+      changePay()
+    }
+  });
+}
+function getRecordDetailUpdate(){
+  post(api.getRecordDetail,{'behospitalCode':global_id}).then(function(res){
+    if(res.data.code==='0'){
+      const data = res.data.data;
+      const {beHospital,result,msg,checkStatus,drgs} = data;
+      // global_check = checkStatus
+      // const info=Object.assign(beHospital,result);
+      // initMenu(JSON.parse(result.menuData));
+      // $(".subMenu >li:first-child.page,.menu-mini>ul>li:first-child.page").addClass("active");
+      // global_activeTab=$(".sub-menu .page.active").attr("code");
+      // initPatientInfo(info);
+      // initContent(result.pageData);
+      initList(msg);
+      initScoreItem(msg);
+      global_flawData=msg;
+      global_flawDataPay=drgs;
+      // setBoxHeight();
+      // changePay()
+    }
+  });
+}
+function changePay(){
+  $(document).on('click',".titleSpecial span",function(){
+    let type = $(this).attr("data-type")
+    if(type == 1){
+      initList(global_flawDataPay,type);
+    }else{
+      initList(global_flawData,type);
+    }
+  })
+}
+//填充患者信息
+function initPatientInfo(data){
+  const obj=Object.assign({},data,{checkState:global_check,checkStateHome:global_check_home});
+  
+  $("#infoTmpl").tmpl(obj).appendTo("#patientInfo");
+  /*$(".check").on("click", function(){
+    checkQc()
+  })*/
+  $(".ywCheck").on("click", function(){
+      checkYwQc()
+  })
+}
+//显示病例模块明细
+function initContent(data){
+  const obj = JSON.parse(data);
+  let info=[];
+  let hml='',moduleId='';
+  formatSpecPage(obj["谈话告知书"],"谈话告知书");
+  formatSpecPage(obj["知情同意书"],"知情同意书");
+  // formatSpecPage(obj["医嘱信息"],"医嘱信息");
+  $(".content-box").show();
+  for(let k in obj){
+    if(k==="谈话告知书"||k==="知情同意书"){
+      continue;
+    }
+    for(let i in obj[k]){
+      info=formatInfoData(k,obj[k][i]);
+      moduleId=info.mode_id;
+      if(global_modules[moduleId]){
+        hml=initModuleData(moduleId,obj[k]);
+        $.tmpl(hml,info).appendTo("#contentInfo");
+      }else{
+        const icon=require("../images/empty1.png");
+        const sid=moduleId?"("+moduleId+")":"";
+        const code=k.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'');
+        const emptyStr=`<div class="empty">
+            <img src="${icon}" alt="空"/>
+            <p>暂无信息~</p>
+        </div>`;
+        if(!$(".content-item[code="+code+"] .empty").length){  //显示一条空提示即可
+          hml='<div class="content-item" code="'+code+'">' +
+            '<h2 class="title">'+k+sid+'</h2>'+emptyStr+'</div>';
+          $.tmpl(hml,{}).appendTo("#contentInfo");
+        }
+      }
+    }
+  }
+  $(".content-item[code="+global_activeTab+"]").show();
+  //console.log(obj)
+}
+
+function formatInfoData(k,data){
+  let obj = {},name="";
+  for(let i in data){
+    if(i!=="mode_id"){
+      name=i.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,"").replace(/^[0-9]+/,"a");    //过滤key中存在的特殊符号,模板会渲染不出来且不报错
+      obj[name]=data[i].replace(/\n/g,"<br/>")||"";
+    }else{
+      obj[i]=data[i].replace(/\n/g,"<br/>")||"";
+    }
+  }
+  return Object.assign({title:k},obj);
+}
+
+//知情同意书、谈话告知书
+  function formatSpecPage(data,title,type){
+    $(".page-item[code='缺陷总览']").remove()
+    $("#appointBookTmpl").tmpl({title,data}).appendTo(".flaw-table");
+    setBoxHeight();
+    $(".page-anchor").on("click",function(){
+      const code=$(this).attr("code");
+      const pCode=$(this).parents("tr").attr("code").replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'');
+      //菜单同步状态
+      $(".sub-menu .page[code="+pCode+"]").parents(".list-1").click();
+      $(".sub-menu .page[code="+pCode+"],.menu-mini .page[code="+pCode+"").click();
+      //缺陷定位
+      $(".info-item .cont,.flaw-item,td").removeClass("active");
+      const flawItem=$(".flaw-item .title a[code="+code+"]");
+      if(!flawItem.length){
+        $.alerModal({"message":'模块数据缺失~',type:"tip",time:'1000',isFather: true, fatherWrapper: $(".flaw-table", parent.document)});
+        return;
+      }
+      $(".flaw-item .title a[code="+code+"]").click();
+      const anch=$(".flaw-item .title a[code="+code+"]").attr("href");
+      if($(anch)[0]){
+        $('#contentInfo').scrollTop($(anch).offset().top-60);
+      }
+    });
+    
+    if(global_activeTab=="缺陷总览"){
+      $(".check").css("display","none")
+    }else{
+      $(".check").css("display","block")
+    }
+
+    if(type&&type == 1){
+      $(".titleNo").css({
+        'background-color': '#00A1FF',
+        'color': '#fff',
+        'border-color': '#00A1FF'
+      })
+      $(".titlePay").css({
+        'background-color': '#fff',
+        'border': '1px solid #777',
+        'border-right':0,
+        'color': '#777'
+      })
+      setBoxHeight()
+    }else if(type&&type==2){
+      $(".titleNo").css({
+        'background-color': '#fff',
+        'border': '1px solid #777',
+        'border-left':0,
+        'color': '#777'
+      })
+      $(".titlePay").css({
+        'background-color': '#00A1FF',
+        'color': '#fff',
+        'border-color': '#00A1FF'
+      })
+      setBoxHeight()
+    }
+  }
+
+function initList(data,type){
+  //$("#flawTotalList").tmpl({title:"缺陷总览",data:data}).appendTo(".flaw-table");
+  formatSpecPage(data,"缺陷总览",type);
+  $(".flaw-table").show();
+  $(".flaw-table .page-item[code="+global_activeTab+"]").show();
+  $(".slide-up").off("click").on("click",function(){
+    const name = $(this).text();
+    $("tr[code='"+name+"']").slideToggle();
+    $(this).toggleClass("down");
+  });
+}
+
+//评分项数据填充
+function initScoreItem(data){
+  $("#flaws .flaw-box").html("");
+  for(let k in data){
+    $("#flawTmpl").tmpl(data[k]).appendTo("#flaws .flaw-box");
+  }
+  showFlawList();
+  $(".flaw-item .oper a").unbind("click").click(function () {
+    const i = $(".flaw-item[code="+global_activeTab+"]").index($(this).parents(".flaw-item"));
+    const code=$(this).attr("code");
+    showModal('0',code,i);  //申诉
+  })
+  $(".flaw-item .title a[href]").unbind("click").click(function(){
+    const id = $(this).attr("href");
+    const anchors=$(this).attr("anchors").split(",");
+    let ans = anchors.map((it)=>{
+      return "#anchor"+it;
+    });
+    $(".info-item .cont,.flaw-item,td").removeClass("active");
+    $(ans.join(",")).addClass("active");
+    $(this).parents(".flaw-item").addClass("active");
+  });
+}
+
+//显示缺陷列表
+function showFlawList(){
+  const hml = $(".flaw-item[code="+global_activeTab+"]");
+  if(hml.length){
+    hml.show();
+    $("#flaws .empty").hide();
+  }else{
+    $("#flaws .empty").length?$("#flaws .empty").show():$("#emptyTmpl").tmpl().appendTo("#flaws .flaw-box");
+  }
+}
+
+//删除评分项
+function delScore(id,info,isRecover){
+    const text = isRecover?"恢复":"删除";
+  const param={
+    'behospitalCode':global_id,
+    'optResultAlgVO':{
+      'id':id
+    },
+    'delStatus':isRecover?1:0
+  };
+  post(api.delScore,param).then(function(res){
+    if(res.data.code==='0'){
+      $("#delModal").hide();
+      updateFlaws(res.data.data);
+      $("#anchor"+info.pageKeyList[0]).removeClass("active");
+      $.alerModal({"message":text+"成功",type:"tip",time:'1000',win:true});
+    }else{
+      $.alerModal({"message":res.data.msg||(text+'失败,请重试~'),type:"tip",time:'1000',win:'default'});
+
+    }
+  }).catch(()=>{
+    $.alerModal({"message":text+'失败,请重试~',type:"tip",time:'1000',win:'default'});
+
+  });
+}
+//修改评分项
+function appealItem(info){
+  const param={
+    "behospitalCode": global_id,
+      ...info
+};
+  post(api.addAppealInfo,param).then(function(res){
+    if(res.data.code==='0'){
+      $("#delModal").hide();
+      updateFlaws(res.data.data);
+      $.alerModal({"message":"提交成功",type:"tip",time:'1000',win:true});
+    }else{
+      $.alerModal({"message":res.data.msg||'提交失败,请重试~',type:"tip",time:'1000',isFather: true,win: 'default', fatherWrapper: $("#mainBox", parent.document)});
+
+    }
+  }).catch(()=>{
+    $.alerModal({"message":res.data.msg||'提交失败,请重试~',type:"tip",time:'1000',isFather: true,win: 'default', fatherWrapper: $("#mainBox", parent.document)});
+
+  });
+}
+//添加评分项
+function addScore(info){
+  const optResultAlgVO = {
+    "casesEntryId": info.casesEntryId,
+    "casesId": info.casesId,
+    "casesScore": info.caseScore,
+    "code": info.code || "",
+    "id": info.id || "",
+    "info":info.info || "",
+    "isReject": info.isReject,
+    "msg": info.msg || "",
+    "score": info.score,
+    "explainInfo": info.explainInfo
+  }
+  const param={
+    "behospitalCode": global_id,
+    "optResultAlgVO": optResultAlgVO
+  };
+  post(api.addScore,param).then(function(res){
+    if(res.data.code==='0'){
+      $("#delModal").hide();
+      updateFlaws(res.data.data);
+      $.alerModal({"message":"添加成功",type:"tip",win:true,time:'1000'});
+    }else{
+      $.alerModal({"message":"添加失败,请重试~",type:"tip",win:'default',time:'1000'});
+      
+    }
+  }).catch(()=>{
+    $.alerModal({"message":"添加失败,请重试~",type:"tip",win:'default',time:'1000'});
+
+  });
+}
+
+
+//申诉弹窗
+function showModal(flag,code,i){
+  $("#delModal .modal-body").html("");
+  $("#delModal").show();
+  $(".info-item .cont,.flaw-item .title,td").removeClass("active");
+  //事件解绑
+  $("#delModal .confirm").off("click");
+  const flawsList = formatFlawKeys(global_flawData);
+  const info = flawsList[global_activeTab]&&flawsList[global_activeTab][i];
+  console.log(21,info)
+  if(flag==='0'){   //申诉
+    $("#delModal .title").text("申诉");
+    $("#editTmpl").tmpl(info).appendTo("#delModal .modal-body");
+    $("#qcInfo").off("input");
+    //申诉说明输入验证
+	const num = 500;
+    $("#qcInfo").on("input",function(){
+        const val=$(this).val().trim();
+        $(this).attr("title",val)
+        if(!val){
+		  $(".edit-box .warning .red").text("申诉说明不能为空~");
+		  $(".edit-box .warning").show();
+        }else if(val.length>num){
+            $(".edit-box .warning .red").text("申诉说明不能超过"+num+"个字~");
+            $(".edit-box .warning").show();
+        }else{
+            $(".edit-box .warning").hide();
+            return;
+        }
+    });
+    $("#delModal .confirm").unbind("click").click(function(){
+      if($(".edit-box .warning").is(":visible")){
+        return;
+      }
+      const obj = Object.assign({},info,{
+        appealExplain:$("#delModal #qcInfo").val(),
+        appealOperationType:0,
+        appealType:1,
+        checkId:$(".checker-drop-input").attr("code"),
+        modeId:info.modelId,
+        modeName:info.modelName,
+        qcresultDetailId:info.id,
+		workFlowNodeId:1,
+      });
+      appealItem(obj);
+    });
+  }else if(flag==='2'){   //新增
+    $("#delModal .title").text("申诉新增");
+    $("#addFlawTmpl").tmpl().appendTo("#delModal .modal-body");
+    $("#flawDropTmpl").tmpl({info:code}).appendTo("#delModal .modal-body ul");
+    $("#addQcScore,#addQcMsg,#addQcInfo").off("input");
+    //分数输入验证
+    $("#addQcScore").on("input",function(){
+      const val=$(this).val();
+      if(/^[0-9]\d*$|^[0-9]\d*(.\d)?$/.test(val) && val <= 100){
+        $(".add-box .warning").hide();
+      }else{
+        $(".add-box .warning .red").text("支持≥0且≤100的数字输入,最多保留小数点后1位~");
+        $(".add-box .warning").show();
+          return;
+      }
+    });
+    //提示信息输入验证
+    $("#addQcMsg").on("input",function(){
+      const val=$(this).val();
+      $(this).attr("title",val)
+      if(val.trim()){
+        $(".add-box .warning").hide();
+      }else{
+        $(".add-box .warning .red").text("提示信息不能为空~");
+        $(".add-box .warning").show();
+        return;
+      }
+    });
+    //提示信息输入验证
+    $("#addQcInfo").on("input",function(){
+        const val=$(this).val();
+        $(this).attr("title",val)
+        if(val.length>125){
+            $(".add-box .warning .red").text("备注不能超过125个字~");
+            $(".add-box .warning").show();
+        }else{
+            $(".add-box .warning").hide();
+            return;
+        }
+    });
+    $("#delModal .confirm").unbind("click").click(function(){
+      if(!$(".flaw-drop-input").attr("code")){
+        $(".add-box .warning .red").text("请选择质控条目~");
+        $(".add-box .warning").show();
+        return;
+      }
+      const msg=$("#delModal #addQcMsg").val();
+      const score=Number($("#delModal #addQcScore").val());
+      const explainInfo=$("#delModal #addQcInfo").val();
+      if($(".add-box .warning").is(":visible")){
+        return;
+      }
+      if(!msg.trim()){
+          $(".add-box .warning .red").text("提示信息不能为空~");
+          $(".add-box .warning").show();
+          return;
+      }
+      if((!score)&&$("#delModal #addQcScore").val()!='0'){
+          $(".add-box .warning .red").text("分值不能为空~");
+          $(".add-box .warning").show();
+          return;
+      }
+      if($("#addQcInfo").val().length>125){
+          $(".add-box .warning .red").text("备注不能超过125个字~");
+          $(".add-box .warning").show();
+          return;
+      }
+      const obj = Object.assign({},global_selectedFlaw,{msg,score,explainInfo});
+      addScore(obj);
+    });
+  }
+}
+//缺陷列表key值去掉特殊符号
+function formatFlawKeys(data){
+    const obj = {};
+    for(let k in data){
+      obj[k.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'')]=data[k];
+    }
+    return obj;
+  }
+  //获取审核人下拉列表
+  function getCheckUser(){
+	const param = {};
+	post(api.getReviewer,param).then(function(res){
+	  if(res.data.code==='0'){
+		const data = res.data.data;
+		global_checkers=data;
+		$("#delModal .modal-body ul").html("");
+		$("#flawDropTmpl").tmpl({info:data}).appendTo("#delModal .modal-body ul");
+	  }
+	});
+  }
+  //获取缺陷条目下拉列表
+  function getQcCasesEntry(name){
+  const id=$("#subMenu [code="+global_activeTab+"]").attr("mode");
+    const param = {
+      'behospitalCode':global_id,
+      'entryName':name||"",
+      'modeId':id
+    };
+    post(api.findQcCasesEntry,param).then(function(res){
+      if(res.data.code==='0'){
+        const data = res.data.data;
+        if(name){
+          global_flaws=data;
+          $("#delModal .modal-body ul").html("");
+          $("#flawDropTmpl").tmpl({info:data}).appendTo("#delModal .modal-body ul");
+        }else{
+          global_flaws=data;
+          if($("#delModal").css("display") == "block"){
+            $("#flawDropTmpl").tmpl({info:data}).appendTo("#delModal .modal-body ul");
+            return
+          }
+          showModal('2',data);
+        }
+      }
+    });
+  }
+  flawDropEvent(".add-box .flaw-drop-input",getQcCasesEntry,selectFlaw);
+  flawDropEvent(".edit-box .checker-drop-input",getCheckUser,selectChecker);
+//增加条目弹窗元素事件
+  function flawDropEvent(domSelector,getData,selectEvent){
+    const parentDom = domSelector.split(" ")[0];
+	$("body").on("click",domSelector,function(){
+	  $(parentDom+" .drop-box").addClass("show");
+	});
+	$("body").on("blur",domSelector,function(){
+	  setTimeout(function(){
+		$(parentDom+" .drop-box").removeClass("show");
+	  },300)
+	});
+	$("body").on("input",domSelector,function(){
+	  $(this).attr({"code":"","title":$(this).val().trim()});
+	  getData($(this).val().trim());
+	});
+	$("body").on("click",parentDom+" li",function(){
+	  const n = $(this).attr("idx");
+	  selectEvent(domSelector,n);
+	  $(parentDom+" .warning").hide();
+	  $(parentDom+" .drop-box").removeClass("show");
+	});
+  }
+  //条目下拉选中
+  function selectFlaw(domSelector,n){
+	const flaw=global_flaws[n];
+	const {score,msg,entryName,casesEntryId}=flaw;
+	global_selectedFlaw=flaw;
+	$(domSelector).val(entryName).attr({"code":casesEntryId,"title":entryName});
+	$("#addQcMsg").val(msg).attr("title",msg);
+	$("#addQcScore").val(score);
+  }
+  //审核人下拉选中
+  function selectChecker(domSelector,n){
+	const flaw=global_checkers[n];
+	const {id,userName}=flaw;console.log(domSelector,userName)
+	$(domSelector).val(userName).attr({"code":id,"title":userName});
+  }
+
+//更新缺陷列表
+  function updateFlaws(){
+  const param = {
+    'behospitalCode':global_id,
+    'paramStr':[
+      "msg"
+    ]
+  };
+    post(api.getRecordDetail,param).then(function(res){
+      if(res.data.code==='0'){
+        const data = res.data.data;
+        const {msg} = data;
+        initScoreItem(msg);
+        global_flawData=msg;
+      }
+    });
+  }
+
+//获取病例模板
+  function getInfoModule(moduleId){
+    const param = {
+      moduleId:moduleId
+    };
+    post(api.getInfoModule,param).then(function(res){
+      if(res.data.code==='0'){
+        const data = res.data.data;
+        cachemoduleDatas(data);
+        getRecordDetail();
+      }
+    });
+  }
+
+  //模板数据缓存
+  function cachemoduleDatas(data){
+    const moudle=data.moduleDetail;
+    global_modules[data.modeName]=[];
+    for(let i in moudle){
+      global_modules[data.modeName].push(moudle[i]);
+    }
+  }
+
+//初始化模板
+  function initModuleData(mid,obj){
+    const n = obj.length;
+    const module=global_modules[mid].moduleDetail;
+    const key = global_modules[mid].modeName.replace(/[^\u4e00-\u9fa5|a-zA-Z0-9]+/g,'');
+    let hml = '<div class="content-item" code="'+key+'">' +
+      '<h2 class="title">'+global_modules[mid].modeName+'('+mid+')</h2>'+
+      (n>1?'<div class="container">':'<div class="container content-ht">');
+
+      
+      for(let i in module){
+        hml=hml+'<div class="info-item">';
+        for(let j=0;j<module[i].length;j++) {
+        const detal = module[i][j].questionDTO;
+        const {tagType} = detal;
+        switch (tagType) {
+          case 1:
+            hml = hml + simpleStructure(detal,obj);
+            break;
+          case 4:
+            hml = hml + combineStructure(detal);
+            break;
+          default:
+            break;
+        }
+      }
+      hml = hml+"</div>"
+    }
+    return hml+"</div></div>";
+  }
+
+
+  //基础类型结构生成
+  function simpleStructure(data,obj){
+    console.log(data,obj,7878787)
+    const {name, val,monoLine,addLine,position,bold,retract,id} = data;
+    if(name==="手术记录表格-1"){
+      const value = val.replace("【","").replace("】","");
+      const diag = obj[0][value]?JSON.parse(obj[0][value]):"";
+      let thml=`<div class="cont" style="width: 100%;" id="anchor${id}">`;
+      thml+=$("#tableTmpl").tmpl({k:"手术信息",data:diag})[0].outerHTML+"</div>";
+      return thml;
+    }
+    if(name==="出院诊断表格-1"){
+      const value = val.replace("【","").replace("】","");
+      const diag = obj[0][value]?JSON.parse(obj[0][value]):"";
+      
+      let thml=`<div class="cont" style="width: 100%;" id="anchor${id}">`;
+      thml+=$("#tableTmpl").tmpl({k:"出院诊断",data:diag})[0].outerHTML+"</div>";
+      return thml;
+    }
+    const posClass = position===1?'text-left':'';
+    const boldClass = bold===1?'text-bold':'';
+    const retractClass = retract===1?'text-indent':'';
+    const lineHml = ('<p class="'+posClass+' '+boldClass+' '+retractClass+'">'+ extractVars(val)+'</p>');
+    const txtHml = ('<p style="display: inline;vertical-align: middle;" class="'+posClass+' '+boldClass+' '+retractClass+'">'+ extractVars(val)+'</p>');
+
+    let hml = addLine||monoLine?`<div class="cont ${posClass}" style="width: 100%;" id="anchor${id}">`:`<div class="cont" id="anchor${id}">`;
+    hml=hml+`<span class="label">${name}</span>`+ (addLine?lineHml:txtHml)+ `</div>`;
+    return hml;
+  }
+
+  //组合类型结构生成
+  function combineStructure(data){
+    const {name,questionMapping,id} = data;
+    let hml='<div class="inner-table"><table>';
+    const colNum = Math.ceil(questionMapping.length/2);
+    let tdVal='';
+    const regexp = /(【(.+?)】)/g;
+    for(let i=0;i<questionMapping.length;){
+      if(questionMapping[i+1]){
+        tdVal="<td id='anchor"+questionMapping[i].id+"'>"+questionMapping[i].name+extractVars(questionMapping[i].val)+"</td><td id='anchor"+questionMapping[i+1].id+"'>"+questionMapping[i+1].name+extractVars(questionMapping[i+1].val)+"</td>";
+      }else{
+        tdVal="<td id='anchor"+questionMapping[i].id+"'>"+questionMapping[i].name+extractVars(questionMapping[i].val)+"</td><td></td>";
+      }
+      if(i==0){
+        hml=hml+`<tr><td rowspan="${colNum}" id='anchor${id}'>${name}</td>${tdVal}`;
+      }else{
+        hml=hml+`<tr>${tdVal}`;
+      }
+      hml=hml+"</tr>";
+      i=((i+2)>questionMapping.length?i+1:i+2)
+    }
+    hml=hml+"</table></div>";
+    return hml;
+  }
+
+  //抽取变量
+  function extractVars(org){
+    const regexp = /(【(.+?)】)/g;
+    const arr = org.split(regexp);
+    //console.log(arr)
+    let htl = '',val='';
+    for(let i=0;i<arr.length;i++){
+      val = arr[i].indexOf("【")!=-1?'':(arr[i-1]&&arr[i-1].indexOf("【")!=-1?"{{html "+arr[i]+"}}":arr[i]);
+      htl=htl+val;
+    }
+    return htl;
+  }
+//获取所有模板
+  function getAllModules(){
+    const param={
+      hospitalId:getUrlArgObject("hid"),
+      modeId:''
+    };
+    post(api.getModuleById,param).then((res)=>{
+      if(res.data.code==='0') {
+        const data = res.data.data;
+        global_modules=data;
+        getRecordDetail();
+        $("#loading").hide();
+      }
+    });
+  }
+  function checkYwQc(){
+      const param={
+          behospitalCode:getUrlArgObject("id"),
+          hospitalId:getUrlArgObject("hid"),
+      };
+      post(ywCheckApi.recordCheck,param).then((res)=>{
+          if(res.data.code==='0') {
+              global_check = 1
+              $(".ywCheck").text("重新核查")
+              $.alerModal({"message":"核查成功",type:"tip",time:'1000',win:true});
+          }else{
+              $.alerModal({"message":res.data.msg ||"核查失败",type:"tip",time:'1000',isFather: false});
+          }
+      });
+  }
+
+});
+

+ 1 - 1
src/js/roleManager.js

@@ -112,7 +112,7 @@ $(function(){
             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||grandParentId==17||grandParentId==18||grandParentId==61||grandParentId==69||grandParentId==72){//循环
+            if(grandParentId == 3||grandParentId == 2||grandParentId==17||grandParentId==18||grandParentId==61||grandParentId==69||grandParentId==72||grandParentId==100){//循环
                 // console.log(curData[grandIndex])
                 let tmpData = curData[grandIndex];
                 let tmpDataLis = curData[grandIndex].sonMenuDTOList;

+ 4 - 0
src/js/utils.js

@@ -73,6 +73,10 @@ const pageMap = {
   "YH-ZKK-LCZKSYTJ": 'useStatistics.html', //临床质控使用统计
   'YH-KSZR-TMQXGSTJ': 'improveStatisticsDept.html', //条目缺陷改善统计(科室)
   "YH-KSZR-LCZKSYTJ": 'useStatisticsDept.html', //临床质控使用统计(科室)
+
+  "YH-SSXX-SSJL": 'appealInit.html', //申诉记录
+  "YH-SSXX-SSSH": 'appealCheck.html', //申诉审核
+  "YH-SSXX-SSFQ": 'appealInit.html', //申诉发起列表
 };
 
 //导出时间天数