WXL
2025-03-20 ffb5cf79a2d5d7603cb97e79bd04f598eceb0352
src/views/sfstatistics/analyse/index.vue
@@ -5,7 +5,14 @@
      <div class="value">
        <el-form ref="form" :model="form" label-width="120px">
          <el-form-item label="选择指标名称">
            <el-select v-model="value" filterable placeholder="请选择">
            <el-select
              remote
              :remote-method="remoteMethod"
              default-first-option
              v-model="value"
              filterable
              placeholder="请选择"
            >
              <el-option
                v-for="item in options"
                :key="item.value"
@@ -19,19 +26,30 @@
      </div>
    </div>
    <div class="formindex">
      <el-table :data="tableData" border style="width: 100%">
        <el-table-column prop="date" label="指标名称"> </el-table-column>
        <el-table-column prop="name" label="单项名称"> </el-table-column>
        <el-table-column prop="address" label="单项出现次数"> </el-table-column>
        <el-table-column prop="times" label="指标出现次数">
      <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-column prop="proportion" label="占比"> </el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
import { gettargetInfo, Labelstatistics } from "@/api/AiCentre/index";
export default {
  name: "indexanalysis",
  data() {
@@ -56,29 +74,117 @@
          name: "有",
          address: 1,
          times: 2,
          proportion: "50%",
          proportion: "50",
        },
        {
          date: "发热有无",
          name: "无",
          address: 1,
          times: 2,
          proportion: "50%",
          proportion: "50",
        },
        {
          date: "发热有无",
          name: "其他",
          address: 0,
          times: 2,
          proportion: "0%",
          proportion: "0",
        },
      ],
      queryParams: {
        pageNum: 1,
        pageSize: 66,
      },
    };
  },
  created() {},
  created() {
    this.getList();
  },
  methods: {},
  methods: {
    getList() {
      this.loading = true;
      gettargetInfo(this.queryParams).then((res) => {
        this.targetList = res.rows;
        this.Labelstatistics(res.rows[0].id)
      });
    },
    Labelstatistics(id){
      Labelstatistics(id).then((res) => {
        this.tableData = res.data;
        this.loading = false;
      });
    },
    remoteMethod(value) {
      const illnessqueryParams = {
        pageNum: 1,
        pageSize: 66,
        tagname: value,
      };
      setTimeout(() => {
        gettargetInfo(this.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>
@@ -89,7 +195,7 @@
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  margin: 15px;
  .title-top {
    background-color: #00bbd3;
    background-color: #6784f2;
    color: #fff;
    padding: 10px 20px;
    font-size: 20px;