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 store = useStore();
const isLogin = ref(false); const isLogin = ref(false);
// console.log("router", router.getRoutes(), route); // console.log("router", router.getRoutes(), route);
console.log("版本0.9.5------------"); console.log("版本0.9.6------------");
const routes = computed(() => { const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink); return router.getRoutes().filter((e) => e.meta?.isLink);
}); });

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com * @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 14:32:52 * @Date: 2022-11-21 14:32:52
* @LastEditors: lixg lixg@dongwu-inc.com * @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 * @FilePath: /fe-manage/src/api/config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @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 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 }) 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" :closable="closableQR"
wrapClassName="codeModal" wrapClassName="codeModal"
style="margin-top: 400px" style="margin-top: 400px"
:zIndex="999" :zIndex="9999"
@cancel="qr_exit" @cancel="qr_exit"
> >
<div id="qrcode" class="QR"> <div id="qrcode" class="QR">

View File

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

View File

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

View File

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

View File

@@ -116,7 +116,8 @@
</div> </div>
<div class="setc_name"><span>审核意见</span></div> <div class="setc_name"><span>审核意见</span></div>
<div class="setc_main"> <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> </div>
</div> </div>

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -160,7 +160,48 @@
:key="index" :key="index"
> >
<div class="file_img"> <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>
<div class="file_detail"> <div class="file_detail">
<div class="file_name"> <div class="file_name">
@@ -650,7 +691,9 @@ export default defineComponent({
.fotarea { .fotarea {
width: calc(100% - 150px); width: calc(100% - 150px);
position: relative; position: relative;
img {
max-width: 100%;
}
.fuwenben { .fuwenben {
width: 90%; width: 90%;
height: 20px; height: 20px;

View File

@@ -1,29 +1,29 @@
<!-- 确定新建面授课弹窗 --> <!-- 确定新建面授课弹窗 -->
<template> <template>
<a-modal <a-modal
v-model:visible="ft_hs" v-model:visible="ft_hs"
title="Title" title="Title"
:footer="null" :footer="null"
:closable="false" :closable="false"
wrapClassName="modalStyle facteachModal" wrapClassName="modalStyle facteachModal"
width="80%" width="80%"
@cancel="visibleClose" @cancel="visibleClose"
@ok="handlePush" @ok="handlePush"
> >
<div class="modalHeader"> <div class="modalHeader">
<div class="headerLeft"> <div class="headerLeft">
<img <img
style="width: 17px; height: 18px; margin-right: 8px" style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/basicinfo/add.png" src="@/assets/images/basicinfo/add.png"
/> />
<span v-if="ft_eidt" class="headerLeftText">编辑面授课</span> <span v-if="ft_eidt" class="headerLeftText">编辑面授课</span>
<span v-else class="headerLeftText">新建面授课</span> <span v-else class="headerLeftText">新建面授课</span>
</div> </div>
<div style="margin-right: 57px; cursor: pointer"> <div style="margin-right: 57px; cursor: pointer">
<img <img
@click="visibleClose" @click="visibleClose"
style="width: 22px; height: 22px" style="width: 22px; height: 22px"
src="@/assets/images/basicinfo/close22.png" src="@/assets/images/basicinfo/close22.png"
/> />
</div> </div>
</div> </div>
@@ -31,7 +31,7 @@
<!-- 审核理由 --> <!-- 审核理由 -->
<div v-if="statusJuJue" class="statusJuJue"> <div v-if="statusJuJue" class="statusJuJue">
<span>审核意见</span> <span>审核意见</span>
<span>-</span> <span>{{ auditDescription }}</span>
</div> </div>
<div class="faceteach" :style="{ display: ft_hs ? 'block' : 'none' }"> <div class="faceteach" :style="{ display: ft_hs ? 'block' : 'none' }">
<div class="ft_main"> <div class="ft_main">
@@ -42,8 +42,8 @@
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk" alt="asterisk"
/> />
</div> </div>
<span style="margin-right: 14px">课程名称</span> <span style="margin-right: 14px">课程名称</span>
@@ -51,10 +51,10 @@
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"> <div class="i1_input">
<a-input <a-input
v-model:value="qdms_inputV1" v-model:value="qdms_inputV1"
maxlength="90" maxlength="90"
style="width: 440px; height: 40px; border-radius: 8px" style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入课程名称" placeholder="请输入课程名称"
/> />
<div class="inp_num"> <div class="inp_num">
<span style="color: #c7cbd2"> <span style="color: #c7cbd2">
@@ -70,19 +70,19 @@
<span style="color: #999ba3">课程命名规则</span> <span style="color: #999ba3">课程命名规则</span>
</div> </div>
<div <div
class="i2_right" class="i2_right"
@click="hideShow" @click="hideShow"
style="cursor: pointer" style="cursor: pointer"
> >
<div <div
class="b_zk" class="b_zk"
:style="{ display: hideshow ? 'block' : 'none' }" :style="{ display: hideshow ? 'block' : 'none' }"
> >
<span style="color: #4ea6ff">收起</span> <span style="color: #4ea6ff">收起</span>
</div> </div>
<div <div
class="b_sq" class="b_sq"
:style="{ display: hideshow ? 'none' : 'block' }" :style="{ display: hideshow ? 'none' : 'block' }"
> >
<span style="color: #4ea6ff">展开</span> <span style="color: #4ea6ff">展开</span>
</div> </div>
@@ -90,14 +90,14 @@
</div> </div>
</div> </div>
<div <div
class="i2_detail" class="i2_detail"
:style="{ display: hideshow ? 'block' : 'none' }" :style="{ display: hideshow ? 'block' : 'none' }"
> >
<span style="color: #999ba3"> <span style="color: #999ba3">
1课程名称统一不加书名号<br/> 1课程名称统一不加书名号<br />
2项目名称属地等信息如需体现在课程名称中请放在课程名称信息 2项目名称属地等信息如需体现在课程名称中请放在课程名称信息
之后时间管理GROW180项目时间管理B*确保首先 之后时间管理GROW180项目时间管理B*确保首先
看到的是课程内容主题<br/> 看到的是课程内容主题<br />
3同一课程如先后有多个版本原则上仅开放最新版本旧版本应停用 3同一课程如先后有多个版本原则上仅开放最新版本旧版本应停用
版本如必须以年份标明请以沟通技巧2022的方式呈现 版本如必须以年份标明请以沟通技巧2022的方式呈现
</span> </span>
@@ -107,32 +107,32 @@
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 14px">封面图</span> <span style="margin-right: 14px">封面图</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
v-model:value="feng_mian_1" v-model:value="feng_mian_1"
dropdownClassName="dropdown-style" dropdownClassName="dropdown-style"
style="width: 440px" style="width: 440px"
placeholder="请选择" placeholder="请选择"
:options="optionsUrl" :options="optionsUrl"
allowClear allowClear
showSearch showSearch
/> />
<img <img
class="i_upload_img" class="i_upload_img"
v-if="feng_mian_1" v-if="feng_mian_1"
:src="feng_mian_1" :src="feng_mian_1"
alt="avatar" alt="avatar"
/> />
<div class="i_bottom"> <div class="i_bottom">
<span style="color: #999ba3"> <span style="color: #999ba3">
@@ -145,9 +145,9 @@
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img
style="width: 10px; height: 10px" style="width: 10px; height: 10px"
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 14px">目标人群</span> <span style="margin-right: 14px">目标人群</span>
@@ -155,10 +155,10 @@
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"> <div class="i1_input">
<a-input <a-input
v-model:value="qdms_inputV2" v-model:value="qdms_inputV2"
maxlength="50" maxlength="50"
style="width: 440px; height: 40px; border-radius: 8px" style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入目标人群" placeholder="请输入目标人群"
/> />
<div class="inp_num"> <div class="inp_num">
<span style="color: #c7cbd2"> <span style="color: #c7cbd2">
@@ -175,10 +175,10 @@
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"> <div class="i1_input">
<a-input <a-input
v-model:value="qdms_inputV3" v-model:value="qdms_inputV3"
maxlength="200" maxlength="200"
style="width: 440px; height: 40px; border-radius: 8px" style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入课程价值" placeholder="请输入课程价值"
/> />
<div class="inp_num"> <div class="inp_num">
<span style="color: #c7cbd2"> <span style="color: #c7cbd2">
@@ -192,8 +192,8 @@
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk" alt="asterisk"
/> />
</div> </div>
<span style="margin-right: 14px">内容分类</span> <span style="margin-right: 14px">内容分类</span>
@@ -201,18 +201,18 @@
<div class="item_inp"> <div class="item_inp">
<div class="select i6_input"> <div class="select i6_input">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
v-model:value="fen_lei" v-model:value="fen_lei"
dropdownClassName="dropdown-style" dropdownClassName="dropdown-style"
style="width: 440px" style="width: 440px"
placeholder="请选择" placeholder="请选择"
:options="options2" :options="options2"
allowClear allowClear
showSearch showSearch
/> />
</div> </div>
</div> </div>
@@ -224,18 +224,18 @@
<div class="item_inp"> <div class="item_inp">
<div class="select i7_input"> <div class="select i7_input">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
v-model:value="chang_jin" v-model:value="chang_jin"
dropdownClassName="dropdown-style" dropdownClassName="dropdown-style"
style="width: 440px" style="width: 440px"
placeholder="请选择" placeholder="请选择"
:options="options3" :options="options3"
allowClear allowClear
showSearch showSearch
/> />
</div> </div>
</div> </div>
@@ -246,17 +246,17 @@
</div> </div>
<div class="item_inp"> <div class="item_inp">
<a-input <a-input
v-model:value="tags_val_single" v-model:value="tags_val_single"
style="width: 440px; height: 40px; border-radius: 8px" style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入按回车键创建成功" placeholder="请输入按回车键创建成功"
@pressEnter="handleTagChange" @pressEnter="handleTagChange"
/> />
<div class="tag-content"> <div class="tag-content">
<a-tag <a-tag
v-for="(item, index) in tags_val" v-for="(item, index) in tags_val"
:key="index" :key="index"
closable closable
@close="handleTagClose(item)" @close="handleTagClose(item)"
> >
{{ item }} {{ item }}
</a-tag> </a-tag>
@@ -269,8 +269,8 @@
<div class="item_nam"> <div class="item_nam">
<div class="asterisk_icon"> <div class="asterisk_icon">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk" alt="asterisk"
/> />
</div> </div>
<!-- 授课教师1 --> <!-- 授课教师1 -->
@@ -279,8 +279,8 @@
<div class="item_inp"> <div class="item_inp">
<div class="i1_input"> <div class="i1_input">
<ProjectManager <ProjectManager
v-model:value="member.value" v-model:value="member.value"
v-model:name="member.name" v-model:name="member.name"
/> />
</div> </div>
</div> </div>
@@ -292,10 +292,10 @@
<div class="item_inp"> <div class="item_inp">
<div class="i10_textarea"> <div class="i10_textarea">
<a-textarea <a-textarea
v-model:value="qdms_inputV6" v-model:value="qdms_inputV6"
maxlength="150" maxlength="150"
style="width: 440px; height: 100px; border-radius: 8px" style="width: 440px; height: 100px; border-radius: 8px"
placeholder="请输入" placeholder="请输入"
/> />
<div class="inp_num"> <div class="inp_num">
<span style="color: #c7cbd2"> <span style="color: #c7cbd2">
@@ -310,7 +310,7 @@
<span style="margin-right: 10px">附件</span> <span style="margin-right: 10px">附件</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<FJUpload v-model:value="attach"></FJUpload> <FJUpload v-model:value="attach" />
</div> </div>
</div> </div>
</div> </div>
@@ -322,17 +322,17 @@
<div class="fotarea"> <div class="fotarea">
<div style="border: 1px solid #ccc"> <div style="border: 1px solid #ccc">
<Toolbar <Toolbar
style="border-bottom: 1px solid #ccc" style="border-bottom: 1px solid #ccc"
:editor="editorRef" :editor="editorRef"
:defaultConfig="toolbarConfig" :defaultConfig="toolbarConfig"
:mode="mode" :mode="mode"
/> />
<Editor <Editor
style="height: 250px; overflow-y: hidden" style="height: 250px; overflow-y: hidden"
v-model="valueHtml" v-model="valueHtml"
:defaultConfig="editorConfig" :defaultConfig="editorConfig"
:mode="mode" :mode="mode"
@onCreated="handleCreated" @onCreated="handleCreated"
/> />
</div> </div>
</div> </div>
@@ -360,19 +360,19 @@ import {
defineComponent, defineComponent,
ref, ref,
shallowRef, shallowRef,
onMounted, // onMounted,
onBeforeUnmount, onBeforeUnmount,
} from "vue"; } from "vue";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import {edit, detail, handle} from "@/api/indexCourse"; import { edit, detail, handle } from "@/api/indexCourse";
import {fileUp} from "../../api/indexEval"; import { fileUp } from "../../api/indexEval";
import * as api1 from "../../api/index1"; import * as api1 from "../../api/index1";
import "@wangeditor/editor/dist/css/style.css"; import "@wangeditor/editor/dist/css/style.css";
import {Editor, Toolbar} from "@wangeditor/editor-for-vue"; import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import FJUpload from "@/components/common/FJUpload"; import FJUpload from "@/components/common/FJUpload";
import * as moment from "moment"; import * as moment from "moment";
import * as api2 from "../../api/indexAudit";
export default defineComponent({ export default defineComponent({
components: { components: {
Editor, Editor,
@@ -380,15 +380,16 @@ export default defineComponent({
FJUpload, FJUpload,
ProjectManager, ProjectManager,
}, },
setup(props, {expose, emit}) { setup(props, { expose, emit }) {
const state = reactive({ const state = reactive({
hideshow: true, hideshow: true,
attach: '', ft_eidt: false,
attach: "",
ft_hs: false, ft_hs: false,
addLoading: false, addLoading: false,
statusJuJue: 0, statusJuJue: 0,
statusTingQi: 1, statusTingQi: 1,
member: {name: "", value: ""}, member: { name: "", value: "" },
offcourseId: null, offcourseId: null,
qdms_inputV1: "", qdms_inputV1: "",
@@ -401,15 +402,20 @@ export default defineComponent({
tags_val: [], tags_val: [],
qdms_inputV6: "", qdms_inputV6: "",
imgList: [], imgList: [],
auditDescription: "",
}); });
const visibleOpen = (offcourseId) => { const visibleOpen = (offcourseId, name) => {
state.offcourseId = offcourseId; state.offcourseId = offcourseId;
if (state.offcourseId) { if (state.offcourseId) {
state.ft_hs = true;
state.ft_eidt = true;
handleEditInfo(state.offcourseId); handleEditInfo(state.offcourseId);
} else { } else {
state.ft_hs = true; state.ft_hs = true;
state.ft_eidt = false;
state.qdms_inputV1 = name;
} }
}; };
const visibleClose = () => { const visibleClose = () => {
@@ -429,7 +435,7 @@ export default defineComponent({
state.addLoading = false; state.addLoading = false;
state.statusJuJue = 0; state.statusJuJue = 0;
state.statusTingQi = 1; state.statusTingQi = 1;
state.member = {name: "", value: ""}; state.member = { name: "", value: "" };
state.offcourseId = null; state.offcourseId = null;
state.qdms_inputV1 = ""; state.qdms_inputV1 = "";
@@ -442,7 +448,7 @@ export default defineComponent({
state.tags_val = []; state.tags_val = [];
state.qdms_inputV6 = ""; state.qdms_inputV6 = "";
state.imgList = []; state.imgList = [];
state.attach = ''; state.attach = "";
valueHtml.value = ""; valueHtml.value = "";
}; };
@@ -453,22 +459,24 @@ export default defineComponent({
// 内容 HTML // 内容 HTML
const valueHtml = ref(""); const valueHtml = ref("");
// // 模拟 ajax 异步获取内容 // // 模拟 ajax 异步获取内容
onMounted(() => { // onMounted(() => {
setTimeout(() => { // console.log("toolbar222222222222222111111");
// valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>"; // console.log(editorRef.value);
console.log("toolbar222222222222222"); // setTimeout(() => {
console.log(editorRef.value); // // valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
// const toolbar = DomEditor.getToolbar(editorRef.value); // console.log("toolbar22222222222222222222222233");
// const menu = editorRef.value.getAllMenuKeys(); // console.log(editorRef.value);
// const bar = toolbar.getConfig().toolbarKeys; // // const toolbar = DomEditor.getToolbar(editorRef.value);
// console.log(menu); // // const menu = editorRef.value.getAllMenuKeys();
// console.log(bar); // // const bar = toolbar.getConfig().toolbarKeys;
}, 3500); // // console.log(menu);
}); // // console.log(bar);
// }, 3500);
// });
const toolbarConfig = { const toolbarConfig = {
excludeKeys: ["insertVideo", "insertImage"], excludeKeys: ["insertVideo", "insertImage"],
}; };
const editorConfig = {placeholder: "请输入内容...", MENU_CONF: {}}; const editorConfig = { placeholder: "请输入内容...", MENU_CONF: {} };
editorConfig.MENU_CONF["uploadImage"] = { editorConfig.MENU_CONF["uploadImage"] = {
// 自定义上传 // 自定义上传
async customUpload(file, insertFn) { async customUpload(file, insertFn) {
@@ -483,13 +491,19 @@ export default defineComponent({
}, },
}; };
const handleCreated = (editor) => { const handleCreated = (editor) => {
console.log(4545454544);
console.log(editor);
editorRef.value = editor; // 记录 editor 实例,重要! editorRef.value = editor; // 记录 editor 实例,重要!
}; };
// 组件销毁时,也及时销毁编辑器 const handleDestory = () => {
onBeforeUnmount(() => {
const editor = editorRef.value; const editor = editorRef.value;
if (editor == null) return; if (editor == null) return;
editor.destroy(); editor.destroy();
};
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
console.log(78787866666666666666);
// handleDestory();
}); });
// 富文本 eeeeeeeeeeeeee // 富文本 eeeeeeeeeeeeee
@@ -505,48 +519,48 @@ export default defineComponent({
setCode: param, setCode: param,
}; };
api1 api1
.getDict(obj) .getDict(obj)
.then((res) => { .then((res) => {
console.log("获取字典成功", res); console.log("获取字典成功", res);
if (res.data.code === 200) { if (res.data.code === 200) {
if (param === "faceclassPic") { if (param === "faceclassPic") {
let arr = res.data.data.rows; let arr = res.data.data.rows;
let newArr = []; let newArr = [];
arr.forEach((item) => { arr.forEach((item) => {
newArr.push({ newArr.push({
value: item.dictValue, value: item.dictValue,
label: item.dictName, label: item.dictName,
});
}); });
optionsUrl.value = newArr; });
} 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 === "faceclassClass") {
.catch((err) => { let arr = res.data.data.rows;
console.log("获取字典失败", err); 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;
}
}
})
.catch((err) => {
console.log("获取字典失败", err);
});
}; };
getDictList("faceclassClass"); getDictList("faceclassClass");
getDictList("faceclassScene"); getDictList("faceclassScene");
@@ -618,7 +632,9 @@ export default defineComponent({
if (param === "review") { if (param === "review") {
//新建时点击审核按钮 //新建时点击审核按钮
submitReview(res.data.data.offcourseId); 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) { if (Number(item.auditStatus) === 2 && Number(item.status) === 0) {
state.statusTingQi = 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.qdms_inputV1 = item.name;
state.feng_mian_1 = item.picUrl; state.feng_mian_1 = item.picUrl;
@@ -648,10 +680,9 @@ export default defineComponent({
state.chang_jin = String(item.sceneId); state.chang_jin = String(item.sceneId);
state.tags_val = item.tips ? item.tips.split(",") : []; state.tags_val = item.tips ? item.tips.split(",") : [];
state.qdms_inputV6 = item.intro; state.qdms_inputV6 = item.intro;
state.member = {value: item.teacherId, name: item.teacher}; state.member = { value: item.teacherId, name: item.teacher };
valueHtml.value = item.outline; valueHtml.value = item.outline;
state.attach = item.attach; state.attach = item.attach;
state.ft_hs = true;
}; };
const handleTagChange = () => { const handleTagChange = () => {
@@ -701,15 +732,16 @@ export default defineComponent({
visibleClose, visibleClose,
handleTagChange, handleTagChange,
handleTagClose, handleTagClose,
handleCreated,
handlePush, handlePush,
submitReview,
reviewClick, reviewClick,
editorRef, editorRef,
valueHtml, valueHtml,
mode: "simple", // 或 'simple' mode: "simple", // 或 'simple'
toolbarConfig, toolbarConfig,
editorConfig, editorConfig,
handleCreated,
handleDestory,
}; };
}, },
}); });

View File

@@ -125,7 +125,8 @@
</div> </div>
<div class="left">审核意见</div> <div class="left">审核意见</div>
<div class="rig"> <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> </div>
</div> </div>

View File

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

View File

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

View File

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

View File

@@ -3,13 +3,13 @@
<div class="projectAdd"> <div class="projectAdd">
<div class="header"> <div class="header">
<span class="title" <span class="title"
>{{ projectInfo.parentId ? "编辑" : "创建" }}项目</span >{{ projectInfo.parentId ? "编辑" : "创建" }}项目</span
> >
<div <div
@click="backPage" @click="backPage"
style="cursor: pointer" style="cursor: pointer"
to="/projectmanage" to="/projectmanage"
class="goback" class="goback"
> >
<span class="return"></span><span class="returntext">返回</span> <span class="return"></span><span class="returntext">返回</span>
</div> </div>
@@ -19,8 +19,8 @@
<div class="name" v-if="projectInfo.parentName"> <div class="name" v-if="projectInfo.parentName">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目归属</div> <div class="inname">项目归属</div>
</div> </div>
@@ -33,26 +33,26 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目名称</div> <div class="inname">项目名称</div>
</div> </div>
<div class="in"> <div class="in">
<a-input <a-input
v-model:value="projectInfo.name" v-model:value="projectInfo.name"
placeholder="请输入项目名称" placeholder="请输入项目名称"
show-count show-count
:maxlength="30" :maxlength="30"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">分类</div> <div class="inname">分类</div>
</div> </div>
@@ -61,92 +61,97 @@
</div> </div>
</div> </div>
<div class="name flex-top"> <div class="name flex-top">
<div class="namebox" style="margin-top:10px"> <div class="namebox" style="margin-top: 10px">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">封面图</div> <div class="inname">封面图</div>
</div> </div>
<div class="in select" style="flex:1"> <div class="in select" style="flex: 1">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
v-model:value="picUrlName" v-model:value="picUrlName"
dropdownClassName="dropdown-style" dropdownClassName="dropdown-style"
style="width: 440px" style="width: 440px"
placeholder="请选择" placeholder="请选择"
:options="projectPic" :options="projectPic"
@change="handleChangeSelect" @change="handleChangeSelect"
allowClear allowClear
></a-select> ></a-select>
<img <img
style="width:100px;height:100px;margin-top:20px;border-radius: 8px" style="
v-if="projectInfo.picUrl" width: 100px;
:src="projectInfo.picUrl" height: 100px;
alt="avatar" margin-top: 20px;
border-radius: 8px;
"
v-if="projectInfo.picUrl"
:src="projectInfo.picUrl"
alt="avatar"
/> />
<div class="i_bottom"> <div class="i_bottom">
<span style="color: #999ba3"> <span style="color: #999ba3">
高宽比为16:9 (:800*450) png或jpg图片 高宽比为16:9 (:800*450) png或jpg图片
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目时间</div> <div class="inname">项目时间</div>
</div> </div>
<div class="in"> <div class="in">
<a-range-picker <a-range-picker
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
v-model:value="projectInfo.rangeTime" v-model:value="projectInfo.rangeTime"
style="width: 100%; height: 40px; border-radius: 5px" style="width: 100%; height: 40px; border-radius: 5px"
valueFormat="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss"
@change="timeChange" @change="timeChange"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目经理</div> <div class="inname">项目经理</div>
</div> </div>
<div class="in"> <div class="in">
<ProjectManager <ProjectManager
v-model:value="projectInfo.managerId" v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager" v-model:name="projectInfo.manager"
@onChange="managerChange" @onChange="managerChange"
mode="multiple" mode="multiple"
></ProjectManager> ></ProjectManager>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">资源归属</div> <div class="inname">资源归属</div>
</div> </div>
<div class="in select"> <div class="in select">
<OrgClass <OrgClass
v-model:value="projectInfo.sourceBelongId" v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName" v-model:name="projectInfo.sourceBelongName"
></OrgClass> ></OrgClass>
</div> </div>
</div> </div>
@@ -156,12 +161,12 @@
</div> </div>
<div class="in"> <div class="in">
<a-textarea <a-textarea
v-model:value="projectInfo.remark" v-model:value="projectInfo.remark"
style="height: 80px" style="height: 80px"
placeholder="请输入说明" placeholder="请输入说明"
show-count show-count
:maxlength="200" :maxlength="200"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
/> />
</div> </div>
</div> </div>
@@ -171,16 +176,16 @@
</div> </div>
<div class="in"> <div class="in">
<a-checkbox <a-checkbox
v-model:checked="courseSyncFlag" v-model:checked="courseSyncFlag"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
><span ><span
style=" style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
" "
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span >同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-checkbox ></a-checkbox
> >
<!-- <a-switch <!-- <a-switch
v-model:checked="projectInfo.courseSyncFlag" v-model:checked="projectInfo.courseSyncFlag"
@@ -201,8 +206,8 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">项目级别</div> <div class="inname">项目级别</div>
</div> </div>
@@ -213,8 +218,8 @@
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">培训分类</div> <div class="inname">培训分类</div>
</div> </div>
@@ -229,8 +234,8 @@
<!-- src="../../assets/images/basicinfo/asterisk.png"--> <!-- src="../../assets/images/basicinfo/asterisk.png"-->
<!-- />--> <!-- />-->
<img <img
class="nameimg" class="nameimg"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
/> />
<div class="inname">是否BOEU实施</div> <div class="inname">是否BOEU实施</div>
</div> </div>
@@ -242,8 +247,8 @@
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
></a-switch> --> ></a-switch> -->
<a-radio-group <a-radio-group
v-model:value="projectInfo.boeFlag" v-model:value="projectInfo.boeFlag"
:disabled="viewDetail ? true : false" :disabled="viewDetail ? true : false"
> >
<a-radio :style="radioStyle" :value="1"></a-radio> <a-radio :style="radioStyle" :value="1"></a-radio>
<a-radio :style="radioStyle" :value="0"></a-radio> <a-radio :style="radioStyle" :value="0"></a-radio>
@@ -256,19 +261,19 @@
<div class="inname" style="width: 50px">模版</div> <div class="inname" style="width: 50px">模版</div>
<div class="in select" style="margin-left: 2px"> <div class="in select" style="margin-left: 2px">
<a-select <a-select
:getPopupContainer=" :getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" "
v-model:value="classifySelect5" v-model:value="classifySelect5"
placeholder="请选择模版" placeholder="请选择模版"
:size="size" :size="size"
style="width: 100%" style="width: 100%"
:options="classifyList5" :options="classifyList5"
@change="classificationChange5" @change="classificationChange5"
@popupScroll="templateScroll" @popupScroll="templateScroll"
:fieldNames="{ :fieldNames="{
label: 'name', label: 'name',
value: 'projectTemplateId', value: 'projectTemplateId',
}" }"
@@ -281,7 +286,7 @@
<div class="footer"> <div class="footer">
<div class="btn"> <div class="btn">
<a-button v-on:click="createProject" type="primary" class="btn1" <a-button v-on:click="createProject" type="primary" class="btn1"
>确定 >确定
</a-button> </a-button>
<a-button @click="backPage" class="btn2">取消</a-button> <a-button @click="backPage" class="btn2">取消</a-button>
</div> </div>
@@ -289,18 +294,18 @@
</div> </div>
</template> </template>
<script> <script>
import {onMounted, reactive, toRefs, watch} from "vue"; import { onMounted, reactive, toRefs, watch } from "vue";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import {useRoute, useRouter} from "vue-router"; import { useRoute, useRouter } from "vue-router";
import * as api from "../../api/index"; import * as api from "../../api/index";
import {useStore} from "vuex"; import { useStore } from "vuex";
import ProjectClass from "@/components/project/ProjectClass"; import ProjectClass from "@/components/project/ProjectClass";
import TrainClass from "@/components/project/TrainClass"; import TrainClass from "@/components/project/TrainClass";
import OrgClass from "@/components/project/OrgClass"; import OrgClass from "@/components/project/OrgClass";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectLevel from "@/components/project/ProjectLevel"; import ProjectLevel from "@/components/project/ProjectLevel";
import {changeOwnership, scrollLoad} from "@/api/method"; import { changeOwnership, scrollLoad } from "@/api/method";
import { storage } from "../../api/storage";
export default { export default {
name: "projectAdd", name: "projectAdd",
components: { components: {
@@ -329,16 +334,19 @@ export default {
}, },
classifyList5: [], classifyList5: [],
courseSyncFlag: false, courseSyncFlag: false,
picUrlName:'请选择封面图' picUrlName: "请选择封面图",
}); });
// 封面图选择 // 封面图选择
const handleChangeSelect = (value) => { const handleChangeSelect = (value) => {
console.log(value) console.log(value);
state.projectInfo.picUrl= value state.projectInfo.picUrl = value;
} };
onMounted(() => { 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; state.viewDetail = routers.query.viewDetail;
getProjectInfo(); getProjectInfo();
getTemplate(); getTemplate();
@@ -359,29 +367,32 @@ export default {
return; return;
} }
api api
.getProjectDetail({projectId: routers.query.projectId}) .getProjectDetail({ projectId: routers.query.projectId })
.then((res) => { .then((res) => {
state.projectInfo = res.data.data.projectInfo; state.projectInfo = res.data.data.projectInfo;
console.log(res) console.log(res);
let picurl = res.data.data.projectInfo.picUrl let picurl = res.data.data.projectInfo.picUrl;
let dates = store.state.projectPic.map((e) => ({value: e.dictValue, label: e.dictName})); let dates = store.state.projectPic.map((e) => ({
console.log(dates,picurl) value: e.dictValue,
for(let i=0;i<dates.length;i++){ label: e.dictName,
if(dates[i].value==picurl){ }));
state.picUrlName = dates[i].label console.log(dates, picurl);
} for (let i = 0; i < dates.length; i++) {
if (dates[i].value == picurl) {
state.picUrlName = dates[i].label;
} }
}
state.projectInfo.rangeTime = [ state.projectInfo.rangeTime = [
state.projectInfo.beginTime, state.projectInfo.beginTime,
state.projectInfo.endTime, state.projectInfo.endTime,
]; ];
state.projectInfo.parentName = routers.query.parentName; state.projectInfo.parentName = routers.query.parentName;
state.courseSyncFlag = state.projectInfo.courseSyncFlag state.courseSyncFlag = state.projectInfo.courseSyncFlag
? true ? true
: false; : false;
}); });
} }
const backPage = () => { const backPage = () => {
@@ -466,19 +477,23 @@ export default {
state.projectInfo.type = 3; state.projectInfo.type = 3;
state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0; state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0;
api.createProject(state.projectInfo).then((res) => { api.createProject(state.projectInfo).then((res) => {
state.projectInfo.projectId || changeOwnership( state.projectInfo.projectId ||
"project", changeOwnership("project", res.data.data.projectId, [
res.data.data.projectId, { id: res.data.data.createId, name: res.data.data.createName },
[{id: res.data.data.createId, name: res.data.data.createName}] ]);
);
message.destroy(); message.destroy();
message.success("编辑成功"); message.success(state.projectInfo.projectId ? "编辑成功" : "创建成功");
router.back(); // router.back();
router.push({
path: "/taskpage",
query: { projectId: res.data.data.projectId },
});
storage.set("projectId", res.data.data.projectId);
}); });
}; };
function managerChange(e, l, d) { function managerChange(e, l, d) {
state.projectInfo.sourceBelongId = d state.projectInfo.sourceBelongId = d;
} }
return { return {
@@ -490,7 +505,7 @@ export default {
createProject, createProject,
backPage, backPage,
templateScroll, templateScroll,
handleChangeSelect handleChangeSelect,
}; };
}, },
}; };

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -1407,9 +1407,18 @@ export default {
state.level = []; state.level = [];
// state.tableData = array[0] // state.tableData = array[0]
// 当无阶段任务出现时 显示当前数据 // 当无阶段任务出现时 显示当前数据
getTableData(array[0].taskList) if(array[0].taskList.length!==0){
getTableData(array[0].taskList)
}
}else{ }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;
} }
}; };