mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-11 03:46:45 +08:00
'合并代码'
This commit is contained in:
30
src/App.vue
30
src/App.vue
@@ -52,17 +52,14 @@ function beforeunloadHandler() {
|
||||
|
||||
function init() {
|
||||
getUserInfo();
|
||||
initDict("faceclassPic");
|
||||
initDict("faceclassClass");
|
||||
initDict("faceclassScene");
|
||||
initDict("projectLevel");
|
||||
initDict("projectSys");
|
||||
initDict("pathmapPic");
|
||||
initDict("projectClass");
|
||||
initDict("projectPic");
|
||||
initDict("sysType");
|
||||
getMemberInfo();
|
||||
getUserPermission();
|
||||
initDict("content_type"); //内容分类
|
||||
initDict("project_level"); //项目级别
|
||||
initDict("project_sys"); //培训分类
|
||||
initDict("project_pic"); //项目封面
|
||||
initDict("router_pic"); //路径图封面
|
||||
initDict("course_pic"); //课程封面
|
||||
}
|
||||
|
||||
function unloadHandler() {
|
||||
@@ -91,17 +88,8 @@ async function getUserInfo() {
|
||||
store.commit("SET_USER", userInfo.data.data);
|
||||
}
|
||||
|
||||
async function initDict(key, localStory = false) {
|
||||
let list;
|
||||
if (localStory) {
|
||||
list = localStorage.getItem(key);
|
||||
if (list) {
|
||||
store.commit("SET_DICT", {key, data: JSON.parse(list)});
|
||||
return;
|
||||
}
|
||||
}
|
||||
list = await getDictList(key);
|
||||
localStory && localStorage.setItem(key, JSON.stringify(list));
|
||||
async function initDict(key) {
|
||||
const list = await getDictList(key);
|
||||
store.commit("SET_DICT", {key, data: list});
|
||||
}
|
||||
|
||||
@@ -111,7 +99,7 @@ function getUserPermission(){
|
||||
})
|
||||
}
|
||||
|
||||
const getDictList = (param) => api1.getDictTree({setCode: param,}).then((res) => res.data.data);
|
||||
const getDictList = (param) => api1.getDictTree({code: param,}).then((res) => res.data.data);
|
||||
</script>
|
||||
<style lang="scss">
|
||||
#app {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2022-11-04 22:45:31
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-02-09 09:36:11
|
||||
* @LastEditTime: 2023-02-11 16:22:43
|
||||
* @FilePath: /fe-manage/src/api/index1.js
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
@@ -92,6 +92,8 @@ export const editLearnInfo = (obj) => http.post('/admin/router/editInfo', obj)
|
||||
export const scoreRank = (params) => http.get('/points/top/list', { params })
|
||||
// 项目进度排行
|
||||
export const completionRank = (params) => http.get('/stu/project/rank_list/completion_list', { params })
|
||||
// 项目学时排行榜
|
||||
export const studytimeRank = (params) => http.get('/stu/project/rank_list/study_time_list', { params })
|
||||
//排行榜
|
||||
export const billboard = (obj) => http.post("/admin/project/billboard", obj);
|
||||
//项目基础信息-----------------------------------
|
||||
@@ -107,7 +109,7 @@ export const billboard = (obj) => http.post("/admin/project/billboard", obj);
|
||||
//公共信息---------------------------------------------------
|
||||
// 获取字典信息
|
||||
export const getDict = (obj) => http.post('/dict/getList', obj)
|
||||
export const getDictTree = (params) => http.get('/dict/getTree', { params })
|
||||
export const getDictTree = (params) => http.get('/dict', { params })
|
||||
//获取组织树一级列表
|
||||
export const getOrgTree = (obj) => http.post('/admin/router/orgList', obj)
|
||||
//根据id获取组织树一级元素下所有子元素
|
||||
@@ -219,3 +221,7 @@ export const updateStuCert = (obj) => http.post('/admin/certificate/updateStuCer
|
||||
|
||||
// 外部考试导入成绩
|
||||
export const ImportExternalExamScore = (obj) => http.post('/admin/external/exam/manage/importExternalExamScore', obj, { headers: { "Content-Type": "multipart/form-data" } })
|
||||
//分组
|
||||
export const changeGroupByStudentId = (obj) => http.post('/admin/student/changeGroupByStudentId', obj)
|
||||
//导入小组
|
||||
export const importGroup = (uuid) => http.post('/admin/studentGroup/importGroup/{pid}', { params: { uuid: uuid } })
|
||||
@@ -23,3 +23,5 @@ export const queryExaminationAloneExtendList = (obj) => http.post('/examination/
|
||||
export const examinationTaskSave = (obj) => http.post('/examination/examinationTaskSave', obj);
|
||||
//编辑考试信息
|
||||
export const updateExamination = (obj) => http.post('/examination/updateExamination', obj);
|
||||
//编辑外部考试信息
|
||||
export const updateExternalExam = (obj) => http.post('/external/exam/updateExternalExam', obj);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2022-11-18 14:09:43
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2022-12-05 15:27:36
|
||||
* @LastEditTime: 2023-02-11 18:55:44
|
||||
* @FilePath: /fe-manage/src/api/indexProjStu.js
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
@@ -43,3 +43,5 @@ export const studentScoreList = (obj) => http.post('/admin/project/studentScoreL
|
||||
|
||||
//添加项目学员
|
||||
export const addStudent = (obj) => http.post('/admin/project/addStudent', obj)
|
||||
//获取组员名单
|
||||
export const groupMemberList = (obj) => http.post('/admin/studentGroup/groupMemberList', obj)
|
||||
@@ -17,6 +17,27 @@
|
||||
</div>
|
||||
<!-- 2022-11-30注释 后面放开 修改div的padding-topL:32 -->
|
||||
<div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;">
|
||||
|
||||
<div v-if="edit">
|
||||
<button
|
||||
v-if="isOuter == 1"
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(1)"
|
||||
:class="[isOuter == 1 ? 'outer' : 'notOuter']"
|
||||
>
|
||||
系统考试
|
||||
</button>
|
||||
|
||||
<button
|
||||
v-else
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(2)"
|
||||
:class="[isOuter == 2 ? 'outer' : 'notOuter']"
|
||||
>
|
||||
外部考试
|
||||
</button>
|
||||
</div>
|
||||
<div v-else>
|
||||
<button
|
||||
style="width: 100px; cursor: pointer;"
|
||||
@click="changeOuter(1)"
|
||||
@@ -34,6 +55,8 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div v-if="isOuter==1" class="contentMain">
|
||||
<div class="main_left">
|
||||
<div class="main_item">
|
||||
@@ -48,6 +71,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input
|
||||
:disabled="edit"
|
||||
v-model:value="test.examinationName"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入考试名称"
|
||||
@@ -67,11 +91,11 @@
|
||||
<span style="margin-right: 3px">选择试卷:</span>
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<button class="xkbtn" @click="selectTest">
|
||||
<button :disabled="edit" class="xkbtn" @click="selectTest">
|
||||
{{ chooseCourse ? "重选" : "选择" }}试卷
|
||||
</button>
|
||||
<div v-if="paperName != ''">
|
||||
<a-tag closable color="processing" @close="delTag">
|
||||
<a-tag closable color="processing" @close="delTag" :closeIcon="edit">
|
||||
<span style="font-size: 14px; line-height: 33px">{{
|
||||
paperName
|
||||
}}</span>
|
||||
@@ -122,6 +146,7 @@
|
||||
</div>
|
||||
<div class="select">
|
||||
<a-input-number
|
||||
:disabled="edit"
|
||||
:min="0"
|
||||
:max="300"
|
||||
:precision="0"
|
||||
@@ -143,6 +168,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-input
|
||||
:disabled="edit"
|
||||
v-model:value="test.passLine"
|
||||
type="number"
|
||||
style="width: 400px; height: 40px; border-radius: 8px"
|
||||
@@ -157,6 +183,7 @@
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<a-textarea
|
||||
:disabled="edit"
|
||||
v-model:value="test.examinationExplain"
|
||||
placeholder="请输入考试说明"
|
||||
allow-clear
|
||||
@@ -175,6 +202,7 @@
|
||||
<div class="timerbox">
|
||||
<span>允许重复考试:</span>
|
||||
<a-input-number
|
||||
:disabled="edit"
|
||||
:min="-1"
|
||||
:max="300"
|
||||
:precision="0"
|
||||
@@ -200,6 +228,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="edit"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="test.showAnswers"
|
||||
>
|
||||
@@ -218,6 +247,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="edit"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="test.showAnalysis"
|
||||
>
|
||||
@@ -236,6 +266,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="edit"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="test.scoringModel"
|
||||
>
|
||||
@@ -256,6 +287,7 @@
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<a-radio-group
|
||||
:disabled="edit"
|
||||
style="margin-right: 12px"
|
||||
v-model:value="test.questionArrangement"
|
||||
>
|
||||
@@ -366,6 +398,8 @@ import {message} from "ant-design-vue";
|
||||
import {
|
||||
createExamination,
|
||||
queryExaminationDetailById,
|
||||
updateExamination,
|
||||
updateExternalExam
|
||||
} from "@/api/indexExam";
|
||||
// updateExamination,
|
||||
import STest from "./SelectTest.vue";
|
||||
@@ -496,6 +530,12 @@ export default {
|
||||
scoringModel: 2,
|
||||
questionArrangement: 4,
|
||||
};
|
||||
|
||||
state.test1 = {
|
||||
externalName: '',
|
||||
source: '',
|
||||
externalExplain: null
|
||||
}
|
||||
};
|
||||
|
||||
const closeDrawer = () => {
|
||||
@@ -522,7 +562,7 @@ export default {
|
||||
console.log("props", props);
|
||||
if (props.addtestVisible && props.EditTestId && props.EditTestId >0) {
|
||||
// 该页面显示同时 edit为true 时,发送查询请求,
|
||||
// queryTest();
|
||||
queryTest();
|
||||
}
|
||||
if (bool) {
|
||||
state.test.showAnswers = 1;
|
||||
@@ -541,6 +581,19 @@ export default {
|
||||
const queryTest = () => {
|
||||
queryExaminationDetailById({examinationId: props.EditTestId})
|
||||
.then((res) => {
|
||||
console.log(res)
|
||||
// 判断获取的考试
|
||||
if(res.data.data.examType==2){
|
||||
state.isOuter = 2;
|
||||
// 外部考试
|
||||
state.test1 = {
|
||||
externalName: res.data.data.examinationName,
|
||||
source: res.data.data.source,
|
||||
externalExplain: res.data.data.examinationExplain
|
||||
}
|
||||
}else{
|
||||
// 系统考试
|
||||
state.isOuter = 1;
|
||||
state.test = res.data.data;
|
||||
state.test.showAnswers = Number(state.test.showAnswers);
|
||||
state.test.showAnalysis = Number(state.test.showAnalysis);
|
||||
@@ -557,6 +610,7 @@ export default {
|
||||
state.paperId = state.test.examinationTestId;
|
||||
|
||||
console.log("querytest", state.test);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
//message.error(`查询失败`);
|
||||
@@ -630,18 +684,18 @@ export default {
|
||||
|
||||
|
||||
|
||||
// if (props.EditTestId > 0) {
|
||||
// // 编辑任务
|
||||
// updateExamination(state.test)
|
||||
// .then(async (res) => {
|
||||
// await updateTask(res);
|
||||
// // closeDrawer();
|
||||
// })
|
||||
// .catch(() => {
|
||||
// message.destroy();
|
||||
// message.error(`编辑失败`);
|
||||
// });
|
||||
// } else {
|
||||
if (props.EditTestId > 0) {
|
||||
// 编辑任务
|
||||
updateExamination(state.test)
|
||||
.then(async (res) => {
|
||||
await updateTask(res);
|
||||
// closeDrawer();
|
||||
})
|
||||
.catch(() => {
|
||||
message.destroy();
|
||||
message.error(`编辑失败`);
|
||||
});
|
||||
} else {
|
||||
// 创建任务
|
||||
createExamination(state.test)
|
||||
.then(async (res) => {
|
||||
@@ -652,7 +706,7 @@ export default {
|
||||
message.destroy();
|
||||
message.error(`创建失败`);
|
||||
});
|
||||
// }
|
||||
}
|
||||
}else{
|
||||
// 创建外部考试
|
||||
console.log('我是点了外部考试')
|
||||
@@ -687,15 +741,35 @@ export default {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (props.EditTestId > 0) {
|
||||
console.log('我要开始编辑外部考试任务了 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊')
|
||||
let obj = {
|
||||
examinationId:props.EditTestId,
|
||||
examinationName:state.test1.externalName,
|
||||
examinationExplain:state.test1.externalExplain,
|
||||
source:state.test1.source
|
||||
}
|
||||
updateExternalExam(obj)
|
||||
.then(async (res) => {
|
||||
await updateTask1(res);
|
||||
// closeDrawer();
|
||||
})
|
||||
.catch(() => {
|
||||
message.destroy();
|
||||
message.error(`编辑失败`);
|
||||
});
|
||||
}else{
|
||||
// 新建外部考试
|
||||
CreateExternalExam(state.test1).then( async res=>{
|
||||
console.log(res)
|
||||
console.log('新建外部考试返回的参数',res)
|
||||
// 添加更新到任务
|
||||
await updateTask1(res);
|
||||
}).catch(err=>{
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
// 系统考试
|
||||
const updateTask = (res) => {
|
||||
@@ -711,6 +785,7 @@ export default {
|
||||
return message.warning("请先选中关卡");
|
||||
}
|
||||
let editObj1 = {
|
||||
examType: 1,
|
||||
chapterId: props.isactive,
|
||||
duration: res.data.data.examinationDuration,
|
||||
courseId: res.data.data.examinationId,
|
||||
@@ -732,6 +807,7 @@ export default {
|
||||
});
|
||||
} else if (props.isLevel == 2) {
|
||||
let editObj = {
|
||||
examType: 1,
|
||||
courseId: res.data.data.examinationId,
|
||||
duration: res.data.data.examinationDuration,
|
||||
name: res.data.data.examinationName,
|
||||
@@ -753,6 +829,7 @@ export default {
|
||||
});
|
||||
} else if (props.isLevel == 3) {
|
||||
addTempTask({
|
||||
examType: 1,
|
||||
courseId: res.data.data.examinationId,
|
||||
duration: res.data.data.examinationDuration,
|
||||
name: res.data.data.examinationName,
|
||||
@@ -775,9 +852,9 @@ export default {
|
||||
};
|
||||
// 外部考试
|
||||
const updateTask1 = (res) => {
|
||||
state.EditTestId = res.data.data.externalId;
|
||||
state.EditTestId = res.data.data.examinationId;
|
||||
if (props.faceLevel) {
|
||||
state.EditTestId = res.data.data.externalId;
|
||||
state.EditTestId = res.data.data.examinationId;
|
||||
state.paperName = "";
|
||||
closeDrawer();
|
||||
} else {
|
||||
@@ -787,9 +864,10 @@ export default {
|
||||
return message.warning("请先选中关卡");
|
||||
}
|
||||
let editObj1 = {
|
||||
examType: 2,
|
||||
chapterId: props.isactive,
|
||||
courseId: res.data.data.externalId,
|
||||
name: res.data.data.externalName,
|
||||
courseId: res.data.data.examinationId,
|
||||
name: res.data.data.examinationName,
|
||||
routerId: props.routerId,
|
||||
routerTaskId: props.routerTaskId || 0,
|
||||
type: 5,
|
||||
@@ -807,8 +885,9 @@ export default {
|
||||
});
|
||||
} else if (props.isLevel == 2) {
|
||||
let editObj = {
|
||||
courseId: res.data.data.externalId,
|
||||
name: res.data.data.externalName,
|
||||
examType: 2,
|
||||
courseId: res.data.data.examinationId,
|
||||
name: res.data.data.examinationName,
|
||||
projectId: props.projectId,
|
||||
projectTaskId: props.projectTaskId || 0,
|
||||
stageId: props.chooseStageId || 0,
|
||||
@@ -827,8 +906,9 @@ export default {
|
||||
});
|
||||
} else if (props.isLevel == 3) {
|
||||
addTempTask({
|
||||
courseId: res.data.data.externalId,
|
||||
name: res.data.data.externalName,
|
||||
examType: 2,
|
||||
courseId: res.data.data.examinationId,
|
||||
name: res.data.data.examinationName,
|
||||
projectTemplateId: props.projectTemplateId,
|
||||
projectTaskId: props.projectTaskId || 0,
|
||||
stageId: props.chooseStageId || 0,
|
||||
|
||||
@@ -47,20 +47,19 @@
|
||||
<span class="total">/{{pro.totalReqCnt}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <a-divider
|
||||
<a-divider
|
||||
type="vertical"
|
||||
style="
|
||||
height: 49px;
|
||||
margin-left: 34px;
|
||||
background-color: rgba(170, 166, 166, 0.3);
|
||||
"
|
||||
background-color: rgba(170, 166, 166, 0.3);"
|
||||
/>
|
||||
<div class="sortbox" style="margin-left: 34px">
|
||||
<div class="sortname">已修证书</div>
|
||||
<div class="sortnub">
|
||||
<span class="nub1">{{pro.certCnt}}</span>
|
||||
<span class="nub1">{{pro.certCnt?pro.certCnt:0}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="secondrow">
|
||||
<div class="rowleft">{{ pro.name }}</div>
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
:showUploadList="false"
|
||||
:data="{
|
||||
type: type,
|
||||
targetId: Number(id),
|
||||
chapterId:chapterId,
|
||||
taskId:taskId
|
||||
targetId: Number(targetId),
|
||||
chapterId: chapterId,
|
||||
taskId: taskId,
|
||||
}"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
@@ -188,13 +188,13 @@
|
||||
<a-spin :spinning="addLoading" tip="" />
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
</template>
|
||||
<script>
|
||||
import {reactive, toRefs} from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import * as api from "../../api/index1";
|
||||
import { BATCH_IMPORT_SCORE } from "@/api/config";
|
||||
export default {
|
||||
import { reactive, toRefs } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import * as api from "../../api/index1";
|
||||
import { BATCH_IMPORT_SCORE } from "@/api/config";
|
||||
export default {
|
||||
name: "EScore",
|
||||
props: {
|
||||
eScorevisibleExternalExternal: {
|
||||
@@ -235,7 +235,8 @@
|
||||
const state = reactive({
|
||||
fileType: ["xls", "xlsx"],
|
||||
importScore:
|
||||
process.env.VUE_APP_BASE_API + "/admin/external/exam/manage/importExternalExamScore",
|
||||
process.env.VUE_APP_BASE_API +
|
||||
"/admin/external/exam/manage/ImportExternalScore",
|
||||
uploadpercent: -1,
|
||||
uploadErr: false, //上传失败
|
||||
addLoading: false,
|
||||
@@ -244,12 +245,14 @@
|
||||
errNum: 0, //失败数据数
|
||||
downloadErrUrl: null, //下载失败数据
|
||||
fileName: "",
|
||||
locationHref:location.href.indexOf("http://") !== -1
|
||||
locationHref:
|
||||
location.href.indexOf("http://") !== -1
|
||||
? "http://43.143.139.204:12016/"
|
||||
: location.href.slice(0, location.href.indexOf("/m")) + "/upload/",
|
||||
template: process.env.VUE_APP_UP_LOAD_STUDENT_SCORE_TEMPLATE
|
||||
template: process.env.VUE_APP_UP_LOAD_STUDENT_SCORE_TEMPLATE,
|
||||
});
|
||||
const closeDrawer = () => {
|
||||
ctx.emit("closeDraw", true);
|
||||
ctx.emit("update:eScorevisibleExternalExternal", false);
|
||||
state.fileList = [];
|
||||
state.uploadpercent = -1;
|
||||
@@ -258,8 +261,8 @@
|
||||
|
||||
const afterVisibleChange = (bool) => {
|
||||
console.log("state", bool);
|
||||
if(bool){
|
||||
console.log('当前是 1 项目 2 路径图', props.type)
|
||||
if (bool) {
|
||||
console.log("当前是 1 项目 2 路径图", props.type);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -286,6 +289,13 @@
|
||||
if (status === "done") {
|
||||
state.fileName = info.file.name;
|
||||
let i = 0;
|
||||
let timeouts = setTimeout(() => {
|
||||
clearInterval(timer);
|
||||
state.addLoading = false;
|
||||
message.destroy();
|
||||
message.error(`文件导入超时`);
|
||||
}, 30000);
|
||||
|
||||
let timer = setInterval(() => {
|
||||
let uid = info.file.response.data;
|
||||
api
|
||||
@@ -306,25 +316,17 @@
|
||||
state.downloadErrUrl = res.data.data.url;
|
||||
console.log("props.getStudent", props.getStudent);
|
||||
clearInterval(timer);
|
||||
clearTimeout(timeouts);
|
||||
}
|
||||
}else{
|
||||
state.addLoading = false;
|
||||
message.destroy();
|
||||
message.error(`文件导入超时`);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
state.addLoading = false;
|
||||
clearInterval(timer);
|
||||
clearTimeout(timeouts);
|
||||
console.log("查询导入状态失败", err);
|
||||
});
|
||||
}, 500);
|
||||
setTimeout(() => {
|
||||
clearInterval(timer)
|
||||
state.addLoading = false;
|
||||
message.destroy();
|
||||
message.error(`文件导入超时`);
|
||||
}, 30000);
|
||||
} else if (status === "error") {
|
||||
state.uploadErr = true;
|
||||
message.error(`${info.file.name}上传失败`);
|
||||
@@ -383,7 +385,7 @@
|
||||
}
|
||||
};
|
||||
function downTemplate() {
|
||||
console.log(state.locationHref + state.template)
|
||||
console.log(state.locationHref + state.template);
|
||||
window.open(state.locationHref + state.template);
|
||||
}
|
||||
|
||||
@@ -400,11 +402,11 @@
|
||||
downloadEeeorData,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.ExportScoreExternalExternal {
|
||||
.ExportScoreExternalExternal {
|
||||
.drawerMain {
|
||||
min-width: 600px;
|
||||
margin: 0px 32px 0px 32px;
|
||||
@@ -647,6 +649,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -161,7 +161,11 @@
|
||||
<script>
|
||||
import { toRefs, reactive } from "vue";
|
||||
// import StuAdd from "./StuAdd.vue";
|
||||
import { getProjStu, removeGroupStudent } from "../../api/indexProjStu";
|
||||
import {
|
||||
// getProjStu,
|
||||
removeGroupStudent,
|
||||
groupMemberList,
|
||||
} from "../../api/indexProjStu";
|
||||
import { toDate } from "../../api/method";
|
||||
import { message } from "ant-design-vue";
|
||||
import AddGroupMembers from "./AddGroupMembers.vue";
|
||||
@@ -332,27 +336,23 @@ export default {
|
||||
totalStageCnt: value.totalStageCnt, //总阶段数
|
||||
progress: value.completeStageCnt + "/" + value.totalStageCnt,
|
||||
|
||||
|
||||
stutime: toDate(value.beginStudyTime / 1000, "Y-M-D"), //开始学习时间
|
||||
};
|
||||
array.push(obj);
|
||||
});
|
||||
state.tabledata = array;
|
||||
};
|
||||
//获取学员列表
|
||||
//获取组员列表
|
||||
const getStu = (obj) => {
|
||||
let objf = obj || {
|
||||
deptIds: [], //部门
|
||||
groupName: "",
|
||||
name: "",
|
||||
studentName: "",
|
||||
pageNo: state.currentPage,
|
||||
pageSize: 10,
|
||||
projectId: props.projectId,
|
||||
topFlag: "",
|
||||
pid: props.projectId,
|
||||
groupId: props.chooseGroupId, //暂时写死
|
||||
};
|
||||
state.tableDataTotal = -1;
|
||||
getProjStu(objf).then((res) => {
|
||||
groupMemberList(objf).then((res) => {
|
||||
console.log(res.data.data, "获取学员列表");
|
||||
if (res.data.code === 200) {
|
||||
state.total = res.data.data.total;
|
||||
|
||||
@@ -48,22 +48,21 @@
|
||||
<span class="total">/{{ totalReqCnt }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
|
||||
<a-divider
|
||||
type="vertical"
|
||||
style="
|
||||
height: 49px;
|
||||
margin-left: 34px;
|
||||
background-color: rgba(170, 166, 166, 0.3);
|
||||
"
|
||||
background-color: rgba(170, 166, 166, 0.3);"
|
||||
/>
|
||||
<div class="sortbox" style="margin-left: 34px">
|
||||
<div class="sortname">已修证书</div>
|
||||
<div class="sortnub">
|
||||
<span class="nub1">{{ certCnt }}</span>
|
||||
<span class="nub1">{{ certCnt?certCnt:0 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
</div>
|
||||
<div class="secondrow">
|
||||
<div class="rowleft">{{ name }}</div>
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
id="inputNumber"
|
||||
v-model:value="score"
|
||||
:min="1"
|
||||
:max="100"
|
||||
:max="projectPoints"
|
||||
style="width: 70px"
|
||||
:disabled="condition !== 5"
|
||||
/>
|
||||
@@ -320,7 +320,7 @@
|
||||
margin-left: 5px;
|
||||
"
|
||||
>
|
||||
分可获得,当前项目积分为 10 分
|
||||
分可获得,当前项目积分为 {{ projectPoints }} 分
|
||||
</div>
|
||||
</div>
|
||||
<!-- <a-radio v-model:checked="checked" :value="6" >
|
||||
@@ -422,6 +422,7 @@ export default {
|
||||
selectExamName: null,
|
||||
selectExamId: null,
|
||||
score: null, //积分
|
||||
projectPoints: 0,
|
||||
|
||||
fileType: ["jpg", "jpeg", "png", "gif", "svg", "bmp"],
|
||||
});
|
||||
@@ -471,6 +472,7 @@ export default {
|
||||
.then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
console.log("获取项目总积分", res);
|
||||
state.projectPoints = res.data.data;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
|
||||
652
src/components/drawers/project/ImpoterGroupLeader.vue
Normal file
652
src/components/drawers/project/ImpoterGroupLeader.vue
Normal file
@@ -0,0 +1,652 @@
|
||||
<template>
|
||||
<a-drawer
|
||||
:visible="ImpoterGroupLeaderV"
|
||||
class="drawerStyle impotergroupleader"
|
||||
placement="right"
|
||||
width="800px"
|
||||
@after-visible-change="afterVisibleChange"
|
||||
>
|
||||
<div class="drawerMain">
|
||||
<div class="header">
|
||||
<div class="headerTitle">导入小组长</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../../assets/images/basicinfo/close.png"
|
||||
@click="closeDrawer"
|
||||
/>
|
||||
</div>
|
||||
<div class="main">
|
||||
<div class="minatitl">
|
||||
<div class="up1">请下载</div>
|
||||
<div class="up2" @click="downTemplate" style="cursor: pointer">
|
||||
模板
|
||||
</div>
|
||||
<div class="up1">,按要求填写数据并导入</div>
|
||||
</div>
|
||||
<div class="upload">
|
||||
<div class="text">上传:</div>
|
||||
<div class="right">
|
||||
<div style="height: 176px; margin-bottom: 20px">
|
||||
<a-upload-dragger
|
||||
v-model:fileList="fileList"
|
||||
:action="importLeader"
|
||||
name="uploadFile"
|
||||
:multiple="true"
|
||||
@change="handleChange"
|
||||
:showUploadList="false"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<inbox-outlined></inbox-outlined>
|
||||
</p>
|
||||
<p class="ant-upload-text">点击或将文件拖拽到此处上传</p>
|
||||
<p class="ant-upload-hint">支持扩展名:.xls/.xlsx</p>
|
||||
</a-upload-dragger>
|
||||
</div>
|
||||
<!-- <div class="load">
|
||||
<div class="cloud"></div>
|
||||
<div class="tip">点击或将文件拖拽到此处上传</div>
|
||||
<div class="tipz">支持扩展名:.xls/.xlsx</div>
|
||||
</div> -->
|
||||
<div class="loadstate">
|
||||
<div
|
||||
class="loadborder"
|
||||
v-if="uploadpercent < 100 && uploadpercent !== -1"
|
||||
>
|
||||
<div class="content">
|
||||
<div class="img"></div>
|
||||
<div class="timebox">
|
||||
<div class="timetop">
|
||||
<div class="tit">{{ fileName }}</div>
|
||||
<div class="stateloading">正在上传</div>
|
||||
</div>
|
||||
<a-progress :percent="uploadpercent" />
|
||||
<!-- <div class="prog">
|
||||
<div class="inprogloading"></div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="curloading">
|
||||
<!-- <div class="cur">55%</div> -->
|
||||
<!-- <div class="cancel" style="margin-left: 20px">暂停</div>
|
||||
<div class="cancel" style="margin-left: 15px">取消</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loadborder" v-if="uploadErr">
|
||||
<div class="content">
|
||||
<div class="img"></div>
|
||||
<div class="timebox">
|
||||
<div class="timetop">
|
||||
<div class="tit">{{ fileName }}</div>
|
||||
<div class="statedefeat">上传失败</div>
|
||||
</div>
|
||||
<a-progress :percent="uploadpercent" />
|
||||
<!-- <div class="prog">
|
||||
<div class="inprogdefeat"></div>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<div class="curloading">
|
||||
<!-- <div class="cur">55%</div> -->
|
||||
<div
|
||||
style="color: #387df7; margin-left: 20px; cursor: pointer"
|
||||
>
|
||||
下载失败数据
|
||||
</div>
|
||||
<!-- <div class="cancel" style="margin-left: 20px">暂停</div>
|
||||
<div class="cancel" style="margin-left: 15px">取消</div> -->
|
||||
</div>
|
||||
<div
|
||||
class="defeat"
|
||||
style="display: flex; align-items: center"
|
||||
>
|
||||
<div style="color: #ff7474">
|
||||
{{ succNum }}条数据导入成功,{{ errNum }}条数据导入失败
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- v-if="uploadpercent === 100" -->
|
||||
<div class="loadborder" v-if="uploadpercent === 100">
|
||||
<div class="content">
|
||||
<div class="img"></div>
|
||||
<div class="timebox">
|
||||
<div class="timetop">
|
||||
<div class="tit">{{ fileName }}</div>
|
||||
<div class="statesucce">上传成功</div>
|
||||
</div>
|
||||
<a-progress :percent="uploadpercent" />
|
||||
<!-- <div class="prog">
|
||||
<div class="inprogsucce"></div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="curloading">
|
||||
<!-- <div class="cur">100%</div> -->
|
||||
<div
|
||||
class="cancel"
|
||||
style="margin-left: 20px; cursor: pointer"
|
||||
@click="removeUpload"
|
||||
>
|
||||
删除
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="errNum">
|
||||
<div class="downloadErr" @click="downloadEeeorData">
|
||||
下载失败数据
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="uploadpercent === 100"
|
||||
class="defeat"
|
||||
style="
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 500px;
|
||||
height: 40px;
|
||||
"
|
||||
:style="{
|
||||
background: errNum
|
||||
? 'rgba(255, 116, 116, 0.1)'
|
||||
: 'rgba(53, 174, 105, 0.1)',
|
||||
border: errNum ? '1px solid #ff7474' : '1px solid #35AE69',
|
||||
}"
|
||||
>
|
||||
<img
|
||||
style="width: 14px; height: 14px; margin-left: 16px"
|
||||
:src="
|
||||
errNum
|
||||
? require('../../../assets/images/err.png')
|
||||
: require('../../../assets/images/success.png')
|
||||
"
|
||||
/>
|
||||
<div
|
||||
style="margin-left: 8px"
|
||||
:style="{ color: errNum ? '#ff7474' : 'rgba(0,0,0,0.65)' }"
|
||||
>
|
||||
{{ succNum }}条数据导入成功,{{ errNum }}条数据导入失败
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnn">
|
||||
<button class="btn1" @click="closeDrawer">取消</button>
|
||||
<button class="btn2" @click="closeDrawer">确定</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 加载动画 -->
|
||||
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
|
||||
<a-spin :spinning="addLoading" tip="" />
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { reactive, toRefs } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import * as api from "../../../api/index1";
|
||||
import { BATCH_IMPORT_SCORE } from "@/api/config";
|
||||
export default {
|
||||
name: "EScore",
|
||||
props: {
|
||||
ImpoterGroupLeaderV: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
projectId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
|
||||
//type=1 路径图 type=2 项目
|
||||
type: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
id: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
targetId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
chapterId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
pid: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
searchTaskList: {
|
||||
type: Function,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
fileType: ["xls", "xlsx"],
|
||||
importLeader:
|
||||
process.env.VUE_APP_BASE_API +
|
||||
`/admin/studentGroup/importGroup/${props.projectId}`,
|
||||
uploadpercent: -1,
|
||||
uploadErr: false, //上传失败
|
||||
addLoading: false,
|
||||
fileList: [],
|
||||
succNum: 0, //成功数据数
|
||||
errNum: 0, //失败数据数
|
||||
downloadErrUrl: null, //下载失败数据
|
||||
fileName: "",
|
||||
locationHref:
|
||||
location.href.indexOf("http://") !== -1
|
||||
? "http://43.143.139.204:12016/"
|
||||
: location.href.slice(0, location.href.indexOf("/m")) + "/upload/",
|
||||
template: process.env.VUE_APP_UP_LOAD_STUDENT_SCORE_TEMPLATE,
|
||||
});
|
||||
const closeDrawer = () => {
|
||||
ctx.emit("closeDraw", true);
|
||||
ctx.emit("update:ImpoterGroupLeaderV", false);
|
||||
state.fileList = [];
|
||||
state.uploadpercent = -1;
|
||||
state.uploadErr = false; //上传失败
|
||||
};
|
||||
|
||||
const afterVisibleChange = (bool) => {
|
||||
console.log("state", bool);
|
||||
if (bool) {
|
||||
console.log("当前是 1 项目 2 路径图", props.type);
|
||||
}
|
||||
};
|
||||
|
||||
//上传文件
|
||||
const handleChange = (info) => {
|
||||
if (info) {
|
||||
var FileExt = info.file.name.replace(/.+\./, "");
|
||||
if (["xls", "xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
|
||||
state.fileList = [];
|
||||
state.uploadpercent = -1;
|
||||
message.destroy();
|
||||
message.error("请上传正确的文件格式");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
state.addLoading = true;
|
||||
state.uploadpercent = parseInt(info.file.percent);
|
||||
console.log("我是文件上传的进度---------->", info.file.percent);
|
||||
const status = info.file.status;
|
||||
if (status !== "uploading") {
|
||||
// console.log(info.file, info.fileList);
|
||||
}
|
||||
if (status === "done") {
|
||||
state.fileName = info.file.name;
|
||||
let i = 0;
|
||||
let timeouts = setTimeout(() => {
|
||||
clearInterval(timer);
|
||||
state.addLoading = false;
|
||||
message.destroy();
|
||||
message.error(`文件导入超时`);
|
||||
}, 30000);
|
||||
|
||||
let timer = setInterval(() => {
|
||||
let uid = info.file.response.data;
|
||||
api
|
||||
.getImportStatus(uid)
|
||||
.then((res) => {
|
||||
console.log("查询导入状态", res);
|
||||
if (res.data.code === 200) {
|
||||
if (res.data.data.status !== "START") {
|
||||
i++;
|
||||
if (i === 1) {
|
||||
message.destroy();
|
||||
message.success(`${info.file.name}上传成功`);
|
||||
state.addLoading = false;
|
||||
props.searchTaskList && props.searchTaskList();
|
||||
}
|
||||
state.succNum = res.data.data.successNum;
|
||||
state.errNum = res.data.data.failedNum;
|
||||
state.downloadErrUrl = res.data.data.url;
|
||||
console.log("props.getStudent", props.getStudent);
|
||||
clearInterval(timer);
|
||||
clearTimeout(timeouts);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
state.addLoading = false;
|
||||
clearInterval(timer);
|
||||
clearTimeout(timeouts);
|
||||
console.log("查询导入状态失败", err);
|
||||
});
|
||||
}, 500);
|
||||
} else if (status === "error") {
|
||||
state.uploadErr = true;
|
||||
message.error(`${info.file.name}上传失败`);
|
||||
}
|
||||
};
|
||||
const beforeUpload = (file) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
// const isJpgOrPng =
|
||||
// file.name.indexOf(".xlsx") !== "-1" ||
|
||||
// file.name.indexOf(".xls") !== "-1";
|
||||
|
||||
// if (!isJpgOrPng) {
|
||||
// message.destroy();
|
||||
// message.error("仅支持xls、xlsx格式!");
|
||||
// return reject(false);
|
||||
// }
|
||||
const formData = new FormData();
|
||||
formData.append("uploadFile", file);
|
||||
// let progress = { percent: 1 };
|
||||
|
||||
// const intervalId = setInterval(() => {
|
||||
// if (progress.percent < 100) {
|
||||
// progress.percent++;
|
||||
// file.onProgress(progress);
|
||||
// } else {
|
||||
// clearInterval(intervalId);
|
||||
// }
|
||||
// }, 100);
|
||||
api.batchImportScore(formData).then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
console.log("上传成功", res);
|
||||
return reject(true);
|
||||
}
|
||||
});
|
||||
return reject(false);
|
||||
});
|
||||
};
|
||||
const handleUpload = (e) => {
|
||||
console.log("handleUpload", e);
|
||||
};
|
||||
|
||||
//删除
|
||||
const removeUpload = () => {
|
||||
state.fileList = [];
|
||||
state.uploadpercent = -1;
|
||||
state.uploadErr = false; //上传失败
|
||||
state.succNum = 0;
|
||||
state.errNum = 0;
|
||||
state.downloadErrUrl = null;
|
||||
state.addLoading = false;
|
||||
};
|
||||
// 下载失败数据
|
||||
const downloadEeeorData = () => {
|
||||
if (state.downloadErrUrl !== "") {
|
||||
window.open(process.env.VUE_APP_FILE_PATH + state.downloadErrUrl);
|
||||
}
|
||||
};
|
||||
function downTemplate() {
|
||||
// console.log(state.locationHref + state.template);
|
||||
// window.open(state.locationHref + state.template);
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
afterVisibleChange,
|
||||
closeDrawer,
|
||||
handleChange,
|
||||
downTemplate,
|
||||
BATCH_IMPORT_SCORE,
|
||||
beforeUpload,
|
||||
handleUpload,
|
||||
removeUpload,
|
||||
downloadEeeorData,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss" >
|
||||
.impotergroupleader {
|
||||
.drawerMain {
|
||||
min-width: 600px;
|
||||
margin: 0px 32px 0px 32px;
|
||||
overflow-x: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.header {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
// background-color: red;
|
||||
margin-bottom: 20px;
|
||||
flex-shrink: 0;
|
||||
.headerTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
line-height: 25px;
|
||||
// margin-left: 24px;
|
||||
}
|
||||
}
|
||||
.main {
|
||||
overflow-y: auto;
|
||||
.minatitl {
|
||||
display: flex;
|
||||
.up1 {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
.up2 {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: #4ea6ff;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
.upload {
|
||||
margin-top: 32px;
|
||||
display: flex;
|
||||
.text {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
.right {
|
||||
margin-left: 6px;
|
||||
.load {
|
||||
width: 500px;
|
||||
height: 176px;
|
||||
background: #f5f9fd;
|
||||
border-radius: 4px;
|
||||
// opacity: 0.3;
|
||||
border: 1px dashed #caddfd;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
.cloud {
|
||||
margin-top: 52px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
background-image: url(../../../assets/images/basicinfo/cloud.png);
|
||||
}
|
||||
.tip {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4ea6ff;
|
||||
margin-top: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tipz {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.loadstate {
|
||||
width: 500px;
|
||||
margin-bottom: 100px;
|
||||
|
||||
.loadborder {
|
||||
width: 500px;
|
||||
height: 173px;
|
||||
border-radius: 4px;
|
||||
border: 1px dashed #eaeaea;
|
||||
margin-bottom: 30px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
.content {
|
||||
display: flex;
|
||||
margin-left: 20px;
|
||||
position: relative;
|
||||
.defeat {
|
||||
width: 400px;
|
||||
position: absolute;
|
||||
left: 46px;
|
||||
top: 38px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.img {
|
||||
width: 30px;
|
||||
height: 34px;
|
||||
background-image: url(../../../assets/images/basicinfo/exl.png);
|
||||
}
|
||||
.timebox {
|
||||
margin-left: 15px;
|
||||
margin-top: -5px;
|
||||
.timetop {
|
||||
display: flex;
|
||||
width: 262px;
|
||||
justify-content: space-between;
|
||||
// margin-bottom: 8px;
|
||||
.tit {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
.stateloading {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
.statedefeat {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #ff7474;
|
||||
}
|
||||
.statesucce {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #35ae69;
|
||||
}
|
||||
}
|
||||
.prog {
|
||||
width: 262px;
|
||||
height: 5px;
|
||||
background: #eaf1fe;
|
||||
border-radius: 4px;
|
||||
.inprogloading {
|
||||
width: 55%;
|
||||
height: 5px;
|
||||
border-radius: 4px;
|
||||
|
||||
background: #4ea6ff;
|
||||
}
|
||||
//下载失败条
|
||||
.inprogdefeat {
|
||||
width: 55%;
|
||||
height: 5px;
|
||||
border-radius: 4px;
|
||||
|
||||
background: #ff7474;
|
||||
}
|
||||
//下载成功条
|
||||
.inprogsucce {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
border-radius: 4px;
|
||||
|
||||
background: #57c887;
|
||||
}
|
||||
}
|
||||
}
|
||||
.curloading {
|
||||
margin-left: 15px;
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
.cur {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
.cancel {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #387df7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.downloadErr {
|
||||
width: 120px;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #387df7;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #387df7;
|
||||
line-height: 20px;
|
||||
cursor: pointer;
|
||||
margin-left: 66px;
|
||||
margin-top: 16px;
|
||||
position: absolute;
|
||||
bottom: 28;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.btnn {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
background-color: #fff;
|
||||
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>
|
||||
@@ -116,10 +116,11 @@
|
||||
</div>
|
||||
<!-- 导出成绩抽屉 -->
|
||||
<ExportAchievement
|
||||
@closeDraw="closeDraw"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
:type="2"
|
||||
:targetId="datasource.projectId"
|
||||
:taskId="datasource.projectTaskId"
|
||||
:taskId="datasource.courseId"
|
||||
:chapterId="datasource.stageId" />
|
||||
</a-drawer>
|
||||
</template>
|
||||
@@ -320,7 +321,7 @@
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: ({record:{status}}) => ({0:'未开始',1:'进行中',9:'已完成'}[status] || '未开始'),
|
||||
customRender: ({record:{status}}) => ({0:'未开始',1:'进行中',null:'进行中',2:'已完成'}[status] || '未开始'),
|
||||
},
|
||||
],
|
||||
loadingData: true
|
||||
@@ -368,6 +369,7 @@
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
state.loadingData = true;
|
||||
api.QueryExternalExamManageDetail({
|
||||
chapterId: props.datasource.stageId,
|
||||
pageNo: state.currentPage,
|
||||
@@ -410,6 +412,11 @@
|
||||
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.stageId}&type=${2}&targetId=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}`)
|
||||
}
|
||||
|
||||
const closeDraw = (e) => {
|
||||
console.log('我关闭了导入成绩弹框吗', e)
|
||||
getData();
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
selectProjectName,
|
||||
@@ -422,7 +429,8 @@
|
||||
searchTableData,
|
||||
reseatTableData,
|
||||
changePaginationStu,
|
||||
exportData
|
||||
exportData,
|
||||
closeDraw
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -347,7 +347,7 @@ export default {
|
||||
<div class="racona">
|
||||
<span>
|
||||
{text.record.workScore || text.record.workScore == 0
|
||||
? text.record.workScore
|
||||
? text.record.workScore < 0 ?"-":text.record.workScore
|
||||
: "-"}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -340,7 +340,7 @@ export default {
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 3) {
|
||||
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 8 || props.datasource.type == 3) {
|
||||
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
||||
console.log("我是传递的查询参数", {
|
||||
pageNo: state.currentPage,
|
||||
|
||||
@@ -344,7 +344,7 @@ export default {
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 3) {
|
||||
if (props.datasource.type == 11 || props.datasource.type == 9 || props.datasource.type == 6 || props.datasource.type == 7 || props.datasource.type == 8 || props.datasource.type == 3) {
|
||||
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
||||
console.log("我是传递的查询参数", {
|
||||
pageNo: state.currentPage,
|
||||
|
||||
@@ -115,10 +115,11 @@
|
||||
</div>
|
||||
<!-- 导出成绩抽屉 -->
|
||||
<ExportAchievement
|
||||
@closeDraw="closeDraw"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
:type="1"
|
||||
:targetId="datasource.routerId"
|
||||
:taskId="datasource.routerTaskId"
|
||||
:taskId="datasource.courseId"
|
||||
:chapterId="datasource.chapterId" />
|
||||
</a-drawer>
|
||||
</template>
|
||||
@@ -324,7 +325,7 @@
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
className: "h",
|
||||
customRender: ({record:{status}}) => ({0:'未开始',1:'进行中',9:'已完成'}[status] || '未开始'),
|
||||
customRender: ({record:{status}}) => ({0:'未开始',1:'进行中',null:'进行中',2:'已完成'}[status] || '未开始'),
|
||||
},
|
||||
],
|
||||
loadingData: true
|
||||
@@ -368,9 +369,14 @@
|
||||
const clearLine = () => {
|
||||
state.selectedRowKeys = [];
|
||||
};
|
||||
const closeDraw = (e) => {
|
||||
console.log('我关闭了导入成绩弹框吗', e)
|
||||
getData();
|
||||
}
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
state.loadingData = true;
|
||||
api.QueryExternalExamManageDetail({
|
||||
chapterId: props.datasource.chapterId,
|
||||
pageNo: state.currentPage,
|
||||
@@ -425,7 +431,8 @@
|
||||
searchTableData,
|
||||
reseatTableData,
|
||||
changePaginationStu,
|
||||
exportData
|
||||
exportData,
|
||||
closeDraw
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -341,7 +341,7 @@ export default {
|
||||
<div class="racona">
|
||||
<span>
|
||||
{text.record.workScore || text.record.workScore == 0
|
||||
? text.record.workScore
|
||||
? text.record.workScore < 0 ?"-":text.record.workScore
|
||||
: "-"}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -47,9 +47,9 @@ const id = computed(() => {
|
||||
const emit = defineEmits({});
|
||||
|
||||
const options = computed(() =>
|
||||
store.state.projectLevel.map((e) => ({
|
||||
value: parseInt(e.dictCode),
|
||||
label: e.dictName,
|
||||
store.state.project_level.map((e) => ({
|
||||
value: parseInt(e.value),
|
||||
label: e.name,
|
||||
}))
|
||||
);
|
||||
|
||||
|
||||
@@ -47,12 +47,7 @@ const id = computed(() => {
|
||||
|
||||
const emit = defineEmits({});
|
||||
|
||||
const options = computed(() =>
|
||||
store.state.projectSys.map((e) => ({
|
||||
value: parseInt(e.dictCode),
|
||||
label: e.dictName,
|
||||
}))
|
||||
);
|
||||
const options = computed(() => store.state.project_sys.map((e) => ({value: parseInt(e.value), label: e.name,})));
|
||||
|
||||
function change(key) {
|
||||
emit("update:value", key);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2022-12-20 17:00:37
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-31 16:14:39
|
||||
* @LastEditTime: 2023-02-11 15:06:13
|
||||
* @FilePath: /fe-manage/src/components/student/ChangeLevelModal.vue
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
@@ -28,11 +28,12 @@
|
||||
<!-- <div class="cur">当前关卡:关卡2</div> -->
|
||||
<div class="select">
|
||||
<a-select
|
||||
v-model:value="selectStage"
|
||||
v-model:value="selectGroupId"
|
||||
style="width: 100%"
|
||||
placeholder="请选择小组"
|
||||
:options="option"
|
||||
allowClear
|
||||
@change="selectGroup"
|
||||
></a-select>
|
||||
</div>
|
||||
<div class="btn">
|
||||
@@ -58,7 +59,8 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, defineEmits, defineProps, ref } from "vue";
|
||||
// import { moveStudent } from "@/api/index1";
|
||||
import * as api from "@/api/index1";
|
||||
import { message } from "ant-design-vue";
|
||||
// import { message } from "ant-design-vue";
|
||||
|
||||
const props = defineProps({
|
||||
@@ -66,30 +68,56 @@ const props = defineProps({
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
stage: {
|
||||
groupList: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
ids: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
checkgroupStuId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const option = computed(() => {
|
||||
return props.stage.map((e) => ({ label: e.name, value: e.id }));
|
||||
console.log("props.groupList", props.groupList);
|
||||
return props.groupList.map((e) => ({
|
||||
label: e.groupName,
|
||||
value: e.projectGroupId,
|
||||
}));
|
||||
});
|
||||
console.log("changegroupV", props.changegroupV);
|
||||
const selectStage = ref();
|
||||
|
||||
const selectGroupId = ref();
|
||||
const selectGroupName = ref();
|
||||
const emit = defineEmits({});
|
||||
|
||||
const closeChangeModal = () => {
|
||||
emit("update:changegroupV", false);
|
||||
selectGroupId.value = null;
|
||||
};
|
||||
const selectGroup = (e, v) => {
|
||||
console.log("选择小组", e, v);
|
||||
selectGroupName.value = v.label;
|
||||
};
|
||||
//确认换组
|
||||
const changeGroup = (item) => {
|
||||
console.log("换组", item);
|
||||
console.log("换组", selectGroupId.value, item);
|
||||
let obj = {
|
||||
groupId: selectGroupId.value,
|
||||
groupName: selectGroupName.value,
|
||||
studentId: props.checkgroupStuId,
|
||||
};
|
||||
console.log("换组obj", obj);
|
||||
api
|
||||
.changeGroupByStudentId(obj)
|
||||
.then((res) => {
|
||||
console.log("换组成功", res);
|
||||
if (res.data.code === 200) {
|
||||
message.success("换组成功");
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("换组失败", err);
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
604
src/components/student/OnlineClassModelStudent.vue
Normal file
604
src/components/student/OnlineClassModelStudent.vue
Normal file
@@ -0,0 +1,604 @@
|
||||
<template>
|
||||
<a-modal
|
||||
:visible="visiable"
|
||||
:centered="true"
|
||||
:width="1000"
|
||||
title="学员管理"
|
||||
@cancel="closeDrawer"
|
||||
>
|
||||
<div class="header-content">
|
||||
<div>
|
||||
xxxxxxxx课程
|
||||
</div>
|
||||
<div>
|
||||
内容分类:12312
|
||||
</div>
|
||||
<div>
|
||||
授课教师:12312
|
||||
</div>
|
||||
<div>
|
||||
状态审核:12312
|
||||
</div>
|
||||
</div>
|
||||
<div class="TableStudent">
|
||||
<a-row
|
||||
type="flex"
|
||||
gutter="12"
|
||||
style="padding-left: 20px; margin-right: 0px"
|
||||
>
|
||||
<a-col>
|
||||
<a-form-item title="学员名称:">
|
||||
<a-input
|
||||
class="cus-input"
|
||||
v-model:value="searchParams.studentName"
|
||||
placeholder="请输入学员名称"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col>
|
||||
<a-button
|
||||
class="cus-btn"
|
||||
style="background: #4ea6ff; color: #fff; width: 100px"
|
||||
@click="searchStu"
|
||||
>
|
||||
<template #icon>
|
||||
<img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/courseManage/search0.png"
|
||||
/></template>
|
||||
搜索
|
||||
</a-button>
|
||||
</a-col>
|
||||
<a-col :span="2">
|
||||
<a-button class="cus-btn white" style="width: 100px" @click="reset">
|
||||
<template #icon>
|
||||
<img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/leveladd/reset.png"
|
||||
/></template>
|
||||
重置
|
||||
</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<a-row
|
||||
type="flex"
|
||||
gutter="12"
|
||||
style="padding-left: 20px; margin-right: 0px"
|
||||
v-if="checkPer(permissions)"
|
||||
>
|
||||
<a-col :span="1.5">
|
||||
<CommonStudent
|
||||
:type="type"
|
||||
:id="id"
|
||||
@finash="submitCall"
|
||||
:stage="stage"
|
||||
>
|
||||
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff">
|
||||
<template #icon
|
||||
><img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/courseManage/add0.png"
|
||||
/></template>
|
||||
添加学员
|
||||
</a-button>
|
||||
</CommonStudent>
|
||||
</a-col>
|
||||
<!-- 新加导入学员 批量换组 导出学习信息 -->
|
||||
<a-col :span="1.5" v-if="type === 1 || type === 2">
|
||||
<a-button class="cus-btn white" @click="showImpStu">
|
||||
<template #icon
|
||||
><img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/basicinfo/in2.png"
|
||||
/></template>
|
||||
导入学员
|
||||
</a-button>
|
||||
</a-col>
|
||||
<!--
|
||||
<a-col :span="1.5" v-if="type === 1">
|
||||
<a-button class="cus-btn white"> 批量换组 </a-button>
|
||||
</a-col>-->
|
||||
<a-col :span="1.5" v-if="type === 1">
|
||||
<a-button class="cus-btn white" @click="exportTaskStu">
|
||||
导出学习信息
|
||||
</a-button>
|
||||
</a-col>
|
||||
|
||||
<a-col :span="1.5" v-if="type === 2">
|
||||
<a-button class="cus-btn white" @click="exportTaskStuRouter">
|
||||
导出学习信息
|
||||
</a-button>
|
||||
</a-col>
|
||||
<a-col :span="1.5">
|
||||
<a-button class="cus-btn white" @click="bathDel">
|
||||
<template #icon
|
||||
><img
|
||||
style="margin-right: 10px"
|
||||
src="../../assets/images/projectadd/delete.png"
|
||||
/></template>
|
||||
批量删除
|
||||
</a-button>
|
||||
</a-col>
|
||||
<a-col :span="1.5" v-if="type === 2">
|
||||
<a-button class="cus-btn white" @click="showChangeModal">
|
||||
<template #icon></template>
|
||||
批量调整关卡
|
||||
</a-button>
|
||||
</a-col>
|
||||
<!-- 新加批量操作、导出、导出作业 -->
|
||||
<a-col :span="1.5" v-if="type === 3" class="batchOpera">
|
||||
<div class="stmm_btn btn4" @click="hideShow">
|
||||
<div class="btn4_sub">
|
||||
<span style="color: #4ea6ff; margin-right: 4px"> 批量操作 </span>
|
||||
<div
|
||||
class="b_zk"
|
||||
:style="{ display: hideshow ? 'block' : 'none' }"
|
||||
></div>
|
||||
<div
|
||||
class="b_sq"
|
||||
:style="{ display: hideshow ? 'none' : 'block' }"
|
||||
></div>
|
||||
</div>
|
||||
<div
|
||||
class="btn4_sup"
|
||||
:style="{ display: hideshow ? 'none' : 'block' }"
|
||||
>
|
||||
<div class="btnsbox">
|
||||
<div class="btn4_tit" @click="showEScoreModal">
|
||||
<span>批量录入成绩</span>
|
||||
</div>
|
||||
<div class="btn4_op1" @click="updateStatus(1)">
|
||||
<span>批量结业</span>
|
||||
</div>
|
||||
<div class="btn4_op2" @click="updateStatus(0)">
|
||||
<span>批量通过</span>
|
||||
</div>
|
||||
<div class="btn4_op3" @click="updateStatus(2)">
|
||||
<span>批量拒绝</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="stmm_btn btn5" @click="exportStu">
|
||||
<div class="export"></div>
|
||||
<div class="btnText">导出</div>
|
||||
</div>
|
||||
<div
|
||||
class="stmm_btn btn5"
|
||||
style="margin-left: 15px"
|
||||
@click="exportHomeWorkShow"
|
||||
>
|
||||
<div class="btnText">导出作业</div>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div style="margin-top: 20px">
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:data-source="studentList"
|
||||
:pagination="stuPagination"
|
||||
:loading="loading"
|
||||
row-key="id"
|
||||
:row-selection="stuRowSelection"
|
||||
>
|
||||
<template #action="{ record }">
|
||||
<a-space :size="2">
|
||||
<slot name="extension" v-bind:data="{ record }"></slot>
|
||||
<a-button v-if="checkPer(permissions)" @click="del(record.id)" type="link" danger>删除</a-button>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-table>
|
||||
</div>
|
||||
</div>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, createVNode, defineProps, defineExpose, ref, watch} from "vue";
|
||||
import {usePage} from "@/api/request";
|
||||
import {STUDENT_LIST} from "@/api/apis";
|
||||
import {delStudentList} from "@/api/index1";
|
||||
import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
|
||||
import {Modal} from "ant-design-vue";
|
||||
import CommonStudent from "@/components/student/CommonStudent";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
|
||||
const props = defineProps({
|
||||
permissions: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
type: Number,
|
||||
id: String,
|
||||
stage: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
types: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
});
|
||||
|
||||
const visiable = ref(false);
|
||||
|
||||
const initParams = {
|
||||
studentName: "",
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
type: props.type || '',
|
||||
types: props.types,
|
||||
pid: props.id || '',
|
||||
}
|
||||
|
||||
const searchParams = ref(initParams)
|
||||
const searchName = ref('')
|
||||
|
||||
const columns = ref([
|
||||
{
|
||||
title: "姓名",
|
||||
dataIndex: "studentName",
|
||||
key: "studentName",
|
||||
width: 30,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "工号",
|
||||
dataIndex: "studentUserNo",
|
||||
key: "studentUserNo",
|
||||
width: 50,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "部门",
|
||||
dataIndex: "studentDepartName",
|
||||
key: "studentDepartName",
|
||||
width: 80,
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "operation",
|
||||
key: "operation",
|
||||
width: 50,
|
||||
align: "center",
|
||||
slots: {customRender: "action"},
|
||||
},
|
||||
])
|
||||
|
||||
const {data: studentList, fetch: searchStu, total, loading} = usePage(STUDENT_LIST, searchParams)
|
||||
|
||||
const stuPagination = computed(() => ({
|
||||
total: total.value,
|
||||
showSizeChanger: false,
|
||||
current: searchParams.value.pageNo,
|
||||
pageSize: searchParams.value.pageSize,
|
||||
onChange: changePagination
|
||||
}));
|
||||
|
||||
const stuSelectKeys = ref([]);
|
||||
|
||||
const stuRowSelection = computed(() => ({
|
||||
columnWidth: 20,
|
||||
selectedRowKeys: stuSelectKeys.value,
|
||||
onChange: onStuSelectChange,
|
||||
preserveSelectedRowKeys: true,
|
||||
}));
|
||||
|
||||
function onStuSelectChange(e) {
|
||||
stuSelectKeys.value = e;
|
||||
}
|
||||
|
||||
const openDrawer = () => {
|
||||
visiable.value = true;
|
||||
};
|
||||
|
||||
const changePagination = (page) => {
|
||||
searchParams.value.pageNo = page;
|
||||
};
|
||||
|
||||
function del(id) {
|
||||
Modal.confirm({
|
||||
title: () => '确定删除?',
|
||||
icon: () => createVNode(ExclamationCircleOutlined),
|
||||
content: () => '数据删除后不可恢复!',
|
||||
okText: () => '确定',
|
||||
okType: 'danger',
|
||||
cancelText: () => '取消',
|
||||
onOk() {
|
||||
if (id) {
|
||||
loading.value = true
|
||||
delStudentList({ids: [id]}).then(() => searchStu())
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const closeDrawer = () => {
|
||||
visiable.value = false;
|
||||
};
|
||||
|
||||
function reset() {
|
||||
searchParams.value = initParams
|
||||
searchName.value = ''
|
||||
}
|
||||
|
||||
watch(visiable, () => {
|
||||
visiable.value && searchStu()
|
||||
searchParams.value = initParams
|
||||
});
|
||||
|
||||
defineExpose({
|
||||
searchStu,
|
||||
loading,
|
||||
closeDrawer,
|
||||
openDrawer
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.header-content{
|
||||
padding:20px;
|
||||
border:1px solid #eef9f3;
|
||||
margin-bottom: 20px;
|
||||
div{
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.cus-btn {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 16px;
|
||||
border: 1px solid #4ea6ff;
|
||||
border-radius: 8px;
|
||||
background: #4ea6ff;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.white {
|
||||
background: #fff;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.cus-input {
|
||||
height: 40px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.cus-select {
|
||||
height: 40px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.CommonStudent {
|
||||
.ant-btn-primary {
|
||||
background-color: #4ea6ff !important;
|
||||
}
|
||||
|
||||
.cus-select {
|
||||
height: 40px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.tableBox .ant-table-row .ant-table-cell {
|
||||
height: 48px;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #4f5156;
|
||||
line-height: 29px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.tableBox .ant-table-thead tr th {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.ant-tabs-tabpane {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.ant-tabs {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.right1 {
|
||||
border-left: 1px solid #f2f6fe;
|
||||
margin-left: 20px;
|
||||
|
||||
.onerow {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-right: 40px;
|
||||
flex-wrap: wrap;
|
||||
|
||||
width: 100%;
|
||||
|
||||
.onleft {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
|
||||
.already {
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
margin-left: 32px;
|
||||
white-space: nowrap;
|
||||
// margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.count {
|
||||
color: #4ea6ff;
|
||||
font-size: 16px;
|
||||
margin: 0 6px;
|
||||
}
|
||||
|
||||
.peo {
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.clbox {
|
||||
margin-right: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
width: 104px;
|
||||
height: 32px;
|
||||
border-radius: 4px;
|
||||
background: #4ea6ff;
|
||||
|
||||
.colose {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
// border-radius: 8px;
|
||||
// background: #ffffff;
|
||||
// position: relative;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
background-size: 100%;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.allclear {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.selecteds {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-left: 32px;
|
||||
|
||||
.person {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose {
|
||||
width: 64px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.ch {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
|
||||
.ifsw {
|
||||
display: flex;
|
||||
align-items: end;
|
||||
justify-content: center;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.sw {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: justify;
|
||||
color: #4ea6ff;
|
||||
margin-top: 23px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.dept {
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose1 {
|
||||
//width: 90px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.span {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ch1 {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
|
||||
.group {
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #f2f6fe;
|
||||
}
|
||||
|
||||
.chose2 {
|
||||
//width: 120px;
|
||||
height: 24px;
|
||||
margin-top: 25px;
|
||||
margin-right: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2px;
|
||||
border: 1px solid rgba(56, 139, 225, 1);
|
||||
color: rgba(56, 139, 225, 1);
|
||||
font-size: 12px;
|
||||
position: relative;
|
||||
|
||||
.span {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ch2 {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||||
right: -8px;
|
||||
top: -8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -38,7 +38,7 @@
|
||||
<a-button
|
||||
class="cus-btn"
|
||||
style="background: #4ea6ff; color: #fff; width: 100px"
|
||||
@click="getStuList"
|
||||
@click="search"
|
||||
>
|
||||
<template #icon>
|
||||
<img
|
||||
@@ -56,7 +56,7 @@
|
||||
重置
|
||||
</a-button>
|
||||
</div>
|
||||
<div class="batch">批量取消证书</div>
|
||||
<div class="batch" @click="cancelOrAuthAll">批量取消证书</div>
|
||||
<div class="tableBox" style="margin-top: 20px">
|
||||
<a-table
|
||||
:columns="tablecolumns"
|
||||
@@ -93,6 +93,8 @@ import { reactive, toRefs } from "vue";
|
||||
import * as api from "@/api/index1";
|
||||
import OrgClass from "@/components/project/OrgClass";
|
||||
import { message } from "ant-design-vue";
|
||||
import { toDate } from "@/api/method";
|
||||
import dayjs from "dayjs";
|
||||
export default {
|
||||
name: "TableCertificateStudent",
|
||||
components: {
|
||||
@@ -118,7 +120,7 @@ export default {
|
||||
studentName: null,
|
||||
tstudentDepartId: null,
|
||||
studentDepartName: null,
|
||||
selectTime: null,
|
||||
selectTime: [],
|
||||
tablecolumns: [
|
||||
{
|
||||
title: "工号",
|
||||
@@ -154,11 +156,21 @@ export default {
|
||||
},
|
||||
{
|
||||
title: "取得证书时间",
|
||||
dataIndex: "time",
|
||||
key: "time",
|
||||
dataIndex: "createTime",
|
||||
key: "createTime",
|
||||
width: 60,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (record) => {
|
||||
// console.log(text.record.checked1);
|
||||
return (
|
||||
<div>
|
||||
{record.record.createTime
|
||||
? toDate(record.record.createTime / 1000, "Y-M-D h:m")
|
||||
: "-"}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
@@ -191,13 +203,13 @@ export default {
|
||||
},
|
||||
],
|
||||
stuList: [
|
||||
{
|
||||
studentUserNo: "1234",
|
||||
studentName: "li",
|
||||
studentDepartName: "开发部",
|
||||
studentJobName: "岗位一",
|
||||
time: "2023-02-04",
|
||||
},
|
||||
// {
|
||||
// studentUserNo: "1234",
|
||||
// studentName: "li",
|
||||
// studentDepartName: "开发部",
|
||||
// studentJobName: "岗位一",
|
||||
// time: "2023-02-04",
|
||||
// },
|
||||
],
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
@@ -207,9 +219,22 @@ export default {
|
||||
|
||||
//获取证书学员
|
||||
const stuCertList = () => {
|
||||
console.log("state.selectTime", state.selectTime);
|
||||
let obj = {
|
||||
name: state.studentName,
|
||||
orgName: state.studentDepartName,
|
||||
beginDate:
|
||||
state.selectTime.length !== 0
|
||||
? dayjs(new Date(state.selectTime[0]).getTime()).format(
|
||||
"YYYY-MM-DD"
|
||||
)
|
||||
: null,
|
||||
endDate:
|
||||
state.selectTime.length !== 0
|
||||
? dayjs(new Date(state.selectTime[1]).getTime()).format(
|
||||
"YYYY-MM-DD"
|
||||
)
|
||||
: null,
|
||||
id: props.ACertificateCheckId,
|
||||
pid: props.projectId,
|
||||
size: state.pageSize,
|
||||
@@ -221,8 +246,9 @@ export default {
|
||||
.then((res) => {
|
||||
console.log("获取证书学员", res);
|
||||
if (res.data.code === 200) {
|
||||
state.stuList = res.data.data.record;
|
||||
state.tableDataTotal = res.data.data.total;
|
||||
state.stuList = res.data.data.records;
|
||||
state.tableDataTotal = Number(res.data.data.total);
|
||||
console.log("state.tableDataTotal", state.tableDataTotal);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
@@ -242,7 +268,8 @@ export default {
|
||||
state.studentName = null;
|
||||
state.tstudentDepartId = null;
|
||||
state.studentDepartName = null;
|
||||
state.selectTime = null;
|
||||
state.selectTime = [];
|
||||
stuCertList();
|
||||
};
|
||||
|
||||
//取消证书
|
||||
@@ -265,6 +292,28 @@ export default {
|
||||
console.log("取消证书失败", err);
|
||||
});
|
||||
};
|
||||
//批量取消证书
|
||||
const cancelOrAuthAll = () => {
|
||||
if (state.selectedRowKeys.length === 0)
|
||||
return message.warning("请选择学员");
|
||||
let obj = {
|
||||
ids: state.selectedRowKeys,
|
||||
status: -1,
|
||||
};
|
||||
api
|
||||
.cancelOrAuth(obj)
|
||||
.then((res) => {
|
||||
console.log("取消证书成功", res);
|
||||
if (res.data.code === 200) {
|
||||
message.success("取消证书成功");
|
||||
stuCertList();
|
||||
state.selectedRowKeys = [];
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("取消证书失败", err);
|
||||
});
|
||||
};
|
||||
const onSelectChange = (selectedRowKeys, e) => {
|
||||
console.log("selectedRowKeys changed: ", selectedRowKeys, e);
|
||||
state.selectedRowKeys = selectedRowKeys;
|
||||
@@ -288,6 +337,7 @@ export default {
|
||||
onSelectChange,
|
||||
changePaginationStu,
|
||||
returnClick,
|
||||
cancelOrAuthAll,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
tree-default-expand-all
|
||||
:fieldNames="{
|
||||
children: 'children',
|
||||
label: 'dictName',
|
||||
value: 'dictCode',
|
||||
label: 'name',
|
||||
value: 'code',
|
||||
}"
|
||||
:tree-data="sysTypeOptions"
|
||||
>
|
||||
@@ -2712,7 +2712,7 @@ export default defineComponent({
|
||||
state.viewpowervisible = true;
|
||||
};
|
||||
|
||||
const sysTypeOptions = computed(() => store.state.sysType);
|
||||
const sysTypeOptions = computed(() => store.state.content_type);
|
||||
|
||||
// console.log('12344', sysTypeOptions)
|
||||
|
||||
@@ -3211,63 +3211,6 @@ export default defineComponent({
|
||||
|
||||
//获取分类、场景、封面图、-----------字典配置-------------------------------
|
||||
const optionsUrl = ref([]);
|
||||
const getDictList = (param) => {
|
||||
let obj = {
|
||||
pageNo: 1,
|
||||
pageSize: 10000,
|
||||
setCode: param,
|
||||
};
|
||||
api1
|
||||
.getDict(obj)
|
||||
.then((res) => {
|
||||
console.log("获取字典成功", res);
|
||||
if (res.data.code === 200) {
|
||||
if (param === "faceclassPic") {
|
||||
let arr = res.data.data.rows;
|
||||
let newArr = [];
|
||||
arr.forEach((item) => {
|
||||
newArr.push({
|
||||
value: item.dictValue,
|
||||
label: item.dictName,
|
||||
});
|
||||
});
|
||||
optionsUrl.value = newArr;
|
||||
// if (res.data.data.rows.length > 0) {
|
||||
// state.imageUrl = res.data.data.rows[0].dictValue;
|
||||
// }
|
||||
}
|
||||
if (param === "faceclassClass") {
|
||||
// let arr = res.data.data.rows;
|
||||
// let newArr = [];
|
||||
// arr.forEach((item) => {
|
||||
// newArr.push({
|
||||
// value: item.dictCode,
|
||||
// label: item.dictName,
|
||||
// });
|
||||
// });
|
||||
// console.log(newArr)
|
||||
options2.value = state.options2222;
|
||||
}
|
||||
if (param === "faceclassScene") {
|
||||
let arr = res.data.data.rows;
|
||||
let newArr = [];
|
||||
arr.forEach((item) => {
|
||||
newArr.push({
|
||||
value: item.dictCode,
|
||||
label: item.dictName,
|
||||
});
|
||||
});
|
||||
options3.value = newArr;
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("获取字典失败", err);
|
||||
});
|
||||
};
|
||||
getDictList("faceclassClass");
|
||||
getDictList("faceclassScene");
|
||||
getDictList("faceclassPic");
|
||||
//获取分类、场景、封面图、----------------字典配置---------------------------
|
||||
|
||||
//渲染学员管理操作
|
||||
@@ -3584,8 +3527,6 @@ export default defineComponent({
|
||||
|
||||
state.qdms_inputV1 = state.xzinputV1;
|
||||
state.xzinputV1 = "";
|
||||
console.log("qdms_inputV1", state.qdms_inputV1);
|
||||
getDictList("faceclassPic");
|
||||
getTea();
|
||||
}
|
||||
if (state.bs_hs && state.valueE1 == 1) {
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
<!-- 课件管理页面 -->
|
||||
<!-- sandbox="allow-forms allow-scripts allow-same-origin allow-popups" -->
|
||||
<template>
|
||||
<!-- sandbox="allow-forms allow-scripts allow-same-origin allow-popups" -->
|
||||
<template>
|
||||
<div class="courseManage">
|
||||
<iframe
|
||||
id="iframe"
|
||||
@@ -19,35 +19,61 @@
|
||||
security="restricted"
|
||||
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"
|
||||
></iframe>
|
||||
<OnlineClassModelStudent ref="stuRef"></OnlineClassModelStudent>
|
||||
<div @click="test">
|
||||
asdfasdf
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { reactive, toRefs, onMounted } from "vue";
|
||||
import { iframeUrl } from "../../api/method";
|
||||
export default {
|
||||
name: "OnlineManage",
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {onMounted, ref} from "vue";
|
||||
import {iframeUrl} from "@/api/method";
|
||||
import OnlineClassModelStudent from "@/components/student/OnlineClassModelStudent";
|
||||
|
||||
setup() {
|
||||
const state = reactive({
|
||||
iframeUrl: iframeUrl,
|
||||
});
|
||||
const stuRef = ref()
|
||||
|
||||
onMounted(() => {
|
||||
// console.log("执行");
|
||||
});
|
||||
onMounted(()=>{
|
||||
window.openStudentModel = stuRef.value.openDrawer
|
||||
})
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.courseManage {
|
||||
function test(){
|
||||
window.openStudentModel()
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.courseManage {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.btnn {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
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;
|
||||
}
|
||||
</style>
|
||||
.btn2 {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 8px;
|
||||
border: 0;
|
||||
margin-left: 15px;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<div style="width:440px;height:70px;display: flex;justify-content: flex-start;align-items: center;">
|
||||
<img v-for="(item, index) in optionsUrl" :key="index" class="choiceoptionurl"
|
||||
:style="item.value == feng_mian_1 ? 'border:3px solid rgb(78, 166, 255);' : ''" :src="item.value"
|
||||
:alt="item.label" @click="choicePic(item.value)" />
|
||||
:alt="item.name" @click="choicePic(item.value)" />
|
||||
</div>
|
||||
<!-- <a-select
|
||||
:getPopupContainer="
|
||||
@@ -144,8 +144,8 @@
|
||||
:tree-data="sysTypeOptions"
|
||||
:fieldNames="{
|
||||
children: 'children',
|
||||
label: 'dictName',
|
||||
value: 'dictCode',
|
||||
label: 'name',
|
||||
value: 'code',
|
||||
}">
|
||||
</a-tree-select>
|
||||
</div>
|
||||
@@ -321,7 +321,6 @@ import { validateName } from "@/api/index1";
|
||||
import { message } from "ant-design-vue";
|
||||
import { edit, detail, handle } from "@/api/indexCourse";
|
||||
import { fileUp } from "../../api/indexEval";
|
||||
import * as api1 from "../../api/index1";
|
||||
import "@wangeditor/editor/dist/css/style.css";
|
||||
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
||||
import NameInput from "@/components/project/NameInput";
|
||||
@@ -370,140 +369,11 @@ export default defineComponent({
|
||||
auditDescription: "",
|
||||
contentClassify: [],
|
||||
// 课程三级分类
|
||||
options2222: [
|
||||
{
|
||||
title: '领导力',
|
||||
value: '100',
|
||||
children: [
|
||||
{
|
||||
title: '管理业务',
|
||||
value: '1001',
|
||||
},
|
||||
{
|
||||
title: '管理团队',
|
||||
value: '1002',
|
||||
},
|
||||
{
|
||||
title: '管理自我',
|
||||
value: '1003',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '专业力',
|
||||
value: '200',
|
||||
children: [
|
||||
{
|
||||
title: '研发',
|
||||
value: '2001',
|
||||
},
|
||||
{
|
||||
title: '系统和解决方案',
|
||||
value: '2002',
|
||||
},
|
||||
{
|
||||
title: '生产技术与制造',
|
||||
value: '2003',
|
||||
},
|
||||
{
|
||||
title: '供应链',
|
||||
value: '2004',
|
||||
},
|
||||
{
|
||||
title: '营销',
|
||||
value: '2005',
|
||||
},
|
||||
{
|
||||
title: '品质',
|
||||
value: '2006',
|
||||
},
|
||||
{
|
||||
title: '专业职能',
|
||||
value: '2007',
|
||||
children: [
|
||||
{
|
||||
title: '战略与企划',
|
||||
value: '200701',
|
||||
},
|
||||
{
|
||||
title: '流程管理',
|
||||
value: '200702',
|
||||
},
|
||||
{
|
||||
title: '业绩管理',
|
||||
value: '200703',
|
||||
},
|
||||
{
|
||||
title: '项目管理',
|
||||
value: '200704',
|
||||
},
|
||||
{
|
||||
title: '信息技术',
|
||||
value: '200705',
|
||||
},
|
||||
{
|
||||
title: '环境与安全',
|
||||
value: '200706',
|
||||
},
|
||||
{
|
||||
title: '人力资源',
|
||||
value: '200707',
|
||||
},
|
||||
{
|
||||
title: '企业文化',
|
||||
value: '200708',
|
||||
},
|
||||
{
|
||||
title: '品牌',
|
||||
value: '200709',
|
||||
},
|
||||
{
|
||||
title: '财务',
|
||||
value: '200710',
|
||||
},
|
||||
{
|
||||
title: '法务',
|
||||
value: '200711',
|
||||
},
|
||||
{
|
||||
title: '风险控制',
|
||||
value: '200712',
|
||||
},
|
||||
{
|
||||
title: '行政',
|
||||
value: '200713'
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '医工',
|
||||
value: '2008',
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '通用力',
|
||||
value: '300',
|
||||
children: [
|
||||
{
|
||||
title: '职业操守与道德',
|
||||
value: '3001',
|
||||
},
|
||||
{
|
||||
title: '职业素养与技能',
|
||||
value: '3002',
|
||||
},
|
||||
{
|
||||
title: '规章制度',
|
||||
value: '3003',
|
||||
},
|
||||
],
|
||||
}
|
||||
],
|
||||
});
|
||||
const store = useStore();
|
||||
|
||||
const sysTypeOptions = computed(() => store.state.sysType);
|
||||
const sysTypeOptions = computed(() => store.state.content_type);
|
||||
const optionsUrl = computed(() => store.state.course_pic);
|
||||
|
||||
watch(()=>state.fen_lei,()=>{
|
||||
state.fen_lei1 = findClassFullName(sysTypeOptions.value)
|
||||
@@ -511,7 +381,7 @@ export default defineComponent({
|
||||
|
||||
function findClassFullName(list,name=''){
|
||||
return list && list.length && list.map(e=>{
|
||||
return state.fen_lei == e.dictCode ? name?name+'-'+e.dictName:e.dictName : findClassFullName(e.children,name?name+'-'+e.dictName:e.dictName)
|
||||
return state.fen_lei === e.code ? name?name+'-'+e.name:e.name : findClassFullName(e.children,name?name+'-'+e.name:e.name)
|
||||
}).filter(name=>name).join('')
|
||||
}
|
||||
|
||||
@@ -648,77 +518,10 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
//获取分类、场景、封面图、-----------字典配置-------------------------------
|
||||
const optionsUrl = ref([]);
|
||||
const options2 = ref([]);
|
||||
const options3 = ref([]);
|
||||
const options4 = ref([]);
|
||||
const getDictList = (param) => {
|
||||
let obj = {
|
||||
pageNo: 1,
|
||||
pageSize: 10000,
|
||||
setCode: param,
|
||||
};
|
||||
api1
|
||||
.getDict(obj)
|
||||
.then((res) => {
|
||||
console.log("获取字典成功", res);
|
||||
if (res.data.code === 200) {
|
||||
if (param === "faceclassPic") {
|
||||
let arr = res.data.data.rows;
|
||||
let newArr = [];
|
||||
arr.forEach((item) => {
|
||||
newArr.push({
|
||||
value: item.dictValue,
|
||||
label: item.dictName,
|
||||
});
|
||||
});
|
||||
optionsUrl.value = newArr;
|
||||
}
|
||||
if (param === "faceclassClass") {
|
||||
let arr = res.data.data.rows;
|
||||
let newArr = [];
|
||||
arr.forEach((item) => {
|
||||
newArr.push({
|
||||
value: item.dictCode,
|
||||
label: item.dictName,
|
||||
});
|
||||
});
|
||||
options2.value = newArr;
|
||||
}
|
||||
if (param === "faceclassScene") {
|
||||
let arr = res.data.data.rows;
|
||||
let newArr = [];
|
||||
arr.forEach((item) => {
|
||||
newArr.push({
|
||||
value: item.dictCode,
|
||||
label: item.dictName,
|
||||
});
|
||||
});
|
||||
options3.value = newArr;
|
||||
}
|
||||
if (param === "contentClassify") {
|
||||
state.contentClassify = dealDickTree(res.data.data.rows) || []
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("获取字典失败", err);
|
||||
});
|
||||
};
|
||||
|
||||
function dealDickTree(data, level = 1) {
|
||||
return data?.filter(e => e.levelId == level).map(({ dictName, dictCode }) => ({
|
||||
title: dictName,
|
||||
value: dictCode,
|
||||
key: dictCode,
|
||||
children: dealDickTree(data, dictCode)
|
||||
}))
|
||||
}
|
||||
|
||||
getDictList("faceclassClass");
|
||||
getDictList("faceclassScene");
|
||||
getDictList("faceclassPic");
|
||||
getDictList("contentClassify");
|
||||
//获取分类、场景、封面图、----------------字典配置---------------------------
|
||||
|
||||
const hideShow = () => {
|
||||
@@ -737,12 +540,11 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
return count ? false : true;
|
||||
return !count;
|
||||
};
|
||||
|
||||
//保存面授课
|
||||
const handlePush = async (param) => {
|
||||
|
||||
let files = "";
|
||||
if (state.imgList.length) {
|
||||
state.imgList.forEach((item) => {
|
||||
@@ -761,7 +563,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
const postData = {
|
||||
offcourseId: state.offcourseId, //不传代表新增
|
||||
id: state.offcourseId, //不传代表新增
|
||||
name: state.qdms_inputV1,
|
||||
picUrl: state.feng_mian_1,
|
||||
targetUser: state.qdms_inputV2,
|
||||
|
||||
@@ -229,10 +229,10 @@
|
||||
class="learnBgItem"
|
||||
:style="{
|
||||
border:
|
||||
pathBgId === item.dictCode
|
||||
pathBgId === item.code
|
||||
? '2px solid rgba(78, 166, 255, 1)'
|
||||
: '1px solid #C7CBD2',
|
||||
'background-image': 'url(' + item.dictValue + ')',
|
||||
'background-image': 'url(' + item.value + ')',
|
||||
display: index >= 5 ? 'none' : 'flex',
|
||||
}"
|
||||
style="background-size: 100% 100%"
|
||||
@@ -358,10 +358,10 @@
|
||||
class="learnBgItem"
|
||||
:style="{
|
||||
border:
|
||||
pathBgId === item.dictCode
|
||||
pathBgId === item.code
|
||||
? '2px solid rgba(78, 166, 255, 1)'
|
||||
: '1px solid #ccc',
|
||||
'background-image': 'url(' + item.dictValue + ')',
|
||||
'background-image': 'url(' + item.value + ')',
|
||||
display: index >= 5 ? 'none' : 'flex',
|
||||
}"
|
||||
style="background-size: 100% 100%"
|
||||
@@ -685,14 +685,14 @@
|
||||
<div
|
||||
@click="chooseImg2(item)"
|
||||
v-for="item in imgData"
|
||||
:key="item.key"
|
||||
:key="item.code"
|
||||
class="learnBgItem"
|
||||
:style="{
|
||||
border:
|
||||
pathBgId === item.id
|
||||
pathBgId === item.code
|
||||
? '2px solid rgba(78, 166, 255, 1)'
|
||||
: '1px solid #ccc',
|
||||
'background-image': 'url(' + item.source + ')',
|
||||
'background-image': 'url(' + item.value + ')',
|
||||
}"
|
||||
>
|
||||
<!-- <img class="im" :src="item.source" /> -->
|
||||
@@ -894,13 +894,13 @@ export default {
|
||||
};
|
||||
const chooseImg = (item) => {
|
||||
console.log(item);
|
||||
state.pathBgId = item.dictCode;
|
||||
state.pathBg = item.dictValue;
|
||||
state.pathBgId = item.code;
|
||||
state.pathBg = item.value;
|
||||
};
|
||||
const chooseImg2 = (item) => {
|
||||
// console.log(item);
|
||||
state.pathBgId = item.dictCode;
|
||||
state.pathBg = item.dictValue;
|
||||
state.pathBgId = item.code;
|
||||
state.pathBg = item.value;
|
||||
};
|
||||
//发布弹窗
|
||||
const showPub = (router) => {
|
||||
@@ -1502,7 +1502,7 @@ export default {
|
||||
// state.imgData = ;
|
||||
// }
|
||||
});
|
||||
const imgData = computed(() => store.state.pathmapPic);
|
||||
const imgData = computed(() => store.state.router_pic);
|
||||
//添加权限
|
||||
watch(
|
||||
() => state.addAuthList,
|
||||
|
||||
@@ -2501,7 +2501,7 @@ export default {
|
||||
//编辑基本信息
|
||||
const editLearnInfo = () => {
|
||||
let obj = {
|
||||
routerId: state.routerId,
|
||||
id: state.routerId,
|
||||
enablePreview: state.previewSelect ? 1 : 0,
|
||||
enableStudy: state.studySelect ? 1 : 0,
|
||||
previewSetting: state.previewStartNum + "," + state.previewEndNum,
|
||||
@@ -2597,8 +2597,10 @@ export default {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/externalexam?courseId=" +
|
||||
item.courseId;
|
||||
"/faceteach?type=2&courseId=" +
|
||||
item.courseId +
|
||||
"&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
|
||||
if (item.type == 4) {
|
||||
@@ -2727,26 +2729,8 @@ export default {
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/projectdetails?courseId=" +
|
||||
item.courseId
|
||||
item.courseId;
|
||||
}
|
||||
|
||||
|
||||
// let path = {
|
||||
// 1: window.location.protocol + import.meta.env.VITE_BOE_ONLINE_CLASS_URL, //在线
|
||||
// 2: "/faceteach",
|
||||
// 3: window.location.protocol + import.meta.env.VITE_BOE_CASS_DETAIL_URL, //案例
|
||||
// 4: "/homeworkpage",
|
||||
// 5: window.location.protocol + import.meta.env.VITE_BOE_EXAM_DETAIL_URL, //考试
|
||||
// 6: "/livebroadcast",
|
||||
// 7: "/outerchain", //外联
|
||||
// 8: "/discusspage",
|
||||
// 9: "/moreactive",
|
||||
// 10: "/evaluation", //测评
|
||||
// 11: "/surveydetail",
|
||||
// 12: "/ballotpage",
|
||||
// 13: "/projectdetails",
|
||||
// };
|
||||
|
||||
state.codevisible = true;
|
||||
let obj = {
|
||||
title: "[" + checkType(item.type) + "]二维码",
|
||||
|
||||
@@ -545,7 +545,7 @@
|
||||
">
|
||||
<div class="opa">
|
||||
<div class="opacation">
|
||||
<span v-if="element.type !== 5" style="
|
||||
<span style="
|
||||
color: #4ea6ff;
|
||||
margin-right: 25px;
|
||||
cursor: pointer;
|
||||
@@ -558,12 +558,6 @@
|
||||
">
|
||||
编辑
|
||||
</span>
|
||||
<span v-else style="
|
||||
color: #4ea6ff;
|
||||
margin-right: 55px;
|
||||
cursor: pointer;
|
||||
">
|
||||
</span>
|
||||
<span style="color: #4ea6ff; cursor: pointer" @click="showDeleteModal(element.id)">
|
||||
删除
|
||||
</span>
|
||||
|
||||
@@ -61,8 +61,7 @@
|
||||
<div class="btn">
|
||||
<button
|
||||
:class="it.done ? 'btnoo' : 'btno'"
|
||||
style="z-index: 999"
|
||||
>
|
||||
style="z-index: 999">
|
||||
已完成
|
||||
</button>
|
||||
<button :class="it.done ? 'btntt' : 'btnt'">未完成</button>
|
||||
|
||||
@@ -362,9 +362,9 @@ export default {
|
||||
state.projectInfo.picUrl = value;
|
||||
};
|
||||
onMounted(() => {
|
||||
state.projectPic = store.state.projectPic.map((e) => ({
|
||||
value: e.dictValue,
|
||||
label: e.dictName,
|
||||
state.projectPic = store.state.project_pic.map((e) => ({
|
||||
value: e.value,
|
||||
label: e.name,
|
||||
}));
|
||||
state.viewDetail = routers.query.viewDetail;
|
||||
getProjectInfo();
|
||||
|
||||
@@ -100,10 +100,10 @@
|
||||
<a-button v-if="(record.status===0 || record.status===2 || record.status===-5) && checkPer(record.permissions)" @click="handleEdit(record)" type="link">编辑</a-button>
|
||||
<a-button v-if="record.type===1 && checkPer(record.permissions)" @click="createSub(record)" type="link">创建子项目</a-button>
|
||||
<a-button v-if="record.type===2 && checkPer(record.permissions)" @click="createClass(record)" type="link">创建班级</a-button>
|
||||
<a-button v-if="record.status===0 && record.type===3 && checkPer(record.permissions)" @click="showReviewModal(record.projectId)" type="link">提交审核</a-button>
|
||||
<a-button v-if="record.status===1 && record.type===3 && checkPer(record.permissions)" @click="showRecallReviewModal(record.projectId)" type="link">撤回审核</a-button>
|
||||
<a-button v-if="record.status===0 && record.type===3 && checkPer(record.permissions)" @click="showReviewModal(record.id)" type="link">提交审核</a-button>
|
||||
<a-button v-if="record.status===1 && record.type===3 && checkPer(record.permissions)" @click="showRecallReviewModal(record.id)" type="link">撤回审核</a-button>
|
||||
<a-button v-if="record.status===2 && record.type===3 && checkPer(record.permissions)" @click="push(record)" type="link">发布</a-button>
|
||||
<a-button v-if="record.status===3 && record.type===3 && checkPer(record.permissions)" @click="showBackModal(record.projectId)" type="link">撤回发布</a-button>
|
||||
<a-button v-if="record.status===3 && record.type===3 && checkPer(record.permissions)" @click="showBackModal(record.id)" type="link">撤回发布</a-button>
|
||||
<a-button v-if="record.type===3" @click="baseInfo(record)" type="link">管理</a-button>
|
||||
<DropDown v-if="checkPer(record.permissions)" value="授权">
|
||||
<OwnerTableModelStudent :types="[4,5,6]" :id="record.projectId" :type="6">权限名单</OwnerTableModelStudent>
|
||||
@@ -111,10 +111,10 @@
|
||||
<CommonStudent :type="5" :id="record.projectId" title="管理权">管理权</CommonStudent>
|
||||
</DropDown>
|
||||
<DropDown v-if="checkPer(record.permissions)" value="更多">
|
||||
<a-button @click="showCopyModal(record.projectId)" type="link">复制</a-button>
|
||||
<a-button v-if="record.status!==3" @click="showDeleteModal(record.projectId)" type="link" danger>删除</a-button>
|
||||
<a-button v-if="record.status===3" @click="showStartModal(record.projectId)" type="link">存为模版</a-button>
|
||||
<a-button v-if="record.status===3 && record.type===3" @click="showStopModal(record.projectId)" type="link">结束</a-button>
|
||||
<a-button @click="showCopyModal(record.id)" type="link">复制</a-button>
|
||||
<a-button v-if="record.status!==3" @click="showDeleteModal(record.id)" type="link" danger>删除</a-button>
|
||||
<a-button v-if="record.status===3" @click="showStartModal(record.id)" type="link">存为模版</a-button>
|
||||
<a-button v-if="record.status===3 && record.type===3" @click="showStopModal(record.id)" type="link">结束</a-button>
|
||||
<a-button v-if="record.status!==-1 && record.type===3" @click="showBackFinashModal(record.projectId)" type="link">撤回</a-button>
|
||||
</DropDown>
|
||||
</a-space>
|
||||
@@ -1200,9 +1200,9 @@ export default {
|
||||
state.stopModal = false;
|
||||
};
|
||||
//打开删除弹窗
|
||||
const showDeleteModal = (projectId) => {
|
||||
const showDeleteModal = (id) => {
|
||||
state.deleteModal = true;
|
||||
state.deleteProjectId = projectId;
|
||||
state.deleteProjectId = id;
|
||||
};
|
||||
//确认删除
|
||||
const deleteProject = () => {
|
||||
@@ -1463,7 +1463,7 @@ export default {
|
||||
if (data && data.length) {
|
||||
data.forEach((e) => {
|
||||
e.parentName = parentName;
|
||||
e.key = e.projectId;
|
||||
e.key = e.id;
|
||||
initDataSublist(
|
||||
(parentName ? parentName + "——" : "") + e.name,
|
||||
e.subList
|
||||
@@ -1480,7 +1480,7 @@ export default {
|
||||
router.push({
|
||||
path: "/projectadd",
|
||||
query: {
|
||||
projectId: record.projectId,
|
||||
projectId: record.id,
|
||||
parentId: record.parentId,
|
||||
parentName: record.parentName,
|
||||
},
|
||||
@@ -1595,7 +1595,7 @@ export default {
|
||||
function createSub(record){
|
||||
state.projectInfo = {
|
||||
parentName: record.name,
|
||||
parentId: record.projectId,
|
||||
parentId: record.id,
|
||||
name: "",
|
||||
sourceBelongId: record.sourceBelongId,
|
||||
sourceBelongName: record.sourceBelongName,
|
||||
@@ -1611,7 +1611,7 @@ export default {
|
||||
router.push({
|
||||
path: "/projectadd",
|
||||
query: {
|
||||
parentId: record.projectId,
|
||||
parentId: record.id,
|
||||
parentName: record.parentName + "——" + record.name,
|
||||
ptojectType: 3,
|
||||
}
|
||||
@@ -1621,7 +1621,7 @@ export default {
|
||||
function baseInfo(record){
|
||||
router.push({
|
||||
path: "/taskpage",
|
||||
query: { projectId: record.projectId },
|
||||
query: { projectId: record.id },
|
||||
});
|
||||
storage.set("projectId", record.projectId);
|
||||
}
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
<a-button @click="settingTopFlag(record)" type="link">{{
|
||||
record.topFlag ? "取消优秀" : "优秀学员"
|
||||
}}</a-button>
|
||||
<a-button type="link" @click="showChangeGroupModal()"
|
||||
<a-button type="link" @click="showChangeGroupModal(record)"
|
||||
>换组</a-button
|
||||
>
|
||||
</template>
|
||||
@@ -761,10 +761,10 @@
|
||||
<img src="../../assets/images/courseManage/reset2.png" />
|
||||
<span class="btn2text">随机分组</span>
|
||||
</div>
|
||||
<div class="btn2">
|
||||
<div class="btn2" @click="exportGroup">
|
||||
<span class="btn2text">导出小组</span>
|
||||
</div>
|
||||
<div class="btn2">
|
||||
<div class="btn2" @click="importGroupLeader">
|
||||
<span class="btn2text">导入小组长</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -806,7 +806,7 @@
|
||||
@click="showMemberList(item.projectGroupId)"
|
||||
>
|
||||
<div class="ftext">组员名单 ></div>
|
||||
<div class="peoples">
|
||||
<!-- <div class="peoples">
|
||||
<div class="people1">
|
||||
<img
|
||||
src="../../assets/images/taskpage/people1.png"
|
||||
@@ -827,7 +827,7 @@
|
||||
src="../../assets/images/taskpage/people4.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -877,11 +877,19 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="btn btn1" @click="rankSearch" style="cursor: pointer;">
|
||||
<div
|
||||
class="btn btn1"
|
||||
@click="rankSearch"
|
||||
style="cursor: pointer"
|
||||
>
|
||||
<div class="img1"></div>
|
||||
<div class="te">搜索</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="rankReset" style="cursor: pointer;">
|
||||
<div
|
||||
class="btn btn2"
|
||||
@click="rankReset"
|
||||
style="cursor: pointer"
|
||||
>
|
||||
<div class="img2"></div>
|
||||
<div class="te">重置</div>
|
||||
</div>
|
||||
@@ -955,6 +963,7 @@
|
||||
<div class="right">
|
||||
<a-select
|
||||
v-model:value="valuestu4"
|
||||
@change="xsSelectChange"
|
||||
style="width: 80px"
|
||||
:options="rankxueshi"
|
||||
></a-select>
|
||||
@@ -965,7 +974,7 @@
|
||||
<a-table
|
||||
:columns="xueshitablecolumns"
|
||||
:data-source="xueshitabledata"
|
||||
:loading="tableDataTotal === -1 ? true : false"
|
||||
:loading="studytimeRankLoading"
|
||||
expandRowByClick="true"
|
||||
:scroll="{ y: 330 }"
|
||||
@expand="expandTable"
|
||||
@@ -1667,6 +1676,24 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name">
|
||||
<div class="star" style="margin-top: -4px">
|
||||
<img
|
||||
style="width: 10px; height: 10px"
|
||||
src="../../assets/images/basicinfo/asterisk.png"
|
||||
/>
|
||||
</div>
|
||||
<div class="inname">组员人数:</div>
|
||||
<div class="in">
|
||||
<a-input-number
|
||||
:min="0"
|
||||
:max="300"
|
||||
:precision="0"
|
||||
style="width: 395px; height: 40px; border-radius: 8px"
|
||||
v-model:value="groupNumber"
|
||||
></a-input-number>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name">
|
||||
<div class="star" style="margin-top: -4px">
|
||||
<img
|
||||
@@ -2083,8 +2110,18 @@
|
||||
<!-- 二维码弹窗 -->
|
||||
|
||||
<!-- 换组弹窗 -->
|
||||
<ChangeGroupModal v-model:changegroupV="changegroupV" />
|
||||
<ChangeGroupModal
|
||||
v-model:changegroupV="changegroupV"
|
||||
:groupList="groupList"
|
||||
:checkgroupStuId="checkgroupStuId"
|
||||
/>
|
||||
<!-- 换组弹窗 -->
|
||||
<!-- 导入小组长 -->
|
||||
<ImpoterGroupLeader
|
||||
v-model:ImpoterGroupLeaderV="ImpoterGroupLeaderV"
|
||||
:projectId="projectId"
|
||||
/>
|
||||
<!-- 导入小组长 -->
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@@ -2130,7 +2167,7 @@ import { message, Modal } from "ant-design-vue";
|
||||
import * as apitl from "../../api/index";
|
||||
import { getTask } from "../../api/indexTaskadd";
|
||||
import { editProj } from "../../api/indexTaskadd";
|
||||
import { toDate, codeUrl } from "../../api/method";
|
||||
import { toDate } from "../../api/method";
|
||||
import projSet from "../../components/Modals/projSet";
|
||||
import { overview } from "../../api/indexProjStu";
|
||||
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
|
||||
@@ -2145,7 +2182,7 @@ import TableCertificateStudent from "@/components/student/TableCertificateStuden
|
||||
import { getStuPage } from "@/api/index1";
|
||||
import ChangeGroupModal from "@/components/student/ChangeGroupModal.vue";
|
||||
import { checkPer } from "@/utils/utils";
|
||||
|
||||
import ImpoterGroupLeader from "@/components/drawers/project/ImpoterGroupLeader.vue";
|
||||
export default {
|
||||
name: "taskPage",
|
||||
components: {
|
||||
@@ -2180,6 +2217,7 @@ export default {
|
||||
CreateCertificate,
|
||||
ProjectVoteManage,
|
||||
ChangeGroupModal,
|
||||
ImpoterGroupLeader,
|
||||
},
|
||||
setup() {
|
||||
const store = useStore();
|
||||
@@ -2317,10 +2355,10 @@ export default {
|
||||
valuestu3: 0,
|
||||
//学时排行
|
||||
rankxueshi: [
|
||||
{ value: "学员", label: "学员" },
|
||||
{ value: "小组", label: "小组" },
|
||||
{ value: 0, label: "学员" },
|
||||
{ value: 1, label: "小组" },
|
||||
],
|
||||
valuestu4: "学员",
|
||||
valuestu4: 0,
|
||||
visible: false, //时间管理
|
||||
onlineVisible: false, //在线管理
|
||||
FaceVisivle: false, //面授管理
|
||||
@@ -2371,6 +2409,7 @@ export default {
|
||||
inputValue3: 5,
|
||||
valueaddm: "", //创建小组输入小组长
|
||||
valueaddg: "", //创建小组输入名称
|
||||
groupNumber: 0, //组员人数
|
||||
valuestun: "", //学员管理姓名
|
||||
valuegood: "",
|
||||
valuestub: "", //学员管理部门
|
||||
@@ -2465,12 +2504,10 @@ export default {
|
||||
className: "h",
|
||||
},
|
||||
],
|
||||
scoreRankLoading:true,
|
||||
processRankLoading:true,
|
||||
scoreRankLoading: true,
|
||||
processRankLoading: true,
|
||||
//学分排行表
|
||||
xuefentabledata: [
|
||||
|
||||
],
|
||||
xuefentabledata: [],
|
||||
xuefentablecolumns: [
|
||||
{
|
||||
title: "排名",
|
||||
@@ -2525,83 +2562,32 @@ export default {
|
||||
},
|
||||
],
|
||||
//学时排行表
|
||||
xueshitabledata: [
|
||||
{
|
||||
rank: "1",
|
||||
name: "哈哈",
|
||||
jd: "8",
|
||||
},
|
||||
|
||||
{
|
||||
rank: "2",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "3",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "4",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "5",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "6",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "7",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "8",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "9",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
{
|
||||
rank: "10",
|
||||
name: "哈哈",
|
||||
jd: "70",
|
||||
},
|
||||
],
|
||||
studytimeRankLoading: true,
|
||||
xueshitabledata: [],
|
||||
xueshitablecolumns: [
|
||||
{
|
||||
title: "排名",
|
||||
dataIndex: "rank",
|
||||
key: "rank",
|
||||
dataIndex: "index",
|
||||
key: "index",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
customRender: (text) => {
|
||||
if (text.record.rank == "1") {
|
||||
if (text.record.index == "1") {
|
||||
return (
|
||||
<img
|
||||
style={{ width: 24, height: 24 }}
|
||||
src={require("../../assets/images/taskpage/one.png")}
|
||||
/>
|
||||
);
|
||||
} else if (text.record.rank == "2") {
|
||||
} else if (text.record.index == "2") {
|
||||
return (
|
||||
<img
|
||||
style={{ width: 24, height: 24 }}
|
||||
src={require("../../assets/images/taskpage/two.png")}
|
||||
/>
|
||||
);
|
||||
} else if (text.record.rank == "3") {
|
||||
} else if (text.record.index == "3") {
|
||||
return (
|
||||
<img
|
||||
style={{ width: 24, height: 24 }}
|
||||
@@ -2609,7 +2595,7 @@ export default {
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
return <div>{text.record.rank}</div>;
|
||||
return <div>{text.record.index}</div>;
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -2624,8 +2610,8 @@ export default {
|
||||
|
||||
{
|
||||
title: "时长",
|
||||
dataIndex: "jd",
|
||||
key: "jd",
|
||||
dataIndex: "timeStr",
|
||||
key: "timeStr",
|
||||
width: 50,
|
||||
align: "center",
|
||||
className: "h",
|
||||
@@ -2785,7 +2771,8 @@ export default {
|
||||
|
||||
modal1Visible: false, // 证书预览
|
||||
changegroupV: false, //换组弹窗
|
||||
|
||||
checkgroupStuId: null, //换组id
|
||||
ImpoterGroupLeaderV: false, //导入小组长抽屉
|
||||
certificatelist: [],
|
||||
fileUrl: process.env.VUE_APP_FILE_PATH,
|
||||
});
|
||||
@@ -2795,36 +2782,40 @@ export default {
|
||||
// 积分排行榜 Top10
|
||||
// 项目积分切换查询 -- 学员 小组
|
||||
const jfSelectChange = (e) => {
|
||||
console.log(e)
|
||||
console.log(e);
|
||||
scoreRank();
|
||||
}
|
||||
};
|
||||
const jdSelectChange = (e) => {
|
||||
console.log(e)
|
||||
console.log(e);
|
||||
completionRank();
|
||||
}
|
||||
};
|
||||
const jdSelectChange1 = (e) => {
|
||||
console.log(e)
|
||||
console.log(e);
|
||||
completionRank();
|
||||
}
|
||||
};
|
||||
const xsSelectChange = (e) => {
|
||||
console.log(e);
|
||||
studytimeRank();
|
||||
};
|
||||
//项目积分榜单
|
||||
const scoreRank = (period, type) => {
|
||||
state.scoreRankLoading = true;
|
||||
state.datascore = [];
|
||||
state.datascoreg = [];
|
||||
console.log("projectId----->", state.projectId,period, type);
|
||||
console.log('我是查询榜单传递的数据',{
|
||||
console.log("projectId----->", state.projectId, period, type);
|
||||
console.log("我是查询榜单传递的数据", {
|
||||
projectId: state.projectId, // 项目id
|
||||
name: "", // 名字,没有则传空字符串
|
||||
startTime: state.rankStartTime?state.rankStartTime:0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime?state.rankEndTime:0,
|
||||
startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime ? state.rankEndTime : 0,
|
||||
size: 10, // 前多少名
|
||||
type: Number(state.valuestu3), // 查询类型 0 学员积分榜 1 小组积分榜
|
||||
})
|
||||
});
|
||||
let obj = {
|
||||
projectId: 290, // 项目id
|
||||
projectId: state.projectId, // 项目id
|
||||
name: "", // 名字,没有则传空字符串
|
||||
startTime: state.rankStartTime?state.rankStartTime:0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime?state.rankEndTime:0,
|
||||
startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime ? state.rankEndTime : 0,
|
||||
size: 10, // 前多少名
|
||||
type: Number(state.valuestu3), // 查询类型 0 学员积分榜 1 小组积分榜
|
||||
};
|
||||
@@ -2833,12 +2824,12 @@ export default {
|
||||
.scoreRank(obj)
|
||||
.then((res) => {
|
||||
console.log("获取项目积分-榜单", res);
|
||||
if(res.data.code==200){
|
||||
if (res.data.code == 200) {
|
||||
state.datascore = res.data.data;
|
||||
state.datascoreg = res.data.data;
|
||||
state.xuefentabledata = res.data.data;
|
||||
state.scoreRankLoading = false;
|
||||
}else{
|
||||
} else {
|
||||
state.datascore = [];
|
||||
state.datascoreg = [];
|
||||
state.xuefentabledata = [];
|
||||
@@ -2848,7 +2839,7 @@ export default {
|
||||
.catch((err) => {
|
||||
console.log("获取项目积分-榜单失败", err);
|
||||
message.destroy();
|
||||
message.error('榜单获取失败');
|
||||
message.error("榜单获取失败");
|
||||
state.datascore = [];
|
||||
state.datascoreg = [];
|
||||
state.xuefentabledata = [];
|
||||
@@ -2860,30 +2851,62 @@ export default {
|
||||
const completionRank = () => {
|
||||
state.processRankLoading = true;
|
||||
let obj = {
|
||||
projectId: 290, // 项目id
|
||||
startTime: state.rankStartTime?state.rankStartTime:0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime?state.rankEndTime:0,
|
||||
projectId: state.projectId, // 项目id
|
||||
startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime ? state.rankEndTime : 0,
|
||||
stageId: state.valuestu2, // 阶段ID
|
||||
type: Number(state.valuestu3), // 查询类型 0 学员积分榜 1 小组积分榜
|
||||
}
|
||||
};
|
||||
|
||||
console.log('我是获取得项目进度排行榜--》', obj)
|
||||
api.completionRank(obj).then(res=>{
|
||||
console.log('项目进度榜单获取',res)
|
||||
if(res.data.datas){
|
||||
console.log("我是获取得项目进度排行榜--》", obj);
|
||||
api
|
||||
.completionRank(obj)
|
||||
.then((res) => {
|
||||
console.log("项目进度榜单获取", res);
|
||||
if (res.data.datas) {
|
||||
state.jindutabledata = res.data.datas;
|
||||
state.processRankLoading = false;
|
||||
}else{
|
||||
} else {
|
||||
state.jindutabledata = [];
|
||||
state.processRankLoading = false;
|
||||
}
|
||||
|
||||
}).catch(err=>{
|
||||
console.log(err)
|
||||
state.jindutabledata = [];
|
||||
state.processRankLoading = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.jindutabledata = [];
|
||||
state.processRankLoading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 项目学时榜单
|
||||
const studytimeRank = () => {
|
||||
state.studytimeRankLoading = true;
|
||||
let obj = {
|
||||
projectId: state.projectId, // 项目id
|
||||
startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳
|
||||
endTime: state.rankEndTime ? state.rankEndTime : 0,
|
||||
type: Number(state.valuestu4), // 查询类型 0 学员积分榜 1 小组积分榜
|
||||
};
|
||||
|
||||
console.log("我是获取得项目学时排行榜--》", obj);
|
||||
api
|
||||
.studytimeRank(obj)
|
||||
.then((res) => {
|
||||
console.log("项目学时榜单获取", res);
|
||||
if (res.data.datas) {
|
||||
state.xueshitabledata = res.data.datas;
|
||||
state.studytimeRankLoading = false;
|
||||
} else {
|
||||
state.xueshitabledata = [];
|
||||
state.studytimeRankLoading = false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
state.xueshitabledata = [];
|
||||
state.studytimeRankLoading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 排行榜 - end
|
||||
|
||||
@@ -2949,26 +2972,29 @@ export default {
|
||||
}
|
||||
levelList.stageList = res.data.data.stageList;
|
||||
|
||||
if(levelList.stageList.length==1){
|
||||
if (levelList.stageList.length == 1) {
|
||||
// 无解段任务
|
||||
state.rankjieduan = [{value:0, label:'无阶段'}];
|
||||
state.rankjieduan = [{ value: 0, label: "无阶段" }];
|
||||
state.valuestu2 = 0;
|
||||
}else{
|
||||
} else {
|
||||
// 有阶段任务
|
||||
let arrStage = []
|
||||
for(let i=0; i<levelList.stageList.length;i++){
|
||||
if(levelList.stageList[i].stageId!=='0'){
|
||||
let arrStage = [];
|
||||
for (let i = 0; i < levelList.stageList.length; i++) {
|
||||
if (levelList.stageList[i].stageId !== "0") {
|
||||
let obj = {
|
||||
value:levelList.stageList[i].stageId,
|
||||
label:levelList.stageList[i].name
|
||||
}
|
||||
arrStage.push(obj)
|
||||
value: levelList.stageList[i].stageId,
|
||||
label: levelList.stageList[i].name,
|
||||
};
|
||||
arrStage.push(obj);
|
||||
}
|
||||
}
|
||||
state.rankjieduan = arrStage;
|
||||
state.valuestu2 = arrStage[0].value;
|
||||
}
|
||||
console.log('----------------------------------->', res.data.data.stageList)
|
||||
console.log(
|
||||
"----------------------------------->",
|
||||
res.data.data.stageList
|
||||
);
|
||||
|
||||
//暂时传个固定的id用 到时候看数据里面是否有在更换
|
||||
// state.projectTaskId = res.data.data.stageList[0].taskList[0].projectTaskId
|
||||
@@ -3113,9 +3139,10 @@ export default {
|
||||
};
|
||||
|
||||
//显示学员换组弹窗
|
||||
const showChangeGroupModal = () => {
|
||||
const showChangeGroupModal = (record) => {
|
||||
state.changegroupV = true;
|
||||
console.log("点击换组", state.changegroupV);
|
||||
console.log("点击换组", record.studentId);
|
||||
state.checkgroupStuId = record.studentId;
|
||||
};
|
||||
|
||||
const showModal2 = (classify, item) => {
|
||||
@@ -3126,6 +3153,7 @@ export default {
|
||||
console.log("item", item);
|
||||
if (item) {
|
||||
state.valueaddg = item.groupName;
|
||||
state.groupNumber = item.groupMemberCount;
|
||||
state.stuGroupName = item.leaderName;
|
||||
state.stuGroupId = item.leaderId;
|
||||
}
|
||||
@@ -3134,6 +3162,7 @@ export default {
|
||||
const closeModal2 = () => {
|
||||
state.stugroup = false;
|
||||
state.valueaddg = null;
|
||||
state.groupNumber = 0;
|
||||
state.stuGroupName = null;
|
||||
state.stuGroupId = null;
|
||||
state.projectGroupId = null;
|
||||
@@ -3141,7 +3170,11 @@ export default {
|
||||
};
|
||||
//点击确定创建小组
|
||||
const createG = () => {
|
||||
if (state.stuGroupName == "" || state.valueaddg == "") {
|
||||
if (
|
||||
state.stuGroupName == "" ||
|
||||
state.valueaddg == "" ||
|
||||
state.groupNumber == null
|
||||
) {
|
||||
message.destroy();
|
||||
return message.warning("请输入必填项");
|
||||
} else {
|
||||
@@ -3221,13 +3254,13 @@ export default {
|
||||
};
|
||||
//考试管理的抽屉
|
||||
const showTest = (name, id, data) => {
|
||||
if(data.startTime==null && data.endTime==null){
|
||||
if (data.startTime == null && data.endTime == null) {
|
||||
// 外部考试抽屉显示
|
||||
state.TMvisibleExternal = true;
|
||||
state.examData = data;
|
||||
state.showTestText = name;
|
||||
state.projectTaskId = id;
|
||||
}else{
|
||||
} else {
|
||||
// 系统考试抽屉显示
|
||||
state.TMvisible = true;
|
||||
state.examData = data;
|
||||
@@ -3633,7 +3666,8 @@ export default {
|
||||
scoreRank();
|
||||
// 获取项目进度排行榜
|
||||
completionRank();
|
||||
|
||||
// 获取学时排行榜
|
||||
studytimeRank();
|
||||
} else if (e == 3) {
|
||||
state.tabFlag = true;
|
||||
} else {
|
||||
@@ -3641,8 +3675,8 @@ export default {
|
||||
state.tabFlag = false;
|
||||
}
|
||||
|
||||
if(e!=7){
|
||||
state.ischeckCertificate=false
|
||||
if (e != 7) {
|
||||
state.ischeckCertificate = false;
|
||||
}
|
||||
console.log("切换了", state.tabFlag);
|
||||
};
|
||||
@@ -3690,6 +3724,8 @@ state.ischeckCertificate=false
|
||||
scoreRank();
|
||||
// 获取项目进度排行榜
|
||||
completionRank();
|
||||
// 获取学时排行榜
|
||||
studytimeRank();
|
||||
};
|
||||
//重置
|
||||
const rankReset = () => {
|
||||
@@ -3702,6 +3738,8 @@ state.ischeckCertificate=false
|
||||
scoreRank();
|
||||
// 获取项目进度排行榜
|
||||
completionRank();
|
||||
// 获取学时排行榜
|
||||
studytimeRank();
|
||||
};
|
||||
|
||||
// end -----排行榜----------------排行榜----------------------排行榜-----------排行榜----------
|
||||
@@ -3822,6 +3860,7 @@ state.ischeckCertificate=false
|
||||
groupName: value.groupName, //小组名称
|
||||
leaderId: value.leaderId, //组长id
|
||||
leaderName: value.leaderName, //组长名称
|
||||
groupMemberCount: value.groupMemberCount, //组员人数
|
||||
source: value.source == 1 ? "指定添加" : "随机分组",
|
||||
completeTaskCnt: value.completeTaskCnt, //完成任务数
|
||||
totalTaskCnt: value.totalTaskCnt, //累计任务数
|
||||
@@ -4052,6 +4091,7 @@ state.ischeckCertificate=false
|
||||
if (state.stuMemberClassify === 1) {
|
||||
let obj = {
|
||||
groupName: state.valueaddg,
|
||||
groupMemberCount: state.groupNumber,
|
||||
leaderId: state.stuGroupId,
|
||||
leaderName: state.stuGroupName,
|
||||
// projectGroupId: 0,
|
||||
@@ -4074,6 +4114,7 @@ state.ischeckCertificate=false
|
||||
if (state.stuMemberClassify === 2) {
|
||||
let obj = {
|
||||
groupName: state.valueaddg,
|
||||
groupMemberCount: state.groupNumber,
|
||||
leaderId: state.stuGroupId,
|
||||
leaderName: state.stuGroupName,
|
||||
projectGroupId: state.projectGroupId,
|
||||
@@ -4116,6 +4157,16 @@ state.ischeckCertificate=false
|
||||
console.log(data);
|
||||
getStu();
|
||||
};
|
||||
//导入小组长
|
||||
const importGroupLeader = () => {
|
||||
state.ImpoterGroupLeaderV = true;
|
||||
};
|
||||
//导出小组
|
||||
const exportGroup = () => {
|
||||
window.open(
|
||||
`${process.env.VUE_APP_BASE_API}/admin/studentGroup/exportGroup/${state.projectId}`
|
||||
);
|
||||
};
|
||||
//end---------学员------
|
||||
|
||||
//start---------项目概览
|
||||
@@ -4578,8 +4629,207 @@ state.ischeckCertificate=false
|
||||
return typeRules[type];
|
||||
};
|
||||
|
||||
// 判断当前任务已结束及时间意义上的结束 提示用户
|
||||
function judgeTaskIsEnd(type, endTimes, status) {
|
||||
// type 任务类型 endTime 结束时间 status 任务状态 (状态 0 未完成 1 已完成 2 未开始 3 已结束)
|
||||
console.log(type, endTimes, status);
|
||||
let isEnd = false;
|
||||
let nowTime = new Date().getTime();
|
||||
let endTime = new Date().getTime(endTimes);
|
||||
switch (type) {
|
||||
case 1:
|
||||
status == 3
|
||||
? (isEnd = true)
|
||||
: nowTime > endTime
|
||||
? (isEnd = true)
|
||||
: (isEnd = false);
|
||||
break;
|
||||
case 3:
|
||||
status == 3
|
||||
? (isEnd = true)
|
||||
: nowTime > endTime
|
||||
? (isEnd = true)
|
||||
: (isEnd = false);
|
||||
break;
|
||||
case 5:
|
||||
status == 3
|
||||
? (isEnd = true)
|
||||
: nowTime > endTime
|
||||
? (isEnd = true)
|
||||
: (isEnd = false);
|
||||
break;
|
||||
case 7:
|
||||
status == 3
|
||||
? (isEnd = true)
|
||||
: nowTime > endTime
|
||||
? (isEnd = true)
|
||||
: (isEnd = false);
|
||||
break;
|
||||
case 10:
|
||||
status == 3
|
||||
? (isEnd = true)
|
||||
: nowTime > endTime
|
||||
? (isEnd = true)
|
||||
: (isEnd = false);
|
||||
break;
|
||||
}
|
||||
return isEnd;
|
||||
}
|
||||
//显示二维码弹窗
|
||||
const showCodeModel = (item) => {
|
||||
if (judgeTaskIsEnd(item.type, state.endTime, state.status)) {
|
||||
message.error("当前任务已结束");
|
||||
return;
|
||||
}
|
||||
console.log("item", item);
|
||||
let codeUrl = "";
|
||||
// 在线课 停用 -- 暂时没有在线课停用标记
|
||||
if (item.type == 1) {
|
||||
if (item.taskStatus == 1 || item.taskStatus == 2)
|
||||
return message.error("该任务无法学习,请联系管理员进行替换。");
|
||||
window.open(
|
||||
window.location.protocol +
|
||||
import.meta.env.VITE_BOE_ONLINE_CLASS_URL +
|
||||
item.targetId,
|
||||
"_top"
|
||||
);
|
||||
}
|
||||
if (item.type == 2) {
|
||||
let date1 = new Date(item.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) return message.warning("当前面授课已结束");
|
||||
if (item.taskStatus == 1 || item.taskStatus == 2)
|
||||
return message.error("该任务无法学习,请联系管理员进行替换。");
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/faceteach?type=2&courseId=" +
|
||||
item.courseId +
|
||||
"&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
|
||||
if (item.type == 4) {
|
||||
let date1 = new Date(item.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) return message.warning("当前作业已结束");
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/homeworkpage?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
// 考试 停用
|
||||
if (item.type == 5) {
|
||||
if (item.taskStatus == 1 || item.taskStatus == 2)
|
||||
return message.error("该任务无法学习,请联系管理员进行替换。");
|
||||
// 此处判断外部考试跳转
|
||||
if (item.startTime == null || item.endTime == null) {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/externalexam?courseId=" +
|
||||
item.courseId;
|
||||
}
|
||||
}
|
||||
// 直播结束时间
|
||||
if (item.type == 6) {
|
||||
let date1 = new Date(item.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) return message.warning("当前直播已结束");
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/livebroadcast?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
// 外链
|
||||
if (item.type == 7) {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/outerchain?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId +
|
||||
"&status=" +
|
||||
item.status +
|
||||
"&chapterOrStageId=" +
|
||||
item.stageId +
|
||||
"&infoId=" +
|
||||
state.projectId;
|
||||
}
|
||||
//讨论
|
||||
if (item.type == 8) {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/discusspage?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
//活动
|
||||
if (item.type == 9) {
|
||||
let date1 = new Date(item.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) return message.warning("当前活动已结束");
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/activitiespage?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId;
|
||||
}
|
||||
//活动
|
||||
if (item.type == 10) {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/evaluation?courseId=" +
|
||||
item.courseId +
|
||||
"&evaType=" +
|
||||
item.evaType +
|
||||
"&targetId=" +
|
||||
item.targetId;
|
||||
}
|
||||
|
||||
// 评估 停用
|
||||
if (item.type == 11) {
|
||||
if (item.taskStatus == 1 || item.taskStatus == 2)
|
||||
return message.error("该任务无法学习,请联系管理员进行替换。");
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/investigatage?courseId=" +
|
||||
item.courseId +
|
||||
"&type=1&id=" +
|
||||
item.projectTaskId +
|
||||
"&chapterOrStageId=" +
|
||||
item.stageId +
|
||||
"&infoId=" +
|
||||
state.projectId;
|
||||
}
|
||||
// 投票
|
||||
if (item.type == 12) {
|
||||
codeUrl =
|
||||
window.location.protocol +
|
||||
process.env.VUE_APP_H5 +
|
||||
"/ballotpage?courseId=" +
|
||||
item.courseId +
|
||||
"&btype=2&id=" +
|
||||
item.projectTaskId +
|
||||
"&chapterOrStageId=" +
|
||||
item.chapterId +
|
||||
"&infoId=" +
|
||||
state.projectId;
|
||||
}
|
||||
|
||||
state.codevisible = true;
|
||||
let obj = {
|
||||
title: "[" + checkType(item.type) + "]二维码",
|
||||
@@ -4594,7 +4844,7 @@ state.ischeckCertificate=false
|
||||
let obj = {
|
||||
title: "[项目]二维码",
|
||||
name: state.name,
|
||||
url: codeUrl,
|
||||
// url: codeUrl,
|
||||
};
|
||||
state.codeInfo = obj;
|
||||
};
|
||||
@@ -4793,6 +5043,8 @@ state.ischeckCertificate=false
|
||||
closeStartModal,
|
||||
templateProject,
|
||||
changeGrouped,
|
||||
importGroupLeader,
|
||||
exportGroup,
|
||||
deFile,
|
||||
toDate,
|
||||
routered,
|
||||
@@ -4822,6 +5074,8 @@ state.ischeckCertificate=false
|
||||
jdSelectChange,
|
||||
jdSelectChange1,
|
||||
|
||||
studytimeRank,
|
||||
xsSelectChange,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user