From 726df452c8749f9f208f67ede9864f223d44ff49 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 24 十一月 2023 17:43:56 +0800
Subject: [PATCH] 统计图表假数据测试

---
 Source/UBCS-WEB/src/views/statistic/statisticPage.vue                |  190 ++++++++++++++
 Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue          |  116 ++++----
 Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue     |   86 +++--
 Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue |  187 ++++++++------
 Source/UBCS-WEB/src/components/StatisticsComponent/mixCart.vue       |  120 +++++++++
 Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue         |    3 
 Source/UBCS-WEB/src/components/StatisticsComponent/pieChart.vue      |   21 +
 7 files changed, 540 insertions(+), 183 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue b/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
index 0c0d40a..1c49669 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
+++ b/Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
@@ -201,7 +201,7 @@
       let dictKeys = [];
       let slotColumnList = [];
       formItemList.forEach((formItem) => {
-        // console.log('formItem',formItem)
+        console.log('formItem',formItem)
         formItem = this.resetFormConfig(formItem);
         if (formItem.secType === "codeattrsec") {
           this.attrList.push(formItem);
@@ -341,7 +341,6 @@
       let that = this;
       items.forEach((item) => {
         let formItem = this.resetFormConfig(item);
-
         if (formItem.field == "lcstatus") {
           formItem.field = formItem.field + "_text";
           formItem.readOnly = true;
diff --git a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
index 483d080..396b601 100644
--- a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
+++ b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -6,15 +6,15 @@
           <div>
           </div>
           <el-row style="width: 100%;margin-bottom: 10px">
-            <div style="margin-bottom: 10px" >
-                <el-button v-for="(item, index) in masterVrBtnList"
-                           v-if="!['PREVIEW', 'DELETEFILE', 'revisefile', 'DOWNLOADFILE', 'UPLOADFILE'].includes(item.uniqueFlag)"
-                           :key="index" plain size="small"
-                           type="primary"
-                           @click="handleBtnClick(item)">{{
-                    item.name
-                  }}
-                </el-button>
+            <div style="margin-bottom: 10px">
+              <el-button v-for="(item, index) in masterVrBtnList"
+                         v-if="!['PREVIEW', 'DELETEFILE', 'revisefile', 'DOWNLOADFILE', 'UPLOADFILE'].includes(item.uniqueFlag)"
+                         :key="index" plain size="small"
+                         type="primary"
+                         @click="handleBtnClick(item)">{{
+                  item.name
+                }}
+              </el-button>
               <span v-if="tableHeadFindData.length > 0">
               <el-select slot="prepend" v-model="keyWordFind" placeholder="璇烽�夋嫨" size="small">
                 <el-option v-for="item in tableHeadFindData" :key="item.id" :label="item.label"
@@ -36,8 +36,8 @@
               </el-select></span>
             </div>
             <div class="custom-table">
-              <el-table class="cus-table" ref="dataTable" v-loading="isLoading" :data="tableData"
-                        :height="tableHeight"  border
+              <el-table ref="dataTable" v-loading="isLoading" :data="tableData" :height="tableHeight"
+                        border class="cus-table"
                         @select="handleSelection" @cell-click="handleCellClick" @row-click="handleRowClick"
                         @select-all="handleSelectionAll" @selection-change="handleSelectionChange"
                         @sort-change="sortChange">
@@ -45,24 +45,27 @@
                 <el-table-column v-if="tableData.length != 0" fixed label="搴忓彿" type="index" width="55">
                 </el-table-column>
                 <!--              鐢熷懡鍛ㄦ湡-->
-                <el-table-column v-for="(item,index) in lcstatusArray" key="index" v-if=" lcstatusArray.length !== 0 && !item.hidden" label="鐢熷懡鍛ㄦ湡鍊�" prop="lcstatus"
-                                 :show-overflow-tooltip="true" :sortable="item.sortable" :width="item.width"
-                                 align="center">
+                <el-table-column v-for="(item,index) in lcstatusArray" v-if=" lcstatusArray.length !== 0 && !item.hidden"
+                                 key="index" :show-overflow-tooltip="true" :sortable="item.sortable"
+                                 :width="item.width" align="center" label="鐢熷懡鍛ㄦ湡鍊�"
+                                 prop="lcstatus">
                   <template slot-scope="scope">
                     <span>{{ scope.row.lcstatus_text }}</span>
                   </template>
                 </el-table-column>
                 <!--              缂栧彿-->
-                <el-table-column  v-for="(item, index) in CodeArray" key="index" v-if="CodeArray.length !== 0 && !item.hidden" :label="item.label" :prop="item.prop"
-                                  :show-overflow-tooltip="true" :sortable="item.sortable" :width="item.width"
-                                  align="center">
+                <el-table-column v-for="(item, index) in CodeArray" v-if="CodeArray.length !== 0 && !item.hidden"
+                                 key="index" :label="item.label" :prop="item.prop"
+                                 :show-overflow-tooltip="true" :sortable="item.sortable" :width="item.width"
+                                 align="center">
                   <template slot-scope="scope">
                     <el-link type="primary" @click="CodeLinkHandler(scope.row)">
                       {{ scope.row[item.prop] }}
                     </el-link>
                   </template>
                 </el-table-column>
-                <el-table-column v-for="item in this.tableHeadFindData" v-if="!item.hidden && item.prop !== 'id' && item.prop !== 'lcstatus' && Object.keys(item.referConfig).length <= 0"
+                <el-table-column v-for="item in this.tableHeadFindData"
+                                 v-if="!item.hidden && item.prop !== 'id' && item.prop !== 'lcstatus' && Object.keys(item.referConfig).length <= 0"
                                  :key="item.id"
                                  :formatter="item.formatter"
                                  :label="item.label" :prop="item.prop"
@@ -72,9 +75,11 @@
                                  align="center">
                 </el-table-column>
                 <!--               鍙傜収鏁版嵁-->
-                <el-table-column v-for="(item,index) in referArray" :key="index" v-if="item.referConfig && Object.keys(item.referConfig).length > 0 && !item.hidden" :label="item.title" prop="jiliangdw"
-                                 :show-overflow-tooltip="true" :sortable="item.sortable" :width="item.width"
-                                 align="center">
+                <el-table-column v-for="(item,index) in referArray" v-if="item.referConfig && Object.keys(item.referConfig).length > 0 && !item.hidden"
+                                 :key="index"
+                                 :label="item.title" :show-overflow-tooltip="true"
+                                 :sortable="item.sortable" :width="item.width" align="center"
+                                 prop="jiliangdw">
                   <template slot-scope="scope">
                     <span>{{ scope.row.jiliangdwname }}</span>
                   </template>
@@ -107,10 +112,10 @@
                               :visible.sync="editvisible"
                               type="edit" @submit="EditSumbit"></FormTemplateDialog>
           <!--          鎵归噺缂栬緫-->
-<!--          <MasterEditBulk :visible.sync="bulkeditvisible" ></MasterEditBulk>-->
+          <!--          <MasterEditBulk :visible.sync="bulkeditvisible" ></MasterEditBulk>-->
           <!--          鏁版嵁璇︽儏-->
           <FormTemplateDialog :codeClassifyOid="this.codeClassifyOid" :codeRuleOid="this.codeRuleOid"
-                               :rowOid="this.LinkObject.oid" :templateOid="templateOid"
+                              :rowOid="this.LinkObject.oid" :templateOid="templateOid"
                               :title="'鏁版嵁璇︽儏'"
                               :visible.sync="LinkVisible"
                               type="detail"></FormTemplateDialog>
@@ -142,7 +147,8 @@
                           :visible.sync="dialogPush"></MasterTransfer>
           <!--        瀵煎叆-->
           <BatchImport v-if="batchImportData.visible" v-bind="batchImportData" :resetTable="CrudRend"
-                       :visible.sync="batchImportData.visible" :tableHeadData="tableHeadFindData" :selectRow="selectRow">
+                       :selectRow="selectRow" :tableHeadData="tableHeadFindData"
+                       :visible.sync="batchImportData.visible">
           </BatchImport>
           <!--          鐩镐技椤�-->
           <ResembleQueryDialog :codeClassifyOid="codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="rowOid"
@@ -247,26 +253,26 @@
     Treedata: {
       type: Array
     },
-    nodeClickList:{
-      type:Array,
-      default:[]
+    nodeClickList: {
+      type: Array,
+      default: []
     }
   },
   data() {
     return {
       //鎵归噺缂栬緫瀵硅瘽妗�
-      bulkeditvisible:false,
+      bulkeditvisible: false,
       LinkVisible: false,
       LinkObject: {}, // 缂栫爜鏁版嵁
       LinkList: [],
       isCodeArrayPushed: false, // 缂栫爜鏁扮粍娣诲姞鏍囪瘑鍙橀噺
       CodeArray: [],
       //鐢熷懡鍛ㄦ湡鏁扮粍
-      lcstatusArray:[],
+      lcstatusArray: [],
       //鍙傜収鏁版嵁鏁扮粍
-      referArray:[],
-      islcstatusPushed:false,
-      isReferPushed:false,
+      referArray: [],
+      islcstatusPushed: false,
+      isReferPushed: false,
       // 鐘舵�佹悳绱�
       statusSelect: "all",
       // 鍏抽敭瀛楁煡璇�
@@ -305,8 +311,8 @@
         label: "name",
       },
       tableHeadFindDatas: [],
-      applyvisible:false,
-      amendvisible:false,
+      applyvisible: false,
+      amendvisible: false,
       addvisible: false,
       editvisible: false,
       findvisible: false,
@@ -354,7 +360,7 @@
         height: 110
       },
       result: '',
-      elapsedTime:'',
+      elapsedTime: '',
     };
   },
   computed: {
@@ -441,16 +447,16 @@
           // console.log('lcstatusArray', this.lcstatusArray);
           this.islcstatusPushed = true;
         }
-        if(!this.isReferPushed){
+        if (!this.isReferPushed) {
           if (newval.find(item => Object.keys(item.referConfig).length > 0)) {
             this.referArray.push(newval.find(item => Object.keys(item.referConfig).length > 0));
-          }else {
+          } else {
             this.referArray.push([])
           }
         }
-        this.isReferPushed=true;
-        console.log('new',this.referArray)
-        console.log('ss',newval.find(item => Object.keys(item.referConfig).length > 0))
+        this.isReferPushed = true;
+        console.log('new', this.referArray)
+        console.log('ss', newval.find(item => Object.keys(item.referConfig).length > 0))
         this.WupinFindValue = ''
       },
     },
@@ -467,7 +473,7 @@
     },
     tableHeadBtnData: {
       handler(newval) {
-          this.masterVrBtnList = newval
+        this.masterVrBtnList = newval
       },
       deep: true
     },
@@ -549,14 +555,14 @@
       });
     },
     //鏍囧噯鐢宠
-    codeApplyHandler(){
+    codeApplyHandler() {
       this.$nextTick(() => {
         this.applyvisible = true;
       });
     },
-    applySumbit(val){
+    applySumbit(val) {
       // console.log('val',val)
-      if(func.notEmpty(val.ts)) {
+      if (func.notEmpty(val.ts)) {
         val.ts = func.formattedDateTime(val.ts);
         //console.log(val.ts);
       }
@@ -568,7 +574,7 @@
         })
       })
     },
-    amendSumbit(val){
+    amendSumbit(val) {
       applySaveCode(val).then(res => {
         this.$nextTick(() => {
           this.amendvisible = false;
@@ -579,24 +585,22 @@
 
     },
     //鏍囧噯淇
-    codeAMENDHandler(){
+    codeAMENDHandler() {
       if (this.selectRow.length !== 1) {
         this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�");
-      } else if (this.selectRow[0].lcstatus !== "Editing") {
-        this.$message.warning("缂栫爜鐘舵�佷笉鏄�滅紪杈戜腑鈥濓紝涓嶅彲缂栬緫");
       } else {
         this.amendvisible = true;
         this.rowOid = this.selectRow[0].oid;
       }
     },
     //鎵归噺缂栬緫
-    bulkEditHandler(type){
+    bulkEditHandler(type) {
       console.log(this.nodeClickList)
-      if(this.nodeClickList.children.length >= 1){
+      if (this.nodeClickList.children.length >= 1) {
         this.$message.warning('褰撳墠閫夋嫨鐨勫垎绫讳笉鏄彾瀛愯妭鐐癸紝涓嶅厑璁告壒閲忕紪杈戯紒')
         return;
       }
-      if(this.selectRow.length <= 0){
+      if (this.selectRow.length <= 0) {
         this.$message.warning('璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹紒')
         return;
       }
@@ -610,7 +614,7 @@
         this.$message.warning('閫夋嫨鐨勬暟鎹腑鏈夌紪鐮佺姸鎬佷笉鏄�滅紪杈戜腑鈥濓紝涓嶅彲缂栬緫锛�');
       }
     },
-    addSaveHandler(){
+    addSaveHandler() {
       this.$nextTick(() => {
         this.addvisible = true;
       });
@@ -975,7 +979,7 @@
     //澧炲姞淇濆瓨
     AddSumbit(val) {
       // console.log('val',val)
-      if(func.notEmpty(val.ts)) {
+      if (func.notEmpty(val.ts)) {
         val.ts = func.formattedDateTime(val.ts);
         //console.log(val.ts);
       }
@@ -1039,8 +1043,9 @@
 <style lang="scss" scoped>
 //鍥哄畾鍒楅珮搴�
 /deep/ .el-table__fixed {
-  height: calc(100vh - 370px)!important;
+  height: calc(100vh - 370px) !important;
 }
+
 // 婊氬姩鏉℃牱寮忎慨鏀�
 // 婊氬姩鏉$殑瀹藉害
 /deep/ .el-table__body-wrapper::-webkit-scrollbar {
@@ -1050,6 +1055,7 @@
   width: 10px;
 
 }
+
 // 婊氬姩鏉$殑婊戝潡
 /deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb {
   background-color: #ececec;
@@ -1082,7 +1088,7 @@
   margin-top: 10px;
 }
 
- .el-table__body-wrapper{
+.el-table__body-wrapper {
   height: calc(100% - 44px) !important;
 }
 </style>
diff --git a/Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue b/Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue
index 2d84725..6176e9c 100644
--- a/Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue
+++ b/Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue
@@ -2,120 +2,145 @@
   <basic-container>
     <v-chart id="chart" :auto-resize="true" :options="chartOptions"></v-chart>
   </basic-container>
-
 </template>
 
 <script>
 import 'echarts'
-import 'echarts/lib/chart/line'
-import 'echarts/lib/chart/pie'
-import 'echarts/lib/chart/bar'
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/title'
 import 'echarts/lib/component/legend'
 
-var data = [
-  [120, 132, 101, 134, 90, 230, 210, 130, 0, 122, 100, 80],
-  [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
-];
-
-// 鎵惧埌姣忎竴椤规暟鎹腑鐨勬渶澶у�煎苟淇濆瓨鍒版暟缁�
-var maxValues = data[0].map(function (_, i) {
-  return Math.max.apply(null, data.map(function (item) {
-    return item[i];
-  }));
-});
-
-var colors = ['#91CC75', '#5470C6'];
-// 鐢熸垚鏌辩姸鍥剧殑 series 鏁版嵁
-var seriesData = [];
-for (var i = 0; i < data.length; i++) {
-  var curSeriesData = [];
-  // 璁$畻鏁版嵁涓殑姣忕粍鏁版嵁鐨勬渶澶у��
-  for (var j = 0; j < data[i].length; j++) {
-    var borderRadius = [0, 0, 0, 0];  // 榛樿涓嶈缃渾瑙�
-    if (data[i][j] === maxValues[j]) {  // 濡傛灉褰撳墠鏌卞瓙鐨勫�肩瓑浜庡搴斿垪鐨勬渶澶у�硷紝璁剧疆鍦嗚
-      borderRadius = [50, 50, 0, 0];  // 璁剧疆鍥涗釜瑙掗兘涓哄渾瑙�
+export default {
+  name: "ColumnarChart",
+  props:{
+    columnarData:{
+      type:Array,
+      default:[]
+    },
+    chartName:{
+      type:String,
+      default: ""
     }
-    curSeriesData.push({
-      value: data[i][j],
-      itemStyle: {
-        normal: {
-          barBorderRadius: borderRadius,  // 璁剧疆鍦嗚
-          color: colors[i],
-          show: function (params) {
-            // 鏍规嵁鏁版嵁鍊肩殑澶у皬鏉ュ垽鏂槸鍚︽樉绀� label
-            return params.value > 30;
+  },
+  watch:{
+    columnarData:{
+      immediate:true,
+      handler(newval,oldval){
+        if(newval && newval.length > 0){
+          const minValues = newval[0].map(function (_, i) {
+            return Math.min.apply(
+              null,
+              newval.map(function (item) {
+                return item[i];
+              })
+            );
+          });
+
+          let colors = ["#91CC75", "#5470C6"];
+
+          const seriesData = [];
+          for (let i = 0; i < newval.length; i++) {
+            let curSeriesData = [];
+            for (let j = 0; j < newval[i].length; j++) {
+              let borderRadius = [0, 0, 0, 0];
+              if (newval[i][j] === minValues[j]) {
+                borderRadius = [50, 50, 0, 0];
+              }
+              curSeriesData.push({
+                value: newval[i][j],
+                itemStyle: {
+                  normal: {
+                    barBorderRadius: borderRadius,  // 璁剧疆鍦嗚
+                    color: colors[i],
+                  }
+                },
+              });
+            }
+            let seriesName = (i === 0 ? "鎬婚噺" : "鏂板")
+            seriesData.push({
+              name: seriesName,
+              type: "bar",
+              stack: "鎬婚噺",
+              data: curSeriesData,
+              label: {
+                show: true,
+                position: 'top'
+              },
+              emphasis: {
+                focus: "series",
+              },
+            });
+            this.chartOptions.series=seriesData
           }
         }
       }
-    });
-  }
-  var seriesName = '';
-  if (i === 0) {
-    seriesName = '鎬婚噺';
-  } else if (i === 1) {
-    seriesName = '鏂板';
-  }
-  seriesData.push({
-    name: seriesName,
-    type: 'bar',
-    stack: '鎬婚噺',
-    data: curSeriesData,
-    label: {
-      show: true,
-      position: 'top'
     },
-    itemStyle: {
-      color: colors[i]  // 璁剧疆鏌卞瓙鐨勯鑹�
-    },
-    emphasis: {
-      focus: 'series'
+    chartName:{
+      handler(newval,oldval){
+        if(newval){
+          console.log(newval)
+          this.chartOptions.title.text = newval + "鏁版嵁缁熻"
+        }
+      },
+      immediate:true,
+      deep:true
     }
-  });
-}
-
-export default {
-  name: "ColumnarChart",
+  },
   data() {
     return {
       chartOptions: {
+        color:["#91CC75", "#5470C6"],
         title: {
-          text: '浜哄憳涓绘暟鎹粺璁�'
+          text: "",
         },
         grid: {
-          left: '3%',
-          right: '4%',
-          bottom: '3%',
-          containLabel: true
+          left: "3%",
+          right: "4%",
+          bottom: "3%",
+          containLabel: true,
         },
         tooltip: {
-          trigger: 'axis',
+          trigger: "axis",
           axisPointer: {
-            type: 'shadow'
-          }
+            type: "shadow",
+          },
         },
         legend: {
-          data: ['鎬婚噺', '鏂板'],
-          left: 'center'
+          data: ["鎬婚噺", "鏂板"],
+          left: "center",
         },
         xAxis: {
-          type: 'category',
-          data: ['涓�鏈�', '浜屾湀', '涓夋湀', '鍥涙湀', '浜旀湀', '鍏湀', '涓冩湀', '鍏湀', '涔濇湀', '鍗佹湀', '鍗佷竴鏈�', '鍗佷簩鏈�']
+          type: "category",
+          data: [
+            "涓�鏈�",
+            "浜屾湀",
+            "涓夋湀",
+            "鍥涙湀",
+            "浜旀湀",
+            "鍏湀",
+            "涓冩湀",
+            "鍏湀",
+            "涔濇湀",
+            "鍗佹湀",
+            "鍗佷竴鏈�",
+            "鍗佷簩鏈�",
+          ],
         },
         yAxis: {
-          type: 'value'
+          type: "value",
         },
-        series: seriesData,
-      }
-    }
-  }
-}
+        series: [],
+      },
+    };
+  },
+  created() {
+  },
+};
 </script>
 
 <style scoped lang="scss">
 #chart {
-  width: 1280px;
-  height: 800px;
+  width: 100%;
+  height: 560px;
 }
 </style>
diff --git a/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue b/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue
index d51df80..fcc9ab9 100644
--- a/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue
+++ b/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue
@@ -9,20 +9,59 @@
 <script>
 import 'echarts'
 import 'echarts/lib/chart/line'
-import 'echarts/lib/chart/pie'
-import 'echarts/lib/chart/bar'
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/title'
 import 'echarts/lib/component/legend'
 
 export default {
   name: "lineChart",
+  props: {
+    lineData: {
+      type: Array,
+      default: []
+    },
+    chartName: {
+      type: String,
+      default: ""
+    }
+  },
+  watch: {
+    lineData: {
+      immediate: true,
+      handler(newval, oldval) {
+        if (newval) {
+          const series = newval.map((data, index) => ({
+            name: index === 0 ? "鎬婚噺" : "鏂板",
+            type: "line",
+            smooth: true,
+            stack: "Total",
+            label: {
+              show: true,
+              position: "top"
+            },
+            data: data.map(value => ({value}))
+          }));
+
+          this.chartOptions.series = series;
+        }
+      }
+    },
+    chartName:{
+      handler(newval,oldval){
+        if(newval){
+          this.chartOptions.title.text = newval + "鏁版嵁缁熻"
+        }
+      },
+      immediate:true,
+      deep:true
+    }
+  },
   data() {
     return {
       chartOptions: {
-        color:['#2eadd6  ','#FFA500 '],
+        color: ['#2eadd6', '#FFA500'],
         title: {
-          text: '鐗╁搧涓绘暟鎹粺璁�'
+          text: ''
         },
         tooltip: {
           trigger: 'axis'
@@ -31,48 +70,25 @@
           data: ['鎬婚噺', '鏂板']
         },
         xAxis: {
-          boundaryGap: true, // 鎺у埗鍧愭爣杞翠袱渚х暀鐧�
+          boundaryGap: true,
           type: 'category',
           data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�']
         },
         yAxis: {
           type: 'value'
         },
-        series: [
-          {
-            name: '鎬婚噺',
-            type: 'line',
-            smooth: true,
-            stack: 'Total',
-            label: {
-              show: true,
-              position: 'top'
-            },
-            data: [5000, 2000, 3600, 1000, 1000, 2000, 500, 2000, 500, 2000, 500, 2000]
-          },
-          {
-            name: '鏂板',
-            type: 'line',
-            smooth: true,
-            stack: 'Total',
-            label: {
-              show: true,
-              position: 'top'
-            },
-            data: [1510, 1010, 2610, 2010, 3010, 1010, 1510, 3010, 1010, 1510, 3010, 2000]
-          }
-        ]
-      },
+        series: []
+      }
     };
   },
-  mounted() {
-  },
-}
+  created() {
+  }
+};
 </script>
 
 <style lang="scss" scoped>
 #chart {
-  width: 1280px;
+  width: 100%;
+  height: 400px;
 }
-
 </style>
diff --git a/Source/UBCS-WEB/src/components/StatisticsComponent/mixCart.vue b/Source/UBCS-WEB/src/components/StatisticsComponent/mixCart.vue
new file mode 100644
index 0000000..711d091
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/StatisticsComponent/mixCart.vue
@@ -0,0 +1,120 @@
+<template>
+  <basic-container>
+    <v-chart id="chart" :auto-resize="true" :options="chartOptions"></v-chart>
+  </basic-container>
+</template>
+
+<script>
+import 'echarts'
+import 'echarts/lib/chart/line'
+import 'echarts/lib/chart/pie'
+import 'echarts/lib/chart/bar'
+import 'echarts/lib/component/tooltip'
+import 'echarts/lib/component/title'
+import 'echarts/lib/component/legend'
+
+export default {
+  name: "mixCart",
+  props: {
+    mixData: {
+      type: Array,
+      default: []
+    },
+    chartName: {
+      type: String,
+      default: ""
+    }
+  },
+  data() {
+    return {
+      chartOptions: {
+        title: {
+          text: "",
+        },
+        grid: {
+          left: "3%",
+          right: "4%",
+          bottom: "3%",
+          containLabel: true,
+        },
+        tooltip: {
+          trigger: "axis",
+          axisPointer: {
+            type: "shadow",
+          },
+        },
+        legend: {
+          data: ["鎬婚噺", "鏂板"],
+          left: "center",
+        },
+        xAxis: {
+          type: "category",
+          data: [
+            "涓�鏈�",
+            "浜屾湀",
+            "涓夋湀",
+            "鍥涙湀",
+            "浜旀湀",
+            "鍏湀",
+            "涓冩湀",
+            "鍏湀",
+            "涔濇湀",
+            "鍗佹湀",
+            "鍗佷竴鏈�",
+            "鍗佷簩鏈�",
+          ],
+        },
+        yAxis: {
+          type: "value",
+        },
+        series: [],
+      },
+    };
+  },
+  watch: {
+    mixData: {
+      immediate: true,
+      handler(newval, oldval) {
+        if (newval) {
+          const colors = ["#8fef5b", "#db3c3c"];
+
+          const seriesData = newval.map((data, index) => ({
+            name: index === 0 ? "鎬婚噺" : "鏂板",
+            type: index === 0 ? "bar" : "line",
+            stack: index === 0 ? "鎬婚噺" : null,
+            data: data.map(value => ({value})),
+            label: {
+              show: true,
+              position: "top"
+            },
+            itemStyle: {
+              color: colors[index]
+            },
+            emphasis: {
+              focus: "series"
+            }
+          }));
+
+          this.chartOptions.series = seriesData;
+        }
+      },
+    },
+    chartName:{
+      handler(newval,oldval){
+        if(newval){
+          this.chartOptions.title.text = newval + "鏁版嵁缁熻"
+        }
+      },
+      immediate:true,
+      deep:true
+    }
+  },
+};
+</script>
+
+<style scoped lang="scss">
+#chart {
+  width: 100%;
+  height: 560px;
+}
+</style>
diff --git a/Source/UBCS-WEB/src/components/StatisticsComponent/pieChart.vue b/Source/UBCS-WEB/src/components/StatisticsComponent/pieChart.vue
index 9b757c3..94d451c 100644
--- a/Source/UBCS-WEB/src/components/StatisticsComponent/pieChart.vue
+++ b/Source/UBCS-WEB/src/components/StatisticsComponent/pieChart.vue
@@ -1,5 +1,5 @@
 <template>
-  <basic-container>
+  <basic-container style="width: 100%">
     <v-chart :options="chartOptions" :auto-resize="true" id="chart"></v-chart>
   </basic-container>
 </template>
@@ -11,6 +11,16 @@
 import 'echarts/lib/component/legend'
 export default {
   name: "pieChart",
+  props:{
+    pieData:{
+      type:Array,
+      default:[]
+    },
+    chartName:{
+      type:String,
+      default: ""
+    }
+  },
   data() {
     return {
       chartOptions: {
@@ -21,7 +31,7 @@
         tooltip: {
           trigger: 'item',
           formatter: function (params) {
-            var result = '';
+            let result = '';
             if (params.componentType === 'series') {
               result += params.name + '<br/>';
               result += '鏂板锛�' + params.data.newValue + '<br/>';
@@ -50,7 +60,7 @@
             itemStyle: {
               color: function(params) {
                 // 鏍规嵁鍏蜂綋闇�姹傝缃鑹�
-                var colorList = ['#5470C6', '#91CC75', '#fac858', '#EE6666', '#3BA272', '#FC8452', '#9A60B4', '#e34d4d', '#b3e9b9', '#eaaaed', '#1bc6e4', '#c6b3e9'];
+                const colorList = ['#5470C6', '#91CC75', '#fac858', '#EE6666', '#3BA272', '#FC8452', '#9A60B4', '#e34d4d', '#b3e9b9', '#eaaaed', '#1bc6e4', '#c6b3e9'];
                 return colorList[params.dataIndex % colorList.length];
               }
             },
@@ -78,7 +88,8 @@
 
 <style scoped lang="scss">
 #chart {
-  width: 800px;
-  height: 600px;
+  width: 90%;
+  height: 530px;
 }
+
 </style>
diff --git a/Source/UBCS-WEB/src/views/statistic/statisticPage.vue b/Source/UBCS-WEB/src/views/statistic/statisticPage.vue
index 415865a..d5b0556 100644
--- a/Source/UBCS-WEB/src/views/statistic/statisticPage.vue
+++ b/Source/UBCS-WEB/src/views/statistic/statisticPage.vue
@@ -8,14 +8,53 @@
     <el-dialog
       :visible.sync="addVisible"
       append-to-body
+      class="avue-dialog avue-dialog--top"
       title="鏂板鏁版嵁缁熻鍒嗘瀽"
+      top="-50px"
     >
+      <el-table
+        :data="tableData"
+        border
+        style="width: 100%"
+        @selection-change="selectChange"
+       >
+        <el-table-column
+          type="selection"
+          width="55">
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="涓绘暟鎹簱鍚�"
+          prop="menuName">
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="绫诲瀷"
+          prop="codeType">
+          <template slot-scope="{ row }">
+            <el-select v-model="row.codeType" placeholder="璇烽�夋嫨鍥捐〃绫诲瀷">
+              <el-option label="鎶樼嚎鍥�" value="0"></el-option>
+              <el-option label="楗肩姸鍥�" value="1"></el-option>
+              <el-option label="鏌辩姸鍥�" value="2"></el-option>
+              <el-option label="鏌辩姸鎶樼嚎鍥�" value="3"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+      </el-table>
+      <span slot="footer" class="dialog-footer">
+    <el-button @click="escHandler">鍙� 娑�</el-button>
+    <el-button type="primary" @click="addSaveHandler">淇濆瓨</el-button>
+  </span>
     </el-dialog>
     <!--    echarts缁勪欢-->
     <div>
-            <lineChart></lineChart>
-            <pieChart></pieChart>
-            <ColumnarChart></ColumnarChart>
+      <lineChart v-for="(item,index) in lineList" :key="index" :chartName="item.menuName"
+                 :lineData="item.menuData"></lineChart>
+      <!--      <pieChart :pieData="pieData" :chartName="chartName"></pieChart>-->
+      <ColumnarChart v-for="(item,index) in columnarList" :key="index" :chartName="item.menuName"
+                     :columnarData="item.menuData"></ColumnarChart>
+      <mixCart v-for="(item,index) in mixList" :key="index" :chartName="item.menuName"
+               :mixData="item.menuData"></mixCart>
     </div>
   </div>
 </template>
@@ -24,23 +63,164 @@
 import lineChart from "../../components/StatisticsComponent/lineChart"
 import pieChart from "../../components/StatisticsComponent/pieChart"
 import ColumnarChart from "../../components/StatisticsComponent/ColumnarChart"
+import mixCart from "../../components/StatisticsComponent/mixCart"
 
 export default {
   components: {
     lineChart,
     pieChart,
-    ColumnarChart
+    ColumnarChart,
+    mixCart
   },
   name: "statisticPage",
   data() {
     return {
       addVisible: false,
+      chartName: "",
+      lineList: [],
+      pieList: [],
+      columnarList: [],
+      mixList: [],
+      selectData: [],
+      tableData: [
+        {
+          menuName: "宸ヨ壓鏂囦欢",
+          codeType: "1",
+          menuData: [
+            [222, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "娴嬭瘯sc",
+          codeType: "2",
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "浜у搧鍨嬪彿",
+          codeType: "0",
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "鍥哄畾璧勪骇",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "鏉庤埅涓绘暟鎹�",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "Part",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "浜哄憳涓绘暟鎹�",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "浜哄憳",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "鏍囧噯",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "鐗╁搧涓绘暟鎹�",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        },
+        {
+          menuName: "鍨嬪彿",
+          codeType: null,
+          menuData: [
+            [220, 232, 301, 334, 290, 330, 410, 330, 212, 322, 200, 234],
+            [120, 132, 101, 134, 90, 230, 210, 130, 10, 122, 100, 80],
+          ]
+        }
+      ]
     }
   },
   methods: {
+    //鏂板
     addHandler() {
       this.addVisible = true;
-    }
+    },
+    //鍙栨秷
+    escHandler() {
+      this.addVisible = false;
+    },
+    //淇濆瓨
+    addSaveHandler() {
+      debugger
+      if (this.selectData.length <= 0) {
+        this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹紒');
+        return;
+      }
+
+      const typeList = {
+        "0": "lineList",
+        "1": "pieList",
+        "2": "columnarList",
+        "3": "mixList"
+      };
+
+      let hasValidData = false; // 娣诲姞涓�涓爣蹇楁潵璁板綍鏄惁鏈夋湁鏁堢殑閫夋嫨鏁版嵁
+      let codeStatus = this.selectData.every(key => key.codeType)
+      if (!codeStatus) {
+        this.$message.warning("璇锋鏌ュ凡鍕鹃�夋暟鎹被鍨嬫槸鍚︿负绌猴紒");
+        return;
+      }
+      this.selectData.forEach(item => {
+        const dataKey = typeList[item.codeType];
+        if (dataKey) {
+          this[dataKey].push(item);
+          hasValidData = true; // 鏍囪鏈夋湁鏁堟暟鎹娣诲姞
+        }
+      });
+
+      if (hasValidData) {
+        this.addVisible = false;
+      }
+    },
+    //琛ㄦ牸澶氶��
+    selectChange(selection, row) {
+      // console.log(selection, row)
+      this.selectData = selection;
+    },
   }
 }
 </script>

--
Gitblit v1.9.3