Commit d089f94c by taowenzhong

管理端招聘功能完成 文件打包下载完成

parent f7ba3cd1
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
"echarts": "^4.9.0", "echarts": "^4.9.0",
"element-ui": "2.15.10", "element-ui": "2.15.10",
"exceljs": "^4.3.0", "exceljs": "^4.3.0",
"file-saver": "2.0.5", "file-saver": "^2.0.5",
"fuse.js": "6.4.3", "fuse.js": "6.4.3",
"highlight.js": "9.18.5", "highlight.js": "9.18.5",
"html-to-image": "^1.11.11", "html-to-image": "^1.11.11",
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
"js-cookie": "3.0.1", "js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1", "jsencrypt": "3.0.0-rc.1",
"jspdf": "^2.5.1", "jspdf": "^2.5.1",
"jszip": "^3.10.1",
"less-loader": "^5.0.0", "less-loader": "^5.0.0",
"luckyexcel": "^1.0.1", "luckyexcel": "^1.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
......
...@@ -209,15 +209,13 @@ ...@@ -209,15 +209,13 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="资料" :span="3"> <el-descriptions-item label="资料" :span="3">
<template v-for="item in form.fileList"> <template v-for="item in form.fileList">
<!-- <el-image :src="baseUrl + item.fjlj" style="width: 150px;height: auto" fit="fill"></el-image>--> <span style="margin-right: 10px">{{ item.fjmc }}</span>
<el-link
type="primary"
:href="baseUrl + item.fjlj"
target="_blank"
style="display: block"
>{{ item.fjmc }}
</el-link>
</template> </template>
<el-button
type="text" icon="el-icon-download"
@click="downloadFile(form.fileList)"
>下载
</el-button>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
...@@ -336,6 +334,8 @@ import { ...@@ -336,6 +334,8 @@ import {
} from "@/api/smartSchool/openRecruitment"; } from "@/api/smartSchool/openRecruitment";
import {getToken} from "@/utils/auth"; import {getToken} from "@/utils/auth";
import {Gender} from "@/enums/common"; import {Gender} from "@/enums/common";
import JSZip from "jszip";
import FileSaver from 'file-saver'
export default { export default {
name: "Relation", name: "Relation",
...@@ -456,6 +456,44 @@ export default { ...@@ -456,6 +456,44 @@ export default {
}; };
}, },
methods: { methods: {
downloadFile(files) {
const info = this.form
const zip = new JSZip()
const names = files.map(item => { return item.fjmc })
const fileUrls = files.map(item => { return this.baseUrl + item.fjlj })
const buffers = fileUrls.map(item => { return this.urlToBlob(item) })
Promise.all(buffers).then((res) => {
res.forEach((item, index) => {
zip.file(names[index], item)
})
zip.generateAsync({ type: 'blob'}).then(content => {
FileSaver.saveAs(content, `${info.project}-${info.studentName}-${info.idCard}.zip`)
})
})
},
urlToBlob(url) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => {
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
const dataURL = canvas.toDataURL('image/jpeg', 0.9); // 0.9为图片质量,可以根据需要调整
// 将dataURL转换为Blob对象
fetch(dataURL)
.then(res => res.blob())
.then(blob => {
resolve(blob);
});
};
img.onerror = (error) => {
reject(error);
};
img.src = url;
})
},
print(form) { print(form) {
htmlToImage.toPng(this.$refs.printDom, { htmlToImage.toPng(this.$refs.printDom, {
pixelRatio: 2 pixelRatio: 2
...@@ -470,10 +508,10 @@ export default { ...@@ -470,10 +508,10 @@ export default {
}, },
getBase64ImageSize(base64, callback) { getBase64ImageSize(base64, callback) {
let img = new Image(); let img = new Image();
img.onload = function() { img.onload = function () {
callback({ width: img.width, height: img.height }); callback({width: img.width, height: img.height});
}; };
img.onerror = function() { img.onerror = function () {
callback(null); callback(null);
}; };
img.src = base64; img.src = base64;
......
...@@ -89,52 +89,31 @@ ...@@ -89,52 +89,31 @@
<!-- 添加或修改【请填写功能名称】对话框 --> <!-- 添加或修改【请填写功能名称】对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1000px"> <el-dialog :title="title" :visible.sync="open" width="1000px">
<el-row :gutter="30"> <el-form ref="form" :model="form" :rules="rules">
<el-col :span="9"> <div id="printDom" ref="printDom">
<!-- 个人信息 --> <div style="display: flex;width: 100%;margin-bottom: 10px;">
<div style="font-size: 20px;text-align: center"><b>报名信息</b></div> <div style="flex: 1">
<br/><br/> <el-descriptions :column="1" border>
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-descriptions-item label="姓名">
<el-form-item label="姓名:" prop="studentName"> <div style="width: 500px">{{ form.studentName }}</div>
<el-input v-model="form.studentName" placeholder="请输入学生姓名" readOnly/> </el-descriptions-item>
</el-form-item> <el-descriptions-item label="身份证号码">{{ form.idCard }}</el-descriptions-item>
<el-form-item label="性别:"> <el-descriptions-item label="性别">
<el-select ref="sexSelect" v-model="form.sex" style="width: 100%" placeholder="请选择学生性别" disabled> <dict-tag :options="dict.type.sys_user_sex" :value="form.sex"/>
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" </el-descriptions-item>
:value="dict.value"> <el-descriptions-item label="测试项目">{{ form.project }}</el-descriptions-item>
{{ dict.label }} <el-descriptions-item label="联系方式1">{{ form.telephone1 }}</el-descriptions-item>
</el-option> <el-descriptions-item label="联系方式2">{{ form.telephone2 }}</el-descriptions-item>
</el-select> </el-descriptions>
</el-form-item> </div>
<el-form-item label="测试项目:" prop="project"> <el-image
<el-input v-model="form.project" placeholder="请选择测试项目" readOnly/> :src="baseUrl + form.photo"
</el-form-item> :preview-src-list="[baseUrl + form.photo]"
<el-form-item label="身份证号:" prop="idCard"> style="width: auto;height: 211px;float: right;margin-left: 10px"
<el-input v-model="form.idCard" placeholder="请输入身份证号" readOnly/> fit="fill"
</el-form-item> ></el-image>
<el-form-item label="联系方式1:" prop="telephone1"> </div>
<el-input v-model="form.telephone1" placeholder="请输入联系方式" readOnly/> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
</el-form-item>
<el-form-item label="联系方式2:" prop="telephone2">
<el-input v-model="form.telephone2" placeholder="请输入联系方式" readOnly/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<!-- 照片 -->
<el-form ref="form" :model="form" :rules="rules" label-width="0px">
<br/><br/><br/><br/>
<el-form-item>
<el-image :src="isEmptyAvatar(form.photo, form.sex)" fit="fill"
style=" display: block; margin: auto; width: 200px; height: 200px;" alt="学生照片加载失败"/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="9">
<!-- 分配考场信息 -->
<div style="font-size: 20px;text-align: center"><b>考场信息</b></div>
<br/><br/>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="准考证号" prop="examNumber"> <el-form-item label="准考证号" prop="examNumber">
<el-input v-model="form.examNumber" :readOnly="isHandle"/> <el-input v-model="form.examNumber" :readOnly="isHandle"/>
</el-form-item> </el-form-item>
...@@ -158,8 +137,8 @@ ...@@ -158,8 +137,8 @@
<el-input v-model="form.examAddress" :readOnly="isHandle"/> <el-input v-model="form.examAddress" :readOnly="isHandle"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-col> </div>
</el-row> </el-form>
<div slot="footer"> <div slot="footer">
<el-button v-show="!isHandle" type="primary" @click="submitForm"> </el-button> <el-button v-show="!isHandle" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel">{{ isHandle ? '退 出' : '取 消' }}</el-button> <el-button @click="cancel">{{ isHandle ? '退 出' : '取 消' }}</el-button>
...@@ -535,8 +514,4 @@ export default { ...@@ -535,8 +514,4 @@ export default {
display: block; display: block;
} }
.el-form-item {
margin-bottom: 10px;
}
</style> </style>
...@@ -61,8 +61,6 @@ ...@@ -61,8 +61,6 @@
</el-table-column> </el-table-column>
<el-table-column label="身份证号码" align="center" prop="idCard" width="165"/> <el-table-column label="身份证号码" align="center" prop="idCard" width="165"/>
<el-table-column label="姓名" align="center" prop="studentName" min-width="80" max-width="120"/> <el-table-column label="姓名" align="center" prop="studentName" min-width="80" max-width="120"/>
<el-table-column label="学籍号" align="center" prop="studentNumber" width="100"/>
<el-table-column key="juniorSchool" width="130" align="center" prop="schoolName" label="初中学校"/>
<el-table-column label="测试项目" prop="project" width="80"> <el-table-column label="测试项目" prop="project" width="80">
<!-- <template slot-scope="scope"> <!-- <template slot-scope="scope">
<dict-tag :options="dict.type.professional_category" :value="scope.row.sex" /> <dict-tag :options="dict.type.professional_category" :value="scope.row.sex" />
...@@ -101,93 +99,38 @@ ...@@ -101,93 +99,38 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList"/> @pagination="getList"/>
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
<el-row :gutter="20"> <el-form ref="form" :model="form" :rules="rules">
<el-col :span="9"> <div id="printDom" ref="printDom">
<!-- 个人信息 --> <div style="display: flex;width: 100%;margin-bottom: 10px;">
<div style="font-size: 20px; text-align: center"><b>学生报名信息</b></div> <div style="flex: 1">
<br/> <el-descriptions :column="1" border>
<el-form ref="form" :model="form" :rules="rules" label-width="90px"> <el-descriptions-item label="姓名">
<el-form-item label="姓名" prop="studentName"> <div style="width: 500px">{{ form.studentName }}</div>
<el-input v-model="form.studentName" placeholder="请输入学生姓名" readOnly/> </el-descriptions-item>
</el-form-item> <el-descriptions-item label="身份证号码">{{ form.idCard }}</el-descriptions-item>
<el-form-item label="身份证号" prop="idCard"> <el-descriptions-item label="性别">
<el-input v-model="form.idCard" placeholder="请输入身份证号" readOnly/> <dict-tag :options="dict.type.sys_user_sex" :value="form.sex"/>
</el-form-item> </el-descriptions-item>
<el-form-item label="学籍号" prop="studentNumber"> <el-descriptions-item label="测试项目">{{ form.project }}</el-descriptions-item>
<el-input v-model="form.studentNumber" placeholder="请输入学籍号" readOnly/> <el-descriptions-item label="联系方式1">{{ form.telephone1 }}</el-descriptions-item>
</el-form-item> <el-descriptions-item label="联系方式2">{{ form.telephone2 }}</el-descriptions-item>
<el-form-item label="初中学校" prop="schoolName"> </el-descriptions>
<el-input v-model="form.schoolName" placeholder="请输入初中学校" readOnly/> </div>
</el-form-item> <el-image
<el-form-item label="测试项目" prop="project"> :src="baseUrl + form.photo"
<el-input v-model="form.project" placeholder="请选择测试项目" readOnly/> :preview-src-list="[baseUrl + form.photo]"
</el-form-item> style="width: auto;height: 211px;float: right;margin-left: 10px"
<el-form-item label="性别:"> fit="fill"
<el-select v-model="form.sex" style="width: 100%" placeholder="请选择学生性别" disabled> ></el-image>
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" </div>
:value="dict.value"> <el-descriptions :column="2" border style="margin-bottom: 10px">
{{ dict.label }} <el-descriptions-item label="准考证号">{{ form.examNumber }}</el-descriptions-item>
</el-option> <el-descriptions-item label="分组">{{ form.inGroup }}</el-descriptions-item>
</el-select> <el-descriptions-item label="考试日期">{{ form.examDate }}</el-descriptions-item>
</el-form-item> <el-descriptions-item label="考试时间">{{ form.examTime }}</el-descriptions-item>
<el-form-item label="身高" prop="height"> <el-descriptions-item label="考试地点">{{ form.examAddress }}</el-descriptions-item>
<el-input v-model="form.height" placeholder="请输入身高" readOnly> </el-descriptions>
<template slot="suffix">CM</template> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
</el-input>
</el-form-item>
<el-form-item label="体重" prop="weight">
<el-input v-model="form.weight" placeholder="请输入体重" readOnly>
<template slot="suffix">KG</template>
</el-input>
</el-form-item>
<el-form-item label="联系方式1" prop="telephone1">
<el-input v-model="form.telephone1" placeholder="请输入联系方式" readOnly/>
</el-form-item>
<el-form-item label="联系方式2" prop="telephone2">
<el-input v-model="form.telephone2" placeholder="请输入联系方式" readOnly/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<!-- 照片 -->
<el-form ref="form" :model="form" :rules="rules" label-width="0px">
<el-form-item>
<br/>
<el-image :src="isEmptyAvatar(form.photo, form.sex)"
style="display: block; margin: auto; width: 200px; height: 200px;" alt="照片加载失败"/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="9">
<!-- 分配考场信息 -->
<div style="font-size: 20px; text-align: center"><b>考场信息</b></div>
<br/>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="准考证号" prop="examNumber">
<el-input v-model="form.examNumber" readOnly/>
</el-form-item>
<el-form-item label="分组" prop="inGroup">
<el-input v-model="form.inGroup" readOnly/>
</el-form-item>
<el-form-item label="考试日期" prop="examDate">
<el-date-picker disabled v-model="form.examDate" style="width: 100%" type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="考试时间" prop="examTime">
<el-time-select disabled v-model="form.examTime" style="width: 100%" :picker-options="{
start: '08:30',
step: '00:15',
end: '18:30'
}" placeholder="选择时间">
</el-time-select>
</el-form-item>
<el-form-item label="考试地点" prop="examAddress">
<el-input v-model="form.examAddress" readOnly/>
</el-form-item>
<br/>
<!-- 成绩信息 -->
<div style="font-size: 20px; text-align: center"><b>成绩信息</b></div>
<br/>
<el-form-item label="成绩" prop="score"> <el-form-item label="成绩" prop="score">
<el-input v-model="form.score" :readOnly="isHandle"/> <el-input v-model="form.score" :readOnly="isHandle"/>
</el-form-item> </el-form-item>
...@@ -198,8 +141,8 @@ ...@@ -198,8 +141,8 @@
<el-input v-model="form.passScore" :readOnly="isHandle"/> <el-input v-model="form.passScore" :readOnly="isHandle"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-col> </div>
</el-row> </el-form>
<div slot="footer"> <div slot="footer">
<el-button v-show="!isHandle" type="primary" @click="submitForm"> </el-button> <el-button v-show="!isHandle" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel">{{ isHandle ? '退 出' : '取 消' }}</el-button> <el-button @click="cancel">{{ isHandle ? '退 出' : '取 消' }}</el-button>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment