页面调整增加打印功能

main
JayChou 4 months ago
parent de2a695edc
commit 2a97a54b08
  1. 2
      jeecgboot-vue3-master/index.html
  2. 21
      jeecgboot-vue3-master/package.json
  3. 1
      jeecgboot-vue3-master/src/assets/icons/log.svg
  4. 87
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList.vue
  5. 19
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList2.vue
  6. 24
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList3.vue
  7. 3
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList4.vue
  8. 3
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList5.vue
  9. 3
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList6.vue
  10. 3
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList7.vue
  11. 3
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/components/cardList8.vue
  12. 148
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/comprehensiveReport.vue
  13. 71
      jeecgboot-vue3-master/src/views/comprehensiveEvaluation/department.vue

@ -16,6 +16,8 @@
window._CONFIG = {};
</script>
<script type="text/javascript" src="/resource/js/base64.min.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<script src="https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js"></script>
</head>
<body>
<script>

@ -33,17 +33,17 @@
"gen:icon": "esno ./build/generate/icon/index.ts"
},
"dependencies": {
"@jeecg/online": "3.5.3-beta3",
"@qiaoqiaoyun/drag-free": "^1.0.52",
"@iconify/iconify": "^2.2.1",
"@ant-design/colors": "^6.0.0",
"@ant-design/icons-vue": "^6.1.0",
"@iconify/iconify": "^2.2.1",
"@jeecg/online": "3.5.3-beta3",
"@logicflow/core": "^1.1.13",
"@logicflow/extension": "^1.1.13",
"@vue/shared": "^3.2.33",
"@qiaoqiaoyun/drag-free": "^1.0.52",
"@vue/runtime-core": "^3.2.33",
"@vueuse/shared": "^8.3.0",
"@vue/shared": "^3.2.33",
"@vueuse/core": "^8.3.0",
"@vueuse/shared": "^8.3.0",
"@zxcvbn-ts/core": "^2.0.1",
"ant-design-vue": "^3.2.12",
"axios": "^0.26.1",
@ -59,6 +59,7 @@
"emoji-mart-vue-fast": "^11.1.1",
"enquire.js": "^2.1.6",
"intro.js": "^5.1.0",
"jspdf": "^2.5.1",
"lodash-es": "^4.17.21",
"lodash.get": "^4.4.2",
"md5": "^2.3.0",
@ -66,11 +67,11 @@
"nprogress": "^0.2.0",
"path-to-regexp": "^6.2.0",
"pinia": "2.0.12",
"print-js": "^1.6.0",
"pinyin-pro": "^3.11.0",
"qs": "^6.10.3",
"print-js": "^1.6.0",
"qrcode": "^1.5.0",
"qrcodejs2": "0.0.2",
"qs": "^6.10.3",
"resize-observer-polyfill": "^1.5.1",
"showdown": "^2.1.0",
"sortablejs": "^1.15.0",
@ -81,6 +82,7 @@
"vue-cropperjs": "^5.0.0",
"vue-i18n": "^9.1.9",
"vue-infinite-scroll": "^2.0.2",
"vue-json-pretty": "^2.0.6",
"vue-print-nb-jeecg": "^1.0.12",
"vue-router": "^4.0.14",
"vue-types": "^4.1.1",
@ -88,7 +90,6 @@
"vxe-table": "4.1.0",
"vxe-table-plugin-antd": "3.0.5",
"xe-utils": "^3.3.1",
"vue-json-pretty": "^2.0.6",
"xss": "^1.0.13"
},
"devDependencies": {
@ -96,6 +97,7 @@
"@commitlint/config-conventional": "^16.2.1",
"@iconify/json": "^2.1.30",
"@purge-icons/generated": "^0.8.1",
"@rys-fe/vite-plugin-theme": "^0.8.6",
"@types/codemirror": "^5.60.5",
"@types/crypto-js": "^4.1.1",
"@types/fs-extra": "^9.0.13",
@ -106,9 +108,9 @@
"@types/mockjs": "^1.0.6",
"@types/node": "^17.0.25",
"@types/nprogress": "^0.2.0",
"@types/pinyin": "^2.10.0",
"@types/qrcode": "^1.4.2",
"@types/qs": "^6.9.7",
"@types/pinyin": "^2.10.0",
"@types/showdown": "^1.9.4",
"@types/sortablejs": "^1.10.7",
"@typescript-eslint/eslint-plugin": "^5.20.0",
@ -171,7 +173,6 @@
"vite-plugin-pwa": "^0.12.3",
"vite-plugin-style-import": "^2.0.0",
"vite-plugin-svg-icons": "^2.0.1",
"@rys-fe/vite-plugin-theme": "^0.8.6",
"vite-plugin-vue-setup-extend-plus": "^0.1.0",
"vite-plugin-windicss": "^1.8.7",
"vue-eslint-parser": "^8.3.0",

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1720767791980" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5372" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M864 768v-192H160v192H0V352h1024v416h-160zM288 384H64v160h224v-160z" fill="#2394FB" p-id="5373"></path><path d="M256 0h512v256H256z" fill="#A7D4FD" p-id="5374"></path><path d="M256 704h512v320H256z" fill="#A7D4FD" p-id="5375"></path></svg>

After

Width:  |  Height:  |  Size: 572 B

@ -1,19 +1,34 @@
<template>
<div class="foo_card">
<div class="title"> 比赛学生综合能力评价分析<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title">
比赛学生综合能力评价分析</div>
<div class="table-box">
<div class="table">
<div class="t_item t_head">
<div class="name">能力名称</div>
<div class="total">能力分数</div>
<div class="operate">达标情况</div>
</div>
<div class="t_item t_con" v-for="(item,index) in props.data.splice(0,6)" :key="index">
<div class="name">{{ item.text }}</div>
<div class="total">{{ item.max }}</div>
<div class="operate">达标</div>
</div>
</div>
<div class="table">
<div class="t_item t_head">
<div class="name">能力名称</div>
<div class="total">能力分数</div>
<div class="operate">达标情况</div>
</div>
<div class="t_item t_con" v-for="(i) in 20" :key="i">
<div class="name">能力一</div>
<div class="total">100</div>
<div class="t_item t_con" v-for="(item,index) in props.data.splice(-6)" :key="index">
<div class="name">{{ item.text }}</div>
<div class="total">{{ item.max }}</div>
<div class="operate">达标</div>
</div>
</div>
</div>
</div>
</template>
@ -23,7 +38,56 @@
const props = defineProps({
data: {
type: Array,
default: [
{
text: '前言探索',
max: 100,
},
{
text: '奠定基础',
max: 100,
},
{
text: '知识分析',
max: 100,
},
{
text: '社会责任',
max: 100,
},
{
text: '独立思考',
max: 100,
},
{
text: '拓宽视野',
max: 100,
},
{
text: '激发兴趣',
max: 100,
},
{
text: '沟通协调',
max: 100,
},
{
text: '设计开发',
max: 100,
},
{
text: '研判分析',
max: 100,
},
{
text: '创新能力',
max: 100,
},
{
text: '团队协作',
max: 100,
},
],
},
});
let falg = false;
@ -42,11 +106,14 @@
.foo_card {
width: 100%;
height: 500px;
overflow: auto;
background: #ffffff;
// box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
// border-radius: 6px 6px 6px 6px;
.table-box{
width: 100%;
height: 100%;
display: flex
}
.title {
width: 100%;
text-align: center;
@ -80,7 +147,7 @@
padding-left: 32px;
.t_item {
height: 54px;
height: 60px;
border-bottom: 1px solid #e7e7e7;
display: flex;
align-items: center;
@ -96,9 +163,11 @@
.total {
width: 74px;
flex: 1;
text-align: center;
}
.operate {
text-align: center;
width: 80px;
}
}

@ -1,17 +1,22 @@
<template>
<div class="foo_card2">
<div class="title"> 比赛学生参赛情况分析<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 比赛学生参赛情况分析<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">
<div class="name">比赛名称</div>
<div class="total">比赛状态</div>
<div class="operate">操作</div>
<div class="name">比赛类型</div>
<div class="total">比赛名称</div>
<div class="total">比赛项目</div>
<div class="total">比赛层次</div>
<div class="operate">参赛人数</div>
</div>
<div class="t_item t_con" v-for="(i) in 20" :key="i">
<div class="name">全国高级计算机大赛</div>
<div class="total">比赛中</div>
<div class="operate">详情</div>
<div class="name">国赛</div>
<div class="total">全国高级计算机大赛</div>
<div class="total">计算机算法</div>
<div class="total">高级</div>
<div class="operate">212</div>
</div>
</div>
</div>

@ -1,19 +1,26 @@
<template>
<div class="foo_card3">
<div class="title"> 比赛参赛情况<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title">
比赛参赛情况<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">
<div class="name">比赛类型</div>
<div class="name">比赛名称</div>
<div class="total">项目数</div>
<div class="total">获奖人数</div>
<div class="operate">操作</div>
<div class="total">项目名称</div>
<div class="total">层次</div>
<div class="total">奖项数量</div>
<div class="operate">数量</div>
</div>
<div class="t_item t_con" v-for="(i) in 20" :key="i">
<div class="t_item t_con" v-for="i in 20" :key="i">
<div class="name">国赛</div>
<div class="name">全国高级计算机大赛</div>
<div class="total">1212</div>
<div class="total">321</div>
<div class="operate">已结束</div>
<div class="total">计算机比赛</div>
<div class="total">高级</div>
<div class="total">100</div>
<div class="operate">76</div>
</div>
</div>
</div>
@ -25,7 +32,6 @@
const props = defineProps({
data: {
type: Array,
},
});
let falg = false;

@ -1,6 +1,7 @@
<template>
<div class="foo_card4">
<div class="title"> 部门参赛情况<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 部门参赛情况<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">

@ -1,6 +1,7 @@
<template>
<div class="foo_card5">
<div class="title"> 比赛学生参赛情况分析<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 比赛学生积分况分析<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">

@ -1,6 +1,7 @@
<template>
<div class="foo_card6">
<div class="title"> 比赛学生参赛情况分析<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 比赛学生参获奖况分析<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">

@ -1,6 +1,7 @@
<template>
<div class="foo_card7">
<div class="title"> 比赛获奖情况<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 比赛获奖情况<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">

@ -1,6 +1,7 @@
<template>
<div class="foo_card8">
<div class="title"> 比赛获奖情况<SvgIcon class="icon" @click="unfold" name="zhedie" /></div>
<div class="title"> 比赛获奖情况<div class="log-btn" @click="unfold"><SvgIcon class="icon" name="zhedie" /></div
></div>
<div class="table">
<div class="t_item t_head">

@ -1,6 +1,6 @@
<template>
<div class="container">
<div class="title">河南机电学院比赛综合报告</div>
<div class="title">河南机电学院比赛综合报告<div style="margin-left: 10px;cursor: pointer;"><SvgIcon name="log" @click="log"/></div></div>
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
@ -58,29 +58,40 @@
</div>
<cardTitle title="比赛学生参赛情况分析" />
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="participation-status-content">
<div class="right border-000">
<cardList2 />
<div class="participation-status-content-edit">
<div class="edit-box">
<div class="right">
<p class="description tetx-style"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
</div>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
<div class="footer-edit border-000">
<cardList2 />
</div>
</div>
<cardTitle title="比赛学生获奖情况分析" />
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="participation-status-content">
<div class="right border-000">
<cardList3 />
<div class="participation-status-content-edit">
<div class="edit-box">
<div class="right">
<p class="description tetx-style"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
</div>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
<div class="footer-edit border-000">
<cardList3 />
</div>
</div>
<cardTitle title="部门参赛情况分析" />
@ -110,12 +121,14 @@
import cardList4 from './components/cardList4.vue';
import cardList5 from './components/cardList5.vue';
import cardList6 from './components/cardList6.vue';
import { SvgIcon } from '/@/components/Icon';
import randerChart from './components/randerChart.vue';
import cakeChart from './components/cakeChart.vue';
import ringChart from './components/ringChart.vue';
import pillarChart from './components/pillarChart.vue';
import { ref } from 'vue';
import { ref, onMounted, nextTick } from 'vue';
import { jsPDF } from 'jspdf';
const activeKey = ref('1');
var indicator = [
{
@ -167,24 +180,89 @@
max: 5000,
},
];
const log = async () => {
nextTick(async () => {
await clickDom();
// return
var canvas = document.createElement('canvas');
var w = parseInt(document.querySelector('.container').clientWidth);
var h = parseInt(document.querySelector('.container').clientHeight);
console.log(w, h);
canvas.width = w;
canvas.height = h;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
canvas.style.background = '#ffffff';
html2canvas(document.querySelector('.container'), { canvas: canvas, background: '#ffffff' }).then(function (canvas) {
var contentWidth = canvas.width;
var contentHeight = canvas.height;
var position = 0;
var imgWidth = 595.28;
var imgHeight = (592.28 / contentWidth) * contentHeight;
var pageData = canvas.toDataURL('image/jpeg', 1.0);
var pdf = new jsPDF('', 'pt', 'a4');
var pageHeight = (contentWidth / 592.28) * 841.89;
var leftHeight = contentHeight;
var pdf = new jsPDF('', 'pt', 'a4');
while (leftHeight > 0) {
pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
leftHeight -= pageHeight;
position -= 840;
if (leftHeight > 0 && imgHeight > 841.89) {
pdf.addPage();
}
}
pdf.save('综合报告.pdf');
});
});
};
onMounted(async () => {
console.log(Array.from(document.querySelectorAll('.log-btn')));
// Array.from(document.querySelectorAll('.log-btn'))[0].click()
// Array.from(document.querySelectorAll('.log-btn'))[1].click()
// clickDom()
});
const clickDom = () => {
return new Promise((res: any, rej: any) => {
try {
const dom = Array.from(document.querySelectorAll('.log-btn'));
dom.forEach((item: any) => {
item.click();
});
setTimeout(() => {
res(true);
}, 2000);
} catch (error) {
rej();
}
});
};
</script>
<style lang="less" scoped>
.container {
width: 1200px;
width: 1240px;
margin: 0 auto;
// height: 100vh;
padding: 0 20px;
padding-bottom: 30px;
.title {
width: 100%;
font-size: 36px;
text-align: center;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
.description {
text-indent: 2em;
margin: 30px 0;
}
.tetx-style {
font-size: 24px;
}
.card-content {
display: flex;
.item {
@ -258,7 +336,7 @@
align-items: center;
.content-left,
.content-right {
padding-left: 40px;
padding-left: 40px;
width: 100%;
.item {
display: flex;
@ -300,6 +378,31 @@
height: auto;
}
}
.participation-status-content-edit {
width: 100%;
height: auto;
.edit-box {
width: 100%;
height: 100%;
display: flex;
justify-content: space-between;
}
.left {
width: 500px;
height: 500px;
margin-left: 50px;
}
.right {
flex: 1;
height: auto;
}
.footer-edit {
margin-top: 30px;
width: 100%;
height: 100%;
}
}
.footer {
width: 100%;
margin: 30px 0;
@ -315,5 +418,6 @@
line-height: 50px;
font-size: 14px;
padding: 0 20px;
}
</style>

@ -58,29 +58,39 @@
</div>
<cardTitle title="比赛学生参赛情况分析" />
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="participation-status-content">
<div class="right border-000">
<cardList2 />
<div class="participation-status-content-edit">
<div class="edit-box">
<div class="right">
<p class="description tetx-style"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
</div>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<cakeChart />
<div class="footer-edit border-000">
<cardList2 />
</div>
</div>
<cardTitle title="比赛学生获奖情况分析" />
<p class="description"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
<div class="participation-status-content">
<div class="right border-000">
<cardList3 />
<div class="participation-status-content-edit">
<div class="edit-box">
<div class="right">
<p class="description tetx-style"
>我是比赛综述:全面落实立德树人根本任务依据CDI0工程教育理念培养德劳全面发展掌握软件工程专业所需的数学与自然科学基础知识专业基础理论知识;在企业级软件开发和工业智能软件开发方向能承担软件分析设计开发项目管理等任务具备解决复杂工程问题的能力;具有终身学习和创新创业意识国际交流能力团队合作精神等良好案养能适应产业与社会变革的国阿化应用型人才<br />本专业毕业生经过五年左右的实际工作能够达到以下目标:</p
>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
</div>
</div>
<div class="left border-000">
<!-- <div class="border-title">年度维度分析</div> -->
<ringChart />
<div class="footer-edit border-000">
<cardList3 />
</div>
</div>
<cardTitle title="部门参赛情况分析" />
@ -296,6 +306,31 @@
height: auto;
}
}
.participation-status-content-edit {
width: 100%;
height: auto;
.edit-box {
width: 100%;
height: 100%;
display: flex;
justify-content: space-between;
}
.left {
width: 500px;
height: 500px;
margin-left: 50px;
}
.right {
flex: 1;
height: auto;
}
.footer-edit {
margin-top: 30px;
width: 100%;
height: 100%;
}
}
.footer {
width: 100%;
margin: 30px 0;

Loading…
Cancel
Save