WXL
2024-08-30 c73a2c380aca7ac4ef16e76388b1a52356df8634
src/views/index.vue
@@ -110,7 +110,6 @@
            <!-- 中间echars -->
            <div class="boxEchars">
              <div class="echars1" id="echars"></div>
              <div class="echars2" id="echars2"></div>
            </div>
          </div>
        </el-col>
@@ -147,27 +146,19 @@
      </el-row>
      <!-- 底部一个 -->
      <el-row :gutter="20" style="margin-bottom: 20px">
        <el-col :span="13">
        <el-col :span="15">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
              诊后统计
              宣教统计
              <span class="el-icon-s-unfold moreIcon"></span>
            </div>
            <div class="cooperate">
              <!-- 合作区域 -->
              <div class="pieChart" id="pieCharts"></div>
              <div class="Points">
                <p>{{ 122 }}</p>
                <span>其中随访干预人次</span>
                <p>{{ 122 }}</p>
                <span>门诊随访</span>
                <p>{{ 122 }}</p>
                <span>出院随访</span>
              </div>
            </div>
          </div>
        </el-col>
        <el-col :span="10">
        <el-col :span="9">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
              各项服务统计
@@ -179,19 +170,25 @@
                  ><div class="grid-contents bg-purple">诊疗预约</div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple-light">123次</div></el-col
                  ><div class="grid-contents bg-purple-light">
                    123次
                  </div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple">转诊服务</div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple-light">231次</div></el-col
                  ><div class="grid-contents bg-purple-light">
                    231次
                  </div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple">信息推送</div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple-light">900次</div></el-col
                  ><div class="grid-contents bg-purple-light">
                    900次
                  </div></el-col
                > </el-row
              ><el-row>
                <el-col :span="4"
@@ -219,13 +216,17 @@
                  ><div class="grid-contents bg-purple">患者反馈</div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple-light">150人</div></el-col
                  ><div class="grid-contents bg-purple-light">
                    150人
                  </div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple">患者管理</div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple-light">231人</div></el-col
                  ><div class="grid-contents bg-purple-light">
                    231人
                  </div></el-col
                >
                <el-col :span="4"
                  ><div class="grid-contents bg-purple">健康宣教</div></el-col
@@ -261,12 +262,7 @@
//   getUserWork,
//   getregionCollect,
//   getregionOrderCount,
//   getregionAmountCollect,
//   getNodeCount,
//   getPrtnerCount,
//   getnodeCollect,
//   getSkuTop,
//   getOrderAmount,
// } from "@/api/home";
import dayjs from "dayjs";
@@ -277,6 +273,10 @@
      NodeCount: "",
      PrtnerCount: "",
      NodeCount: "",
      myChart2: null,
      mypPieCharts: null,
      lastWidth: window.innerWidth,
      lastHeight: window.innerHeight,
      radio1: "周",
      ticketStatistics: {},
      order: "",
@@ -289,6 +289,7 @@
      cylinderSeries: [],
      cylinderXAxis: [],
      dyat: 30,
      intervalId: null,
    };
  },
@@ -317,10 +318,17 @@
      this.getPrtnerCount();
      this.getnodeCollect();
      this.getSkuTop();
      this.getOrderAmount();
    });
  },
  mounted() {},
  mounted() {
    this.setInterval();
    // window.addEventListener("resize", this.handleResize());
  },
  beforeDestroy() {
    if (this.intervalId) {
      clearInterval(this.intervalId); // 清除定时器
    }
  },
  methods: {
    // 改变时间事件
    changes() {
@@ -339,26 +347,8 @@
      this.getPrtnerCount();
      this.getnodeCollect();
      this.getSkuTop();
      this.getOrderAmount();
    },
    // 柱状图
    async getOrderAmount() {
      // const res = await getOrderAmount(this.endatd, this.statd);
      // this.cylinderXAxis = res.data.xAxis;
      // this.cylinderSeries = res.data.series;
      this.cylinderXAxis = [
        "1月",
        "2月",
        "3月",
        "4月",
        "5月",
        "6月",
        "7月",
        "8月",
      ];
      this.cylinderSeries = [123, 123, 223, 212, 432, 123, 442, 234];
      this.myEcharts();
    },
    // 获取点位总数
    async getNodeCount() {
      // const res = await getNodeCount();
@@ -398,7 +388,6 @@
        { amount: 0, count: 88, skuId: "0", skuName: "器械科" },
        { amount: 0, count: 87, skuId: "0", skuName: "骨科" },
        { amount: 0, count: 67, skuId: "0", skuName: "放射科" },
      ];
    },
    // 获取工单数量
@@ -423,80 +412,6 @@
      // this.Count = (res.data / 1000000).toFixed(2);
    },
    // 柱状图
    myEcharts() {
      // 基于准备好的dom,初始化echarts实例
      var echarts = require("echarts");
      var myChart = echarts.init(document.getElementById("echars2"));
      // 指定图表的配置项和数据
      var option = {
        title: {
          text: "诊中统计",
        },
        tooltip: {
          trigger: "axis",
        },
        legend: {
          data: ["院内推送", "宣教完成"],
        },
        toolbox: {
          show: true,
          feature: {
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ["line", "bar"] },
            restore: { show: true },
            saveAsImage: { show: true },
          },
        },
        calculable: true,
        xAxis: [
          {
            type: "category",
            // prettier-ignore
            data: ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月"],
          },
        ],
        yAxis: [
          {
            type: "value",
          },
        ],
        series: [
          {
            name: "院内推送",
            type: "bar",
            data: [20, 49, 70, 32, 56, 76, 56, 122, 26, 20, 64, 33],
            markPoint: {
              data: [
                { type: "max", name: "Max" },
                { type: "min", name: "Min" },
              ],
            },
            markLine: {
              data: [{ type: "average", name: "Avg" }],
            },
          },
          {
            name: "宣教完成",
            type: "bar",
            data: [26, 59, 90, 64, 87, 70, 75, 182, 87, 82, 60, 23],
            markPoint: {
              data: [
                { name: "Max", value: 182, xAxis: 7, yAxis: 183 },
                { name: "Min", value: 2.3, xAxis: 11, yAxis: 3 },
              ],
            },
            markLine: {
              data: [{ type: "average", name: "Avg" }],
            },
          },
        ],
      };
      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    },
    // 获取线状图时间
    async getregionAmountCollect() {
      // const res = await getregionAmountCollect(1, this.endatd, this.statd);
@@ -510,66 +425,145 @@
    myEcharts2() {
      var echarts = require("echarts");
      var myChart2 = echarts.init(document.getElementById("echars"));
      this.myChart2 = myChart2;
      var option2 = {
        title: {
          text: "诊前数据",
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "cross",
            crossStyle: {
              color: "#999",
            },
          },
        },
        dataset: {
          source: [
            ["product", "2018", "2019", "2020", "2021", "2022", "2023"],
            ["复诊", 256, 182, 388, 270, 253, 385],
            ["住院", 351, 451, 355, 353, 373, 468],
            ["手术", 440, 362, 569, 436, 445, 332],
            ["转诊", 525, 237, 541, 518, 433, 249],
        toolbox: {
          feature: {
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ["line", "bar"] },
            restore: { show: true },
            saveAsImage: { show: true },
          },
        },
        legend: {
          data: [
            "出院随访量",
            "门诊随访量",
            "在院随访量",
            "门诊复诊通知",
            "出院复诊通知",
            "在院评估量",
          ],
        },
        xAxis: { type: "category" },
        yAxis: { gridIndex: 0 },
        grid: { top: "55%" },
        xAxis: [
          {
            type: "category",
            data: [
              "一月",
              "二月",
              "三月",
              "四月",
              "五月",
              "六月",
              "七月",
              "八月",
              "九月",
              "十月",
            ],
            axisPointer: {
              type: "shadow",
            },
          },
        ],
        yAxis: [
          {
            type: "value",
            name: "Precipitation",
            min: 0,
            max: 250,
            interval: 50,
            axisLabel: {
              formatter: "{value} ml",
            },
          },
          {
            type: "value",
            name: "Temperature",
            min: 0,
            max: 250,
            interval: 50,
            axisLabel: {
              formatter: "{value} 次",
            },
          },
        ],
        grid: { top: "35%" },
        series: [
          {
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            type: "pie",
            id: "pie",
            radius: "30%",
            center: ["50%", "25%"],
            emphasis: {
              focus: "self",
            name: "出院随访量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
                return value + " ml";
              },
            },
            label: {
              formatter: "{b}: {@2018} ({d}%)",
            data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160],
          },
          {
            name: "门诊随访量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
                return value + " ml";
              },
            },
            encode: {
              itemName: "product",
              value: "2018",
              tooltip: "2018",
            data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
          },
          {
            name: "在院随访量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
                return value + " ml";
              },
            },
            data: [145, 92, 178, 134, 167, 85, 199, 112, 156, 88, 120, 145],
          },
          {
            name: "出院复诊通知",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + " 次";
              },
            },
            data: [45, 123, 78, 156, 89, 34, 199, 112, 67, 145, 88, 175],
          },
          {
            name: "门诊复诊通知",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + " 次";
              },
            },
            data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
          },
          {
            name: "在院评估量",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + " 次";
              },
            },
            data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160],
          },
        ],
      };
@@ -581,7 +575,7 @@
            series: {
              id: "pie",
              label: {
                formatter: "{b}: {@[" + dimension + "]} ({d}%)",
                formatter: "{b}: {@[" + dimension + "]} ",
              },
              encode: {
                value: dimension,
@@ -598,59 +592,112 @@
      // 基于准备好的dom,初始化echarts实例
      var echarts = require("echarts");
      var mypPieCharts = echarts.init(document.getElementById("pieCharts"));
      this.mypPieCharts = mypPieCharts;
      // 指定图表的配置项和数据
      var optionPie = {
        // title: {
        //   left: "left",
        // },
        legend: {},
        tooltip: {
          trigger: "item",
          formatter: "{b}<br/>总占比 : {d}% ",
          trigger: "axis",
          showContent: true,
        },
        toolbox: {
          show: true,
          feature: {
            mark: { show: true },
          },
        dataset: {
          source: [
            ["product", "2012", "2013", "2014", "2015", "2016", "2017"],
            ["出院宣教", 56.5, 82.1, 88.7, 70.1, 53.4, 85.1],
            ["在院宣教", 51.1, 51.4, 55.1, 53.3, 73.8, 68.7],
            ["门诊宣教", 40.1, 62.2, 69.5, 36.4, 45.2, 32.5],
          ],
        },
        legend: {
          top: "5%",
          left: "center",
        },
        xAxis: { type: "category" },
        yAxis: { gridIndex: 0 },
        grid: { top: "25%", left: "10%", right: "40%", bottom: "10%" },
        series: [
          {
            name: "Access From",
            name: "出院宣教",
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            name: "在院宣教",
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            name: "门诊宣教",
            type: "line",
            smooth: true,
            seriesLayoutBy: "row",
            emphasis: { focus: "series" },
          },
          {
            type: "pie",
            id: "pie",
            radius: ["40%", "70%"],
            avoidLabelOverlap: false,
            center: ["80%", "50%"],
            emphasis: {
              focus: "self",
            },
            itemStyle: {
              borderRadius: 10,
              borderColor: "#fff",
              borderWidth: 2,
            },
            emphasis: {
              label: {
                show: true,
                fontSize: 40,
                fontWeight: "bold",
              },
            label: {
              formatter: "{b}: {@2012}",
            },
            labelLine: {
              show: false,
            encode: {
              itemName: "product",
              value: "2012",
              tooltip: "2012",
            },
            data: [
              { value: 580, name: "门诊随访" },
              { value: 484, name: "出院随访" },
            ],
          },
        ],
      };
      mypPieCharts.on("updateAxisPointer", function (event) {
        const xAxisInfo = event.axesInfo[0];
        if (xAxisInfo) {
          const dimension = xAxisInfo.value + 1;
          mypPieCharts.setOption({
            series: {
              id: "pie",
              label: {
                formatter: "{b}: {@[" + dimension + "]} ",
              },
              encode: {
                value: dimension,
                tooltip: dimension,
              },
            },
          });
        }
      });
      // 使用刚指定的配置项和数据显示图表。
      mypPieCharts.setOption(optionPie);
    },
    // 页面变化调整大小
    handleResize() {
      console.log(111);
      // 调整 ECharts 图表大小
      if (this.myChart2) {
        this.myChart2.resize();
      }
      if (this.mypPieCharts) {
        this.mypPieCharts.resize();
      }
    },
    setInterval() {
      this.intervalId = setInterval(() => {
        if (window.innerWidth != this.lastWidth) {
          this.lastWidth = window.innerWidth;
          console.log("窗口大小可能被手动调整了");
          this.handleResize();
        }
      }, 1000);
    },
  },
};
@@ -664,13 +711,10 @@
.boxEchars {
  width: 100%;
  height: 480px;
  height: 40vh;
  margin-top: 45px;
  display: flex;
  .echars1 {
    flex: 1;
  }
  .echars2 {
    flex: 1;
  }
}
@@ -765,7 +809,7 @@
  margin-top: 25px;
  display: flex;
  .pieChart {
    flex: 3;
    flex: 1;
  }
  .Points {
    width: 154px;