Browse Source

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

hd 3 tháng trước cách đây
mục cha
commit
0677cdaf91

+ 13 - 13
app/jbsc/html/view_screening_results.html

@ -435,14 +435,14 @@
            </div>
            </div>
            <div class="daan-list" v-if="item.type =='radio'">
            <div class="daan-list" v-if="item.type =='radio'">
              <label class="label-block" v-if="answer[item.field]">
              <label class="label-block" v-if="answer[item.field]">
                <input type="radio" readonly="readonly"  checked="checked" value="1" />
                <input type="radio" readonly="readonly" checked="checked" value="1" />
                <i></i>
                <i></i>
                <span v-text="answer[item.field]"></span>
                <span v-text="answer[item.field]"></span>
              </label>
              </label>
            </div>
            </div>
            <div class="daan-list" v-if="item.type =='checkbox'">
            <div class="daan-list" v-if="item.type =='checkbox'">
              <label class="label-block" v-for="el in answer[item.field]">
              <label class="label-block" v-for="el in answer[item.field]">
                <input type="radio" readonly="readonly"  checked="checked" value="1" />
                <input type="radio" readonly="readonly" checked="checked" value="1" />
                <i></i>
                <i></i>
                <span v-text="el"></span>
                <span v-text="el"></span>
              </label>
              </label>
@ -520,7 +520,7 @@
          </div>
          </div>
        </div>
        </div>
      </div>
      </div>
      <template v-if="docInfo.level=='2'&&!userInfo.survey_status&&!showOpt">
      <template v-if="docInfo.level=='2'&&!userInfo.survey_status&&!showOpt&&btnHide!=1">
        <div class="clear-bottom" v-if="!isView || userInfo.is_danger==1">
        <div class="clear-bottom" v-if="!isView || userInfo.is_danger==1">
          <div class="btn-group-bottom flex-box">
          <div class="btn-group-bottom flex-box">
            <button class="btn bgc-2DBE55" @click="jkjy" v-if="result.doctorOtherAdvice || result.doctorAdvice">健康教育</button>
            <button class="btn bgc-2DBE55" @click="jkjy" v-if="result.doctorOtherAdvice || result.doctorAdvice">健康教育</button>
@ -540,14 +540,14 @@
      </template>
      </template>
      <!-- 专科 已管理 待处理 已预约 已接诊-->
      <!-- 专科 已管理 待处理 已预约 已接诊-->
      <template
      <template
        v-if="docInfo.level=='1'&&(userInfo.survey_status == 1||(userInfo.following == 0 && (userInfo.isOrder == 0 || userInfo.is_order == 0))||(userInfo.isOrder == 1 || userInfo.is_order == 1)||(userInfo.isOrder == 2 || userInfo.is_order == 2))&&!showOpt">
        v-if="docInfo.level=='1'&&(userInfo.survey_status == 1||(userInfo.following == 0 && (userInfo.isOrder == 0 || userInfo.is_order == 0))||(userInfo.isOrder == 1 || userInfo.is_order == 1)||(userInfo.isOrder == 2 || userInfo.is_order == 2))&&!showOpt&&btnHide!=1">
        <div class="clear-bottom">
        <div class="clear-bottom">
          <div class="btn-group-bottom flex-box">
          <div class="btn-group-bottom flex-box">
            <button class="btn bgc-12b7f5" @click="lianxijiayi">联系家医</button>
            <button class="btn bgc-12b7f5" @click="lianxijiayi">联系家医</button>
          </div>
          </div>
        </div>
        </div>
      </template>
      </template>
      <template v-if="docInfo.level=='2'&&!showOpt">
      <template v-if="docInfo.level=='2'&&!showOpt&&btnHide!=1">
        <div
        <div
          class="clear-bottom"
          class="clear-bottom"
          v-if="!userInfo.survey_status&&userInfo.screen_result_score==-1&&(userInfo.isDanger == 1 || userInfo.is_danger == 1)&&(userInfo.following == 0 && (userInfo.isOrder == 0 || userInfo.is_order == 0))">
          v-if="!userInfo.survey_status&&userInfo.screen_result_score==-1&&(userInfo.isDanger == 1 || userInfo.is_danger == 1)&&(userInfo.following == 0 && (userInfo.isOrder == 0 || userInfo.is_order == 0))">
@ -616,6 +616,7 @@
          noTiZhong: true,
          noTiZhong: true,
          doctorInfo: { code: wlyyAgent.uid },
          doctorInfo: { code: wlyyAgent.uid },
          resultCode: httpData['resultCode'],
          resultCode: httpData['resultCode'],
          btnHide: httpData['btnHide'],
          isView: httpData['isView'] || false,
          isView: httpData['isView'] || false,
          dealAction: [],
          dealAction: [],
          getScreenData: '',
          getScreenData: '',
@ -625,7 +626,7 @@
          jiayiShow: false,
          jiayiShow: false,
          showOpt: httpData['opt'],
          showOpt: httpData['opt'],
          messageVisible: false,
          messageVisible: false,
          messInfo: "",
          messInfo: '',
          questionList: [],
          questionList: [],
          dictData: [
          dictData: [
            {
            {
@ -645,14 +646,14 @@
              field: 'ksDrugName1'
              field: 'ksDrugName1'
            }
            }
          ],
          ],
          surveyCode: ""
          surveyCode: ''
        },
        },
        mounted: function () {
        mounted: function () {
          var vm = this
          var vm = this
          this.getDictData()
          this.getDictData()
          setTimeout(function(){
          setTimeout(function () {
            vm.getScreenResultDetail()
            vm.getScreenResultDetail()
          },200)
          }, 200)
          this.getDoctorInfo()
          this.getDoctorInfo()
        },
        },
        methods: {
        methods: {
@ -747,7 +748,7 @@
            this.questionList = questionList
            this.questionList = questionList
            var vm = this
            var vm = this
            this.dictData.forEach(function (item) {
            this.dictData.forEach(function (item) {
              jbscAPI.getDictDataByName(item.name).then(function(res){
              jbscAPI.getDictDataByName(item.name).then(function (res) {
                var index = vm.questionList.findIndex(function (el) {
                var index = vm.questionList.findIndex(function (el) {
                  return el.field == item.field
                  return el.field == item.field
                })
                })
@ -773,7 +774,7 @@
              if (res.status == 200) {
              if (res.status == 200) {
                var data = res.data
                var data = res.data
                vm.surveyCode = data.info.template_code
                vm.surveyCode = data.info.template_code
                
                vm.getScreenData = res.data
                vm.getScreenData = res.data
                data && ((vm.answer = data.answer), (vm.userInfo = data.info), (vm.result = data.result))
                data && ((vm.answer = data.answer), (vm.userInfo = data.info), (vm.result = data.result))
                data && data.info && data.info.code && vm.getHealth()
                data && data.info && data.info.code && vm.getHealth()
@ -865,7 +866,6 @@
                      vm.answer[item.field] = answer
                      vm.answer[item.field] = answer
                    }
                    }
                  })
                  })
                  
                }
                }
              } else {
              } else {
                top.layer.msg(res.msg, { icon: 5 })
                top.layer.msg(res.msg, { icon: 5 })
@ -950,7 +950,7 @@
          },
          },
          openMessageDialog() {
          openMessageDialog() {
            var vm = this
            var vm = this
            jbscAPI.getSurveyMessage({ surveyResultCode: this.userInfo.code }).then(function(res){
            jbscAPI.getSurveyMessage({ surveyResultCode: this.userInfo.code }).then(function (res) {
              vm.messageVisible = true
              vm.messageVisible = true
              vm.messInfo = res.data
              vm.messInfo = res.data
            })
            })

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

@ -930,7 +930,7 @@
    <script type="text/javascript" src="../../../api/sign_api.js"></script>
    <script type="text/javascript" src="../../../api/sign_api.js"></script>
    <script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/comprehensive-query.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/comprehensive-query.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" src="../../../api/rehabilitation-api.js"></script>
    <script src="../js/mzfWorksheet.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/mzfWorksheet.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/mzfWatches.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/mzfWatches.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/mzfHzcx.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/mzfHzcx.js" type="text/javascript" charset="utf-8"></script>

+ 20 - 16
component/common/jtbc.css

@ -166,6 +166,10 @@
  border-radius: 50%;
  border-radius: 50%;
  margin-right: 16px;
  margin-right: 16px;
}
}
.scollY {
  max-height: 500px;
  overflow-y: scroll;
}
.year-item {
.year-item {
  margin: 0 20px;
  margin: 0 20px;
  position: relative;
  position: relative;
@ -197,7 +201,7 @@
  padding: 10px 0;
  padding: 10px 0;
  position: relative;
  position: relative;
}
}
.year-item::after{
.year-item::after {
  content: '';
  content: '';
  width: 1px;
  width: 1px;
  height: calc(100% - 28px);
  height: calc(100% - 28px);
@ -217,27 +221,27 @@
  margin-left: 16px;
  margin-left: 16px;
  width: 590px;
  width: 590px;
}
}
.record-detail-item .risk{
.record-detail-item .risk {
  font-size: 16px;
  font-size: 16px;
  margin-bottom: 4px;
  margin-bottom: 4px;
}
}
.between{
.between {
  display: flex;
  display: flex;
  justify-content: space-between;
  justify-content: space-between;
}
}
.service-item{
.service-item {
  background: #f3f3f3;
  background: #f3f3f3;
  padding: 14px;
  padding: 14px;
  border-radius: 6px;
  border-radius: 6px;
  margin-bottom: 10px;
  margin-bottom: 10px;
}
}
.sf-box{
.sf-box {
  margin-top: 10px;
  margin-top: 10px;
  border-top: 1px solid rgba(0, 0, 0, 0.1);
  border-top: 1px solid rgba(0, 0, 0, 0.1);
  position: relative;
  position: relative;
}
}
.sf-box::before{
.sf-box::before {
  position: absolute;
  position: absolute;
  content: '';
  content: '';
  display: block;
  display: block;
@ -247,38 +251,38 @@
  left: 114px;
  left: 114px;
  top: 26px;
  top: 26px;
}
}
.c-409eff{
.c-409eff {
  color: #409eff;
  color: #409eff;
  font-size: 16px;
  font-size: 16px;
}
}
.c-ff6600{
.c-ff6600 {
  color: #ff6600;
  color: #ff6600;
}
}
.complete-situation{
.complete-situation {
  width: 130px;
  width: 130px;
}
}
.sf-item{
.sf-item {
  display: flex;
  display: flex;
  align-items: center;
  align-items: center;
  padding: 10px 0;
  padding: 10px 0;
}
}
.sf-time{
.sf-time {
  width: 110px;
  width: 110px;
}
}
.sf-doctor{
.sf-doctor {
  width: 100px;
  width: 100px;
  text-align: center;
  text-align: center;
}
}
.sf-hospital{
.sf-hospital {
  width: 320px;
  width: 320px;
}
}
.sf-status{
.sf-status {
  width: 100px;
  width: 100px;
}
}
.bottom-box{
.bottom-box {
  display: flex;
  display: flex;
  justify-content: center;
  justify-content: center;
  padding-top: 10px;
  padding-top: 10px;
  margin-top: 10px;
  margin-top: 10px;
  border-top: 1px solid rgba(0, 0, 0, 0.1);
  border-top: 1px solid rgba(0, 0, 0, 0.1);
}
}

+ 65 - 13
component/statistics/GxbManage/index.html

@ -52,19 +52,71 @@
      <span class="eliminate" @click="eliminateClick">清除筛选条件</span>
      <span class="eliminate" @click="eliminateClick">清除筛选条件</span>
    </div>
    </div>
  </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" :render-header="renderHeader">
      <template slot-scope="scope">{{scope.row[item.prop]}}</template>
  <el-table :data="tableData" style="width: 100%" v-loading="loading" row-key="code" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <!-- <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"><span @click="gotoDetail(scope.row,item.prop)">{{scope.row[item.prop]}}</span></template>
    </el-table-column>
    </el-table-column>
  </el-table>
  </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="mzDialogVisible" width="80%">
    <div class="copd-filter-group ui-col-1 bgc-fff">
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">居民姓名:</label>
        <el-input v-model="mzForm.doctorOne" placeholder="请输入居民姓名查询"></el-input>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">手机号码:</label>
        <el-input v-model="mzForm.doctorOne" placeholder="请输入手机号码查询"></el-input>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">签约医院:</label>
        <el-input v-model="mzForm.doctorOne" placeholder="请输入签约医院查询"></el-input>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">签约医生:</label>
        <el-input v-model="mzForm.doctorOne" placeholder="请输入医生姓名查询"></el-input>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">性别:</label>
        <el-select class="formWidth" v-model="mzForm.sex" placeholder="请选择" @change="getTeam">
          <el-option label="全部" value=""></el-option>
          <el-option label="男" value="1"></el-option>
          <el-option label="女" value="2"></el-option>
        </el-select>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">数据范围:区</label>
      </div>
      <div class="searchDiv pb20 pr20">
        <label class="c-333 c-f14">地区:思明区</label>
      </div>
      <div class="searchDiv pb20 pr20" v-if="form.range == 'hospital'||form.range == 'team'">
        <label class="c-333 c-f14">社区:</label>
      </div>
      <div class="searchDiv pb20 pr20" v-if="form.range == 'team'">
        <label class="c-333 c-f14">团队:</label>
      </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 v-loading="loadingTwo" border :data="dataInfo" style="width: 100%" height="500">
      <el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
      <el-table-column :label="item.label" v-for="item in mzTableHeader" align="center" :key="item.prop">
        <template slot-scope="scope"><span @click="gotoDetail(scope.row,item.prop)">{{scope.row[item.prop]}}</span></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"
      style="text-align: right"></el-pagination>
  </el-dialog>
</div>
</div>

+ 85 - 14
component/statistics/GxbManage/index.js

@ -41,23 +41,42 @@ Vue.component('gxb-manage', {
      loading: false,
      loading: false,
      exportLoading: false,
      exportLoading: false,
      tableData: [],
      tableData: [],
      tableHeader: [
        { label: '名称', prop: 'name', width: '100' },
      constantHeader: [
        { label: '已评估人数', prop: 'totalNum', width: '90' },
        { label: '已评估人数', prop: 'totalNum', width: '90' },
        { label: '已上转人数', prop: 'turnUpNum', width: '90' },
        { label: '已上转人数', prop: 'turnUpNum', width: '90' },
        { label: '上转转门诊', prop: 'mzNum', width: '110' },
        { label: '上转转门诊', prop: 'mzNum', width: '110' },
        { label: '门诊转住院', prop: 'zyNum', width: '110' },
        { label: '门诊转住院', prop: 'zyNum', width: '110' },
        { label: '下转管理人数', prop: 'turnDownNum', width: '110' },
        { label: '下转管理人数', prop: 'turnDownNum', width: '110' },
        { label: '评估已登记随访', prop: 'followUpNum', width: '110' },
        { label: '随访已达标', prop: 'standardNum', width: '110' }
        { label: '评估已登记随访', prop: 'followUpNum', width: '110' }
        // { label: '随访已达标', prop: 'standardNum', width: '110' }
      ],
      mzTableHeader: [
        { label: '姓名', prop: 'totalNum', width: '90' },
        { label: '性别', prop: 'turnUpNum', width: '90' },
        { label: '年龄', prop: 'totalNum', width: '90' },
        { label: '手机号', prop: 'turnUpNum', width: '90' },
        { label: '证件号码', prop: 'totalNum', width: '90' },
        { label: '社区医院', prop: 'turnUpNum', width: '90' },
        { label: '签约医生', prop: 'totalNum', width: '90' },
        { label: '最近一次上传时间', prop: 'turnUpNum', width: '90' },
        { label: '最近一次上转科室', prop: 'totalNum', width: '90' },
        { label: '最近一次门诊下转时间', prop: 'totalNum', width: '90' },
        { label: '最近一次门诊下转诊断', prop: 'totalNum', width: '90' }
      ],
      ],
      page: 1,
      page: 1,
      size: 10,
      size: 10,
      total: 0,
      total: 0,
      level: 0
      level: 0,
      mzDialogVisible: true,
      mzForm: {
        sex: ''
      }
    }
    }
  },
  },
  methods: {
  methods: {
    gotoDetail(row, column) {
      console.log(row, 'lllllllllllllllllllllllll', column)
    },
    init() {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
      if (selectedRole.code.indexOf('350200') > -1) {
@ -118,13 +137,49 @@ Vue.component('gxb-manage', {
        delete this.form.team
        delete this.form.team
      }
      }
    },
    },
    load(row, treeNode, resolve) {
      var params = {}
      var len = row.code.length
      if (len == 6) {
        params.range = 'hospital'
        params.area = row.code
      } else if (len == 10) {
        params.range = 'team'
        params.hospital = row.code
      }
      if (this.yearType == '1') {
        params.startDate = this.chooseYear + '-01-01'
        params.endDate = this.chooseYear + '-12-31'
      } else {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0]
          params.endDate = this.chooseTime[1]
        }
      }
      httpRequest.get('statistics/collaborate/gxbScreenClosedLoop', { data: params }).then(function (res) {
        if (res.status == 200) {
          var children = res.detailModelList.map(function (item) {
            var data = JSON.parse(JSON.stringify(item))
            if (len == 6) {
              data.areaCode = row.code
              data.hospital = item.name
              data.hasChildren = true
            } else if (len == 10) {
              data.hospitalCode = row.code
              data.team = item.name
            }
            return data
          })
          resolve(children)
        }
      })
    },
    getList() {
    getList() {
      var vm = this
      var vm = this
      this.loading = true
      this.loading = true
      var params = {
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
        ...this.form
      }
      }
      if (this.yearType == '1') {
      if (this.yearType == '1') {
        params.startDate = this.chooseYear + '-01-01'
        params.startDate = this.chooseYear + '-01-01'
@ -132,15 +187,31 @@ Vue.component('gxb-manage', {
      } else {
      } else {
        if (this.chooseTime) {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0]
          params.startDate = this.chooseTime[0]
          params.endDate = this.chooseTime[1] 
          params.endDate = this.chooseTime[1]
        }
        }
      }
      }
      if (this.form.range == 'town') {
        this.tableHeader = getTownHeader().concat(this.constantHeader)
      } else if (this.form.range == 'hospital') {
        this.tableHeader = getHospitalHeader().concat(this.constantHeader)
      } else {
        this.tableHeader = getTeamHeader().concat(this.constantHeader)
      }
      httpRequest.get('statistics/collaborate/gxbScreenClosedLoop', { data: params }).then(function (res) {
      httpRequest.get('statistics/collaborate/gxbScreenClosedLoop', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.detailModelList
          vm.total = res.totalCount
        }
        vm.tableData = res.detailModelList.map(function (item) {
          var data = JSON.parse(JSON.stringify(item))
          if (vm.form.range == 'town') {
            data.town = item.name
            data.hasChildren = true
          } else if (vm.form.range == 'hospital') {
            data.hospital = item.name
            data.hasChildren = true
          } else if (vm.form.range == 'team') {
            data.team = item.name
          }
          return data
        })
        console.log('1111111111111111', vm.tableData)
        vm.loading = false
        vm.loading = false
      })
      })
    },
    },

+ 49 - 63
component/statistics/PersonInfo/index.html

@ -1,20 +1,20 @@
<!-- 样式写在component/common/jtbc.css里 -->
<!-- 样式写在component/common/jtbc.css里 -->
<el-dialog :visible.sync="visible" title="黄小蕾个案详情" @close="closeDialog" width="800px">
<el-dialog :visible.sync="visible" title="黄小蕾个案详情" @close="closeDialog" width="800px">
  <div class="patient-box">
  <div class="patient-box">
    <img src="../../../images/d-default.png" alt="" class="info-avatar" />
    <img :src="setImg(patientInfo.photo)" alt="" class="info-avatar" />
    <div>
    <div>
      <div style="margin-bottom: 6px">
      <div style="margin-bottom: 6px">
        黄小蕾 女 45岁 350***109
        <el-button type="primary" size="mini" @click="copyToClipboard('123456789')">复制证件号码</el-button>
        {{patientInfo.name}} {{patientInfo.sex}} {{patientInfo.age}}岁 {{patientInfo.idcard}}
        <el-button type="primary" size="mini" @click="copyToClipboard(patientInfo.idcard)">复制证件号码</el-button>
      </div>
      </div>
      <div>
        <el-tag size="medium" style="margin-right: 4px">高血压</el-tag>
        <el-tag size="medium" style="margin-right: 4px">高血压</el-tag>
      <div v-if="patientInfo.label">
        <el-tag size="medium" style="margin-right: 4px" v-for="(item,index) in patientInfo&&patientInfo.label&&patientInfo.label.split(',')" :key="index">{{item}}</el-tag>
        <!-- <el-tag size="medium" style="margin-right: 4px">高血压</el-tag> -->
      </div>
      </div>
    </div>
    </div>
  </div>
  </div>
  <el-tabs v-model="type" type="card" v-if="!rehabilitationDetailVisible">
    <el-tab-pane label="评估" name="1">
  <el-tabs v-model="type" type="card" v-if="!rehabilitationDetailVisible" v-loading="loading" @tab-click="handleClick">
    <el-tab-pane label="评估" name="1" class="scollY">
      <div class="year-item" v-for="item in assessment">
      <div class="year-item" v-for="item in assessment">
        <div class="year">
        <div class="year">
          <div class="time-label">{{item.year}}</div>
          <div class="time-label">{{item.year}}</div>
@ -29,16 +29,16 @@
            <div class="time-circle"></div>
            <div class="time-circle"></div>
            <div class="record-detail-item">
            <div class="record-detail-item">
              <div>
              <div>
                <div class="risk">{{el.risk}}</div>
                <div>评估医生:{{el.doctor}} &ensp; 评估状态:{{el.status}}</div>
                <div class="risk">{{el.screenResult}}</div>
                <div>评估医生:{{el.doctorName}} &ensp; 评估状态:{{el.status}}</div>
              </div>
              </div>
              <el-button type="primary" size="medium">评估详情</el-button>
              <el-button type="primary" size="medium" @click="goAssessment(el.code)">评估详情</el-button>
            </div>
            </div>
          </div>
          </div>
        </div>
        </div>
      </div>
      </div>
    </el-tab-pane>
    </el-tab-pane>
    <el-tab-pane label="上转" name="2">
    <el-tab-pane label="上转" name="2" class="scollY">
      <div class="year-item" v-for="item in turnup">
      <div class="year-item" v-for="item in turnup">
        <div class="year">
        <div class="year">
          <div class="time-label">{{item.year}}</div>
          <div class="time-label">{{item.year}}</div>
@ -53,15 +53,15 @@
            <div class="time-circle"></div>
            <div class="time-circle"></div>
            <div class="record-detail-item">
            <div class="record-detail-item">
              <div>
              <div>
                <div class="risk">{{el.hospital}}</div>
                <div>预约科室:{{el.dept}} &ensp; 预约医生:{{el.doctor}}</div>
                <div class="risk">{{el.orgName}}</div>
                <div>预约科室:{{el.deptName}} &ensp; 预约医生:{{el.doctorName}}</div>
              </div>
              </div>
            </div>
            </div>
          </div>
          </div>
        </div>
        </div>
      </div>
      </div>
    </el-tab-pane>
    </el-tab-pane>
    <el-tab-pane label="就诊" name="3">
    <el-tab-pane label="就诊" name="3" class="scollY">
      <div class="year-item" v-for="item in jzList">
      <div class="year-item" v-for="item in jzList">
        <div class="year">
        <div class="year">
          <div class="time-label">{{item.year}}</div>
          <div class="time-label">{{item.year}}</div>
@ -77,17 +77,17 @@
            <div class="record-detail-item">
            <div class="record-detail-item">
              <div>
              <div>
                <div class="risk">
                <div class="risk">
                  {{el.hospital}}
                  <el-tag size="small" style="margin-left: 6px">{{el.type}}</el-tag>
                  {{el.orgName}}
                  <el-tag size="small" style="margin-left: 6px">{{el.outpatientType==1?'门诊':'住院'}}</el-tag>
                </div>
                </div>
                <div>预约科室:{{el.dept}} &ensp; 诊断名称:{{el.diagnostic}}</div>
                <div>预约科室:{{el.outpatientDeptName}} &ensp; 诊断名称:{{el.icd10Name}}</div>
              </div>
              </div>
            </div>
            </div>
          </div>
          </div>
        </div>
        </div>
      </div>
      </div>
    </el-tab-pane>
    </el-tab-pane>
    <el-tab-pane label="下转" name="4">
    <el-tab-pane label="下转" name="4" class="scollY">
      <div class="year-item" v-for="item in turnDown">
      <div class="year-item" v-for="item in turnDown">
        <div class="year">
        <div class="year">
          <div class="time-label">{{item.year}}</div>
          <div class="time-label">{{item.year}}</div>
@ -103,21 +103,21 @@
            <div class="record-detail-item">
            <div class="record-detail-item">
              <div>
              <div>
                <div class="risk">
                <div class="risk">
                  {{el.hospital}}
                  <el-tag size="small" style="margin-left: 6px">{{el.type}}</el-tag>
                  {{el.hospitalName}}
                  <el-tag size="small" style="margin-left: 6px">{{el.eventType}}</el-tag>
                </div>
                </div>
                <div>接收社区医院:{{el.community}}</div>
                <div>接收社区医院:{{el.orgName}}</div>
              </div>
              </div>
              <div>
              <div>
                <div>下转医生:{{el.doctor}}</div>
                <div>接收医生:{{el.receiveDoc}}</div>
                <div>下转医生:{{el.hospitalDoctor}}</div>
                <div>接收医生:{{el.doctorName}}</div>
              </div>
              </div>
            </div>
            </div>
          </div>
          </div>
        </div>
        </div>
      </div>
      </div>
    </el-tab-pane>
    </el-tab-pane>
    <el-tab-pane label="康复计划" name="5">
    <el-tab-pane label="康复计划" name="5" class="scollY">
      <div class="year-item" v-for="item in rehabilitation">
      <div class="year-item" v-for="item in rehabilitation">
        <div class="year">
        <div class="year">
          <div class="time-label">{{item.year}}</div>
          <div class="time-label">{{item.year}}</div>
@ -133,10 +133,10 @@
            <div class="record-detail-item" style="cursor: pointer" @click="toRehabilitationDetail(el)">
            <div class="record-detail-item" style="cursor: pointer" @click="toRehabilitationDetail(el)">
              <div>
              <div>
                <div class="risk">
                <div class="risk">
                  {{el.hospital}}
                  <el-tag size="small" style="margin-left: 6px">{{el.type}}</el-tag>
                  {{el.hospitalName}}
                  <el-tag size="small" style="margin-left: 6px">{{el.eventType}}</el-tag>
                </div>
                </div>
                <div>接收社区医院:{{el.community}} &ensp;接收医生:{{el.receiveDoc}}</div>
                <div>接收社区医院:{{el.orgName}} &ensp;接收医生:{{el.doctorName}}</div>
              </div>
              </div>
              <i class="el-icon-arrow-right"></i>
              <i class="el-icon-arrow-right"></i>
            </div>
            </div>
@ -147,61 +147,47 @@
  </el-tabs>
  </el-tabs>
  <div v-else>
  <div v-else>
    <div class="between" style="margin-bottom: 10px">
    <div class="between" style="margin-bottom: 10px">
      <span>厦门大学附属心血管医院</span>
      <span>2024-12-17</span>
      <span>{{currentPlan.hospitalName}}</span>
      <span>{{currentPlan.createTime.substring(0,10)}}</span>
    </div>
    </div>
    <div class="service-item">
    <div class="service-item">
      <div class="between">
      <div class="between">
        <div class="c-409eff">康复随访</div>
        <div class="c-409eff">康复随访</div>
        <div class="complete-situation">
        <div class="complete-situation" v-if="sfList.lenght">
          完成情况:
          完成情况:
          <span class="c-ff6600">2/4</span>
          <span class="c-ff6600">{{sfNumObj.compeletTotal}}/{{sfNumObj.total}}</span>
        </div>
        </div>
      </div>
      </div>
      <div class="sf-box">
      <div class="sf-box">
        <div class="sf-item" v-for="item in sfList">
        <div class="sf-item" v-for="(item,index) in sfList" :key="index">
          <div class="sf-time">
          <div class="sf-time">
            <div>{{item.date}}</div>
            <div>{{item.time}}</div>
            <div>{{item.create_time.substring(0,10)}}</div>
            <div>{{item.create_time.substring(11)}}</div>
          </div>
          </div>
          <div class="time-circle"></div>
          <div class="time-circle"></div>
          <div class="sf-doctor">{{item.doctor}}</div>
          <div class="sf-hospital">{{item.hospital}}</div>
          <div class="sf-status">{{item.status == '1'?'已完成':'未完成'}}</div>
          <el-button type="primary" @click="toDetail" size="mini">查看详情</el-button>
          <div class="sf-doctor">{{item.doctor_name}}</div>
          <div class="sf-hospital">{{item.hospital_name}}</div>
          <div class="sf-status">{{item.status == '0'?'未完成':'已完成'}}</div>
          <el-button type="primary" @click="toDetail(item)" size="mini" v-if="item.status == '1'">查看详情</el-button>
        </div>
        </div>
      </div>
      </div>
    </div>
    </div>
    <div class="service-item between">
      <div class="c-409eff">电话/短信关怀</div>
    <div class="service-item between" v-for="(item,index) in PlanDetailItems" :key="index">
      <div class="c-409eff">{{item.name}}</div>
      <div class="complete-situation">
      <div class="complete-situation">
        完成情况:
        完成情况:
        <span class="c-ff6600">1/1</span>
      </div>
    </div>
    <div class="service-item between">
      <div class="c-409eff">康复咨询</div>
      <div class="complete-situation">
        完成情况:
        <span class="c-ff6600">123次</span>
      </div>
    </div>
    <div class="service-item between">
      <div class="c-409eff">健康监测</div>
      <div class="complete-situation">
        完成情况:
        <span class="c-ff6600">123次</span>
      </div>
    </div>
    <div class="service-item between">
      <div class="c-409eff">康复复诊</div>
      <div class="complete-situation">
        完成情况:
        <span class="c-ff6600">1/1</span>
        <span class="c-ff6600" v-if="item.code!=2&&item.code!=3">{{item.compeletTotal}}/{{item.total}}</span>
        <span class="c-ff6600" v-else>{{item.compeletTotal}}次</span>
      </div>
      </div>
    </div>
    </div>
    <div class="bottom-box">
    <div class="bottom-box">
      <el-button @click="back" type="primary">返回康复计划</el-button>
      <el-button @click="back" type="primary">返回康复计划</el-button>
    </div>
    </div>
  </div>
  </div>
  <el-dialog title="消息提醒" :visible.sync="messageVisible" @close="closeMessageDialog" width="540px">
    <div v-html="messInfo"></div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="messageVisible = false">取消</el-button>
    </span>
  </el-dialog>
</el-dialog>
</el-dialog>

+ 178 - 165
component/statistics/PersonInfo/index.js

@ -16,170 +16,119 @@ Vue.component('person-info', {
  props: [],
  props: [],
  data: function () {
  data: function () {
    return {
    return {
      visible: false,
      visible: true,
      code: '0fab4dd67e074e16ac86db6b6c15233e',
      loading: false,
      type: '1',
      type: '1',
      assessment: [
        {
          year: '2024',
          children: [
            {
              date: '12-17',
              time: '16:09:18',
              risk: '高危',
              doctor: '黄琴',
              status: '住院补筛'
            },
            {
              date: '11-17',
              time: '16:09:18',
              risk: '高危',
              doctor: '黄琴',
              status: '已提醒'
            },
            {
              date: '10-17',
              time: '16:09:18',
              risk: '中危',
              doctor: '黄琴',
              status: '已管理'
            }
          ]
        }
      ],
      turnup: [
        {
          year: '2024',
          children: [
            {
              date: '12-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心血管医院',
              doctor: '陈晓卿'
            },
            {
              date: '11-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心血管医院',
              doctor: '陈晓卿'
            },
            {
              date: '10-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心血管医院',
              doctor: '陈晓卿'
            }
          ]
        }
      ],
      jzList: [
        {
          year: '2024',
          children: [
            {
              date: '12-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心内科门诊',
              diagnostic: '胸闷',
              type: '门诊'
            },
            {
              date: '11-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心内科门诊',
              diagnostic: '冠状动脉粥样硬化性心脏病',
              type: '住院'
            },
            {
              date: '10-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              dept: '心内科门诊',
              diagnostic: '胸闷',
              type: '门诊'
            }
          ]
        }
      ],
      turnDown: [
        {
          year: '2024',
          children: [
            {
              date: '12-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              doctor: '黄琴',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '住院'
            },
            {
              date: '11-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              doctor: '黄琴',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '门诊'
            },
            {
              date: '10-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              doctor: '黄琴',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '门诊'
            }
          ]
        }
      ],
      rehabilitation: [
        {
          year: '2024',
          children: [
            {
              date: '12-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '门诊'
            },
            {
              date: '11-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '门诊'
            },
            {
              date: '10-17',
              time: '16:09:18',
              hospital: '厦门大学附属心血管医院',
              community: '思明区中华街道社区卫生服务中心',
              receiveDoc: '陈晓卿',
              type: '门诊'
            }
          ]
        }
      ],
      patientInfo: {},
      assessment: [],
      turnup: [],
      jzList: [],
      turnDown: [],
      rehabilitation: [],
      tabListName: ['assessment', 'turnup', 'jzList', 'turnDown', 'rehabilitation'],
      rehabilitationDetailVisible: false,
      rehabilitationDetailVisible: false,
      sfList: [
        { doctor: '黄琴', date: '2024-12-19', time: '14:12:16', hospital: '思明区中华街道社区卫生服务中心', status: '0' },
        { doctor: '黄琴', date: '2024-12-19', time: '14:12:16', hospital: '思明区中华街道社区卫生服务中心', status: '0' },
        { doctor: '黄琴', date: '2024-12-19', time: '14:12:16', hospital: '思明区中华街道社区卫生服务中心', status: '1' },
        { doctor: '黄琴', date: '2024-12-19', time: '14:12:16', hospital: '思明区中华街道社区卫生服务中心', status: '1' }
      ]
      sfList: [],
      currentPlan: {},
      sfNumObj: {},
      PlanDetailItems: [],
      service: {},
      messageVisible: false,
      messInfo: ''
    }
    }
  },
  },
  mounted() {
    this.getPatientInfo()
    this.getPatientDetailList(1)
  },
  methods: {
  methods: {
    setImg(str) {
      return httpRequest.getImgUrl(str)
    },
    getPatientInfo() {
      var vm = this
      httpRequest.get('statistics/collaborate/patientDetailInfo', { data: { code: vm.code } }).then(function (res) {
        vm.patientInfo = res.data
      })
    },
    goAssessment(code) {
      top.layer.open({
        type: 2,
        //				  offset: ['100px'], //右下角弹出
        area: ['568px', '80%'],
        shade: 0.5,
        title: '查看筛选结果',
        fixed: true, //不固定
        maxmin: true,
        closeBtn: 1,
        shift: 5,
        shadeClose: false, //点击遮罩关闭层
        content: '../../../app/jbsc/html/view_screening_results.html?resultCode=' + code + '&btnHide=1'
      })
    },
    previewMess(item) {
      var vm = this
      httpRequest.post('doctor/screen/getSurveyMessage', { data: { surveyResultCode: item.hospital_service_item_id } }).then(function (res) {
        vm.messageVisible = true
        vm.messInfo = res.data
      })
    },
    closeMessageDialog() {
      this.messageVisible = false
    },
    transformDataToAssessmentFormat(data, type) {
      // 创建一个空对象用于存储按年份分组的数据
      var groupedByYear = {}
      // 创建一个数组用于记录年份出现的顺序
      var yearOrder = []
      // 遍历原始数据数组
      data.forEach(function (item) {
        // 根据type参数选择不同的时间字段
        var timeField = item.czrq || item.outpatientTime || item.createTime
        // 解析日期字符串并获取年份、月份和日期
        var date = new Date(timeField)
        var year = date.getFullYear()
        var formattedDate = (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0')
        var formattedTime = date.toTimeString().split(' ')[0]
        // 如果还没有这个年份的数据,初始化一个新的数组,并记录年份顺序
        if (!groupedByYear[year]) {
          groupedByYear[year] = []
          yearOrder.push(year) // 记录年份首次出现的位置
        }
        // 构建新的对象并添加到对应年份的数组中
        groupedByYear[year].push({
          date: formattedDate,
          time: formattedTime,
          ...item
        })
      })
      // 然后构建最终的评估对象,按照原始顺序
      var assessment = yearOrder.map(function (year) {
        return {
          year: year,
          children: groupedByYear[year]
        }
      })
      return assessment
    },
    handleClick(item) {
      this.getPatientDetailList(item.name)
    },
    getPatientDetailList(type) {
      var vm = this
      vm.loading = true
      httpRequest.get('statistics/collaborate/patientDetailList', { data: { code: vm.code, type: type } }).then(function (res) {
        var data = vm.transformDataToAssessmentFormat(res.data, type)
        vm[vm.tabListName[Number(type) - 1]] = data
        vm.loading = false
      })
    },
    openDialog(type) {
    openDialog(type) {
      this.visible = true
      this.visible = true
      this.type = type
      this.type = type
@ -198,15 +147,79 @@ Vue.component('person-info', {
      document.body.removeChild(textarea)
      document.body.removeChild(textarea)
      this.$message.success('复制成功')
      this.$message.success('复制成功')
    },
    },
    toDetail(){
    toDetail(item) {
      console.log(item, 'kkkkkkkkkkkkkkkkkkkkkkkk')
      var vm = this
      var params = {
        planDetailId: item.id
      }
      if (item.visitCount == 1 || item.visitCount == 3) {
        vm.previewMess(item)
      } else {
        rehaAPI.serviceItem(params).then(function (res) {
          if (res.status == 200) {
            vm.service = res.data
            top.layer.open({
              type: 2,
              area: ['600px', '700px'],
              shade: 0.5,
              title: '记录随访表单',
              fixed: true, //不固定
              maxmin: true,
              closeBtn: 1,
              // shift: 5,
              shadeClose: false, //点击遮罩关闭层
              content: '../../rehabilitation/html/followRecord.html?serviceInfo=' + encodeURIComponent(JSON.stringify(vm.service)) + '&planDetailId=' + item.id,
              end: function () {
                // 未点击确定按钮,点击关闭按钮
              }
            })
          }
        })
      }
    },
    },
    toRehabilitationDetail(){
    toRehabilitationDetail(item) {
      this.currentPlan = item
      this.getSfList()
      this.rehabilitationDetailVisible = true
      this.rehabilitationDetailVisible = true
    },
    },
    back(){
    getSfList() {
      var vm = this
      var params = {
        searchTask: 6,
        planId: this.currentPlan.id,
        executeEndTime: '',
        executeStartTime: '',
        status: ''
      }
      var params1 = {
        searchTask: '',
        planId: this.currentPlan.id,
        executeEndTime: '',
        executeStartTime: '',
        status: ''
      }
      httpRequest.get('doctor/specialist/rehabilitation/calendarPlanDetailList', { data: params }).then(function (res) {
        vm.sfList = res.data
      })
      httpRequest.get('doctor/specialist/rehabilitation/calendarPlanDetailItems', { data: params1 }).then(function (res) {
        vm.PlanDetailItems = res.data.filter(function (item) {
          if (item.code == 6) {
            vm.sfNumObj = item
          }
          if (item.code == 2 || item.code == 3) {
            console.log(item, 'kkkkkkkkkkkkkkkkkkkkkkkkkk')
            return item.compeletTotal != 0
          }
          if (item.code != 2 && item.code != 3) {
            return item.code != 4 && item.code != 5 && item.code != 6
          }
        })
      })
    },
    back() {
      this.rehabilitationDetailVisible = false
      this.rehabilitationDetailVisible = false
    }
    }
  },
  mounted() {}
  }
})
})