Selaa lähdekoodia

-苯乙烯首页

jiangbiao 2 vuotta sitten
vanhempi
commit
bf0620b173

+ 45 - 4
master/src/main/java/com/ruoyi/project/document/domain/TPlantproglist.java

@@ -1,11 +1,12 @@
 package com.ruoyi.project.document.domain;
 
-import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
 
 /**
  * 装置程序清单对象 t_plantproglist
@@ -135,6 +136,46 @@ public class TPlantproglist extends BaseEntity
     @Excel(name = "附件修改日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date revisionDate;
 
+    private String dataCount;
+
+    private String dataMonth;
+
+    private String startDate;
+
+    private String endDate;
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getDataCount() {
+        return dataCount;
+    }
+
+    public void setDataCount(String dataCount) {
+        this.dataCount = dataCount;
+    }
+
+    public String getDataMonth() {
+        return dataMonth;
+    }
+
+    public void setDataMonth(String dataMonth) {
+        this.dataMonth = dataMonth;
+    }
+
     public void setId(Long id)
     {
         this.id = id;
@@ -397,4 +438,4 @@ public class TPlantproglist extends BaseEntity
                 .append("reviewResult", getReviewResult())
                 .toString();
     }
-}
+}

+ 7 - 3
master/src/main/java/com/ruoyi/project/document/mapper/TPlantproglistMapper.java

@@ -1,12 +1,12 @@
 package com.ruoyi.project.document.mapper;
 
-import java.util.List;
-import java.util.Map;
-
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.common.domain.DataEntity;
 import com.ruoyi.project.document.domain.TPlantproglist;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 装置程序清单Mapper接口
  *
@@ -32,6 +32,10 @@ public interface TPlantproglistMapper
     @DataScope(deptAlias = "d")
     public List<TPlantproglist> selectTPlantproglistList(TPlantproglist tPlantproglist);
 
+    public List<TPlantproglist> countNextReviewDate(TPlantproglist tPlantproglist);
+
+    public List<TPlantproglist> countNextEditDate(TPlantproglist tPlantproglist);
+
     /**
      * 定时任务查询装置程序清单列表
      *

+ 4 - 1
master/src/main/java/com/ruoyi/project/document/service/ITPlantproglistService.java

@@ -1,11 +1,12 @@
 package com.ruoyi.project.document.service;
 
-import java.util.List;
 import com.ruoyi.project.document.domain.TPlantproglist;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRun;
 
+import java.util.List;
+
 /**
  * 装置程序清单Service接口
  *
@@ -29,6 +30,8 @@ public interface ITPlantproglistService
      * @return 装置程序清单集合
      */
     public List<TPlantproglist> selectTPlantproglistList(TPlantproglist tPlantproglist);
+    public List<TPlantproglist> countNextReviewDate(TPlantproglist tPlantproglist);
+    public List<TPlantproglist> countNextEditDate(TPlantproglist tPlantproglist);
 
     /**
      * 定时任务查询装置程序清单列表

+ 16 - 6
master/src/main/java/com/ruoyi/project/document/service/impl/TPlantproglistServiceImpl.java

@@ -1,19 +1,17 @@
 package com.ruoyi.project.document.service.impl;
 
-import java.util.List;
-
 import com.ruoyi.common.utils.poi.POIConstants;
 import com.ruoyi.common.utils.poi.PoiWordTools;
+import com.ruoyi.project.document.domain.TPlantproglist;
+import com.ruoyi.project.document.mapper.TPlantproglistMapper;
+import com.ruoyi.project.document.service.ITPlantproglistService;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.xwpf.usermodel.*;
 import org.apache.xmlbeans.XmlCursor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.project.document.mapper.TPlantproglistMapper;
-import com.ruoyi.project.document.domain.TPlantproglist;
-import com.ruoyi.project.document.service.ITPlantproglistService;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 装置程序清单Service业务层处理
@@ -51,6 +49,18 @@ public class TPlantproglistServiceImpl implements ITPlantproglistService
         return tPlantproglistMapper.selectTPlantproglistList(tPlantproglist);
     }
 
+    @Override
+    public List<TPlantproglist> countNextReviewDate(TPlantproglist tPlantproglist)
+    {
+        return tPlantproglistMapper.countNextReviewDate(tPlantproglist);
+    }
+
+    @Override
+    public List<TPlantproglist> countNextEditDate(TPlantproglist tPlantproglist)
+    {
+        return tPlantproglistMapper.countNextEditDate(tPlantproglist);
+    }
+
     /**
      * 定时任务查询装置程序清单列表
      *

+ 130 - 0
master/src/main/java/com/ruoyi/project/ehs/controller/ByxHomeDataController.java

@@ -0,0 +1,130 @@
+package com.ruoyi.project.ehs.controller;
+
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.document.domain.TPlantproglist;
+import com.ruoyi.project.document.service.ITPlantproglistService;
+import com.ruoyi.project.ehs.domain.TEnvironapproval;
+import com.ruoyi.project.ehs.domain.TFireapproval;
+import com.ruoyi.project.ehs.domain.THealthapproval;
+import com.ruoyi.project.ehs.domain.TSafetyapproval;
+import com.ruoyi.project.ehs.service.ITEnvironapprovalService;
+import com.ruoyi.project.ehs.service.ITFireapprovalService;
+import com.ruoyi.project.ehs.service.ITHealthapprovalService;
+import com.ruoyi.project.ehs.service.ITSafetyapprovalService;
+import com.ruoyi.project.training.domain.TTraining;
+import com.ruoyi.project.training.service.ITTrainingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/byx/home")
+public class ByxHomeDataController extends BaseController {
+    @Autowired
+    private ITSafetyapprovalService tSafetyapprovalService;
+
+    @Autowired
+    private ITFireapprovalService tFireapprovalService;
+
+    @Autowired
+    private ITEnvironapprovalService tEnvironapprovalService;
+
+    @Autowired
+    private ITHealthapprovalService tHealthapprovalService;
+
+    @Autowired
+    private ITPlantproglistService tPlantproglistService;
+
+    @Autowired
+    private ITTrainingService tTrainingService;
+
+    @GetMapping("/countNum")
+    public AjaxResult getCountNum() {
+        List<TSafetyapproval> safeList = tSafetyapprovalService.selectTSafetyapprovalList(new TSafetyapproval());
+        List<TFireapproval> fireList = tFireapprovalService.selectTFireapprovalList(new TFireapproval());
+        List<TEnvironapproval> envList = tEnvironapprovalService.selectTEnvironapprovalList(new TEnvironapproval());
+        List<THealthapproval> healthList = tHealthapprovalService.selectTHealthapprovalList(new THealthapproval());
+        HashMap<String, Integer> result = new HashMap<>();
+        result.put("safeNum", safeList.size());
+        result.put("fireNum", fireList.size());
+        result.put("envNum", envList.size());
+        result.put("healthNum", healthList.size());
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/procedureCount")
+    public AjaxResult procedureCount() {
+        TPlantproglist tPlantproglist = new TPlantproglist();
+        HashMap<String, Object> result = new HashMap<>();
+        tPlantproglist.setItem(2L);
+        List<TPlantproglist> list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("appNum", list.size());
+        result.put("app", "程序总汇");
+
+        tPlantproglist.setItem(3L);
+        list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("fingerpostNum", list.size());
+        result.put("fingerpost", "指南总汇");
+
+        tPlantproglist.setItem(4L);
+        list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("guideNum", list.size());
+        result.put("guide", "指导书总汇");
+
+        tPlantproglist.setItem(5L);
+        list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("fileNum", list.size());
+        result.put("file", "附件总汇");
+
+        tPlantproglist.setItem(1L);
+        list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("excelNum", list.size());
+        result.put("excel", "表格总汇");
+
+        tPlantproglist.setItem(6L);
+        list = tPlantproglistService.selectTPlantproglistList(tPlantproglist);
+        result.put("trainNum", list.size());
+        result.put("train", "培训材料");
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/trainCount")
+    public AjaxResult getTrainCount() {
+        TTraining tTraining = new TTraining();
+        Calendar cal = Calendar.getInstance();
+        tTraining.setYear(String.valueOf(cal.get(Calendar.YEAR)));
+        return AjaxResult.success(tTrainingService.countTTraining(tTraining));
+    }
+
+    @GetMapping("/getLine")
+    public AjaxResult getLine() {
+
+        TPlantproglist tPlantproglist = new TPlantproglist();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM");
+        Calendar cal = Calendar.getInstance();
+        Map<String, List<TPlantproglist>> result = new HashMap<>();
+        List<TPlantproglist> nextEdits = new ArrayList<>();
+        List<TPlantproglist> nextReviews = new ArrayList<>();
+        for (int i = 1; i < 8; i++) {
+            tPlantproglist.setStartDate(sdf.format(cal.getTime()));
+            cal.add(Calendar.MONTH, 1);
+            nextEdits.addAll(tPlantproglistService.countNextEditDate(tPlantproglist));
+            nextReviews.addAll(tPlantproglistService.countNextReviewDate(tPlantproglist));
+        }
+        result.put("nextEdit", nextEdits);
+        result.put("nextReview",nextReviews);
+        return AjaxResult.success(result);
+    }
+
+    public static void main(String[] args) {
+        Calendar cal = Calendar.getInstance();
+        System.out.println(cal.getTime());
+        cal.add(Calendar.MONTH, 7);
+        System.out.println(cal.getTime());
+    }
+}

+ 13 - 3
master/src/main/java/com/ruoyi/project/training/domain/TTraining.java

@@ -1,14 +1,14 @@
 package com.ruoyi.project.training.domain;
 
-import java.util.Date;
-import java.util.List;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 培训计划对象 t_training
  *
@@ -37,6 +37,8 @@ public class TTraining extends BaseEntity
     @Excel(name = "培训类型", dictType = "TRAINING_TYPE")
     private String trainingType;
 
+    private Long trainingTypeCount;
+
     /** 培训内容 */
     @Excel(name = "培训内容")
     private String content;
@@ -140,6 +142,14 @@ public class TTraining extends BaseEntity
 
     private List<TTrainingNon> tTrainingNons;
 
+    public Long getTrainingTypeCount() {
+        return trainingTypeCount;
+    }
+
+    public void setTrainingTypeCount(Long trainingTypeCount) {
+        this.trainingTypeCount = trainingTypeCount;
+    }
+
     public void setId(Long id)
     {
         this.id = id;

+ 10 - 8
master/src/main/java/com/ruoyi/project/training/mapper/TTrainingMapper.java

@@ -1,13 +1,14 @@
 package com.ruoyi.project.training.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.training.domain.TTraining;
 
+import java.util.List;
+
 /**
  * 培训计划Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2020-12-02
  */
@@ -15,7 +16,7 @@ public interface TTrainingMapper  extends BaseMapper<TTraining>
 {
     /**
      * 查询培训计划
-     * 
+     *
      * @param id 培训计划ID
      * @return 培训计划
      */
@@ -31,16 +32,17 @@ public interface TTrainingMapper  extends BaseMapper<TTraining>
 
     /**
      * 查询培训计划列表
-     * 
+     *
      * @param tTraining 培训计划
      * @return 培训计划集合
      */
     @DataScope(deptAlias = "d")
     public List<TTraining> selectTTrainingList(TTraining tTraining);
+    public List<TTraining> countTTraining(TTraining tTraining);
 
     /**
      * 新增培训计划
-     * 
+     *
      * @param tTraining 培训计划
      * @return 结果
      */
@@ -48,7 +50,7 @@ public interface TTrainingMapper  extends BaseMapper<TTraining>
 
     /**
      * 修改培训计划
-     * 
+     *
      * @param tTraining 培训计划
      * @return 结果
      */
@@ -56,7 +58,7 @@ public interface TTrainingMapper  extends BaseMapper<TTraining>
 
     /**
      * 删除培训计划
-     * 
+     *
      * @param id 培训计划ID
      * @return 结果
      */
@@ -64,7 +66,7 @@ public interface TTrainingMapper  extends BaseMapper<TTraining>
 
     /**
      * 批量删除培训计划
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */

+ 12 - 9
master/src/main/java/com/ruoyi/project/training/service/ITTrainingService.java

@@ -1,22 +1,23 @@
 package com.ruoyi.project.training.service;
 
-import java.util.List;
 import com.ruoyi.project.training.domain.TTraining;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRun;
 
+import java.util.List;
+
 /**
  * 培训计划Service接口
- * 
+ *
  * @author ruoyi
  * @date 2020-12-02
  */
-public interface ITTrainingService 
+public interface ITTrainingService
 {
     /**
      * 查询培训计划
-     * 
+     *
      * @param id 培训计划ID
      * @return 培训计划
      */
@@ -32,15 +33,17 @@ public interface ITTrainingService
 
     /**
      * 查询培训计划列表
-     * 
+     *
      * @param tTraining 培训计划
      * @return 培训计划集合
      */
     public List<TTraining> selectTTrainingList(TTraining tTraining);
 
+    public List<TTraining> countTTraining(TTraining tTraining);
+
     /**
      * 新增培训计划
-     * 
+     *
      * @param tTraining 培训计划
      * @return 结果
      */
@@ -48,7 +51,7 @@ public interface ITTrainingService
 
     /**
      * 修改培训计划
-     * 
+     *
      * @param tTraining 培训计划
      * @return 结果
      */
@@ -56,7 +59,7 @@ public interface ITTrainingService
 
     /**
      * 批量删除培训计划
-     * 
+     *
      * @param ids 需要删除的培训计划ID
      * @return 结果
      */
@@ -64,7 +67,7 @@ public interface ITTrainingService
 
     /**
      * 删除培训计划信息
-     * 
+     *
      * @param id 培训计划ID
      * @return 结果
      */

+ 12 - 11
master/src/main/java/com/ruoyi/project/training/service/impl/TTrainingServiceImpl.java

@@ -1,30 +1,25 @@
 package com.ruoyi.project.training.service.impl;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.alibaba.fastjson.JSON;
-import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DictUtils;
 import com.ruoyi.common.utils.poi.POIConstants;
 import com.ruoyi.common.utils.poi.PoiWordTools;
-import com.ruoyi.project.plant.domain.TMtActionlist;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.plant.mapper.TStaffmgrMapper;
 import com.ruoyi.project.system.domain.SysDictData;
 import com.ruoyi.project.system.service.ISysDictTypeService;
+import com.ruoyi.project.training.domain.TTraining;
+import com.ruoyi.project.training.mapper.TTrainingMapper;
+import com.ruoyi.project.training.service.ITTrainingService;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.xwpf.usermodel.*;
 import org.apache.xmlbeans.XmlCursor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.project.training.mapper.TTrainingMapper;
-import com.ruoyi.project.training.domain.TTraining;
-import com.ruoyi.project.training.service.ITTrainingService;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * 培训计划Service业务层处理
@@ -76,6 +71,12 @@ public class TTrainingServiceImpl implements ITTrainingService
         return tTrainingMapper.selectTTrainingList(tTraining);
     }
 
+    @Override
+    public List<TTraining> countTTraining(TTraining tTraining)
+    {
+        return tTrainingMapper.countTTraining(tTraining);
+    }
+
     /**
      * 新增培训计划
      *

+ 30 - 0
master/src/main/resources/mybatis/document/TPlantproglistMapper.xml

@@ -35,6 +35,8 @@
         <result property="revisionDate"    column="revision_date"    />
         <result property="deptId"    column="dept_id"    />
         <result property="deptName" column="dept_name" />
+        <result property="dataCount" column="data_count" />
+        <result property="dataMonth" column="data_month" />
     </resultMap>
 
     <sql id="selectTPlantproglistVo">
@@ -89,6 +91,34 @@
         where id = #{id}
     </select>
 
+    <select id="countNextEditDate" parameterType="TPlantproglist" resultMap="TPlantproglistResult">
+        SELECT
+            #{startDate} data_month,
+            count( 1 ) data_count
+        FROM
+            t_Plantproglist
+        WHERE
+            to_char(NEXTEDITDATE, 'YYYY/MM' ) =  #{startDate}
+                AND DEL_FLAG=0
+                AND DEPT_ID=10010
+        ORDER BY
+            data_month
+    </select>
+
+    <select id="countNextReviewDate" parameterType="TPlantproglist" resultMap="TPlantproglistResult">
+        SELECT
+            #{startDate} data_month,
+            count( 1 ) data_count
+        FROM
+            t_Plantproglist
+        WHERE
+            to_char(NEXTREVIEWDATE, 'YYYY/MM' ) =  #{startDate}
+                AND DEL_FLAG=0
+                AND DEPT_ID=10010
+        ORDER BY
+            data_month
+    </select>
+
     <insert id="insertTPlantproglist" parameterType="TPlantproglist">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT seq_t_plantproglist.NEXTVAL as id FROM DUAL

+ 18 - 0
master/src/main/resources/mybatis/training/TTrainingMapper.xml

@@ -37,6 +37,7 @@
         <result property="picUrl" column="pic_url"/>
         <result property="regularId" column="regular_id"/>
         <result property="positionNum" column="positionNum"/>
+        <result property="trainingTypeCount" column="count"/>
         <collection property="tTrainingNons" javaType="ArrayList" ofType="TTrainingNon">
             <result property="staffId" column="staff_id"/>
             <result property="trainingDate" column="training_date"/>
@@ -104,6 +105,23 @@
         order by d.years desc, d.course_startdate
     </select>
 
+    <select id="countTTraining" parameterType="TTraining" resultMap="TTrainingResult">
+        SELECT
+            DICT_LABEL TRAINING_TYPE,
+            COUNT( 1 ) count
+        FROM
+            t_training a
+                LEFT JOIN SYS_DICT_DATA b ON a.TRAINING_TYPE = b.DICT_VALUE
+        WHERE
+            b.DICT_TYPE = 'TRAINING_TYPE'
+          AND a.dept_id = 10010
+          AND a.DEL_FLAG = 0
+          AND years = #{year}
+        GROUP BY
+            a.TRAINING_TYPE,
+            b.DICT_LABEL
+    </select>
+
     <select id="selectTTrainingById" parameterType="Long" resultMap="TTrainingResult">
         <include refid="selectTTrainingVo"/>
         where id = #{id}

+ 30 - 0
ui/src/api/ehs/homedata.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+// 查询4个统计
+export function countNum() {
+  return request({
+    url: '/byx/home/countNum',
+    method: 'get',
+  })
+}
+// 查询装置程序清单统计
+export function procedureCount() {
+  return request({
+    url: '/byx/home/procedureCount',
+    method: 'get',
+  })
+}
+// 统计培训
+export function trainCount() {
+  return request({
+    url: '/byx/home/trainCount',
+    method: 'get',
+  })
+}
+// 根据时间统计
+export function getLine() {
+  return request({
+    url: '/byx/home/getLine',
+    method: 'get',
+  })
+}

+ 40 - 38
ui/src/views/dashboard/LineChart.vue

@@ -1,11 +1,13 @@
 <template>
-  <div :class="className" :style="{height:height,width:width}" />
+  <div :class="className" :style="{height:height,width:width}"/>
 </template>
 
 <script>
 import echarts from 'echarts'
+
 require('echarts/theme/macarons') // echarts theme
 import resize from './mixins/resize'
+import {getLine} from "@/api/ehs/homedata";
 
 export default {
   mixins: [resize],
@@ -33,20 +35,24 @@ export default {
   },
   data() {
     return {
-      chart: null
-    }
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val)
-      }
+      chart: null,
+      nextEdit: [],
+      nextReview: [],
+      monthList: [],
     }
   },
   mounted() {
     this.$nextTick(() => {
-      this.initChart()
+      getLine().then(res => {
+        for (const item of res.data.nextEdit) {
+          this.monthList.push(item.dataMonth);
+          this.nextEdit.push(item.dataCount);
+        }
+        for (const item of res.data.nextReview) {
+          this.nextReview.push(item.dataCount);
+        }
+        this.initChart()
+      })
     })
   },
   beforeDestroy() {
@@ -59,12 +65,9 @@ export default {
   methods: {
     initChart() {
       this.chart = echarts.init(this.$el, 'macarons')
-      this.setOptions(this.chartData)
-    },
-    setOptions({ expectedData, actualData } = {}) {
       this.chart.setOption({
         xAxis: {
-          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+          data: this.monthList,
           boundaryGap: false,
           axisTick: {
             show: false
@@ -72,7 +75,7 @@ export default {
         },
         grid: {
           left: 10,
-          right: 10,
+          right: 30,
           bottom: 20,
           top: 30,
           containLabel: true
@@ -82,7 +85,6 @@ export default {
           axisPointer: {
             type: 'cross'
           },
-          padding: [5, 10]
         },
         yAxis: {
           axisTick: {
@@ -90,10 +92,10 @@ export default {
           }
         },
         legend: {
-          data: ['expected', 'actual']
+          data: ['下次修订日期', '下次回顾日期']
         },
         series: [{
-          name: 'expected', itemStyle: {
+          name: '下次修订日期', itemStyle: {
             normal: {
               color: '#FF005A',
               lineStyle: {
@@ -104,30 +106,30 @@ export default {
           },
           smooth: true,
           type: 'line',
-          data: expectedData,
+          data: this.nextEdit,
           animationDuration: 2800,
           animationEasing: 'cubicInOut'
         },
-        {
-          name: 'actual',
-          smooth: true,
-          type: 'line',
-          itemStyle: {
-            normal: {
-              color: '#3888fa',
-              lineStyle: {
+          {
+            name: '下次回顾日期',
+            smooth: true,
+            type: 'line',
+            itemStyle: {
+              normal: {
                 color: '#3888fa',
-                width: 2
-              },
-              areaStyle: {
-                color: '#f3f8ff'
+                lineStyle: {
+                  color: '#3888fa',
+                  width: 2
+                },
+                areaStyle: {
+                  color: '#f3f8ff'
+                }
               }
-            }
-          },
-          data: actualData,
-          animationDuration: 2800,
-          animationEasing: 'quadraticOut'
-        }]
+            },
+            data: this.nextReview,
+            animationDuration: 2800,
+            animationEasing: 'quadraticOut'
+          }]
       })
     }
   }

+ 29 - 12
ui/src/views/dashboard/PanelGroup.vue

@@ -3,52 +3,52 @@
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
       <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
         <div class="card-panel-icon-wrapper icon-people">
-          <svg-icon icon-class="anquan" class-name="card-panel-icon" />
+          <svg-icon icon-class="anquan" class-name="card-panel-icon"/>
         </div>
         <div class="card-panel-description">
           <div class="card-panel-text">
             安全
           </div>
-          <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" />
+          <count-to :start-val="0" :end-val="safeNum" :duration="2600" class="card-panel-num"/>
         </div>
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
       <div class="card-panel" @click="handleSetLineChartData('messages')">
         <div class="card-panel-icon-wrapper icon-message">
-          <svg-icon icon-class="huanbao" class-name="card-panel-icon" />
+          <svg-icon icon-class="huanbao" class-name="card-panel-icon"/>
         </div>
         <div class="card-panel-description">
           <div class="card-panel-text">
-           环保
+            环保
           </div>
-          <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" />
+          <count-to :start-val="0" :end-val="envNum" :duration="3000" class="card-panel-num"/>
         </div>
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
       <div class="card-panel" @click="handleSetLineChartData('purchases')">
         <div class="card-panel-icon-wrapper icon-money">
-          <svg-icon icon-class="xiaofang" class-name="card-panel-icon" />
+          <svg-icon icon-class="xiaofang" class-name="card-panel-icon"/>
         </div>
         <div class="card-panel-description">
           <div class="card-panel-text">
-           消防
+            消防
           </div>
-          <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" />
+          <count-to :start-val="0" :end-val="fireNum" :duration="3200" class="card-panel-num"/>
         </div>
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
       <div class="card-panel" @click="handleSetLineChartData('shoppings')">
         <div class="card-panel-icon-wrapper icon-shopping">
-          <svg-icon icon-class="weisheng" class-name="card-panel-icon" />
+          <svg-icon icon-class="weisheng" class-name="card-panel-icon"/>
         </div>
         <div class="card-panel-description">
           <div class="card-panel-text">
-           卫生
+            卫生
           </div>
-          <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" />
+          <count-to :start-val="0" :end-val="healthNum" :duration="3600" class="card-panel-num"/>
         </div>
       </div>
     </el-col>
@@ -57,11 +57,28 @@
 
 <script>
 import CountTo from 'vue-count-to'
+import {countNum} from "@/api/ehs/homedata";
 
 export default {
   components: {
     CountTo
   },
+  data() {
+    return {
+      healthNum: 0,
+      envNum: 0,
+      fireNum: 0,
+      safeNum: 0,
+    }
+  },
+  created() {
+    countNum().then(res => {
+      this.healthNum = res.data.healthNum;
+      this.envNum = res.data.envNum;
+      this.fireNum = res.data.fireNum;
+      this.safeNum = res.data.safeNum;
+    })
+  },
   methods: {
     handleSetLineChartData(type) {
       this.$emit('handleSetLineChartData', type)
@@ -160,7 +177,7 @@ export default {
   }
 }
 
-@media (max-width:550px) {
+@media (max-width: 550px) {
   .card-panel-description {
     display: none;
   }

+ 14 - 11
ui/src/views/dashboard/byx/PieChart.vue

@@ -6,6 +6,7 @@
 import echarts from 'echarts'
 require('echarts/theme/macarons') // echarts theme
 import resize from '../mixins/resize'
+import {trainCount} from "@/api/ehs/homedata";
 
 export default {
   mixins: [resize],
@@ -25,12 +26,20 @@ export default {
   },
   data() {
     return {
-      chart: null
+      chart: null,
+      trainData:[],
+      trainingType:[]
     }
   },
   mounted() {
     this.$nextTick(() => {
-      this.initChart()
+      trainCount().then(res=>{
+        for (const item of res.data) {
+          this.trainData.push({value:item.trainingTypeCount,name:item.trainingType});
+          this.trainingType.push(item.trainingType)
+        }
+        this.initChart()
+      })
     })
   },
   beforeDestroy() {
@@ -52,22 +61,16 @@ export default {
         legend: {
           left: 'center',
           bottom: '10',
-          data: ['Industries', 'Technology', 'Forex', 'Gold', 'Forecasts']
+          data:this.trainingType
         },
         series: [
           {
-            name: 'WEEKLY WRITE ARTICLES',
+            name: '',
             type: 'pie',
             roseType: 'radius',
             radius: ['10%', '55%'],
             center: ['50%', '38%'],
-            data: [
-              { value: 320, name: 'Industries' },
-              { value: 240, name: 'Technology' },
-              { value: 149, name: 'Forex' },
-              { value: 100, name: 'Gold' },
-              { value: 59, name: 'Forecasts' }
-            ],
+            data: this.trainData,
             animationEasing: 'cubicInOut',
             animationDuration: 2600
           }

+ 69 - 59
ui/src/views/dashboard/byx/RaddarChart.vue

@@ -1,11 +1,13 @@
 <template>
-  <div :class="className" :style="{height:height,width:width}" />
+  <div :class="className" :style="{height:height,width:width}"/>
 </template>
 
 <script>
 import echarts from 'echarts'
+
 require('echarts/theme/macarons') // echarts theme
 import resize from '../mixins/resize'
+import {procedureCount} from "@/api/ehs/homedata";
 
 const animationDuration = 3000
 
@@ -27,12 +29,42 @@ export default {
   },
   data() {
     return {
-      chart: null
+      chart: null,
+      chartData: {},
+      color: [
+        '#87CA8B',
+        '#58B1FF',
+        '#FBD44A',
+        '#7485E5',
+        '#AEE5B1',
+        '#81C4FF',
+        '#AAD7FF',
+        '#FFE791',
+        '#9AA6EA',
+      ],
+      dataIn: [
+        // 外层数据
+      ],
+      dataOut: []
     }
+  },
+  created() {
+
   },
   mounted() {
     this.$nextTick(() => {
-      this.initChart()
+      procedureCount().then(res => {
+        this.dataOut = [
+          {value: res.data.appNum, name: res.data.app},
+          {value: res.data.trainNum, name: res.data.train},
+          {value: res.data.excelNum, name: res.data.excel},
+          {value: res.data.fileNum, name: res.data.file},
+          {value: res.data.guideNum, name: res.data.guide},
+          {value: res.data.fingerpostNum, name: res.data.fingerpost}
+        ]
+        this.initChart()
+      })
+
     })
   },
   beforeDestroy() {
@@ -47,68 +79,46 @@ export default {
       this.chart = echarts.init(this.$el, 'macarons')
 
       this.chart.setOption({
+        color: this.color,
         tooltip: {
-          trigger: 'axis',
-          axisPointer: { // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
-          }
-        },
-        radar: {
-          radius: '66%',
-          center: ['50%', '42%'],
-          splitNumber: 8,
-          splitArea: {
-            areaStyle: {
-              color: 'rgba(127,95,132,.3)',
-              opacity: 1,
-              shadowBlur: 45,
-              shadowColor: 'rgba(0,0,0,.5)',
-              shadowOffsetX: 0,
-              shadowOffsetY: 15
-            }
-          },
-          indicator: [
-            { name: 'Sales', max: 10000 },
-            { name: 'Administration', max: 20000 },
-            { name: 'Information Techology', max: 20000 },
-            { name: 'Customer Support', max: 20000 },
-            { name: 'Development', max: 20000 },
-            { name: 'Marketing', max: 20000 }
-          ]
+          trigger: 'item',
+          formatter: "{b}: {c} " + " | " + "{d}%"
         },
+        title:
+          {
+            text: '',
+          }
+        ,
         legend: {
-          left: 'center',
-          bottom: '10',
-          data: ['Allocated Budget', 'Expected Spending', 'Actual Spending']
-        },
-        series: [{
-          type: 'radar',
-          symbolSize: 0,
-          areaStyle: {
-            normal: {
-              shadowBlur: 13,
-              shadowColor: 'rgba(0,0,0,.2)',
-              shadowOffsetX: 0,
-              shadowOffsetY: 10,
-              opacity: 1
-            }
+          orient: 'vertical',
+          left: 'left',
+          itemWidth: 10,
+          itemHeight: 10,
+          textStyle: {
+            fontSize: 12,
+            padding:[0,0]
           },
-          data: [
-            {
-              value: [5000, 7000, 12000, 11000, 15000, 14000],
-              name: 'Allocated Budget'
+          selectedMode: true,
+          data: ['程序总汇', '指南总汇', '指导书总汇', '附件总汇', '表格总汇', '培训材料'],
+        },
+        series: [
+          {
+            name: '',
+            type: 'pie',
+            selectedMode: 'single',
+            radius: ['20%', '80%'],
+            label: {
+              position: 'outside',
+              fontSize: 10,
             },
-            {
-              value: [4000, 9000, 15000, 15000, 13000, 11000],
-              name: 'Expected Spending'
+            animationEasing: 'cubicInOut',
+            animationDuration: 1300,
+            labelLine: {
+              show: true
             },
-            {
-              value: [5500, 11000, 12000, 15000, 12000, 12000],
-              name: 'Actual Spending'
-            }
-          ],
-          animationDuration: animationDuration
-        }]
+            data: this.dataOut
+          }
+        ],
       })
     }
   }