<template>
|
<div>
|
<el-dialog
|
align-center
|
destroy-on-close
|
:close-on-click-modal="false"
|
v-model="teacherDialog"
|
title="教师认证申请"
|
class="myDialog"
|
@close="closeDialog(teacherFormRef)"
|
>
|
<div v-loading="loading" class="box">
|
<div class="body-box">
|
<div class="tipsBox">
|
<p class="main">温馨提示</p>
|
<p>仅限学校本课程任课教师申请;请上传有效在职教师工作证将有助于审核。</p>
|
</div>
|
<el-form
|
ref="teacherFormRef"
|
:model="teacherInfo"
|
:rules="teacherRules"
|
label-width="140px"
|
class="teacherInfo"
|
status-icon
|
>
|
<el-form-item label="当前状态:">
|
<span class="wait" v-if="teacherInfo.state == 'WaitAudit'">等待审核</span>
|
<span class="yes" v-else-if="teacherInfo.state == 'Normal'">已认证</span>
|
<span class="no" v-else-if="teacherInfo.state == 'Reject'"
|
><span>已驳回</span
|
><span @click="lookReason()" class="wait hover" style="margin-left: 20px"
|
>查看原因</span
|
></span
|
>
|
<span class="wait" v-else>待认证</span>
|
</el-form-item>
|
<el-form-item label="学校:" prop="schoolName">
|
<span v-if="!editState">{{ teacherInfo.schoolName || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.schoolName"
|
autocomplete="off"
|
placeholder="请输入学校"
|
/>
|
</el-form-item>
|
<el-form-item label="真实姓名:" prop="fullName">
|
<span v-if="!editState">{{ teacherInfo.fullName || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.fullName"
|
autocomplete="off"
|
placeholder="请输入真实姓名"
|
/>
|
</el-form-item>
|
<el-form-item label="职称:">
|
<span v-if="!editState">{{ teacherInfo.positionalTitle || "-" }}</span>
|
<el-select
|
v-else
|
v-model="teacherInfo.positionalTitle"
|
placeholder="请选择职称"
|
>
|
<el-option
|
v-for="item in teachPosts"
|
:key="item.value"
|
:label="item.name"
|
:value="item.name"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="任教课程:" prop="courseName">
|
<span v-if="!editState">{{ teacherInfo.courseName || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.courseName"
|
autocomplete="off"
|
placeholder="请输入任教课程"
|
/>
|
</el-form-item>
|
<el-form-item label="手机号:" prop="phone">
|
<span v-if="!editState">{{ teacherInfo.phone || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.phone"
|
autocomplete="off"
|
placeholder="请输入手机号"
|
/>
|
</el-form-item>
|
<el-form-item label="座机:" prop="telphone">
|
<span v-if="!editState">{{ teacherInfo.telphone || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.telphone"
|
autocomplete="off"
|
placeholder="请输入座机"
|
/>
|
</el-form-item>
|
<el-form-item label="邮箱:" prop="email">
|
<span v-if="!editState">{{ teacherInfo.email || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.email"
|
autocomplete="off"
|
placeholder="请输入邮箱"
|
/>
|
</el-form-item>
|
<el-form-item label="详细地址:" prop="detailedAddress">
|
<span v-if="!editState">{{ teacherInfo.detailedAddress || "-" }}</span>
|
<el-input
|
v-else
|
v-model="teacherInfo.detailedAddress"
|
autocomplete="off"
|
placeholder="请输入详细地址"
|
/>
|
</el-form-item>
|
<el-form-item label="在职教师工作证:" prop="relevantCertificates">
|
<div class="uploadBox">
|
<div class="fileList">
|
<div class="fileImgBox" v-for="(file, index) in fileList" :key="file">
|
<el-image
|
v-if="file.md5"
|
style="width: 100%; height: 100%"
|
:src="config?.requestCtx + `/file/GetPreViewImage?md5=` + file.md5"
|
:zoom-rate="1.2"
|
:max-scale="7"
|
:min-scale="0.2"
|
:hide-on-click-modal="true"
|
:preview-src-list="showFileList"
|
:initial-index="index"
|
fit="contain"
|
/>
|
<el-icon
|
v-if="editState"
|
@click="handleRemove(file)"
|
color="#F56C6C"
|
style="
|
position: absolute;
|
top: -10px;
|
right: -10px;
|
font-size: 20px;
|
background: #fff;
|
border-radius: 50%;
|
cursor: pointer;
|
"
|
><CircleCloseFilled
|
/></el-icon>
|
</div>
|
<el-upload
|
v-if="editState"
|
class="upload"
|
:http-request="fileUpload"
|
:show-file-list="false"
|
list-type="picture-card"
|
:action="'#'"
|
>
|
<el-icon>
|
<Plus />
|
</el-icon>
|
</el-upload>
|
</div>
|
</div>
|
<div class="grey" style="font-size: 12px">教务处盖章文件、校工卡皆可</div>
|
</el-form-item>
|
</el-form>
|
<div class="agree-msg">
|
<!-- <input
|
:disabled="!editState ? true : false"
|
type="checkbox"
|
class="checkbox"
|
v-model="teacherInfo.agree"
|
/> -->
|
<el-checkbox
|
v-model="teacherInfo.agree"
|
:disabled="!editState ? true : false"
|
></el-checkbox>
|
<span class="agree"
|
>同意<span class="main hover" @click="dialogVisibleTecher = true"
|
>《教师认证服务条款》</span
|
></span
|
>
|
</div>
|
</div>
|
<div class="footer-box">
|
<span class="myDialog-footer" v-if="!loading && editState">
|
<el-button @click="closeDialog(teacherFormRef)"> 取消</el-button>
|
<el-button
|
type="primary"
|
@click="submitBtn(teacherFormRef)"
|
:loading="subLoading"
|
>
|
提交</el-button
|
>
|
</span>
|
</div>
|
</div>
|
</el-dialog>
|
<!-- 教师认证服务条款 -->
|
<el-dialog
|
title="《教师认证服务条款》"
|
v-model="dialogVisibleTecher"
|
:close-on-click-modal="false"
|
width="40%"
|
>
|
<div class="protocolBox" v-html="protocolTxt"></div>
|
<template #footer>
|
<span class="myDialog-footer" v-if="editState">
|
<el-button type="primary" class="btn" @click="dialogVisibleTecher = false"
|
>确 定</el-button
|
>
|
</span>
|
</template>
|
</el-dialog>
|
<!-- 查看原因 -->
|
<el-dialog
|
align-center
|
:close-on-click-modal="false"
|
v-model="dialogReason"
|
title="驳回原因"
|
>
|
<div class="reason" v-if="reasonTxt">
|
{{ reasonTxt }}
|
</div>
|
<div v-else>无</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { reactive, ref, watch, defineEmits, inject, onMounted } from "vue";
|
import type { FormInstance, FormRules } from "element-plus";
|
import { ElMessage } from "element-plus";
|
import tool from "@/assets/js/toolClass.js";
|
import { getTopicMsgCmsItemFile } from "@/assets/js/middleGround/tool.js";
|
import { useUserStore } from "@/store";
|
const userStore = useUserStore();
|
const MG: any = inject("MG");
|
const config: any = inject("config");
|
// 证件验证
|
const valiCertificate = (rule: any, value: any, callback: any) => {
|
if (fileList.value.length == 0) {
|
callback(new Error("请上传相关证件"));
|
} else {
|
callback();
|
}
|
};
|
|
// const validateTelphone = (rule: any, value: any, callback: any) => {
|
// if (value !== "" && !config.reg_telphone.test(value)) {
|
// callback(new Error("请输入正确格式的座机号"));
|
// }
|
// callback();
|
// };
|
|
const validatePhone = (rule: any, value: any, callback: any) => {
|
if (value === "") {
|
callback(new Error("请输入联系电话"));
|
} else {
|
if (!config.reg_tel.test(value)) {
|
callback(new Error("请输入正确格式的电话"));
|
}
|
callback();
|
}
|
};
|
const validateEmail = (rule: any, value: any, callback: any) => {
|
let myreg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
|
if (value === "") {
|
callback(new Error("请输入电子邮箱"));
|
} else {
|
if (!myreg.test(value)) {
|
callback(new Error("请输入正确格式的电子邮箱"));
|
}
|
callback();
|
}
|
};
|
|
const props = defineProps({
|
isShow: Boolean,
|
});
|
|
let teacherDialog = ref(false); //弹窗
|
let loading = ref(false);
|
let subLoading = ref(false);
|
const teachPosts = ref([]);
|
const teacherInfo = reactive({
|
schoolName: "", //学校名称
|
fullName: "", //姓名
|
positionalTitle: "", //职称
|
courseName: "", //任课教程
|
phone: "", //联系电话
|
telphone: "", //座机
|
email: "", //联系邮箱
|
detailedAddress: "", //通讯地址
|
relevantCertificates: [], //相关证件
|
state: "", //审核状态默认待审核
|
agree: false,
|
});
|
const topicMessageList = ref([]);
|
const topicId = ref();
|
const worksInfo = ref([]);
|
const userId = ref();
|
const teacherFormRef = ref<FormInstance>();
|
|
interface TeacherInfo {
|
schoolName: string;
|
fullName: string;
|
courseName: string;
|
telphone: string;
|
phone: string;
|
email: string;
|
detailedAddress: string;
|
relevantCertificates: string[];
|
}
|
const teacherRules = reactive<FormRules<TeacherInfo>>({
|
schoolName: [{ required: true, message: "学校名称不能为空", trigger: "blur" }],
|
fullName: [{ required: true, message: "真实姓名不能为空", trigger: "blur" }],
|
courseName: [{ required: true, message: "任教课程不能为空", trigger: "blur" }],
|
// telphone: [{ validator: validateTelphone, trigger: "blur" }],
|
phone: [{ required: true, validator: validatePhone, trigger: "blur" }],
|
email: [{ required: true, validator: validateEmail, trigger: "blur" }],
|
detailedAddress: [{ required: true, message: "详细地址不能为空", trigger: "blur" }],
|
relevantCertificates: [
|
{ required: true, validator: valiCertificate, trigger: "change" },
|
],
|
});
|
const fileList = ref([]);
|
const editState = ref<boolean>(true);
|
watch(props, (newValue) => {
|
// 统监听props的值变化,动态修改isShow的值
|
teacherDialog.value = newValue.isShow;
|
if (teacherDialog.value) {
|
getpositionalTitle();
|
getAgreement();
|
if (localStorage.getItem(config.tokenKey)) {
|
getUserRole();
|
}
|
}
|
});
|
|
// 获取职称
|
function getpositionalTitle() {
|
const data = {
|
refCodes: ["positionalTitle"],
|
};
|
MG.store.getProductTypeField(data).then((res) => {
|
try {
|
const list = res[0];
|
const options = JSON.parse(list.config).option;
|
teachPosts.value = options;
|
} catch (error) {
|
teachPosts.value = [];
|
}
|
});
|
}
|
|
// 获取登录用户身份
|
function getUserRole() {
|
loading.value = true;
|
MG.identity.getCurrentAppUser().then((res) => {
|
if (res) {
|
getType();
|
userId.value = res.userId;
|
let userInfo = res.infoList.find((item: any) => item.type == "userInfo");
|
let userTypeObj = res.infoList.find((item: any) => item.type == "userType");
|
const userData = {
|
userName: userInfo && userInfo.data ? JSON.parse(userInfo.data).name : "",
|
school: userInfo && userInfo.data ? JSON.parse(userInfo.data).school : "",
|
address: userInfo && userInfo.data ? JSON.parse(userInfo.data).address : "",
|
userType:
|
userTypeObj && userTypeObj.data ? JSON.parse(userTypeObj.data).userType : "",
|
};
|
let teacherRole = res.roleLinks.find((item) => item.role.refCode == "teacher");
|
let teacherInfos = res.infoList.find((item) => item.type == "teacherInfo");
|
let wechatInfo = res.infoList.find((item) => item.type == "WeChat");
|
let studentInfo = res.infoList.find((item) => item.type == "Default");
|
let phoneInfo = res.secretList.find((item) => item.type == "MobilePhone");
|
let emailInfo = res.secretList.find((item) => item.type == "EMail");
|
if (teacherRole && teacherInfos) {
|
userStore.setUserInfo({
|
...userData,
|
...teacherInfos,
|
phoneNumber: phoneInfo?.credential,
|
Email: emailInfo ? emailInfo.credential : JSON.parse(teacherInfos.data).email,
|
icon: wechatInfo?.icon,
|
role: "Teacher",
|
roleId: teacherRole.role.id,
|
userId: res.userId,
|
});
|
} else if (wechatInfo) {
|
userStore.setUserInfo({
|
...userData,
|
...wechatInfo,
|
phoneNumber: phoneInfo?.credential,
|
Email: emailInfo?.credential,
|
role: "Student",
|
userId: res.userId,
|
});
|
} else if (studentInfo) {
|
if (!studentInfo?.fullName) {
|
teacherInfo.fullName = userStore.userInfo!.userName;
|
}
|
userStore.setUserInfo({
|
...userData,
|
...studentInfo,
|
icon: wechatInfo?.icon,
|
phoneNumber: phoneInfo?.credential,
|
Email: emailInfo?.credential,
|
role: "Student",
|
userId: res.userId,
|
});
|
} else if (phoneInfo) {
|
userStore.setUserInfo({
|
...userData,
|
...phoneInfo,
|
name: phoneInfo?.credential,
|
icon: phoneInfo?.icon,
|
phoneNumber: phoneInfo?.credential,
|
role: "Student",
|
userId: res.userId,
|
});
|
}
|
|
teacherInfo.phone = userStore.userInfo!.phoneNumber;
|
teacherInfo.schoolName = userStore.userInfo!.school;
|
teacherInfo.detailedAddress = userStore.userInfo!.address;
|
}
|
});
|
}
|
|
function getType() {
|
const data = {
|
refCodes: ["teacherCertification"],
|
};
|
MG.resource.getCmsTypeByRefCode(data).then((res) => {
|
worksInfo.value = res[0].cmsTypeLinks[0].children;
|
newGetTeacherInfo();
|
});
|
}
|
|
// 文件上传
|
function fileUpload(file) {
|
console.log(file, 2);
|
return new Promise((resolve, reject) => {
|
const isJPG = file.file.type === "image/jpeg" || file.file.type === "image/png";
|
const isLt2M = (0.5 * file.file.size) / 1024 / 1024 < 0.5;
|
if (!isJPG) {
|
ElMessage.error("上传文件只能是 jpg/png 格式!");
|
return reject();
|
}
|
if (!isLt2M) {
|
ElMessage.error("上传文件大小不能超过 500KB!");
|
return reject();
|
}
|
const FileName = file.file.name.split(".")[0];
|
const Extension = file.file.name.split(".")[1];
|
const FileType = file.file.type;
|
let size = 1024;
|
tool
|
.getFileMd5(file.file, size * 1024)
|
.then((e) => {
|
console.log(e, 2);
|
if (!fileList.value.find((item) => item.md5 == e)) {
|
const imgData = new FormData();
|
imgData.append("Md5", e);
|
imgData.append("FileName", FileName);
|
imgData.append("Extension", Extension);
|
imgData.append("FileType", FileType);
|
imgData.append("MetaData", null);
|
imgData.append("file", file.file);
|
MG.file.upload(imgData).then(() => {
|
fileList.value.push({
|
md5: e,
|
linkType: "LinkFile",
|
linkProtectType: "Public",
|
url: config.requestCtx + `/file/GetPreViewImage?md5=` + e,
|
});
|
});
|
} else {
|
ElMessage.error("当前文件已上传,请勿重复操作!");
|
}
|
})
|
.catch((e) => {
|
console.error(e);
|
});
|
});
|
}
|
|
// 证件删除
|
function handleRemove(file) {
|
for (let i = 0; i < fileList.value.length; i++) {
|
if (fileList.value[i].md5 == file.md5) {
|
fileList.value.splice(i, 1);
|
}
|
}
|
}
|
|
// 监听文件列表变化,同步修改展示列表
|
const showFileList = ref([]);
|
watch(
|
fileList,
|
(newValue) => {
|
showFileList.value = newValue.map(
|
(item) => config.requestCtx + `/file/GetPreViewImage?md5=` + item.md5
|
);
|
},
|
{ immediate: true, deep: true }
|
);
|
|
// 关闭弹框,回调父层方法
|
const emit = defineEmits(["dialogChange"]);
|
const closeDialog = (formEl: FormInstance | undefined) => {
|
if (!formEl) return;
|
formEl.resetFields();
|
teacherDialog.value = false;
|
emit("dialogChange", teacherDialog.value);
|
};
|
|
// 教师协议
|
const dialogVisibleTecher = ref(false);
|
const protocolTxt = ref("");
|
const getAgreement = () => {
|
let query = {
|
path: "protocol",
|
fields: {
|
content: [],
|
},
|
};
|
MG.resource.getItem(query).then((res) => {
|
try {
|
const data = res.datas.find(
|
(e) => e.refCode == "teacherCertificationAgreement"
|
);
|
protocolTxt.value = data ? data.content : "暂无协议";
|
} catch (error) {
|
protocolTxt.value = "暂无协议";
|
}
|
});
|
};
|
|
//教师信息
|
function newGetTeacherInfo() {
|
const data = {
|
start: 0,
|
size: 10,
|
topicIdOrRefCode: "teacherRoleApproval",
|
appRefCode: config.appRefCode,
|
sort: {
|
type: "Desc",
|
field: "CreateDate",
|
},
|
};
|
MG.ugc.getTopicMessageList(data).then((res) => {
|
try {
|
fileList.value = [];
|
const resData = res.datas.find((i) => i.appUserCreator.userId === userId.value);
|
if (resData) {
|
if (resData.state == "WaitAudit") {
|
editState.value = false;
|
} else {
|
editState.value = true;
|
}
|
let info = getTopicMsgCmsItemFile(worksInfo.value, resData.cmsItemDataList);
|
teacherInfo.fullName = info.fullName;
|
teacherInfo.schoolName = info.schoolName;
|
teacherInfo.positionalTitle = info.positionalTitle;
|
teacherInfo.courseName = info.courseName;
|
teacherInfo.phone = info.phone;
|
teacherInfo.telphone = info.telphone ? info.telphone : "";
|
teacherInfo.email = info.email;
|
teacherInfo.detailedAddress = info.detailedAddress ? info.detailedAddress : "";
|
teacherInfo.relevantCertificates = info.relevantCertificates;
|
teacherInfo.agree = true;
|
teacherInfo.state = resData.state;
|
topicId.value = resData.id;
|
topicMessageList.value = resData.cmsItemDataList;
|
if (resData.feedBack != null) {
|
reasonTxt.value = JSON.parse(resData.feedBack).reason;
|
}
|
if (teacherInfo.relevantCertificates.length > 0) {
|
if (typeof teacherInfo.relevantCertificates == "object") {
|
teacherInfo.relevantCertificates.forEach((ele) => {
|
let imgObj = {
|
md5: ele.file.md5,
|
linkType: "LinkFile",
|
linkProtectType: "Public",
|
url: config.requestCtx + `/file/GetPreViewImage?md5=` + ele.file.md5,
|
};
|
fileList.value.push(imgObj);
|
});
|
} else {
|
let imgObj = {
|
md5: teacherInfo.relevantCertificates,
|
linkType: "LinkFile",
|
linkProtectType: "Public",
|
url:
|
config.requestCtx +
|
`/file/GetPreViewImage?md5=` +
|
teacherInfo.relevantCertificates,
|
};
|
fileList.value.push(imgObj);
|
}
|
}
|
loading.value = false;
|
} else {
|
loading.value = false;
|
}
|
} catch (error) {
|
loading.value = false;
|
}
|
});
|
}
|
|
//教师认证提交
|
const submitBtn = async (formEl: FormInstance | undefined) => {
|
if (!formEl) return;
|
await formEl.validate((valid, fields) => {
|
if (valid) {
|
if (teacherInfo.agree) {
|
subLoading.value = true;
|
if (topicMessageList.value.length > 0) {
|
let dataRequests = tool.UpdateworksDataBytool(
|
worksInfo.value,
|
topicMessageList.value,
|
teacherInfo,
|
fileList.value
|
);
|
const data = {
|
description: "",
|
icon: "",
|
id: topicId.value,
|
topicIdOrRefCode: "teacherRoleApproval",
|
name: teacherInfo.fullName + "",
|
content: "",
|
state: "WaitAudit",
|
type: "teacherRegister",
|
newDataRequests: dataRequests.newData,
|
updateDataRequests: dataRequests.updateData,
|
delDataRequest: {
|
ids: [],
|
},
|
};
|
let basicInfo = JSON.parse(JSON.stringify(teacherInfo));
|
delete basicInfo.worksInfo;
|
delete basicInfo.state;
|
const userInfo = {
|
requests: [
|
{
|
data: JSON.stringify(basicInfo),
|
name: teacherInfo.fullName + "",
|
type: "newTeacherInfo",
|
},
|
],
|
};
|
MG.identity.setAppUserInfo(userInfo).then((res) => {
|
if (res) {
|
MG.ugc.updateTopicMessage(data).then(() => {
|
if (res !== false) {
|
ElMessage({
|
message: "提交成功!请等待审核...",
|
type: "success",
|
});
|
teacherDialog.value = false;
|
subLoading.value = false;
|
newGetTeacherInfo();
|
} else {
|
subLoading.value = false;
|
}
|
});
|
} else {
|
subLoading.value = true;
|
}
|
});
|
} else {
|
const data = {
|
topicIdOrRefCode: "teacherRoleApproval",
|
name: teacherInfo.fullName + "",
|
content: "",
|
state: "WaitAudit",
|
type: "teacherRegister",
|
cmsTypeRefCode: "teacherCertification",
|
newDataListRequest: tool.worksDataBytool(
|
worksInfo.value,
|
teacherInfo,
|
fileList.value
|
),
|
};
|
|
let basicInfo = JSON.parse(JSON.stringify(teacherInfo));
|
delete basicInfo.worksInfo;
|
delete basicInfo.state;
|
const userInfo = {
|
requests: [
|
{
|
data: JSON.stringify(basicInfo),
|
name: teacherInfo.fullName + "",
|
type: "teacherInfo",
|
},
|
],
|
};
|
MG.identity.setAppUserInfo(userInfo).then((res) => {
|
MG.ugc.newTopicMessage(data).then(() => {
|
if (res !== false) {
|
ElMessage({
|
message: "提交成功!请等待审核...",
|
type: "success",
|
});
|
teacherDialog.value = false;
|
newGetTeacherInfo();
|
subLoading.value = false;
|
} else {
|
subLoading.value = false;
|
}
|
});
|
});
|
}
|
} else {
|
ElMessage({
|
message: "请同意《教师认证服务条款》!",
|
type: "warning",
|
});
|
}
|
}
|
});
|
};
|
|
//原因查看
|
const dialogReason = ref(false);
|
const reasonTxt = ref("");
|
const lookReason = () => {
|
dialogReason.value = true;
|
};
|
defineExpose({ getUserRole });
|
</script>
|
<style lang="less">
|
.myDialog {
|
width: 628px;
|
.el-dialog__body {
|
padding: 0;
|
}
|
.body-box {
|
padding: 10px 20px 40px;
|
height: 80vh;
|
overflow-y: auto;
|
}
|
|
.el-dialog__header {
|
padding: 15px;
|
margin-right: 0;
|
border-bottom: 1px solid #f4f4f4;
|
}
|
.el-dialog__title {
|
font-weight: bold;
|
font-size: 16px;
|
}
|
|
.el-dialog__headerbtn {
|
top: 6px;
|
right: 6px;
|
}
|
|
.footer-box {
|
padding: 15px;
|
border-top: 1px solid #f4f4f4;
|
text-align: right;
|
height: 63px;
|
}
|
|
.myDialog-footer {
|
.el-button {
|
padding: 0 20px;
|
}
|
}
|
}
|
</style>
|
<style lang="less" scoped>
|
.tipsBox {
|
line-height: 24px;
|
padding: 5px;
|
border: 1px solid #019e58;
|
background: rgba(116, 252, 188, 0.1);
|
color: #019e58;
|
text-align: center;
|
width: 86%;
|
margin: 0 auto 20px auto;
|
|
.main {
|
font-weight: bold;
|
text-align: center;
|
}
|
}
|
|
.teacherInfo {
|
.el-select {
|
width: 90%;
|
height: 38px;
|
|
/deep/.el-input__wrapper {
|
height: 38px;
|
}
|
}
|
|
.el-input {
|
width: 90%;
|
height: 38px;
|
}
|
}
|
|
.uploadBox {
|
padding: 10px 0 0 10px;
|
border: 1px solid #e9e9eb;
|
border-radius: 3px;
|
width: 330px;
|
}
|
|
.fileList .upload {
|
display: inline-block;
|
vertical-align: middle;
|
margin-right: 10px;
|
margin-bottom: 10px;
|
}
|
|
.fileImgBox {
|
display: inline-block;
|
position: relative;
|
width: 146px;
|
height: 146px;
|
border-radius: 6px;
|
background: #ddd;
|
margin-right: 10px;
|
margin-bottom: 10px;
|
vertical-align: middle;
|
border: 1px solid #c0ccda;
|
}
|
|
.fileList .fileImgBox:hover {
|
border-color: #019E58;
|
}
|
|
.agree-msg {
|
margin-left: 140px;
|
display: flex;
|
justify-content: flex-start;
|
align-items: center;
|
|
.agree {
|
margin-left: 5px;
|
}
|
|
.term {
|
color: #019E58;
|
}
|
}
|
.reason {
|
word-wrap: break-word;
|
}
|
.protocolBox {
|
height: 500px;
|
overflow-y: auto;
|
}
|
</style>
|