Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/views/courselibrary/CoursewareManage.vue
This commit is contained in:
yuping
2022-12-08 18:10:14 +08:00
26 changed files with 2206 additions and 1847 deletions

View File

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

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 14:32:52
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-12-08 08:48:26
* @LastEditTime: 2022-12-08 15:47:05
* @FilePath: /fe-manage/src/api/config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/

View File

@@ -5,6 +5,8 @@ export const getTask = (obj) => http.get('/admin/project/detail', { params: obj
//项目里的新建或编辑阶段任务
export const addTask = (obj) => http.post('/admin/project/editTask', obj)
//模板库项目里的新建或编辑阶段任务
export const addTaskTemplate = (obj) => http.post('/admin/project/template/editTask', obj)
//项目里的删除任务
export const deleteTask = (obj) => http.delete('/admin/project/deleteTask', { params: obj })

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -7,7 +7,7 @@
:closable="closableQR"
wrapClassName="codeModal"
style="margin-top: 400px"
:zIndex="999"
:zIndex="9999"
@cancel="qr_exit"
>
<div id="qrcode" class="QR">

View File

@@ -315,7 +315,7 @@ export default {
} else if (props.isLevel == 3) {
for (let i = 0; i < state.apiTaskList.length; i++) {
apiTask
.addTask({
.addTaskTemplate({
courseId: Number(state.apiTaskList[i].casesId),
name: state.apiTaskList[i].title,
projectTaskId: props.projectTaskId,

View File

@@ -214,7 +214,7 @@ export default {
await addTempTask({
courseId: Number(value.evaluationId),
name: value.evaluationName,
projectTemplateId: props.projectTemplateId,
projectTemplateId: Number(localStorage.getItem("projectTemplateId")),
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId || 0,
type: 10,

View File

@@ -103,7 +103,7 @@ export default {
return message.warning("请输入公告内容");
} else {
let obj = {
notice: state.noticeContent1,
notice: state.noticeContent,
projectId: props.projectId,
title: "",
};
@@ -147,7 +147,7 @@ export default {
.noticeTitle {
margin-left: 32px;
margin-right: 32px;
// padding-top: 20px;
margin-bottom: 100px;
.notitle {
height: 55px;
border-bottom: 1px solid #ededed;

View File

@@ -116,7 +116,8 @@
</div>
<div class="setc_name"><span>审核意见</span></div>
<div class="setc_main">
<a-textarea v-model:value="valueSuggest" :rows="4"/>
<a-textarea v-model:value="valueSuggest" :rows="4" show-count
:maxlength="20"/>
</div>
</div>
</div>

View File

@@ -110,7 +110,7 @@
/>
</div>
</div>
<div class="main_item">
<div class="main_item" style="margin-bottom: 24px; margin-left: 29px">
<div class="signbox">
<div class="sign">
<img
@@ -118,17 +118,11 @@
alt=""
/>
</div>
<span style="margin-right: 3px">基础投票数</span>
<span style="margin-right: 3px">基础投票数设置</span>
</div>
<div class="btnbox">
<!-- <a-upload
@change="handleChange"
:before-upload="beforeUpload"
:multiple="true"
:max-count="1"
action="/manageApi/vote/baseVoteupload"
v-model:file-list="fileList"
> -->
<!-- <div class="btnbox">
<a-upload :before-upload="beforeUpload" :max-count="1">
<button class="xkbtn">点击上传</button>
<template #itemRender="{ file, actions }">
@@ -155,14 +149,75 @@
</div>
<button class="xkbtn" @click="downloadTemplate">下载模板
</button>
</div> -->
</div>
<div
style="
display: flex;
align-items: center;
margin-left: 64px;
margin-bottom: 24px;
"
>
<div>参与数</div>
<div style="width: 159px">
<a-input-number
style="width: 159px"
id="inputNumber"
v-model:value="partakeNum"
:min="0"
:max="99999"
:precision="0"
/>
</div>
</div>
<div class="main_item" style="margin-top: -25px">
<div
style="
display: flex;
align-items: center;
margin-left: 64px;
margin-bottom: 24px;
"
>
<div>总票数</div>
<div style="width: 159px">
<a-input-number
style="width: 159px"
id="inputNumber"
v-model:value="totalVoteNum"
:min="0"
:max="99999"
:precision="0"
/>
</div>
</div>
<div
style="
display: flex;
align-items: center;
margin-left: 64px;
margin-bottom: 24px;
"
>
<div>浏览数</div>
<div style="width: 159px">
<a-input-number
style="width: 159px"
id="inputNumber"
v-model:value="browseNum"
:min="0"
:max="99999"
:precision="0"
/>
</div>
</div>
<!-- <div class="main_item" style="margin-top: -25px">
<div class="signbox"></div>
<div class="btnbox">
<span style="color: #999999">支持xls.xlsx</span>
</div>
</div>
</div> -->
<div class="main_item2">
<div class="signbox">
<span style="margin-right: 3px">投票说明</span>
@@ -272,15 +327,23 @@ export default {
fileList: [],
voteCount: null,
projectTemplateId: null,
partakeNum: 0, //参与数
totalVoteNum: 0, //总票数
browseNum: 0, //浏览数
});
const closeDrawer = () => {
(state.inputV1 = ""),
(state.textV1 = ""),
(state.time = undefined),
(state.basevote = ""),
(state.ballotId = ""),
state.inputV1 = "";
state.textV1 = "";
state.time = undefined;
state.basevote = "";
state.ballotId = "";
ctx.emit("update:addvoteVisible", false);
ctx.emit("update:edit", false);
state.partakeNum = 0; //参与数
state.totalVoteNum = 0; //总票数
state.browseNum = 0; //浏览数
};
const afterVisibleChange = (bool) => {
if (props.edit && bool) {
@@ -337,6 +400,9 @@ export default {
dayjs(res.data.data.voteStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.voteEndTime, "YYYY-MM-DD"),
];
state.totalVoteNum = res.data.data.votesTotal; //总票数
state.partakeNum = res.data.data.numberOfInvolved; //参与数
state.browseNum = res.data.data.numberOfBrowse; //浏览数
})
.catch((err) => {
console.log("获取投票信息失败", err);
@@ -411,9 +477,9 @@ export default {
message.destroy();
return message.warning("请输入直播时间");
}
if (!state.basevote) {
return message.warning("请上传投票基数");
}
// if (!state.basevote) {
// return message.warning("请上传投票基数");
// }
if (state.time != undefined) {
state.startTime = dayjs(state.time[0]).format("YYYY-MM-DD");
state.endTime = dayjs(state.time[1]).format("YYYY-MM-DD");
@@ -427,6 +493,9 @@ export default {
ballotId: state.ballotId,
baseVote: state.basevote,
voteExplain: state.textV1,
votesTotal: state.totalVoteNum, //总票数
numberOfInvolved: state.partakeNum, //参与数
numberOfBrowse: state.browseNum, //浏览数
};
if (props.edit) {
api
@@ -469,7 +538,7 @@ export default {
};
function downloadTemplate() {
window.open('/manageApi/投票基础数据模版.xlsx')
window.open("/manageApi/投票基础数据模版.xlsx");
}
return {

View File

@@ -191,6 +191,7 @@
alt=""
/>
</div>
<span>授课形式</span>
</div>
<a-radio-group v-model:value="valueE1">
@@ -220,6 +221,7 @@
</div>
</a-radio-group>
</div>
<!--
<div class="b_sup" :style="{ display: bs_hs ? 'block' : 'none' }">
<div class="ofmb_items">
<div class="signbox">
@@ -229,6 +231,7 @@
alt=""
/>
</div>
<span>是否设置目录</span>
</div>
<a-radio-group v-model:value="valueE2">
@@ -254,7 +257,7 @@
</div>
</a-radio-group>
</div>
</div>
</div> -->
<div class="b_footer">
<div class="btn btn5" @click="of_exit1">
<div class="btnText">取消</div>
@@ -1400,7 +1403,7 @@
placeholder="请选择状态"
v-model:value="gl_selectV2"
style="width: 200px"
:options="options1"
:options="options11"
allowClear
showSearch
@focus="focus"
@@ -1623,8 +1626,16 @@
<a
@click="
() => {
QR_hs = true;
ftsQR_hs = true;
//QR_hs = true;
//ftsQR_hs = true;
codevisible = true;
codeIndex = 0;
codeType = 0;
codeInfo = {
title: '面授课签到',
name: record.name,
url: codeUrl,
};
}
"
>
@@ -1672,8 +1683,16 @@
<a-menu-item
@click="
() => {
QR_hs = true;
vipftQR_hs = true;
//QR_hs = true;
//vipftQR_hs = true;
codevisible = true;
codeIndex = 1;
codeType = 1;
codeInfo = {
title: '面授课二维码',
name: record.name,
url: codeUrl,
};
}
"
>
@@ -2623,6 +2642,15 @@
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="" />
</div>
<!-- 二维码弹窗 -->
<two-dimensional-code
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
:index="codeIndex"
:type="codeType === 1 ? '课程二维码' : '签到二维码'"
/>
<!-- 二维码弹窗 -->
</template>
<script>
import {
@@ -2636,7 +2664,7 @@ import {
watch,
} from "vue";
import * as api from "../../api/indexInvist.js";
import * as api2 from "../../api/indexAudit.js";
import { message } from "ant-design-vue";
import { useRouter, useRoute } from "vue-router";
// import StuAdd from "../../components/drawers/StuAdd";
@@ -2684,7 +2712,8 @@ import ProjectManager from "@/components/project/ProjectManagerNew";
import SeeModal from "./components/seeModal.vue";
import CourseModal from "./courseModal.vue";
import * as moment from "moment";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import { codeUrl } from "../../api/method";
//列表表格
const columns1 = [
{
@@ -2832,7 +2861,7 @@ const columns1 = [
},
},
{
title: "上线时间",
title: "发布时间",
width: 160,
dataIndex: "pubtime",
key: "10",
@@ -3200,6 +3229,7 @@ export default defineComponent({
// return attrs.vnodes;
// },
addOnlineCourse,
TwoDimensionalCode,
},
setup() {
const CourseModalRef = ref(null);
@@ -3381,7 +3411,7 @@ export default defineComponent({
value4: "",
//选择线上还是面授
xzinputV1: "",
valueE1: "",
valueE1: 2,
valueE2: "",
//确定面授
ft_eidt: false,
@@ -3468,6 +3498,9 @@ export default defineComponent({
assessmentId: null,
assessmentName: "",
assessmentVisible: false,
codevisible: false, //二维码弹窗
codeInfo: null, //二维码内容
codeUrl: codeUrl,
});
const showStuAdd = (record) => {
@@ -3974,7 +4007,7 @@ export default defineComponent({
};
// console.log("获取学员信息", obj);
let res = await studentList(obj);
// console.log("获取学员列表", res);
console.log("获取学员列表", res);
const { rows, total, pageNo } = res.data.data;
state.tableDataTotal3 = total;
@@ -4019,6 +4052,7 @@ export default defineComponent({
};
const handleSearchTable3 = () => {
console.log(7878);
message.error("该课程暂学员学习记录");
getTableDate333();
};
const getTableDate33 = async () => {
@@ -4099,6 +4133,7 @@ export default defineComponent({
address: "address",
starttime: "beginTime",
createtime: "createTime",
createName: "createName",
},
true
);
@@ -4106,6 +4141,7 @@ export default defineComponent({
itm.pageNo = pageNo;
});
state.tableData6 = datas;
console.log("state.tableData6", state.tableData6);
};
const options1 = ref([
@@ -4126,6 +4162,16 @@ export default defineComponent({
label: "审核未通过",
},
]);
const options11 = ref([
{
value: 0,
label: "未开始",
},
{
value: 1,
label: "已完成",
},
]);
const options2 = ref([
// {
// value: "value2",
@@ -4187,20 +4233,33 @@ export default defineComponent({
}
};
const createft = () => {
if (state.bs_hs == false && state.valueE1 != "") {
if (!state.valueE1 || !state.xzinputV1) {
message.destroy();
return message.warning("请输入必填项");
}
console.log(
" state.valueE1",
state.valueE1,
!state.bs_hs && state.valueE1 == 2,
state.bs_hs,
state.valueE1 == 2
);
if (state.bs_hs && state.valueE1 == 2) {
state.of_hs = false;
// state.ft_hs = true;
CourseModalRef.value.visibleOpen(null);
CourseModalRef.value.visibleOpen(null, state.xzinputV1);
state.valueE1 = "";
state.teacher = "";
state.teacherName = "";
state.qdms_inputV1 = state.xzinputV1;
state.xzinputV1 = "";
console.log("qdms_inputV1", state.qdms_inputV1);
getDictList("faceclassPic");
getTea();
}
if (state.bs_hs && state.valueE1 != "") {
if (state.bs_hs && state.valueE1 == 1) {
state.addOnlineCoursevisible = true;
}
};
@@ -4707,7 +4766,7 @@ export default defineComponent({
});
const postData = {
offcourseId: null, //不传代表新增
name: '复制'+item.name,
name: item.name,
picUrl: item.picUrl,
targetUser: item.targetUser,
meaning: item.meaning,
@@ -4787,21 +4846,50 @@ export default defineComponent({
};
//获取教师
const getTea = async () => {
options4CurName.value = state.teacher;
options4CurId.value = state.teacherId;
const item1 = await getMemberInfoApi({
pageNo: state.currentPageTea1,
pageSize: state.pageSizeTea1,
keyWord: options4CurName.value,
id: options4CurId.value ? options4CurId.value : null,
})
.then((res) => {
console.log("获取授课教师", res);
if (res.data.code === 200) return res.data.data;
})
.catch((err) => {
console.log("获取授课教师失败", err);
});
const { rows, total } = item1;
state.tableDataTotalTea1 = total;
state.tableDataTotalTea2 = total;
let newArr = [];
for (let item of rows) {
if (options4CurId.value === item.id) {
if (state.offcoursePlanId && state.offcourseId) {
options4CurName.value = item.realName;
state.xjkkinputV4 = item.realName;
state.teacherId = item.id;
} else if (state.offcourseId) {
options4CurName.value = item.realName;
state.qdms_inputV5 = item.realName;
state.teacher = item.realName;
state.teacherId = item.id;
console.log("那个老师", item);
}
}
newArr.push({
value: item.id,
label: item.realName,
});
}
options4.value = newArr;
console.log("options4.value");
console.log(options4.value);
};
//编辑面授课
const handleEdit = async (itm, type) => {
// auditDescription
let obj = {
offcourseId: itm.offcourseId,
pageNo: 1,
pageSize: 1,
type: 2,
};
api2.auditList(obj).then((res) => {
state.auditDescription = res.data.data.rows[0]?.description;
});
console.log(45555);
console.log(itm);
if (type === "1") {
@@ -4853,7 +4941,7 @@ export default defineComponent({
// valueHtml.value = item.outline;
// state.ft_hs = true;
CourseModalRef.value.visibleOpen(state.offcourseId);
CourseModalRef.value.visibleOpen(state.offcourseId, null);
state.ft_eidt = true;
getTea();
};
@@ -5252,6 +5340,7 @@ export default defineComponent({
columns6,
columns7,
options1,
options11,
options2,
options3,
options4,

View File

@@ -160,7 +160,48 @@
:key="index"
>
<div class="file_img">
<img :src="item.img" />
<img
v-if="
item.indexOf('jpg') !== -1 ||
item.indexOf('jpeg') !== -1 ||
item.indexOf('png') !== -1
"
src="@/assets/images/coursewareManage/pngpic.png"
/>
<div v-else>
<img
v-if="item.indexOf('doc') !== -1"
src="@/assets/images/coursewareManage/docpic.png"
/>
<div v-else>
<img
v-if="item.indexOf('xls') !== -1"
src="@/assets/images/coursewareManage/xlspic.png"
/>
<div v-else>
<img
v-if="item.indexOf('ppt') !== -1"
src="@/assets/images/coursewareManage/pptpic.png"
/>
<div v-else>
<img
v-if="item.indexOf('pdf') !== -1"
src="@/assets/images/coursewareManage/pdfpic.png"
/>
<div v-else>
<img
v-if="item.indexOf('zip') !== -1"
src="@/assets/images/coursewareManage/zippic.png"
/>
<img
v-else
src="@/assets/images/coursewareManage/docpic.png"
/>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="file_detail">
<div class="file_name">
@@ -650,7 +691,9 @@ export default defineComponent({
.fotarea {
width: calc(100% - 150px);
position: relative;
img {
max-width: 100%;
}
.fuwenben {
width: 90%;
height: 20px;

View File

@@ -31,7 +31,7 @@
<!-- 审核理由 -->
<div v-if="statusJuJue" class="statusJuJue">
<span>审核意见</span>
<span>-</span>
<span>{{ auditDescription }}</span>
</div>
<div class="faceteach" :style="{ display: ft_hs ? 'block' : 'none' }">
<div class="ft_main">
@@ -310,7 +310,7 @@
<span style="margin-right: 10px">附件</span>
</div>
<div class="item_inp">
<FJUpload v-model:value="attach"></FJUpload>
<FJUpload v-model:value="attach" />
</div>
</div>
</div>
@@ -360,7 +360,7 @@ import {
defineComponent,
ref,
shallowRef,
onMounted,
// onMounted,
onBeforeUnmount,
} from "vue";
import { message } from "ant-design-vue";
@@ -372,7 +372,7 @@ import {Editor, Toolbar} from "@wangeditor/editor-for-vue";
import ProjectManager from "@/components/project/ProjectManagerNew";
import FJUpload from "@/components/common/FJUpload";
import * as moment from "moment";
import * as api2 from "../../api/indexAudit";
export default defineComponent({
components: {
Editor,
@@ -383,7 +383,8 @@ export default defineComponent({
setup(props, { expose, emit }) {
const state = reactive({
hideshow: true,
attach: '',
ft_eidt: false,
attach: "",
ft_hs: false,
addLoading: false,
statusJuJue: 0,
@@ -401,15 +402,20 @@ export default defineComponent({
tags_val: [],
qdms_inputV6: "",
imgList: [],
auditDescription: "",
});
const visibleOpen = (offcourseId) => {
const visibleOpen = (offcourseId, name) => {
state.offcourseId = offcourseId;
if (state.offcourseId) {
state.ft_hs = true;
state.ft_eidt = true;
handleEditInfo(state.offcourseId);
} else {
state.ft_hs = true;
state.ft_eidt = false;
state.qdms_inputV1 = name;
}
};
const visibleClose = () => {
@@ -442,7 +448,7 @@ export default defineComponent({
state.tags_val = [];
state.qdms_inputV6 = "";
state.imgList = [];
state.attach = '';
state.attach = "";
valueHtml.value = "";
};
@@ -453,18 +459,20 @@ export default defineComponent({
// 内容 HTML
const valueHtml = ref("");
// // 模拟 ajax 异步获取内容
onMounted(() => {
setTimeout(() => {
// valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
console.log("toolbar222222222222222");
console.log(editorRef.value);
// const toolbar = DomEditor.getToolbar(editorRef.value);
// const menu = editorRef.value.getAllMenuKeys();
// const bar = toolbar.getConfig().toolbarKeys;
// console.log(menu);
// console.log(bar);
}, 3500);
});
// onMounted(() => {
// console.log("toolbar222222222222222111111");
// console.log(editorRef.value);
// setTimeout(() => {
// // valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
// console.log("toolbar22222222222222222222222233");
// console.log(editorRef.value);
// // const toolbar = DomEditor.getToolbar(editorRef.value);
// // const menu = editorRef.value.getAllMenuKeys();
// // const bar = toolbar.getConfig().toolbarKeys;
// // console.log(menu);
// // console.log(bar);
// }, 3500);
// });
const toolbarConfig = {
excludeKeys: ["insertVideo", "insertImage"],
};
@@ -483,13 +491,19 @@ export default defineComponent({
},
};
const handleCreated = (editor) => {
console.log(4545454544);
console.log(editor);
editorRef.value = editor; // 记录 editor 实例,重要!
};
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
const handleDestory = () => {
const editor = editorRef.value;
if (editor == null) return;
editor.destroy();
};
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
console.log(78787866666666666666);
// handleDestory();
});
// 富文本 eeeeeeeeeeeeee
@@ -618,7 +632,9 @@ export default defineComponent({
if (param === "review") {
//新建时点击审核按钮
submitReview(res.data.data.offcourseId);
}else visibleClose();
} else {
visibleClose();
}
}
});
};
@@ -639,6 +655,22 @@ export default defineComponent({
if (Number(item.auditStatus) === 2 && Number(item.status) === 0) {
state.statusTingQi = 0;
}
if (Number(item.auditStatus) === -1) {
let obj = {
offcourseId: offcourseId,
type: 2,
pageNo: 1,
pageSize: 1,
};
api2.auditList(obj).then((res) => {
if (res.data.data.rows && res.data.data.rows.length > 0) {
state.auditDescription = res.data.data.rows[0].description
? res.data.data.rows[0].description
: "-";
console.log("state.auditDescription", state.auditDescription);
}
});
}
state.qdms_inputV1 = item.name;
state.feng_mian_1 = item.picUrl;
@@ -651,7 +683,6 @@ export default defineComponent({
state.member = { value: item.teacherId, name: item.teacher };
valueHtml.value = item.outline;
state.attach = item.attach;
state.ft_hs = true;
};
const handleTagChange = () => {
@@ -701,15 +732,16 @@ export default defineComponent({
visibleClose,
handleTagChange,
handleTagClose,
handleCreated,
handlePush,
submitReview,
reviewClick,
editorRef,
valueHtml,
mode: "simple", // 或 'simple'
toolbarConfig,
editorConfig,
handleCreated,
handleDestory,
};
},
});

View File

@@ -125,7 +125,8 @@
</div>
<div class="left">审核意见</div>
<div class="rig">
<a-textarea v-model:value="valueSugg" :rows="4" />
<a-textarea v-model:value="valueSugg" :rows="4" show-count
:maxlength="20"/>
</div>
</div>
</div>

View File

@@ -418,6 +418,10 @@
<a-button class="pubtn2" @click="releaseLearnPath">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div class="aeLoading" :style="{ display: pubLoading ? 'flex' : 'none' }">
<a-spin :spinning="pubLoading" />
</div>
</a-modal>
<!-- 复制路径弹窗 -->
<a-modal
@@ -723,6 +727,7 @@ export default {
// learnPathBg: null, //创建路径选择的路径图背景
// learnPathBg2: null, //编辑路径选择的路径图背景
pub: false, //发布弹窗
pubLoading: false, //发布loading
checked: false, //发布弹窗switch
checkedTeacher: false, //发布弹窗勾选
checkStu: false, //发布弹窗勾选
@@ -853,6 +858,7 @@ export default {
const showPub = (router) => {
console.log("router", router);
state.pub = true;
state.pubLoading = true;
state.releasePathId = router.id;
state.releasePathName = router.manager;
api
@@ -860,7 +866,7 @@ export default {
.then((res) => {
console.log("获取关卡、任务、学员统计数据", res.data);
if (res.status === 200) {
state.routeStudentsNum = res.data.students;
// state.routeStudentsNum = res.data.students;
state.routeChapters = res.data.chapters;
state.routeTasks = res.data.tasks;
}
@@ -868,6 +874,24 @@ export default {
.catch((err) => {
console.log("err", err);
});
//获取学员列表
let stuobj = {
pageNo: 1,
pageSize: 10,
routerId: router.id,
};
api
.getStudent(stuobj)
.then((res) => {
console.log("获取学员列表", res.data.data.total);
if (res.data.code === 200) {
state.routeStudentsNum = res.data.data.total;
state.pubLoading = false;
}
})
.catch((err) => {
console.log("获取学员列表失败", err);
});
};
//确定发布
const releaseLearnPath = () => {
@@ -897,6 +921,11 @@ export default {
const closePub = () => {
state.pub = false;
state.releasePathId = null;
state.releasePathName = null;
state.routeChapters = null;
state.routeTasks = null;
state.routeStudentsNum = null;
};
//显示复制窗口
const showCopyModal = () => {
@@ -1544,8 +1573,8 @@ export default {
.getRouterDetail(id)
.then((res) => {
if (res.data.code === 200) {
console.log("获取学习路径详情成功", res.data.data);
let detail = res.data.data.routerInfo;
// console.log("获取详情成功", detail);
state.pathName = detail.name;
state.pathBg = detail.picUrl;
state.pathBgId = "";

View File

@@ -1143,6 +1143,10 @@
<a-button class="pubtn2" @click="releaseLearnPath">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div class="aeLoading" :style="{ display: pubLoading ? 'flex' : 'none' }">
<a-spin :spinning="pubLoading" />
</div>
</a-modal>
<!-- 撤回路径弹窗 -->
<a-modal
@@ -1303,6 +1307,7 @@ export default {
action: null,
act: null,
pub: false, //发布弹窗
pubLoading: false, //发布loading
backModal: false, //撤回弹窗
dcopyModal: false, //复制弹窗
closeBack: false,
@@ -1443,7 +1448,7 @@ export default {
addAuthList: [],
codevisible: false, //二维码是否显示
codeInfo: null, //二维码标题
codeInfo: null, //二维码内容
});
const levelList = reactive({
@@ -1813,13 +1818,14 @@ export default {
//显示发布弹窗
const showPub = () => {
state.pub = true;
state.pubLoading = true;
// state.releasePathId = routerId;
api
.getLearnCount(state.routerId)
.then((res) => {
if (res.status === 200) {
// console.log("获取关卡、任务、学员统计数据", res.data);
state.routeStudentsNum = res.data.students;
// state.routeStudentsNum = res.data.students;
state.routeChapters = res.data.chapters;
state.routeTasks = res.data.tasks;
}
@@ -1827,6 +1833,24 @@ export default {
.catch((err) => {
console.log("err", err);
});
//获取学员列表
let stuobj = {
pageNo: 1,
pageSize: 10,
routerId: state.routerId,
};
api
.getStudent(stuobj)
.then((res) => {
console.log("获取学员列表", res.data.data.total);
if (res.data.code === 200) {
state.routeStudentsNum = res.data.data.total;
state.pubLoading = false;
}
})
.catch((err) => {
console.log("获取学员列表失败", err);
});
};
//显示撤回弹窗
const showBackModal = () => {

View File

@@ -283,24 +283,33 @@
v-model:checked="checked"
@click="changeopclo"
/>
<div
class="opclo"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<div v-if="(checked==true)"
class="opclo">
<span>关闭</span>
</div>
<div
class="opclo"
:style="{ display: hideshow ? 'none' : 'block' }"
>
<div v-if="(checked==false)"
class="opclo" >
<span>开启</span>
</div>
</div>
<div
class="ntc_content"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<div class="ntcc_tit">公告内容</div>
<div v-if="(checked==true)"
class="ntc_content">
<div class="ntcc_tit">当前公告内容</div>
<div class="textarea">
{{noticeContent==""?"暂无公告":noticeContent}}
<div v-if="(editFlag == false)" class="btnarea" >
<div>&nbsp;</div>
<div class="area_btn" @click="editNotice">
<div class="btnText">编辑</div>
</div>
</div>
</div>
<template v-if="(editFlag==true)">
<div>&nbsp;</div>
<div class="ntcc_tit" >编辑公告</div>
<div class="textarea">
<a-textarea
v-model:value="projectInfo.notice"
@@ -316,12 +325,14 @@
</div>
</div>
</div>
</template>
</div>
</div>
</div>
</a-tab-pane>
</a-tabs>
</a-tab-pane>
<a-tab-pane key="3" tab="项目积分">
<div class="split"></div>
<div class="projectscore">
@@ -852,29 +863,25 @@ export default defineComponent({
],
isEdit: false, // 是否处于编辑状态
// 基本信息
projectInfo: {
beginTime: null,
endTime: null,
name: null,
manager: null,
notice: null,
sourceBelongId: null,
remark: "",
courseSyncFlag: false,
level: null,
systemId: null,
boeFlag: false,
status: null,
picUrl: null,
noticeFlag: null,
},
projectInfo: { },
noticeContent:"",
editFlag:false,
});
const value = ref("");
const textnum = "150";
const routered = useRouter();
const changeopclo = () => {
state.hideshow = !state.hideshow;
state.projectInfo.noticeFlag = state.checked?1:0;
api
.templateEdit( state.projectInfo)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
};
const changecheck2 = () => {
state.checked2 = !state.checked2;
};
@@ -906,6 +913,10 @@ export default defineComponent({
state.isEdit = false;
getDetail();
};
const editNotice =()=>{
state.editFlag = true ;
}
const checkType = (type) => {
let typeRules = [
"",
@@ -937,26 +948,12 @@ export default defineComponent({
state.taskSyllabus = [];
console.log(res);
state.projectInfo.name = res.data.data.projectTemplateInfo.name;
state.projectInfo.beginTime = res.data.data.projectTemplateInfo.beginTime;
state.projectInfo.endTime = res.data.data.projectTemplateInfo.endTime;
state.projectInfo.manager = res.data.data.projectTemplateInfo.manager;
state.projectInfo.notice = res.data.data.projectTemplateInfo.notice;
state.projectInfo.sourceBelongId = res.data.data.projectTemplateInfo.sourceBelongId;
state.projectInfo.managerId = res.data.data.projectTemplateInfo.managerId;
state.projectInfo.remark = res.data.data.projectTemplateInfo.remark;
state.projectInfo.courseSyncFlag = res.data.data.projectTemplateInfo.courseSyncFlag;
state.projectInfo.level = res.data.data.projectTemplateInfo.level;
state.projectInfo.systemId = res.data.data.projectTemplateInfo.systemId;
state.projectInfo.boeFlag = res.data.data.projectTemplateInfo.boeFlag;
state.projectInfo.noticeFlag = res.data.data.projectTemplateInfo.noticeFlag;
state.projectInfo.remark = res.data.data.projectTemplateInfo.remark;
state.projectInfo.status = res.data.data.projectTemplateInfo.status;
state.projectInfo.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.projectInfo.attach = res.data.data.projectTemplateInfo.attach;
state.projectInfo.category = res.data.data.projectTemplateInfo.category;
state.projectId = res.data.data.projectTemplateInfo.projectTemplateId;
state.projectInfo = res.data.data.projectTemplateInfo;
state.noticeContent = state.projectInfo.notice;
state.checked = state.projectInfo.noticeFlag==1?true:false;
console.log("res.data.data.projectTemplateInfo",res.data.data.projectTemplateInfo);
try{
state.fileList = JSON.parse(res.data.data.projectTemplateInfo.attach);
}catch{
@@ -967,7 +964,10 @@ export default defineComponent({
console.log("data=====", data);
for (let i in data) {
console.log("what ------ > ", i, data);
if(data[i].taskList.length!==0){
state.taskSyllabus.push({ text: data[i].name?data[i].name:'无阶段任务', children: [] });
}
for (let j in data[i].taskList) {
state.taskSyllabus[i].children.push({
course: checkType(data[i].taskList[j].type),
@@ -989,29 +989,14 @@ export default defineComponent({
// 发布公告
const addNotice = () => {
console.log("ok====s");
let obj = {
name: state.projectInfo.name,
category: state.projectInfo.category,
picUrl: state.projectInfo.picUrl,
manager: state.projectInfo.manager,
managerId: state.projectInfo.managerId || 0,
sourceBelongId: state.projectInfo.sourceBelongId,
level: state.projectInfo.level,
systemId: state.projectInfo.systemId,
boeFlag: state.projectInfo.boeFlag ? 1 : 0,
courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0,
notice: state.projectInfo.notice,
noticeFlag: state.projectInfo.noticeFlag,
projectTemplateId: localStorage.getItem("projectTemplateId"),
remark: state.projectInfo.remark,
status: state.projectInfo.status,
attach: state.projectInfo.attach,
};
console.log("obj======", obj);
// state.projectInfo.notice=
if(!state.projectInfo.notice){
return message.warning("请输入公告内容");
}
api
.templateEdit(obj)
.templateEdit( state.projectInfo)
.then((res) => {
state.noticeContent = state.projectInfo.notice;
message.success("公告发布成功");
console.log(res);
})
@@ -1019,7 +1004,9 @@ export default defineComponent({
message.error("公告发布失败" + err);
console.log(err);
});
state.editFlag =false;
};
// 删除阶段
const stateDel = (id) => {
api
@@ -1051,12 +1038,12 @@ export default defineComponent({
routered.push({
path: "/templateAdd",
query: {
projectId: state.projectId,
name: state.name,
projectTemplateId: state.projectInfo.projectTemplateId,
},
});
};
// 新建或编辑阶段
const stateEdit = () => {
let obj = {
@@ -1289,7 +1276,8 @@ export default defineComponent({
editRule,
handleChange2,
scoresum,
checkedClose
checkedClose,
editNotice
};
},
});

View File

@@ -84,7 +84,12 @@
allowClear
></a-select>
<img
style="width:100px;height:100px;margin-top:20px;border-radius: 8px"
style="
width: 100px;
height: 100px;
margin-top: 20px;
border-radius: 8px;
"
v-if="projectInfo.picUrl"
:src="projectInfo.picUrl"
alt="avatar"
@@ -300,7 +305,7 @@ import OrgClass from "@/components/project/OrgClass";
import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectLevel from "@/components/project/ProjectLevel";
import { changeOwnership, scrollLoad } from "@/api/method";
import { storage } from "../../api/storage";
export default {
name: "projectAdd",
components: {
@@ -329,16 +334,19 @@ export default {
},
classifyList5: [],
courseSyncFlag: false,
picUrlName:'请选择封面图'
picUrlName: "请选择封面图",
});
// 封面图选择
const handleChangeSelect = (value) => {
console.log(value)
state.projectInfo.picUrl= value
}
console.log(value);
state.projectInfo.picUrl = value;
};
onMounted(() => {
state.projectPic = store.state.projectPic.map((e) => ({value: e.dictValue, label: e.dictName}));
state.projectPic = store.state.projectPic.map((e) => ({
value: e.dictValue,
label: e.dictName,
}));
state.viewDetail = routers.query.viewDetail;
getProjectInfo();
getTemplate();
@@ -363,13 +371,16 @@ export default {
.then((res) => {
state.projectInfo = res.data.data.projectInfo;
console.log(res)
let picurl = res.data.data.projectInfo.picUrl
let dates = store.state.projectPic.map((e) => ({value: e.dictValue, label: e.dictName}));
console.log(dates,picurl)
console.log(res);
let picurl = res.data.data.projectInfo.picUrl;
let dates = store.state.projectPic.map((e) => ({
value: e.dictValue,
label: e.dictName,
}));
console.log(dates, picurl);
for (let i = 0; i < dates.length; i++) {
if (dates[i].value == picurl) {
state.picUrlName = dates[i].label
state.picUrlName = dates[i].label;
}
}
@@ -466,19 +477,23 @@ export default {
state.projectInfo.type = 3;
state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0;
api.createProject(state.projectInfo).then((res) => {
state.projectInfo.projectId || changeOwnership(
"project",
res.data.data.projectId,
[{id: res.data.data.createId, name: res.data.data.createName}]
);
state.projectInfo.projectId ||
changeOwnership("project", res.data.data.projectId, [
{ id: res.data.data.createId, name: res.data.data.createName },
]);
message.destroy();
message.success("编辑成功");
router.back();
message.success(state.projectInfo.projectId ? "编辑成功" : "创建成功");
// router.back();
router.push({
path: "/taskpage",
query: { projectId: res.data.data.projectId },
});
storage.set("projectId", res.data.data.projectId);
});
};
function managerChange(e, l, d) {
state.projectInfo.sourceBelongId = d
state.projectInfo.sourceBelongId = d;
}
return {
@@ -490,7 +505,7 @@ export default {
createProject,
backPage,
templateScroll,
handleChangeSelect
handleChangeSelect,
};
},
};

View File

@@ -47,7 +47,10 @@
<a-range-picker
v-model:value="searchParam.valueDate"
:show-time="{
defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')],
defaultValue: [
moment('00:00:00', 'HH:mm:ss'),
moment('23:59:59', 'HH:mm:ss'),
],
}"
style="border-radius: 8px; height: 40px; margin-left: 5px"
:placeholder="[' 开始时间', ' 结束时间']"
@@ -378,7 +381,7 @@
<img src="../../assets/images/taskpage/right2.png" />
</div>
<div class="centerbox" style="color: rgba(78, 166, 255, 1)">
单层{{ projectInfo.parentId ? '子' : '' }}项目
单层{{ projectInfo.parentId ? "子" : "" }}项目
</div>
<div class="centermain">
不包含子项目直接填写项目基础信息后创建任务
@@ -403,11 +406,13 @@
<img src="../../assets/images/taskpage/right3.png" />
</div>
<div class="centerbox1" style="color: rgba(93, 201, 136, 1)">
多层{{ projectInfo.parentId ? '子' : '' }}项目
多层{{ projectInfo.parentId ? "子" : "" }}项目
</div>
<div class="centermain1">
{{
projectInfo.parentId ? '可创建班级,通过班级填写基础信息并创建任务' : '包含子项目,分为多层子项目和单层子项目,多层子项目可创建班级,通过班级填写基础信息并创建任务'
projectInfo.parentId
? "可创建班级,通过班级填写基础信息并创建任务"
: "包含子项目,分为多层子项目和单层子项目,多层子项目可创建班级,通过班级填写基础信息并创建任务"
}}
</div>
</div>
@@ -615,6 +620,13 @@
<a-button class="pubtn2" @click="releaseProject">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div
class="aeLoading"
:style="{ display: projectPubLoading ? 'flex' : 'none' }"
>
<a-spin :spinning="projectPubLoading" />
</div>
</a-modal>
<!-- 撤回路径弹窗 -->
<a-modal
@@ -813,7 +825,7 @@ import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectClass from "@/components/project/ProjectClass";
import OrgClass from "@/components/project/OrgClass";
import dayjs from "dayjs";
import * as moment from 'moment'
import * as moment from "moment";
import { changeOwnership } from "@/api/method";
export default {
@@ -846,6 +858,7 @@ export default {
startModal: false, //启用弹窗
closeStart: false, //启用弹窗关闭图标
projectPub: false, //发布弹窗
projectPubLoading: false, //发布loading
backModal: false, //撤回弹窗
closeBack: false, //撤回弹窗关闭图标
reminderModal: false, //温馨提示弹窗
@@ -905,7 +918,7 @@ export default {
{ value: 2, label: "审核通过" },
{ value: 3, label: "已发布" },
{ value: -2, label: "未通过" },
{value: -1, label: "已结束"}
{ value: -1, label: "已结束" },
]);
const searchReset = () => {
state.searchParam = { pageNo: 1, pageSize: 10 };
@@ -955,11 +968,10 @@ export default {
message.destroy();
message.success("创建成功");
state.currentPage = 1;
state.projectInfo.projectId || changeOwnership(
"project",
res.data.data.projectId,
[{id: res.data.data.createId, name: res.data.data.createName}]
);
state.projectInfo.projectId ||
changeOwnership("project", res.data.data.projectId, [
{ id: res.data.data.createId, name: res.data.data.createName },
]);
getTableDate();
});
};
@@ -1002,38 +1014,38 @@ export default {
//打开发布弹窗
const showProjectPub = (object) => {
state.projectPub = true;
state.projectPubLoading = true;
state.releaseProjectId = object.projectId;
state.releaseProjectName = object.name;
state.releaseProjectTime = object.time;
console.log("object", object);
api
.getProjectCount(object.projectId)
.then((res) => {
api.getProjectCount(object.projectId).then((res) => {
console.log("获取关卡、任务、学员统计数据", res.data);
state.projectStudentsNum = res.data.students;
// state.projectStudentsNum = res.data.students;
state.projectStages = res.data.stages;
state.projectTasks = res.data.tasks;
});
//获取学员总数
let obj = {
pageNo: 0,
pageSize: 0,
projectId: object.projectId,
};
api
.projectStudent(obj)
.then((res) => {
if (res.data.code === 200) {
// console.log("res", res.data);
state.projectStudentsNum = res.data.data.total
? res.data.data.total
: 0;
state.projectPubLoading = false;
}
})
// //获取学员总数
// let obj = {
// pageNo: 0,
// pageSize: 0,
// projectId: object.projectId,
// };
// api
// .projectStudent(obj)
// .then((res) => {
// if (res.status === 200) {
// // console.log("res", res.data);
// state.projectStudentsNum = res.data.data.total
// ? res.data.data.total
// : 0;
// }
// })
// .catch((err) => {
// console.log("获取学员人数失败", err);
// });
// //获取阶段及任务总数
.catch((err) => {
console.log("获取学员人数失败", err);
});
//获取阶段及任务总数
};
//确认发布项目
const releaseProject = () => {
@@ -1042,18 +1054,22 @@ export default {
projectId: state.releaseProjectId,
type: 4,
};
api.handleProject(obj)
.then((res) => {
api.handleProject(obj).then((res) => {
console.log("发布成功", res);
message.destroy();
message.success("发布成功");
state.projectPub = false;
getTableDate();
})
});
};
//关闭发布弹窗
const closeProjectPub = () => {
state.projectPub = false;
state.projectStages = null;
state.projectTasks = null;
state.projectStudentsNum = null;
state.projectPubLoading = false;
state.releaseProjectId = null;
};
//打开撤回发布弹窗
const showBackModal = (projectId) => {
@@ -1184,7 +1200,7 @@ export default {
message.success("模版保存成功");
return;
}
Modal.error({title: res.data.msg})
Modal.error({ title: res.data.msg });
});
};
//关闭存为模版弹窗
@@ -1314,15 +1330,21 @@ export default {
customRender: (value) => {
return (
<div>
{value.record.type === 3 ? {
'0': () => '草稿',
'1': () => '草稿',
'2': () => '草稿',
'3': () => dayjs().isBefore(value.record.beginTime) ? '未开始' : '进行中',
'4': () => dayjs().isBefore(value.record.end) ? '进行中' : '已结束',
'-1': () => '已结束',
'-5': () => '草稿'
}[value.record.status + '']() || '' : '-'}
{value.record.type === 3
? {
0: () => "草稿",
1: () => "草稿",
2: () => "草稿",
3: () =>
dayjs().isBefore(value.record.beginTime)
? "未开始"
: "进行中",
4: () =>
dayjs().isBefore(value.record.end) ? "进行中" : "已结束",
"-1": () => "已结束",
"-5": () => "草稿",
}[value.record.status + ""]() || ""
: "-"}
</div>
);
},
@@ -1345,15 +1367,17 @@ export default {
customRender: (value) => {
return (
<div>
{value.record.type === 3 ? {
'0': '未审核',
'1': '审核中',
'2': '已审核',
'3': '已审核',
'4': '已审核',
'-1': '已审核',
'-5': '拒绝'
}[value.record.status + ''] || '' : '-'}
{value.record.type === 3
? {
0: "未审核",
1: "审核中",
2: "已审核",
3: "已审核",
4: "已审核",
"-1": "已审核",
"-5": "拒绝",
}[value.record.status + ""] || ""
: "-"}
</div>
);
},
@@ -1402,8 +1426,7 @@ export default {
) : (
""
)}
{(value.record.status === 0) &&
value.record.type === 3 ? (
{value.record.status === 0 && value.record.type === 3 ? (
<span
onClick={() => {
showReviewModal(value.record.projectId);
@@ -1432,7 +1455,8 @@ export default {
{value.record.status === 2 && value.record.type === 3 ? (
<span
onClick={() => {
let time = value.record.beginTime + "-" + value.record.endTime;
let time =
value.record.beginTime + "-" + value.record.endTime;
let obj = {
projectId: value.record.projectId,
name: value.record.name,
@@ -1535,7 +1559,8 @@ export default {
path: "/projectadd",
query: {
parentId: value.record.projectId,
parentName: value.record.parentName + '——' + value.record.name,
parentName:
value.record.parentName + "——" + value.record.name,
},
});
}}
@@ -1616,7 +1641,7 @@ export default {
onClick={() => {
router.push({
path: "/taskpage",
query: {projectId: value.record.projectId}
query: { projectId: value.record.projectId },
});
storage.set("projectId", value.record.projectId);
}}
@@ -1664,7 +1689,10 @@ export default {
data.forEach((e) => {
e.parentName = parentName;
e.key = e.projectId;
initDataSublist((parentName ? (parentName + '——') : '') + e.name, e.subList);
initDataSublist(
(parentName ? parentName + "——" : "") + e.name,
e.subList
);
e.subList && e.subList.length && (e.children = e.subList);
});
}
@@ -1755,7 +1783,7 @@ export default {
);
function managerChange(e, l, d) {
state.projectInfo.sourceBelongId = d
state.projectInfo.sourceBelongId = d;
}
return {

View File

@@ -16,7 +16,16 @@
src="../../assets/images/leveladd/ma.png"
@click="showCodeModel2()"
/>
<div class="line" v-if="action == 1 || action == 0"></div>
<div
class="line"
v-if="
action == 1 ||
action == 2 ||
action == 0 ||
action == 3 ||
action == -2
"
></div>
<!-- 显示发布图标 -->
<img
v-if="action == 2"
@@ -27,11 +36,11 @@
<img
v-if="action == 3"
class="img2"
src="../../assets/images/leveladd/pub.png"
src="../../assets/images/project/finish.png"
/>
<!-- 显示审核图标 -->
<img
v-if="action == 0"
v-if="action == 0 || action == -2"
class="img2"
src="../../assets/images/project/reviewsubmit.png"
/>
@@ -46,8 +55,8 @@
<!-- 显示提交审核 -->
<div
class="pub"
style="width: 56px"
v-if="action == 0"
style="width: 56px; color: #a497ff"
v-if="action == 0 || action == -2"
@click="submitExamine"
>
{{ act }}
@@ -55,7 +64,7 @@
<!-- 显示撤回审核 -->
<div
class="pub"
style="width: 56px"
style="width: 56px; color: #a497ff"
v-if="action == 1"
@click="showRecallReviewModal"
>
@@ -73,7 +82,7 @@
<!-- 显示撤回发布 -->
<div
class="pub"
style="width: 56px"
style="width: 56px; color: #57c887"
v-if="action == 3"
@click="showBackModal"
>
@@ -1698,7 +1707,9 @@
<div class="projectbox">
<div class="promessage">
<div class="messageme">项目信息</div>
<div class="messagege">当前项目共0个阶段0个任务</div>
<div class="messagege">
当前项目共{{ projectStages }}个阶段,{{ projectTasks }}个任务
</div>
</div>
<div class="stumessage">
<div class="messageme1">学员信息</div>
@@ -1722,6 +1733,13 @@
<a-button class="pubtn2" @click="releaseProject">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div
class="aeLoading"
:style="{ display: projectPubLoading ? 'flex' : 'none' }"
>
<a-spin :spinning="projectPubLoading" />
</div>
</a-modal>
<!-- 撤回弹窗 -->
@@ -2083,7 +2101,10 @@ export default {
action: null,
act: null,
projectPub: false, //发布弹窗
projectPubLoading: false, //发布loading
projectStudentsNum: 0, //发布弹窗-学员人数
projectStages: 0, //发布弹窗-阶段数
projectTasks: 0, //任务数
releaseProjectId: null, //发布的项目id
releaseProjectName: null, //发布的项目名称
releaseProjectTime: null, //发布的项目时间
@@ -3884,10 +3905,17 @@ export default {
//打开发布弹窗
const showProjectPub = () => {
state.projectPub = true;
state.projectPubLoading = true;
state.releaseProjectId = state.projectId;
state.releaseProjectName = state.name;
// state.releaseProjectTime = state.startTime;
// console.log("object", object);
apiproj.getProjectCount(state.projectId).then((res) => {
console.log("获取关卡、任务、学员统计数据", res.data);
// state.projectStudentsNum = res.data.students;
state.projectStages = res.data.stages;
state.projectTasks = res.data.tasks;
});
//获取学员总数
let obj = {
pageNo: 0,
@@ -3897,11 +3925,12 @@ export default {
apiproj
.projectStudent(obj)
.then((res) => {
if (res.status === 200) {
if (res.data.code === 200) {
// console.log("res", res.data);
state.projectStudentsNum = res.data.data.total
? res.data.data.total
: 0;
state.projectPubLoading = false;
}
})
.catch((err) => {
@@ -5170,7 +5199,7 @@ export default {
.img2 {
width: 42px;
height: 42px;
margin-right: 22px;
margin-right: 10px;
}
.pub {

View File

@@ -1407,9 +1407,18 @@ export default {
state.level = [];
// state.tableData = array[0]
// 当无阶段任务出现时 显示当前数据
if(array[0].taskList.length!==0){
getTableData(array[0].taskList)
}
}else{
state.level = array;
let datearr = []
for(let i=0;i<array.length;i++){
if(array[i].id!==0&&array[i].taskList.length!==0){
datearr.push(array[i])
}
}
state.level = datearr;
}
};