JayChou 8 months ago
commit 8d3d2252a1
  1. 2
      package.json
  2. 6226
      pnpm-lock.yaml
  3. 21
      src/api/person.ts
  4. BIN
      src/assets/images/card.png
  5. 33
      src/router/module/constRouter/index.ts
  6. 51
      src/utils/echarts.ts
  7. 23
      src/views/news/components/newsDetail.vue
  8. 274
      src/views/news/components/newsList.vue
  9. 27
      src/views/news/index.vue
  10. 188
      src/views/personalAbilityEvaluationCollectList/index.vue
  11. 192
      src/views/personalEvaluateList/index.vue
  12. 211
      src/views/personalReport/components/randerChart.vue
  13. 382
      src/views/personalReport/index.vue

@ -16,9 +16,9 @@
"preinstall": "node ./scripts/preinstall.js"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"axios": "^1.6.8",
"echarts": "5.3.2",
"element-plus": "^2.6.2",
"pinia": "^2.1.7",
"postcss-plugin-px2rem": "^0.8.1",

File diff suppressed because it is too large Load Diff

@ -0,0 +1,21 @@
import request from '@/utils/requset'
request.interceptors.response.use(response => {
// @ts-ignore
if (response.code >= 200 && response.code < 300) return response;
else return Promise.reject(response);
})
enum api {
liststu = '/abilityEvaluation/personalAbilityEvaluationCollect/liststu', // 个人能力评价列表
integral = '/annualScore/personalCompTotalScore/liststu', // 个人积分列表
PAGE_XSFXBG = '/annualcompetitionprojectregistration/annualCompetitionProjectRegistration/xsfxbg',
}
export const getlEvaluateApi = (params: Record<'pageNo' | 'pageSize', number>) => request.get(api.liststu, { params });
export const getlIntegralApi = (params: Record<'pageNo' | 'pageSize', number>) => request.get(api.integral, { params });
export const getXsfxbgApi = (params = {}) => {
const par = { recreateFlag: false, annualid: '' };
Object.assign(par, params);
return request.get(api.PAGE_XSFXBG, { params: par });
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@ -100,7 +100,8 @@ export const constRouter: any = {
},
},
{
path: '/newsDetail',
// path: '/newsDetail',
path: 'detail/:id',
name: 'newsDetail',
component: () => import('@/views/news/components/newsDetail.vue'),
meta: {
@ -121,6 +122,36 @@ export const constRouter: any = {
hidden: true,
},
},
{
path: '/personalAbilityEvaluationCollectList',
name: 'PersonalAbilityEvaluationCollectList',
component: () => import('@/views/personalAbilityEvaluationCollectList/index.vue'),
meta: {
icon: '',
title: '个人积分管理',
hidden: false,
},
},
{
path: '/personalEvaluateList',
name: 'personalEvaluateList',
component: () => import('@/views/personalEvaluateList/index.vue'),
meta: {
icon: '',
title: '个人能力评价',
hidden: false,
},
},
{
path: '/personalReport',
name: 'PersonalReport',
component: () => import('@/views/personalReport/index.vue'),
meta: {
icon: '',
title: '个人能力报告',
hidden: false,
},
},
{
path: '/race-info',
name: 'RaecInfo',

@ -0,0 +1,51 @@
import * as echarts from 'echarts/core';
import { BarChart, LineChart, PieChart, MapChart, PictorialBarChart, RadarChart } from 'echarts/charts';
import {
TitleComponent,
TooltipComponent,
GridComponent,
PolarComponent,
AriaComponent,
ParallelComponent,
LegendComponent,
RadarComponent,
ToolboxComponent,
DataZoomComponent,
VisualMapComponent,
TimelineComponent,
CalendarComponent,
GraphicComponent,
} from 'echarts/components';
// TODO 如果想换成SVG渲染,就导出SVGRenderer,
// 并且放到 echarts.use 里,注释掉 CanvasRenderer
import { /*SVGRenderer*/ CanvasRenderer } from 'echarts/renderers';
echarts.use([
LegendComponent,
TitleComponent,
TooltipComponent,
GridComponent,
PolarComponent,
AriaComponent,
ParallelComponent,
BarChart,
LineChart,
PieChart,
MapChart,
RadarChart,
// TODO 因为要兼容Online图表自适应打印,所以改成 CanvasRenderer,可能会模糊
CanvasRenderer,
PictorialBarChart,
RadarComponent,
ToolboxComponent,
DataZoomComponent,
VisualMapComponent,
TimelineComponent,
CalendarComponent,
GraphicComponent,
]);
export default echarts;

@ -1,6 +1,7 @@
<template>
<el-button @click="backHandle" type="success">返回</el-button>
<div style="margin-top: 20px;margin-left: 50px;margin-right: 50px">
<div class="container">
<el-button style="margin-left: 93%" @click="backHandle" type="success">返回</el-button>
<el-divider/>
<p class="list-title">{{ data.title }}</p>
<p class="list-summary">{{ data.summary }}</p>
<div class="center-image">
@ -10,25 +11,38 @@
</div>
</template>
<script setup lang="ts">
import {ref} from 'vue';
import { ref } from 'vue'
import {useRoute, useRouter} from "vue-router";
const router = useRouter();
const route = useRoute();
const backHandle = ()=>{
router.go(-1);
}
const data = ref(route.query)
const data = ref(route.query);
</script>
<style scoped>
.container{
width: 60%;
margin: auto;
height: 98vh;
overflow-y: scroll;
padding: 0;
display: block;
}
.container::-webkit-scrollbar {
width: 0;
}
.list-title{
font-size: 25px;
font-weight: 600;
text-align: center;
}
.list-summary{
font-size: 20px;
color: #8c8b8b;
margin-top: 10px;
line-height: 1.9;
}
.list-time{
font-size: 16px;
@ -42,6 +56,7 @@ const data = ref(route.query)
}
.list-image{
width: 500px;
height: 500px;
margin-top: 20px;
}
</style>

@ -1,106 +1,198 @@
<template>
<ul>
<li v-for="newsItems in newsData" :key="newsItems.id">
<div class="box-list" @click="handleClick(newsItems)">
<div class="left-box-list">
<p class="list-title">{{ newsItems.title }}</p>
<p class="list-summary">{{ newsItems.summary }}</p>
<p class="list-time">{{ newsItems.date }}</p>
</div>
<img class="news-image" :src="newsItems.imageUrl" alt="News Image">
</div>
<el-divider/>
</li>
</ul>
<div class="container">
<el-tabs v-model="activeName" style="max-width: 60%;margin: auto" @tab-click="handleTabClick">
<el-tab-pane
v-for="(newsCategory, categoryName) in newsData"
:key="categoryName"
:label="categoryName"
:name="categoryName.toLowerCase()"
>
<ul>
<li v-for="newsItem in newsCategory" :key="newsItem.id">
<div class="box-list" @click.stop="handleClick(newsItem)">
<div class="left-box-list">
<p class="list-title">{{ newsItem.title }}</p>
<p class="list-summary">{{ newsItem.summary }}</p>
<p class="list-time">{{ newsItem.date }}</p>
</div>
<img class="news-image" :src="newsItem.imageUrl" alt="News Image">
</div>
<el-divider/>
</li>
</ul>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ref } from 'vue'
import {useRouter} from "vue-router";
const router = useRouter()
//
const newsData = ref([
const activeName = ref('通知公告')
const newsData = ref({
通知公告:[
{
id:1,
title: '季节新闻1',
date: '2024年9月23日',
summary: '秋天,这个季节像是大自然最细腻的画师,在不经意间将世界涂抹成一幅斑斓的画卷。它没有春天那样生机勃勃,也没有夏天的热情奔放,更没有冬天的银装素裹,但它却有着自己独特的韵味——宁静、成熟而又充满诗意。\n' +
'当第一缕凉风轻拂过脸颊,我们知道,秋天来了。这是一年中最宜人的季节,天空如洗,蓝得深邃而纯净,白云悠悠地飘动着,像是蓝天上随意勾勒的几笔白墨。空气中弥漫着淡淡的桂花香,偶尔还能闻到远处果园里成熟的果香,这些气息交织在一起,构成了一首无言的诗篇。\n' +
'树叶开始变得丰富多彩,从翠绿到金黄,再到火红,每一片叶子都承载着岁月的故事,讲述着属于它们自己的生命历程。走在铺满落叶的小径上,脚下发出沙沙的声音,仿佛是秋天独有的乐章,让人的心灵得到了前所未有的宁静与放松。\n' +
'在这个季节里,最令人愉悦的莫过于那恰到好处的温度了。早晚微凉,午间温暖,这样的天气最适合穿上一件薄薄的毛衣,或是披上一条柔软的围巾,漫步在街头巷尾,感受着每一寸肌肤与自然亲密接触的惬意。人们的心情似乎也因为这样舒适的气候而变得轻松愉快起来,笑容更加灿烂,生活节奏也不自觉地放慢了几分。\n' +
'秋天是一个收获的季节,它不仅带来了丰收的喜悦,还赠予了我们一段温馨而美好的时光。让我们在这宜人的季节里,细细品味生活的每一刻,感受那份来自大自然最真挚的馈赠。当最后一抹夏末的暑气随着日落渐渐消散,秋天便悄无声息地降临了。这是一个富有诗意的季节,它以一种平和而优雅的姿态,缓缓铺开了它的画卷。不同于春之生机勃发,夏之热情似火,冬之静谧纯洁,秋以其特有的方式,为这个世界带来了一份成熟与内敛。\n' +
'清晨,当第一缕晨光穿透薄雾,落在大地之上,一切都显得那么宁静而美好。此时的空气,带着些许凉意,却也异常清新。走在这样的早晨,你会发现自己不自觉地深呼吸,想要将这份纯净的气息全部纳入胸膛。树叶的颜色开始变化,由绿转黄,再由黄变红,最终落尽繁华,只留下光秃秃的枝丫,等待来年的重生。每一片落叶,都是秋天的使者,它们用生命最后的色彩,为这个世界增添了无限的温暖与希望。\n' +
'午后的阳光,不再那么炽热,而是温和地洒在大地上,给人以舒适的感觉。这个时候,最适合找一处安静的地方,或是在公园的长椅上,或是在自家的阳台上,捧一本书,泡一杯茶,静静地享受这难得的悠闲时光。偶尔抬头望望天,你会发现,秋天的天空特别高远,云朵也更加洁白,仿佛是大自然最好的画家,用最简单的颜色,勾勒出最美的图案。\n' +
'秋天,还是一个收获的季节。田野里,金黄色的稻谷随风摇曳,果园中,苹果、梨子挂满枝头,一派丰收的景象。农人们忙碌的身影穿梭其间,脸上洋溢着满足的笑容。这不仅仅是因为物质上的富足,更是因为经过一年的努力之后,终于迎来了回报的时刻。这种喜悦,是任何东西都无法替代的。\n' +
'在这样的季节里,人们的心灵似乎也被净化了。孩子们在落叶堆里嬉戏打闹,老人们坐在家门口晒太阳,年轻人则三三两两地散步于公园之中。每个人的脸上都洋溢着轻松和愉快,仿佛整个世界都被这份和谐与美好所包围。\n' +
'秋天,就是这样一种神奇的存在。它用自己独特的方式,告诉我们生命的美好不仅仅在于绽放的瞬间,更在于那些平凡而真实的日常。当我们学会欣赏身边的每一份美好,珍惜每一次相遇,或许,这就是秋天给予我们最宝贵的礼物吧。\n',
imageUrl: 'https://bj.bcebos.com/bjh-pixel/169827013028013977_5_ainote_new.jpg'
},
{
id:2,
title: '体育新闻2',
date: '2024年9月22日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://pic.rmb.bdstatic.com/50252becb3b391b2cb68ddde4a9c5d9b.jpeg'
},
{
id:3,
title: '科技新闻3',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://inews.gtimg.com/om_bt/OGlQWfsaAoKkuCcMZ2o9IVEPqd-72DQy5EAN02XBHUwfYAA/641'
},
{
id:4,
title: '科技新闻4',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.baidu.com/it/u=655643694,820713725&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=729'
},
{
id:5,
title: '科技新闻5',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://desk-fd.zol-img.com.cn/t_s960x600c5/g2/M00/00/00/ChMlWV0v7jyIHLj_AAgsbG2bHDcAAL5lQE1rfYACCyE751.jpg'
},
{
id:11,
title: '季节新闻1',
date: '2024年9月23日',
summary: '秋天,这个季节像是大自然最细腻的画师,在不经意间将世界涂抹成一幅斑斓的画卷。它没有春天那样生机勃勃,也没有夏天的热情奔放,更没有冬天的银装素裹,但它却有着自己独特的韵味——宁静、成熟而又充满诗意。\n' +
'当第一缕凉风轻拂过脸颊,我们知道,秋天来了。这是一年中最宜人的季节,天空如洗,蓝得深邃而纯净,白云悠悠地飘动着,像是蓝天上随意勾勒的几笔白墨。空气中弥漫着淡淡的桂花香,偶尔还能闻到远处果园里成熟的果香,这些气息交织在一起,构成了一首无言的诗篇。\n' +
'树叶开始变得丰富多彩,从翠绿到金黄,再到火红,每一片叶子都承载着岁月的故事,讲述着属于它们自己的生命历程。走在铺满落叶的小径上,脚下发出沙沙的声音,仿佛是秋天独有的乐章,让人的心灵得到了前所未有的宁静与放松。\n' +
'在这个季节里,最令人愉悦的莫过于那恰到好处的温度了。早晚微凉,午间温暖,这样的天气最适合穿上一件薄薄的毛衣,或是披上一条柔软的围巾,漫步在街头巷尾,感受着每一寸肌肤与自然亲密接触的惬意。人们的心情似乎也因为这样舒适的气候而变得轻松愉快起来,笑容更加灿烂,生活节奏也不自觉地放慢了几分。\n' +
'秋天是一个收获的季节,它不仅带来了丰收的喜悦,还赠予了我们一段温馨而美好的时光。让我们在这宜人的季节里,细细品味生活的每一刻,感受那份来自大自然最真挚的馈赠。当最后一抹夏末的暑气随着日落渐渐消散,秋天便悄无声息地降临了。这是一个富有诗意的季节,它以一种平和而优雅的姿态,缓缓铺开了它的画卷。不同于春之生机勃发,夏之热情似火,冬之静谧纯洁,秋以其特有的方式,为这个世界带来了一份成熟与内敛。\n' +
'清晨,当第一缕晨光穿透薄雾,落在大地之上,一切都显得那么宁静而美好。此时的空气,带着些许凉意,却也异常清新。走在这样的早晨,你会发现自己不自觉地深呼吸,想要将这份纯净的气息全部纳入胸膛。树叶的颜色开始变化,由绿转黄,再由黄变红,最终落尽繁华,只留下光秃秃的枝丫,等待来年的重生。每一片落叶,都是秋天的使者,它们用生命最后的色彩,为这个世界增添了无限的温暖与希望。\n' +
'午后的阳光,不再那么炽热,而是温和地洒在大地上,给人以舒适的感觉。这个时候,最适合找一处安静的地方,或是在公园的长椅上,或是在自家的阳台上,捧一本书,泡一杯茶,静静地享受这难得的悠闲时光。偶尔抬头望望天,你会发现,秋天的天空特别高远,云朵也更加洁白,仿佛是大自然最好的画家,用最简单的颜色,勾勒出最美的图案。\n' +
'秋天,还是一个收获的季节。田野里,金黄色的稻谷随风摇曳,果园中,苹果、梨子挂满枝头,一派丰收的景象。农人们忙碌的身影穿梭其间,脸上洋溢着满足的笑容。这不仅仅是因为物质上的富足,更是因为经过一年的努力之后,终于迎来了回报的时刻。这种喜悦,是任何东西都无法替代的。\n' +
'在这样的季节里,人们的心灵似乎也被净化了。孩子们在落叶堆里嬉戏打闹,老人们坐在家门口晒太阳,年轻人则三三两两地散步于公园之中。每个人的脸上都洋溢着轻松和愉快,仿佛整个世界都被这份和谐与美好所包围。\n' +
'秋天,就是这样一种神奇的存在。它用自己独特的方式,告诉我们生命的美好不仅仅在于绽放的瞬间,更在于那些平凡而真实的日常。当我们学会欣赏身边的每一份美好,珍惜每一次相遇,或许,这就是秋天给予我们最宝贵的礼物吧。\n',
imageUrl: 'https://bj.bcebos.com/bjh-pixel/169827013028013977_5_ainote_new.jpg'
},
{
id:12,
title: '体育新闻2',
date: '2024年9月22日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://pic.rmb.bdstatic.com/50252becb3b391b2cb68ddde4a9c5d9b.jpeg'
},
{
id:13,
title: '科技新闻3',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://inews.gtimg.com/om_bt/OGlQWfsaAoKkuCcMZ2o9IVEPqd-72DQy5EAN02XBHUwfYAA/641'
},
{
id:14,
title: '科技新闻4',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.baidu.com/it/u=655643694,820713725&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=729'
},
{
id:15,
title: '科技新闻5',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://desk-fd.zol-img.com.cn/t_s960x600c5/g2/M00/00/00/ChMlWV0v7jyIHLj_AAgsbG2bHDcAAL5lQE1rfYACCyE751.jpg'
},
],
赛事资讯:[
{
id:6,
title: '科技新闻6',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/1601bcb82e9858e21149cf64086a21db.jpg'
},
{
id:7,
title: '体育新闻7',
date: '2024年9月22日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/6280b93c7eb748a24466bd0d3021e3a9.jpg'
},
{
id:8,
title: '科技新闻8',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/113da83a57b3661c3170c2571007f8e5.jpg'
},
{
id:9,
title: '科技新闻9',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.baidu.com/it/u=515359320,1010066691&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=810'
},
{
id:10,
title: '科技新闻10',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://q6.itc.cn/images01/20240613/84d2e170b23b47be86f17ec5009febf9.jpeg'
},
],
科技新闻:[
{
id:1,
title: '科技新闻1',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.xcarimg.com/exp/7971/8041/8084/8581/20130421003812814631.jpg'
},
{
id:2,
title: '体育新闻2',
date: '2024年9月22日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://pic.rmb.bdstatic.com/50252becb3b391b2cb68ddde4a9c5d9b.jpeg'
},
{
id:3,
title: '科技新闻3',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://inews.gtimg.com/om_bt/OGlQWfsaAoKkuCcMZ2o9IVEPqd-72DQy5EAN02XBHUwfYAA/641'
},
{
id:4,
title: '科技新闻4',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.baidu.com/it/u=655643694,820713725&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=729'
},
{
id:5,
title: '科技新闻5',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://desk-fd.zol-img.com.cn/t_s960x600c5/g2/M00/00/00/ChMlWV0v7jyIHLj_AAgsbG2bHDcAAL5lQE1rfYACCyE751.jpg'
},
{
id:6,
title: '科技新闻6',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/1601bcb82e9858e21149cf64086a21db.jpg'
},
{
id:7,
title: '体育新闻7',
date: '2024年9月22日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/6280b93c7eb748a24466bd0d3021e3a9.jpg'
},
{
id:8,
title: '科技新闻8',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img2.woyaogexing.com/2023/05/05/113da83a57b3661c3170c2571007f8e5.jpg'
},
{
id:9,
title: '科技新闻9',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://img1.baidu.com/it/u=515359320,1010066691&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=810'
},
{
id:10,
title: '科技新闻10',
date: '2024年9月23日',
summary: '你有没有想过,是否能用更轻量的方式开发出与Electron相同功能的桌面应用?毕竟,虽然Electron确实强大,但它那几百MB的安装包和资源消耗对许多小型项目来说太过头了。',
imageUrl: 'https://q6.itc.cn/images01/20240613/84d2e170b23b47be86f17ec5009febf9.jpeg'
},
]);
const handleClick = (newsItems)=>{
// router.push(`/news/${newsItems.id}`);
router.push({path:'/newsDetail',query:newsItems})
id:16,
title:'1',
summary:'1111111',
date:'121313'
}
],
});
const router = useRouter();
const handleTabClick = (tab) => {
const categoryName = tab.name
}
//
const handleClick = (newsItem) => {
router.push({
name: 'newsDetail',
params: { id: newsItem.id.toString() },
query: { ...newsItem }
})
}
</script>
<style scoped>
.container{
margin: auto;
height: 98vh;
overflow-y: scroll;
padding: 0;
display: block;
}
.container::-webkit-scrollbar {
width: 0;
}
.box-list{
display: flex;
/*background: cornsilk;*/
width: 95%;
height: 100px;
margin-left: 30px;

@ -1,37 +1,12 @@
<template>
<div class="container">
<el-card style="max-width: 70%;margin: auto">
<template #header>
<div class="card-header">
<span>新闻推荐</span>
</div>
</template>
<div class="content">
<router-view></router-view>
</div>
</el-card>
<router-view/>
</div>
</template>
<script setup lang="ts">
</script>
<style scoped>
.container{
margin-top:100px;
}
.card-header{
font-size: 20px;
font-weight: 600;
margin-left: 100px;
}
.content {
height: 89vh;
overflow-y: scroll;
padding: 0;
margin: 0;
display: block;
}
.content::-webkit-scrollbar {
width: 0;
}
</style>

@ -0,0 +1,188 @@
<template>
<div class="fill"></div>
<div class="banner">
<div class="box">
<div class="title-box">
<div class="title">报名信息确认</div>
<div class="text">
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
</div>
</div>
<div class="img-box">
<img src="../../assets/images/applyImg.png" alt="">
</div>
</div>
</div>
<div class="personalAbilityEvaluationCollectList">
<el-card body-class="table-list">
<div class="table-box">
<el-table v-loading="isLoading" ref="multipleTableRef" border :data="tableData" class="table"
:class="{ height: tableData.length > 8 }">
<el-table-column type="selection" width="55" />
<el-table-column prop="depet_dictText" label="院系" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="workOn" label="学号" />
<el-table-column prop="score" label="总积分" />
<el-table-column label="操作" width="120">
<template #default="scope"></template>
</el-table-column>
<template #empty>
<el-empty description="暂无数据" />
</template>
</el-table>
<div class="pagin-box">
<el-pagination class="pagination" style="width: 100%;" v-model:current-page="pagInfo.currentPage"
v-model:page-size="pagInfo.pageSize" :page-sizes="[10, 50, 80, 100]"
layout="slo, total,slot, sizes, prev, pager, next, jumper" :total="pagInfo.total"
@change="getTableList" />
</div>
</div>
</el-card>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue';
import { getlIntegralApi } from '@/api/person';
import { ElMessage } from 'element-plus'
// loading
const isLoading = ref(true)
//
const pagInfo = reactive({
currentPage: 1,
pageSize: 10,
total: 0
})
//
const tableData = reactive<any[]>([]);
const setTableData = (arr: any[]) => {
tableData.length = 0;
tableData.push(...arr);
}
async function getTableList() {
try {
isLoading.value = true;
const res: any = await getlIntegralApi({ pageNo: pagInfo.currentPage, pageSize: pagInfo.pageSize })
pagInfo.total = res.result.total;
setTableData(res.result.records);
} catch (error) {
ElMessage.error('请求失败');
} finally {
isLoading.value = false;
}
}
getTableList();
</script>
<style lang="scss" scoped>
.fill {
padding-top: 80px;
}
.banner {
width: 100%;
height: 289;
background: linear-gradient(90deg, #FFFFFF 0%, #F0F8FF 100%);
padding: 21px 0 37px 225px;
.box {
width: 1515px;
height: 231px;
display: flex;
gap: 104px;
justify-content: space-between;
align-items: center;
.title-box {
width: 1151px;
.title {
height: 59px;
font-family: Open Sans, Open Sans;
font-weight: bold;
font-size: 42px;
color: #333333;
line-height: 59px;
}
.text {
margin-top: 20px;
font-family: Open Sans, Open Sans;
font-weight: 400;
font-size: 20px;
color: #666666;
line-height: 23px;
}
}
.img-box {
img {
object-fit: cover;
}
}
}
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.personalAbilityEvaluationCollectList {
.table-list {
.table-box {
.table {
--el-table-header-bg-color: #fafafa;
width: 100%;
&.height {
height: 375px;
}
}
.pagin-box {
width: 100%;
height: 64px;
display: flex;
align-items: center;
.pagination {
padding: 0 24px;
:deep() {
.el-pagination__total {
margin-right: auto;
}
li.number.is-active {
background-color: #42D9AC;
color: rgba(255, 255, 255, 0.9);
font-family: Microsoft YaHei UI, Microsoft YaHei UI;
}
span.el-pagination__jump {
background-color: #F3F3F3;
padding: 2px 8px;
}
}
}
}
}
}
}
</style>

@ -0,0 +1,192 @@
<template>
<div class="fill"></div>
<div class="banner">
<div class="box">
<div class="title-box">
<div class="title">报名信息确认</div>
<div class="text">
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
请仔细核对报名信息报名成功后无法修改请仔细核对报名信息报名成功后无法修改
</div>
</div>
<div class="img-box">
<img src="../../assets/images/applyImg.png" alt="">
</div>
</div>
</div>
<div class="personalAbilityEvaluationCollectList">
<el-card body-class="table-list">
<div class="table-box">
<el-table v-loading="isLoading" ref="multipleTableRef" border :data="tableData" class="table"
:class="{ height: tableData.length > 8 }">
<el-table-column type="selection" width="55" />
<el-table-column prop="depetId_dictText" label="所属部门" />
<el-table-column prop="workOn" label="学号" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="capacityName" label="能力名称" />
<el-table-column prop="value" label="能力值" />
<el-table-column label="操作" width="120">
<template #default="scope"></template>
</el-table-column>
<template #empty>
<el-empty description="暂无数据" />
</template>
</el-table>
<div class="pagin-box">
<el-pagination class="pagination" style="width: 100%;" v-model:current-page="pagInfo.currentPage"
v-model:page-size="pagInfo.pageSize" :page-sizes="[10, 50, 80, 100]"
layout="slo, total,slot, sizes, prev, pager, next, jumper" :total="pagInfo.total"
@change="getTableList" />
</div>
</div>
</el-card>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue';
import { getlEvaluateApi } from '@/api/person';
import { ElMessage } from 'element-plus'
// loading
const isLoading = ref(true)
//
const pagInfo = reactive({
currentPage: 1,
pageSize: 10,
total: 0
})
//
const tableData = reactive<any[]>([]);
const setTableData = (arr: any[]) => {
tableData.length = 0;
tableData.push(...arr);
}
async function getTableList() {
try {
isLoading.value = true;
const res: any = await getlEvaluateApi({ pageNo: pagInfo.currentPage, pageSize: pagInfo.pageSize })
pagInfo.total = res.result.total;
setTableData(res.result.records);
} catch (error) {
ElMessage.error('请求失败');
} finally {
isLoading.value = false;
}
}
getTableList();
</script>
<style lang="scss" scoped>
.fill {
padding-top: 80px;
}
.banner {
width: 100%;
height: 289;
background: linear-gradient(90deg, #FFFFFF 0%, #F0F8FF 100%);
padding: 21px 0 37px 225px;
.box {
width: 1515px;
height: 231px;
display: flex;
gap: 104px;
justify-content: space-between;
align-items: center;
.title-box {
width: 1151px;
.title {
height: 59px;
font-family: Open Sans, Open Sans;
font-weight: bold;
font-size: 42px;
color: #333333;
line-height: 59px;
}
.text {
margin-top: 20px;
font-family: Open Sans, Open Sans;
font-weight: 400;
font-size: 20px;
color: #666666;
line-height: 23px;
}
}
.img-box {
img {
object-fit: cover;
}
}
}
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.personalAbilityEvaluationCollectList {
.table-list {
.table-box {
position: relative;
.table {
--el-table-header-bg-color: #fafafa;
width: 100%;
&.height {
height: 375px;
}
}
.pagin-box {
width: 100%;
height: 64px;
display: flex;
align-items: center;
.pagination {
padding: 0 24px;
:deep() {
.el-pagination__total {
margin-right: auto;
}
li.number.is-active {
background-color: #42D9AC;
color: rgba(255, 255, 255, 0.9);
font-family: Microsoft YaHei UI, Microsoft YaHei UI;
}
span.el-pagination__jump {
background-color: #F3F3F3;
padding: 2px 8px;
}
}
}
}
}
}
}
</style>

@ -0,0 +1,211 @@
<template>
<div id="rander-chart">
</div>
</template>
<script lang='ts' setup>
import echarts from '@/utils/echarts';
import { onMounted,nextTick } from 'vue'
const props = defineProps({
data: {
type: Array,
default: [
{
text: '前言探索',
value: 0,
},
{
capacityName: '奠定基础',
value: 0,
},
{
capacityName: '知识分析',
value: 0,
},
{
capacityName: '社会责任',
value: 0,
},
{
capacityName: '独立思考',
value: 0,
},
{
capacityName: '拓宽视野',
value: 0,
},
{
capacityName: '激发兴趣',
value: 0,
},
{
capacityName: '沟通协调',
value: 0,
},
{
capacityName: '设计开发',
value: 0,
},
{
capacityName: '研判分析',
value: 0,
},
{
capacityName: '创新能力',
value: 0,
},
{
capacityName: '团队协作',
value: 0,
},
],
},
});
const throttle = (fn: any) => {
let timer: any;
return function () {
if (timer) {
return;
}
timer = setTimeout(() => {
fn();
clearTimeout(timer);
timer = null;
}, 1000);
};
};
let Data = props.data
console.log(Data, props.data);
nextTick(() => {
// @ts-ignore
const myChart = echarts.init(document.getElementById("rander-chart"));
console.log(Data,1111);
// var legendData = ['']; //
var indicator =Data.map(item => {
return {name:item.capacityName,max:100}
});
var dataArr = [
{
value:Data.map(item => item.value),
name: '年度维度分析',
itemStyle: {
normal: {
lineStyle: {
color: "#55d7f2",
},
shadowColor: '#4A99FF',
shadowBlur: 10,
},
},
areaStyle: {
normal: {
//
color: {
type: "linear",
x: 1, //
y: 0, //
x2: 1, //
y2: 1, //
colorStops: [
{
offset: 0,
color: "#1890ff",
},
{
offset: 1,
color: "#1890ff",
},
],
globalCoord: false,
},
opacity: 1, //
},
},
},
];
var colorArr = ["#fff", "#fff"]; //
const option :any= {
backgroundColor: "transparent",
color: colorArr,
// legend: {
// orient: "vertical",
// // icon: 'circle', //
// // data: legendData,
// top: 0,
// left: 20,
// itemWidth: 8, // [ default: 25 ]
// itemHeight: 8, // [ default: 14 ]
// itemGap: 22, // [ default: 10 ]
// textStyle: {
// fontSize: 12,
// fontWeight: "bold",
// color: "#00E4FF",
// },
// },
tooltip: {
trigger: 'item'
},
radar: {
radius: "60%",
// shape: 'circle',
name: {
textStyle: {
color: "#9ca4a6",
fontSize: 12,
},
},
indicator: indicator,
splitArea: {
// grid
show: true,
areaStyle: {
//
color: ["rgba(255,255,255,0)", "rgba(255,255,255,0)"], //
},
},
axisLine: {
//线
lineStyle: {
color: "#2a5f61",
},
},
splitLine: {
lineStyle: {
color: "#2a5f61", // 线
width: 1, // 线线
},
},
},
series: [
{
type: "radar",
symbolSize: 6,
symbol: "circle",
data: dataArr,
},
],
};
myChart.setOption(option);
let resize = throttle(() => {
myChart.resize();
});
window.addEventListener("resize", resize);
})
onMounted(() => {
});
</script>
<style lang='less' scoped>
#rander-chart{
width: 100%;
height:450px;
}
</style>

@ -0,0 +1,382 @@
<template>
<div class="fill"></div>
<div style="padding: 30px 18.6vw 0; width: 100%;margin: auto;">
<!-- 年度<j-dict-select-tag placeholder="请选择年度" v-model:value="annualid" dictCode="annual,annual_name,id" /> -->
</div>
<div class="personage">
<h1 class="title">机电学院比赛个人报告</h1>
<div class="rebuild">
<div @click="Rebuild">重新生成报告</div>
</div>
<p class="paragraph">
我是比赛综述全面落实立德树人根本任务依据CDIO工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力具有终身学习和创新创业意识国际交流能力团队合作精神等良好素养能适应产业与社会变革的国际化应用型人
</p>
<el-row class="card-box" :gutter="16" type="flex" justify="space-between">
<el-col :span="12">
<el-card class="card1">
<div class="title">
<div class="left">参加比赛项目数量</div>
<div class="right">
<SvgIcon size="20" name="content" />
</div>
</div>
<div class="name">{{ data.cjbsxmsl }}</div>
<div class="total" style="margin-top: 10px">
<div class="two">国家级{{ data.gjj }}</div>
<div class="three">省级{{ data.shengj }}</div>
<div class="three">市级{{ data.shij }}</div>
<div class="three">校级{{ data.xj }}</div>
</div>
</el-card>
</el-col>
<el-col :span="12">
<el-card class="card1">
<div class="title">
<div class="left">获奖数</div>
<div class="right">
<SvgIcon size="20" name="content" />
</div>
</div>
<div class="name">{{ data.hjNumber }}</div>
<div class="total" style="grid-template-columns: repeat(5, 1fr)">
<div class="one">一等{{ data.ydjNumber }}</div>
<div class="two">二等{{ data.edjNumber }}</div>
<div class="three">三等{{ data.sdjNumber }}</div>
<div class="two">四等{{ data.sidjNumber }}</div>
<div class="three">五等{{ data.wdjNumber }}</div>
</div>
</el-card>
</el-col>
</el-row>
<p class="paragraph">
个人综合素质综述全面落实立德树人根本任务依据CDIO工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力具有终身学习和创新创业意识国际交流能力团队合作精神等良好素养能适应产业与社会变革的国际化应用型人
</p>
<img src="../../assets/images/card.png" alt="">
<el-row class="card-box" :gutter="[50, 50]" type="flex">
<el-col :xs="24" :xl="12">
<p class="paragraph">
个人综合素质综述全面落实立德树人根本任务依据CDIO工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力具有终身学习和创新创业意识国际交流能力团队合作精神等良好素养能适应产业与社会变革的国际化应用型人
</p>
</el-col>
<el-col :xs="24" :xl="12">
<div class="ec-box">
<div class="title-box">
<div class="tit">年度维度分析</div>
</div>
<randerChart></randerChart>
</div>
</el-col>
</el-row>
<img src="../../assets/images/card.png" alt="">
<p class="paragraph">
我是比赛参赛情况综述全面落实立德树人根本任务依据CDIO工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力具有终身学习和创新创业意识国际交流能力团队合作精神等良好素养能适应产业与社会变革的国际化应用型人
</p>
<div class="table-box" style="min-height: 500px;">
<h1 class="title-pons">个人比赛获奖情况</h1>
<el-table :data="data.allApList" class="table" :class="{ height: data.allApList.length > 8 }">
<el-table-column prop="jxname" label="奖项名称" />
<el-table-column prop="ndbs" label="年度比赛" />
<el-table-column prop="ndbsxm" label="年度比赛项目" />
<el-table-column prop="dwname" label="所在队伍名称" />
<el-table-column prop="jf" label="积分" />
<template #empty>
<el-empty description="暂无数据" />
</template>
</el-table>
</div>
</div>
</template>
<script lang='ts' setup>
// import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import randerChart from './components/randerChart.vue';
import { ElLoading } from 'element-plus'
import { getXsfxbgApi } from '@/api/person';
import { ref, watch } from 'vue';
type allApList = {
jxname: string
ndbs: string
ndbsxm: string
dwname: string
jf: string
}[] | []
const data = ref<any>({
cjbsxmsl: 0,
gjj: 0,
shengj: 0,
shij: 0,
xj: 0,
hjNumber: 0,
ydjNumber: 0,
edjNumber: 0,
sdjNumber: 0,
sidjNumber: 0,
wdjNumber: 0,
allApList: [] as allApList
})
let loading: any;
const setLoading = () => {
const col = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
loading = col;
setTimeout(() => { col.close() }, 3000); // 33
} // loading
const cloLoading = () => { if (loading) loading.close(); } //loading
getXsfxbgApi().then((res: any) => {
data.value = res.result
setLoading();
}).finally(cloLoading);
const Rebuild = async () => {
setLoading();
const res: any = await getXsfxbgApi({ recreateFlag: true, annualid: annualid.value })
data.value = res.result
cloLoading();
}
const annualid = ref('')
watch(() => annualid.value, () => {
Rebuild()
})
</script>
<style lang='scss' scoped>
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
* {
font-family: "Roboto", sans-serif;
font-weight: 300;
font-style: normal;
line-height: 3;
}
.title-pons {
font-size: 30px;
text-align: center;
padding-bottom: 30px;
line-height: initial;
}
.table{
font-size: 16px;
}
.fill {
padding-top: 80px;
}
.loading {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.rebuild {
display: flex;
justify-content: center;
div {
cursor: pointer;
}
}
.personage {
padding: 0 18.6vw 60px;
width: 100%;
margin: auto;
&>* {
margin: 50px 0;
}
&>img {
margin: -50px 0;
}
&>.title {
text-align: center;
font-size: 35px;
font-weight: bolder;
}
.paragraph {
font-size: 16px;
text-indent: 2em;
}
.card {
width: 100%;
.inner {
height: 0;
padding-top: 40%;
position: relative;
.container {
position: absolute;
inset: 0;
border-radius: 5px;
border: 1px solid;
line-height: 1;
display: flex;
.fl-box {
height: 80%;
margin: auto;
margin-left: 25px;
display: flex;
flex-direction: column;
justify-content: space-between;
.tit {
color: #a0a0a0;
}
.center {
font-size: 30px;
font-weight: bolder;
}
.info {
display: flex;
justify-content: space-between;
}
}
}
}
}
.ec-box {
width: 100%;
border-radius: 2px 2px 2px 2px;
border: 1px solid #000;
.title-box {
height: 58px;
border-radius: 2px 2px 0px 0px;
box-shadow: 0px 1px 2px 0px #707070;
display: flex;
.tit {
margin-left: 4%;
height: 58px;
line-height: 58px;
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
}
}
}
.table-box {
border: 1px solid;
padding: 40px 20px;
table {
width: 100%;
caption {
caption-side: top;
padding-bottom: 20px;
text-align: center;
color: #000;
font-size: 26px;
}
thead {
text-align: left;
color: rgb(160 160 160);
}
tr {
text-align: left;
border-bottom: 1px solid rgb(219, 216, 216);
th,
td {
padding: 10px 0;
}
th:first-child {
text-align: center;
}
td:last-child {
color: rgb(64, 51, 253);
}
}
}
}
/** */
.card1 {
--el-card-padding: 0;
&,
* {
line-height: initial;
}
:deep() {
.el-card__body {
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
width: 100%;
height: 182px;
// background-color: #ffffff00;
border: 1px solid #ccc;
padding: 20px;
.title {
display: flex;
width: 100%;
justify-content: space-between;
.left {
font-size: 14px;
color: #fff;
color: rgba(0, 0, 0, 0.45);
}
}
.name {
font-size: 42px;
font-weight: 500;
color: #000;
margin: 10px 0;
}
.total {
font-size: 16px;
color: #000;
// display: flex;
width: 100%;
display: grid;
grid-template-columns: repeat(4, 1fr);
/* 创建两列,每列宽度相等 */
grid-template-rows: repeat(2, 10px);
/* 创建四行,每行高度固定为100px */
gap: 10px;
div {
// width: 25%;
}
}
}
}
</style>
Loading…
Cancel
Save