From 75f043dfa6660716364e66ee0b3cf99f44255686 Mon Sep 17 00:00:00 2001
From: DYL0109 <dn18191638832@163.com>
Date: 星期三, 16 四月 2025 19:20:36 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/develop1.0' into dyl_dev

---
 zhitan-vue/src/views/deepanalysis/deepAnalysis.vue |  325 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 206 insertions(+), 119 deletions(-)

diff --git a/zhitan-vue/src/views/deepanalysis/deepAnalysis.vue b/zhitan-vue/src/views/deepanalysis/deepAnalysis.vue
index 11e5ea0..24eeeae 100644
--- a/zhitan-vue/src/views/deepanalysis/deepAnalysis.vue
+++ b/zhitan-vue/src/views/deepanalysis/deepAnalysis.vue
@@ -4,20 +4,37 @@
       <el-form :model="form" ref="queryRef" :inline="true" label-width="80px">
         <el-form-item label="鑳芥簮绫诲瀷" prop="energyType">
           <el-select v-model="form.energyType" placeholder="璇烽�夋嫨鑳芥簮绫诲瀷">
-            <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList"
-              :key="item.enersno" />
+            <el-option
+              :label="item.enername"
+              :value="item.enersno"
+              v-for="item in energyTypeList"
+              :key="item.enersno"
+            />
           </el-select>
         </el-form-item>
-        <el-form-item label="鏈熼棿" prop="timeType" >
+        <el-form-item label="鏈熼棿" prop="timeType">
           <el-select v-model="form.timeType" placeholder="鏈熼棿" clearable style="width: 120px" @change="handleTimeType">
             <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" />
           </el-select>
         </el-form-item>
         <el-form-item label="鏃堕棿閫夋嫨" prop="dataTime">
-          <el-date-picker v-if="form.type == 1" v-model="form.dataTime" type="year" />
-          <el-date-picker v-else-if="form.type == 2" v-model="form.dataTime" type="month" format="YYYY-MM"
-            value-format="YYYY-MM" />
-          <el-date-picker v-else v-model="form.dataTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+          <el-date-picker v-if="form.timeType == 'YEAR'" v-model="form.dataTime" type="year" :clearable="false" />
+          <el-date-picker
+            v-else-if="form.timeType == 'MONTH'"
+            v-model="form.dataTime"
+            type="month"
+            format="YYYY-MM"
+            value-format="YYYY-MM"
+            :clearable="false"
+          />
+          <el-date-picker
+            v-else
+            v-model="form.dataTime"
+            :clearable="false"
+            type="date"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+          />
         </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
@@ -46,186 +63,255 @@
   </div>
 </template>
 <script setup>
-import useSettingsStore from '@/store/modules/settings'
-import { listEnergyTypeList } from "@/api/modelConfiguration/energyType";
+import useSettingsStore from "@/store/modules/settings"
+import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"
+import { getFlowCharts } from "@/api/energyAnalysis/energyAnalysis"
 const settingsStore = useSettingsStore()
-import * as echarts from 'echarts';
+import * as echarts from "echarts"
 let { proxy } = getCurrentInstance()
-import { onMounted } from 'vue';
-const { period } = proxy.useDict("period");
+import { nextTick, onMounted } from "vue"
+const { period } = proxy.useDict("period")
+console.log(period)
 let form = ref({
   energyType: null,
   timeType: null,
   dataTime: null,
 })
 function handleTimeType(e) {
-  form.value.timeType = e;
-  form.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD");
+  form.value.timeType = e
+  form.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD")
+  getData()
 }
-const energyTypeList = ref();
+const energyTypeList = ref()
 function getEnergyTypeList() {
   listEnergyTypeList().then((res) => {
-    energyTypeList.value = res.data;
+    energyTypeList.value = res.data
     form.value.energyType = energyTypeList.value[0].enersno
-    handleTimeType(period.value[0].value);
-  });
+    handleTimeType(period.value[0].value)
+  })
 }
-getEnergyTypeList()
 
 function handleSelect(e) {
   console.log(e, form.value.type)
   if (form.value.type == 1) {
-    form.value.time = proxy.dayjs().format('YYYY')
+    form.value.time = proxy.dayjs().format("YYYY")
   } else if (form.value.type == 2) {
-    form.value.time = proxy.dayjs().format('YYYY-MM')
+    form.value.time = proxy.dayjs().format("YYYY-MM")
   } else {
-    form.value.time = proxy.dayjs().format('YYYY-MM-DD')
+    form.value.time = proxy.dayjs().format("YYYY-MM-DD")
   }
 }
-function handleQuery() { }
+function handleQuery() {
+  getData()
+}
 
 function resetQuery() {
   form.value = {
     type: 1,
-    time: proxy.dayjs().format('YYYY'),
+    time: proxy.dayjs().format("YYYY"),
   }
 }
 
-import icon1 from '@/assets/images/period/icon1.png'
-import icon2 from '@/assets/images/period/icon2.png'
-import icon3 from '@/assets/images/period/icon3.png'
-import icon4 from '@/assets/images/period/icon4.png'
-import icon5 from '@/assets/images/period/icon5.png'
+import icon1 from "@/assets/images/period/icon1.png"
+import icon2 from "@/assets/images/period/icon2.png"
+import icon3 from "@/assets/images/period/icon3.png"
+import icon4 from "@/assets/images/period/icon4.png"
+import icon5 from "@/assets/images/period/icon5.png"
 const periodList = ref([
   {
     icon: icon1,
     color: "#3371eb",
     title: "绱鑳借��",
-    data: '1000.1 m鲁'
+    data: "1000.1 m鲁",
   },
   {
     icon: icon3,
     color: "#ff6200",
     title: "鍒嗚〃鑳借��",
-    data: ' 0 m鲁'
+    data: " 0 m鲁",
   },
   {
     icon: icon4,
     color: "#ffce0c",
     title: "鎹熷け閲�",
-    data: '1000.1 m鲁'
+    data: "1000.1 m鲁",
   },
   {
     icon: icon5,
     color: "#78e801",
     title: "鎹熷け姣斾緥",
-    data: '100.00%'
+    data: "100.00%",
   },
 ])
 
-watch(() => settingsStore.sideTheme, (val) => {
-  getChart()
-})
+const flowData = ref({})
+function getData() {
+  getFlowCharts({
+    energyType: form.value.energyType,
+    nodeId: "",
+    queryTime: proxy.dayjs(new Date(form.value.dataTime)).format("YYYY-MM-DD"),
+    dataTime: proxy.dayjs(new Date(form.value.dataTime)).format("YYYY-MM-DD"),
+    timeType: form.value.timeType,
+    modelCode: proxy.$route.query.modelCode,
+  }).then((res) => {
+    periodList.value[0].data = res.data.totalAccumulatedAmount
+    periodList.value[1].data = res.data.childNodeAccumulatedAmount
+    periodList.value[2].data = res.data.difference
+    periodList.value[3].data = res.data.energyLossRatio + "%"
+    flowData.value = res.data.itemVOList
+    nextTick(() => {
+      getChart()
+    })
+  })
+}
+
+watch(
+  () => settingsStore.sideTheme,
+  (val) => {
+    getChart()
+  }
+)
 
 function getChart() {
+  let colors = ["#FBB4AE", "#B3CDE3", "#CCEBC5", "#DECBE4", "#5470C6"]
+  let mydata = []
+  let mylinks = []
+  if (flowData.value.length) {
+    mylinks = flowData.value || []
+    let nodes = []
+    mylinks.forEach((element) => {
+      nodes.push(element.source)
+      nodes.push(element.target)
+    })
+    mydata = Array.from(new Set(nodes)).map((item) => {
+      return {
+        name: item,
+      }
+    })
+  }
+  console.log(mydata)
+  console.log(mylinks)
 
-
-  let colors = ['#FBB4AE', '#B3CDE3', '#CCEBC5', '#DECBE4', '#5470C6'];
-  let mydata = [
-    { name: 'L1', itemStyle: { color: colors[0] }, depth: 0 },
-    { name: 'L1-1', itemStyle: { color: colors[0] }, depth: 0 },
-    { name: 'L1-2', itemStyle: { color: colors[0] }, depth: 0 },
-    { name: 'L1-3', itemStyle: { color: colors[0] }, depth: 0 },
-
-
-    { name: 'L2', itemStyle: { color: colors[1] }, depth: 1 },
-    { name: 'L2-1', itemStyle: { color: colors[1] }, depth: 1 },
-    { name: 'L2-2', itemStyle: { color: colors[1] }, depth: 1 },
-    { name: 'L2-3', itemStyle: { color: colors[1] }, depth: 1 },
-
-
-    { name: 'L3', itemStyle: { color: colors[2] }, depth: 2 },
-    { name: 'L3-1', itemStyle: { color: colors[2] }, depth: 2 },
-    { name: 'L3-2', itemStyle: { color: colors[2] }, depth: 2 },
-
-
-    { name: 'L4', itemStyle: { color: colors[3] }, depth: 3 },
-
-
-
-  ];
-  // mydata.reverse()
-  let mylinks = [
-    // L1鈫扡4	 9720
-    { source: 'L1', target: 'L4', value: 9720 },
-    // L2鈫扡4	 24396
-    { source: 'L2', target: 'L4', value: 24396 },
-    // L3鈫扡4	 1462
-    { source: 'L3', target: 'L4', value: 1462 },
-
-    // L1鈫扡2鈫扡3鈫扡4	 215
-    { source: 'L1-1', target: 'L2-1', value: 215 },
-    { source: 'L2-1', target: 'L3-1', value: 215 },
-    { source: 'L3-1', target: 'L4', value: 215 },
-
-    // L1鈫扡2鈫扡4	 4518
-    { source: 'L1-2', target: 'L2-2', value: 4518 },
-    { source: 'L2-2', target: 'L4', value: 4518 },
-    // L1鈫扡3鈫扡4	 217
-    { source: 'L1-3', target: 'L3-2', value: 217 },
-    { source: 'L3-2', target: 'L4', value: 217 },
-
-    // L2鈫扡3鈫扡4	 893
-    { source: 'L2-3', target: 'L3-3', value: 893 },
-    { source: 'L3-3', target: 'L4', value: 893 },
-
-  ];
-
-
-  const myChart1 = echarts.init(document.getElementById("Chart1"));
+  const myChart1 = echarts.init(document.getElementById("Chart1"))
   myChart1.setOption({
     tooltip: {
-      trigger: 'item',
-      triggerOn: 'mousemove',
+      trigger: "item",
+      triggerOn: "mousemove",
     },
-    series: {
-      type: 'sankey',
-      lineStyle: {
-        opacity: 0.3,
-        color: 'gradient',
-        curveness: 0.7,
+    // series: {
+    //   type: "sankey",
+    //   lineStyle: {
+    //     opacity: 0.3,
+    //     color: "gradient",
+    //     curveness: 0.7,
+    //   },
+    //   // nodeAlign: 'left',
+    //   nodeGap: 18,
+    //   layoutIterations: 1,
+    //   emphasis: {
+    //     focus: "adjacency",
+    //   },
+    //   data: mydata,
+    //   links: mylinks,
+    // },
+    series: [
+      {
+        type: "sankey",
+        left: 50.0,
+        top: 20.0,
+        right: 100.0,
+        bottom: 25.0,
+        data: mydata,
+        links: mylinks,
+        nodeGap: 18,
+        layoutIterations: 1,
+        //emphasis: {
+        //  focus: 'adjacency',
+        //},
+        nodeAlign: "left",
+        lineStyle: {
+          color: "source",
+          curveness: 0.7,
+          opacity: 0.3,
+        },
+        itemStyle: {
+          color: "#333",
+          borderColor: "#1f77b4",
+        },
+        // label: {
+        //   color: "rgba(0,0,0,0.7)",
+        //   fontSize: 10,
+        // },
+        levels: [
+          {
+            depth: 0,
+            itemStyle: {
+              color: colors[0],
+            },
+            lineStyle: {
+              color: "source",
+              opacity: 0.3,
+            },
+          },
+          {
+            depth: 1,
+            itemStyle: {
+              color: colors[1],
+            },
+            lineStyle: {
+              color: "source",
+              opacity: 0.3,
+            },
+          },
+          {
+            depth: 2,
+            itemStyle: {
+              color: colors[2],
+            },
+            lineStyle: {
+              color: "source",
+              opacity: 0.3,
+            },
+          },
+          {
+            depth: 3,
+            itemStyle: {
+              color: colors[3],
+            },
+            lineStyle: {
+              color: "source",
+              opacity: 0.3,
+            },
+          },
+        ],
       },
-      // nodeAlign: 'left',
-      nodeGap: 18,
-      layoutIterations: 1,
-      emphasis: {
-        focus: 'adjacency',
-      },
-      data: mydata,
-      links: mylinks,
-    },
+    ],
   })
-  window.addEventListener("resize", () => {
-    myChart1.resize();
-  }, { passive: true });
+  window.addEventListener(
+    "resize",
+    () => {
+      myChart1.resize()
+    },
+    { passive: true }
+  )
 }
 onMounted(() => {
-  getChart()
+  getEnergyTypeList()
 })
 </script>
 <style scoped lang="scss">
 @import "@/assets/styles/page.scss";
 
 .themeDark {
-
   .card-list {
     display: flex;
     justify-content: space-between;
-    padding: 18px;
+    padding-top: 12px;
+    padding: 12px 14px 0;
 
     .card-list-item {
       width: 24%;
-      height: 167px;
+      height: 160px;
       background: #223386;
       border-radius: 5px 5px 5px 5px;
       border: 1px solid #4868b7;
@@ -288,14 +374,15 @@
   .card-list {
     display: flex;
     justify-content: space-between;
-    padding: 18px;
+    padding-top: 12px;
+    padding: 12px 14px 0;
 
     .card-list-item {
       width: 24%;
-      height: 167px;
+      height: 160px;
       background: #fff;
       border-radius: 5px 5px 5px 5px;
-      border: 1px solid #E8E8E8;
+      border: 1px solid #e8e8e8;
       background-size: 100% 100%;
       box-sizing: border-box;
       padding: 20px 18px 23px 16px;
@@ -337,7 +424,7 @@
           font-family: OPPOSans, OPPOSans;
           font-weight: 500;
           font-size: 14px;
-          color: #5D5C5C;
+          color: #5d5c5c;
         }
 
         .bottom-right {
@@ -360,4 +447,4 @@
     height: 100%;
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3