Browse Source

x新增服务记录

Chensc 5 ngày trước cách đây
mục cha
commit
9884f9961f

+ 1 - 0
app/statistics/html/comprehensive-query.html

@ -1001,5 +1001,6 @@
    <script src="../../../component/statistics/LascCervical/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/LascProgress/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/LascProgressData/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/CopdServiceRecordPatient/index.js" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

+ 206 - 0
component/statistics/CopdServiceRecordPatient/index.css

@ -0,0 +1,206 @@
.service-record-timeline .timeline {
  position: relative;
  margin: 0 auto;
  padding: 10px;
  border-radius: 4px;
  background-color: #FFFFFF;
}
.service-record-timeline .timeline::before {
  content: '';
  position: absolute;
  width: 1px;
  background-color: #A6AAB3;
  top: 30px;
  bottom: 10px;
  left: 68px;
  margin-left: -2px;
}
.service-record-timeline .timeline-item {
  display: flex;
  align-items: stretch;
  width: 100%;
  padding: 10px 0;
  position: relative;
}
.service-record-timeline .timeline-item::before {
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  background-color: #FF9900;
  border-radius: 50%;
  left: 52px;
  top: 10px;
  transform: translateY(10px);
  z-index: 1;
}
.service-record-timeline .timeline-item-blue-dot::before {
  background-color: #12B7F5;
}
.service-record-timeline .timeline-time {
  width: 50px;
  line-height: 1.4;
  text-align: center;
  padding-right: 20px;
  position: relative;
  font-size: 12px;
  font-weight: bold;
}
.service-record-timeline .timeline-content {
  flex: 1;
  padding: 10px;
  background-color: #f5f7fa;
  border-radius: 6px;
  position: relative;
}
.service-record-timeline .record-list.time-list {
  padding: 10px;
}
.service-record-timeline .timeline-content .data-item .data-title {
  font-size: 14px;
  font-weight: 500;
  margin-bottom: 10px;
}
.service-record-timeline .timeline-content .data-item {
  font-size: 12px;
  margin-bottom: 10px;
}
.service-record-timeline .timeline-content .data-item .data-cont {
  display: flex;
  flex-wrap: wrap;
}
.copd-service-record-box>.service-base-info {
  background-color:#F2F7FB;
  padding: 10px;
  border-radius: 8px;
  margin-bottom: 10px;
}
.copd-service-record-box>.service-base-info>.base-title {
  height: 32px;
  line-height: 32px;
}
.copd-service-record-box>.service-base-info >.base-content {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
.copd-service-record-box>.service-base-info>.base-content>.base-info-item {
  width: 25%;
  height: 32px;
  line-height: 32px;
}
.ki-title {
  position: relative;
  padding-left: 10px;
}
.ki-title::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 4px;
  height: 20px;
  border-radius: 8px;
  background-color: #409EFF;
}
.ta-title {
  margin-bottom: 4px;
  border-bottom: 2px solid #409EFF;
}
.copd-service-record-box > .service-record-timeline .title {
  width: 100%;
  padding: 14px 0;
  border-bottom: 2px solid #F2F3F5;
}
.cops-service-record-bottom-box {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #fff;
  border-top: 1px solid #EEEEEE;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 100;
}
.copd-follow-up-dialog-box {
  height: 400px;
  overflow-y: scroll;
  overflow-x: hidden;
}
.copd-follow-up-dialog-box .copd-bb-record-info .title {
  width: 100%;
  height: 32px;
  line-height: 32px;
}
.copd-service-record-box .el-dialog__header {
  padding: 14px;
}
.copd-service-record-box .el-dialog__body {
  padding: 0 14px;
}
.copd-bb-base-content {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
.copd-bb-base-info-item {
  width: 50%;
  margin-bottom: 4px;
  /* height: 32px;
  line-height: 32px; */
}
.copd-bb-record-info {
  margin-bottom: 24px;
  width: 100%;
}
.dialog-footer {
  display: flex;
  justify-content: center;
  align-items: center;
}
.el-radio-button{
  margin-right: 20px;
}
.el-radio-button__inner{
  border-left: 1px solid #dcdfe6;
  border-radius: 4px;
}
.el-radio-button:first-child .el-radio-button__inner{
  border-radius: 4px;
}
.el-radio-button:last-child .el-radio-button__inner{
  border-radius: 4px;
}

+ 408 - 0
component/statistics/CopdServiceRecordPatient/index.html

@ -0,0 +1,408 @@
<div class="copd-service-record-box">
  <div class="service-base-info">
    <div class="base-title ki-title ta-title">基本信息</div>
    <div class="base-content">
      <div class="base-info-item">姓名:{{detailInfo.name}}</div>
      <div class="base-info-item">性别:{{detailInfo.sexName}}</div>
      <div class="base-info-item">证件号码:{{detailInfo.idcard}}</div>
      <div class="base-info-item">联系电话:{{detailInfo.mobile}}</div>
      <div class="base-info-item">下转状态:{{detailInfo.turnDownStatus==1?'已下转':'未下转'}}</div>
      <template v-if="detailInfo.turnDownStatus==1&&detailInfo.receiveStatus!=1">
        <div class="base-info-item">分配医院:{{detailInfo.hospitalName}}</div>
        <div class="base-info-item">分配医生:{{detailInfo.basicDoctorName}}</div>
      </template>
      <div class="base-info-item">接收状态:{{detailInfo.receiveStatus==1?'已接收':'未接收'}}</div>
      <template v-if="detailInfo.receiveStatus==1">
        <div class="base-info-item">接收医院:{{detailInfo.hospitalName}}</div>
        <div class="base-info-item">接收医生:{{detailInfo.doctorName}}</div>
      </template>
    </div>
  </div>
  <div class="service-record-timeline">
    <div class="title">服务记录</div>
    <div>
      <div class="mb10 mt10" style="display: flex;align-items: center;">
        <span>服务年份:</span>
        <el-radio-group v-model="serviceYear" @input="getDealRecord">
          <el-radio-button :label="item.value" v-for="item in yearList">{{item.label}}</el-radio-button>
        </el-radio-group>
        <el-date-picker v-model="customizeYear" style="width: 400px;" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" v-if="serviceYear=='customize'" value-format="yyyy-MM-dd" @change="getDealRecord"></el-date-picker>
      </div>
      <div  style="display: flex;align-items: center;">
        <span>服务节点:</span>
        <el-radio-group v-model="serviceNode" @input="getDealRecord">
          <el-radio-button :label="item.value" v-for="item in nodeList">{{item.label}}</el-radio-button>
        </el-radio-group>
      </div>
    </div>
    <div class="record-list time-line">
      <div class="timeline" v-loading="loading">
        <div v-for="(event, eI) in events" :key="eI">
          <div class="timeline-item" v-if="event.flag">
            <div class="timeline-time" :id="'left-' + eI">{{ event.createTime&&event.createTime.substring(0,4)}}</div>
          </div>
          <div class="timeline-item" :class="{'timeline-item-blue-dot': event.createTime != null}">
            <div class="timeline-time" :id="'left-' + eI">{{event.createTime&& event.createTime.slice(5) }}</div>
            <div class="timeline-content" :id="'right-' + eI">
              <div class="data-item">
                <div class="data-title">
                  {{getTypeName(event.type)}}
                </div>
                <div class="data-cont" v-if="event.type!=5&&event.type!=6&&event.type!=7&&event.type!=8">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">下转状态:</span>
                    <span style="color: #656565">
                      <template>{{event.turnDownStatus==0?'未下转':'已下转'}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">接收状态:</span>
                    <span style="color: #656565">
                      <template>{{event.receiveStatus==0?'未接收':'已接收'}}</template>
                    </span>
                  </div>
                  <template v-if="event.receiveStatus!=0">
                    <div style="width: 50%">
                      <span style="color: #9fa2a8">接收医生:</span>
                      <span style="color: #656565">
                        <template>{{event.doctorName}}</template>
                      </span>
                    </div>
                    <div style="width: 50%">
                      <span style="color: #9fa2a8">接收医院:</span>
                      <span style="color: #656565">
                        <template>{{event.hospitalName}}</template>
                      </span>
                    </div>
                  </template>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">是否流转:</span>
                    <span style="color: #656565">
                      <template>{{event.isCirculation==0?'否':'是'}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%" v-if="event.isCirculation!=0">
                    <span style="color: #9fa2a8">流转去向:</span>
                    <span style="color: #656565">
                      <template v-if="event.isCirculation==0">———</template>
                      <template v-else>{{event.circulation}}</template>
                    </span>
                  </div>
                  <div style="width: 50%" >
                    <span style="color: #9fa2a8">是否回退:</span>
                    <span style="color: #656565">
                      <template>{{event.isBack==0?'否':'是'}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%" v-if="event.isBack!=0">
                    <span style="color: #9fa2a8">回退原因:</span>
                    <span style="color: #656565">
                      <template v-if="event.isBack==0">———</template>
                      <template v-else>
                        {{event.backType==1?'找到本人或家属,但否认慢阻肺病史':event.backType==2?'找到本人或家属,非本辖区,也不清楚现在的住址':event.backReason}}
                      </template>
                    </span>
                  </div>
                  <div style="width: 50%" >
                    <span style="color: #9fa2a8">是否失访:</span>
                    <span style="color: #656565">
                      <template>{{event.isLost==0?'否':'是'}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作医生:</span>
                    <span style="color: #656565">
                      <template>{{event.operaterName}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作机构:</span>
                    <span style="color: #656565">
                      <template>{{event.orgName}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type==5">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">下转状态:</span>
                    <span style="color: #656565">
                      <template>{{event.turnDownStatus==0?'未下转':'已下转'}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">接收状态:</span>
                    <span style="color: #656565">
                      <template>{{event.receiveStatus==0?'未接收':'已接收'}}</template>
                    </span>
                  </div>
                  <template v-if="event.receiveStatus==1">
                    <div style="width: 50%">
                      <span style="color: #9fa2a8">接收医院:</span>
                      <span style="color: #656565">
                        <template>{{event.hospitalName}}</template>
                      </span>
                    </div>
                    <div style="width: 50%">
                      <span style="color: #9fa2a8">接收医生:</span>
                      <span style="color: #656565">
                        <template>{{event.doctorName}}</template>
                      </span>
                    </div>
                  </template>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">是否流转:</span>
                    <span style="color: #656565">
                      <template>{{event.isCirculation==0?'否':'是'}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%" v-if="event.isCirculation!=0">
                    <span style="color: #9fa2a8">流转去向:</span>
                    <span style="color: #656565">
                      <template v-if="event.isCirculation==0">———</template>
                      <template v-else>{{event.circulation}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">是否回退:</span>
                    <span style="color: #656565">
                      <template>{{event.isBack==0?'否':'是'}}</template>
                      <!-- <template v-if="i% 3 == 0">———</template>
                    <template v-else>这是数据值,他可能会很长</template> -->
                    </span>
                  </div>
                  <div style="width: 50%" v-if="event.isBack!=0">
                    <span style="color: #9fa2a8">回退原因:</span>
                    <span style="color: #656565">
                      <template v-if="event.isBack==0">———</template>
                      <template v-else>
                        {{event.backType==1?'找到本人或家属,但否认慢阻肺病史':event.backType==2?'找到本人或家属,非本辖区,也不清楚现在的住址':event.backReason}}
                      </template>
                    </span>
                  </div>
                  <div style="display: flex; justify-content: space-between; width: 100%">
                    <div class="data-title">随访信息</div>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访医生:</span>
                    <span style="color: #656565">
                      <template>{{event.jkcopdFollowup.doctorName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访机构:</span>
                    <span style="color: #656565">
                      <template>{{event.jkcopdFollowup.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访时间:</span>
                    <span style="color: #656565">
                      <template>{{event.jkcopdFollowup.followupDate}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">生存状态:</span>
                    <span style="color: #656565">
                      <template>{{event.jkcopdFollowup.isLive==1?'生存':'死亡'}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type==7">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">常住地址:</span>
                    <span style="color: #656565">
                      <template>{{event.backReason}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作医生:</span>
                    <span style="color: #656565">
                      <template>{{event.operaterName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作机构:</span>
                    <span style="color: #656565">
                      <template>{{event.orgName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 8">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">下转状态:</span>
                    <span style="color: #656565">
                      <template>{{event.turnDownStatus==0?'未下转':'已下转'}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">接收状态:</span>
                    <span style="color: #656565">
                      <template>{{event.receiveStatus==0?'未接收':'已接收'}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">分配医生</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">分配去向</span>
                    <span style="color: #656565">
                      <template>{{event.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作医生:</span>
                    <span style="color: #656565">
                      <template>{{event.operaterName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作机构:</span>
                    <span style="color: #656565">
                      <template>{{event.orgName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else>
                  <div style="width: 50%" v-for="item in event.achievesRecordList" :key="item.id">
                    <span style="color: #9fa2a8">{{item.classFieldName}}:</span>
                    <span style="color: #656565">
                      <template>{{item.newCommentName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作医生:</span>
                    <span style="color: #656565">
                      <template>{{event.operaterName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">操作机构:</span>
                    <span style="color: #656565">
                      <template>{{event.orgName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-title" style="color: #12b7f5; font-size: 14px;cursor: pointer;" v-if="event.type==5" @click="showDetail(event)">查看随访详情</div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="cops-service-record-bottom-box">
    <el-button @click="recordBack">返回</el-button>
  </div>
  <el-dialog title="随访详情" :visible.sync="dialog" width="50%" :destroy-on-close="true">
    <div class="copd-follow-up-dialog-box">
      <div class="copd-bb-record-info">
        <div class="title ki-title ta-title">随访信息</div>
        <div class="copd-bb-base-content">
          <div class="copd-bb-base-info-item" v-if="followInfo.createTime">随访时间:{{followInfo.createTime}}</div>
          <div class="copd-bb-base-info-item" v-if="followInfo.doctorName">随访医生:{{followInfo.doctorName}}</div>
          <div class="copd-bb-base-info-item" v-if="followInfo.hospitalName">随访机构: {{followInfo.hospitalName}}</div>
          <div class="copd-bb-base-info-item" v-if="followup">随访状态:{{followup}}</div>
          <div class="copd-bb-base-info-item" v-if="followInfo.status==4">失访原因:{{followInfo.lostReason}}</div>
          <div class="copd-bb-base-info-item" v-if="followInfo.status==3">不详原因:{{followInfo.lostReason}}</div>
        </div>
      </div>
      <template v-if="followInfo.status!='4'&&followInfo.status!='3'&&followInfo.status!='2'">
        <div class="copd-bb-record-info">
          <div class="title ki-title">基本信息</div>
          <div class="copd-bb-base-content">
            <div class="copd-bb-base-info-item" v-if="followInfo.name">姓名:{{followInfo.name}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.sex">性别:{{followInfo.sex==1?'男':'女'}}</div>
            <div class="copd-bb-base-info-item" v-if="nationName">民族:{{nationName}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.birthday">出生日期:{{followInfo.birthday}}</div>
            <div class="copd-bb-base-info-item" v-if="idcardTypeName">证件类型:{{idcardTypeName}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.idcard">证件号码:{{followInfo.idcard}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.mobile">联系电话:{{followInfo.mobile}}</div>
            <div class="copd-bb-base-info-item" v-if="educational">学历:{{educational}}</div>
            <div class="copd-bb-base-info-item" v-if="marriageName">婚姻状况:{{marriageName}}</div>
            <div class="copd-bb-base-info-item" v-if="occupation">职业类型:{{occupation}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.liveProvinceName">
              常住地区:{{followInfo.liveProvinceName}}{{followInfo.liveCityName}}{{followInfo.liveTownName}}{{followInfo.liveStreetName}}
            </div>
            <div class="copd-bb-base-info-item" v-if="followInfo.liveAddress">常住地址:{{followInfo.liveAddress}}</div>
            <div class="copd-bb-base-info-item" v-if="followInfo.registProvinceName">
              户籍地区:{{followInfo.registProvinceName}}{{followInfo.registCityName}}{{followInfo.registTownName}}{{followInfo.registStreetName}}
            </div>
            <div class="copd-bb-base-info-item" v-if="followInfo.registAddress">户籍地址:{{followInfo.registAddress}}</div>
          </div>
        </div>
        <div class="copd-bb-record-info">
          <div class="title ki-title ta-title">随访情况</div>
          <div class="copd-bb-base-content">
            <div class="copd-bb-base-info-item" v-if="followInfo.isLive">生存状态:{{followInfo.isLive==1?'生存':'死亡'}}</div>
            <template v-if="followInfo.isLive==1">
              <div class="copd-bb-base-info-item" v-if="followInfo.hasSmoke">是否抽烟:{{followInfo.hasSmoke==1?'是':followInfo.hasSmoke==0?'否':'已戒烟'}}</div>
              <div class="copd-bb-base-info-item" v-if="followInfo.hasDrink">是否饮酒:{{followInfo.hasDrink==1?'是':followInfo.hasDrink==0?'否':'已戒酒'}}</div>
              <div class="copd-bb-base-info-item" v-if="diseaseConversion">病情归转:{{diseaseConversion}}</div>
            </template>
            <!-- <div class="copd-bb-base-info-item">
              是否做过肺功能检查:{{followInfo.hasLung}}
            </div> -->
            <!-- <div class="copd-bb-base-info-item">e
              是否做过胸部CT或X线检查:{{followInfo.birthday}}
            </div> -->
          </div>
        </div>
        <template v-if="followInfo.isLive==1">
          <div class="copd-bb-record-info">
            <div class="title ki-title ta-title">首次确诊情况</div>
            <div class="copd-bb-base-content">
              <div class="copd-bb-base-info-item" v-if="followInfo.firstVisitTime">慢阻肺首次诊断时间:{{followInfo.firstVisitTime}}</div>
              <div class="copd-bb-base-info-item" v-if="followInfo.firstVisitArea">慢阻肺首次诊断地区:{{followInfo.firstVisitArea}}</div>
              <div class="copd-bb-base-info-item" v-if="orGlevelName">
                <!-- 慢阻肺首次诊断机构级别:{{
                followInfo.firstVisitOrgLevel == 1 ? '三级医院' :
                followInfo.firstVisitOrgLevel == 2 ? '二级医院' :
                followInfo.firstVisitOrgLevel == 3 ? '村卫生室' :
                followInfo.firstVisitOrgLevel == 4 ? '乡镇卫生院/社区卫生服务机构' :
                followInfo.firstVisitOrgLevel == 5 ? '其他医疗卫生机构' :
                ''
              }} -->
                慢阻肺首次诊断机构级别:{{orGlevelName}}
              </div>
              <div class="copd-bb-base-info-item" v-if="followInfo.firstVisitOrg">首次诊断机构:{{followInfo.firstVisitOrg}}</div>
              <div class="copd-bb-base-info-item" v-if="diagnosticBasisName">最高诊断依据:{{diagnosticBasisName}}</div>
              <div class="copd-bb-base-info-item" v-if="symptom">症状:{{symptom}}</div>
              <div class="copd-bb-base-info-item" v-if="followInfo.drugBefore">使用支气管扩张剂前FEV1/FVC(%):{{followInfo.drugBefore}}</div>
              <div class="copd-bb-base-info-item" v-if="followInfo.drugAfter">使用支气管扩张剂后FEV1/FVC(%):{{followInfo.drugAfter}}</div>
            </div>
          </div>
        </template>
        <div class="copd-bb-record-info" v-if="followInfo.isLive!=1">
          <div class="title ki-title ta-title">死亡情况</div>
          <div class="copd-bb-base-content">
            <template v-if="followInfo.isLive!=1">
              <div class="copd-bb-base-info-item" v-if="followInfo.deathTime">死亡时间:{{followInfo.deathTime}}</div>
              <div class="copd-bb-base-info-item" v-if="followInfo.deathReason">死亡原因:{{followInfo.deathReason}}</div>
            </template>
          </div>
        </div>
      </template>
    </div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="dialog = false">关闭</el-button>
    </span>
  </el-dialog>
</div>

+ 300 - 0
component/statistics/CopdServiceRecordPatient/index.js

@ -0,0 +1,300 @@
// 慢阻肺患者档案-服务档案
var template = ''
$.ajax('../../../component/statistics/CopdServiceRecord/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('copd-service-record', {
  template: template,
  props: ['detailInfo'],
  data() {
    return {
      dialog: false,
      loading: false,
      page: 1,
      size: 999,
      idcardTypeName: '',
      followInfo: {},
      events: [
        { date: '2023年' },
        { title: 'Event 1', date: '05-11 17:00:01', description: 'Description for event 1' },
        { date: '2024年', description: 'Description for event 2' },
        { date: '2025年', description: 'Description for event 3' },
        { date: '2026年', description: 'Description for event 4' },
        { title: 'Event 5', date: '2027年', description: 'Description for event 5' }
      ],
      dicName: [
        'jkcopd_back_type',
        'jkcopd_followup_status',
        'jkcopd_symptom',
        'jkcopd_isLive',
        'jkcopd_first_area',
        'jkcopd_first_org_level',
        'jkcopd_marriage',
        'jkcopd_occupation',
        'jkcopd_smoke',
        'jkcopd_drink',
        'jkcopd_archivesStatus',
        'jkcopd_disease_conversion',
        'jkcopd_firstVisitType',
        'jkcopd_educational',
        'idCardType',
        'jkcopd_diagnosticBasis'
      ],
      marriageArr: [],
      backTypeName: '',
      diagnosticBasisName: '',
      marriageName: '',
      symptom: '',
      symptomsArr: [],
      followupArr: [],
      followup: '',
      idCardTypeArr: [],
      firstAreaArr: [],
      firstAreaName: '',
      isLiveArr: [],
      orgLevelArr: [],
      orGlevelName: '',
      occupationArr: [],
      occupation: '',
      smokeArr: [],
      drinkArr: [],
      archivesArr: [],
      diseaseConversion: '',
      conversionArr: [],
      firstVisitTypeArr: [],
      educationalArr: [],
      educational: '',
      nationDict: [],
      nationName: '',
      communityArr: [],
      yearList: [{ label: '全部年份',value: "" }],
      nodeList: [
        { label: '全部节点', value: "" },
        { label: '下转患者', value: 1 },
        { label: '医生接收', value: 2 },
        { label: '居民流转', value: 3 },
        { label: '医生退回', value: 4 },
        { label: '医生随访', value: 5 },
        { label: '档案修改', value: 6 },
        { label: '档案同步', value: 7 },
        { label: '分配患者', value: 8 },
        { label: '添加患者', value: 9 },
      ],
      serviceYear: "",
      customizeYear: [],
      serviceNode: ""
    }
  },
  methods: {
    getNation() {
      var vm = this
      statisticAPI.getNationDict().then(function (res) {
        vm.nationDict = res.data
        vm.nationDict.forEach(function (item) {
          if (item.NATION_CODE == vm.followInfo.nation) {
            vm.nationName = item.NATION_NAME
          }
        })
      })
    },
    setLeftHeights() {
      this.$nextTick(() => {
        this.events.forEach((event, index) => {
          const rightContent = document.getElementById('right-' + index)
          const leftContent = document.getElementById('left-' + index)
          if (rightContent && leftContent) {
            leftContent.style.height = rightContent.offsetHeight + 'px'
          }
        })
      })
    },
    //字典
    getDictByDictName(value) {
      var vm = this
      statisticAPI.getDictByDictName({ name: value }).then(function (res) {
        if (value == 'jkcopd_marriage') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.marriage) {
              vm.marriageName = item.value
            }
          })
        } else if (value == 'jkcopd_smoke') {
          // var vm=this
          // vm.smokeArr=res.list
        } else if (value == 'jkcopd_drink') {
          // var vm=this
          // vm.drinkArr=res.list
        } else if (value == 'jkcopd_first_area') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.firstVisitArea) {
              vm.firstAreaName = item.value
            }
          })
        } else if (value == 'jkcopd_disease_conversion') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.diseaseConversion) {
              vm.diseaseConversion = item.value
            }
          })
        } else if (value == 'jkcopd_firstVisitType') {
          // vm.firstVisitTypeArr=res.list
        } else if (value == 'jkcopd_first_org_level') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.firstVisitOrgLevel) {
              vm.orGlevelName = item.value
            }
          })
        } else if (value == 'jkcopd_followup_status') {
          vm.followupArr = res.list
          vm.followupArr.forEach(function (item) {
            if (item.code == vm.followInfo.status) {
              vm.followup = item.value
            }
          })
        } else if (value == 'idCardType') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.idcardType) {
              vm.idcardTypeName = item.value
            }
          })
        } else if (value == 'jkcopd_occupation') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.occupation) {
              vm.occupation = item.value
            }
          })
        } else if (value == 'jkcopd_educational') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.educational) {
              vm.educational = item.value
            }
          })
        } else if (value == 'jkcopd_symptom') {
          var arr = res.list
          vm.symptomsArr = []
          var symptoms = vm.followInfo.symptom.split(',')
          arr.forEach(function (item) {
            symptoms.forEach(function (v) {
              if (v == item.code) {
                vm.symptomsArr.push(item.value)
              }
            })
          })
          vm.symptom = vm.symptomsArr.join()
        } else if (value == 'jkcopd_diagnosticBasis') {
          var arr = res.list
          arr.forEach(function (item) {
            if (item.code == vm.followInfo.diagnosticBasis) {
              vm.diagnosticBasisName = item.value
            }
          })
        }
      })
    },
    recordBack() {
      this.$emit('back')
      EventBus.$emit('copd-reset-select')
    },
    getDealRecord () {
      var vm = this
      vm.loading = true
      var params = {
        page: vm.page,
        size: vm.size,
        patient: vm.detailInfo.patient,
        type: vm.serviceNode
      }
      if(vm.serviceYear == 'customize'){
        params.startTime = vm.customizeYear[0]
        params.endTime = vm.customizeYear[1]
      }else if(vm.serviceYear != ''){
        params.startTime = vm.serviceYear + "-01-01"
        params.endTime = vm.serviceYear + "-12-31"
      } else{
        params.startTime = ''
        params.endTime = ''
      }
      
      statisticAPI.dealRecordPage(params).then(function (res) {
        res.detailModelList.forEach(function (item, index) {
          var time1 = res.detailModelList[index] && res.detailModelList[index].createTime && res.detailModelList[index].createTime.slice(0, 4)
          var time2 = res.detailModelList[index + 1] && res.detailModelList[index + 1].createTime && res.detailModelList[index + 1].createTime.slice(0, 4)
          if (index == 0) {
            item.flag = 1
          } else if (index != res.detailModelList.length - 1 && time1 == time2) {
            res.detailModelList[index + 1].flag = 0
          } else if (
            res.detailModelList.length - 1 == index &&
            res.detailModelList[index + 1] &&
            res.detailModelList[index + 1].createTime &&
            res.detailModelList[index] &&
            res.detailModelList[index].createTime
          ) {
            if (res.detailModelList[index - 1].createTime.slice(0, 4) == res.detailModelList[index].createTime.slice(0, 4)) {
              res.detailModelList[res.detailModelList.length - 1].flag = 0
            } else {
              res.detailModelList[res.detailModelList.length - 1].flag = 1
            }
          }
        })
        vm.loading = false
        vm.events = res.detailModelList
      })
    },
    showDetail(item) {
      var vm = this
      statisticAPI.followupDetail({ id: item.jkcopdFollowup.id }).then(function (res) {
        vm.followInfo = res.obj
        
        vm.dicName.forEach(function (item) {
          vm.getDictByDictName(item)
        })
        vm.getNation()
        // statisticAPI.getDictByDictName({name:'idCardType'}).then(function(res){
        //   res.list.forEach(function(item){
        //     if(item.code==vm.followInfo.idcardType){
        //       vm.idcardTypeName=item.value
        //     }
        //   })
        // })
        vm.dialog = true
      })
    },
    getYearList() {
      for (var i = 0; i < 6; i++) {
        var year = new Date().getFullYear() - i
        this.yearList.push({ label: year, value: year })
      }
      this.yearList.push({ label: '自定义', value: 'customize' })
    },
    getTypeName(type){
      return this.nodeList.find(function(item){return item.value == type})?.label
    }
  },
  mounted() {
    // this.$nextTick(() => {
    //   this.setLeftHeights();
    // });
    var vm = this
    this.getDealRecord()
    this.getYearList()
  }
})

+ 90 - 85
component/statistics/LascPatient/index.html

@ -1,88 +1,93 @@
<div id="app" class="jtbc">
  <div class="copd-filter-group ui-col-1 bgc-fff" style="min-width: 900px">
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">
        <el-radio v-model="yearType" label="1">乳腺初筛时间:</el-radio>
        <el-date-picker
          style="width: 400px"
          v-model="chooseTime"
          type="daterange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          value-format="yyyy-MM-dd"></el-date-picker>
      </label>
  <template v-if="showTotalTable">
    <div class="copd-filter-group ui-col-1 bgc-fff" style="min-width: 900px">
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">
          <el-radio v-model="yearType" label="1">乳腺初筛时间:</el-radio>
          <el-date-picker
            style="width: 400px"
            v-model="chooseTime"
            type="daterange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            value-format="yyyy-MM-dd"></el-date-picker>
        </label>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14" style="display: flex; align-items: center">
          <el-radio v-model="yearType" label="2">宫颈初筛时间:</el-radio>
          <el-date-picker
            v-model="chooseTime"
            type="daterange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            value-format="yyyy-MM-dd"></el-date-picker>
        </label>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">居民姓名:</label>
        <el-input v-model="form.name" placeholder="请输入居民姓名查询"></el-input>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">数据范围:</label>
        <el-select class="formWidth" v-model="form.range" placeholder="请选择" @change="resetArea">
          <el-option v-for="(option, index) in rangeOptions" :label="option.label" :value="option.value" :key="option.value"></el-option>
        </el-select>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">地区:</label>
        <el-select class="formWidth" v-model="form.area" placeholder="请选择" @change="getHospital">
          <el-option v-for="(option, index) in areaOptions" :label="option.label" :value="option.value" :key="option.value"></el-option>
        </el-select>
      </div>
      <div class="searchDiv pb20 pr20" v-if="form.range == 'hospital'||form.range == 'team'">
        <label class="c-333 c-f14">社区:</label>
        <el-select class="formWidth" v-model="form.hospital" placeholder="请选择" @change="getTeam">
          <el-option v-for="(option, index) in hospitalOptions" :label="option.name" :value="option.code" :key="option.code"></el-option>
        </el-select>
      </div>
      <div class="searchDiv pb20 pr20" v-if="form.range == 'team'">
        <label class="c-333 c-f14">团队:</label>
        <el-select class="formWidth" v-model="form.team" placeholder="请选择">
          <el-option v-for="(option, index) in teamOptions" :label="option.name" :value="option.id" :key="option.id"></el-option>
        </el-select>
      </div>
      <div class="searchDiv pb20">
        <el-button type="primary" size="mini" @click="queryDate">查询</el-button>
        <el-button type="ff9526" size="mini" @click="exportTable" :disabled="exportLoading">导出</el-button>
        <span class="eliminate" @click="eliminateClick">清除筛选条件</span>
        <el-button type="primary" @click="onClickServiceRecord">服务记录</el-button>
      </div>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14" style="display: flex; align-items: center">
        <el-radio v-model="yearType" label="2">宫颈初筛时间:</el-radio>
        <el-date-picker
          v-model="chooseTime"
          type="daterange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          value-format="yyyy-MM-dd"></el-date-picker>
      </label>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">居民姓名:</label>
      <el-input v-model="form.name" placeholder="请输入居民姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">数据范围:</label>
      <el-select class="formWidth" v-model="form.range" placeholder="请选择" @change="resetArea">
        <el-option v-for="(option, index) in rangeOptions" :label="option.label" :value="option.value" :key="option.value"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">地区:</label>
      <el-select class="formWidth" v-model="form.area" placeholder="请选择" @change="getHospital">
        <el-option v-for="(option, index) in areaOptions" :label="option.label" :value="option.value" :key="option.value"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20" v-if="form.range == 'hospital'||form.range == 'team'">
      <label class="c-333 c-f14">社区:</label>
      <el-select class="formWidth" v-model="form.hospital" placeholder="请选择" @change="getTeam">
        <el-option v-for="(option, index) in hospitalOptions" :label="option.name" :value="option.code" :key="option.code"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20" v-if="form.range == 'team'">
      <label class="c-333 c-f14">团队:</label>
      <el-select class="formWidth" v-model="form.team" placeholder="请选择">
        <el-option v-for="(option, index) in teamOptions" :label="option.name" :value="option.id" :key="option.id"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20">
      <el-button type="primary" size="mini" @click="queryDate">查询</el-button>
      <el-button type="ff9526" size="mini" @click="exportTable" :disabled="exportLoading">导出</el-button>
      <span class="eliminate" @click="eliminateClick">清除筛选条件</span>
    </div>
  </div>
  <el-table :data="tableData" style="width: 100%" v-loading="loading">
    <el-table-column type="index" min-width="60" label="序号"></el-table-column>
    <el-table-column :label="item.label" v-for="item in tableHeader" :min-width="item.width" :key="item.prop">
      <template slot-scope="scope">{{scope.row[item.prop]}}</template>
    </el-table-column>
    <el-table-column label="操作" align="center" width="130px">
      <template slot-scope="scope">
        <el-button type="text" @click="openDialog(scope)" :disabled="!scope.row.code">编辑</el-button>
        <el-button type="text" @click="openDialog(scope)" :disabled="!scope.row.code">服务记录</el-button>
        <el-button type="text" @click="openDialog(scope)" :disabled="!scope.row.code">就医记录</el-button>
      </template>
    </el-table-column>
  </el-table>
  <el-pagination
    @current-change="handleCurrentChange"
    @size-change="handleSizeChange"
    :current-page.sync="page"
    :page-size="size"
    :page-sizes="[10, 20, 50]"
    layout="total, sizes, prev, pager, next, jumper"
    :total="total"
    class="pagination"></el-pagination>
  <el-dialog title="编辑" :visible.sync="dialogVisible" width="70%">
    <lasc-modify-patient></lasc-modify-patient>
  </el-dialog>
    <el-table :data="tableData" style="width: 100%" v-loading="loading">
      <el-table-column type="index" min-width="60" label="序号"></el-table-column>
      <el-table-column :label="item.label" v-for="item in tableHeader" :min-width="item.width" :key="item.prop">
        <template slot-scope="scope">{{scope.row[item.prop]}}</template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="130px">
        <template slot-scope="scope">
          <el-button type="text" @click="openDialog(scope)" :disabled="!scope.row.code">编辑</el-button>
          <el-button type="text" @click="onClickServiceRecord(scope)" :disabled="!scope.row.code">服务记录</el-button>
          <el-button type="text" @click="openDialog(scope)" :disabled="!scope.row.code">就医记录</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
      @current-change="handleCurrentChange"
      @size-change="handleSizeChange"
      :current-page.sync="page"
      :page-size="size"
      :page-sizes="[10, 20, 50]"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total"
      class="pagination"></el-pagination>
    <el-dialog title="编辑" :visible.sync="dialogVisible" width="70%">
      <lasc-modify-patient></lasc-modify-patient>
    </el-dialog>
  </template>
  <template v-else-if="serviceRecordVisable">
    <copd-service-record :detailInfo="currentEditData" @back="back"></copd-service-record>
  </template>
</div>

+ 7 - 0
component/statistics/LascPatient/index.js

@ -18,6 +18,8 @@ Vue.component('lasc-patient', {
    return {
      years: [],
      dialogVisible: false,
      showTotalTable: true,
      serviceRecordVisable: false,
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
@ -164,6 +166,11 @@ Vue.component('lasc-patient', {
        vm.loading = false
      })
    },
    onClickServiceRecord(record) {
      // this.currentEditData = record
      this.showTotalTable = false
      this.serviceRecordVisable = true
    },
    queryDate() {
      this.page = 1
      this.getList()

+ 5 - 2
component/statistics/breastCancerPatient/index.js

@ -78,6 +78,7 @@ Vue.component('breast-cancer-patient', {
    }
  },
  methods: {
    toUrl() {},
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
@ -158,9 +159,11 @@ Vue.component('breast-cancer-patient', {
      httpRequest.get('statistics/collaborate/turnDownAnalysis', { data: params }).then(function (res) {
        if (res.status == 200) {
          // vm.tableData = res.detailModelList
          vm.tableData = [{ name: '张三' }]
          vm.tableData = res.detailModelList
          vm.total = res.totalCount
          // vm.tableData = [{ name: '张三' }]
          // vm.total = 1
        }
        vm.loading = false
      })