| | |
| | | <template> |
| | | <div class="app-container" style="background-color: #f2f2f2; color: #fff"> |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <el-row :gutter="8"> |
| | | <el-col :span="6"> |
| | | <div class="app-container"> |
| | | <!-- 筛选条件卡片 --> |
| | | <el-card class="filter-card"> |
| | | <el-row :gutter="16"> |
| | | <el-col :xs="24" :sm="8" :md="6"> |
| | | <el-date-picker |
| | | v-model="selecttime" |
| | | type="monthrange" |
| | | range-separator="至" |
| | | start-placeholder="开始月份" |
| | | end-placeholder="结束月份" |
| | | style="width: 100%" |
| | | value-format="yyyy-MM-dd" |
| | | @change="getTimeList" |
| | | style="width: 100%" |
| | | > |
| | | </el-date-picker> |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-col :xs="24" :sm="8" :md="6"> |
| | | <el-select |
| | | style="width: 100%" |
| | | v-model="reportervalue" |
| | | placeholder="请选择报告人" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in reportlist" |
| | | :key="item.index" |
| | | :label="item.reportername" |
| | | :value="item.reporterno" |
| | | > |
| | | </el-option> |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-col :xs="24" :sm="8" :md="6"> |
| | | <el-select |
| | | v-model="city" |
| | | placeholder="请选择所属地市" |
| | | @change="getprovincedata" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-button |
| | | type="primary" |
| | | @click="selectdatas" |
| | | icon="el-icon-search" |
| | | style="margin-left: 10px" |
| | | >搜索</el-button |
| | | > |
| | | <el-col :xs="24" :sm="24" :md="6"> |
| | | <div class="action-buttons"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | @click="selectdatas" |
| | | > |
| | | 搜索 |
| | | </el-button> |
| | | <el-button icon="el-icon-refresh" @click="resetFilters"> |
| | | 重置 |
| | | </el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | |
| | | <el-row |
| | | :gutter="10" |
| | | style="font-size: 18px; font-weight: bold; margin-top: 10px" |
| | | > |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donatebaseinfo', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <!-- params: { |
| | | tempRecordState: 0, |
| | | }, --> |
| | | <!-- @click="tobaseinfo0" --> |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="user" /> 潜在捐献累计:{{ |
| | | this.donateNumData.numberOfDonate |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Medicalevaluation', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card |
| | | shadow="always" |
| | | style="color: #566f94" |
| | | @click="Tomedicalevalua" |
| | | <!-- 数据概览区域 --> |
| | | <el-card class="overview-card"> |
| | | <template #header> |
| | | <div class="card-header"> |
| | | <span class="header-title">数据概览</span> |
| | | <span class="header-subtitle">实时统计指标</span> |
| | | </div> |
| | | </template> |
| | | |
| | | <el-row :gutter="16"> |
| | | <!-- 第一行统计卡片 --> |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donatebaseinfo', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <svg-icon icon-class="tool" /> 完成医学评估累计:{{ |
| | | this.donateNumData.numberOfMedicalEvaluation |
| | | }} 例 |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #409EFF;"> |
| | | <svg-icon icon-class="user" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfDonate }} |
| | | </div> |
| | | <div class="stat-title">上报案例累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Medicalevaluation', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #67C23A;"> |
| | | <svg-icon icon-class="tool" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfMedicalEvaluation }} |
| | | </div> |
| | | <div class="stat-title">捐献案例累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Relativesconfirmation', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #E6A23C;"> |
| | | <svg-icon icon-class="checkbox" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfRelativeConfirmation }} |
| | | </div> |
| | | <div class="stat-title">供体转运累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'EthicalReview', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #F56C6C;"> |
| | | <svg-icon icon-class="education" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfEthicalReview }} |
| | | </div> |
| | | <div class="stat-title">亲属确认累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <!-- 第二行统计卡片 --> |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #909399;"> |
| | | <svg-icon icon-class="druid" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfDonatePeople }} |
| | | </div> |
| | | <div class="stat-title">完成伦理审查累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Relativesconfirmation', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="checkbox" /> 完成亲属确认累计:{{ |
| | | this.donateNumData.numberOfRelativeConfirmation |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'EthicalReview', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="education" /> 完成伦理审查累计:{{ |
| | | this.donateNumData.numberOfEthicalReview |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row |
| | | :gutter="10" |
| | | style="margin-top: 10px; font-size: 18px; font-weight: bold" |
| | | > |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Organallocation', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="druid" /> 完成器官分配累计:{{ |
| | | this.donateNumData.numberOfDonatePeople |
| | | }} 个 |
| | | <!-- this.donateNumData.numberOfOrgans --> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donationwitness', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="job" /> 完成获取见证累计:{{ |
| | | this.donateNumData.numberOfWitness |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donatefinish', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: '', |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="lock" /> 捐献完成累计:{{ |
| | | this.donateNumData.numberOfCompletion |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <router-link |
| | | @click.native="closeBaseInfoTab" |
| | | :to="{ |
| | | name: 'Donatebaseinfo', |
| | | params: { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: 99, |
| | | reporterno: reportervalue, |
| | | shen: searchAddress.shen, |
| | | shi: searchAddress.shi, |
| | | qu: searchAddress.qu, |
| | | city: city, |
| | | }, |
| | | }" |
| | | > |
| | | <el-card shadow="always" style="color: #566f94"> |
| | | <svg-icon icon-class="lock" /> 捐献终止累计:{{ |
| | | this.donateNumData.numberOfTerminated |
| | | }} 例 |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row style="margin-top: 10px" :gutter="5"> |
| | | <el-col :span="7"> |
| | | <el-card shadow="always" style="height: 640px" ref="orgNumberCard"> |
| | | <el-row style="margin-bottom: 20px"> |
| | | <el-col :span="14"> |
| | | <span style="font-size: 18px; color: #566f94; font-weight: bold" |
| | | >各地区医院案例数据</span |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donationwitness', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #B37FEB;"> |
| | | <svg-icon icon-class="job" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfWitness }} |
| | | </div> |
| | | <div class="stat-title">完成器官分配累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donatefinish', |
| | | params: { ...routeParams } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #FF85C0;"> |
| | | <svg-icon icon-class="lock" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfCompletion }} |
| | | </div> |
| | | <div class="stat-title">完成获取累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | |
| | | <el-col :xs="12" :sm="6" :md="3"> |
| | | <router-link |
| | | :to="{ |
| | | name: 'Donatebaseinfo', |
| | | params: { ...routeParams, terminationcase: 1 } |
| | | }" |
| | | class="stat-card-link" |
| | | > |
| | | <el-card class="stat-card" shadow="hover"> |
| | | <div class="stat-content"> |
| | | <div class="stat-icon" style="background-color: #5DC8EF;"> |
| | | <svg-icon icon-class="lock" /> |
| | | </div> |
| | | <div class="stat-info"> |
| | | <div class="stat-value"> |
| | | {{ donateNumData.numberOfTerminated }} |
| | | </div> |
| | | <div class="stat-title">捐献终止累计</div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </router-link> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | |
| | | <!-- 指标分析区域 --> |
| | | <el-row :gutter="16" class="analysis-section"> |
| | | <el-col :xs="24" :lg="12"> |
| | | <el-card class="chart-card"> |
| | | <template #header> |
| | | <div class="card-header"> |
| | | <span>指标数据分析</span> |
| | | <router-link |
| | | :to="{ |
| | | name: 'DonationProcess', |
| | | params: { ...routeParams, terminationcase: 1 } |
| | | }" |
| | | > |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | <el-row> |
| | | |
| | | </el-row> |
| | | <dv-scroll-board |
| | | :config="config" |
| | | style="width: 100%; height: 540px" |
| | | /> |
| | | <el-button type="primary" size="small" round |
| | | >捐献进程</el-button |
| | | > |
| | | </router-link> |
| | | </div> |
| | | </template> |
| | | <div class="metrics-wrapper"> |
| | | <div class="metrics-grid"> |
| | | <div class="metric-item"> |
| | | <div class="metric-title">器官捐献转化率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.donateTransferRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">平均器官产出率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.organProductionRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">获取器官利用率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.organUsedRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item full-width"> |
| | | <div class="metric-title">器官捐献分类占比</div> |
| | | <div class="metric-breakdown"> |
| | | <span |
| | | >DBD: |
| | | {{ (qualirtData.dbddonateRate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DCD: |
| | | {{ (qualirtData.dcddonateRate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DBCD: |
| | | {{ (qualirtData.dbcddonateRate * 100).toFixed(2) }}%</span |
| | | > |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">获取前活检率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.organBeforeGetCheckRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">获取后活检率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.organAfterGetCheckRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">边缘供器官比率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.marginOrganRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item"> |
| | | <div class="metric-title">器官保存液病原菌培养阳性率</div> |
| | | <div class="metric-value"> |
| | | {{ (qualirtData.germPositiveRate * 100).toFixed(2) }}% |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item full-width"> |
| | | <div class="metric-title">移植器官原发性无功能发生率</div> |
| | | <div class="metric-breakdown"> |
| | | <span |
| | | >总: {{ (qualirtData.totalPNFRate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DBD: {{ (qualirtData.dbdpnfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DCD: {{ (qualirtData.dcdpnfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DBCD: {{ (qualirtData.dbcdpnfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="metric-item full-width"> |
| | | <div class="metric-title">移植器官术后功能延迟性恢复发生率</div> |
| | | <div class="metric-breakdown"> |
| | | <span |
| | | >总: {{ (qualirtData.totalDGFRate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DBD: {{ (qualirtData.dbddgfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DCD: {{ (qualirtData.dcddgfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | <span |
| | | >DBCD: {{ (qualirtData.dbcddgfrate * 100).toFixed(2) }}%</span |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="9"> |
| | | <el-card shadow="always" style="height: 640px" ref="organChartCard"> |
| | | <OrganNumChart :cdata="organData" /> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; font-weight: bold; height: 640px" |
| | | ref="statisticsCard" |
| | | > |
| | | <el-row style="margin-bottom: 20px"> |
| | | <span style="font-size: 18px; color: #566f94; font-weight: bold" |
| | | >本年度指标数据分析</span |
| | | > |
| | | </el-row> |
| | | <el-row :gutter="3"> |
| | | <el-col :span="8" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | 器官捐献转化率<br /> |
| | | {{ (this.qualirtData.donateTransferRate * 100).toFixed(2) }}% |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="8" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | 平均器官产出率<br /> |
| | | {{ (this.qualirtData.organProductionRate * 100).toFixed(2) }}% |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="8" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | 获取器官利用率<br /> |
| | | {{ (this.qualirtData.organUsedRate * 100).toFixed(2) }}% |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="3" style="margin-top: 5px"> |
| | | <el-col :span="24" style="text-align: center"> |
| | | <el-card shadow="always" style="padding: 0; color: #566f94"> |
| | | <el-row> 器官捐献分类占比 </el-row> |
| | | <el-row :gutter="10" style="margin-top: 10px"> |
| | | <el-col :span="8" style="text-align: center" |
| | | >DBD: |
| | | {{ (this.qualirtData.dbddonateRate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | <el-col :span="8" style="text-align: center"> |
| | | DCD: |
| | | {{ (this.qualirtData.dcddonateRate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | <el-col :span="8" style="text-align: center"> |
| | | DBCD: |
| | | {{ (this.qualirtData.dbcddonateRate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="3" style="margin-top: 5px"> |
| | | <el-col :span="12" style="text-align: center; color: #566f94"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | <el-row> |
| | | <span style="font-size: 14px"> 获取前活检率</span> |
| | | </el-row> |
| | | {{ |
| | | (this.qualirtData.organBeforeGetCheckRate * 100).toFixed(2) |
| | | }}% |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="12" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | <el-row> |
| | | <span style="font-size: 14px">获取后活检率</span> |
| | | </el-row> |
| | | {{ |
| | | (this.qualirtData.organAfterGetCheckRate * 100).toFixed(2) |
| | | }}% |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | <el-row :gutter="3" style="margin-top: 5px"> |
| | | <el-col :span="12" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | <span style="font-size: 14px">边缘供器官比率</span><br /> |
| | | {{ (this.qualirtData.marginOrganRate * 100).toFixed(2) }}% |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="12" style="text-align: center"> |
| | | <el-card |
| | | shadow="always" |
| | | style="padding: 0; margin: 0; width: 100%; color: #566f94" |
| | | > |
| | | <span style="font-size: 14px">器官保存液病原菌培养阳性率</span> |
| | | {{ (this.qualirtData.germPositiveRate * 100).toFixed(2) }}% |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="3" style="margin-top: 5px"> |
| | | <el-col :span="24" style="text-align: center"> |
| | | <el-card shadow="always" style="padding: 0; color: #566f94"> |
| | | <el-row> 移植器官原发性无功能发生率 </el-row> |
| | | <el-row :gutter="10" style="margin-top: 10px"> |
| | | <el-row> |
| | | <el-col :span="6" style="text-align: center"> |
| | | 总发生率<br /> |
| | | {{ (this.qualirtData.totalPNFRate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DBD<br /> |
| | | {{ (this.qualirtData.dbdpnfrate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DCD<br /> |
| | | {{ (this.qualirtData.dcdpnfrate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DBCD<br /> |
| | | {{ (this.qualirtData.dbcdpnfrate * 100).toFixed(2) }}% |
| | | </el-col> |
| | | </el-row> |
| | | </el-row> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="3" style="margin-top: 5px"> |
| | | <el-col :span="24" style="text-align: center"> |
| | | <el-card shadow="always" style="padding: 0; color: #566f94"> |
| | | <el-row> 移植器官术后功能延迟性恢复发生率 </el-row> |
| | | <el-row :gutter="10" style="margin-top: 10px"> |
| | | <el-row> |
| | | <el-col :span="6" style="text-align: center"> |
| | | 总发生率<br />{{ |
| | | (this.qualirtData.totalDGFRate * 100).toFixed(2) |
| | | }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DBD<br />{{ |
| | | (this.qualirtData.dbddgfrate * 100).toFixed(2) |
| | | }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DCD<br />{{ |
| | | (this.qualirtData.dcddgfrate * 100).toFixed(2) |
| | | }}% |
| | | </el-col> |
| | | <el-col :span="6" style="text-align: center"> |
| | | DBCD<br />{{ |
| | | (this.qualirtData.dbcddgfrate * 100).toFixed(2) |
| | | }}% |
| | | </el-col> |
| | | </el-row> |
| | | </el-row> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-col :xs="24" :lg="12"> |
| | | <el-card class="chart-card"> |
| | | <template #header> |
| | | <div class="card-header"> |
| | | <span>器官数量统计</span> |
| | | </div> |
| | | </template> |
| | | <OrganNumChart :cdata="organData" :CommonOrgan="CommonOrgan" /> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | listMedicalevaluation, |
| | | listnewMedicalevaluation, //通过VO获取 |
| | | getMedicalevaluation, |
| | | delMedicalevaluation, |
| | | addMedicalevaluation, |
| | | updateMedicalevaluation, |
| | | exportMedicalevaluation, |
| | | } from "@/api/project/medicalevaluation"; |
| | | import { |
| | | listRelativesconfirmation, |
| | | getRelativesconfirmation, |
| | | delRelativesconfirmation, |
| | | addRelativesconfirmation, |
| | | updateRelativesconfirmation, |
| | | listnewRelativesconfirmation, |
| | | // exportRelativesconfirmation, |
| | | updatedonatorno, |
| | | updateDonateNumber, |
| | | downloadconfirmationinfo, |
| | | } from "@/api/project/relativesconfirmation"; |
| | | import { |
| | | listEthicalreviewopinions, |
| | | getEthicalreviewopinions, |
| | | delEthicalreviewopinions, |
| | | addEthicalreviewopinions, |
| | | updateEthicalreviewopinions, |
| | | listnewEthicalreviewopinions, |
| | | } from "@/api/project/ethicalreviewopinions"; |
| | | import { |
| | | getByInfoId, |
| | | listDonationwitness, |
| | | getDonationwitness, |
| | | delDonationwitness, |
| | | addDonationwitness, |
| | | updateDonationwitness, |
| | | listnewDonationwitness, |
| | | downloadwitnessinfo, |
| | | } from "@/api/project/donationwitness"; |
| | | import { |
| | | getDonatecompletioninfo, |
| | | listnewDonatecompletioninfo, |
| | | addDonatecompletioninfo, |
| | | updateDonatecompletioninfo, |
| | | listDonatecompletioninfo, |
| | | downloadcompletioninfo, |
| | | } from "@/api/project/donatecompletioninfo"; |
| | | |
| | | import { listOrganallocation } from "@/api/project/organallocation"; |
| | | |
| | | import RankChart from "./components/rankbarchart"; |
| | | import OrganNumChart from "./components/organnumchart"; |
| | | import { getUserProfile } from "@/api/system/user"; |
| | | import { listDonatebaseinfo } from "@/api/project/donatebaseinfo"; |
| | | import { listnewMedicalevaluation } from "@/api/project/medicalevaluation"; |
| | | import { listnewRelativesconfirmation } from "@/api/project/relativesconfirmation"; |
| | | import { listnewEthicalreviewopinions } from "@/api/project/ethicalreviewopinions"; |
| | | import { listOrganallocation } from "@/api/project/organallocation"; |
| | | import { listnewDonationwitness } from "@/api/project/donationwitness"; |
| | | import { listnewDonatecompletioninfo } from "@/api/project/donatecompletioninfo"; |
| | | import { |
| | | getDonateorganSum, |
| | | getOrgansOfHospitalByMonth, |
| | | getOrgansQuality |
| | | } from "@/api/project/donateorgan"; |
| | | import OrganNumChart from "./components/organnumchart"; |
| | | import dayjs from "dayjs"; |
| | | import { |
| | | getOrgansQuality, |
| | | getAllOrganInfo, |
| | | getDonateNumber, |
| | | getcountByRecordState, |
| | | getOrgansOfHospital, |
| | | getNumberOfOrgan, |
| | | getOrgansOfHospitalByMonth, |
| | | getDonateorganSum, |
| | | } from "@/api/project/donateorgan"; |
| | | listSystemmessageList, |
| | | listSystemmessageCount, |
| | | updateSystemmessage |
| | | } from "@/api/project/message"; |
| | | |
| | | import Li_area_select from "@/components/Address"; |
| | | |
| | | const DEF_TABLE_CONFIG = { |
| | |
| | | oddRowBGC: "#f9f9f9", |
| | | evenRowBGC: "white", |
| | | columnWidth: [150, 300, 30, 10, 30], |
| | | rowNum: 14, |
| | | rowNum: 14 |
| | | }; |
| | | |
| | | export default { |
| | | name: "home", |
| | | dicts: ["sys_messagestatus"], |
| | | components: { |
| | | RankChart, |
| | | OrganNumChart, |
| | | Li_area_select, |
| | | Li_area_select |
| | | }, |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | city: "", |
| | | reportno: "", |
| | | selecttime: [], |
| | | year: "选择年份", |
| | | isloading: false, |
| | | maxHeight: 0, |
| | | reportervalue: "", |
| | | selecttime: [new Date(new Date().getFullYear(), 0), new Date()], |
| | | starttime: dayjs().format("YYYY-01-01 00:00:00"), |
| | | endtime: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | |
| | | provinceData: [ |
| | | { label: "全部", value: "" }, |
| | | { label: "全部地市", value: "" }, |
| | | { label: "杭州市", value: "1" }, |
| | | { label: "宁波市", value: "2" }, |
| | | { label: "温州市", value: "3" }, |
| | |
| | | { label: "衢州市", value: "8" }, |
| | | { label: "舟山市", value: "9" }, |
| | | { label: "台州市", value: "A" }, |
| | | { label: "丽水市", value: "B" }, |
| | | { label: "丽水市", value: "B" } |
| | | ], |
| | | value: "", |
| | | //时间选项 |
| | | timeoption: "", |
| | | //起始时间 |
| | | starttime: this.$moment().format("YYYY-01-01 00:00:00"), |
| | | //结束时间 |
| | | endtime: this.$moment().format("YYYY-MM-DD HH:mm:ss"), |
| | | |
| | | reportlist: [], |
| | | |
| | | organData: [ |
| | | { |
| | | key: "heart", |
| | | name: "心脏", |
| | | value: 0, |
| | | code: "C38", |
| | | value1: 0, |
| | | code: "C38" |
| | | }, |
| | | { |
| | | key: "fullLiver", |
| | | name: "全肝", |
| | | name: "肝脏", |
| | | value: 0, |
| | | code: "C22", |
| | | value1: 0, |
| | | |
| | | code: "C22" |
| | | }, |
| | | { |
| | | key: "leftLiver", |
| | | name: "左肝", |
| | | key: "Lefthalfliver", |
| | | name: "左半肝", |
| | | value: 0, |
| | | code: "C22L", |
| | | value1: 0, |
| | | |
| | | code: "C22L" |
| | | }, |
| | | { |
| | | key: "rightLiver", |
| | | name: "右肝", |
| | | key: "Leftouterlobe", |
| | | name: "左外叶", |
| | | value: 0, |
| | | code: "C22R", |
| | | value1: 0, |
| | | |
| | | code: "C22L0" |
| | | }, |
| | | { |
| | | key: "Righthalfliver", |
| | | name: "右半肝", |
| | | value: 0, |
| | | value1: 0, |
| | | |
| | | code: "C22R" |
| | | }, |
| | | { |
| | | key: "RML", |
| | | name: "右三叶", |
| | | value: 0, |
| | | value1: 0, |
| | | |
| | | code: "C22R0" |
| | | }, |
| | | |
| | | { |
| | | key: "leftRenal", |
| | | name: "左肾", |
| | | value: 0, |
| | | code: "C64L", |
| | | value1: 0, |
| | | |
| | | code: "C64L" |
| | | }, |
| | | { |
| | | key: "rightRenal", |
| | | name: "右肾", |
| | | value: 0, |
| | | code: "C64R", |
| | | value1: 0, |
| | | |
| | | code: "C64R" |
| | | }, |
| | | { |
| | | key: "fullLung", |
| | | name: "全肺", |
| | | value: 0, |
| | | code: "C34", |
| | | value1: 0, |
| | | |
| | | code: "C34" |
| | | }, |
| | | { |
| | | key: "leftLung", |
| | | name: "左肺", |
| | | value: 0, |
| | | code: "C34L", |
| | | value1: 0, |
| | | |
| | | code: "C34L" |
| | | }, |
| | | { |
| | | key: "rightLung", |
| | | name: "右肺", |
| | | value: 0, |
| | | code: "C34R", |
| | | value1: 0, |
| | | |
| | | code: "C34R" |
| | | }, |
| | | { |
| | | key: "", |
| | | name: "小肠", |
| | | value: 0, |
| | | code: "C17", |
| | | value1: 0, |
| | | |
| | | code: "C17" |
| | | }, |
| | | { |
| | | key: "", |
| | | name: "胰腺", |
| | | value: 0, |
| | | code: "C25", |
| | | value1: 0, |
| | | |
| | | code: "C25" |
| | | }, |
| | | { |
| | | key: "leftEye", |
| | | name: "左眼膜", |
| | | value: 0, |
| | | code: "C69L", |
| | | value1: 0, |
| | | |
| | | code: "C69L" |
| | | }, |
| | | { |
| | | key: "rightEye", |
| | | name: "右眼膜", |
| | | value: 0, |
| | | code: "C69R", |
| | | value1: 0, |
| | | |
| | | code: "C69R" |
| | | }, |
| | | { |
| | | key: "", |
| | | name: "其它", |
| | | value: 0, |
| | | code: "C01", |
| | | }, |
| | | value1: 0, |
| | | |
| | | code: "C01" |
| | | } |
| | | // { |
| | | // key: "body", |
| | | // name: "遗体", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | //统计指标数据 |
| | | tableData: [ |
| | | { |
| | | date: "2016-05-02", |
| | | name: "王小虎", |
| | | address: "上海市普陀区金沙江路 1518 弄" |
| | | }, |
| | | { |
| | | date: "2016-05-04", |
| | | name: "王小虎", |
| | | address: "上海市普陀区金沙江路 1517 弄" |
| | | }, |
| | | { |
| | | date: "2016-05-01", |
| | | name: "王小虎", |
| | | address: "上海市普陀区金沙江路 1519 弄" |
| | | }, |
| | | { |
| | | date: "2016-05-03", |
| | | name: "王小虎", |
| | | address: "上海市普陀区金沙江路 1516 弄" |
| | | } |
| | | ], |
| | | qualirtData: { |
| | | dbcddgfrate: 0, |
| | | //dbcd捐献分类占比 |
| | | dbcddonateRate: 0, |
| | | dbcdpnfrate: 0, |
| | | dbddgfrate: 0, |
| | | //dbd捐献分类占比 |
| | | dbddonateRate: 0, |
| | | dbdpnfrate: 0, |
| | | dcddgfrate: 0, |
| | | //dcd捐献分类占比 |
| | | dcddonateRate: 0, |
| | | dcddonateRate: 0, |
| | | dcdpnfrate: 0, |
| | | //捐献转化率 |
| | | donateTransferRate: 0, |
| | | //病原菌阳性率 |
| | | germPositiveRate: 0, |
| | | //边缘器官比率 |
| | | marginOrganRate: 0, |
| | | organAfterGetCheckRate: 0, |
| | | organBeforeGetCheckRate: 0, |
| | | //器官产出率 |
| | | organProductionRate: 0, |
| | | //器官利用率 |
| | | organUsedRate: 0, |
| | | totalDGFRate: 0, |
| | | totalPNFRate: 0, |
| | | totalPNFRate: 0 |
| | | }, |
| | | //捐献累计数量 |
| | | |
| | | donateNumData: { |
| | | //捐献完成数量 |
| | | numberOfCompletion: 0, |
| | | //潜在捐献登记数量 |
| | | numberOfDonate: 0, |
| | | //伦理审查数量 |
| | | numberOfEthicalReview: 0, |
| | | //医学评估数量 |
| | | numberOfMedicalEvaluation: 0, |
| | | //器官分配数量 |
| | | numberOfOrgans: 0, |
| | | //家属确认数量 |
| | | numberOfRelativeConfirmation: 0, |
| | | //获取见证数量 |
| | | numberOfWitness: 0, |
| | | //终止数量 |
| | | numberOfTerminated: 0, |
| | | numberOfDonatePeople: 0 |
| | | }, |
| | | |
| | | CommonOrgan: { |
| | | countSum: 1, |
| | | abandonCountSum: 0 |
| | | }, |
| | | config: { |
| | | ...DEF_TABLE_CONFIG, |
| | | ...DEF_TABLE_CONFIG |
| | | }, |
| | | reportlist: [], |
| | | reportervalue: "", |
| | | searchAddress: { |
| | | sheng: "浙江省", |
| | | shi: "", |
| | | qu: "", |
| | | }, |
| | | qu: "" |
| | | } |
| | | }; |
| | | }, |
| | | // listnewEthicalreviewopinions |
| | | created() { |
| | | // this.listnewMedicalevaluation() |
| | | this.GetUser(); |
| | | }, |
| | | mounted() { |
| | | this.$nextTick(() => { |
| | | this.GetDonateOrganNum(); |
| | | this.GetDonateOrganQuality(); |
| | | // this.GetDonateNum(); |
| | | this.value = "杭州市"; |
| | | this.GetOrgDonateNumNew(); |
| | | this.GetOrgDonateNum(); |
| | | }); |
| | | }, |
| | | methods: { |
| | | getprovincedata() {}, |
| | | |
| | | get_unix_time(dateStr) { |
| | | var newstr = dateStr.replace(/-/g, "/"); |
| | | var date = new Date(newstr); |
| | | var time_str = date.getTime().toString(); |
| | | return time_str.substr(0, 10); |
| | | // 获取用户信息 |
| | | GetUser() { |
| | | getUserProfile() |
| | | .then(res => { |
| | | this.userInfo = res.data; |
| | | }) |
| | | .catch(error => { |
| | | console.error("获取用户信息失败:", error); |
| | | }); |
| | | }, |
| | | |
| | | resetArr(Arr) { |
| | | var hash = {}; |
| | | Arr = Arr.reduce(function (arr, current) { |
| | | hash[current.reporterno] |
| | | ? "" |
| | | : (hash[current.reporterno] = true && arr.push(current)); |
| | | return arr; |
| | | }, []); |
| | | return Arr; |
| | | // 重置筛选条件 |
| | | resetFilters() { |
| | | this.selecttime = [new Date(new Date().getFullYear(), 0), new Date()]; |
| | | this.reportervalue = ""; |
| | | this.city = ""; |
| | | this.getTimeList(); |
| | | this.selectdatas(); |
| | | }, |
| | | // tobaseinfo0(){ |
| | | // this.$router.push({path:'/Donatebaseinfo', query: {userid: 0 }}) |
| | | // }, |
| | | |
| | | // 时间选择处理 |
| | | getTimeList(e) { |
| | | if (this.selecttime && this.selecttime.length === 2) { |
| | | this.starttime = this.selecttime[0] + " 00:00:00"; |
| | | let endDate = new Date(this.selecttime[1]); |
| | | endDate.setMonth(endDate.getMonth() + 1); |
| | | endDate.setDate(0); |
| | | this.endtime = dayjs(endDate).format("YYYY-MM-DD 23:59:59"); |
| | | } else { |
| | | this.starttime = dayjs().format("YYYY-01-01 00:00:00"); |
| | | this.endtime = dayjs().format("YYYY-MM-DD HH:mm:ss"); |
| | | } |
| | | }, |
| | | |
| | | // 搜索数据 |
| | | selectdatas() { |
| | | this.GetDonateOrganNum(); |
| | | this.GetDonateOrganQuality(); |
| | | // this.GetDonateNum(); |
| | | this.GetOrgDonateNumNew(); |
| | | this.GetOrgDonateNum(); |
| | | }, |
| | | getTimeList(e) { |
| | | if (this.selecttime != 0) { |
| | | this.endtime = this.selecttime[1]; |
| | | this.starttime = this.selecttime[0]; |
| | | // if (this.endtime == this.starttime) { |
| | | let num = Number(this.endtime.slice(5, 7)); |
| | | if (num < 9) { |
| | | let mon = Number(this.endtime.slice(6, 7)); |
| | | |
| | | this.endtime = |
| | | this.endtime.slice(0, 5) + |
| | | "0" + |
| | | (mon + 1) + |
| | | "-" + |
| | | "01" + |
| | | " " + |
| | | "00" + |
| | | ":" + |
| | | "00" + |
| | | ":" + |
| | | "00"; |
| | | } |
| | | // this.endtime=this.endtime.slice(0,5)年 |
| | | else if (num >= 10) { |
| | | this.endtime = |
| | | this.endtime.slice(0, 5) + |
| | | (num + 1) + |
| | | "-" + |
| | | "01" + |
| | | " " + |
| | | "00" + |
| | | ":" + |
| | | "00" + |
| | | ":" + |
| | | "00"; |
| | | } else { |
| | | this.endtime = |
| | | this.endtime.slice(0, 5) + |
| | | "10" + |
| | | "-" + |
| | | "01" + |
| | | " " + |
| | | "00" + |
| | | ":" + |
| | | "00" + |
| | | ":" + |
| | | "00"; |
| | | } |
| | | this.starttime = this.starttime + " " + "00" + ":" + "00" + ":" + "00"; |
| | | // } |
| | | } else { |
| | | this.starttime = "1998-01-01 00:00:00"; |
| | | this.endtime = "2998-01-01 00:00:00"; |
| | | } |
| | | }, |
| | | Tobaseinfo() { |
| | | this.$router.push("../../donatebaseinfo/index.vue"); |
| | | }, |
| | | Tomedicalevalua() { |
| | | this.$router.push("../../medicalevaluation/index.vue"); |
| | | }, |
| | | getyearvalue() { |
| | | console.log("year de value:", this.year); |
| | | }, |
| | | handlerInput(e) { |
| | | console.log("全省导览当前所选年份:", e); |
| | | }, |
| | | //获取器官捐献数量 |
| | | // 获取器官数量统计 |
| | | GetDonateOrganNum() { |
| | | let param = { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | city: this.city, |
| | | |
| | | // repoterno:'015' |
| | | city: this.city |
| | | }; |
| | | |
| | | if (this.reportervalue != "") { |
| | | if (this.reportervalue) { |
| | | param.reporterno = this.reportervalue; |
| | | } |
| | | getDonateorganSum(param).then((response) => { |
| | | /* |
| | | let list = this.organData.map((item) => item); |
| | | for (let i = 0; i < list.length; i++) { |
| | | let k = list[i].key; |
| | | } |
| | | this.organData = list; |
| | | */ |
| | | let list = response.data; |
| | | for (let i = 0; i < this.organData.length; i++) { |
| | | let ii = list.findIndex( |
| | | (item) => item.organNo == this.organData[i].code |
| | | ); |
| | | if(ii > -1){ |
| | | this.organData[i].value = list[ii].count; |
| | | } |
| | | |
| | | |
| | | getDonateorganSum(param).then(response => { |
| | | if (response.code === 200) { |
| | | // this.CommonOrgan = response.data || { |
| | | // countSum: 1, |
| | | // abandonCountSum: 0 |
| | | // }; |
| | | // let list = response.data.organInfoVOList || []; |
| | | // this.organData.forEach(item => { |
| | | // const found = list.find(organ => organ.organNo === item.code); |
| | | // if (found) { |
| | | // item.value = found.count || 0; |
| | | // item.value1 = found.abandonCount || 0; |
| | | // } |
| | | // }); |
| | | } |
| | | }); |
| | | }, |
| | | //获取指标监控数据 |
| | | |
| | | // 获取质量指标数据 |
| | | GetDonateOrganQuality() { |
| | | let starttime = this.selecttime.length > 0 ? this.selecttime[0] : ""; |
| | | let endtime = |
| | | this.selecttime.length > 0 |
| | | ? this.$moment(this.selecttime[1]) |
| | | .add(1, "month") |
| | | .add(-1, "days") |
| | | .format("YYYY-MM-DD") |
| | | : ""; |
| | | |
| | | let param = { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | city: this.city, |
| | | // repoterno:'015' |
| | | city: this.city |
| | | }; |
| | | getOrgansQuality(param).then((response) => { |
| | | if (response.code == 200) { |
| | | |
| | | getOrgansQuality(param).then(response => { |
| | | if (response.code === 200) { |
| | | this.qualirtData = response.data; |
| | | } else { |
| | | console.log("获取指标监控数据失败!"); |
| | | } |
| | | }); |
| | | }, |
| | | //获取累计捐献信息数据 |
| | | GetDonateNum() { |
| | | let param = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | reportno: this.reportervalue, |
| | | city: this.city, |
| | | // residenceprovince: this.$refs.areaSelect.getSheng(), |
| | | // residencecity: this.$refs.areaSelect.getShi(), |
| | | // residencetown: this.$refs.areaSelect.getQu(), |
| | | }; |
| | | // getcountByRecordState(param).then(res=>{ |
| | | // console.log('dawdwadwadwad',res); |
| | | // if (res.code == 200) { |
| | | // this.donateNumData = res.data; |
| | | // this.donateNumData.numberOfDonatePeople = |
| | | // res.data.numberOfDonatePeople; |
| | | // console.log("this.donateNumData", this.donateNumData); |
| | | // } else { |
| | | // } |
| | | // }) |
| | | // getDonateNumber; |
| | | |
| | | // getDonateNumber(param).then((response) => { |
| | | // console.log("获取累计捐献信息数据", response.code, response.data); |
| | | // if (response.code == 200) { |
| | | // //先注销的数据 |
| | | // // this.donateNumData = response.data; |
| | | // this.donateNumData.numberOfDonate = response.data.numberOfDonate; |
| | | |
| | | // this.donateNumData.numberOfMedicalEvaluation=response.data.numberOfMedicalEvaluation; |
| | | |
| | | // this.donateNumData.numberOfRelativeConfirmation=response.data.numberOfRelativeConfirmation; |
| | | |
| | | // this.donateNumData.numberOfEthicalReview=response.data.numberOfEthicalReview; |
| | | |
| | | // this.donateNumData.numberOfWitness=response.data.numberOfWitness; |
| | | |
| | | // this.donateNumData.numberOfCompletion=response.data.numberOfCompletion; |
| | | |
| | | // this.donateNumData.numberOfTerminated = |
| | | // response.data.numberOfTerminated; |
| | | |
| | | // this.donateNumData.numberOfDonatePeople = |
| | | // response.data.numberOfDonatePeople; |
| | | // console.log("this.donateNumData", this.donateNumData); |
| | | // } else { |
| | | // } |
| | | // }); |
| | | }, |
| | | // 获取统计数据 |
| | | GetOrgDonateNumNew() { |
| | | // let starttime = this.selecttime.length > 0 ? this.$moment(this.selecttime[0]).format("YYYY-MM-DD 00:00:01") : ""; |
| | | // let endtime = |
| | | // this.selecttime.length > 0 |
| | | // ? this.$moment(this.selecttime[1]) |
| | | // .add(1, "month") |
| | | // .add(-1, "days") |
| | | // .format("YYYY-MM-DD") |
| | | // : ""; |
| | | |
| | | let info = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | const info = { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | |
| | | // residenceprovince: this.$refs.areaSelect.getSheng(), |
| | | // residencecity: this.$refs.areaSelect.getShi(), |
| | | // residencetown: this.$refs.areaSelect.getQu(), |
| | | endtime: this.endtime |
| | | }; |
| | | if (this.reportervalue != "") { |
| | | |
| | | if (this.reportervalue) { |
| | | info.reporterno = this.reportervalue; |
| | | } |
| | | if (this.city != "") { |
| | | if (this.city) { |
| | | info.city = this.city; |
| | | } |
| | | |
| | | //潜在捐献 |
| | | listDonatebaseinfo(info).then((res) => { |
| | | this.donateNumData.numberOfDonate = res.total; |
| | | }); |
| | | // 并行获取所有统计数据 |
| | | Promise.all([ |
| | | listDonatebaseinfo(info).then(res => { |
| | | this.donateNumData.numberOfDonate = res.total || 0; |
| | | }), |
| | | |
| | | //医学评估 |
| | | listnewMedicalevaluation(info).then((res) => { |
| | | this.donateNumData.numberOfMedicalEvaluation = res.total; |
| | | }), |
| | | //亲属确认 |
| | | listnewRelativesconfirmation(info).then((res) => { |
| | | this.donateNumData.numberOfRelativeConfirmation = res.total; |
| | | }); |
| | | //伦理审查 |
| | | listnewEthicalreviewopinions(info).then((res) => { |
| | | this.donateNumData.numberOfEthicalReview = res.total; |
| | | }), |
| | | //器官捐献 |
| | | listOrganallocation(info).then((res) => { |
| | | this.donateNumData.numberOfDonatePeople = res.total; |
| | | }); |
| | | listnewMedicalevaluation(info).then(res => { |
| | | this.donateNumData.numberOfMedicalEvaluation = res.total || 0; |
| | | }), |
| | | |
| | | //获取见证 |
| | | listnewDonationwitness(info).then((res) => { |
| | | this.donateNumData.numberOfWitness = res.total; |
| | | }); |
| | | listnewRelativesconfirmation(info).then(res => { |
| | | this.donateNumData.numberOfRelativeConfirmation = res.total || 0; |
| | | }), |
| | | |
| | | listnewDonatecompletioninfo(info).then((res) => { |
| | | this.donateNumData.numberOfCompletion = res.total; |
| | | }); |
| | | listnewEthicalreviewopinions(info).then(res => { |
| | | this.donateNumData.numberOfEthicalReview = res.total || 0; |
| | | }), |
| | | |
| | | //终止 |
| | | info.recordstate = "99"; |
| | | listDonatebaseinfo(info).then((res) => { |
| | | this.donateNumData.numberOfTerminated = res.total; |
| | | }); |
| | | listOrganallocation(info).then(res => { |
| | | this.donateNumData.numberOfDonatePeople = res.total || 0; |
| | | }), |
| | | |
| | | listDonatebaseinfo({}).then((res) => { |
| | | let list = res.rows; |
| | | let reportlist = []; |
| | | reportlist.push({ reporterno: "", reportername: "全部" }); |
| | | list.forEach((element) => { |
| | | reportlist.push({ |
| | | reporterno: element.reporterno, |
| | | reportername: element.reportername, |
| | | }); |
| | | }); |
| | | listnewDonationwitness(info).then(res => { |
| | | this.donateNumData.numberOfWitness = res.total || 0; |
| | | }), |
| | | |
| | | if (reportlist != 0) { |
| | | reportlist = this.resetArr(reportlist); |
| | | this.reportlist = reportlist; |
| | | } |
| | | listnewDonatecompletioninfo(info).then(res => { |
| | | this.donateNumData.numberOfCompletion = res.total || 0; |
| | | }), |
| | | |
| | | listDonatebaseinfo({ ...info, terminationCase: 1 }).then(res => { |
| | | this.donateNumData.numberOfTerminated = res.total || 0; |
| | | }) |
| | | ]).then(() => { |
| | | this.loadReportList(); |
| | | }); |
| | | }, |
| | | |
| | | // 加载报告人列表 |
| | | loadReportList() { |
| | | listDonatebaseinfo({}).then(res => { |
| | | let list = res.rows || []; |
| | | let reportlist = [{ reporterno: "", reportername: "全部人员" }]; |
| | | |
| | | list.forEach(element => { |
| | | if (element.reporterno && element.reportername) { |
| | | reportlist.push({ |
| | | reporterno: element.reporterno, |
| | | reportername: element.reportername |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | this.reportlist = this.resetArr(reportlist); |
| | | }); |
| | | }, |
| | | |
| | | // 数组去重 |
| | | resetArr(Arr) { |
| | | const hash = {}; |
| | | return Arr.reduce((arr, current) => { |
| | | if (!hash[current.reporterno]) { |
| | | hash[current.reporterno] = true; |
| | | arr.push(current); |
| | | } |
| | | return arr; |
| | | }, []); |
| | | }, |
| | | |
| | | //获取医院机构捐献数量 |
| | | GetOrgDonateNum() { |
| | | // let time1 = new Date(this.starttime).getTime() |
| | |
| | | // this.endtime = new Date(this.endtime).getTime() |
| | | let param = { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | endtime: this.endtime |
| | | // city:'1', |
| | | // repoterno:'015' |
| | | }; |
| | |
| | | } |
| | | // getOrgansOfHospital |
| | | // getOrgansOfHospitalByMonth |
| | | getOrgansOfHospitalByMonth(param).then((response) => { |
| | | getOrgansOfHospitalByMonth(param).then(response => { |
| | | if (response.code == 200) { |
| | | let newConfig = { |
| | | ...DEF_TABLE_CONFIG, |
| | | ...DEF_TABLE_CONFIG |
| | | }; |
| | | let arr = response.data; |
| | | let dataList = []; |
| | | dataList = response.data.map((item) => { |
| | | dataList = response.data.map(item => { |
| | | let li = []; |
| | | li.push( |
| | | item.month == null |
| | |
| | | // const obj = { path: "/organ/donatebaseinfo", name: "Donatebaseinfo" }; |
| | | // console.log(this.$tab) |
| | | // this.$tab.closePage(obj); |
| | | }, |
| | | } |
| | | }, |
| | | computed: {}, |
| | | watch: {}, |
| | | computed: { |
| | | routeParams() { |
| | | return { |
| | | starttime: this.starttime, |
| | | endtime: this.endtime, |
| | | tempRecordState: "", |
| | | reporterno: this.reportervalue, |
| | | shen: this.searchAddress?.shen || "", |
| | | shi: this.searchAddress?.shi || "", |
| | | qu: this.searchAddress?.qu || "", |
| | | city: this.city |
| | | }; |
| | | } |
| | | }, |
| | | watch: {} |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .c-home { |
| | | .box-title { |
| | | width: 100%; |
| | | span { |
| | | display: block; |
| | | width: 130px; |
| | | height: 25px; |
| | | -webkit-transform: skew(20deg); |
| | | -moz-transform: skew(20deg); |
| | | -o-transform: skew(20deg); |
| | | background: #0a459f; |
| | | line-height: 25px; |
| | | align-self: center; |
| | | border: 1px transparent solid; |
| | | border-image: linear-gradient(#070a17, #7be6fc) 10 10; |
| | | border-image: linear-gradient(#070a17, #7be6fc) 10 10; |
| | | border-image: linear-gradient(#070a17, #7be6fc) 10 10; |
| | | margin: 0 auto; |
| | | .app-container { |
| | | padding: 20px; |
| | | background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); |
| | | min-height: 100vh; |
| | | } |
| | | |
| | | .filter-card { |
| | | margin-bottom: 24px; |
| | | border-radius: 12px; |
| | | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); |
| | | border: none; |
| | | background: rgba(255, 255, 255, 0.95); |
| | | |
| | | :deep(.el-card__body) { |
| | | padding: 20px; |
| | | } |
| | | } |
| | | |
| | | .overview-card { |
| | | margin-bottom: 24px; |
| | | border-radius: 12px; |
| | | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); |
| | | border: none; |
| | | background: rgba(255, 255, 255, 0.95); |
| | | |
| | | .card-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .header-title { |
| | | font-size: 18px; |
| | | font-weight: 600; |
| | | color: #303133; |
| | | } |
| | | b { |
| | | display: block; |
| | | color: #fff; |
| | | text-align: center; |
| | | transform: skewY(-20deg); |
| | | transform: skewX(-20deg); |
| | | |
| | | .header-subtitle { |
| | | font-size: 14px; |
| | | color: #909399; |
| | | } |
| | | } |
| | | .box-num { |
| | | position: relative; |
| | | .box-num-main { |
| | | text-align: right; |
| | | padding-right: 70px; |
| | | .box-num-main-n { |
| | | color: #409eff; |
| | | font-size: 25px; |
| | | |
| | | :deep(.el-card__body) { |
| | | padding: 20px; |
| | | } |
| | | } |
| | | .metrics-wrapper { // 左侧内容区域固定 320px,溢出自动滚动 |
| | | height: 590px; // 和右侧图表默认高一样,也可以改成 350 / 400 … |
| | | overflow-y: auto; |
| | | padding-right: 4px; // 留一点滚动条位置,避免文字贴边 |
| | | } |
| | | .chart-card { |
| | | border-radius: 12px; |
| | | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); |
| | | border: none; |
| | | background: rgba(255, 255, 255, 0.95); |
| | | height: 100%; |
| | | |
| | | .card-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | span { |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | color: #303133; |
| | | } |
| | | } |
| | | |
| | | :deep(.el-card__body) { |
| | | padding: 20px; |
| | | } |
| | | } |
| | | |
| | | .stat-card-link { |
| | | text-decoration: none; |
| | | display: block; |
| | | |
| | | &:hover { |
| | | text-decoration: none; |
| | | } |
| | | } |
| | | |
| | | .stat-card { |
| | | border-radius: 8px; |
| | | transition: all 0.3s ease; |
| | | border: none; |
| | | margin-bottom: 16px; |
| | | background: linear-gradient(135deg, #fff 60%, #f8f9fa 100%); |
| | | |
| | | &:hover { |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .stat-content { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 16px; |
| | | } |
| | | |
| | | .stat-icon { |
| | | width: 48px; |
| | | height: 48px; |
| | | border-radius: 8px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-right: 12px; |
| | | |
| | | .svg-icon { |
| | | font-size: 24px; |
| | | color: white; |
| | | } |
| | | } |
| | | |
| | | .stat-info { |
| | | flex: 1; |
| | | |
| | | .stat-value { |
| | | font-size: 24px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | margin-bottom: 4px; |
| | | } |
| | | |
| | | .stat-title { |
| | | font-size: 14px; |
| | | color: #606266; |
| | | line-height: 1.4; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .metrics-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); |
| | | gap: 16px; |
| | | margin-top: 16px; |
| | | } |
| | | |
| | | .metric-item { |
| | | background: linear-gradient(135deg, #fafdff 0%, #e3f0ff 100%); |
| | | border-radius: 8px; |
| | | padding: 16px; |
| | | text-align: center; |
| | | transition: all 0.3s ease; |
| | | |
| | | &:hover { |
| | | transform: translateY(-1px); |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | &.full-width { |
| | | grid-column: 1 / -1; |
| | | } |
| | | |
| | | .metric-title { |
| | | font-size: 12px; |
| | | color: #606266; |
| | | margin-bottom: 8px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .metric-value { |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | } |
| | | |
| | | .metric-breakdown { |
| | | display: flex; |
| | | justify-content: space-around; |
| | | flex-wrap: wrap; |
| | | gap: 8px; |
| | | |
| | | span { |
| | | font-size: 12px; |
| | | color: #606266; |
| | | background: rgba(255, 255, 255, 0.7); |
| | | padding: 4px 8px; |
| | | border-radius: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .action-buttons { |
| | | display: flex; |
| | | gap: 12px; |
| | | justify-content: flex-end; |
| | | |
| | | @media (max-width: 768px) { |
| | | justify-content: stretch; |
| | | |
| | | .el-button { |
| | | flex: 1; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .analysis-section { |
| | | margin-top: 24px; |
| | | |
| | | } |
| | | |
| | | // 响应式调整 |
| | | @media (max-width: 1200px) { |
| | | .metrics-grid { |
| | | grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); |
| | | } |
| | | } |
| | | |
| | | @media (max-width: 768px) { |
| | | .app-container { |
| | | padding: 12px; |
| | | } |
| | | |
| | | .filter-card, |
| | | .overview-card, |
| | | .chart-card { |
| | | margin-bottom: 16px; |
| | | |
| | | :deep(.el-card__body) { |
| | | padding: 16px; |
| | | } |
| | | } |
| | | |
| | | .stat-card .stat-content { |
| | | padding: 12px; |
| | | |
| | | .stat-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | margin-right: 8px; |
| | | |
| | | .svg-icon { |
| | | font-size: 20px; |
| | | } |
| | | } |
| | | .box-num-ex { |
| | | position: absolute; |
| | | bottom: 5px; |
| | | right: 10px; |
| | | width: 45px; |
| | | |
| | | span { |
| | | color: #409eff; |
| | | .stat-info { |
| | | .stat-value { |
| | | font-size: 20px; |
| | | } |
| | | |
| | | .stat-title { |
| | | font-size: 12px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ::v-deep .c-table-title { |
| | | .el-divider.el-divider--horizontal { |
| | | background-color: #95a1ec; |
| | | .el-divider__text.is-left { |
| | | color: #303133; |
| | | background: #fafafa; |
| | | } |
| | | |
| | | .metrics-grid { |
| | | grid-template-columns: 1fr; |
| | | gap: 12px; |
| | | } |
| | | .active { |
| | | .el-divider.el-divider--horizontal { |
| | | .el-divider__text.is-left { |
| | | color: #409eff; |
| | | } |
| | | |
| | | .metric-item { |
| | | padding: 12px; |
| | | |
| | | .metric-value { |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | } |
| | | .border-box-contaier { |
| | | height: 90px; |
| | | padding: 10px; |
| | | overflow: hidden; |
| | | box-sizing: border-box; |
| | | // background-color: #282c34; |
| | | |
| | | // 动画效果 |
| | | .fade-enter-active, |
| | | .fade-leave-active { |
| | | transition: opacity 0.5s ease; |
| | | } |
| | | |
| | | .fade-enter-from, |
| | | .fade-leave-to { |
| | | opacity: 0; |
| | | } |
| | | </style> |
| | | |