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

# Conflicts:
#	src/views/courselibrary/CoursewareManage.vue
This commit is contained in:
yuping
2022-12-08 00:41:13 +08:00
23 changed files with 10721 additions and 761 deletions

View File

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

View File

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

View File

@@ -1,7 +1,8 @@
import http from "./config"; import http from "./config";
//获取待审核面授课列表 //获取待审核面授课列表
export const list = (obj) => http.post('/admin/offcourse/list', obj) export const list = (obj) => http.post('/admin/offcourse/listToBeReviewed', obj)
// 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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -78,7 +78,7 @@
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { reactive, toRefs } from "vue"; import { reactive, toRefs, ref } from "vue";
// import { useRouter } from "vue-router"; // import { useRouter } from "vue-router";
import EvList from "./EvList.vue"; import EvList from "./EvList.vue";
import * as api from "../../api/indexEval"; import * as api from "../../api/indexEval";
@@ -252,7 +252,15 @@ export default {
console.log(err, "erererrerererererer"); console.log(err, "erererrerererererer");
}); });
} }
// 防止连续点击出现添加多条问题
const prohibitClick = ref(false);
const creoredit = () => { const creoredit = () => {
if(prohibitClick.value){
message.destroy();
message.error('请勿频繁点击')
return
}
prohibitClick.value = true;
if (props.edit) { if (props.edit) {
editInvistText() editInvistText()
} else { } else {
@@ -289,10 +297,12 @@ export default {
ctx.emit("changeData", false); ctx.emit("changeData", false);
message.destroy(); message.destroy();
message.success("创建测评成功"); message.success("创建测评成功");
prohibitClick.value = false;
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("创建测评失败"); message.error("创建测评失败");
prohibitClick.value = false;
}); });
} }
//创建测评信息 //创建测评信息
@@ -326,10 +336,12 @@ export default {
ctx.emit("changeData", false); ctx.emit("changeData", false);
message.destroy(); message.destroy();
message.success("创建测评成功"); message.success("创建测评成功");
prohibitClick.value = false;
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error("创建测评失败"); message.error("创建测评失败");
prohibitClick.value = false;
}); });
}; };

View File

@@ -255,9 +255,10 @@ export default {
}; };
const resetForm = () => { const resetForm = () => {
//formRef.value.resetFields(); // formRef.value.resetFields();
formState.workName = ''
formState.workRequirement = ''
formState.choosedTime = []
}; };
const handleValidate = (...args) => { const handleValidate = (...args) => {
@@ -299,14 +300,28 @@ export default {
resetForm(); resetForm();
}; };
const closeDrawer2 = () => { const closeDrawer2 = () => {
ctx.emit("update:edit", false); formState.choosedTime = "";
ctx.emit("update:addhomeworkVisible", false); ctx.emit("update:addhomeworkVisible", false);
ctx.emit("update:edit", false);
ctx.emit("update:EditWorkId", state.EditWorkId);
ctx.emit("update:workName", formState.workName);
console.log("state.EditWorkId==============", state.workName);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
fileList.value = [];
state.workEnclosureAddress = "";
resetForm(); resetForm();
}; };
// 重置表单选项
const afterVisibleChange = () => { const afterVisibleChange = () => {
console.log('11223344', props.EditWorkId)
if (props.EditWorkId > 0) { if (props.EditWorkId > 0) {
state.EditWorkId = props.EditWorkId; state.EditWorkId = props.EditWorkId;
queryWork(); queryWork();
}else{
formRef.value.resetFields();
resetForm();
} }
}; };

View File

@@ -21,24 +21,24 @@
<div class="main_items"> <div class="main_items">
<div class="mi_ipts"> <div class="mi_ipts">
<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" v-model:value="inputV1"
style="width: 240px; height: 40px; border-radius: 8px" style="width: 240px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称" placeholder="请输入课程名称"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> </div>
<div class="mii_ipt"> <div class="mii_ipt">
<div class="ipt_name">内容分类</div> <div class="ipt_name">课程分类</div>
<div class="select"> <div class="select">
<a-select <a-select
v-model:value="selectV" v-model:value="selectV"
dropdownClassName="dropdown-style" dropdownClassName="dropdown-style"
style="width: 240px" style="width: 240px"
placeholder="请选择" placeholder="请选择课程分类"
:options="options1" :options="options1"
allowClear allowClear
showSearch showSearch
@@ -209,7 +209,7 @@ export default {
}, },
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
inputV1: "", inputV1: null,
options1: [ options1: [
{ {
value: "微课", value: "微课",
@@ -223,7 +223,7 @@ export default {
time: undefined, time: undefined,
onlineClassesId: null, onlineClassesId: null,
onlineName: "", onlineName: "",
selectV: "", selectV: null,
selectedRowKeys: [], selectedRowKeys: [],
tableData: [], tableData: [],
addOnlineList: [], addOnlineList: [],
@@ -239,7 +239,8 @@ export default {
state.choicecourse = true; state.choicecourse = true;
ctx.emit("update:addonlineVisible", false); ctx.emit("update:addonlineVisible", false);
ctx.emit("update:edit", false); ctx.emit("update:edit", false);
state.inputV1 = ""; state.inputV1 = null;
state.selectV = null;
state.selectedRowKeys = []; state.selectedRowKeys = [];
state.addOnlineList = []; state.addOnlineList = [];
state.currentPage = 1; state.currentPage = 1;
@@ -258,7 +259,7 @@ export default {
dataIndex: "num", dataIndex: "num",
key: "num", key: "num",
width: "80px", width: "80px",
align: "left", align: "center",
}, },
{ {
title: "名称", title: "名称",
@@ -266,9 +267,10 @@ export default {
key: "name", key: "name",
width: "100px", width: "100px",
align: "center", align: "center",
ellipsis: true,
}, },
{ {
title: "内容分类", title: "课程分类",
dataIndex: "contenttype", dataIndex: "contenttype",
key: "contenttype", key: "contenttype",
width: "80px", width: "80px",
@@ -539,17 +541,13 @@ export default {
}) })
.then(() => { .then(() => {
message.destroy(); message.destroy();
message.success( message.success(`${props.edit ? "编辑" : "新增"}任务成功`);
`${props.edit ? "编辑" : "新增"}任务成功`
);
ctx.emit("changeData", false); ctx.emit("changeData", false);
closeDrawer(); closeDrawer();
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
message.error( message.error(`${props.edit ? "编辑" : "新增"}任务失败`);
`${props.edit ? "编辑" : "新增"}任务失败`
);
}); });
}); });
} }
@@ -583,7 +581,7 @@ export default {
}; };
//搜索在线列表 //搜索在线列表
const searchList = () => { const searchList = () => {
if (state.inputV1 !== "" || state.selectV !== "") { if (state.inputV1 || state.selectV) {
getAllOnlineText(); getAllOnlineText();
} else { } else {
resetOnline(); resetOnline();
@@ -591,8 +589,8 @@ export default {
}; };
//重置在线信息 //重置在线信息
const resetOnline = () => { const resetOnline = () => {
state.inputV1 = ""; state.inputV1 = null;
state.selectV = ""; state.selectV = null;
state.selectedRowKeys = []; state.selectedRowKeys = [];
state.addOnlineList = []; state.addOnlineList = [];
state.currentPage = 1; state.currentPage = 1;
@@ -763,6 +761,7 @@ export default {
} }
.ant-table-selection-column { .ant-table-selection-column {
padding: 0px !important; padding: 0px !important;
padding-left: 5px !important;
} }
.ant-table-thead > tr > th { .ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1); background-color: rgba(239, 244, 252, 1);

View File

@@ -580,6 +580,7 @@ export default {
// state.addLoading = true; // state.addLoading = true;
queryExaminationDetailById({ examinationId: props.EditTestId }) queryExaminationDetailById({ examinationId: props.EditTestId })
.then((res) => { .then((res) => {
console.log("获取编辑考试信息", res);
formState.examinationName = res.data.data.examinationName; formState.examinationName = res.data.data.examinationName;
formState.workRequirement = res.data.data.workRequirement; formState.workRequirement = res.data.data.workRequirement;
formState.examinationDuration = res.data.data.examinationDuration; formState.examinationDuration = res.data.data.examinationDuration;
@@ -594,6 +595,9 @@ export default {
formState.showAnswers = Number(res.data.data.showAnswers) || 1; formState.showAnswers = Number(res.data.data.showAnswers) || 1;
formState.papaerName = res.data.data.examinationTestName; formState.papaerName = res.data.data.examinationTestName;
state.paperName = res.data.data.examinationTestName; state.paperName = res.data.data.examinationTestName;
// state.paperId=
state.paperId = res.data.data.examinationTestId;
state.paperName = res.data.data.examinationTestName;
if ( if (
res.data.data.examinationEndTime && res.data.data.examinationEndTime &&
res.data.data.examinationStartTime res.data.data.examinationStartTime
@@ -658,7 +662,7 @@ export default {
updateExamination(obj) updateExamination(obj)
.then(async (res) => { .then(async (res) => {
await updateTask(res); await updateTask(res);
closeDrawer(); // closeDrawer();
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
@@ -669,7 +673,7 @@ export default {
createExamination(obj) createExamination(obj)
.then(async (res) => { .then(async (res) => {
await updateTask(res); await updateTask(res);
closeDrawer(); // closeDrawer();
}) })
.catch(() => { .catch(() => {
message.destroy(); message.destroy();
@@ -694,7 +698,8 @@ export default {
}; };
RouterEditTask(editObj1) RouterEditTask(editObj1)
.then(() => { .then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`); console.log("props.edit", props.edit);
message.success(`${props.edit ? "编辑" : "新增"}任务成功`);
ctx.emit("changeData", false); ctx.emit("changeData", false);
state.addLoading = false; state.addLoading = false;
closeDrawer(); closeDrawer();
@@ -715,8 +720,9 @@ export default {
// 新增编辑或新增项目 // 新增编辑或新增项目
ProjectEditTask(editObj) ProjectEditTask(editObj)
.then(() => { .then(() => {
//message.success(`${props.EditTestId ? "编辑" : "新增"}阶段任务成功`); message.success(`${props.edit ? "编辑" : "新增"}任务成功`);
ctx.emit("changeData", false); ctx.emit("changeData", false);
closeDrawer();
}) })
.catch(() => { .catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`); //message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
@@ -732,8 +738,9 @@ export default {
type: 5, type: 5,
}) })
.then(() => { .then(() => {
//message.success( `${props.EditTestId ? "编辑" : "新增"}阶段任务成功`); message.success(`${props.edit ? "编辑" : "新增"}任务成功`);
ctx.emit("changeData", false); ctx.emit("changeData", false);
closeDrawer();
}) })
.catch(() => { .catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`); //message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);

View File

@@ -1,54 +1,57 @@
<template> <template>
<a-drawer <a-drawer
:visible="EvalListVisible" :visible="EvalListVisible"
class="drawerStyle addonlineDrawer" class="drawerStyle addonlineDrawer"
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">选择测评</div> <div 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"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="contentMain"> <div class="contentMain">
<div class="main_items"> <div class="main_items">
<div class="mi_ipts"> <div class="mi_ipts">
<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" v-model:value="inputV1"
style="width: 240px; height: 40px; border-radius: 8px" style="width: 240px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称" placeholder="请输入项目名称"
/> />
</div>
</div>
</div>
<div class="mi_btns">
<div class="btn btn1" @click="searchList">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btn btn2" @click="resetData">
<div class="search"></div>
<div class="btnText">重置</div>
</div> </div>
</div> </div>
</div> </div>
<div class="main_table"> <div class="mi_btns">
<a-table <div class="btn btn1" @click="searchList">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btn btn2" @click="resetData">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
<div class="main_table">
<a-table
style="border: 1px solid #f2f6fe" style="border: 1px solid #f2f6fe"
:columns="columns" :columns="columns"
:data-source="tableData" :data-source="tableData"
:loading="tableDataTotal === -1 ? true : false" :loading="tableDataTotal === -1 ? true : false"
:pagination="false" :pagination="false"
:row-selection="{ selectedRowKeys:selectedRowKeys,onChange:onSelectChange}" :row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
/> />
<div class="pa"> <div class="pa">
<a-pagination <a-pagination
@@ -63,116 +66,116 @@
@change="changePagination" @change="changePagination"
/> />
</div> </div>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="checkFinish">确定</button>
</div> </div>
</div> </div>
</a-drawer> <div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="checkFinish">确定</button>
</div>
</div>
</a-drawer>
</template> </template>
<script> <script>
import { reactive, toRefs } from "vue"; import { reactive, toRefs } from "vue";
import * as api from "../../api/indexEval"; import * as api from "../../api/indexEval";
export default { export default {
name: "EvList", name: "EvList",
props: { props: {
EvalListVisible: { EvalListVisible: {
type: Boolean, type: Boolean,
default: false, default: false,
},
evaluationTypeId: {
type: Number,
default: null,
},
evaluationTypeName:{
type: String,
default: "",
},
}, },
setup(props, ctx) { evaluationTypeId: {
const state = reactive({ type: Number,
currentPage: 1, default: null,
tableDataTotal: 0, },
pageSize: 10, evaluationTypeName: {
inputV1:"", type: String,
evaluationTypeId:null, default: "",
evaluationTypeName:"", },
tableData: [], },
selectedRowKeys:[], setup(props, ctx) {
evListData:{}, const state = reactive({
columns:[ currentPage: 1,
{ tableDataTotal: 0,
title: "课程编号", pageSize: 10,
width: "20%", inputV1: "",
dataIndex: "quiz_code", evaluationTypeId: null,
key: "code", evaluationTypeName: "",
align: "center", tableData: [],
}, selectedRowKeys: [],
{ evListData: {},
title: "课程名称", columns: [
width: "20%", {
dataIndex: "title", title: "课程编号",
key: "title", width: "20%",
align: "center", dataIndex: "quiz_code",
}, key: "code",
{ align: "center",
title: "备注", },
width: "13%", {
dataIndex: "theme_desc", title: "课程名称",
key: "content", width: "20%",
align: "center", dataIndex: "title",
maxWidth: "13%", key: "title",
overflow: 'hidden', align: "center",
whiteSpace: 'nowrap', },
textOverflow: 'ellipsis', {
}, title: "备注",
{ width: "13%",
title: "状态", dataIndex: "theme_desc",
width: "13%", key: "content",
dataIndex: "status", align: "center",
key: "status", maxWidth: "13%",
align: "center", overflow: "hidden",
}, whiteSpace: "nowrap",
{ textOverflow: "ellipsis",
title: "价格", },
width: "13%", {
dataIndex: "quiz_price", title: "状态",
key: "price", width: "13%",
align: "center", dataIndex: "status",
}, key: "status",
{ align: "center",
title: "可答题人数", },
width: "20%", {
dataIndex: "quiz_range", title: "价格",
key: "time", width: "13%",
align: "center", dataIndex: "quiz_price",
}, key: "price",
] align: "center",
}); },
const onSelectChange = (selectedRowKeys,selectedRows)=> { {
if(selectedRowKeys.length>1){ title: "可答题人数",
return width: "20%",
dataIndex: "quiz_range",
key: "time",
align: "center",
},
],
});
const onSelectChange = (selectedRowKeys, selectedRows) => {
if (selectedRowKeys.length > 1) {
return;
} }
state.selectedRowKeys = selectedRowKeys state.selectedRowKeys = selectedRowKeys;
state.evListData = selectedRows[0] ? selectedRows[0] : {} state.evListData = selectedRows[0] ? selectedRows[0] : {};
} };
const closeDrawer = () => { const closeDrawer = () => {
state.selectedRowKeys = [] state.selectedRowKeys = [];
state.evListData = {} state.evListData = {};
state.inputV1 = "" state.inputV1 = "";
ctx.emit("update:EvalListVisible", false); ctx.emit("update:EvalListVisible", false);
}; };
const afterVisibleChange = (bol) => { const afterVisibleChange = (bol) => {
if ( bol == true ) { if (bol == true) {
getAllEvalText(); getAllEvalText();
} }
}; };
const checkFinish =() =>{ const checkFinish = () => {
ctx.emit("getEvListData", state.evListData); ctx.emit("getEvListData", state.evListData);
closeDrawer(); closeDrawer();
} };
const changePagination = (page) => { const changePagination = (page) => {
state.currentPage = page; state.currentPage = page;
getAllEvalText(); getAllEvalText();
@@ -182,73 +185,71 @@ import { reactive, toRefs } from "vue";
let data = tableData; let data = tableData;
let array = []; let array = [];
let arrayKey = []; let arrayKey = [];
if(props.evaluationTypeName != ""){ if (props.evaluationTypeName != "") {
data.map((value,index) => { data.map((value, index) => {
let obj = { let obj = {
key:index+1, key: index + 1,
status:value.status, status: value.status,
quiz_code:value.quiz_code, quiz_code: value.quiz_code,
quiz_kid:value.quiz_kid, quiz_kid: value.quiz_kid,
title:value.title, title: value.title,
theme_desc:value.theme_desc, theme_desc: value.theme_desc,
quiz_price:value.quiz_price, quiz_price: value.quiz_price,
quiz_range:value.quiz_range, quiz_range: value.quiz_range,
}; };
array.push(obj) array.push(obj);
if(obj.title == props.evaluationTypeName){ if (obj.title == props.evaluationTypeName) {
arrayKey.push(obj.key); arrayKey.push(obj.key);
} }
}); });
state.tableData = array; state.tableData = array;
state.selectedRowKeys = arrayKey; state.selectedRowKeys = arrayKey;
} } else {
else{ data.map((value, index) => {
data.map((value,index) => { let obj = {
let obj = { key: index + 1,
key:index+1, status: value.status,
status:value.status, quiz_code: value.quiz_code,
quiz_code:value.quiz_code, quiz_kid: value.quiz_kid,
quiz_kid:value.quiz_kid, title: value.title,
title:value.title, theme_desc: value.theme_desc,
theme_desc:value.theme_desc, quiz_price: value.quiz_price,
quiz_price:value.quiz_price, quiz_range: value.quiz_range,
quiz_range:value.quiz_range, };
}; array.push(obj);
array.push(obj); });
}); state.tableData = array;
state.tableData = array;
} }
}; };
//获取测评列表 //获取测评列表
const getAllEvalText = ()=> { const getAllEvalText = () => {
let objael = { let objael = {
"keyword": state.inputV1, keyword: state.inputV1,
"user_id": "965341999643234304", user_id: "965341999643234304",
} };
api api
.choiceEvaluation(objael) .choiceEvaluation(objael)
.then((res) => { .then((res) => {
getTableDataList(res.data.data) getTableDataList(res.data.data);
}) })
.catch(()=>{ .catch(() => {});
}) };
}
//搜索测评列表 //搜索测评列表
const searchList = ()=> { const searchList = () => {
if(state.inputV1 !== ''){ if (state.inputV1 !== "") {
getAllEvalText() getAllEvalText();
}else { } else {
resetData() resetData();
} }
} };
//重置测评列表 //重置测评列表
const resetData = ()=> { const resetData = () => {
state.currentPage = 1; state.currentPage = 1;
state.selectedRowKeys = []; state.selectedRowKeys = [];
state.evListData = {} state.evListData = {};
getAllEvalText(); getAllEvalText();
} };
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
@@ -260,206 +261,206 @@ import { reactive, toRefs } from "vue";
searchList, searchList,
resetData, resetData,
}; };
}, },
}; };
</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;
} }
.addonlineDrawer { .addonlineDrawer {
.drawerMain { .drawerMain {
.header { .header {
height: 73px; height: 73px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
flex-shrink: 0; flex-shrink: 0;
.headerTitle { .headerTitle {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
line-height: 25px; line-height: 25px;
margin-left: 24px; margin-left: 24px;
} }
} }
.contentMain { .contentMain {
padding-right: 12px; padding-right: 12px;
.main_items { .main_items {
display: flex; display: flex;
margin-bottom: 12px; margin-bottom: 12px;
flex-wrap: wrap; flex-wrap: wrap;
.mi_ipts { .mi_ipts {
display: flex; display: flex;
margin-bottom: 20px; margin-bottom: 20px;
.mii_ipt { .mii_ipt {
display: flex;
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.mi_btns {
display: flex;
margin-left: 38px;
margin-bottom: 20px;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.main_notice {
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 32px; margin-right: 24px;
height: 40px; .ipt_name {
background-color: #e9f6fe; white-space: nowrap;
.mntc_left {
display: flex;
align-items: center;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
} }
} }
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
} }
.mi_btns {
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex; display: flex;
align-items: center; margin-left: 38px;
justify-content: center; margin-bottom: 20px;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16); cursor: pointer;
.btn1 { .btn {
width: 100px; padding: 0px 26px 0px 26px;
height: 40px; height: 38px;
border: 1px solid #4ea6ff;
border-radius: 8px; border-radius: 8px;
color: #4ea6ff; border: 1px solid rgba(64, 158, 255, 1);
background-color: #fff; display: flex;
cursor: pointer; align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
} }
.btn2 { .btn2 {
cursor: pointer; background: rgb(255, 255, 255);
width: 100px; .search {
height: 40px; width: 15px;
background: #4ea6ff; height: 17px;
border-radius: 8px; background-image: url("@/assets/images/coursewareManage/reset1.png");
border: 0; }
margin-left: 15px; .btnText {
color: #fff; color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
} }
} }
} }
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
}
}
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 5px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
} }
</style> }
</style>

View File

@@ -11,11 +11,11 @@
</span> </span>
</div> </div>
<template v-if="noticeChecked"> <template v-if="noticeChecked">
<p>公告内容</p> <p>当前公告内容</p>
<!-- 预览 --> <!-- 预览 -->
<template v-if="!editOn"> <template v-if="!editOn">
<div class="txt-content"> <div class="txt-content">
{{ noticeContent ? noticeContent : "暂无公告" }} {{ noticeContent1 ? noticeContent1 : "暂无公告" }}
</div> </div>
<div class="btn-content"> <div class="btn-content">
<a-button type="primary" @click="handleEdit">编辑</a-button> <a-button type="primary" @click="handleEdit">编辑</a-button>
@@ -23,13 +23,12 @@
</template> </template>
<!-- 编辑 --> <!-- 编辑 -->
<template v-if="editOn"> <template v-if="editOn">
<div class="txt-contain">
<span>预览</span>
<div class="txt-content"> <div class="txt-content">
{{ noticeContent }} {{ noticeContent1 ? noticeContent1 : "暂无公告" }}
</div>
</div> </div>
<p>编辑</p> <p>编辑新公告</p>
<a-textarea <a-textarea
v-model:value="noticeContent" v-model:value="noticeContent"
:maxlength="150" :maxlength="150"
@@ -65,14 +64,15 @@ export default {
const state = reactive({ const state = reactive({
noticeChecked: true, noticeChecked: true,
projectInfo: {}, projectInfo: {},
noticeContent1: "",
noticeContent: "", noticeContent: "",
editOn: false, editOn: false,
}); });
const getTaskInfo = () => { const getTaskInfo = () => {
getTask({ projectId: props.projectId }).then((res) => { getTask({ projectId: props.projectId }).then((res) => {
console.log("公告获取项目", res.data.data.projectInfo); console.log("公告获取项目", res.data.data.projectInfo);
state.projectInfo = res.data.data.projectInfo; state.projectInfo = res.data.data.projectInfo;
state.noticeContent1 = state.projectInfo.notice;
state.noticeContent = state.projectInfo.notice; state.noticeContent = state.projectInfo.notice;
}); });
}; };
@@ -104,7 +104,7 @@ export default {
if (res.data.code === 200) { if (res.data.code === 200) {
message.destroy(); message.destroy();
message.success("发布成功", res); message.success("发布成功", res);
state.noticeContent = res.data.data.notice; state.noticeContent1 = res.data.data.notice==""?"暂无公告":res.data.data.notice;
handleCancel(); handleCancel();
emitter.emit("setNotice", false); emitter.emit("setNotice", false);
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -319,6 +319,7 @@
'background-image': 'url(' + item.dictValue + ')', 'background-image': 'url(' + item.dictValue + ')',
display: index >= 5 ? 'none' : 'flex', display: index >= 5 ? 'none' : 'flex',
}" }"
style="background-size: 100% 100%"
> >
<!-- <img class="im" :src="item.source" /> --> <!-- <img class="im" :src="item.source" /> -->
</div> </div>
@@ -857,8 +858,8 @@ export default {
api api
.getLearnCount(router.id) .getLearnCount(router.id)
.then((res) => { .then((res) => {
console.log("获取关卡、任务、学员统计数据", res.data);
if (res.status === 200) { if (res.status === 200) {
// console.log("获取关卡、任务、学员统计数据", res.data);
state.routeStudentsNum = res.data.students; state.routeStudentsNum = res.data.students;
state.routeChapters = res.data.chapters; state.routeChapters = res.data.chapters;
state.routeTasks = res.data.tasks; state.routeTasks = res.data.tasks;
@@ -1045,18 +1046,14 @@ export default {
? "已结束" ? "已结束"
: "-", : "-",
creater: value.createName ? value.createName : "-", creater: value.createName ? value.createName : "-",
pubtime: value.publishTime pubtime: value.publishTime ? value.publishTime : "-",
? value.publishTime cretime: value.createTime ? value.createTime : "-",
: "-",
cretime: value.createTime
? value.createTime
: "-",
remark: value.remark ? value.remark : "-", remark: value.remark ? value.remark : "-",
}; };
array.push(obj); array.push(obj);
}); });
state.tableData = array; state.tableData = array;
console.log(array,tableData) console.log(array, tableData);
}; };
const tableDataFunc = () => { const tableDataFunc = () => {

View File

@@ -455,7 +455,9 @@
<div class="iconame"> <div class="iconame">
{{ checkType(item.type) }} {{ checkType(item.type) }}
</div> </div>
<div class="icontext">{{ item.name }}</div> <div class="icontext" :title="item.name">
{{ item.name }}
</div>
</div> </div>
</div> </div>
<div class="type"> <div class="type">
@@ -466,7 +468,7 @@
<div class="time"> <div class="time">
<div class="timetext">开始时间</div> <div class="timetext">开始时间</div>
<div class="timetext"> <div class="timetext">
{{ item.startTime !== null ? item.startTime : "" }} {{ item.startTime !== null ? item.startTime : "-" }}
</div> </div>
</div> </div>
<div class="progress"> <div class="progress">
@@ -692,63 +694,78 @@
</div> </div>
<div class="onemain clearfix"> <div class="onemain clearfix">
<div class="checkcon"> <div class="checkcon">
<input <a-checkbox
class="in"
:disabled="number"
v-model:checked="previewSelect"
></a-checkbox>
<!-- <input
type="checkbox" type="checkbox"
name="cb1" name="cb1"
value="yulan" v-model: ="previewSelect"
class="in" class="in"
/> :disabled="number"
/> -->
<span class="yulan">预览其他关卡</span><br /> <span class="yulan">预览其他关卡</span><br />
<div style="width: 10px; height: 4px"></div> <div style="width: 10px; height: 4px"></div>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span class="yulan2">学员可预览第</span> <span class="yulan2">学员可预览第</span>
<span style="color: #4ea6ff" v-show="number">1</span> <span style="color: #4ea6ff" v-show="number">{{
previewStartNum
}}</span>
<a-input-number <a-input-number
v-model:value="nubvalue" v-model:value="previewStartNum"
v-show="inputbox" v-show="inputbox"
:controls="false" :controls="false"
:autofocus="true" :autofocus="true"
:min="1" :min="0"
/> />
<span>-</span <span>-</span
><span style="color: #4ea6ff" v-show="number">4</span> ><span style="color: #4ea6ff" v-show="number">{{
previewEndNum
}}</span>
<a-input-number <a-input-number
v-model:value="nubvalue1" v-model:value="previewEndNum"
v-show="inputbox" v-show="inputbox"
:controls="false" :controls="false"
:autofocus="true" :autofocus="true"
:min="1" :min="0"
/> />
<span>关内容</span> <span>关内容</span>
</div> </div>
</div> </div>
<div class="checkcon" style="margin-top: 20px"> <div class="checkcon" style="margin-top: 20px">
<input <!-- <input
type="checkbox" type="checkbox"
name="cb1" name="cb1"
value="xuexi" v-model:value="studySelect"
class="in" class="in"
/> :disabled="number"
/> -->
<span class="yulan">学习其他关卡</span><br /> <span class="yulan">学习其他关卡</span><br />
<div style="width: 10px; height: 4px"></div> <div style="width: 10px; height: 4px"></div>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span class="yulan2">学员可预览</span> <span class="yulan2">学员可学习</span>
<span style="color: #4ea6ff" v-show="number">1</span> <span style="color: #4ea6ff" v-show="number">{{
studyStartNum
}}</span>
<a-input-number <a-input-number
v-model:value="nubvalue2" v-model:value="studyStartNum"
v-show="inputbox" v-show="inputbox"
:controls="false" :controls="false"
:autofocus="true" :autofocus="true"
:min="1" :min="0"
/> />
<span>-</span <span>-</span
><span style="color: #4ea6ff" v-show="number">4</span> ><span style="color: #4ea6ff" v-show="number">{{
studyEndNum
}}</span>
<a-input-number <a-input-number
v-model:value="nubvalue3" v-model:value="studyEndNum"
v-show="inputbox" v-show="inputbox"
:controls="false" :controls="false"
:autofocus="true" :autofocus="true"
:min="1" :min="0"
/> />
<span>关内容</span> <span>关内容</span>
</div> </div>
@@ -1459,6 +1476,11 @@ export default {
name: "关卡二xx", name: "关卡二xx",
}, },
], ],
previewStartNum: 0,
previewEndNum: 0,
studyStartNum: 0,
studyEndNum: 0,
}); });
const tableDataFunc = () => { const tableDataFunc = () => {
@@ -3738,7 +3760,7 @@ export default {
//height: 71px; //height: 71px;
margin-left: 12px; margin-left: 12px;
margin-right: 50px; margin-right: 50px;
width: 120px;
.iconame { .iconame {
//position: absolute; //position: absolute;
color: #4f5156; color: #4f5156;
@@ -3751,7 +3773,10 @@ export default {
color: #999ba3; color: #999ba3;
font-size: 14px; font-size: 14px;
margin-left: 12px; margin-left: 12px;
width: 83px; width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
@@ -3787,7 +3812,7 @@ export default {
//height: 71px; //height: 71px;
flex-grow: 1; flex-grow: 1;
margin-right: 50px; margin-right: 50px;
width: 100px;
.timetext { .timetext {
font-size: 14px; font-size: 14px;
color: #999ba3; color: #999ba3;

View File

@@ -168,6 +168,15 @@
</div> </div>
</div> </div>
</div> </div>
<div
class="aeLoading"
:style="{ display: addLoading ? 'flex' : 'none' }"
>
<a-spin
:spinning="addLoading"
:tip="updateChapterID ? '修改中...' : '添加中...'"
/>
</div>
</a-modal> </a-modal>
<div class="right" :style="{ display: gqxy_hs ? 'block' : 'none' }"> <div class="right" :style="{ display: gqxy_hs ? 'block' : 'none' }">
<div class="addhead"> <div class="addhead">
@@ -1202,6 +1211,8 @@ export default {
curLevel: null, //选择移动到的关卡名称 curLevel: null, //选择移动到的关卡名称
deleteType: null, //批量删除学员/任务 1任务 2学员 deleteType: null, //批量删除学员/任务 1任务 2学员
addLoading: false, //添加编辑关卡动画
}); });
const showModal = (element) => { const showModal = (element) => {
@@ -1223,6 +1234,7 @@ export default {
//新建关卡 //新建关卡
const editChapter = () => { const editChapter = () => {
if (!state.value1) return message.warning("请输入关卡名称"); if (!state.value1) return message.warning("请输入关卡名称");
state.addLoading = true;
if (state.updateChapterID) { if (state.updateChapterID) {
let obj = { let obj = {
name: state.value1, name: state.value1,
@@ -1235,6 +1247,7 @@ export default {
.then((res) => { .then((res) => {
console.log("修改成功", res); console.log("修改成功", res);
message.success("修改成功"); message.success("修改成功");
state.addLoading = false;
getDetail(); getDetail();
closeModal(); closeModal();
}) })
@@ -1262,6 +1275,7 @@ export default {
// state.createLoading = false; // state.createLoading = false;
//state.currentPage = 1; //state.currentPage = 1;
// getLearnPath(); // getLearnPath();
state.addLoading = false;
getDetail(); getDetail();
closeModal(); closeModal();
}) })
@@ -1421,7 +1435,7 @@ export default {
//给level赋初始值 //给level赋初始值
state.level = res.data.data.chapterList; state.level = res.data.data.chapterList;
state.styTitle = res.data.data.routerInfo.name; state.styTitle = res.data.data.routerInfo.name;
state.creTime = res.data.data.routerInfo.createTime ; state.creTime = res.data.data.routerInfo.createTime;
state.picUrl = res.data.data.routerInfo.picUrl; state.picUrl = res.data.data.routerInfo.picUrl;
//增加两个字段 //增加两个字段
state.level.forEach((item) => { state.level.forEach((item) => {

View File

@@ -2,7 +2,7 @@
<div class="addwrapper"> <div class="addwrapper">
<div class="addhead"> <div class="addhead">
<div class="leftimg"> <div class="leftimg">
<img class="img" src="../../assets/images/projectadd/picture.png" /> <img class="img" :src="projectInfo.picUrl" />
</div> </div>
<div class="imgfor"> <div class="imgfor">
<div class="forz">{{ projectInfo.name || "-" }}</div> <div class="forz">{{ projectInfo.name || "-" }}</div>
@@ -151,17 +151,16 @@
</div> </div>
</div> </div>
<div class="type"> <div class="type">
<div <div :class="item.classify ? 'typename1' : 'typename'">
:class=" <span v-if="item.classify">必修</span>
item.classify == '必修' ? 'typename1' : 'typename' <span v-else>选修</span>
"
>
{{ item.classify }}
</div> </div>
</div> </div>
<div class="time"> <div class="time">
<div class="timetext">开始时间</div> <div class="timetext">开始时间</div>
<div class="timetext">{{ item.beginTime }}</div> <div class="timetext">
{{ item.beginTime ? item.beginTime : "-" }}
</div>
</div> </div>
<div class="progress"> <div class="progress">
<div class="progresstext"> <div class="progresstext">
@@ -311,9 +310,9 @@
/> />
<div class="btnarea"> <div class="btnarea">
<div>&nbsp;</div> <div>&nbsp;</div>
<div class="area_btn"> <div class="area_btn" @click="addNotice">
<div class="pub"></div> <div class="pub"></div>
<div class="btnText" @click="addNotice">发布</div> <div class="btnText">发布</div>
</div> </div>
</div> </div>
</div> </div>
@@ -498,7 +497,7 @@
<div class="setc_main"> <div class="setc_main">
<img <img
style="width: 151px; height: 84px" style="width: 151px; height: 84px"
:src="picUrl" :src="projectInfo.picUrl"
alt="" alt=""
/> />
</div> </div>
@@ -582,12 +581,12 @@
<div class="box"></div> <div class="box"></div>
<div class="onetitle">上传共享文档</div> <div class="onetitle">上传共享文档</div>
<div class="oneedi"> <div class="oneedi">
<a-switch v-model:checked="docChecked"></a-switch> <a-switch v-model:checked="attachSwitch" @change="checkedClose"></a-switch>
</div> </div>
</div> </div>
<div class="btnbox" style="margin: 20px"> <div class="btnbox" style="margin: 20px">
<a-upload <a-upload
v-if="docChecked == true" v-if="attachSwitch == true"
v-model:file-list="fileList" v-model:file-list="fileList"
name="file" name="file"
action="/manageApi/file/upload" action="/manageApi/file/upload"
@@ -605,7 +604,7 @@
/> />
</a-upload> </a-upload>
<div <div
v-if="docChecked == true" v-if="attachSwitch == true"
class="btnbox" class="btnbox"
style="margin: 20px" style="margin: 20px"
> >
@@ -834,6 +833,8 @@ export default defineComponent({
seven1: null, seven1: null,
seven2: null, seven2: null,
edit: true, edit: true,
fileList:[],
attachSwitch:true,
// 共享文档列表 // 共享文档列表
docList: [ docList: [
{ {
@@ -937,34 +938,35 @@ export default defineComponent({
state.taskSyllabus = []; state.taskSyllabus = [];
console.log(res); console.log(res);
state.projectInfo.name = res.data.data.projectTemplateInfo.name; state.projectInfo.name = res.data.data.projectTemplateInfo.name;
state.projectInfo.beginTime = state.projectInfo.beginTime = res.data.data.projectTemplateInfo.beginTime;
res.data.data.projectTemplateInfo.beginTime;
state.projectInfo.endTime = res.data.data.projectTemplateInfo.endTime; state.projectInfo.endTime = res.data.data.projectTemplateInfo.endTime;
state.projectInfo.manager = res.data.data.projectTemplateInfo.manager; state.projectInfo.manager = res.data.data.projectTemplateInfo.manager;
state.projectInfo.notice = res.data.data.projectTemplateInfo.notice; state.projectInfo.notice = res.data.data.projectTemplateInfo.notice;
state.projectInfo.sourceBelongId = state.projectInfo.sourceBelongId = res.data.data.projectTemplateInfo.sourceBelongId;
res.data.data.projectTemplateInfo.sourceBelongId; state.projectInfo.managerId = res.data.data.projectTemplateInfo.managerId;
state.projectInfo.managerId =
res.data.data.projectTemplateInfo.managerId;
state.projectInfo.remark = res.data.data.projectTemplateInfo.remark; state.projectInfo.remark = res.data.data.projectTemplateInfo.remark;
state.projectInfo.courseSyncFlag = state.projectInfo.courseSyncFlag = res.data.data.projectTemplateInfo.courseSyncFlag;
res.data.data.projectTemplateInfo.courseSyncFlag;
state.projectInfo.level = res.data.data.projectTemplateInfo.level; state.projectInfo.level = res.data.data.projectTemplateInfo.level;
state.projectInfo.systemId = state.projectInfo.systemId = res.data.data.projectTemplateInfo.systemId;
res.data.data.projectTemplateInfo.systemId;
state.projectInfo.boeFlag = res.data.data.projectTemplateInfo.boeFlag; state.projectInfo.boeFlag = res.data.data.projectTemplateInfo.boeFlag;
state.projectInfo.noticeFlag = state.projectInfo.noticeFlag = res.data.data.projectTemplateInfo.noticeFlag;
res.data.data.projectTemplateInfo.noticeFlag;
state.projectInfo.remark = res.data.data.projectTemplateInfo.remark; state.projectInfo.remark = res.data.data.projectTemplateInfo.remark;
state.projectInfo.status = res.data.data.projectTemplateInfo.status; state.projectInfo.status = res.data.data.projectTemplateInfo.status;
state.projectInfo.picUrl = res.data.data.projectTemplateInfo.picUrl; state.projectInfo.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.projectInfo.attach = res.data.data.projectTemplateInfo.attach; state.projectInfo.attach = res.data.data.projectTemplateInfo.attach;
state.projectInfo.category = res.data.data.projectTemplateInfo.category; state.projectInfo.category = res.data.data.projectTemplateInfo.category;
try{
state.fileList = JSON.parse(res.data.data.projectTemplateInfo.attach);
}catch{
state.fileList = [];
}
state.attachSwitch = res.data.data.projectTemplateInfo.attachSwitch == 1 ? true : false
let data = res.data.data.stageList; let data = res.data.data.stageList;
console.log("data=====", data); console.log("data=====", data);
for (let i in data) { for (let i in data) {
console.log("what ------ > ", i, data); console.log("what ------ > ", i, data);
state.taskSyllabus.push({ text: data[i].name, children: [] }); state.taskSyllabus.push({ text: data[i].name?data[i].name:'无阶段任务', children: [] });
for (let j in data[i].taskList) { for (let j in data[i].taskList) {
state.taskSyllabus[i].children.push({ state.taskSyllabus[i].children.push({
course: checkType(data[i].taskList[j].type), course: checkType(data[i].taskList[j].type),
@@ -991,8 +993,6 @@ export default defineComponent({
name: state.projectInfo.name, name: state.projectInfo.name,
category: state.projectInfo.category, category: state.projectInfo.category,
picUrl: state.projectInfo.picUrl, picUrl: state.projectInfo.picUrl,
beginTime: new Date(state.projectInfo.beginTime).getTime(),
endTime: new Date(state.projectInfo.endTime).getTime(),
manager: state.projectInfo.manager, manager: state.projectInfo.manager,
managerId: state.projectInfo.managerId || 0, managerId: state.projectInfo.managerId || 0,
sourceBelongId: state.projectInfo.sourceBelongId, sourceBelongId: state.projectInfo.sourceBelongId,
@@ -1126,6 +1126,7 @@ export default defineComponent({
}); });
}; };
const handleChange2 = ({ file, fileList }) => { const handleChange2 = ({ file, fileList }) => {
console.log(fileList);
let list = []; let list = [];
if (file.status !== "uploading") { if (file.status !== "uploading") {
console.log("上传的list", fileList); console.log("上传的list", fileList);
@@ -1138,8 +1139,6 @@ export default defineComponent({
name: state.projectInfo.name, name: state.projectInfo.name,
category: state.projectInfo.category, category: state.projectInfo.category,
picUrl: state.projectInfo.picUrl, picUrl: state.projectInfo.picUrl,
beginTime: new Date(state.projectInfo.beginTime).getTime()/1000,
endTime: new Date(state.projectInfo.endTime).getTime()/1000,
manager: state.projectInfo.manager, manager: state.projectInfo.manager,
managerId: state.projectInfo.managerId || 0, managerId: state.projectInfo.managerId || 0,
sourceBelongId: state.projectInfo.sourceBelongId, sourceBelongId: state.projectInfo.sourceBelongId,
@@ -1149,19 +1148,17 @@ export default defineComponent({
courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0, courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0,
notice: state.projectInfo.notice, notice: state.projectInfo.notice,
noticeFlag: state.projectInfo.noticeFlag, noticeFlag: state.projectInfo.noticeFlag,
projectTemplateId: Number(localStorage.getItem("projectTemplateId")), projectTemplateId: localStorage.getItem("projectTemplateId"),
remark: state.projectInfo.remark, remark: state.projectInfo.remark,
status: state.projectInfo.status, status: state.projectInfo.status,
attach: str, attach: str,
}) });
//要编辑项目 //要编辑项目
api api
.templateEdit({ .templateEdit({
name: state.projectInfo.name, name: state.projectInfo.name,
category: state.projectInfo.category, category: state.projectInfo.category,
picUrl: state.projectInfo.picUrl, picUrl: state.projectInfo.picUrl,
beginTime: new Date(state.projectInfo.beginTime).getTime(),
endTime: new Date(state.projectInfo.endTime).getTime(),
manager: state.projectInfo.manager, manager: state.projectInfo.manager,
managerId: state.projectInfo.managerId || 0, managerId: state.projectInfo.managerId || 0,
sourceBelongId: state.projectInfo.sourceBelongId, sourceBelongId: state.projectInfo.sourceBelongId,
@@ -1190,6 +1187,27 @@ export default defineComponent({
message.error(`${file.name} 文件上传失败.`); message.error(`${file.name} 文件上传失败.`);
} }
}; };
// 设置上传图片开关
const checkedClose = (data, a) => {
console.log(data, a);
state.attachSwitch = data;
// 更新开关状态
api
.templateEdit({
sourceBelongId: state.projectInfo.sourceBelongId,
projectTemplateId: localStorage.getItem("projectTemplateId"),
attachSwitch: state.attachSwitch?1:-1
})
.then((res) => {
console.log("开关更新成功", res);
})
.catch((err) => {
console.log("开关更新失败", err);
});
};
//设置积分规则 //设置积分规则
const editRule = () => { const editRule = () => {
let obj = { let obj = {
@@ -1270,6 +1288,7 @@ export default defineComponent({
editRule, editRule,
handleChange2, handleChange2,
scoresum, scoresum,
checkedClose
}; };
}, },
}); });
@@ -2060,7 +2079,7 @@ export default defineComponent({
//height: 71px; //height: 71px;
margin-left: 12px; margin-left: 12px;
margin-right: 50px; margin-right: 50px;
width: 120px;
.iconame { .iconame {
//position: absolute; //position: absolute;
color: #4f5156; color: #4f5156;
@@ -2072,7 +2091,10 @@ export default defineComponent({
color: #999ba3; color: #999ba3;
font-size: 14px; font-size: 14px;
margin-left: 12px; margin-left: 12px;
width: 83px; width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
.type { .type {
@@ -2104,6 +2126,7 @@ export default defineComponent({
//height: 71px; //height: 71px;
flex-grow: 1; flex-grow: 1;
margin-right: 50px; margin-right: 50px;
width: 100px;
.timetext { .timetext {
font-size: 14px; font-size: 14px;
color: #999ba3; color: #999ba3;

View File

@@ -823,6 +823,15 @@
</button> </button>
</div> </div>
</div> </div>
<div
class="aeLoading"
:style="{ display: addLoading ? 'flex' : 'none' }"
>
<a-spin
:spinning="addLoading"
:tip="updateStageID ? '修改中...' : '添加中...'"
/>
</div>
</a-modal> </a-modal>
</div> </div>
<!-- 确认添加阶段弹窗 --> <!-- 确认添加阶段弹窗 -->
@@ -1154,6 +1163,8 @@ export default {
deleteStageModal: false, //删除阶段弹窗 deleteStageModal: false, //删除阶段弹窗
unlockModeVisible: false, //切换模式抽屉 unlockModeVisible: false, //切换模式抽屉
addLoading: false, // 添加编辑阶段动画
}); });
console.log("projectId", state.projectId); console.log("projectId", state.projectId);
const selectProjectName = (value, index) => { const selectProjectName = (value, index) => {
@@ -1607,6 +1618,8 @@ export default {
message.destroy(); message.destroy();
return message.warning("请输入阶段名称"); return message.warning("请输入阶段名称");
} }
state.addLoading = true;
if (state.updateStageID) { if (state.updateStageID) {
let obj = { let obj = {
name: state.valuesname, name: state.valuesname,
@@ -1630,6 +1643,7 @@ export default {
(item) => item.id == state.chooseStageId (item) => item.id == state.chooseStageId
); );
getTableData(final.taskList); getTableData(final.taskList);
state.addLoading = false;
}) })
.catch((err) => { .catch((err) => {
console.log("添加阶段失败", err); console.log("添加阶段失败", err);
@@ -1655,6 +1669,7 @@ export default {
(item) => item.id == state.chooseStageId (item) => item.id == state.chooseStageId
); );
getTableData(final.taskList); getTableData(final.taskList);
state.addLoading = false;
}) })
.catch((err) => { .catch((err) => {
console.log("添加阶段失败", err); console.log("添加阶段失败", err);

View File

@@ -17,31 +17,33 @@
@click="showCodeModel2()" @click="showCodeModel2()"
/> />
<div class="line" v-if="action == 1 || action == 0"></div> <div class="line" v-if="action == 1 || action == 0"></div>
<!-- 显示发布图标 -->
<img <img
v-if="action == 1 || action == 0" v-if="action == 2"
class="img2" class="img2"
src="../../assets/images/leveladd/pub.png" src="../../assets/images/leveladd/pub.png"
/> />
<!-- <div class="pub">发布</div> --> <!-- 显示撤回发布图标 -->
<!-- 已发布的显示 --> <img
<div v-if="action == 3"
class="pub" class="img2"
style="width: 28px" src="../../assets/images/leveladd/pub.png"
/>
<!-- 显示审核图标 -->
<img
v-if="action == 0"
class="img2"
src="../../assets/images/project/reviewsubmit.png"
/>
<!-- 显示撤回审核图标 -->
<img
v-if="action == 1" v-if="action == 1"
@click="showBackModal" class="img2"
> src="../../assets/images/project/reviewrecall.png"
{{ act }} />
</div> <!-- <div class="pub">发布</div> -->
<!-- 未发布/草稿的显示 -->
<div
class="pub"
style="width: 28px"
v-if="action == 2"
@click="showProjectPub"
>
{{ act }}
</div>
<!-- 显示提交审核 -->
<div <div
class="pub" class="pub"
style="width: 56px" style="width: 56px"
@@ -50,6 +52,34 @@
> >
{{ act }} {{ act }}
</div> </div>
<!-- 显示撤回审核 -->
<div
class="pub"
style="width: 56px"
v-if="action == 1"
@click="showRecallReviewModal"
>
{{ act }}
</div>
<!-- 显示发布 -->
<div
class="pub"
style="width: 28px"
v-if="action == 2"
@click="showProjectPub"
>
{{ act }}
</div>
<!-- 显示撤回发布 -->
<div
class="pub"
style="width: 56px"
v-if="action == 3"
@click="showBackModal"
>
{{ act }}
</div>
<!-- 项目提交审核弹窗 --> <!-- 项目提交审核弹窗 -->
<a-modal <a-modal
v-model:visible="reviewModal" v-model:visible="reviewModal"
@@ -74,7 +104,7 @@
<div class="del_btn btn1" @click="closeReviewModal"> <div class="del_btn btn1" @click="closeReviewModal">
<div class="btnText">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2" @click="recallReviewProject"> <div class="del_btn btn2" @click="submitReviewProject">
<div class="btnText">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
@@ -494,7 +524,7 @@
<div class="time"> <div class="time">
<div class="timetext">开始时间</div> <div class="timetext">开始时间</div>
<div class="timetext"> <div class="timetext">
{{ item.startTime !== null ? item.startTime : "" }} {{ item.startTime !== null ? item.startTime : "-" }}
</div> </div>
</div> </div>
<div class="progress"> <div class="progress">
@@ -1725,7 +1755,37 @@
</div> </div>
</div> </div>
</a-modal> </a-modal>
<!-- 项目撤回审核弹窗 -->
<a-modal
v-model:visible="recallReviewModal"
:footer="null"
:closable="false"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeRecallReviewModal"></div>
</div>
<div class="body">
<span>您确定要撤回审核吗</span>
<div class="back"></div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeRecallReviewModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="recallReviewProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 结束项目弹窗 --> <!-- 结束项目弹窗 -->
<a-modal <a-modal
v-model:visible="stopModal" v-model:visible="stopModal"
@@ -2028,6 +2088,7 @@ export default {
releaseProjectName: null, //发布的项目名称 releaseProjectName: null, //发布的项目名称
releaseProjectTime: null, //发布的项目时间 releaseProjectTime: null, //发布的项目时间
backModal: false, //撤回弹窗 backModal: false, //撤回弹窗
recallReviewModal: false, //撤回审核
closeBack: false, closeBack: false,
stopModal: false, stopModal: false,
closeStop: false, closeStop: false,
@@ -2873,7 +2934,7 @@ export default {
state.reviewModal = true; state.reviewModal = true;
}; };
const recallReviewProject = () => { const submitReviewProject = () => {
let obj = { let obj = {
projectId: state.projectId, projectId: state.projectId,
type: 3, type: 3,
@@ -2887,6 +2948,8 @@ export default {
message.success("提交成功"); message.success("提交成功");
state.reviewModal = false; state.reviewModal = false;
getTaskInfo(); getTaskInfo();
// getTask();
reget();
}) })
.catch((err) => { .catch((err) => {
console.log("提交失败", err); console.log("提交失败", err);
@@ -3802,6 +3865,7 @@ export default {
getTask({ getTask({
projectId: state.projectId, projectId: state.projectId,
}).then((res) => { }).then((res) => {
console.log("获取项目状态", res);
state.action = res.data.data.projectInfo.status; state.action = res.data.data.projectInfo.status;
state.act = state.act =
state.action == 2 state.action == 2
@@ -3809,7 +3873,9 @@ export default {
: state.action == 0 : state.action == 0
? "提交审核" ? "提交审核"
: state.action == 1 : state.action == 1
? "撤回" ? "撤回审核"
: state.action == 3
? "撤回发布"
: state.action == -1 : state.action == -1
? "" ? ""
: "-"; : "-";
@@ -3852,9 +3918,10 @@ export default {
console.log("点击发布"); console.log("点击发布");
let obj = { let obj = {
projectId: state.releaseProjectId, projectId: state.releaseProjectId,
type: 4,
}; };
apiproj apiproj
.releaseProject(obj) .handleProject(obj)
.then((res) => { .then((res) => {
console.log("发布成功", res); console.log("发布成功", res);
message.destroy(); message.destroy();
@@ -3878,7 +3945,7 @@ export default {
const recallProject = () => { const recallProject = () => {
let obj = { let obj = {
projectId: state.projectId, projectId: state.projectId,
type: 0, type: -4,
}; };
apiproj apiproj
.handleProject(obj) .handleProject(obj)
@@ -3893,6 +3960,36 @@ export default {
console.log("撤回失败", err); console.log("撤回失败", err);
}); });
}; };
//打开撤回审核弹窗
const showRecallReviewModal = () => {
state.recallReviewModal = true;
};
//确认撤回审核
const recallReviewProject = () => {
let obj = {
projectId: state.projectId,
type: -3,
};
console.log("撤回成功obj", obj);
apiproj
.handleProject(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.recallReviewModal = false;
reget();
})
.catch((err) => {
console.log("撤回成功", err);
});
};
//关闭提交审核弹窗
const closeRecallReviewModal = () => {
state.recallReviewModal = false;
};
//关闭结束弹窗 //关闭结束弹窗
const closeStopModal = () => { const closeStopModal = () => {
state.stopModal = false; state.stopModal = false;
@@ -4162,7 +4259,10 @@ export default {
checkedClose, checkedClose,
submitExamine, submitExamine,
closeReviewModal, closeReviewModal,
showRecallReviewModal,
recallReviewProject, recallReviewProject,
closeRecallReviewModal,
submitReviewProject,
showCodeModel, showCodeModel,
showCodeModel2, showCodeModel2,
checkType, checkType,
@@ -5594,7 +5694,7 @@ export default {
//height: 71px; //height: 71px;
margin-left: 12px; margin-left: 12px;
margin-right: 50px; margin-right: 50px;
width: 120px;
.iconame { .iconame {
//position: absolute; //position: absolute;
color: #4f5156; color: #4f5156;
@@ -5607,7 +5707,10 @@ export default {
color: #999ba3; color: #999ba3;
font-size: 14px; font-size: 14px;
margin-left: 12px; margin-left: 12px;
width: 83px; width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
@@ -5643,7 +5746,7 @@ export default {
//height: 71px; //height: 71px;
flex-grow: 1; flex-grow: 1;
margin-right: 50px; margin-right: 50px;
width: 100px;
.timetext { .timetext {
font-size: 14px; font-size: 14px;
color: #999ba3; color: #999ba3;

View File

@@ -148,7 +148,7 @@
<!-- <img class="img2" src="../../assets/images/projectadd/keep.png" /> <!-- <img class="img2" src="../../assets/images/projectadd/keep.png" />
<div class="pub">保存</div> <div class="pub">保存</div>
<div class="line"></div> --> <div class="line"></div> -->
<router-link to="/taskpage"> <router-link to="/libraryAdd">
<div style="display: flex"> <div style="display: flex">
<img <img
class="img2" class="img2"
@@ -824,6 +824,15 @@
</button> </button>
</div> </div>
</div> </div>
<div
class="aeLoading"
:style="{ display: addLoading ? 'flex' : 'none' }"
>
<a-spin
:spinning="addLoading"
:tip="updateStageID ? '修改中...' : '添加中...'"
/>
</div>
</a-modal> </a-modal>
</div> </div>
<!-- 确认添加阶段弹窗 --> <!-- 确认添加阶段弹窗 -->
@@ -1301,6 +1310,8 @@ export default {
deleteStageModal: false, //删除阶段弹窗 deleteStageModal: false, //删除阶段弹窗
unlockModeVisible: false, //切换模式抽屉 unlockModeVisible: false, //切换模式抽屉
addLoading: false, //添加、编辑阶段动画
}); });
console.log("projectTemplateId", state.projectTemplateId); console.log("projectTemplateId", state.projectTemplateId);
const selectProjectName = (value, index) => { const selectProjectName = (value, index) => {
@@ -1377,7 +1388,13 @@ export default {
}; };
array.push(obj); array.push(obj);
}); });
state.level = array; console.log(array)
if(array[0].id=='0'){
state.level = [];
}else{
state.level = array;
}
}; };
const tableDataFunc = () => { const tableDataFunc = () => {
@@ -1514,11 +1531,12 @@ export default {
api api
.templateDetail(localStorage.getItem("projectTemplateId")) .templateDetail(localStorage.getItem("projectTemplateId"))
.then((res) => { .then((res) => {
console.log('获取的任务列表信息',res)
if (res.status == 200) { if (res.status == 200) {
console.log("22222", res.data.data.stageList); console.log("22222", res.data.data.stageList);
state.projectTitle = res.data.data.projectTemplateInfo.name; state.projectTitle = res.data.data.projectTemplateInfo.name;
state.picUrl = res.data.data.projectTemplateInfo.picUrl; state.picUrl = res.data.data.projectTemplateInfo.picUrl;
let leng = res.data.data.stageList.length; let leng = res.data.data.stageList[0].name!==null ?res.data.data.stageList.length:0;
if (leng > 0) { if (leng > 0) {
let stage = localStorage.getItem("templateStageId") let stage = localStorage.getItem("templateStageId")
? localStorage.getItem("templateStageId") ? localStorage.getItem("templateStageId")
@@ -1709,6 +1727,7 @@ export default {
message.destroy(); message.destroy();
return message.warning("请输入阶段名称"); return message.warning("请输入阶段名称");
} }
state.addLoading = true;
let obj = { let obj = {
name: state.valuesname, name: state.valuesname,
projectTemplateId: localStorage.getItem("projectTemplateId"), projectTemplateId: localStorage.getItem("projectTemplateId"),
@@ -1726,6 +1745,7 @@ export default {
message.destroy(); message.destroy();
message.success("修改阶段成功"); message.success("修改阶段成功");
getTask(); getTask();
state.addLoading = false;
}) })
.catch((err) => { .catch((err) => {
console.log("添加阶段失败", err); console.log("添加阶段失败", err);

View File

@@ -230,46 +230,46 @@ export default {
number: null, number: null,
selectTime: null, selectTime: null,
tableData: [ tableData: [
{ // {
key: 1, // key: 1,
number: 1, // number: 1,
manager: "产品经理评估", // manager: "产品经理评估",
state: "已发布", // state: "已发布",
creater: "管理员", // creater: "管理员",
pubtime: "2022-07-20 9:03", // pubtime: "2022-07-20 9:03",
cretime: "2022-07-20 9:03", // cretime: "2022-07-20 9:03",
haspub: false, // haspub: false,
}, // },
{ // {
key: 2, // key: 2,
number: 2, // number: 2,
manager: "高级产品经理评估", // manager: "高级产品经理评估",
state: "已发布", // state: "已发布",
creater: "管理员", // creater: "管理员",
pubtime: "2022-07-20 9:03", // pubtime: "2022-07-20 9:03",
cretime: "2022-07-20 9:03", // cretime: "2022-07-20 9:03",
haspub: false, // haspub: false,
}, // },
{ // {
key: 3, // key: 3,
number: 3, // number: 3,
manager: "管理者进阶腾飞班管理者进阶腾飞班评估", // manager: "管理者进阶腾飞班管理者进阶腾飞班评估",
state: "待发布", // state: "待发布",
creater: "管理员", // creater: "管理员",
pubtime: "2022-07-20 9:03", // pubtime: "2022-07-20 9:03",
cretime: "2022-07-20 9:03", // cretime: "2022-07-20 9:03",
haspub: true, // haspub: true,
}, // },
{ // {
key: 4, // key: 4,
number: 4, // number: 4,
manager: "HR评估", // manager: "HR评估",
state: "已结束", // state: "已结束",
creater: "管理员", // creater: "管理员",
pubtime: "2022-07-20 9:03", // pubtime: "2022-07-20 9:03",
cretime: "2022-07-20 9:03", // cretime: "2022-07-20 9:03",
haspub: true, // haspub: true,
}, // },
], ],
currentPage: 1, currentPage: 1,
tableDataTotal: 0, tableDataTotal: 0,