This commit is contained in:
dongruihua
2023-01-12 10:10:53 +08:00
28 changed files with 773 additions and 553 deletions

11
.env
View File

@@ -2,8 +2,10 @@
VUE_APP_BASE=/manage
# api项目基础url
VUE_APP_BASE_API=/manageApi
# 导出url
VUE_APP_PROXY_URL=http://111.231.196.214:30001/
#文件路径
VUE_APP_FILE_PATH=/file/
# 代理url 本地调试,不可以用在其他地方
VUE_APP_PROXY_URL=http://111.231.196.214/manageApi
# 登录url
VUE_APP_LOGIN_URL=https://u-pre.boe.com/web
# boe域名
@@ -18,5 +20,6 @@ VUE_APP_IFRAME_STUDENT_URL=https://u-pre.boe.com/pc/loading
# 课程二维码
VUE_APP_COURSE_STUDY=https://u-pre.boe.com/pc/course/studyindex?id=
# 导入学员模板
VUE_APP_TEMPLATE=https://u-pre.boe.com/upload/
# 导入学员模板
VUE_APP_UP_LOAD_HOMEWORK_TEMPLATE=导入作业成绩 模板-1673450632417.xlsx
VUE_APP_UP_LOAD_STUDENT_TEMPLATE=导入学员模版-1673452888323.xlsx

2
.env.alpine Normal file
View File

@@ -0,0 +1,2 @@
NODE_ENV=alpine
VUE_APP_OUTPUT_DIR=./docker/dist

View File

@@ -1,6 +1,2 @@
NODE_ENV=test
VUE_APP_BASE=/manage
VUE_APP_BASE_API=/manageApi
VUE_APP_OUTPUT_DIR=./docker/dist
VUE_APP_BOE_API_URL=https://u-pre.boe.com

View File

@@ -8,7 +8,8 @@
"build:boe": "vue-cli-service build --mode boe",
"build:release": "vue-cli-service build --mode release",
"build:prod": "vue-cli-service build --mode prod",
"build:test": "vue-cli-service build --mode test"
"build:test": "vue-cli-service build --mode test",
"build:alpine": "vue-cli-service build --mode alpine"
},
"dependencies": {
"@wangeditor/editor": "^5.1.23",

View File

@@ -44,7 +44,7 @@ export default defineComponent({
const store = useStore();
const isLogin = ref(false);
// console.log("router", router.getRoutes(), route);
console.log("版本2.0.4------------");
console.log("版本2.0.5------------");
const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink);
});

View File

@@ -6,7 +6,7 @@
* @FilePath: /fe-manage/src/api/config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { message } from "ant-design-vue";
import {message} from "ant-design-vue";
import axios from "axios";
import router from "@/router";
// import { getCookie } from '../api/method'
@@ -21,7 +21,7 @@ const http = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 1000 * 15,
// headers: { "Content-Type": "multipart/form-data" },
headers: { "Content-Type": "application/json" },
headers: {"Content-Type": "application/json"},
});
http.interceptors.request.use(
@@ -51,18 +51,19 @@ http.interceptors.response.use(
(response) => {
// console.log('response', response)
const {
data: { code, msg },
data: {code, msg, show},
} = response;
// console.log('code', code)
console.log('code', code)
if (code === 0 || code === 200) {
return response;
} else {
if (code === 1000) {
(process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') ? router.push({ path: 'login' }) : (window.location.href = process.env.VUE_APP_LOGIN_URL)
}
console.log("api %o", msg);
}
return response;
if (code === 1000) {
(process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'alpine') ? router.push({path: 'login'}) : (window.location.href = process.env.VUE_APP_LOGIN_URL)
return Promise.reject(response);
}
show && message.error(msg);
console.log("api %o", msg);
return Promise.reject(response);
},
function (error) {
if (error.message == "timeout of 1ms exceeded") {

View File

@@ -27,7 +27,7 @@
style="width: 40px; height: 40px; margin-bottom: 16px"
src="../../assets/images/leveladd/success.png"
/>
<span>作业导出完成请下载本地或去下载中心查看</span>
<span>作业导出完成请下载本地或去下载中心查看</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="clostModal">
@@ -66,7 +66,7 @@ export default {
const downloadHomeWork = () => {
// props.url
if (props.downloadUrl) {
window.open(props.downloadUrl);
window.open(process.env.VUE_APP_FILE_PATH+props.downloadUrl);
}
};
console.log("props", props);

View File

@@ -47,10 +47,14 @@
<div @click="copyUrl" class="codeUrlCopy">复制链接</div>
</div>
<div class="qrm_footer">
<span style="margin-left: 52px">下载二维码</span>
<div class="qrmbtn" @click="downloadQr(200)">
<span
style="color: #387df7; cursor: pointer"
@click="downloadQr(200)"
>下载二维码</span
>
<!-- <div class="qrmbtn" @click="downloadQr(200)">
<div class="btntext">200*200</div>
</div>
</div> -->
<!-- <div class="qrmbtn" @click="downloadQr(200)">
<div class="btntext">400*400</div>
</div>
@@ -294,6 +298,7 @@ export default {
.qrm_footer {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 44px;
.qrmbtn {
width: 80px;
@@ -303,7 +308,7 @@ export default {
justify-content: center;
border-radius: 4px;
border: 1px solid #387df7;
margin-left: 16px;
// margin-left: 16px;
cursor: pointer;
.btntext {
color: #387df7;

View File

@@ -18,7 +18,7 @@
<div class="main">
<div class="minatitl">
<div class="up1">请下载</div>
<a class="up2" :href="template" style="course: pointer">模板</a>
<a class="up2" :href="template" target="_blank" style="cursor: pointer">模板</a>
<div class="up1">按要求填写数据并导入</div>
</div>
<div class="upload">
@@ -31,13 +31,35 @@
name="uploadFile"
:multiple="false"
@change="handleChange"
:data=" courseType==1?{
stageId: Number(courseId),
type: 3
}:{
targetId: Number(courseId),
type: 3
}"
:data="
courseType == 1
? {
targetId: Number(courseId),
type: 3,
userId: userId,
userName: userName,
}
: courseType == 3
? {
targetId: Number(courseId),
type: 1,
userId: userId,
userName: userName,
}
: courseType == 4
? {
targetId: Number(courseId),
type: 2,
userId: userId,
userName: userName,
}
: {
targetId: Number(courseId),
type: 3,
userId: userId,
userName: userName,
}
"
:showUploadList="false"
>
<p class="ant-upload-drag-icon">
@@ -53,33 +75,61 @@
<div class="tipz">支持扩展名.xls/.xlsx</div>
</div> -->
<div class="loadstate">
<div v-if="uploadpercent!==-1" class="loadborder">
<div v-if="uploadpercent !== -1" class="loadborder">
<div class="content">
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div v-if="uploadErr" class="stateloading" style="color:red;">上传失败</div>
<div v-else class="stateloading">{{uploadpercent==100?"上传成功":"正在上传"}}</div>
<div class="tit">{{ fileName }}</div>
<div
v-if="uploadErr"
class="stateloading"
style="color: red"
>
上传失败
</div>
<div v-else class="stateloading">
{{ uploadpercent == 100 ? "上传成功" : "正在上传" }}
</div>
</div>
<div class="prog">
<div class="inprogloading" :style="{width:uploadpercent==-1?0:uploadpercent+'%', background:uploadErr?'#ff7474':'#35ae69'}"></div>
<div
class="inprogloading"
:style="{
width: uploadpercent == -1 ? 0 : uploadpercent + '%',
background: uploadErr ? '#ff7474' : '#35ae69',
}"
></div>
</div>
</div>
<div class="curloading">
<div class="cur">{{uploadpercent==-1?0:uploadpercent}}%</div>
<div class="cancel" style="margin-left: 20px;cursor: pointer;" @click="removeUpload">删除</div>
<div class="cur">
{{ uploadpercent == -1 ? 0 : uploadpercent }}%
</div>
<div
class="cancel"
style="margin-left: 20px; cursor: pointer"
@click="removeUpload"
>
删除
</div>
<div class="cancel" style="margin-left: 15px"></div>
</div>
<div v-if="errNum!==0" class="defeat">
<div class="detext" @click="downloadEeeorData">下载失败数据</div>
<div v-if="errNum !== 0" class="defeat">
<div class="detext" @click="downloadEeeorData">
下载失败数据
</div>
</div>
</div>
</div>
<div v-if="showBottomBar" :class="errNum==0?'succebox':'defeatbox'">
<div
v-if="showBottomBar"
:class="errNum == 0 ? 'succebox' : 'defeatbox'"
>
<div class="lefimg"></div>
<div class="tacl">{{succNum}}条数据导入成功{{errNum}}条数据导入失败</div>
<div class="tacl">
{{ succNum }}条数据导入成功{{ errNum }}条数据导入失败
</div>
</div>
<!-- <div class="loadborder">
@@ -87,7 +137,7 @@
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="tit">{{ fileName }}</div>
<div class="statedefeat">上传失败</div>
</div>
<div class="prog">
@@ -113,7 +163,7 @@
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="tit">{{ fileName }}</div>
<div class="statesucce">上传成功</div>
</div>
<div class="prog">
@@ -151,6 +201,7 @@ import { reactive, toRefs } from "vue";
import { message } from "ant-design-vue";
import * as api from "../../api/index1";
import { BATCH_IMPORT_SCORE } from "@/api/config";
import { useStore } from "vuex";
export default {
name: "ImpStu",
props: {
@@ -168,21 +219,26 @@ export default {
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
template: process.env.VUE_APP_TEMPLATE + "导入学员模版-1672998102528.xlsx",
importStudent: process.env.VUE_APP_BASE_API + "admin/student/importStudent",
template: process.env.VUE_APP_FILE_PATH + process.env.VUE_APP_UP_LOAD_STUDENT_TEMPLATE,
importStudent:
process.env.VUE_APP_BASE_API + "/admin/student/importStudent",
timers: "", // 定时器,用于清空定时器使用
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
uploadpercent: -1,
uploadErr: false, //上传失败
addLoading: false,
fileList: [],
fileList: [],
succNum: 0, //成功数据数
errNum: 0, //失败数据数
downloadErrUrl: '',
downloadErrUrl: "",
showBottomBar: false, // 显示底部成功条数和失败条数
locationHref: location.href.indexOf('http://') !== -1 ? 'http://111.231.196.214:12016/' : location.href.slice(0, location.href.indexOf('/m')) + '/upload/'
userId: store.state.userInfo.id,
userName: store.state.userInfo.realName,
fileName: "",
});
const closeDrawer = () => {
clearInterval(state.timers);
state.fileList = [];
@@ -201,19 +257,20 @@ export default {
const afterVisibleChange = (bool) => {
console.log("state", bool);
console.log("store", store.state.userInfo);
};
//上传文件
const handleChange = (info) => {
console.log("info", info);
if(info){
var FileExt = info.file.name.replace(/.+\./, "");
if (['xls','xlsx'].indexOf(FileExt.toLowerCase()) === -1){
if (info) {
var FileExt = info.file.name.replace(/.+\./, "");
if (["xls", "xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
state.fileList = [];
state.uploadpercent = -1;
message.destroy()
message.error("请上传正确的文件格式")
return
state.uploadpercent = -1;
message.destroy();
message.error("请上传正确的文件格式");
return;
}
}
@@ -226,59 +283,58 @@ export default {
console.log(info.file, info.fileList);
}
if (status === "done") {
console.log('上传成功返回的UUID', info.file.response.data)
console.log('上传成功返回的UUID----->', info)
console.log("上传成功返回的UUID", info.file.response.data);
console.log("上传成功返回的UUID----->", info);
console.log("我是导入学员接口传递的参数", {
uploadFile: info.file.originFileObj,
targetId: props.courseId,
type: 3
})
type: 3,
});
state.fileName = info.file.name;
let i = 0;
state.timers = setInterval(() => {
let uid = info.file.response.data;
api
.getImportStatus(uid)
.then((res) => {
console.log("查询导入状态", res);
if (res.data.code === 200) {
if (res.data.data.status !== "START") {
i++;
if (i === 1) {
message.destroy();
message.success(`${info.file.name}上传成功`);
state.showBottomBar = true;
state.addLoading = false;
state.isAddStudent = true;
}
state.succNum = res.data.data.successNum;
state.errNum = res.data.data.failedNum;
state.downloadErrUrl = res.data.data.url;
clearInterval(state.timers);
let uid = info.file.response.data;
api
.getImportStatus(uid)
.then((res) => {
console.log("查询导入状态", res);
if (res.data.code === 200) {
if (res.data.data.status !== "START") {
i++;
if (i === 1) {
message.destroy();
message.success(`${info.file.name}上传成功`);
state.showBottomBar = true;
state.addLoading = false;
state.isAddStudent = true;
}
state.succNum = res.data.data.successNum;
state.errNum = res.data.data.failedNum;
state.downloadErrUrl = res.data.data.url;
clearInterval(state.timers);
}
})
.catch((err) => {
clearInterval(state.timers);
state.showBottomBar = true;
state.addLoading = false;
console.log("查询导入状态失败", err);
});
}
})
.catch((err) => {
clearInterval(state.timers);
state.showBottomBar = true;
state.addLoading = false;
console.log("查询导入状态失败", err);
});
}, 500);
} else if (status === "error") {
state.addLoading = false;
state.uploadErr = true;
message.error(`${info.file.name}上传失败`);
}
};
// 下载失败数据
const downloadEeeorData = () => {
console.log(state.locationHref + state.downloadErrUrl)
if(state.downloadErrUrl!==""){
window.open(state.locationHref + state.downloadErrUrl)
if (state.downloadErrUrl !== "") {
window.open(process.env.VUE_APP_FILE_PATH + state.downloadErrUrl);
}
}
};
//删除
const removeUpload = () => {
@@ -301,7 +357,7 @@ export default {
handleChange,
BATCH_IMPORT_SCORE,
downloadEeeorData,
removeUpload
removeUpload,
};
},
};

View File

@@ -20,7 +20,7 @@
<div class="main">
<div class="minatitl">
<div class="up1">请下载</div>
<div class="up2">模板</div>
<div class="up2" @click="downTemplate" style="cursor:pointer">模板</div>
<div class="up1">按要求填写数据并导入</div>
</div>
<div class="upload">
@@ -36,7 +36,7 @@
:showUploadList="false"
:data="{
type: type,
targetid: Number(id),
targetId: Number(id),
}"
>
<p class="ant-upload-drag-icon">
@@ -60,7 +60,7 @@
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="tit">{{ fileName }}</div>
<div class="stateloading">正在上传</div>
</div>
<a-progress :percent="uploadpercent" />
@@ -80,7 +80,7 @@
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="tit">{{ fileName }}</div>
<div class="statedefeat">上传失败</div>
</div>
<a-progress :percent="uploadpercent" />
@@ -115,7 +115,7 @@
<div class="img"></div>
<div class="timebox">
<div class="timetop">
<div class="tit">京东方商业模型.xls</div>
<div class="tit">{{ fileName }}</div>
<div class="statesucce">上传成功</div>
</div>
<a-progress :percent="uploadpercent" />
@@ -191,6 +191,7 @@ import { reactive, toRefs } from "vue";
import { message } from "ant-design-vue";
import * as api from "../../api/index1";
import { BATCH_IMPORT_SCORE } from "@/api/config";
import { useStore } from "vuex";
export default {
name: "EScore",
props: {
@@ -213,6 +214,7 @@ export default {
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
fileType: ["xls", "xlsx"],
importHomeWork:
@@ -228,6 +230,9 @@ export default {
location.href.indexOf("http://") !== -1
? "http://111.231.196.214:12016/"
: location.href.slice(0, location.href.indexOf("/m")) + "/upload/",
userId: store.state.userInfo.id,
userName: store.state.userInfo.realName,
fileName: "",
});
const closeDrawer = () => {
ctx.emit("update:eScorevisible", false);
@@ -261,6 +266,7 @@ export default {
// console.log(info.file, info.fileList);
}
if (status === "done") {
state.fileName = info.file.name;
let i = 0;
let timer = setInterval(() => {
let uid = info.file.response.data;
@@ -346,15 +352,19 @@ export default {
const downloadEeeorData = () => {
console.log(state.locationHref + state.downloadErrUrl);
if (state.downloadErrUrl !== "") {
window.open(state.locationHref + state.downloadErrUrl);
window.open(process.env.VUE_APP_FILE_PATH + state.downloadErrUrl);
}
};
function downTemplate(){
window.open(process.env.VUE_APP_FILE_PATH + process.env.VUE_APP_UP_LOAD_HOMEWORK_TEMPLATE)
}
return {
...toRefs(state),
afterVisibleChange,
closeDrawer,
handleChange,
downTemplate,
BATCH_IMPORT_SCORE,
beforeUpload,
handleUpload,

View File

@@ -100,7 +100,7 @@
>
<div class="asstype">描述</div>
<div style="color: rgba(51, 51, 51, 1); font-size: 14px">
{{ values?.assessmentQaDescribe }}
{{ values?.content }}
</div>
</div>
</div>
@@ -118,8 +118,8 @@
</div>
<div class="lastbox">
<div class="sorcetext">非常不满意</div>
<div class="sorcebox" v-for="(iittem, index) in [1,2,3,4,5,6,7,8,9,10]" :key="index">
<div v-if="iittem >= values.assessmentMinScore && iittem <= values.assessmentMaxScore" :class="index+1 == values.selectAnswer ? 'numbox' : 'numbox1'">{{ iittem }}</div>
<div class="sorcebox" v-for="(iittem, index) in [1,2,3,4,5,6,7,8,9,10] " :key="index">
<div v-if="iittem >= values.assessmentMinScore && iittem <= values.assessmentMaxScore" :class="(iittem + 1 - values.assessmentMinScore) == values.selectAnswer ? 'numbox' : 'numbox1'">{{ iittem }}</div>
</div>
<div class="sorcetext">非常满意</div>
</div>
@@ -195,7 +195,7 @@ export default {
console.log('我是传递过来的参数2', props.basicdata)
api.QueryAssessmentDetail({
"assessmentSubmitId": props.datasource.assessmentSubmitId,
"courseId": props.datasource.courseId,
"courseId": props.basicdata.assessmentId,
"studentId": props.datasource.studentId
}).then(res=>{
console.log(res)
@@ -225,6 +225,7 @@ export default {
};
},
};
</script>
<style lang="scss">

View File

@@ -105,10 +105,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
</template>
@@ -405,8 +406,8 @@ export default {
// 导出数据
function exportTaskStu() {
window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&status=${state.name}&studentName=${state.projectName}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&status=${state.name}&studentName=${state.projectName}`)
}
return {

View File

@@ -108,10 +108,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
<!-- 导出成绩抽屉 -->
<EScore v-model:eScorevisible="eScorevisible" />
@@ -414,7 +415,7 @@ export default {
{/* 导出数据 */}
function exportData() {
window.open(`${process.env.VUE_APP_PROXY_URL}admin/exam/manage/exportExam?chapterId=${props.datasource.chapterId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&type=${1}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?chapterId=${props.datasource.chapterId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&type=${1}`)
{/* api.ExportExam({
"chapterId": props.datasource.chapterId,
"targetId": props.datasource.routerId,

View File

@@ -30,7 +30,9 @@
: "-"
}}
</div>
<div class="endtime" style="margin-left: 64px">签到时间14:00</div>
<div class="endtime" style="margin-left: 64px">
允许签到时段{{ beginTime }}~{{ endTime }}
</div>
</div>
<div class="search">
@@ -107,7 +109,7 @@
<div class="wz">导出数据</div>
</div>
</div>
<div class="line">
<!-- <div class="line">
<div class="inline">
<div class="left">
<div class="img"></div>
@@ -120,7 +122,7 @@
<div class="right" @click="clearLine">清空</div>
</div>
</div>
<!-- <div class="pad"></div> -->
<div class="pad"></div> -->
<div class="tableBox" style="margin-top: 30px">
<a-table
@@ -171,10 +173,11 @@
/>
</div> -->
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
<!-- 二维码签到弹窗 -->
@@ -206,11 +209,11 @@
<span>您确定要批量签到吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="closeCopyModal">取消</div>
<div class="del_btn btn1" @click="closeCopyModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="batchSign">确定</div>
<div class="del_btn btn2" @click="batchSign">
<div class="btnText">确定</div>
</div>
</div>
</div>
@@ -234,6 +237,7 @@ import SignQR from "../SignQR.vue";
import * as api from "../../../api/index1";
import TwoDimensionalCode from "../../../components/TwoDimensionalCode";
import { message } from "ant-design-vue";
import { toDate } from "../../../api/method";
export default {
name: "FaceManage",
components: {
@@ -341,10 +345,13 @@ export default {
codeIndex: null,
codeInfo: null, //二维码内容
// selectOption: [],
beginTime: null, //签到开始时间
endTime: null, //签到结束时间
});
const afterVisibleChange = (bol) => {
if (bol == true) {
getStudent();
isSignClick();
}
};
//考勤
@@ -395,11 +402,16 @@ export default {
// userName: "",
};
api
.attendanceSign(obj, (res) => {
.attendanceSign(obj)
.then((res) => {
console.log("签到结果", res, obj);
if (res.data.code === 200) {
message.destroy();
message.success("批量签到成功");
state.copyModal = false;
state.tableDataTotal = -1;
state.selectedRowKeys = [];
state.selectedStudents = [];
getStudent();
}
})
@@ -425,8 +437,8 @@ export default {
}&type=${1}`,
};
console.log("codeInfo", state.codeInfo);
state.codeIndex = 1;
state.codeType = 2;
state.codeIndex = 0;
state.codeType = 1;
};
const onSelectChange = (selectedRowKeys, e) => {
@@ -565,12 +577,19 @@ export default {
},
{
title: "签到时间",
dataIndex: "cur",
key: "cur",
dataIndex: "signTime",
key: "signTime",
width: 110,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span>{text.record.signTime ? text.record.signTime : "-"}</span>
</div>
);
},
},
// {
// title: "签退时间",
@@ -582,21 +601,42 @@ export default {
// },
{
title: "考勤",
dataIndex: "time",
key: "time",
dataIndex: "signStatus",
key: "signStatus",
width: 50,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
// console.log("text", text);
return (
<div class="racona">
<span>
{text.record.signStatus
? "签到"
: text.record.leaveStatus
? "请假"
: "-"}
</span>
</div>
);
},
},
{
title: "签到状态",
dataIndex: "state",
key: "state",
dataIndex: "signStatus",
key: "signStatus",
width: 50,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span>{text.record.signStatus ? "正常" : "异常"}</span>
</div>
);
},
},
{
title: "考勤情况",
@@ -611,69 +651,73 @@ export default {
customRender: (text) => {
return (
<div class="opa">
<a-radio-group name="radioGroup">
<a-radio
value="1"
checked={text.record.signIn}
onChange={(e) => {
console.log("点击签到", e);
let obj = {
courseId: Number(props.projectTaskInfo.courseId),
projectId: Number(props.projectTaskInfo.projectId),
// routerId: Number(props.projectTaskInfo.projectId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.projectTaskInfo.projectTaskId),
taskType: Number(props.projectTaskInfo.type),
type: 1,
// userName: "",
};
api
.attendanceSign(obj, (res) => {
console.log("签到结果", res, obj, e);
if (res.data.code === 200) {
text.record.signIn = true;
}
})
.catch((err) => {
console.log("签到失败", err, obj);
text.record.signIn = false;
});
}}
>
签到
</a-radio>
<a-radio
value="2"
checked={text.record.leave}
onChange={(e) => {
console.log("点击请假", e, props.datasource);
let obj = {
courseId: Number(props.projectTaskInfo.courseId),
projectId: Number(props.projectTaskInfo.projectId),
// routerId: Number(props.projectTaskInfo.projectId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.projectTaskInfo.projectTaskId),
taskType: Number(props.projectTaskInfo.type),
type: 1,
};
api
.attendanceLeave(obj, (res) => {
console.log("请假结果", res, obj, e);
if (res.data.code === 200) {
text.record.leave = true;
}
})
.catch((err) => {
console.log("请假结果", err, obj);
text.record.leave = false;
});
}}
>
请假
</a-radio>
</a-radio-group>
<a-radio
value="1"
checked={text.record.signStatus}
onChange={(e) => {
console.log("点击签到", e);
let obj = {
courseId: Number(props.projectTaskInfo.courseId),
projectId: Number(props.projectTaskInfo.projectId),
// routerId: Number(props.projectTaskInfo.projectId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.projectTaskInfo.projectTaskId),
taskType: Number(props.projectTaskInfo.type),
type: 1,
// userName: "",
};
api
.attendanceSign(obj)
.then((res) => {
console.log("签到结果", res, obj, e);
if (res.data.code === 200) {
text.record.signStatus = true;
state.tableDataTotal = -1;
getStudent();
}
})
.catch((err) => {
console.log("签到失败", err, obj);
text.record.signStatus = false;
});
}}
>
签到
</a-radio>
<a-radio
value="2"
checked={text.record.leaveStatus}
onChange={(e) => {
console.log("点击请假", e, props.projectTaskInfo);
let obj = {
courseId: Number(props.projectTaskInfo.courseId),
projectId: Number(props.projectTaskInfo.projectId),
// routerId: Number(props.projectTaskInfo.projectId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.projectTaskInfo.projectTaskId),
taskType: Number(props.projectTaskInfo.type),
type: 1,
};
api
.attendanceLeave(obj)
.then((res) => {
console.log("请假结果", res, obj, e);
if (res.data.code === 200) {
text.record.leaveStatus = true;
state.tableDataTotal = -1;
getStudent();
}
})
.catch((err) => {
console.log("请假结果", err, obj);
text.record.leaveStatus = false;
});
}}
>
请假
</a-radio>
{/**
<a-checkbox
@@ -709,7 +753,7 @@ export default {
<a-checkbox
checked={text.record.leave}
onChange={(e) => {
console.log("点击请假", e, props.datasource);
console.log("点击请假", e, props.projectTaskInfo);
let obj = {
courseId: Number(props.projectTaskInfo.courseId),
projectId: Number(props.projectTaskInfo.projectId),
@@ -762,7 +806,7 @@ export default {
pid: props.projectTaskInfo.projectId,
// status: Number(state.name),
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
});
api
.AssessmentManagementMessage({
@@ -773,7 +817,7 @@ export default {
pid: props.projectTaskInfo.projectId,
// status: Number(state.name),
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
taskType: props.projectTaskInfo.type,
})
.then((res) => {
@@ -822,10 +866,10 @@ export default {
console.log("props.projectTaskInfo", props.projectTaskInfo);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?currentStageId=${
props.projectTaskInfo.stageId
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskType=0`
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskType=2&thirdType=2`
);
// api
// .exportTaskStudent({
@@ -856,7 +900,42 @@ export default {
getStudent();
}
};
// 计算签到时间
const isSignClick = () => {
console.log("props.projectTaskInfo.startTime", props.projectTaskInfo);
let beginTime = new Date(props.projectTaskInfo.startTime).getTime();
let endTime = !props.projectTaskInfo.afterStart
? new Date(props.projectTaskInfo.endTime).getTime()
: new Date(props.projectTaskInfo.startTime).getTime();
console.log("beginTimeendTime", beginTime, endTime);
if (
props.projectTaskInfo.beforeStart &&
props.projectTaskInfo.afterStart
) {
//有开始前有开始后
beginTime = beginTime - props.projectTaskInfo.beforeStart * 60 * 1000;
endTime = endTime + props.projectTaskInfo.afterStart * 60 * 1000;
console.log("1111");
} else if (
props.projectTaskInfo.beforeStart &&
!props.projectTaskInfo.afterStart
) {
//只有开始前无开始后
beginTime = beginTime - props.projectTaskInfo.beforeStart * 60 * 1000;
console.log("11112222");
} else if (
!props.projectTaskInfo.beforeStart &&
props.projectTaskInfo.afterStart
) {
//无开始前有开始后
endTime = endTime + props.projectTaskInfo.afterStart * 60 * 1000;
console.log("1111333");
}
state.beginTime = toDate(beginTime / 1000, "Y/M/D h:m:s");
state.endTime = toDate(endTime / 1000, "Y/M/D h:m:s");
console.log("beginTime,endTime", state.beginTime, state.endTime);
};
return {
...toRefs(state),
selectProjectName,

View File

@@ -68,7 +68,7 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!-- <div class="btn btn1" style="margin-right: 20px" @click="godie">
<!-- <div class="btn btn1" style="margin-right: 20px" @click="godie">
<div class="img1"></div>
<div class="wz">催促学习</div>
</div>
@@ -76,8 +76,8 @@
<div class="btn btn2" @click="allStuOver">
<div class="wz">批量标注完成</div>
</div>
<div class="btn btn2">
<div class="wz" @click="showEntryScore">批量录入成绩</div>
<div class="btn btn2" @click="showEntryScore">
<div class="wz">批量录入成绩</div>
</div>
<div class="btn btn2" @click="exportTaskStu">
<div class="img2"></div>
@@ -87,7 +87,7 @@
<div class="wz">导出作业</div>
</div>
</div>
<div class="line">
<!-- <div class="line">
<div class="inline">
<div class="left">
<div class="img"></div>
@@ -100,13 +100,15 @@
<div class="right" @click="clearLine">清空</div>
</div>
</div>
-->
<div class="tableBox" style="margin-top: 20px; margin-bottom: 100px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 900 }"
:scroll="{ x: 1300 }"
@expand="expandTable"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys,
@@ -129,10 +131,12 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
-->
</div>
</a-drawer>
<!-- 批量标注完成 -->
@@ -161,7 +165,12 @@
v-model:getStudent="getStudent"
/>
<!-- 录入成绩抽屉 -->
<entry-scores v-model:Evisible="Evisible" />
<EScore
v-model:eScorevisible="Evisible"
:type="1"
:id="projectTaskInfo?.projectTaskId"
v-model:searchTaskList="searchTaskList"
/>
<!-- 查看作业抽屉 -->
<CKWork v-model:CWvisible="CWvisible" />
<!-- 查看答卷抽屉 -->
@@ -180,14 +189,14 @@ import { message } from "ant-design-vue";
import ASOver from "../AllStuOver.vue";
import CKWork from "../CheckWork.vue";
import CQue from "../CheckQue.vue";
import EntryScores from "../EntryScores.vue";
import EScore from "../ExportScore.vue";
// import * as api from "../../../api/index";
import * as api from "../../../api/index1";
import ExportHomeWork from "../../Modals/ExportHomeWork.vue";
export default {
name: "ProjectFaceTaskManage",
components: {
EntryScores,
EScore,
CKWork,
CQue,
ASOver,
@@ -235,11 +244,11 @@ export default {
value: "1",
label: "已完成",
},
{
id: 2,
value: "2",
label: "进行中",
},
// {
// id: 2,
// value: "2",
// label: "进行中",
// },
],
selectedRowKeys: [],
@@ -265,7 +274,7 @@ export default {
title: "工号",
dataIndex: "studentUserNo",
key: "studentUserNo",
width: 50,
width: '15%',
align: "left",
className: "h head",
customRender: (text) => {
@@ -282,8 +291,8 @@ export default {
title: "姓名",
dataIndex: "studentName",
key: "studentName",
width: 50,
align: "left",
width: '10%',
align: "center",
className: "h head",
customRender: (text) => {
return (
@@ -299,7 +308,7 @@ export default {
title: "所在部门",
dataIndex: "studentDepartName",
key: "studentDepartName",
width: 60,
width: '15%',
align: "center",
className: "h",
ellipsis: true,
@@ -319,7 +328,7 @@ export default {
title: "所在岗位",
dataIndex: "studentJobName",
key: "studentJobName",
width: 60,
width: '10%',
align: "center",
ellipsis: true,
className: "h",
@@ -339,7 +348,7 @@ export default {
title: "作业成绩",
dataIndex: "workScore",
key: "workScore",
width: 60,
width: '10%',
align: "center",
ellipsis: true,
className: "h",
@@ -359,7 +368,7 @@ export default {
title: "考试成绩",
dataIndex: "examinationScore",
key: "examinationScore",
width: 60,
width: '10%',
align: "center",
ellipsis: true,
className: "h",
@@ -380,7 +389,7 @@ export default {
title: "评分",
dataIndex: "assessmentScore",
key: "assessmentScore",
width: 60,
width: '10%',
align: "center",
ellipsis: true,
className: "h",
@@ -401,7 +410,7 @@ export default {
title: "任务状态",
dataIndex: "finishStatus",
key: "finishStatus",
width: 60,
width: '10%',
align: "center",
ellipsis: true,
className: "h",
@@ -422,7 +431,7 @@ export default {
);
},
},
{
{/**
title: "操作",
dataIndex: "operation",
key: "operation",
@@ -487,7 +496,8 @@ export default {
</div>
);
},
},
*/ },
],
exportHomeWorkV: false,
downloadUrl: null,
@@ -607,9 +617,9 @@ export default {
currentStageId: props.projectTaskInfo.stageId,
type: 1,
pid: props.projectTaskInfo.projectId,
status: Number(state.projectName),
status: state.projectName,
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
});
api
.AssessmentManagementMessage({
@@ -618,9 +628,9 @@ export default {
currentStageId: props.projectTaskInfo.stageId,
type: 1,
pid: props.projectTaskInfo.projectId,
status: Number(state.projectName),
status: state.projectName,
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
taskType: props.projectTaskInfo.type,
})
.then((res) => {
@@ -671,10 +681,9 @@ export default {
console.log("props.projectTaskInfo", props.projectTaskInfo);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${
props.projectTaskInfo.stageId
}&type=${1}&pid=${props.projectTaskInfo.projectId}taskType=2`
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskType=2`
);
// api
// .exportTaskStudent({
@@ -707,12 +716,12 @@ export default {
api
.exportHomeWork(obj)
.then((res) => {
console.log("导出作业", JSON.parse(res.data).data);
if (JSON.parse(res.data).code === 200) {
message.destroy();
message.success("导出作业成功");
console.log("导出作业",res.data.data);
if (res.data.code === 200) {
//message.destroy();
//message.success("导出作业成功");
state.exportHomeWorkV = true;
state.downloadUrl = JSON.parse(res.data).data;
state.downloadUrl = res.data.data;
}
})
.catch((err) => {
@@ -726,8 +735,7 @@ export default {
console.log("props.projectTaskInfo", props.projectTaskInfo);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportHomeWork?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportHomeWork?currentStageId=${
props.projectTaskInfo.stageId
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskId=${
props.projectTaskInfo.projectTaskId

View File

@@ -99,7 +99,7 @@
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 900 }"
:scroll="{ x: 1300 }"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys,
@@ -122,10 +122,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1">取消</button>
<button class="btn2">确定</button>
</div>
</div>-->
</div>
</a-drawer>
@@ -204,11 +205,11 @@ export default {
value: "0",
label: "未开始",
},
{
id: 2,
value: "2",
label: "进行中",
},
// {
// id: 2,
// value: "2",
// label: "进行中",
// },
{
id: 3,
value: "1",
@@ -257,7 +258,7 @@ export default {
dataIndex: "studentName",
key: "studentName",
width: 50,
align: "left",
align: "center",
className: "h head",
customRender: (text) => {
return (
@@ -393,15 +394,15 @@ export default {
);
},
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: 100,
align: "center",
ellipsis: true,
className: "h",
},
// {
// title: "操作",
// dataIndex: "operation",
// key: "operation",
// width: 100,
// align: "center",
// ellipsis: true,
// className: "h",
// },
],
exportHomeWorkV: false,
downloadUrl: null,
@@ -502,9 +503,9 @@ export default {
currentStageId: props.projectTaskInfo.stageId,
type: 1,
pid: props.projectTaskInfo.projectId,
status: Number(state.projectName),
status: state.projectName,
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
taskType: props.projectTaskInfo.type,
});
api
@@ -514,9 +515,9 @@ export default {
currentStageId: props.projectTaskInfo.stageId,
type: 1,
pid: props.projectTaskInfo.projectId,
status: Number(state.projectName),
status: state.projectName,
studentName: state.name,
currentTaskId: props.projectTaskInfo.projectTaskId,
taskId: props.projectTaskInfo.projectTaskId,
taskType: props.projectTaskInfo.type,
})
.then((res) => {
@@ -561,15 +562,14 @@ export default {
state.tableDataTotal2 = 0;
getStudent();
};
// 导出数据
function exportTaskStu() {
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${
props.projectTaskInfo.stageId
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskType=4`
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskType=${4}`
);
// api
// .exportTaskStudent({
@@ -601,12 +601,12 @@ export default {
api
.exportHomeWork(obj)
.then((res) => {
console.log("导出作业", JSON.parse(res.data).data);
if (JSON.parse(res.data).code === 200) {
message.destroy();
message.success("导出作业成功");
console.log("导出作业", res.data.data);
if (res.data.code === 200) {
// message.destroy();
//message.success("导出作业成功");
state.exportHomeWorkV = true;
state.downloadUrl = JSON.parse(res.data).data;
state.downloadUrl = res.data.data;
}
})
.catch((err) => {
@@ -621,8 +621,7 @@ export default {
console.log("props.projectTaskInfo", props.projectTaskInfo);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportHomeWork?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportHomeWork?currentStageId=${
props.projectTaskInfo.stageId
}&type=${1}&pid=${props.projectTaskInfo.projectId}&taskId=${
props.projectTaskInfo.projectTaskId

View File

@@ -122,10 +122,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
</template>
@@ -182,11 +183,11 @@ export default {
value: "0",
label: "未开始",
},
{
id: 2,
value: "2",
label: "进行中",
},
// {
// id: 2,
// value: "2",
// label: "进行中",
// },
{
id: 3,
value: "1",
@@ -340,7 +341,7 @@ export default {
// 获取数据
function getData() {
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7) {
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 3) {
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
console.log("我是传递的查询参数", {
pageNo: state.currentPage,
@@ -451,8 +452,8 @@ export default {
// 导出数据
function exportTaskStu() {
window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&status=${state.name}&studentName=${state.projectName}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.stageId}&type=${1}&pid=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}&status=${state.name}&studentName=${state.projectName}`)
}
return {

View File

@@ -121,10 +121,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
</template>
@@ -183,10 +184,10 @@ export default {
label: "未开始",
},
//{
// id: 2,
//value: "2",
// label: "进行中",
// },
// id: 2,
// value: "2",
// label: "进行中",
// },
{
id: 3,
value: "1",
@@ -343,7 +344,7 @@ export default {
// 获取数据
function getData() {
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7) {
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 3) {
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
console.log("我是传递的查询参数", {
pageNo: state.currentPage,
@@ -453,9 +454,9 @@ export default {
// 导出数据
function exportTaskStu() {
console.log(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&status=${state.name}&studentName=${state.projectName}`)
console.log(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&status=${state.name}&studentName=${state.projectName}`)
}
return {

View File

@@ -104,10 +104,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
</template>
@@ -164,11 +165,11 @@ export default {
value: "0",
label: "未开始",
},
{
id: 2,
value: "2",
label: "进行中",
},
//{
// id: 2,
// value: "2",
// label: "进行中",
// },
{
id: 3,
value: "1",
@@ -404,9 +405,9 @@ export default {
// 导出数据
function exportTaskStu() {
console.log(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_PROXY_URL}admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&status=${state.name}&studentName=${state.projectName}`)
console.log(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&taskType=${props.datasource.type}`)
// window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?pageNo=${state.currentPage}&pageSize=${state.pageSize}&currentStageId=${props.datasource.chapterId}&type=${2}&pid=${props.datasource.routerId}&taskId=${props.datasource.routerTaskId}&status=${state.name}&studentName=${state.projectName}`)
}
return {

View File

@@ -107,10 +107,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
<!-- 导出成绩抽屉 -->
<EScore v-model:eScorevisible="eScorevisible" />
@@ -433,7 +434,7 @@ export default {
{/* 导出数据 */}
function exportData() {
window.open(`${process.env.VUE_APP_PROXY_URL}admin/exam/manage/exportExam?chapterId=${props.datasource.chapterId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&type=${1}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?chapterId=${props.datasource.chapterId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&type=${1}`)
{/* api.ExportExam({
"chapterId": props.datasource.chapterId,
"targetId": props.datasource.routerId,

View File

@@ -24,7 +24,9 @@
{{ datasource && datasource.endTime ? datasource.endTime : "-" }}
</div>
<div class="endtime" style="margin-left: 64px">签到时间14:00</div>
<div class="endtime" style="margin-left: 64px">
允许签到时段{{ beginTime }}~{{ endTime }}
</div>
</div>
<div class="search">
@@ -101,7 +103,7 @@
<div class="wz">导出数据</div>
</div>
</div>
<div class="line">
<!-- <div class="line">
<div class="inline">
<div class="left">
<div class="img"></div>
@@ -114,7 +116,7 @@
<div class="right" @click="clearLine">清空</div>
</div>
</div>
<!-- <div class="pad"></div> -->
<div class="pad"></div> -->
<div class="tableBox" style="margin-top: 30px">
<a-table
@@ -165,10 +167,11 @@
/>
</div> -->
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
<!-- 二维码签到弹窗 -->
@@ -200,11 +203,11 @@
<span>您确定要批量签到吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="closeCopyModal">取消</div>
<div class="del_btn btn1" @click="closeCopyModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="batchSign">确定</div>
<div class="del_btn btn2" @click="batchSign">
<div class="btnText">确定</div>
</div>
</div>
</div>
@@ -228,6 +231,7 @@ import SignQR from "../SignQR.vue";
import * as api from "../../../api/index1";
import TwoDimensionalCode from "../../../components/TwoDimensionalCode";
import { message } from "ant-design-vue";
import { toDate } from "../../../api/method";
export default {
name: "FaceManage",
components: {
@@ -335,10 +339,14 @@ export default {
codeType: null,
codeIndex: null,
codeInfo: null, //二维码内容
beginTime: null, //签到开始时间
endTime: null, //签到结束时间
});
const afterVisibleChange = (bol) => {
if (bol == true) {
getStudent();
console.log("1111");
isSignClick();
}
};
//考勤
@@ -366,12 +374,12 @@ export default {
};
//批量签到
const showCopyModal = () => {
state.copyModal = true;
if (state.selectedStudents.length === 0) {
message.destroy();
message.warning("请选择学员");
return;
}
state.copyModal = true;
};
const closeCopyModal = () => {
state.copyModal = false;
@@ -388,11 +396,16 @@ export default {
type: 2,
};
api
.attendanceSign(obj, (res) => {
.attendanceSign(obj)
.then((res) => {
console.log("签到结果", res, obj);
if (res.data.code === 200) {
message.destroy();
message.success("批量签到成功");
state.copyModal = false;
state.tableDataTotal = -1;
state.selectedRowKeys = [];
state.selectedStudents = [];
getStudent();
}
})
@@ -506,12 +519,19 @@ export default {
},
{
title: "签到时间",
dataIndex: "cur",
key: "cur",
dataIndex: "signTime",
key: "signTime",
width: 110,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span>{text.record.signTime ? text.record.signTime : "-"}</span>
</div>
);
},
},
// {
// title: "签退时间",
@@ -523,21 +543,42 @@ export default {
// },
{
title: "考勤",
dataIndex: "time",
key: "time",
dataIndex: "signStatus",
key: "signStatus ",
width: 50,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
// console.log("text", text);
return (
<div class="racona">
<span>
{text.record.signStatus
? "签到"
: text.record.leaveStatus
? "请假"
: "-"}
</span>
</div>
);
},
},
{
title: "签到状态",
dataIndex: "state",
key: "state",
dataIndex: "signStatus",
key: "signStatus",
width: 50,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span>{text.record.signStatus ? "正常" : "异常"}</span>
</div>
);
},
},
{
title: "考勤情况",
@@ -550,71 +591,76 @@ export default {
// scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
// console.log("text.record.signStatus", text.record.signStatus);
return (
<div class="opa">
<a-radio-group name="radioGroup">
<a-radio
value="1"
checked={text.record.signIn}
onChange={(e) => {
console.log("点击签到", e);
let obj = {
courseId: Number(props.datasource.courseId),
// projectId: 0,
routerId: Number(props.datasource.routerId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 2,
};
api
.attendanceSign(obj, (res) => {
console.log("签到结果", res, obj, e);
if (res.data.code === 200) {
text.record.signIn = true;
}
})
.catch((err) => {
console.log("签到失败", err, obj);
text.record.signIn = false;
});
}}
>
签到
</a-radio>
<a-radio
value="2"
checked={text.record.leave}
onChange={(e) => {
console.log("点击请假", e, props.datasource);
let obj = {
courseId: Number(props.datasource.courseId),
// projectId: 0,
routerId: Number(props.datasource.routerId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 2,
// userName: "",
};
api
.attendanceLeave(obj, (res) => {
console.log("请假结果", res, obj, e);
if (res.data.code === 200) {
text.record.leave = true;
}
})
.catch((err) => {
console.log("请假结果", err, obj);
text.record.leave = false;
});
}}
>
请假
</a-radio>
</a-radio-group>
<a-radio
value="1"
checked={text.record.signStatus}
onChange={(e) => {
console.log("点击签到", e);
let obj = {
courseId: Number(props.datasource.courseId),
// projectId: 0,
routerId: Number(props.datasource.routerId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 2,
};
api
.attendanceSign(obj)
.then((res) => {
console.log("签到结果", res, obj, e);
if (res.data.code === 200) {
text.record.signStatus = true;
state.tableDataTotal = -1;
getStudent();
}
})
.catch((err) => {
console.log("签到失败", err, obj);
text.record.signStatus = false;
});
}}
>
签到
</a-radio>
<a-radio
value="2"
checked={text.record.leaveStatus}
onChange={(e) => {
console.log("点击请假", e, props.datasource);
let obj = {
courseId: Number(props.datasource.courseId),
// projectId: 0,
routerId: Number(props.datasource.routerId),
ids: [text.record.studentId],
studentName: text.record.studentName,
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 2,
// userName: "",
};
api
.attendanceLeave(obj)
.then((res) => {
console.log("请假结果", res, obj, e);
if (res.data.code === 200) {
text.record.leaveStatus = true;
state.tableDataTotal = -1;
getStudent();
}
})
.catch((err) => {
console.log("请假结果", err, obj);
text.record.leaveStatus = false;
});
}}
>
请假
</a-radio>
{/**
<a-checkbox
@@ -702,7 +748,7 @@ export default {
//获取学员
const getStudent = () => {
console.log("我是传递的查询参数", props.datasource, {
console.log("我是传递的查询参数222", props.datasource, {
pageNo: state.currentPage,
pageSize: state.pageSize,
currentStageId: props.datasource.chapterId,
@@ -710,7 +756,8 @@ export default {
pid: props.datasource.routerId,
// status: Number(state.name),
studentName: state.name,
currentTaskId: props.datasource.routerTaskId,
taskId: props.datasource.routerTaskId,
taskType: props.datasource.type,
});
api
.AssessmentManagementMessage({
@@ -721,7 +768,7 @@ export default {
pid: props.datasource.routerId,
// status: Number(state.name),
studentName: state.name,
currentTaskId: props.datasource.routerTaskId,
taskId: props.datasource.routerTaskId,
taskType: props.datasource.type,
})
.then((res) => {
@@ -770,8 +817,8 @@ export default {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?currentStageId=${
props.datasource.chapterId
}&type=${2}&pid=${props.datasource.routerId}&taskType=2&thirdType=2`
);
@@ -805,8 +852,8 @@ export default {
}&type=${2}`,
};
console.log("codeInfo", state.codeInfo);
state.codeIndex = 1;
state.codeType = 2;
state.codeIndex = 0;
state.codeType = 1;
};
{
@@ -822,6 +869,34 @@ export default {
}
};
// 计算签到时间
const isSignClick = () => {
console.log("计算签到时间", props.datasource);
let beginTime = new Date(props.datasource.startTime).getTime();
let endTime = !props.datasource.afterStart
? new Date(props.datasource.endTime).getTime()
: new Date(props.datasource.startTime).getTime();
if (props.datasource.beforeStart && props.datasource.afterStart) {
//有开始前有开始后
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
endTime = endTime + props.datasource.afterStart * 60 * 1000;
console.log("1111", beginTime, endTime);
} else if (props.datasource.beforeStart && !props.datasource.afterStart) {
//只有开始前无开始后
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
console.log("11112222", beginTime);
} else if (!props.datasource.beforeStart && props.datasource.afterStart) {
//无开始前有开始后
endTime = endTime + props.datasource.afterStart * 60 * 1000;
console.log("1111333", endTime);
}
state.beginTime = toDate(beginTime / 1000, "Y/M/D h:m:s");
state.endTime = toDate(endTime / 1000, "Y/M/D h:m:s");
console.log("beginTime,endTime", state.beginTime, state.endTime);
};
return {
...toRefs(state),
selectProjectName,

View File

@@ -81,7 +81,7 @@
<div class="wz">导出作业</div>
</div>
</div>
<div class="line">
<!-- <div class="line">
<div class="inline">
<div class="left">
<div class="img"></div>
@@ -93,14 +93,14 @@
</div>
<div class="right" @click="clearLine">清空</div>
</div>
</div>
</div>-->
<div class="tableBox" style="margin-top: 20px; margin-bottom: 100px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 900 }"
:scroll="{ x: 1300 }"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys,
@@ -123,10 +123,10 @@
</div>
</div>
</div>
<div class="btnn">
<!-- <div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
<!-- 批量标注完成 -->
@@ -145,7 +145,12 @@
v-model:getStudent="getStudent"
/>
<!-- 录入成绩抽屉 -->
<entry-scores v-model:Evisible="Evisible" />
<EScore
v-model:eScorevisible="Evisible"
:type="2"
:id="datasource?.routerTaskId"
v-model:searchTaskList="searchTaskList"
/>
<!-- 查看作业抽屉 -->
<CKWork v-model:CWvisible="CWvisible" />
<!-- 查看答卷抽屉 -->
@@ -163,14 +168,14 @@ import { message } from "ant-design-vue";
import ASOver from "../AllStuOver.vue";
import CKWork from "../CheckWork.vue";
import CQue from "../CheckQue.vue";
import EntryScores from "../EntryScores.vue";
import EScore from "../ExportScore.vue";
// import * as api from "../../../api/index";
import * as api from "../../../api/index1";
import ExportHomeWork from "../../Modals/ExportHomeWork.vue";
export default {
name: "RouterFaceTeachManage",
components: {
EntryScores,
EScore,
CKWork,
CQue,
ASOver,
@@ -218,11 +223,11 @@ export default {
value: "1",
label: "已完成",
},
{
id: 2,
value: "2",
label: "进行中",
},
//{
// id: 2,
// value: "2",
// label: "进行中",
// },
],
selectedRowKeys: [],
@@ -424,15 +429,15 @@ export default {
);
},
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: 100,
align: "center",
ellipsis: true,
className: "h",
},
// {
// title: "操作",
// dataIndex: "operation",
// key: "operation",
// width: 100,
// align: "center",
// ellipsis: true,
// className: "h",
// },
],
exportHomeWorkV: false,
downloadUrl: null,
@@ -617,10 +622,9 @@ export default {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${
props.datasource.chapterId
}&type=${2}&pid=${props.datasource.routerId}&taskType=2`
}&type=${2}&pid=${props.datasource.routerId}&taskType=${1}`
);
// api
// .exportTaskStudent({
@@ -653,12 +657,12 @@ export default {
api
.exportHomeWork(obj)
.then((res) => {
console.log("导出作业", JSON.parse(res.data).data);
if (JSON.parse(res.data).code === 200) {
message.destroy();
message.success("导出作业成功");
console.log("导出作业", res.data.data);
if (res.data.code === 200) {
// message.destroy();
// message.success("导出作业成功");
state.exportHomeWorkV = true;
state.downloadUrl = JSON.parse(res.data).data;
state.downloadUrl = res.data.data;
}
})
.catch((err) => {
@@ -673,8 +677,7 @@ export default {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportHomeWork?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportHomeWork?currentStageId=${
props.datasource.chapterId
}&type=${2}&pid=${props.datasource.routerId}&taskId=${
props.datasource.routerTaskId

View File

@@ -94,7 +94,7 @@
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 900 }"
:scroll="{ x: 1300 }"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys,
@@ -117,10 +117,11 @@
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>-->
</div>
</a-drawer>
@@ -199,11 +200,11 @@ export default {
value: "0",
label: "未开始",
},
{
id: 2,
value: "2",
label: "进行中",
},
// {
// id: 2,
// value: "2",
// label: "进行中",
//},
{
id: 3,
value: "1",
@@ -251,7 +252,7 @@ export default {
dataIndex: "studentName",
key: "studentName",
width: 50,
align: "left",
align: "center",
className: "h",
ellipsis: true,
customRender: (text) => {
@@ -322,26 +323,7 @@ export default {
);
},
},
{
title: "所属小组",
dataIndex: "studentOrgName",
key: "studentOrgName",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span>
{text.record.studentOrgName
? text.record.studentOrgName
: "-"}
</span>
</div>
);
},
},
{
title: "成绩",
dataIndex: "workScore",
@@ -406,15 +388,15 @@ export default {
);
},
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: 100,
align: "center",
ellipsis: true,
className: "h",
},
// {
// title: "操作",
// dataIndex: "operation",
// key: "operation",
// width: 100,
// align: "center",
// ellipsis: true,
// className: "h",
// },
],
exportHomeWorkV: false,
downloadUrl: null,
@@ -576,10 +558,9 @@ export default {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${
props.datasource.chapterId
}&type=${2}&pid=${props.datasource.routerId}&taskType=4`
}&type=${2}&pid=${props.datasource.routerId}&taskType=${4}`
);
// api
// .exportTaskStudent({
@@ -611,12 +592,12 @@ export default {
api
.exportHomeWork(obj)
.then((res) => {
console.log("导出作业", JSON.parse(res.data).data);
if (JSON.parse(res.data).code === 200) {
message.destroy();
message.success("导出作业成功");
console.log("导出作业", res.data.data);
if (res.data.code === 200) {
// message.destroy();
// message.success("导出作业成功");
state.exportHomeWorkV = true;
state.downloadUrl = JSON.parse(res.data).data;
state.downloadUrl = res.data.data;
}
})
.catch((err) => {
@@ -631,8 +612,7 @@ export default {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportHomeWork?currentStageId=${
process.env.VUE_APP_BASE_API}/admin/student/exportHomeWork?currentStageId=${
props.datasource.chapterId
}&type=${2}&pid=${props.datasource.routerId}&taskId=${
props.datasource.routerTaskId

View File

@@ -14,7 +14,7 @@
/>
</a-form-item>
</a-col>
<a-col v-if="type === 1">
<!-- <a-col v-if="type === 1">
<a-form-item title="小组名称:">
<a-input
class="cus-input"
@@ -23,6 +23,7 @@
/>
</a-form-item>
</a-col>
-->
<a-col v-if="type === 1">
<a-form-item title="部门:">
<div class="select in" style="width: 270px">
@@ -89,7 +90,7 @@
</a-col>
<!-- 新加导入学员 批量换组 导出学习信息 -->
<a-col :span="1.5" v-if="type === 1 || type === 2">
<a-button class="cus-btn white">
<a-button class="cus-btn white" @click="showImpStu">
<template #icon
><img
style="margin-right: 10px"
@@ -98,9 +99,10 @@
导入学员
</a-button>
</a-col>
<!--
<a-col :span="1.5" v-if="type === 1">
<a-button class="cus-btn white"> 批量换组 </a-button>
</a-col>
</a-col>-->
<a-col :span="1.5" v-if="type === 1">
<a-button class="cus-btn white" @click="exportTaskStu">
导出学习信息
@@ -199,7 +201,7 @@
<a-col>
<slot name="extension" v-bind:data="{ record }"></slot>
</a-col>
<!-- 新加 换组 通过 拒绝-->
<!-- 新加 换组 通过 拒绝
<a-col v-if="type === 1">
<div
style="
@@ -213,6 +215,7 @@
换组
</div>
</a-col>
-->
<a-col v-if="type === 3">
<div
style="
@@ -351,6 +354,16 @@
v-model:exportHomeWorkV="exportHomeWorkV"
:downloadUrl="downloadUrl"
/>
<!-- 导入学员抽屉 -->
<!-- :courseId="projectTaskInfo.courseId"
:courseType="2" -->
<imp-stu
v-model:AddImpStuvisible="AddImpStuvisible"
@AddImpStuvisibleClose="AddImpStuvisibleClose"
:courseId="id"
:courseType="type === 1 ? 3 : 4"
/>
</template>
<script setup>
import { computed, defineProps, onMounted, ref, watch } from "vue";
@@ -364,6 +377,7 @@ import EScore from "../drawers/ExportScore.vue";
import OrgClass from "@/components/project/OrgClass";
import ExportHomeWork from "../Modals/ExportHomeWork.vue";
import * as api from "../../api/index1";
import ImpStu from "../drawers/AddLevelImportStu";
const props = defineProps({
type: Number,
id: String,
@@ -492,8 +506,7 @@ function exportTaskStu() {
console.log("props.datasource", props.datasource);
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?type=${1}&pid=${props.id}&taskType=0`
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?type=${1}&pid=${props.id}&taskType=0`
);
}
@@ -672,19 +685,12 @@ const exportHomeWorkShow = () => {
api
.exportHomeWork(obj)
.then((res) => {
console.log("导出作业", JSON.parse(res.data).data);
if (JSON.parse(res.data).code === 200) {
message.destroy();
message.success("导出作业成功");
exportHomeWorkV.value = true;
downloadUrl.value = JSON.parse(res.data).data;
}
console.log("导出作业", res.data.data);
//message.destroy();
// message.success("导出作业成功");
exportHomeWorkV.value = true;
downloadUrl.value = res.data.data;
})
.catch((err) => {
message.destroy();
message.error("导出作业失败");
console.log("导出作业失败", err);
});
};
// //导出作业
// const exportHomeWork = () => {
@@ -698,8 +704,7 @@ const exportHomeWorkShow = () => {
const exportStu = () => {
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?type=${3}&pid=${props.id}&thirdType=2`
process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?type=${3}&pid=${props.id}&thirdType=2`
);
};
@@ -728,6 +733,21 @@ const updateStatus = (status, id) => {
console.log("批量更新学员状态失败", err);
});
};
//导入学员
const AddImpStuvisible = ref(false); //导入学员抽屉
const showImpStu = () => {
AddImpStuvisible.value = true;
};
const AddImpStuvisibleClose = (isget) => {
console.log("关闭了导入学员弹框", isget);
{
/* 此处操作重新获取学员列表数据 */
}
if (isget) {
getStuList();
}
};
</script>
<style lang="scss">
.TableStudent {

View File

@@ -80,12 +80,12 @@
<div class="timemanag" style="margin-top: 12px">
{{values.createTime?values.createTime:'-'}} {{values.createName?values.createName:'-'}}
</div>
<div class="timemanag">来源:{{values.source?values.source:'-'}}</div>
<div class="timemanag">来源:{{{1:'项目',2:'路径图',3:'开课'}[values.type]+'-'+values.name}}</div>
</div>
</div>
</div>
</div>
<div class="itemdown">
</div>
<div class="itemdown">
<div class="download" @click="downLoadFile(values)">下载</div>
<div class="delete" @click="removeFile(values)">删除</div>
</div>
@@ -181,7 +181,7 @@ export default {
function downLoadFile(data) {
console.log(data)
window.open(state.locationHref + data.url)
}
}
// 删除文件
function removeFile(data) {
console.log(data)
@@ -204,14 +204,14 @@ export default {
// 搜索
function searchDownloadList() {
getData()
}
}
// 重置
function reseatDownloadList() {
state.name = "";
state.currentPage = 1;
getData()
}
}
// 分页
//分页

View File

@@ -94,11 +94,11 @@
<div class="btns">
<!-- 2022-11-30注释 后面放开 -->
<div
class="btn btn3"
class="btn btn2"
@click="openMessage"
style="margin-right: 14px"
>
<div class="search"></div>
<div class="img2"></div>
<div class="btnText">导出</div>
</div>
<div class="btn btn3" @click="of_hShow">
@@ -1362,10 +1362,10 @@
>
删除
</a-menu-item>
<!--新加 二维码 -->
<!--新加 二维码
<a-menu-item @click="qrcodeVisible(record, 1)">
二维码
</a-menu-item>
</a-menu-item>-->
</a-menu>
</template>
<div class="fb" style="margin-left: -20px">
@@ -3067,14 +3067,7 @@ export default defineComponent({
dataIndex: "evastatus",
key: "8",
align: "center",
customRender: ({ record }) => {
switch (String(record.evalStatus)) {
case "0":
return "未评估";
case "1":
return "已评估";
}
},
customRender: ({record}) => record.assessmentStatus ? '已评估' : '未评估'
},
{
title: "作业成绩",
@@ -3085,8 +3078,8 @@ export default defineComponent({
customRender: ({ record }) => {
return (
<div class="racona">
{record.workScore ? (
<span>{record.workScore}</span>
{record.score ? (
<span>{record.score}</span>
) : (
<span
style={{ color: "#4EA6FF", cursor: "pointer" }}
@@ -3121,16 +3114,17 @@ export default defineComponent({
{
title: "考试成绩",
width: "15%",
dataIndex: "evastatus",
dataIndex: "examinationScore",
key: "8",
align: "center",
},
{
title: "结业状态",
width: "15%",
dataIndex: "evastatus",
dataIndex: "completionStatus",
key: "8",
align: "center",
customRender: ({ record }) => <div>{{1:'结业'}[record.completionStatus] || '-'}</div>,
},
],
shipType: 1,
@@ -4761,6 +4755,7 @@ export default defineComponent({
};
const handleJoin = async () => {
state.lrcj_inputV1 || message.error("请输入成绩")
if (state.rg_hs) {
if (state.piliang) {
api1.updateStudent({
@@ -4994,7 +4989,7 @@ export default defineComponent({
}
window.open(
`${process.env.VUE_APP_PROXY_URL}admin/offcourse/export?pageNo=${
`${process.env.VUE_APP_BASE_API}/admin/offcourse/export?pageNo=${
state.currentPage1
}&pageSize=${state.pageSize1}&auditStatus=${
state.auditStatus ? state.auditStatus : ""
@@ -5004,7 +4999,7 @@ export default defineComponent({
state.createName ? state.createName : ""
}&endTime=${endTime ? endTime : ""}&beginTime=${
startTime ? startTime : ""
}`
}&type=3`
);
{
@@ -5559,7 +5554,7 @@ export default defineComponent({
}&type=${3}`,
};
console.log("codeInfo", state.codeInfo);
state.codeIndex = type;
state.codeIndex = 0;
state.codeType = type;
};
return {
@@ -5844,8 +5839,8 @@ export default defineComponent({
}
}
.btn1:hover {
background: rgba(64, 158, 255, 0.76);
.btn1 {
.search {
background-image: url("../../assets/images/courseManage/search0.png");
@@ -5855,18 +5850,18 @@ export default defineComponent({
color: #ffffff;
}
}
/**
.btn1:active {
background: #0982ff;
}
.btn2:hover {
.btn2 {
background: rgba(64, 158, 255, 0.1);
}
.btn2:active {
background: rgba(64, 158, 255, 0.2);
}
}*/
}
.btns {
@@ -5899,31 +5894,22 @@ export default defineComponent({
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
}
}
.btn3:hover {
background: rgba(64, 158, 255, 0.76);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
.btn3:active {
background: #0982ff;
}
}
}
@@ -6945,7 +6931,7 @@ export default defineComponent({
}
}
.btn1:hover {
.btn1 {
background: rgba(64, 158, 255, 1);
.search {
@@ -6965,7 +6951,7 @@ export default defineComponent({
}
}
.btn2:hover {
.btn2{
background: rgba(64, 158, 255, 1);
.search {
@@ -7357,7 +7343,7 @@ export default defineComponent({
}
}
.btn1:hover {
.btn1 {
background: #4ea6ff;
.search {
@@ -7369,7 +7355,7 @@ export default defineComponent({
}
}
.btn2:hover {
.btn2 {
background: #4ea6ff;
.reset {
@@ -7585,8 +7571,8 @@ export default defineComponent({
}
}
.btn1:hover {
background: rgba(64, 158, 255, 0.76);
.btn1{
.search {
background-image: url("../../assets/images/courseManage/search0.png");
@@ -7596,7 +7582,7 @@ export default defineComponent({
color: #ffffff;
}
}
/**
.btn1:active {
background: #0982ff;
}
@@ -7608,7 +7594,7 @@ export default defineComponent({
.btn2:active {
background: rgba(64, 158, 255, 0.2);
}
*/
.btns {
display: flex;
@@ -7637,33 +7623,20 @@ export default defineComponent({
line-height: 36px;
margin-left: 5px;
}
}
.btn3 {
.btn2 {
margin-right: 0px;
.search {
.img2 {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
background-image: url(../../assets/images/coursewareManage/export1.png);
}
}
.btn3:hover {
background: rgba(64, 158, 255, 0.76);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
.btn3:active {
background: #0982ff;
}
}
}

View File

@@ -1859,9 +1859,10 @@ export default {
title: "最近学习时间",
dataIndex: "lastStudyTime",
key: "lastStudyTime",
width: 80,
width: 120,
align: "center",
className: "h",
ellipsis: true,
},
],
loading: false,
@@ -3074,6 +3075,7 @@ export default {
width: "20%",
align: "center",
className: "h",
ellipsis: true,
// sorter: {
// compare: (a, b) => a.stutime - b.stutime,
// multiple: 3,

View File

@@ -154,7 +154,7 @@ export default {
// 导出学员信息
function exportStudentInfo() {
window.open(`${process.env.VUE_APP_PROXY_URL}admin/assessment/manage/exportAssessmentMessage?assessmentId=${state.basicInfo.assessmentId}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?assessmentId=${state.basicInfo.assessmentId}`)
}
//分页