|
@@ -1,24 +1,15 @@
|
|
<template>
|
|
<template>
|
|
- <div style='height: 100%;'>
|
|
|
|
- <div class='import-header'>
|
|
|
|
- <img
|
|
|
|
- src='./images/nav_images.png'
|
|
|
|
- alt=''
|
|
|
|
- >照片批量上传工具 - {{server}}
|
|
|
|
- <button
|
|
|
|
- class='exit-btn'
|
|
|
|
- @click='logout'
|
|
|
|
- title="退出"
|
|
|
|
- ></button>
|
|
|
|
|
|
+ <div style="height: 100%;">
|
|
|
|
+ <div class="import-header">
|
|
|
|
+ <img src="./images/nav_images.png" alt="" />照片批量上传工具 -
|
|
|
|
+ {{ server }}
|
|
|
|
+ <button class="exit-btn" @click="logout" title="退出"></button>
|
|
</div>
|
|
</div>
|
|
- <div class='import-body'>
|
|
|
|
- <div class='import-div'>
|
|
|
|
- <a href='javascript:;'>
|
|
|
|
|
|
+ <div class="import-body">
|
|
|
|
+ <div class="import-div">
|
|
|
|
+ <a href="javascript:;">
|
|
<!-- webkitdirectory-->
|
|
<!-- webkitdirectory-->
|
|
- <button
|
|
|
|
- class='import-btn'
|
|
|
|
- @click="importPhotos"
|
|
|
|
- >
|
|
|
|
|
|
+ <button class="import-btn" @click="importPhotos">
|
|
上传照片
|
|
上传照片
|
|
</button>
|
|
</button>
|
|
</a>
|
|
</a>
|
|
@@ -28,63 +19,69 @@
|
|
type="text"
|
|
type="text"
|
|
v-model="baseID"
|
|
v-model="baseID"
|
|
placeholder="不处理小于此数字的身份证照片"
|
|
placeholder="不处理小于此数字的身份证照片"
|
|
- >
|
|
|
|
-
|
|
|
|
- <br>
|
|
|
|
|
|
+ />
|
|
|
|
|
|
- 覆盖底照:<input type="checkbox" v-model="overridePhoto" title="选中后,即使学生已存在底照,会被本次的照片覆盖">
|
|
|
|
|
|
+ <br />
|
|
|
|
+
|
|
|
|
+ 覆盖底照:<input
|
|
|
|
+ type="checkbox"
|
|
|
|
+ v-model="overridePhoto"
|
|
|
|
+ title="选中后,即使学生已存在底照,会被本次的照片覆盖"
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
- <div class='progress-div'>
|
|
|
|
|
|
+ <div class="progress-div">
|
|
<div>
|
|
<div>
|
|
<span>
|
|
<span>
|
|
成功(含跳过):
|
|
成功(含跳过):
|
|
- <span style="color:green;">{{successNum}}({{skipNum}})</span>/{{allNum}}
|
|
|
|
|
|
+ <span style="color:green;">{{ successNum }}({{ skipNum }})</span
|
|
|
|
+ >/{{ allNum }}
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<span>
|
|
失败:
|
|
失败:
|
|
- <span style="color:red;">{{errorNum}}</span>/{{allNum}}
|
|
|
|
|
|
+ <span style="color:red;">{{ errorNum }}</span
|
|
|
|
+ >/{{ allNum }}
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<span>
|
|
并发参数:
|
|
并发参数:
|
|
- <span style="color:black;">{{batchConcurrency}}</span>
|
|
|
|
|
|
+ <span style="color:black;">{{ batchConcurrency }}</span>
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<span>
|
|
实时并发:
|
|
实时并发:
|
|
- <span style="color:black;">{{reqNum}}</span>
|
|
|
|
|
|
+ <span style="color:black;">{{ reqNum }}</span>
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<span>
|
|
并发报警:
|
|
并发报警:
|
|
- <span style="color:red;">{{faceppConcurrencyErrorNum}}</span>
|
|
|
|
|
|
+ <span style="color:red;">{{ faceppConcurrencyErrorNum }}</span>
|
|
</span>
|
|
</span>
|
|
<span>
|
|
<span>
|
|
报警频率:
|
|
报警频率:
|
|
- <span style="color:red;">{{faceppConcurrencyErrorNumPerMinute}}个/分</span>
|
|
|
|
|
|
+ <span style="color:red;"
|
|
|
|
+ >{{ faceppConcurrencyErrorNumPerMinute }}个/分</span
|
|
|
|
+ >
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
- <span>开始时间:{{startProcessTimeFormat}} </span>
|
|
|
|
- <span>结束时间:{{endProcessTimeFormat}} </span>
|
|
|
|
- <span>处理速度:{{(1000*processSpeed).toFixed(2)}}个/秒</span>
|
|
|
|
|
|
+ <span>开始时间:{{ startProcessTimeFormat }} </span>
|
|
|
|
+ <span>结束时间:{{ endProcessTimeFormat }} </span>
|
|
|
|
+ <span>处理速度:{{ (1000 * processSpeed).toFixed(2) }}个/秒</span>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
|
|
+ <span v-show="completeShow" style="color: green;font-weight: bold;"
|
|
|
|
+ >全部处理完成</span
|
|
|
|
+ >
|
|
<span
|
|
<span
|
|
- v-show="completeShow"
|
|
|
|
- style="color: green;font-weight: bold;"
|
|
|
|
- >全部处理完成</span>
|
|
|
|
- <span
|
|
|
|
- v-show="!completeShow&&(successNum>0||errorNum>0)"
|
|
|
|
|
|
+ v-show="!completeShow && (successNum > 0 || errorNum > 0)"
|
|
style="color: red;font-weight: bold;"
|
|
style="color: red;font-weight: bold;"
|
|
- >处理中...</span>
|
|
|
|
|
|
+ >处理中...</span
|
|
|
|
+ >
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class='console-panel'>
|
|
|
|
- <div
|
|
|
|
- v-for='msgInfo in returnMsgList200'
|
|
|
|
- :key="msgInfo.fileName"
|
|
|
|
- >
|
|
|
|
- <p class='console-line'>
|
|
|
|
- <span class="filename">{{msgInfo.fileName}}</span><span>{{msgInfo.msg}}</span>
|
|
|
|
|
|
+ <div class="console-panel">
|
|
|
|
+ <div v-for="msgInfo in returnMsgList200" :key="msgInfo.fileName">
|
|
|
|
+ <p class="console-line">
|
|
|
|
+ <span class="filename">{{ msgInfo.fileName }}</span
|
|
|
|
+ ><span>{{ msgInfo.msg }}</span>
|
|
</p>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -158,7 +155,7 @@ export default {
|
|
endProcessTime: null, // 结束处理的时间
|
|
endProcessTime: null, // 结束处理的时间
|
|
processSpeed: 0, // 处理的速度:个/秒
|
|
processSpeed: 0, // 处理的速度:个/秒
|
|
batchConcurrency: 0,
|
|
batchConcurrency: 0,
|
|
- faceppConcurrencyErrorNumPerMinute: 0 // 报警频率
|
|
|
|
|
|
+ faceppConcurrencyErrorNumPerMinute: 0, // 报警频率
|
|
};
|
|
};
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
@@ -184,7 +181,7 @@ export default {
|
|
dialog.showOpenDialog(
|
|
dialog.showOpenDialog(
|
|
{
|
|
{
|
|
title: "选择照片所在目录",
|
|
title: "选择照片所在目录",
|
|
- properties: ["openDirectory"]
|
|
|
|
|
|
+ properties: ["openDirectory"],
|
|
},
|
|
},
|
|
folderPaths => {
|
|
folderPaths => {
|
|
if (folderPaths) {
|
|
if (folderPaths) {
|
|
@@ -378,8 +375,8 @@ export default {
|
|
async saveStudentBasePhoto(file, filename) {
|
|
async saveStudentBasePhoto(file, filename) {
|
|
let config = {
|
|
let config = {
|
|
headers: {
|
|
headers: {
|
|
- "Content-Type": "multipart/form-data"
|
|
|
|
- }
|
|
|
|
|
|
+ "Content-Type": "multipart/form-data",
|
|
|
|
+ },
|
|
};
|
|
};
|
|
|
|
|
|
let formData = new FormData();
|
|
let formData = new FormData();
|
|
@@ -424,8 +421,8 @@ export default {
|
|
const headers = {
|
|
const headers = {
|
|
headers: {
|
|
headers: {
|
|
Authorization: authorization,
|
|
Authorization: authorization,
|
|
- "Content-Type": "image/jpeg"
|
|
|
|
- }
|
|
|
|
|
|
+ "Content-Type": "image/jpeg",
|
|
|
|
+ },
|
|
};
|
|
};
|
|
return this.$http.put(url, photoFile, headers).catch(err => {
|
|
return this.$http.put(url, photoFile, headers).catch(err => {
|
|
console.log(err);
|
|
console.log(err);
|
|
@@ -532,7 +529,7 @@ export default {
|
|
faceSetToken,
|
|
faceSetToken,
|
|
faceToken,
|
|
faceToken,
|
|
faceCount,
|
|
faceCount,
|
|
- photoName
|
|
|
|
|
|
+ photoName,
|
|
}) {
|
|
}) {
|
|
return this.$http
|
|
return this.$http
|
|
.post("/api/ecs_core/face/saveStudentFace", {
|
|
.post("/api/ecs_core/face/saveStudentFace", {
|
|
@@ -542,7 +539,7 @@ export default {
|
|
faceToken,
|
|
faceToken,
|
|
faceCount,
|
|
faceCount,
|
|
photoName,
|
|
photoName,
|
|
- operator: "客户端工具上传-" + localStorage.getItem("userName")
|
|
|
|
|
|
+ operator: "客户端工具上传-" + localStorage.getItem("userName"),
|
|
})
|
|
})
|
|
.catch(err => {
|
|
.catch(err => {
|
|
console.log(err);
|
|
console.log(err);
|
|
@@ -556,7 +553,7 @@ export default {
|
|
this.returnMsgList.push({
|
|
this.returnMsgList.push({
|
|
success: false,
|
|
success: false,
|
|
fileName,
|
|
fileName,
|
|
- msg
|
|
|
|
|
|
+ msg,
|
|
});
|
|
});
|
|
this.errorNum++;
|
|
this.errorNum++;
|
|
|
|
|
|
@@ -583,7 +580,7 @@ export default {
|
|
this.returnMsgList.push({
|
|
this.returnMsgList.push({
|
|
success: true,
|
|
success: true,
|
|
fileName: path.basename(studentPhotoPath),
|
|
fileName: path.basename(studentPhotoPath),
|
|
- msg: msg
|
|
|
|
|
|
+ msg: msg,
|
|
});
|
|
});
|
|
this.successNum++;
|
|
this.successNum++;
|
|
fs.appendFileSync(
|
|
fs.appendFileSync(
|
|
@@ -597,12 +594,12 @@ export default {
|
|
localStorage.removeItem("key");
|
|
localStorage.removeItem("key");
|
|
localStorage.removeItem("token");
|
|
localStorage.removeItem("token");
|
|
this.$router.push({
|
|
this.$router.push({
|
|
- path: "/login"
|
|
|
|
|
|
+ path: "/login",
|
|
});
|
|
});
|
|
},
|
|
},
|
|
lessThanBaseID(identityNumber) {
|
|
lessThanBaseID(identityNumber) {
|
|
return identityNumber < this.baseID; //字符串比较,从第一个字符比较起
|
|
return identityNumber < this.baseID; //字符串比较,从第一个字符比较起
|
|
- }
|
|
|
|
|
|
+ },
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
returnMsgList200() {
|
|
returnMsgList200() {
|
|
@@ -617,8 +614,8 @@ export default {
|
|
return this.endProcessTime
|
|
return this.endProcessTime
|
|
? moment(this.endProcessTime).format("YYYY-MM-DD HH:mm:ss")
|
|
? moment(this.endProcessTime).format("YYYY-MM-DD HH:mm:ss")
|
|
: "-";
|
|
: "-";
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ },
|
|
|
|
+ },
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
|
|
|