Browse Source

健康俱乐部新版本

hd 1 month ago
parent
commit
2087f6b676

+ 32 - 29
app/statistics/html/comprehensive-query.html

@ -12,8 +12,8 @@
    <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/flex.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui-2.15.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element-ui.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element2.15/index.css" />
    <link rel="stylesheet" type="text/css" href="../../../css/element2.15/icon.css">
    <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet" />
    <link rel="stylesheet" type="text/css" href="../css/common.css" />
    <link rel="stylesheet" type="text/css" href="../css/comprehensive-query.css" />
@ -133,6 +133,23 @@
                  {{item.label}}
                </div>
              </template>
              <template v-if="tabsId == 10">
                <el-tree
                  class="bgc-f2f3f5"
                  ref="collectTree"
                  :data="jkjlbTabsTree"
                  show-checkbox
                  node-key="id"
                  :props="defaultProps"
                  @check="jkjlbCheck"></el-tree>
                  <div
                  class="particulars"
                  v-for="(item,index) in jkjlbTabsData"
                  @click="handleNodeClick(item)"
                  :style="{'background-color':handleNodeId==item.id?'#409eff':'',color:handleNodeId==item.id?'#fff':''}">
                  {{item.label}}
                </div>
              </template>
              <div class="resetSelected" v-if="tabsId != 2">
                <div @click="reset">重置已选</div>
              </div>
@ -408,18 +425,6 @@
                    </el-form>
                  </div>
                </div>
                <div v-if="handleNodeId==42" class="searchDiv">
                  <div style="height: 35px" class="mt5">
                    <el-form :model="form7" class="flex">
                      <el-form-item label="居民姓名:" class="flex">
                        <el-input v-model="form9.resident" placeholder="请输入患者姓名查询"></el-input>
                      </el-form-item>
                      <el-form-item label="签约医生:" class="flex formLeft">
                        <el-input v-model="form9.doctorTwo" placeholder="请输入签约医生姓名查询"></el-input>
                      </el-form-item>
                    </el-form>
                  </div>
                </div>
                <div v-if="handleNodeId==43" class="searchDiv">
                  <div style="height: 35px" class="mt5">
                    <el-form :model="form7" class="flex">
@ -749,21 +754,6 @@
                      <el-table-column prop="bindingState" label="是否关注" align="center"></el-table-column>
                    </template>
                  </el-table>
                  <el-table v-if="handleNodeId==42" border :data="jifenData" style="width: 100%" v-loading="loadingTwo" class="mt20">
                    <template>
                      <el-table-column type="index" label="序号" align="center"></el-table-column>
                      <el-table-column prop="hospitalName" label="社区名称" align="center"></el-table-column>
                      <el-table-column prop="name" label="居民" align="center"></el-table-column>
                      <el-table-column prop="ssc" label="医保卡" align="center"></el-table-column>
                      <el-table-column prop="idcard" label="身份证" align="center"></el-table-column>
                      <el-table-column prop="mobile" label="手机号" align="center"></el-table-column>
                      <el-table-column prop="address" label="地址" align="center"></el-table-column>
                      <el-table-column prop="sign_doctor_name" label="签约医生" align="center"></el-table-column>
                      <el-table-column prop="total" label="累计积分" align="center"></el-table-column>
                      <el-table-column prop="useJf" label="已使用积分" align="center"></el-table-column>
                      <el-table-column prop="surJf" label="未使用积分" align="center"></el-table-column>
                    </template>
                  </el-table>
                  <el-table v-if="handleNodeId==43" border :data="ruhuData" style="width: 100%" v-loading="loadingTwo" class="mt20">
                    <template>
                      <el-table-column type="index" label="序号" align="center"></el-table-column>
@ -839,6 +829,12 @@
                  <xx-situation v-if="handleNodeId == 89"></xx-situation>
                  <red-bag-reward v-if="handleNodeId == 90"></red-bag-reward>
                  <gxb-manage-sum v-if="handleNodeId == 91"></gxb-manage-sum>
                  <activity-register v-if="handleNodeId == 92" :header="jkjlbList"></activity-register>
                  <resident-score v-if="handleNodeId == 93" :header="jkjlbList"></resident-score>
                  <money-reward v-if="handleNodeId == 94" :header="jkjlbList"></money-reward>
                  <activity-hold-detail v-if="handleNodeId == 95"></activity-hold-detail>
                  <activity-register-detail v-if="handleNodeId == 96"></activity-register-detail>
                  <resident-score-detail v-if="handleNodeId == 97"></resident-score-detail>
                </div>
                <div v-if="handleNodeShow == 3">
                  <el-table v-if="collectCode == 1" border :data="diseaseReport" style="width: 100%" v-loading="loadingTwo" class="mt20">
@ -978,5 +974,12 @@
    <script src="../../../component/statistics/RedBagReward/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/GxbManageSum/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/PersonInfo/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/ActivityRegister/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/ResidentScore/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/MoneyReward/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/ActivityHoldDetail/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/ActivityRegisterDetail/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/ResidentScoreDetail/index.js" type="text/javascript" charset="utf-8"></script>
    <script src="../../../component/statistics/MoneyRewardDetail/index.js" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

+ 77 - 3
app/statistics/js/comprehensive-query.js

@ -68,8 +68,6 @@ new Vue({
          { label: '上转预约明细', id: '40' },
          { label: '专病复诊明细', id: '53' },
          { label: '微信绑定明细', id: '41' },
          { label: '居民积分明细', id: '42' },
          { label: '居民红包奖励明细', id: '90' },
          { label: '入户访视明细', id: '43' },
          // { label: '康复下转明细', id: '44' },
          { label: '邀请专科回复明细', id: '45' }
@ -198,6 +196,58 @@ new Vue({
      { label: '签约情况统计', id: '82' },
      { label: '消息推送明细', id: '89' }
    ],
    jkjlbTabsTree: [
      {
        label: '活动举办报名汇总',
        code: '92',
        root: true,
        children: [
          { id: '1', prop: 'joinPatientNum', label: '参与居民人数', code: '92', tip: '该区域/社区举办的活动中,已报名/参与的居民人数(已去重)'  },
          { id: '2', prop: 'joinHospitalNum', label: '参与社区医院数量', code: '92', tip: '该区域/社区举办的活动中,已报名。参与的居民签约的社区医院总数(已去重)', width: '150' },
          { id: '3', prop: 'eventTotal', label: '活动举办总数', code: '92', tip: '该区域/社区举办的活动数量总和' },
          { id: '4', prop: 'eventDoneNum', label: '已办活动场数', code: '92', tip: '该区域/社区举办的活动中,已结束的活动数量总和' },
          { id: '5', prop: 'eventIngNum', label: '进行中活动场数', code: '92', tip: '该区域/社区举办的活动中,正在进行中的活动数量总和' },
          { id: '6', prop: 'eventNotStartNum', label: '未开始活动场数', code: '92', tip: '该区域/社区举办的活动中,未到活动开始时间的活动数量' },
          { id: '7', prop: 'healthSportNum', label: '健康运动类活动', code: '92', tip: '该区域/社区举办的活动中,一级类别为:“健康运动”的活动数量总和' },
          { id: '8', prop: 'healthEduNum', label: '健康教育类活动', code: '92', tip: '该区域/社区举办的活动中,一级类别为:“健康教育”的活动数量总和' },
          { id: '9', prop: 'promoteBusinessNum', label: '促进业务类活动', code: '92', tip: '该区域/社区举办的活动中,一级类别为:“促进业务”的活动数量总和' },
          { id: '10', prop: 'signUpTotal', label: '活动报名总人数', code: '92', tip: '该区域/社区举办的活动中,已报名/参与的人数(重复报名按多次计算)' },
          { id: '11', prop: 'healthSportSignUpNum', label: '健康运动类报名', code: '92', tip: '该区域/社区举办的一级类别为:“健康运动”的活动中,已报名/参与的人数(重复报名按多次计算)' },
          { id: '12', prop: 'healthEduSignUpNum',label: '健康教育类报名', code: '92', tip: '该区域/社区举办的一级类别为:“健康教育”的活动中,已报名/参与的人数(重复报名按多次计算)' },
          { id: '13', prop: 'promoteBusinessSignUpNum', label: '促进业务类报名', code: '92', tip: '该区域/社区举办的一级类别为:“促进业务”的活动中,已报名/参与的人数(重复报名按多次计算)' }
        ]
      },
      {
        label: '居民积分汇总',
        code: '93',
        root: true,
        children: [
          { id: '21', prop: 'joinNum', label: '参与积分人数', code: '93' },
          { id: '22', prop: 'integrateTotal', label: '累计积分数', code: '93' },
          { id: '23', prop: 'useIntegrate', label: '已使用积分', code: '93' },
          { id: '24', prop: 'noUseIntegrate', label: '未使用积分', code: '93' },
        ]
      },
      {
        label: '红包奖励汇总',
        code: '94',
        root: true,
        children: [
          { id: '25', prop: 'activityTimes', label: '举办活动次数', code: '94' },
          { id: '26', prop: 'targetNum', label: '目标参与人数', code: '94' },
          { id: '27', prop: 'joinNum', label: '实际参与人数', code: '94' },
          { id: '28', prop: 'rewardNum', label: '领取奖励人数', code: '94' },
          { id: '29', prop: 'feeNum', label: '领取奖励金额', code: '94' }
        ]
      }
    ],
    jkjlbTabsData: [
      { label: '活动举办明细', id: '95' },
      { label: '居民活动报名明细', id: '96' },
      { label: '居民积分明细', id: '97' },
      { label: '居民红包奖励明细', id: '90' },
    ],
    jkjlbList: [],
    copdFilterCheckValue: [],
    handleNodeShow: 1,
    handleNodeId: 0,
@ -290,6 +340,7 @@ new Vue({
      { id: '3', text: '汇总数据', show: false },
      { id: '4', text: '专科综合查询', show: false },
      // {id:'5',text:'慢阻肺综合查询',show:false},
      { id: '10', text: '健康俱乐部', show: false },
      { id: '6', text: '慢阻肺统计', show: false },
      { id: '7', text: '疾控慢阻肺监测', show: false },
      { id: '8', text: '家庭病床统计', show: false },
@ -639,7 +690,7 @@ new Vue({
    this.s = this.startTime.format('yyyy-MM-dd')
    this.e = this.endTime.format('yyyy-MM-dd')
    this.list.unshift({ type: '0', id: 'time', label: this.s + '~' + this.e })
    for (var i = 46; i <= 91; i++) {
    for (var i = 46; i <= 98; i++) {
      this.componentId.push(i + '')
    }
    EventBus.$on('toPage', function (data) {
@ -1174,6 +1225,29 @@ new Vue({
        ]
      }
    },
    // jkjlbClick(data, isCheck) {},
    jkjlbCheck(data) {
      var vm = this
      // return
      this.jkjlbList = []
      this.handleNodeId = data.code
      vm.handleNodeShow = 2 //  明细查询tabs为2
      vm.jkjlbTabsTree.forEach(function (item) {
        item.children.forEach(function (o) {
          if (o.code != data.code) {
            vm.$refs.collectTree.setChecked(o, false, true)
          }
        })
      })
      this.$nextTick(function () {
        vm.jkjlbList = vm.$refs.collectTree.getCheckedNodes().filter(function (item) {
          return item.root != true
        })
        
      })
    },
    // 点击明细查询树形图
    handleNodeClick: function (item, type) {
      var vm = this

+ 163 - 0
component/statistics/ActivityHoldDetail/index.html

@ -0,0 +1,163 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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.title" placeholder="请输入活动名称进行搜索"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动一级类别:</label>
      <el-select v-model="form.firstClassify" placeholder="请输入活动名称进行搜索" @change="form.secondClassify = ''">
        <el-option label="全部" value=""></el-option>
        <el-option label="健康运动" value="健康运动"></el-option>
        <el-option label="健康教育" value="健康教育"></el-option>
        <el-option label="促进业务" value="促进业务"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动二级类别:</label>
      <el-select v-model="form.secondClassify" placeholder="请输入活动名称进行搜索">
        <el-option v-for="item in getSecondClassifyList(form.firstClassify)" :label="item.label" :key="item.value" :value="item.value"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动状态:</label>
      <el-select v-model="form.activityStatus" placeholder="请输入活动名称进行搜索">
        <el-option label="全部" value=""></el-option>
        <el-option label="报名中" value="1"></el-option>
        <el-option label="进行中" value="2"></el-option>
        <el-option label="兑奖中" value="3"></el-option>
        <el-option label="未开始" value="4"></el-option>
        <el-option label="已开始" value="5"></el-option>
        <el-option label="已结束" value="6"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">举办形式:</label>
      <el-select v-model="form.eventForm" placeholder="请输入活动名称进行搜索">
        <el-option label="全部" value=""></el-option>
        <el-option label="线上" value="1"></el-option>
        <el-option label="线下" value="2"></el-option>
        <el-option label="综合" value="3"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">举办目的:</label>
      <el-select v-model="form.eventAim" placeholder="请输入活动名称进行搜索">
        <el-option label="全部" value=""></el-option>
        <el-option label="促进健康" value="1"></el-option>
        <el-option label="业务宣传" value="2"></el-option>
        <el-option label="服务提升" value="3"></el-option>
      </el-select>
    </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">
      <el-button type="primary" size="mini" @click="searchFn">查询</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" label="序号" width="80"></el-table-column>
    <el-table-column v-for="item in tableHeader" :key="item.prop" :label="item.label" :prop="item.prop" :min-width="item.width || 100"></el-table-column>
    <el-table-column label="数据查看">
      <template slot-scope="scope">
        <el-button type="text" @click="previewDetailData(scope.row)">查看</el-button>
      </template>
    </el-table-column>
  </el-table>
  <el-pagination
    @current-change="handleCurrentChange($event, 1)"
    @size-change="handleSizeChange($event, 1)"
    :current-page.sync="page1"
    :page-size="size2"
    :page-sizes="[10, 20, 50]"
    layout="total, sizes, prev, pager, next, jumper"
    class="pagination"
    :total="total1"></el-pagination>
  <el-dialog :visible.sync="dialogShow" @close="closeDialog" width="1200px" title="活动数据明细">
    <el-form inline size="mini">
      <el-form-item label="居民姓名:">
        <el-input v-model="query.name" placeholder="请输入居民姓名进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="手机号码:">
        <el-input v-model="query.mobile" placeholder="请输入手机号码进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="签约机构:">
        <el-input v-model="query.hospitalName" placeholder="请输入签约机构进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="签约医生:">
        <el-input v-model="query.doctorName" placeholder="请输入签约医生进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="性别:">
        <el-select v-model="query.sex">
          <el-option label="全部" value=""></el-option>
          <el-option label="男" value="1"></el-option>
          <el-option label="女" value="2"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="dialogSearch">查询</el-button>
        <el-button type="ff9526" @click="dialogExport" :disabled="exportLoading">导出</el-button>
      </el-form-item>
    </el-form>
    <el-table :data="dialogTableData" border v-loading="dialogLoading">
      <el-table-column type="index" label="序号" width="80"></el-table-column>
      <el-table-column v-for="item in dialogHeader" :label="item.label" :key="item.prop" :width="item.width || 120">
        <template slot-scope="scope">
          <span>{{scope.row[item.prop]}}</span>
        </template>
      </el-table-column>
    </el-table>
    <div style="display: flex; justify-content: flex-end; margin-top: 10px">
      <el-pagination
        @current-change="handleCurrentChange($event, 2)"
        @size-change="handleSizeChange($event, 2)"
        :current-page.sync="page2"
        :page-size="size2"
        :page-sizes="[10, 20, 50]"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total2"></el-pagination>
    </div>
  </el-dialog>
</div>

+ 311 - 0
component/statistics/ActivityHoldDetail/index.js

@ -0,0 +1,311 @@
var template = ''
$.ajax('../../../component/statistics/ActivityHoldDetail/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('activity-hold-detail', {
  template: template,
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town',
        firstClassify: '',
        secondClassify: '',
        activityStatus: '',
        eventForm: '',
        eventAim: ''
      },
      tableData: [],
      dialogShow: false,
      info: {},
      page1: 1,
      size1: 10,
      total1: 0,
      page2: 1,
      size2: 10,
      total2: 0,
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '按区', value: 'town' },
        { label: '按社区', value: 'hospital' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [
        { label: '活动名称', prop: 'title', width: '120' },
        { label: '活动一级类别', prop: 'firstClassify', width: '120' },
        { label: '活动二级类别', prop: 'secondClassify', width: '120' },
        { label: '活动状态', prop: 'activityStatus' },
        { label: '举办形式', prop: 'eventForm' },
        { label: '举办目的', prop: 'eventAim' },
        { label: '主办机构', prop: 'organizer', width: '140' },
        { label: '预计报名人数', prop: 'num', width: '120' },
        { label: '已报名人数', prop: 'joinNum' },
        { label: '参与社区医院数量', prop: 'hospitalNum', width: '140' },
        { label: '活动创建时间', prop: 'createTime', width: '120' },
        { label: '报名截止时间', prop: 'registrationEndTime', width: '120' },
        { label: '活动下线时间', prop: 'offlineEndTime', width: '120' }
      ],
      dialogShow: false,
      query: {},
      dialogTableData: [],
      dialogHeader: [
        { label: '姓名', prop: 'name' },
        { label: '性别', prop: 'sex' },
        { label: '年龄', prop: 'age' },
        { label: '证件号码', prop: 'idcard', width: '120' },
        { label: '手机号码', prop: 'mobile' },
        { label: '签约机构', prop: 'hospitalName' },
        { label: '签约医生', prop: 'doctorName' },
        { label: '积分', prop: 'jfTotal' },
        { label: '奖励', prop: 'couponTotal' },
        { label: '排名', prop: 'ranking' }
      ],
      dialogLoading: false,
      activityId: null
    }
  },
  methods: {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code,
          firstClassify: '',
          secondClassify: '',
          activityStatus: '',
          eventForm: '',
          eventAim: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.initTime()
      this.searchFn()
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        page: this.page1,
        size: this.size1
      }
      vm.tableData = []
      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('doctor/healthBank/eventDetail', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.detailModelList
          vm.total1 = res.totalCount
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
      }
      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]
        }
      }
      this.exportLoading = true
      var fileName = `活动举办明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportEventDetail', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town',
          firstClassify: '',
          secondClassify: '',
          activityStatus: '',
          eventForm: '',
          eventAim: ''
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code,
          firstClassify: '',
          secondClassify: '',
          activityStatus: '',
          eventForm: '',
          eventAim: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    closeDialog() {
      this.dialogShow = false
    },
    previewDetailData(row) {
      this.dialogShow = true
      this.activityId = row.id
      this.query = {
        // sex: ''
      }
      this.page1 = 1
      this.dialogSearch()
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    dialogSearch() {
      var vm = this
      this.dialogLoading = true
      var params = {
        ...this.query,
        activityId: this.activityId,
        page: this.page2,
        size: this.size2
      }
      httpRequest.get('doctor/healthBank/eventDataDetail', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.dialogTableData = res.detailModelList
          vm.total2 = res.totalCount
        }
        vm.dialogLoading = false
      })
    },
    dialogExport() {
      var vm = this
      var params = {
        ...this.query,
        activityId: this.activityId
      }
      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]
        }
      }
      this.exportLoading = true
      var fileName = `活动数据明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportEventDataDetail', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    getSecondClassifyList(val) {
      switch (val) {
        case '':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' },
            { label: '健康问答', value: '健康问答' },
            { label: '健康咨询', value: '健康咨询' }
          ]
        case '健康运动':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' }
          ]
        case '健康教育':
          return [
            { label: '全部', value: '' },
            { label: '健康问答', value: '健康问答' }
          ]
        case '促进业务':
          return [
            { label: '全部', value: '' },
            { label: '健康咨询', value: '健康咨询' }
          ]
      }
    }
  },
  mounted() {
    this.init()
  }
})

+ 197 - 0
component/statistics/ActivityRegister/index.html

@ -0,0 +1,197 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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-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="请选择">
        <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">
      <el-button type="primary" size="mini" @click="searchFn">查询</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" row-key="code" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <el-table-column v-for="item in tableHeader" :key="item.id" :label="item.label" :min-width="item.width || 140">
      <template slot="header" slot-scope="scope">
        <span>{{item.label}}</span>
        <el-tooltip :content="item.tip" placement="top">
          <i class="el-icon-question" v-if="item.tip"></i>
        </el-tooltip>
      </template>
      <template slot-scope="scope">
        <span @click="openDialog(scope.row, item.prop)" :class="getClass(scope.row, item.prop)">{{scope.row[item.prop]}}</span>
      </template>
    </el-table-column>
  </el-table>
  <el-dialog :visible.sync="dialogShow" @close="closeDialog" width="1200px" title="活动举办明细">
    <el-form inline size="mini">
      <el-form-item label="按活动年度:" v-if="yearType == 1">
        <el-select v-model="chooseYear" disabled>
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="创建时间:" v-if="yearType == 2">
        <el-date-picker
          v-model="chooseTime"
          type="daterange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          value-format="yyyy-MM-dd"
          disabled></el-date-picker>
      </el-form-item>
      <el-form-item label="活动名称:">
        <el-input v-model="query.title" placeholder="请输入活动名称进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="活动一级类别:">
        <el-select v-model="query.firstClassify" @change="query.secondClassify = ''">
          <el-option label="全部" value=""></el-option>
          <el-option label="健康运动" value="健康运动"></el-option>
          <el-option label="健康教育" value="健康教育"></el-option>
          <el-option label="促进业务" value="促进业务"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="活动二级类别:">
        <el-select v-model="query.secondClassify">
          <el-option :label="item.label" :value="item.value" v-for="item in getSecondClassifyList(query.firstClassify)" :key="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="活动状态:">
        <el-select v-model="query.activityStatus">
          <el-option label="全部" value=""></el-option>
          <el-option label="报名中" value="1"></el-option>
          <el-option label="进行中" value="2"></el-option>
          <el-option label="兑奖中" value="3"></el-option>
          <el-option label="未开始" value="4"></el-option>
          <el-option label="已开始" value="5"></el-option>
          <el-option label="已结束" value="6"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="searchActivityHold">查询</el-button>
        <el-button type="ff9526" @click="exportActivityHold" :disabled="dialogExportLoading">导出</el-button>
      </el-form-item>
    </el-form>
    <el-table :data="dialogTableData" border v-loading="dialogLoading">
      <el-table-column type="index" label="序号" width="80"></el-table-column>
      <el-table-column v-for="item in dialogHeader" :label="item.label" :prop="item.prop" :key="item.prop" :width="item.width || 120">
        <template slot-scope="scope">
          <span :class="`${item.prop=='title'?'pointer c-409eff':''}`" @click="previewRegisterDetail(scope.row, item.prop)">{{scope.row[item.prop]}}</span>
        </template>
      </el-table-column>
    </el-table>
    <div style="display: flex; justify-content: flex-end; margin-top: 10px">
      <el-pagination
        @current-change="handleCurrentChange($event, 1)"
        @size-change="handleSizeChange($event, 1)"
        :current-page.sync="page"
        :page-size="size"
        :page-sizes="[10, 20, 50]"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"></el-pagination>
    </div>
  </el-dialog>
  <el-dialog :visible.sync="dialogShow1" @close="closeDialog1" width="1200px" title="活动报名明细">
    <el-form inline size="mini">
      <el-form-item label="按活动年度:" v-if="yearType == 1">
        <el-select v-model="chooseYear" disabled>
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="创建时间:" v-if="yearType == 2">
        <el-date-picker
          v-model="chooseTime"
          type="daterange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          value-format="yyyy-MM-dd"
          disabled></el-date-picker>
      </el-form-item>
      <el-form-item label="活动名称:">
        <el-input v-model="query1.title" placeholder="请输入活动名称进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="签约机构:">
        <el-input v-model="query1.hospitalName" placeholder="请输入签约机构名称进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="签约医生:">
        <el-input v-model="query1.doctorName" placeholder="请输入签约医生名称进行搜索"></el-input>
      </el-form-item>
      <el-form-item label="活动一级类别">
        <el-select v-model="query1.firstClassify" @change="query1.secondClassify = ''">
          <el-option label="全部" value=""></el-option>
          <el-option label="健康运动" value="健康运动"></el-option>
          <el-option label="健康教育" value="健康教育"></el-option>
          <el-option label="促进业务" value="促进业务"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="活动二级类别">
        <el-select v-model="query1.secondClassify">
          <el-option :label="item.label" :value="item.value" v-for="item in getSecondClassifyList(query1.firstClassify)" :key="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="searchActivityRegistry">查询</el-button>
        <el-button type="ff9526" @click="exportActivityRegistry" :disabled="dialogExportLoading1">导出</el-button>
      </el-form-item>
    </el-form>
    <el-table :data="dialogTableData1" border v-loading="dialogLoading1">
      <el-table-column type="index" label="序号" :width="70"></el-table-column>
      <el-table-column v-for="item in dialogHeader1" :label="item.label" :prop="item.prop" :key="item.prop" :min-width="item.width || 100">
        <template slot-scope="scope">
          <span>{{scope.row[item.prop]}}</span>
        </template>
      </el-table-column>
    </el-table>
    <div style="display: flex; justify-content: flex-end; margin-top: 10px">
      <el-pagination
        @current-change="handleCurrentChange($event, 2)"
        @size-change="handleSizeChange($event, 2)"
        :current-page.sync="page1"
        :page-size="size1"
        :page-sizes="[10, 20, 50]"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total1"></el-pagination>
    </div>
  </el-dialog>
</div>

+ 534 - 0
component/statistics/ActivityRegister/index.js

@ -0,0 +1,534 @@
var template = ''
$.ajax('../../../component/statistics/ActivityRegister/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('activity-register', {
  template: template,
  props: {
    header: {}
  },
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town'
      },
      tableData: [],
      dialogShow: false,
      info: {},
      page: 1,
      size: 10,
      total: 0,
      page1: 1,
      size1: 10,
      total1: 0,
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '区', value: 'town' },
        { label: '社区', value: 'hospital' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [],
      dialogShow: false,
      query: {},
      query1: {},
      dialogTableData: [],
      dialogHeader: [
        { label: '活动名称', prop: 'title' },
        { label: '活动一级类别', prop: 'firstClassify' },
        { label: '活动二级类别', prop: 'secondClassify' },
        { label: '活动状态', prop: 'activityStatus' },
        { label: '主办机构', prop: 'organizer' },
        { label: '预计报名人数', prop: 'num' },
        { label: '已报名人数', prop: 'joinNum' },
        { label: '参与社区医院数量', prop: 'hospitalNum', width: '140' },
        { label: '活动创建时间', prop: 'createTime' },
        { label: '报名截止时间', prop: 'registrationEndTime' },
        { label: '活动下线时间', prop: 'offlineEndTime' }
      ],
      dialogLoading: false,
      dialogExportLoading: false,
      dialogShow1: false,
      dialogTableData1: [],
      dialogHeader1: [
        { label: '姓名', prop: 'name' },
        { label: '性别', prop: 'sex' },
        { label: '年龄', prop: 'age' },
        { label: '证件号码', prop: 'idcard', width: '140' },
        { label: '手机号码', prop: 'mobile' },
        { label: '签约机构', prop: 'hospitalName' },
        { label: '签约医生', prop: 'doctorName' },
        { label: '活动名称', prop: 'title' },
        { label: '活动一级类别', prop: 'firstClassify', width: '120' },
        { label: '活动二级类别', prop: 'secondClassify', width: '120' },
        { label: '主办机构', prop: 'organizer' },
        { label: '获得积分', prop: 'total' },
        { label: '获得奖励金额', prop: 'feeTotal', width: '120' },
        { label: '参与活动时间', prop: 'updateTime', width: '160' }
      ],
      dialogLoading1: false,
      dialogExportLoading1: false,
      secondClassifyList: [
        { label: '全部', value: '' },
        { label: '健康运动', value: '健康运动' },
        { label: '健康问答', value: '健康问答' },
        { label: '健康咨询', value: '健康咨询' }
      ]
    }
  },
  watch: {
    header: {
      handler() {
        if (this.form.range == 'town') {
          this.tableHeader = [
            { label: '地区', prop: 'town', width: '120' },
            { label: '社区', prop: 'hospital', width: '140' }
          ].concat(this.header)
        } else if (this.form.range == 'hospital') {
          this.tableHeader = [{ label: '社区', prop: 'hospital', width: '140' }].concat(this.header)
        }
      }
    }
  },
  methods: {
    init() {
      var vm = this
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      }
      this.initTime()
      setTimeout(function () {
        vm.searchFn()
      }, 200)
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        isTotal: 1,
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      vm.tableData = []
      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('doctor/healthBank/clubEventStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.data.list.map(function (item) {
            var data = JSON.parse(JSON.stringify(item))
            if (vm.form.range == 'town') {
              data.town = item.name
              data.hasChildren = item.code && true
            } else if (vm.form.range == 'hospital') {
              data.hospital = item.name
              data.hasChildren = false
            }
            return data
          })
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      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]
        }
      }
      this.exportLoading = true
      var fileName = `活动举办报名汇总${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportClubEventStatistics', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town'
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    closeDialog() {
      this.dialogShow = false
    },
    closeDialog1() {
      this.dialogShow1 = false
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    load(row, treeNode, resolve) {
      var params = {
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      var len = row.code.length
      if (len == 6) {
        params.range = 'hospital'
        params.area = 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('doctor/healthBank/clubEventStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          var children = res.data.list.map(function (item) {
            var data = {
              ...item
            }
            if (len == 6) {
              data.hospital = item.name
              data.hasChildren = false
              data.town1 = row.code
            }
            return data
          })
          resolve(children)
        }
      })
    },
    searchActivityHold() {
      var vm = this
      this.dialogLoading = true
      var params = {
        range: this.form.range,
        area: this.form.area ?? '',
        hospital: this.form.hospital ?? '',
        ...this.query,
        page: this.page,
        size: this.size
      }
      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('doctor/healthBank/eventDetail', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.dialogTableData = res.detailModelList
          vm.total = res.totalCount
        }
        vm.dialogLoading = false
      })
    },
    exportActivityHold() {
      var vm = this
      var params = {
        range: this.form.range,
        area: this.form.area ?? '',
        hospital: this.form.hospital ?? '',
        ...this.query
      }
      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]
        }
      }
      this.dialogExportLoading = true
      var fileName = `活动举办明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportEventDetail', fileName, params).then(function () {
        vm.dialogExportLoading = false
      })
    },
    searchActivityRegistry() {
      var vm = this
      this.dialogLoading1 = true
      var params = {
        range: this.form.range,
        area: this.form.area,
        hospital: this.form.hospital,
        ...this.query1,
        page: this.page1,
        size: this.size1
      }
      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('doctor/healthBank/eventRegistrationDetail', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.dialogTableData1 = res.detailModelList
          vm.total1 = res.totalCount
        }
        vm.dialogLoading1 = false
      })
    },
    exportActivityRegistry() {
      var vm = this
      var params = {
        range: this.form.range,
        area: this.form.area ?? '',
        hospital: this.form.hospital ?? '',
        ...this.query1
      }
      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]
        }
      }
      this.dialogExportLoading1 = true
      var fileName = `活动报名明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportEventRegistrationDetail', fileName, params).then(function () {
        vm.dialogExportLoading1 = false
      })
    },
    handleCurrentChange(val, type) {
      if (type == 1) {
        this.page = val
        this.searchActivityHold()
      } else {
        this.page1 = val
        this.searchActivityRegistry()
      }
    },
    handleSizeChange(val, type) {
      if (type == 1) {
        this.size = val
        this.searchActivityHold()
      } else {
        this.size1 = val
        this.searchActivityRegistry()
      }
    },
    getClass(row, prop) {
      if (
        [
          'eventTotal',
          'eventDoneNum',
          'eventIngNum',
          'eventNotStartNum',
          'healthSportNum',
          'healthEduNum',
          'promoteBusinessNum',
          'signUpTotal',
          'healthSportSignUpNum',
          'healthEduSignUpNum',
          'promoteBusinessSignUpNum'
        ].includes(prop) &&
        row.code
      ) {
        return 'pointer c-409eff'
      } else {
        return ''
      }
    },
    openDialog(row, prop) {
      var range
      if (row.code.length == 6) {
        range = 'town'
      } else if (row.code.length == 10) {
        range = 'hospital'
      }
      if (['eventTotal', 'eventDoneNum', 'eventIngNum', 'eventNotStartNum', 'healthSportNum', 'healthEduNum', 'promoteBusinessNum'].includes(prop)) {
        this.query = {
          title: '',
          firstClassify: '',
          secondClassify: '',
          activityStatus: '',
          range: range
        }
        if (range == 'town') {
          this.query.area = row.code
        } else if (range == 'hospital') {
          this.query.hospital = row.code
        }
        this.dialogShow = true
        this.searchActivityHold()
        this.page = 1
      } else if (['signUpTotal', 'healthSportSignUpNum', 'healthEduSignUpNum', 'promoteBusinessSignUpNum'].includes(prop)) {
        this.query1 = {
          title: '',
          hospitalName: '',
          doctorName: '',
          firstClassify: '',
          secondClassify: '',
          range: range
        }
        if (range == 'town') {
          this.query1.area = row.code
        } else if (range == 'hospital') {
          this.query1.hospital = row.code
        }
        this.dialogShow1 = true
        this.searchActivityRegistry()
        this.page1 = 1
      }
    },
    previewRegisterDetail(row, prop) {
      this.query1 = {
        activityId: row.id,
        title: '',
        hospitalName: '',
        doctorName: '',
        firstClassify: '',
        secondClassify: ''
      }
      this.dialogShow1 = true
      this.searchActivityRegistry()
    },
    getSecondClassifyList(val) {
      switch (val) {
        case '':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' },
            { label: '健康问答', value: '健康问答' },
            { label: '健康咨询', value: '健康咨询' }
          ]
        case '健康运动':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' }
          ]
        case '健康教育':
          return [
            { label: '全部', value: '' },
            { label: '健康问答', value: '健康问答' }
          ]
        case '促进业务':
          return [
            { label: '全部', value: '' },
            { label: '健康咨询', value: '健康咨询' }
          ]
      }
    }
  },
  mounted() {
    this.init()
  }
})

+ 105 - 0
component/statistics/ActivityRegisterDetail/index.html

@ -0,0 +1,105 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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-input v-model="form.mobile" placeholder="请输入居民手机号码进行搜索"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">签约医生:</label>
      <el-input v-model="form.doctorName" placeholder="请输入签约医生姓名进行搜索"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动名称:</label>
      <el-input v-model="form.title" placeholder="请输入活动名称进行搜索"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动一级类别:</label>
      <el-select v-model="form.firstClassify" @change="form.secondClassify = ''">
        <el-option label="全部" value=""></el-option>
        <el-option label="健康运动" value="健康运动"></el-option>
        <el-option label="健康教育" value="健康教育"></el-option>
        <el-option label="促进业务" value="促进业务"></el-option>
      </el-select>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">活动二级类别:</label>
      <el-select v-model="form.secondClassify">
        <el-option :label="item.label" :value="item.value" v-for="item in getSecondClassifyList(form.firstClassify)" :key="item.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.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="searchFn">查询</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" label="序号" width="80"></el-table-column>
    <el-table-column v-for="item in tableHeader" :key="item.id" :label="item.label" :min-width="item.width || 140">
      <template slot-scope="scope">
        <span>{{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"
    class="pagination"></el-pagination>
</div>

+ 264 - 0
component/statistics/ActivityRegisterDetail/index.js

@ -0,0 +1,264 @@
var template = ''
$.ajax('../../../component/statistics/ActivityRegisterDetail/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('activity-register-detail', {
  template: template,
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town',
        firstClassify: '',
        secondClassify: ''
      },
      tableData: [],
      dialogShow: false,
      info: {},
      page: 1,
      size: 10,
      total: 0,
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '区', value: 'town' },
        { label: '社区', value: 'hospital' },
        { label: '团队', value: 'team' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [
        { label: '姓名', prop: 'name' },
        { label: '性别', prop: 'sex' },
        { label: '年龄', prop: 'age' },
        { label: '证件号码', prop: 'idcard' },
        { label: '手机号码', prop: 'mobile' },
        { label: '签约机构', prop: 'hospitalName' },
        { label: '签约医生', prop: 'doctorName' },
        { label: '活动名称', prop: 'title' },
        { label: '活动一级类别', prop: 'firstClassify' },
        { label: '活动二级类别', prop: 'secondClassify' },
        { label: '主办机构', prop: 'organizer' },
        { label: '获得积分', prop: 'total' },
        { label: '获得奖励金额', prop: 'feeTotal' },
        { label: '参与活动时间', prop: 'updateTime' }
      ],
      hospitalOptions: [],
      teamOptions: []
    }
  },
  methods: {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      } else {
        this.level = 3 // 社区管理
        this.rangeOptions = [
          { label: '社区', value: 'hospital' },
          { label: '团队', value: 'team' }
        ]
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code.substring(0, 6) }]
        this.hospitalOptions = [{ name: selectedRole.name, code: selectedRole.code }]
        this.form = {
          range: 'hospital',
          area: selectedRole.code.substring(0, 6),
          hospital: selectedRole.code
        }
        this.getTeam(selectedRole.code)
      }
      this.initTime()
      this.searchFn()
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        page: this.page,
        size: this.size
      }
      vm.tableData = []
      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('doctor/healthBank/eventRegistrationDetail', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.detailModelList
          vm.total = res.totalCount
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
      }
      if (this.yearType == '1') {
        params.startDate = this.chooseYear + '-01-01 00:00'
        params.endDate = this.chooseYear + '-12-31 23:59'
      } else {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0] + ' 00:00'
          params.endDate = this.chooseTime[1] + ' 23:59'
        }
      }
      this.exportLoading = true
      var fileName = `居民活动报名明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportEventRegistrationDetail', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town',
          firstClassify: '',
          secondClassify: ''
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code,
          firstClassify: '',
          secondClassify: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    handleCurrentChange(val) {
      this.page = val
      this.searchFn()
    },
    handleSizeChange(val) {
      this.size = val
      this.searchFn()
    },
    getTeam(code) {
      var vm = this
      delete this.form.team
      var params = {
        hospital: code,
        area: this.form.area
      }
      httpRequest.get('statisticsExport/teamList', { data: params }).then(function (res) {
        vm.teamOptions = [{ id: '', name: '全部' }]
        vm.teamOptions = vm.teamOptions.concat(res.data)
      })
    },
    getSecondClassifyList(val) {
      switch (val) {
        case '':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' },
            { label: '健康问答', value: '健康问答' },
            { label: '健康咨询', value: '健康咨询' }
          ]
        case '健康运动':
          return [
            { label: '全部', value: '' },
            { label: '健康运动', value: '健康运动' }
          ]
        case '健康教育':
          return [
            { label: '全部', value: '' },
            { label: '健康问答', value: '健康问答' }
          ]
        case '促进业务':
          return [
            { label: '全部', value: '' },
            { label: '健康咨询', value: '健康咨询' }
          ]
      }
    }
  },
  mounted() {
    this.init()
  }
})

+ 32 - 15
component/statistics/CopdPatientRecordEdit/index.js

@ -193,10 +193,12 @@ Vue.component('copd-patient-record-edit', {
          item.children = []
        })
        vm['addressOptions'+ id] = JSON.parse(JSON.stringify(detailModelList))
        console.log(vm['addressOptions'+ id],"vm['addressOptions'+ id]");
        console.log(vm['addressOptions'+ id],['addressOptions'+ id]);
        
        if (vm.formData.liveProvince && id == 1) {
          console.log(1);
          
          vm.baseCityList(vm.formData.liveProvince, id)
        }
        if (vm.formData.registProvince && id == 2) {
@ -236,6 +238,8 @@ Vue.component('copd-patient-record-edit', {
          })
          arr[activeIndex].children = detailModelList
          if (vm.addressVal.length && id == 1) {
            console.log(2);
            
            vm.baseTownList([vm.addressVal[0], vm.addressVal[1]], id)
          }
          if (vm.resiginAddressVal.length && id == 2) {
@ -292,6 +296,8 @@ Vue.component('copd-patient-record-edit', {
            if(num == 3)return
            if (vm.addressVal.length && id == 1) {
              console.log(3);
              
              vm.stressList([vm.addressVal[0], vm.addressVal[1], vm.addressVal[2]],id)
            }
            if (vm.resiginAddressVal.length && id == 2) {
@ -329,6 +335,8 @@ Vue.component('copd-patient-record-edit', {
          })
        }
      })
      console.log(val,provinceIndex,activeIndex, xIndex);
      
      homeAPI.getDistrict({ type: 4, code: val[2] }).then(function (res) {
        if (res.status == 200) {
@ -359,20 +367,25 @@ Vue.component('copd-patient-record-edit', {
          } else {
            vm.formData.sex = 2
          }
          console.log(vm.addressVal,vm.addressVal.length);
          
          if (vm.addressVal.length) {
            vm.addressVal.forEach(function (item, index) {
              var pathNode = vm.$refs.cascader.getCheckedNodes()[0].pathNodes
              console.log(pathNode);
              
              if (index == 0) {
                vm.formData.liveProvince = item
                vm.formData.liveProvinceName = vm.$refs.cascader.currentLabels[index]
                vm.formData.liveProvinceName = pathNode[index].label
              } else if (index == 1) {
                vm.formData.liveCity = item
                vm.formData.liveCityName = vm.$refs.cascader.currentLabels[index]
                vm.formData.liveCityName = pathNode[index].label
              } else if (index == 2) {
                vm.formData.liveTown = item
                vm.formData.liveTownName = vm.$refs.cascader.currentLabels[index]
                vm.formData.liveTownName = pathNode[index].label
              } else if (index == 3) {
                vm.formData.liveStreet = item
                vm.formData.liveStreetName = vm.$refs.cascader.currentLabels[index]
                vm.formData.liveStreetName = pathNode[index].label
              }
            })
          } else {
@ -387,18 +400,20 @@ Vue.component('copd-patient-record-edit', {
          }
          if (vm.resiginAddressVal.length) {
            vm.resiginAddressVal.forEach(function (item, index) {
              var pathNode = vm.$refs.cas.getCheckedNodes()[0].pathNodes
              
              if (index == 0) {
                vm.formData.registProvince = item
                vm.formData.registProvinceName = vm.$refs.cas.currentLabels[index]
                vm.formData.registProvinceName = pathNode[index].label
              } else if (index == 1) {
                vm.formData.registCity = item
                vm.formData.registCityName = vm.$refs.cas.currentLabels[index]
                vm.formData.registCityName = pathNode[index].label
              } else if (index == 2) {
                vm.formData.registTown = item
                vm.formData.registTownName = vm.$refs.cas.currentLabels[index]
                vm.formData.registTownName = pathNode[index].label
              } else if (index == 3) {
                vm.formData.registStreet = item
                vm.formData.registStreetName = vm.$refs.cas.currentLabels[index]
                vm.formData.registStreetName = pathNode[index].label
              }
            })
          } else {
@ -414,18 +429,20 @@ Vue.component('copd-patient-record-edit', {
          if(vm.diagnosisAddressVal.length){
            var address = ""
            vm.diagnosisAddressVal.forEach(function (item, index) {
              var pathNode = vm.$refs.diagnosis.getCheckedNodes()[0].pathNodes
              if (index == 0) {
                vm.formData.jkcopdPatientExpend.firstVisitProvince = item
                vm.formData.jkcopdPatientExpend.firstVisitProvinceName = vm.$refs.diagnosis.currentLabels[index]
                address += vm.$refs.diagnosis.currentLabels[index]
                vm.formData.jkcopdPatientExpend.firstVisitProvinceName = pathNode[index].label
                address += pathNode[index].label
              } else if (index == 1) {
                vm.formData.jkcopdPatientExpend.firstVisitCity = item
                vm.formData.jkcopdPatientExpend.firstVisitCityName = vm.$refs.diagnosis.currentLabels[index]
                address += vm.$refs.diagnosis.currentLabels[index]
                vm.formData.jkcopdPatientExpend.firstVisitCityName = pathNode[index].label
                address += pathNode[index].label
              } else if (index == 2) {
                vm.formData.jkcopdPatientExpend.firstVisitTown = item
                vm.formData.jkcopdPatientExpend.firstVisitTownName = vm.$refs.diagnosis.currentLabels[index]
                address += vm.$refs.diagnosis.currentLabels[index]
                vm.formData.jkcopdPatientExpend.firstVisitTownName = pathNode[index].label
                address += pathNode[index].label
              }
            })
            vm.formData.firstVisitArea = address

+ 3 - 1
component/statistics/CopdServeNum/index.js

@ -59,7 +59,7 @@ Vue.component('copd-serve-num', {
      },
      userRoleCode: '',
      docInfo: JSON.parse(window.localStorage.getItem('docInfo')),
      isShowBtn: 0,
      isShowBtn: false,
      isGuGan: false,
      areaList: [],
      rangeList: [
@ -188,8 +188,10 @@ Vue.component('copd-serve-num', {
        if (vm.userRole.code == '350200' || vm.userRole.code == 'jk_350200') {
          vm.getDistrict(type, 350200, '厦门市')
          this.isShowBtn = true
        } else if (vm.userRole.code.indexOf('jk_') > -1) {
          vm.getDistrict(type, vm.userRole.code.substring(3), vm.areaTitle.substring(0, 3))
          this.isShowBtn = true
        } else if (vm.userRole.code.length == 6) {
          vm.getDistrict(type, vm.userRole.code, vm.areaTitle.substring(0, 3))
        } else if (vm.userRole.code.length == 10) {

+ 64 - 0
component/statistics/MoneyReward/index.html

@ -0,0 +1,64 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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-select class="formWidth" v-model="form.serviceType">
        <el-option v-for="(option, index) in serviceType" :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.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="请选择">
        <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">
      <el-button type="primary" size="mini" @click="searchFn">查询</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" row-key="code" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <el-table-column v-for="item in tableHeader" :key="item.id" :label="item.label" :min-width="item.width || 140">
      <template slot-scope="scope">
        <span>{{scope.row[item.prop]}}</span>
      </template>
    </el-table-column>
  </el-table>
</div>

+ 277 - 0
component/statistics/MoneyReward/index.js

@ -0,0 +1,277 @@
var template = ''
$.ajax('../../../component/statistics/MoneyReward/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('money-reward', {
  template: template,
  props: {
    header: {}
  },
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town',
        serviceType: ''
      },
      tableData: [],
      dialogShow: false,
      page: 1,
      size: 10,
      total: 0,
      page1: 1,
      size1: 10,
      total1: 0,
      loading: false,
      exportLoading: false,
      sexDict: {
        1: '男',
        2: '女'
      },
      rangeOptions: [
        { label: '区', value: 'town' },
        { label: '社区', value: 'hospital' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [],
      serviceType: []
    }
  },
  watch: {
    header: {
      handler() {
        if (this.form.range == 'town') {
          this.tableHeader = [
            { label: '地区', prop: 'town', width: '120' },
            { label: '社区', prop: 'hospital', width: '140' }
          ].concat(this.header)
        } else if (this.form.range == 'hospital') {
          this.tableHeader = [{ label: '社区', prop: 'hospital', width: '140' }].concat(this.header)
        }
      }
    }
  },
  methods: {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code,
          serviceType: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.initTime()
      this.searchFn()
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        isTotal: 1,
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      vm.tableData = []
      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('doctor/healthBank/redPackageRewardStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.data.list.map(function (item) {
            var data = JSON.parse(JSON.stringify(item))
            if (vm.form.range == 'town') {
              data.town = item.name
              data.hasChildren = item.code && true
            } else if (vm.form.range == 'hospital') {
              data.hospital = item.name
              data.hasChildren = false
            }
            return data
          })
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
      }
      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]
        }
      }
      this.exportLoading = true
      var fileName = `红包奖励汇总${new Date().getTime()}.xls`
      
      httpRequest.downLoadFileForAjax('statisticsExport/exPatinetIntegralAnalysis', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town',
          serviceType: ''
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code,
          serviceType: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    closeDialog() {
      this.dialogShow = false
      this.dialogShow1 = false
    },
    getDictData() {
      var vm = this
      statisticAPI.getDictByDictName({ name: 'health_bank_service_type' }).then(function (res) {
        vm.serviceType = [{ label: '全部', value: '' }].concat(res.list)
      })
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    load(row, treeNode, resolve) {
      var params = {
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      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('doctor/healthBank/redPackageRewardStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          var children = res.data.list.map(function (item) {
            var data = {
              ...item
            }
            if (len == 6) {
              data.hospital = item.name
              data.hasChildren = false
              data.town1 = row.code
            }
            return data
          })
          resolve(children)
        }
      })
    }
  },
  mounted() {
    this.init()
    this.getDictData()
  }
})

+ 88 - 0
component/statistics/MoneyRewardDetail/index.html

@ -0,0 +1,88 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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.patientName" placeholder="请输入患者姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">签约医生:</label>
      <el-input v-model="form.doctorName" placeholder="请输入签约医生姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">服务类型:</label>
      <el-select class="formWidth" v-model="form.serviceType">
        <el-option v-for="(option, index) in serviceType" :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.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">
      <el-button type="primary" size="mini" @click="searchFn">查询</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" label="序号" align="center"></el-table-column>
    <el-table-column prop="patient_name" label="姓名" align="center"></el-table-column>
    <el-table-column prop="mobile" label="电话" align="center"></el-table-column>
    <el-table-column prop="idcard" label="身份证号码" align="center"></el-table-column>
    <el-table-column prop="doctor_name" label="服务医生" align="center"></el-table-column>
    <el-table-column prop="org_name" label="服务机构" align="center"></el-table-column>
    <el-table-column prop="create_time" label="签到时间" align="center"></el-table-column>
    <el-table-column prop="img" label="签到图片" align="center">
      <template slot-scope="scope">
        <img :src="getImgurl(scope.row.img)" style="height: 40px; width: 40px" v-if="scope.row.img" />
      </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>
</div>

+ 199 - 0
component/statistics/MoneyRewardDetail/index.js

@ -0,0 +1,199 @@
var template = ''
$.ajax('../../../component/statistics/MoneyRewardDetail/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('money-reward-detail', {
  template: template,
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town',
        serviceType: ''
      },
      tableData: [],
      info: {},
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '按区', value: 'town' },
        { label: '按社区', value: 'hospital' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [],
      page: 1,
      size: 10,
      total: 0,
      serviceType: []
    }
  },
  methods: {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code,
          serviceType: ''
        }
        this.getHospital(selectedRole.code)
      }
      this.getDictData()
      this.initTime()
      this.searchFn()
    },
    
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    getDictData() {
      var vm = this
      statisticAPI.getDictByDictName({ name: 'health_bank_service_type' }).then(function (res) {
        vm.serviceType = [{label: '全部', value: ''}].concat(res.list)
      })
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
      }
      vm.tableData = []
      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]
        }
      }
      statisticAPI.findPatientFollowListByCondition(params).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.data.list
          vm.total = res.data.total
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        page: 1,
        pageSize: 99999
      }
      if (this.yearType == '1') {
        params.signYear = this.chooseYear
      } else {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0] + ' 00:00'
          params.endDate = this.chooseTime[1] + ' 23:59'
        }
      }
      this.exportLoading = true
      var fileName = `居民积分明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('statisticsExport/exPatinetIntegralAnalysis', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town'
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    handleCurrentChange(val) {
      this.page = val
      this.searchFn()
    },
    handleSizeChange(val) {
      this.size = val
      this.searchFn()
    }
  },
  mounted() {
    this.init()
  }
})

+ 3 - 3
component/statistics/RedBagReward/index.html

@ -23,11 +23,11 @@
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">居民姓名:</label>
      <el-input class="formWidth" v-model="form.patientName" placeholder="请输入患者姓名查询"></el-input>
      <el-input v-model="form.patientName" placeholder="请输入患者姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">签约医生:</label>
      <el-input class="formWidth" v-model="form.doctorName" placeholder="请输入签约医生姓名查询"></el-input>
      <el-input v-model="form.doctorName" placeholder="请输入签约医生姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">服务类型:</label>
@ -66,7 +66,7 @@
      <span class="eliminate" @click="eliminateClick">清除筛选条件</span>
    </div>
  </div>
  <el-table border :data="tableData" style="width: 100%" v-loading="loading" class="mt20">
  <el-table :data="tableData" style="width: 100%" v-loading="loading" class="mt20">
    <template>
      <el-table-column type="index" label="序号" align="center"></el-table-column>
      <el-table-column prop="hospitalName" label="社区名称" align="center"></el-table-column>

+ 64 - 0
component/statistics/ResidentScore/index.html

@ -0,0 +1,64 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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-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="searchFn">查询</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" row-key="code" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <el-table-column v-for="item in tableHeader" :key="item.id" :label="item.label" :min-width="item.width || 140">
      <template slot-scope="scope">
        <span >{{scope.row[item.prop]}}</span>
      </template>
    </el-table-column>
  </el-table>
</div>

+ 319 - 0
component/statistics/ResidentScore/index.js

@ -0,0 +1,319 @@
var template = ''
$.ajax('../../../component/statistics/ResidentScore/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('resident-score', {
  template: template,
  props: {
    header: {}
  },
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town'
      },
      tableData: [],
      dialogShow: false,
      info: {},
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '区', value: 'town' },
        { label: '社区', value: 'hospital' },
        { label: '团队', value: 'team' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: []
    }
  },
  watch: {
    header: {
      handler() {
        if (this.form.range == 'town') {
          this.tableHeader = getTownHeader().concat(this.header)
        } else if (this.form.range == 'hospital') {
          this.tableHeader = getHospitalHeader().concat(this.header)
        } else {
          this.tableHeader = getTeamHeader().concat(this.header)
        }
      }
    }
  },
  methods: {
    init() {
      var vm = this
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      } else {
        this.level = 3 // 社区管理
        this.rangeOptions = [
          { label: '社区', value: 'hospital' },
          { label: '团队', value: 'team' }
        ]
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code.substring(0, 6) }]
        this.hospitalOptions = [{ name: selectedRole.name, code: selectedRole.code }]
        this.form = {
          range: 'hospital',
          area: selectedRole.code.substring(0, 6),
          hospital: selectedRole.code
        }
        this.getTeam(selectedRole.code)
      }
      this.initTime()
      setTimeout(function () {
        vm.searchFn()
      }, 200)
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        isTotal: 1,
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      vm.tableData = []
      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('doctor/healthBank/integrateStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          vm.tableData = res.data.list.map(function (item) {
            var data = JSON.parse(JSON.stringify(item))
            if (vm.form.range == 'town') {
              data.town = item.name
              data.hasChildren = item.code && true
            } else if (vm.form.range == 'hospital') {
              data.hospital = item.name
              data.hasChildren = item.code && true
            } else if (vm.form.range == 'team') {
              data.team = item.name
            }
            return data
          })
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      if (this.yearType == '1') {
        params.startDate = this.chooseYear + '-01-01 00:00'
        params.endDate = this.chooseYear + '-12-31 23:59'
      } else {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0] + ' 00:00'
          params.endDate = this.chooseTime[1] + ' 23:59'
        }
      }
      this.exportLoading = true
      var fileName = `居民积分汇总${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('doctor/healthBank/exportIntegrateStatistics', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town'
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      } else {
        this.form = {
          range: 'hospital',
          area: selectedRole.code.substring(0, 6),
          hospital: selectedRole.code
        }
        this.getTeam(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    closeDialog() {
      this.dialogShow = false
      this.dialogShow1 = false
    },
    previewRecord(row) {
      var vm = this
      this.dialogShow = true
      httpRequest.get('doctor/familyBed/findCheckPlanDetail', { data: { id: row.id } }).then(function (res) {
        if (res.status == 200) {
          vm.info = res.data
          if (res.data.planDoctorList) {
            vm.info.planDoctor = res.data.planDoctorList
              .map(function (item) {
                return item.doctorName
              })
              .join(',')
          }
          if (res.data.signWay) {
            vm.info.signMethod = res.data.signWay == 1 ? '定位签到' : '拍照签到'
          }
        }
      })
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    load(row, treeNode, resolve) {
      var params = {
        menu: this.header
          .map(function (item) {
            return item.prop
          })
          .join(',')
      }
      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('doctor/healthBank/integrateStatistics', { data: params }).then(function (res) {
        if (res.status == 200) {
          var children = res.data.list.map(function (item) {
            var data = {
              ...item
            }
            if (len == 6) {
              data.hospital = item.name
              data.hasChildren = true
              data.town1 = row.code
            } else if (len == 10) {
              data.team = item.name
              data.hospital1 = row.code
              data.town1 = row.town1
            }
            return data
          })
          resolve(children)
        }
      })
    },
    getTeam(code) {
      var vm = this
      delete this.form.team
      var params = {
        hospital: code,
        area: this.form.area
      }
      httpRequest.get('statisticsExport/teamList', { data: params }).then(function (res) {
        vm.teamOptions = [{ id: '', name: '全部' }]
        vm.teamOptions = vm.teamOptions.concat(res.data)
      })
    }
  },
  mounted() {
    this.init()
  }
})

+ 81 - 0
component/statistics/ResidentScoreDetail/index.html

@ -0,0 +1,81 @@
<!-- 家庭病床css文件位置位于/component/common/jtbc.css -->
<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-select v-model="chooseYear" class="formWidth wd160">
          <el-option v-for="(item , index) in years" :key="index" :label="item" :value="item"></el-option>
        </el-select>
      </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.patientName" placeholder="请输入患者姓名查询"></el-input>
    </div>
    <div class="searchDiv pb20 pr20">
      <label class="c-333 c-f14">签约医生:</label>
      <el-input v-model="form.doctorName" 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">
      <el-button type="primary" size="mini" @click="searchFn">查询</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" label="序号" align="center"></el-table-column>
    <el-table-column prop="hospitalName" label="社区名称" align="center"></el-table-column>
    <el-table-column prop="name" label="居民" align="center"></el-table-column>
    <el-table-column prop="ssc" label="医保卡" align="center"></el-table-column>
    <el-table-column prop="idcard" label="身份证" align="center"></el-table-column>
    <el-table-column prop="mobile" label="手机号" align="center"></el-table-column>
    <el-table-column prop="address" label="地址" align="center"></el-table-column>
    <el-table-column prop="sign_doctor_name" label="签约医生" align="center"></el-table-column>
    <el-table-column prop="total" label="累计积分" align="center"></el-table-column>
    <el-table-column prop="useJf" label="已使用积分" align="center"></el-table-column>
    <el-table-column prop="surJf" label="未使用积分" align="center"></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>
</div>

+ 191 - 0
component/statistics/ResidentScoreDetail/index.js

@ -0,0 +1,191 @@
var template = ''
$.ajax('../../../component/statistics/ResidentScoreDetail/index.html', {
  data: {},
  dataType: 'html',
  cache: false,
  timeout: 60000,
  async: false,
  error: function (res) {},
  success: function (res) {
    template = res
  }
})
Vue.component('resident-score-detail', {
  template: template,
  data() {
    return {
      years: [],
      yearType: '1',
      chooseYear: null,
      chooseTime: null,
      form: {
        range: 'town'
      },
      tableData: [],
      info: {},
      loading: false,
      exportLoading: false,
      rangeOptions: [
        { label: '按区', value: 'town' },
        { label: '按社区', value: 'hospital' }
      ],
      areaOptions: [
        { label: '思明区', value: '350203' },
        { label: '海沧区', value: '350205' },
        { label: '湖里区', value: '350206' },
        { label: '集美区', value: '350211' },
        { label: '同安区', value: '350212' },
        { label: '翔安区', value: '350213' }
      ],
      level: 0,
      tableHeader: [],
      page: 1,
      size: 10,
      total: 0
    }
  },
  methods: {
    init() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (selectedRole.code.indexOf('350200') > -1) {
        this.level = 1 //  市卫健委
        this.areaOptions = [
          { label: '思明区', value: '350203' },
          { label: '海沧区', value: '350205' },
          { label: '湖里区', value: '350206' },
          { label: '集美区', value: '350211' },
          { label: '同安区', value: '350212' },
          { label: '翔安区', value: '350213' }
        ]
      } else if (selectedRole.code.length == 6) {
        this.level = 2 // 区管理
        this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      }
      this.initTime()
      this.searchFn()
    },
    initTime() {
      var vm = this
      var now = new Date()
      vm.nowyear = vm.chooseYear = now.getFullYear()
      vm.years = []
      for (i = vm.nowyear; i >= 2013; i--) {
        vm.years.push(i)
      }
    },
    searchFn() {
      var vm = this
      this.loading = true
      var params = {
        ...this.form,
        page: this.page,
        pageSize: this.size
      }
      vm.tableData = []
      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]
        }
      }
      statisticAPI.patinetIntegralAnalysis(params).then(function (res) {
        if (res.status == 200) {
          res.data.list.forEach(function (item) {
            item.ssc = item.ssc.replace(/^(.{4})(?:\d+)(.{1})$/, '$1****$2')
            // item.idcard = item.idcard.replace(/^(.{6})(?:\d+)(.{4})$/,"$1****$2")
          })
          vm.tableData = res.data.list
          vm.total = res.data.total
        }
        vm.loading = false
      })
    },
    exportTable() {
      var vm = this
      var params = {
        ...this.form,
        page: 1,
        pageSize: 99999
      }
      if (this.yearType == '1') {
        params.signYear = this.chooseYear
      } else {
        if (this.chooseTime) {
          params.startDate = this.chooseTime[0] + ' 00:00'
          params.endDate = this.chooseTime[1] + ' 23:59'
        }
      }
      this.exportLoading = true
      var fileName = `居民积分明细${new Date().getTime()}.xls`
      httpRequest.downLoadFileForAjax('statisticsExport/exPatinetIntegralAnalysis', fileName, params).then(function () {
        vm.exportLoading = false
      })
    },
    eliminateClick() {
      var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
      if (this.level == 1) {
        this.form = {
          range: 'town'
        }
      } else if (this.level == 2) {
        this.form = {
          range: 'town',
          area: selectedRole.code
        }
        this.getHospital(selectedRole.code)
      }
      this.yearType = '1'
      this.chooseYear = new Date().getFullYear()
      this.chooseTime = null
      this.$forceUpdate()
    },
    getHospital(code) {
      var vm = this
      delete this.form.hospital
      delete this.form.team
      var params = {
        type: 5,
        code: code
      }
      httpRequest.post('common/district', { data: params }).then(function (res) {
        vm.hospitalOptions = [{ code: '', name: '全部' }]
        vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
      })
    },
    resetArea() {
      if (this.level == 1) {
        delete this.form.area
        delete this.form.hospital
        delete this.form.team
      } else if (this.level == 2) {
        delete this.form.hospital
        delete this.form.team
      } else {
        delete this.form.team
      }
    },
    handleCurrentChange(val) {
      this.page = val
      this.searchFn()
    },
    handleSizeChange(val) {
      this.size = val
      this.searchFn()
    }
  },
  mounted() {
    this.init()
  }
})

BIN
css/element2.15/element-icons.ttf


BIN
css/element2.15/element-icons.woff


+ 6 - 0
css/element2.15/icon.css

@ -0,0 +1,6 @@
@font-face {
  font-family: element-icons;
  src: url(./element-icons.woff) format('woff'), url(./element-icons.ttf) format('truetype');
  font-weight: 400;
  font-style: normal;
}

css/element-ui-2.15.css → css/element2.15/index.css