From 9290a0a7023a612cddc5971553a6efb727a51165 Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期二, 19 八月 2025 17:34:58 +0800
Subject: [PATCH] qx
---
src/views/index.vue | 540 ++++++++++++++++++++++++++++++------------------------------
1 files changed, 270 insertions(+), 270 deletions(-)
diff --git a/src/views/index.vue b/src/views/index.vue
index d925659..1ea2590 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1,6 +1,30 @@
<template>
<div class="centre">
- <div style="display:flex;justify-content: center;align-items: center;">
+ <!-- 浠婃棩閫氱煡 -->
+ <div style="display: flex; justify-content: center; align-items: center;">
+ <h4>浠婃棩閫氱煡</h4>
+ </div>
+ <div class="notice-area">
+ <el-carousel :interval="2000" direction="vertical" :autoplay="true" :loop="true" height="120px"
+ v-if="groupedNoticeList.length > 0" class="carousel">
+ <el-carousel-item v-for="(group, index) in groupedNoticeList" :key="index">
+ <div class="notice-group">
+ <div class="notice-item" v-for="notice in group" :key="notice.noticeId"
+ @click="goToNotice(notice.noticeId)">
+ <el-tag size="small" :type="notice.noticeType === '1' ? 'info' : 'warning'">
+ {{ notice.noticeType === '1' ? '閫氱煡' : '鍏憡' }}
+ </el-tag>
+ <span class="notice-title">{{ notice.noticeTitle || '鏃犳爣棰�' }}</span>
+ <span class="notice-time">{{ parseTime(notice.createTime, '{y}-{m}-{d}') || '鏃犳椂闂�' }}</span>
+ </div>
+ </div>
+ </el-carousel-item>
+ </el-carousel>
+ <div v-else class="no-notice">鏆傛棤閫氱煡</div>
+ </div>
+
+ <!-- 浠婃棩缁熻 -->
+ <div style="display: flex; justify-content: center; align-items: center;">
<h4>浠婃棩缁熻</h4>
</div>
<div class="top">
@@ -37,11 +61,13 @@
</div>
</div>
</div>
- <div style="display:flex;justify-content: center;align-items: center;">
+
+ <!-- 杩戜竴鏈堢粺璁� -->
+ <div style="display: flex; justify-content: center; align-items: center;">
<h4>杩戜竴鏈堢粺璁�</h4>
</div>
<div class="data-view">
- <div id="main"></div>
+ <div id="main" style="width: 95%; height: 330px"></div>
</div>
<div class="view">
<div id="main2"></div>
@@ -52,11 +78,13 @@
<script>
import { getCustomer, getOrder, getReportToday, getTobeToday, getPieChart, getChart } from "@/api/home";
+import { noticeToday } from "@/api/system/notice";
const echarts = require('echarts/lib/echarts');
require('echarts/lib/component/title');
require('echarts/lib/component/tooltip');
require('echarts/lib/component/legend');
require('echarts/lib/chart/pie');
+require('echarts/lib/chart/line');
export default {
data() {
@@ -73,323 +101,304 @@
teamYYNum: [],
PieChart: [],
PieChart2: [],
- }
+ noticeList: [],
+ groupedNoticeList: [], // 鍒嗙粍鍚庣殑閫氱煡鍒楄〃
+ loading: false
+ };
},
created() {
this.getList();
-
},
+
watch: {
- $route(to, from) {
- window.location.reload(); //鐩戞祴鍒拌矾鐢卞彂鐢熻烦杞椂鍒锋柊涓�娆¢〉闈�
- // this.$router.go(0);
- },
+ $route(to, from) {
+ window.location.reload();
},
-
+ noticeList: {
+ handler(newList) {
+ // 灏嗛�氱煡鎸夋瘡缁勪笁鏉″垎缁�
+ this.groupedNoticeList = this.chunkArray(newList, 3);
+ console.log('groupedNoticeList:', this.groupedNoticeList); // 璋冭瘯
+ },
+ deep: true
+ }
+ },
methods: {
-
+ goToNotice(noticeId) {
+ this.$router.push({
+ path: '/notice',
+ query: { noticeId }
+ });
+ },
getList() {
this.loading = true;
-
- // 淇敼API璋冪敤鐨勯敊璇鐞�
- getCustomer().then((response) => {
- this.Customer = response || 0; // 娣诲姞榛樿鍊�
+
+ // 鏌ヨ鎵�鏈夊叕鍛�
+ noticeToday().then(response => {
+ console.log('Notice API response:', response);
+ this.noticeList = response.rows || response.data || [];
+ console.log('noticeList:', this.noticeList);
+ this.loading = false;
+ this.$nextTick(() => {
+ console.log('Carousel updated');
+ });
}).catch(error => {
- console.error('鑾峰彇浠婃棩鐧昏鏁版嵁澶辫触:', error);
- this.Customer = 0;
+ console.error('Notice API error:', error);
+ this.$message.error("鑾峰彇閫氱煡澶辫触锛�" + error.message);
+ this.loading = false;
});
- getOrder().then((response) => {
- this.Order = response || 0;
- }).catch(error => {
- console.error('鑾峰彇浠婃棩宸叉鏁版嵁澶辫触:', error);
- this.Order = 0;
+ // 鏌ヨ浠婃棩鐧昏
+ getCustomer().then(response => {
+ this.Customer = response.data || response;
+ this.loading = false;
});
- getReportToday().then((response) => {
- this.ReportToday = response || 0;
- }).catch(error => {
- console.error('鑾峰彇浠婃棩鎶ュ憡鏁版嵁澶辫触:', error);
- this.ReportToday = 0;
+ // 鏌ヨ浠婃棩宸叉
+ getOrder().then(response => {
+ this.Order = response.data || response;
+ this.loading = false;
});
- getTobeToday().then((response) => {
- this.TobeToday = response || 0;
- }).catch(error => {
- console.error('鑾峰彇浠婃棩寰呮鏁版嵁澶辫触:', error);
- this.TobeToday = 0;
+ // 鏌ヨ浠婃棩鎶ュ憡
+ getReportToday().then(response => {
+ this.ReportToday = response.data || response;
+ this.loading = false;
});
- // 淇敼鎶樼嚎鍥炬暟鎹鐞�
- getChart().then((response) => {
- if (response && response.data) {
- this.LineChart = [];
- this.reportNum = [];
- this.personYYNum = [];
- this.teamYYNum = [];
-
- response.data.forEach(item => {
- this.LineChart.push(item.date);
- this.reportNum.push(item.tdcoun || 0);
- this.personYYNum.push(item.grcoun || 0);
- this.teamYYNum.push(item.bgcoun || 0);
- });
- let myChart = this.$echarts.init(document.getElementById('main'));
+ // 鏌ヨ浠婃棩寰呮
+ getTobeToday().then(response => {
+ this.TobeToday = response.data || response;
+ this.loading = false;
+ });
- myChart.setOption({
- tooltip: {
- trigger: 'axis'
- },
- legend: {
- data: ['姣忔棩浣撴鐧昏鏁�', '姣忔棩鍥綋鐧昏鏁�', '姣忔棩鍙戝竷鎶ュ憡鏁�']
- },
- grid: {
- left: '3%',
- right: '4%',
- bottom: '3%',
- containLabel: true
- },
- toolbox: {
- feature: {
- saveAsImage: {}
- }
- },
- xAxis: {
- type: 'category',
- boundaryGap: false,
- axisLine: {
- show: true,
- lineStyle: {
- color: "blue",
- size: 12,
- width: 0,
- tyle: "solid"
- }
- },
- data: this.LineChart
- },
- yAxis: {
- type: 'value',
- min: 0,
- max: 100,
- interval: 5
- },
- series: [
- {
- name: '姣忔棩浣撴鐧昏鏁�',
- type: 'line',
- stack: 'Total',
- data: this.personYYNum
- },
- {
- name: '姣忔棩鍥綋鐧昏鏁�',
- type: 'line',
- stack: 'Total',
- data: this.reportNum
- },
- {
- name: '姣忔棩鍙戝竷鎶ュ憡鏁�',
- type: 'line',
- stack: 'Total',
- data: this.teamYYNum
- },
- ]
+ // 鎶樼嚎鍥�
+ getChart().then(response => {
+ response.data.forEach(item => {
+ this.LineChart.push(item.date);
+ this.reportNum.push(item.tdcoun);
+ this.personYYNum.push(item.grcoun);
+ this.teamYYNum.push(item.bgcoun);
+ });
- })
- let sizeFun = ()=> {
- myChart.resize()
- }
- window.addEventListener("resize", sizeFun)
+ let myChart = this.$echarts.init(document.getElementById('main'));
+ myChart.setOption({
+ tooltip: { trigger: 'axis' },
+ legend: { data: ['姣忔棩浣撴鐧昏鏁�', '姣忔棩鍥綋鐧昏鏁�', '姣忔棩鍙戝竷鎶ュ憡鏁�'] },
+ grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+ toolbox: { feature: { saveAsImage: {} } },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ axisLine: {
+ show: true,
+ lineStyle: { width: 0, color: 'blue', type: 'solid' }
+ },
+ data: this.LineChart
+ },
+ yAxis: { type: 'value', min: 0, max: 400, interval: 20 },
+ series: [
+ { name: '姣忔棩浣撴鐧昏鏁�', type: 'line', stack: 'Total', data: this.personYYNum },
+ { name: '姣忔棩鍥綋鐧昏鏁�', type: 'line', stack: 'Total', data: this.reportNum },
+ { name: '姣忔棩鍙戝竷鎶ュ憡鏁�', type: 'line', stack: 'Total', data: this.teamYYNum }
+ ]
+ });
- this.loading = false;
- }
- }).catch(error => {
- console.error('鑾峰彇鍥捐〃鏁版嵁澶辫触:', error);
+ const sizeFun = () => myChart.resize();
+ window.addEventListener('resize', sizeFun);
+ this.loading = false;
});
// 楗肩姸鍥�
- getPieChart().then((response) => {
+ getPieChart().then(response => {
if (response.data) {
-
- if(response.data.tjdj == 0){
- this.PieChart = []
- this.PieChart = [
- {
- "name": "浣撴鐧昏浜烘暟鍒嗗竷",
- "count": 1,
- "value": 10
- },
-
- ]
- }else if (response.data.tjdj.length === 0) {
-
- this.PieChart = []
- this.PieChart = [
- {
- "name": "浣撴鐧昏浜烘暟鍒嗗竷",
- "count": 1,
- "value": 10
- },
-
- ]
+ if (response.data.tjdj == 0 || !response.data.tjdj?.length) {
+ this.PieChart = [{ name: '浣撴鐧昏浜烘暟鍒嗗竷', count: 1, value: 10 }];
} else {
- this.PieChart = response.data.tjdj
- this.PieChart.forEach(item => {
- item.value = item.count
- })
- this.PieChart.reverse()
- this.PieChart.push(this.PieChart[0])
- this.PieChart.splice(0, 1)
-
+ this.PieChart = response.data.tjdj;
+ this.PieChart.forEach(item => { item.value = item.count; });
+ this.PieChart.reverse();
+ this.PieChart.push(this.PieChart[0]);
+ this.PieChart.splice(0, 1);
}
let myChart2 = this.$echarts.init(document.getElementById('main2'));
myChart2.setOption({
- title: {
- text: '浣撴鐧昏浜烘暟鍒嗗竷',
- top: '5'
+ title: { text: '浣撴鐧昏浜烘暟鍒嗗竷', top: '5' },
+ tooltip: { trigger: 'item' },
+ legend: { top: '80%', left: 'center' },
+ series: [{
+ type: 'pie',
+ radius: ['16%', '54%'],
+ center: ['50%', '43%'],
+ avoidLabelOverlap: false,
+ startAngle: 180,
+ minAngle: 10,
+ data: this.PieChart,
+ emphasis: {
+ itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' }
+ }
+ }]
+ });
- },
-
- tooltip: {
- trigger: 'item'
- },
- legend: {
- top: '80%',
- left: 'center'
- },
- series: [
- {
- // name: 'Access From',
- type: 'pie',
- radius: ['16%', '54%'],
- center: ["50%", "43%"],
- avoidLabelOveralap:false,
- startAngle:180,
- minAngle:10,
- data: this.PieChart,
- emphasis: {
- itemStyle: {
- shadowBlur: 10,
- shadowOffsetX: 0,
- shadowColor: 'rgba(0, 0, 0, 0.5)'
- }
- }
- }]
- })
-
- if(response.data.tjyc == 0){
- this.PieChart2 = []
- this.PieChart2 = [
- {
- "name": "浣撴缁撴灉寮傚父浜烘暟鍒嗗竷",
- "count": 1,
- "value": 0
- },
-
- ]
- }else if (response.data.tjyc.length === 0) {
- this.PieChart2 = []
- this.PieChart2 = [
- {
- "name": "浣撴缁撴灉寮傚父浜烘暟鍒嗗竷",
- "count": 1,
- "value": 0
- },
-
- ]
+ if (response.data.tjyc == 0 || !response.data.tjyc?.length) {
+ this.PieChart2 = [{ name: '浣撴缁撴灉寮傚父浜烘暟鍒嗗竷', count: 1, value: 0 }];
} else {
- this.PieChart2 = response.data.tjyc
- this.PieChart2.reverse()
- this.PieChart2.push(this.PieChart2[0])
- this.PieChart2.splice(0, 1)
- this.PieChart2.forEach(item => {
- item.value = item.count
- })
- // this.TobeToday = response
+ this.PieChart2 = response.data.tjyc;
+ this.PieChart2.reverse();
+ this.PieChart2.push(this.PieChart2[0]);
+ this.PieChart2.splice(0, 1);
+ this.PieChart2.forEach(item => { item.value = item.count; });
}
+
let myChart3 = this.$echarts.init(document.getElementById('main3'));
-
myChart3.setOption({
- title: {
- text: '浣撴缁撴灉寮傚父浜烘暟鍒嗗竷',
- top: '5'
+ title: { text: '浣撴缁撴灉寮傚父浜烘暟鍒嗗竷', top: '5' },
+ tooltip: { trigger: 'item' },
+ legend: { top: '80%', left: 'center' },
+ series: [{
+ type: 'pie',
+ radius: ['16%', '54%'],
+ center: ['50%', '43%'],
+ avoidLabelOverlap: false,
+ startAngle: 180,
+ minAngle: 10,
+ data: this.PieChart2,
+ emphasis: {
+ itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' }
+ }
+ }]
+ });
- },
- tooltip: {
- trigger: 'item'
- },
- legend: {
- top: '80%',
- left: 'center'
- },
- series: [
- {
- // name: 'Access From',
- type: 'pie',
- radius: ['16%', '54%'],
- center: ["50%", "43%"],
- avoidLabelOveralap:false,
- startAngle:180,
- minAngle:10,
- data: this.PieChart2,
- emphasis: {
- itemStyle: {
- shadowBlur: 10,
- shadowOffsetX: 0,
- shadowColor: 'rgba(0, 0, 0, 0.5)'
- }
- }
- }]
- })
- window.onresize = () =>{
- myChart2.resize()
- myChart3.resize()
+ window.onresize = () => {
+ myChart2.resize();
+ myChart3.resize();
+ };
}
- }
-
-
-
this.loading = false;
});
+ },
+ // 鏁扮粍鍒嗙粍鏂规硶
+ chunkArray(array, size) {
+ if (!array || array.length === 0) return [];
+ const result = [];
+ for (let i = 0; i < array.length; i += size) {
+ result.push(array.slice(i, i + size));
+ }
+ // 纭繚寰幆婊氬姩骞虫粦锛岃嫢涓嶈冻 size 鏉★紝琛ラ綈
+ if (array.length % size !== 0 && array.length > size) {
+ const lastGroup = result[result.length - 1];
+ while (lastGroup.length < size) {
+ lastGroup.push(array[lastGroup.length % array.length]);
+ }
+ }
+ return result;
+ },
+
+ parseTime(time, cFormat) {
+ if (!time) return '';
+ try {
+ const date = new Date(time);
+ if (isNaN(date.getTime())) return '';
+ const formatObj = {
+ y: date.getFullYear(),
+ m: String(date.getMonth() + 1).padStart(2, '0'),
+ d: String(date.getDate()).padStart(2, '0'),
+ h: String(date.getHours()).padStart(2, '0'),
+ i: String(date.getMinutes()).padStart(2, '0'),
+ s: String(date.getSeconds()).padStart(2, '0')
+ };
+ return cFormat.replace(/{([ymdhis]+)}/g, (result, key) => formatObj[key] || '');
+ } catch (error) {
+ console.error('parseTime error:', error, 'time:', time);
+ return '';
+ }
}
- },
-
-
- mounted() {
-
}
-}
-
-
+};
</script>
<style>
.centre {
min-height: 820px;
- margin: 15px 15px;
+ margin: 15px;
background-color: #f3f3f3;
- padding: 10px 10px 10px 10px;
+ padding: 10px;
+}
+
+.notice-area {
+ width: 100%;
+ min-height: 120px;
+ /* 璋冩暣涓轰笁鏉¢�氱煡楂樺害 */
+ background-color: #fff;
+ margin: 10px 0;
+ padding: 0 20px;
+}
+
+.carousel {
+ width: 100% !important;
+}
+
+.notice-group {
+ display: flex;
+ flex-direction: column;
+ height: 120px;
+ /* 纭繚鍖呭惈涓夋潯閫氱煡 */
+}
+
+.notice-item {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 40px;
+ line-height: 40px;
+ font-size: 14px;
+ cursor: pointer;
+}
+
+.notice-title {
+ margin-left: 10px;
+ font-size: 14px;
+ color: #333;
+ flex-grow: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.notice-time {
+ font-size: 12px;
+ color: #999;
+ margin-left: 20px;
+}
+
+.no-notice {
+ width: 100%;
+ height: 120px;
+ /* 涓庤疆鎾珮搴︿竴鑷� */
+ line-height: 120px;
+ text-align: center;
+ color: #999;
+ font-size: 14px;
}
.top {
width: 100%;
display: flex;
height: 120px;
-
}
.add {
- width: 380px;
+ width: 320px;
height: 75px;
- margin-top: 30px;
+ margin-top: 20px;
margin-left: 20px;
margin-right: 20px;
background-color: #fff;
- display: flex
+ display: flex;
}
.img {
@@ -403,7 +412,6 @@
.image {
width: 60px;
height: 60px;
-
}
.txt {
@@ -414,34 +422,26 @@
.day {
height: 40px;
line-height: 40px;
- font-size: 14px;
+ font-size: 12px;
}
.data-view {
margin: 0 15px;
- height: 323px !important
+ height: 323px !important;
}
#main {
padding: 10px;
- width:95%;
- height:330px
}
.view {
- margin: 0px 15px;
+ margin: 0 15px;
padding-top: 15px;
min-height: 350px;
display: flex;
}
-#main2 {
- width: 820px;
- height: 350px;
- background-color: #fff;
- margin-right: 20px;
-}
-
+#main2,
#main3 {
width: 820px;
height: 350px;
--
Gitblit v1.8.0