<template>
|
<div class="indexanalysis">
|
<div class="analysis-top">
|
<div class="title-top">查询条件</div>
|
<div class="value">
|
<el-form ref="form" :model="queryParams" label-width="120px">
|
<el-form-item label="选择指标名称">
|
<el-select
|
remote
|
:remote-method="remoteMethod"
|
default-first-option
|
v-model="targetvalue"
|
@change="Labelstatistics"
|
filterable
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in targetList"
|
:key="item.id"
|
:label="item.targetname"
|
:value="item.id"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-form>
|
</div>
|
</div>
|
<div class="formindex">
|
<el-table
|
v-loading="loading"
|
:data="tableData"
|
:span-method="objectSpanMethod"
|
border
|
:summary-method="getSummaries"
|
show-summary
|
style="width: 100%"
|
>
|
<el-table-column prop="targetname" label="指标名称"> </el-table-column>
|
<el-table-column prop="targetShowCount" label="指标出现次数">
|
</el-table-column>
|
<el-table-column prop="matchedtext" label="单项名称"> </el-table-column>
|
<el-table-column prop="count" label="单项选中次数"> </el-table-column>
|
<el-table-column prop="percentage" label="占比">
|
<template slot-scope="scope">
|
<span>{{ (Number(scope.row.percentage) * 100).toFixed(2) }}%</span>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { gettargetInfo, Labelstatistics } from "@/api/AiCentre/index";
|
export default {
|
name: "indexanalysis",
|
data() {
|
return {
|
targetList: [
|
{
|
value: "选项1",
|
label: "发热有无",
|
},
|
{
|
value: "选项2",
|
label: "咳嗽有无",
|
},
|
{
|
value: "选项3",
|
label: "服药后不良反应",
|
},
|
],
|
tableData: [
|
{
|
date: "发热有无",
|
name: "有",
|
address: 1,
|
times: 2,
|
proportion: "50",
|
},
|
{
|
date: "发热有无",
|
name: "无",
|
address: 1,
|
times: 2,
|
proportion: "50",
|
},
|
{
|
date: "发热有无",
|
name: "其他",
|
address: 0,
|
times: 2,
|
proportion: "0",
|
},
|
],
|
targetvalue: "",
|
queryParams: {
|
pageNum: 1,
|
pageSize: 66,
|
scriptType: "1",
|
},
|
};
|
},
|
|
created() {
|
this.getList();
|
},
|
|
methods: {
|
getList() {
|
this.loading = true;
|
gettargetInfo(this.queryParams).then((res) => {
|
this.targetList = res.rows;
|
this.Labelstatistics(res.rows[0].id);
|
});
|
},
|
Labelstatistics(id) {
|
console.log(id, "id");
|
|
Labelstatistics(id).then((res) => {
|
if (res.data.length > 0) {
|
this.tableData = res.data;
|
} else {
|
gettargetInfo({ id: id }).then((res) => {
|
console.log(res, "替换展示值");
|
this.tableData = [];
|
res.rows[0].targetoptionList.forEach((item) => {
|
this.tableData.push({
|
targetname: res.rows[0].targetname,
|
targetShowCount:0,
|
count:0,
|
percentage:0,
|
matchedtext:item.targetvalue,
|
});
|
});
|
});
|
}
|
this.loading = false;
|
});
|
},
|
remoteMethod(value) {
|
const illnessqueryParams = {
|
pageNum: 1,
|
pageSize: 66,
|
targetname: value,
|
scriptType: "1",
|
};
|
setTimeout(() => {
|
gettargetInfo(illnessqueryParams).then((res) => {
|
this.targetList = res.rows;
|
});
|
}, 200);
|
},
|
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
if (columnIndex === 0 || columnIndex === 1) {
|
const totalRows = this.tableData.length;
|
if (rowIndex === 0) {
|
return [totalRows, 1];
|
} else {
|
// 其他行隐藏
|
return [0, 0];
|
}
|
}
|
},
|
getSummaries(param) {
|
const { columns, data } = param;
|
const sums = [];
|
columns.forEach((column, index) => {
|
console.log(data, "data");
|
|
if (index === 0) {
|
sums[index] = "合计"; // 修改为“合计”更符合语义
|
return;
|
}
|
if (column.property === "percentage") {
|
// 对占比列进行特殊处理
|
const values = data.map((item) => Number(item[column.property]));
|
const total = values.reduce((prev, curr) => {
|
const value = Number(curr);
|
if (!isNaN(value)) {
|
return prev + value;
|
} else {
|
return prev;
|
}
|
}, 0);
|
sums[index] = `${total * 100}%`; // 直接添加百分号
|
} else if (column.property === "targetShowCount") {
|
sums[index] = data[0].targetShowCount + " 次"; // 为次数相关列添加单位
|
} else {
|
const values = data.map((item) => Number(item[column.property]));
|
if (!values.every((value) => isNaN(value))) {
|
sums[index] = values.reduce((prev, curr) => {
|
const value = Number(curr);
|
if (!isNaN(value)) {
|
return prev + curr;
|
} else {
|
return prev;
|
}
|
}, 0);
|
if (column.property === "count") {
|
sums[index] += " 次"; // 为次数相关列添加单位
|
}
|
} else {
|
sums[index] = "/";
|
}
|
}
|
});
|
return sums;
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.analysis-top {
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
margin: 15px;
|
.title-top {
|
background-color: #6784f2;
|
color: #fff;
|
padding: 10px 20px;
|
font-size: 20px;
|
font-weight: 500;
|
margin-bottom: 20px;
|
}
|
}
|
.formindex {
|
margin: 0 15px;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
padding: 20px;
|
}
|
</style>
|