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

This commit is contained in:
songwc
2022-11-03 18:06:50 +08:00
12 changed files with 1101 additions and 1036 deletions

View File

@@ -42,3 +42,6 @@ export const createProject = (obj) => http.post('/admin/project/edit', obj)
// 获取项目列表 // 获取项目列表
export const getProjectList = (obj) => http.post('/admin/project/list', obj) export const getProjectList = (obj) => http.post('/admin/project/list', obj)
// 获取项目详情信息(包含阶段及任务列表)
export const getProjectDetail = (obj) => http.get('/admin/project/detail', { params: obj })

8
src/api/indexStage.js Normal file
View File

@@ -0,0 +1,8 @@
import http from "./config";
//添加阶段
export const editStage = (obj) => http.post('/admin/project/editStage', obj, {
headers: {
'token': '123'
}
});

View File

@@ -224,6 +224,7 @@
<script> <script>
import { reactive, toRefs, ref } from "vue"; import { reactive, toRefs, ref } from "vue";
import * as api from "../../api/indexActivity"; import * as api from "../../api/indexActivity";
import * as apiTask from "../../api/indexTaskadd";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { toDate } from "../../api/method.js"; import { toDate } from "../../api/method.js";
const rowSelection = ref({ const rowSelection = ref({
@@ -333,7 +334,6 @@ export default {
api api
.createActivity(obj) .createActivity(obj)
.then((res) => { .then((res) => {
setTimeout(() => {
console.log("创建成功", res); console.log("创建成功", res);
message.success("创建成功"); message.success("创建成功");
state.radioV1 = ""; state.radioV1 = "";
@@ -347,7 +347,26 @@ export default {
state.textV2 = ""; state.textV2 = "";
state.time = ""; state.time = "";
ctx.emit("update:addactiveVisible", false); ctx.emit("update:addactiveVisible", false);
}, 1000); apiTask
.addTask({
courseId: 0,
duration: obj.activityDuration,
flag: true,
name: obj.activityName,
projectId: 28,
projectTaskId: 0,
stageId: 3,
type: 9,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
//重新获取任务列表
// apiTask.getTask({ projectId: 28 });
// router.push("/taskadd");
})
.catch((err) => {
console.log(err);
});
}) })
.catch((err) => { .catch((err) => {
console.log("创建失败",err); console.log("创建失败",err);

View File

@@ -3,7 +3,6 @@
:visible="adddiscussVisible" :visible="adddiscussVisible"
class="drawerStyle addrefDrawer" class="drawerStyle addrefDrawer"
width="80%" width="80%"
title="添加讨论"
placement="right" placement="right"
@after-visible-change="afterVisibleChange" @after-visible-change="afterVisibleChange"
> >
@@ -72,6 +71,7 @@
<script> <script>
import { reactive, toRefs, ref } from "vue"; import { reactive, toRefs, ref } from "vue";
import * as api from "../../api/indexDiscuss"; import * as api from "../../api/indexDiscuss";
import * as apiTask from "../../api/indexTaskadd";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
const rowSelection = ref({ const rowSelection = ref({
checkStrictly: false, checkStrictly: false,
@@ -105,6 +105,7 @@ export default {
inputV2: "", inputV2: "",
textV1: "", textV1: "",
checkedC1: "", checkedC1: "",
add: true,
}); });
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:adddiscussVisible", false); ctx.emit("update:adddiscussVisible", false);
@@ -137,13 +138,33 @@ export default {
api api
.createDiscuss(obj) .createDiscuss(obj)
.then((res) => { .then((res) => {
setTimeout(() => {
console.log("创建成功", res); console.log("创建成功", res);
state.inputV1 = ""; state.inputV1 = "";
state.textV1 = ""; state.textV1 = "";
message.success("创建成功"); message.success("创建成功");
ctx.emit("update:adddiscussVisible", false); ctx.emit("update:adddiscussVisible", false);
}, 1000); //ctx.emit("changeData","传的参数");
//console.log("discussName",obj.discussName);
apiTask
.addTask({
courseId: 0,
duration: 0,
flag: true,
name: obj.discussName,
projectId: 28,
projectTaskId: 0,
stageId: 3,
type: 8,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
//重新获取任务列表
// apiTask.getTask({ projectId: 28 });
// router.push("/taskadd");
})
.catch((err) => {
console.log(err);
});
}) })
.catch((err) => { .catch((err) => {
console.log("创建失败", err); console.log("创建失败", err);

View File

@@ -9,7 +9,8 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">添加测评</div> <div v-if="edit" class="headerTitle">编辑测评</div>
<div v-else class="headerTitle">添加测评</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"
@@ -121,6 +122,10 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
edit: {
type: Boolean,
default: false,
},
}, },
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
@@ -140,6 +145,7 @@ export default {
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addevalVisible", false); ctx.emit("update:addevalVisible", false);
ctx.emit("update:edit", false);
state.inputV1 = ""; state.inputV1 = "";
state.inputV2 = ""; state.inputV2 = "";
}; };

View File

@@ -103,7 +103,7 @@
</div> </div>
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { reactive, toRefs, ref } from "vue"; import { reactive, toRefs, ref } from "vue";
import CreVote from "../../components/drawers/CreVote.vue"; import CreVote from "../../components/drawers/CreVote.vue";
import * as api from "../../api/indexVote"; import * as api from "../../api/indexVote";
@@ -149,7 +149,7 @@ export default {
textV1: "", textV1: "",
crevotevisible: false, crevotevisible: false,
time: undefined, time: undefined,
basevote:'', basevote: "",
endTimes: "", endTimes: "",
startTimes: "", startTimes: "",
}); });
@@ -169,7 +169,7 @@ export default {
return message.info("请输入投票名称"); return message.info("请输入投票名称");
} }
if (state.basevote == '') { if (state.basevote == "") {
state.basevote = 1; state.basevote = 1;
} }
@@ -235,7 +235,7 @@ export default {
}, },
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-table-striped :deep(.table-striped) td { .ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important; background-color: #fafafa !important;
} }
@@ -375,4 +375,3 @@ export default {
} }
} }
</style> </style>

View File

@@ -1292,7 +1292,11 @@ export default {
message.destroy(); message.destroy();
return message.warning("请输入路径图名称"); return message.warning("请输入路径图名称");
} }
// if (!state.organizationSelectName) return message.warning("请选择归属组织");
// if (!state.organizationSelectName){
// message.destroy();
// return message.warning("请选择归属组织");
// }
// state.createLoading = true; // state.createLoading = true;
let obj = { let obj = {
name: state.pathName, name: state.pathName,
@@ -1303,14 +1307,19 @@ export default {
api api
.createLearnPath(obj) .createLearnPath(obj)
.then((res) => { .then((res) => {
setTimeout(() => {
console.log("创建成功", res); console.log("创建成功", res);
message.destroy();
message.success("创建成功"); message.success("创建成功");
// state.createLoading = false;
state.currentPage = 1;
router.push("/leveladd"); router.push("/leveladd");
// getLearnPath(); // setTimeout(() => {
}, 1000); // console.log("创建成功", res);
// message.destroy();
// message.success("创建成功");
// // state.createLoading = false;
// state.currentPage = 1;
// router.push("/leveladd");
// // getLearnPath();
// }, 1000);
}) })
.catch((err) => { .catch((err) => {
console.log("创建失败", err); console.log("创建失败", err);
@@ -1365,6 +1374,7 @@ export default {
.handleLearnPath(obj) .handleLearnPath(obj)
.then((res) => { .then((res) => {
console.log("删除成功", res); console.log("删除成功", res);
message.destroy();
message.success("删除成功"); message.success("删除成功");
state.deleteModal = false; state.deleteModal = false;
getLearnPath(); getLearnPath();
@@ -1375,8 +1385,15 @@ export default {
}; };
//编辑学习路径图 //编辑学习路径图
const editLearnPath = () => { const editLearnPath = () => {
if (!state.pathName) return message.warning("请输入路径图名称"); if (!state.pathName) {
// if (!state.organizationSelectName) return message.warning("请选择归属组织"); message.destroy();
return message.warning("请输入路径图名称");
}
// if (!state.organizationSelectName){
// message.destroy();
// return message.warning("请选择归属组织");
// }
// state.createLoading = true; // state.createLoading = true;
let obj = { let obj = {
routerId: state.editPathId, routerId: state.editPathId,
@@ -1388,15 +1405,23 @@ export default {
api api
.createLearnPath(obj) .createLearnPath(obj)
.then((res) => { .then((res) => {
setTimeout(() => {
console.log("修改成功", res); console.log("修改成功", res);
message.destroy();
message.success("修改成功"); message.success("修改成功");
// state.createLoading = false; // state.createLoading = false;
// state.currentPage = 1; // state.currentPage = 1;
state.out1 = false; state.out1 = false;
// router.push("/leveladd"); // router.push("/leveladd");
getLearnPath(); getLearnPath();
}, 1000); // setTimeout(() => {
// console.log("修改成功", res);
// message.success("修改成功");
// // state.createLoading = false;
// // state.currentPage = 1;
// state.out1 = false;
// // router.push("/leveladd");
// getLearnPath();
// }, 1000);
}) })
.catch((err) => { .catch((err) => {
console.log("修改失败", err); console.log("修改失败", err);
@@ -2175,6 +2200,7 @@ export default {
.g1 { .g1 {
color: #4ea6ff; color: #4ea6ff;
font-size: 14px; font-size: 14px;
cursor: pointer;
} }
} }
} }

View File

@@ -258,9 +258,7 @@
</router-link> </router-link>
</div> </div>
<!-- 无数据显示快速创建 --> <!-- 无数据显示快速创建 -->
<router-link <router-link :to="{ path: '/leveladddetail' }">
:to="{ path: '/leveladddetail', query: { routerId: routerId } }"
>
<div <div
class="taskbox" class="taskbox"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)" style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"

View File

@@ -60,7 +60,7 @@
<div class="main"> <div class="main">
<div class="inma"> <div class="inma">
<div class="name"> <div class="name">
<div class="d" style="margin-top: 2px;margin-right:2px"> <div class="d" style="margin-top: 2px; margin-right: 2px">
<img <img
style="width: 10px; height: 10px" style="width: 10px; height: 10px"
src="../../assets/images/basicinfo/asterisk.png" src="../../assets/images/basicinfo/asterisk.png"
@@ -78,8 +78,15 @@
<div class="co">{{ value1.length }}/20</div> <div class="co">{{ value1.length }}/20</div>
</div> </div>
<div class="name"> <div class="name">
<div class="d" style="width: 10px;height: 10px;margin-top: 2px;margin-right:2px"> <div
</div> class="d"
style="
width: 10px;
height: 10px;
margin-top: 2px;
margin-right: 2px;
"
></div>
<div class="fir">关卡说明</div> <div class="fir">关卡说明</div>
<div class="input"> <div class="input">
<a-textarea <a-textarea
@@ -167,8 +174,10 @@
<!-- 添加作业侧弹窗 --> <!-- 添加作业侧弹窗 -->
<div> <div>
<add-homework <add-homework
flag=0 routerTaskId=ListChoosedId flag="0"
v-model:addhomeworkVisible="addhomeworkvisible" /> routerTaskId="ListChoosedId"
v-model:addhomeworkVisible="addhomeworkvisible"
/>
</div> </div>
<div class="lin"></div> <div class="lin"></div>
</div> </div>
@@ -221,30 +230,45 @@
</div> </div>
<div class="lin"></div> <div class="lin"></div>
</div> </div>
<div class="item"> <div class="item" @click="showDrawerAddEval">
<div class="itcon"> <div class="itcon">
<div class="img"> <div class="img">
<img src="../../assets/images/leveladd/ce.png" /> <img src="../../assets/images/leveladd/ce.png" />
</div> </div>
<div class="text">测评</div> <div class="text">测评</div>
<!-- 添加测评侧弹窗 -->
<div>
<add-eval v-model:addevalVisible="addevalvisible" v-model:edit="edit" />
</div>
<!-- 添加测评侧弹窗 -->
</div> </div>
<div class="lin"></div> <div class="lin"></div>
</div> </div>
<div class="item"> <div class="item" @click="showDrawerAddInvist">
<div class="itcon"> <div class="itcon">
<div class="img"> <div class="img">
<img src="../../assets/images/leveladd/diao.png" /> <img src="../../assets/images/leveladd/diao.png" />
</div> </div>
<div class="text">评估</div> <div class="text">评估</div>
<!-- 添加评估侧弹窗 -->
<div>
<add-invist v-model:addinvistVisible="addinvistvisible" />
</div>
<!-- 添加评估侧弹窗 -->
</div> </div>
<div class="lin"></div> <div class="lin"></div>
</div> </div>
<div class="item"> <div class="item" @click="showDrawerAddVote">
<div class="itcon"> <div class="itcon">
<div class="img"> <div class="img">
<img src="../../assets/images/leveladd/tou.png" /> <img src="../../assets/images/leveladd/tou.png" />
</div> </div>
<div class="text">投票</div> <div class="text">投票</div>
<!-- 添加投票侧弹窗 -->
<div>
<add-vote v-model:addvoteVisible="addvotevisible" />
</div>
<!-- 添加投票侧弹窗 -->
</div> </div>
<div class="lin"></div> <div class="lin"></div>
</div> </div>
@@ -524,6 +548,9 @@ import AddStu from "../../components/drawers/AddLevelAddStu";
import ImpStu from "../../components/drawers/AddLevelImportStu"; import ImpStu from "../../components/drawers/AddLevelImportStu";
import AddHomework from "../../components/drawers/AddHomework.vue"; import AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue"; import AddTest from "../../components/drawers/AddTest.vue";
import AddEval from "../../components/drawers/AddEval.vue";
import AddInvist from "../../components/drawers/AddInvist.vue";
import AddVote from "../../components/drawers/AddVote.vue";
import * as api from "../../api/indexLevel"; import * as api from "../../api/indexLevel";
import { GetRouterDetail, RouterDeleteTask } from "../../api/indexTask"; import { GetRouterDetail, RouterDeleteTask } from "../../api/indexTask";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
@@ -533,16 +560,20 @@ export default {
AddStu, AddStu,
ImpStu, ImpStu,
AddHomework, AddHomework,
AddTest AddTest,
AddEval,
AddInvist,
AddVote,
}, },
setup() { setup() {
const state = reactive({ const state = reactive({
routerId: localStorage.getItem("routerId"),
level: [ level: [
{ {
chapterId: "1", chapterId: "1",
remark: "关卡说明", remark: "关卡说明",
name: "默认关卡", name: "默认关卡",
} },
], ],
tableData: [ tableData: [
{ {
@@ -739,19 +770,23 @@ export default {
value1: "", value1: "",
value2: "", value2: "",
selectedRowKeys: [], selectedRowKeys: [],
edit:false, //是否点击编辑
gqxy_hs: true, gqxy_hs: true,
isactive: 0, isactive: 0,
projectChecked: null, //项目单选框 projectChecked: null, //项目单选框
addhomeworkvisible: false, addhomeworkvisible: false,
addtestvisible:false, addtestvisible: false,
addevalvisible: false,
addinvistvisible: false,
addvotevisible: false,
updateChapterID: null, //修改关卡id updateChapterID: null, //修改关卡id
// 表示当前触发列表的id,用来发送编辑和删除 // 表示当前触发列表的id,用来发送编辑和删除
ListChoosedId:0 ListChoosedId: 0,
}); });
//新建关卡 //新建关卡
const editChapter = () => { const editChapter = () => {
if(!state.value1) return message.warning("请输入关卡名称"); if (!state.value1) return message.warning("请输入关卡名称");
let obj = { let obj = {
name: state.value1, name: state.value1,
remark: state.value2, remark: state.value2,
@@ -774,7 +809,7 @@ export default {
.catch((err) => { .catch((err) => {
console.log("创建失败", err); console.log("创建失败", err);
}); });
} };
//编辑关卡 //编辑关卡
// const updateChapter = () => { // const updateChapter = () => {
@@ -800,31 +835,42 @@ export default {
// 作业和考试的抽屉 // 作业和考试的抽屉
const showDrawerAddHomework = () => { const showDrawerAddHomework = () => {
state.addhomeworkvisible = true; state.addhomeworkvisible = true;
state.ListChoosedId = 0 state.ListChoosedId = 0;
}; };
const showDrawerAddTest = () => { const showDrawerAddTest = () => {
state.addtestvisible = true; state.addtestvisible = true;
state.ListChoosedId = 0 state.ListChoosedId = 0;
};
//测试评估投票抽屉
const showDrawerAddEval = () => {
state.addevalvisible = true;
};
const showDrawerAddInvist = () => {
state.addinvistvisible = true;
};
const showDrawerAddVote = () => {
state.addvotevisible = true;
}; };
// tableData数据赋值方法 // tableData数据赋值方法
const dataAssignment = () => { const dataAssignment = () => {
console.log((state.level));
state.level[0].taskList.forEach((element,index) => {
state.tableData[index] = {
key:element.routerTaskId,
lei:checkType(element.type),
creater:element.name,
cretime:element.duration,
checked1:element.flag
}
});
}
const getDetail = (index) => {
GetRouterDetail(92).then((res) => {
state.level = res.data.data.chapterList
console.log(state.level); console.log(state.level);
if(index == 0) { state.level[0].taskList.forEach((element, index) => {
state.tableData[index] = {
key: element.routerTaskId,
lei: checkType(element.type),
creater: element.name,
cretime: element.duration,
checked1: element.flag,
};
});
};
const getDetail = (index) => {
GetRouterDetail(92)
.then((res) => {
state.level = res.data.data.chapterList;
console.log(state.level);
if (index == 0) {
// state.tableData[1] = { // state.tableData[1] = {
// key: 2, // key: 2,
// lei: "在线", // lei: "在线",
@@ -832,12 +878,13 @@ export default {
// cretime: "60", // cretime: "60",
// checked1: true, // checked1: true,
// } // }
dataAssignment(0) dataAssignment(0);
} }
}).catch((err) => {
message.error(err)
}) })
} .catch((err) => {
message.error(err);
});
};
const closeDrawer = () => { const closeDrawer = () => {
state.visible = false; state.visible = false;
}; };
@@ -960,12 +1007,23 @@ export default {
return ( return (
<div class="opa"> <div class="opa">
<div class="opacation"> <div class="opacation">
<span style="color:#4EA6FF;margin-right:25px;cursor:pointer"> <span
style="color:#4EA6FF;margin-right:25px;cursor:pointer"
onClick={()=>{
state.edit = true;
state.addevalvisible = true;
}}
>
编辑 编辑
</span> </span>
<span style="color:#4EA6FF;cursor:pointer" onClick={() => { <span
deleteLevelTask() style="color:#4EA6FF;cursor:pointer"
}}>删除</span> onClick={() => {
deleteLevelTask();
}}
>
删除
</span>
</div> </div>
</div> </div>
); );
@@ -975,9 +1033,22 @@ export default {
return columns; return columns;
}; };
const checkType = (index) => { const checkType = (index) => {
let typeRules = ["","在线","面授","案例","作业","考试","直播","外链","讨论","测评","评估","投票"]; let typeRules = [
"",
"在线",
"面授",
"案例",
"作业",
"考试",
"直播",
"外链",
"讨论",
"测评",
"评估",
"投票",
];
return typeRules[index]; return typeRules[index];
} };
const tableDataFunc2 = () => { const tableDataFunc2 = () => {
const columns = [ const columns = [
{ {
@@ -1162,7 +1233,7 @@ export default {
document.getElementsByTagName("main")[0].style.background = document.getElementsByTagName("main")[0].style.background =
"rgb(245, 247, 250,1)"; "rgb(245, 247, 250,1)";
document.getElementsByTagName("main")[0].style.boxShadow = "none"; document.getElementsByTagName("main")[0].style.boxShadow = "none";
getDetail(0) getDetail(0);
}); });
onUnmounted(() => { onUnmounted(() => {
document.getElementsByTagName("main")[0].style.background = "#ffffff"; document.getElementsByTagName("main")[0].style.background = "#ffffff";
@@ -1183,13 +1254,15 @@ export default {
state.deleteAll = false; state.deleteAll = false;
}; };
const deleteLevelTask = () => { const deleteLevelTask = () => {
RouterDeleteTask(state.listChoosedId).then((res) => { RouterDeleteTask(state.listChoosedId)
.then((res) => {
console.log(`删除成功${res}`); console.log(`删除成功${res}`);
message.success('删除成功') message.success("删除成功");
}).catch((err) => {
console.log(`删除失败${err}`);
}) })
} .catch((err) => {
console.log(`删除失败${err}`);
});
};
return { return {
...toRefs(state), ...toRefs(state),
@@ -1213,6 +1286,9 @@ export default {
// updateChapter, // updateChapter,
showDrawerAddHomework, showDrawerAddHomework,
showDrawerAddTest, showDrawerAddTest,
showDrawerAddEval,
showDrawerAddInvist,
showDrawerAddVote,
deleteLevelTask, deleteLevelTask,
}; };
}, },
@@ -1339,9 +1415,9 @@ export default {
width: 100px; width: 100px;
height: 40px; height: 40px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #409EFF; border: 1px solid #409eff;
font-size: 14px; font-size: 14px;
color: #409EFF; color: #409eff;
cursor: pointer; cursor: pointer;
background: #ffffff; background: #ffffff;
margin-right: 20px; margin-right: 20px;
@@ -1354,7 +1430,7 @@ export default {
color: #fff; color: #fff;
cursor: pointer; cursor: pointer;
border: 0; border: 0;
background: #409EFF; background: #409eff;
} }
} }
} }

View File

@@ -11,58 +11,34 @@
<div class="main"> <div class="main">
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目名称</div> <div class="inname">项目名称</div>
</div> </div>
<div class="in"> <div class="in">
<a-input <a-input v-model:value="projectName" placeholder="请输入项目名称" show-count :maxlength="30" />
v-model:value="projectName"
placeholder="请输入项目名称"
show-count
:maxlength="30"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">分类</div> <div class="inname">分类</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect" placeholder="四个养成" style="width: 100%" :options="classifyList"
v-model:value="classifySelect" @change="classificationChange" allowClear showSearch>
placeholder="四个养成"
style="width: 100%"
:options="classifyList"
@change="classificationChange"
allowClear
showSearch
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">封面图</div> <div class="inname">封面图</div>
</div> </div>
<div <div class="box" style="
class="box"
style="
width: 100px; width: 100px;
height: 100px; height: 100px;
border: 1px solid rgba(78, 166, 255, 1); border: 1px solid rgba(78, 166, 255, 1);
@@ -70,29 +46,15 @@
cursor: pointer; cursor: pointer;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
" ">
> <a-upload v-model:file-list="fileList" name="file" list-type="picture-card" class="avatar-uploader"
<a-upload :show-upload-list="false" action="/api/file/upload" :before-upload="beforeUpload" @change="handleChange">
v-model:file-list="fileList" <img style="
name="file"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
action="/api/file/upload"
:before-upload="beforeUpload"
@change="handleChange"
>
<img
style="
width: 100px; width: 100px;
height: 100px; height: 100px;
margin-bottom: 4px; margin-bottom: 4px;
margin-right: 4px; margin-right: 4px;
" " v-if="imageUrl" :src="imageUrl" alt="avatar" />
v-if="imageUrl"
:src="imageUrl"
alt="avatar"
/>
<div v-else> <div v-else>
<!-- <loading-outlined v-if="loading"></loading-outlined> --> <!-- <loading-outlined v-if="loading"></loading-outlined> -->
<!-- <plus-outlined v-else></plus-outlined> --> <!-- <plus-outlined v-else></plus-outlined> -->
@@ -105,71 +67,43 @@
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目时间</div> <div class="inname">项目时间</div>
</div> </div>
<div class="in"> <div class="in">
<a-range-picker <a-range-picker separator="至" :placeholder="[' 开始时间', ' 结束时间']"
separator="至" style="width: 100%; height: 40px; border-radius: 5px" show-time @change="onRangeChange" />
:placeholder="[' 开始时间', ' 结束时间']"
style="width: 100%; height: 40px; border-radius: 5px"
show-time
@change="onRangeChange"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目经理</div> <div class="inname">项目经理</div>
</div> </div>
<div class="in"> <div class="in">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " :value="classifySelect1" mode="multiple" placeholder="请选择项目经理" style="width: 100%" :options="classifyList1"
:value="classifySelect1" @change="classificationChange1" allowClear showSearch>
mode="multiple"
placeholder="请选择项目经理"
style="width: 100%"
:options="classifyList1"
@change="classificationChange1"
allowClear
showSearch
>
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">资源归属</div> <div class="inname">资源归属</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect2" placeholder="自动带出 可修改" :options="classifyList2"
v-model:value="classifySelect2" @change="classificationChange2" />
placeholder="自动带出 可修改"
:options="classifyList2"
@change="classificationChange2"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -177,13 +111,7 @@
<div class="inname" style="margin-top: 13px">项目说明</div> <div class="inname" style="margin-top: 13px">项目说明</div>
</div> </div>
<div class="in"> <div class="in">
<a-textarea <a-textarea v-model:value="remark" style="height: 80px" placeholder="请输入说明" show-count :maxlength="200" />
v-model:value="remark"
style="height: 80px"
placeholder="请输入说明"
show-count
:maxlength="200"
/>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
@@ -191,113 +119,67 @@
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked" v-model:checked="checked" <a-radio @click="changeChecked" v-model:checked="checked"><span style="
><span
style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
" ">同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span></a-radio>
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-radio
>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目级别</div> <div class="inname">项目级别</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect3" :options="classifyList3" @change="classificationChange3"
v-model:value="classifySelect3" placeholder="集团级/组织级/现地级/部门级" />
:options="classifyList3"
@change="classificationChange3"
placeholder="集团级/组织级/现地级/部门级"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">培训体系</div> <div class="inname">培训体系</div>
</div> </div>
<div class="in select"> <div class="in select">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect4" :options="classifyList4" @change="classificationChange4"
v-model:value="classifySelect4" placeholder="集团级/组织级/现地级/部门级" />
:options="classifyList4"
@change="classificationChange4"
placeholder="集团级/组织级/现地级/部门级"
/>
</div> </div>
</div> </div>
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">是否BOEU实施</div> <div class="inname">是否BOEU实施</div>
</div> </div>
<div class="in"> <div class="in">
<a-radio @click="changeChecked1" v-model:checked="checked1" <a-radio @click="changeChecked1" v-model:checked="checked1"><span style="
><span
style="
width: 100%; width: 100%;
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
" ">BOEU实施</span></a-radio>
>BOEU实施</span
></a-radio
>
</div> </div>
</div> </div>
<div class="name name2"> <div class="name name2">
<div class="namebox" style="margin-top: 8px"> <div class="namebox" style="margin-top: 8px">
<img <img class="nameimg" src="../../assets/images/basicinfo/asterisk.png" />
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">附件</div> <div class="inname">附件</div>
</div> </div>
<div class="filebox"> <div class="filebox">
<div> <div>
<img <img v-if="fileList1.length < 6" class="fileimg" src="../../assets/images/projectadd/enclosure.png" />
v-if="fileList1.length < 6" <a-upload :disabled="fileList1.length > 5" :before-upload="beforeUpload1" v-model:file-list="fileList1"
class="fileimg" @remove="removeFile" name="file" action="/api/file/upload" :headers="headers" @change="handleChange1">
src="../../assets/images/projectadd/enclosure.png"
/>
<a-upload
:disabled="fileList1.length > 5"
:before-upload="beforeUpload1"
v-model:file-list="fileList1"
@remove="removeFile"
name="file"
action="/api/file/upload"
:headers="headers"
@change="handleChange1"
>
<!-- <a-button> --> <!-- <a-button> -->
<!-- <upload-outlined></upload-outlined> --> <!-- <upload-outlined></upload-outlined> -->
<span v-if="fileList1.length > 5" class="filetext" <span v-if="fileList1.length > 5" class="filetext">上传数量已经达到最大值</span>
>上传数量已经达到最大值</span
>
<span v-else class="filetext">上传附件</span> <span v-else class="filetext">上传附件</span>
<!-- </a-button> --> <!-- </a-button> -->
</a-upload> </a-upload>
@@ -312,19 +194,12 @@
<div class="name"> <div class="name">
<div class="inname" style="width: 50px">模版</div> <div class="inname" style="width: 50px">模版</div>
<div class="in select" style="margin-left: 2px"> <div class="in select" style="margin-left: 2px">
<a-select <a-select :getPopupContainer="
:getPopupContainer="
(triggerNode) => { (triggerNode) => {
return triggerNode.parentNode || document.body; return triggerNode.parentNode || document.body;
} }
" " v-model:value="classifySelect5" placeholder="请选择模版" :size="size" style="width: 100%" :options="classifyList5"
v-model:value="classifySelect5" @change="classificationChange5">
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
>
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -332,9 +207,7 @@
</div> </div>
<div class="footer"> <div class="footer">
<div class="btn"> <div class="btn">
<a-button v-on:click="createProject" type="primary" class="btn1" <a-button v-on:click="createProject" type="primary" class="btn1">确定</a-button>
>确定</a-button
>
<a-button class="btn2">取消</a-button> <a-button class="btn2">取消</a-button>
</div> </div>
</div> </div>
@@ -349,6 +222,7 @@ import * as api from "../../api/index";
export default { export default {
name: "projectAdd", name: "projectAdd",
setup() { setup() {
api.getProjectDetail({ projectId: 3 }).then(res => { console.log(res) }).catch(err => { console.log(err) })
const router = useRouter(); const router = useRouter();
const state = reactive({ const state = reactive({
classifySelect: null, classifySelect: null,

View File

@@ -565,7 +565,7 @@
</div> </div>
</div> </div>
</a-modal> </a-modal>
<!-- 存为模弹窗 --> <!-- 存为模弹窗 -->
<a-modal v-model:visible="startModal" :footer="null" :closable="closeStart" wrapClassName="CopyModal" <a-modal v-model:visible="startModal" :footer="null" :closable="closeStart" wrapClassName="CopyModal"
centered="true"> centered="true">
<div class="delete"> <div class="delete">
@@ -577,7 +577,7 @@
<div class="close_exit" @click="closeStartModal"></div> <div class="close_exit" @click="closeStartModal"></div>
</div> </div>
<div class="body"> <div class="body">
<span>您确定要存为模</span> <span>您确定要存为模</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1"> <div class="del_btn btn1">
@@ -1358,15 +1358,15 @@ export default {
<a-select-option value="基础信息" label="基础信息"> <a-select-option value="基础信息" label="基础信息">
<router-link to="/taskpage">基础信息</router-link> <router-link to="/taskpage">基础信息</router-link>
</a-select-option> </a-select-option>
<a-select-option value="存为模板" label="存为模板"> {/* <a-select-option value="存为模版" label="存为模版">
<div <div
onClick={() => { onClick={() => {
showStartModal(); showStartModal();
}} }}
> >
存为模 存为模
</div> </div>
</a-select-option> </a-select-option> */}
</a-select> </a-select>
</div> </div>
</div> </div>
@@ -1860,13 +1860,13 @@ export default {
删除 删除
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="存为模" label="存为模"> <a-select-option value="存为模" label="存为模">
<div <div
onClick={() => { onClick={() => {
showStartModal(); showStartModal();
}} }}
> >
存为模 存为模
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="基础信息" label="基础信息"> <a-select-option value="基础信息" label="基础信息">
@@ -1880,13 +1880,13 @@ export default {
// options={state.projectNameList} // options={state.projectNameList}
dropdownClassName="tabledropdown" dropdownClassName="tabledropdown"
> >
<a-select-option value="存为模" label="存为模"> <a-select-option value="存为模" label="存为模">
<div <div
onClick={() => { onClick={() => {
showStartModal(); showStartModal();
}} }}
> >
存为模 存为模
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="结束" label="结束"> <a-select-option value="结束" label="结束">
@@ -1918,13 +1918,13 @@ export default {
// options={state.projectNameList} // options={state.projectNameList}
dropdownClassName="tabledropdown" dropdownClassName="tabledropdown"
> >
<a-select-option value="存为模" label="存为模"> <a-select-option value="存为模" label="存为模">
<div <div
onClick={() => { onClick={() => {
showStartModal(); showStartModal();
}} }}
> >
存为模 存为模
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="删除" label="删除"> <a-select-option value="删除" label="删除">
@@ -1947,13 +1947,13 @@ export default {
// options={state.projectNameList} // options={state.projectNameList}
dropdownClassName="tabledropdown" dropdownClassName="tabledropdown"
> >
<a-select-option value="存为模" label="存为模"> <a-select-option value="存为模" label="存为模">
<div <div
onClick={() => { onClick={() => {
showStartModal(); showStartModal();
}} }}
> >
存为模 存为模
</div> </div>
</a-select-option> </a-select-option>
<a-select-option value="撤回" label="撤回"> <a-select-option value="撤回" label="撤回">

View File

@@ -190,7 +190,10 @@
</div> </div>
<!-- 添加讨论侧弹窗 --> <!-- 添加讨论侧弹窗 -->
<div> <div>
<add-discuss v-model:adddiscussVisible="adddiscussvisible" /> <add-discuss
v-model:adddiscussVisible="adddiscussvisible"
@changeData="updateTableData"
/>
</div> </div>
<!-- 添加讨论侧弹窗 --> <!-- 添加讨论侧弹窗 -->
<div class="lin"></div> <div class="lin"></div>
@@ -367,11 +370,17 @@
<div class="modalMain" style="width: 100%"> <div class="modalMain" style="width: 100%">
<div class="name"> <div class="name">
<div class="namebox"> <div class="namebox">
<div>
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<div class="inname">阶段名称</div> <div class="inname">阶段名称</div>
</div> </div>
<div class="in"> <div class="in">
<a-input <a-input
v-model:value="valueE" v-model:value="valuesname"
show-count show-count
:maxlength="20" :maxlength="20"
placeholder="请输入阶段名称" placeholder="请输入阶段名称"
@@ -384,7 +393,7 @@
</div> </div>
<div class="intext" style="margin-left: 14px"> <div class="intext" style="margin-left: 14px">
<a-textarea <a-textarea
v-model:value="value" v-model:value="valuesnotice"
style="height: 88px" style="height: 88px"
show-count show-count
:maxlength="100" :maxlength="100"
@@ -415,7 +424,7 @@
取消 取消
</button> </button>
<button <button
@click="closeModal" @click="editStage"
style=" style="
cursor: pointer; cursor: pointer;
margin-left: 16px; margin-left: 16px;
@@ -551,6 +560,7 @@ import * as apiactivity from "../../api/indexActivity";
import * as apieval from "../../api/indexEval"; import * as apieval from "../../api/indexEval";
import * as apiinvist from "../../api/indexInvist"; import * as apiinvist from "../../api/indexInvist";
import * as apivote from "../../api/indexVote"; import * as apivote from "../../api/indexVote";
import * as apistage from "../../api/indexStage";
const drawercolumns = [ const drawercolumns = [
{ {
title: "项目名称", title: "项目名称",
@@ -770,6 +780,8 @@ export default {
addvotevisible: false, addvotevisible: false,
stage: false, stage: false,
selectedRowKeys: [], selectedRowKeys: [],
valuesname: "",
valuesnotice: "",
confirmModal: false, //确认添加阶段弹窗 confirmModal: false, //确认添加阶段弹窗
cC: false, cC: false,
cancelModal: false, //确认取消阶段弹窗 cancelModal: false, //确认取消阶段弹窗
@@ -784,7 +796,6 @@ export default {
deleteActivityID: null, //删除活动id deleteActivityID: null, //删除活动id
deleteID: "", deleteID: "",
}); });
const selectProjectName = (value, index) => { const selectProjectName = (value, index) => {
console.log("value", value, index); console.log("value", value, index);
}; };
@@ -794,6 +805,28 @@ export default {
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("visible", bool); console.log("visible", bool);
}; };
//添加阶段
const editStage = () => {
if (!state.valuesname) {
message.destroy();
return message.warning("请输入阶段名称");
}
let obj = {
name: state.valuesname,
projectId: 28,
remark: state.valuesnotice,
};
apistage
.editStage(obj)
.then((res) => {
console.log("添加阶段成功", res);
message.default();
message.success("添加阶段成功");
})
.catch((err) => {
console.log("添加阶段失败", err);
});
};
// 把数据放到state里 // 把数据放到state里
const getTableData = (tableData) => { const getTableData = (tableData) => {
let data = tableData; let data = tableData;
@@ -1453,6 +1486,7 @@ export default {
state.isactive = index; state.isactive = index;
state.isActive = !state.isActive; state.isActive = !state.isActive;
}; };
return { return {
...toRefs(state), ...toRefs(state),
selectProjectName, selectProjectName,
@@ -1501,6 +1535,7 @@ export default {
editVotePath, editVotePath,
getTableData, getTableData,
deleteTask, deleteTask,
editStage,
updateTableData, updateTableData,
}; };
}, },
@@ -1508,12 +1543,12 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-input { // .ant-input {
border-radius: 8px; // border-radius: 8px;
// height: 120%; // // height: 120%;
width: 384px; // width: 384px;
height: 88px; // height: 88px;
} // }
.ConfirmModal { .ConfirmModal {
.ant-modal { .ant-modal {
width: 424px !important; width: 424px !important;