评估接口+课程部分

This commit is contained in:
kclf
2022-11-08 15:49:53 +08:00
parent 57509c7e8c
commit 5a647ef48a
25 changed files with 17428 additions and 1199 deletions

View File

@@ -5,54 +5,44 @@
<div class="filter">
<div class="filterItems">
<div class="select">
<a-select
<a-input
v-model:value="projectName"
style="width: 270px"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入评估名称"
:options="projectNameList"
@change="selectProjectName"
allowClear
showSearch
></a-select>
/>
</div>
<div class="select">
<a-select
v-model:value="projectName"
v-model:value="projectStatus"
style="width: 270px"
placeholder="请选择状态"
:options="projectStateList"
@change="selectProjectState"
@change="handleProjectState"
allowClear
showSearch
></a-select>
</div>
<div class="select">
<!-- <a-date-picker
v-model="selectTime"
type="date"
placeholder="时间"
style="width: 270px"
/> -->
<a-range-picker
v-model:value="value2"
v-model:value="projectTime"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
<div style="display: flex; margin-bottom: 20px">
<div class="btn btn1">
<div class="btn btn1" @click="handleSearch">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btnn btn2">
<div class="btnn btn2" @click="handleRest">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
<div class="btns">
<div class="btn btn3" @click="handleOut">
<div class="btns">
<div class="btn btn3" @click="handleNew">
<div class="search"></div>
<div class="btnText">创建评估</div>
</div>
@@ -81,11 +71,12 @@
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
<!-- 表格 -->
<a-modal
v-model:visible="out"
v-model:visible="newNext"
:footer="null"
:closable="false"
style="margin-top: 250px"
@@ -94,8 +85,11 @@
<div class="out">
<div class="top">
<img class="topimg" src="../../assets/images/courseManage/add1.png" />
<div class="topc">创建评估</div>
<div @click="handleOut" style="margin-left: 500px; cursor: pointer">
<div class="topc">{{ !assessmentId ? "创建" : "编辑" }}评估</div>
<div
style="margin-left: 500px; cursor: pointer"
@click="handleCancel"
>
<img
style="width: 20px; height: 20px"
src="../../assets/images/basicinfo/close.png"
@@ -107,7 +101,7 @@
<div class="inname">评估名称</div>
<div class="in">
<a-input
v-model:value="valuen"
v-model:value="assessmentName"
show-count
:maxlength="15"
style="border-radius: 8px"
@@ -115,8 +109,10 @@
</div>
</div>
<div class="btn">
<button class="samtn btn1" @click="handleOut">取消</button>
<button class="samtn btn2" @click="handleOut">确定</button>
<button class="samtn btn1" @click="handleCancel">取消</button>
<button class="samtn btn2" @click="handleNext">
{{ !assessmentId ? "下一步" : "确定" }}
</button>
</div>
</div>
</div></a-modal
@@ -128,15 +124,15 @@
:closable="closableQR"
wrapClassName="DelModal"
style="margin-top: 400px"
@cancel="delete_exit"
@cancel="handleCancelModal"
>
<div class="delete" :style="{ display: delete_hs ? 'block' : 'none' }">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<img src="@/assets/images/coursewareManage/QR.png" alt="">
<img src="@/assets/images/coursewareManage/QR.png" alt="" />
<span style="margin-left: 9px">提示</span>
<div class="close_exit" @click="delete_exit"></div>
<div class="close_exit" @click="handleCancelModal"></div>
</div>
<div class="body">
<div :style="{ display: del_hs ? 'block' : 'none' }">
@@ -157,10 +153,10 @@
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
<div class="btnText" @click="handleCancelModal">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
<div class="btnText" @click="handleSure">确定</div>
</div>
</div>
</div>
@@ -171,50 +167,66 @@
</template>
<script>
import { reactive, toRefs, onMounted, ref } from "vue";
// import { message } from "ant-design-vue";
import {
queryResearchDetailList,
editAssessmentName,
editReleaseStatus,
deleteResearch,
createResearch,
} from "@/api/indexResearch";
import { traverseArr } from "../../utils/utils";
import { useRouter } from "vue-router";
import { toDate } from "../../api/method.js";
import store from "@/store";
import { message } from "ant-design-vue";
export default {
name: "learningPath",
setup() {
const router = useRouter();
const state = reactive({
projectNameList: [
{
id: 1,
value: "项目一",
label: "项目一",
},
{
id: 2,
value: "项目二",
label: "项目二",
},
{
id: 3,
value: "项目三",
label: "项目三",
},
{
id: 4,
value: "项目四",
label: "项目四",
},
],
// projectNameList: [
// {
// id: 1,
// value: "项目一",
// label: "项目一",
// },
// {
// id: 2,
// value: "项目二",
// label: "项目二",
// },
// {
// id: 3,
// value: "项目三",
// label: "项目三",
// },
// {
// id: 4,
// value: "项目四",
// label: "项目四",
// },
// ],
projectStateList: [
{
id: 1,
value: "发布",
label: "已发布",
value: 1,
label: "发布", //发布
},
{
id: 2,
value: "发布",
label: "待发布",
value: 2,
label: "发布", //撤回
},
{
id: 3,
value: "已结束",
value: 3,
label: "已结束",
},
],
out: false,
projectName: "",
projectStatus: null,
projectTime: "",
newNext: false,
number: null,
selectTime: null,
tableData: [
@@ -260,10 +272,14 @@ export default {
},
],
currentPage: 1,
tableDataTotal: 100,
tableDataTotal: 0,
pageSize: 10,
value1: " ",
valuen: "",
// value1: " ",
assessmentId: "", //区分新建/编辑
assessmentName: "",
copyItem: {},
value2: ref(),
valueE: ref(" "),
valueEE: ref(" "),
@@ -284,6 +300,10 @@ export default {
width: 100,
align: "center",
className: "h",
customRender: ({ index }) => {
//{ text, record, index, column }
return index + 1;
},
},
{
title: "名称",
@@ -293,24 +313,38 @@ export default {
align: "center",
ellipsis: true,
className: "h",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "状态",
dataIndex: "state",
// width: "30%",
key: "state",
width: 100,
align: "center",
className: "h",
customRender: ({ record }) => {
switch (record.releaseStatus) {
case "1":
return "待发布";
case "2":
return "已发布";
case "3":
return "已结束";
}
},
},
{
title: "创建人",
dataIndex: "creater",
// width: "30%",
key: "creater",
width: 100,
align: "center",
className: "h",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "发布时间",
@@ -319,6 +353,9 @@ export default {
width: 180,
align: "center",
className: "h",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "创建时间",
@@ -327,6 +364,9 @@ export default {
width: 180,
align: "center",
className: "h",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "操作",
@@ -340,74 +380,151 @@ export default {
return columns;
};
const getTableDate = () => {
let data = state.tableData;
const getTableDate = async () => {
// let data = state.tableData;
let startTime,
endTime = "";
if (state.projectTime) {
startTime = toDate(
new Date(state.projectTime[0].$d).getTime() / 1000,
"Y-M-D"
);
endTime = toDate(
new Date(state.projectTime[1].$d).getTime() / 1000,
"Y-M-D"
);
}
let res = await queryResearchDetailList({
pageNo: state.currentPage,
pageSize: state.pageSize,
releaseStatus: state.projectStatus,
assessmentName: state.projectName,
searchEndTime: endTime,
searchStartTime: startTime,
});
const { rows, total } = res.data.data;
state.tableDataTotal = total;
const data = traverseArr(
rows,
{
key: "assessmentId",
number: "assessmentId",
manager: "assessmentName",
state: "releaseStatus",
creater: "createUser",
pubtime: "releaseTime",
cretime: "createTime",
haspub: "assessmentId",
},
true
);
data.map((value) => {
{
//单层项目
value.opacation = (
<div class="operation">
{value.state === "已发布" ? (
{value.state === "2" ? (
<div class="fb">
<router-link to="/managepage" class="jc">
<div
class="jc"
onClick={() => {
handleToManagepage(value, "/managepage");
}}
>
管理
</router-link>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.copy_hs = true;
}}>复制</div>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.back_hs = true;
}}>撤回</div>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.over_hs = true;
}}>结束</div>
</div>
<div
class="jc"
onClick={() => {
handleCopy(value);
}}
>
复制
</div>
<div
class="jc"
onClick={() => {
handleStatuts(value, "2");
}}
>
撤回
</div>
<div
class="jc"
onClick={() => {
handleStatuts(value, "3");
}}
>
结束
</div>
</div>
) : (
<div></div>
)}
{value.state === "待发布" ? (
{value.state === "1" ? (
<div class="fb">
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.pub_hs = true;
}}>发布</div>
<router-link to="/researchadd" class="jc">
<div
class="jc"
onClick={() => {
handleStatuts(value, "1");
}}
>
发布
</div>
<div
class="jc"
onClick={() => {
handleToResearchadd(value, "/researchadd");
}}
>
基础信息
</router-link>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.copy_hs = true;
}}>复制</div>
<div class="jc">编辑</div>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.del_hs = true;
}}>删除</div>
</div>
<div
class="jc"
onClick={() => {
handleCopy(value);
}}
>
复制
</div>
<div
class="jc"
onClick={() => {
handleEditName(value);
}}
>
编辑
</div>
<div
class="jc"
onClick={() => {
handleDel(value);
}}
>
删除
</div>
</div>
) : (
<div></div>
)}
{value.state === "已结束" ? (
{value.state === "3" ? (
<div class="fb">
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.copy_hs = true;
}}>复制</div>
<div class="jc"
onClick={()=>{
state.delete_hs = true;
state.del_hs = true;
}}>删除</div>
<div
class="jc"
onClick={() => {
handleCopy(value);
}}
>
复制
</div>
<div
class="jc"
onClick={() => {
handleDel(value);
}}
>
删除
</div>
</div>
) : (
<div></div>
@@ -419,26 +536,149 @@ export default {
state.tableData = data;
};
getTableDate();
onMounted(() => {
// console.log("执行");
});
const selectProjectName = (value, index) => {
console.log("value", value, index);
const handelChangePage = (page, pageSize) => {
state.currentPage = page;
state.pageSize = pageSize;
getTableDate();
};
const selectProjectState = (value, index) => {
console.log("value", value, index);
const handleSearch = () => {
getTableDate();
};
const expandTable = (e, a) => {
// console.log("惦记了");
console.log("e", e, a);
const handleRest = () => {
state.projectName = "";
state.projectStatus = null;
state.projectTime = "";
getTableDate();
};
const handleOut = () => {
state.out = !state.out;
const handleProjectState = (value) => {
state.projectStatus = value;
};
const chooseImg = (id) => {
console.log(id);
const handleNew = () => {
state.newNext = true;
};
const delete_exit = () => {
const handleEditName = (item) => {
state.assessmentId = item.assessmentId;
state.assessmentName = item.assessmentName;
state.newNext = true;
};
const handleNext = () => {
if (!state.assessmentId) {
if (!state.assessmentName) {
message.error("请输入评估名称");
return false;
}
store.commit("SET_assessmentName", state.assessmentName);
router.push("/researchadd");
handleCancel();
} else {
editAssessmentName({
assessmentId: state.assessmentId,
assessmentName: state.assessmentName,
}).then((res) => {
if (res.data.code === 200) {
getTableDate();
handleCancel();
}
});
}
};
const handleCancel = () => {
state.assessmentId = "";
state.assessmentName = "";
// store.commit("SET_assessmentName", "");
state.newNext = false;
};
const handleStatuts = (item, status) => {
state.assessmentId = item.assessmentId;
switch (status) {
case "1":
// 发布
state.delete_hs = true;
state.pub_hs = true;
break;
case "2":
// 撤回
state.delete_hs = true;
state.back_hs = true;
break;
case "3":
// 结束
state.delete_hs = true;
state.over_hs = true;
break;
}
};
const handleDel = (item) => {
state.assessmentId = item.assessmentId;
state.delete_hs = true;
state.del_hs = true;
};
const handleCopy = (item) => {
state.assessmentId = item.assessmentId;
state.copyItem = item;
state.delete_hs = true;
state.copy_hs = true;
};
const handleSure = () => {
// 发布
if (state.pub_hs) {
editReleaseStatus({
assessmentId: state.assessmentId,
releaseStatus: "2",
}).then((res) => {
console.log(res);
handleCancelModal();
getTableDate();
});
}
// 撤回
if (state.back_hs) {
editReleaseStatus({
assessmentId: state.assessmentId,
releaseStatus: "1",
}).then((res) => {
console.log(res);
handleCancelModal();
getTableDate();
});
}
// 结束
if (state.over_hs) {
editReleaseStatus({
assessmentId: state.assessmentId,
releaseStatus: "3",
}).then((res) => {
console.log(res);
handleCancelModal();
getTableDate();
});
}
// 删除
if (state.del_hs) {
deleteResearch({
assessmentId: Number(state.assessmentId),
}).then((res) => {
console.log(res);
handleCancelModal();
getTableDate();
});
}
// 复制
if (state.copy_hs) {
let resultPost = restData(state.copyItem);
console.log("resultPost");
console.log(resultPost);
createResearch(resultPost).then((res) => {
console.log(res);
handleCancelModal();
getTableDate();
});
}
};
const handleCancelModal = () => {
state.assessmentId = "";
state.delete_hs = false;
state.del_hs = false;
state.over_hs = false;
@@ -446,16 +686,130 @@ export default {
state.back_hs = false;
state.pub_hs = false;
};
const handleToManagepage = (item, path) => {
router.push({
path: path + "/" + item.assessmentId,
});
};
const handleToResearchadd = (item, path) => {
// console.log("item.assessmentId");
// console.log(item.assessmentId);
// console.log(item);
router.push({
path: path + "/" + item.assessmentId,
});
};
onMounted(() => {
// console.log("执行");
});
// 转换成后端格式
const restData = (obj) => {
const resultArr = {
assessmentName: obj.assessmentName,
assessmentMark: obj.assessmentMark,
assessmentSingleChoiceDtoList: [],
assessmentMultipleChoiceDtoList: [],
assessmentEssayQuestionDtoList: [],
assessmentScoringQuestionDtoList: [],
};
if (obj.singleStemVoList.length) {
let single = obj.singleStemVoList;
let singleArr = [];
single.forEach((item) => {
item.assessmentSingleChoiceVoList.forEach((itm) => {
singleArr.push({
singleStemName: item.singleStemName,
questionType: item.questionType,
orderNumber: item.orderNumber,
optionOrderNum: itm.optionOrderNum,
singleOptionName: itm.singleOptionName,
singleOptionPictureAddress: itm.singleOptionPictureAddress,
});
});
});
resultArr.assessmentSingleChoiceDtoList = singleArr;
}
if (obj.multipleStemVoList.length) {
let multi = obj.multipleStemVoList;
let multiArr = [];
multi.forEach((item) => {
item.multipleChoiceVoList.forEach((itm) => {
multiArr.push({
multipleStemName: item.multipleStemName,
questionType: item.questionType,
orderNumber: item.orderNumber,
optionOrderNum: itm.optionOrderNum,
multipleOptionName: itm.multipleOptionName,
multipleOptionPictureAddress: itm.multipleOptionPictureAddress,
});
});
});
resultArr.assessmentMultipleChoiceDtoList = multiArr;
}
if (obj.essayQuestionVoList.length) {
let Ques = obj.essayQuestionVoList;
let QuesArr = [];
Ques.forEach((item) => {
QuesArr.push({
questionType: item.questionType,
assessmentQaTitle: item.assessmentQaTitle,
assessmentQaDescribe: item.assessmentQaDescribe,
orderNumber: item.orderNumber,
});
});
resultArr.assessmentEssayQuestionDtoList = QuesArr;
}
if (obj.scoringQuestionVoList.length) {
let scor = obj.scoringQuestionVoList;
let scorsArr = [];
scor.forEach((item) => {
scorsArr.push({
questionType: item.questionType,
assessmentScTitle: item.assessmentScTitle,
assessmentMinScore: item.assessmentMinScore,
assessmentMaxScore: item.assessmentMaxScore,
weightScale: item.weightScale,
orderNumber: item.orderNumber,
});
});
resultArr.assessmentScoringQuestionDtoList = scorsArr;
}
console.log(111);
console.log(resultArr);
return resultArr;
};
const expandTable = (e, a) => {
// console.log("惦记了");
console.log("e", e, a);
};
const chooseImg = (id) => {
console.log(id);
};
return {
...toRefs(state),
selectProjectName,
selectProjectState,
handleProjectState,
expandTable,
handleOut,
tableDataFunc,
chooseImg,
getTableDate,
delete_exit,
handleCopy,
handleSure,
handleCancelModal,
handelChangePage,
handleSearch,
handleRest,
handleCancel,
handleNext,
handleNew,
handleEditName,
handleStatuts,
handleDel,
handleToManagepage,
handleToResearchadd,
};
},
};
@@ -593,7 +947,6 @@ export default {
height: 38px;
background: #409eff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
@@ -721,13 +1074,13 @@ export default {
flex-direction: column;
th.ant-table-cell {
background-color:#EFF4FC !important;
text-align: center;
color: #999BA3;
}
td.ant-table-cell {
text-align: center;
}
background-color: #eff4fc !important;
text-align: center;
color: #999ba3;
}
td.ant-table-cell {
text-align: center;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
@@ -805,16 +1158,16 @@ export default {
padding-left: 26px;
font-size: 16px;
.del-icon {
width: 16px;
height: 16px;
position: relative;
margin-right: 10px;
img{
width: 16px;
height: 16px;
position: relative;
margin-right: 10px;
img {
width: 100%;
height: 100%;
position: absolute;
top:0px;
left:0px;
top: 0px;
left: 0px;
background-size: 100% 100%;
}
}