Browse Source

fix: 提交

zhangying 8 tháng trước cách đây
mục cha
commit
1eee8f00e5

+ 2 - 0
src/main/java/com/hz/employmentsite/config/WebConfiguration.java

@@ -120,6 +120,8 @@ public class WebConfiguration implements WebMvcConfigurer {
         excludePath.add("/api/statistics/jobUserByRegionAndDifficulty"); // 普通求职者与就业困难人员情况
         excludePath.add("/api/statistics/employedJobUserCount"); // 各区县的已就业人员
         excludePath.add("/api/statistics/systemApplyCountBySite"); // 各驿站的业务数据情况
+        excludePath.add("/api/statistics/companyAndPostCountByRegion"); // 各区县的企业与岗位数量情况
+        excludePath.add("/api/statistics/companyModelCount"); // 各区县的企业规模情况
         excludePath.add("/api/jobUserServiceRecords/getSystemServiceList"); // 系统整体的服务记录
 
 

+ 20 - 0
src/main/java/com/hz/employmentsite/controller/statistics/StatisticsController.java

@@ -7,6 +7,7 @@ import com.hz.employmentsite.util.DateUtils;
 import com.hz.employmentsite.util.ExcelHelper;
 import com.hz.employmentsite.vo.statistics.RegionSystemDataCount;
 import com.hz.employmentsite.vo.statistics.SystemDataCount;
+import com.hz.employmentsite.vo.statistics.company.ModelCompanyCount;
 import com.hz.employmentsite.vo.statistics.jobUser.AgeRangeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.PersonTypeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.RegionJobUserCount;
@@ -120,6 +121,25 @@ public class StatisticsController {
         return RespGenerstor.success(systemDataCount);
     }
 
+    /**
+     * 查询各区县的企业与岗位数量-数据大屏
+     */
+    @GetMapping("/companyAndPostCountByRegion")
+    public BaseResponse getCompanyAndPostByRegion(@RequestParam(value = "startDate", required = false) Date startDate,
+                                                  @RequestParam(value = "endDate", required = false) Date endDate) {
+        List<RegionSystemDataCount> companyAndPostByRegion = statisticsService.findCompanyAndPostByRegion(startDate, endDate);
+        return RespGenerstor.success(companyAndPostByRegion);
+    }
+
+    /**
+     * 查询各区县的企业规模情况-数据大屏
+     */
+    @GetMapping("/companyModelCount")
+    public BaseResponse getCompanyModelCount() {
+        List<ModelCompanyCount> regionCompanyModel = statisticsService.findRegionCompanyModel();
+        return RespGenerstor.success(regionCompanyModel);
+    }
+
     /**
      * 导出指定时间段的系统使用情况
      *

+ 16 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/StatisticsCQuery.java

@@ -2,6 +2,7 @@ package com.hz.employmentsite.mapper.cquery;
 
 import com.hz.employmentsite.vo.statistics.RegionSystemDataCount;
 import com.hz.employmentsite.vo.statistics.SystemDataCount;
+import com.hz.employmentsite.vo.statistics.company.ModelCompanyCount;
 import com.hz.employmentsite.vo.statistics.jobUser.AgeRangeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.PersonTypeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.RegionJobUserCount;
@@ -115,4 +116,19 @@ public interface StatisticsCQuery {
      * 查询已就业的求职人员人数
      */
     List<RegionJobUserCount> findEmployedJobUserCount();
+
+    /**
+     * 查询各区县的企业数量
+     */
+    List<RegionSystemDataCount> findCompanyCountByRegion(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
+    /**
+     * 查询各区县的岗位数量
+     */
+    List<RegionSystemDataCount> findPostCountByRegion(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
+    /**
+     * 查询企业规模在各区县的分布情况-数据大屏
+     */
+    List<ModelCompanyCount> findCompanyModelDataByRegion();
 }

+ 34 - 0
src/main/java/com/hz/employmentsite/services/impl/statistics/StatisticsServiceImpl.java

@@ -6,6 +6,7 @@ import com.hz.employmentsite.util.DateUtils;
 import com.hz.employmentsite.util.StringUtils;
 import com.hz.employmentsite.vo.statistics.RegionSystemDataCount;
 import com.hz.employmentsite.vo.statistics.SystemDataCount;
+import com.hz.employmentsite.vo.statistics.company.ModelCompanyCount;
 import com.hz.employmentsite.vo.statistics.jobUser.AgeRangeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.PersonTypeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.RegionJobUserCount;
@@ -377,4 +378,37 @@ public class StatisticsServiceImpl implements StatisticsService {
     public List<SystemDataCount> findSystemDataCountBySite(Date startDate, Date endDate) {
         return statisticsCQuery.findSystemDataCount(startDate, endDate);
     }
+
+    /**
+     * 查询各区县的企业与岗位数量-数据大屏
+     */
+    @Override
+    public List<RegionSystemDataCount> findCompanyAndPostByRegion(Date startDate, Date endDate) {
+        // 查询出企业与岗位数据
+        List<RegionSystemDataCount> companyCountByRegion = statisticsCQuery.findCompanyCountByRegion(startDate, endDate);
+        List<RegionSystemDataCount> postCountByRegion = statisticsCQuery.findPostCountByRegion(startDate, endDate);
+
+        // 循环填充数据,将两个数据合并到一个集合中
+        List<RegionSystemDataCount> result = new ArrayList<>();
+        companyCountByRegion.forEach(companyCount -> {
+            if (!stringUtils.IsNullOrEmpty(companyCount.getRegionCode())){
+                RegionSystemDataCount find = postCountByRegion
+                        .stream()
+                        .filter(item -> item.getRegionCode().equals(companyCount.getRegionCode()))
+                        .findFirst()
+                        .orElse(new RegionSystemDataCount());
+                companyCount.setPostCount(find.getPostCount());
+                result.add(companyCount);
+            }
+        });
+        return result;
+    }
+
+    /**
+     * 查询各区县的企业的企业规模情况-数据大屏
+     */
+    @Override
+    public List<ModelCompanyCount> findRegionCompanyModel() {
+        return statisticsCQuery.findCompanyModelDataByRegion();
+    }
 }

+ 11 - 0
src/main/java/com/hz/employmentsite/services/service/statistics/StatisticsService.java

@@ -2,6 +2,7 @@ package com.hz.employmentsite.services.service.statistics;
 
 import com.hz.employmentsite.vo.statistics.RegionSystemDataCount;
 import com.hz.employmentsite.vo.statistics.SystemDataCount;
+import com.hz.employmentsite.vo.statistics.company.ModelCompanyCount;
 import com.hz.employmentsite.vo.statistics.jobUser.AgeRangeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.PersonTypeJobUserCount;
 import com.hz.employmentsite.vo.statistics.jobUser.RegionJobUserCount;
@@ -59,4 +60,14 @@ public interface StatisticsService {
      * 查询各驿站的业务数据信息
      */
     List<SystemDataCount> findSystemDataCountBySite(Date startDate, Date endDate);
+
+    /**
+     * 查询各区县的企业与岗位数量-数据大屏
+     */
+    List<RegionSystemDataCount> findCompanyAndPostByRegion(Date startDate, Date endDate);
+
+    /**
+     * 查询各区县的企业的企业规模情况-数据大屏
+     */
+    List<ModelCompanyCount> findRegionCompanyModel();
 }

+ 16 - 0
src/main/java/com/hz/employmentsite/vo/statistics/company/ModelCompanyCount.java

@@ -0,0 +1,16 @@
+package com.hz.employmentsite.vo.statistics.company;
+
+import lombok.Data;
+
+@Data
+public class ModelCompanyCount {
+    private String regionCode;
+
+    private String regionName;
+
+    private Integer companyModel;
+
+    private String companyModelName;
+
+    private int companyCount;
+}

+ 60 - 0
src/main/resources/mapping/cquery/StatisticsCQuery.xml

@@ -518,4 +518,64 @@
         ORDER BY
             area.`code`
     </select>
+
+    <select id="findCompanyCountByRegion" resultType="com.hz.employmentsite.vo.statistics.RegionSystemDataCount">
+        SELECT
+            area.`code` AS RegionCode,
+            area.`name` AS RegionName,
+            COUNT( company.CompanyID ) AS companyCount
+        FROM
+            area_code area
+                LEFT JOIN pc_site site ON area.`code` = site.RegionCode
+                LEFT JOIN pc_company company ON site.SiteID = company.SiteID
+        WHERE
+            area.lv = 3
+        GROUP BY
+            area.`code`,
+            area.`name`
+        ORDER BY
+            area.`code`
+    </select>
+
+    <select id="findPostCountByRegion" resultType="com.hz.employmentsite.vo.statistics.RegionSystemDataCount">
+        SELECT
+            area.`code` AS RegionCode,
+            area.`name` AS RegionName,
+            COUNT( post.PostID ) AS postCount
+        FROM
+            area_code area
+                LEFT JOIN pc_site site ON area.`code` = site.RegionCode
+                LEFT JOIN pc_company company ON site.SiteID = company.SiteID
+                LEFT JOIN pc_post post ON company.CompanyID = post.CompanyID
+        WHERE
+            area.lv = 3
+        GROUP BY
+            area.`code`,
+            area.`name`
+        ORDER BY
+            area.`code`
+    </select>
+
+    <select id="findCompanyModelDataByRegion" resultType="com.hz.employmentsite.vo.statistics.company.ModelCompanyCount">
+        SELECT
+            area.`code` AS RegionCode,
+            area.`name` AS RegionName,
+            modelDit.`Value` AS CompanyModel,
+            modelDit.`Name` AS CompanyModelName,
+            COUNT( company.CompanyID ) AS companyCount
+        FROM
+            area_code area
+                LEFT JOIN pc_site site ON area.`code` = site.RegionCode
+                LEFT JOIN pc_company company ON site.SiteID = company.SiteID
+                LEFT JOIN sys_dictionary_item modelDit ON company.CompanyModel = modelDit.`Value` AND modelDit.DictionaryCode = 'CompanyModel'
+        WHERE
+            area.lv = 3
+        GROUP BY
+            area.`code`,
+            area.`name`,
+            modelDit.`Value`,
+            modelDit.`Name`
+        ORDER BY
+            area.`code`
+    </select>
 </mapper>

+ 35 - 2
vue/src/api/statistics/index.ts

@@ -86,12 +86,12 @@ export function getJobUserCountByPersonType(year: any, month: any) {
 /**
  * 查询各区县的普通失业人员与就业困难人员情况
  */
-export function getJobUserByRegionAndDifficulty(year: any, month: any) {
+export function getJobUserByRegionAndDifficulty(params: any) {
   return request<object>(
     {
       url: 'statistics/jobUserByRegionAndDifficulty',
       method: 'get',
-      params: {year, month},
+      params: params,
     },
     {
       isNew: true,
@@ -131,3 +131,36 @@ export function getSystemApplyCountBySite(params: any) {
     },
   );
 }
+
+/**
+ * 查询各区县的企业与岗位数量
+ * @param params 查询参数
+ */
+export function getCompanyAndPostByRegion(params: any) {
+  return request<object>(
+    {
+      url: 'statistics/companyAndPostCountByRegion',
+      method: 'get',
+      params: params,
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+
+/**
+ * 查询企业规模情况
+ */
+export function getCompanyModelCount() {
+  return request<object>(
+    {
+      url: 'statistics/companyModelCount',
+      method: 'get',
+      params: {},
+    },
+    {
+      isNew: true,
+    },
+  );
+}

+ 1 - 1
vue/src/router/constant.ts

@@ -7,7 +7,7 @@ export const PARENT_LAYOUT_NAME = 'ParentLayout';
 export const PAGE_NOT_FOUND_NAME = 'PageNotFound';
 
 // 路由白名单
-export const whiteNameList = [LOGIN_NAME, 'icons', 'error', 'error-404', 'dataScreenIndex'] as const; // no redirect whitelist
+export const whiteNameList = [LOGIN_NAME, 'icons', 'error', 'error-404', 'dataScreenIndex', 'dataScreenCompany'] as const; // no redirect whitelist
 
 export type WhiteNameList = typeof whiteNameList;
 

+ 10 - 1
vue/src/router/outsideLayout.ts

@@ -49,4 +49,13 @@ export const dataScreenIndexRoute: RouteRecordRaw = {
   },
 };
 
-export default [LoginRoute, companyDataMapRoute, siteDataMapRoute, jobUserDataMapRoute, dataScreenIndexRoute];
+export const dataScreenCompanyRoute: RouteRecordRaw = {
+  path: '/dataMap/dataScreenCompany',
+  name: 'dataScreenCompany',
+  component: () => import('@/views/dataScreen/html/company.vue'),
+  meta: {
+    title: '惠州市就业驿站管理系统',
+  },
+};
+
+export default [LoginRoute, companyDataMapRoute, siteDataMapRoute, jobUserDataMapRoute, dataScreenIndexRoute, dataScreenCompanyRoute];

+ 91 - 5
vue/src/views/dataScreen/echarts.ts

@@ -9,7 +9,12 @@ import * as echarts from 'echarts';
  */
 export function initLineImageTable(xTitleList: any, seriesList: any, legendList: any, domId: any) {
   const chartDom = document.getElementById(domId);
-  const myChart = echarts.init(chartDom);
+  let myChart = echarts.init(chartDom);
+  if (myChart != null) {
+    // 销毁老的图表实例
+    myChart.dispose();
+    myChart = echarts.init(chartDom)
+  }
   let option = {
     backgroundColor: '#060b1e',
     title: {},
@@ -65,7 +70,12 @@ export function initLineImageTable(xTitleList: any, seriesList: any, legendList:
  */
 export function initDataSetBarImageTable(dataSetSource: any, seriesList: any, domId: any, showTextLength: any) {
   const chartDom = document.getElementById(domId);
-  const myChart = echarts.init(chartDom);
+  let myChart = echarts.init(chartDom);
+  if (myChart != null) {
+    // 销毁老的图表实例
+    myChart.dispose();
+    myChart = echarts.init(chartDom)
+  }
   let option = {
     title: {},
     toolbox: {},
@@ -131,15 +141,81 @@ export function initDataSetBarImageTable(dataSetSource: any, seriesList: any, do
   option && myChart.setOption(option);
 }
 
+/**
+ * 堆叠柱状图表初始化
+ * @param xTitleList X轴数据
+ * @param seriesList 图表数据内容-包含堆叠数据
+ * @param legendList 图表数据说明
+ * @param domId 目标DOM元素ID
+ */
+export function initStackBarImageTable(xTitleList: any, seriesList: any, legendList: any, domId: any) {
+  const chartDom = document.getElementById(domId);
+  let myChart = echarts.init(chartDom);
+  if (myChart != null) {
+    // 销毁老的图表实例
+    myChart.dispose();
+    myChart = echarts.init(chartDom)
+  }
+  let option = {
+    title: {},
+    toolbox: {},
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'shadow'
+      }
+    },
+    legend: {
+      data: legendList,
+      textStyle: {
+        color: '#69859b'
+      },
+      bottom: 'bottom',
+      icon: "circle",
+    },
+    grid: {
+      top: '3%',
+      left: '3%',
+      right: '3%',
+      bottom: '30px',
+      containLabel: true
+    },
+    xAxis: {
+      type: 'category',
+      data: xTitleList
+    },
+    yAxis: {
+      type: 'value',
+      axisLabel: {
+        color: '#69859b'
+      },
+      splitLine: {
+        lineStyle: {
+          color: 'rgba(70,70,70,0.5)'
+        }
+      }
+    },
+    series: seriesList
+  };
+
+  option && myChart.setOption(option);
+}
+
 /**
  * 环形图图表初始化
  * @param seriesDataList 展示数据
  * @param graphicChildren 圆环内部文本
  * @param domId 目标DOM元素ID
+ * @param seriesName 注解信息的名称
  */
-export function initPieImageTable(seriesDataList: any, graphicChildren: any, domId: any) {
+export function initPieImageTable(seriesDataList: any, graphicChildren: any, domId: any, seriesName: any) {
   const chartDom = document.getElementById(domId);
-  const myChart = echarts.init(chartDom);
+  let myChart = echarts.init(chartDom);
+  if (myChart != null) {
+    // 销毁老的图表实例
+    myChart.dispose();
+    myChart = echarts.init(chartDom)
+  }
   const option = {
     tooltip: {
       trigger: 'item'
@@ -153,7 +229,7 @@ export function initPieImageTable(seriesDataList: any, graphicChildren: any, dom
     },
     series: [
       {
-        name: '已就业人数',
+        name: seriesName,
         type: 'pie',
         radius: ['40%', '60%'],
         label: {
@@ -170,3 +246,13 @@ export function initPieImageTable(seriesDataList: any, graphicChildren: any, dom
 
   option && myChart.setOption(option);
 }
+
+export const PieColorData = {
+  "惠城区": "#716c85",
+  "惠阳区": "#c8ceda",
+  "博罗县": "#006efe",
+  "惠东县": "#9192ac",
+  "龙门县": "#76f7fe",
+  "大亚湾区": "#6cd300",
+  "仲恺区": "#f6b400",
+}

+ 250 - 0
vue/src/views/dataScreen/html/company.vue

@@ -0,0 +1,250 @@
+<template>
+  <div style="height:100vh; min-height:1080px;">
+    <!-- 头部 -->
+    <div class="header">
+      <h1 style="color: #77F8FF;">惠州市就业驿站大数据</h1>
+      <div class="time">{{ formattedTime }}</div>
+    </div>
+
+    <!-- 内容区 -->
+    <div class="body-content">
+      <!-- 左 -->
+      <div class="side" style="padding-left: 20px;">
+        <div class="content-box">
+          <div class="box-title">企业占比</div>
+          <div class="chart-box" id="companyPieBox"></div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">岗位占比</div>
+          <div class="chart-box" id="postPieBox"></div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">全市企业情况</div>
+          <div class="chart-box" id="companyAndPostCountBox"></div>
+        </div>
+      </div>
+
+      <!-- 中 -->
+      <div class="center">
+        <div class="center-1">
+          <div class="nav">
+            <div class="nav-items" @click="goIndex">
+              <div class="nav-1"></div>
+              <h2 style="color: #77F8FF;">总体概况</h2></div>
+            <div class="nav-items nav-active">
+              <div class="nav-2"></div>
+              <h2 style="color: #77F8FF;">企业情况</h2></div>
+            <div class="nav-items">
+              <div class="nav-3"></div>
+              <h2 style="color: #77F8FF;">求职情况</h2></div>
+            <div class="nav-items">
+              <div class="nav-4"></div>
+              <h2 style="color: #77F8FF;">服务情况</h2></div>
+          </div>
+          <div class="s-box">
+            <div class="statistics t-1">
+              <div style="margin: 8px 0 0 18px; position: revert;">
+                <div class="s-title">岗位数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.postCount }}</div>
+                <div class="waves" style="right: -187px; top: 42px"></div>
+              </div>
+            </div>
+            <div class="statistics t-2">
+              <div style="margin: 8px 0 0 78px; position: revert;">
+                <div class="s-title">企业数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.companyCount }}</div>
+                <div class="waves" style="left: -86px; top: 42px"></div>
+              </div>
+            </div>
+            <div class="statistics t-3">
+              <div style="margin: 78px 0 0 98px; position: revert;">
+                <div class="s-title">推荐岗位数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.jobUserCount }}</div>
+                <div class="waves" style="left: -106px; top: -141px"></div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center-2">
+          <div class="box-bigtitle">企业规模情况</div>
+          <div class="chart-box" id="companyModelCountBox"></div>
+        </div>
+      </div>
+
+      <!-- 右 -->
+      <div class="side" style="padding-right: 20px;">
+        <div class="content-box">
+          <div class="box-title">本周新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">本月新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">本季度新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {computed, onBeforeUnmount, onMounted, ref} from "vue";
+import dayjs from "dayjs";
+import weekOfYear from 'dayjs/plugin/weekOfYear';
+import weekday from 'dayjs/plugin/weekday';
+import {getCompanyAndPostByRegion, getCompanyModelCount} from "@/api/statistics";
+import {
+  initDataSetBarImageTable,
+  initPieImageTable,
+  initStackBarImageTable,
+  PieColorData
+} from "@/views/dataScreen/echarts";
+import {useRouter} from "vue-router";
+
+dayjs.extend(weekOfYear);
+dayjs.extend(weekday);
+
+const router = useRouter();
+
+// 全市数据情况
+const allSystemDataCountList = ref({
+  count: {
+    companyCount: 0,
+    postCount: 0,
+    jobUserCount: 0
+  },
+  list: []
+});
+
+// 实时时间
+const currentTime = ref(new Date());
+const formattedTime = computed(() => {
+  const days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+  const year = currentTime.value.getFullYear();
+  const month = (currentTime.value.getMonth() + 1).toString().padStart(2, '0');
+  const date = currentTime.value.getDate().toString().padStart(2, '0');
+  const day = days[currentTime.value.getDay()];
+  const hours = currentTime.value.getHours().toString().padStart(2, '0');
+  const minutes = currentTime.value.getMinutes().toString().padStart(2, '0');
+  // const seconds = currentTime.value.getSeconds().toString().padStart(2, '0');
+
+  return `${year}-${month}-${date} ${day} ${hours}:${minutes}`;
+});
+
+// 查询企业与岗位数据
+function loadCompanyAndPostCount() {
+  getCompanyAndPostByRegion({}).then((result: any) => {
+    // 生成图表需要的数据
+    let companyArr: any[] = [], postArr: any[] = [], barTableArr = [['区县', '企业数', '岗位数']];
+    let companyTotal = 0, postTotal = 0;
+    result.forEach((item: any) => {
+      if (item.regionName !== "市本级") {
+        companyTotal += item.companyCount;
+        postTotal += item.postCount;
+        const commonData = {
+          value: item.companyCount,
+          name: item.regionName,
+          itemStyle: {color: PieColorData[item.regionName]}
+        };
+        if (item.companyCount > 0) {
+          companyArr.push(commonData);
+        }
+        if (item.postCount > 0) {
+          postArr.push({...commonData, value: item.postCount});
+        }
+        barTableArr.push([item.regionName, item.companyCount, item.postCount]);
+      }
+    });
+
+    // 环形图的中间文本内容
+    const createTextConfig = (text: string, total: number) => ([
+      {
+        type: 'text',
+        left: 'center',
+        top: '43%',
+        style: {fill: 'rgba(119,248,255,0.7)', text, font: 'bold 12px Arial', textAlign: 'center'}
+      },
+      {
+        type: 'text',
+        left: 'center',
+        top: '53%',
+        style: {fill: '#77F8FF', text: total, font: 'bold 16px Arial', textAlign: 'center'}
+      }
+    ]);
+
+    initPieImageTable(companyArr, createTextConfig('企业数', companyTotal), "companyPieBox", "企业数");
+    initPieImageTable(postArr, createTextConfig('岗位数', postTotal), "postPieBox", "岗位数");
+    initDataSetBarImageTable(barTableArr, [
+      {type: 'bar', barMaxWidth: '10px', color: "#0062cc"},
+      {type: 'bar', barMaxWidth: '10px', color: '#73ecf3'}
+    ], 'companyAndPostCountBox', 3);
+  });
+}
+
+// 查询企业规模数据
+function loadCompanyModelCount() {
+  getCompanyModelCount().then((result: any) => {
+    console.log(result);
+
+    // 获取X轴刻度标题,去除重复项,去除“市本级”
+    const xTitleList = Array.from(new Set(result.map((item: any) => item.regionName))).filter((regionName: string) => regionName !== "市本级");
+    console.log(xTitleList);
+    // Y轴的值内容
+    const yValueList = result.filter((item: any) => item.companyModel != null && item.regionName != '市本级').reduce((acc: any, item: any) => {
+      if (!acc[item.companyModelName]) {
+        acc[item.companyModelName] = [];
+      }
+      // 将人数填充
+      acc[item.companyModelName].push(item.companyCount);
+      return acc;
+    }, {});
+    let bars: any[] = [];
+    let legendList: any[] = [];
+    for (let key in yValueList) {
+      legendList.push(key);
+      bars.push({
+        name: key,
+        type: 'bar',
+        barMaxWidth: '15px',
+        stack: 'ageRange',
+        emphasis: {focus: 'series'},
+        data: yValueList[key]
+      })
+    }
+    initStackBarImageTable(xTitleList, bars, legendList, 'companyModelCountBox')
+  })
+}
+
+// 跳转首页
+function goIndex() {
+  router.push({name: "dataScreenIndex"})
+}
+
+onMounted(() => {
+  loadCompanyAndPostCount();
+  loadCompanyModelCount();
+
+  currentTime.value = new Date();
+  const timer = setInterval(() => {
+    currentTime.value = new Date();
+  }, 1000);
+  onBeforeUnmount(() => {
+    clearInterval(timer);
+  });
+})
+
+</script>
+
+<style scoped>
+@import url('@/views/dataScreen/html/css/reset.css');
+@import url('@/views/dataScreen/html/css/style.css');
+</style>

+ 150 - 0
vue/src/views/dataScreen/html/copy.vue

@@ -0,0 +1,150 @@
+<template>
+  <div style="height:100vh; min-height:1080px;">
+    <!-- 头部 -->
+    <div class="header">
+      <h1 style="color: #77F8FF;">惠州市就业驿站大数据</h1>
+      <div class="time">{{ formattedTime }}</div>
+    </div>
+
+    <!-- 内容区 -->
+    <div class="body-content">
+      <!-- 左 -->
+      <div class="side" style="padding-left: 20px;">
+        <div class="content-box">
+          <div class="box-title">企业占比</div>
+          <div class="chart-box" id="yearSystemApplyBox"></div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">岗位占比</div>
+          <div class="chart-box" id="employedCountBox"></div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">全市企业情况</div>
+          <div class="chart-box" id="ordinaryDifficultyCountBox"></div>
+        </div>
+      </div>
+
+      <!-- 中 -->
+      <div class="center">
+        <div class="center-1">
+          <div class="nav">
+            <div class="nav-items">
+              <div class="nav-1"></div>
+              <h2 style="color: #77F8FF;">总体概况</h2></div>
+            <div class="nav-items nav-active">
+              <div class="nav-2"></div>
+              <h2 style="color: #77F8FF;">企业情况</h2></div>
+            <div class="nav-items">
+              <div class="nav-3"></div>
+              <h2 style="color: #77F8FF;">求职情况</h2></div>
+            <div class="nav-items">
+              <div class="nav-4"></div>
+              <h2 style="color: #77F8FF;">服务情况</h2></div>
+          </div>
+          <div class="s-box">
+            <div class="statistics t-1">
+              <div style="margin: 8px 0 0 18px; position: revert;">
+                <div class="s-title">岗位数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.postCount }}</div>
+                <div class="waves" style="right: -187px; top: 42px"></div>
+              </div>
+            </div>
+            <div class="statistics t-2">
+              <div style="margin: 8px 0 0 78px; position: revert;">
+                <div class="s-title">企业数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.companyCount }}</div>
+                <div class="waves" style="left: -86px; top: 42px"></div>
+              </div>
+            </div>
+            <div class="statistics t-3">
+              <div style="margin: 78px 0 0 98px; position: revert;">
+                <div class="s-title">推荐岗位数</div>
+                <div class="s-number">{{ allSystemDataCountList.count.jobUserCount }}</div>
+                <div class="waves" style="left: -106px; top: -141px"></div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center-2">
+          <div class="box-bigtitle">企业规模情况</div>
+          <div class="chart-box" id="allSystemDatBox"></div>
+        </div>
+      </div>
+
+      <!-- 右 -->
+      <div class="side" style="padding-right: 20px;">
+        <div class="content-box">
+          <div class="box-title">本周新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">本月新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+        <div class="content-box">
+          <div class="box-title">本季度新增企业</div>
+          <div class="chart-box">
+
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {computed, onBeforeUnmount, onMounted, ref} from "vue";
+import dayjs from "dayjs";
+import weekOfYear from 'dayjs/plugin/weekOfYear';
+import weekday from 'dayjs/plugin/weekday';
+
+dayjs.extend(weekOfYear);
+dayjs.extend(weekday);
+
+// 全市数据情况
+const allSystemDataCountList = ref({
+  count: {
+    companyCount: 0,
+    postCount: 0,
+    jobUserCount: 0
+  },
+  list: []
+});
+
+// 实时时间
+const currentTime = ref(new Date());
+const formattedTime = computed(() => {
+  const days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+  const year = currentTime.value.getFullYear();
+  const month = (currentTime.value.getMonth() + 1).toString().padStart(2, '0');
+  const date = currentTime.value.getDate().toString().padStart(2, '0');
+  const day = days[currentTime.value.getDay()];
+  const hours = currentTime.value.getHours().toString().padStart(2, '0');
+  const minutes = currentTime.value.getMinutes().toString().padStart(2, '0');
+  // const seconds = currentTime.value.getSeconds().toString().padStart(2, '0');
+
+  return `${year}-${month}-${date} ${day} ${hours}:${minutes}`;
+});
+
+function updateTime() {
+  currentTime.value = new Date();
+}
+
+onMounted(() => {
+  updateTime();
+  const timer = setInterval(updateTime, 1000);
+  onBeforeUnmount(() => {
+    clearInterval(timer);
+  });
+})
+
+</script>
+
+<style scoped>
+@import url('@/views/dataScreen/html/css/reset.css');
+@import url('@/views/dataScreen/html/css/style.css');
+</style>

+ 18 - 17
vue/src/views/dataScreen/html/index.vue

@@ -31,7 +31,7 @@
             <div class="nav-items nav-active">
               <div class="nav-1"></div>
               <h2 style="color: #77F8FF;">总体概况</h2></div>
-            <div class="nav-items">
+            <div class="nav-items" @click="goCompany">
               <div class="nav-2"></div>
               <h2 style="color: #77F8FF;">企业情况</h2></div>
             <div class="nav-items">
@@ -183,15 +183,23 @@ import {
   getYearSystemDataCount
 } from "@/api/statistics";
 import {computed, onBeforeUnmount, onMounted, reactive, ref} from "vue";
-import {initDataSetBarImageTable, initLineImageTable, initPieImageTable} from "@/views/dataScreen/echarts";
+import {
+  initDataSetBarImageTable,
+  initLineImageTable,
+  initPieImageTable,
+  PieColorData
+} from "@/views/dataScreen/echarts";
 import dayjs from "dayjs";
 import weekOfYear from 'dayjs/plugin/weekOfYear';
 import weekday from 'dayjs/plugin/weekday';
 import {getSystemServiceList} from "@/api/jobUserManager/jobuser/jobUserService";
+import {useRouter} from "vue-router";
 
 dayjs.extend(weekOfYear);
 dayjs.extend(weekday);
 
+const router = useRouter();
+
 // 查询参数
 const searchParams = reactive({
   monthStartDate: "",
@@ -338,17 +346,6 @@ function loadEmployedUser() {
   getEmployedJobUserCount().then((result: any) => {
     employedData.value.list = result;
 
-    // 各区县的颜色
-    const colorData = {
-      "惠城区": "#716c85",
-      "惠阳区": "#c8ceda",
-      "博罗县": "#006efe",
-      "惠东县": "#9192ac",
-      "龙门县": "#76f7fe",
-      "大亚湾区": "#6cd300",
-      "仲恺区": "#f6b400",
-    }
-
     let arr = new Array<any>();
     result.forEach((item: any) => {
       if (item.regionName != "市本级") {
@@ -357,7 +354,7 @@ function loadEmployedUser() {
           value: item.jobUserCount,
           name: item.regionName,
           itemStyle: {
-            color: colorData[item.regionName]
+            color: PieColorData[item.regionName]
           }
         };
         arr.push(data);
@@ -391,13 +388,13 @@ function loadEmployedUser() {
     ]
 
     // 生成图表
-    initPieImageTable(arr, graphicChildren, "employedCountBox");
+    initPieImageTable(arr, graphicChildren, "employedCountBox", "已就业人数");
   })
 }
 
 // 获取区县普通求职人员与就业困难人员
 function loadDifficultyUser() {
-  getJobUserByRegionAndDifficulty("", "").then((result: any) => {
+  getJobUserByRegionAndDifficulty({}).then((result: any) => {
     // 保存原始数据
     ordinaryDifficultyUser.value = result;
 
@@ -408,7 +405,6 @@ function loadDifficultyUser() {
         arr.push([item.regionName, item.jobUserCount, item.difficultyCount]);
       }
     })
-    console.log(arr);
 
     initDataSetBarImageTable(arr, [{type: 'bar', barMaxWidth: '10px', color: "#0062cc"}, {
       type: 'bar',
@@ -531,6 +527,11 @@ function updateTime() {
   currentTime.value = new Date();
 }
 
+// 跳转企业面板
+function goCompany() {
+  router.push({name: "dataScreenCompany"})
+}
+
 onMounted(() => {
   const now = dayjs();
   searchParams.monthStartDate = now.startOf('month').format('YYYY-MM-DD');

+ 1 - 1
vue/src/views/statistics/JobUserCount.vue

@@ -294,7 +294,7 @@ async function personTypeOnSearch() {
 // 查询各区县正常失业人员与就业困难人员情况
 async function regionDifficultyOnSearch() {
   searchLoading.value = true;
-  await getJobUserByRegionAndDifficulty(searchParams.year, searchParams.month).then((result: any) => {
+  await getJobUserByRegionAndDifficulty({year: searchParams.year, month: searchParams.month}).then((result: any) => {
     // 保存原始数据
     regionJobUserData.originalList = result;
     regionJobUserData.tableList = result;