|
@@ -4,9 +4,9 @@
|
|
|
<template #title>
|
|
<template #title>
|
|
|
<div class="title_box">
|
|
<div class="title_box">
|
|
|
<div class="title_box_item">
|
|
<div class="title_box_item">
|
|
|
- <span>添加学生</span>
|
|
|
|
|
|
|
+ <span>{{ lang.ssAddStuTitle }}</span>
|
|
|
<span v-if="boxType == 1" style="font-size: 13px"
|
|
<span v-if="boxType == 1" style="font-size: 13px"
|
|
|
- >(从已有学生中添加)</span
|
|
|
|
|
|
|
+ >({{ lang.ssFromExistL }})</span
|
|
|
>
|
|
>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -25,15 +25,15 @@
|
|
|
<!-- 手动添加学生 -->
|
|
<!-- 手动添加学生 -->
|
|
|
<div class="addcla_box" v-if="addStuType == 1">
|
|
<div class="addcla_box" v-if="addStuType == 1">
|
|
|
<div class="addcla_box_item" v-if="boxType != 2">
|
|
<div class="addcla_box_item" v-if="boxType != 2">
|
|
|
- <span class="addcla_box_item_span">所属班级:</span>
|
|
|
|
|
|
|
+ <span class="addcla_box_item_span">{{ lang.ssBelongClass }}</span>
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model.trim="classInfo.name"
|
|
v-model.trim="classInfo.name"
|
|
|
disabled
|
|
disabled
|
|
|
- placeholder="请输入所属班级"
|
|
|
|
|
|
|
+ :placeholder="lang.Enterclass"
|
|
|
></el-input>
|
|
></el-input>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="addcla_box_item" v-if="boxType == 2">
|
|
<div class="addcla_box_item" v-if="boxType == 2">
|
|
|
- <span class="addcla_box_item_span">所属班级:</span>
|
|
|
|
|
|
|
+ <span class="addcla_box_item_span">{{ lang.ssBelongClass }}</span>
|
|
|
<el-cascader
|
|
<el-cascader
|
|
|
:options="cascaderData"
|
|
:options="cascaderData"
|
|
|
v-model="cascaderDataPath"
|
|
v-model="cascaderDataPath"
|
|
@@ -59,10 +59,10 @@
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="addcla_box_item" style="position: relative">
|
|
<div class="addcla_box_item" style="position: relative">
|
|
|
- <span class="addcla_box_item_span">学生姓名:</span>
|
|
|
|
|
|
|
+ <span class="addcla_box_item_span">{{ lang.StudentName }}:</span>
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model.trim="searchStuName"
|
|
v-model.trim="searchStuName"
|
|
|
- placeholder="请输入学生姓名,多个姓名请用中文逗号(,)分隔"
|
|
|
|
|
|
|
+ :placeholder="lang.ssEnterStuNameMul"
|
|
|
slot="reference"
|
|
slot="reference"
|
|
|
@change="searchStu"
|
|
@change="searchStu"
|
|
|
@focus="popoverVisible = true"
|
|
@focus="popoverVisible = true"
|
|
@@ -83,7 +83,7 @@
|
|
|
<div class="tagtit" v-if="stuname2(item) == 'danger'">
|
|
<div class="tagtit" v-if="stuname2(item) == 'danger'">
|
|
|
<div class="poptag">
|
|
<div class="poptag">
|
|
|
<img src="../../../../assets/stuImg/tishi.svg" alt=""/>
|
|
<img src="../../../../assets/stuImg/tishi.svg" alt=""/>
|
|
|
- <div>您添加的学生“{{ item }}”存在重复姓名。 是否继续添加?</div>
|
|
|
|
|
|
|
+ <div>{{ lang.ssStuNameDup.replace(/\*/g, item) }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="display: flex;justify-content: flex-end;gap: 10px;">
|
|
<div style="display: flex;justify-content: flex-end;gap: 10px;">
|
|
|
<!-- <span>添加</span> -->
|
|
<!-- <span>添加</span> -->
|
|
@@ -97,13 +97,13 @@
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
<div class="search_stu_box_footer">
|
|
<div class="search_stu_box_footer">
|
|
|
- <div>输入学生共{{ searchStuData.length }}人</div>
|
|
|
|
|
|
|
+ <div>{{ lang.ssInputStuCnt.replace(/\*/g, searchStuData.length) }}</div>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
<!-- <el-button size="small" @click="selectNoneStu"
|
|
<!-- <el-button size="small" @click="selectNoneStu"
|
|
|
>取消</el-button
|
|
>取消</el-button
|
|
|
> -->
|
|
> -->
|
|
|
- <div @click="selectNoneStu" class="kbtn">取消</div>
|
|
|
|
|
- <div @click="selectStu" class="kbtn" style="background: #3681FC; color: #E6FFFFFF;">确认</div>
|
|
|
|
|
|
|
+ <div @click="selectNoneStu" class="kbtn">{{ lang.Cancel }}</div>
|
|
|
|
|
+ <div @click="selectStu" class="kbtn" style="background: #3681FC; color: #E6FFFFFF;">{{ lang.Confirm }}</div>
|
|
|
|
|
|
|
|
<!-- <el-button size="small" type="primary" @click="selectStu"
|
|
<!-- <el-button size="small" type="primary" @click="selectStu"
|
|
|
>确定</el-button
|
|
>确定</el-button
|
|
@@ -113,7 +113,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="addcla_box_item">
|
|
<div class="addcla_box_item">
|
|
|
- <span class="addcla_box_item_span">已输入:</span>
|
|
|
|
|
|
|
+ <span class="addcla_box_item_span">{{ lang.ssEntered }}</span>
|
|
|
<div class="selected_stu_box">
|
|
<div class="selected_stu_box">
|
|
|
<!-- <el-tag
|
|
<!-- <el-tag
|
|
|
v-for="(item, index) in selectedStuData"
|
|
v-for="(item, index) in selectedStuData"
|
|
@@ -128,7 +128,7 @@
|
|
|
<div class="tagtit" v-if="stuname(item) == 'danger'">
|
|
<div class="tagtit" v-if="stuname(item) == 'danger'">
|
|
|
<div class="poptag">
|
|
<div class="poptag">
|
|
|
<img src="../../../../assets/stuImg/tishi.svg" alt=""/>
|
|
<img src="../../../../assets/stuImg/tishi.svg" alt=""/>
|
|
|
- <div>您添加的学生“{{ item }}”存在重复姓名。 是否继续添加?</div>
|
|
|
|
|
|
|
+ <div>{{ lang.ssStuNameDup.replace(/\*/g, item) }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="display: flex;justify-content: flex-end;gap: 10px;">
|
|
<div style="display: flex;justify-content: flex-end;gap: 10px;">
|
|
|
<!-- <span>添加</span> -->
|
|
<!-- <span>添加</span> -->
|
|
@@ -154,17 +154,17 @@
|
|
|
v-loading="uploadfileLoading"
|
|
v-loading="uploadfileLoading"
|
|
|
>
|
|
>
|
|
|
<img src="@/assets/stuImg/uploadfile.svg" alt="upload" />
|
|
<img src="@/assets/stuImg/uploadfile.svg" alt="upload" />
|
|
|
- <div style="color: #000">点击或拖拽文件到此处上传</div>
|
|
|
|
|
- <div class="upload-demo-tip">支持格式:xlsx、xls,最多添加70人</div>
|
|
|
|
|
|
|
+ <div style="color: #000">{{ lang.ssUploadClickDrag }}</div>
|
|
|
|
|
+ <div class="upload-demo-tip">{{ lang.ssUploadTip }}</div>
|
|
|
</el-upload>
|
|
</el-upload>
|
|
|
<div style="margin-top: 10px">
|
|
<div style="margin-top: 10px">
|
|
|
- 上传模板:
|
|
|
|
|
|
|
+ {{ lang.ssUploadTempLbl }}
|
|
|
<span class="download-template" @click="downloadTemplate"
|
|
<span class="download-template" @click="downloadTemplate"
|
|
|
- >下载模板</span
|
|
|
|
|
|
|
+ >{{ lang.ssDownloadTemp }}</span
|
|
|
>
|
|
>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="margin-top: 10px">
|
|
<div style="margin-top: 10px">
|
|
|
- 注意:请按照模板格式填写学生信息,避免导入失败
|
|
|
|
|
|
|
+ {{ lang.ssUploadNote }}
|
|
|
</div>
|
|
</div>
|
|
|
<!-- <div style="margin-top: 10px">
|
|
<!-- <div style="margin-top: 10px">
|
|
|
学生列表批量上传需表格需添加“班级”列
|
|
学生列表批量上传需表格需添加“班级”列
|
|
@@ -184,9 +184,9 @@
|
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<template v-if="addStuType == 1">
|
|
<template v-if="addStuType == 1">
|
|
|
<!-- <el-button size="small" @click="closeAllClaAddStu">取消</el-button> -->
|
|
<!-- <el-button size="small" @click="closeAllClaAddStu">取消</el-button> -->
|
|
|
- <div @click="closeAllClaAddStu" class="kbtn">取消</div>
|
|
|
|
|
|
|
+ <div @click="closeAllClaAddStu" class="kbtn">{{ lang.Cancel }}</div>
|
|
|
|
|
|
|
|
- <div @click="addStu" class="kbtn" style="background: #3681FC; color: #E6FFFFFF;">确认</div>
|
|
|
|
|
|
|
+ <div @click="addStu" class="kbtn" style="background: #3681FC; color: #E6FFFFFF;">{{ lang.Confirm }}</div>
|
|
|
|
|
|
|
|
<!-- <el-button size="small" type="primary" @click="addStu"
|
|
<!-- <el-button size="small" type="primary" @click="addStu"
|
|
|
>确认</el-button
|
|
>确认</el-button
|
|
@@ -205,17 +205,16 @@
|
|
|
<img v-if="deltypy == 1" style="width: 20px;" src="../../../../assets/stuImg/tishi.svg" alt="">
|
|
<img v-if="deltypy == 1" style="width: 20px;" src="../../../../assets/stuImg/tishi.svg" alt="">
|
|
|
|
|
|
|
|
<div class="msgContxt">
|
|
<div class="msgContxt">
|
|
|
- <div v-if="deltypy == 0">{{impbox.length ? impbox[0].name : ''}}等{{impbox.length}} 名同学已添加成功</div>
|
|
|
|
|
- <div v-if="deltypy == 1">是否确认上传?</div>
|
|
|
|
|
|
|
+ <div v-if="deltypy == 0">
|
|
|
|
|
+ {{ (impbox.length ? impbox[0].name : '') + lang.ssAddStuSucc.replace(/\*/g, impbox.length) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-if="deltypy == 1">{{ lang.ssConfirmUpload }}?</div>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
|
- <!-- <el-button type="primary" @click="confirmDelStu"
|
|
|
|
|
- >确 认</el-button
|
|
|
|
|
- > -->
|
|
|
|
|
- <div @click="closePop" class="kbtn" v-if="deltypy == 1">取消</div>
|
|
|
|
|
- <div @click="confirmDelStu" class="kbtn" style="background: #3681FC; color: #E3EDFF;">确认</div>
|
|
|
|
|
|
|
+ <div @click="closePop" class="kbtn" v-if="deltypy == 1">{{ lang.Cancel }}</div>
|
|
|
|
|
+ <div @click="confirmDelStu" class="kbtn" style="background: #3681FC; color: #E3EDFF;">{{ lang.Confirm }}</div>
|
|
|
</span>
|
|
</span>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
</div>
|
|
</div>
|
|
@@ -225,7 +224,9 @@
|
|
|
import { v4 as uuidv4 } from "uuid";
|
|
import { v4 as uuidv4 } from "uuid";
|
|
|
import pinyin from "../../../../../node_modules/js-pinyin/index";
|
|
import pinyin from "../../../../../node_modules/js-pinyin/index";
|
|
|
import allClaAddStu from "./allClaAddStu.vue";
|
|
import allClaAddStu from "./allClaAddStu.vue";
|
|
|
|
|
+import { myMixin } from "@/mixins/mixin.js"
|
|
|
export default {
|
|
export default {
|
|
|
|
|
+ mixins: [ myMixin ],
|
|
|
name: "addStu",
|
|
name: "addStu",
|
|
|
props: {
|
|
props: {
|
|
|
boxType: {
|
|
boxType: {
|
|
@@ -282,25 +283,25 @@ export default {
|
|
|
stuListTypeList: [],
|
|
stuListTypeList: [],
|
|
|
tab1: [
|
|
tab1: [
|
|
|
{
|
|
{
|
|
|
- label: "手动输入",
|
|
|
|
|
|
|
+ label: this.lang.ssManualInput,
|
|
|
value: 1,
|
|
value: 1,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- label: "批量上传",
|
|
|
|
|
|
|
+ label: this.lang.ssBatchUp,
|
|
|
value: 2,
|
|
value: 2,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- label: "从已有学生中添加",
|
|
|
|
|
|
|
+ label: this.lang.ssFromExistL,
|
|
|
value: 3,
|
|
value: 3,
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
tab2: [
|
|
tab2: [
|
|
|
{
|
|
{
|
|
|
- label: "手动输入",
|
|
|
|
|
|
|
+ label: this.lang.ssManualInput,
|
|
|
value: 1,
|
|
value: 1,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- label: "批量上传",
|
|
|
|
|
|
|
+ label: this.lang.ssBatchUp,
|
|
|
value: 2,
|
|
value: 2,
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
@@ -408,7 +409,7 @@ export default {
|
|
|
// 上传Excel添加学生
|
|
// 上传Excel添加学生
|
|
|
handleChange(file) {
|
|
handleChange(file) {
|
|
|
if (this.userSuffix == "") {
|
|
if (this.userSuffix == "") {
|
|
|
- this.$message.error("正在获取后缀,请重新上传");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.ssGetSuffixReUp);
|
|
|
this.getUser();
|
|
this.getUser();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -467,7 +468,7 @@ export default {
|
|
|
obj.class = _this.boxType == 2 ? v[_this.lang.Class] : _this.classInfo.name;
|
|
obj.class = _this.boxType == 2 ? v[_this.lang.Class] : _this.classInfo.name;
|
|
|
arr.push(obj);
|
|
arr.push(obj);
|
|
|
}else{
|
|
}else{
|
|
|
- _this.$message.error('请检查上传文件学生姓名列是否填写正确');
|
|
|
|
|
|
|
+ _this.$message.error(_this.lang.ssCheckStuNameCol);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -478,33 +479,19 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (this.boxType == 2 && arr.filter(e => e.class) != arr.length) {
|
|
if (this.boxType == 2 && arr.filter(e => e.class) != arr.length) {
|
|
|
- _this.$message.error('请检查上传文件班级列是否填写正确');
|
|
|
|
|
|
|
+ _this.$message.error(_this.lang.ssCheckClassCol);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (!arr.length) {
|
|
if (!arr.length) {
|
|
|
_this.$message.error(
|
|
_this.$message.error(
|
|
|
- "未能提取上传学生信息,请检查数据格式,使用模板文件格式上传"
|
|
|
|
|
|
|
+ _this.lang.ssParseStuFail
|
|
|
);
|
|
);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
_this.deltypy = 1;
|
|
_this.deltypy = 1;
|
|
|
_this.popBoxdia= true;
|
|
_this.popBoxdia= true;
|
|
|
_this.stuexcel = arr;
|
|
_this.stuexcel = arr;
|
|
|
- // _this.$confirm('是否确认上传?', '提示', {
|
|
|
|
|
- // confirmButtonText: '确定',
|
|
|
|
|
- // cancelButtonText: '取消',
|
|
|
|
|
- // type: 'warning',
|
|
|
|
|
- // }).then(() => {
|
|
|
|
|
-
|
|
|
|
|
- // _this.uploadfileLoading = true;
|
|
|
|
|
- // _this.accUpdate(arr);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- // }).catch(() => {
|
|
|
|
|
- // _this.uploadfileLoading = false;
|
|
|
|
|
- // _this.$message.info('已取消');
|
|
|
|
|
- // });
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
reader.readAsArrayBuffer(f);
|
|
reader.readAsArrayBuffer(f);
|
|
@@ -520,21 +507,21 @@ export default {
|
|
|
addStu() {
|
|
addStu() {
|
|
|
this.selectedStuData = this.selectedStuData.filter((item) => item != "");
|
|
this.selectedStuData = this.selectedStuData.filter((item) => item != "");
|
|
|
if (this.selectedStuData.length == 0) {
|
|
if (this.selectedStuData.length == 0) {
|
|
|
- this.$message.error("请输入学生");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.ssEnterStu);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
if (this.selectedStuData.length > 70) {
|
|
if (this.selectedStuData.length > 70) {
|
|
|
- this.$message.error("一次最多添加70人");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.ssAddStuMax70);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if ((this.boxType == 2 && this.cascaderDataPath.length == 0) || this.classInfo.name == "") {
|
|
if ((this.boxType == 2 && this.cascaderDataPath.length == 0) || this.classInfo.name == "") {
|
|
|
- this.$message.error("请选择所属班级");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.ssSelectBelCla);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (this.userSuffix == "") {
|
|
if (this.userSuffix == "") {
|
|
|
- this.$message.error("正在获取后缀,请重新添加");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.ssGetSuffixReAdd);
|
|
|
this.getUser();
|
|
this.getUser();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -586,21 +573,21 @@ export default {
|
|
|
.then((res) => {
|
|
.then((res) => {
|
|
|
console.log(res, "res");
|
|
console.log(res, "res");
|
|
|
if (res.data.type == 1) {
|
|
if (res.data.type == 1) {
|
|
|
- this.$message.error("有学生手机号码已被注册");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.stunumberregistered);
|
|
|
z = 1;
|
|
z = 1;
|
|
|
}
|
|
}
|
|
|
if (res.data.type == 2) {
|
|
if (res.data.type == 2) {
|
|
|
- this.$message.error("有学生账号已被注册");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.stuaccregistered);
|
|
|
z = 1;
|
|
z = 1;
|
|
|
}
|
|
}
|
|
|
if (res.data.type == 3) {
|
|
if (res.data.type == 3) {
|
|
|
- this.$message.error("有学生学号重复");
|
|
|
|
|
|
|
+ this.$message.error(this.lang.studuplicateIDs);
|
|
|
z = 1;
|
|
z = 1;
|
|
|
}
|
|
}
|
|
|
if (z == 2) {
|
|
if (z == 2) {
|
|
|
console.log("添加成功");
|
|
console.log("添加成功");
|
|
|
this.$message({
|
|
this.$message({
|
|
|
- message: "添加成功",
|
|
|
|
|
|
|
+ message: this.lang.ssAddOk,
|
|
|
type: "success",
|
|
type: "success",
|
|
|
});
|
|
});
|
|
|
this.deltypy = 0;
|
|
this.deltypy = 0;
|
|
@@ -610,11 +597,13 @@ export default {
|
|
|
|
|
|
|
|
// this.selectedStuData = [];
|
|
// this.selectedStuData = [];
|
|
|
this.$emit("getCascaderData");
|
|
this.$emit("getCascaderData");
|
|
|
|
|
+ this.addOp3('1', "", { type: "student_add" }, "success")
|
|
|
}
|
|
}
|
|
|
this.uploadfileLoading = false;
|
|
this.uploadfileLoading = false;
|
|
|
})
|
|
})
|
|
|
.catch((err) => {
|
|
.catch((err) => {
|
|
|
console.error(err);
|
|
console.error(err);
|
|
|
|
|
+ this.addOp3('1', "", { type: "student_add" }, err)
|
|
|
});
|
|
});
|
|
|
},
|
|
},
|
|
|
confirmDelStu(){
|
|
confirmDelStu(){
|