Merge branch 'develop' of ssh://gitlab.dongwu-inc.com:10022/BOE/fe-manage into develop

This commit is contained in:
zhangyc
2022-12-02 17:04:49 +08:00
21 changed files with 1901 additions and 4427 deletions

View File

@@ -1,27 +1,27 @@
<template> <template>
<div id="container" v-if="!isLogin"> <div id="container" v-if="!isLogin">
<nav-top/> <nav-top />
<div style="display: flex"> <div style="display: flex">
<nav-left/> <nav-left />
<div style="flex: 1; display: flex; flex-direction: column; width: 0"> <div style="flex: 1; display: flex; flex-direction: column; width: 0">
<open-pages/> <open-pages />
<bread-crumb/> <bread-crumb />
<main> <main>
<a-config-provider :locale="zhCN"> <a-config-provider :locale="zhCN">
<router-view/> <router-view />
</a-config-provider> </a-config-provider>
</main> </main>
</div> </div>
</div> </div>
</div> </div>
<div id="container" v-if="isLogin"> <div id="container" v-if="isLogin">
<router-view/> <router-view />
</div> </div>
</template> </template>
<script> <script>
import {computed, defineComponent, ref, watch} from "vue"; import { computed, defineComponent, ref, watch } from "vue";
import {useRouter, useRoute} from "vue-router"; import { useRouter, useRoute } from "vue-router";
import {useStore} from "vuex"; import { useStore } from "vuex";
import NavLeft from "@/components/NavLeft"; import NavLeft from "@/components/NavLeft";
import NavTop from "@/components/NavTop"; import NavTop from "@/components/NavTop";
import OpenPages from "@/components/OpenPages"; import OpenPages from "@/components/OpenPages";
@@ -49,45 +49,50 @@ export default defineComponent({
}); });
watch( watch(
() => route.path, () => route.path,
() => { () => {
route.path === "/login" && (isLogin.value = true); route.path === "/login" && (isLogin.value = true);
} }
); );
const currentRouteName = computed(() => route.name); const currentRouteName = computed(() => route.name);
function init() { function init() {
console.log(store) console.log(store);
initDict('faceclassPic') initDict("faceclassPic");
initDict('faceclassClass') initDict("faceclassClass");
initDict('faceclassScene') initDict("faceclassScene");
initDict('projectLevel') initDict("projectLevel");
initDict('projectSys') initDict("projectSys");
getOrgTree() initDict("pathmapPic");
initDict('projectClass')
initDict('projectPic')
getOrgTree();
} }
async function initDict(key) { async function initDict(key) {
let list = localStorage.getItem(key) let list = localStorage.getItem(key);
if (list) { if (list) {
store.commit('SET_DICT', {key, data:JSON.parse(list)}); store.commit("SET_DICT", { key, data: JSON.parse(list) });
return; return;
} }
list = await getDictList(key) list = await getDictList(key);
localStorage.setItem(key, JSON.stringify(list)); localStorage.setItem(key, JSON.stringify(list));
store.commit('SET_DICT', {key, data:list}); store.commit("SET_DICT", { key, data: list });
} }
const getDictList = (param) => api1.getDict({ const getDictList = (param) =>
pageNo: 1, api1
pageSize: 20, .getDict({
setCode: param pageNo: 1,
}).then((res) => res.data.data.rows) pageSize: 20,
setCode: param,
})
.then((res) => res.data.data.rows);
//获取组织树 //获取组织树
const getOrgTree = () => { const getOrgTree = () => {
const orgtreeList = localStorage.getItem("orgtreeList") const orgtreeList = localStorage.getItem("orgtreeList");
if (orgtreeList) { if (orgtreeList) {
store.commit("getOrgtreeList", JSON.parse(orgtreeList)); store.commit("getOrgtreeList", JSON.parse(orgtreeList));
return; return;
@@ -98,18 +103,19 @@ export default defineComponent({
pageNo: 1, pageNo: 1,
pageSize: 20, pageSize: 20,
}; };
api.getOrgInfo(obj) api
.then((res) => { .getOrgInfo(obj)
console.log("组织树获取成功", res); .then((res) => {
if (res.data.code === 200) { console.log("组织树获取成功", res);
// state.treeData = res.data.data; if (res.data.code === 200) {
localStorage.setItem("orgtreeList", JSON.stringify(res.data.data)); // state.treeData = res.data.data;
store.commit("getOrgtreeList", res.data.data); localStorage.setItem("orgtreeList", JSON.stringify(res.data.data));
} store.commit("getOrgtreeList", res.data.data);
}) }
.catch((err) => { })
console.log("组织树获取失败", err); .catch((err) => {
}); console.log("组织树获取失败", err);
});
}; };
init(); init();
@@ -128,7 +134,7 @@ export default defineComponent({
// font-family: MicrosoftYaHei, Microsoft YaHei, Avenir, Helvetica, Arial, // font-family: MicrosoftYaHei, Microsoft YaHei, Avenir, Helvetica, Arial,
// sans-serif; // sans-serif;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
Microsoft YaHei, Arial, sans-serif; Microsoft YaHei, Arial, sans-serif;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
color: #2c3e50; color: #2c3e50;

View File

@@ -6,6 +6,9 @@ export const list = (obj) => http.post('/admin/offcourse/list', obj)
//获取待审核项目列表 //获取待审核项目列表
export const projlist = (obj) => http.post('/admin/project/list', obj) export const projlist = (obj) => http.post('/admin/project/list', obj)
//获取待审核项目列表
export const auditlist = (obj) => http.post('/admin/project/auditlist', obj)
//获取已审核项目列表 //获取已审核项目列表
export const listView = (obj) => http.post('/admin/project/listView', obj) export const listView = (obj) => http.post('/admin/project/listView', obj)

View File

@@ -1,19 +1,19 @@
<template> <template>
<a-drawer <a-drawer
:visible="addactiveVisible" :visible="addactiveVisible"
class="drawerStyle addactiveDrawer" class="drawerStyle addactiveDrawer"
width="80%" width="80%"
title="添加活动" title="添加活动"
placement="right" placement="right"
@after-visible-change="afterVisibleChange" @after-visible-change="afterVisibleChange"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}活动</div> <div class="headerTitle">{{ edit ? "编辑" : "添加" }}活动</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="contentMain"> <div class="contentMain">
@@ -22,18 +22,18 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">活动名称</span> <span style="margin-right: 3px">活动名称</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="inputV1" v-model:value="inputV1"
style="width: 424px; height: 32px" style="width: 424px; height: 32px"
placeholder="请输入活动名称" placeholder="请输入活动名称"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> </div>
@@ -41,18 +41,18 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">活动公告</span> <span style="margin-right: 3px">活动公告</span>
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="textV1" v-model:value="textV1"
placeholder="请输入活动公告" placeholder="请输入活动公告"
allow-clear allow-clear
maxlength="150" maxlength="150"
/> />
</div> </div>
</div> </div>
@@ -62,10 +62,10 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="textV2" v-model:value="textV2"
placeholder="请输入活动说明" placeholder="请输入活动说明"
allow-clear allow-clear
maxlength="150" maxlength="150"
/> />
</div> </div>
</div> </div>
@@ -73,17 +73,17 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">活动时间</span> <span style="margin-right: 3px">活动时间</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-range-picker <a-range-picker
style="width: 424px" style="width: 424px"
v-model:value="time" v-model:value="time"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
/> />
</div> </div>
</div> </div>
@@ -91,23 +91,23 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">活动时长</span> <span style="margin-right: 3px">活动时长</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input-number <a-input-number
:min="0" :min="0"
:precision="0" :precision="0"
style=" style="
width: 388px; width: 388px;
height: 32px; height: 32px;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
v-model:value="inputV2" v-model:value="inputV2"
/> />
<span style="margin-left: 5px">分钟</span> <span style="margin-left: 5px">分钟</span>
</div> </div>
@@ -116,17 +116,17 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">活动地址</span> <span style="margin-right: 3px">活动地址</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="inputV3" v-model:value="inputV3"
style="width: 424px; height: 32px" style="width: 424px; height: 32px"
placeholder="请输入活动地址" placeholder="请输入活动地址"
/> />
</div> </div>
</div> </div>
@@ -144,42 +144,42 @@
<div class="timerbox"> <div class="timerbox">
<span>开始前</span> <span>开始前</span>
<a-input-number <a-input-number
:min="0" :min="0"
:max="30" :max="30"
:precision="0" :precision="0"
style=" style="
width: 88px; width: 88px;
height: 32px; height: 32px;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
v-model:value="inputV4" v-model:value="inputV4"
/> />
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
<div class="timerbox"> <div class="timerbox">
<span>开始后</span> <span>开始后</span>
<a-input-number <a-input-number
:min="0" :min="0"
:max="30" :max="30"
:precision="0" :precision="0"
style=" style="
width: 88px; width: 88px;
height: 32px; height: 32px;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
v-model:value="inputV5" v-model:value="inputV5"
/> />
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
</div> </div>
<div class="qdqtbox"> <!-- <div class="qdqtbox">
<div class="qtbtn"> <div class="qtbtn">
<div class="btntext">签退</div> <div class="btntext">签退</div>
</div> </div>
</div> </div> -->
<div class="setbox"> <!-- <div class="setbox">
<div class="timerbox"> <div class="timerbox">
<span>结束前</span> <span>结束前</span>
<a-input-number <a-input-number
@@ -198,7 +198,7 @@
>分钟提前签退则记为早退</span >分钟提前签退则记为早退</span
> >
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
@@ -208,13 +208,12 @@
<div class="btnbox"> <div class="btnbox">
<a-radio-group v-model:value="radioV1"> <a-radio-group v-model:value="radioV1">
<a-radio v-model:checked="checked" :value="1" @click="cloradio1" <a-radio v-model:checked="checked" :value="1" @click="cloradio1"
>仅签到 >仅签到
</a-radio </a-radio>
> <!-- <a-radio v-model:checked="checked" :value="2" @click="cloradio1"
<a-radio v-model:checked="checked" :value="2" @click="cloradio1"
>签到签退全部完成 >签到签退全部完成
</a-radio </a-radio
> > -->
</a-radio-group> </a-radio-group>
</div> </div>
</div> </div>
@@ -228,11 +227,11 @@
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import {reactive, toRefs} from "vue"; import { reactive, toRefs } from "vue";
import * as api from "../../api/indexActivity"; import * as api from "../../api/indexActivity";
import * as apiTask from "../../api/indexTaskadd"; import * as apiTask from "../../api/indexTaskadd";
import {RouterEditTask} from "@/api/indexTask"; import { RouterEditTask } from "@/api/indexTask";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
export default { export default {
@@ -319,7 +318,7 @@ export default {
state.textV1 = ""; state.textV1 = "";
state.textV2 = ""; state.textV2 = "";
state.time = ""; state.time = "";
localStorage.setItem("stageId", props.chooseStageId); localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive); localStorage.setItem("chapterId", props.isactive);
}; };
@@ -338,29 +337,28 @@ export default {
state.time = ""; state.time = "";
localStorage.setItem("stageId", props.chooseStageId); localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive); localStorage.setItem("chapterId", props.isactive);
} };
const queryActive = () => { const queryActive = () => {
api api
.getActivity(props.EditActiveId) .getActivity(props.EditActiveId)
.then((res) => { .then((res) => {
//更新讨论信息 //更新讨论信息
state.inputV1 = res.data.data.activityName; state.inputV1 = res.data.data.activityName;
state.textV1 = res.data.data.activityNotice; state.textV1 = res.data.data.activityNotice;
state.textV2 = res.data.data.activityExplain; state.textV2 = res.data.data.activityExplain;
state.inputV2 = res.data.data.activityDuration; state.inputV2 = res.data.data.activityDuration;
state.inputV3 = res.data.data.activityAddress; state.inputV3 = res.data.data.activityAddress;
state.inputV5 = res.data.data.afterSignIn; state.inputV5 = res.data.data.afterSignIn;
state.inputV6 = res.data.data.signOutTime; state.inputV6 = res.data.data.signOutTime;
state.inputV4 = res.data.data.beforeSignIn; state.inputV4 = res.data.data.beforeSignIn;
state.radioV1 = Number(res.data.data.standardSettings); state.radioV1 = Number(res.data.data.standardSettings);
state.time = [ state.time = [
dayjs(res.data.data.activityStartTime, "YYYY-MM-DD"), dayjs(res.data.data.activityStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.activityEndTime, "YYYY-MM-DD"), dayjs(res.data.data.activityEndTime, "YYYY-MM-DD"),
]; ];
}) })
.catch(() => { .catch(() => {});
});
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
if (bool && props.edit) { if (bool && props.edit) {
@@ -383,49 +381,47 @@ export default {
routerTaskId: props.routerTaskId || 0, routerTaskId: props.routerTaskId || 0,
type: 9, type: 9,
}) })
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
}) })
.catch(() => { .catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`); //message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
}); });
} else if (props.isLevel == 2) { } else if (props.isLevel == 2) {
await apiTask await apiTask
.addTask({ .addTask({
courseId: res.data.data.activityId, courseId: res.data.data.activityId,
duration: res.data.data.activityDuration, duration: res.data.data.activityDuration,
name: res.data.data.activityName, name: res.data.data.activityName,
projectId: props.projectId, projectId: props.projectId,
projectTaskId: props.projectTaskId || 0, projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId || 0, stageId: props.chooseStageId || 0,
type: 9, type: 9,
}) })
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
}) })
.catch(() => { .catch(() => {
//////message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`); //////message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
}); });
} else if (props.isLevel == 3) { } else if (props.isLevel == 3) {
await apiTask await apiTask
.addTempTask({ .addTempTask({
courseId: res.data.data.activityId, courseId: res.data.data.activityId,
duration: res.data.data.activityDuration, duration: res.data.data.activityDuration,
name: res.data.data.activityName, name: res.data.data.activityName,
projectTemplateId: props.projectTemplateId, projectTemplateId: props.projectTemplateId,
projectTaskId: props.projectTaskId || 0, projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId || 0, stageId: props.chooseStageId || 0,
type: 9, type: 9,
}) })
.then(() => { .then(() => {
ctx.emit("changeData", false); ctx.emit("changeData", false);
//message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
}) })
.catch(() => { .catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`); //message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
}); });
} }
}; };
//创建活动 //创建活动
@@ -469,33 +465,33 @@ export default {
if (props.edit) { if (props.edit) {
//更新编辑活动信息 //更新编辑活动信息
api api
.updateActivity(obj) .updateActivity(obj)
.then(async (res) => { .then(async (res) => {
closeDrawer(); closeDrawer();
await updateTask(res); await updateTask(res);
ctx.emit("changeData", false); ctx.emit("changeData", false);
message.destroy(); message.destroy();
message.success("更新成功"); message.success("更新成功");
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("更新失败"); message.error("更新失败");
}); });
} else { } else {
//新建活动信息 //新建活动信息
api api
.createActivity(obj) .createActivity(obj)
.then(async (res) => { .then(async (res) => {
message.destroy(); message.destroy();
message.success("创建成功"); message.success("创建成功");
closeDrawer(); closeDrawer();
await updateTask(res); await updateTask(res);
ctx.emit("changeData", false); ctx.emit("changeData", false);
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("创建失败"); message.error("创建失败");
}); });
} }
}; };

View File

@@ -1,18 +1,18 @@
<template> <template>
<a-drawer <a-drawer
:visible="adddiscussVisible" :visible="adddiscussVisible"
class="drawerStyle addrefDrawer" class="drawerStyle addrefDrawer"
width="80%" width="80%"
placement="right" placement="right"
@after-visible-change="afterVisibleChange" @after-visible-change="afterVisibleChange"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}讨论</div> <div class="headerTitle">{{ edit ? "编辑" : "添加" }}讨论</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="contentMain"> <div class="contentMain">
@@ -21,19 +21,19 @@
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img
src="@/assets/images/coursewareManage/asterisk.png" src="@/assets/images/coursewareManage/asterisk.png"
alt="" alt=""
/> />
</div> </div>
<span style="margin-right: 3px">讨论名称</span> <span style="margin-right: 3px">讨论名称</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input
v-model:value="inputV1" v-model:value="inputV1"
style="width: 424px; height: 32px" style="width: 424px; height: 32px"
placeholder="请输入讨论名称" placeholder="请输入讨论名称"
show-count show-count
:maxlength="20" :maxlength="20"
/> />
</div> </div>
</div> </div>
@@ -43,11 +43,11 @@
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea
v-model:value="textV1" v-model:value="textV1"
placeholder="请输入讨论说明" placeholder="请输入讨论说明"
allow-clear allow-clear
show-count show-count
:maxlength="200" :maxlength="200"
/> />
</div> </div>
</div> </div>
@@ -57,7 +57,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-checkbox v-model:checked="checkedC1" @change="checkRadio" <a-checkbox v-model:checked="checkedC1" @change="checkRadio"
>允许评论</a-checkbox >允许评论</a-checkbox
> >
</div> </div>
</div> </div>
@@ -170,15 +170,15 @@ export default {
if (props.edit) { if (props.edit) {
//编辑讨 //编辑讨
api api
.getDiscussDetail({ discussId: props.EditDiscussId }) .getDiscussDetail({ discussId: props.EditDiscussId })
.then((res) => { .then((res) => {
//更新讨论信息 //更新讨论信息
state.inputV1 = res.data.data.discussName; state.inputV1 = res.data.data.discussName;
state.textV1 = res.data.data.discussExplain; state.textV1 = res.data.data.discussExplain;
state.checkedC1 = state.checkedC1 =
res.data.data.discussSettings == "true" ? true : false; res.data.data.discussSettings == "true" ? true : false;
}) })
.catch(() => {}); .catch(() => {});
} }
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
@@ -196,28 +196,28 @@ export default {
routerTaskId: props.routerTaskId || 0, routerTaskId: props.routerTaskId || 0,
type: 8, type: 8,
}) })
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
}) })
.catch(() => { .catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`); //message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
}); });
} else if (props.isLevel == 2) { } else if (props.isLevel == 2) {
apiTask apiTask
.addTask({ .addTask({
courseId: res.data.data.discussId, courseId: res.data.data.discussId,
name: res.data.data.discussName, name: res.data.data.discussName,
projectId: props.projectId, projectId: props.projectId,
projectTaskId: props.projectTaskId || 0, projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId || 0, stageId: props.chooseStageId || 0,
type: 8, type: 8,
}) })
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
}) })
.catch(() => { .catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`); //message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
}); });
} else if (props.isLevel == 3) { } else if (props.isLevel == 3) {
console.log(""); console.log("");
addTempTask({ addTempTask({
@@ -228,12 +228,12 @@ export default {
stageId: props.chooseStageId || 0, stageId: props.chooseStageId || 0,
type: 8, type: 8,
}) })
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); //message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
}) })
.catch(() => { .catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`); //message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
}); });
} }
}; };
const updateDiscussInfo = () => { const updateDiscussInfo = () => {
@@ -250,32 +250,32 @@ export default {
}; };
if (props.edit) { if (props.edit) {
api api
.updateDiscuss(obj) .updateDiscuss(obj)
.then(async(res) => { .then(async (res) => {
await updateTask(res); await updateTask(res);
closeDrawer(); closeDrawer();
ctx.emit("changeData", false); ctx.emit("changeData", false);
message.destroy(); message.destroy();
message.success("创建讨论成功"); message.success("创建讨论成功");
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("创建讨论失败"); message.error("创建讨论失败");
}); });
} else { } else {
api api
.createDiscuss(obj) .createDiscuss(obj)
.then(async(res) => { .then(async (res) => {
await updateTask(res); await updateTask(res);
closeDrawer(); closeDrawer();
ctx.emit("changeData", false); ctx.emit("changeData", false);
message.destroy(); message.destroy();
message.success("创建讨论成功"); message.success("创建讨论成功");
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("创建讨论失败"); message.error("创建讨论失败");
}); });
} }
}; };
return { return {

View File

@@ -262,10 +262,10 @@
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
</div> </div>
<div class="qdqtbox"> <!-- <div class="qdqtbox">
<div class="qtbtn"><div class="btntext">签退</div></div> <div class="qtbtn"><div class="btntext">签退</div></div>
</div> </div> -->
<div class="setbox"> <!-- <div class="setbox">
<div class="timerbox"> <div class="timerbox">
<span>结束前</span> <span>结束前</span>
<a-input-number <a-input-number
@@ -275,14 +275,16 @@
style=" style="
width: 88px; width: 88px;
height: 32px; height: 32px;
border-radius: 8px;overflow: hidden; " border-radius: 8px;
overflow: hidden;
"
v-model:value="inputV8" v-model:value="inputV8"
></a-input-number> ></a-input-number>
<span style="color: #999999; margin-left: 8px" <span style="color: #999999; margin-left: 8px"
>分钟提前签退则记为早退</span >分钟提前签退则记为早退</span
> >
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
@@ -292,9 +294,9 @@
<div class="btnbox"> <div class="btnbox">
<a-radio-group v-model:value="radioV1"> <a-radio-group v-model:value="radioV1">
<a-radio :value="1" @click="cloradio1">仅签到</a-radio> <a-radio :value="1" @click="cloradio1">仅签到</a-radio>
<a-radio :value="2" @click="cloradio1" <!-- <a-radio :value="2" @click="cloradio1"
>签到签退全部完成</a-radio >签到签退全部完成</a-radio
> > -->
</a-radio-group> </a-radio-group>
</div> </div>
</div> </div>
@@ -305,7 +307,7 @@
<div class="btnbox"> <div class="btnbox">
<a-checkbox <a-checkbox
v-model:checked="switchC2" v-model:checked="switchC2"
@onclick="(switchC2 = !switchC2)" @onclick="switchC2 = !switchC2"
>学员请假后记为任务完成</a-checkbox >学员请假后记为任务完成</a-checkbox
> >
</div> </div>
@@ -448,7 +450,7 @@ export default {
state.switchC1 = ""; state.switchC1 = "";
state.imageUrl = ""; state.imageUrl = "";
state.needEval = false; state.needEval = false;
state.switchC2=false; state.switchC2 = false;
ctx.emit("changeData", false); ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId); localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive); localStorage.setItem("chapterId", props.isactive);
@@ -498,7 +500,7 @@ export default {
//state.= res.data.data //state.= res.data.data
state.assessmentId = res.data.data.assessmentId; state.assessmentId = res.data.data.assessmentId;
state.imageUrl = res.data.data.liveCover; state.imageUrl = res.data.data.liveCover;
state.switchC2 = res.data.data.otherSettings==1?true:false; state.switchC2 = res.data.data.otherSettings == 1 ? true : false;
}) })
.catch(() => { .catch(() => {
//message.error(`查询失败`); //message.error(`查询失败`);
@@ -629,10 +631,10 @@ export default {
liveId: props.edit ? props.EditLiveId : 0, liveId: props.edit ? props.EditLiveId : 0,
liveLink: state.inputV4, liveLink: state.inputV4,
liveName: state.inputV1, liveName: state.inputV1,
livePlayback: state.switchC1? "1" : "0", livePlayback: state.switchC1 ? "1" : "0",
livePlaybackLink: state.switchC1 ? state.inputV5 : "", livePlaybackLink: state.switchC1 ? state.inputV5 : "",
liveTeacherId: state.inputV3, liveTeacherId: state.inputV3,
otherSettings: state.switchC2?"1":"0", //1或0 otherSettings: state.switchC2 ? "1" : "0", //1或0
signOutTime: state.inputV8, signOutTime: state.inputV8,
standardSettings: state.radioV1, //1或2 standardSettings: state.radioV1, //1或2
isEvaluate: state.needEval ? "1" : "0", isEvaluate: state.needEval ? "1" : "0",
@@ -745,7 +747,7 @@ export default {
queryMember(); queryMember();
state.fetching = false; state.fetching = false;
}, 300); }, 300);
const handleChange2 = (value,label) => { const handleChange2 = (value, label) => {
console.log(`selected ${value}`); console.log(`selected ${value}`);
state.inputV3 = value; state.inputV3 = value;
state.memberValue = label; state.memberValue = label;

View File

@@ -1,21 +1,12 @@
<template> <template>
<a-drawer <a-drawer :visible="addprojvisible" class="drawerStyle addonlineDrawer" width="80%" title="添加在线" placement="right"
:visible="addprojvisible" @after-visible-change="afterVisibleChange">
class="drawerStyle addonlineDrawer"
width="80%"
title="添加在线"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div v-if="edit" class="headerTitle">编辑项目</div> <div v-if="edit" class="headerTitle">编辑项目</div>
<div v-else class="headerTitle">添加项目</div> <div v-else class="headerTitle">添加项目</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="closeDrawer" />
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div> </div>
<div class="contentMain"> <div class="contentMain">
<div class="main_items"> <div class="main_items">
@@ -23,31 +14,22 @@
<div class="mii_ipt"> <div class="mii_ipt">
<div class="ipt_name">项目名称</div> <div class="ipt_name">项目名称</div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input v-model:value="inputV1" style="width: 240px; height: 40px; border-radius: 8px"
v-model:value="inputV1" placeholder="请输入项目名称" />
style="width: 240px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称"
/>
</div> </div>
</div> </div>
<div class="mii_ipt"> <div class="mii_ipt">
<div class="ipt_name">项目经理</div> <div class="ipt_name">项目经理</div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input v-model:value="inputV2" style="width: 240px; height: 40px; border-radius: 8px"
v-model:value="inputV2" placeholder="请输入项目经理" />
style="width: 240px; height: 40px; border-radius: 8px"
placeholder="请输入项目经理"
/>
</div> </div>
</div> </div>
<div class="mii_ipt"> <div class="mii_ipt">
<div class="ipt_name">创建人</div> <div class="ipt_name">创建人</div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input v-model:value="inputV3" style="width: 240px; height: 40px; border-radius: 8px"
v-model:value="inputV3" placeholder="请输入创建人" />
style="width: 240px; height: 40px; border-radius: 8px"
placeholder="请输入创建人"
/>
</div> </div>
</div> </div>
</div> </div>
@@ -66,50 +48,30 @@
<div class="mntc_left"> <div class="mntc_left">
<div class="notice_icon"></div> <div class="notice_icon"></div>
<div v-if="selectedRows.length == 0"> <div v-if="selectedRows.length == 0">
<span class="title" <span class="title">已选择
>已选择
<span class="data" style="color: #4ea6ff">{{ 0 }}</span> <span class="data" style="color: #4ea6ff">{{ 0 }}</span>
</span </span>
>
</div> </div>
<div v-else> <div v-else>
<div> <div>
<span class="title" <span class="title">已选择
>已选择
<span class="data" style="color: #4ea6ff">{{ <span class="data" style="color: #4ea6ff">{{
selectedRows.length selectedRows.length
}}</span> }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
> <span class="title">名称
<span class="title" <span class="data" style="color: #4ea6ff; margin-right: 15px">{{ selectedRows[0].name }}</span>
>名称
<span
class="data"
style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].name }}</span
>
</span> </span>
<span class="title" <span class="title">项目经理
>项目经理 <span class="data" style="color: #4ea6ff; margin-right: 15px">{{ selectedRows[0].manager }}</span>
<span
class="data"
style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].manager }}</span
>
</span> </span>
<span class="title" <span class="title">创建人
>创建人 <span class="data" style="color: #4ea6ff; margin-right: 15px">{{ selectedRows[0].creater }}</span>
<span
class="data"
style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].creater }}</span
>
</span> </span>
<span class="title" <span class="title">创建时间
>创建时间
<span class="data" style="color: #4ea6ff">{{ <span class="data" style="color: #4ea6ff">{{
selectedRows[0].time selectedRows[0].time
}}</span> }}</span>
</span> </span>
</div> </div>
<!-- <div v-else> <!-- <div v-else>
@@ -141,38 +103,30 @@
<div class=""> <div class="">
<div class="drawerbox"> <div class="drawerbox">
<!-- 添加的时候显示多选的表 --> <!-- 添加的时候显示多选的表 -->
<a-table <a-table v-if="!edit" :columns="tableDataFunc()" :data-source="drawertableData" :row-selection="{
v-if="!edit" selectedRowKeys: selectedRowKeys,
:columns="tableDataFunc()" onChange: onSelectChange,
:data-source="drawertableData" }" :loading="tableDataTotal === -1 ? true : false" :scroll="{ x: 700 }" @expand="expandTable"
:row-selection="{ :pagination="false">
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 700 }"
@expand="expandTable"
:pagination="false"
>
</a-table> </a-table>
<!-- 编辑的时候显示单选的表 --> <!-- 编辑的时候显示单选的表 -->
<a-table <a-table v-else :columns="tableDataFunc()" :data-source="drawertableData" :row-selection="{
v-else selectedRowKeys: selectedRowKeys,
:columns="tableDataFunc()" onChange: onSelectChange,
:data-source="drawertableData" type: 'radio',
:row-selection="{ }" :loading="tableDataTotal === -1 ? true : false" :scroll="{ x: 700 }" @expand="expandTable"
selectedRowKeys: selectedRowKeys, :pagination="false">
onChange: onSelectChange,
type: 'radio',
}"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 700 }"
@expand="expandTable"
:pagination="false"
>
</a-table> </a-table>
</div> </div>
</div> </div>
<div class="tableBox">
<div class="pa">
<a-pagination v-if="(tableDataTotal > 10)" showSizeChanger="true" showQuickJumper="true"
hideOnSinglePage="true" :pageSize="pageSize" v-model:current="currentPage" :total="tableDataTotal"
class="pagination" @change="changePagination"
style="display:flex;justify-content:center;margin-top:12px;margin-bottom:12px;" />
</div>
</div>
</div> </div>
<div class="main_btns"> <div class="main_btns">
<button @click="closeDrawer" class="btn1">取消</button> <button @click="closeDrawer" class="btn1">取消</button>
@@ -180,13 +134,7 @@
</div> </div>
</div> </div>
<!-- 有重复添加的项目时的弹窗 --> <!-- 有重复添加的项目时的弹窗 -->
<a-modal <a-modal v-model:visible="sameModal" :footer="null" :closable="sameCopy" wrapClassName="sameModal" centered="true">
v-model:visible="sameModal"
:footer="null"
:closable="sameCopy"
wrapClassName="sameModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -212,9 +160,9 @@
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import {reactive, toRefs} from "vue"; import { reactive, toRefs } from "vue";
import {RouterEditTask} from "@/api/indexTask"; import { RouterEditTask } from "@/api/indexTask";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import * as apiProj from "../../api/index.js"; import * as apiProj from "../../api/index.js";
import dayjs from "dayjs"; import dayjs from "dayjs";
@@ -329,7 +277,12 @@ export default {
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addprojvisible", false); ctx.emit("update:addprojvisible", false);
ctx.emit("update:edit", false); ctx.emit("update:edit", false);
state.currentPage = 1
state.tableDataTotal = 0
state.drawertableData = []
state.inputV1 = ""
state.inputV2 = ""
state.inputV3 = ""
state.selectedRows = []; state.selectedRows = [];
state.selectedRowKeys = []; state.selectedRowKeys = [];
}; };
@@ -350,7 +303,7 @@ export default {
// ajax request after empty completing // ajax request after empty completing
setTimeout(() => { setTimeout(() => {
state.loading = false; state.loading = false;
state.selectedRowKeys = [];
}, 1000); }, 1000);
}; };
// const onSelectChange = (selectedRowKeys, selectedRows) => { // const onSelectChange = (selectedRowKeys, selectedRows) => {
@@ -364,35 +317,106 @@ export default {
const resetProjectList = () => { const resetProjectList = () => {
state.inputV1 = ""; state.inputV1 = "";
state.inputV2 = ""; state.inputV2 = "";
state.inputV1 = ""; state.inputV3 = "";
getAllProjText(); getAllProjText();
}; };
//翻页
const changePagination = (page) => {
state.currentPage = page;
getAllProjText();
// console.log("翻页", page, pageSize);
};
// 点击编辑默认选中
const defaultValueOption = () => {
if (props.edit) {
state.drawertableData = []
state.selectedRowKeys = [props.EditProjectId];
getCurrentPage();
}
}
// TODO 这里后续需要给接口或者改动
// 获取所有,确定分页位置
const getCurrentPage = () => {
apiProj
.getProjectList({
createName: state.inputV1,
manager: state.inputV2,
name: state.inputV3,
pageNo: 1,
pageSize: 10000,
status: 3
})
.then((res) => {
// let arr = res.data.data.rows;
if (res.status === 200) {
console.log('all - project - info', res.data.data)
let allarr = res.data.data.rows
let isHav = true
for (let i = 0; i < allarr.length; i++) {
if (allarr[i].projectId == props.EditProjectId) {
isHav = false
state.currentPage = Math.ceil((i + 1) / 10);
console.log('sdadasd', state.currentPage)
getAllProjText()
return
}
}
if (isHav) {
getAllProjText()
state.currentPage = 1;
}
// state.drawertableData = getTableDate(arr);
// state.tableDataTotal = res.data.data.total
}
})
.catch(() => {
message.destroy();
//message.error("获取全部项目信息接口失败");
});
}
//获取全部项目信息接口 //获取全部项目信息接口
const getAllProjText = () => { const getAllProjText = () => {
apiProj
.getProjectList({
createName: state.inputV1,
manager: state.inputV2,
name: state.inputV3,
pageNo: state.currentPage,
pageSize: state.pageSize,
status: state.status,
})
.then((res) => {
let arr = res.data.data.rows;
if (res.status === 200) {
state.drawertableData = getTableDate(arr);
}
})
.catch(() => {
message.destroy();
//message.error("获取全部项目信息接口失败");
});
};
const afterVisibleChange = (bool) => {
if (bool) { console.log("搜索的参数信息", {
createName: state.inputV3,
manager: state.inputV2,
name: state.inputV1,
pageNo: state.currentPage,
pageSize: state.pageSize,
status: 3
})
apiProj
.getProjectList({
createName: state.inputV3,
manager: state.inputV2,
name: state.inputV1,
pageNo: state.currentPage,
pageSize: state.pageSize,
status: 3
})
.then((res) => {
let arr = res.data.data.rows;
if (res.status === 200) {
console.log('all - project - info', res.data.data)
state.drawertableData = getTableDate(arr);
state.tableDataTotal = res.data.data.total
}
})
.catch(() => {
message.destroy();
//message.error("获取全部项目信息接口失败");
});
};
const afterVisibleChange = () => {
if (props.edit) {
defaultValueOption();
} else {
getAllProjText(); getAllProjText();
} }
}; };
@@ -424,6 +448,7 @@ export default {
manager: value.manager, manager: value.manager,
time: dayjs(value.createTime).format("YYYY-MM-DD"), time: dayjs(value.createTime).format("YYYY-MM-DD"),
children: value.subList ? getTableDate(value.subList) : [], children: value.subList ? getTableDate(value.subList) : [],
creater: value.createName,
}; };
array.push(obj); array.push(obj);
} }
@@ -475,14 +500,14 @@ export default {
routerTaskId: props.routerTaskId || 0, routerTaskId: props.routerTaskId || 0,
type: 13, type: 13,
}) })
.then(() => { .then(() => {
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false); ctx.emit("changeData", false);
closeDrawer(); closeDrawer();
}) })
.catch(() => { .catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`); message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
}); });
} }
}; };
const onSelectChange = (selectedRowKeys, selectRow) => { const onSelectChange = (selectedRowKeys, selectRow) => {
@@ -526,6 +551,8 @@ export default {
showSameModal, showSameModal,
closeSameModal, closeSameModal,
sureSameModal, sureSameModal,
changePagination,
getCurrentPage
}; };
}, },
}; };
@@ -556,6 +583,7 @@ export default {
background: #ffffff; background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21); box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px; border-radius: 4px;
// position: absolute; // position: absolute;
// left: 50%; // left: 50%;
// top: 10%; // top: 10%;
@@ -564,10 +592,8 @@ export default {
position: absolute; position: absolute;
width: calc(100%); width: calc(100%);
height: 68px; height: 68px;
background: linear-gradient( background: linear-gradient(rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0) 100%);
rgba(78, 166, 255, 0) 100%
);
} }
.del_main { .del_main {
@@ -663,6 +689,7 @@ export default {
.addrefDrawer { .addrefDrawer {
.drawerMain { .drawerMain {
// .main_notice { // .main_notice {
// display: flex; // display: flex;
// justify-content: space-between; // justify-content: space-between;
@@ -798,6 +825,43 @@ export default {
} }
} }
} }
.tableBox {
// margin: 20px 38px 30px;
margin: 10px 35px 0px 35px;
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td {
background: #f6f9fd;
}
}
.tableBox {
padding-bottom: 20px;
.pa {
// position: absolute;
// bottom: 20px;
// left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
// margin-bottom: 10px;
// position: absolute;
// bottom: -40px;
.pagination {
display: flex;
justify-content: center;
align-items: center;
}
}
}
} }
.main_btns { .main_btns {

View File

@@ -100,6 +100,7 @@
title: 'name', title: 'name',
value: 'name', value: 'name',
}" }"
v-model:expandedKeys="expandedKeys"
> >
<template #suffixIcon></template> <template #suffixIcon></template>
</a-tree> </a-tree>
@@ -201,6 +202,7 @@
title: 'name', title: 'name',
value: 'name', value: 'name',
}" }"
v-model:expandedKeys="expandedKeys"
> >
<template #suffixIcon></template> <template #suffixIcon></template>
</a-tree> </a-tree>
@@ -754,12 +756,16 @@ export default {
//受众关联------------------------------------- //受众关联-------------------------------------
selectAllArr: null, //所有选中 selectAllArr: null, //所有选中
expandedKeys: [], //展开的节点
}); });
const closeDrawer = () => { const closeDrawer = () => {
state.activeKey = "1"; state.activeKey = "1";
ctx.emit("update:ProjCheckvisible", false); ctx.emit("update:ProjCheckvisible", false);
deleteAll(); deleteAll();
// console.log("expandedKeys", state.expandedKeys);
state.expandedKeys = [];
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("state", bool); console.log("state", bool);

View File

@@ -244,241 +244,9 @@ export default {
nameadd: "", nameadd: "",
nameaddd: "", nameaddd: "",
com: "", com: "",
openKeys: [2, 13, 32], openKeys: [],
//组织树 //组织树
treeData: [ treeData: [],
{
key: 1,
title: "京东方",
value: "京东方",
children: [
{
key: 2,
title: "产研部",
value: "产研部",
children: [
{
key: 3,
title: "产品部",
value: "产品部",
},
{
key: 4,
title: "研究部",
value: "研究部",
},
{
key: 5,
title: "研究部2",
value: "研究部2",
},
{
key: 6,
title: "研究3",
value: "研究3",
},
{
key: 7,
title: "研究4",
value: "研究4",
},
{
key: 8,
title: "研究部5",
value: "研究部5",
},
{
key: 9,
title: "研究部6",
value: "研究部6",
},
{
key: 10,
title: "研究部7",
value: "研究部7",
},
{
key: 11,
title: "研究部8",
value: "研究部8",
},
{
key: 12,
title: "研究部9",
value: "研究部9",
},
],
},
{
key: 13,
title: "二级标题",
value: "二级标题",
children: [
{
key: 14,
title: "三级标题",
value: "三级标题",
children: [
{
key: 15,
title: "四级标题",
value: "四级标题",
children: [
{
key: 16,
title: "五级标题",
value: "五级标题",
children: [
{
key: 17,
title: "六级标题",
value: "六级标题",
children: [
{
key: 18,
title: "七级标题",
value: "七级标题",
children: [
{
key: 19,
title: "八级标题",
value: "八级标题",
children: [
{
key: 20,
title: "九级标题",
value: "九级标题",
children: [
{
key: 21,
title: "十级标题",
value: "十级标题",
children: [
{
key: 22,
title: "十一级标题",
value: "十一级标题",
children: [
{
key: 23,
title: "十二级标题",
value: "十二级标题",
children: [
{
key: 24,
title:
"十三级标题十三级标题十三级标题十三级标题",
value: "十三级标题",
children: [
{
key: 25,
title:
"十四级标题",
value:
"十四级标题",
children: [
{
key: 26,
title:
"十五级标题",
value:
"十五级标题",
children: [
{
key: 27,
title:
"十六级标题",
value:
"十六级标题",
children:
[
{
key: 28,
title:
"十七级标题",
value:
"十七级标题",
children:
[
{
key: 29,
title:
"十八级标题",
value:
"十八级标题",
children:
[
{
key: 30,
title:
"十九级标题",
value:
"十九级标题",
children:
[
{
key: 31,
title:
"二十级标题二十级标题",
value:
"二十级标题二十级标题",
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
],
},
{
key: 32,
title: "人力资源部",
value: "人力资源部",
children: [
{
key: 33,
title: "人事部",
value: "人事部",
},
{
key: 34,
title: "行政部",
value: "行政部",
},
],
},
],
},
],
//快速选人的table //快速选人的table
tabledata: [ tabledata: [
// { // {
@@ -543,6 +311,7 @@ export default {
const closeDrawer = () => { const closeDrawer = () => {
state.activeKey = "1"; state.activeKey = "1";
ctx.emit("update:ProjOwnervisible", false); ctx.emit("update:ProjOwnervisible", false);
state.openKeys = [];
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {

View File

@@ -0,0 +1,62 @@
<template>
<a-tree-select
v-model:value="id"
style="width: 100%"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="自动带出 可修改"
allow-clear
:tree-data="options"
:fieldNames="{
children: 'treeChildList',
label: 'name',
value: 'id',
}"
:disabled="viewDetail ? true : false"
@change="change"
dropdownClassName="treeDropdown"
>
</a-tree-select>
</template>
<script>
import {onMounted, reactive, toRefs, watch} from "vue";
import {useStore} from "vuex";
export default {
name: "OrgClass",
props: {
modelValue: {
type: Number,
},
name: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
options: [],
id: props.value
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
onMounted(() => {
state.options = [{id: props.modelValue, name: props.name}, ...store.state.orgtreeList]
})
function change(key, obj) {
ctx.emit('update:name', obj[0])
}
return {
...toRefs(state),
change
};
},
};
</script>

View File

@@ -0,0 +1,48 @@
<!-- 评估管理-创建评估页面 -->
<template>
<a-select
v-model:value="id"
placeholder="请选择分类"
style="width: 100%"
:options="options"
allowClear
:disabled="disabled"
>
</a-select>
</template>
<script>
import {onMounted, reactive, toRefs, watch} from "vue";
import {useStore} from "vuex";
export default {
name: "ProjectClass",
props: {
modelValue: {
type: Number,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
options: [],
id: props.modelValue
});
watch(state.id,()=>{
ctx.emit('update:modelValue',state.id)
})
onMounted(() => {
state.options = store.state.projectClass.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
return {
...toRefs(state),
};
},
};
</script>

View File

@@ -0,0 +1,45 @@
<template>
<a-select
v-model:value="id"
:options="options"
style="width: 100%"
placeholder="请选择项目级别"
:disabled="disabled"
/>
</template>
<script>
import {onMounted, reactive, toRefs, watch} from "vue";
import {useStore} from "vuex";
export default {
name: "ProjectClass",
props: {
modelValue: {
type: Number,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
options: [],
id: props.modelValue
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
onMounted(() => {
state.options = store.state.projectLevel.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
return {
...toRefs(state),
};
},
};
</script>

View File

@@ -0,0 +1,104 @@
<template>
<a-select
v-model:value="managerArray"
placeholder="请选择项目经理"
:filterOption="false"
style="width: 100%"
:options="options"
allowClear
showSearch
mode="multiple"
:disabled="disabled"
@popupScroll="memberScroll"
@search="searchMember"
@change="change"
>
<template v-if="loading" #notFoundContent>
<a-spin size="small"/>
</template>
</a-select>
</template>
<script>
import {reactive, toRefs, watch} from "vue";
import {scrollLoad} from "@/api/method";
import * as api1 from "@/api/index1";
export default {
name: "ProjectClass",
props: {
value: {
type: Number,
},
name: {
type: Number,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const state = reactive({
options: [],
managerArray: [],
memberParam: {keyWord: '', pageNo: 1, pageSize: 10},
loading: false,
init: false
});
watch(() => state.memberParam, getMember)
watch(() => props.value, init)
function getMember() {
state.loading = true
api1.getMemberInfo(state.memberParam).then((res) => {
const list = res.data.data.rows.filter(e => !props.value?.includes(e.id + '')).map(e => ({
label: e.realName,
value: e.id
}));
state.options.push(...list)
state.loading = false
});
}
const memberScroll = (e) => {
let num = scrollLoad(e);
if (num === 2) {
// 如果滑到底部,则加载下一页
state.memberParam.pageNo++;
}
};
//搜索学员
const searchMember = (keyWord) => {
keyWord && (state.memberParam = {keyWord, pageNo: 1, pageSize: 10});
};
function init() {
if (props.value && props.name) {
const arrManager = props.name.split(',')
const arrManagerId = props.value.split(',')
state.managerArray = arrManagerId
state.options = arrManager.map((e, i) => ({label: e, value: arrManagerId[i]}))
state.init = true
getMember()
}
}
function change(e, l) {
console.log('change')
ctx.emit('update:value', e.join(','))
ctx.emit('update:name', l.map(t => t.label).join(','))
}
return {
...toRefs(state),
searchMember,
memberScroll,
change
};
},
};
</script>

View File

@@ -0,0 +1,44 @@
<template>
<a-select
v-model:value="id"
:options="options"
style="width: 100%"
placeholder="请选择分类"
:disabled="disabled"
/>
</template>
<script>
import {onMounted, reactive, toRefs, watch} from "vue";
import {useStore} from "vuex";
export default {
name: "TrainClass",
props: {
modelValue: {
type: Number,
},
disabled: {
type: Boolean,
default: false
},
},
setup(props, ctx) {
const store = useStore();
const state = reactive({
options: [],
id: props.modelValue
});
watch(state.id, () => {
ctx.emit('update:modelValue', state.id)
})
onMounted(() => {
state.options = store.state.projectSys.map(e => ({value: parseInt(e.dictCode), label: e.dictName}))
})
return {
...toRefs(state),
};
},
};
</script>

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com * @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-09 09:26:26 * @Date: 2022-11-09 09:26:26
* @LastEditors: lixg lixg@dongwu-inc.com * @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-26 20:20:03 * @LastEditTime: 2022-12-02 14:09:43
* @FilePath: /fe-manage/src/store/index.js * @FilePath: /fe-manage/src/store/index.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
*/ */
@@ -29,6 +29,7 @@ export default createStore({
faceclassScene: [], faceclassScene: [],
projectLevel: [],//项目级别 projectLevel: [],//项目级别
projectSys: [],//培训分类 projectSys: [],//培训分类
pathmapPic: [],//学习路径背景图
}, },
getters: {}, getters: {},
mutations: { mutations: {
@@ -50,7 +51,7 @@ export default createStore({
getOrgtreeList(state, data) { getOrgtreeList(state, data) {
state.orgtreeList = data state.orgtreeList = data
}, },
SET_DICT(state,{key,data}){ SET_DICT(state, { key, data }) {
state[key] = data state[key] = data
}, },
SET_projectTemplateId(state, projectTemplateId) { SET_projectTemplateId(state, projectTemplateId) {

View File

@@ -37,10 +37,10 @@
margin-right: 14px; margin-right: 14px;
" placeholder="请输入创建人" /> " placeholder="请输入创建人" />
</div> </div>
<div class="inpbox1"> <!-- <div class="inpbox1">-->
<a-range-picker v-model:value="valueDate" style="border-radius: 8px; height: 40px; margin-left: 5px" <!-- <a-range-picker v-model:value="valueDate" style="border-radius: 8px; height: 40px; margin-left: 5px"-->
:placeholder="[' 开始时间', ' 结束时间']" @change="rankTimeChange" /> <!-- :placeholder="[' 开始时间', ' 结束时间']" @change="rankTimeChange" />-->
</div> <!-- </div>-->
</div> </div>
</div> </div>
<div class="tmplh_btn"> <div class="tmplh_btn">
@@ -73,10 +73,10 @@
</div> </div>
</template> </template>
<script> <script>
import { onMounted, reactive, toRefs } from "vue"; import {onMounted, reactive, toRefs} from "vue";
import ProjectAudit from "../../components/drawers/ProjectAudit"; import ProjectAudit from "../../components/drawers/ProjectAudit";
import { projlist } from "../../api/indexAudit"; import {auditlist} from "../../api/indexAudit";
import { toDate } from "@/api/method";
export default { export default {
name: "ProjectViewedN", name: "ProjectViewedN",
components: { ProjectAudit }, components: { ProjectAudit },
@@ -106,8 +106,8 @@ export default {
columns1: [ columns1: [
{ {
title: "序号", title: "序号",
dataIndex: "number", dataIndex: "projectId",
key: "number", key: "projectId",
align: "center", align: "center",
}, },
{ {
@@ -135,17 +135,18 @@ export default {
dataIndex: "status", dataIndex: "status",
key: "status", key: "status",
align: "center", align: "center",
customRender: ()=><div>待审核</div>,
}, },
{ {
title: "创建人", title: "创建人",
dataIndex: "creater", dataIndex: "createName",
key: "creater", key: "createName",
align: "center", align: "center",
}, },
{ {
title: "创建时间", title: "创建时间",
dataIndex: "time", dataIndex: "createTime",
key: "time", key: "createTime",
align: "center", align: "center",
}, },
@@ -163,7 +164,7 @@ export default {
showProjAudit( showProjAudit(
value.record.projectId, value.record.projectId,
value.record.createId, value.record.createId,
value.record.creater value.record.createName
); );
}} }}
> >
@@ -194,12 +195,13 @@ export default {
pageSize: state.pageSize, pageSize: state.pageSize,
status: 1, status: 1,
}; };
projlist(objn) auditlist(objn)
.then((res) => { .then((res) => {
console.log("获取待审核项目成功", res); console.log("获取待审核项目成功", res);
let result = res.data.data; let result = res.data.data;
state.total = result.total; state.total = result.total;
setProjList(result.rows); state.tableData1 = result.rows
// setProjList(result.rows);
}) })
.catch((err) => { .catch((err) => {
console.log("获取待审核项目失败", err); console.log("获取待审核项目失败", err);
@@ -232,7 +234,7 @@ export default {
? "拒绝" ? "拒绝"
: "-", : "-",
creater: item.createName, creater: item.createName,
time: toDate(item.createTime, "Y-M-D h-m"), time: item.createTime,
projectId: item.projectId, projectId: item.projectId,
createId: item.createId, createId: item.createId,
}; };
@@ -260,7 +262,7 @@ export default {
? "拒绝" ? "拒绝"
: "-", : "-",
creater: item.createName, creater: item.createName,
time: toDate(item.createTime, "Y-M-D h-m"), time: item.createTime,
projectId: item.projectId, projectId: item.projectId,
createId: item.createId, createId: item.createId,
children: item.subList ? setProjList(item.subList) : [], children: item.subList ? setProjList(item.subList) : [],

View File

@@ -867,7 +867,7 @@ export default {
state.editPathId = null; state.editPathId = null;
}; };
const chooseImg = (item) => { const chooseImg = (item) => {
// console.log(item); console.log(item);
state.pathBgId = item.dictCode; state.pathBgId = item.dictCode;
state.pathBg = item.dictValue; state.pathBg = item.dictValue;
}; };
@@ -1148,7 +1148,7 @@ export default {
onClick={() => { onClick={() => {
// console.log("text.record", text.record); // console.log("text.record", text.record);
getLearnPathInfo(text.record); getLearnPathInfo(text.record.id);
}} }}
> >
编辑 编辑
@@ -1409,8 +1409,8 @@ export default {
}; };
const selectorganization = (e, v) => { const selectorganization = (e, v) => {
console.log("eee", e, v); console.log("eee", e, v);
state.organizationSelectName = e; state.organizationSelectName = v[0];
state.organizationSelectId = v.id; state.organizationSelectId = e;
}; };
//创建学习路径图 //创建学习路径图
const createLearnPath = () => { const createLearnPath = () => {
@@ -1429,37 +1429,42 @@ export default {
state.lpLoading = true; state.lpLoading = true;
let obj = { let obj = {
name: state.pathName, name: state.pathName,
picUrl: "",
remark: state.pathIntro, remark: state.pathIntro,
status: 0, status: 0,
organizationId: state.organizationSelectId,
organizationName: state.organizationSelectName,
picUrl: state.pathBg,
}; };
api api
.createLearnPath(obj) .createLearnPath(obj)
.then((res) => { .then((res) => {
let chapterObj = { console.log("创建学习路径成功", res);
name: "关卡一", if (res.data.code === 200) {
remark: "", let chapterObj = {
routerId: res.data.data.routerId, name: "关卡一",
}; remark: "",
//创建关卡 routerId: res.data.data.routerId,
api };
.editChapter(chapterObj) //创建关卡
.then((chapterRes) => { api
console.log("关卡创建成功", chapterRes); .editChapter(chapterObj)
setTimeout(() => { .then((chapterRes) => {
console.log("创建成功", res); console.log("关卡创建成功", chapterRes);
message.destroy(); setTimeout(() => {
message.success("创建成功"); console.log("创建成功", res);
state.lpLoading = false; message.destroy();
state.currentPage = 1; message.success("创建成功");
router.push("/leveladd"); state.lpLoading = false;
storage.set("routerId", res.data.data.routerId); state.currentPage = 1;
// getLearnPath(); router.push("/leveladd");
}, commonData.timeout); storage.set("routerId", res.data.data.routerId);
}) // getLearnPath();
.catch((chapterErr) => { }, commonData.timeout);
console.log("关卡创建失败", chapterErr); })
}); .catch((chapterErr) => {
console.log("关卡创建失败", chapterErr);
});
}
}) })
.catch((err) => { .catch((err) => {
console.log("创建失败", err); console.log("创建失败", err);
@@ -1525,22 +1530,36 @@ export default {
}; };
//获取路径图详细信息 //获取路径图详细信息
const getLearnPathInfo = (item) => { const getLearnPathInfo = (id) => {
// console.log("编辑学习路径图id", id);
//获取学习路径详情
api
.getRouterDetail(id)
.then((res) => {
if (res.data.code === 200) {
let detail = res.data.data.routerInfo;
// console.log("获取详情成功", detail);
state.pathName = detail.name;
state.pathBg = detail.picUrl;
state.pathBgId = "";
state.organizationSelectName = detail.organizationName;
state.organizationSelectId = detail.organizationId;
state.pathIntro = detail.remark;
state.editPathId = id;
// console.log("state.imgData", state.imgData);
let arr = state.imgData;
for (let i = 0; i < arr.length; i++) {
// console.log("arr[i].dictValue", arr[i].dictValue, state.pathBg);
if (arr[i].dictValue === state.pathBg) {
state.pathBgId = arr[i].dictCode;
}
}
}
})
.catch((err) => {
console.log("获取详情失败", err);
});
state.out1 = true; state.out1 = true;
state.pathName = item.manager;
state.pathBg = "";
state.pathBgId = "";
state.organizationSelectName = null;
state.organizationSelectId = null;
state.pathIntro = item.remark;
state.editPathId = item.id;
console.log("state.imgData", state.imgData);
let arr = state.imgData;
for (let i = 0; i < arr.length; i++) {
if (arr[i].dictCode === state.pathBgId) {
state.pathBgId = arr[i].dictValue;
}
}
}; };
//编辑学习路径图 //编辑学习路径图
const editLearnPath = () => { const editLearnPath = () => {
@@ -1556,12 +1575,21 @@ export default {
message.destroy(); message.destroy();
return message.warning("请选择背景图"); return message.warning("请选择背景图");
} }
// state.pathName = detail.name;
// state.pathBg = detail.picUrl;
// state.pathBgId = "";
// state.organizationSelectName = detail.organizationName;
// state.organizationSelectId = detail.organizationId;
// state.pathIntro = detail.remark;
// state.editPathId = id;
// state.createLoading = true; // state.createLoading = true;
let obj = { let obj = {
routerId: state.editPathId, routerId: state.editPathId,
name: state.pathName, name: state.pathName,
picUrl: "", picUrl: state.pathBg,
remark: state.pathIntro, remark: state.pathIntro,
organizationName: state.organizationSelectName,
organizationId: state.organizationSelectId,
status: 0, status: 0,
}; };
api api
@@ -1641,30 +1669,30 @@ export default {
// } // }
// choiceEvaluation() // choiceEvaluation()
//字典获取路径图背景 // //字典获取路径图背景
const getDictList = (param) => { // const getDictList = (param) => {
let obj = { // let obj = {
pageNo: 1, // pageNo: 1,
pageSize: 20, // pageSize: 20,
setCode: param, // setCode: param,
}; // };
api // api
.getDict(obj) // .getDict(obj)
.then((res) => { // .then((res) => {
console.log("获取字典成功", res); // console.log("获取字典成功", res);
if (res.status === 200) { // if (res.status === 200) {
if (param === "pathmapPic") { // if (param === "pathmapPic") {
if (res.data.data.rows.length > 0) { // if (res.data.data.rows.length > 0) {
state.imgData = [res.data.data.rows[0]]; // state.imgData = [res.data.data.rows[0]];
} // }
} // }
} // }
}) // })
.catch((err) => { // .catch((err) => {
console.log("获取字典失败", err); // console.log("获取字典失败", err);
}); // });
}; // };
getDictList("pathmapPic"); // getDictList("pathmapPic");
//显示更多路径背景弹窗 //显示更多路径背景弹窗
const showLearnBgMore = () => { const showLearnBgMore = () => {
state.learnBgMore = true; state.learnBgMore = true;
@@ -1676,6 +1704,10 @@ export default {
onMounted(() => { onMounted(() => {
// console.log("执行"); // console.log("执行");
getLearnPath(); getLearnPath();
if (store.state.pathmapPic.length > 0) {
console.log("store.state.pathmapPic", store.state.pathmapPic);
state.imgData = [store.state.pathmapPic[0]];
}
}); });
//添加权限 //添加权限
watch( watch(

View File

@@ -3,7 +3,7 @@
<div class="addhead"> <div class="addhead">
<div class="leftimg"> <div class="leftimg">
<!-- <img class="img" :src="picUrl" /> --> <!-- <img class="img" :src="picUrl" /> -->
<img class="img" src="../../assets/images/leveladd/1.png" /> <img class="img" :src="picUrl" />
</div> </div>
<div class="imgfor"> <div class="imgfor">
<div class="forz">{{ styTitle }}</div> <div class="forz">{{ styTitle }}</div>
@@ -139,7 +139,7 @@
</div> </div>
<div <div
class="taskbox" class="taskbox"
@click="showModal" @click="showPub"
style="background: linear-gradient(180deg, #e5f6ec, #eef9f3)" style="background: linear-gradient(180deg, #e5f6ec, #eef9f3)"
> >
<div class="leftt"> <div class="leftt">
@@ -564,7 +564,7 @@
<a-input <a-input
v-model:value="gatenamee" v-model:value="gatenamee"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="关卡名称" placeholder="请输入姓名"
/> />
<div class="btns" @click="searchLevel"> <div class="btns" @click="searchLevel">
<div class="btn btn1"> <div class="btn btn1">
@@ -1078,7 +1078,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">
当前路径共{{ routeChapters }}个关卡{{ routeTasks }}个任务
</div>
</div> </div>
<div class="stumessage"> <div class="stumessage">
<div class="messageme1">学员信息</div> <div class="messageme1">学员信息</div>
@@ -1255,6 +1257,8 @@ export default {
dcopyModal: false, //复制弹窗 dcopyModal: false, //复制弹窗
closeBack: false, closeBack: false,
routeStudentsNum: null, routeStudentsNum: null,
routeChapters: null,
routeTasks: null,
dcloseCopy: false, dcloseCopy: false,
dicloseCopy: false, dicloseCopy: false,
stopModal: false, //结束弹窗 stopModal: false, //结束弹窗
@@ -1649,7 +1653,7 @@ export default {
//获取学员列表 //获取学员列表
const getStudent = () => { const getStudent = () => {
let obj = { let obj = {
name: "", name: state.gatenamee,
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: 10, pageSize: 10,
routerId: state.routerId, routerId: state.routerId,
@@ -1733,7 +1737,9 @@ export default {
message.destroy(); message.destroy();
message.success("发布成功"); message.success("发布成功");
state.pub = false; state.pub = false;
state.nodata = false;
// getLearnPath(); // getLearnPath();
reget(); reget();
}) })
.catch((err) => { .catch((err) => {
@@ -1744,33 +1750,19 @@ export default {
const showPub = () => { const showPub = () => {
state.pub = true; state.pub = true;
// state.releasePathId = routerId; // state.releasePathId = routerId;
//获取学员总数
let obj = {
pageNo: 0,
pageSize: 0,
routerId: state.routerId,
};
api api
.getStudent(obj) .getLearnCount(state.routerId)
.then((res) => { .then((res) => {
if (res.status === 200) { if (res.status === 200) {
// console.log("res", res.data.data); // console.log("获取关卡、任务、学员统计数据", res.data);
state.routeStudentsNum = res.data.data.total; state.routeStudentsNum = res.data.students;
state.routeChapters = res.data.chapters;
state.routeTasks = res.data.tasks;
} }
}) })
.catch((err) => { .catch((err) => {
console.log("err", err); console.log("err", err);
}); });
//获取学习路径详细信息
// api
// .getRouterDetail(routerId)
// .then((res) => {
// console.log("学习路径详情", res);
// })
// .catch((err) => {
// console.log("学习路径详情获取错误", err);
// });
}; };
//显示撤回弹窗 //显示撤回弹窗
const showBackModal = () => { const showBackModal = () => {
@@ -1794,6 +1786,7 @@ export default {
message.success("撤回成功"); message.success("撤回成功");
state.backModal = false; state.backModal = false;
reget(); reget();
state.nodata = true;
}) })
.catch((err) => { .catch((err) => {
console.log("撤回失败", err); console.log("撤回失败", err);
@@ -1855,6 +1848,7 @@ export default {
}; };
const reget = () => { const reget = () => {
GetRouterDetail(state.routerId).then((res) => { GetRouterDetail(state.routerId).then((res) => {
// console.log("获取路径图详情", res);
state.styTitle = res.data.data.routerInfo.name; state.styTitle = res.data.data.routerInfo.name;
state.cretime = toDate( state.cretime = toDate(
res.data.data.routerInfo.createTime / 1000, res.data.data.routerInfo.createTime / 1000,
@@ -1985,10 +1979,12 @@ export default {
}); });
}; };
const searchLevel = () => { const searchLevel = () => {
const result = state.tableData.filter( // const result = state.tableData.filter(
(item) => item.cur == state.gatenamee // (item) => item.cur == state.gatenamee
); // );
state.tableData = result; // state.tableData = result;
state.currentPage = 1;
getStudent();
}; };
const resetLevel = () => { const resetLevel = () => {
state.gatenamee = ""; state.gatenamee = "";

View File

@@ -174,7 +174,7 @@
<div class="filt"> <div class="filt">
<div class="le"> <div class="le">
<div class="leftimg"> <div class="leftimg">
<img class="img" src="../../assets/images/leveladd/1.png" /> <img class="img" :src="picUrl" />
</div> </div>
<div class="imgfor"> <div class="imgfor">
<div class="forz">{{ styTitle }}</div> <div class="forz">{{ styTitle }}</div>
@@ -524,7 +524,7 @@
</div> </div>
<div class="btn btn2"> <div class="btn btn2">
<div class="imgIcon"></div> <div class="imgIcon"></div>
<div class="btnText" @click="showDeleteALLModal"> <div class="btnText" @click="showDeleteALLModal(1)">
批量删除 批量删除
</div> </div>
</div> </div>
@@ -640,7 +640,16 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 120px; text-align: center"> <div
style="
width: 120px;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
:title="element.creater"
>
{{ element.creater }} {{ element.creater }}
</div> </div>
<div style="width: 120px; text-align: center"> <div style="width: 120px; text-align: center">
@@ -776,7 +785,7 @@
<button class="addx" @click="showAddStu">添加学员</button> <button class="addx" @click="showAddStu">添加学员</button>
<!-- 点击抽屉组件在LevelAdd此处没添加showAddStushowImpStu --> <!-- 点击抽屉组件在LevelAdd此处没添加showAddStushowImpStu -->
<button class="addd" @click="showImpStu">导入学员</button> <button class="addd" @click="showImpStu">导入学员</button>
<button class="addd" @click="showDeleteALLModal"> <button class="addd" @click="showDeleteALLModal(2)">
批量删除 批量删除
</button> </button>
</div> </div>
@@ -898,7 +907,9 @@
<div class="close_exit" @click="delete_exit"></div> <div class="close_exit" @click="delete_exit"></div>
</div> </div>
<div class="body"> <div class="body">
<span>请确认是否批量删除学员</span> <span
>请确认是否批量删除{{ deleteType === 1 ? "任务" : "学员" }}</span
>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1"> <div class="del_btn btn1">
@@ -955,7 +966,7 @@
<div class="header"> <div class="header">
<div class="inhe"> <div class="inhe">
<div class="mod"></div> <div class="mod"></div>
<div class="tz">选择任务移动到阶段</div> <div class="tz">选择任务移动到关卡</div>
</div> </div>
</div> </div>
<div class="mid"> <div class="mid">
@@ -1192,6 +1203,10 @@ export default {
unlockModeVisible: false, //切换模式抽屉 unlockModeVisible: false, //切换模式抽屉
chooseProjectList: null, //选择的阶段下的任务列表 chooseProjectList: null, //选择的阶段下的任务列表
curLevel: null, //选择移动到的关卡名称
deleteType: null, //批量删除学员/任务 1任务 2学员
}); });
const showModal = (element) => { const showModal = (element) => {
@@ -1415,9 +1430,11 @@ export default {
item["value"] = item.chapterId; item["value"] = item.chapterId;
item["label"] = item.name; item["label"] = item.name;
}); });
console.log("路径图详情", res);
if (state.level.length > 0) { if (state.level.length > 0) {
let chapter = localStorage.getItem("chapterId"); let chapter = localStorage.getItem("chapterId");
if (chapter !== "null") { // console.log("chapter", chapter, chapter !== "null");
if (chapter) {
dataAssignment(chapter); //用哪个的任务表 dataAssignment(chapter); //用哪个的任务表
state.isactive = chapter; //哪个亮 state.isactive = chapter; //哪个亮
} else { } else {
@@ -1593,6 +1610,7 @@ export default {
document.getElementsByTagName("main")[0].style.background = "#ffffff"; document.getElementsByTagName("main")[0].style.background = "#ffffff";
document.getElementsByTagName("main")[0].style.boxShadow = document.getElementsByTagName("main")[0].style.boxShadow =
"0px 1px 35px 0px rgba(118, 136, 166, 0.07)"; "0px 1px 35px 0px rgba(118, 136, 166, 0.07)";
localStorage.removeItem("chapterId");
}); });
const changebgc = (chapterId) => { const changebgc = (chapterId) => {
state.isactive = chapterId; state.isactive = chapterId;
@@ -1604,12 +1622,14 @@ export default {
const gqxy_hShow = () => { const gqxy_hShow = () => {
state.gqxy_hs = !state.gqxy_hs; state.gqxy_hs = !state.gqxy_hs;
}; };
const showDeleteALLModal = () => { const showDeleteALLModal = (type) => {
state.deleteAll = true; state.deleteAll = true;
state.deleteType = type;
}; };
const delete_exit = () => { const delete_exit = () => {
state.deleteAll = false; state.deleteAll = false;
deletecTaskAll(); deletecTaskAll();
state.deleteType = null;
}; };
const showDeleteModal = (id) => { const showDeleteModal = (id) => {
state.deleteID = id; state.deleteID = id;
@@ -1729,6 +1749,7 @@ export default {
chapterId: state.removeStageId, chapterId: state.removeStageId,
routerTaskIdList: state.selectRow, routerTaskIdList: state.selectRow,
}; };
console.log("移动关卡obj", obj);
api api
.moveTask(obj) .moveTask(obj)
.then((res) => { .then((res) => {
@@ -1736,12 +1757,15 @@ export default {
message.destroy(); message.destroy();
message.success("移动成功"); message.success("移动成功");
localStorage.setItem("chapterId", state.chooseChapterId); localStorage.setItem("chapterId", state.chooseChapterId);
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
getDetail(); getDetail();
}) })
.catch((err) => { .catch((err) => {
console.log("移动失败", err); console.log("移动失败", err);
}); });
state.visiblene = false; state.visiblene = false;
state.curLevel = null;
} }
}; };
//编辑的按钮 //编辑的按钮
@@ -1812,10 +1836,12 @@ export default {
}; };
const closeChangeModal = () => { const closeChangeModal = () => {
state.visiblene = false; state.visiblene = false;
state.curLevel = null;
}; };
const handleChangeStage = (value, option) => { const handleChangeStage = (value, option) => {
console.log("阶段改变", value, option); console.log("阶段改变", value, option);
state.removeStageId = option.chapterId; state.removeStageId = option.chapterId;
state.curLevel = option.name;
}; };
//显示切换模式抽屉 //显示切换模式抽屉

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -586,7 +586,17 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 120px; text-align: center"> <div
style="
width: 120px;
text-align: center;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
:title="element.creater"
>
{{ element.creater }} {{ element.creater }}
</div> </div>
<div style="width: 120px; text-align: center"> <div style="width: 120px; text-align: center">
@@ -1127,7 +1137,7 @@ export default {
voteId: "", //删除投票id voteId: "", //删除投票id
deleteID: "", deleteID: "",
selectRow: [], //选择行 selectRow: [], //选择行
curLevel: [], //阶段名称 curLevel: null, //阶段名称
selectAll: 0, //0未选择1全选2部分选择 selectAll: 0, //0未选择1全选2部分选择
updateStageID: null, //编辑阶段id updateStageID: null, //编辑阶段id
@@ -1209,7 +1219,7 @@ export default {
taskList: value.taskList, taskList: value.taskList,
value: value.stageId, value: value.stageId,
label: value.name, label: value.name,
courseId: value.courseId ? value.courseId : null courseId: value.courseId ? value.courseId : null,
}; };
array.push(obj); array.push(obj);
} }
@@ -1365,7 +1375,7 @@ export default {
let stage = localStorage.getItem("stageId") let stage = localStorage.getItem("stageId")
? localStorage.getItem("stageId") ? localStorage.getItem("stageId")
: null; : null;
// console.log("stage",Object.prototype.toString.call(stage)) // console.log("stage",Object.prototype.toString.call(stage))
getStageData(res.data.data.stageList); getStageData(res.data.data.stageList);
if (stage != null) { if (stage != null) {
@@ -1373,49 +1383,48 @@ export default {
let stageList = res.data.data.stageList; //阶段数组 let stageList = res.data.data.stageList; //阶段数组
let result = stageList.find((item) => item.stageId == stage); let result = stageList.find((item) => item.stageId == stage);
console.log("又找到了", result); console.log("又找到了", result);
if(result!=null){ if (result != null) {
getTableData(result.taskList); getTableData(result.taskList);
}else{ } else {
//没有选中的阶段时,获取全部的任务 //没有选中的阶段时,获取全部的任务
console.log(stage); console.log(stage);
let stageList = res.data.data.stageList; //阶段数组 let stageList = res.data.data.stageList; //阶段数组
if(stageList!=null){ if (stageList != null) {
let taskListAll; let taskListAll;
stageList.forEach((item) => { stageList.forEach((item) => {
taskListAll=[...item.taskList]; taskListAll = [...item.taskList];
}); });
console.log("taskListAll",taskListAll); console.log("taskListAll", taskListAll);
getTableData(taskListAll); getTableData(taskListAll);
} }
} }
} else {
} else{
console.log(stage); console.log(stage);
let stageList = res.data.data.stageList; //阶段数组 let stageList = res.data.data.stageList; //阶段数组
if(stageList!=null){ if (stageList != null) {
let taskListAll; let taskListAll;
stageList.forEach((item) => { stageList.forEach((item) => {
taskListAll=[...item.taskList]; taskListAll = [...item.taskList];
}); });
console.log("taskListAll",taskListAll); console.log("taskListAll", taskListAll);
getTableData(taskListAll); getTableData(taskListAll);
} }
} }
// 每次都获取了第一条taskList // 每次都获取了第一条taskList
// let arr = res.data.data.stageList[0].taskList; // let arr = res.data.data.stageList[0].taskList;
// console.log("任务列表", stage, arr); // console.log("任务列表", stage, arr);
// getTableData(arr); // getTableData(arr);
} }
//获取阶段列表 // //获取阶段列表
let stagearr = res.data.data.stageList; let stagearr = res.data.data.stageList;
let arrlist = state.curLevel; // let arrlist = state.curLevel;
console.log(stagearr, 111111); console.log(stagearr, 111111);
if (stagearr.length > 0) { if (stagearr.length > 0) {
getStageData(stagearr); getStageData(stagearr);
stagearr.map((value) => { // stagearr.map((value) => {
console.log(value); // console.log(value);
arrlist.push(value); // // arrlist.push(value);
}); // });
} }
//给阶段id赋初始值 //给阶段id赋初始值
let stageid = localStorage.getItem("stageId") let stageid = localStorage.getItem("stageId")
@@ -1489,8 +1498,11 @@ export default {
console.log("移动成功", res); console.log("移动成功", res);
message.destroy(); message.destroy();
message.success("移动成功"); message.success("移动成功");
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
console.log(state.removeStageId); console.log(state.removeStageId);
getTask(); getTask();
localStorage.setItem("stageId", state.chooseStageId); localStorage.setItem("stageId", state.chooseStageId);
}) })
.catch((err) => { .catch((err) => {
@@ -1636,7 +1648,7 @@ export default {
console.log("删除阶段成功", res); console.log("删除阶段成功", res);
message.success("删除阶段成功"); message.success("删除阶段成功");
closeDeleteStage(); closeDeleteStage();
localStorage.setItem("stageId", "") localStorage.setItem("stageId", "");
getTask(); getTask();
}) })
.catch((err) => { .catch((err) => {
@@ -1661,7 +1673,7 @@ export default {
"0px 1px 35px 0px rgba(118, 136, 166, 0.07)"; "0px 1px 35px 0px rgba(118, 136, 166, 0.07)";
}); });
const showDrawerOnline = (id, eleId) => { const showDrawerOnline = (id, eleId) => {
console.log('id, eleId',id, eleId); console.log("id, eleId", id, eleId);
state.addonlinevisible = true; state.addonlinevisible = true;
state.EditOnlineId = id; state.EditOnlineId = id;
state.projectTaskId = eleId; state.projectTaskId = eleId;