mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-20 08:16:46 +08:00
59
src/App.vue
59
src/App.vue
@@ -1,27 +1,27 @@
|
||||
<template>
|
||||
<div id="container" v-if="!isLogin">
|
||||
<nav-top />
|
||||
<nav-top/>
|
||||
<div style="display: flex">
|
||||
<nav-left />
|
||||
<nav-left/>
|
||||
<div style="flex: 1; display: flex; flex-direction: column; width: 0">
|
||||
<open-pages />
|
||||
<bread-crumb />
|
||||
<open-pages/>
|
||||
<bread-crumb/>
|
||||
<main>
|
||||
<a-config-provider :locale="zhCN">
|
||||
<router-view />
|
||||
<router-view/>
|
||||
</a-config-provider>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="container" v-if="isLogin">
|
||||
<router-view />
|
||||
<router-view/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { computed, defineComponent, ref, watch } from "vue";
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
import { useStore } from "vuex";
|
||||
import {computed, defineComponent, ref, watch} from "vue";
|
||||
import {useRouter, useRoute} from "vue-router";
|
||||
import {useStore} from "vuex";
|
||||
import NavLeft from "@/components/NavLeft";
|
||||
import NavTop from "@/components/NavTop";
|
||||
import OpenPages from "@/components/OpenPages";
|
||||
@@ -30,6 +30,7 @@ import zhCN from "ant-design-vue/es/locale/zh_CN";
|
||||
import * as api from "./api/index1";
|
||||
import * as api1 from "@/api/index1";
|
||||
import * as api2 from "@/api/index";
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
NavLeft,
|
||||
@@ -43,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);
|
||||
});
|
||||
@@ -54,6 +55,7 @@ export default defineComponent({
|
||||
}
|
||||
);
|
||||
const currentRouteName = computed(() => route.name);
|
||||
|
||||
function init() {
|
||||
console.log(store);
|
||||
getUserInfo();
|
||||
@@ -68,6 +70,7 @@ export default defineComponent({
|
||||
getMemberInfo();
|
||||
getOrgTree();
|
||||
}
|
||||
|
||||
async function getMemberInfo() {
|
||||
const list = localStorage.getItem("memberInitInfo");
|
||||
if (list) {
|
||||
@@ -75,25 +78,31 @@ export default defineComponent({
|
||||
return;
|
||||
}
|
||||
const memberInitInfo = await api1
|
||||
.getMemberInfo({ keyWord: "", pageNo: 1, pageSize: 10 })
|
||||
.getMemberInfo({keyWord: "", pageNo: 1, pageSize: 10})
|
||||
.then((res) => res.data.data.rows);
|
||||
store.commit("SET_MEMBER_INFO", memberInitInfo);
|
||||
localStorage.setItem("memberInitInfo", JSON.stringify(memberInitInfo));
|
||||
}
|
||||
|
||||
async function getUserInfo() {
|
||||
const userInfo = await api2.userInfo();
|
||||
store.commit("SET_USER", userInfo);
|
||||
}
|
||||
async function initDict(key) {
|
||||
let list = localStorage.getItem(key);
|
||||
|
||||
async function initDict(key, localStory = false) {
|
||||
let list;
|
||||
if (localStory) {
|
||||
list = localStorage.getItem(key);
|
||||
if (list) {
|
||||
store.commit("SET_DICT", { key, data: JSON.parse(list) });
|
||||
store.commit("SET_DICT", {key, data: JSON.parse(list)});
|
||||
return;
|
||||
}
|
||||
list = await getDictList(key);
|
||||
localStorage.setItem(key, JSON.stringify(list));
|
||||
store.commit("SET_DICT", { key, data: list });
|
||||
}
|
||||
list = await getDictList(key);
|
||||
localStory && localStorage.setItem(key, JSON.stringify(list));
|
||||
store.commit("SET_DICT", {key, data: list});
|
||||
}
|
||||
|
||||
const getDictList = (param) =>
|
||||
api1
|
||||
.getDict({
|
||||
@@ -109,25 +118,16 @@ export default defineComponent({
|
||||
store.commit("getOrgtreeList", JSON.parse(orgtreeList));
|
||||
return;
|
||||
}
|
||||
let obj = {
|
||||
api.getOrgInfo({
|
||||
keyWord: "",
|
||||
id: -1,
|
||||
pageNo: 1,
|
||||
pageSize: 20,
|
||||
};
|
||||
api
|
||||
.getOrgInfo(obj)
|
||||
})
|
||||
.then((res) => {
|
||||
console.log("组织树获取成功", res);
|
||||
if (res.data.code === 200) {
|
||||
// state.treeData = res.data.data;
|
||||
localStorage.setItem("orgtreeList", JSON.stringify(res.data.data));
|
||||
store.commit("getOrgtreeList", res.data.data);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("组织树获取失败", err);
|
||||
});
|
||||
};
|
||||
init();
|
||||
return {
|
||||
@@ -150,6 +150,7 @@ export default defineComponent({
|
||||
color: #2c3e50;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#container {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
@@ -158,6 +159,7 @@ export default defineComponent({
|
||||
min-width: 1000px;
|
||||
min-height: 100%;
|
||||
background-color: rgba(245, 247, 250, 1);
|
||||
|
||||
main {
|
||||
height: 0;
|
||||
flex: 1 1 auto;
|
||||
@@ -173,6 +175,7 @@ export default defineComponent({
|
||||
background: #ffffff;
|
||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
|
||||
}
|
||||
|
||||
// @media screen and (max-width: 1366px) {
|
||||
// .cmMain {
|
||||
// width: 750px;
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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 })
|
||||
|
||||
BIN
src/assets/images/coursewareManage/docpic.png
Normal file
BIN
src/assets/images/coursewareManage/docpic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/images/coursewareManage/pdfpic.png
Normal file
BIN
src/assets/images/coursewareManage/pdfpic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/images/coursewareManage/pngpic.png
Normal file
BIN
src/assets/images/coursewareManage/pngpic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/images/coursewareManage/pptpic.png
Normal file
BIN
src/assets/images/coursewareManage/pptpic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/assets/images/coursewareManage/xlspic.png
Normal file
BIN
src/assets/images/coursewareManage/xlspic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/images/coursewareManage/zippic.png
Normal file
BIN
src/assets/images/coursewareManage/zippic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -7,7 +7,7 @@
|
||||
:closable="closableQR"
|
||||
wrapClassName="codeModal"
|
||||
style="margin-top: 400px"
|
||||
:zIndex="999"
|
||||
:zIndex="9999"
|
||||
@cancel="qr_exit"
|
||||
>
|
||||
<div id="qrcode" class="QR">
|
||||
|
||||
@@ -315,14 +315,12 @@ export default {
|
||||
} else if (props.isLevel == 3) {
|
||||
for (let i = 0; i < state.apiTaskList.length; i++) {
|
||||
apiTask
|
||||
.addTask({
|
||||
courseId: state.apiTaskList[i].caseid,
|
||||
duration: 0,
|
||||
flag: true,
|
||||
name: state.apiTaskList[i].caseName,
|
||||
.addTaskTemplate({
|
||||
courseId: Number(state.apiTaskList[i].casesId),
|
||||
name: state.apiTaskList[i].title,
|
||||
projectTaskId: props.projectTaskId,
|
||||
projectTemplateId: props.projectTemplateId,
|
||||
stageId: props.chooseStageId || 0,
|
||||
projectTemplateId: Number(localStorage.getItem("projectTemplateId")),
|
||||
stageId: Number(props.chooseStageId) || 0,
|
||||
type: 3,
|
||||
})
|
||||
.then(() => {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -499,7 +499,7 @@ export default {
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else if (props.isLevel === 2) {
|
||||
} else if (props.isLevel == 2) {
|
||||
console.log("我是要便利的数据2", state.addOnlineList);
|
||||
let p_data = state.addOnlineList;
|
||||
let p_data_id = [];
|
||||
@@ -556,15 +556,18 @@ export default {
|
||||
console.log(err);
|
||||
});
|
||||
} else if (props.isLevel == 3) {
|
||||
state.addOnlineList.map((value) => {
|
||||
console.log( props, props.projectTemplateId,props.projectTaskId)
|
||||
addTempTask({
|
||||
courseId: state.onlineClassesId,
|
||||
name: state.onlineName,
|
||||
projectTemplateId: props.projectTemplateId,
|
||||
courseId: value.num,
|
||||
name: value.name,
|
||||
projectTemplateId: localStorage.getItem("projectTemplateId"),
|
||||
projectTaskId: props.projectTaskId || 0,
|
||||
stageId: props.chooseStageId || 0,
|
||||
type: 1,
|
||||
})
|
||||
.then(() => {
|
||||
.then((res) => {
|
||||
console.log('新增或者编辑在线课',res)
|
||||
message.destroy();
|
||||
message.success(`${props.edit ? "编辑" : "新增"}模板库任务成功`);
|
||||
ctx.emit("changeData", false);
|
||||
@@ -574,6 +577,7 @@ export default {
|
||||
message.destroy();
|
||||
message.error(`${props.edit ? "编辑" : "新增"}模板库任务失败`);
|
||||
});
|
||||
})
|
||||
}
|
||||
//if(state.addOnlineList.Target==undefined){
|
||||
// closeDrawer();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
|
||||
@@ -4099,6 +4132,7 @@ export default defineComponent({
|
||||
address: "address",
|
||||
starttime: "beginTime",
|
||||
createtime: "createTime",
|
||||
createName: "createName",
|
||||
},
|
||||
true
|
||||
);
|
||||
@@ -4106,6 +4140,7 @@ export default defineComponent({
|
||||
itm.pageNo = pageNo;
|
||||
});
|
||||
state.tableData6 = datas;
|
||||
console.log("state.tableData6", state.tableData6);
|
||||
};
|
||||
|
||||
const options1 = ref([
|
||||
@@ -4187,20 +4222,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;
|
||||
}
|
||||
};
|
||||
@@ -4831,17 +4879,6 @@ export default defineComponent({
|
||||
};
|
||||
//编辑面授课
|
||||
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") {
|
||||
@@ -4893,7 +4930,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();
|
||||
};
|
||||
|
||||
@@ -160,7 +160,23 @@
|
||||
: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">
|
||||
|
||||
@@ -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">
|
||||
@@ -94,10 +94,10 @@
|
||||
:style="{ display: hideshow ? 'block' : 'none' }"
|
||||
>
|
||||
<span style="color: #999ba3">
|
||||
1、课程名称统一不加书名号。<br/>
|
||||
1、课程名称统一不加书名号。<br />
|
||||
2、项目名称、属地等信息如需体现在课程名称中,请放在课程名称信息
|
||||
之后,如“时间管理(GROW180项目)”或“时间管理(B*)”确保首先
|
||||
看到的是课程内容主题。<br/>
|
||||
看到的是课程内容主题。<br />
|
||||
3、同一课程如先后有多个版本,原则上仅开放最新版本,旧版本应停用
|
||||
版本如必须以年份标明,请以“沟通技巧(2022年)”的方式呈现。
|
||||
</span>
|
||||
@@ -363,16 +363,16 @@ import {
|
||||
onMounted,
|
||||
onBeforeUnmount,
|
||||
} from "vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import {edit, detail, handle} from "@/api/indexCourse";
|
||||
import {fileUp} from "../../api/indexEval";
|
||||
import { message } from "ant-design-vue";
|
||||
import { edit, detail, handle } from "@/api/indexCourse";
|
||||
import { fileUp } from "../../api/indexEval";
|
||||
import * as api1 from "../../api/index1";
|
||||
import "@wangeditor/editor/dist/css/style.css";
|
||||
import {Editor, Toolbar} from "@wangeditor/editor-for-vue";
|
||||
import { 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,
|
||||
@@ -380,15 +380,15 @@ export default defineComponent({
|
||||
FJUpload,
|
||||
ProjectManager,
|
||||
},
|
||||
setup(props, {expose, emit}) {
|
||||
setup(props, { expose, emit }) {
|
||||
const state = reactive({
|
||||
hideshow: true,
|
||||
attach: '',
|
||||
attach: "",
|
||||
ft_hs: false,
|
||||
addLoading: false,
|
||||
statusJuJue: 0,
|
||||
statusTingQi: 1,
|
||||
member: {name: "", value: ""},
|
||||
member: { name: "", value: "" },
|
||||
|
||||
offcourseId: null,
|
||||
qdms_inputV1: "",
|
||||
@@ -401,14 +401,16 @@ export default defineComponent({
|
||||
tags_val: [],
|
||||
qdms_inputV6: "",
|
||||
imgList: [],
|
||||
auditDescription:"",
|
||||
});
|
||||
|
||||
const visibleOpen = (offcourseId) => {
|
||||
const visibleOpen = (offcourseId, name) => {
|
||||
state.offcourseId = offcourseId;
|
||||
|
||||
if (state.offcourseId) {
|
||||
handleEditInfo(state.offcourseId);
|
||||
} else {
|
||||
state.qdms_inputV1 = name;
|
||||
state.ft_hs = true;
|
||||
}
|
||||
};
|
||||
@@ -429,7 +431,7 @@ export default defineComponent({
|
||||
state.addLoading = false;
|
||||
state.statusJuJue = 0;
|
||||
state.statusTingQi = 1;
|
||||
state.member = {name: "", value: ""};
|
||||
state.member = { name: "", value: "" };
|
||||
|
||||
state.offcourseId = null;
|
||||
state.qdms_inputV1 = "";
|
||||
@@ -442,7 +444,7 @@ export default defineComponent({
|
||||
state.tags_val = [];
|
||||
state.qdms_inputV6 = "";
|
||||
state.imgList = [];
|
||||
state.attach = '';
|
||||
state.attach = "";
|
||||
|
||||
valueHtml.value = "";
|
||||
};
|
||||
@@ -468,7 +470,7 @@ export default defineComponent({
|
||||
const toolbarConfig = {
|
||||
excludeKeys: ["insertVideo", "insertImage"],
|
||||
};
|
||||
const editorConfig = {placeholder: "请输入内容...", MENU_CONF: {}};
|
||||
const editorConfig = { placeholder: "请输入内容...", MENU_CONF: {} };
|
||||
editorConfig.MENU_CONF["uploadImage"] = {
|
||||
// 自定义上传
|
||||
async customUpload(file, insertFn) {
|
||||
@@ -618,7 +620,7 @@ export default defineComponent({
|
||||
if (param === "review") {
|
||||
//新建时点击审核按钮
|
||||
submitReview(res.data.data.offcourseId);
|
||||
}else visibleClose();
|
||||
} else visibleClose();
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -639,6 +641,23 @@ 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;
|
||||
@@ -648,7 +667,7 @@ export default defineComponent({
|
||||
state.chang_jin = String(item.sceneId);
|
||||
state.tags_val = item.tips ? item.tips.split(",") : [];
|
||||
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;
|
||||
state.attach = item.attach;
|
||||
state.ft_hs = true;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -217,7 +217,7 @@ export default {
|
||||
key: "status",
|
||||
align: "center",
|
||||
customRender: ({ record: { status } }) => (
|
||||
<div>{status == -2 ? "未通过" : "已通过"}</div>
|
||||
<div>{{ '2': "审核通过", "-5": "未通过" }[status + ""] || '审核通过'}</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
@@ -286,7 +286,7 @@ export default {
|
||||
key: "status",
|
||||
align: "center",
|
||||
customRender: ({ record: { status } }) => (
|
||||
<div>{{ 2: "审核通过", "-2": "审核拒绝" }[status + ""]}</div>
|
||||
<div>{{ '2': "审核通过", "-5": "审核拒绝" }[status + ""] || '审核通过'}</div>
|
||||
),
|
||||
},
|
||||
|
||||
|
||||
@@ -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 = "";
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<div class="onerow">
|
||||
<div class="taskmain">任务大纲</div>
|
||||
<!-- <button class="btn" @click="showFaceIn">批量面授报名</button> -->
|
||||
<router-link to="/temTask" class="edit">
|
||||
<router-link class="edit" :to="{ path: `/temTask`, query: { projectId: projectId } }">
|
||||
<img
|
||||
class="editimg"
|
||||
src="../../assets/images/projectadd/edit.png"
|
||||
@@ -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> </div>
|
||||
<div class="area_btn" @click="editNotice">
|
||||
|
||||
<div class="btnText">编辑</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<template v-if="(editFlag==true)">
|
||||
<div> </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,25 +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.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{
|
||||
@@ -966,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),
|
||||
@@ -988,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);
|
||||
})
|
||||
@@ -1018,7 +1004,9 @@ export default defineComponent({
|
||||
message.error("公告发布失败" + err);
|
||||
console.log(err);
|
||||
});
|
||||
state.editFlag =false;
|
||||
};
|
||||
|
||||
// 删除阶段
|
||||
const stateDel = (id) => {
|
||||
api
|
||||
@@ -1050,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 = {
|
||||
@@ -1288,7 +1276,8 @@ export default defineComponent({
|
||||
editRule,
|
||||
handleChange2,
|
||||
scoresum,
|
||||
checkedClose
|
||||
checkedClose,
|
||||
editNotice
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -61,14 +61,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="name flex-top">
|
||||
<div class="namebox" style="margin-top:10px">
|
||||
<div class="namebox" style="margin-top: 10px">
|
||||
<img
|
||||
class="nameimg"
|
||||
src="../../assets/images/basicinfo/asterisk.png"
|
||||
/>
|
||||
<div class="inname">封面图</div>
|
||||
</div>
|
||||
<div class="in select" style="flex:1">
|
||||
<div class="in select" style="flex: 1">
|
||||
<a-select
|
||||
:getPopupContainer="
|
||||
(triggerNode) => {
|
||||
@@ -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"
|
||||
@@ -289,18 +294,18 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {onMounted, reactive, toRefs, watch} from "vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import {useRoute, useRouter} from "vue-router";
|
||||
import { onMounted, reactive, toRefs, watch } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import * as api from "../../api/index";
|
||||
import {useStore} from "vuex";
|
||||
import { useStore } from "vuex";
|
||||
import ProjectClass from "@/components/project/ProjectClass";
|
||||
import TrainClass from "@/components/project/TrainClass";
|
||||
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 { 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();
|
||||
@@ -359,17 +367,20 @@ export default {
|
||||
return;
|
||||
}
|
||||
api
|
||||
.getProjectDetail({projectId: routers.query.projectId})
|
||||
.getProjectDetail({ projectId: routers.query.projectId })
|
||||
.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)
|
||||
for(let i=0;i<dates.length;i++){
|
||||
if(dates[i].value==picurl){
|
||||
state.picUrlName = dates[i].label
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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="[' 开始时间', ' 结束时间']"
|
||||
@@ -109,13 +112,13 @@
|
||||
style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)"
|
||||
>
|
||||
<div class="leftt">
|
||||
<img src="../../assets/images/taskpage/left2.png"/>
|
||||
<img src="../../assets/images/taskpage/left2.png" />
|
||||
</div>
|
||||
<div class="photo">
|
||||
<img src="../../assets/images/projectadd/nopro.png"/>
|
||||
<img src="../../assets/images/projectadd/nopro.png" />
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<img src="../../assets/images/taskpage/right2.png"/>
|
||||
<img src="../../assets/images/taskpage/right2.png" />
|
||||
</div>
|
||||
<div class="centerbox" style="color: rgba(78, 166, 255, 1)">
|
||||
创建项目
|
||||
@@ -282,13 +285,13 @@
|
||||
"
|
||||
>
|
||||
<div class="leftt">
|
||||
<img src="../../assets/images/taskpage/left2.png"/>
|
||||
<img src="../../assets/images/taskpage/left2.png" />
|
||||
</div>
|
||||
<div class="photo">
|
||||
<img src="../../assets/images/taskpage/picture4.png"/>
|
||||
<img src="../../assets/images/taskpage/picture4.png" />
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<img src="../../assets/images/taskpage/right2.png"/>
|
||||
<img src="../../assets/images/taskpage/right2.png" />
|
||||
</div>
|
||||
<div class="centerbox" style="color: rgba(78, 166, 255, 1)">
|
||||
单层子项目
|
||||
@@ -302,13 +305,13 @@
|
||||
"
|
||||
>
|
||||
<div class="leftt">
|
||||
<img src="../../assets/images/taskpage/left1.png"/>
|
||||
<img src="../../assets/images/taskpage/left1.png" />
|
||||
</div>
|
||||
<div class="photo">
|
||||
<img src="../../assets/images/taskpage/picture5.png"/>
|
||||
<img src="../../assets/images/taskpage/picture5.png" />
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<img src="../../assets/images/taskpage/right1.png"/>
|
||||
<img src="../../assets/images/taskpage/right1.png" />
|
||||
</div>
|
||||
<div class="centerbox" style="color: rgba(255, 182, 78, 1)">
|
||||
多层子项目
|
||||
@@ -369,16 +372,16 @@
|
||||
"
|
||||
>
|
||||
<div class="leftt">
|
||||
<img src="../../assets/images/taskpage/left2.png"/>
|
||||
<img src="../../assets/images/taskpage/left2.png" />
|
||||
</div>
|
||||
<div class="photo">
|
||||
<img src="../../assets/images/taskpage/picture6.png"/>
|
||||
<img src="../../assets/images/taskpage/picture6.png" />
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<img src="../../assets/images/taskpage/right2.png"/>
|
||||
<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">
|
||||
不包含子项目,直接填写项目基础信息后创建任务
|
||||
@@ -394,20 +397,22 @@
|
||||
"
|
||||
>
|
||||
<div class="leftt">
|
||||
<img src="../../assets/images/taskpage/left3.png"/>
|
||||
<img src="../../assets/images/taskpage/left3.png" />
|
||||
</div>
|
||||
<div class="photo">
|
||||
<img src="../../assets/images/taskpage/picture7.png"/>
|
||||
<img src="../../assets/images/taskpage/picture7.png" />
|
||||
</div>
|
||||
<div class="rightt">
|
||||
<img src="../../assets/images/taskpage/right3.png"/>
|
||||
<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
|
||||
@@ -800,21 +812,21 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {reactive, toRefs, ref, watch} from "vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import {useRouter} from "vue-router";
|
||||
import { reactive, toRefs, ref, watch } from "vue";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
|
||||
import ProjPowerList from "../../components/drawers/ProjPowerList";
|
||||
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
|
||||
import * as api from "../../api/index";
|
||||
import * as api1 from "../../api/index1";
|
||||
import {storage} from "../../api/storage";
|
||||
import { storage } from "../../api/storage";
|
||||
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 {changeOwnership} from "@/api/method";
|
||||
import * as moment from "moment";
|
||||
import { changeOwnership } from "@/api/method";
|
||||
|
||||
export default {
|
||||
name: "projectManage",
|
||||
@@ -846,6 +858,7 @@ export default {
|
||||
startModal: false, //启用弹窗
|
||||
closeStart: false, //启用弹窗关闭图标
|
||||
projectPub: false, //发布弹窗
|
||||
projectPubLoading: false, //发布loading
|
||||
backModal: false, //撤回弹窗
|
||||
closeBack: false, //撤回弹窗关闭图标
|
||||
reminderModal: false, //温馨提示弹窗
|
||||
@@ -900,15 +913,15 @@ export default {
|
||||
// 数据接入 - start -
|
||||
const router = useRouter();
|
||||
const sProjectStateList = ref([
|
||||
{value: 0, label: "草稿"},
|
||||
{value: 1, label: "审核中"},
|
||||
{value: 2, label: "审核通过"},
|
||||
{value: 3, label: "已发布"},
|
||||
{value: -2, label: "未通过"},
|
||||
{value: -1, label: "已结束"}
|
||||
{ value: 0, label: "草稿" },
|
||||
{ value: 1, label: "审核中" },
|
||||
{ value: 2, label: "审核通过" },
|
||||
{ value: 3, label: "已发布" },
|
||||
{ value: -2, label: "未通过" },
|
||||
{ value: -1, label: "已结束" },
|
||||
]);
|
||||
const searchReset = () => {
|
||||
state.searchParam = {pageNo: 1, pageSize: 10};
|
||||
state.searchParam = { pageNo: 1, pageSize: 10 };
|
||||
getTableDate();
|
||||
};
|
||||
const searchSubmit = () => {
|
||||
@@ -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) => {
|
||||
@@ -1178,11 +1194,13 @@ export default {
|
||||
type: 1,
|
||||
};
|
||||
api.handleProject(obj).then((res) => {
|
||||
console.log("模版保存成功", res);
|
||||
state.startModal = false;
|
||||
if (res.data.code === 200) {
|
||||
message.destroy();
|
||||
message.success("模版保存成功");
|
||||
state.startModal = false;
|
||||
getTableDate();
|
||||
return;
|
||||
}
|
||||
Modal.error({ title: res.data.msg });
|
||||
});
|
||||
};
|
||||
//关闭存为模版弹窗
|
||||
@@ -1312,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>
|
||||
);
|
||||
},
|
||||
@@ -1343,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>
|
||||
);
|
||||
},
|
||||
@@ -1400,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);
|
||||
@@ -1430,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,
|
||||
@@ -1533,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,
|
||||
},
|
||||
});
|
||||
}}
|
||||
@@ -1614,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);
|
||||
}}
|
||||
@@ -1662,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);
|
||||
});
|
||||
}
|
||||
@@ -1753,7 +1783,7 @@ export default {
|
||||
);
|
||||
|
||||
function managerChange(e, l, d) {
|
||||
state.projectInfo.sourceBelongId = d
|
||||
state.projectInfo.sourceBelongId = d;
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -175,6 +175,7 @@
|
||||
@changeData="updateTableData"
|
||||
:isLevel="isLevel"
|
||||
v-model:edit="edit"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -198,6 +199,7 @@
|
||||
@changeData="updateTableData"
|
||||
:isLevel="isLevel"
|
||||
v-model:edit="edit"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -221,6 +223,7 @@
|
||||
@changeData="updateTableData"
|
||||
:isLevel="isLevel"
|
||||
v-model:edit="edit"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -244,6 +247,7 @@
|
||||
@changeData="updateTableData"
|
||||
v-model:isLevel="isLevel"
|
||||
v-model:edit="edit"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:EditWorkId="EditWorkId"
|
||||
@@ -267,6 +271,7 @@
|
||||
@changeData="updateTableData"
|
||||
:isLevel="isLevel"
|
||||
v-model:edit="edit"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:EditTestId="EditTestId"
|
||||
@@ -289,6 +294,7 @@
|
||||
v-model:addliveVisible="addlivevisible"
|
||||
:isLevel="isLevel"
|
||||
@changeData="updateTableData"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:edit="edit"
|
||||
@@ -312,6 +318,7 @@
|
||||
v-model:addrefVisible="addrefvisible"
|
||||
:isLevel="isLevel"
|
||||
@changeData="updateTableData"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:edit="edit"
|
||||
@@ -335,6 +342,7 @@
|
||||
v-model:adddiscussVisible="adddiscussvisible"
|
||||
v-model:edit="edit"
|
||||
:isLevel="isLevel"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:EditDiscussId="EditDiscussId"
|
||||
@@ -357,6 +365,7 @@
|
||||
<add-active
|
||||
v-model:addactiveVisible="addactivevisible"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:projectId="projectId"
|
||||
v-model:EditActiveId="EditActiveId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
v-model:edit="edit"
|
||||
@@ -382,6 +391,7 @@
|
||||
@changeData="updateTableData"
|
||||
v-model:edit="edit"
|
||||
:isLevel="isLevel"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -405,6 +415,7 @@
|
||||
@changeData="updateTableData"
|
||||
v-model:edit="edit"
|
||||
:isLevel="isLevel"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -428,6 +439,7 @@
|
||||
@getData="changeVData"
|
||||
v-model:edit="edit"
|
||||
:isLevel="isLevel"
|
||||
v-model:projectId="projectId"
|
||||
v-model:projectTemplateId="projectTemplateId"
|
||||
v-model:chooseStageId="chooseStageId"
|
||||
v-model:projectTaskId="projectTaskId"
|
||||
@@ -1059,7 +1071,7 @@ import draggable from "vuedraggable";
|
||||
import { storage } from "../../api/storage";
|
||||
// import UnlockMode from "../../components/drawers/UnlockMode.vue";
|
||||
// import * as api1 from "../../api/index1";
|
||||
import { useRouter } from "vue-router";
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
const drawercolumns = [
|
||||
{
|
||||
title: "项目名称",
|
||||
@@ -1118,8 +1130,10 @@ export default {
|
||||
// UnlockMode,
|
||||
},
|
||||
setup() {
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const state = reactive({
|
||||
projectId: route.query.projectId,
|
||||
projectTemplateId: storage.get("projectTemplateId")
|
||||
? JSON.parse(storage.get("projectTemplateId"))
|
||||
: null,
|
||||
@@ -1391,8 +1405,20 @@ export default {
|
||||
console.log(array)
|
||||
if(array[0].id=='0'){
|
||||
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;
|
||||
}
|
||||
|
||||
};
|
||||
@@ -1790,6 +1816,7 @@ export default {
|
||||
"0px 1px 35px 0px rgba(118, 136, 166, 0.07)";
|
||||
});
|
||||
const showDrawerOnline = (id, eleId) => {
|
||||
console.log(id, eleId)
|
||||
state.addonlinevisible = true;
|
||||
state.EditOnlineId = id;
|
||||
state.projectTaskId = eleId;
|
||||
|
||||
Reference in New Issue
Block a user