Pārlūkot izejas kodu

Merge branch 'master' of http://192.168.1.220:10080/raolu/PC-application

hwy 6 dienas atpakaļ
vecāks
revīzija
7347f1cf81

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

@ -1009,5 +1009,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;
}

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

@ -0,0 +1,425 @@
<div class="copd-service-record-box">
  <el-radio-group v-model="changeModule" style="margin-bottom: 20px">
    <el-radio-button label="1" style="margin-right: 0px">基本信息</el-radio-button>
    <el-radio-button label="2" style="margin-right: 0px">乳腺评估信息</el-radio-button>
    <el-radio-button label="3" style="margin-right: 0px">宫颈评估信息</el-radio-button>
  </el-radio-group>
  <div class="service-base-info">
    <div class="base-title ki-title ta-title">{{changeModule == 1 ? '基本信息' : changeModule == 2 ? '乳腺评估信息' : '宫颈评估信息'}}</div>
    <div class="base-content" v-if="changeModule == 1">
      <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>
    <div class="base-content" v-else-if="changeModule == 2">
      <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>
    <div class="base-content" v-else-if="changeModule == 3">
      <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>
  </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" :key="item.value">{{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; margin-top: 20px">
        <div style="width: 180px">服务节点:</div>
        <el-radio-group v-model="serviceNode" @input="getDealRecord" style="display: flex; flex-wrap: wrap">
          <el-radio-button :label="item.value" v-for="item in nodeList" :key="item.value" style="margin-bottom: 15px">{{item.label}}</el-radio-button>
          <div @click="getMore" style="display: flex; align-items: center; color: #409eff; font-size: 16px; cursor: pointer; margin-top: -20px">
            {{moreFlag? '更多':'收起'}}
            <i :class="moreFlag ?'el-icon-arrow-down ': 'el-icon-arrow-up' " style="font-size: 22px; color: #409eff; font-weight: bold; margin-left: 5px"></i>
          </div>
        </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 == 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.hospitalName}}</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.doctorName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 2 ||event.type == 3 ||event.type == 4 ||event.type == 6 || event.type == 13|| event.type == 15">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">{{event.type == 13 || event.type == 15 ? '是否检查' : '是否拒检'}} :</span>
                    <span style="color: #656565">
                      <template>{{event.type == 13 || event.type == 15 ? event.hospitalName : event.hospitalName }}</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.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">检查时间:</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 5 ||event.type == 14|| event.type == 16">
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">{{event.type == 14|| event.type == 16 ? '检查情况' : '是否检查'}} :</span>
                    <span style="color: #656565">
                      <template>{{event.type == 14|| event.type == 16 ? event.hospitalName : event.hospitalName}}</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.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访时间:</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</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.hospitalName}}</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.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访时间:</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</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.hospitalName}}</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.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">随访时间:</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 9">
                  <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.hospitalName}}</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.doctorName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">检查时间:</span>
                    <span style="color: #656565">
                      <template>{{event.doctorName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 10">
                  <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.hospitalName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 11">
                  <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.hospitalName}}</template>
                    </span>
                  </div>
                  <div style="width: 50%">
                    <span style="color: #9fa2a8">检查时间:</span>
                    <span style="color: #656565">
                      <template>{{event.hospitalName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 12">
                  <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.hospitalName}}</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.hospitalName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-cont" v-else-if="event.type == 17">
                  <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.hospitalName}}</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.hospitalName}}</template>
                    </span>
                  </div>
                </div>
                <div class="data-title" style="color: #12b7f5; font-size: 14px; cursor: pointer" @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>

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

@ -0,0 +1,323 @@
// 两癌筛查居民档案-服务记录
var template = ''
$.ajax('../../../component/statistics/CopdServiceRecordPatient/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('Copd-service-record-patient', {
  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 }
      ],
      nodeList2: [
        { label: '社区随访', value: 8 },
        { label: '妇科检查', value: 9 },
        { label: 'HPV', value: 10 },
        { label: '宫颈细胞学检查', value: 11 },
        { label: '初筛结果临床评估', value: 12 },
        { label: '阴道镜检查', value: 13 },
        { label: '阴道镜检查随访', value: 14 },
        { label: '组织病理学检查', value: 15 },
        { label: '组织病理学检查随访', value: 16 },
        { label: '最后诊断', value: 17 }
      ],
      serviceYear: '',
      customizeYear: [],
      serviceNode: '',
      changeModule: 1,
      moreFlag: true
    }
  },
  methods: {
    getMore() {
      this.moreFlag = !this.moreFlag
      if (this.moreFlag) {
        this.nodeList.splice(8, 10)
      } else {
        this.nodeList = [...this.nodeList, ...this.nodeList2]
      }
    },
    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 && vm.detailInfo.patient ? vm.detailInfo.patient : null,
        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();
    // });
    console.log('创建66666')
    var vm = this
    this.getDealRecord()
    this.getYearList()
  }
})

+ 87 - 81
component/statistics/LascPatient/index.html

@ -1,87 +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-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>
  </template>
  <template v-if="serviceRecordVisable">
    <Copd-service-record-patient :detailInfo="currentEditData" @back="back"></Copd-service-record-patient>
  </template>
  <el-dialog title="编辑" :visible.sync="dialogVisible" width="70%">
    <lasc-modify-patient></lasc-modify-patient>
  </el-dialog>

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

@ -17,7 +17,10 @@ Vue.component('lasc-patient', {
  data: function () {
    return {
      years: [],
      currentEditData: {},
      dialogVisible: false,
      showTotalTable: true,
      serviceRecordVisable: false,
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
@ -140,6 +143,11 @@ Vue.component('lasc-patient', {
        delete this.form.team
      }
    },
    back() {
      var vm = this
      vm.showTotalTable = true
      vm.serviceRecordVisable = false
    },
    getList() {
      var vm = this
      this.loading = true
@ -166,6 +174,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()

+ 4 - 0
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) {
@ -160,6 +161,9 @@ Vue.component('breast-cancer-patient', {
        if (res.status == 200) {
          vm.tableData = res.detailModelList
          vm.total = res.totalCount
          // vm.tableData = [{ name: '张三' }]
          // vm.total = 1
        }
        vm.loading = false
      })