mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-24 18:22:55 +08:00
Merge branch 'develop'
# Conflicts: # src/App.vue # src/components/drawers/AddActive.vue # src/components/drawers/AddCase.vue # src/components/drawers/AddEval.vue # src/components/drawers/AddHomework.vue # src/components/drawers/AddInvist.vue # src/components/drawers/AddLive.vue # src/components/drawers/AddOnline.vue # src/components/drawers/AddProject.vue # src/components/drawers/AddRef.vue # src/components/drawers/AddTest.vue # src/components/vote/AddVote.vue
This commit is contained in:
@@ -126,6 +126,21 @@
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
<div class="tableBox" style="display: flex;justify-content:center;align-items:center;margin-top:12px;">
|
||||
<div class="pa">
|
||||
<a-pagination
|
||||
v-if="tableDataTotal>10"
|
||||
:showSizeChanger="false"
|
||||
showQuickJumper="true"
|
||||
hideOnSinglePage="true"
|
||||
:pageSize="pageSize"
|
||||
:current="currentPage"
|
||||
:total="tableDataTotal"
|
||||
class="pagination"
|
||||
@change="changePagination"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnn">
|
||||
<button class="btn1" @click="closeDrawer">取消</button>
|
||||
@@ -459,6 +474,13 @@ export default {
|
||||
}
|
||||
};
|
||||
|
||||
//分页
|
||||
const changePagination = (page) => {
|
||||
state.tableDataTotalLoading = true;
|
||||
state.currentPage = page;
|
||||
getTableData();
|
||||
};
|
||||
|
||||
const getTableData = () => {
|
||||
// debugger
|
||||
console.log("当前是项目还是路径图 1 项目 2 路径图", props);
|
||||
@@ -510,6 +532,7 @@ export default {
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableDataTotal = 0;
|
||||
state.tableData = [];
|
||||
});
|
||||
} else if (
|
||||
@@ -560,10 +583,12 @@ export default {
|
||||
console.log(err);
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableData = [];
|
||||
state.tableDataTotal = 0;
|
||||
});
|
||||
} else {
|
||||
state.tableDataTotalLoading = false;
|
||||
state.tableData = [];
|
||||
state.tableDataTotal = 0;
|
||||
}
|
||||
|
||||
// let arr = state.tableData;
|
||||
@@ -720,7 +745,7 @@ export default {
|
||||
title: "签到时间",
|
||||
dataIndex: "signTime",
|
||||
key: "signTime",
|
||||
width: 110,
|
||||
width: 100,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
@@ -787,7 +812,7 @@ export default {
|
||||
className: "h",
|
||||
dataIndex: "opacation",
|
||||
key: "opacation",
|
||||
width: 130,
|
||||
width: 100,
|
||||
align: "center",
|
||||
customRender: (value) => {
|
||||
return (
|
||||
@@ -1047,12 +1072,18 @@ export default {
|
||||
searchTaskList,
|
||||
resetTaskList,
|
||||
exportTaskStu,
|
||||
changePagination
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.largeDrawerStyle > .ant-drawer-content-wrapper {
|
||||
width: 1400px !important;
|
||||
min-width: 1400px !important;
|
||||
}
|
||||
|
||||
.me {
|
||||
.ant-modal-body {
|
||||
padding: 0px;
|
||||
@@ -1070,6 +1101,7 @@ export default {
|
||||
|
||||
.drawerMain {
|
||||
min-width: 600px;
|
||||
min-height: 960px;
|
||||
margin: 0px 32px 0px 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="header">
|
||||
<div class="headerTitle">{{ taskIndex >= 0 ? "编辑" : "添加" }}活动</div>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer" />
|
||||
@click="closeDrawer" />
|
||||
</div>
|
||||
<div class="contentMain">
|
||||
<div class="main_left">
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.activityName" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入活动名称" maxlength="20" />
|
||||
placeholder="请输入活动名称" maxlength="20" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-range-picker :disabled-date="disabledDate" :show-time="{ format: 'HH:mm' }" format="YYYY-MM-DD HH:mm"
|
||||
style="width: 400px; height: 40px; border-radius: 8px" v-model:value="dateTime" @change="timeChange"
|
||||
:placeholder="[' 开始时间', ' 结束时间']" />
|
||||
style="width: 400px; height: 40px; border-radius: 8px" v-model:value="dateTime" @change="timeChange"
|
||||
:placeholder="[' 开始时间', ' 结束时间']" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="main_item">
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.activityAddress" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入活动地点" maxlength="100" />
|
||||
placeholder="请输入活动地点" maxlength="100" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item2">
|
||||
@@ -71,7 +71,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea v-model:value="formData.activityNotice" placeholder="请输入活动公告" allow-clear :rows="6" show-count
|
||||
:maxlength="200" />
|
||||
:maxlength="200" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item2">
|
||||
@@ -80,7 +80,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea v-model:value="formData.activityExplain" placeholder="请输入活动说明" allow-clear :rows="6" show-count
|
||||
:maxlength="200" />
|
||||
:maxlength="200" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item2">
|
||||
@@ -248,8 +248,8 @@ defineExpose({ openDrawer })
|
||||
}
|
||||
|
||||
.addactiveDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.addactiveDrawer {
|
||||
|
||||
@@ -71,16 +71,16 @@
|
||||
<div>
|
||||
<div>
|
||||
<span class="title"
|
||||
>已选择
|
||||
>已选择
|
||||
<span class="data" style="color: #4ea6ff">{{ 1 }}</span>
|
||||
条 </span
|
||||
>
|
||||
<span class="title"
|
||||
>案例标题:
|
||||
>案例标题:
|
||||
<span
|
||||
class="data"
|
||||
style="color: #4ea6ff; margin-right: 15px"
|
||||
>{{
|
||||
>{{
|
||||
selectedRows?.name
|
||||
? selectedRows?.name
|
||||
: selectedRows?.title
|
||||
@@ -270,8 +270,8 @@ defineExpose({ openDrawer });
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
.addcaseDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
}
|
||||
.addcaseDrawer {
|
||||
.drawerMain {
|
||||
@@ -427,8 +427,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
|
||||
|
||||
@@ -240,8 +240,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.addevalDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.addevalDrawer {
|
||||
|
||||
284
src/components/drawers/AddFaceClass.vue
Normal file
284
src/components/drawers/AddFaceClass.vue
Normal file
@@ -0,0 +1,284 @@
|
||||
<template>
|
||||
<div @click="openDrawer">
|
||||
<slot></slot>
|
||||
</div>
|
||||
<a-drawer :visible="visible" class="drawerStyle addinvistDrawer" width="70%" title="添加面授" placement="right">
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div v-if="taskIndex>=0" class="headerTitle">编辑面授</div>
|
||||
<div v-else class="headerTitle">添加面授</div>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer"/>
|
||||
</div>
|
||||
<div class="contentMain">
|
||||
<div class="main">
|
||||
<div class="main_left">
|
||||
<FaceClassAll v-model:id="formData.courseId" v-model:name="formData.courseName"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_btns">
|
||||
<button class="btn2" @click="closeDrawer">取消</button>
|
||||
<button class="btn2" @click="confirm">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineEmits, defineProps, ref} from "vue";
|
||||
import {Form, message} from "ant-design-vue";
|
||||
import FaceClassAll from "@/components/drawers/FeaceClassAll.vue";
|
||||
import {useResetRef} from "@/utils/useCommon";
|
||||
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
taskList: [],
|
||||
chapterList: [],
|
||||
infoType: Number,
|
||||
});
|
||||
const visible = ref(false);
|
||||
const formData = useResetRef({
|
||||
courseId: "",
|
||||
courseName: "",
|
||||
});
|
||||
const emit = defineEmits({});
|
||||
const taskIndex = ref(-1);
|
||||
const rulesRef = ref({
|
||||
courseId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择课程",
|
||||
},
|
||||
],
|
||||
courseName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择课程",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const { validate } = Form.useForm(formData, rulesRef);
|
||||
|
||||
const selectIds = computed(()=>props.chapterList.flatMap(t=>props.infoType===1?t.taskDraftDtoList:props.infoType===2?t.draftTaskList:t.taskTemplateList)?.filter(s=>s?.type==props.type).map(t=>t.courseId).join(',') || '')
|
||||
|
||||
const closeDrawer = () => {
|
||||
visible.value = false;
|
||||
taskIndex.value = -1;
|
||||
formData.reset();
|
||||
};
|
||||
|
||||
async function confirm() {
|
||||
await validate().catch(({ errorFields }) => {
|
||||
message.warning(errorFields[0].errors.join());
|
||||
throw Error("数据校验不通过");
|
||||
});
|
||||
if (selectIds.value.includes(formData.value.courseId)) {
|
||||
message.warning("本项目中已经包含此在线课!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (taskIndex.value === -1) {
|
||||
const list = props.taskList;
|
||||
list.push({
|
||||
name: formData.value.courseName,
|
||||
type: props.type,
|
||||
courseId: formData.value.courseId,
|
||||
info: { ...formData.value }
|
||||
});
|
||||
} else {
|
||||
const data = props.taskList[taskIndex.value];
|
||||
data.name = formData.value.courseName;
|
||||
data.courseId = formData.value.courseId;
|
||||
data.info = { ...formData.value };
|
||||
}
|
||||
emit("update:taskList", [...props.taskList]);
|
||||
closeDrawer();
|
||||
}
|
||||
|
||||
function openDrawer(i, row) {
|
||||
row && (formData.value = {
|
||||
courseId: row.courseId,
|
||||
courseName: row.name
|
||||
});
|
||||
(i >= 0) && (taskIndex.value = i);
|
||||
visible.value = true;
|
||||
}
|
||||
|
||||
defineExpose({ openDrawer });
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
.addinvistDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
}
|
||||
.addinvistDrawer {
|
||||
.drawerMain {
|
||||
.header {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.headerTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
line-height: 25px;
|
||||
margin-left: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.contentMain {
|
||||
.main {
|
||||
width: 100%;
|
||||
|
||||
.main_left {
|
||||
padding-right: 30px;
|
||||
margin-top: 32px;
|
||||
|
||||
.main_item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.fi_input {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.btns {
|
||||
padding: 0 26px 0 26px;
|
||||
height: 38px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
background-image: url("../../assets/images/courseManage/search0.png");
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
line-height: 36px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btnsn {
|
||||
padding: 0 26px 0 26px;
|
||||
height: 38px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(64, 158, 255, 1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
background-image: url("../../assets/images/courseManage/reset1.png");
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4ea6ff;
|
||||
line-height: 36px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.main_notice {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 3px;
|
||||
height: 40px;
|
||||
background-color: #e9f6fe;
|
||||
|
||||
.mntc_left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.title {
|
||||
color: rgba(0, 0, 0, 0.65);
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
.data {
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.notice_icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
margin-right: 9px;
|
||||
margin-left: 9px;
|
||||
background-image: url(@/assets/images/coursewareManage/gan.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.mntc_right {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.main_btns {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 1px 35px 0 rgba(118, 136, 166, 0.16);
|
||||
|
||||
.btn1 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
border: 1px solid #4ea6ff;
|
||||
border-radius: 8px;
|
||||
color: #4ea6ff;
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
border: 0;
|
||||
margin-left: 15px;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -184,8 +184,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.addhomeworkDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.addhomeworkDrawer {
|
||||
|
||||
@@ -100,8 +100,8 @@ defineExpose({openDrawer})
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
.addinvistDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
}
|
||||
.addinvistDrawer {
|
||||
.drawerMain {
|
||||
|
||||
@@ -355,6 +355,10 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.AddLevelImpStu > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
.AddLevelImpStu {
|
||||
.drawerMain {
|
||||
min-width: 450px;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{{ taskIndex >= 0 ? "编辑" : "添加" }}直播
|
||||
</div>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer" />
|
||||
@click="closeDrawer" />
|
||||
</div>
|
||||
<div class="contentMain">
|
||||
<div class="main_left">
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.liveName" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入直播名称" :maxlength="20" />
|
||||
placeholder="请输入直播名称" :maxlength="20" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item" style="margin-top: -10px">
|
||||
@@ -35,7 +35,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.liveLink" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入直播链接" :maxlength="100" />
|
||||
placeholder="请输入直播链接" :maxlength="100" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-range-picker :show-time="{ format: 'HH:mm' }" :disabled-date="disabledDate"
|
||||
style="width: 400px; height: 40px; border-radius: 8px" v-model:value="dateTime" format="YYYY-MM-DD HH:mm"
|
||||
valueFormat="YYYY-MM-DD HH:mm" @change="timeChange" :placeholder="[' 开始时间', ' 结束时间']" />
|
||||
style="width: 400px; height: 40px; border-radius: 8px" v-model:value="dateTime" format="YYYY-MM-DD HH:mm"
|
||||
valueFormat="YYYY-MM-DD HH:mm" @change="timeChange" :placeholder="[' 开始时间', ' 结束时间']" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="main_item">
|
||||
@@ -86,7 +86,7 @@
|
||||
</div>
|
||||
<div class="item_inp" style="background-color: #fff;">
|
||||
<a-upload name="avatar" list-type="picture-card" class="avatar-uploader" :show-upload-list="false"
|
||||
:before-upload="beforeUpload">
|
||||
:before-upload="beforeUpload">
|
||||
<img class="i_upload_img" v-if="imageUrl" :src="imageUrl" alt="avatar" />
|
||||
<div class="i_upload" v-else>
|
||||
<div class="addimg">
|
||||
@@ -111,7 +111,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea v-model:value="formData.liveNotice" placeholder="请输入直播公告" allow-clear show-count
|
||||
:maxlength="200" :rows="6" />
|
||||
:maxlength="200" :rows="6" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.livePlaybackLink" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入回放链接" :maxlength="100" />
|
||||
placeholder="请输入回放链接" :maxlength="100" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -141,7 +141,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea v-model:value="formData.liveExplain" placeholder="请输入直播说明" allow-clear show-count
|
||||
:maxlength="200" :rows="6" />
|
||||
:maxlength="200" :rows="6" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -198,8 +198,8 @@
|
||||
<div v-if="formData.assessmentId">
|
||||
<a-tag closable @close="removePG" color="processing">
|
||||
<span style="font-size: 14px; line-height: 33px">{{
|
||||
formData.assessmentName
|
||||
}}</span>
|
||||
formData.assessmentName
|
||||
}}</span>
|
||||
</a-tag>
|
||||
</div>
|
||||
</div>
|
||||
@@ -420,8 +420,8 @@ const beforeUpload = (file) => {
|
||||
}
|
||||
|
||||
.addliveDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
|
||||
@@ -98,11 +98,11 @@ const columns = ref([
|
||||
align: "center",
|
||||
},
|
||||
]);
|
||||
watch(taskIndex, () => {
|
||||
if (taskIndex.value >= 0) {
|
||||
rowSelectKeys.value = [];
|
||||
}
|
||||
});
|
||||
// watch(taskIndex, () => {
|
||||
// if (taskIndex.value >= 0) {
|
||||
// rowSelectKeys.value = [];
|
||||
// }
|
||||
// });
|
||||
|
||||
const selectIds = computed(()=>props.chapterList.flatMap(t=>props.infoType===1?t.taskDraftDtoList:t.draftTaskList)?.filter(s=>s?.type===props.type).map(t=>t.courseId).join(',') || '')
|
||||
|
||||
@@ -138,7 +138,7 @@ function confirm() {
|
||||
|
||||
function selectCourse(row) {
|
||||
console.log(row);
|
||||
if (!props.courseSyncFlag && !row.refId) {
|
||||
if (!props.courseSyncFlag && row.refId != props.id) {
|
||||
message.warning("请新建本项目在线课!");
|
||||
return;
|
||||
}
|
||||
@@ -165,8 +165,8 @@ defineExpose({ openDrawer, selectCourse });
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.addonlineDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
}
|
||||
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
|
||||
1262
src/components/drawers/AddOpenCourse.vue
Normal file
1262
src/components/drawers/AddOpenCourse.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -86,39 +86,39 @@
|
||||
<div>
|
||||
<div>
|
||||
<span class="title"
|
||||
>已选择
|
||||
>已选择
|
||||
<span class="data" style="color: #4ea6ff">{{ 1 }}</span>
|
||||
条 </span
|
||||
>
|
||||
<span class="title"
|
||||
>名称:
|
||||
>名称:
|
||||
<span
|
||||
class="data"
|
||||
style="color: #4ea6ff; margin-right: 15px"
|
||||
>{{ selectedRows?.name }}</span
|
||||
>{{ selectedRows?.name }}</span
|
||||
>
|
||||
</span>
|
||||
<span class="title"
|
||||
>项目经理:
|
||||
>项目经理:
|
||||
<span
|
||||
class="data"
|
||||
style="color: #4ea6ff; margin-right: 15px"
|
||||
>{{ selectedRows?.manager }}</span
|
||||
>{{ selectedRows?.manager }}</span
|
||||
>
|
||||
</span>
|
||||
<span class="title"
|
||||
>创建人:
|
||||
>创建人:
|
||||
<span
|
||||
class="data"
|
||||
style="color: #4ea6ff; margin-right: 15px"
|
||||
>{{ selectedRows?.createName }}</span
|
||||
>{{ selectedRows?.createName }}</span
|
||||
>
|
||||
</span>
|
||||
<span class="title"
|
||||
>创建时间:
|
||||
>创建时间:
|
||||
<span class="data" style="color: #4ea6ff">{{
|
||||
selectedRows?.createTime
|
||||
}}</span>
|
||||
selectedRows?.createTime
|
||||
}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -219,11 +219,11 @@ const columns = ref([
|
||||
? (gaName + "/" + faName).slice(0, 16) + "..."
|
||||
: gaName + "/" + faName
|
||||
: faName.length > 16
|
||||
? faName.slice(0, 16) + "..."
|
||||
: faName
|
||||
? faName.slice(0, 16) + "..."
|
||||
: faName
|
||||
: name.length > 16
|
||||
? name.slice(0, 16) + "..."
|
||||
: name}
|
||||
? name.slice(0, 16) + "..."
|
||||
: name}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
@@ -398,8 +398,8 @@ defineExpose({ openDrawer });
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
.addonlineDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
min-width: 1300px !important;
|
||||
width: 1300px !important;
|
||||
}
|
||||
.sameModal {
|
||||
.ant-modal {
|
||||
@@ -432,8 +432,8 @@ defineExpose({ openDrawer });
|
||||
width: calc(100%);
|
||||
height: 68px;
|
||||
background: linear-gradient(
|
||||
rgba(78, 166, 255, 0.2) 0%,
|
||||
rgba(78, 166, 255, 0) 100%
|
||||
rgba(78, 166, 255, 0.2) 0%,
|
||||
rgba(78, 166, 255, 0) 100%
|
||||
);
|
||||
}
|
||||
|
||||
@@ -675,8 +675,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
}
|
||||
@@ -729,8 +729,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
|
||||
|
||||
@@ -151,8 +151,8 @@ defineExpose({ openDrawer });
|
||||
}
|
||||
|
||||
.addrefDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.addrefDrawer {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="header">
|
||||
<div class="headerTitle">{{ taskIndex >= 0 ? "编辑" : "添加" }}考试</div>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer" />
|
||||
@click="closeDrawer" />
|
||||
</div>
|
||||
<div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;">
|
||||
<div v-if="taskIndex >= 0">
|
||||
@@ -26,7 +26,7 @@
|
||||
系统考试
|
||||
</button>
|
||||
<button style="width: 100px; cursor: pointer;" @click="changeOuter(2)"
|
||||
:class="formData.examType === 2 ? 'outer' : 'notOuter'">
|
||||
:class="formData.examType === 2 ? 'outer' : 'notOuter'">
|
||||
外部考试
|
||||
</button>
|
||||
</div>
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入考试名称" :maxlength="20" />
|
||||
placeholder="请输入考试名称" :maxlength="20" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -84,8 +84,8 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-range-picker style="width: 400px; height: 40px; border-radius: 8px" :show-time="{ format: 'hh:mm' }"
|
||||
:disabled-date="disabledDate" format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm"
|
||||
v-model:value="dateTime" @change="timeChange" :placeholder="[' 开始时间', ' 结束时间']" />
|
||||
:disabled-date="disabledDate" format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm"
|
||||
v-model:value="dateTime" @change="timeChange" :placeholder="[' 开始时间', ' 结束时间']" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item">
|
||||
@@ -97,8 +97,8 @@
|
||||
</div>
|
||||
<div class="select">
|
||||
<a-input-number :disabled="taskIndex >= 0 && isEdit" :min="0" :max="999999" :precision="0"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
v-model:value="formData.examinationDuration"></a-input-number>
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
v-model:value="formData.examinationDuration"></a-input-number>
|
||||
<span style="color: #999999; margin-left: 8px">分钟</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -110,8 +110,8 @@
|
||||
<span style="margin-right: 3px">及格线:</span>
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input :disabled="taskIndex >= 0 && isEdit" v-model:value="formData.passLine" type="number"
|
||||
style="width: 400px; height: 40px; border-radius: 8px" />
|
||||
<a-input-number min="0" :disabled="taskIndex >= 0 && isEdit" v-model:value="formData.passLine"
|
||||
style="width: 400px; height: 40px; border-radius: 8px" />
|
||||
|
||||
<span style="color: #999999; margin-left: 8px">分</span>
|
||||
</div>
|
||||
@@ -122,7 +122,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea :disabled="taskIndex >= 0 && isEdit" v-model:value="formData.examinationExplain" placeholder="请输入考试说明"
|
||||
allow-clear show-count :maxlength="200" :rows="6" />
|
||||
allow-clear show-count :maxlength="200" :rows="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item2">
|
||||
@@ -185,7 +185,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group :disabled="taskIndex >= 0 && isEdit" style="margin-right: 12px"
|
||||
v-model:value="formData.questionArrangement">
|
||||
v-model:value="formData.questionArrangement">
|
||||
<a-radio :value="1">试题乱序</a-radio>
|
||||
<a-radio :value="2">选项乱序</a-radio>
|
||||
<a-radio :value="3">全部乱序</a-radio>
|
||||
@@ -207,7 +207,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入考试名称" :maxlength="20" />
|
||||
placeholder="请输入考试名称" :maxlength="20" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item">
|
||||
@@ -219,8 +219,8 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input v-model:value="formData.source"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入数据来源" show-count :maxlength="420" />
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入数据来源" show-count :maxlength="420" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_item2">
|
||||
@@ -229,7 +229,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea v-model:value="formData.examinationExplain" placeholder="请输入考试说明" allow-clear show-count
|
||||
:maxlength="200" :rows="6" />
|
||||
:maxlength="200" :rows="6" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -397,8 +397,8 @@ defineExpose({ openDrawer })
|
||||
}
|
||||
|
||||
.addtestDrawer > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
|
||||
.outer {
|
||||
@@ -425,6 +425,9 @@ defineExpose({ openDrawer })
|
||||
}
|
||||
|
||||
.addtestDrawer {
|
||||
.ant-input-number-input-wrap > .ant-input-number-input {
|
||||
height: 40px !important;
|
||||
}
|
||||
.drawerMain {
|
||||
.header {
|
||||
height: 73px;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<iframe
|
||||
id="iframe"
|
||||
style="width: 100%; height: 100%;"
|
||||
:src="iframeUrl + '/exam/viewanswer?id=' + datasource.answerId "
|
||||
:src="iframeUrl+'/exam/viewanswer?id='+(answerId?answerId:datasource.answerId)"
|
||||
frameborder="0"
|
||||
name="myframe"
|
||||
security="restricted"
|
||||
@@ -54,6 +54,10 @@ export default {
|
||||
default: function () {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
answerId:{
|
||||
type: String,
|
||||
default: "",
|
||||
}
|
||||
},
|
||||
setup(props,ctx){
|
||||
@@ -143,6 +147,7 @@ export default {
|
||||
console.log(bool);
|
||||
if(bool == true) {
|
||||
console.log(props.datasource)
|
||||
console.log(props.answerId?props.answerId:props.datasource.answerId)
|
||||
}
|
||||
}
|
||||
const getQue = () => {
|
||||
|
||||
@@ -106,8 +106,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnn">
|
||||
<button class="btn1">取消</button>
|
||||
<button class="btn2">确定</button>
|
||||
<button class="btn1" @click="closeDrawer">取消</button>
|
||||
<button class="btn2" @click="closeDrawer">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<a-drawer :visible="visible" class="drawerStyle addhomeworkDrawer" width="800" placement="right">
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">{{ info.workName ? "编辑" : "添加" }}任务</div>
|
||||
<div class="headerTitle">{{ info?.workName ? "编辑" : "添加" }}任务</div>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer"/>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
>
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">{{ info.examinationName >= 0 ? "编辑" : "添加" }}考试</div>
|
||||
<div class="headerTitle">{{ info?.examinationName >= 0 ? "编辑" : "添加" }}考试</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png"
|
||||
@@ -19,20 +19,40 @@
|
||||
</div>
|
||||
<div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;">
|
||||
<div>
|
||||
<button
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(1)"
|
||||
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
系统考试
|
||||
</button>
|
||||
<button
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(2)"
|
||||
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
外部考试
|
||||
</button>
|
||||
<div v-if="info?.examinationName >= 0">
|
||||
<button
|
||||
v-if="info?.examType == 1"
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(1)"
|
||||
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
系统考试
|
||||
</button>
|
||||
<button
|
||||
v-else
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(2)"
|
||||
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
外部考试
|
||||
</button>
|
||||
</div>
|
||||
<div v-else>
|
||||
<button
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(1)"
|
||||
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
系统考试
|
||||
</button>
|
||||
<button
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(2)"
|
||||
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
|
||||
>
|
||||
外部考试
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -50,6 +70,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
v-model:value="formData.examinationName"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入考试名称"
|
||||
@@ -70,7 +91,7 @@
|
||||
</div>
|
||||
<s-test v-model:id="formData.examinationPaperId" v-model:name="formData.examinationTestName">
|
||||
<div class="btnbox">
|
||||
<button class="xkbtn" style="margin:0">
|
||||
<button class="xkbtn" style="margin:0" :disabled="info?.examinationName >= 0?true:false">
|
||||
{{ formData.examinationPaperId ? "重选" : "选择" }}试卷
|
||||
</button>
|
||||
</div>
|
||||
@@ -117,6 +138,7 @@
|
||||
</div>
|
||||
<div class="select">
|
||||
<a-input-number
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
:min="0"
|
||||
:max="999999"
|
||||
:precision="0"
|
||||
@@ -138,6 +160,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
v-model:value="formData.passLine"
|
||||
type="number"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
@@ -152,6 +175,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
v-model:value="formData.examinationExplain"
|
||||
placeholder="请输入考试说明"
|
||||
allow-clear
|
||||
@@ -170,6 +194,7 @@
|
||||
<div class="timerbox">
|
||||
<span>允许重复考试:</span>
|
||||
<a-input-number
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
:min="-1"
|
||||
:max="999999"
|
||||
:precision="0"
|
||||
@@ -194,6 +219,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="formData.showAnswers"
|
||||
>
|
||||
@@ -208,6 +234,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="formData.showAnalysis"
|
||||
>
|
||||
@@ -222,6 +249,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="formData.scoringModel"
|
||||
>
|
||||
@@ -238,6 +266,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="info?.examinationName >= 0?true:false"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="formData.questionArrangement"
|
||||
>
|
||||
@@ -405,6 +434,7 @@ watch(() => formData.value.examType, () => {
|
||||
})
|
||||
|
||||
watch([props, visible], () => {
|
||||
console.log(props.info)
|
||||
resetFields(props.info)
|
||||
dateTime.value = [props.info?.examinationStartTime || '', props.info?.examinationEndTime || '']
|
||||
})
|
||||
|
||||
481
src/components/drawers/FeaceClassAll.vue
Normal file
481
src/components/drawers/FeaceClassAll.vue
Normal file
@@ -0,0 +1,481 @@
|
||||
<!-- 面授列表 -->
|
||||
<template>
|
||||
<div class="main_item">
|
||||
<div class="fi_input addfaceclass">
|
||||
<a-input
|
||||
v-model:value="params.offcourseNumber"
|
||||
style="width: 220px; height: 40px; border-radius: 8px;margin-right: 32px;"
|
||||
placeholder="请输入课程编号"
|
||||
maxlength="20"
|
||||
/>
|
||||
<a-input
|
||||
v-model:value="params.courseName"
|
||||
style="width: 220px; height: 40px; border-radius: 8px;margin-right: 32px;"
|
||||
placeholder="请输入课程名称"
|
||||
maxlength="20"
|
||||
/>
|
||||
<a-tree-select
|
||||
:getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
|
||||
v-model:value="valueproj"
|
||||
show-search
|
||||
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||
:fieldNames="{
|
||||
children: 'children',
|
||||
label: 'name',
|
||||
value: 'code',
|
||||
}"
|
||||
placeholder="请选择内容分类"
|
||||
allow-clear
|
||||
tree-default-expand-all
|
||||
:tree-data="sysTypeOptions">
|
||||
</a-tree-select>
|
||||
</div>
|
||||
<div class="btns" @click="search" style="margin-left: 16px;">
|
||||
<div class="search"></div>
|
||||
<div class="btnText">搜索</div>
|
||||
</div>
|
||||
<div class="btnsn" @click="reset">
|
||||
<div class="search"></div>
|
||||
<div class="btnText">重置</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main_item">
|
||||
<button class="xkbtn" style="margin: 0" @click="goResearchmanage">
|
||||
新建课程
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="main_notice" style="display: none">
|
||||
<div class="mntc_left">
|
||||
<div class="notice_icon"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main_table">
|
||||
<a-table
|
||||
:customRow="customRow"
|
||||
class="ant-table-striped"
|
||||
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)"
|
||||
row-key="id"
|
||||
:columns="columns"
|
||||
:data-source="data"
|
||||
:loading="loading"
|
||||
:pagination="pagination"
|
||||
:row-selection="rowSelection"
|
||||
/>
|
||||
</div>
|
||||
<!-- 新建面授课 -->
|
||||
<CourseModal
|
||||
ref="CourseModalRef"
|
||||
v-model:xzinputV1="xzinputV1"
|
||||
@visibleClose="visibleClose"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
||||
import { list } from "@/api/indexCourse";
|
||||
import CourseModal from "../../views/courselibrary/courseModal.vue";
|
||||
import {useStore} from "vuex";
|
||||
|
||||
const props = defineProps({
|
||||
id: String,
|
||||
name: String,
|
||||
});
|
||||
const emit = defineEmits([]);
|
||||
const store = useStore();
|
||||
const sysTypeOptions = computed(() => store.state.content_type);
|
||||
const valueproj = ref(null);
|
||||
const columns = ref([
|
||||
{
|
||||
title: "课程编号",
|
||||
dataIndex: "offcourseNumber",
|
||||
key: "offcourseNumber",
|
||||
width: "40%",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "名称",
|
||||
dataIndex: "name",
|
||||
key: "name",
|
||||
width: "40%",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "内容分类",
|
||||
dataIndex: "sysTypeId",
|
||||
key: "sysTypeId",
|
||||
width: "20%",
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
customRender: (text) => (
|
||||
<div>
|
||||
{sHX(text.record.sysTypeId)}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "创建人",
|
||||
dataIndex: "createName",
|
||||
key: "createName",
|
||||
width: "20%",
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "创建时间",
|
||||
dataIndex: "createTime",
|
||||
key: "createTime",
|
||||
width: "20%",
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
]);
|
||||
const initParams = {
|
||||
courseName: "",
|
||||
offcourseNumber: "",
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
releaseStatus: 2,
|
||||
};
|
||||
// const router = useRouter();
|
||||
const params = ref(initParams);
|
||||
|
||||
const rowSelectKeys = ref([]);
|
||||
const selectsData = ref([]);
|
||||
const total = ref(0);
|
||||
const data = ref([]);
|
||||
const loading = ref(false);
|
||||
|
||||
const sysTypeOption = computed(() => store.state.content_type);
|
||||
|
||||
function findClassFullName(list,classify,name=''){
|
||||
return list && list.length && list.map(e=>{
|
||||
return classify == e.code ? name?name+'-'+e.name:e.name : findClassFullName(e.children,classify,name?name+'-'+e.name:e.name)
|
||||
}).filter(name=>name).join('')
|
||||
}
|
||||
|
||||
// 课程三级分类回显
|
||||
const sHX = (classify) => {
|
||||
return findClassFullName(sysTypeOption.value,classify) || '-'
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
loading.value = true
|
||||
let objn = {
|
||||
auditStatus: 2,
|
||||
sysTypeId: valueproj.value,
|
||||
offcourseNumber: params.value.offcourseNumber,
|
||||
name: params.value.courseName,
|
||||
pageNo: params.value.pageNo,
|
||||
pageSize: 10,
|
||||
};
|
||||
console.log(objn);
|
||||
list(objn)
|
||||
.then((res) => {
|
||||
console.log("获取已审核课程成功", res.data.data);
|
||||
data.value = res.data.data.rows;
|
||||
total.value = Number(res.data.data.total);
|
||||
loading.value = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("获取已审核课程失败", err);
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
getList()
|
||||
|
||||
// 新建面授课
|
||||
const CourseModalRef = ref(null);
|
||||
|
||||
const visibleClose = () => {
|
||||
getList()
|
||||
};
|
||||
|
||||
watch(
|
||||
() => props.id,
|
||||
() => {
|
||||
if (props.id) {
|
||||
console.log(props)
|
||||
rowSelectKeys.value = [props.id];
|
||||
selectsData.value = [{ id: props.id, name: props.name }];
|
||||
} else {
|
||||
rowSelectKeys.value = [];
|
||||
selectsData.value = [];
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const customRow = (record) => ({
|
||||
onClick: () => {
|
||||
rowSelectKeys.value = [record.id];
|
||||
selectsData.value = [record];
|
||||
emit("update:id", selectsData.value[0].id);
|
||||
emit("update:name", selectsData.value[0].name);
|
||||
},
|
||||
});
|
||||
|
||||
const pagination = computed(() => ({
|
||||
total: total.value,
|
||||
showSizeChanger: false,
|
||||
current: params.value.pageNo,
|
||||
pageSize: params.value.pageSize,
|
||||
onChange: changePagination,
|
||||
}));
|
||||
|
||||
const changePagination = (e) => {
|
||||
params.value.pageNo = e;
|
||||
getList();
|
||||
};
|
||||
const rowSelection = computed(() => ({
|
||||
type: "radio",
|
||||
columnWidth: 20,
|
||||
selectedRowKeys: rowSelectKeys.value,
|
||||
onChange: onSelectChange,
|
||||
preserveSelectedRowKeys: true,
|
||||
getCheckboxProps: getCheckboxProps,
|
||||
}));
|
||||
const getCheckboxProps = () => ({
|
||||
// 某几项默认禁止选中(R: 当state等于1时)
|
||||
disabled: false,
|
||||
});
|
||||
|
||||
function onSelectChange(e, l) {
|
||||
console.log(e,l)
|
||||
rowSelectKeys.value = e;
|
||||
selectsData.value = l;
|
||||
console.log('112233',selectsData.value)
|
||||
emit("update:id", selectsData.value[0].id);
|
||||
emit("update:name", selectsData.value[0].name);
|
||||
}
|
||||
|
||||
function search() {
|
||||
params.value.pageIndex = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
function reset() {
|
||||
rowSelectKeys.value = [];
|
||||
selectsData.value = [];
|
||||
params.value.pageIndex = 1;
|
||||
params.value.keyWord = "";
|
||||
params.value.courseName = "";
|
||||
params.value.offcourseNumber = "";
|
||||
valueproj.value = null;
|
||||
getList();
|
||||
}
|
||||
|
||||
const goResearchmanage = () => {
|
||||
CourseModalRef.value.visibleOpen(null, "");
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.addfaceclass {
|
||||
.ant-select-selector {
|
||||
border-radius: 8px !important;
|
||||
align-items: center !important;
|
||||
width: 220px !important;
|
||||
height: 40px !important;
|
||||
padding-top: 5px;
|
||||
margin-right: 32px;
|
||||
}
|
||||
|
||||
.ant-select-show-search {
|
||||
width: 220px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.xkbtn {
|
||||
cursor: pointer;
|
||||
width: 130px;
|
||||
height: 40px;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
border: 0;
|
||||
margin-right: 8px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
|
||||
.addinvistDrawer {
|
||||
.drawerMain {
|
||||
.header {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.headerTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
line-height: 25px;
|
||||
margin-left: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.contentMain {
|
||||
.main_left {
|
||||
padding-right: 30px;
|
||||
margin-top: 32px;
|
||||
|
||||
.main_item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.fi_input {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.btns {
|
||||
margin-right: 20px;
|
||||
padding: 0px 26px 0px 26px;
|
||||
height: 38px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
//border: 1px solid rgba(64, 158, 255, 1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
background-image: url("../../assets/images/courseManage/search0.png");
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
line-height: 36px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btnsn {
|
||||
padding: 0px 26px 0px 26px;
|
||||
height: 38px;
|
||||
background: rgba(64, 158, 255, 1) !important;
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(64, 158, 255, 1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
background-image: url("../../assets/images/courseManage/reset0.png") !important;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #fff !important;
|
||||
line-height: 36px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.main_item2 {
|
||||
.pa {
|
||||
width: 100%;
|
||||
margin: 15px auto;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.main_table {
|
||||
position: relative;
|
||||
padding-bottom: 80px;
|
||||
|
||||
.ant-checkbox-wrapper {
|
||||
align-items: center;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.ant-table-selection-column {
|
||||
padding: 0px !important;
|
||||
padding-left: 5px !important;
|
||||
}
|
||||
|
||||
.ant-table-thead > tr > th {
|
||||
background-color: rgba(239, 244, 252, 1);
|
||||
}
|
||||
|
||||
th.h {
|
||||
background-color: #eff4fc !important;
|
||||
}
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
|
||||
.pa {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.main_btns {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||
|
||||
.btn1 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
border: 1px solid #4ea6ff;
|
||||
border-radius: 8px;
|
||||
color: #4ea6ff;
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
border: 0;
|
||||
margin-left: 15px;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
<CommonStudent
|
||||
v-if="checkPer(permissions,createId)"
|
||||
:type="1"
|
||||
:info-type="1"
|
||||
:info-id="projectId"
|
||||
title="添加组员"
|
||||
@finash="submitCall"
|
||||
:isGroup="true"
|
||||
@@ -864,6 +866,7 @@ export default {
|
||||
.btnn {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
|
||||
@@ -158,89 +158,73 @@
|
||||
</div>
|
||||
|
||||
<div v-if="edit" class="pjcb_content">
|
||||
<div class="content content1">
|
||||
<span>当前设计下,学员可以获得 </span
|
||||
><span class="scoretext">{{ scoresum }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
|
||||
<div class="content content2">
|
||||
<span>完成【必修/选修】获得 </span
|
||||
><span class="scoretext">{{ score1 }} </span><span>积分</span>
|
||||
<span>每完成一项任务则可获得 </span
|
||||
><span class="scoretext">{{ score1 }} </span><span>积分,除此以外:</span>
|
||||
</div>
|
||||
<!--
|
||||
<div class="content">
|
||||
<span>完成作业成绩不低于 </span
|
||||
<span>作业:完成作业成绩不低于 </span
|
||||
><span class="scoretext">{{ done2 }}</span
|
||||
><span>分获得</span> <span class="scoretext">{{ done3 }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
|
||||
<div class="content">
|
||||
<span>前</span><span class="scoretext">{{ four1 }}</span
|
||||
><span>名学完在线课程获得</span>
|
||||
<span class="scoretext">{{ four2 }}</span
|
||||
><span style="margin-right: 50px">积分</span> <span>前</span
|
||||
<span>作业:最早完成任意一项目作业的前</span
|
||||
><span class="scoretext">{{ four3 }}</span
|
||||
><span>名提交作业且成绩不低于</span>
|
||||
><span>名学员且成绩不低于</span>
|
||||
<span class="scoretext">{{ four4 }}</span
|
||||
><span>分获得</span> <span class="scoretext">{{ four5 }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考试成绩高于</span
|
||||
<span>在线:最早完成任意一门课程的</span><span class="scoretext">{{ four1 }}</span
|
||||
><span>名学员获得</span>
|
||||
<span class="scoretext">{{ four2 }}</span
|
||||
><span style="margin-right: 50px">积分</span>
|
||||
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考试:完成任意一场考试且成绩高于</span
|
||||
><span class="scoretext">{{ five1 }}</span
|
||||
><span>分获得</span> <span class="scoretext">{{ five2 }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考勤正常学员获得 </span
|
||||
<span>面授、直播、活动:完成任意一面授课、直播、活动且考勤正常学员获得 </span
|
||||
><span class="scoretext">{{ six1 }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<span>成为小组长获得</span
|
||||
><span class="scoretext">{{ seven1 }}</span
|
||||
><span style="margin-right: 50px">积分</span>
|
||||
><span style="margin-right: 50px">积分(同一项目只加一次)</span>
|
||||
</div> <div class="content">
|
||||
<span>优秀学员可获得</span>
|
||||
<span class="scoretext">{{ seven2 }}</span
|
||||
><span>积分</span>
|
||||
><span>积分(同一项目只加一次)</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="pjcb_content">
|
||||
<div class="content content1">
|
||||
<span>当前设计下,学员可以获得 </span
|
||||
><span class="scoretext">{{ scoresum }}</span
|
||||
><span>积分</span>
|
||||
</div>
|
||||
|
||||
<div class="content content2">
|
||||
<span>完成【必修/选修】获得 </span
|
||||
<span>每完成一项任务则可获得 </span
|
||||
><span
|
||||
><a-input
|
||||
v-model:value="score1"
|
||||
:bordered="false"
|
||||
@change="getScore"
|
||||
/> </span
|
||||
><span>积分</span>
|
||||
><span>积分,除此以外:</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>完成作业成绩不低于 </span
|
||||
><a-input v-model:value="done2" :bordered="false" /><span
|
||||
>分获得</span
|
||||
>
|
||||
<a-input v-model:value="done3" :bordered="false" /><span
|
||||
>积分</span
|
||||
>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>前</span
|
||||
><a-input v-model:value="four1" :bordered="false" /><span
|
||||
>名学完在线课程获得</span
|
||||
>
|
||||
<a-input v-model:value="four2" :bordered="false" /><span
|
||||
style="margin-right: 50px"
|
||||
>积分</span
|
||||
>
|
||||
<span>前</span
|
||||
<span>作业:最早完成任意一项作业的</span
|
||||
><a-input v-model:value="four3" :bordered="false" /><span
|
||||
>名提交作业且成绩不低于</span
|
||||
>名学员且成绩不低于</span
|
||||
>
|
||||
<a-input v-model:value="four4" :bordered="false" /><span
|
||||
>分获得</span
|
||||
@@ -250,7 +234,18 @@
|
||||
>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考试成绩高于</span
|
||||
<span>在线:最早完成任意一门课程的</span
|
||||
><a-input v-model:value="four1" :bordered="false" /><span
|
||||
>名学完在线课程获得</span
|
||||
>
|
||||
<a-input v-model:value="four2" :bordered="false" /><span
|
||||
style="margin-right: 50px"
|
||||
>积分</span
|
||||
>
|
||||
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考试:完成任意一场考试且成绩高于</span
|
||||
><a-input v-model:value="five1" :bordered="false" /><span
|
||||
>分获得</span
|
||||
>
|
||||
@@ -259,20 +254,21 @@
|
||||
>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span>考勤正常学员获得 </span
|
||||
<span>面授、直播、活动:完成任意一面授课、直播、活动且考勤正常学员获得 </span
|
||||
><a-input v-model:value="six1" :bordered="false" /><span
|
||||
>积分</span
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<span>成为小组长获得</span
|
||||
><a-input v-model:value="seven1" :bordered="false" /><span
|
||||
style="margin-right: 50px"
|
||||
>积分</span
|
||||
>
|
||||
>积分(同一项目只加一次)</span
|
||||
> </div> <div class="content">
|
||||
<span>优秀学员可获得</span>
|
||||
<a-input v-model:value="seven2" :bordered="false" /><span
|
||||
>积分</span
|
||||
>积分(同一项目只加一次)</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||
<template>
|
||||
<a-drawer :visible="Seevisible" class="drawerStyle seestu" placement="right" width="70%">
|
||||
<a-drawer :visible="Seevisible" class="drawerStyle seestu" placement="right" width="70%" :zIndex="1005">
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">查看</div>
|
||||
@@ -193,14 +193,14 @@ export default {
|
||||
};
|
||||
|
||||
const getStuRank = () => {
|
||||
projectStudentRank({projectId: props.projectId, studentId: props.checkStuId}).then(res => state.rank = res.data.data)
|
||||
props.projectId && props.checkStuId && projectStudentRank({projectId: props.projectId, studentId: props.checkStuId}).then(res => state.rank = res.data.data)
|
||||
}
|
||||
const showProMess = () => {
|
||||
state.Provisible = true;
|
||||
};
|
||||
const check = () => {
|
||||
state.loading = true
|
||||
projectStudentProcess({projectId: props.projectId, userId: props.checkStuId}).then((res) => {
|
||||
props.projectId && props.checkStuId && projectStudentProcess({projectId: props.projectId, userId: props.checkStuId}).then((res) => {
|
||||
state.loading = false
|
||||
state.info = res.data.data;
|
||||
})
|
||||
|
||||
@@ -22,17 +22,14 @@
|
||||
style="border: 1px solid #f2f6fe"
|
||||
:columns="tablecolumns"
|
||||
:data-source="tabledata"
|
||||
:loading="tableDataTotal === -1 ? true : false"
|
||||
@expand="expandTable"
|
||||
:pagination="false"
|
||||
/>
|
||||
|
||||
<div class="pa">
|
||||
<a-pagination
|
||||
v-if="tableDataTotal > 10"
|
||||
:showSizeChanger="false"
|
||||
showQuickJumper="true"
|
||||
hideOnSinglePage="true"
|
||||
:showQuickJumper="true"
|
||||
:hideOnSinglePage="true"
|
||||
:pageSize="pageSize"
|
||||
:current="currentPage"
|
||||
:total="tableDataTotal"
|
||||
@@ -138,7 +135,7 @@ export default {
|
||||
studentScoreList(obj).then((res) => {
|
||||
console.log("dede", res.data.data);
|
||||
let result = res.data.data;
|
||||
state.tableDataTotal = result.pageSize;
|
||||
state.tableDataTotal = result.total;
|
||||
if (result.pageSize > 0) {
|
||||
setTable(result.rows);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<div class="main">
|
||||
<div class="onerow">
|
||||
<div class="assname">评估名称:</div>
|
||||
<div class="asscontent">{{evalName}}</div>
|
||||
<div class="asscontent">{{evalName || assessmentData.assessmentName}}</div>
|
||||
</div>
|
||||
<div class="onerow" style="margin-top: 30px">
|
||||
<div class="assname">评估说明:</div>
|
||||
@@ -167,6 +167,10 @@ export default {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
assessmentId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
datasource: {
|
||||
type: Object,
|
||||
default: function () {
|
||||
@@ -177,6 +181,7 @@ export default {
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
value: "1",
|
||||
assessmentData: {},
|
||||
questionListArr: [],
|
||||
valueq1:"",
|
||||
valueq2:""
|
||||
@@ -198,17 +203,13 @@ export default {
|
||||
}
|
||||
|
||||
const afterVisibleChange = (bool) => {
|
||||
console.log("state", bool);
|
||||
if(bool){
|
||||
console.log('我是传递过来的参数', props.datasource)
|
||||
console.log('我是传递过来的参数2', props.basicdata)
|
||||
api.QueryAssessmentDetail({
|
||||
"assessmentSubmitId": props.datasource.assessmentSubmitId?props.datasource.assessmentSubmitId:props.datasource.assessmentResultIds,
|
||||
"courseId": props.datasource.courseId,
|
||||
"courseId": props.assessmentId,
|
||||
"studentId": props.datasource.studentId
|
||||
}).then(res=>{
|
||||
console.log(res)
|
||||
if(res.data.code==200){
|
||||
state.assessmentData = res.data.data
|
||||
let qarr = [res.data.data.essayQuestionVoList, res.data.data.multipleStemVoList,res.data.data.scoringQuestionVoList,res.data.data.singleStemVoList]
|
||||
let allArr = []
|
||||
for(let i=0;i<qarr.length;i++){
|
||||
@@ -219,9 +220,6 @@ export default {
|
||||
let newarr = formateArr(allArr).sort((a, b) => { return a.orderNumber - b.orderNumber})
|
||||
state.questionListArr = newarr
|
||||
console.log('我是经过排序后的题目',newarr)
|
||||
}
|
||||
}).catch(err=>{
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
@@ -580,11 +580,10 @@ export default {
|
||||
state.selectTaskId = info.finishType == 3 ? info.finishValue : null;
|
||||
state.selectExamId = info.finishType == 4 ? info.finishValue : null;
|
||||
state.score = info.finishType == 5 ? info.finishValue : null; //积分
|
||||
|
||||
let timer = setInterval(() => {
|
||||
if (
|
||||
state.stageList.length !== 0 &&
|
||||
state.taskList.length !== 0 &&
|
||||
state.stageList.length !== 0 ||
|
||||
state.taskList.length !== 0 ||
|
||||
state.examList.length !== 0
|
||||
) {
|
||||
if (info.finishType == 2) {
|
||||
@@ -691,6 +690,10 @@ export default {
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.AddCertificate > .ant-drawer-content-wrapper {
|
||||
min-width: 800px !important;
|
||||
width: 800px !important;
|
||||
}
|
||||
.ant-table-striped :deep(.table-striped) td {
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
|
||||
@@ -18,13 +18,11 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="main">
|
||||
<div class="minatitl">
|
||||
<div class="up1" style="font-weight: bolder">导入小组长</div>
|
||||
<!--<div class="up2" @click="downTemplate" style="cursor: pointer">-->
|
||||
<!--模板-->
|
||||
<!--</div>-->
|
||||
<div class="up1" v-if="templateUrl">
|
||||
请下载
|
||||
<a :href="templateUrl" target="_blank">模版</a>
|
||||
,按要求填写并导入
|
||||
</div>
|
||||
<div class="up1">请先导出小组填写小组长,按要求填写数据并导入</div>
|
||||
<div class="upload">
|
||||
<div class="text">上传:</div>
|
||||
<div class="right">
|
||||
@@ -36,7 +34,6 @@
|
||||
:action="uploadUrl"
|
||||
@change="handleChange"
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="beforeUpload"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<inbox-outlined></inbox-outlined>
|
||||
@@ -66,7 +63,7 @@
|
||||
<div class="curloading">
|
||||
<div style="color: #387df7; margin-left: 20px; cursor: pointer"
|
||||
v-if="file.uploadState?.status === 'FAILED'" @click="downloadErrorData(file.uploadState?.url)">
|
||||
下载失败数据1
|
||||
下载失败数据
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -130,10 +127,6 @@ const closeDrawer = () => {
|
||||
function openDrawer() {
|
||||
visible.value = true
|
||||
}
|
||||
//
|
||||
// function downTemplate() {
|
||||
// window.open(process.env.VUE_APP_BASE_API + props.templateUrl);
|
||||
// }
|
||||
|
||||
function downloadErrorData(url) {
|
||||
window.open(process.env.VUE_APP_FILE_PATH + url)
|
||||
|
||||
@@ -69,11 +69,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
<!--
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu" v-if="checkPer(permissions,createId)">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -120,6 +120,7 @@ import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
export default {
|
||||
name: "ProjectEvalManage",
|
||||
|
||||
@@ -343,8 +344,22 @@ export default {
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//项目催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.stageId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -178,12 +178,12 @@ export default {
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "9",
|
||||
value: "1",
|
||||
label: "已完成",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: "1",
|
||||
value: "9",
|
||||
label: "进行中",
|
||||
},
|
||||
],
|
||||
@@ -259,8 +259,8 @@ export default {
|
||||
},
|
||||
{
|
||||
title: "考试次数",
|
||||
dataIndex: "num",
|
||||
key: "num",
|
||||
dataIndex: "testNumber",
|
||||
key: "testNumber",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
@@ -268,15 +268,15 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.num?text.record.num:"-"}</span>
|
||||
<span> {text.record.testNumber?text.record.testNumber:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "成绩",
|
||||
dataIndex: "examinationScore",
|
||||
key: "examinationScore",
|
||||
dataIndex: "score",
|
||||
key: "score",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
@@ -284,7 +284,7 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.examinationScore?text.record.examinationScore:"-"}</span>
|
||||
<span> {text.record.score?text.record.score:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -292,8 +292,8 @@ export default {
|
||||
|
||||
{
|
||||
title: "完成时间",
|
||||
dataIndex: "examinationSubmitTime",
|
||||
key: "examinationSubmitTime",
|
||||
dataIndex: "finishedTime",
|
||||
key: "finishedTime",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
@@ -301,7 +301,7 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.examinationSubmitTime?text.record.examinationSubmitTime:"-"}</span>
|
||||
<span> {text.record.finishedTime?text.record.finishedTime:"-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -314,7 +314,7 @@ export default {
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: ({record:{status}}) => ({1:'进行中',0:'未开始',9:'已完成'}[status] || '未开始'),
|
||||
customRender: ({record:{status}}) => ({1:'已完成',0:'未开始',9:'已完成'}[status] || '未开始'),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
@@ -379,7 +379,7 @@ export default {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.stageId,//阶段或关卡Id
|
||||
|
||||
@@ -366,7 +366,7 @@
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.stageId,//阶段或关卡Id
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<template>
|
||||
<a-drawer
|
||||
:visible="FSvisible"
|
||||
class="drawerStyle ProjectFaceStu"
|
||||
class="drawerStyle RouterFaceStu"
|
||||
placement="right"
|
||||
width="80%"
|
||||
@after-visible-change="afterVisibleChange"
|
||||
>
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">【面授】{{ projectTaskInfo?.name }}</div>
|
||||
<div class="headerTitle">【面授】{{ datasource?.name }}</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../../assets/images/basicinfo/close.png"
|
||||
@@ -17,21 +17,29 @@
|
||||
</div>
|
||||
<div class="main">
|
||||
<div class="titl">
|
||||
<div class="endtime">
|
||||
起止时间:{{
|
||||
projectTaskInfo && projectTaskInfo.startTime
|
||||
? projectTaskInfo.startTime
|
||||
: "-"
|
||||
}}
|
||||
~
|
||||
{{
|
||||
projectTaskInfo && projectTaskInfo.endTime
|
||||
? projectTaskInfo.endTime
|
||||
: "-"
|
||||
}}
|
||||
</div>
|
||||
<div class="endtime" style="margin-left: 64px">
|
||||
允许签到时段:{{ beginTime }}~{{ endTime }}
|
||||
<div
|
||||
style="width: 100%;height:220px;display: flex;flex-wrap: nowrap;overflow-x: scroll;">
|
||||
<div v-for="item,n in [1,2,3]" :key="n" style="cursor: pointer;">
|
||||
<div
|
||||
@click="ChoiceCourse(item)"
|
||||
style="width: 360px;height:180px;margin-right: 32px;display: flex;flex-direction: column;padding: 16px;"
|
||||
:style="{background:item==currentCourse?'rgb(247, 251, 253)':'rgb(250, 250, 250)'}">
|
||||
<div style="font-size: 16px;">第{{item}}次开课</div>
|
||||
<div style="font-size: 14px;margin-top: 12px;">2023年管理者面授课程({{item}})</div>
|
||||
<div style="font-size: 14px;">
|
||||
<img src="../../../assets/images/courseManage/time.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
2023.3.14 12:34 ~ 2023.3.17 12:34
|
||||
</div>
|
||||
<div style="font-size: 14px;margin-top: 6px;margin-bottom: 6px;">
|
||||
<img src="../../../assets/images/courseManage/position.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
京东方大厦({{item}})号楼
|
||||
</div>
|
||||
<div style="font-size: 14px;">
|
||||
<img src="../../../assets/images/courseManage/persion.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
董瑞华
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,12 +53,12 @@
|
||||
placeholder="请输入姓名"
|
||||
/>
|
||||
</div>
|
||||
<!-- <div class="namecon" style="margin-right: 30px">
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
<div class="name">考勤:</div>
|
||||
<div class="select">
|
||||
<a-select
|
||||
v-model:value="projectName"
|
||||
style="width: 160px"
|
||||
style="width: 200px"
|
||||
placeholder="请选择"
|
||||
:options="projectNameList"
|
||||
@change="selectProjectName"
|
||||
@@ -58,7 +66,7 @@
|
||||
showSearch
|
||||
></a-select>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="namecon">
|
||||
<div class="name">签到状态:</div>
|
||||
<div class="select">
|
||||
@@ -82,13 +90,13 @@
|
||||
<div class="img1"></div>
|
||||
<div class="wz">搜索</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="resetTaskList">
|
||||
<div class="btn btn1" @click="resetTaskList">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">重置</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<div
|
||||
class="btn btn1"
|
||||
style="margin-right: 20px"
|
||||
@@ -100,10 +108,10 @@
|
||||
<div class="img1"></div>
|
||||
<div class="wz">导入学员</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="showCopyModal">
|
||||
<div class="btn btn1" @click="showCopyModal" style="margin-right: 20px">
|
||||
<div class="wz">批量签到</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="btn btn1" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
</div>
|
||||
@@ -121,14 +129,13 @@
|
||||
<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
|
||||
style="border: 1px solid #f2f6fe"
|
||||
:columns="tableDataFunc()"
|
||||
:data-source="tabledata"
|
||||
:loading="tableDataTotal === -1 ? true : false"
|
||||
expandRowByClick="true"
|
||||
@expand="expandTable"
|
||||
:scroll="{ x: 1300 }"
|
||||
@@ -185,7 +192,7 @@
|
||||
<imp-stu
|
||||
v-model:AddImpStuvisible="AddImpStuvisible"
|
||||
@AddImpStuvisibleClose="AddImpStuvisibleClose"
|
||||
:courseId="projectTaskInfo.courseId"
|
||||
:courseId="datasource.courseId"
|
||||
:courseType="3"
|
||||
/>
|
||||
<!-- 批量签到弹窗 -->
|
||||
@@ -237,6 +244,8 @@ import * as api from "../../../api/index1";
|
||||
import TwoDimensionalCode from "../../../components/TwoDimensionalCode";
|
||||
import { message } from "ant-design-vue";
|
||||
import { toDate } from "../../../api/method";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
|
||||
export default {
|
||||
name: "FaceManage",
|
||||
components: {
|
||||
@@ -245,11 +254,19 @@ export default {
|
||||
TwoDimensionalCode,
|
||||
},
|
||||
props: {
|
||||
createId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
permissions: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
FSvisible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
projectTaskInfo: {
|
||||
datasource: {
|
||||
type: Object,
|
||||
default: function () {
|
||||
return {};
|
||||
@@ -267,6 +284,7 @@ export default {
|
||||
closeStop: false, //签退弹窗关闭图标
|
||||
signQRvisible: false, //二维码弹窗
|
||||
name: null,
|
||||
projectName: undefined,
|
||||
projectName2: undefined,
|
||||
showmodal: false, //勾选提示框
|
||||
closable: false, //modal右上角的关闭按钮
|
||||
@@ -279,23 +297,23 @@ export default {
|
||||
projectNameList: [
|
||||
{
|
||||
id: 1,
|
||||
value: "项目一",
|
||||
label: "项目一",
|
||||
value: "签到",
|
||||
label: "签到",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "项目二",
|
||||
label: "项目二",
|
||||
value: "缺勤",
|
||||
label: "缺勤",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: "项目三",
|
||||
label: "项目三",
|
||||
value: "迟到",
|
||||
label: "迟到",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
value: "项目四",
|
||||
label: "项目四",
|
||||
value: "请假",
|
||||
label: "请假",
|
||||
},
|
||||
],
|
||||
projectNameList2: [
|
||||
@@ -339,17 +357,24 @@ export default {
|
||||
value: "3",
|
||||
},
|
||||
],
|
||||
// selectOption: [],
|
||||
codevisible: false, //二维码弹窗
|
||||
codeType: null,
|
||||
codeIndex: null,
|
||||
codeInfo: null, //二维码内容
|
||||
// selectOption: [],
|
||||
beginTime: null, //签到开始时间
|
||||
endTime: null, //签到结束时间
|
||||
currentCourse: 1,
|
||||
});
|
||||
|
||||
const ChoiceCourse = (n) => {
|
||||
state.currentCourse = n;
|
||||
}
|
||||
|
||||
const afterVisibleChange = (bol) => {
|
||||
if (bol == true) {
|
||||
getStudent();
|
||||
console.log("1111");
|
||||
isSignClick();
|
||||
}
|
||||
};
|
||||
@@ -391,14 +416,13 @@ export default {
|
||||
//批量签到
|
||||
const batchSign = () => {
|
||||
let obj = {
|
||||
courseId: Number(props.projectTaskInfo.courseId),
|
||||
projectId: Number(props.projectTaskInfo.projectId),
|
||||
// routerId: Number(props.projectTaskInfo.projectId),
|
||||
courseId: Number(props.datasource.courseId),
|
||||
// projectId: 0,
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: state.selectedStudents,
|
||||
taskId: Number(props.projectTaskInfo.projectTaskId),
|
||||
taskType: Number(props.projectTaskInfo.type),
|
||||
type: 3,
|
||||
// userName: "",
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 2,
|
||||
};
|
||||
api
|
||||
.attendanceSign(obj)
|
||||
@@ -418,32 +442,17 @@ export default {
|
||||
console.log("签到失败", err, obj);
|
||||
});
|
||||
};
|
||||
|
||||
// const closeStopModal = () => {
|
||||
// state.stopModal = false;
|
||||
// };
|
||||
//显示签到二维码弹窗
|
||||
//二维码
|
||||
const qrcodeVisible = () => {
|
||||
state.codevisible = true;
|
||||
state.codeInfo = {
|
||||
title: "【签到】二维码",
|
||||
name: props.projectTaskInfo?.name,
|
||||
url:
|
||||
process.env.VUE_APP_BASE_API +
|
||||
`/admin/student/studentSign?taskId=${
|
||||
props.projectTaskInfo.projectTaskId
|
||||
}&taskType=${props.projectTaskInfo.type}&type=${1}`,
|
||||
};
|
||||
console.log("codeInfo", state.codeInfo);
|
||||
state.codeIndex = 0;
|
||||
state.codeType = 1;
|
||||
const signQR = () => {
|
||||
state.signQRvisible = true;
|
||||
};
|
||||
|
||||
const onSelectChange = (selectedRowKeys, e) => {
|
||||
console.log("selectedRowKeys changed: ", selectedRowKeys, e);
|
||||
console.log("selectedRowKeys changed: ", selectedRowKeys);
|
||||
state.selectedRowKeys = selectedRowKeys;
|
||||
// state.selectedStudents=e
|
||||
let array = [];
|
||||
for (let i = 0; i < e.length; i++) {
|
||||
array.push(e[i].studentId);
|
||||
@@ -455,44 +464,7 @@ export default {
|
||||
state.selectedRowKeys = [];
|
||||
state.selectedStudents = [];
|
||||
};
|
||||
// const getTableData = () => {
|
||||
// let arr = state.tabledata;
|
||||
// arr.map((value) => {
|
||||
// // console.log("value", value);
|
||||
// value.opacation = (
|
||||
// <div class="opa">
|
||||
// <a-checkbox
|
||||
// checked={value.signIn}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击签到", e);
|
||||
// }}
|
||||
// >
|
||||
// 签到
|
||||
// </a-checkbox>
|
||||
// {/**
|
||||
// <a-checkbox
|
||||
// checked={value.signOut}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击签退", e);
|
||||
// }}
|
||||
// >
|
||||
// 签退
|
||||
// </a-checkbox>
|
||||
// */}
|
||||
// <a-checkbox
|
||||
// checked={value.leave}
|
||||
// onChange={(e) => {
|
||||
// console.log("点击请假", e);
|
||||
// }}
|
||||
// >
|
||||
// 请假
|
||||
// </a-checkbox>
|
||||
// </div>
|
||||
// );
|
||||
// });
|
||||
// state.tabledata = arr;
|
||||
// };
|
||||
// getTableData();
|
||||
|
||||
const tableDataFunc = () => {
|
||||
const columns = [
|
||||
{
|
||||
@@ -500,7 +472,7 @@ export default {
|
||||
dataIndex: "studentUserNo",
|
||||
// width: "30%",
|
||||
key: "studentUserNo",
|
||||
width: 50,
|
||||
width: 120,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
@@ -538,10 +510,10 @@ export default {
|
||||
dataIndex: "studentDepartName",
|
||||
// width: "30%",
|
||||
key: "studentDepartName",
|
||||
width: 50,
|
||||
width: 60,
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
@@ -590,6 +562,38 @@ export default {
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "考勤",
|
||||
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: "签到状态",
|
||||
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: "签退时间",
|
||||
// dataIndex: "jin",
|
||||
@@ -598,45 +602,6 @@ export default {
|
||||
// align: "center",
|
||||
// className: "h",
|
||||
// },
|
||||
{
|
||||
title: "考勤",
|
||||
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: "signStatus",
|
||||
key: "signStatus",
|
||||
width: 50,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span>{ text.record.signStatus == null && new Date().getTime() > new Date(state.endTime).getTime() ? "异常" : text.record.signStatus ? "正常" : text.record.leaveStatus ? "异常" : text.record.signStatus == null ? "-" : "异常" }</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "考勤情况",
|
||||
ellipsis: true,
|
||||
@@ -648,6 +613,7 @@ export default {
|
||||
// scopedSlots: { customRender: "action" }, //引入的插槽
|
||||
|
||||
customRender: (text) => {
|
||||
// console.log("text.record.signStatus", text.record.signStatus);
|
||||
return (
|
||||
<div class="opa">
|
||||
<a-radio
|
||||
@@ -656,15 +622,14 @@ export default {
|
||||
onChange={(e) => {
|
||||
console.log("点击签到", e);
|
||||
let obj = {
|
||||
courseId: Number(props.projectTaskInfo.courseId),
|
||||
projectId: Number(props.projectTaskInfo.projectId),
|
||||
// routerId: Number(props.projectTaskInfo.projectId),
|
||||
courseId: Number(props.datasource.courseId),
|
||||
// projectId: 0,
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: [text.record.studentId],
|
||||
studentName: text.record.studentName,
|
||||
taskId: Number(props.projectTaskInfo.projectTaskId),
|
||||
taskType: Number(props.projectTaskInfo.type),
|
||||
type: 3,
|
||||
// userName: "",
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 2,
|
||||
};
|
||||
api
|
||||
.attendanceSign(obj)
|
||||
@@ -688,16 +653,17 @@ export default {
|
||||
value="2"
|
||||
checked={text.record.leaveStatus}
|
||||
onChange={(e) => {
|
||||
console.log("点击请假", e, props.projectTaskInfo);
|
||||
console.log("点击请假", e, props.datasource);
|
||||
let obj = {
|
||||
courseId: Number(props.projectTaskInfo.courseId),
|
||||
projectId: Number(props.projectTaskInfo.projectId),
|
||||
// routerId: Number(props.projectTaskInfo.projectId),
|
||||
courseId: Number(props.datasource.courseId),
|
||||
// projectId: 0,
|
||||
routerId: Number(props.datasource.routerId),
|
||||
ids: [text.record.studentId],
|
||||
studentName: text.record.studentName,
|
||||
taskId: Number(props.projectTaskInfo.projectTaskId),
|
||||
taskType: Number(props.projectTaskInfo.type),
|
||||
type: 3,
|
||||
taskId: Number(props.datasource.routerTaskId),
|
||||
taskType: Number(props.datasource.type),
|
||||
type: 2,
|
||||
// userName: "",
|
||||
};
|
||||
api
|
||||
.attendanceLeave(obj)
|
||||
@@ -717,76 +683,6 @@ export default {
|
||||
>
|
||||
请假
|
||||
</a-radio>
|
||||
|
||||
{/**
|
||||
<a-checkbox
|
||||
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: [Number(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-checkbox>
|
||||
<a-checkbox
|
||||
checked={text.record.leave}
|
||||
onChange={(e) => {
|
||||
console.log("点击请假", e, props.projectTaskInfo);
|
||||
let obj = {
|
||||
courseId: Number(props.projectTaskInfo.courseId),
|
||||
projectId: Number(props.projectTaskInfo.projectId),
|
||||
// routerId: Number(props.projectTaskInfo.projectId),
|
||||
studentId: Number(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-checkbox>
|
||||
<a-checkbox
|
||||
checked={value.signOut}
|
||||
onChange={(e) => {
|
||||
console.log("点击签退", e);
|
||||
}}
|
||||
>
|
||||
签退
|
||||
</a-checkbox>
|
||||
*/}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -797,18 +693,30 @@ export default {
|
||||
|
||||
//获取学员
|
||||
const getStudent = () => {
|
||||
console.log("我是传递的查询参数222", props.datasource, {
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.datasource.chapterId,
|
||||
type: 2,
|
||||
pid: props.datasource.routerId,
|
||||
// status: Number(state.name),
|
||||
studentName: state.name,
|
||||
signStatus: state.projectName2,
|
||||
taskId: props.datasource.routerTaskId,
|
||||
taskType: props.datasource.type,
|
||||
});
|
||||
api
|
||||
.AssessmentManagementMessage({
|
||||
pageNo: state.currentPage,
|
||||
pageSize: state.pageSize,
|
||||
currentStageId: props.projectTaskInfo.stageId,
|
||||
// currentStageId: props.datasource.chapterId,
|
||||
type: 3,
|
||||
pid: props.projectTaskInfo.courseId,
|
||||
pid: props.datasource.courseId,
|
||||
// status: Number(state.name),
|
||||
studentName: state.name,
|
||||
// taskId: props.projectTaskInfo.projectTaskId,
|
||||
signStatus: state.projectName2,
|
||||
// taskType: props.projectTaskInfo.type,
|
||||
studentName: state.name,
|
||||
// taskId: props.datasource.routerTaskId,
|
||||
// taskType: props.datasource.type,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log("获取面授管理学员", res);
|
||||
@@ -826,6 +734,7 @@ export default {
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.tabledata = [];
|
||||
state.tabledata = [{name:'测试数据'}];
|
||||
});
|
||||
};
|
||||
//搜索学员
|
||||
@@ -837,6 +746,7 @@ export default {
|
||||
};
|
||||
// 重置按钮
|
||||
function resetTaskList() {
|
||||
state.projectName = undefined;
|
||||
state.currentPage = 1;
|
||||
state.name = null;
|
||||
state.projectName2 = undefined;
|
||||
@@ -853,27 +763,33 @@ export default {
|
||||
};
|
||||
// 导出数据
|
||||
function exportTaskStu() {
|
||||
console.log("props.projectTaskInfo", props.projectTaskInfo);
|
||||
console.log("props.datasource", props.datasource);
|
||||
window.open(
|
||||
`${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.projectTaskInfo.stageId}&type=3&pid=${props.projectTaskInfo.courseId}&thirdType=6`
|
||||
`${
|
||||
process.env.VUE_APP_BASE_API
|
||||
}/admin/student/exportTaskStudent?currentStageId=${
|
||||
props.datasource.chapterId
|
||||
}&type=3&pid=${props.datasource.courseId}&thirdType=7&taskId=${props.datasource.routerTaskId}`
|
||||
);
|
||||
// api
|
||||
// .exportTaskStudent({
|
||||
// pageNo: state.currentPage,
|
||||
// pageSize: state.pageSize,
|
||||
// currentStageId: props.projectTaskInfo.stageId,
|
||||
// currentTaskId: props.projectTaskInfo.projectTaskId,
|
||||
// type: 1,
|
||||
// pid: props.projectTaskInfo.projectId,
|
||||
// })
|
||||
// .then((res) => {
|
||||
// console.log(res);
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// console.log(err);
|
||||
// });
|
||||
}
|
||||
|
||||
//二维码
|
||||
const qrcodeVisible = () => {
|
||||
state.codevisible = true;
|
||||
state.codeInfo = {
|
||||
title: "【签到】二维码",
|
||||
name: props.datasource?.name,
|
||||
url:
|
||||
process.env.VUE_APP_BASE_API +
|
||||
`/admin/student/studentSign?taskId=${
|
||||
props.datasource.routerTaskId
|
||||
}&taskType=${props.datasource.type}&type=${2}`,
|
||||
};
|
||||
console.log("codeInfo", state.codeInfo);
|
||||
state.codeIndex = 0;
|
||||
state.codeType = 1;
|
||||
};
|
||||
|
||||
{
|
||||
/* 添加学员弹框关闭,重新获取学员列表 */
|
||||
}
|
||||
@@ -886,42 +802,35 @@ 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("beginTime,endTime", beginTime, endTime);
|
||||
if (
|
||||
props.projectTaskInfo.beforeStart &&
|
||||
props.projectTaskInfo.afterStart
|
||||
) {
|
||||
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.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.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.projectTaskInfo.beforeStart * 60 * 1000;
|
||||
console.log("11112222");
|
||||
} else if (
|
||||
!props.projectTaskInfo.beforeStart &&
|
||||
props.projectTaskInfo.afterStart
|
||||
) {
|
||||
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
|
||||
console.log("11112222", beginTime);
|
||||
} else if (!props.datasource.beforeStart && props.datasource.afterStart) {
|
||||
//无开始前有开始后
|
||||
endTime = endTime + props.projectTaskInfo.afterStart * 60 * 1000;
|
||||
console.log("1111333");
|
||||
endTime = endTime + props.datasource.afterStart * 60 * 1000;
|
||||
console.log("1111333", endTime);
|
||||
}
|
||||
|
||||
state.beginTime = toDate(beginTime / 1000, "Y/M/D h:m");
|
||||
state.endTime = toDate(endTime / 1000, "Y/M/D h:m");
|
||||
console.log("beginTime,endTime", state.beginTime, state.endTime);
|
||||
};
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
selectProjectName,
|
||||
@@ -933,16 +842,18 @@ export default {
|
||||
showCopyModal,
|
||||
closeCopyModal,
|
||||
// closeStopModal,
|
||||
qrcodeVisible,
|
||||
signQR,
|
||||
afterVisibleChange,
|
||||
|
||||
checkPer,
|
||||
searchTaskList,
|
||||
resetTaskList,
|
||||
changePaginationStu,
|
||||
exportTaskStu,
|
||||
clearLine,
|
||||
qrcodeVisible,
|
||||
AddImpStuvisibleClose,
|
||||
batchSign,
|
||||
ChoiceCourse,
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -1065,7 +976,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.ProjectFaceStu {
|
||||
.RouterFaceStu {
|
||||
// // width: 80%;
|
||||
// .ant-drawer-content-wrapper {
|
||||
// // max-width: 1000px;
|
||||
@@ -1161,7 +1072,7 @@ export default {
|
||||
.img2 {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
background-image: url(../../../assets/images/courseManage/reset1.png);
|
||||
background-image: url(../../../assets/images/courseManage/reset0.png);
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
@@ -1202,7 +1113,7 @@ export default {
|
||||
.img2 {
|
||||
width: 17px;
|
||||
height: 16px;
|
||||
background-image: url(../../../assets/images/coursewareManage/export.png);
|
||||
background-image: url(../../../assets/images/coursewareManage/export1.png);
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -68,6 +68,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -165,6 +169,7 @@ import EScore from "../ExportScore.vue";
|
||||
import * as api from "../../../api/index1";
|
||||
import ExportHomeWork from "../../Modals/ExportHomeWork.vue";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
export default {
|
||||
name: "ProjectHomeWorkManage",
|
||||
components: {
|
||||
@@ -503,8 +508,22 @@ export default {
|
||||
};
|
||||
//催促学员学习
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//项目催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.projectTaskInfo.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.projectTaskInfo.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.projectTaskInfo.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.projectTaskInfo.type,//催促的任务的类型
|
||||
'chapterId': props.projectTaskInfo.stageId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
//表头清空
|
||||
const clearLine = () => {
|
||||
|
||||
@@ -85,11 +85,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
<!-- <div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<div class="btn btn2" @click="exportTaskStu" v-if="checkPer(permissions,createId)">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -139,6 +139,7 @@ import { message } from "ant-design-vue";
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import ViewAssess from "../ViewAssess";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
|
||||
export default {
|
||||
name: "ProjectOnlineManage",
|
||||
@@ -337,9 +338,9 @@ export default {
|
||||
return (
|
||||
<div class="racona">
|
||||
<a
|
||||
style={{color:text.record.finishStatus == 1 ?"":"#666"}}
|
||||
onClick={()=>{
|
||||
console.log('iyiy', text.record)
|
||||
showassess(text.record);
|
||||
text.record.finishStatus==1 && showassess(text.record);
|
||||
}}>查看</a>
|
||||
</div>
|
||||
);
|
||||
@@ -379,8 +380,21 @@ export default {
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.stageId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -69,11 +69,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
<!--
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu" v-if="checkPer(permissions,createId)">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -126,6 +126,7 @@
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import CVote from "../CheckVote.vue"
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
|
||||
export default {
|
||||
name: "ProjectVoteManage",
|
||||
@@ -351,8 +352,22 @@
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//项目催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.stageId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -85,11 +85,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<!--
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -139,6 +139,7 @@ import ViewAssess from "../ViewAssess";
|
||||
// import * as api from "../../../api/index";
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
export default {
|
||||
name: "RouterCommonManage",
|
||||
components: { ViewAssess },
|
||||
@@ -344,9 +345,9 @@ export default {
|
||||
return (
|
||||
<div class="racona">
|
||||
<a
|
||||
style={{color:text.record.finishStatus == 1 ?"":"#666"}}
|
||||
onClick={()=>{
|
||||
console.log('iyiy', text.record)
|
||||
showassess(text.record);
|
||||
text.record.finishStatus == 1 && showassess(text.record);
|
||||
}}>查看</a>
|
||||
</div>
|
||||
);
|
||||
@@ -386,8 +387,22 @@ export default {
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//考试催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -68,10 +68,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<!-- <div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -118,6 +118,7 @@ import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
export default {
|
||||
name: "RouterEvaluationManage",
|
||||
|
||||
@@ -341,8 +342,22 @@ export default {
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//考试催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
|
||||
@@ -240,8 +240,8 @@ export default {
|
||||
},
|
||||
{
|
||||
title: "考试次数",
|
||||
dataIndex: "num",
|
||||
key: "num",
|
||||
dataIndex: "testNumber",
|
||||
key: "testNumber",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
@@ -249,7 +249,7 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.num ? text.record.num : "-"}</span>
|
||||
<span> {text.record.testNumber ? text.record.testNumber : "-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -265,7 +265,7 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.examinationScore ? text.record.examinationScore : "-"}</span>
|
||||
<span> {text.record.score ? text.record.score : "-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -273,8 +273,8 @@ export default {
|
||||
|
||||
{
|
||||
title: "完成时间",
|
||||
dataIndex: "examinationSubmitTime",
|
||||
key: "examinationSubmitTime",
|
||||
dataIndex: "finishedTime",
|
||||
key: "finishedTime",
|
||||
width: 60,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
@@ -282,7 +282,7 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<span> {text.record.examinationSubmitTime ? text.record.examinationSubmitTime : "-"}</span>
|
||||
<span> {text.record.finishedTime ? text.record.finishedTime : "-"}</span>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -380,7 +380,7 @@ export default {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,11 +18,30 @@
|
||||
</div>
|
||||
<div class="main">
|
||||
<div class="endtime">
|
||||
起止时间:{{
|
||||
datasource && datasource.startTime ? datasource.startTime : "-"
|
||||
}}
|
||||
~
|
||||
{{ datasource && datasource.endTime ? datasource.endTime : "-" }}
|
||||
<div
|
||||
style="width: 100%;height:220px;display: flex;flex-wrap: nowrap;overflow-x: scroll;">
|
||||
<div v-for="item,n in [1,2,3]" :key="n" style="cursor: pointer;">
|
||||
<div
|
||||
@click="ChoiceCourse(item)"
|
||||
style="width: 360px;height:180px;margin-right: 32px;display: flex;flex-direction: column;padding: 16px;"
|
||||
:style="{background:item==currentCourse?'rgb(247, 251, 253)':'rgb(250, 250, 250)'}">
|
||||
<div style="font-size: 16px;">第{{item}}次开课</div>
|
||||
<div style="font-size: 14px;margin-top: 12px;">2023年管理者面授课程({{item}})</div>
|
||||
<div style="font-size: 14px;">
|
||||
<img src="../../../assets/images/courseManage/time.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
2023.3.14 12:34 ~ 2023.3.17 12:34
|
||||
</div>
|
||||
<div style="font-size: 14px;margin-top: 6px;margin-bottom: 6px;">
|
||||
<img src="../../../assets/images/courseManage/position.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
京东方大厦({{item}})号楼
|
||||
</div>
|
||||
<div style="font-size: 14px;">
|
||||
<img src="../../../assets/images/courseManage/persion.png" alt="" srcset="" style="width:16px;height:16px;">
|
||||
董瑞华
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search">
|
||||
<div class="namecon" style="margin-right: 30px">
|
||||
@@ -55,28 +74,28 @@
|
||||
<div class="img1"></div>
|
||||
<div class="wz">搜索</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="resetTaskList">
|
||||
<div class="btn btn1" @click="resetTaskList">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">重置</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<!--<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> -->
|
||||
<div class="btn btn2" @click="allStuOver">
|
||||
</div>
|
||||
<div class="btn btn1" @click="allStuOver" style="margin-right: 16px;">
|
||||
<div class="wz">批量标注完成</div>
|
||||
</div>
|
||||
<div class="btn btn2">
|
||||
<div class="btn btn1" style="margin-right: 16px;">
|
||||
<div class="wz" @click="showEntryScore">批量录入成绩</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="btn btn1" @click="exportTaskStu" style="margin-right: 16px;">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportHomeWorkShow">
|
||||
<div class="btn btn1" @click="exportHomeWorkShow">
|
||||
<div class="wz">导出作业</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -98,7 +117,6 @@
|
||||
style="border: 1px solid #f2f6fe"
|
||||
:columns="tablecolumns"
|
||||
:data-source="tabledata"
|
||||
:loading="tableDataTotal === -1 ? true : false"
|
||||
:scroll="{ x: 1300 }"
|
||||
:pagination="false"
|
||||
:row-selection="{
|
||||
@@ -242,18 +260,7 @@ export default {
|
||||
currentPage: 1,
|
||||
tableDataTotal: -1,
|
||||
tableDataTotal2: 0,
|
||||
tabledata: [
|
||||
// {
|
||||
// workNum: "123",
|
||||
// userName: "li",
|
||||
// deptName: "开发",
|
||||
// jobName: "前端开发",
|
||||
// score: 89,
|
||||
// exam: 98,
|
||||
// testscore: 80,
|
||||
// status: "已完成",
|
||||
// },
|
||||
],
|
||||
tabledata: [],
|
||||
tablecolumns: [
|
||||
{
|
||||
title: "工号",
|
||||
@@ -433,12 +440,33 @@ export default {
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: () => {
|
||||
return (
|
||||
<div class="racona">
|
||||
<a
|
||||
onClick={()=>{
|
||||
state.CWvisible = true;
|
||||
}}
|
||||
style="margin-right:12px;">查看作业</a>
|
||||
<a
|
||||
onClick={()=>{
|
||||
state.CAvisible = true;
|
||||
}}>查看答卷</a>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
],
|
||||
exportHomeWorkV: false,
|
||||
downloadUrl: null,
|
||||
CAvisible: false
|
||||
CAvisible: false,
|
||||
currentCourse: 1
|
||||
});
|
||||
|
||||
const ChoiceCourse = (n) => {
|
||||
state.currentCourse = n;
|
||||
}
|
||||
|
||||
//面授直播管理列表操作
|
||||
const ListOpera = () => {
|
||||
let arr = state.tabledata;
|
||||
@@ -540,7 +568,6 @@ export default {
|
||||
newData.push(res.data.data.records[i]);
|
||||
}
|
||||
state.tabledata = newData;
|
||||
state.tabledata = [{name:'小星星',workStatus:1}];
|
||||
ListOpera();
|
||||
state.tableDataTotal = res.data.data.total;
|
||||
state.tableDataTotal2 = res.data.data.total;
|
||||
@@ -549,6 +576,7 @@ export default {
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.tabledata = [];
|
||||
state.tabledata = [{name:'测试数据',workStatus:1}];
|
||||
});
|
||||
};
|
||||
//搜索学员
|
||||
@@ -652,6 +680,7 @@ export default {
|
||||
checkPer,
|
||||
clearLine,
|
||||
searchTaskList,
|
||||
ChoiceCourse,
|
||||
resetTaskList,
|
||||
changePaginationStu,
|
||||
exportTaskStu,
|
||||
@@ -742,7 +771,7 @@ export default {
|
||||
.img2 {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
background-image: url(../../../assets/images/courseManage/reset1.png);
|
||||
background-image: url(../../../assets/images/courseManage/reset0.png);
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
@@ -787,7 +816,7 @@ export default {
|
||||
.img2 {
|
||||
width: 17px;
|
||||
height: 16px;
|
||||
background-image: url(../../../assets/images/coursewareManage/export.png);
|
||||
background-image: url(../../../assets/images/coursewareManage/export1.png);
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -108,6 +112,7 @@ import EScore from "../ExportScore.vue";
|
||||
import * as api from "../../../api/index1";
|
||||
import ExportHomeWork from "../../Modals/ExportHomeWork.vue";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
export default {
|
||||
name: "RouterCommonManage",
|
||||
components: {
|
||||
@@ -445,8 +450,22 @@ export default {
|
||||
};
|
||||
//催促学员学习
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//考试催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
//表头清空
|
||||
const clearLine = () => {
|
||||
|
||||
@@ -69,11 +69,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<!--
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -112,26 +112,26 @@
|
||||
</div>-->
|
||||
</div>
|
||||
</a-drawer>
|
||||
<!-- 学员查看抽屉 -->
|
||||
<check-stu
|
||||
v-model:CheckStuvisible="CheckStuvisible"
|
||||
v-model:routerId="routerId"
|
||||
v-model:studentId="studentId"
|
||||
/>
|
||||
<see-stu
|
||||
v-model:Seevisible="CheckStuvisible"
|
||||
:checkStuId="studentId"
|
||||
:projectId="datasource.courseId"
|
||||
:certificateNum="datasource.certCount"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
import SeeStu from "@/components/drawers/SeeStu";
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import CheckStu from "../CheckStu";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
|
||||
export default {
|
||||
name: "RouterProjectManage",
|
||||
components:{
|
||||
CheckStu,
|
||||
SeeStu,
|
||||
},
|
||||
props: {
|
||||
createId: {
|
||||
@@ -202,8 +202,6 @@
|
||||
CVvisible:false, //查看投票抽屉
|
||||
voteID: "",
|
||||
courseID: "",
|
||||
|
||||
|
||||
routerId: '',
|
||||
studentId: '',
|
||||
CheckStuvisible: false,
|
||||
@@ -420,8 +418,22 @@
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//考试催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
@@ -69,11 +69,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
<!--
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportTaskStu">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -126,6 +126,7 @@
|
||||
import * as api from "../../../api/indexTaskManage";
|
||||
import CVote from "../CheckVote.vue"
|
||||
import {checkPer} from "@/utils/utils";
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
|
||||
export default {
|
||||
name: "RouterVoteManage",
|
||||
@@ -372,8 +373,22 @@
|
||||
};
|
||||
//催促
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
message.success("催促" + props.title + "成功");
|
||||
//考试催促请求报文
|
||||
var obj = {
|
||||
'courseId': props.datasource.courseId,//任务的Id
|
||||
'courseName': props.title,//任务的名称
|
||||
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
|
||||
'routerTaskId': props.datasource.id,//任务的routerTaskld或projectTaskld
|
||||
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
|
||||
'taskType': props.datasource.type,//催促的任务的类型
|
||||
'chapterId': props.datasource.chapterId,//阶段或关卡Id
|
||||
};
|
||||
batchSendMessage(obj).then(res => {
|
||||
console.log(res)
|
||||
message.success("催促" + props.title + "成功");
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
};
|
||||
const onChange = (pageNumber) => {
|
||||
console.log("Page: ", pageNumber);
|
||||
|
||||
Reference in New Issue
Block a user